From 4e772c077bd3aaebc0cd5d0edbb18a470f13896a Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Wed, 16 Oct 2019 10:44:51 -0700 Subject: [PATCH 001/105] Updates Roxas --- External/Roxas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/External/Roxas b/External/Roxas index 89510d7..0666fee 160000 --- a/External/Roxas +++ b/External/Roxas @@ -1 +1 @@ -Subproject commit 89510d73ca548da6094348bc2c7b7f1887475d55 +Subproject commit 0666fee9ef5227592e152a9c81a2eaa1f4305f32 From 763e410ce93f91a45fdece2a2d4f85f4f452acda Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 10 Dec 2019 12:30:33 -0800 Subject: [PATCH 002/105] Fixes broken OpenVGDB cover art URLs Host moved from http://img.gamefaqs.net to https://gamefaqs1.cbsistatic.com --- Delta/Supporting Files/Info.plist | 15 --------------- Resources/openvgdb.sqlite | Bin 2663424 -> 2966528 bytes 2 files changed, 15 deletions(-) diff --git a/Delta/Supporting Files/Info.plist b/Delta/Supporting Files/Info.plist index c5c64f4..7ad58ea 100644 --- a/Delta/Supporting Files/Info.plist +++ b/Delta/Supporting Files/Info.plist @@ -185,21 +185,6 @@ LSSupportsOpeningDocumentsInPlace - NSAppTransportSecurity - - NSExceptionDomains - - gamefaqs.net - - NSIncludesSubdomains - - NSTemporaryExceptionAllowsInsecureHTTPLoads - - NSTemporaryExceptionMinimumTLSVersion - TLSv1.1 - - - NSPhotoLibraryUsageDescription Press "OK" to allow Delta to use images from your Photo Library as game artwork. UIBackgroundModes diff --git a/Resources/openvgdb.sqlite b/Resources/openvgdb.sqlite index e9dc74bbb703786089de83590effd35bcda28400..d2d5345d2a4ceff505148bde6f4ff019c959d17c 100755 GIT binary patch delta 1130345 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 ^e$(iL#4Ar)oOIDLbVLvbSAiED4kJ6)Xod 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�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

Vm(`1faOL7l{qnv-x*IONO5GkXK z-is~jD6g<LE47 z9rUolt|e`^0AFPGH@;!&FA@nU;C#5RD1~+{3A!A7k$b=KjZi~mOh0zeU3dFBXdyud zE&iM2eHhOFu7}JV_1x&_QJ+Ys91jj#@^L(DZ^+Gu&sqRRvkee7olB=mqpUyVn;tE> zGeI-&HcL_a`vzmD(L=urx3UA;%i8_gl@3US^p;xEamWYoKb)J779V2X4t6nAqSUhZ zh_3{73v0<#5e~UuUU*R-55-1VmK%FJDd0{=DY9!xSuMfB7=6??vUPJ?d=$}n#da-e zs^u8?eRA)A5a)EqQ5A~t8UztZTssDWTs%jPsv?O;f9o3;gTXPYE)No+Z+)X$AKU}q z!bQP4C#AIr5^sI0N|);Voo_K}men$*0LYyGu9oH_djkxvx0A%_QVi?iPjLq3tMWgRo4=E7?~2vIcvt=C>qkj)Kal)=+a=Q@lD})4WXyKEmPAen-*5bX zd}-=gVjU>VQc}9RLOxbI$sDfsd;jAbwMIGD4SYzL;%#i;jd221oibDmtAgb6~r&4jK zF0$;}wzLVYWy$MmeUlJ6SW6lN0cP^%T2-ReTeWx^%nWHJnwjrvRc2-^#)pK3TGC8B zN1m5I)T-{em-9Q}%peZ}#7SIQg7@ru=Q^>zk`U2*=*Ntgbd0b z$!#5kA}M2U2eIJV;bI&jS!&4^48xN?2I+y|dN^Q}JJl)W*ItEZ!g7);fD?1=??vlA z%(X{F{M6-kEtvxHSszB9HV?t0l@{tpuy)NX^|3Ff>mr8-DrrWf{ma{Rp-3foT^I44 zAi>s78CCMAE)>P!wi%*dCInVE0{-_;v6noA=}4*>%2(c9+o+khnNv_3^j#oVcN*{gCioReIQxNTc67qpM0*zF6NUbiSP5z>tNJMq& zT7rdeo#oT*gopb2%)10mke24oUw{?@h;+cemd~~m9y${{Wtbg3F5Cq-y=~CLo8DKs zh2`b&bc#xqzK%1?PP8X{tz_rQDz9iSE(79QOUR#C*5|pK3Q;VxoaKyV)uAaNTy+iZ$~g^Gb7)@fEI9 zv-K}f7HTj6`eL&{t7O@R+H)gI_2}uB>gZE6HaxLb;j<>Kucs2HF)^Y80v&44kE;8@yE>U4BjR|8J`b|IM1PN0zrFGtaG04DA!Q*;d0&i(N0dk{ zSslXR-$hr>jFSBA%G6EyU5v;`_q6OzvFhZ?&Z1vJEN+3FwIWUX17feXnS+e?jGr5+ z`oHw+v?8<-`?)q+CUgge_xIL$ce(Q8uOs)uL$ldA z9Z(HL^?GFQZXy?9TXpRq$#v7{W!<=zjl8j&a9usFG82qLMwQV`zgZunJ$wA>fqdRN zfhVlR%SNVXchOrO?kyC3#xCrGBMX9r?T|i2T^P0T3*N9lgDe@X#UM z>Bx(Q(dq6S=MuY)+)X~TRCO0g>VuYA;E6zsi*3QTCvU@V-!t+h8oR5eZCDR6pVLO# zgo0;!6@0EoWWLFeP_V~I!L`b(2!SD_^`-mMUBi!srR%8qH2qWkJiV{xGq2J9Wh^i) zoRCcLUvJkD2j_{^xtAEK#;r*ZI`-3~Q|n#EX^a1y@IsgtBR#WYLlI*i49N~h$o>#(4oY8_tRPb`Co#q^cadj-Wqyy+A^4XbZX@58Hk`hfOv8 z&ZrotMam~NBhBRoMJ_8}vC7;M^9%I>-FdQmHI>!WlYd2G4Ls8Xze(1xwpSK zt97#>21GV-rA+HDwgDumBjC?(ot_)207*49zq~BJNE!Vqsfgl4|0$mKzloCypm=KA z#D64$i=Gk@WkV9%}z|VE=^!ZkYl*#7@Mw~zb z^F9bCoe)+%_r&&hoM(4>Sgu`1gdU|B17oQUv;=0q6pf%yjl<-(NZE+$B_RreIN8mJ z;?+dRKs_+#_-6KG`{d0&fzTxVKd`bnntrwU5A$;KJaeq^nQ@hoW%%?I?FA{W>=*2+ zX{B}@5zYck#yq)jm>Apo;u|##wgNH)Hz6bE4-5`F9w0!TBxMTw(zc3n2q&jbp0#1ezXD~~G1Su%V7-tNAj381S(%n)F8VM-#q+Jq; zqs`u4f&=rEDqAGJbsrL0B1~N2YR!dsA)3<^p88(zzMtI?6Hd z6*+R*aFK!7+Bzb&h*Xp}3>U-HkRCy32S;$H_vhPn#A_Lo`JdrJ5$!m3goE(bMUmM+ zzI=0pP>?!5A0Z}#g{>p012k8@K0=6Ax5l244lq~8j0ga8fi=06}jxq;l9;2R7Zq(>cz zBnq!+gK+d@kCf#|c9-Rdc!a3-`hYpx_?PhuV}sESu|U(bf1{=a;~+QKb?4%V2v`Yh zTOuC}iXrNSz%mrX0W#d>c30YU=Rnb9yrRvcg|F3DBySpxvwfLeM?!|BE1w;$;-U^w z0?UA$3ztEUM8z_YM-n58ts){3D3#A9sumk%_!ROpe9F^ao-&aVOsMHL1v>&eYTcKtq-bJz88-Jz(28bVvF9?}XRA!S$8D5CWAVc#}^b_;Zy7h=2 zUQ9eeu^)HhNo1W3)XW=E5#q1LUSlQJ**$3S_D}RpAGpr0C+G_YDRBOh66sI!GDlov zkps$|kO5U>NvP^PIW|f3w@!1PK6(9>PbZ0ZR5z$6OM?1<@<5WX)bEIa-gMGZ)7(zl z3cH@v30=t@@(RCd*>3h@LBahbc>)=EnP0U8pP>Z&9ug(+d*lJX3Qg-AfW%_Ej-*H; zB*p}UqFH)gAYxO=U2vJ-8W0|eVzDHaWB=W?L}33(VbK2n5K!6w#2`iri5*dig)ld* z8wyHPwbvITSl|e(Rfji>AN4uZ$rzeYja`eyhisU!%&@KJ%~WJ^8YJmifH- zg!w!3e)Dd<3wlvXFn2ZPZoNG&CKU*Y+-R;fmuXGrB6BtZ+ut=OX#YU~!i#9O^{DZ% z@oVh}3O?RwTw`2jTx1*uP+WB`8gXnk3XE085_ClRw=vV0Vq_QrW0Y~g7;FqMdK=x0 zj)rc01Z3$ul>GaL{;7GU{x|(C{V)0-^(W2FNVI$ayWv*-I{hlMoqn-y>*wp0dYRFv z7a;|6xxUyGWN_Sa}` zqovzF42Jjt`-i^x%XjS`;0Jej$NoXX&-&ZnQ`uYg_p6YE)ZtD0`-S-98}|28@bS9+ zeJVa)v%mM@<5l~6KJXR$d)!+({KfumCq7=bzbnJXpY89~<$K4pKK zg^wrgZ`1Jcg#GPkd^~P{I}jg_+23*$kJ{g!fsa4fNBQ_i?4#@O@q7E|5`6s5J~|s8 zzqOA}z{g(u=n#B7Y#;4|kB97|lzY%VaxOj|u#e!m9qzY}@Ud0**+=H%^Vjx~srb0p zK9Y!!U)e`+es;LWKGG8(ciTrg;o~m*@CEp|(>`2`k2~zcYw&TqeK-dnx7mlMW1jT%8AI0NiKC+MEXE7hzNANvk-mbF0o@w^eI@sTb z@W=i3_ah+qlKmYbIAiwN-$7m*WdFb^dEfqF4F2-(_75xYrw{BO7UAP>_7BtWakG6m z4j(t#hjo11U>~Z$$MyCh4)i+v5GP35hd4od>_dFZ*V>2pmanm^4voa;)%GF2?W^oV z9r1Cc{SCfo%=`8?d{0-{-xT2Ea{C*Msl#RVH=L(S?QhcYaf$s6U-QNGH++1J{Y^J~ zgzbap;Nute!4iC2WFO>f`ni3OqxhM9FdHAXeQ**!cH0N1P`=teI3QNL2`~e`;TRZ$ zJIrs)TTy588|~q= z%GI6GUYl*#M~N$xttqJ}&j);Y;U(l&3qohJm`Z4?`WDtTMJ(>J z*sdpiien^jkzAP2zh~>_`IjkT@;E${EGa6>1b()pw0IL5v7zMoIp}_+njxvDiug%O z?0Pb#e#qO9XT0BhblSv)n%8Qjj)hSjq(`Y^_y4E^h;}_G(E<4G)n4DR{32B(Cd4Ay zC|3I=Q}b>xLuL=~i?13xbQ_@}xu}Wth4xEnCHLA29J`(j3UAl9EiEpus04(X<)t|M zM_D2RH;Z~QB3wJSEG;ZA^V;`)%2bgJxT2nP5g&cy(!!$r?d-L@MSUM~Rvz3Sl3J-5 z?vB{&?RpY_q{eQWD2BGaP%fA#;;`|xZlJ-2gaS8k2(o6X7|S^!E5(61f9rK%a@7Q} zt_$2TQmAytq^zDG`U>TG`Ei1njt-smt8tP%JJ zG&G*0|A^Y)YtTM@s1DP}U)T|(X}BYPvvm6yS1z(@bk1}$W|E#~TEKmkn`PJg=Rzw% zwELEZ$}0-JhG9fHoPxJKY1J^uOgU<%msQgVvO_s^uVu{GADco(O!{z z&Z)bobZOBYuv?~x;|e{_KHYPC*Lo`Dm6s`k2#BjERfK@Jz+K0sz2)}EC!$Xu33=|1 zJCDnIvKh0pB4ZyBmA<3R(!dw%$=dSSx3@*wS;bDwBrCJIE3m|3;l(oY_cK_^5ymUX z44A2ZiKLV}^aWaj_7Hw_@|R5fSh#L85wulQtkc<_h zfgWp%Ah@df<6PCF5G*D?mxqFy>SOfsX}IG+Jjzwcz0*`I+ux>%eB2T1Nl)>Pm^obx zRBuD)a?G9M?iq{7d)3{^fP3TB9;)(?eyW{B!QtacUR&|p!2hl^Q1#H`j(PG|k`$YN!{7Bx<^gH9#tIe0gRhU5%7(m4WFXT$SW`0UQvR!+8*DK6TXZ0?TTK(*O(po8i7CMO!6&>5u7e=f_+_Z`Fx$Rm z3kBZED=wL9*OT$HFikJ#73OaZmCZ#t2Tx0G4!iB5sBe1E-HsCqNdr>hpS>%Tmn=Z0 z3-<(*s}{-CoR{7g@4ok)52(c|w(w8I>T1Oo_LY5?$xx z85kG&V!F2e`6}0TGbDI#S_Fwie3MtC?(65ND*>;Y$tdRRvMAWlqxnz(-5*T_Hi@2oizM<=&+#u+fnzwCjr@lLMK*%gGCchm>pP z4LRPNnsBOy@;{X$kJe^1wNKX7OA3;UR@LkgbB*@g<>pH{OXG$ zqmUC9iV@fDHN0LNORsMC!>|QQf}( zQJq6ex{HfLXF*iwCkmbaRYhbg<}8l>UT1AK`KJ{)+wU@_BFpP}eW_M2#km7UVgaK2 zV?AjgZk@x73C=6tnU8uip^ajJvh$^L&~qZ3h2qBP^Xz(3MM$d-9HPdp$gRpO+Y-$u zbhYTMLc-OlO3ON`Ns&9vfim2sN}!vh5_Nyms%|f;;}F8-G5|P{Nj}lhIVc~@6+_e) z)0$i{I}NTnDJX^`e1$jV1W1I`r|_O7A|B14>&ZJ!#WTN@7c5bccMmOriG&P!C&hg_8;CrTSt(nqqA71* zE8>>Vu^UK`(G6t+r3R)1!1q zT9UgB*h0HOhZY)?It*%KVHxT}6qkwMG*2U=PK2;Rr+jUh=!^F3Em3(!X=tBRKL>njmKU9arPxYpea=Ew~r5@_Ze1SQa z!4+b7>j!7q3UL?QKwf@v)w#`_V#XU^I+x$W`n&ph0FK_%F2IlQE5~l=0lnbIPwOKrTqWisOuL~gWD0S8duo*kv@W5qhV96;8)BWO zn87pTRjWm>)@2r~7HM!f8VDF8j8R^(TE%WYj;8>cZ6HL9du`CngZs*SP}L%oO{-z2 zu>IBNTAMwIOtjs|)eKF~K||kO+rEcgG zYI{c2#wykRMC+ac!IBXTXGIlsX{!P`7a9=A&~PR+FpwcsAo^@l-e^y0%3`%kfx6@V zoPeGqOUz05?T6aaxIy1#EYutHd-3B-X*$>04Hll3ji>2FVz9bObfoGQPfyp|(9hHS za`px!=iIbW^iP^@HzeRX-KQ!Tk2xq++nxOzML*P__`mO4-jow%Mxhwd2`hd$29a1L zClv}0wU(SDq_G)k?o=n}80P2*qTF4f=&26$q84BPY3Z)nftH~WEj~v}>-N5}Q1k=f z(m>)0NKJ5HUfv9Z(4X^PtNJI)Pfp$_;-*4ya8z)BN5SZB2r|erkQ_{tvx<{5kL8QbGM(e?^2X-4kWc8 zoMZKG;U!Gf^n08;dpiV~*v1gUK+woKt%>Eko;zz$9;POWYzI@8;lAXx=3ok(Dqi!D zCv}ny+H5xv?Ou(2(;+0rs29fZa<(n1*~0TB=sg`;wuD4N>kH$ykXVPX@CI^EAdP~f zmWdT1wa+UDZWeI}xX`*|4Nla8fn|yF3d?+U!#H^$Bz)il8wh{{Mi2V;6btl(+a%hl z9VpHUvn^0W^W>~R7c)PoE9r!;*1y%qo4}}HhY$mIT#jNdjxL{06feb1s6k6gL`yJn zS>ha2m0S-dKY;ezKUrL-UR%`3Jcty({JL1MKV?I5RNd&dsgs`+qeMU~K%>sA-17*+ z=%<^)c+1#rSo%A9x%T^L3T-=dc5EOVjo`fC6uEc1>RNcob}$BzArcQ6`OtP14nqlA z#T9blcCi$3mkneEc+on)M0L@6s3daHBH#^wKR9uDsHj+EAgp$6IipQq|X;Qwj_jo-6_Hcudjw<@u!o|5H6)US8^iBsWZRMs5bjEzjQ)sw_Y? zQ>Ey8rJ~S3({9LwXdis(v}IYD^OZLxxvosaQH-n`#ZtYA-43zAk-PE?4bgbln&WX( z{vGPPr056q%TR*wAE0x#X*1;Dts+4_a*mk8g}D?@p)WUgc?e-2pfGasH-d9he!10K zBiqadoxQOrI*im9Q{mSS(Wa5iU0`4E2~xMy2rvk`Ho zw(PcPlSlEL0Od6hf2RDbw#hpO7QY`tg>e44Fo8U~fe3XPbk1~iGR}tWZk>FZ7A#cn zQzK&XuiL~{R03}x{ErK`Tu|;MUVw9h6iUpEEB;`q-7pVYP`D^KbvY6scUG3=i+Q24 zP*Fa*!zf?9^EESIG*jhU<>LJ4UCQr-W#BG#3(BY;(Rb@(wb!*fH2+nZXMvb(Ad*>t zVdqo`f9qykR*2~c7;eai1dp?SRH%-#xJnVXdV$@r4idvK#Y>l03j7}`OCyp=nK=;s zI>Z|N87<&IoXl&Xl0j@2ReB3zbLy@jh|OJi1^&+(sG$p-Q0d^9svB#(J6& z7MF6IsDR6f!W=J;YFwby*dlf6MhvJZ7J>3zv_#Fk!z?q$0UoMDsi6v^m;P`48ZA+u zgdgw5$rt&BO&G;egBw;Lkuf{F)gmhHJd@jZh;(f`S!T|K%ZCn#|40O)bCPA!Z@wpn-f8V-6uksxo3BZ;YK!UL4r{{}4YE+%w zVR5g($=9;ALc{q`!wpux0!W!ijx;+Iix;bA+UYl!f7ew}vx z7KJ&&=V8Uv#Tw7EDQ~bT#)AyyOE$WLD?#3Dv{eR?|qi~@ZvW_w}Om}pv&{zU^jMz zF3bJj@I8W&u- zZnw(RUbQ>w+jm3JF!NsXQgf@>*Z9%6-k6~8hp)966&xo6xvrAplenp}`V!GMrZmhW z(OipFaK|Mmd!bwfJl?Sil2L8LbrGKvZde921FCi1x7#ny-Y$^d?`f|@aEgrN2u>j% z`I(p+@d}k$~gwNaz=NkeDzrH{5`b9~0F@bl;Aoq_lCuX$FpnZ!ZYTZ5N50DyTrL zaYV)0ZB^lzDdsAqj>Ro2Dd2L|V!?8C)`rl_nT)I9WiT;8{YAY@?~T8F20!Gl-0*mw z&ylBJj(6=BxxDW>#ZlGxYxkPS;gBgGzd}spS1CNM?25K3bG`~M8nC(N9(waao zZWNJ0UUquDr@KsXloN8o4G2RqaTe&lOC23k;fHKL2Nak3d#;9tn9X6{QcP6Cm(?|@ za<|Xdh{~8HVcrEy9%GX)Rt5ZQz8KGd1pIwR;&P?Lc~-B0;_JoiMhs zek5DEE0nDW)3L|W$MpOh(<3rVN)nxtb2IYKMml$e$NYuatj&Zsh!UY0t~VHq9O%v( zo6q9^9o2qm&NYLuX>TGhZ<78aTAA12KQQ{?21NUqnH9ynfx78SGU)6-*xayM9!n_E)#irEJlf#E{;<7T_c~uFx2l1k%532{3$6(Zk%CJ zxB*d3CftABccmX&cUm!=>V+td>B(aA+=kgmN|WDRA$pkIk=@kc8X=@5dJT`+6mIMW z-KeuH*I%QE{d@GbYs3a~RTt!CM3XgMGL%k{MR z;YLttrp1YUDp^b~aSHz^XI0*Oqll+4f(jzSPyP?Wh$M&zKhZ{E6n>ruIs++-pJ*e@ zeOi@yuC~-%U^JlD-Bs9TALACC_x%Mg zXI==^U)uDB9P{lMZv5r6F~J zVTFKdvQ?W<_Pa#{C_ebO_#15!-+4>q>4T1ozusnXx$hP+f|DnpgS-=yl&O>Uul1W3Erv;biw(B+0(e)SSb77CUUFr)kYs5+g~#>oNUAV(&7!u zibT#UN6`knp^W69n+3q;8VQxo&U`PeVw0Fwo?mpD9$E&eeb7dA%zKNA!;0`d&J2LZbIbs{+q-S9t632?!a{u zzgYwIg;4)-=DcuYz!^SNf0F66%q;PK&0^k28he9nh3AOu`lPPkK5*}C{n5kD>xl$E5Rsp6gHCNltH zD}>sx59uR-i5%9XmW0W2{VE7IfW1o#;F~6PD5tn-C}C%7mKIv##2^>8?*2ffS~fTyS zZ)wOO3m}JVy`iCVL>m5LkaltORpB))ghGb!zjm(}<|Pz_*YniW6gU0=Wiw>;y&@|X z`go^;KHXO<-@I34k)Hdth@%j=l8DeTuR@p#P$QfQ-S;0k=|171>k-&vZXh_%F2)Cn zc!%Shj=xVer(5sCTi6h8oa2nwlvm#;hPA%xUcV2k4idz9=3$*4RZ5KdO+*5GuOqSG zH>zhi66?c_V0m$jn(~3)h#~4qu$&G0kSVDtE~^x4T&i`@=7{=0Vx;R6weE^2@uKUH=xX(25sy`i5`S3%i%BKVjNWtMO zPXb1F(k{Xf@a~UbDBahPSzOLi>Kix0+nl;7ALz592Ws@R@Z&`n!&JJ9dCv_u5+WEt zN2xxuczvi+Ov~}4k8z_QjFQq)(_L2J|J&x7Ca-)@OsRrZ2FFXQtP3r3OMbD)MhVwx zNPjCX+u?PngcEpBrXhIli|=?xJK6l87~T3}p7f9? zj&>)?XR^X9;|n;b>H2es#(YDH?maTmohYU_+z2)fmu+3X{9BQzKG+=pa4fjE6xT8+ z4>$4xUd-9(7+GYqekb~R>6=Px3&7T&?%L+(h8uZ1ucW#T5p}=+ofxQA7pX!Czqmye z%8GC!ukNK(cXA6TdPKZ^zle`54L9<(4zy1f?IQy@^8r=zYx)C-<5(ANBu+RJ^C}-u zS=KkOE9o5)5~OQ=^Z_xXOt~Q$VFMU9+3yaJgfEEde>E0qswKL zhRV{zkPfg2B}jI_zC0<#ruYe5E-S;0yvP$@UHhntn7Zmw92k%w)Bp)x^pI~&=&9(? zv*O{15O3U$P{m(*+zSb87b0ZbE}45(*ie%x6~aeAL;45a2ozO zx?P-6QMhp{bc5{CabOO3L|8LV27jL}65Bb>XwyNa2ZI6k+rTOS1#K?CfgksX7_PQt zOw$4vn~vBCmz~8|21y<{b^6NJ9}#`jY2JkSK|uKZ!4ww(0ZpK^om<5#kBB(+fSg?M zh#D8(2sI_g2h>}J{@`Umk)BQdjPx{jXHRGXN$w1&wQafSo|KIaJTDSJGs zx`%uPA>O8lUGg^773Qh+BXstjgHt3VL1+%>hejkxI`o6^WtME+ltbJSuY_6Q9IagG*Zh z4UF$!^rQ;;JpV}%H-Zch8*bpXJ;V5$vB`+RADXmVP$lUC{I??9WI`bze|hw2729P! z1EvS1cPzQ~DKQ{+Rk#U!CJsW(!C3jmQ>x;OuRo26gAigcB0^(43K2-TUru>iEavZ) z%02kq7L448j9eF^naG-1n!l4tj%aTL)6E{TsyTIRB4Z=K%=?kc;qr60gqwgzL>AvD zsXwb)6dz$~VjzUr3<}AnXT+G+m+Ita0r~@SMI;5uMqP|>zC_6mF;ryE7MUARr>p|? zw>^Cc2BE>f45Yh56rda-7ZK&dPpRBeYM1|f7F$1-ZP^c-e=>8;&c=tv{l*f#N&mIJ z1aS%vur+%I@Uo_OJd1dln4VcyT#8a#a}ea?p^Wd-FTvPAo~S2`i;Lfb9F! zboUh;S_tzyqnH{U#mvI8Vgv-@2a8uvo>awEhvO?#!2;MwR?Bt13>TLH_$WaW9uUNsiTcXV*WkYA^8d z^CC~gA}T8u0WIbM^I7v|^8%FRs7GJQ1;$YQd3}|3uLNf{0$zC&aeR_vVzJ!&syIuA zUKJhH=LloQ0YsoHx4Q;E)Dh5k)Ga!xuJzq{@v9M1dx>m*MJ&Sor-}GJ(eVdg6@%4| z4UaU`ZB9w`2VH?IP%|W|rs@UN#p@3*h-niRhnooPBm7qv^P)=-?f3FG6niN5H~K~F zENDoGXpjqD^p?xyT;34U>Oymtg_|sBK{&I#@kN!Pf8|B-Cnqkwn>JB1KQ*5;7oixo zLE-MbbiNtdHI{7zdUllYS;P;+VrN#T8F~~ zNgI*FWNl_yS!kS?inaw6g(6?fFFXf4jEBlNQP0?k22KhF+|>ado%6DY(fRg?a`X1P z<}cpr#E`g1PX}*ta^uboHzh)gk6$y-d6nSPEl-AtL=}Le6vW{|pFI2*(IIAIxQWCH zN^{8OzbLxk$_cMvB|w6l1|`jvu6H9xCIN6BnRmS_#;60=*zgNC2EbD8 z>y}*mnh5X<64mAxyx}!5Qhhm1fifiBC8eafj(%vF6w#uKP4ec~goj%Fr&P2d+%yr2 z7GO9lUKhjFftm~u1gsoPbKCoK!%Y*Q1$dKu>~%3-ZF+dca~Q7F6xX*}9c~&AHRK3J zzM*1Un`f>l2b5?uAwZ>S1KKmLZ;S`w>WgkVOb1$?Rb&1=kj+(`a{TFw*nHvj;S zLJsLASWoU>I3S7gI|t;BOf*#}FRm;V>%Cx<^3A`AICgHyIYVCbo|s>SWk^tK5Vx0| zSq@&UK;-6^C_Nl!`xEE`y_}AvaB{;!BS9}m<8GD477^yN-xqOd^TJI;yDSc<8seMS z%~OpN%c~%aIHM*)xGORFzkgrlO8)S^Sb(cR6XWc7HJJBT(bvo3cQQJVT<)^-&_d*$ zn7Oz>F8r&iz`#p?6_?GyYb5#OyvChvdyUTQGfWfom_L}DCinkMB#cG@@)(dydOL8* zXK90se`+@Y+hLMPI9hPHGTcNIHiTXA{6`|a^|PYO$GCW4Hxf+7Zq!AMy!m5csqewt zJ_5kP)x~>9s;vJ2Mh1F_vVnrx^P!4Q8TTQ(#)O*)vN_A>(#-NL`DLNv4IUOk^mf9= zF&Rn8ewP~ojRfHwjhCo2wpf_2ekkH*L7eEDBYv?;+-0$&19EIsQgR?kR)2)*5?jMf z1h84dBI#ohRNE)s^%=&2&UmiPh8IdSn=kZ+k41Wp5)UN43^ggKsVy2K=(};v&iz4}i+5b+(2be2Cfr^Eass+Pt3q4I<*p(Y24zdEzLLSz;I z@GMog`1|rx>?M2?;^xjbxys`=+4Grb7l_eDYe-WZZM<%5MvCHAL?C^l{S1HklV31H zL`rDP&i}g?W5#-4;Kh?N+`KrnM9~sm+#;*~E_$i0A{7B9g(4T?3Psx^!_mdfj-uA5 zc49|jg05~CZrV!1tuvP0(oe*U)}Q>)Cvd9Z zP!rH)IOw~dhy?YPq{{$6mkh28(8a}xfG+uz(fd?<%9?%HA%)>40=GnxtM{oOv8VQ7 zs72u>Vzj`r0+CaAbX>L<%T&u7*CHubaGciQ{?xIm~N$D-3;-H4$ zDb+j$HR`)F)sV!88kak;DcnRT6?Bg-?vxiC5F^xHEV+0@ZLu80NnZ+zh_I43+Ic{X zR>y}pNyCm7*CBzIJ6Rt6rx*|XwTal4Gq8K*?Q?tfl(GL3z0{-Q-4=i!ifOyPCM-KK za$5Ff{}RL0lOAP2@ao(Q2v!|IVXQj&$pI0!P9cqCFk@P$=IOokB@hAck>%LYY3G!=E+@-o>xcLkkl3o~I&KF`% z>xN|S7wB129Bw99n}?^=ej!GeD!&jtN*a=kj8vB)nHO#*$n4_{@d50Z@=!^rNPW~) z{X@i$UmR{G%sYaz_dBv8yXUT>FiJVj*nCe=< zP(y5&YG(XXmA|&*pAjoeYD%@G+DrJ$`w^#oW_lIoh@r|3Nc2=@?ozP`?dimf^1`y6%2{@tI@CqQe+b4(cF|{8 zhPYsvBQ#w+eM0FRfS=p(JOY2t^PbGiO>ENx<*ollsiT~5b9YAtUh5N?72A;&T2W|; zImPAcl|z0C$aZ)8QpI*J_!6fRB)Uc=$~{TQ*Cs0C^UNN&4}Jz zt4~Fx?W=zpy}LHtoQ&tu6D|2sb;-K@M|7vj4L1iN;Q$c(vhvsO*j`+Lur<^R$S*5a zv!q9U6mitS2x~{jCvDd;=|3Vhb#Ayh2|66K_9N;L3-e3VN6u~k0q+CZvBzaU^epQv z8I+a81ti0t?#}V)5pEuX_3VQs{=iW;w|HYA4%G;pj92-$6MsuMx%CaR=no^{v=-^qyR?z!O=b}DI93}xJKQ{>y@qp) z0IhS5{VOZKV9O3xLY{?o7lq10$a!02c>rD|`&~GH=OQdWBDTD|CVsCX>6d*EZ+2<8 znNX{9UHL*bFYnn$?a0!&Ae=Ng&0ULrdAK>lnJrTu{9ZL%@jpc7H{FrY<>Vh!5@kP# zq}a{j=2S=kn$*Q-vg?ncw|wpgFRnL@p<@o+wa|*f&7^RaV6r;@C`PF-2Gjy>Ej7(u zI}8>-T{hQ=WL!a;$pP>R+OA%81)W@v8CVx?Cf+|C5(V|Didfe}LPT;HCTr&B=EXQG zdmHx|R~u{f!}=8{f%B$zw-hh;^u??XH_wG$UcnNZRrq;fvzU(9i00XlZ~`j6m(Ls% z{nht2C!Uz0PwDOgG|-fNT+?@srq+$ZH^(p$5SkScl20B}-S-^{xJFFQplj5lR^=My z)QXL`w>3|LgcCP&Naojx!AcZ%Po218(vom9d7`mAxV~mA!}0A}T$Ep?Hp_pi6Y0^` zCP^>{d$zVgm6H=_6f=2UT?7eoNxK_Wd*O*joHy8& zeJl`3WDYrMNMs8MJ3)+N_1+D#vsRN8`(E}73%9h zXyoaK^h@;Na$v`J>)H$}F%~W-(SF<$b*sy@H(3MJ7fuH6;C~s|!LFkciU{&U(Y4oG zt+(L5_BD&3Uo%mC9Ie+Lu@byI)rn9@4WQk~Nt^~+$dd4Y&eknOQOOH+JQoIc4I~&t ze1~q0Xx+|ys#_>h8*V0dgYvslH!OvJKgx(mkYk|4d`PHKT=Gd|lyEwp{BC$IDF$fK zt@d(}VR2sf{QqCtGe?Pwx)dh<@BK7&)v3K=CS0XfjLVya+q$Xq%W z$MkG*9A&(=BXSa0Te1tTjzwBlC-7%9bols#@doh3|!8)sNfC81IBgLc+1 z-jo?wi`X2wubri6P2aV>6_4Pc=FJfa-RdbnYiGrKIU`eH0)s&Wp}PX9U|~ps%;a)7 zOHMk&QuP0Rrae|7gf>Nlo_rMMUM}ch zDGJ%}{n6l&yQIYZo+S2kwAzh|0osnP&eP0JAYpy_qk69P9jJUj@X=p54+zH6)5+{= zDOybL=!$`C2sa-GTyO4bc>r9AlSV4lxFHhQNJ8s&bq%@b7Sc3(bb9sLoqkn?#-P>@3`%$}F%S8~K(%tn*pzw_23X_xys}SW>Fs2|>>KNh( zcjsty@fFK!cD08_R#dRYLL>Um?HC7OHouI~DKk*{&QtgobKtS~)02X(#V?=hVx?Ej zuh~U-oWWPt=&byTiW1alDc`J)wG!0!kqZgwqsXLnjbTl=nb0}4d{*|oIi zu#5#Yy9mNM>pR7{F%%X$bw*TkBdxQnx#Jht>>|NJ-oXkui=hIyj_fj!7fJ=UoQ1mp zFNxhqcONicK$GGn=6Hldy@nE#3HqC8M?XY+1L5~k;u|ZEC?i9KtZ7+=B_;W&$y=^O zyQ2O*DVL0tv=)p@P1P=X*G*6cb9 z(up_}F6&`=sC!7d6$e8K!k%4D;G&vcB!w81Wlg{!P|oG-VsAUZnHf|whmA~6m)*~_ zR*r`@awm?q^tNe}H=SuMjb_#so9kP2|@|h+^oVfRJR)^7L=A1qYadYpz4Qu zTIiu(v&%ZJV@}(3G(kt~%9>pQIvAI3&6YcRS@G&iTcjtwKO@khDLpj#BAVnmy{v)W z)Ud)D)VK)0r8T?AmXN-Ft(WDYOdq{!huLwvM$keQhghaHQ@+{D%XN(w3>GIf)tzNu zRI`gj6Vn{68S<^(mZCtyuY2SCflz!zNWR|N8rk~E5!1(tA4NOe8D*=@Tg_?4JH|R( zls?e!*MEV#&Wrf#3M~f|Smc-dz-JAYS$(Z?ZqhM$4mau3eJu}}j_jI;uZfm1?r_VE zHMZ)x5C6M1cL3!=y4Un=m8UQM@yB} z>>|>hkFku4Q@M~A#$g3RVpv2%w-(8Xan>01(u+`?xcj!?I`e9F4TUCVKE}jb9x^`p z6_|pGuiy$afH4>XHI4;Y;K71ifoCN}qLznh2qn5fFE`&dE6v5IA}oz5`j^^JokiU6 zYgNrILiA)z?ipYSHBQZoAA)K!g6B&gG0Fzzwt>m_4sI!y z84=XUq==;Cs@Tc3C*w!VCDu%#%uv5yikmgHn;eDxugP~R#E7x5MN-Ljob2ijX#bkGaq|g4PJr zKy>unqZer3Yd=Q@`TCkd{`%^Iu19;?So)(EOfQ8)F?LCg2&QiJVc^WEGc`6!YYc6f<;v`BRVbem)a^ zENLTNHr~XaTOVZu{zdc#xtfl8y0OowF_QGZ={xjz?P)3c#!uu85?`b|@pQC%i^6 zN)5WfG=Q7uK#c=M-X5uppA|Ys>CH+Jz=UJ)WGOIsIW?f-D0c)f>PFa~AM^?dW!+AtKT zdJ#D*SqSgnWemZOF60#xzjA7-3BKdDB|~XepV`Xw#gGva-D&AAq8nL~46dCDF#M4$ zG}jTR{wHrwwa%Rg{iF+=+uZ$GB`ika)Xo(POVl+oW!j2pPK_rOK8Xz4U(ZxlA|x}Jp|VQ|IC_d;$OXJ-UR3O%baaKG7w7EbRV1Yiz1zMgj zrK|R^6xR(1@S?b)rkc1LU4(8^Ro=;zsa9MSB#5s;Lbu+^LhGx-@>29Mo6GPvr`Lz& zv4R|vr*N@C_LS?sysW00up44@b?ePjX|M8D=7JPC4ohSTxN@_goUDMO{Ebs7_n>=W z=v*kKrKEC~rCd-`P4>Xyj$S{hJfLz*>*p61q6lS%OLd%t!|XDCeP!? zagTmaE~gU;Ngy~1Usfv2JwY9xn34a|2xCSv!Ldqz_GFcAfDKHD?4m-#Ei24e6blU* z6ZQ9SS(t|+6os_2GGU4}HD+r~bpYy%FlV>Uw31t&v#KeWWk~p=66sSsNX+0N$7FyM zJmZZis$;Q%&nT>^Cbz&a3SXwmp03Qa=2p$AsU8i90bGcG%|ahlbhJ_SxpijU0q4e| zQ$vz#%RwEp0~~eldr-IdWE=$bAub*IT)Qm0rg|jw_2cl~gT5kln^(Ca%Zdv^kYtA= z_^wC6n;{spq^6o&2CqNQWvLABK}f8K)n0{zHc&S&GsmG=(Z$AS{dH7Q9H>?5v0BCA znrfo|&VBcbNUAT2NTZf0ih8N`i%gns#jVt#f`GrH;va2P;k+uR?gFaApeOaolLkvU zORk*;0DE;!^#tfA(7a)qCDgG*%yVb1W>S*-`nj^Enl!>hzN^pWZ>C%Q)%RE@5n*h) zA62bSjtq)O96*u0ceG~*UQ-=``B4sWh6?7dh6JKQ zs#EZcA^dv#BX0p|-KU9RXyIJF0`b)lCrjXnf7%vt=M6@R_opYdDBd5csSZMAA-;9$ zOe@&B4LW}&b_Gj1#-POufRMSy=f=}Uu{Oe3sCUxtL${qi0O;O!N;_)W!kX$Vs0NNL z7tXeNwyyg5*;ZUTeYKV-*Uqv=#NhQ!hb$vAugg}wjK5@C@yqbEX_2St)*;MI#m;f) zwYb^`zi!ijB_?YM?et{GGu0$!jy2p1G~)30AXU;_t|!*iB&c!L)W0KZ zYH4UkzS^)vt%8G10=AL2%&|IG!3<1#m^;_s9CWJi?k*m(+#u`LQa$k_RaoWNpj*SDscJzo+vJ)vV( zd2zvsQ2}-CRa3nZKLZ?)&>q^)E`|w8oENItj++$8lpK8f9dlLT3xAjkcpKk->G5x` zxkl>IpJz4|E-)#mnSauBLnmnuhyQABU1ztSq@2hL=2@sPR8vjD!>&Tt=^ST-9k8%qF~ zeyINu<%0$x-EIed1m}tvC!MQ=L0OgMWueLnF}JV?G0p1au!SofMx&Zwr=uaEtr~8E z2JS@SoQ@r`prHsDclP!YT(LbZd)A-C(oacqS3-vaO!$)yaDvFHEIYLca`sTi6M?u@ zxfb%oYpMx@atkK-vMQ10otU3EH>3uU{+w$)5Cf-#{6_(fwhNY6f!1H^AD39aMBr65 z2?rMPS-n(cxo%jB+cVx7$puE(CiIDJf|-?Dw|ec$&9jun>=6RwVj8$uSjoV=9nR5z zj5~~ZMn5#5*{S=`ujtAXpgnlA#`727ntv#E2OywQref%f&3W zt{%6jrkd2jFg|8@R^|2`BBuaHPDo8X%h#9ViIBe_A}^0F_mVZ`_zg%?NcFpelA-2& zs9_9g!cYvOA~6$(-q~J?B04sYt=n)`2WKU@`>;dndB?R5X`5F0&&5^aL){n`s1rH8$~5zR6zR{#>GdlV#C#hCF^6cc zYh{{d5R6!5&Bf`myF13gc+iA#a$AAbM=o4twNoE4(QrOLqB&h|Wp2&xZcqpIMo-9? zin}TqvdjwDql#jsO?2j)cv)a$tx~= zO2FZ607x&?*2>xItd+6QOPayaJI&EM)3aXOMX1*WRAHd>qgQX!6Q)yHe_6K9>LTAL zvP4g;T@?8Wl+^4d9fB0~7XL=govzKd;^qE)>osmnas$rBoOE(yw!Xk-7g+g}>~UOj z{7Ff5&74zj=~!bd9HEt(`B(FP{S|YjIly=fk@So8d(aR*PJ330W8KDsGTlvxl9cH+ zn^lzQE1M%HN)jY^q8!?+I#J@cKw?A9Zi1TgATfE1idEaO#VUx!Sxe3$n>%NbyljJ& zuv|%Q(sKsCl9KE;KX~VZ@XmMO?z9Bf=WJHpbKMY7D>O=-7QQpL&9B)_gwpZ%Hk^o~6&b4CB`*nq)E!@JrNk81>?XLyYHvG=ti45QdviVKolU$dKlRyNdpQfzrBJ;+9ouo=MsDqo+xghCCmd8pA7R>}Rvsx+{z zT**eGM&vrW_AS0lqM7vY9t>H7)xEvh$q>PCNoZy0aw@UrCdtkrLXbkxS4d&Ai3@nK>41I6i@IJ5GNG z)L^!D1V(!j2HEl#oYfgvGGk#Km(=W@h37HnC81nSF0p#4@nL$bFu7>WLU&Qj}F$fMd#ux|uqHes70 z>j<4voRD|rPCc*8N=Aa^Zo>STn6<~sR9EzaWlkdE`2g%tmHiQOv*|P5GhQ%uXns@@ zTw+W${Dx2eO0)ILa6dXfx_oBV>|TIJkaSDffiZgZ7M%dHV7fbiO#4hL?0_}6yk<91 zstl^!1(g-7H!{Dl0zB0gfo^OblH*QX0kE0^N$&1k81`hDw$&ORv$6!b`D0CT=hk z4S2S1fCq(vEeZ`x-nc;(K{x;jIccMD2}l+f&FYwL50=Lu`{1v35V) zV$@+~Z6*n-W^|~kaj2?p3zqSzbxrTkRqasM&#Ri&p{nYqsur#Bo!n67=f7ekDnnbX zt1fj5*S&~vd=BFAOS*|)*W;bThAzjWcu>DkW5lX6atL{`a#W(-8t9qYY`LP^m_ZMP zoL1=5g(+XGQ5`tHsR`vB&&B$l7SKftWzOl3ya_xZ71~yIXtVxAk;Oa*+PJw1e&^sT zjohSq{_;&B34-60*a-=>NhIor|DhCy&5wqYycAk2C%HjR-hiv;lFi0|@E&gTW*oSX zBw!6mIeD{+kG&HTk=Ub4Ab~xqiy)shT3s2ny*&fEUfXs+q$?L!nPyFY2N^h($iI2h zwOPMZU+yYIgW+arqz+g|U$`0%qd#!#g(_e8%?t5`D$I+jAb~8nE9#6Sbw3i)iFh%| zO0nnlNwdyKJ#U(M5jnvYdUrLNG;MVV$^%2-v6Tg-om>Wj&(`w1Od4BN%j0OR5!D^r zq`S2|<%&9E6y2dfNQYdtMdb}&y~U!1T|`*VIt#AkS5Tf(Z?uaM+q1-^Be5YEF3l=I zd`s*KM`Furjb-i3@B$6BOINtQcU^^w$@`Io6`|cMJ!1yOgBe~2J5LDAI)H9R=)N4; z>w${#AU}C>YyBw2Q0ah11Qrp4ZMfkg6Tk+wz*QwaX1S`j9p?pj3Yqo2x{9^IWqHtu z48NUr1+n^I00@!sbl(>=47F=zao3Uijf5|o@4Ujih?p3woXpy02(_;lVzHt6cPAPf zmJ5+Fc&WO$S+3lU3$bUr(Ix!%czYW*IV6e4Tav$WDw%}`L}2K|;W_kW+no)a*@Yas zJ-rZW2*yK=E^gug6a<7%wi_k+aL$OC$5ZGAyvNdtt#HlCd|RAX6~Wy>e)SJeKUAcc z%dVVL-HEP)u6nCZ*pvEVeYExzLRJHldTUy_86=jpf=|0ozSC&LPAddVr`llFdC9Py z<(qeE(&aaU1d|w${&kZvLT$XL23*Lblni@zo?N-Z7>nq3uxq=rD|V=;m@n=yrba@7 za5^5Zi+ki%JB*<*PQH*_wiE2(d1jEvI^r+#?w!U!^+Cp+2!t{%)t-C~EdLf*8$xiF<_WNmm7M;27Wem4Hd`YAPogoKx1QqF2H#;T!U0_4`D z*xSo%A8U~~1afc>d^~5W86+e%h(mt_t&XdldH1XZkt`3_8-2*c7$1__Lj zTYYD%5wCt{Tx|q&lI+bjprv0(i!OdI?`c(ChksFzYtT9~NOXG%-dT;KnW5K1+HYdI zy{gGE@objG5zlleMMe_af^@b6r|QP}g=u60#1Ebg733i#wiv_JbURjU zvZ@Z-BgN~@;2>yO1}zOOMuJ)kttV=3fB<0gWCCVzAhh_Q<>M9=87;9D7myWZkbwf8 z*F~*{Sn2@OMS?6U?j)z$Q?5hs*3;bmzPKz@2Y)6}h4SaoqqS=F?idjA=7& zh{TMK!2>Ps#H;e%HYf2&o^zpyeL51IcgWRNGXh+I<{sHh&dZbJ!d%y2n!H_A)y>}CchaFG45ni6&!)59CGHpuj- zGlSzP;>P#dx7#>ZJ)>+K2J%d5y1n)rd;kK)q@9i2qoSRizsH!2RH`5$Tx%V^hnZN9 z#%`XerPYBoHR|>N@`XJ{l!uGHr*;X0apO>WW|J!#d4PNLm3odI2RbKSQ|f>~#3nOH zbY>&wWW_Z`R`@yj%{9gXnR%J94FxTN1WQ@a;`f)Sc;}zsZ-7`3BruwWIp}@4N@CLG z*!*|~5m4l2$d#9?GWp+w#JP|l=aShR;uFkT4bBl1_{V3CZ*@(v-$51{^>80efgbLo zGq8`sPs;QwjM{;m>~7j>&E4qkiHN61->09ey(B#=2j=dX6M?{Fa2^!Ge(K_Tx#yn# zQF6sq##w5ghCD3T(yUawUjc1%JG31=p)LF{hhK#}Vo1*EkUVm_l7wxoZ*cf@BqJ)# zAkoZHES1}?GSb42@{6l*zk@_!NJ1Ci$zNZkq6jU$8tV%Sndm1Ma^2Och5VOx34)xI z_(CZ$;To)2zU3YoYJAta{^MHj8mK=BAYi_pghCrPpku8kid;dT86?cc=u6VIhJ$X- z7EvC2mW*V3S%>9jkk}h9>uuMnp!g@QH5x&r2@;=%3nFJ<=d5}P!|BPWxM929Lklr$ zIx=28XD#e#fF+8(gOR{30eu!TUxc#(<&pc=Mm#Fg9~ViyW{I6 zU2o*&DSZLf6Jg&WFrrT!G1N1^U5_q~aV4J{eo5}U!HDWjv7+N*KR6WghZf8ZI>K8J zRl5aNxB%qROZ3^=%i0dG>^pv7@5$Mur|0dL0}pSlRnyP25HthTw9A`rG@`TMaFC`+ zf{XVo)++U|kB0+tk^BVW5u42*$(c2n-QG7D6T(l)vYU+Cz;6kzhQtC$ME+96h?((A zV@t#;Gf2Mn3`qR-mqwiWFy)bsl3u9pV~YUe+Dh!3*VYlgGRB4<>Dpfzlj%hg%cmE) z_g98cJ14Zc@am8$Xx|x;cw-Toq2cf}w0lsyB;WNu8mPtSf7I9Ek9KJAwF#oa*VeuL z`4X#8hc#5TVmxXrZ7MATH)?J5#Oe*owM*C+w=s0jwYf+7N-aSq+-!`VywD7;$CHxy zvIlfL3H`|1>su*T%DWKjVIc0uSJ8Xw1$!tH3 zR_P3p!!Jxuvwv}%>l>jR-iGdtKB0X!(9b!g$OS=FT6CsyFsZB|0RJ${UNvo*86=L* z)TW1TQ8{Oy-GaTc#0(PX2HY$A-l_`gW#0;iVx<`*(9KA}>RVMV_0_lH8E_eiaT7Lr z>{b3o}a8VWQ0_MMpLRc1XQEm|1;E(J#N!1%k2-g@K$vz{zBB=hOsWckj+{S`HB zF1#Dhfe_(KW&qxFw<-hh`F4pe?Gj%)l91{57#9M^Yr>T;2I!qGv=`ABVm?ah-{qQ) z;(@Q>kD7RXtT5}(g6cdBX76v2d8FJ27H5QM8Oe6z(x6S3$$O3brG;iafj80+z2{hO zWG3jU&QL4Xy8#tBCDq<@5(6X##{n+F0K;4CUB5-97{1kNnYhm=8iaqV2*HcqoSbE5 zJ=Y4iYT7=-LAS+FKpGHqr|34uGZ<=k9<=RKMY^8cXC1EfL{Y56_1qjZn5?PvuT@02p74p6_A8s>4y7$9fZzhL#T1nHJmJSIGV6(@klgK^0+k@D6&BC)`Ek&c zqTzDq9P^)zjI*K&kS7q5?9Lh%08tlf0Zewj0OV))vXGKK6Dzhs(>_2$^((Xn_r0h! zFc5haHTs5Mfqn7D&u~p|-wt&P&HAC%Ok+C~ zv=7+B(gwLme5(vNi{7ws8!D-!CfWA|G!N;}od0v0Gsh<+ge{y$)j%Df+7@%iwvmPR zV~b#&c<~HeyLE424nUDgAC^cBXhB6AN-ImNl_#g%c|WMh)6IGTHPKWvlWKg$%482~ z^^$9fm_bs8eStxn(V=aI6K!*g+biKy9qbF#*{&>5M+Dg#+;k`EpiS<1z=%qPB(Y;l za@y%g4x?w^Q%lp_pIRXID=4)ySN~AIRv)Lmp*3Ib={o@4(QLCm0qSEpYfEyFIUi~@ zSnjO$x)nXMykFb;hRSgrDi?=Uc~bJ+=MUrLg8bN!yzKjkDu884tTXEgi7tipKJO6~ z?dh6F3_mKi)Q^G$^9;-GQ)TPiai1{_=y^S9vDWo)p7pK#NF>ccx}~#11LOcA)esaw z+f+eme23DxVU_l+O8RN0Va4w-Spl;?4jTOUB71&kq^K_r%)%i>CnLjl<(y&G$3n|c zu7cTIWGG0J>d0XwNQ$qOnUZ3CEt!a|*v>~dS99OxJ`cqc8(m5I3;Gtg2lqMm&TCg`Gk6GIz$*+xqgF<%TJT^1udPweoa$;NeG&emd&1)H6xEd`3?-9c zSF*CuE#t(5LEXd-b!!}`JJYJmA}2kDb&WG(0%RF5U-_5{lezIRW9kT=pAp&+Mkl7b z{tH&sWc@Au0`1@E#4}{)8D{-*-u!w%-_B=@{P6zT!DoyWy?UAT=TpRTS{tSQtl^Ps zo;Aj)L8g#P!EOaMmtwhDzZ7362OIUz&#G+0kI!PGLgKuTgzl}E&p&GnS1(*vvjq7Y z?bU4f7QDhGP=uss-5Zp~bNwB3q+_lsSnz0bWBU$JL_FA1bdjY}5oum!PnvcgN}Km3y8uqRMfbSO68) zZKAGS1$^_;V$cUX`Ebz5fOoV%IYcDeV1%|4@JxN4wh9Rl2<`~I=Pz#TAB{dh$Mh(@ zpFTs+)xOgw>FIicK0-I#hu!~if1-Wq{=oefGN|^u|A;1_U%38_0u~45kf{Tb>)dC# z_PXvsUd1&)f-gh=^F~*lYl~~6`waBYD+WnofoqoQ2Ume>iYv>N>>BNgaeG`tT?1Xc zUEN%|d$4{4nOHaIS0aYj;!e|pX!BE}SLh{(=q+ zpxt*p82qLZxK7vo!LR4wKi>*|iyC=d-wb}+1%LH};I{$%7bI5W#lzbeuFO_@ow;Ieu)=@ zU$4c-f#BEY;|WIahcocu34V`1>sB{B_&ow-th@!2DIWF69{dhZ z==xdkyH%Kye+Iwfi}@^g)Q68xgLOxv@cBvb$W(lM96T}zA72E&uf@mb!S9oyXF&50 z_~G&>rVhn zLzPr%JYy{EqEFDeoTQy}h7Q~xM_p6}cYxjqmPlDq9yfGcOKkX6#S0gpu zdl?MV)>!aW+VEG@^|D>01SMc3^ca0jRu9rK|lFa`#KdAdZ&N0FJiluPW!_(Z3p5SjtEd{NzQX2m;}* zf$TKMe)*yitG?Q?2O_98xZBzNPN-q(0@cj?n^QG#SE$BzKKjji<}=KNn{@l%jFD>p zg5Cw>iMM{39L>rOv1A$7nC zKnD#P2I0rd?0eNnQTu|Sh+kSpr-)y`tS1#1T6FIna_%c|YA3yB^a<||uYAo&LFt_O z?T|z?NM8GzFSz}8i3`&X8ksNCcrk{nu9(SY>u|d=h?uz?L|PJFTf)$NB$P;k;vmy7cP>s4;WDy z5Z>A$eDi4tUva?5Lk4L576>x~^n(K`Qu^>0aqlTH>o-G!G4OL=RK>t|Kq4{Hbti1u zOwGO7<<;-iv-J_$tJ-z$>Do-!M*$OoHS4GI>KQV(&}`@^U4E_*WfWg`n^d>R;(@^X3Y&8aC{UF_fBq;G}%&C5ngWVzXJ2Bg6Y*1dOg zaVlc*qh3K=6GCL-LrBhgMMWmw1Bu?a4K}#iZ-ct`&d@IS`zxwAQtwwo$MGbY^@fp! zqr8Fn5IoAyc|&!SZ+rvEC@;NXjI|!FAAk67oIZRP9&QovB2hpJ0C6TNDYm*&Ty7K# zYSd@zqxCbix1{IxKI7!9*Nu2MTG}Nm%?1XE3b2;$dB=!R_v`{|nb*D~^vSioSm?VW zb%xo%kYF@l&7--#0)MVg$=;F1-;G)%A2jraqy?Kil!G!lxaZ9atO|ItEBzHpWJ131 zckBx2=oQi-zxul>_j<@dNX#`GA|U}_O-?>&3{YR%8E3>F`iU*mSWK1Jn|Dpv%qY`NO| z(zC7KAOf?C%?5^1NNJq%ri#)ScoQv^@Fp25u|S@`g_{|1J-k5Rp-dierJmhUi%rhGpQG>rLr@XC7FkIB*xRcRf<^lBTJwyKuet8Ig zxCH|r-9GT$?->Ksr6fpE!X`k0Jv(9#JF-JAe%IIr$Gw438_RKjHP=^bwJ<64mj@~x zR6vvE@8Nr%_F@H>qJe=Q6kX80FUu+WJpAslQ=aPy5Xsj_Yc*nvE?5|TU{@0 zluH{0>P(q?5YU_}T-l(_NWB{Indi{(v(Y- z{dC8iw9%0{9~tK$hSxyA-Fg9EKzIW$K(&>n71iLpIbdg@;3Vx;YP!9AEtC>`x0HS! zR_Q5Xct3m;I$DUZLxc2u?Br-+E*G*QQc=tQgz+ji8_tE6LTFk4u_^|0%g074Vnq#8 zI!69+uD{rawHT;$)Gt#;d}0*RV_`B!HXgb16T?t@@K&i_qRI9Z3JQ-Fk_fN!A`P%w=bt%d1L0JQ=kjB&zZ?bXN^8nJY(zVZ0yM!NbtTQzYl?7`mEqsDBQ z2{jw>oyUA(WT~AOBI+ovn}QmZC)O#3KLc6@M z9!~_zUEYaqLI+$c(5LT!HX6a^XzhWHT5e1=Zdlv}uZ#f`1{-3|%=K4P`KzmHJm8KO zRr}V|PH`CUW*r>7$t3jmI`N&bM3d#2Um4>-qii6Nmo7xaS1K1`%2xEc zGqod2v;pWvN^+_VhuUB^FqTw;wXonnsy-0c{s+~ytare|61qJ2A60whVgH3)tS}oG z)Ilib z+p6NV9{J99h9PsmG^WV?UmD2(z%?u<<^WjBsb6mC*aBa*FSJTmJLuynv%f|AdFUYE zYw0-a^mSYU9ZPWKAm+;}M@-)nv~>sX!75f_vDR&IWo*GUP)D}(ci$RA)uxDAa4vxR zZkt(rF+a2r7mw*}4a!qgQ@N>h6S$O0@`d%rctXHqmOH*PW_Ti9lMoaLX!@Jr)V87v z={M*?%3_E2>83tfdtQ3pjh~HX01ZUHCU7P^GW)0ztv1Wd*doH2YA3Km5m8%9(Qr#q z_=6?-D0V1>h|xkwo^w=He=~3tm4RS+?Kj8o@qp-l z<(}&L40*yM^}pyV(D~v<={a!r7~JF0+@X=^Zanpm$}KG^Er-c3st!~t*`RX5k46;a z8;I*#@*_`QKC;AYxDfJ1+zlh-Ifo3-R8*&Qbd;f7AXX?U1}58^My@p*2p2Da8J}=S z1!UG9g4=`DxeXFro!1>wtKFSXIqo`(ca}i>ek9SXA;R{CD`BxBsva1=4H-fnaMHijLP~uf(C6Y3Vrvrwf*k z=&lW@QFQIXf}3(7He-M zC6*0lHB*>(R5QgT`>c)}?PX?TS7@Z!`s??KRL3iR0M`Zr#H}Hq$0W-A-z%0MWsp$Q zcqU|+gT3_!)m8p3N)(xm#J2&V$OAv9E)Pd2fpHPs<`)@yOz}nJ++#-6l!a!a3lf&w zJf>r%A(5+WHCftK>s7NVZ)(?~cW4>?Q!T#D%BE}bD`;samgdvjU+j)Rae;~GgHVm$ zfWMZW`TgUFU#>J82jW3=z!!8CicF5yt|FQe1KK6-frQ%4v``q-oWd>E2E?o~8~Z~I z;+2CZfQ0T>iRHROIiiWArP`M&js<)TZb{s7KE;jTZ&9 zD6?%DJhyM?xw1_c4pM?sty=+xpK8Ar_{~OUHxUp05ViKz`#aM&Oys6i_-oP2)&~xU>Z`R|JKh?BYo^+7jZjKN-%>gwtkOOwvCkoSuT?!vXIkJ>A~^0cRbd ze(S6|7fMTfeq6~;6?gp!=lPQ^f-Nu`8PT((v%^ZCTn~s@Gsq-BUY3n+!3^Z?nn!bA zisCPixfY`%+ipO49__DM>~gblB+fWS5s);h$1KQ|f9fWp)sY0+8kV?&t?3N9%#>@o ziK(>Uj3m(JukWU^`8VN_JZc#Rz%XQVccF+d6?TUN2M-ArJJ{G=IH*j>l7g^BsLE$= zxQbI^1k^D7^H1G{g9LLT&P=e#um=F4CB9utY=ltMU0xm`n0DI8*aM%tQz`KW@83458y`jy!x zWy4~XL6>@O?C2S0V*->gt{$@_cRJxdrKDwDNWs93Hwi1&28}@7xDIuT9jH5F95dHi zdSf}jr5FoQxH9tY-Xdm!@~R(VUL_@`cA{QIx(47DalWQM2_k-~>m8Kumac4lz24Uq zWgVT-6US@FV{0TfO-5DBrrbcqdYprc5wB8C+Mfr8Ha9V8hL1lVC>(^3ts>G^p12Jm zgr__WT1aRrA0!mruCE$|(|exTI296z?CLR<7=*%Qag3vf|Z&JjkHon`m3x|;sERwNX%)Mm_I-z(LxDa3T8usmx8+oh!NrE@gqts zG8-A1a3P+|85|$&gIX4hk4ZAtjzeTnEt(mbd{8(HdHlEl-1TVU4 zSu9UF3@xh?^@sHN+85eoD55lIFqR51#zsbZnBE@K%y$6{vLov(r>tg`qem0!f@i}z z2R6?Jsu>cpR5$&MYV}2rnsK$FZd>36R+$kYTICIAJGtml4M1tCv6%y?VK9wq{sJ{l zDlA*IHK@jR?W{5z8Ad{6Qje)WzF~%hUm}6QB03V1%t5jwk%QE})fAF%LK4x?#>FAY zE22bt_(xHIyE+tyf>GFc{83Jf!oH}GQDFSZG739ROPn@kO~|8;)!Yxc=eqt0#+C~d z^JUssS}a`cjvuTT21G14a8GVvvv1wzfZ>_9wzhh0Irc%NvNVR=I3(mSZIr+8it@;{ zW+Ou)i)aXU%fmy&NOhplD%1de3Mz!2*hf&rs0b9vZ-=OiblOl+gg{|qacI8eo}nU1 z{oGJV|IDmTCH;XUu7VaKiHC*?MF+=8!{G2@q&`RxU|u;)DEg;eKMX5rwb{r39V$7< zr-q66@Js3YVPX~9k7;mt5w31PCz5}HVC9ChTZaqMds?HdHzQvwUTGzi6BEAJBNUkM zqaJ(#NRU-diFcF|kw(Z_+yDtHj&^l!rLUySr>@=DZZnC|XC`OZA$mBA47*tBu5zHR zJwH<#A_stWV|i%sdW_7i9Oo%2t0~_APN%QTKel+SPmK`v6`{>m1~t}ZyFy+sgoE@- zhTY&qB_qG`#Ja^QWPApSXHuBjP`$j8(Y|8)C5+A;h2yckgAfVziUv(IN{Vi^5J8z&($V7=*3lx3OZB6E(c( zTfr(D$ptPC!!vYw7R8AXPSjXEz&IM)jUr$+GCWfZHTTDwNudaLos3w`xgyvIj(LG@A&smSXG`<3yU;@LRRg*eTmyt!us6)Dv2kLCfFA ziG=VQH#z}!v)pXz0SRvPa}t~!I0Vp9&n7X^UIJpB*+lyOQfRp)!HL-kWkgep?TxQC zn-~C_4K2ANR13du1V$e)o4P^54~bun5DqFTlhB6CJ}SZ6Tu#gy16-W79wSw=Ryb0m z01j381SwZ z>ED7yK^iphfb;t$$Z3hfi|cL^Lm375W+fS_h}`uVaH?jRO$=UmIhH?#)-~#>l{mYl zvj!JHb@WTLUACZ+aSTi2A5|Jxl~x_^l54qYR0(JeDs309BC}~IRFZrj^IZGpI}dpq zfE3g=UOtm3^6HkEP0>)1O%>0!tC)|*LX{|$7N|k>u~7LgNBe=178JliXu~!}zu6Rp z2OxD*k9ns30ds4>gYzt$Hr^w*Cy4>-g+^3DrV2$Rb59yJJ0uv(fP@}%K)#hK64g`A1%@fd0<&Q} zSOyGn@NRl%n(A))2_6mlL=!_C%(m#2EHM&fAL2$G4k1F z6JsnEhW}PBE30{md}RUU&CeP*do_^Okd|V{mtf|Sq0%yQZ-!LPDXmyVS2iX0C-b@X z)Mz;IFCZI<$;mbc8G0GqvGl&7(0h_vc|#VK61EScJ=loysVr3t?`W3DN5WJSV=>l4 zUk^Rhs#9KCT&529%j)ss94-zz;% zN1{7;KxhGu$`&)sCdMc%DB`PJ6s;=uRXHmMiPM+vaT3bxbo!3@9pCXwsH^aM=A*u3 zY4IsHWzQ$VKdvBZh_F4cR#&Di;!rkw8L^`J72kq~;-O3=B>r zxT80lgBX#dCO@_&<0Qa^^q9}Abg9a!cu(GHH0!FY_N^*YI^6A+!K%CjYK`rPUT8L* z3)M`6Ntmbt>d&7j$`E;PnhXg>-d~)kioClgi7V)VO@u@qBz`$bc%58nnP-%gmJYW4 ziB}lujsf(xTm$)L8{$6yMQZy-Jwe;AEq6cXZpGW(tYIaq-?GPl%38I!Z7?jt+r}>o zoLnMFX#iUZc_g+$Vs;oRAq8;$6vg@SK+_b_OGlySrs)tt)L34ht%^GSIU8#c5}`Py zE~;cM@mA-w7q){J5>RGMsG z6lj{zw1mmE-JxemuE-0&G56()Lrl1DT1c5lY^YdGo}Vkc^6z=7BQ7#uME5w$Y_eKJ z#A7ih=ZpE_A9q#0NJJRDsR&X}|z?N_=F^2KQ)Iw=HBeZ}@T88}il z!@)VM-v*k&7=&8lwX5+o{=oOFz@z+_x_f4d6m=zY=1yVRC8gR+V?)s*Su|4=$=-$H ze%=_@K`HNdvHf#viqTQZQy8dL25l_6%)~;#2}BN07&~Yr7Hw(lr_$KNep*eKCD!(c zGMm=$t$-IU@0umf5C1lX%ohJf;~CU@z0*Apv-d9I8r}4d^()X|=yUB!#!ON56{)+; zI>yA{b?oRoUloXoD0!{?lJc&FqK1wO(+TKg#E!_zCdaY1q>|T6)nc0gCV2yQGyxp{Gojgc?T5hKIDn%~TUy@wDnZC-O;n4`MpM9zf-JWaya zqw)F^=L$u;fhBWAI!cf?5qBm_JQlR@iV}1eW>Kj{r4_4vm8Cyro}AjfB*z0w8MQ8K zOBs_)EZUmn;T@U_ed{|Bq6VDuP?o*tiKr2g;D>kDhVd{-bG_zjL5A`D`WggJQN2ym zmYdDAA~~3xaZ80zpCbg$h|r*c---RUv%A^cojYa#rmShHn4u;$vW6IMT4`DKa4AN# zSdLsO=ASpyY$mSDN?) zdD6{1Z@URm>o3(AzBD0yXA>N>4)1eTjYz3P+IHE{c17#mzlwU|p3*kt8 zLJ0+l19TX1tSz4_7m#(K>>-FzYnm=3nm(?)^H81fq z$807fXqmoj77WQNEy2{T4k$e=YpkI~nU&IMQMz|%3;2W`f(in8oIF=up{K zYbva2Oo*qV>h_6gUS~EljK;WT>4dGwk&;u$l$jnhW68OqTmsh=D*v znu(gzjyEkA!_?P$E-*0RvA}FEDpIS5jg8ZEk9(u*1J`cX29zjH(vPB4cO8CRkN@EZ z&m!neYC>#LUMZJ#k-uVn>3GjfpMMj&bCp(1b~Hm4hzzrdoGqKrh9_Jri&lzXu%znh zGyi|yQ}{B(-K{S(FR!#3C9cu`&{tXFua*z`6g<@jUh@f|_eQ7LW`q7pKTgREX%^!S zJF-|6-&$ELhV+Oqn>`dAgk{}WEM}_T9J6!q?pQC?HfwC;)e8k)+_xiyTj8Dya`&4E zSa|g(^b7S2gyH^zKir3UgPc{Z&}=5$Fr4G9%tMr^#9vWt#ni%E+fUbuXaWv1<(9Qb z6~PHWTo5OK>{BWRg_j*)Djo#T&`k6!2jBK+sSx2M64$}DFE*PAie+#EmgSY<4$73; zVn3SuET|~0_GDx@T5DFzW`rz~Qf#{s=WVv78`H4<)Vk{wZdCi(!0NI%8WQc*Wnq4% zK)Ypr)`hg6i_%Y?Y)rPg509ldIYEwIFPiG0YC?x9|Np9rTOQ5Wn2OtxiA!(3k5;I; z|Aj(j_i4AdXSn0tXQGDrZ(KF5$u6N4>VHO(u|8LhC=;=hFbop9S(G8RE)T7oJoq}* zI7*#3({gV)oI$_YJQFI&<@t5MNlqg(Dd=0JA@}FRz_A8%U;#5=0WY!!f__*WNFgq< z)qr!E=)%7+cB3A<^Hd`ppD@&HUVNtPS1yKdddW$(zSk-Lw$f!~Zz=>#(0Vk}=HEl_ z!VbMVPBn^<-ht((zHo8E9vEC9M(Uil!uDyKfoaQdFd$AG5>Ptz8j#g%#Y~h-84WYP zOw(Qf(7#Sw=Dx)}-SxRXM^8uKzDW+-ASQ$F(M)DDo!4JhiA1$oBJYp6r%A~fwnG~` zYzfp@9&PZHFUryGP4!@Yncs`~we4S5gw_Kuc{sc;xv^5Dro+cwipN>kyoS6AG99bc zbrR&#G7&{tVxX36y>r={AWM_DUG}OJX`z2Bs1&0H@^=^<3WCSB<{|Z{lx1Mfl@XPq z1f}+xiLs?&cJHoK(NW*T-vAx8c{wD&V!xtF6&e^@6%uHtz00{ui3=eS6X{CE5mKe; zkGMZXC&;DlB(y4Mb(OiMqM)5$KO09#l{9WVYjz~oHMy~tWxGbs-Q3zsGj+0Xv)BL@d-G}tmg6A1 zb)!&J0sC^Jh~nF2<)4jMdY9$R4LOzmO8NWEA}6B8Y$gJ^5!&)L2t|+eJsZT8ydtlG z1YzmqjjFrqx{V^m>POat^go{WDXy2nNbQMAZ>zNLP@ftEz<#S2n$5)1ELi#0JXBl; zeH~FQKp*o0Ri)0tR76_=iQ*<{Z~aiC2vO6V7uaNwL^aLoEp^zUyr|m z@+!@Q@^IOd7uTp_e@{Sy+m;+tZ)+TZGV&%z0wCtpf z9zt)5*u-pwyDu65UF=HMUqw@s6zwgoXsT&;kz$KT>bdhw)9gxrxHrC5Yn_;?UKPB@ z;P}l%RN#bvFb^6r>XGzR_U8Lm)u4qZFhAg@ogt5(Lp(@xLY_`i;<@Q|?$}JzB+h1G zDEB~ZQFX04;481$BBEE$HccXJv0SHjL)4Q7Vpp+)t_tnJqcxceZsD`EOb|>20R(9=H#2#jw%?w^x zFXy)Zq16}XG!x*nZB8S#i{WGeC?Dkd7jDuC`s=ueEk;$TVeZ|UEHh0)jVt)gAI_KW zZ&O7QjO`evdz023ht7(?64NBMi5hEq?4$W`au@*0-dKa+0LpiwE}_GDOyRgOk8rC_ ztcI1Q86u8i?>q$M#kHPU{O5RCv|aQMZ!)%S7ug7CnnW6{ljnhaUwLU6qEoESJHHlv znv?*T{BpZsw{nx{BBCaG?EURZaPh0IaZrszPPz~#b(v`rMccJj8Es3?ou<5bM zY

62>%`pc{K12ZB}OS>&s%ayrSpcj4fYpIs;>qaCivK*R)ot$Xu*rIod)FM{Gf zh5j;j4k`4NlomU3f!OL89x+=T+fGBcB~cyrQ;*%3kG3tOws=A%p`!w)UZG85b^3aNnjZc2TIr27dA{V5kza3 zKie@(CshmDO|ZrEN1;D?{!WpC_<~7fknx2pcdE?Yft?~6jkZmKbQbFJ6tB!EPU22IQdAXqdZr~->N z1jVF`NXP;JyRV^P#TKwXv?ZwLgGjIYK|Ex8aXXEUVBDPCYNw^VEB&Q4CSD z53EG~g!B}2pgv(O^#$4_IlEqDMfy#X1XwbxWB1E18iX-HnQ>sPEK+&-R!|%9gkCvo zhlt~KGDAi;h!nIgHi^1gr`t>U)AF-DiJ7YRBeNTDYCw_@rzQEfkfbxrj4V(%LMR<* zvoO#W-=Xcrkhb)&FNgCx>D2c1^jj?a=1Q5`FNohX$Q4Sq-RH;DSPIe zA)mTfY{iAroQM$w@I~@2QPG}vUjoz=#|!~O>zMgxekn)~IAuamT^Xw(R|gy-kj%}( z&P3-ddu|I1ek#;k2LEkq5rlkMPg0__7NWy6F_+OT02{EdqwvQ3z~?^bJiZO4IUc$h z=P77b#d&r$z|(YJhP|uG61m$AEZgF<_OU91fBC036mRT?$W9#(T zLo$2bP{qaM`Q2i0cgPf4GV+VvVvyP`39*w>I+2s0V`lqvzqOvLHaAoQ&Rn|v7@cpL zGw{VNEan^F623A7Q9}2)X>7mXsQNaYrsSDPS$3xhil=ud{`#~PUva5mQE`)$W@~K! zJ#7_o7IdKVxycA42~ry`Rh9Udnp zi=k~Z_I;d-+R~KnqFi#hc!1ZT`4FVfH24ZJLj7ez+?7nUXR_UEp@mdvXwhSTkVCEz z4jO1t5%>sDWb+82XkLe+?=3~)w{IWpa^#qrb0K7H{G;6XilQPHKnNA?(Bl;$OEhI1 z<@%$m#MK4Ok$Y*6Xa>R-{F!B%#n4KoZd_zONN^5sq4KLMLs6V-WZjh_HxoC-RhAyS znx6TkmHu*|%0)gUVNhmW1zvicY5Is^>Nu>HUnR2DhK4sNi?P)yu@ZB%GBii>)vH8W z_*orxHFg~!55|>{MJlte7KZwCX1N7=LdlsnAP-s?YoeAbp(Xrt|H|hsH%$hc$ou@_ zY9Z7slG_X3Hnx{-MPhp~=4frNE~mS_ShXX`UK|qI7z?ztoq0mr`N~7_lv|&L^ZIBT zH2pF6%W$U7cgLet{9TB;tkT!PX&(jT^Pk$&((`7Y=~-Ak9cW@)e0~|&d;Zm)?9D!9 zKth)N5(nV^Uy9qnhBg^Nh^28b^2^Z13-^wqwSf%|j|L0APD|=k=pPpu((Osui#t2N ztaJk#aH3&qHAs6ufyK|-coL~to^w6+EjC#sj=xwHBy|Yx+Om1w8aTv>6vPa8qc4CjL7+yjK_`9}S3bYWUhgH+##>XA19*2b5E#}n&k<;{4J0pMv+Iq64*KhET zR=jxOy2UjDtrP#DU#+i0+S(4h@6gX&v&FyzM{Pi9LhKhtQqeZ#ntMc4 zp7xH#ADJ7_<6uAplvxH~CX`iFdkRadssLoG46d95RS6gpDVbEYAit)ptlW>zP@e3v z;pl%Uf`LFL*MX)})TV$-qJ0m1#y|d{j zy|b{LUMxc!!ojmT!{Cv6f!0;qsA+F&8{MYskZY}eMBgGkZ9}F4zE5@pK25a!KWO<_9ufTg811)%ua_XI8q#8D6;sx}gmgJDPh;lFcM7G*_Vu~7^Hsq+;oVImlOA>~)l*?kX7(g#Gg+E#_g+!-i{Z@c)+H(OX@VJs(MSw53AN=iLTYHILLhw)cJ*>GuO z=04H;4A%@TSC;J+Q+nYzV~?^Tl@4pKvbq7lrDU{N zwFPxBX+%V=N%Q5`)YMcMo?OI112yYxnHUpM`sS3G;j02$uqoT4d#Igo;>7fsErd#^ zVan1UP{rda9uQH(B3*rO)}ZgzlkR=)RqiQh)4LUnX}=zc&aGRe=ZQf>U79AZepvWX zvb=@(BTLzJdqj*q+1jP+tuFfi5kNjH4(+ZEF&PoZe zQBC1&5{@JnByRn2#W`zHoWqa&L8r=zVzaVKYLacxSVctStyQ!-w2BO8%V-YPVn3o~ zI2P9xfQEx!xA6N3cUrfQj^E)AtUepcq7w4r``~J)GCc4~Kq5mgw597~$)<5|Vq}aFQ)0#wLYs5V)3c_2H9S@7B zvt9RSbRu_l$31Uzo!K%gWG>xu&*LIneN_u3j3ptSZzpBR`45U2D6iH+26zbubNhoL zHT+<{cu@R-9)3W^JT8jQ!oSsWSmkC5VdE8803#n)rPh@_ju;Unh%U0C#A6SMq=iZp zfHjVoAcL)N!p89W+e52h5@M0-uhgQOp1=I^jlGbh-Ueakkp$ zvnrHu&4So;VhW&UQM;PILXFxJC7c37n3|qszqUio!jKw0Zin3es2C7_A>{vFWFq&v zg}^8M&8FY0{LMf7UX-BURtvGo6q?0t1-|v`1J*${!&kZ*h@RTw%HqewVkCyPFxIh* zTDD5_F)@6_3||TAA~?`sy;8C+SoSEz9{UJ|S?<(u`0NCL{j6)XYqI`|zE=A|yAuHR zS>qA^MKyyKKOW6I|F}yEa4LGHA{EqdbO4j<2UIZ?=~Xr_snBd$4UJ@>#9e$`JRSOKa@{Yh0>=gCh3FoM%fD0LAZ*Czk?r0_Z^WP8(-c-R`V#RpMF z1fG3T6+>`66~Y*Ze-dMu{*(%1*!~orah};itaAdMann;`nA-W~wF-RUj7)n74_b(S zLW>^PBnzJsgVa!d+|y!uDoy}`l-3E*fL&c$=2zEnxcX@kogAs{f+-rI>BHT-07m|Z z{%yd<$%lUpvA%y%q`Nuzqq2Z0hp+A6qzshVWu^!`=xzDM-@V4i$ z1_EZw8b}o588<$s!aDx>oEV-SsU>P?GQ0!Z_8KHeK8IS+6Y;BWwAZ!UZ~^J`v)pVY z&dJhkqn=lx>C2x7?zQ=^;@7BX)=HvaA>P|X&#TIzKl;2l2iv8!3nb>^LGBk+wJavT zfP$-#AZiK;J?U?sS{2XV4w!jt4#Sf~v~Tko}n9C1xw3&utkS{V zX(bf7kp|{(s$`JQ{s!+BU!AZczPjx5k}5gqoR=VRp4m#wkw(n-l9TLTHU|PL2|br> zCp)wda zwYvbx#XDUiwOE%+`=fq0%7$&n|M)ZCY#ojLs_mA|{5nA%A%#l;T<{$G#%+OEIP@TwpfiGX0l=(sgL& zjU;}Q4FEz|wH6&?%vQpNR+#3mXr7F=!)2=--?mVsm0o6MW?E*deDf8Ngbd5pVIAN9 zkEi?n<;AaJQ?D>vNyg3N&UsGudQEuLKo_&j!9YaoLYuP-MP%JVk?irBsy9vcYa$9^ z)7EH6c)6#ZEm#{s$ZCFNX|cMisred=1a@Q;q)Di~>opNuq;%0q*2DCnC0r-syufjURt-8<1A+4_Xbupyp&Msza94%R2e8rYG#55-pWsyKp z3B!h7!MYI!rFDDsWtDaN(%}O`R+lHCw(uAd9uqZ!pr;4Z8GJc zSipbVC)*B+8Qsm+Q4rvbH}jy%RFxmZY~t7%2?-uMdkzW*E%pd;VK!4h!?t}lpV>;f zC*6l}Z-`j+y@_N;l($3oVjDUU=}JX#aEhkC?!Mc7zUv5j0L|CyaBKRv_Mo;~TPr zq4MwT54EX`N=PXA87xk|@jA{PtTRHl4E-N_-AQ**jsndhFbdoInq{^UnzybwuZ3oH zc14*oVBUVYA{>sMN-4m@W!v9H_cEv>MsKNm^?y)@eL!`#eGs~=AyfW!_jdO{*Y91$ zuI~E9IAfm2Rc-KCHcQ@Swi1Hdjve>r`(kqVV`khxV5+OlRzhLrw3i>tcitC<-1HC8 zFTCWn{{Xdlv)M}MstV7V{iYbNka!dJV4>MM2@*)kkx#s-s%-gby9B{5O7wY4B{A_W zJOjIqcotFXl}d@Wx3GG!+X*dlx8L)Yh*ulnPz68~ud!DEgvUgf8_ChK=i90vY1Z2! zr#*dkI*aU0aQ)e}(bZ4?9kR2IYALp6X2Oj^f{z_EfF|`06(WzJn%+9BZ)Gk7t!K=A{<<3XJ@7G2u{BpNK+akGB%pE5Mpa{J=>UIz}d7G0|*1 z-DZQav z&{hY2Co-f2?dF{Ue2Cg<+iO&_{ zoyK>UqdroVNE-Ta=rT54ijPD-xHYW=1R*ZtKT=^LzK?LiLSkjd10x(f@No#q%#X#O zNGv~+5o!J7yU0GDfH{2NW6?GIN&E4~cqQ-{Q013_vd+)M;5KBb@r740g4mlh-W9-x)# zIF`PzQSxJv+13>*2teNSwF-dT|26D7BnUkdt&LCQlIX9Fe|WwL2@-*}1QQ$zZfqAk zqeF0~*?a+GsBEB|{jKO7{@~d7 zEjAV;^$y9=P9+btOKKgGqfSQ>rBk;fjAUr;z3wIMIM<7=TCA-H^c8wn?H>GkySCVD z8wk}Tmc&mfs725dRp5~eQMw8NR7WM@k6+SZgHk(Psx{4}CCkZm*}wJ~d)#F+TW zKYdK9>eb5Z!&cr>TmKFn=lt(F`gQ1-^iv%v%5hxMJ`Psru)fR0pXyL2e!c}A2?dM#vsPPCdS0Dz;dlhUHW(Dq&^7 zIn7{Ts1`#K6140*MLFS+NRENqbpu@TG)<46-ti32JcKgJ{b1j%ui>A|;vYmFQRh44 zoj(X{%^!pZsD2w`GDP*`ryZAcz@6Cj13Z=0W*cJy^w}Re=7bN=QkuN3r6t;1$*wco z7#vv2MUgA}?iqmE+&_xGYQQMel9lXR8@qj>*~Z`>p{)ykR5{$Y{V0|V>8Yh??%nQ@ zXta8sE6%0sZ^BA0L`>l_Ed|xqBA1zM>Cgz~fgZn7?(XVUgsLCu;$?-JwzQCte5Z?7 z(E#m^F;gy|=DiRJzHJ0{OLyv*AMiTp9~_sp~+&ijd(6$!dBhu2qv_O_Jh1-Gc09h8=?CZ z(DHBHt0>4m+T{g96#aC2BJ0cQ`h3jwzUyJvrLJ>aXX<20E~K)BaBUyG;u5Qqhbc7ADzvna9Lf2KEz zhadUP*5S7bIx2i?S-&3jpOxJ;WKv#bSUtho`QCVh*9zktN@!`Vw9l=xh20w z=bQvoV=Z-M=zl_0$M3b9@oU>ppU}T=Fxv?K__4p{_V%WzmmUjWFj$h7WKSNzj1ua$ zW^~h3Uu9qw>VtT)(UUDuVK^h35e7;dnvj8%LtEf)mDx4}icz6RkFSwat{Tu^wsi9< zoZ&mWc^MgKV;(!V{QhoEwmc~Zm{9a6uuUkA4Fc~=Fh66ud&h=%!ppjQ3sHBhjc_@u zy~J+}t<56dq0V)HX39^x!`!Yn+X$a8#WQ#U7Xx%JFI=$VDJo}$gz z{Yuxp+*YPJ!=Wx~y_o+^pw+a-v~QsPUcL}H{j z3LK_3GCbiZ>+##ZSB_^Q1w6x0wRww}F(&mJx7dV9|d|9!{y_F8q@*U0Pp zc~_5a004|vz1!_^-RGL6f22Q*Jo*XvRRjJ9#$elWJi!8_n&tC-yowBPy>CeQ{c>F& z?;;*NOXaipw+JjsLdm1?GI#X#DjFZ%(broESgVadDA@)vXL%Jp!_PkpOAH2vKqw51 ztUJpa=foeRXMpxOcF$m~*~SP8iN$Z6ixi4u88oU-J89Z6Vwn>q?(E$UT^rh zJvIbaOh^z*ghcy$RoqJQZ8^S0&L335yld zQ(K_9-*-RbUXMD}e|F78gS)TLOKPCc}QIzr#hsbkHgr@&0Pcp zS70Px#(5Lf?~--S`7V>Q?9n=?Atp#Qi{e#h&eieW=mm4lT?7TKTh7DQdl`d1#l?Zz zfHS9_cX||RNlvm?K9dz5?^0~@T?GGXF_^!3ypzJe4`Fy$VVm#j0SRIOyA1E(@DdLh zc!O9dEE&PL=vzvO?!vp!!wXcThC1UffM|FzYTiAIh+DM&jozpa(mrE>mfeF>aCqJ_opO?MZuE=&ID)03Aopa9vHyUvCJa!)H_ zy+XZund6Ov6R<&(@jP>pUmdmKuY|VYWyU5)InHGuqZ_&DV znLb#1MXT0kySGmHTfpa&wmfL2!ii z_`ggoT@8ktCvVFJ|LRg+{Ko@R0UqM8$m#!M?K=Ros?PrJy{`iZk-ZYe3-7Xr_7&pqQg&+~hhv)4x^CZgetYiNP}m5Vv&%?i zO)kbFAHx3(W4St-Xve~!t0KBHhl6@sO^mU7s#S@0_h7aii<3d2I;&o7fvh6XL)Cs< zj83)R8H4=}3L-nCII5+1BgXzWu!<^18)spgy&Y>0YhRx9A7Q7XpHJ0DP{2v3R*bMC z+NZc;ggpb!!73uDj$831T5$LfE8-1wxjd=(^dI>$RFXtA=uf?*8 zh9g3}%m{OazX-MQXZZ8-kUD~bTBU{g!FH%%Nnym=r=_)6KOM^%osJjOs^w|+EcIQQ zJr-3{tBBh8@fB0k?X-5c*{Rxe`$Cg?C$SAGj7LWWqjz%p*!l{piVOGy8=@U#^A*^% z`(_n4+D_oY9y?{x5xf(@oo||iwRm(s@6(Zt-8UB)d z^l>Q8^Rk;=P}f!Gt9$uQ9ow|EukJViqf zx9=3!(<(6J_4N2y-Sza%SUbD}#7GC|Rq5)`WIGlS-tY9qJ~!au>U)<1D6!e;nc;Rg*sf?5fu_RUB(v33D#h_+2V zUsX)N-8xrR5$_^mA29%|H$vAcLi!+z0PFaxV-qmP%VZUiuJPFYPfW1AMOtx5fB^2* zB;-!CNlSbo(XT=L!hS)2p?ZFzJrW)Bs)$uNw0(l7jhck@h7clfIUl3XnPf+|FN6+) zqQCWTgGMwJpom`1+n~M@WQ6*vPENN6>(v#yzMv1q|7R4EF;mT(Zf7Ewsj8xd;bJgs ze^6D^?QlxQO`vduShzE&?fz1qccyQ1aJz&J)*zA4U(GF%u=6^z)j9J8-nXO`X?|(G z1rs(Jm5EN_FTVe!V!C#VT|Yxs8#t|zo6NbgnrM%+siJ52%kzu8Ygua2zfS8%a>NI* zVBX~^acaSo zh9il~ny@5P0kvwHPEgiPgBKYTge4v2VK5fVyRaZXA4l1_TfOrNeC5FbHB3g}&6e!e z!N7cTD|0BBKf-+R|G+(9ou|`RUF%6fx8X~z5HyP3XRa{5G_Fuy(Wf84vSqTGFcBwl z_KaX)ao*9e;u6!*U93$^flcQYHaGnbY<#ks5ELvC_4N!}w7;Z@8TJ(Tu&NnO3m1sm zm7xPFZ_Ti0pqFGdqh~kZ9baYGDSEY%1#)26qq&be7j%KFW=Jj2GBYABaFpkjBGzGB z(Pr4>KHVMR9A{$Km0+HTXfu~i3DyDp6|6`853CWpN6xMz1I`3#ok5QXaE>{bQLDr( zJDGD%=$rCpQ@ofbH3iEzy`Ss~ICpobs9+JE$&vPR>&j z!qVFII0n`$FfjE&jy+6&opDr7V0*ILyvHZruKMKIk#x}9j`7Vh%!o;9P>wyAzS-N= zCVX<>cZYNA;i^ZDy<1%~(>?(hqqB#L;48qfya*JIuuW69&agG5J^nh& z9u(c#80rL60S~&}T8MmzmjBQQ#KQ%5CmBaZ}^w z*x{rf-bz2`zoRG8i%BsfW}iEKC2E`-c_>p23+h*%FFl`Hn>=ScfAPHL`GeJ*;`WU6>-b17Im#uW`x7IW8b39_5LUcfn1nXAoI$-6ER+SZP?X@bc zt!mXLoyVymhX=%|xTIe5Dmy%ZU>=O`aRiUy@k@j+;_(Yaup;`bi#!Bqu)|~WkQa~B zi2ldpQF$l?k4KQIgvZ13;AZ^Gi{!xq{OKVi<>B!ll2Gw@07=t$+>cy%JnoYRQ}H;3 z>J@n0i()BwRNjNqJ9yqL4?>3s36%#iSs^GX3qN6pyW{~s9zREsGCWSo155BYfpUL% z+$j%C#p4bXHO1pN>gM8cJIX49JVYKCghwYSi}C0vWg`CW8o7Tp{&b<-ACJcca$h+f z=U2*oqwzdX?(^W`k$WfLpI##Opw>%>DfcAfPZjcV#6x$uO&;ip$Ino?9FJR3)*p{s z(A@!#o6%VWkDJg22ag-2oQB5@QjWvpdh}|;<2tlO#N!y6b>eXpoo(?rA}jY_jOVrJ zp^eAY=t7UjRdW9fyuO3nKMH@kQtl`H6>>jfuR0u-`+MP`pFk}G;h?!)AFI4Jk-z~g}2 zTZ)I2dx0Q!*f004z+<1>%U!Zp?&XT^k$bt6m&?5|cw8p;+IUZ$~}GX*dq7v3pYyy zAsHRY<>edjD3zD52(`Y3!5(8+*IE;hHhlvEum6cMTQRKdL@8=uLJcDzPxE9o-3J*E zYR6aFL-oo(L2}qVs153_f4)Li(``W8GJT%T6fB+xX$lIu4MWtf2zXZGhfR`iyf_KGkf>T0(lj^uYXHBIq2n3yx2?A4lS2v$?pHJH+=mTU zyi6DBbaENi1{4zm6lTN*wQ-p)IJK2%LMzew;D`oZ$oOyuUfj4`7kKf;atv&ZtR5Gj zFe3`oEz5PL8Ho_zQOziFzQ(sAnAenK%jz+pZ~&{d8LRVI#UoH$M{5DFT@9j(6VlRM zI}{QWX2(i4N?Q-$_@uSW8ile`x0q89FY+tpy}Ijo$VI5tbDVLaF!d_kI5)0>E(tT0 zJ{UTm8dm9?PfxD`roT#7Gb(gCC@%ErW^bGi?*K(k3x!WhaoA_C2i8^1h-?SzD$iKw zFNK4cWj#m2p?K1rlFTf>vfe)dlj-IAtc{&jIr968& za_g$;=0wP_8ot_&@@W@89oPyQj;8>pYZDEDdUnX1ydE~^KXXi&m> zc8g>+9Yd%T)x1^*U5&uMIM3W_%uv2HKph}<=-D9R?#tJSzPfyy$$ZsxW;yeCSw=D1 zNSB~g%_LvmHoe#3wR}5_2H_F4EZ?5Z-({&2`Sx@)@~)<@(lO_EpT*QWxu_yfx9aK= zd=8nME;pqK-S1?%ic{asAY z8;lTy!MZV+#j<)X*f{9i#orHoVo6~!p!z9(w(-%;frGWqRN6X-5Q z&ji;tUM{PP@r?|T>EPFe$c*+w?qYKiy65Ix>DO(}8c+}>pz{o_3NxZfeO+Mpo1z=C zGh+HH5P%Aog$oMAqR>5-ir2qbr~w?B*9WwMXf?XP9uAjD_4>d#)Pw@ttJeuQ0B8jm zfJ-MRl+|?XE#%GJz^@6Pwa{N$v?izw`xacz*$^o0@T+aw66$VQEZ2Iwssq%06?Yt&4?rF#UgtI3Sm{#!{VGM=SP}o-*1a> z{y{`P4`KD^igaJ(PymplTZVw#!^Ob>a-2#Oz)Vg~cL8#EFMWZ0Z|4%-d&iUnMoMoQ zDOPGJYCsX^F%26O4ubX*=NrTL9>zb)X$)e{D8w_=@-lmB0ro?{#enU4?0X49?Pqd< zuXrN@y@K-%u@)D=ACysYgO=D7bYpT;4AyRnENlv=AWA3HoB{YT1^~uo=*<3<={I|- zfqlcrqmEwXB3VNx7Aq`9-1hx|kq|Y>Ur}DTsUkRSgP}Q;w|_HYdzeBNl*mgaV9yXg%IULs z)1l_@zU9B?O$*0i?HV@r2VHEA!FDrPtCCH25WR6}Z{o}#P1~KQyHHj$$AIYz4{g#Z zJ%8JTBZJp7U4Y^$v{ZM<#+Ks#!8_>T!(1p|sqQdTgCZ2BIX!tW&CQ7GRcM(#P%m6r zyu|_6licM{!HFI|8u^{dbg;m1>*tHw&P`XJxRhhU@|ly^Z)3TyP}|F_ zMNfdPOC%vR(X|7Y$Qs6CJKN;$Huk8QQit$Qyptm1y&EAN{1Rn^NI>x6!?J( zN2u0x00l4n;}x0YI?jdo@>Re^ zs8t7@Rp$AH@&Fm;Rvto)%}6HdZ+NcuqyoB-5YA5;{mmTwc=G~T(*rF$X%47|x9OJd z{cQo&>m{{ztNmLfgw@dNRtDPaZMLRh=@p=bvR1=*4|E%T|rrVRr*|P(zm-UEK3_=#YSeJ226!WKAe2Xh7e& z!?yLc+Nt^w`amb1_>{D>TJda>HT0gX<6{3oZMf8q7@E5gm07jIa=>Ny=2BTh z&siY`G4V26(^^?x2Dko7SwlsQSrF59+C$pces}B)Z2l-U>0*1Bdhs%Qq#Adz{heyw zX>V`264n`T3O#^>HVKZL?SPH0H4_LLy&5(hS3)OAa(}-rJ;zs zOKKO$8iLaEIZJP;jjwm@txoT=yXz;N;55~c#AJ7NBG?g}cG$gnuI!+Xk)6wwTQ6&f zPP3>>#2f0!E;~9H!OQ)SlAM&{+IwI`v>J@m)w^`4=EU8&R6s$P8WhdDgCPio^dlOb z$g#ev{(koWjR91Lw~&aQY=`KTAc)@DZC}!|J&=WVlV_hN0iono)>!k5S!)hA9&vKe zxIOY^&17(%gD=iHXh-U|2k{MPY``~M@fzSl2pL?=h!51vgZAJV+WJ&27A$M3lABAD z1UJIV4!1K7x5{|kar~Yeiur?^YwJQ)C+_UTko_&A1hH&Ig_{f6krm;v$a4-RbZORB zjFKq|$%rO$fgUqu4H0Ua-~E0@Nf|ma7p^W`qqQv5m_2q_a<;4?T0MY=>b;DT4F&nW zQthRycJILz1yW+x4(YqWk~(w5P!B5aNak=&`5ak8MB9P=-pMFgTUb(94r^m0x{dwV z%=>QN=0d3X>xYB*%aQ&;EtDC7>u@~tr*!Oh8QByd&SEngFv)2w^Pc=D| zHI`oXT%zxc)%Xm{z$EZ_Jo!)?FS7{0~&yz0mgn9H{}fT z4`?m#F%GK1N4t+!ix1feR4SNEz(kk4Lz+Yvb^H*f4dR6mJ1x~04(Tk_Z%Ki75Mrm| zGPuf4ZGZS1s-R_*$QpV8*b=*@%1&sX;&)Z{M+hFQA>z#7!KbV36up_64A%rBc2kp+ zT@l2EvW6}vK$I%2#*WeB-(*5-7i?VDYAC9kbwrObPrYZc^*h9uR9eyIOXx9Hio}TD zp~Yk){=+Y*1*@IcnPy~Y#`cO5-zaZ({yO9`F;lg?Ks{V%_tw`NaB>?*rXjb{bv(fS zb+xkAewmsr(-1N+o7r{tQ2j@dAMji7bBX@hvL+8)hC+BpcFx$m&1o8*Rk$U%cx~P$ zP>X;Er>ODub_hbSYJ9EiLe7Pq+E#CG?7Z8MH7l6)bUwc7ANBU+_V-9egPj`+)rHwO z)S4nMQ2qwHUnLx8qr4L{ym$s%_=92}6Ov4JS$&**_E2%aB;V zB_BRf)B;hPv6WNV+U;SuVJ`vVy z3RLa3!OoR6#DEze896x9SBxZSr?-7eYZkgp*iPtiZ2NhkXK zP4*b|O_S|S3bkGU6o$Bn!+^nNLZ#hr#-Rt$6P_GTG=5yuvbUTqb=HpR-a0^^ti2E~ zrg1y*h%NN9!K4CcO{k>cMrvotTH-WAd4fh{`bzSLvu6P`Oq~MY+~R?L0_oVhs_L+9 z=g*V1L}ai;W@HSwp*U{II#%t>sVH-`wEl@MIxPw?YpozbF4eWeR?1r9;8V#rS}lFL zm!=TM*eh^JfrtP%h}5bpbmyV@3j1n$3YMxdN9@NDP*Fo97za>|zS17PuyxjdvJp3p zL}I{c0D;>!TR@ddGd#C=W_tumus&&RK`QLiW|_Gh%G{O8`%Is{2$!lQAVef}>Ge7! zwdQ)Lh|6Sc4^Yrm5;-p!&w`^gHYGwYMn>7xx1+tb%4-7&z?iw9-y#fCM4Pa}D=g?G% zOv^+`w~XSA6-D}}g3IK-(eG>TkA__sQjZ4bS1Jj9OOQ1iQga9 zg;@1Fh6UarYr{an;(ue0>41exKmq4?Z9h;r+j_G4_c5J3jk*r60a4!ok^1784jgqT zR?FHxpg`J#nt7c)Os`oIFhGVu60CC9O@d?F8*F%NZ@W%+Y~R38;e4s>6`(L9$Ey|B z>lA;U^?*>i^=5nV$b-P61)G(m7y?-WS6VNi{QY^xyT(EM=lsH#4Gw&n8JWd39uQ22 z;gL5(=|{8WE3r-^i8b;K5L4jM_jLhV_G?|qLur$#2YX=30)EzhLaBNca z54A3YdNI*3e~xm!+17{FZ?IFM&}-urW2f>KbQ{dZkH_z@$H0eDOL&4ll*rYAo5Z<1 z(8O;Wn~eq$nbaa)nNJ>{h{i&$BLeP3ZXNDyLXB$zigz3YoJ}#6Fd(l=SZb3bqs9Wp_ z=$cbYL>H*F8M#t@e2Y$)-FOS?zk!HYETQfXz^VP+JMdO$IiMgIONxoN20<|(l`t&6 z)r?#kSdkoG`RW3%zM%iZw|?)#U0`^gK(OBgAhO%79P>kS6O`9SmG@BhlmH@IOLPPI z$*S{R!IYC=rXwMCWIDPgbiS;e0ycC7N0tP}I2jkRc!rHP|uA}Iop!jdQv6& z%AVcv1e^&OJDiLEd(MEc$k=64ZAaqbLgTyI2@ zaVM&$Z`ZBwH@7?PnOY*cRNiJDw}^SSQfkv(p#u`y1sgN6K+QR>d-toy zA*w(`P!~kacj)v+5~$gC*vngB{%phZTU>4vt#_@RRuA(*SlS`RZOZ#X-0R;p+vYw}CiRul!4wV>=Amac;ANJvh1XGJfR zwFFKXeX;z6PJ=yg0+=@>4e?Uv^lkZmM6-jaZS3skK=3Vx;f}tA4oTEBmJ7A{d!|nA zS>f67OliKKXj2{N>VUM{v)VeWm9+sl)uX1Lw1a34(PA5?BqS!dT*Y9+U};34nvvxy z^Q1jYZ>*9Nwj?>Zwj@jjqP4)%&B!w6bUF3kpv5wL{p@f3sZV9#^&H$(=#=b+1;CmR zuEV`g73=#23Z(ht{K z{mkdhe3<#if#?{@d!Ic)4ZqL65>AI&;;x*yr|t`8`neeZFT|y}JH6sq5pKn?QqlKo zoE@ju-EUWzDBV{}*T6QaBzu(q0egt*^k6VZ8a-}sswbd&TH6JIBSW`=b7U^hgs4I5 zfhoD()P&geg&Tqf{cz5+fl4JLxDR@$(F_+DG8N;|*y|Z&hc5Djz~yndHQl%YQMq56 ze?Zy8X8hOs3o3Fx#zH{+jz{gG`a6%kx#7u4PET{eHRc@SB3K$_h8cNnreCdl*p5(9 zkJ<_7`%=3W?45&Go9QnoDcRhWxo3SA$yamdDwnDAw$+OP`eM$d}F4+#HST=YR4mXIOz&o=^BEg zdjxb7aH$o5j^UM&^_l+legJ~s$JiJ6x9ILm)dimn10)leM1^7g({rn5CQ^5wvP#Uu z<|yNJqk_Jw#qibDosaiWNBsG(bXBB2{1tSIMY4`iC17UN?bmomdoomw$G?DaQ|AGN zV}2aZtSBi&0hmdp2>$b;5(B2WG-#97sRfggkm{}lgYgjTbYSn>f0Vm+u2!D5!5b2vTD~j{b)iuYrrUbaOjzNp*MW7o-4OGXr(}`^*RLp7H%XuSs%6W^&``Vv3 zjtBy(j>u^)C@wp#D~opew4DSOVr@%MuKMP*P8EuJ4DZO5wM1AMW;pXPyU)D#R@3>+ zRNjXy&z|J604a5yx~MlGzwmwQpcQL{nlGAL%*Ci;1>MoxYh)LqUv=H^E;eq9d{7xY7XY{xj(Z4CFpYzaraY@V!01!?Fdwm zbG{IkDgR4G$sw20qsBdM4@CY^9g#{$*q&skU=RktT} zA(j)Lu)`;Vf*7ZBg6?YB;{jj*O*xSB69hb<$OvX?9f3}^2fP0X9q#ovQef`s;NZ5s z2*-^J!R&3#xEFSloaAC zly!to7h@Z&d0tno^M>c`Wxzh``h#LQD3(8|t8IMbNyJC3m372dbGb*KP^+G_ZT%ko z4uoTKWgTHwModONp5@D{pm2kQPbfca56b=SPO9uo- zt2RBQlMr{1Vy>*COMyi}UVKWIx%L$(TCBoxhUd6vxu=VDgOvb{>X&9dPIe=D@pc^u zt8f+AMh4iLk-yFI6_)!e(BreBtSsO6BYpB#pVcPMIdlYs06rwbb<-w1{jx3sT=Oy5 zq-X5J_V?cQXYhGAD8oU4gQBi^Mt8KHeFpm*6a*|u@pmo7;AfH8h;JoO>0A`g<6GBP zRCp&r#Gtl|?xIk|&q7L<$U1_$#PEOitPaEf2(RQ#K-iWyLHFl0>wId~b9QGF*;60k z>K|fw_8Av@rhCpahM^ z{m>umYdTfPI>LZ{4E@TN?6f)BdyYPKU}4GdvAeLaP~&QtmPwq|B+p#yPu4Q?UkC|X zXuMcAksSf*7$C?GNq9x~A;qr*a$J+u(LdVpU3QzYZh9c@0(aKm)#=ym0cygZ>=5U;oj55b$&zVLIyGr~hOR4aTZ-z7hQ-Tp;W=Sw~0?wuuUVSyx1V!^>C;%q+3C zO`xcL*-mf&kiPsf3IXqX#jYHVcJF@AVCx7N0{?~&^ zJaQV1IsN8cnENHN&M6daVqPA8-JaO~ymWiRF1)C-tee5XhjZ|sx^}>wZ`iiJ_%I_2 zpu3>K;8_ja%rNZOYYflNjcYthQLE=RYc8stA2X*TgF>i*Z`zeGNb6{rI|k|3>c!8x z_fRX|wukHEqi{fQ!l4Yh6>_X$tQz>19Z7A800*_DC{LDei?6WIn}uS%8yFK51k^q2 zEjye{h;KMdtRFDZ1_!GnV8Yv(zz=WdDDyv=Xr=atZ(*O$mvuya09LE6f7YGI(SL^2 z1_f~zQmoWc93TaTNlb-#<#+tq?j4N%oQhRXL{dnqOC1NB+yEOh@*8#X&vuVkt-RwV zZsnwIdD~tbjxymL4OGgx&%DoEW~O>J0~7wewH`l0-o&bYv2=AFIk9x1 z_|UcQ+SA(?0;k`#!&_QRpoqgAFxMZlYOUqS&%4OnX1s>x*LN6~pj><1CJZB;TRB|C zz1FMen7BCI7It(jhMlwAMT)!8qFVl*y|T;hKC*5jWe>CgGb&8o`Mw>croV5;PSS21 zMvFlPq^Bjhq~GqYvd&L_LovU%zi;QZ|K;8PWuIu`6|iRT#Sx)jbQXOT5niOAT`Vi2SoRwChVl5hWJFh}0_)ns@=4u?{sq zFi*m68IFM92;)`bomub(JP!|AA`VOFpp6 z83{20D>>0`MkT4!pV&jt1i79T{X}jn=SP}Q@*{t@mjTVJr!7u2Gb$mgu-Lx=H)QNo zEl8mvKgA3e$a>o4>5<#c}B`KjGYuOKot0Q!3zu9r5O%qQy! z<{@-K-SH1wq-s~zDPuxt8DYjEy2?DCkx6Mn9OFTyb0K9E3v#v94 zL0^R4J$c6@{nO4wOj13A&ftGFqteu>f7$)@mm`53gpd=+ad~gBR?JFv)+(9Hr&+7N ze}bcEO)&;=&-7D!KDUQ)y$J(3JW_+;aV2=5^-n!hszIb4{zMmX;=C0bZH1cgxjhy| z`-~Oba)uc-CabX2w*mk2&MnwhUQq0vtfqW!Ph7uP))QTG?uF6(H)wc<|2Nye(L1}e zuw-?xI3^)^M(Cxdxt0slPXx}H{!z~Kw=dAs|Aj3IB7$%rQp^9Pa~0Qs!l}g2(Lh*3 zwP%QRvo*$i#9U)`GETIFG<2w3AnOU}IJeX^d|w_Ky5+DWs&`^}xo@>L*V4HMnV0Cq zAiAUa!I{91qh?NRq+q)7?x*!S(SzArfMph%kp&OYoR zubS~s-Gx#8Pi*ydvc3<9sa&1>r%t*07!;vfWIdz!D)_nyYQjI!V=3}8oi4fRGf+Yh z_5vjYp&2zkKzZe7b}xPYA#X=yu;FratyPJvCk6)}r5QCY!0qeLbQ)^Z=j_amGa6zn zV_Ah6*56P#sQ?+YcfibAW_pd6=xrH?ob!4@M`bt>hrhE&>4hhCa$wPMiRfbQ5}t#; zL-NvUSuenh@skU_&=yDj!g0jZ6L=zw9F>DLh2MHf1-hgo_#Upp^0Ep&g6(XWfWaG& zMnCShGmB(BK`JQqW>of%a@T2DD)~!$JP^5h2Imox+xevq!#n;Z1Pv${nMaBjwG`%8 zmm-7;1834|sxq+s)aCY)AytCo! zD$gseC@Uyf9!v&3LoZNm3dhprPvS1?f{;Sbo1T*Zp#A~4{5Tx4OReEnH$)uAqY`T^ zLks(z7c1-0)ygAgp}Al^v9Faljn{ibT#EL}X6_ZP0Vs~H4^v~mwjY3nTF*E)Sg6h4 z=-}hXZ|ra2aj0irJL82$eyh6#eBat(Q$Z0GpfIE6Wt9}JD?sOWY*NOT%;cYneWlv4 zGj;E`c3~K2t0VjM?e%nqYTg$a?E-)N-1v@F)i@j&FAYTD(8F= z7E&qer_z)KFsL@2FDB{jF4i$YsBA)doGVV_5?McmY)r8E+xbER2#&iT@aD;_Z_c|w zOwz0DPT}&AX((Ikx-PcLdLp!2@Zy&*5M%UVUrA7qkei>Hl6e^8fRDD1YH0p)B0u^G@7=S}Sc~HkBIvkO4gD@oDY=o@`mq_{c%zybYY!RIDy9^#wJf zfqvMji1BYl|5l;p9t=wcL=Gjxtzfvi03ND^KD~R&`Ff%`5dVou?)2TYvYru>x!6KY zokWy=BQjPBp=yYgayfn=*%>0qyWq1mq`o!+1y-Iw~_n3}|0SY!4A( z>6nnr)(I)k@)x5WQUHV2O|trBh!{7>oB>Z-wPBnwsu68H6@jsLTh*vT^r~5irmy8{ zX$LWH`9@j45>jjjq?pX|S2%M%t75&+n}hKZ26hay$}E2=3jgHB#>aVcx1lf+N&s#D z$;A5a;}X<_E+WhaMns1lMwk3|jGPq?l=((!!S8oXpikpql^rSupyy`&a=a!V^E)S0 zXuPf}RICNsQ@<1xS)jP!BBALvI{qS2MvaZ2KC~qD;6*}Xfq!rj#5O31;FF?D7aaws zYci&bfW0$ayZ*cBQhaq3wTSMe}97 zfJ*NzqV+c=o&KZ;zN{chN&Uh6G}ni0F8=XsfwHQsvMnr^;i z9x=S;CiG?Ah5yj=se#ZJfxgT839sIJ!o+C(W(r7rRE~2?{6(^X;cE1-EDIN!E;0jI=6 zf;+l8)JjEy-4}-WBx=+zHoovwdBUv!vo@NW%{b$4#tnePynV$Ops;2N1nwXR+{e_3 z{vuK}^cVTQ<+7m#WizAh&Dw@Ilnp+>U{i8Oq2yo@L#4by_rjx~#14g^bghya+*kN< zavB(s#glVIU(FU(uk;m8IqP&adZ0*#d}tt;M)@#dpiVwi3>0|~$qht5DU#nDC=!EN zQci9vj7Qfw1s9^0fAyEHjvDbo|fY7*R@(U5OxBnVMhHz-DwM3-&C51 z019goiVnL%HE>2Nus>#PGNYc&mkk6yX5nP*@d{0I>(gEl4sgDKV1@(EKa-6XMhNjK zD$3UvRq8lcFjcT&FsK=e5j$86)nid~%)tSYepZ)Ma3K%^E@sqIDsHf5tDHJLSX^Mj zLT@0D2|ZmsKScB?*2;7ijzko8Vv@Uz6IPa(rL(e+2fwmvf-S-mLy_~`$%r(}0kHQr z7?Eg5b{{UvTIfu_#9vimX#&4i$p!{r(Q_<@3r+XCrNeQG%)LgmnkYm>N7=yGFivsZ zFcCz!3r#XiGTNWIj>I`{42u4-YSd7X&P9%K2JcbhhYFz=*GPBab%zjPckjD3vVi~z zgNCjgDkAiIg%P-P%cQy;uHZt@1YFFh->GYcilOc6#fihjeD(G)k)|q!i%58r8i*y% z#{s!{xQNz=M-lnL)svW*;=X!9%}Kb2FEfnao9~%*#$`x*9c4XdZm}vlfxz(rN&2z6x88uAa;is5;N)zhdC>U&O>vSjVM2-n>gi?$hIp`Ho?X-{ftkr&jfV0+UJC99S)-g8 z?y&@QTeJub3$@P2Wi-X`oc8SUj7Eoo-iT5TjRwz5%KKJAWhuW5WD+%>L6T__vIfon34=zH@3X1X~C-S&kp zS!6+?@{P-D0oKGZ9oFx*v7X6dS6RMu;tib=yj>y^3KfyX@z@IykwR1PWoe{vN+rN2 z86n0~(;-wk5wsZ*LX%{_Ga|58iIvi=eJn!6v@gWo#5>gHNby8vD0(q>Fi;b!7V#IS zuqR$cfwqChTFlB;<0oe4+$U#~Y#=c)d4KGV(cK@9#fY#pq5++ZXjT9mh5)U(Ru}VbGuQak zsKXD>{*@;i7+1++7*SuVV<{R1PF1IhaKsig5WsX|3;wN2;>19`x=%?7l^`j_9p?i^ zL@Ws^Y>3kxz9Vq}_(4G=(s}il=kRLik9hUj@`wl|t@rlW9nKWBA5F#AP0a)2nr_b_E@|B~LY;by&6Zi&&Bt1dZCX3Ff zir7H-(BWpD3pe$2GQMfCY#^4%`f?v9>(G#aDcD>%`$T=6v;SQXXMa100Hih$;bqv| zwJEwA#gP`EV5qP2ns0)54T)O9Y*6T-8bwTRwi3+8&3ZUSA7hb+s6G(s`7oTFVx?q`Cgp z8zALMf(t((a!#=suf~iQp-4+>Sl7y~+qtn*+s9)^VjHgo14pA8uiN;49WMqA>1y~4 z&qJO)NG2RCy-*AIC1-I5n1^Ap-$i`maI2jksO&Pi) z@Ja?0?|HJ3;h8A1q`u7%ee`FK72>elfw{Vykl+Y2Z<?(RFwWMg-* zVSw}1nL<-0?zv164z#hc8z_i2Mvo56p>u?DDvGswtqR9pa>7hI8`F`k2bp`HHQRi{ zNzXEj_l(EsfR5=s9Imk?vT-=xLvMLTw$59=JzG>DqpFccHvN5HWQ+cKeZ&b7WRPIG zE5ZX@=r$pj%p9Gbye&se1k~6_CkLU%U*?E7{fY)MMdlOy7#<88 zXJhchxWph19^*n8p|XFbZbcuMi5-bOJOC8j!>`R0L-hGljIKeZdt9Mx~SPLJONU!r0d(y1GSod1vQ0hvUE6|I+r4D|PY$Uo(&-9gZ zbZ*L5=LEpJr__?!;#Z+q8G`jbN{=PYb3`wdHAnQ*Zwv>}9*O!O?ijQUvXLM;{H4uv z#YnyC6|mnBftBpin95}%!Tw^No`vd~Il@*4=juR$JLigwPP1hroh&f_l$k4fv_HGU zbHyGsY;UB02`9*mo~yF6MfhB;CynL=BynooSrNO|VBkfGhIz_!)U(4AZarWvHWwJ5 zVTls!CiX$>N8@C?i1_O9B|3cd%_XomKtaq66lQdhIfT+wH1KXB?9RK_s})Owc{j`UF^D}S-Q8?>t!!kBD{ve2+xbG%C8W!Oz}8Gt zv*w8;&Hw>=XB36%j(Ne1f-}JSJeYyA(CtQo@|=O&=ILhO^?8^92z_Ghh$S(j*Qs6e zbrERE^8ti|h_E&TP=S?<^RE(a|al}K`FB#ef55Owo%U1;H(%VEZ@ zla0jC=wCQ*g^1Sc&Vg@7TCe-tvEKtJ^ceNdY=4o@JIuSFuoO+~3xhSYh#sUTtE*Os zP?X(iq$dE!N1a@ugP8xcLWDc13!RL)hUb_k(R#vKX?|&5XU;OdHf~nl!vhim-pGQ5&&EE z@vN@#BhIc-q;~lr`f(ugzyb%tj6S61^z7Y7J>nCc+dssw`Jg3&lGr3DoAbmly^vXST< zW8kBkxi~pKTrsY9_WIGJOZEC%#sp=fH_hxdh*N-YE&-e2WOLXly*t@gj-DKAwfRCV z`-brVX=&;4uHj>7gc_ZpsUI6!+sGmd(eTz?N{+4-95`eWxDFiTd8vxX7n2DrT&(>0 zVt7i9Y~19$1WS9BGw|6(NEFkgiK*H7A{@;t8aIM=BtQB}ht~OjGknFYNu}j+Bp>_J zFB|>fu^Kz%7x^MVFG`q0>%=l8q`J&M%oUMdXReyspQ|5ERlqDlZ1KvqDrKEW8V$)r zq}7p34bF*el}w4+uexfT2qS|4!it%xKSu`dtP@^=h~neOvirum#mYASf$Xsi=tH5C89NA>HGPv#B7_>+X z?ju~j?rk(*HW^@wTpP8qK=f;0zFu8`{R`Zo5)^<&)uRPEhx3Q{7YG$l)~ah7wf@pVcRCrT&GkGTra}n1KQ|t1KFo}o*wAL zHV3%-DRZwm!g$Hph4wcn=73*VK_X*Z!DFSm6@0c7E0`;rh>S68^^;PeX=NK$7NF?b zLNT^X^wG;KCL7>?iHK5b!u zvudq5+Z^S&(-bEE()CM??b^*&xf@0AIQ;ZoIH3l^3H1cZ0{hna%2xYIT|a&N?4PPD zHVToNBb$hB4(3EY)%Fi`Q>n_fh-rN9q!r-Mua(0ugXiGP0bRzpGm_HXPJxxOiN1x& z-0;6p6F2El&ah38mLQ@h0YqxtCJ{t43ny^`XiI#YyP)TG*+dt@Hop6`x~Nq2Rwp*; z;=bSABu-XhqPd0QF&%_koeBN*IZp@AKc>Td{zHw+u_ds)aWJqKdd7KrS$_tST5XLq zpE8e_si;g?Z$$C^D45wa;d}#kZURQ&+~coe1TZ4JGpA*HZ}RnJyr$HQC*fc zn6u(}@+LF-{don8WE0UX$Ipj9vJACq-YUAce-A#mRjfe;$|izSgux@W=~BS*wuxzo zVs9cc1@l~;+!jn6z2iMZ5qbpDwMo&XvWZ|G9af#U>--I4w~N2PIoFf~3dcG3I;Jt7 zX6G!u$W^m;z>hLlHZi0*n&;{@*CHgKX^U_%+xekolDaI@TEd$^j z+J8FVH3x}Oy7_aqF@q1djnRU+Z5OPSO#~zf>7LoCgLH>qBL0B7j7SCSmGHfSqXHXEs1ce#>FI9W7 zR`7x--Wq81#Hvrms(+E=EAXO)z`8E7X&!zSj;rWf{A@jb1m2AGImR~G}(<+^;hFmHpbd*gDdZQXM{8AAa4F2bceYQ?&V+v)62p+hY(ch`4 zOGQw9XMTiHrfec47fwdsw0w6^dzG*kjLWp7mQFKj#APB5KyDKeZ3jL7H`v8;YP}e` zj;E@+j6Qv&DTWwp4bSg9C(Y+k@&~b0<~CDU^Nc5yw?p_e)Gq*z(nQz?V$qBVQQz#< zStil@aMyx}Fb`$vS9^7`loYUYn+Vs?P>$))GBcD=8+_Ux((1~6A`Iobo0fwC#c9li ztqhnZ8LT*9K`rKxrJkMH)I>0vm(lj!Vz|Dy0R3n9F98lT*WH5sH~`x{XOkIoLF?GQ z?~13U?GrYyJ%-NmO)GYZ;laeb0v|-Y1X?(`pdM^hhRz~Q(2O}>`F4qL_3|#!NzabV z&?_l1G1;xagB?R?9d_rnvD4RLb+c1X>=uhFLp@$N0g4PyN9$GVVQaI+#$0~mJL5j1 z$aBh*hdFXo6vOx*_JSkWQ%BB_O$2dzaTa>z_}1f+NpJr)X}J-cvLR`yY3{fpHSTgT z9SPD+L~>R_l2l(V;@VYYPQ7@!c-o|$Nhjy-0frgVM;$vL2CJC|MNj2DD6VY@s99nl z8@~cma-UUcerGDwh#Y7Vfw(%VjemCYrGm4(ZI; z@I1 zL~@EjaZQy-ZFhRryH#Rts9!b_O3A0t9O`T>wX_;_C)#uAIVXh*A(|c~rMvImWwL2I zxQ!<_;c&APvb1$+)$4d8_vtp!GR?}wKAoi<0U-+nkH#k@y2~zbyL2=b8J=sfU4D-o zg%0LpD9wIKc`xsp)*X_ixifaiQatc7_y*LHTAdDas8)n^-fhU{5C*s4KXsy3Olp5} zE9*qKL({31CaNw7nmoWR&9o6AZ`I%GM1+3BG9&^~b8)E&?pXCzvYD6zRr8E`ooZfL zkKKkB6AY%JbbY-}?|q{lxCSPX5wVy=GiD@?TmCv!r5S~m?p0zf441KTwCP%8>@ zVVq$;|_*z@FsfwB|+5rfBsq# zHUSGU3{0>U%$V5$CX;++8_-`qNG^kpV0)~U%|pS3Cg`Lix}$i>5%@ZbWwQXqN}iRO zs_1YqnIm*nAv`<|_OHvsyhJt+0;hDm`^*)(u%PfO16wmjtvM_r5C++72S%X^4{J0e zb^GCf&>7-e24 z(mm8O2x^G!feNz4veAukyEzoF%U1jdE@9(R9826Sad?qq!7K?ZJ}&(7vo^l3IQ>T* z6VAqEh6RA^bih(=8y8#|{RpmV*44rJcz%RSV0a^1hqve_ho>7|<`0J#+sbv}xp7sY z*I;?@eK9TH7k7;=s)Q79LN-T(!jUiY1Fy`&JiFyfd*XrlhA>XzQrx8{z%#0q=e+iL z{=f6Zm!Z=&}IIAK9Znx(U?m>m6rnb9^g@B44pLa7*SP z2}oy12K0`l;12K>J&j!;OF;LZZhCfk)&gJ%F@I%_LmTB?$TZl6qrhLm>?!r@+eEsG zy+KU8$k-~ICu6)7oUmeb;zlu09lk+?P19N@1c8{>oQ%FbEQMbME95%)}n zAvfxbyGb_+Ur4NMoz>T2}4W0^UWGdU9G&ix&duDBhW4nz!t1d)39b{#(b>Fr`;m)#f0=DGajZanB0t51%LNz;PbQrN37Y15L@ z<6XG#?tZd)4%yK-`0%(`*6yUAT6TxH$&9XrqG=oWzh_Yuwx@NiHNpHdF!{@kTKvaf zg|eBLH0w3obeD+LCz3Lg5BCES`CNMm9dN@`{0X=pqfZJOg#elvqRK)5F}u~RcZsOr z__8|pS>>cKz)bbZ3Aoju3lfrL0?wN!bRcfGlW-4!f*2+f4r2DIJ5K7b;#Wb$*ATJf zYi>KKdyPX;Dw_#P7Ghs~cTyzljbvgvIFZSzaqcW>upzcfHXD8}lG|NdHRvwr*`Q!F zF(}NKOI69wb=k@!>Kkh2AzS%+!}OTPjqA~YdZP87wax}uOid0--9cAqF=%uACC(qSeTCXU zLg#W}${_1z#wEKX0nEcSc!6UcR=2$%qX;36h5o5pKcB;ypc$qCUR2jK0IFFH&V>0o zoYLI{<4?iL1bmPO3cv?u%%PUCOe`w$PA)>PkHXb@wW#Kl2p}Y(e9vGf}=lRxK1{&#{hF7Z@#`;M74kF z((l0q2+>HN14ZNVdvv0)`X1zWe0+}>fRdLx0C^2HjG>+@5e+cbd>TbaKQXTGOtwA< zc*yV%=E`Pb`HsKrNDkUIl@%10qZqos)F13_cH%$)Ah_@Y>n>xU8haniG#qLM0Me%& zb5o9Qdwv;DWjQnqxF9_5|pFU>1-f?0C% z)vEh+f^Fx0m|`gA#H@W-lw!>i8w3omFLIsZ>P79XIyLvtEEc*X1+) z=fdAX+`-?CxPw3ObLUz-(fqK^w0!v?OfzU&5Onp;LpqIk&kQllNHYXg3ev6LAV1@L^Cq+} zB0RTJDuU!w!EnxLVe9i(Sh$hp{}bHNe_-?k;E9ERR31^gekHu>sb7l}m^X?(05CUW z9#SVB6TQx#osaNJXLCbkQpEe6z44&)w`${K;zB)?z#-u3!w_7GKe*9f;c$DPja&Px za^NxSw-r(m^=E|5@yEoF;NFj*2)y5AW`hgyeQ+^j?&JG4MFU3t0+vCMRK)aGlIWD0 zIHh;E+VKlrIN;G1O8V*?%6r==^$0|uICIL`wVAP%8IbIV(|dBTMBYiIhzs^k@*`nK zw=*5_!q7+DO5+k>O|)6|p~js?H)94{o*p)4cs6-5QD^#Fpb-15Rn`deee*7JkC|_# zqT~GEjHit|VG{$HR>ZPlovWEoi(&d!pg(YjY&6J9mzRkJ+P2k6X(UvR<>T?6dUD4FuT?RB19ZotU9~=?%_2{Yl zoN>hZmyu`j^ESfY9k8&Ilq#mLcpmf-zboZ5Y|F$zAK&+G5UaVUj8_L=s@FA z%8I2T4h2t#+W5SP)6W@q0kZiM5>wm>Q5agT>iH}hORbS=G#E1Mrr)!=Xw%$hk%ylz z6`@3WN^g8t=Yn|aS#f8l9a0f?+X;$)KPSewe^PUvhZ?u+Nt97}?s<_o!2Ak+hb99s z>AmKDGaC(!n*g0oxBkg`LCX6~pS~*P1+g*|@0f^p?BE4@MwL7RT;TX`#ZY~`2R9YU zf~25BrmIYWih4%8Lp5Zw`u0UJ9^s>E8rToz9{MCFznmeCMHTD3TJOGdX4r}c+FX2U zf@>*PNi`KLY4~LSpAh;3&3HffHjw%0l7<-A6mYTm-5&)8mgC#1ci1`OqFDiCASng? zo+9Aq6v_KP-6cNow<3JvBB>^Uf|1TK9|Q(4jUB$clk&Ia6~Rc-9W%8N zYzBr}#0Y%&CgRU(&kbe_9d$mS9CWasStK8{t1aAVi4sY|vc~8^i&N?&3k3tX-n7hO`#26vwbk3Ne z{J#fkq;**^(~dq!IIh}82}Z>2!AKSTUT3;qjrUN360|49qgslOK@kdy+?K({eB%sO zubFbN5F;3@>#T#(+*U?kJB$_t_0>OML{lQv7;kuf<5atO&AJWoLa~S?yBnd0U0A;0 z$)1C#IuM;X2o z7Xc_X1}MzfFty-Skg5$?t)yH0V2Ms&J^@M=P6JdUx!-6v)+}p&~HMQ zrgG0k$dj+OHd?c-c&n%Rq4@;rqW=YjWmy+}nLJD!gua^C7?@T7rqGrN316iZz^d?@ zLX?*bF65Db8MM#jgx*Q6sh=+o6E-0E zO!U(Ghxvi=FY~YF>*(V40;;6{!uSNq4tJZ!0Y@D%52JAA0rN653wgU0W{J7Zb35*p z#pYa3vS);6IC}Ek=;`O_Ug-%z)cbiT-SD|bp?cPP)?3!g<`i?Rr`Aj{MA;zuFFl`n&LGe91zEKMkKf3u3-OW8uaLg7b_YJVkE|VuM{ilP5szN7 zW)L1dWi_fWh4hfsa2vExSGJIcbd`tl4WnZZ+1M42?x=)|M>mu&#-l6hYlGq|S%(CU zj;5?n!NZXC!|}uK(CHqJZ)83CA9VOy)*-RJ!@p%+8Qv5o>(=2{FBOlvMvdK{7lwG;_**eHxQ41$hvNLd@AcOiVlC5wVUwxMAojs<6~J% zZXd~7a{Ex$PQ~K`Svv}kGqQFV9)FXyGvKI5x;aypCF&^*88gluotXYc3 zUn*q{*}N@lCgbsES(ApxTe2n=k2hrv>EDnwh_dSNx~xId>JG2T>MeM@DyvKIctut( z!Q*9FJqM3J$!ZSfkFt6+9)FP4@p$}RR`cd{B%sKak%HM#tstg67{MOj(30ng`U z)qFgjlU3Q6lkT#LY@U@>>3BRNt77nYT2^`ScuH3Fz~k5Q5a>I0K`DMbE<*nXJVMd- z1CP#VE`vuWw0**(BN~K(=K$Hz2Y>VphInP;cKls9%D~_eCL6K79s9{flJ`aFH9Y#DP9Xl}AlZn~ zckGSgjCk}yoliV^%EoZ~-9XvE(TAXC5QfpQ1NzM2r{S_5+q1*BvL0V(q{$}iD?Tu7 zA%jtA!}(Jqitrfm&U-l+>;%?N=B(jQ7;ndc$YjT3017+c(I4ecK#x}Bxy&vZ0~f_h zIQQGF98`dQz|1u-j4^v5H0>tkt?f4wwSf;4#3j%WI~u|ti7$mE>)|yEMoA}dfp8#H zZE%Zwuq2Y}upFgfd3J5!6MsRu)7A3u|6}bv;Nz&S_TiaXnu~D3RdQL`y5p*{tM1;r zWJ&JbYe|-6$y!;KY;25$>EnWJim!ULX{Lw72_XbXCG;fZ4UkZh5K|A`-7Thcjm=azHNc}^oT%8NSTjW}B$6vk3Mz{8SLGTpU}wmCI~L|5>|Qf1(c zxJzW~8=9!JvroJc7ch|yT0?gPq2Txgx$#Xe{cwo{DOlZ|UIa$;Nq~`D_ogn==lGj( z(W9bJ#ikchfQ(kOG`+^R4v{v$0oWRYyypsY0!nzq%TaH|Rj4hcvyZ(UceM#5 zzGgtj`)2=L_r6#C9gPmTQ+pY+476^Y<2&Da-l|2V)Q?ckC&s9e{!{%&!Tv^t!4bdj>TitRa|`>}pwhX=?Wdh(SxTNbaXN-+mRtoUMljLGh5wl|9hCeq<>oTJkFq1K1vpPQ7smZ|K z1BMyDB`b_V5BNVAzrEOxFwqOj ze_Dn+r4|Pp{)DxWlf5~scwbd9ETCEF-s!FN0BeII+8))sUB>vq3!R!&Zre+6m~a1A z+#`$iwAfk2g}J1~95hyGsCr9kG4IZm$P+ z=jSKnhj++fpTsqzdP)s(?fH;7Km0@&fcD`h2)8QuG_J|M9BTdu!@R(EwJ*VX7Jofu z?SSob3v=q$IW@#hnf~8ui4l4)9TLxR7=szX2>yf=tuePO5~F!t5&&j$=t4{A zdhp?iEC2uBc-YmGg8RE(} ze%BPS`b(HFFv34G8UA@rP-7toGIJr`!?frxVJ-x89xj9n{D)paI9cfxS9EUnc@>3a z`@CyWbX*S!X1dSvrA`gOw5#>mX`#9Sl})i82Zse*?(-(ms06W(q@Le5lkQr&6}c(Uq*;(1;7 zJU^eKbIYRwakb|eY1raH4vxsDV&rts=*tp_BH%p-=R$c-z7@4Y~HXbz~{v;c83 z+<_=y#K>7Nl6PI8lM1h0AfkcT*D!LH&VJv8VodiZcj|>WhoA^`P=vG;^`Pib)E6-l zWWBGaYH#tOc^YMp-!s~z|GYutSyTm=Dp6tuT-M3yJ%xwL$EtNO^<#HET`Vz?V|5MH zcCOL#kUl0?-LMQ(g%X;Yl9VYg?j?F53$~^V>=@=8U(?AhFI1Ml4N9B7tdh*`g;|EQ zATSMSA$Rr?nqGvpy+lkkC#`Ev5yV^L$URzaM2U^SE|A-om_LO z_U-%p?DXHc>kGw_OV5k!7ee9OFUQW)?UyIc!<*n}&?lsh#!a2iToT&iNzYZKClJ7& zj`R;HjyLK!_Hq}yT#M7j0nsa@$WL^V^AKy!s@flHFM|6Z3E=6uI|Ur+6;d3J z>o|595RX3$mTRGSjyHU_`?3+m@+)h)v2$5AvKdmG`w*hi?nd$dxZ%EV5A5zlMRz>V0nQe2kaP zzOj$UL5@-lqk(5*izHqoM(J-@6>Wp@AWp%h*3Nfo7$Q872d@o-@a8RNHCF_qqMU1| z)K7ui4!nrhD_*T$c*!>}64OvcpoRhA0lY~<522}8yS9hOi~tUJMp=E{_wVo0`DyQf%%B?z(V@>LLR>A`MS z_2|(3h_%?V%vv+ac#55_Cdk>ng+O_hS_bdZRKNEU;h{$VZ6W|&wc)$jH`e+w8l)|^rdXrQXUw(6e^A)!dL`60IkkQ8thpH7ultJ8`sh5C z<;C+-Gf@7t(y1j}yaNN>-dCjSPYA^W!rOo_xtm&kZVcVe(8c{QL*-5_BYul8>Oeoy zeLK;!m-Z9=32@djo}c#1P5nizUM{3V5yAdQN=|nd2jAw@UI;b{o4%i?L$jU7U81b5 z+6y8?GV2nZeRdcWD4sYP;OZH}IOBT@^+C4#a(tH6ip0%V%{$B$#`jU)f1->VAg%+@ zQcEuY*Pwo|NY`7ojGe=Kr6PLHWl&)=1m&24B4JXFQyT+@N=N@uRz*Stn)5HxCp*Yx z19AUsaB7EwUMax?wMy_nrGM8BiBOpFkIQ=piV^y78mUs_z~pI=;2 zx=$x0Wd2~0SR4gQtCum+Fz-fgz!J3Eyv7=d%z!@{_n}5AoMG;-5WrUv z4)5@16+-{Y!$=92Gdn1Ih_Jm46DTr<>5`Xgom!UMpx5NiA!0=LGxYKhh#_24<3Pc{ z>raLVO}DK{LqV~|sT~UnM)PhMDu#9cj3YxKJ1}_>VBeJYVe-1CcnQx)k23y&jTKLQ z_A0anc^+{B+2(t|!A=;$AmVYnz4b#ok znPET`@T45sbF`QXceb$>%ZRhXD0jil^+p!kt!~*n2}uv$;2ZiXP|YDd;I6`t9i9;x znA|f=CwMq2G`_5*F963%J~K==x9<-VbNj4tY8g0>co;MO)vUepvD~qmzIQu^ix^n3 zwJ9J|R_rV4{3fUayrQfUm0`5*0r}W)5ltq^olJiFKQQS#LQJp5E7SL)B+1KPSCS|l zk24P#oE;EcXPnAL6#LQK<=Y34;RRIF9E5t$)rj_d8Q=cCvD+}Ro!X@Yx|Lz`5f*(; z1>9!wE6Q~eOg)#k7XHVr<&yZaGENl2V5%kbt@wWUHTcS<0_O$PM80FWrXP?xys#44 z%eq0ylR~8T+~d?T?0grt(65A;q*s9e*b(7?Yck#CW?S#nW`WIAu$gZQP5#ne8**Wt zQ%jJXKx(6{JA=>IA_o~ywTnQ3avf&;zvS^TVu+kIMhxiw$QO?hS*Yq;y8x65)AEC5off4aiMh9OvP7L>AHK=wB z;Nsf;*h56%xrY)izzoe()8h>fU^);KvOq8Zg-rGxFM4oG5}sG=&iBqv&KoZtrBoxt zPJ^@01fglAJZS>tAa)^uf*5Kdc!(_B=JAOZTwni(^a)eh?QcKm8Cia!}Ot8F30X8&(hV7sear1NbR1L>7RMlMlZ6${%i)ci?)DpNRf}Ah}#7l}RD@zNNo}(S# z{S!sZdDawTtjw4w;#LfDYRkE0u~DPDa>7FhwyTE>?fN4x54oCpS*Dy36saiHTT8HQ z2R8lOpwN`+Jr)$v>o7f)ozpYI`}BNvnZrSd%iI-OgA+r{Ef->FMzT(w-k*$15GoO| zHRx5cC0U0MK80nmsi*Wc<{G}=`5r|V$Smu9tHoLj^|+N$2IesHJmas7U;0zukqEG> zBcMk6E+G*wn1iyJ%eIBRsVj`rf|`W>yly8wSQ1=QEE6;=y9U_(EluR3+;trxE|$Aa z7~esTa(O6Cpk3~R>4MGQYFWF14v2)Y9rO#rm8ig@Pt|`d3A-8$2u&#lWBx}5#I_X! z`+s17I@Yz9fdLiR1ku4@PPnujU2{FWM0^0d1}{MvA7hZY0dI~jRrdn`n@e$kASBLC zr6^%^$3SLpL-`rqQm6wEsZW7g(ZLk?^MKesHljd3U?ATAA!~~ji=^f4W)FBD9za0M ze%~_RSnS+br%sMd5lK9^)pC7`NQnIHh7=Lk8$V>fo9Pe}8S?qbQ14cyh-7#->w06H zwAT{S+K+LhK=0F&QrxA;a-2G%bn21{aBZr}%lCRey9&fch*_G|;X7G&*31tWwKvgTGn*qc*~a{y~NCB+?p1Fpltl|Ik%3@@8JL#=rr5Xf*Z zI@k=0urU+nbq;Q35jwefQ*OzX*5YEYb?M8?oH~Mx%*#xeiv?O0t|%>-h{8GkRr<)# zv%yR;$OQ6PHxN8_;0<#p>29q0N#ZCxedX}LJv*Q@1ClZfI1Q3A)lYBvv)q4DrP`8s~Zgp zr8Z@CJ~c0tk29y6J-K5V9tj4cA`Ik-X}W-d?|=f)Gf2nKXnLgrj!o}4yA%tF!IxD5DNwA2JkQ@;&HV;`3SeTbq!3HU?cwcNr64$-i&>2*1Lw5~q&9);bJ* z`a+S={mWjl5OxoUHp=JPa(d9@_)%`nO!}8 zJFpvegw2F&vqNQa!ve8U&dL&3_N;R12q1+q*r&5ZhTa(m1&nUp^t6;NwQA3I>Q>VA z9R)^Hv&DQpI7&A*7{RyfmUB2T1e=QRzTeFjDf;ct(cpc9P}tA;k07%dgR9i61KFV+ z`N&R2q-E6(50N!$Gev5)W~9n>OGOl~fMpSOa_3U5p0^ZnMxY@2tp>3Fe;ok4R;fwu zn6fCVr*Wb2pkdx*4l^EvuQ+IZ2Y%vYWQskDkolQBgz8I9*w$~5oSq}9xEqOiayOn? zCdTO3C6XMBaJHa3TMYY8hhvc9PCu<7~`e>MAj+`&Zk(N(3m7I|B+6Zi3)I znX-z|UcK$zA&_CHz_Xj~uECCjL10&@V@JTT0DZFj3wM=%Y3{%{!9*X2_ybip(|SBfoB*1rv2_@6%=Bfoek*E@9#dSpF?gf_WxoftaJ)5@#<3XCUk z*HOVFFOe(Pi3L1lk&sLzldjVpvg7L@an?9>L}TfddUd%N-u=S&Ss|ig@g^}&FZt>1MYbE9mF{e^0;itH z=u!;t%qB5b?;)XajJVwt6l6Uo-N1!lD7l1I>jJ47R%0RyoqEOv=7Qqw)jEWD+#0cu zR~@7I_>8;O=$`TB8gU;St93*ur-Gtot)V)sWPx$oW+G#&%igTX78>S znzXtp8*mftaO$H#!TN-oH)!mwv+Wy1GZ1jY7%gAV7o!LCFxD8pn^20o)k-mcZkA&! zeM|b6^o^C7n}r`v*m@#YY>1NZQ~B4;Is|^_X4p(1A~2WM|+3N#bs!7B%8Vx!7KP$NJS-AVI9IV~hc>Yq-( zKjNd((%s!ri=BE#%dO$Ve;{+W2-~ldIC8=kNC@l%2F+3R$=;$#AJA)?%OJ2 z_3J^D7a(_Lnmfu2BOp$rZh$A{<|3W!oy0+4$ePCc=(`JkvS6mfc?$}D8GOv}u0_Xh?SqG9CnBDi$FEPc1CfUf#DP$&n% zGx8|DC3Cil^SY-j+A3xs3ZR}?x0%vF}^HEr=0%0I?u3Xk2!c={J6C zw5pnYD5g>5)H5OtMd{6iKV%o~@ylo1Vn=sBnitB%45SOxGyV%9`*K8BCyEw@v1K+n z^^E_T4T`d`msE*JVSzwuT9?WK3!M5iuo=uV{91P5Zar|R)I~z$=y{i!(W&vTWr;H| zOYLO#>epk&R&5#XbX6P)hMh6yvtgU=I6b>frTFy|io!l;R0#UvN2n^V2SZ`WaqATOOsJOM+OfjA^w)%)^twf$W zzdpC!>@RAQ=d6@1PW^0*axo6&-MhR5sItT6?RkKZ~6DEJ#*{`cbmpyGM8^56o-_1VbmMx+BGK5(tRK zb4mU~@wTEYTm^Su!7i^j6dQTqI+kb3MITgjt!EfuDi7>?WT%o<{E;4d^KqQC+Qhr% zxC2%@^{lA?gUn3$w~VR~L%rOeG!4)q&}|uj5rYgBqknm3#Cc+`L6>m=MhiO`{Zld0 zUx;k8iXc&p$c6iX5dmb{nmsFYwq|C9$S=alo(GC#PR2W&(>xSp-xA)_fk}9Ee5&MZ zG=y_m#MqjIfw48sgul!Cb_vbBmVn)v7==_FG*2;o8P;#nK&8B!}g+)5EIvns_**r@dceP`mXkd-=vVOgSx zfQaZT-3o74>D&qlyWxPt zL1C1yIw&7-QP(1T5C{{pH$T@4xVt-uq6dW`koWD{st^oI!5V_WO!)6|v@9n3HQ|a9 z|8f+y+2x;&+A=b{M`+qw9oZwIFXloLCB{OU2_MOOb_>70WGqL8=t_*rwb!B$UfYW$ zV+jdAX%(Oj{%fXVOgE>QQD_u<7n*1F9N80EJn_&~n8=d7Vq*8g^3J^x|4f{8E)_2# zHKCrcD4h86nZ4TZ`Mn}}Aapwd&qQJpFU*EkQHjJ-d2sR=zh2xhOcv?Csev?Cd7ONw zo)B~v8D1doy-asiJ-ZLW4n*{yD5CQ{5KX*HVZilkBSdoPWjYT|C&ii$in}~foZK(Y z8`lF^K5+b7eEqGftg)!~S!X5~zmDh}(C2o5BQ^EJ!E)nOy0GsL_D9b7D!F~XNR-!H zD&i1rQcu8_U~A%_4y-R!UI_{3O|G%MI}8uh=6CzlwmJ38Y-c@@;>*PZy^DrPu8K{P zo6SMgr*Jp{sUrI zubxhQ5gk^DV~}kJM3xuRSSh277W+Ns}4HYT2ISBsh5AF6%T;<};M5QumHrA?@y zIo5gxEjp6X^6VGJX;s+yM9u}&Y7XFSsMXY8tJ7+Jc`d-QbxwUJkR`4YBfVUoT$OZ` z0CUBJU}Z1Eb64TH`>qonx@55K3t$eE|8{ZN?bH*`+=&@^`k)T27OMg8pTwBf<3>$VhRO3B%1!d>1#nENLGbtrt2fQUHC}(5&Me z@&PV;B3#VGSXtIScCdapWCRfnMlKP(O2z8ABy=Af9`{XV(lpoj@Zp^9`5m>@`{ zxY8PiSdHt=QO3i@N!A2pOObYsSb%)R2D5Wu6J*o1x`91< z4ekOE8J$GqJrE7MR=rIZLeLW8T6I`wlOH;)U^8|t z18nvSUm0QnZm=erKQosbzd>CqRN3R#DyN|zctW?4YmTAfOLwNIyzUs>ew9u`A5err zvG;nB;bs4FGi0WAX?0TJG!Tt00hc$g*LhNt98C8{r-5iRvDURMQ4V zu!2aQadhqzQXti-fuX9K_?T2#dPoOP-gO9%0TH8BK_rV0X^?WMC_+v{4^S)w#j}TW zH3}{~Eat;K$D*0Y%{=W}fXvK&$j5)&%tpz~JB(}b?XF)doCf0C430~jmkmE_sI;gs z>@N$W*vLMuVb|erB}j-^r}PX8unRkCjY#_likOu-4Fs|CG5owEBG~=5kw-)pLYEo{ zIx}?X?IR*te?Jn(K=@}yW~RGf3(f$MXmtjTYR|w?tj%(#fnYPNW_kBfFLA+4Ho}8b z)05o~Ugk8=>jI6{Oq`w_E`X}yE?2p6fIap=J_8;?nFYWL=@ha2EOohICkk8fc`j7)nTV zsVs&KLJ*srioy+mY z6JiA%)D3hYz{rvBoX}ab2{&SQZ+05!_8_v9d!vZcU(8f)crj@uKGeb z@+RQ;KfTdQv_DmP1lpiFzDr}ny3)7Dbsct-Ze4Tmu<9(QfsQ@4`$(MMA+9{GX~e8n zV#;M#6Zq&&VcG1v6t(2Xq4NB1(Y-u`wkLO+dHBKW_=QLr6WoC_oCZSIYSXV@n!hbn zQdq_VwV-fsi03I;x4Y!#TOv30&t(41qKbERuKdl-FavO&h+Zq!>%N4w_NdDH!J2G{ zRVy}Y|7SMH18-muZGh{%=8J4}uX#52q*!etEu?||DP>FM%HrcXTarijWQ{m4x|b2~ zna%KZr=dD|sg-KxS|)O)ZZHBTW?oVaxkl_v$+hyOW$cGkm|r-_Kfe$)vX+$>R}^~- zJB_$%QJBc>sReVwXNq}vY1VvyFl~~5X;lRZFQfW7(N6hJlQ>_m&9FBtFl01`b)9sm zg2as%LWoajMsBxOWU@XC3{G%ym)(&MG>h!H>zoF{;fNwI6SpocMrZ21VPuw9p|$I- zDsD?u7ScB6kdM`hXdm{WJkTssWI_!R&LLe0>94@KEUVE;m%C~pT`-jCk)gpN;RS%-}md{c@Y{8)VzI}L=Z z2{&ETC?-zV&M|YgA(S&S(%p6(@T(q(_gW+K8$|LBYol@g`8Zsi_+H|^rL3zE!rmw= zuZpk4eY(J7w=bpS!XK2B;zE#dR0xj4jbLRVCU}ucnpg z7~l(lY%U44+G!wIi`;2hd@C?*?Q0UxVPUWgxJ1sWG)tWZ;VPhw^>%R^+IsP_CC#)VJVXU6ax=rV`-+PwQLKb#K>{o)OW5P!wQL1x9gjc-TyA zSPIawqS(J!?z&T?^P(gssV>T!Wgq;yeC|$hUYd6DSwI>}T58Z86UhygN!4Pj9C?RW zJ_LVbZg&9Bty#JYmTp)*%O~UR@KR)%F)XOx$Y!!Gr#R-ctYc31-yw$T??V=5z>S!O zl1t~d3G88_&9sM~yhCRXUwkLl5}G}+WoY&?aHkmHO^;3b>xzXFySi4HHF~e6J7_ zwTsRAia1;us52>FxK~UZY58$YT!GM6^ZSTaoP?fPYtS+0h&ctxxo;X*$k>#Do8k3o zBm}9vKKIDn2XwBYHy#k-v?Wd>F~yM-m1n4FdaBMXulNSQ5(ticprr+M|J@>XiuS!C zX*6g6;m)GLR=D7NLq7ctk&LSC4fFxf%d+M!F+mT%5d2~GZE{AyWmoNV8ZHN$VhrrN zcZpQ}HNxm!hzLaQx|R(>hVBJ*?cN&MnR$D|C5UCfJy+=UmP1mFTz|J%B0s%b1Q5i` zo~~0PKFi;tdrlJihqRk}p$AMgCqz7!c}^oiM_jFP=UHvy%~=t>78C>>)n$AZ4gTT* z3PduF^+sXGWz0Z3REu*5+F@a4$+2g}G*l35>;wL+Aei_a^3N&O7v;;w$mFW~#3o={ zjl>;^ZGHbfog4Mf_rd!O3gV8Wh`Qek8pd=e!hp$1Ztf`dvo1rDlw_kNwHb;1J?3c4gn zk^O)evs!!7C_j+Yh-h?|TPK3e<{G{SdoFAeNzE z#~##$g8hsX8=XdCu8i+^`#~L^6Z=hQmsw6DF;`_3Jc?~S2A!M2`nqTxHz76#yWys| zBnB7~eN_y*t2*=#gWAiX?-&bR#u$s+Wejfg;3#h2^};O|-BLbd$0)2+w`>Bt zzMbqI^1_b2S9(GsA=v0rH`#pZX+Mfld)&q{HXIE}X@^=*;Z zy+V`lod~M-EgAT>SU}ZgyS)6{Vk=^J8X2%nF1gj#Q$4%)DJlvvDa0|t|fc|SK?aEG#b)*|gSDHQ0@uK~p{{ir)4^sk zXZCfO^8+z(l-{=@$NvCJyV_|?11a^}tRLt?2ltbr+-Xb&1s!C~Kk(upBl1oQ2-v#| zd|&4@rhpC5Lz(%o4uC6p7!Sr3k_-w&`pO#~7IFGuJO)!iDab%_ybJ2uh2Q6PFuOR?^ejuf|E#!##mf%4>QRv<{f|Op-t06I`<#nmt$$RE_M$Pi!<77}MOYe=G!lEKn zidYS$c z@nrQ?P|0n>*Y2C;i?RNJgq^kKUl5fx#ds0lzKVL0VXSc)*WxL}E|bpdtdjjUZEJgj(uTT}bUN9;^jKv5PfZead17GSit^`AZ zD=|OQfh!w-h7-QZX1Uc2;suiG`BYy zYfEHZ;nE-EpaTv-h*JOZ3TVEC6=-@Hs@&#jBIIA66hp`LqM?3;&#DvrmaZ`nQbqtHWD%X;`<^X(Yxg zxWav~!uuv6GN5vw{;E)SFX0i`h(NDp?$d}pT^TAtRSnom6~VgREyZs~k} z@5u9KRh5#Th={#{NDhBi%;3CJT{KZf7AhMgAk@`J@cq~bp=bCYw5D2Z`OH6dcJCC6!yR;?G<*=V)pRacs z3F@*)?~I>|k@|fe$u|uIQo1CZLLL&;W&hfw!LDgzi!NBQxNP=#I?dI{JcM3IY$?^H z7~(V%0>)`HlLooi!w4zy#2501{~^K7otC-6X=Hpc!KS2vitSW*Q?c6fLICSMHYZ|h zB5cLXl(b~|@Gr#Nq2>YDI?ouWl`zhH!g$7a+PvL2-}@G%w&9ED+X|*J=t|+99sz2=BzJtFa5kY?UIapNI zEI`D$&!Ifw)c+H)GV3{{h`;chm_iL`k(~D{2qElI;(U~)i+`otqx*gpxh#q4VROi) zU+LVO&w!#D+lk@9YCDOJIogYKrpii0U(5^bDE8Pyl;KC%O^60}=NMxJ81<`GVDx9) z*(-pyQ9)?iN-s^r=mp~vzzfzz0x=YChT%KoTZvw?w^{ShYxZeXbn}$-FX-n-TRiBG zO@zp(Kc0F?7f|}rOPIot(?s}-iuflli8#H+$@W|6&^S}zC_1NbY;c+gg3W|zUh}dJ zt~vTL1llI2i6GcqP~7*j7_FBNY+;DKiD_}Ei))=GqU35l6CyLNif8VFk1(>T+6zf- z`(%0Omm;YeuVH~5UFS&?JJ^NGP(i*hR8`4EEJC*xZ`v*84J;+f8<%3X+-V{}&$zFo z2^|k84ei~9I$`0`ZPi}3M=E9kKslJIP9nILbE{UXpc&^#_%A z{SZROXPZNjTJnJJ1>cSMfdk2b^rJ4jsDJ0fFdanSsAXlpDhBC;Vd;_ol& zu;p<)&v*v0c0MEPCEYWw00jkbmR$I%_+BC^jo$9dL5b;{HFxaf*e$#E)4DRGp}%7VTHFQn=}x4^&yAIrAS2? zM-Y08cIa2*k57#T-)Iy}D6n!-`s*zu1|7kF{6bA19NDoL0R{iGH+6SZ%$p*5IErTU zg(e#tHj_5w6z5lf!}tgXGif;|*h4xV&177xDd+UHErO!mVEtKP=C@fn&16X_^Si5EkN@H$*`14rfIJ zSdA%3ZdDfoX9BoT;H3Uh`1MGhD$s;5#7ua3&n*Q``53TKk|kFi8YNluY60^sF(~9& zy0}G|+n_8}8YnvVBcl>|iT`I_gMPwme8T#rb+5V39B3K{0zGXk#)5Tz^>><5xXrMf z8#~wHf;r2;YMfm9Cq!6gIZXsD>4AxCM6Q+|mX_Q9fVMp#CRC}2*LSk_Kzu)lS7M(K zu2lPET_>@}eZsI$-bJaY?sA&eG-J4&`3Er+&0Cs?8Y|wL!MhUnNvJ|^{^bcqvrmyUtEsEH$sJ*Ou zpTENGhRG$GuO>G{2HqxD%@6fQV!OdqcQjm-6$KQ8}bAox? zTxh(8&Q-#|W?RU|BHq$W+LcpWUI^UFYsLbTv*DUa%5dYdTb(AxhcbZk#lMO1dSSsk z6-p3FM7p%pLZ@jyxa5LM=HGSM2~~d=hgU6inx=qaG$rKLoMHqz?V$ncE%}#OjF1j! zGwSwMU~|OsKo6(6GzZLSE-n9)?kYO;ClP}Ho2J>IP{8Vr92DS&O;D;GjC}r2Vh(9% zbkc73PCN6@B8Aox5q$#52mY)BlE3k1F)N7|GJ$aG39HJAH6JoJ;~yUwuNaT}PWVP) z6^w;)+mZ zA({issVXepHN$VZifXE z_l_6`r$ZA_X{4;kegDyAmfrp!vHI-TcbHuQRft}f5Z~`g4l7zl{X;jsPrn;cqUdP> zrF`dI5ztQy;e4P+>A|3Dui^Q0uc+r=;r03T7$%|;n&@U>RKg?w(8M;J#AK#%GNaJ2 z6?HZO$lR|)TaZW1?Z!ki&m3U<3Pm_nWjp*5zVe(VV%BiR%UAv-2I*snsUc#^qUMzg zxsrE%D4?eQOWYgW+=VW) z3F!R2V@q+NRv@dhMZZ}}HGl_XlDRAyurBIked7OtHTFL_yCRgqnXVr-=;Ixn*ZeP| z{vvDK4|E6NelU}ck#%9EY<^Ma$*F%Yf-w|;lo-SJ-_v0X|0M+^BfUk7K{5P4!qzV# z7ZAE$Qd-a*k;$Fd$4F$N_&0qA;jT>puK5jX1!_tB!o1haL6egs_;Kgg8mEb{lJeQ! zo&)g?wbp?~&6#7K7$`x>`F^uF)~wh5Fz%e0V+;t&2XmF=JAMK;dmG zL08~ba)}+hIFaG$n7@ZU(E)dFe*)3J#%U(xivuD1eyRiExbbJ>2oc#;N9c|(Y(DQN zXgb60qKs4nHuZYng+O|ioBu-2!cHR<)d9w#B=7HxNAN3Mzt%a;#AF#I#r zbO?h?Nq2`qf@k(E)9e?K_1DaJNV2N}yYBUf+f17WrkPQT+*^;ejnz>2EjtDWrkR0> z>cBiC-!<()GO2y+d3uRQxCzmJDZratn=998X5_UpC%=;uW+?6~$m$Xg=A^o@D1@L5 zrpTu)I|{~WGb76tw{L$vZnBrprg7RF1qO@^PCA6$FWPVl6np(%D5Ja9vVlcm_2>3`0n=|^=(2AfqH!FZsQ0VgAXykjbFJI z@jK0gSk*>;GACS82&vg|1^8D&l6rNq(&r2_8!l&F(@`D4F6L^L!|a6F zq^JHLp9F_4p5!|7w@k9Li6?HB!_T+#=&|2Ulp}0nrxIs}Fffyzlh2-KYf7qrdY&DP z^0v){*cH*U9*EAIZ%;*7TQf0d-eBLpz>e+y6uotU9YYFY&ZOvjp^jqCh4!O%KLdRN zU-3QUJA{JcGfR_sZ#DhyR+*rvfng^ z@pkNKAW-NhzRidYz0cZ!Xuq>&0Xo~OY@ULsGN+klYCaeAeffNUdzgIm5?j-Y{lF!5 zG$QkwX@-JQwq9aus-BPnp*hVoIR&5fUdNX8&q3gU?pl<`d*cv-oF=9s|M%A+S7L!F zJb+|@?Yclcu%r#DSpG}Ha`P8O4L!dwnUXWy4o~nT#HD!tQ^T_hOIZ?yXemJI(XJiAweOi)~FA z*!+v_XJlC+f<7!#n*B;n&r_)TkvKX7EX|SEDw@v{R zV{Ayia~tj8LK_oY%%o3c>tNk3e5@~|5l%571Ds+r=@SwSJ=xFpkYmZJn+WzzN_NLH zf*D~0#q8tHm~}6#j`qVc=Qz!IAS7OLpU1~@q49Wk)Ae$vnURS_e3uU+r*~+7dtmp^ zpV=R?07_z7it>X99ppJV92r*PYkd{_j6)sd zjWK2);~``)2F>3XFQG;3e*DKTD4DeNsbmJCI>l^WsI16C=kwR2ZFD>+Fs8|6L+nY^ zSBX(5R(-xEtHoeN1_hlAF8-Pf)L8I7m&(aQZI#w@rMzyaJr<48nu#P4@4Co*HjV#7Iq9UpL$B+I@Sn zW5$SwD*E1?^d47lVhpw^Zlw?y5CmTuV~^3hedyAI$1yqGeSv_><_<1*flK$h^N%t1 z2(*_5)_`V$zUkIG=;o4Y{t>B-Rpw~pd867GwZ>`bw0sYb(&@(E9ThQkX!+7G35?4L zmsgdtQ-DWDB~L%zDUjLO`GAcNVCoQ#QXI$XICe307LSe$h!~V2AEP68H4ytu95L-6 z(|t$6QXv+F@JTaZgJWeyxV$(&xGGIw6L%pGPA zNL}nS@53{Oa~k9D43uxzw^@+KhhZmebDD`(t-?PNJToY z0!bDqjIRy2lfM~`D+~-OBMeTCum|cVgprp}u2C?!OB%3m5NwahhV_z2_E3l$*sNc&+wz>2i!cBsw1UfW!h4WX4eS_kjtoZh5{syAMdk*&HSLApMXTQ)-#x`Epg@db%lV*SjA9@$CtOutSXfkC zQR?AD%W<)IV%TXp5A^wXVpgmj)K9+3K4TO`x;rI3+i4+Ms7`Tw4oY6`K&pNYGEBTo z9@AG4&>93PF8>;9_e62?79xqPHuXuYttoCkb(B4q*g=Mj9%H8<_pgQUD|7!wj9!QP%moZ)Np%|=+}H7Hu~Q?ta3GVaAUJ8JoE za#{%T%>~!>6YSA?kdGH1A_dYAKz~ka#e0pFi4*KNAaE^2`G~*;rpoF#J6dmGQC{Pq zWF%#}4+=Oj1DYoP{y5#GaaSBR39cF9g#=ii(@~rh(Dw0&PPi~INj~xz-;&EVFhd^6Y)FI4O@6uVJ@WZm%O#{x3} zQX+*Qm9e%x!pjKMA|S{s(`6-q4dFpGg0#pB-C%opA-ch-{HA2Om0wIZ<7t^H8%XVV zp(O1KePr9w{)j&V0QRqa*P-9QFRaU~m?P z;a*j6Vi^(y-B;;X-=s`9L0PO|s=F3kzSBa$jT%+jSe-6ZJ{AWxl60aoTxj6b%}NiERrI`Q;kQZ zE90leF5e$~M|`7@+5IysWWH~<8sET=nfPmPUre8G#v8o>|GVmt?(nDhyq1Qgu)DLl-CAyD?B`C??QXR z76!oP;xV;Bdz@ZhQ%TW`G7h?vs35eGz=m*bVC`q`TU>^ivE5p^psb?^JSh{B?TM;~ zZ7-vQ)zKIE#-l~xoz^0BKsjM18c!P~gkiJbEomWqKO1Xz?<9Ma-hhq(0huXXZ~$;2 zq)(sAg_CtYm&uc{E}$TaPl`>T&`%hH`W1Yb;tuPFT1n&{YNZ*d%&B0#?~=V$Req+* zp}@NbeOt|1N-Q7~0BAtaTmTyMD?<46tp#?;*HY|(3(|BaBEk;50MZ6i+^Jyeofabc zKm^S|1-WT_W)G#{Xn~0MJz>P(rs%|G-&A`osv@`0JH@KVfii5NT{|ZEmlPLmt5nLt zs*wKNw5G!T2byimOMBc*ItR!LZEIP-|C25I@KO3ADwOY*DKl`pa9DQxa=nw)P(I& zb=eFYR_yYYz&b_fDS;qQXN;v45Pp#ybQep5&Ojg!8h{x%6dC6EQ|-QblMKo`BtQVe zbVmkap6GnwJS~~3o2R2wv0*Sz^e$`w#eGxlM7=|cF(iP_lhWN4JHdq>2XHY1*F|3A zsj2oQ-nc=h2RE0C1s57!5eRBG1J{z;U&aAj5mBw z`)>5DLszADtcOuPILjJr-et}J8b2ORa`gq!p&ZXsphF#G@^)lD`17i~Wp70)MyH`K ziVMAlA$4IGEMZB>88hq=-EY{PGXU#jBnxEI{La5UJRhEiy7~5qsBKP58CU`5GXpj9 zzccKSi?R@&p;w2MKx3RBCm1t)&JMYTR7Pk@MRdt1(l8^pskmd^e03$)zM+<>fMbz$rC}(bjh&ZYu zYV$}$Q-xqDO_e9+>MqNV=0XdBzO@?^G(`RLbcX2Sc{t#pAgW4=GEnICmPo2CN+Y^6 zZK2l^T2*>&Q%+TWK8mYH@XZzFo}?dhU?8*7tCP_W_1sPb-(8)28~<0nSo(CZb*biH zThYn3p$pql`ti!@`7m{(j7FFz6Ag2T?>^sV`g)Ct*3H&s#(#`9Yb-J{pTRFQMmGKq zr`5#c;JB1K7TKC&Pxmjfqi2{6C|RHDv=VbwcFeswRcH`E55PP$kgm|pseF1N))ov1 zx`KgxXQ3Cwn{F4FyXk0=cWw>-w^Q4pH?nF&MskXZ_m*XI>uIDBVg)D*|N}{ zp0U(vB_2JR*W7)PH|6W5YhUx=LOVtV7ui90n_KCkQqJK!W%(jIPJXz^*0j_dve;ga zG@%wcmXuVw-Mdt3S!_p>mN>tnz0Eru^x;ivMk%?us9=EJ8sjiWD=K*$MhfnWf=y zZ=f8w%eKICVnl>dG-W-_QIDkl8H;~y{OvMN+b%^&gA_|bZFPhOYjih&S&w&`0EQBh2?nJI}S|b=e`l@Bw!}ZOZI6OGJQJ&kC0~5Kj z^XXk!0$}B!HP3v}JZ(-go{;_rV`rmz6Cy=g334swmHTt~?sEGQ`Qb{tZ?_789I*Fx(k_bpWsbcfYNyjmEUTCdo+1OkT#;+{?|xSH z<-!Qfb6O(+H{R#TjxCW}RR}{tYf^QXpQ>wFa!Q6fgdSXpa4W~?&${E<|BIciWWPKW zcHK(E8)C)`JRy(ZTg$a3n#!s|d6=NvgA&iN1&l9Q+ zMrMZlU=%v71g)4fo3z{>*ZsPdF2`;MMPdiVF)hWDq}b%N5~G}pXZ&rsJz6hxRjiq6 z>E${f;6k7hT+G1#Mb5{D6?RnjBffkEo{y6~5tKODvSo$ssn@3}&L2#214`gRG+xPv z7b4I9)(X3?{%u(EihxoVZd;w!@!-ZB>cB4}+{#wk1G;~kTUOfh(O!s^E>KQomi2ci zVUx|@nMchuw7|R)ZH8X=-NUOC&0Cz6PU{pr0SRF;akUP&Ubh;X6%>;@D5|v-XF4b* zbx=I3rTCB(xN;&pdwPn-qT&f@DG?s z!IbI@_g#ZqEM2`07UlI$uIEYscw)_LU&L@B+t*cZ2#g7Z!-rr7UUM_9juaR0%o(5w zIJ?Z(RZc4*a#jTkyxPfm7VA-}9$-3O;_^u0Y~sQIdr<1qZID1yC77->)mI|CRTp>N zXyub@vC`X|)?`pKCg<;KbuOTUb#}D8XOq2p$aaDh8+~)2B|eOnY9r0ZU|J^_KbQWS zW76dE_4Xk6S6Yc1)A6%my**Zc0vR`kQ;1p+E+uZY(@KC?q0j%6eK+Wi$dnBbB_JXW z3?dn|K^F-Did-ZEw9W$swc3*#bXx6CHrPebvs(!QD?R&fxmD;4zpPwe^;WLkXg>@H zt91rw0rkm|n{*oS=1q1sprOkUstL{fR%AeDqS(XL)=(qP?2EXIC-9@oC`@o@8KSH# z-VgIaTecJ<5NSTz35Gp}xH9Y+5mN9gx?_3FG9yK<-E1eJuTbkUJOJRX8TeR!ve_P? z_hrz2!(mGes`Q$U>>A8AL$W#BcZ77a{Zc4`FrATEA$u8(wdL|u$j(8?P-_mjFl1=a z7JIxNf#mza^5*-wEN={kQPvC!IkQFQF?e}PL^=|GrX}#{7JINBprE>dC;+GnE@gMQ z(@M9Hazy@T%&V+ybCbCMk-^cX&v?st!FWXa8~Viq|86DR#~6gN?KHAjNN7A zMzBv_s614Pa_?{l%?iQYJ+Bx=Ez95nsVvv3Y3#EAHxv50xe-2WF2cIpT)~UvfkN9u zMlNMIxCLO&pHsuIL3+XOI(VlUl-HHmalwU7YXLY9=D;sza&Ms>JwM7i0N95e zXslTChlu@~ibB_Kq5M{wua9+~ac-eaqk&>VeRX~pi%OJ?0U3{Nvptk(WzHYAavGHE zb5jmkNK}xrFc_N`+RG3)kAby}$b_S|qutNc4gmp%1Pv8KOrJ-FvTB<>I|{EvfDW%@ z28YYXijlCHSZrUQzkm2@Q0nn&E~OrZEpa(ID1*buO;g6Y9>0O8vDTdtBKb(MPNe(| z6qIT~`R6h_0dZEX1c13Be=F04$oRwdOe*dKa%V$;Z4c`*Cz`_$U|4;+4|w?dX%GM6 z?RNB-h!urfzZDAYf05p{1obzrMo+RI8rzXU(D@|??6PN9uXNf7^0CN4Fd?rnRO+7> z4p(kLrxJfKDJfHT`jl)_aghwRghGC9qpfh-e2OzxBmN7VI|A*dB_U`FlQ_RrmwRL%nmaw>TWy`i(YwQHv+AvzeYw_AB+ynPCwix~9e{1VwH}o- zvaR{n3@a1ixj}1!6=w~%2KlB~eXNTt)BFHn?pwb9ns1n|00eo?_Yd?&e;moT528Eu zt-ik^LZAkrD~HUhe19Ja_;|o+C!717cCxw8Y2SvAd!6?6__)Vu zM^U*RcRTIV@o|^a&Y_)g+Bvj4o%Ru6Hpywf1pm6-X+xpM9=ADdmH4=|+G#7n=V_;n zFM7&pTY-;ur)?oV+MG6WYjxTXCf1|HY4hWw3A-L2jS!3YXn=snM?DlUeAGdw#z!rT zC4AI4t<&%!fk)xvB(P3=+ycZMA2-7zfsdP<>K4A!jZVu>e4Id>0X_~o&Asq(1q!6# zquOaA?*k}>gpbQnxd|WpQ4kIvmpM(7@v#qOC-Jct)m-s`(u)J|u?MxI@v$3Kxbabi zg7NsMM7ILW#bl>_0seJ|(_W3=>6PiUCF3K*Y2AR2bf>jHes~-~75F%YfG2!2&1sp1 zf8BrpGkhFHm?S=qAfOf>hY=%=k3$Gq$A^Pt9uTBD&Aafg>yeIykL!?@h>vTLzlx7* zkUfo$tC1LvfA&gon(_D^S0PCrA6GifXiM5F*=ZV%kLk{7ykW0t&gmZb*;(h*4E$?~ zbE+R@RWIWtvx?%a@1mVUFJu&LLF4C7;1fQ{V6Ek{qSB5#i$AJNq+hm0HZm6dq4pZ8gVKhW`B=1 zW`BwGo1#)jVk0_$HJ5R$;ed5GQjMhVuIB>_vKC3mE}8BqJ9zEhk)I zALX4-Op5pSf=y3av-pdRy}O{0nxxT^p{DJHm>3@&RA>a2+C z4%*36aMB6vAv?zmZp_=Zw{qJKgqKu=3W|4Wl_mKWo)I0<+6y8jo8GaGSfg;=S3qlj z6gy+k9Qe}!m9-IHV}tIYhjk~k4!;58rY!=lAzl2iPO&6KH71Y|mV|+WJM+S!0)J%~ zHCl>LkHQ;XpaL>!`{1G$&+&9)iBW3J8g48 zJROU1@M_zyUsCQTfGxl#UC7Z^r;QLGBa;8`YI~esR?)-27{b&{H=YeyH5+Vb6Qp0G zvk7)w6S)IsfdcL|dEy#f5rXfK0*f{i6zQP&?KQeZ>y2|v3SyL`NV-->u?ZBDx!Zah z0mJuaZ^JQ-#x84*VJG28ERVdn89b1u z>U)j>2vt~Fsg1c+rXP(5ECIS|x(nNaD{)PA&@Lxee_rA4aB0;SoZ^>!St0GC*JDG0 z1rbfKkoR40589!%(?$eWAxD>~fy^om?b2Tye#eeM#7Z0CQ2GIa z`y#|F>aI`kDh4%5zO)eqRn&XG26e}@5)=v`%gK!jEp*xllMbc)x->7mCEQKP-s;NY z{DjU1p6x)sVIxu}A796Qi4f$p+Ih zf?f3=VzQJ>4d8J@ejZz zMJ_&SNAakw2R9zI&{3TNeCQ}VR_`3OM^Ld`4Kg_Q4_T)_0ImmI^ioj+J&%p^q zYZsRwI(${QqV!AE7Wes9$AEo*ab={X$&XLiy^)2|wiVo9TbaS*o!mP7zn+-N88_O| zQT^QonSg9iovF0>w^H z%(+RE^dXPmq!Q1MM;xHH_{JM?KEwEhbrTwk{Mo$BIFA3+*EXlEBko+janhcsw`1AH z3jYVuIrE&+XU;HY%Xv53(~%z8MwlF7S#tGBJ6_L^@!U}TQ5eZ(c3^0e<$E{V=?H{u zqqAiVw$X<-+wt9-c9U;`K!N0>FN3DXrdzy(%PJ2#N8rBgz=b{xC4U?8s>%wHyM-nQ z6?;8~Bz?wosGBQhhfWU6jv1_%>rUF^^#xx!JuISxED(A7NkqOCIc*(r{qWYwGtwTb zKk2IZm|8X0EQ3)gM#BVw+odK!K>ktMBcgku^9S-Qrl4}#KT%RV+kD5o!5nGaZ!DH0 zYV3H#BefBDUkr}RYjqxhqqR5(Sl_q*$vjh~- z7ZeF_Auk)9HlqEr!DVlq&H;2!9iF?^X(QB62mJGO-rV?%@5w*`ZWqY1!D*wbioQxw zufs;x)Z4e^<7%Q`k8y#)mM%L{tEMUu7zv_;1HVfUCFZ>fTyd_W_$b!t^Q3; z%titymtGjbn8o_=y1sR!(mMLRI3lUx=qMcw<46Zj}MA z#>ki^Kp?%FApv$c?evU=Fk?%abpYYdJ zp@6`o|Ge|yP0_9;gU`_5CM~s7Je4`^^y?6Zy}L;_&F^A~RQb+c#xzzlp6%<4n5K>5+XZhWv$Z^^U znnRD0&$sHLG2d^svk)rOPQN2Vg|gdp)rAhX!5+?b+6RC_*?EsF3zYz?3RigzYKZh_ z%t-Cho-qQ(jb??|JnI$fTexxl34hxZ;~~{Xni|Z({%}7L>Ktd`-42|wSLkyF0#Gy& zw}9S>E*<88(>{iL0P>r`=jFjO_F$QP%1iM!X2)P<)6!C0?64V$rZb-I%qiWXzH|y_ z7+Z|UIf4I=Pw8OA38y0zaUB%dr*#zjNm1am6KH3EVe@HS-GP@*+q2LWu$|a?5h%p1 zy0ch%E1rSV>sJ)0kfEjc)vfk&RS}>k>Oi0(z&PtMxMY*er_9UHrQ~rIhma#~w-<7D zf*tQV?shvyFIk!5iz3yChHxFVkkcLjm-*P#`)=12Y`GuL$;81)0)^nge`#5$qROxS z(1+^C4{x_i5xmeIi4gb6@;h`u<*j$1vI&Mbv15qu-Ju&|{GB-4SX9Pub5V2e)Gg|f zJF!HUI_>mc?E%HTcj{bdpWJCzrA8qLJBqQ{r+oo@{M!1pRgLAj&yZH3H5-s+J$~Uz z!&vFGr-Cyedo%c|y#F4ZX*1zoJ9?lQGzKF4Y$n3b{<_YXfENOI17?_1CNoadagCvHwqJl+DL4)nFV09spBE`Yc2 z8}y_F#1GA$x$r-06;K-swV&k{Ajw<-%AfhR`*;kXjvz*s9v(TefBny&D-Tc*x}-6b zl;Mn^giiW@q|UfsJ+v#OBG}@|2jX&so))_D`nRegKc}{0@F77@3nexxB`%-@Ry2Ji zT+vHz@q|(5v#sQWx6}O|>(L7>@+$p~m|U-F>?gN)Mi1|;&1YtyL|1p?P2*H!fL^CB z*N$rS!u_Wq7R-hHu(${-OGM{rZb5lq^JWw*M-|};N5Q(Vj&b^1!A?tq!_|Qn=h#Px zIZL<7Po4BjrO}uczr}+RU;j~N&^to7St|JP*9y9lpK@nNo`|!Q|KY^tk7yakEkNPQYED3dkg8e<;n zZCv2GN&DKBqMfBpKC(>vfHnkXMcbg{g69J5CQJ)Q~b2ufz%!G40II}U=VIB>gXNgv}oEgO5-q#bCFXuaE$Ahv%z zwws8*$J3W{fnX~lZAAPXDhqAf9f(|8Y9Ark8q3CMxdm0_MShf|4}_V-hfHw%!A;sR zlc16gDXL8VS)nqrb4K~2XcC;MN9dlSGu4d+)-}Mh1it}BjmACpzuY4*K5HP2@ey_R zc)}>i7D|c4!Es!AG1G~R^NQ&;MA99eq2t0ZbVYBxv9xyjFb_%tA~wGU`yfyM0JO1m zy|;FkR>W*5!+Try5kH1KThqN_;R7BId?-hVgVMJ44#(<(&TNQymqg^o?RYNkUiA88vR`|NwRa$CAjf5gb1}Eelm#0V>WzwCM&Jgi zUS|d=k$JDDkPr`pBM8gY-s?%2rR+sG81V;%tem?Eh$~0R+KDTD?(;0{dOrx)^ z!$J2@aq)vHJMFFq(LtCPL@8&ZOW%3WGgiH*X(9p|^rnDj+_5Hb`C*O~`a;tlQeA#Z z9tu5pciV$6eF%_FShEQ02oFwkn0Yvqc0mn2^WKxM!Exf#(WJyuh??NP@N)k^YlkBogftQ zgXrSe!zw?Bl)%M+eh@lueUGS|w+HbI1k9ZQPdn25#Ofoo$6YPj1+Hx4OZY6e8FP$* z+SB;)86Z9$A#hG0%;!dj z)#IL%K?^*x56_A{fS$7GXA3<~okvzI{P(}VO0Nlq5W zI=h-EH0>SlWU=IN6_~X5aV#VV5s0QKzUXn4DNYI6hV4fhhwS^k82xJ)V8&@0S^iM&bze(SvF9k|`2Y&R+mzdmb=xFTB)x@Xhk~-&U&m{F( zOlLlbwQ%M;_MMP3(9Z$1h6^c-AvcY=2gjBjd7X z;g`*`tBKwwpvgy{Rqd|UbDqV$2in!cBw`7Xeb0GTbbZEs@|>H`bRL#r)b&@ z+7#DyIKaO!)*3MY(){{lZGkpcxL-ymZnCT6pmiR){g&4}VNg2A`oW4wOLeBUJmCq# zeJ)A-{IVxb{P?mbv(JIC=Pl_+-e2YH(vM1WDf1$Z?a?Zwm zu>gWq+u(S~MRai?4xv2cOb~Cs1%K+;mpv=Ry)S!aaD11DZ{F}MoQd~2rTu-j{x|O< zs@?=VztOIq1~pme>_5M$GWCwWiKz{VliMWRZ+XUrv(>ZiBrf9V4nQCK_EcyIU|#Nd z%ahvmAV2h$CwgL}u^!QPH))2B;)?eGjjVDlM>yF@MvZ=hK3Dt7xX=iqHt(IewYo;dX#ivbcK$RUHhGXYDfT}==WrOd<=Z>!3F z_I?M)><+t{AYcG}n(&Tl$?ST^vl~$r)kNhdahUhY@t0Yf^NIuIN*bPsdDjy~4aD80 zhSN_}Ln$D*JL;k))~?IW3VF=v~RVyv~%$T$Ja{4KH_Of+(!@P21;j^ z1xi8WoPrIy9JQTP{sVE~Q;F196Eh=H@4YlPP=XB}G=cyMU@7IF{?wBq(%<)-wI4e= zVJ*3%Uz8gtD)WU`A&69W+(A(|)ftV0Ui7v1;)T#w>T}Qcm7|Dnpy2q8>Qq20@dMA= zh*Rxq;$5d<@Gt+sGhKbbreP0qOlGo^Y`Vm*CfG&Nz4!dwK%u{4R{$yTR2?HX74keu zz)fe36EXcmPcH!3)kM9x%9nkpTIB~n#43jbae7MJs+9N=5-FTNy;-=g7O3lw$T`0n zfY@#N8l?ER!V!&+RY^z;cCPNdPUL*7LWeH-7_EU2X?-+~mwc=;jwt~KX*Fq*WRQBV z!3>=psNBQ6XMP_zhN^B9Z}Xv0LBNd+(w{#LC!>n2l!x#MuagG{E#!a7hFo=`4QU%s z0>qhF(CaW|vh8YuawO$@MaL3UzS@2N10Vvz#OI{&mEjA^<}e*UY%8SWcaSllkno*U zc!g47uS#Eg{KBG7Ld_wRC#5e}O8+AKOLKsjqB#zD3i}h0KDj?#)}in>_NM_Azq0v0 z_{0-E16s(imRf$N)beX3N!aCNHQZjzMQ{u9-$WW$p%&U5AYOpLwYY!0nEM%WMdE*J zP?5Eoh#;KCy0=;!`T`k39{x<_uKDIOPgK7Hz3l2eya)`V?2(Xc++RIjHDb>aSD3Yl z-XsUmUTIeoA`DX7%^_{K{8fc;eDGJ;W4K=u6$H4Tdk=>sM}6)YsJ1+1Is!zp!I#_t zZsHgvD#&Bh|GDZIZTUPjj|lw9d2}NNjEg>8P?G6?U_xZ3r#MUqOlyLIQsE6sg^p=G z^>3l(5FnJ&*DIwvPir;@fDfAEpi4$#C+(?4XZ#>wh*Tbh%5fU93O_E~myYlr zTGmGtednp{JIJo-$2LjR>aI|mj(z8u)^(ef{L2&Fca&Yzm!i^(`KM499{iVQZk7^t zr+I>1KRMCq!aJbZHIdZUo!xV1NZ-0|JQKpx$BZ9|PMrJzUaikBulC1~zSq9-oUGnB zNc|u?A=62{-fq|Q#t_IY?2eGOg1@UMMVI0?P-dbg0+R4;>E7EzlF$6zGsLItCwStp zfn_G9I5#kkX)n}cMR_bgG6L=4r4zKOe0)ng@EcVKQP~|UuqREeXA1x>08X_J$B6?NbbRW9`jGt zYzzJqomghq41`1hJMrGovzq?t8KE9bNtwmu$Z)R8)9so8(6*o2?g?od^qq=8lKmZC zJpV_}Ed!5)Dtq5<%z*FxYGBbvM2vf2idg);C%+FTattRP{)kI|_RLaydZa^`L9&Tn z2mW1Z*N_Q`yP59&OQ?}$->VpLSAFk!2(;;%QIN#pqI>@wl05C-DrmRy-{|HocFjmg z!ZOyqkB1~b`L}04*V{qF50FG_34!}4`B+G@7ead1{-he@-bX_uz}4cg%Ulr&9R!u7ju%fv2dw%U zBE+=nZE5T z9)##A#0Pa4Cp+yL`cZap<~eVT|!d< z-qiQto3G)A=VEBqBPkKo&*W5jTeRxtX!YSLW4CerNN#2 znT=$AHDu^QwP@1Kn6BsTd%8JodY)ZFv{(W(Z%D@#42+6k84`ISrJ3@^vCJ@|sDoIs z)baX>>$t%%&+2!;uxloA5PPv(UJmv89G9u6NPCvc+!w7MMW>f*db6~{yMyUogzISn zavzs7$IePzcx$rIz#QyIUq+aUY}ONco6(z=+BI_^5zEGWm5YGZqM%!5DOdG~ytky{ z++x%js2&}&3Y-3HsKlnPd%qMnP97F5Ztrb|kpYoaj1Yo`Dn<_bE!(ak04(j#PuluC zj4IG=m(FxFFxBf#$IU>L_ApOEwkVmyavBcEwRX)cXr6{SbXqraOxJU$rJEVGf0127 zyj1!s{+7GVSLt^zQ05SjEs;U1q_H>)@j@Lzb*b+2Fx2hu2;`?em<-V8xbv*AYv^>4 zcIRJn1H0XGOMFGhAX>$;$>rO^8d2IJu!%BJ0JCF6F$Uz)CCWkg?3Y1MMwW?Zx|>m@ zkS6Fag+C2nSoRxnC7}7pRPAUEO`{0StGO;m!rr%xeZ~m=4|*OB1fh8k%^U`ISj|#A zkc5)e{Y*tFz)Sj>(I6DpkmxF%=ild+`pPTa^HA{`LBuTC4NpmhKTNk@$d&_c)ybG! zZP$?U3et}5{nxMc&*uZe8XoiodIb4yodIZ=$aFg}oc_F%%rLUMw&8|}-cGpTX1j)t zhy_sd_DN=}8fqrf6YeRfagrWkg3>iH4{9=cnF@zmuorqCy+i*1Jkz@Oe?z@9E4T-p zpBLN%Mt4cr)wf6$lg)8>T-Vq&^PwC;P`dXYPUYP8%Y(sE_uTO6F|_4y#>hHp7x{M0 zJg5hwLrjSi*z%8Bfg0+$BJ7c%pP5DNl)T=ZS1bQG}kq# zr2DS1*BFkqu#qHD;eI=69xe-WkS}nFT|@5#?S>SWT!N)lNO_bg!l%ChX~3L*G@!SzL2D# zB)~17;=D&<+LEEnX*)ksHEs7tn$akhSVK-SBy{gFu_#hyhP(+O8ZLB_u*}!7NV984 zm`LgylAu$B5-a+eVbm}tOB~L=1qp`l@J-UnVjNu-=Wv( zNI|dbDZRwc1I*!S9Ff!vV2KDxb8KT!L|+Pr@23H(;hQ)R!&hL}&|Q)ZiR^)97zsm| z@f&LcEJ+7i2Q74=K#QKzLo6F;hEc=iw-nJwD;0H@in<=^nS;!zNIacxS}D{m451q! z)W)38;N9eW*LHAbJ}}NS67;v>2OOx?2=~*&hWA1A7m}(%^=fp_!6;LaGUAyibSNa+ z$(7$IB@(02eC!a!PPs#*j1sp+t9FPBqOsl~MBfrOqSk10d^o;09K!GddXqC9fFuli zdYfW7aM8KJ(o&>K1o=cAktp{_#@XVWLY%E=7;N@l4{h{BNo`Tk=5xKZyy|^KC*rqUg>6#*eb?p#SQJ(y~A?99iCu-=Z znT-cW4mHDI4~L*7(r}y)=DxK@q|%nxRI6lRDFW>I`*|+9L=FglW*5*c%a`;gpRP1IFM20#kZF^w5+}nb4spEYp#$V&wjU$>%u6p^)5J zsnAj?bod5tM03(1y|-Q3R7(Hi8xZZnMEm8VJtrW%W4IYLCC9Eg4ZUF+;y(3zdJbOh`PTteuw z;w2$8B6eg%9Q2|d;$fi?8eXvrR@GIP!thZbzJYkNV0$v>*c znepmWqzqZa#+R0n=5-8$2#hqRAPl^=CzOGHE}BQ0ioybKj6~-{qDM$VPe~Lxqs(Dl zA5RlUq0JEL-u9R!qg0PMtxcjEBzTP9h<|tejAx*e&v3O#e4~^YJvt;|v`Neyt$Icf z5=eMeOShBUo+foHMY%nNzdOyuhR7rSxVv2VYBq*8R;vdBR#qU0e6Py@4 z3nC}hRFpJ65DTLO5(MyxMWkf0wL?XJkJ(Lqb4`ME2#Ai%cVXd%h=~F{MzMe8Yq;XbNMP=N~ zxa{Ds0&N%mik8uKk)>h9oU6{{ppnQ58^Np9r`mb0n_OA0Nyc+XT|EeljePBpaCaLz zQOvi@88~lh>35=EH)WyNG|3Dj0TO!`Hyw1Y}#; zddl+L?f!x_b}ij6Q!$H|O)wQD(hp3)EQSP~K9JB;a>UY!;Xp6Eog(rvCEW>{LJ|Ep zQqeN0NPR=2BJ=_jIeGz#=+@yoES{)(hrJWAQLnOV$3r3=5;sjWM|OP}JU7uy;bAZq z5XspoWtQNi5u1$lcMeO2D;)UtM#;Mcl@w5awgKVyjJqKMm2K(r=9eRpCcRLui z<#E}*vMI>XQRH_Aw}=B?a{{-3siAg@wUbpw#lgwwWVCNesD0wL$)>04VflQrd9C;$ z&Rmfk>GFVly;L*q2czpJ{aSs#_D}6*ZKu4G$#idDhbO=l{*wFH+8y;{h|{zFX(i5BB7HYz0|o~p|g`paa*Dpg)r4x z`evng@Px$y9M{rOI};OsRFVov%1Oe+hXnnwkkC^~g*!=gCjHzdG^<^xBupXXXQ`!M zl*@Rmav86~GM<5{Far}e7TE1hM_-`w%rD=s`i<{b;`_prZq8?q(r+Ytw8Ht@N~7-j zbR3=`H)0mE>gNN(X)%)ZM-X0;rTu_Xj!CyhOo*(qYl+^XVu+q%iYe#0yrxK<=N({SvvYYF03 zaVDG_Qupx`Ge*4+CPEo=SfD^ehsh6Zyyi)5=X7Z6dY2eJ)m#u!Vb{_PRf;*hb*h=( zwZ!dH&E-Q=HP@vsH%fDz4tB{teX#bNmZ~)!nmHn(+^!{x$B?f2lTAfP*Ec6)Oinx5 z94~rLGqXUGs4a#p;{sMsGbgJ1f$$}4?Np>`?dXTo?Ajt|*~?x%B$B3^iXub3r^Duh z(3X&ph@WoG=(-Eem~JkKEU{|~A+eEyOvNoA=sx+Q5k#sOf#Cs(`<3} zDdr3g9zk_-Tw-UcI4(ZOg6vjHL>&@(%5}n;sXEahG&+LdxjgEx71L*hbE7B43RWaj zR677x9CrlHc{iFmOLh2`&cfk~&6Kz}9b$)OsT^WY&%&I71R-!re65t2I6EZ4xC=^T z&sIHy5|MaDNk~FZxl$~fZN_#z0V#Cl9J3pC*`S8{d-s96x(~bTizv_F(Vx?IBOx?6 z%I}*?5#>^+LvbE zM*=(5xz%=oqRF1QA9@}0Y`I-aG@bnJl-iJ987EX#9_GD_r3qm2dQ(#zt%cUp+O^hn z)*7R{?ujMyFf>p>q#X?tJLajjt!p5GQkJ#E(dDZg>HJXTGi48jsx0tT933QPo?@Ok zGE(0JaHLK%hUkXgsMWb@^ow2DdNJa+?-nEHn-}`??K)z*62!bEcl)05;1p)(C=Bj$ zFGfPGg7C`W&?AS@&j7i+W9--1b%b(>5IjFeWk%?j*C!cS+DR~za>cU?O^;`|UDp%; zii6Q~Tkei3zn_I)K~Vx-X-|<|M_`#*5rT6}MXs3UIXDiZv&=+pt5ssbLUZFt{B1v! z&xG>Zp*&EwEnwG?3D1m4OBSm5i3b;&Gm+$??j%UWLE`AbaFz&-6;KtBQ{Nf*gdrdn zFNfgP|HBZ(NrxB4z%dOXjWL)2OEvu|BvxCF5WlNYYh%6kwRWFyyN4t&-_=&Tj$j`{ zZkv{k`$7Q3$M=x;_w+POCq1j4F!v zxbu8vN@ky!xX_FqixD1<5uOdu?Vj99UpYelnU)}LgIzZOYMDo&biO%OZ4I%4Fwhcj zvNM((TKb2y=qY!L?ekS<-4FAzIbiGW2O;jMqZXLM)Q{#Ni(4=*=8ju1wDb*W(Nq2; z+zZUX;VD9-6cjm#g-{gPuINswsOyvDg9T>P@JLvtCy|YKv1=qQ5sUS|>8EQoWFkhR zY-Jtsd>^LL$+>1y*V@j=m6m@U@%;7N#~&9n@U2A){e=PdOca~(AvJB7M}%}#APUU! zav1(%k)CT7;&xF-4}g5eWAYg}|J^fiy5Sj)^J2YSM{fWxsZT6cT~dEqj2Qq4BL0*Z zlO4{Lgk_Kz;+E_zS%)_wyf5GAVR2~Lup#2&>~Q82;WY4eGT}w+*rzdSbPO>DCFP-z zwzW%CXsa8)f#{Vwx}>D!gB_B~m98bW17n7EI7Tew2+QKkng9%KBZ`Y2(k*=$oUB*3 zW#{WQ1)Bn)bCZpIF}Kq1FLBQgmIqD^BNOSh`DWCL9J`J{`UJ|q0D06DUj}MNfxjZW z!&W9%BDcd?u~ZZ-Gp8WXp^o_WQrg|mikRi*=tb@Y3&NVg(!^m-v`lBXFcgk!SNP0{ zDwHG{D0Gr!e0Cl2bcs7ZO@#{F`KBBUGK6BBsgA2Rw9wNc+xuh~kG^erXj0NWiA_jPd4kJ5UhSO=g;FB@W~W$6PRK}Zbg1Yi{Kp1ls2McJ2(% zwxz2CiwQ+goW?DTHp1+1P3bA0g;Xx~ZJy%J_HFaSquD84LFSg@lzWt>JKf?m2)*e} zsu&K5Y0ynJ$?L0BpnvbxxU4~fSUn{YR)<5HWxiQVdgfqs?7*-fq_sPDeD0dyR2L5I|H#78HJ>{cNXU+-+VXVy#l$H5PgXO3_ z7uG(?_P}03dmQ!>=5~f`4~FVPtjWMOzdJurSy1dpV9gZwf<5AvH7Y8>duz-h-0kY< z$Kc&==~{EBdRyUPizeZ;bug17;T7t`q5&7WrXs=8D@HTY&`vi7=pXCn=@apTEAai!eAd8~tyWSk8cGHFUwVBDC__ffFdU)&1g}f5Y z70v6+Szt=kEyM#Emyq(UxNW_PU3kHI%sdDYlxCW}*7XXf?w#+fH_P?Z#dh6Hh>YTM z{+3&{d2>~zU!Ah~)Qxx=hLR4n07l@3jVcuMla1!+2@$A?qJIiBW}$1iaYQdiiS{dv z)xQ)<3EFjpybI9$aa+t}^}dJMj{P7B(eO_HOQBsy0Gl3xSGTAfd;N=G_+pU|qsAi9 zQ+tTRMdlc>vdA3RwaI*15sp^$0r69$h7xGs+P%w+ZH zBXROLtpo)Ow4$n8GQ;Q7&^gy zHdW89!rU+P!{e6+a__csKdyv|!p~wqw4_8DZ^Ox7p&7MCg)tOnp11j2cNyltBqRw6!`eh@)j4mf?IT}Nb`nDCrJl_9pL(9D^d zW7iQGpTH^8H@B)3DUPripdP&1b0~f+G^4<3t|LGmO9hcm1*%SzXBC4LLE=KvBL}{K zj=X0@*NC@gVuzqIix3c zs^)+@GvRmwnyI7EXmHHumRAKT-E#p>h1HK#i!&+(dL4%pz^?KT*p)i6O|7rEyrQ7E zs>Ba-E(Fh`EMKt-XlN?N9)YeU3=d+Nc(ypaAdFC>Qk`wWa|z8)gO-s2)pM5w@LWg` zny17LNT~NFrc6OxT?)FR<3d_&*AcE~HG;ajM zziBI4kLPZK1j5q9SzFCXUGHZPZ3WjfbY)%6ss*+y38`HU7!yDv+M^HBT7>(mQOPLZ z0*JMqXg%@0)QO?7%?_4r^Y3xb!kh^M^q0$zW+*O5i5bqU8Jq1o!upHwj%!Oyj~WM} z7EC^9am+nvA=D2oda5Nhl&E4zzbU~r3sa29KBkzSYF=4pDsn$gFAYsgqV}AYzEagq zrd@)FJSA>XO1#s{s84lI*Zc74bv;}S9DDn|QK{08#X*3%ur%%-XFzv_-M z_af!AISe)XF<|uA$X<;Lsc8qt+z3A`C|0SFvw?}hu%M6_%wg_8wb8D6@^7f#udWqI z-Q={UIYTa?n;uo!>`A|&I~>)ioDkIQ*c-W$`e>Kw+GSWv3tVxo0mj`%f&Op(J^d1W z1{^69#Mnx62fL2mBe{-JLv8r)))8*yTt|*uxwhD@C(JsAGwGCEL^2~*d_`yC|DfX_ z3?iz^j7ozr-8)iv#_@%ZC%dUlmaJ_lJN?9D#e+})@jM-^MWAm%0 zcSdf0Q)NG*j;MRNA30gN%n`00 zMzwLau~z>`FVemMK-qd|=Ag)3c0B>MDo&nUaq2#E;*=ERR75g>Fp|E?^-NF&>kgnw znkd|7&ZkOZ@KWV+sd9;TihB_}bHFIV+9IeD1qz_j;V<58*Atp&HaM~0JXvk_u`mPx zQ!l!_W81B?>pjpCgq9h*RiRxM>^2LKSiPPw`%FyI?{=%aI1~4nvw&{b6WwOaYSkW9 z@O<+gTt2qi^+d7(=7{I_nDJd70s~H^pA8#NFP4d@buDtm8qXUy8w2!x+6OYC;n1>^ z`k=;Zy_W|Sq5{R=&NTDX5j_MO5k8j;Vwc1Jb6~h#pG-w^j;<45ooS8}H=Jdrgr^W2 z78N=+tOI@RdYR>Z49}yrA%#m%S2=wzI^7(J1o`!eY)dpn*Mvl0KV8My8MN12fctTM zJo;GPk5}cPFg+%CiF;mEphQUy7YFy6r*ID^dM(e9m3clCS(M3=+~8W42f)$^FL6ew z5LQNFr$SgO?fOYjoy50V@oUv`(fGQklh}5!vUU#q(4C65M{0*KQDQXIOUOVD=+ljO z{R%x16to!pfL|qc{Tw`dJ*LUwv&{r`@^AWLV9q6`ra1u%XqqZ~XPfEZ@z>9WLMEK) zd5-F`Fzp;ne=L|;kl=#xougVXSDj;y>^<17pUHWEqF>_vbIg@pu9!Q`bIn*i673>x zK95^nk?3>gFh!!Qi_XJo0U<)?5E8eXr)t^-XCT2(B%+PT`PZ{tH@oJb{K%*H$LGk6 zf6%zYI1d%4;sG)~ieExdlBTV&>xrr|OHpcNp05O;b8w4$L0MU_fVEdu+oky60yC-y z0#kZ)*TgZ~T)!5xl(?{*rB%NutVAK8Jb&qSe?@p1n&<#P@+s7ta~Nr2{n_SJA~daH zfo)o$zg5}hgwWq^w#|v5zddhbi^#IgyTp$dnCnq_yM7*;grqaVccBUeI&>i{O-RfQ zN$9EDnbL$W!j75auK=dv_f_py^^9B+jBo-Ro0#NvW}1pL5&`$UsR0gp8@V?s^>o*Z zu4?T~*HrAIemz1HF&CM40lThWjYbf=UUP{8yB78(AQ3G--~2a{DQKyHYLH?z^;~i6 zVkEEGaIx7FiFE6U=&s;EcYMD`I2T7=K{Jw5ovu%4Bg!kaofCS>jR(yh>O+w!q`+1I z56=;{=(p<$*5+W6|9G)EL5=p(l0ltl@RY>Wmzc%l3|;FB{8YahndXaJd9InRc{sHX z(gwYh>>u|mvzywF!Y;w}0A1p^ z9$+qX6WN!U$+WZm?d`lI>~@Ov7vZ|T)UGG88_PCb9Fq01hM3aem1}^niKUF!bS&j% zc0I9PlPV8FWl_1W6wb-Az;RfY{~4bD%|+&!U=i1EfC8q>Og*3dG*;Yn(Cn^udT|1x zIhcTs=0qZwUvDkNWxQ(KU<8cOuFLg{L5aQ1HAuTuOX;C$7i(I_tkF|1Lz8i4GG&RE zEx0kyUr-u!&kBmk!tB@OVIY>wUl%!{rP+MlIW4=HUfmtXL5r@o#u3u#Fp-}pt7*Qe+_V>gg^V{Cq zUb~(E^nPqwzZ2#uYLAty4}&cdcS;93QEb-}+a<;t#Ork3kXAHg91YUmaGbdgx}uCD z#$?n9NYlG(@8XzS)8&E0mD8KXV~$xZ>MDkI&Qsc)m*K+G@;T28uJWwuVg8e_Q9 zZs-XK>_EbYe|Nn|E^d<`=tqg$loIc@Nf7L#gno_c8S(fHwu)dMC33=(SY|g6*TZ2T z4qu~!AfLF#-0S9Ik3{T|>yNH&aIO8*xZYTVTzmEUPK4XPqMdVvd%%$Wi|vLHP%Dq- zNAmn&R)n3lfSg*m(vy>&_eSU&-mdRqwZ8badKB^yq(XocQ0TbXme~#M%*ND*#LVl> zLE^saREFLc*O{k9l-LbKzBZ!AwqI{1b~*BQ{^5GlFjhq(Rc$W~wBxa^TU{%RA8^pk zL5ASd^#1q({{Y8ph-!boN7e7wUT)*2BcWs929bD^c?}8zHju=Zi;d--n^bq|sKZ!3 zYwZRy_~@0Jepuzl+kO~RY>VAMfFlKVV#@sAn>;_WzBo6mPTL($HKRBBH(m++I%Ip(6pa%E&hEY%>;fz0bQZvV2Qng!o z=W3f!63z3bB|BY{P(89;_2a*xI$RSeiMky|2Bt?ebj#)RSetHjM9?p@AGQW&KWq(A za>P7oY@{&^Ci`Mdf5deJwcL6b?-{Ki8qEgDC`&iA`?Pa-1WdfsZZvo4tFS{5pOEI_ zE4Yu9`Wa`jEnMd$Z9bd=$({NNTgYUQS#4S(wc30ndA{91cxD(6VP=!AJdPz=&^eIU zU1LTe(Ln>Li7}LW4RVO^3HajURZ~Is3mwBap%6swxD2hf8wm4|vv5I;>ioGIO=xrT z=4!4RaPjGbqOC`a4E-5>hdxBRy{+&>Hy%<%MR-W{xUl#H z7?eSPzz&DiD!YMnD!FL>mWTR?Q{3}{g}h7Wp)MO@1s(=Au#f%cHQarf#zvmf{)m zQu6Pt5^$o5%KhTD?)?Xg4Sz8EtEUs|Z31{m%}93m6c*SGOQ3ZGm)rMH=`TMutO-PR z0>l5XtAz}~0dxVcu^Y0X4UAGf^Dw#Dt*zU$D| z<>@SrHe;z_-);lVgu6xMQoXSyBthIR6^nC6I1;>g%?(H{18?YNfv_ zTy~xDGx7qZrHHZ$gi#|P;WjgR*dV)M112L#mT4#DVGV%~ zH47^|TS< z?W=|iJ7_2gX%Ox^RMEK$ z?l7bI%x&$@9CD)1qy}*t9)u*U4Mapa5YOMC7>GN&|Iz$d_eN@m5xO}+bKT)O8z0BC zTHN99HZC@j^q29Y!|h$ERoV@NxajemaF3axE-b}JZA^7&_zlm=tZtIio0=fesqB~MZ>QM;oyURSicYnK~ zik>O#)S}zn=JKvjpTOOi0vF$7CMC_Y8wmXkVGE=3vX|tkwk7e&J?7}4y|g$c1xYYo zHj0oG@(fT5uhZh-*~e0CB$~pdTK2GNsowgqM6()+qY%wX^NJl01JnKfVHN3o)FW~y zYb18Uo$QoHR6E%jkU%z$Mq($pLF;Kre3pAz5;$yCMWFYp-dt{Ip_sVL z75N5woh_mnw9=KQa20udrX+j%`v%mt-)8g|$ZNODF#+{9e3s}kv ztJJR{mfZ(%f4$vE@CC6sdRiRSl;TF5i;J-@07Ko)G>GAXZOowwTa&ep9cUYRn$#-z zclET%cmNK*Z2`0saWes5iRk};*;jmVpBdTpMD26G866ktnuOrq#Y}0n6bz>zitXI5 zEp{=H$)((Hel@6L5cAte!VY3U#o<4j$!dg_oDF2c^d=@ctjN&fVp*|+PL9rX}q1SHA&A;xpcLuR77<>aj3PjaS{wSrYh z0F_pFT3TpEKKYQ@Cp>K|7uc!JM8IzB4Q-gEdRl5oTl~XjMAvV#2y2^u*$pD$&*%}X z5t6Rt8aX-CBP;)`;^*%B^Dp<@Yz<`Q`L4e3)m&%zjIsLddY1NtaBmtB2Rbuw{6?ZH zfaLYGdE)0s&CvoK-b*Zf${e76YmPo{qB*HyXvL?y=umFL9;Wg>vX$uJT&j+&bkCU>z<%HZ4D7KR>2U$=WsaF;qBX6awdXWF7+ z;qy7<8jBG6Ehv}vfqsrYK|`Jh_>6y? zNl=3gTkLq+Oj0j=(oK-dGd0~AKD5eiOoSG~OKEFF+%x8Ib$hTvWqVRnouTc}ln~M+ zCO)IO;IDcH;f`zUM&gQuCerf7l4rx&Z#V&A@FKyb!>0>H#1o~Wl~PgH+x6+s;_!hG z0apl#MbD~2w50^LwTY0Rxp(8UDs%4xJOha@8YhG#^t4=Y_~v0F#r@Bk{R5rD**asc z()1#ji{es=DNbifq;>)PzqpTF?wV}eYpmA4gU2dEkJ5fZ{M-cmu>A`L4{2D0HK#tW z!oGsfql5`02f&;k1`we*FBse$gbI?fph8dEBBnpD>Y&G;H&;fkwHt}KO`}kO*!zMx zQoZFfIWK_o)O2USFcf8k6p2$`Q29%mU%+T?v>VeQk%d=&?gew4dNptg1F`|(#bE?N zOIk>ap0-JRbJH+Iy`&8jW`~EFNxIlz}YxS)2F#!cGbHU8DAoA+S&NV*Whp+ zFueMQ_=P=kdM&gYiLpg?VxvdY>l%~;_Np=?HRs^a|z*#4ws9*L?)bySz$NM zhgzmbYkfr(nDoXgW?}&vGPk`U+yAp6s&*hvF52NRfFkY2>75n;UiNYk{far8SKS-% zqZr(PD@0twu!-XGSIhzM+-vpSwQReQAY}}@qmr!vRkbWko+>ZyY)Gdh&``LbU13ER z3j4)(-ZsRAub5FO=oDg@a&*eV>=bd&t7a;uTVX4Tw#(8#hAjIQFQW z7py8McF#e=vGB+cvYsdMRc9tU%u(!RB%Cof!%6R{vN=qB53dFZG6^ZMQ7Q4e_slZx zKSVyWcs9IYj$0DO4o|WPYQj0WCYV#qm~|Sq;j{CCm6gG5LHB%LX_a{KT{BKhf8Cr7 zM6+=<9>iPp1+S}a(SLc}tcXO@2;-t@dfFLcz%8mx?esUyDDm|h<|O3SJOTjBqZzvX zy5@0Rq4(3i1q!lTd(}04kBuM7FWenAL;o&x)|Ky=C#%`bgn8jZ0`tI$^y=qoUa{_N zGeKPXkvTecnBC|{S71*{yQFOv_$!h4J+RXc>%I^Vgmo{Tc-u@@69;Lq!175#a-R-l z*(lMLi{F1_F1hku{av66h+5~hQ_fS^K1KL@I=lGLf3((} z>`sackGL)wpUCG9-giekVUuowZfTQV+M!#Ny>0gD+RVA&Z8Q@@G#LFDhu!P4Ht9gF z-AF7nj?Mk$o9NnLnNN-5O8bOt@fOXV@{ zMS=3oY9#%J_hELRZ3LY$=fp$rtG3^7Ac3-{jXNNb$p>EB_P|-eQshS>FV(#m7sBw~ zhaJUCQ5lY|0w_UnRe}=N99Oy6_klT1Jr(E%0;&KvkRviF$8Myzf+V@LtEF~#B{=JI z{J!v-%>Ku53o>=&hi0FtSW{(E9cJoPA$8gQf?~QeR6QUTerRq)kX$335^@Dy5mLbN zu5QVdQL1?RLyR9(Yz?UpKYtibHiYA@xkzxrWmT+J*E$zV*8kpU(9Sj%p=N!FR)KCK zCXe_eJ?)5WW@t&cy}xSXuk4BKpP11D^q%l6LBp9Nun#vvgQ)l)Gk!Jnk`yZSR(GxU zKg^UiV3{?ak#s53nG6w&*)QgNZ2BUq?8g02zXMZy!N+E1*Sp*mADi#edLgxy)=T66 zsH~Sa|Hq6*LAOSF9^@j*P|5eBSM+b<-pPEsWCaF|P z-*lqVJ-IK!Idx~x&&;E)f_~cF8VvQjT~E0LO!x1N1|!!v*@!jz>iqtxjS!RW`?6aSMl|J;}6&HIPqdVQ=o1m zTlYEDDGJ8+`T^G#2$9bPArbe3f-@_&LjoBNn@HM{kNGT&$504v&nCi4tep7c4+=nD zocv=*f@l&YHvOoQIQ*lzQLO#eoP$iag>Z(!_w|kbsAkLX%9r(8W1krQleq)+hMR~) zEP~SJpG}W?;OO}P!7h;j;vF^~25vUg$btK^W8k_zbe{d*jP7Gh(q_T5UbI6``%2vM zGhE}lj+vuTL%4}|aI~xK`{UGCA~p>tBAe#eC$NZfMZz(2{w(}$JsySajcCIJs{U4P z9OXV#bzO$tT)Cjv9m7CuvYQCAWTDS)IHqFY$N!8O0*QGc2|exa;_xxm{kdI;*bE+{ zr+pKqP<+VRAFsKtMeVQWj6Z_$ezq|lX;W5cpCOQTJh!xf-Nd_WKH5LkuoOWvry3Rs zCr!MVGm7;F!y2ldB`op@pei}Vo9V!*@ZdbCk#50bBFANo61`oP!lOIMWkqqdhFItw{WRtLn0gR5OY+8O|Cr(>(*yCErtYhKkYjjPWo9{oiZT}j&%nr z2Q7<2TJ*GkiUUU#yd5#%m>HE2shtLsI9AhQUDv?|YSwq@CXU22Tv^7~_)+K!D~ZH7 ztR(TZZVgdiOSnQ|uplZe(Qz*^wu7^SDYgN+$cjooDX%=pdRRMyB~`potCpoSI+7AZ zZBJ`3!a14>KSds+#& zoi!1Q;VzdR!Tt=tJH?GXt>{7w2q8o{Aie&(0g)xRy_k-U?HF4jc$#uoOE=ghQDfCe zuXqZti9!dORt5$c0{C)V|91UDFLM3O^)bqnyov;fPq-e^H@WV1{Q+r?Yrt?9`fBiv zY$QfJ%~k0t)t9@rxHh_0xpG_!^+m4Pu9IDyV-dAfy2QU;PW*Cg0Ux)BEVp>rd(r>-T_=(4yDs-Sr#w zt3Z#wKszQLJjrtJkBGHzap4`8+O2CeEh5Tp1$y2)+isbSkHvN~LU4L7vYXxbnTDeb z|5{)-dGImcZp_8UJiAfH$6UJsNwRuSH&vO}*{rIrxaMn=|my%WjUt$4PecaD4Q%oB3uv>}K>+M0dN1jp=4LZNrCQ z?{8vjbexgsp`T&j;^UazgvRth(2kl7q+jUg)7BXDo z<4q))#m5^+=!=ink&GH2ui15}_;?lh?D6pmDktFMWz^!p$BQTtgpU_cHVPll+qLN6 zUeDRJKD1(%U7L@8J!{uu>hyXB6(#ZU6bi~B^sLukP@0*BOm8hsb5(=HGa5yyf<`~R z5fq+pwciQ1HFPLQJb>?-h#(QZ8{W?f!%@lu5}w1v3}=uzHe7;8v!P{cKTDBJ{>FY* zR8F?tMC^AAH`hUV6;;~;n*)_f06-p7gnVUI5`>m_95P~2H|sB``Pf918a9g<-Q60~ zwe`HLyA?fsh27+b1U!CvdOtK|v#-MEo?VRXK2T7iJoLnk&;h3zh-JuF2nr@MOKn1hfnBqT1xzq@`}N}$B} z8<-Mfh-7a@dGVW#Z2f!vb-h5Ji1OlNw0taNC}g}`x_bpOULm=(+Y9g_PzsJ>7`VWt zgRJO+wRRH$aJt{q$E=8(&BC0^{AF7MD7@kel(A#fs^myBD<7~Kq~&uMW0=)BV#6RS zTU7P2GLZ$jiSTt1M*Pk`mLkdcu|C#Rqz7su{!9=zJsP-EnR`Jc>QIGKJ63Fsw4ydc z0WoH&AnL>v$k$>PEf~aUnQ4yK!ptSKOlv!Rgh=XZDe59e^u-K-5CLRP_xQf5>AtD2 zwRt~mk`hP|F-{+f>5jNCH$F-O+X7)0z5rDbtw$wZCtw!ZYgTKn2V4hS!;H6(5yY#% zq3_qnYL98FF=TCDV)EktBoBgp)U2Z&`Peb)hFO!^~+6Qe6giW_r zlvH93Rkr1kS{@84BUsxO00hq=zq za}~>E1d zhYjoc1SuYBWky1%N4rpB7(%ZNwRTa+Xcw9+g~C}=OjnPJ3C?;)k=k~c>_|QGper9A zk7*Yg?;5)h9r+qE9d5@TOm&~6?EWqwST`6DcE*Q0##2x}gI zmgXUlAkgye2+LH{=g1*~U6z!R;kfr#+0FEV(0?{H%F0x0Ar%hr20U_(s0P2?%!q)c zSRPxWEvxI+*F;+z5v48jRn)sSxRxQ_{fIFO#e`WH*yallFk!4E8FVS$&NR?w`U<4>l`C>*!mU#1+v8qVb?T`|Z8p2y zC%zeL_2~LNdX2N@pd5MgL?~K-H(xoN1EDNToWGB>!f@6T z6+_yA)I?_j(7ASVEVK;ZC@=kwG`YvgbSu{n-Sfcafv-6nZ{mzmR=)(OBaK_C%T}us zw~w+WY=KZryU-%F&@XL(fyg#E_%|U7Yl-H%%{9&V3DJL}j2=Kl_93Pc5dpgg$HS^B zz{yC$syrDtuk@87U!~u@s7%&|2-D`4F*(F)6TOaM#3CfGm3ialn$`sMtRfHy(*RXf z9sAo>yEzS7)^d7o5*co5l6p^|B6vcf$gwR$QEEt$NOfC^EUG)*)*|?%n&~(6;RXKU zwiFc!`^I1r;u%S8&q#_47=JLXL_UwtknZy|Js&>!^R)5s2(7^~q6Y}Erh0mr z_-UdwM(uWBQU&Y?-po|5V<#`Po9UcFSsOjQR3wbI!bs1+9J5FtiX5d*iyfNi?t~^W zdAwzIy%}s7Z>>f&eKWm@h_ckv11tSSMSI-&!SXOtxqdkwrc%D$OwS@>_r!o$)g5_8 ztQD1s=h3Yg%Sl><=lLq!vwanTG9@@6&X2Xyk?yN`D#Q!$f=|R+ids049yAdWQ`#hw zJXRQ`hX}yHcuhl?zhiOX%qHs{{yuSy$MUExEXfE!1*4P{C&ejJyBxU!k~Aa&*za0{ zgilWyhhbu6V|rbn`w@Ti7p=kdOz1i%rv+vi{hxA{1y=?NDiLiMtf~+_CRvJ75b=|& z=pn9VZ3rx^0$5n5tqhb`Rv}gIO7UKT6(iCt^yenKc^TBt!vOBItnpn>m=?>Lu??sD z5=bDTLQmhlGT`4;8Q4-);$9f^qoQ#^xeo=uVpNMvZp373BK{#M(^-=Zws$tP!}iwG zcZnA!SfkY>h659<6K0AE7{<1DxOxinu9QwICh zaptbGo9TR_mdBu_>*szSXPr;Wh5o!ONZ9eJmOc<~MS&LGOjj}_^z<{tMe(Y~3{S8w zZ%gU7QgeOky2h35(r^N7F-GW518^Cm{Xw`d8khzU8t4d7S&3&{p6^4TF$~-l<-Rh2 zd9%SXEc16)IsM9r~FhE82@|7@5!V8g?ju=HkV1S*j&21|(Zi`yoicSPEVm zo}la#Tuo_~cvGEb36v2_mdY*(OWBgrU$ik4I@M_{K^swJsqNyhw3UiYUMq^7K?1ZC zJa~eFM4_eNMJFgoBw7kyc!GlTu}Z-UPC!s@X@HBaf)O-J)8BK|x#l8O((jB?V=lab zMS3@U`(u%GYs6Tf^UXxdBsyQ0@2iv>6YhD-f@R0y^ZiFS%U4sZsBXp#ZLzp%iZwFy zw+E+Kmbh+;<>qoHeul*>2252g_jyyT-+@ThOt>0bik^PG_&L=YHBA|#L61M2>dA@D zQo}eEdSZ(gZ%nmJk(^@1BF?mV7gPh!5t~vhMFxw5_zg;g@P1v~s+4$#61dJ0+n;g3 zb!93Xt;(j8Lyfx(LM$>J`zo#}kZda{rZ`=aQ=H?s#%}2ejid@EWmu!SK3jYl)+t~$ zv~-6AootO6Dks}}88}-Y(JdsQr?-lh4AoZJF63$#Y6(N=l1wWHMso|{{8;u+Q@+2j zP355mX)pterdf)-zZXtJySLdb z{UAxkSL-wt|5Qg=33vqL35>HQ889_he*<(4}eYJEA1eUwuEEsA$45D6~{;mE;kj=+w&uZzy zT^&1Q-733PF~pUFoRAA)@IeOs9x1*bu{&Pcip(D0-*=ZP;W=1GrY%UC=?Is~7_ z6AJgZccZd!S)otq<`Mf(v7+FTY#~e}6+Cr<3jT76^&GNOwTyxSNj3U&egM@3gC<%~ zu|15p6Hm>wR)a?0(oUmKe~g??Xeo5(hhIj55O4-cs5$I*?3$#}%U$!){J@qiz&}~) z@Hm@7WG9GRTsO;NbVAFBcJW8L7Vj+m@hodoTMC5Jc~8nUzBOzk8VA94)O@HG?pyn# zAov_h7Pgotd~>YOKY_Tm5Ev%nx@C?EalHXzk&qzR3kf~_RS}q@+LwQT5X^>_Nf5%7 zS&Yt7N#tf(1puR32<)zg!~i8&39c>nhjJAXC)){RF5*mS2$$R-A zKd{{&tm?9C@5Vqud_gdDOMus%#uWS`&VF5Cw-8j7#?>%8tEqA+S!L-9mH}XomPG!ixCQIb|)hB!;x;>2Hdo3sr03 z;3Aw-SUrSUv+(F!7pWTi$s%j?&wJENEPPQ^~dEZdn+ziLKQ6w+az*w!+~h! zw8HtBoalTo&h7Kx|0|9yw}y-B7F+$*@4+lRh$CSNYRA?MbwsOZ3LIFhG6f!3 zjQ8-{E%P8jKix-*Ri@48Y-=VBS|W#}=@w_JXu8*B;~6{b79!dK4E=-IR_Z3@{exB_ z;Dz)|r(ZHsI}1CATQjzABLf+CPtwl91S9dC+w;%Mtg-5_iICS7 zY=Ta1S0h22DYh=NrXiVU%L*tQMH}vCfY*f!gJme!9Y#1X*>?1+W;oG!v@ZwhxByn= zs20G*IiV#(5S0?QDJ4G5v9?b)UekI(;=mxZo%j^no}q=?c5yi0ib`E&`69< zYSdL4BPuF=?fLiD=3CL3u#*@^5zCi4N@@4Z0$-uORDH0#g%?9X-o0QjjM20)s2MgM zRj5u!UbQFSwfVbtAr39vP6(tByUyq>tuVSen9r-iy(>^z>|PxVFKHqYdcereNKA4j z$kMc-T3>($i-LN_;QSzL7vh79Fe}boWhoM`KClWGN=Oj&gM^+jNZ6}XlP`KTCLeAv zMDyr+o4#7*dOLHq^(_0CI2!vnqaXShJ%B9cYl3PQ%>Ff@AtG=l#rvL+_>&NiIMr?; ze6|P6|I0Pjw5~0uX=@>YQ6p}~JEd=}HF}kDTVgm2{MCs`=?-yo;HEK6P;h~FW43b0^@RD$#(VP`eJ=(ae42& zaGjN?M?ly1kS@`GgEd6$A4EPkv>Zv!;nwTmk>QF(@*=NT86(7P8>|ss_u7RUFfSlf z77`Mz8&q`1cPO#aZYhNX5UwjXs%*tL{00R|LIPr$QerP9f_4k}(0&Z%O&cxm8s$(T zTn^X5jPz7zA@xY4m+7OKn)ZWcx}E_>U!+x|VDRsaT!b-Prcc9<*NB{TR$4bbPFpB8 zY_jHZScxUdVfCzv%cfb3B6yX7Fi^_H1=eVB0Y(&5aIHU9_#~|G$*cTj!R3e-fL4N^ zp>I_9ihS+`ZjXDx0@WTWHu|vU*V(Ovc3{!y8I#0YK5L}freJDE*c2cUBspvfXd+va zw$bZ8m2DKU84C+n65>K6)5ULANo?AT)Nbq0%Bn&|p$}l7oqwZMPE98=x~H~ z;R20y+&SoJX0R$;%?_B=NYO@f)<*3gV7EqKzKzlJjFi>BZOFx4>5oDCiB!t=C!A>e z8T5$uJLs-xKVeMS{`k)AkM1G|rFd#nXtPTe8C$IQh&+S=K}`ZC)3hzt@KWW{4iyc_ zKz{7bok{pOh7&9mZ(PN))M{>xxMhnKCEnd)%?1U#l~^)arWwiTonQ%W*+>wut1yi8 zj%~v%sfwxT&M|>n0?JZtQWt8695*$ZI9!AsH4-*!Z>><%Uvq6mQ2)b5h3+?2q3*;x z+D%A|HFORTRB`%NYY%p-R)V5(dCXXi@&r}IaQnKmtICx#Rd}|6ynpdFtDHkZ_>e>L zwOHYxhkUwgnen4>4~nKGplHHgZ4b=gzq7>U>WE6a zm8c!_tzR3oGSt9uD4k*^IP4BwMDz$+7ooUKs~fuH9ACIPSQKD&%WyNevQQx}aL!7F z>+RMtP&fmd?P75EhqunqvWY$aw$*fJw)wZ9^U<(Xzz zfpeCs+OEXC0c$%l*tU}9iUVEGn6=us%U8}xG!u?$Us#E?X9fMY6D6L4V#3WVZg2rM`Akc_CLEKkj4O7$h zq;Z#!=FMCb^XkVC6*oou zO1n{JR-VG#f34(j5x36pudZrU2?xXN{)~Eu=CgDNl9MaZBu0BBB6c#TDDF#GrB<8EOaf7FjAC z++&z8<1epRq;&UCu>I5{~fA1oNMa2RCp9-WC;}O(bCBws7&pM*=k`fX!c#GuUX@tXqt67V~0z-1YsSN9GnIR>; zfuT0(4GhP&GpxO3hQ0!AD5uzQM1tX%c7`=7Ll$~xTmb*z!v#wI5~!Y?xn;L=tM1^& zKfWos3|`eF{OK4Q?$^=aM(&okntAS)p378s%W;Cfs_vF5_P1u9yQLaLfh)bo3GqsG zFgGuY8_~74^X{^^!bK3p5ui{-anUUtcdDRJS7CUh6Vp>Q{s0os+XeK=TPb}mRg3=? z=Lm26`{M-%w+i0l`J|ZPKbE&5ZcNuhJhCD#q9@Vh`Dw(AW>&Z&E~{%Y=gPQ<;8w|d zJeSCB$D^`V#*O0(0^u8}R!Lfl7Li7bCbctq3XHmb_~tuk%%GX*rx7z6*|RI-vUQT> z+#qYvK^C~m|Ed$(M>up<+_(kYvz=a*taQAp#!4qp)$KwI%DBTA;<5pj?+>1l=gz!6f#L8B4Ag`YFEcqp#s)%a<>CEFJ`P};zfspExI$# z$zLiGJfz@IszS#uTjf1Y&hb@rX0KvH*2E3xyDP}4g(Es0PA!e42TtTP2PZaYP28xi zmu~eMXwaaT?58-wrML(RRjvzZ)$pH~u|kJjSGUk&V>=Z1$=KEw-WK{#OI(b-K``tP z8VqBlFOU&cDjCEBVyf^CSu#@*EIv*!JPH<%zdLSVI#+bCoY?oUITEy$Nq%+Ly0~9S zs11C49=K6;qzCSf8(hleM$lV08BjDvi>;u(S3M||>mFb`8pZ#j;A**;CHxs*9o?24 zj=JN=$qz~h)QtVCcu=^7?Qe^-^Xu^XT7x6QN81`4@|esD+Tw?RdY>=D+CuT;Ykf_>c%)n)>PCR!6Ops5kG5xLq<0(9Lnz$Z#YW zp=vlD26rkiFbf5yQ6GS(ov^uEpkwEHj}wA0g5L2E7%W6eCXZ6Ru4tp9ZeBu$HWL=y zmbP;{sE6C|_K-ZW!yyWG8ud5?oz(+S^G|pIk(~v?Ji}&m?Rrfr60LCJuT@KLu#~NF zgAhbNPVUVdY?R|W;`;KfDr(mTO(i8EGgYHlV8O|AtS0ukYAOY0}wJ!F5;$*arLz1$t-4j+|a<)sKx`@J3-rjdt4U(JSL<7 zVs{8|YsI|GdxBiq6nti~1<)yeG&-U5;l=*ul%*xo1b5Gb%(1 zhaX|7VE7mfmbYV}eYFotg^#erWWn_cw3qUQQ~9R<{OGbF)O zc~6k*l1|joj8|{2h2biy@tz6@b5o?$pf8)O3y02P;6a0Cfc(Z6C!gt^lRsv13>P)_r?inBNJKLRDaLq)(;2 zD7Y1d0$OXtLBiYA4ScKJilr(*5i2}cb#%Xg*eiOtSJdmY(Mg3ykB#J%bj>j}*?WTE zeEsOm{w*<_=vi8ifPoG;;KBWBV%`aI7OM2W;m~)+IMwa+kvrPSpTAY|6gtGn;oX9h z;n>c&(OqkU*LKFGAc_8j1r!CK7``hmmM;Jlu}8icK+PIG8OvY>7j+q)p5>_m5MZ1R zT(!FU=(z+bnEvCbpVf0C%@Q~F?3vCte)K0oh#!EgfE{-SihR4ip8y0!@g zhy$o6`&y%erS6Fv1cl}V!4Fl%>or<_Uo~bu9+wk)RE6k7zjpdpe;R$?cKTOtnLZC$ zEGK%a6Nue&Mnj*Z=M4t$#X^EZjE@7Gyf@C?wFIx&8<#W(JCW=%9_L;g=EjrIo z!vmeZH0BxPkAe&&e^>VMy>#Z6=Dz`*;*BplHFCi3EkZWqwb?zQvOZdk`mA z=RHVq4wd2WxD0!AAcjJ4Zp{u6mccAQrMccHsyGS-OV&tHfFievNy0Jw2&MBNo3Y@p z%I52udFHu#;SD@+*cTK_Wy21{C6dGAL;@LxJuqFX55$eRLcywGg#35uPlCPy7$Oew z)X;)M(8WMO@e`tG00m$FCC5G9A|U}CC_B~!Y$$p{Z2rJ~@MU^1j_&pVNw33ky^FYp zIK3~GiOb`KAd^Z0!L4u<^ z@XbQ^9UjWCpiuBqAdr{nM66Mw82mYj39vyrUb;a(I|-btAVoY=1IhSs;&#dm)8jH zoe~>Eq#(F`zBLHnqGkLsaUO2=`G!DAks_G0uknMxx$kqf&&IbGeGx7DfP9G2)ZT2dy-pP^io z6x|Zki&!FX$mhvCE@L>##S(5yD)t2R$tFz6LisaX_Yy)a%-Y|`sd_ZIztM@KU;ZrS zc0p)F za3YRPpw2pkHAGB=eZEWnp0L?ql%AKUul2u$-9ibbU;V>|q!{N1 zV_E=QmJsj`%4hC$W7obvHX2R|v(Ggh@-LBL$G=4gwwczF7&zh}3-fGdf&= zJPFEae;6Mccm$;ET7og1{5iL3#nCfmnY;IB5OZymTW+ zQ>N8V%8@@S!Rkb`1m&vZtXlD7qrCB?m(q>ly+gz*=!ORcu^6%2gHnk2G}_y3H1v`_ zk?w$Gz9=-32WdpKQ9c(5{?S5^GNuB;<$)>&(n0ucY(vmycI0SeL<>D~*fjYZbX5rj zZ-Qh%h?Z3?RXZ$?X>MwYpQyJ_6;%PkHJYBPZ7l-MbnyNtXMP=&-;6URb(3O*K5XFA)GbUiepM!d@ZuoWdYBd#0nybq7X_=%YsVBSkuD{t-K}Kg{s^)ou+Qv|FWPjI` ziiOlCdj&g^Yjm>j-a<><*DhPS^@KY&HM3eiM~5$=B(~%l2k~F5Cf8UP+$5i)!_))u zznc}^5gyI{oy!xRkUU)PmGU_{^AN~j?mQzW?e=h<(K#!`&1d1gu>% zO7nas90DMqP(8^|lbZfuHrDtA=dH1B?4X(|cOAa|Exv=_@-O%fKArY2YJ>jF)~+)5 zXKUvhjdSqr8T?wTC+JQ5TAq9kzG`(l{q+VXo{+0s+gIWPP3N=$RW@+Gv0uvs`P^z6 zNlVb5eIwDukh+Q^Ybi+^ESfBzL(oHl38jt}<(g1?rmo1{WkZr~lv>B0n~&og^oV!d zBK?ibJbFdoWbld_e^YXAN#6rx^4B zH_j}Nd~P`?Dnap_+nCH(lqr&c?SrNq8XE&^p2%Vii~SaZA2@J{8Y_g&us{SdXVhUx_ePJPA_>f-9!d3vpo%pIvT@r%@rT@+Xf9#RxGfjS~%{O7@Sc`z?&> z6h?*G@AaUW<1cvsrC8t7ga- z5TSsri5@#`Mo!uCN7{@|G&m3@&`^coqH&EwToX`|s=5MY*eB5sSkY$VfEJs40hwwy z`IQ3s0wCk0F9c845c7trPCv~X0F9V8jjj!bh^?s%3vV#&UBOLtXQwwCopV5qIGajc zaD$pp?7tYPYH1Sk6E(*5a`^%xVbXHEUp{;J-S8Mzu*De0uZYraigmKYLQuar5Wz{| zcjA3wwy+f1!ECV?y0jdYvRUL2<8T?m34jQ0e$vTpamdoowPK;{aW z|ECWaIjtrR9>C2A3bM@FDfl;|FVCI^qPY6Gz*isj(H~b;`n?%y%#DBmJ&EBbt#pfw3N8N zv6LEDCpZF2rITZjrspI(bf0>n&V=+G5)g?wBz`UaUEF{Re56=~{y=+}^Q5sKOM226 z*-e~@JZbkyBfDxX3T|!DC3h_(KlzGDy9s{!v4;-NaKjITZt< zi##b+bCHM17kfh@h6=&I&l!`4&I_&rG{#UB#HI7(iwM&|Tn+vqlrLt@Z}qbD&gHtN z*v2P~YA>rSHs_Ra_{dWEBK*I&u*Be({8Ka5Q&U6j%RT(_ZR07UGdWkjh|mOfvmyA! zoQhh^Fu$bDtEX@)c;t(Smq``ySz4bma_XSYe99Ps%ljfCWVbrW?8s9_XMYL<28rQ< z;RRqY<{0A89{z4=nD{?&x0r{o{eM{h)5hUw@*{kT=d=b1!RJ`aZ;e(~|GY7b?LBR@ zkTc^`_ULJ2F}fW2e#;^RpM^)WnhIu)K_}N=4LxoAuY{hEjc|%TCPpE24AJ|LLSTgz?c&Vj)3|SM>hEbBd0%3>jyB6FMMDeK+}@ICVgZajLZJ>Y%oa2 zn-zX!hW#lD5p{RQU_w3lKX3tm~RFoWI(H^?{y{gx2gGZr*D7 zi=N;z2dn+RYer5*@WIzrDf=Q66mZwDqU*-=uD#{^KoJ%Kw`_p$2SExzgX1LO4~AWa zfzoqQ0}C^nP6SuVUyzysFHXpB*<;--{rGO9^T8%3ygy%%zC_-i$AV29@6TpG1x4HR zQQ#T5v}l=ZgxQojD_8!4lmsLvh5RnR0xdj|IN4cLekdvGJx0M$*c{0SqjbzV#!d*@k4_PPz2nCHs!8qx@O9U(S=&C1uuf1|8ffr z(!sC22PXTpuPLFMctIG;R`)e!AZJkLx@ccYJ%vgBSZ0cvXxUbZ4D|zr=3l{21Hd7QncATBX^Eyq+0*4ODMFtP+PH$M8f4rd0kfhUAvLPQ4-X=5SnP{L(=hliza-!Q%}ZL6 ziDRZ!C7DK7Vy$yPL2KQwpsJF3)$ty6!;DuQpV~B(5OFkImzxCfoNyjlO5=F5e4#BL%{{+Pw1V6Q0rl9FLmXN(KT#J z$3w&|0sgaji!A7OsK&9Sk!nz>+!MNnJ%c;1|1cNYfmOPzLglYgeTRioSb-+cRZDB- zuM+U^ay;DkyKG0kiKE{=lW%gS<;hkI{%1xEc_Rl&)=J>b-_)Ozamd904!{Oi7A|~%TV<eFY%`3LE=Yfs zs-;nqNxWBV65~+z^b|`pn&R2y873>89o4LIhAE%2LXmPI8Rf5LVeX@a(0dE3>Xx|4 zroqe4#E%fzV>L5OoWjw2XP9;dSIb{fTy`Gj{t(OF62&PIb* z=OoWEr34nqU(wNqED=^e%cLXeoY1Za#iXSsYU}{W2_0=DCwmJg=DT9~qUM(qDl0(D z{AdDpVV21rI8*+Lj<(?#RL?RK$1jsrW^y`1#26d}=>Pf$^edh#EWyI%NdJ?zNXg8( z)>KqAQ~r96k7G|qk*B;G2VH@uj-uU24JxQwh<+Nn1e;7hcr=oewF%$T ze1l>yt~NROyX~e!f<*VjKt|T~jAYNrCTGwL`RfJrMT_qXjwd=>F@+O}+eZ>XJamx2 zV)}Z%O2VFzO*~&7o& zj#3N6F@_$}qhg9wDg2l9-f3FgQY2p@1sI#J=ggv&jqX}Pp2NH>(T5D8%ZehRY1%>( z`SK-lZ9y&QIo00|4ad(-g}akC@!D3C(<=25ZtE@t%9jZAU=e!GEuJ)kg)&nVd{mc6 zw}y|Z=L}+t&b>F~sdZ51Z#9jaK3Tp*asF70XIjU2^eUO;JyhWW+KhGxB+=-_RTo!W8C7qWz)2`Y@U3HtQTmRJPEv7Vl+#Dl^qP>oS;$01*8#JBN6&pn!NmsUWKA>j=e076ppcHv|I_p0wrQ#-I0EZpo%55C-gXewkajKY*0Z7h;bZxDl$?`X3O+oUQ>31dz z-vv(DPjE4%rD=n+(m){uqMg&w^FO6^Y~4$yq`>*|H)J1D((L>fOq^y=yI(Lhk`kQD zhP-GRhpe_j`5V$gX<|Ps#TIHrZJ(-YooQ{5WC&UkffPH$3>^Jox1MK9J>}(CdiaWN zTCneXMedKh2>HpEzab@;?!^E3$$#ul)ZAbGc~>D2*jt+6Oq9PNbvGRRKK1eIat$Z9 zXEKvlm8@74*6DaRFe85(G5bUZGeT1>dC7#NSaB@yX)EZS{wpd->=#yulhCW`jA0p? zgFnZjJ}}K{DU&bLWq?qGF}buEC^V`|SY8ct6X7tw+HK zUnZph=7urB&%UaG(RF@9I?xhp6+Yk^8ywWt1==cbIV*d;S|!Bs=YObn7}M zbMRYS*bVY!!hKSH(CKeYsrnvII!%T)#c7#*nb4ojczhGdL*j05% zzNiE+8J#iog=DC*7`Zz#v?Uvg{=7a>98{q1~j!qmFxCM}TJ>;Ur$LJAVrytcu3 zY>KC;siM{sn(3w6Nw zb8tnIPe5Yp-28Mx_Ee~u;JM#YK>gOq)eFMc+z}I{ZSGhke@mfoG<+~VIK|UgU$Kz# z6>gs3_`Qp}pr<(k-l=aXI1hT((9>)w<_e3i3=)MuwTX!#;z}RJ)h7N4Fao48i%+0* z%xS3>=}u+_b?3WaJZ2IE{6ws|ub%KI$s{Q$8kqzaLY1|1;VbTmIPD0VhVCUDw-Zc^ zVQikuoVGjGY^RY0X?S)m1p8fPwRr1jme}7s0^;zUS)Dx5_!*kA)K$QeQ7g6c?j<(6 zznOA7zB7RwhNSWAbZFaHIDX0iI||YkkQ#59RFxv1rj9AmD(VIDcZ5@nZ83hTHnQ_& z+5Ncgk5aiB$Qz|EAoP`?ZM6-Kr1I+K*v^n`iZzG3Ld3y1d};;ZMX48B_Wn{_C)A=D z-eA!!y&?{m&>J+vTo61{{*FApP%}(%YQ?Pyym|L4T9jFvlANj);JNa51XTmp#ngw* zDvXStz}*RyR7f@tV6a;0N)>wI#b*kp*qP0)nXG6SG7(-JW(L<3^JCFCmMD`UUN8-r zRRJ_T5dPz+eiBL#(~sDcVdmbX2+d%33^Ql;bI9M3*X?G%K1=?N9IjMIre&C!6B4(;- zZo+4%IaG!8wxfnIhHl~%=|dbP^I24pxgMaxD+zcgG;UKpbC;Sq&g*TZ*e(<0EAg1d z=sQhyYGPAY30Uotcta_Nb4j~bB&$H#ky##-C%XyWi>4|#xCyD4?=i_&Qt+b~!L&4c z$~4-}xC=4f9u(f90ef@~I0XZy;LR@vrl9pOhe%_E?&7}$@n43Gu;kB4t5{5m zZ52yMvDIk)51Oty7_UJPeY}QgIg2jgN&2_Nz9Tw=l@*y&0N}eq_hTjAW`2>GlM?Vi zk$GHjy?ljKnkqbRC7V}l=79c&;dwv`Tp@J@G;B_>IfbusQR7_%-ZE3uG)8ZT7=}}? zR78m7A7TqU9r09K9|e9NMt_w>LMd}KnUgWTt0ez4zJIcqy;ci*w3)X|`OB~g3goL4 zX^3qx{cTM1(k8X{CoY{7U56$enTQplm{rI27q3v$b7_)b`o|bJtPui5JD`5@)d4^F zawX8Ftf<~>Wa;(h0f66KC8IeL(^XY(=7cNu)SHKsR4>`R%zSK^Fj>Az1|f7P(|cpl z{TV4B6FdtS@_ird?=%S@C%ccx-@PSrzY0c`gel8avuvgERWkm7Pc^+W)?KmG-3ZIy z4KDz>F26UqrXK>>>X)0Hz_?x|Ke#R)KVZYt`XK49zk*FOJbR{ zpE)<07h)e>CF=nD$n0YOYcq$BPyXKEe!$qTFi`s;0M)eJhsxxu^hJ2F zB_SqJEWXX`WCu2z`_O2}ex=bwtE0)$XWIF)?Nd5;5w4W4lAQ@al{rdfmW!q%RZHtC zpzQN=Sk<@mRZ~nsl?;tN2dOJz1)I%c4># z8Jr~hf81=2+b2!B}^B(PXOiH#HD6rtF##V`UXz=x$QF;aM% zxqj~Gjii|g@-@n09pEvq9M@b|SuI~Hz!>IX40SB)L32dOSkHngDAKu}=0>cbu8F4d zYzSkeWN2$uOp&kUf-`JWHu$JHj31vxXa=v8n3%4eBPmcAf#D9XHP_Pc9PHcCVa}lG z^0j>Ww#EPLI9g>W8|0x${BX&9(A1f;s@;!$v-6<`gPv1qI}IAhggw3c?@7-=V1f z3Ngj-mf@tK46?jQN@P(_n;!!5>AC}43HkKyNpo-hHYR-+QKY0!`NPm93AbD(nAy|M zna8m)C(Q*g3$KTPbu^~yi3x;ga+P?N^Q3~EI%#&IRg*x)Kr%h%rzlMq8RF;^U%nXe zROCy{kgrqRnob_iv%FjP;?tNqP*5g|K8i!nf}&2oPMItfc*gV3nv=4)=Mwo-5idd8 zMva|6Q@&1Fo>?tyz;nFIrR+Jg8<_VP#6epn;VtniWIeVTj*D|d^g)#VEp29zubC_6 z70cJ%7#JK%=5HoqHayEKkgG=qH&+V%f=!`?6qI(*#O7wp*9qc48ut5V%&rXX+p5uI zaDn@{Lya=@VSU~-=R#GzJ|EmF!7cX;PgUJ|#yo+vqFUDP4f90$+j7?MhPl^*68U;1 zxWE-{zBbWaO8^{bBaQBbRXW3^bQr**NB1I)rPnB5Uj(kT;ChuM?zUOjJ#Uyfb%&mN z0~b?~e7ypM13-ACeK=!lniuHw^LaSo)*1P?{uuEAAIpiHndXu@4=$&8{9(l(jLC!qgU)_kr2T7iH?; zg7Y1Ra>v>(P}b58D!`iV`@r0ve@xJA5BD|ltTeL^F0`wN%h%x2wU27(Kh2W^%apZ| zpdkJ1?thx2`CX#aMlC~=G61OU7=50ymQ3A#cUs~ndR8JP4CpFq65M2-J3H{j56#Je z^Od#X7{VkBVdRH;Tz+V@g8xv#O?!!h3mt~-T)KYsS3WfF3Y@B}wSoe`4_5Opb9gRy zQ&I>6N!^_rWQ71idYgDg5YHI?3TV+_RKebI6C1T6uvS?+8jqvvW&3C5M7~dwEGcMW zFr_qJBkbQ2mUz}YlpI8KcTe?LrsOu))>G}JCMdJ;6J;+%xfB+E7IV8uSvw97h2w=) zoiz{S#|y{}3iT$bQy1q}L0LPNYAxLkJ};g%kL`MPU7wk&P$+m9bi98EQXFj5d&J?w zKMeO9Mk7&evG5z=ZsvL|Y%t3;TDG;!R$Beu2g@`09uMi_Q<@RD8%8ekMh{@njqW@2 zX?MO%)@1aL)ttTgN^2U)W{c%%E&F!aT>N9e8TB+Lk0q8pLu=B2Awh$|@Tr?I{4sv) ze6S@vd6Lpf$lHik(Q+yueXq)IS`W7KE=dfrs4>qWY?RqDFnF=jN}l+cVDUWrr^({V zS8Ggk(cwnch)T&V1;07GYlR+F$`#5IT0AZz{BOs69s4;ctE3M?`z;3iWM;ycY z>*L5qSu9W|lveWOkUHVESU6_?R#3nXOl7Id1>rZyyKP1PjdH`|(8e|)HS&a1BqVRk zwy@;BmIR!4tz=cvc~|GM_=*T|H$J5TVe2PnYW49_rIid*SmKuN$g78FQMIpcE2Oqv zx_(R;{HA0IONp_VBgAigo{>rdv0W%rWK<=m7q=P;Di*qFXC>{9F>#80eb5i<(X7Z4 zXc7BlGx}RH`Ii$J$*QuZZC2w}WD#8Qz~vA9Eu5O_*ZW(tQgW5nHK0KDmgU;GDw^VE zZm5uLi&f=eI6P!83CO2^32Cu=0Qh{!&|(;3ut~p`Dx?y`1uVw`YZRHvsJJnrM^h{b z6S;z*7VR3El%Ay3GNi%6?O2x*Mb5xSVv9AAH4L}tsB1wQ3-YCtk~JG=vLdI0%b*r( zLII!^RdknnY60TV2VwA;+SCGi9$S}U>BB-&EwR7>36%NNOR#1DYVE1_)U5P>HNay{ z$5+)jbc=c_a@O~Lt4NV4j0vTz0ty*I~~Ovm~b%C^8*?i1%Al3g7|24CQ!g7V&l*iy3Yi-vf)3sV)-p z47Y^wTXoP9p{Q??_WUOsB1mX9z~KLj_-k>t&@2u#ylSY0|Mf*_7mLcbOvk0BQ0){b z{MMC)K)5f&AS;>(-(FWmXM$_A3yZ`XvwBL9Lk9X{QmVEsXQ85W2Y+a`)@77blIyN@ zK~G5Za||E)V+RjQoMdqt3@Ze-VzMQv$4o^b*@XesFwqjN$2&yLV^UMoG)iZIqEJB; zT9D;5mLgQbi_Of`^>WZ}AR%a*r#5_N<0e_6f*_hr7?WGDwlH_0WgwkmO$fDF5(E7| zn&Yvum_o~vz$J=8(PBy`*;!~AqUT^D;~J`?wm8>ZMWM*d~T)1*#kqS^r7SyR$FNapUk}=}kA=@-no!m>Ent*j%P4cDU0z=~f5ZmX!t656$f-Oyxl z1}{|Bk?B?pLcvFPzS&~pdoRhsM0K7Mv_3&8N$86=&GXo#8-wT;G+0@ORy)#k!Pd?9 z?XFc8BaJx9KjMyG=8t$B?d;`XSM9L{_}D#jhsDWi?yw|M{fSokkzl)hN`tbFu#DAs zG0pGs^UIYxEK>qOOi2zPW*^*PN$q+b<5pP;;KfVBdESaHz`~p2UGND#Y?vg@k-n9V ziQ}cMENZKze0HI-t_EBoMz*{X;0l4AX$JUFAFiBWO8}Pux1=%T<|*rzfMX8ExqhRC zgX?{Iqs193C8&UbejeWttjaoq!N&@=$t525LN$R3=WYi3Y`Z0n23-CBYQVtSV!)ah z$5drq6*!W){QgGX)(_fbai(KUDRn4buoZQTa7v@6ele*Z^rIgP9^X%74{wLco3Pyy zk(#HhBRoGmoVG$@0YBW*#k`A!ZQgEi&ID=wEt9Gju3BboXfhfMYy2}BGM%eFdse=vEs6EK=6hf(!I1TYgDZef*RvCu^u?6J8bO2v1Ns)!`#cl)K1cO>D8Xl`eLp?{+2nySm1rFS?$S zaPm=0_{=cnF0!JB3O28XMM*^yVlQA%XojE2{s7oRFS{#QWx*PbS~&F|X*@)bq?dr6 z5I9Gb0PqB?l@$9{p+Q7NW zT@+;|)g$FTp6XF`pQRMh+f-a9tw@)LrMm>D)uZAp!y@TRsg*fjuvGS#qpT;-eohN} z><@b6lp6quh2@{NBy@dZZ#j*5E?3q^fMPNz9zSh~ z?V92&C`bz#&Bp)UG9u8Utf%{-612I$w{UPCTYrzI)hX*K98v*_Cw^~9;%|LI&cRQJ z-m048bAqy-9K1Hn>Ay>-PtsRg!{@Dm?yvFIq*vxE>*@ZD0jm#75uRvrW#1gf+1ZV> z`41LUj)LYIC^QHF%Nd1d#ocI;_=sVa!2syUEU`g!p__rO{KIaqGJ51~i?bMG zp}Zp+ODxD2RMo}u?g4cyWWJGi3TeU}?rLcQ>ccF1+mbpLqayG)jcS0tQE7Z>>R}At z>Du?4rL3n^CZO%?{aN;d=i5+ouQpzOF$B0 zn-qV`d|A);Er8)D>sR7!2esG-e~*LC<)^?9-d3~vV7bD_auAngc6p~g4-F*IWJiD^(av89*<|nwy@{FuvqxgK=X-lXK1Ci zP`P`IUskI$;9Gs*9M#iA`ydHG02ch2C7>HF^HetatR;~~H?CuJT_2~_XD#6^7|PiH zS3`ldi=k+|^pJE)^-TBJJ%~g@%c~;9>vZLALS~>iN~f<|N>EeTjfN|A`iiztp9D+* z)LG5mnxfoI6;puvu-9oGnO6k|ET^JrOMAu;xrN~qL~m7%e1Y*qKjYe4WZWg+Im+FX zVn`ZHzb`B?)m&?oyp<5u#3aq_QJJUQJpo*xQroK`MKx4`f$LjjhrY11$3vS0+!(vz zOpSmmb-I)&1p-F43LwM);aTSD+i&=;IabFn=U8tS1LrAifi__sj&AFII2MD0a|bb%s%SqyT6^hQAw{4cUfZ=}k0!$(I~A2_6FK zdc-{XSCfLRpNI&ookv-=hXv^_DOUWGxJ)z&4;%Iy(k68mVkUKGQ6sE#N!|IDtsP+< z9OzcOw1dd$etfL8AKybp$_ucI=_pRsaSwqD?Ui;e{PW8fyM&`$Yw}K3ytFYeVUC&E zHC2FBO!S~4TNPLQ{8|M8%Tc8^C4)UR!WtMjOYzcvAYA(^Bdi=;`}Gl4XD}#8_Cev8 z&R!c~)d8v_{Q(itA$toX|+ZScoeq@^n+&0}7M?XolQ8E1>yhg!q*3Ec#3jmR^?X#2&)0n9F4u zPu1lsimWq(XDVLO`;ac-P*`EUHG(fSbRz;8ke;F~MKewDlFCO0)Zu)LpsNFmoxyK( z1KN86%gMKn3B(xMGt=|)tsLn7YS6Ne@~wl&!$kEmvOJEv2|@1)E>pau+92%Z`-a15 zO$p`}G^DqHh8-=jM)TjE03A^I)04IJ*T9A1gT&=)-CR%>4qP!kA(+9yzWRokbOX5RNP2@HqMgWd(mzXTX7!C=q zL(1kV8*nb6(1`zUbd@_^XPc{dm+JH^ydQO*tiN2Pl^_D`X55BY)mfmOdT zo)szv9z8<4goP&Du)BTOq{P%t*d+MI&A6@{p0NJ@!Lg8gti5T}RDhjE-Ts5FdvM_}|n;Vf~3RV_t0oE744qQK%eSclGTI(JmLaluM`>q~Wh z08L0|OYX6Tz?!|MpPyCSPhthXe0sVz!9GMXLNd>bhTn^Ci3h|2!$QLd;k@*g)GAd0 zj`SyCB?{!JEvrT-_ptaq*55#zy@vvoq|IL3XN}??^3>%Kc_V2lYUtcw&oWQBhl0GY z?!u;zb=QA$}As7uY9Uz3w1txEyt0KMxt<@?T z2l;;xD}>GI^aKC*gFIog@x6-~_gNF?6)X2p@OBW!rhe7JROqtm8lKku|Tx*t0sO}S?(JG9f9=A^>u zJ%o=0>2~oA@nLb2@DbTxD2HFeoR3=1!0g>P5WMLoc=QQtAO3yf1D2+tpu5JU1TM6_ z+PQSCJ#Tr~`U~2ti7e}JYdoxjjTDF=d*blpJbPmGqu&n0@_`tXiHsz z3xzZA+_3xE(Z{V;W_-fhlh2Go5ZI9@#-mA70kc6rWY+aOY2P7!r&5 zwbjC(b5gajyd$SSdOAuI49l^uN8Q@_?@KvGdH zxam+-OQW&YDH};~uK<_eQ&vuXZSg5<0`8=Z?aK9rQ@lIr)G5r{6lEhR*OdJA?kTH| z&O^T3tn{Q#$yp)d1c=-o6s$%Ol#Rk3U7S;UVL2 zdb*l`A)q{1eTESg6~+G$RMI#QrYW0T;0XgeJa8O(UoM2HRbIUqSg;>duga;oSp^hT z9DNmP64AL{bNYzq)gn02LU=H7rowym*fA4W*`KXLT8zr3-nbAt{WMS6MCuW)p75X> zB)YUMa?ZkefW%SF+T&qVX(HVdZW&jxXu7hA4nxQj{gZw8Lb!u}too31iRqn?b7jgV z(m}{9pY(StCu@Dx->pudP&dVbq8FZR!cZ#e^yCmf2g>2a$|llLaN~s=vF0@{RIDtd zIu1HO-+}*tFUVRMO{6X0f({?g?hLR-vbCRBIVF;^J|P=&5K59x|JXVjA^%PDd_!TgKelp0 z{#!qWf(imayOHdTNl&3C>p(-;}6NV96{ zGF(Si11mcR8xiyieMM3DQZ^F~8HJ3(58p^KEkPKB zcUG~Zfwl-%(akoUbcbKEA%V7W^tb2OvOt@fW7o`12il?$RNg!aPw0o2Jc1`wQ+j2t zhYws*Ph$!x!O@-Esda^0**pRqp;v_;ViWH*b3!Rs18q*E{%jr&nyFZMSCEa1uTj07Kpj}JQ#Y2yTnUX8S=7V$bZqqi-N)_xsZ*V~rR7k?|lWfd!ge=>eWc~ukn z2B@$jzNegkJ`Ld?k7rYQ+Xkl>Dq8~ZJTwi*S2L*cxeCYUzWe3gHiE-#xgErG#r}6Z z6mT-i?N1XSk6;iv-XU5S|}r~?QQ)E@5mX>++$2|&m&6J78+q;Zb2g-!$t ztlpi#J4c>Mz}{+9w$Og81;u*_wlqDr1a(lL=XSm&idbu!Eg#1J7E)Wu_+Ou9i{i^N zp~aytqkgGIWx}o^RTjI7{XNY#NDmhZZ;{!h@nbGhwvd~c&W+*ewt-W0xM!$)I&snL za9@!TGz9rVd>2ab9cT%1(2yzpMQXsUaEiGOn9|wQB8Wtpvek&k(c-!%R5ey0@d>!v z+F=N$R#&?T1dzvx#zOOgn6j-XfK6F!8y(sjplqE++J>#w;JlB;RM}G4g=(8|_>IN?k?B>}p7tx`2^cnQ zi3(P{&~}bmDpG*7)gm~5=HokgiLGbH*A345>FY?=bBS$oXzT6D))_Po3&x@TAcaL& z+j{Z=?Jq2`En$yV+lnL54IltLnuYJgU*elDO3Rt^=e8VpgSUs_(Xcnz@nbd}s3CF!rVmZa zM1QCby=sQC-3Bg{#vS!D8z+ss;Ac44C7YV!lI)2nnONnTI7rz}WhJHxY|TTq{zyLC z?f^f^K)LgNn~vJcG%5%sMx_x-jLPmCRYWm!;i+AFln>)K=p0$V!XL8D4i$t&%JyEM zhkg_>ot^%LjpHvadq}m#wnzGC=uJ4b*i)cL%~!S)1V0+$I&~saM(eOsxUFc|&||g; zq-Sjp2PqaWVhVfo81Lx1=a{P3Qzh|>g7_gir{@Y64aZ>mi74P4%bZW!{u+#_r|pNS zkJ!X6KG{o$_l?rb0HZ)5P>u2gKC}yI35!qKIQfHjp0u^n)c0bc&)S?llVzlH4JaRmygX`+!TtR(5!8pFuy7PqDI{0&R4lZD9@1**Ha^#pfUe zpqcKYVV>t~wyxza-%sH`Hg!ToDVE1CVzwg-?lv4bQR zmp6O(uQpEF#HQCUVo*f*DIR@|NAW2rx?83cnG!K-odgaEb&Te#_RMzpez|$I+OXuFcQ_7s|#2 zmxx!{(YN#{wZsRWR`Ai-Vr9w>%F%!x#-{((7R|S!eBc`3wzT!FLd0^!kq-+}5P;>6 z2!{>3#O>m8G&P}BJ;kEV+FI$oEB){N$a$Nt%0X&ve|Ri4r{XMS2l*+<0$ua5jRU4U z@v#jJsz#`}2_rp`);zSW^tgw)#dX4q=*8f3#N=}kiuQvT0KzmuLtnCDUH z7f8aoSK2S_G|WTsxAkaz`S3(rUn;$TKY?GhUB68%5pHk0Zub4l1@P~vw(BGCuS;#$ zhu~kM+pbUZ{c93FzVWV2l>RRC@viOT`FKz7^p8Th~h^YM|@c0CIp7)%N% zFi;eS3mDmU9qm^GMyTTr7~Xb00RI}+b`4AeGTW}91a&}0+cn~u-gXUTR|3-7uFVAb zmu=Sy@UPUiYh&<{($;bfS)c*QZP!p{KOm{?S_FRQi?(aHMgtPtu64&pLfh3l@iDaR zD!gR@L)xw`#z%bH)p__B+;$aH5-_Ok>STNjY`dBR^3U6@0yz~hpzUfBKH}Q066@Hu zt6&|_zwK&I{L00)E13Ae3-~~$X+XcWD~MeM^liIRfsa0IS7za(!Mkn(KI*;eGV$T@ zt{aMvTJJiV#2W896X>sd*P+N)K($wC#K#h^LPM+aDs%9$*sGM_qtdJ7;$x9l8HJC9 zUL_hIrQTMoYe0#&H3`EADE79}lookgBf<2tw-vktCVN{0@KNYpOH*3lT}zM1_pYT! zB*F3L0A0KnQ zG6~BZuRIYSv%NBnqRcBN;y1tZ$|QQTyfRJxOs{Oj#|*Db>pI=rin&h-nC5M*!9S;Z zTcK_Se(P;5#=oX`TPK8|TTX!R3qkyaNM%2N0axN+6z`rQoTgSyeObX3TOWwB@E&%5 zsV8y@HQctb1-IMdki)l=4(Up4>LUhwavIn1Ldm#DdQV3MpAJ<(eM0aeWv5@Ai_BvQ zF@3{Ww>RxZ{_R2V8+hO{QKPSeC7Aj3yvW=RX8e?VKe95j)8UVI&&IpY^h6f3wURvz zg`aj(2pQE6eBW^N$TG=J6%%&$_R+94lATjA;TfX9JJ8Kb{=W|-JLeg_3_c3Fd5L1Q zfk$yCC=f9kkJELpAbukJPrOIi3*=szp}V+D`XvhYSFor^`zmCx@1z87cnu)G5{Ga8FZq)`25+z1ZkSw!5z0fzj;v=t~jdn zRMHGMv&*FHT!!U|5hC{%xEH!B-Al{ejrfvkm*7j*@#QRKrw7layLDukopZO=h1s3# z?J)ZYl6^v5#dsq3v7_~U2eMgF_Mo(UWheQbVlXZHIv&BZU|DgL-AS|r$S2x8w?O+a zXoE|Xos`!Y58B;q^wPeZx=|s~cEW=1Yy?d#Xm%C!FNj4=w=qaM*I8IhHMfzqm9BMC zLMo^t07=D8o>T;*Yjab3YBD>75zPvbu0!w&1?lHfv6L!>i@y=8#bDtPp%AL_=v|X{ zO~%=U+ij9Ue?z0A$g>6R6$sd(XU7lcxJ=na;bJIxk>4?Qmc1AM*dVNfin`IF_P}S3 zpU<~!TZWyJq)?NAO$VCUJ{q^l%rrNmbh|K<4I5{l8i?TuzTvT~arU8Io2sqjd{aD<1?Ac^ ziI#%Icr|9swGY*^CkO?ej^;ZWPXV}4fR`r7#j^A4eb~NSd!RmMNZ9J!$p_3R%1g|m zi5bU>9GQo82Mxuj={2(QxKjWM_GhqJ&FmMYBy@1_a_r={2c=Ip^Eo4X#jj zPXNbKjAAZJoNeb=;4jXGEJ?G}yx3AtuX$=cICL?XR9nxUFSlm_x44@if8fW4&bANe zdXcKZjs1JJeFRie!GW_a%hRi(zyrT?Obp70)l`%zy9>ZA3#04weYpn}=uj29yh(5O zT3@-uH0VYe*{V`@6TBaSDzcLc?D70ykuM`2v0!aRe5JCR^4_N64v#3e59F&>1lI$+ zG!b|`4Ge0EvYQ~Eg!)@uZr6qSqw5G5HLdg4=SGFH{fhW2afaZ*R?kKyjt8ZD;brFf zAa*iR>X3oPC}cwOdXzoa-x|)g*4uR?nfOw`(Ux2rd@NE}4=@{maVIp`t^9pXAxCJw z8L6H2d90Ae>g(-EG`JxD;Evqt;1FxY;55Fq8ifUdnHz(9vEI&!v4k}E4vl_n&@y`r zP)Ce{fQXH-gk^S)zh~|;C>N6yW>l}}UO!XIZ#LJ~axqnYM?N9rGCLLT2QzBM6y4J6 zex1yUJhgsqWLzLfr~wq@D~y70aNhR1ub>%9>jF0Vb6?qEPXefxxj{c1W16**r<`oqXde?NB-yfpkxY)!1P)Qh_*%W(()U1Bhhr7iC~-o|3Yl zmp;i{iz7x*V(#pp+cOqUQ}!g{v8kS*@-=lz`Q(O=kI{3WKKJ%pIGCcce9S^V z@5hm_ryhcq2EvqEC5)lza4UO~Ku7_!xyS7N_>w{Rccc*|rfXZ%Q&o`wVV@ve5HE>G zgng)CJ4X7u)F^fn?q{xb#tf2-8K>=I=9egY2^j_|3$)CvLJ+L4{nra&sd!jb8@1D1ZqjKV2y7h`NEcF|XBf0Rm5CzcC zeV|C9be8~eq98sfPK1Mc z2%OOKq&`6Cr3i7tcKql6vq;%XFgmJQ(DQYkx|sJm4z-1^*{8u3FGjOxU$akiO;z@e z1Oo)`qE1oePU_uSrtGC10_`U1G4|LQyM=kq*aN#B^~N)J&)Le}WR=jsPMqOg5&t}c z(e!)6zAGeD*_%#SnwVBY)RU~>P25qRykQ^2*8_bmmJ$;(J2hFVQ1;R>Ln?IMoAv?x z^CcC#6#pfqYSaC|h0YgniF%yI#8K=&dea_dyiE!bu%Fi(;*p?KD~0@6*^gl~Q=|Pe zRr?xmrVhVmj~D?N$^r$Q22ZQo4waS{x(GVib(JU;c7FCXtj;aV3WD?P!ofVR^PFq@ zU$>8rwR)F(Ymg& z=_Vei&gH3C*##JRuU)XK?E=zS#@F^_WX10zukm<{a^%blF%U~a6y!%Hih@geC{PQ>1&e!?LHLLGl30nq zY!j0W8PfZbEc{#8hCDx89GejANJTyFeN|wcjY*wZTH$t0L7$t7MtHx_?1qZ=PjOe( z^Pxzp!mr+wLs9Wb+u#R_Mye<++O*PfF2HpbA`1(P<}0nx^?7LO;Xp}llfXRVhpeu`o(_(?Yimyj`Fe68c?SjIQ}J&| z_&aEL!Z2O>4lV3*(Z|}MpwGvCx)LI=Cij*uZmg*0_c3BcE(hI<`$=8mWkP8ltCO7~>7JWbaC%)-=C(Vz=41$Kzf(Uk& z80+A`&O-eZ>AETC8C95R(i?7Nc{SdGRA4tXH$aFO4GSIt;NOYI#4@2#t;l)1^td!f z3Sf~bj%o8IEBon8Kp-XhR63UH{isX8w1Sq7(OaZd zXI8E7r;b45M219Cb8$%Io24E|BOP2Mjc>BzGzSN=H8>5j1R6S~K*J`dIc$9WknB$! zb{Xl~Om=XgV~U>qy82}P2J_jm#7A@7K@6(Fhs5BupC$%aBZxsFdnDZvi16HgI`xR% zt3Qn$?n1EBOgLE5JxeTK;j#Q)cIm-%>~3G`{wIQ3P~lCf9*O%;iB)0=a2TIZE$dNi z)(D4#EV?aN*M6Spi!7#}HI98S&eDxd9_cWVcY81WNQk~rT95MDjqwFgppx3Z_C%l8 ze!aNKq8y+@3%~!l<_F1z$^lACL7XxAqUL*klG@=Bjzn}FI6w|SqW<3FI6lB@BOKJT z-~jmmZ=D*?b^^D4fc(ul5ZS7cJpJMDNFN26!|fFO8=XWP*oWlgR1Nk4&m{wyxI~QN zJ-2ui4tKY5fXw4O%+gu*I+x~Q(7>^BfXrjiuvbSp`W14O8*;coch5*k*0}#e#5x!b zXDMC(9k|;bFyu&QrEQXjh0S*SIcSY?U>@0+20Y}k8IJ6(@0{wH4rerAk5s6)*y9>m z+SKS?zM!J9ahh_#jqfsBT%%abDT|f8GS6`v-%zD$HyCi5wujk5}<&lhq3E%ZJGhy0AfFgO`Pk9>Op_QXwp4w++0U*_}dTA@lXEt({mjhfBV6?n0Zhv z)J<^?6g|q61Lb(+*cN7*=g^VlOK(mUZM2!xn8XFXNzCe)!~*WB6Du%F)A~3=#6&Fm zR6%$F7}=?mo*{iM?U4qvuoaGxaOoZ#g4crz=vv1Ld~ZblZsKy+ zO}J!pxwL`{%+Jw4lc2|;5hZYsiDS{@kcz3_Em<%SLZ^j6yZrgRAj`SUln7DHTnPDETqn(^#{R@1}iZyMv%U2Uq#Y&)gEZ ze-Ejtn`o`6aXEnH9e$QC@mPLOm&n@TKs#vV;7ULJi#+;HRlXU$5iGnKSa=Upb-7c* z!y-e~%!y)?^r^IwIq!FD2g>;nS$IHo#ULN$_1H-M(h^b}2OQ!*8ZXjZW3W1+s?z8HpU_L*%X_6kEqZ9Qo5`tnr0YYCv8Xsb; z-amx~1@oVBnEAp>VQxyzPu8Y6fZ4JiGUMOR#0&|8V5ZsdAxQrUz-BW%Z`dK8GGrLS zrRSuh5{o%$i)9HZHk85c_`f6OjCs?QLu>GKC^0c(r`9x8)lyrV?8b8V_Rz_^R(C=r z`Gl}4+FW|fS2C^2P&l>^6LyF^Re2{JoRp>ICmk8ME)Ns73ztjG_#4AQVL=os&^0Rd zpOcQvV!Rw7yXfV{b#S=_AGvz6`Woz^EOT-?`@dg1mIE%33TMN5gYZ|lOq<2IfG8CS z>!q(%*Hz>@jwN#nl*44hA!R=1ep~^yOMReC-j(Qo9N}#eQxmkkt!F8RDOyfP(;*f! zEiP=7E?(rcKu%#orWPs*Xzc(t>}^NC7>jav5w>(cA?B!hQK4V}U>0abbl4xxXIXDM zbbtb=JPB<|l(OsCl;A?jE@BfghgtU94qZqaHK!hYG~N-2(E!%(Jx9NmV&$;k2N3h% z^eNe{DW2v=HG)>fydEKj>bITTPojF{II}~#oe$pame?= z1&7~r5WMm*c>##W&${MuGZtsTA{%cxMLA3!szh+P&o>5&4nm2bzSP_|WUcQzoTI>l zJV(Ui-k-qZRqz0^yb$O1+k)`6_$Vy9eP{suALQkvikavJdmnRcw4;9Umkw`mqjF>b z9#)Hoz01UljxhGf1)j6;oeNOZA#v30s@fCto=O*)@&7RQ-hok-S^xOGcS1=>AV`}& zlO9N&^gt*{2P-MVg*Hz zYWaQ6oq^ma=DGNN|M}V+@m5ld4rKgni1EogQKf zMHT#v1@h`)cwQr(=c8kJ-}CgY`FI|3Mg)p;n(PVt@1%}|LbqF9O#(1fi?ILt27c_+ zkPs~@LCdKjtAktQ)uc?gKz`6i?l?V!({XFcY3P45<<+Fpl!Fg?PY;PM=3Y$H3=tPb zmLo$Y$cCU>uD@OSYTXR!OJsbouo;8%)vR4%@~f{%fh~MBX$)kR{_sbhVASW7Pv6aA z^(Wy*nJBL&3oTiJuRO_H*jr8x$wRT4)g(cAaPz)@X<%(Umtwv!Oucv+%RKbUWSBHbRhOqQBs1A`g`C3wTjS+Y?- zkZ)oo6dIG7UsuboP;a0lZ+Kary8-^;j+S=1w{e2Cb?a4Ps|b|+WYqVewWE%gSi4ZH zUH4lm*Q7V}0Rd%|jP!<=uz#8KW`2ueT5br)S!($>L>!9^wL%b1K{4$RRzNK+kPb_? zishn?g38eCfz687$G|SIj!wyhWxDVctRhw);pLkalN#0iBa-w6Xyofi<%#o# zuf$q(*lQ6lh+;}wyZE8|6c!{iMQw(p0QVr_B|+>ZA=*fIN%y>Xhi-~45Y-=Rh0mZ8 zRbjsTe^~q&{R(uJT1VTN`d;PhHT1pmIoDC;RHf|I%j<}DWqQN6k42QDy#oJ(`cPLQ zbR8Cqj&AF(tIDs#Vad+t==%jAW*~`GQv+fAQM>-#`MTNU!$;gqGQtCa!eDj&*jg5{WQ zpULxW1%duWaW~sjx#lwEuq#Is#a&d3g59OC+iSviav}TuR_+{= zuh(Z`YY=OU@rLi{oMa8`f<2P2H`qgTLtuLQhakN!&5mXjtYcG zW}m26sxuyBb0_MRq=&EZv>`%7Y>{iRt3ZBrBK^}F5l{cr76e4c813v+l2sBofX4fP zhII!N*qMh`I#F*(23ft2Y-o36om49)>WB83A-`G+s&a2c3|sr@6&ed}p$x7=o$3#i z8Xroug3|r1R6R*=fN|;7YOt#j%XAS@Z0-G)fnE&@rEDF#Vqu*?u(3Lgp;CU8>Ltc` zBO;5Otqal3O$o))3hGE=rzYvIAfrYiGfmeILp#`4sZqDX%k0zj9BH<6y5102Ex$_U z_9S%no~|Dt0WuNt$I%W zAyGiITpxsiL$uu8sztP<9%D4uS*p1PMxcTbF_rCY)eqDneOwZSY_n=qccI>*!f3(vm}(l6+8d~|nS4qZPmf@PqKXpUG_R!~^UmX)I9aB^Q` z09$pVK9u;x3ikAk`pk?{d3_#z(d+x7ulF|JJaOBNzQIvGHeTx9&cX5b!lfn|?>X8B zbx$W0e|}JY)d~)CMi94(fx6KzKC*Z*hUmGXLW;=s}tv8UV(S*gnH zT)NbWlGE@?;(g>x&YJ6X&9RrG1hWPkROJJ>7eEj5KIqwk2lRvZN+jv?n5YzW92_tN-x%J# z%rPi)uYzPJ9?;voHS+pvf#>i>>??OSd9a$fZS4?#%bYD5P24`Q8o`sQ)dcD_KGeP4 zqn7?*=Kz95R5X$zJ5@mHgb*k^i3XJ7o8m&@NxB3P82K<-`yCh7GP~Y1l1+YAUmjQ? zZy=sE)XO$KujeG=EO=6Hs49{-5NEPo6WOm~Tp5hgZjIfXuxYSy($ZD?Mv4`ZS;3R~ z_-qV=Sk+K(WdDn(n$&$pgBmnN-jIVc0TWeZ=tX+wxG#Lrm0b2qlSi@<%2agDA9l0} z;~CK$IfU@4J0P&TT4y?EHKH5thJ5;!mpRtxIW+>DYrwH4$s35u%6Fq>rUV z(g0?CUB4@ElKdJaiH`QN7dGi_1)A138vz_@3kgyc$eQc$M7pXxja#2$+qUb6!}9%F ze~ccMZ~w>5$n%C^G@H`6_%UY-Ht91_&PV727NP#EuiCg)NuSgQ{1@s2 z`(>Lxctn-_+F*(KsVerK^x8#E)cOy1Cp@kMzfbE{mfbC5J|AM0%8w-!i# zMQ@0}3K~J2-5fctsxa4nu}piNXS}?jm44%8O&j%`h~@`3D(cOK1t5TWvtgrt2!HJ; zF9kawS?$}!yUh2!%h=0#7v&BkMHv@kvX8T|mVfDcdV%Nh;pP7+JUHo+)ptMeT6}nU zTJU;btOP@o4L|5WpR)Fn_yp1{=j#53-2IQG4phZ`00pSbk(4_$_CtN-gcA9+Iy@)L z8~J2yVt!(7VohRgq9#s7e2QF)>Z()NfYm_D^|CkK)!VgL&a-G`va(cmOi3r?v*>sA zqth`qvIt;of73oTR`D*j2nIrC01RY422#)EW)zzTZkDCyX4tVqfPu^ExmrZojzjI> zS&+IW$gh!djf*PyBi==o^AW}}Q+|!iF;F_DeWZ`&-%v`iSt_}xx}ktU+IY1$@)0itmzSoB$g=!)+R z*%Rm;sbN)>ob=@EE}L|UypcFjfj9CPTl=k+ZAywH4n0!aI`3pD1D$xLf2$vZE;bv@ z7#7{m-`BRor{Yt*G~5Dg<+m_?V>~1j6?oa2Z}s8)LqmmMu`Y<6>>LgDY9br{gMJvg zDs2o08brQRzSzHVVq{T9)ehAF%&HZ&&Eq-XHV> zTez!6W58^8sW@6GZ=@7Q1n@sPmw6SG%Wmi9H21&^nebohNUcO26~6 zpF{)46E#{gR6z3CI2i;9-l(LmucSdf+$b3gu!L=6_mSiAJ!QRh|`>fU4}Z6J;gPsBKa5H zaO8j9CH{{zmKpViJD>z@qO&>L8`Z(~3^Z8yW-)SnAu1?K-S_|~HU)+48ffUg+S;l? z216gIj}m-4x;d(yo*Kt0jfO!q7CPq`i}GprIvnAU=_;G`GaAxS?`9L3I&9vkt0v@6 zuvfTY0^rS%GU;@2V z)a_;fM(N1}wy+ayBA1a882A>zy6~-ZAw*a%2#3Y<;@{EaZn;>XdqlTfXMr{Uxbz=s z1q+Wi%d>YO*_y znnQNGBo`XrkXa0f4mN41AtY2vA`Md<1Gqs14Tr^v(1SHPL+l8iH7t(Q{_#F;}hX$52Pg;$SRTy!QC5L zo3WB$D(PS<*9*da2wY2q>vhlT#)|of%6W_##~9{LDVH}RRb7l)CKlw*fqe!%y;Z|& z_|GF5L{n0`gw{-xH$!j}v4Qj0f{_MJVZ!o}24i2ToDA>cNY7X#gSyzqd4>#>YT67T zKqU2cVvfPWx6P6S41*(@WU6dXZSrQw0^)*YVm=LK0Na>jh~S4e`)XUJI2`K3giTP- zs`Cu_blp$Kc%wYUx$agwW-!V(gC+D&s&AmFD9qA4gAsj`HiHGx^eb4Ji8q57CBZj? zSBS`kVa9wzTr-zRpe_#?Asp%I+HV*F${WxS#$C=1fcIM2UUX+|rhu96`ym>k>Ex=q3 z`|%R=lUV!*XfYT4&i)Nc!d+TcmRh(&o6Tf4xylfqQY3E%Ymp29z7d0UY3Nhotuh#i zj*{Al?gou?n?Vmf`Nj>ij%^Q!sFkaqF z3C9T4X1C$r-E)R@_y&yeoBi>{!iwDXCTB}Kf?Uz1tirie+jUH`1w4$&8R~YsKn0(o zcw^y~Zc!U95rnHO(j{TBk0|n*_R-Ckw~yFE6O?^A5&LwtAbu+bpqA-salY;)T|G)1 zKERA~4L71z#g*x?r+v8x65gNVmlJAKCTS+-NoS%xnXt=xzb`l5qNk zx76^w0ke@VgAw)Lg(=v<+0DXUwBoq0GRpo#O*u!uWav#VVvD z@-9=|32L0YWfNZ2HZ`^4p9I=TsN(%q{Y zjl8S}k%apzMK|7SN?{`w8zn5Q9`P!d9xj*mLK*O64uYDs0QdI59BK-BQ@$ zv1g|9-ke>#*g#FEw-7@Bw-$SYv_UgveYw1a&OFjL#9p9uLg$2|kXwMk&qS!m3V4&c z$O<-N7}}{BEJzjDLOBdb6%a$=>!-XBa9?V4YA-J4zSqWU3`Vpt-9i})m=m#I9_oPD zC%9aE^Z0|;g7a3(TOd7B6$P;`=9#Ks+!k^@{R{3gomnHvlS_!_oSh!cp1T@JBw2oS4_6-r4~n=*k%@lU`T zss(St1z*EOKnDS;9Af|sz>I`pMq=|ko|#KDMdq?=Z^V+-$Xj)wg|NULz0tt2M7<3P zI6JK1nM$GJe~48mRQ$LYt1Hs=g)eI&Ge2plMH|+wl*l(4<9UF>h3B~&J38!>JRNOL z_i)$;W@&M;UF0F~YG-DsTXo}g+x)M~06)LUOyoQ+El$G?}blakW1lN~AS!KV#l zT{w-DM=Fg9 z(_waUx+;C7TzyCTLbeoZb`w1IB0kL}>MaaX31J zD;D--=)~W7x>sKjA3RfjeHb2Aj)%R&_AU$^%*g~;sYhtTkg-n1~rervJ<$X#N0L*5s+&YQMOp~=D1JT?_E$*gIZ+V=x8HPR5?1d^ZTnQq|bjL~8%*(KfZ@Ljk);&Qxc?EED86(y3HbFAU-A0YiTG z2BgYQ6u-wCl!R7@Aylwye;#PjmV-kwDJBbfqpGD{B)>tmLl)ubJ3cXtXylqQ$&d$I zi6dKW%EY8l8Y@jo*;vFU%!OLa^^~${|1q?~e)fjHjt=|yKL(?gHkV3VLvmW0D(E6a zG$Q!!B|&&eT!&KQ?V=Tl+a=OD>1nB6{Ng^V@qSpEwuNGhWNCW%CoPtybZjn|*&ONW z3KQZ7LO_kYjrJ_0XX)vJw)tecSBmFTHKR+jxZf}r3hg(O1ux5?66kI6wgKQ)BL(Rx zHsdFQp4I+QGW{=6{n;t*KWT}UP0qz`zPiYg6OCk^+)ft{Q5IbmC2iko_Ma4EIT}Q79|H`WG+jMglgVokZAryh zn!oNKZ)<#BydHWAxOGlef156RvUH zO@*GOIT~3brO2eDWUKoCIOXls=#doL-8sf6EhREYPQ~t33#zDsL^sJGkM70`!(oH+ zjA_Xj=mP&hFaD;x?Z%pNj7FlG@29%q0$#UN&w`4UDUTWQjLB3`6>etKTGibO@(Ou7 z*#vM{m4D8Gu3@j7uQ7p^Ha@})9hn(jEU?=b0udLSZY7P+UWh2t+4kBdrxK9D=TQ{u z2gwYRs5(&9@^-Qj5$cLdpmsL_%1x!j4-zOdT)UVk zvUt%%-AuM}We_ph++cp?>16IeSc(IMqB}WF2nq}a39AIOOx-PBBdpT>T{nw@K*fpD zbTLiri;z0B4fg+G33Wy{Oy+NrfK0RSR*}oO5J70DMLv7ByCp``E~f+^ELb*f?9Or2 z$!`+ZK(c~vTaj~#vjbUHc3;R~aYGkV{J=|P4l!G`(KrYy_8{M`deb+sJZEbwYZ-5h z!pyx%GCIwi>UXXt%_FAG&?VIgi0OXB?VV5i1H?Y+rlEVQd}m=4iyChn?yZ&IBxVl> zh;Db0tEq|VDYUmQxeV95uZA{OR$W6I4vX6vYT%z43Xp|GEhWRDvZ$5HZ&FbT=mEMNMMz!nwA!;WHO;yb?2lQ`^rgWK zZ)vBtOC|D~bTQE-@ph351`iis?qm;6Af}C790X?`Y#mE<(b9hD73pdSY=05UgxJi4POWx2#Y*3DjcroW9{_x_*&wttFIsRsQDzLDh7eT#22Em`F8 zfVC_@Qk4s%n?}T5-LWDMZrofnvDYRRQ-U5%o_Yz(wAa=Pr?Qoe+eseM@qanZv)i*t6W z>U>O)-=h7Da~4p@oR8SLcYLw_OTas%0HKgoFE$RN8?}&m7aIq$^2NqPbfkHU4jY8` zfFd?=u`z zj}&$OAy7%eBGig*QRn_qBnrVoJ?Nk_T-*0q>5=)3fwom_PCAWm#OTSyu*b7so-&RYho2C+Dh+B5_;)F^WZJhdm%GQxZ z-hhuTeB7O0!R${P4M`v(-y(=EVs%S2-A`2FBl=MDlMod0b}^;^;#|N7plX|&hYT3r znPZ2ZHkOR8m)|Y~De~6>-h+e-$&IR8j)j4AiL7Ia1_eVGtmoVcd%k7{`sqzj=&n5<9*}!8U)f;?!$HB_B7!!gjV30C(Fb;rK^1aJj|k@6YUIc% zIa~3H6XYF(d^BwOR-S@;8z_*II1fhqJ%VT!zZ4%3_UK;J6-(#D4&+B{kvf=lkMZx` zB6$aS`Vr#WV?w#Jq4^IZjxYKU{r99V$RW+4y5CCV9kiXHP4uV(mU|Z8SS2>I1Me77 zvNc0VjkkDujAt+GGe*IDwWHLJHC`i@4~i&D{FL>VMM>;rG#kFpI0CoJj#^;gcIh## z+&On1ytUkgoxaallU6G4s8k-V>v1IrovqG!+_Si9KkoDfc}E2ZNqCCfZ;a#Xhm-;Z z`8PRB-FqFYN$~}=niDT`HA$9EyQpi1K{+H9uaB@n(0!qMNLPvqAIctGAW1*>FFp)7bz>x3xwMH&)7Rnbmm@(z-2p%?eKuG~3) z{*naE!KkS4s<3+$FYh!y0S|__WChTx9gulHQlzsTWRrt**5g`*R#VWOpCu{fVjT{o zL3EC$P~JhN;~{vvYZSn4&#{i$+V%R_maG2rWeGA6`#C)y~el)FZE zdS+TOi}=}?Kx}dXE0;_qh4{${p~vB=liwlv9T#>_9mbE*htWGAys2?X2S2{)plG5? z{~h8Tbm^~_P*=CRfw2n|#2kp?7%2GSiLa1+T6UL0@^~&W2|~%yne?9Nos7JznEs41L30;TW*ExWqD*p>25 zibEI)lvhJdoNCG6hGGQRA~`H)uqg|5U3QXfhG=sKo2+~j8bv&k>jh_}b2kGe(}&V? z6#Hhd$;^KfN@&I=&Q4P$DKr2l!#|p@Fq-ann{f#CXN$Zu9TYB%f8-ET3cq2zQd=Eb zcSe_n@tBYx;S)jklr9^Bc9YbH3>jjA*hBc_u3SA!Gn-;*(h#CxHbwe=y4h@s_WksC zvnh_gvJ@7Cof9ycsAamI(<}8+BrOMaIcPa*-;Y!ZHGU6NG6dG{7QJE< zBD(h=D|MQ#KT6YWn*iHQy@qWF6s!-PgSvlRxKo@e>l{ye`1*fS4 z(Te2Vy#NLUqgNn-HF5nhUjJr=%a1l|hU%yStfwEWw>Gdp#=;h&T$FNocRxTve(cr1 zYDp_1cf7MTWIidl^uq8dK!D6txfC#cef`rH>OCg(VIPfz7v~ME z7}KU^hp2}XBs@Uz=-rfS{IDuy{c;> z<=s?etWfARo;e@wZ-KVEn>Ys;0Deo)(^e_r;?p4B;AtwqJzjt~3cWxT_XXVQxbAf` zOhzhaPx%&wo?a7`0kY8zCOfKl?54ZE5TL$~`EIPbIi@_KqwARH>J>OX-OqDyoq~=o zV9+spgNbAABMPMI?j~kWuU&gNJApmiU@}@lq!5@X&;{@-@eTN&J8z{*_NwKe+i?NA$on&mwttj_}2i$1XXuQzeZxNf{2E7&0KAw8oWlXU2M6Q`4fO*Wa*%j7-D zps-;+{$4u^vgk}#2lpT|muyOfN3RZw(>;PHil@a}gnJPA7cXs-?nI?enb|iDv5<>+ zNdIz(R&HYVm`a`DvT9%N4WDrQ9)`~0Ty>yX5e(oJu>u#b*fC6U& z|2p#@UJ5Trb)+Chq;Kc0kV+8uIr1TsgN911l!n^p|6-_gfyV$W$UoHD4pgqx=0c`g ztYq6m_dIssAyW|TwsEZDF;hw?{X}=Br*}V!f2w6AkC`%%Hnf+nDmZ0(_fy7Rs=cfQ zMLpmz{pp+*08;8J0rph@qcj0B>*Lsqm`S?-Fq16zaZ@5+>ms`}{$jONLkJP);x!aTd$PqZnyyHl2qZ}5y(iMZ zicp%5zw)dZnCycWO*RS+q@uIw3wom&<6a61hAh#0x-Y_pT>N#OW>}gQE#aef+527N zqYCA{6d?>VTkmPL3skbVx7(Bz3PYe+uuOF}46rCrhp?u0!TK{$-n|sJLs(NT4~r}Y znd(d$><}vNh8;5bGIj`?_Nqxg542R-4YXHY2JKAGVu(3pV#V%KSy)5F1z?#?0&+68 z3Qbb7xD%DHdQ10+g75;fFCS=SS?`!)2jg3ml$+}5T`TXS>k1lf@26P*)~G?&{7 zRJ7uK@je<>wbR6DVDiabS)%jxX71ExSo^!q4xf#44ODLCcKskI0!l?A)N;pzR~ zI%fl#aXOpr6HtVzovLQm$@{3R0}Qvm-+H_LTGLBVmpW*DDOqVM-DRS@uK~c>06u*2 zu`p*RTzvE;u^qqFC zsM8kbYaDvXN%-v?z@vvbK)sR_)f~)__Y*%Vgn;?+NuG+(|3{Ol4?2R8sABL04r954 zLL*l>!veg7s#-Q|7IYxkPke$#IqWh=iOts)4_Krt{2^A+@B6hXHzd6>E;WFuqTMk# zO4!Zy1SZ$HTASTdI@*3>l{njh3Cat!K<#POP}#KVyvgXjQr=H&b0nzaLG4sxSjT$WIvPE0 zd!=V-M>9VQUYT28RRH8Cr~^zw#71o0y@F^(Aj<>7URcB?pk4BPQUNN6?-XtnSXi)m zEev7%;g}@*MqrCl#=DaY-6i6QQ$|@HZwlHOT+ZF`25m=48Ox{nP zGiZGmK0yf>9#>$~`B@pIW;Z68`#tZGJ zE0`yJC|xV*(KHCs+r5KFu_=*eJ>m!6Ex=RZ>koXbzI7&Qx987wHqS>@CEg4x+e|5I zLbIjrz*-}}OVNIa91dJh8ee@&y9c=;)ZOd1+Is)r*HTIhGsB}O2w7}?j5*btjS*5v z;-4QO6+y%Z)g28m!hHV-H*`P3iUq$Lq5s8wV##l-;8Q`u(glHA>Jh==u_KDU&I2=r z{4T``mEs}_j5bGgFPh~>n@uPJ@Gf~tpxFg(uCL9t7teCR?*^a65<4QM$K`8U97;^1 zS5Hq@N%eE&cZ+~ri_^5JzO|zbF}RbQ2zp6sC*voSJ6DuW?zn}CwMPm9yUD}-&j9lCau%?vC698bsEiN-!yx-y=TmNxHY8HgqH?peX=D{@k(mOmzT6h5TM$U_n3#k|wyxNMWZm+3p~F_-c}@A8sZa@Oxx+B63k9c_%fq zjxbwM`|dq56+z1l{1p)Ks8QMGvO`E2+v?vD}hB)kekEhYib%ZGkLed!J>!YN`^ot3~z$BhR zm?Jotvo96aMW7H;0ICZ6sg~a(c7hnypy3LrV(W1>JG&+TUNZl0ZIRg+3;<#w1dz?D zTkV{{*z=$vV-xY&{+^(`Ny^Go5O#Az;#m1T^7Zrwmj4&s?R)>$B{zFoGQ8}aGc`?q zk325<*s!@&`3yX=+|z=*q;~X&7;b0H6=qKD=vynyCM4OvR{@x6$N+0A%$$mP-&8ODjOt^)J~A|A-mD zj?OWMbbo<_G~k6nNQN^Ivg8JHIA7DCXdPtFBqPqIbG@d^2PXri5RX5?ZqG7U_&%i9 z8q9e}3_3UobTApSp)<@HvcY_@LiBW%c>^e9I|WMAVHP*T9NGPQzcvH!-6|g>%WX5B zd~k+2qkD>BPMniw`5^h%;AV+B$igB*le(w53p6uAgr!)y7>J=#Kk@HEjP5CMGU5uK z!h+JDrM~|YD&>P@pNRqVx4G0zTd6p&!AHv8c9E?10Q>oc;ucECGG_NNhe%cCwcry8DRj(KcwyL^z$)(bF_uR80f^QVVYIEW0; z;Z#-)EZP}>{r~2y6{)5YQ%)8`n)0KUJ>_f}c2jr=+INQtPYA+U6zu3DZWP;uCv^9V z)w;R53{;{!CjEuk%R)2Rq~+!^T$6|B^1ziAU6Y46_~wpwdl{}CjoJ%Yy-AEhE74A7 zQY0TD?FI5(bb0P#R}(s7AkF8JoH#*U(uQPhDg=?Pj>AKZ8FK6!Jkiy8EaN6~IE0}? zB>ob7bzWj+VxG3Jbs8$|@N{*lAz+d6Mp#uEvDnksnU%^}6It<%=6s5+orwX~3egiO zs%R<7@gJf~3!yF1laPu(6O{we%;OKI;6f3e1vi@Cz=d~+gaN85a1GKfElABxu@q4ynp{2U9jUy&L-UOr5cEwrKNyI5tbLGQfea;R6s zSFs2&%4!M7Bp;^eopd4k?mQGhK>0o@Fp-DC&k3joFdL5{5ttrxr}7y73BBZFfD_=y zxkJIxa*r$aON3ObPI{eun994t@*I789;(WF8WH+M%}yIz-7apXh$7xlUT<;|TYI0m z3guxA3xGphZ}dv`>)22Z=Nhp}xt|YtK|}ZRv{hQ}XC<$d_NlrI&oucErF{Y=`W7~0 zm6;O?`VF28k>U^~dJ@ge8fYG5J{pP-Cz_iy(jWqVB-F`;g0M$CBHk)2L}mN8AdOGZ zS;YeB17`h~c_M9$2H?`h_#v;g1End4+pC<5+Nj^axQ^C8W)SKfN#%Z!^P7^c4*PP; zhv}}HjQJh>PjdplB@yu$^gPW>PFDr=NMi)*D4x!4S_j*nUOqe*|4I^~Pvq5-R?>hT zqDr2vy%=vY$NwhB|8L&}$aMFoFPkbxfB*jkO`iR9btXD^1OxOkoe+JNd0sKcu(oyP zfu!CuwsM_0h9Z)h@WyT-`ZP;^)jT)=Z|h=X)|m_Yq|1l9{EF>gXWr}+X%Wz)`Eg{{_lCA4*I| z{#+EDf@!JM-O#`{g({4I^g-Moz+~SaF!vcO%~l#V4)w$=RH3nF51Z?h@xx5>U$_5x z?W%8Rcpf`=z-(j%pP0jGiQ?GYLs+rdhs;Tt74m<{Pz=Q+=9+wW>#PoUyB*do?&Y%S z5KLla@_)$`ju3^It5Gg_R-?TJ1~DG3^73hzPRLPNX=?5Yy!n2-t2E&Cx^UB#A2u83 zf!O0GUaEmu%?Bm9RnpK5_u?Hinn3&B(dsK<~SNdCh(9)5VM7er_3BL)-9)? ze1j&#H*WUaDW1vx;3>=#D9BevZ@P&+e~LG^L_<#@Um0lF00A5)=ImHko2#|`f=b6bF6_Agi;?J?{q$%41brY@E)e615m-`?W!&U)`EznM zMPN9;0It2YV^+I+p*Bkvh3-HNLkSVpeK%eHocIXzefCC>g|nZ}2U(0LG50w!k4g;T zCzgCoXp|Pwj*P!lo>1jq1r9L{!a1+tRB4bzsn#mtsFaKlDHEX=KnlbzcoC_tJ$3i! z;-t;eG-x-5Bs%Yvk(QUe_41Kidapb@9qr~mS`-;9Qg?Obn5Z+ zN|ulk9?M@2G6qBVLANB8NprS*g#0+Lu*Fue+f%|dm~a%MvVx5RRppc!sznCg8?z&)KuGc1(TafBSq(9mMN1+z&ID0R=|YiR3|Ehev&BShe2 zMtNeF6}TG1?Bx8)_gO>yHq?f}@{vXON}LdTeSzDhl;;`eZgRD@I4k5M0 zoiL@wHET$=#GtOh5#k55_pU8KdCR$o32L^NxV3b+uXb3JY`<}AOokdU z%>~VnCdPZ3677!R@VYg+Sx$y!7&!D1(j#zpFi(cX?&c1ZOfKYifYC+el`fKxP}(R| z?bsU&n$S##o1VdvGA-nAI6}#zG-o#yKzBp@t7q0MzR<=NWm-H?PDa78bWVknKX=MjX4+;5{bWAO7E9dlPtX}uqmnJWsGNN zD1cBKsuqUJO8HANKE>b>s!v<_rN~+HG>dU6$jRnJK zNZ4|Y3gRc?DzRMmvT#)A)Q#2|QHSPUX%4ftTXqLck-wxAV@epFw}{7!9$I9vva

zcS+jGW3dY@!v@k%SiM?dsH>3Ls@TW6T3F;l%aoCI@|WaJN?N8HI=j%>(&mAY2qjTl z8c`XSU!C9|3oSFtYUD4;%M%9(Cm>J>5$^4l1O(4$i^oA(25dI;r$BiM_S_;%ok^rh zc9RA1Jz+Q6veW`) zx%`zGFmy!zhQhtG-5t~mj@u0GBA0>_HYFY5u^|`z)#8uBNLIbv5-}K4J`z(N;Tig* z3YwKKx5R)ud}Z-JSN%&KcVv$)w-}jpgT+ouo5jxFVo8JM^;IOWNb~yT7M|uc6dCJ8 z5djJ%0Ct5%gU5?{29SR>OD#77CESNH^f^|!!ZJilnA#<9Cdglf0f(|Uzgb~1@_R#4 z=rDLWmQu~l-SSsf(2E%3qNcmaGcPAF^jWBE85aVrSr~ejz4oYOFw1?+CyOp* z(;u^BGCRRykfgj9<6R$l%o3T;6*noWLOHSM1KlZy0fuabfEjvM0 zCK!9ZA~PWo{^%o2;S$~oLipXX;deVsz0TheUjYBSN}Qp4TFlo?L8tT8QYA8&?2$u; zutdb+w65CF-JM1W)XfU06r8(zZ1G{|3*MTxQ^KYPi- z$%?eR44tk-{+eup7CdiMaWnduxI4J@6#Tb-7AzCE^|Mr#3CuIu?r3Rq)bmU$amk(3 zrPSn(mn~%CBCQ3+%zuk##lHzl;Zk`(7bCqWd4)%q{bZ<#axF)^V;Sw9EPqX^FcgDf zH>8<*fZt!zW2C|&}WXRC*CckM3XYIQ!nb7FICQT3;-LM-=+zoBcMKn?kJsNI!(~?3=qy^j0 zDGa-niHr0mmbuH)kFKB=RPVCbJIP|)dzeu#HWa6vql=)SLa#yA&V0~i9Og&hb%*}14Zg!8sizZ zoq0}#Ca^CLS^CpA*CS8JVh(DQzZr$+Ovl^A9I|l2jNFGTh0KBB8A7B~STsKqkQ2X0 z{7iR^&ZWBojhp_4-1ykgRJA)TZII$!t3o-KZ^*bwEBg+=q^;`2vy}&Z_i>o-MfS0^ z2Q7mMkD@^cZ{OwNUH2LEbdXbI29fW*d~$a9GmD-u$goKmyDtx8*g;DQk&_*g$ah{I zIn4+=b`S?YL~Me@k3t0lrNQD_;aTx6u~oMV5z4F?I3z)@MDfI}WQ!Wlv1~Wv-SMMdccfkc19jS@qhv?)ENyI4%{2>({`Peq71v z>V8}ko_CL8c_nX9=O$&hXK6c|@w0fFy%CaW}9dzNz7osy~G^hDhj)#ia{PBxGN zPuvZ@kq<`$8J23Z4n<7pw`4Lcz}k(}TQ$UlCW9rzHQ-22R=EZ+c)I&(@XOfV4w+}xZBvL7HcA#WVH^U2;_ObPj4-Awa-Pb(t?&6`6yXGAUVa| zcJaeGo>o|UwaG9(OHoQ{moC9TC7TGLc0MXbBP@H^YP}CdoWCV03rcF-O=a-EA!eRJ zA?sV3V1#SpMz65DY*woBTZg+J1vCV4gLtoSk2n)d#VMVXZbB<9#N-7V%xrkFbyBcf zK1y5|zLdCq>|lyjQ;}I;P;Zu+y;R9ZiIu__6t`O`u!~6^+lq`Zu0nIsq(!llnGW`I zytPk=6smMDDi-4Q*3D(}Qmv`1EZ#bFTBUrHoL6AEaeFR21~sx`wAovzb1ZguYHEf` zgvRC|56Wau+y^uPh3vajYkxaFUFQ4reL6tOvoKd=7^k^Xz8c48Fl2q90O&4r1spP$ z6VCg}oOdrz*ix-V)WJJSDF&cnpQcz7xD;i>C|Iwr@UEb{57)aBeu!fdlSYVNBa>Ga zn?*BX#NWkN@P`e{vL=&E@mDr2%c?kR{>rY-vgQxMXKOGE5klM)iO~&N*XsYnjd|{ zFf#bMAXT|FbxUV204KOsK1x;+I4I&yveCn>9M{4x+13m=HI9-=gq#{9hg&(-6B>qF zD}o#3qq9LV0Z;jkg^jRsngvcBVKoj85myMkM3W$z#LvaM5U>!5HaxDE2T!r~5Fsue zBa0=8i#JZRCh>)Q@`fX60i8!x+*-<4>Z(=A$0(FOW|=PDS&k}&vmopjx?7vH@lU!1 zykuNUNlsSTQm&MbQLOz4fX=u8n(u6LW0|11!BW|FX~kA0a4H;yGA-aTL+@X8YA7~z zI5zZ9PrR$VEU${yOtTJ{hWD6)M}l|xKFvkRzBboP4Q2cMw=spYr)8z9!`U0;W0QeN zhJjVnti!ZOZAvN!q&9VNiUsnqD*@Ap^*TMx$|*)MdO9}dEcqCjwGs0WKa(9jW9(is zV-JA_Y5wDITigPNknp*9k8lf0duK`?OI|608RuI)b0^B*S%H~}HThcwr5`pTN5$7s z8^QUgbgxOdqei?~5r-o~-A8V!{GA!t@c70*!R#gdjr?qoO-)u)fTR=3Syq#^7}Dc+ zWK&MXRF7=3a>^RGLCZdFvJNIG)Q+u??TLSu&1kg_3dUQKbr`I{_X(%2-iTJPWzdi< z7&L5JtCf>De4C$wtiD9CmP_#|Q8?xA$iQ0)3aO1FX|v&NpqL?lM@|B=mQHQ6M)Hf7 z!kdJkyL4#sDmgerY=LTWrvTCRBjHX-FK$9~#CRPV+Dhf9OuI%X#uVZYi(YOG3&58P zS^3S@e8)KXI||}7c;kPpC@QmOXYqCi^DMU-h^)~^c2XhZ`m)(^KN-n(c-o1}APbNj zLJccjZXF4kUAUeAn&bV?t&_i_cr0j2@uvxrYF7KRc{Ox<^)nv|T%oiqm2AoqG2UoA z&Wy+9E{OlB0!267Gdrk9M{esZ=WG|w0)<*o^uzEKR!-b?^9rj8UF5%`*eX;ki$4!I zmwh(uEpt8Gn^YMkdEkjfW_0Q6TP=S_!B?@4!{z~hhDO^Q{;=!;A=u)nV2n&(ov8R6)#DBm7 zHc|K)S#nlna&DELM9b<0*y$e#cL+tS_>=w5lPAdElV+K@OiUP#u9>LE zOBVFHxg99&*E-YFq;0w>c?u!r*=g$RKUQ(Sb#icr{Cy%G(1r(OvW53sQ~6Brm-~H^ z+EAAKur&&{i0{cp1;IFBOeORMYI3NpqT1w#tp)Xk^7mxNMoFxMk(F&I*2g=u{te`l zZnM>zK(qWk8MvL;#9u#b<(M`T9h0U9D!$j67_kuYi}yrBH93Vx8e+z1VmuLOlJEfVd_)S)-ZRN*>19t&W)oF=d5 zU1uxSTaDphXXLaS?MZlv^dx_I>B;i(B;df*k?;~*v)Rf?Uir^vD+S6Or!x??OqcM_ z%P2LyYYW(5seC*Ev^G5NMN9}{wouPO(~>GtNMKf7lHmbICO3lnhZeXxCF}emPlYfD zJk?SHk4$BR_jfILz9jaCw_3?NQ;eN{k0AUP()^vMgo)bW;&ssGUXo@q^SjnX(4~&k z6##W8;dE82yBUgijkAF(lCeiVP-Kha#8peN;M@1`WQ$+-faOTT(XTFkk2Td8EFbT{ z(hm_5&e3ySI9>jWgE{tCHFTgO`waqk($G`8)0YYq|3#7TV->oXL9X{8{0JJjHXYwr z1Q?*9>PRqb(^xj@eQRW&D*5ol? z?W6O>fI<#wpqy7w__`ON;1)|wRyoPA+7wPot9|w|R$JMdl#_^v2K*s?Ym~>=?iGk6 zbP(d1%Rp5259~~NuzSjaZ~(cV_X@J;)IBbi=&E(Yr7sasVExwWnq4pdK$dzKv=U2e zs2Xl7Oq1B7Eyzx>*J!g35q|`SbY!a&Drd?+20G(nIE0b(?wBtDujHf^~Vz)~+4b64P$OFX^#(tGz>6B0O0Sa9@2P9h*pAk~P zvIC-gdb(;hE94VFK%p&rM-Ac*h^Zh?Seqt;*ER_M8jX2CgdxdK;_g&bu-ZmrJO`Rb5873dLthbF*)#+8D zsFhEULPM6w|Ma$L2(PB9T-4b?)ELv8xhatexfY z%v_Q%*5k34FCpg#*WsaX4iwIUZpGFF+R~9jaDs%ve7xMZfi_P0H+zunZbZDFAm1p( z&b}IC8)P#x`{eFZ5I~`H;Fmuqc|6~kr$-~W{$TtB8}=KS(9+BCdJme zafEzLOf+#MU)D<+b$aULNLR`y$qa;YiR?fuZ;;NRHe*kek0WobH_0{}aZ@MBP({Ou z`7^@-GsAFH#}9yH$0ERJK445&_DC-Xzbg<`Yyn52l9>~2qetT>s=ICSBqh`q%O`1V zOn6RWt-Cqjts!LC07BAbh%iATpjwYnmDRqT; zILhLZZ=2-EOtr0ku6&XVev`1cSLN9_5wz>_z&}CJ42lVO=}+=(oUZ1ke48m~p?tCl z6m6gwoo~zTewtQ-!tN`!u~UG&vkEO*f09;8;o>XeE#f3GMYISznPY8G7|SiPjib8Q zt8iYzgrxgx=Y!X@CO})F583J>Tf`XuuO|peW%7@Di~?ENN&nONP2S8Q4aoLVkW2n? z0BCD5OYz0Fp?u#bZDqP+Q4_9{ivi^dA4<|aEV0-Y!&jy*iPJ3q*dI8vFq*H6ZI15e zGqJ=*EuDT01qJbgyK3jVX0`KMWU~c+!hU|jJGBzNSYk_em&!kefDj@@((SeL(QTgY zGu~wTc@SA<)3O}u01w&_fx?H>C9X{RPP$u4N9`3aqWV6hwyR^=v?(?v%0^~SO|d0q zVy&sXe3Uoo--y6-p?_A5Q%fq_ty63U2naut7l{OfHB)RuMt3KG`bVrpr$V((912Z~AWv(-~^_jWfHwreVmCuqpa34Me;Jk`cA zK3$-oJQJcg&ZP*OW-|uk8FfC2r2Wdcv>XVsN#j7MbCiKo>&Mym|AK=Rs{syHENL%W z@M-@+{H_>eeSz3S;g+2TG(@b$E_+50enDQ&3gH=lhtr3pvBHW`Z+ zYv%8=-KgFQ#8fza)g~pxsb{j7c3Ub9nGB~i z^9-vs2CZ_k1DPalLQeccWG@ucZo6yH68;XlPCi9uTnO{Y3I6%$P=c7WH+?2lObrXU z%GP%j@JN~`y!gwu4Zd|4hh}^@6!vu9US>@IK*h~d6hQ+3cIOH$`X(_1usC7}Djo-z zIsS3Dx{f1_HxA{pyMS8!J6M+=c6L|T-+NAf>*K6iX)_@XqaS!L-0H8ubWkW1qp-Ge2bu2@rokW?spYwlw%^Pt%=7zS_zswJZ}w^O6Y;$poD@ z5r#)M8VzsPpBf&$G@&j14{PPqB-`N5PTsG6LrsobWhW9WY-6RsRozLzCHaSN z_gywFyY6|L5p|PKlR!ied;c5+cJn~&<{5(UDoTG>3Nv(1=*A$G^(rZn88_L+c_+wc z`r;ADe{=-;9#Q341eZXW%ZVIhJNL}^Y-$$nD82qP3YidXEN}~$VXb_I z6f!Ik>$}CKAq$mUV=$D#-=;ccGvqU*kWsAA6Rm z&qS2UNX|@2RY#GaDpW6_gR(Cl6*|zIFcR+AA_UZ~74Bj7P;(^7$YbBNQP00KPkx2aZ}=m4bzOR=dYm zjm*U}Wk5t|DVw;*7N-r5a`v*+wG6Qvb6Dv6wkx=iRz%ak|mUQe@r038Z6ReqXM zjWp=}cc#)u!#;VRXK$jX5JiQbBKHGZVqJIoqry`zxdI_lE{yy)Na9z*XW~BbI^hQK zO2~p8x_;8X#2jY*udRVN8s+uTo?GhMbH3(KC}a$0r{=g=DgsI(ONwd(jF->&vI2CD zMSf^!!x9u6D5IjNJ|}7xPhh76a#+78fm~(Dg{+!;#Aao;d|``*Bk&BR8N#~eSmJ+< zdv*hoCOGl{oAQ~>ftm_uD8&Ue6&wqHH%cx<=s}x_0!ql)o+>!5tL$rg!97-viHJZKW^_!%1~HgM@#oGwrl z`zRc*vq#SIBy^(bk3tz#bGKDKOKhtd5BtlnwhS$u^(d++Eh|Nx(5t)x4TD%02JYCV zVHms4*p%dbDthDbICik(KikIkk0-ft$B0yVuSY&h%%cG~ZxgVU zef5it)5D${`jUarBJ@Tu~#43NaaT3Fpf)D``GvFv%D~JQcAH+L^wYtBH z*I=D9qyy6R!U1NlvW;i$q4peJVB}2c zMLFQJJoC8+;CQedVLhV-3rh~R8_a#>a|1Bm6kCyx{zsT>A`kR#kfYG z!Pa_?E?*i(Z>_^v140VQ&d0;kJt?8=g&yXCt9o5wW~=*#_UxOUHC{e91fVclbpA4c zzY!?r1%@V+@KD|0z#8nw>UZHm0emU`l33O9xk12!wv*BqGu95zKK@hZp2_E$%5_79 zh7pFFnaQjJ?5Sxb@;MU7P#_?s58#kK&5y=pw+*l(j2~B2pco{e+O05{k`P%;8^qNJ!EP>#|}xhleLKnu2WV||1pH4`eUtE_Dj`je?#xfSv`3S2^E z-ISaF=+ON^qfwOyi`6Z zGl&olD8Q5+CzN|Ait2n@JoQ||F$cQfn0I84(hyAiz$&Xea1xlSo} zb?FwyBUd&7nYw+hQ+09=Fo~fdW+&y&u5H792iotq_M%M~6oP)v6Bi?ZJ2(KBqDL6o zdE#6U_EP@8&b|Xasw(^c-S@C0FiI~8_O`2T`Lk==b=MX3|2=OKc_`)%%YN2LJLlbZ%ekj~&pGRY z?c}bbRs$ht5kElkfGOewj-8u1u9b4U3Wm0Gm>!{9m<1&{YZT=Id!4OjgOr+PT=!Gz z0@g$AfcsL<1ytu-N{XUw`1_XDS+zf#vY)>3fjm8emY+N$wEQnkE=8`I6eTP^&(I^< zu}_T75Pbr1uTB=jb9EaHg1kmFh*v`r=YO<(yfIgbFgk9!4!SiD#|_PrT;Kaz<9 z#9woC4+QzQelQ>l`5!sDvs`M?5PS-EU<_adSDohB&2R9g@do)d{)N(^tj)z~z)6G` z60NJ_-Y_Whs{G}lg(C>a855n9Y;?J|YUh~j{h;$=|KUL7F@&(nuaR}{Q< zZ1ZdP3+=U=WhQA`@v-sd+H2rDXXWK+u*)AY^E4kuDj(bV=#9V zd8y{qQE-V0a`C!EOu6oq2UrP}MrHhC%;vTQzR+-T9{rIWgY#%J%8Jj^=4vTgn0iq3 zT&hz}{^c4xX*%{vsmSTyqm%e>p)N5t+Ae~W0%3JCVafFnMyg$mT$AYm@7!s{6-5Sk z6onFNi|cB|OYnvZmc0G@W4|*_s&~*y?Kjm%U)9bW7nCw{fd9_GHY|y8L7dBl6oL(bIdU~_& zl7msG>I3#=Vq%g>kD1j(3#L)tUfCL5f;il>Mu%_tMpWA!hQAHNv;ZTarOp@D&3ZpE zXpQa^53SKNX})HO@J;&Ew#u9)nlLRBqr7#K?v|ISqfsJ?icy-P0(jSj!FOeS4vKp> z>s@kuDS8n3UM7?K&6Wyzkch1*h*8>f`8KeHBa!tvV6YV*Zqhr4Hb_*{12>auJiF;~ zJ-Ce~Zu^K^S5diH4{v>stlq3gbh4`JWhgUVkEdM$`8|?rRhbfBsQjQZ)O!M|E_sk5k&>wPw#}x_ImfJvF?t>3d`_ zXcX};dQ^{zl4^CdD9E4kCMWt5#Vxpv=2*jTr*9U|mOKI|x6H)TuidH(O>3f9k z3|Tk&3EB1D@Pt0RcMzFzQh^;@k7BvssM}O8QbH?P5+X7uH>RS}&C9ycUwDaF^|J0r z%4+%^-c1eWH`8xRolpD4UsX28D%&xl^ksduWp>l|aKvh(vEB4Kaqla-#1|X;iXK5k z@Wlp+YC|9z{3<3CL}P+P;`A#rzZ+4|W71n5Ge5M)ywotE>3eu1aDFfygj3d0;vv+M znns%RlgO`kW%GawF!BbMj7z$&^;=`}B|VqK%n0$_7y8f< zQ<{DN#2exq>-tLSZT>|m$fU0?DWMc56f!K9cPSLHU&1y59{|6Dd|v*a_!xIBg|+d& zxY%S<_TTuX9{>c`-~nO!OW>{Nqj&Gs+qUD+TcC@JU+TA6W;XqR3;-x8pnXAPU4prN zHRUx3mwpAU@&?RN5gUd7wv7`nH+JgTfbM_4S6|SC`jmQ3eNequ+W_HsP~D|*RPJ7j zV$}`k4LDz&r>#)us58`w>I5}iTcQp}XVW;fzv|HH)Lv>=^;Y#}m9hV7l?Z=aLVD}_ zxJpWJa-U_7YqQxS=(KX09cBC2c5MpE;;ly6qNT{%uhOD&(1^JJnKmP}cx@n?s<|~? z>!Eej+Ok~q75`5CTK$ZTM*`wU>f3CTc|78}Tuj??g$}ut|Jp03Z1cd?y|smdAHy;ko_!&Jp-7m+$oABZu$o zkB@A=6K=4uEWWcNJ|^&;nD?*@zM~u;T7Y7|nMO`6#}9DLzK>hV9k(Oy%2W;A1%7o(DE=zMa?%!$zHJsh2JmeYK@rRMU`oPj_@0sYn9uhl;iH=GvEw7a_e9{M zito739jj^?j;=3@IwgdPs+7J`@PCvfu$9E3KcbR+#?6bBWzQc*{M)2*$_|C<* z(|7S);1O*dTy)2G1Nk_|Kjc>&$!mNDjBz)+6YX(00@U6ov>=Fd(-xVB+)odyX zv(8m6#Tl>k)0VBaIIx#WE z+;I_HV0RK1W{nh0;non0A7TW>2#ieHDy9aeF-;A#Mu-z_t)7V?%?|wFG&?2>#e$q* zw4hXBzkk3Ql?6z6u3{s!8tA`~>Yqe!-8v<_ls66wK26+XxAvDuS`rOu50Gx6S=>+K zjf24^8S8nur&WSuAJEGhscIHsv0H~WOy`Y5L5V6_%vw64cu`>m%FCqanZ@XaiBx(5 zQivq0$fv!}Upss{4$b3FCZc3f3bimAv3^41j zM+D02b@6qIb(m!qUrq`&pjr62@hCCVXAK(=!pJEIgok)z#h-lELRy6NVtR@-5dutE zk4H^anDt@ta*EXz{N2SA$cM=()_vi(@#SPa)Z_FI9b_HUx+1n_kQIS)WJkAU8loBM zjqFeCJS$`x5^BdF(`B2wNc7IIeo`@=F9&7`MiyS>>k%l!vpB^lIJX#H3&OfXqSm|!tG%PO&AH)heYp#VgfQm81e!s~rZDP-wJGt9Ttvp~lH-_Y2zj~G&9 zby_O;iauaH6GzoHR^${~dy1+8Yddp4^5S1CcuO!>iB)16H_pZFkycc*7;3Zr zF7}pKt?~<%E_d83-dJ-k47iY;WxVis^A$*Q&`=zX*)}vU0TM$)X!^mHSR<1`j&z0~`TFZ39}n_y zYyi|Qr41kgORQaUr0;O;1*c5=Fr`sZK7d`gNc)vmt~6>Y8>;>W9(-#__;kJ!K{Z2U z_1P>FSvi|=kn;G-C{O?!A>LbK?I!QyO-;s7n#7lA_Hn2&3VG|6i=~^agM@pHH9LF` zUx_%A;ks&EW0gdv9$pjNH+Ko&ChHgy9(RexP1Xbvv&otfUd&gLzm$r;pWkHlv@RaL z-2~mZe6w|1FE$d8!UYQZ0<*Ols;SThqPE>Mb~DmO?-RP-X|x#L-quFUJ!ZYtf@drU zK7-kH@!1KhQ?93yzsD#c6k~R~6!4W~Adphjbl55Zh@CrZMf}6AWQ*v-){OjVd?h*j zq2n@pAA+iktSFmb4_%eIf&)f{|HyPWLs6xaF)UPU9Jy7eR^O77!N9%ZRqRE+qQBgdG zMs+EqQPJenD`H$G$OYI?`~_^7-D)gjru3*?dl@Y#?|&0}OVNJM-qPkFA{nm!NnLv_ ze?HVkEz9Kd-hLu5L*9d_$9~xTK?tpJ4WL< zNUC7=fT(`L+C^S6pNg802v5FR_}-C^i)GL>en&nSl2U13CU%{-M#}GmAowad;VSSI z807^SiS6gDz2#s<;sPT9TugRw4!W(u_`@!0*TbS8^fSml#|_VkxFyuqHNONTk^Ir5RcT;v#rlp)lnJexZetsr-~N zCeq~*M@)!|Gg;}A_#LGCdWq@6k%9WEx}v~sRl#lu>3%b3pk#kh@1$c(rM42yz4Nm9 z9i$}FwQ9d@WT3V(P>WcaKOj|W9-Q&G^=1Z`CdH&rY0#Yh$Ts4OlW<{Hq+m6YZ9?Wa&uiuj#$ z&k_{jqfcd5cI2O}k%Myhoj|h$ck4T&fR1)oxzp-v$^!D%S7P6vtr1;!lccy^LZJ6cw zPppIGkxf#G>86YKdK1M*pID~@$dQXfBNQB&8`#~7V8z-&l)?Cyx?V)Ix7{8-kKYv> zC<4r#Y*F*1S0JT~;eRoxC}?tQjpcXIZ1=!yJLZfE%w7DmaeIkiV`rB2uI(JB&VdBH3dry!kFdV8E3vPV~3+mG9@Erj(d` zmA*TR-$kkqTx#NNhfQL<-|DnQM8M#T!1fp&V2*o&1rhZTExY2ZC0%>o_9)E``J34PAt=Fk_R=XdN&Gk}1gaRI5y{ajR_XXN$1R<*P^&oJhkuDGunpI&ZD)a?4ox zu`}*Fa`a3TWRtix9!atp7p()Zd7B;%S`x2BdwGbA zHfE?T67H&1B=@LubN*19E|&yBcNM+6*~g9vs*_k9 zb1P3NbA!%siefX)2tW&>M)@mKS}+E+C})Q6Wg_3$EtFbfMDM)j z4vd(13Ibx{nX|{J`to9Z0{(+1pkoIr&G|)DhE0N}yE_B(7~rd_z^51@>1>A0D;G(0 z6yYX}^?6Nss}Mv{A}ZI`H@uFoA}0ZI_(WW;Eva>z@Ah0=CV6~SEhxxQvp?4+>6h~y zQB?9(6m;~1;_taONma1eJW!PIRm}lLk)LOiG;rMritZLQAF=?rw@=YTV6^f^b3vF5 zqI;3;G0QyOM7s8L$TR0;F}=XnUw+4s&V+0}GzKt1S-@yOkdc^DV3X9<+fiW4gbLII zlr}wDd?uxc@ds6g!D32@Es1DJt0mf*C9?9>{xboH;O!RP&{KV*3O4mw0CWB!NSTa*h!<94pMou&JcF(2m(@~}g7zoQapF}Q3EYrv5#;vz zl}G(DH)~673$ddZWwIHYVaU^z)sUw-oYR(rLMMi;wuMxCmyQqdGu?CGLhf@?3!U#8 z!^=bW1n4iVPo*gVhbp-y`Fvf?@fC0-;Xq^iETpj!Tpiai@aiUG4BLeShOu4VGR77g z8`5^6`b@ae5pfT`Dmup4ZuEg2NeYAAn?ZKc-6!_nZ9^$ebqdnbE-C5_5cz&K0f}js zv}Yg|=4s>5-?KsV+--CByOr}|+EWU1-I`WbTZ&*lepJ%@qxQ`|!UBFI=I^#G$-;P0 z%*q&#t3&f|LwY?blZe-gOTfP?vO`SVZgVwE;GCi^cC4rC7GkRBFG5M>(0u504WVrT z`mvd`PjI9_p25)~<9Jm{-xu3$5lLB`Q#_5pwyt(*Wi`c>C|Z#x*KkDgj-UqW7BlwR z>`(@HCHRms;NL4#2JYSqfmqFX1tO2(DCv6eKz^6?PUrmv8IML$?$qmAZbLJnAQT!f#w8?~%s2~LcZMs~3VT3#n$1$GwNuQiO-H`VarArt zM%k_uC;)OA|3v?bw$TN-d^M@j@X0XOo^*drQE}CE`TPlN1UCpO=$T#q;7W=!d3w%1 zY3njUdOH#ua=3wwNye+;N;h&;%xA9Mrm=}(&)fPB!ZS#nH%4y$Z3xi{arcw9$Z23e zrk25Ar-^+C42%W1_LwoZqs1-H*;0p3;;R>dKSdc_hrqw24B2z;TJ&_T($kuD`IAc8yw~YUK*5mVMgJw~j@LjYG5CbpT=7rDYtI1~w7nL}0 z(I$y1d~ng096p(^CjVeOD6G%gBo&LZ@W@n9ED2ID*AdgeCzPR@ZlynjQq}vx2EAYF z;e*(sDBrSolr7q3&BcxaDADzjZ5d3IyGb)36Xn!rHdiQ)5u-g5a;wb_nFaiAy3gl> z&4YijCCgz*@o)>k8HJ#fIhz)t=2)Ej@$;G6BF=thbBbgCu*F+2NK!U1$mXBh<))O8 z>WBwmoF)SfhqO+l{liuWn6|PEkD9G8cZc+v3Vt_1Yi46@#{a`6X-~KAA8=8Y@w*8| z1F_HC?M23Cw!ZSYBftn8c?n31F{x7EM2H%?K*oM%8;~cJnZyQjM{LYDfI1pCz(J-^ z+Qeq%pwSa-F{1T{S>D#3_PY`@`5FhFL&w-XVT`|$oV=k#GWKcqh=S>S4I#t`Wa%Cc z;^Oi^WtpB)Kc{?=o?X9qG3CSL$z+lt5eSljD=axF&ZMTQVzg>^PwB$fxUnd1EK1Ig zBg`l(DW1sJ*ztIhWA4o6-%#7T@%1(S+7N1MEx&9?)HSviCK>-D6ACWQ7GqVroxVyE z)vDbWUdY$<1!D@T)T?$$Q00tjj|k7^YdoNU#wT7;?VT&7Yfc@P;RQ}YR^Jun9xF;o zMaGI||2SV#!7OM+X*)Puh_kMf7%e2+5Gh|O>~S_z`4X=01Y}Pah_0RO??N)JAut{Q zG2&P^dk9UADO8XB3|xbGKl}Nb0llB{ z0_Z||Cd|-KMF%wqacV-iskwXP_>!t zuWUW*qnuX`2>k&d&xXa=9rT}>KtQe?3H}7yJ`!W^BlkCxdjzE^yfNlFuoZmm2yg*D zTl_c1E~z&@I2P|UiLXrs1(YpO5Nnro%U+AWK=Q;|3P}@q_ug2$BNPY|nI1_#ui5gL z$k$Ss+PES9I;N})?U~W*Y&wk+wG;ZHPNN4|J-4+{2~(j5obt1wUc zSbbDkkvQjE9S`ggK z#pO~bilLTJaSYUD0f^FE#$q~OM_v^~<;3(ny99EuCeKdQ+6MuWg2cx6*xPK0vJBZO zBh*jTH7r*|l-i5Rz;RZPBl9$kt@O_=s{*WbL;$@W0dUo`ZmSBh8w@HW)2$gBgH^k- z_S5*f>0nREVU}XMBspwIF|Io}y}Jp2k-d{hm}l<`xv_3$^Bb2G*?Y_PV9-g6##mQ* zX{YdYGr$H#Z^a`;c8Rg`SNsKSqe&uVp4~}bMTt2WOv5C;jxIU^hI!WfI9a2L>kuX? zTOciz)U0m?u_WFkGnNG7BP9jnW1hQzY}afkhtvcGX(>c8J0uD~TcY7!L<``}>_McZon)i5joNLRP5qtvD>X;-UTUvz zx4au)-{mGnTaF17k1n)N&5()$f(Q`CnIIikb``Q>xx#$9b@(g>@GzS(mm~5v^R+MMi*X#{!51~wEsoICy zLTwOg3IA5;TkMJ9ReU|^O@7SJ0b!4o?{&IrAR&>Bnqaa)O8NSr^@^5T8|)$UJRm&- z`e+Q4QPT$NMV0ilc!l-tl*`w*sEK{MjPuW(TU?~4R#cSvt3qgQBN~LghnT*>eiw<6 z{ldDqx1ItMq~5&&uC1FL9fdsw7e^W{j@zkx{I_hYaywjGX(*4eU(FN| z$Lw<~g?t0WHOJDp^2L4k*t?G>Fm#9jCQ_WKe!MrvTw`xG-$2zZMq`vO9k$!$HPGn9 zq1F>n)ut_gw2drG@7VdQZ=NwQaq* zxZOa$NJ#M$j^?pj>C%qp<@UKXY348-N+pV-44vnjy zJGTO1>JVK~!PXbCF<$C@A%6F`Jq&v12J*V+U{D`CZkLp#ihRO8Mm+Zf4sTm@ebo-( zz&@+ys@>ofxdRiOr2JJ`MF#bp_W67x+RMzsf5Dutq}4CWuB3A>+au%0^NkeF?}gj7 z?|b9ncB=@b;!K-Y?1yoeY@}lXeOTQ0id|A3^37N5lfrBHM%vt!c=yCt?TM|+tmUs_ z2^aB=w4n*YefU-TV0j7^lK`2@H`0biB}vxzby4|y*`D5szX%5r$wLr{ zdB2xwxUh89zs)Wf^`5Rk9O83Q*H|1NS+r8m_GWkT@qsb ze;;F7s`y5_kLQ5mmQU<)@`QdeeDMF6#H2)I2H2B3TUd>9Ba)xk&FrGWp;bmA2c>g+ zN4;eU-$Z)t?euP|MPoZhLRyF?jZiB%zA?#W=RyhJM5a(4hWbT2hXiFe(BeQn`ZU-G z3)?wz!x!^Sq%bc5?d|OxLtEdgFSY|MMAc+5uA?K5XvybBv{@ZxwEH_cBEoCvM`e&0m9luWGeIyfXIR{xHU$X=KNNFj2s_Y>n$y$TUY9YxNHP+msyiJbP1 zE+VeIBNIY!6RCz|d^fdsgpe6Y78aR7UavVQ1UBSWqa4J3o5kJj9TK;pt%GA0e4CqS z$B)It@eVSI3mqI@L<8ZAW^XInMfNsST#x#u5e9Q_{6 z7??FMW1viPXpUr(mpU1NYLmH*iKFToeFCiCg$z_}sL9})$s9td;Fh1D_P<#*>2l4y zGO@a+BO(FBWC9t)=M8p0A-*>4%gwX|LojF`yMEfvEwtyZpSDvA?QgG-R{YS*kp$%I zI3Q=wDNJV{D(AGlC?obZdzh^j-G@7lLP^+6+BjXA_l$^4#_B zF8qTXl6cI22RkCgxDk#?K>cnG1S!R=!4ApYzY}C6Q#ObRBOC+hs{*lXgu_N(rHI2L z90@dbf>_YlkB^Xz{k;(mLaA>iXaiBO(B2jl1h@bN>mMmjjc`bOR5V2>s6Gj%#zJ5+ zl|L#Ak@b2E0f1QbIkf;#k%LIb?Vs)F-v)maC9?7zeK9dxNDCoBJv&<_sCQ>O*0n*0 z@mw)2+c5#LgDsS%06-1vKU-u^b~xk(sK|#3OB0D+W-~(!&JK$41Tk=uBMu9_g`lm* zLeCL@m?&H5z$DD@9KIz9L=^AdJV{3JLNi5TGsWjpioTQa47_qe@Rdd8WQSW`Qi|Re zkt=#%lTA!bV#1XD3cCfM@-51KHXj=15cO}WK;}LQ5WO3bE{aPXgAjb!Qjh0R@Zm_g zBdSX3HK3dwIC&D`5;Hk@Ch#q^`K+{3yA6+Rc13+{f0=L;*~N~?4k#^7g3umd{r3`W zg;-SXuqS~hAw38t*!=TFdPZ68PpT9CJgrzPE^mBGA!ncz9!5Ge)X8OdC=FRBq2}E?984(ShWVabS-)NoZ&pL+e!=T22 z0hw_IgFl!VB!o05sy_kjabj#@!h<6hI5b9gU|+HEHiwhmmrOf@_3Qr|YcL0E6JUl6 zl$%K~-pHO)_9F|!$96;MJIGwhGl;R7|B2|v_OVo^tzf%jI1bXb9vIAc?5NYb93j+o zr)FVze3H)$eJABhI zdfY-ONTgZkrA8X`{wA9gvq+F!%pw~wTHL$KAt~)La2M<$5JfakeGaC+bqk6px>C6N zCS@J$G)SV^xB|C9U0Fw#(86}h!%)4G0vlbh2z!q?#<$Mz@-fK71$^6hj9@+}^y7}? z)+s8EJIcfB`L?m32!P_l;|@t~TK^M{o^5aC+s4qaaEFSV6ONoT=~YaASp+f=FOD@` zAj>trEu9#J(RM)1<|B^Y;@cArhn%62`WhYQP4=04lP*{Iwlrdh|FHqpL52%Y%9PSm zCmoc+*bNKu382NOfc^=JjJlA!lLL*tN^zlkL+>XY&tUfovLGhYo;W8OpLXbDCzMsq zliu^jE+arQQc%!<(zMHFb3t~+Xq?rY^A5WlQD|TS;KzWs^on;7T*%l17dGHgaqk6K zxMk-ZZChXb56=hn%oGv%G}QPxDC!CxnHY)wv_k?3pY}91`#dg4LJ;iy_NN_^EWLBh z6lD1k#Ydo!ziki%PIG3mMzIP(C_3KuF=G{SuWuC)Q3glTMzo+s%#Env2Mb|8`ZObs z4X2qy@9{IsdVj|xz%&JkS4{AeNAR-|P zB2oF2LsF=5A1DxXqNWB-3j19720^DLc>9vs0<@uAE+Rg6R9PzdcIbK(7GP21#PF{i zy&6WBp&s7cfS$Vu)kH&D7K&mZOrDTzjvMCl?X=KQc)_SKnPpW~Mthl&fhw#?YkfzW zd*0o53D+Nb!8t|jC5Kh~_De^foXLDUMSLl87d7@rmZJjoh4po{_3|LDvCx!pMy@Q> zwoMd|UvhZqYAqGLzI0?FqN>zDKTVv^q9**vKdTteC9sR}+^ipeo>yPC7&BBJLc}oZ zOGo6)seC&jUZAsI&Ar@TUbe^|RV(LXj6c{n(kPu_k__VAFCA0hl-zE`BgiQ^ptd@Q&_Wj4P2`YqiKO7+0s{!dbb(peIKXb!y%(7kg6 z*E2HzyE}&>BW(wrvAG!QzDTD}Zs$;*A0p`91hbgS;X7Ku3sKKx=1)!5fAS*L4Fq1T z5*1eS1C@oPDBO<6la3N3524VDVWs}`8DK;w6^z8G2&W|D>;FYKM~O+1&f%kj_|5ke z?X;GIb_B=ar7lx%VJF!lHdgtU@*alXnePbx7Y9mn;&6PCxd_;>MJ1>jQdNXsJs?Kw z&NMnF=fry5Y4{z_iN|zj?;OxxlPa60+!m;G9I zN>u#;R%ZnATz1geqwsVVzHj}sF10$R0}a1p7${&QiVv;M5G;MtnJH;G)*LGXm!Ux} zEb1@xqVUHDD?!WN)DWD+lM<_A<3)kZ*|uQ{-!TO25ME(XfBumjAR_=R=hYQghXyM& z`WjLiN~~Ee&Eh)-gSV5m;-^3I#zJ2iY1eBPpc9vDPW1FeMo*Y>gj|Ccl_T0twpSa$ zmIM6tpokddyc5r$!st9whY)oGtE6bM_LE>CS%87I%_kn38(%a~h+VHr#ou zWV?VN?fxd=O>@qS#aEkfQUDtoSe&_t5?U6a1X?pXP#-(C`S)|tzyXgUSbkEPQv&2) zkmgJon$LG8g93#X*uXhI<9ub6eqoVVI?h2M-x+iqGch6E=^87w1&z{U&;+llJ!Vnc zLIa1hV?RoYq^d8dyP$!$?`i*;2CjE>p>EPn+Ov33HgK*Ol;-rvVRVG4z>NY>z3KA8 z#3hTNqnz=B(VT=%bAMW%R{B!pbC2+>}Jqy%C82bQ+H4{VIuP@5Z(tqQN; z0B@4H3ao`y!$>|!KB=d)-O5QU)gRTBtcvN%-;~WlU(+>KWR*H+Kv~>H4zYN8{_7Kp zfj%q54O*+0P|Eh0;tFZ`K0{bhY0)HXl^C-Fzl86iq#_E_JXYkC#M3VqIT26KRwjy+ zB4f=Ha1=ag72AA$l9yQtsE_X_>x?gPkon9=Bb3cBbn3J#{?)uMZdSu35r z9jF&$8FscaceH)A-hFW7&VV!5$kPLZ_2 zX+@-Y7sX{r*^TaP_z3Dy2vs_71uL8p4WOl{j6vHgWLjg}8h#%57?Ki92Rn=JqPUZj z#?sT^hXiLd*!qR8!{N1c=tLH5!u=V>GZXX_0yXF(<@8s`n}=l7VUA1kntZdE-C)$2 ziRmkylBo0gm2@Mc@^_f>s)7#HzeZ8YSGA{6{JtZSbT)~I?aqh7m-5|oBi|0`wRx9w zm|O^wOC2#f6o)p8nb~|dU7Dk@c}lm)w6VQgoGH-8c2n#Y@_zb=~9~8YHSEH9@mHR8p5G|7~Y4$;9;oh%J}(Kl_>9(M?a9-u$G7i?S!(chLzKE}ld!S8(6t zs+X|WC%`#Z#ln@NBpIz@(7VoQ=)PxEejPoZ#iV5;39q<-?1rkLR(=L2V_);IWjAVMXpy%f6vkzgME7>d}jB`48D(Y zMd*~j(8eW^$Un4k!MYf!v=NuXUAZE?jcaL8mZXQfj0C>}qB`8ABYtQ|m1Kp*yptV3 zLDB%K@lS$yfi;GD=E%>XzYxE{-`>*vx2gEsx3U9bWVq}9=-o)5)4NT^yR|;gYudVS zO|a>>CLU5$jorll#&#(Wv0CjlghdCc@2E|pcTd+&R3zL-%5^VD;@EE4feL?3S$$~5 zS1Edc$@8H(;1!cIo9`nyEqUN#I~(kb7RbaPo zC}XfQ(G`K$jm7J}t10iQ9oUELEL+AhaGPYR|5SIecy)}>GhB~??}3||2iAV9tE;?0 zn9+%WEcTJ+(lH~;>K2I?vs`iQqWA&oe?A$%{I%FP#^n)B zV_XgB1#1)pLl#)W5pnmLdXMHm5@F z+%l9`>f=brO;nXMg`C0o))vP9_lt}h<|3cx7n_U_XLzrOv&nlkg&(*DoXII2`%p9I z5rM)&l;27BSNIp29LTNmro7Pxqw1PT70u%ZEMSgeiY)fQtC`DvD#mnBTnenc30~8f zEi4LwFtpWufn9``tWGKPyemO}YLu z1SL@*SuTY$OE4I0#2Fx_oa*@{E=hODJteM)8F(D&pJX7%-H_{_Tjj3_l!xF_Yc}Nw zxtf%eZ0^U12_d7ICZx|?m!xL#xVf$fnnE&^iJ}q|a!Er5By_~sShI)BqTUF-_+y2g zVq=t#we?yZGHU*)u2YjlM5F6DD6z45SQwu zt`LfsP|hJddf;L@d6W1-Qqhp6&*CQLBH_HImKr0Lq8UUnn#{|@S+giYf>jqtjCdqS zUQs@57Q9sQ-ZKH&;QcuTlhF|AsWpVW`ypx^`5VtBq4uC@W_0LmGHO$7OM+#o+C( zUd~pus0x0FZlBp0!PrACNzu49hp@AY_#wI&vOp2P+a*DGR_}I2v~A#rZVBS{nAo!0 zHKKJ5_piHMB`BJ4s4X61Y^Go5`OC^7GsXwX^t{qC1js^z>;ywmxP9>N%3jLjhr+>` z44b$Iz`4|4Mn!g})|b~`*`vR>YOm~ZjUyvqhWPTJYXX|ZD^vw}c7RRchdO~Rk{nsw zZ}a@+{#u0atl0i#g=JB>fx>|G$1U*-JHps*bOqqn^x*)A-G^MoJs2g_qY}%)!=kbZb*6o{~DV#u#tl0Z+zudw?; zK~MssSTChG2MQQ#X*jV56y@LSckDLh0L#lm9*x}%&WX$W! zEA>N=Q03!1lya#KY2VPI0{N1ZY_3E(o*yP{mrOu!EVx$9#b&=2yLPpv&U1o2h3Qn| z6bp7XDxZ11d1Ax!E(a=%9S#FK$X@!{^$k+^pTy+(`Qe+vAszedjwfA`I(CmdiG615 zh=k{`BkK6!4xp_B?V#selEm&ipL1=58|pBrg5>b(^SnzElgoMDH4Mqs9hDo{QDk9i z9OXs-i70hr`(Z!zaSgvWydxU29qtU~gr6yV)+NEu9C#L58D3?A7<17zuHEum`Qff4 z5TT)ntc$MP(X9yRN<%JC*#Ib5F)`+j!OPq8!$xTwCoRb^vHT@hs_6BsOM*WbhS7*e zo^{>U-NG^u@cmFxK4gcrqpU!)qf|${a=*}D=+=E>_RS*cbJsDv>Jhq7=vCKUlD+Eh zF2NWB;I=b1&qQpVGkIl|)l^t>I6rbDes;UUy!VQYmt5V%onN`Ei1r_81LhR%_nry< zJpGcZL+e*WIUYhbzpMEnzcL8h`%-kUqdjV{3;uK>eo7#!Jk;kc4OI^(DG3O!IZL*I zAGx{t5@X)`gCn(kCA81q)mdGqEY(RM-zpz`gXQ_K#e9SDZRC`Y9*%d6q~C2TiI2`l?_$=XglzOe_yP#xnt$k&M2?| z2TmN49!xt>i&4l26+fT(rtqVrn!?{AvUJ%b-j2V(I~^sX00B8PnRACw)rNq#P(Xn1 zFlm)p{3zYnPHa@)pu9kRg+8L5ygbrPYMd)_D?$vTwsxF|wz|UskvK}8E`wdl|HKX^ zHrSc;&3XJNnKG2Ia<|nj38cJW#rDF?knf6S<}<6?CeLvpLz%oua3Nl?L1yx!WZh6$ z&lfMU?QThp!@hPb3ifG3kVs_O-ICZvBPb@8^P_YbPN&Cs^8%iz{H`fk16*Gn~uW5#->}8R}CydO%x^bcx8gt*u#W>!DR;cON@9V z!EHlC;b>+HyW6gZooJVc+ts3~D6ev(!tMtM|2(@*Ud~qbjZ@6V6tLRCgFm8H9*{0==LB{?H+Pg(jjhJC_BU% zh3?6SHrN*Uyhp0N&n($$`LS-` zQi(}fUFS}e?|$m^4g)ea*{o`){gqpAiHr=e_z`*aIs6#KssVUn@uL93E-lkj=b+4J zrBpSH7HgIm!t)pw~qZx_*v-9`q%DzRv>I~vP!jIuIl zS>ng!)z{C1yC@&YIw2r`rZ2|GCh}v1BtR5JEL-fB_;-&lc1OZuKSnTuzBCzW!O2Ju zz|m7*RTPqFAip97UA%}hT)7x9#e^y_rg(H~Q+$o4v%{CTBfAlh;${?W)9%;mwVTu( z&@TSTcB5GbRT6^X+Ea{cbWbB${2y_w(M`TAri!l{q5WXvkrIrJ$Ks1cyA|Cey3FcE zOk6%cMv5-ExlcE`L#Pl2@DS}ZWW$?K5cT{RskHOK<=aNLB&|7pxjPNbD36ge^5cXWCl|%9kGexB;7Z32 zYFUCe!F17O@Z)Z9p*t%6mHbkF9s29!k7!_fA5D`g22|CQ0$h^mW6Eu+HF0jLn z5Hs(Q=`0)Wq5GYRLICx|!r9a82wSCXg17gKI+XRGS~;US_9Z0u*hk$LVCEcO4BnX# zSbH9FyX95_^(!HH6BB2aH>f&BHIawSX9>>ytkGjf>iNaB;=*I@Vd!#ve2Fo7O{6^} z8~vh(+>usn5^8t_XLv&Y{6IM{wdG}cW^n~S0hPswFvOg5$H-3wU1&&Riu0LkU4x4f z56-ealpSvJbdYwbF!Vw|(XA+7P0cqq1A5xs_y6TJrfx zQoacIkZ>`-2Fbdxkjngeetk`$bjpkuhvdx0UX6{9yDC2fj7cjq7(a8pjKvq1+>uZW zPm-EOiebXjCKmF`Pz?S%Zd7ceVZ#5Vdl1bSNpoYyUZxq-WiuwWed&IZ==2u4=ZJ2+ zjIQ}YxyDRWC5syvN+92_ZP0Y}^e@)27)6hzyUZBwEA-eQAwQN{-6bVmefx{R=WdTB zz)w<$e-5qm>*Ax&-4a0l!=J-%0V2{AKqTJ(+#M&EwbW}JS5;ChGQ+N%g9?6DeX zqI*wIX}jfZ_^C+p>sxR(*YxqE%P*r~``)Cu=I*`0G8t9;6j^+8z-4iFPh9J7^jLRK zL?p5VB5~7}DJ*f+L==4k%Cx?QN?GV5MSLGmrbz7WNuj-aNLYJ&2Gdukg}?c$2gQNj zo<0p}{1olW4w%oxaT7y}GLom8K(#T6<{|;$M6$%-G&WRDIoD*B%TJLgp%7!@n2A-j zfrT>piS7-6ifz@JPb+ zcY_FMfK$~$B5@|cBS8b~OAJ0H(DIlaAv~sqsH%l%dx%6pu-^q_;2&@ll|LXhw_Q7> z)oLjy%>4o~Fq4(Hm4(3+hQVVz@on(8v&7O2&orplr^(t*r9(f)BQdqljPXPO(0!Ur z?MT{rA5R9Ve6l5+H}T?hRq$fRBM1kbn0 z+5GfSP!RMy@h>f-q9Mypo!FV>X>o}tipHS;omR)Gz1UN%l5I@wA_nAp=8$lFUu@3z z7`UFlh>!9;eb5j2bO9bY6{{1U?}?JD+7zjS>XzV(F{y6({Pb*aA;)P_*yKP>1w>hW zwH_!z?~Z`!P`7fX$%C96otcb&B_;qe7|&{9eDifP79A#f(qT=UCRpW2tb>1|$0om) z=@sD`h>!KfnDp#<{Pc9NArmO+24S7#kyIx5b|TI*h^7UJMDIx+N!(@jB%J43etIe> z%CQHMG|}Pj-8zZwlVk$t`AMEgG>&}?7>BnM04U$mo<-NW8_`Vkvgq3AdBRf8&yeeQ zCJnwpurIoG7muy&BZlx!uy+tik z+OS6y_K0>=%TvGkSpr&j`_xylGLet8a;I> zl;7?O@r`id z#9q}-b_PF7j$s0Q&AwFz`Wkx>Yc-9ZC5JF|o2xu1JFa_(0?#054L#$+K~EpK=rl^u zM8~1-o*6KW2NU834`wkBi!Yd~tB5(|X(P{VqlhvLB%kl9Cb5(FSwhF4ke?_&=8KEPIWk>+B4M{@@c#!PeT{5ZNO2??QBMadGDWFg69Q-B~!96Z~33MxL9 zQ{he&6%`c4E|ydD)B`JeHom8xB|X8@v;9BMOdu2Bet+*c&V8S0@4WBxJfF`~rt9j* z#jc}&5qCt6%NGRS)SdPjV*bI}djcoe%p~9!Gj%CRE{Iz)du5_IGwxH%${i5nIJ1;T^L7lCs=e5SFXouc1r2Z3}6}fX&-JU;W-W zPB0aFd>cyITHJM$?KRHzPNl=%tk~x%tqM7phDB3gk1Zr(j{1EqL^C|T^(C!M&Sode zRJ+?;8#JL?UWoUK%+1Wr&d$!sUA?YVX>OmizNLPh`u%DgRqvr|du+K>5gHmspW$>q z7pdQ0jDh6}{nlekC(Hd&VYFbO>_zi>ZRr+VY?XeoI=Z7FY9e*5O!uPTK3f0}U8oPO zIcvxVLl7x!^W1d`UH+my znvUg%dZp&@Q)Ct7j6TI|_50;GD#hb_amiY@vzZ@#Nm~akJeC$s&Td;svi=@(1@ryp z8q-gv&rJJF8%)KfaPeonffvL-i;6f)44~wG+sg4<%9J{#*-5LPa>Uc|Q??NM0`>b= zoPUbPx3jFl-R^SRmpI+6?hPIG`K=vm6}*O3X)!c7jEDO7DO>L0s|Rd{L<^2`=|?rv zn+<7^w5~HQimo2A1^BE`zh8@?Y7gBrWJ{vg_Bq0+<>COZ$YOrBoZ{lqXIrd(UkA|= z4_(u5vr|K5XjoohW>#iCBnt|&@<%248D(LzV1C}*VV-3A&h)ma(-a{-Bd!z6L_5U{ z+peRp{%d>IXQBH2r8wm@4?Xy^Ek?U~Y*uDorgrhHJj2B=RKMQ}$%P(z@h6*uib7)j zsAbsZPj~)c3l%S+m>+Culphjn(|(OE%GBRYk>TCoVq0*E845k~gDsZUEe#7h{PPdC zaUw~lY^8R-X{&IdV1B^7%xp8gX4-99VUom`#EqguI40ap_HU#q{xj9?0GuS!<9pj| zXCv*{nqa4gezjHjEK$2943v53w_j~>G`lx7ipqb(3|Fb$HVkBXsP;EoD22Wh9+sJn zY0K8OKvwqXv{kCz{*c6y+cj%*ox9!LTyHORwry~cCk)G{_c!bYoXx7A&Hs0t?eKfS zVKn=9TZmMycKcx_y_x>M;`r|FL+${MO&l@?1SKj8@%soma?EWuj- z3Cpbh=)^GEu{70-?)}LoC-Pge2}=d@9&@=l1lvb7)tV;YE!{4<#X{j%;bq}ZWPdXu z`*55nHHiVGYIg+A7VGidGuz$jvM<7Ee{_V>k%lO1IIr*m!wbMW42Lk@;Ws8Jjtaj{ zh@wemDG$4(I}`&o3N@OgWLkDCEsP#BOEvV_FSbcOE7k5GjLwH@_{El@jm8va=3?UW zvI=tz^M0Y)9SFh23WfY?OWk!xco^0GY736%hw>L@LARUl!eg0DFPZK%RhS~h=f%yU zkMM(VKiQ?I1fN>9I}^uW=%M&=QU?9!)(~vgaZ(8MS@$FiWO!%?{*~OfrOLGX#c&^b zeVmlyvq9~ih|xBM{yR=8rYm2xV@7|$jIQvOWPi+1I!5CZ-$&=vx#(nAcmmbl9PLH> zFv`!ChEY7*bT27I+cb2gmlRA-c}o-dT{$p{ch%=D+4a$^@zP|=G_^Y!1Hm5Ohv>4I z5q4c;|8=|+z(Yy;(EhWAe3q%*i5RNz>~cv7wD(Wp5xX9gHcrx~XOduk(mdPrv*~No zU8c>Z8u2%AmpD-j6dn~83X?E{BmYp4O-g{(=$?vG!D?hpkkaY34ouatt#+@7{LGx3 z+#G|lg5(rk^7%26xPE7b*KOXWcd8}^y%W_Nu z^Pv3lvWoHyx(^r2qPzJG);=5NOXJ2#few9I69w}J=ELScn%9~OP5*{3;51pp`^0I& zJHjPG;$pSCnu_;27W?4;RpDyT{{PwQuxocU^ zQt^GW#?{`cxanX^Oe`JpmjZdLTp#=U*<(I))$THk<$9>cPYTzpV?Y*b&8(uV(Z`}f zoAgE`R++C*FPIOQFEaa@o-oZb`G~iOcHwoQp0dBORr_45b}z-rRw^_zK$=LMRw*o| z02ZwX@1&r(X!LxT(IpVXjP4J>=J~4J9u=uut!%@aYgM}!Lu#9ctbx)D+M5^|5e@T* zyDKOtHuz79+Pw&JogVsAAXdYyqf$h2u5Jaf-bb%mqINHYT(rmc#5`9=^A=YF?M#h` zCUXFm^jfuh0S4j;X6`ks#gsP7NvIkzaSPN#jYvw5w3vC^>t zUQPwx#m-+tV<_i7N085awR;|fi#@d9K1Y;xE77^Ic&u)74HF8v8eQ%omfQ7fXav=M z5#hypIjgvE^q%p4=0Xtfr{x|;I0eT{j4I;OVc8i@$Lm=V$^`SD&3`bjFngI!nD(2x zOiN4-@fYz?ag{JEe8OftEHauEI(tNLd-euPN&Lojw}<+IrFx!*H5hd%R2zbwea#`L z`xk;D$J5gxl7AwWCA-2{mftLPHe+L!H99-mG*8dD!P)9u+Uew>^@S-PWDPY8s6ba@-W{87@%Fx(4N(=z<45A2i&qj0va3zr8$3VEpx0hy4 ziHV^8cVs`>7$gOR;h1&WF}^*Eo1D-y3)lx+pioJFWDH&ZN$P}2*;$1KRmW@2Dohv5 zkC+#k`c2oH%1z1eac(tL;d142)5afYZVl9f*Q4;yp|^MPX84d$wr<7H>Lv zwIh(SqG7(zjMLU=X|+FgEW5tZ9*cQpM+Y7650A$dkb+qyUxI-$h4NzHu3WVsGK@CH zNEe4;$!*3!s^a_mvbITf&6#wqac|IJ$n@n=-V`1y*(^|1oA~k`-`{9=tdvSCx?tS2 zHL1o*0j$b4YU6ZQEbjZPQMd*j7=>$476!utZ%KD6B3RQEbqHcF6R9rdy#=y~G3JDltGf3KL|o>~qu}_K!0aOAzgGMFms+ z2T5Uewsu)C>UlYamk&|RO;#*{qoVYRT?!7Jt@f~^oZ_(rlsN5`&Q>>L)U~wp{)E`H z9EKiQ1pq#y+6M=)x16e2nWfDy2^`Nc*QxIpdk#SzmK`eU3F zL;LmygvIDCe_?U9(c_08yVXWP`n)5=+s<+ZrHxx)*BZBA%gb;#XJpfcaWRS1axC2| z9`GwGH_zbEK$u?@scb`X+O()> zY*b84fk7=}S&KN&a>X*?e5*HKf4kX&`AhSq@YR1dJz}~PFz`+BUa?5{LbzHe7eI~} z{;{b&QS|3TDb~EW-AM~uqoQFq3h|%p+(N^3m#97L)6asIO_HE(8q%U7;BDs@=NXg; zgxHri3eojRl271i!ePDI69xf~Vu_@a7o`=@14UTC3r@i=u1%H-fwX!;FrJO8BtysE zH$)9q7>;eFj$;p`@m!rB*6*CC}YcWN3Tkh zWco5iiVoNG5PZ4k%p1+wrmswHcyUL?KZsK)VxQv+uhb?>3O&BhF$o?X16D+Ah+1CgG$t%SR59s zSnMVBtqL3$eSvB3C>a{7pxCIf%G911h$kqP*phYaz_O(st!+9CZ|O?)j?2l)H|}FR zcr?VLn=COUu2!XOWcB9p>Mi2cYfy%|$yma#s?D5idfC)&$`ZT9ePX5XjqntkjPigy zuL^LBv~41MlO0`&GL>gY7x=7FdvbA=r3&rKkkaVQeV9INiTx)-k}Vizys%WUWYGf| zFxzLw6AQJ?Vc0=4)t+p=U&WGH(%9(g+~n+}%exZoiFgtD#rXzB3dyXqCHMR(JSLe* z8s2gSMG0Akr{|nCDqB0NVWCv3J&afLn=F$^3=9jSalgtDKoXd%yaK~qVP|DP4m-=^ zz|PXJSJy`=Ui7j9PYfl`xEA(cB9*j8Wm80|B*XaiFrI~WOD}13yPECu8#|l8Sdz0P zDB7NbwE<0*laphZ4!k}Fxme<9l)2B5lFJ}5ufU*FbyYS+Fh6WwWgc&O(9~iIf|+_s zY!s748HQ>T*;|6bX-bwf)l#GOFr3KuSY}X7C#Xfuj}FL|fn8Sf-aWEA0)u zvfOK^Bow~0Mrt->OUbrUwPz-z;uOo&l4f@kU7r^iPyOYxmqWX;V#AGL4rV|!!(*Ak zqRvKpX{*b%mR{%xv6D7c2{}?gD3;T7h^2ZglgEhd*%22*?Kx7iWrf#OP?CEO?;3IZ_P^P1c19&Inm(`GmBHXwX@_>2k6SI(VVl!{C|ey z@IDy*#Cj|hC9SUZ1}E*=8xWfWRm$WVKlE6A$>=BCW0}pux?alqJk~aWSqGI~b zLyi)9K2Iw2x>)V0rcd*wDby8~=C50ywgO4!fvU3xqOgq%pi4&Q1lxmw_JxY2jKqBS z!nQ)ZINl{#=U|^8pOa^}HON=$@}+0V)8mD3C}C$9mBY^bo(C(W`Tb0E)6#s{nKufh z0w1^9!w?%xvyw06Qhx!6c+HlvCq&ogNpcLo0h_Rh&Hi6NrTUuw1{78#4vKGx9&rxE z?02-#Ws{`|Y+;$%2Q#{3G5|wGSW+1FWp~*78q+MZ3W&TM@>l^OaWL0&mWWQNqM-_yj(z+(f0u( z!_fb1(U?4DVIgV&4lrX3{^1bJrTZ2JWYIm3IAnGc7VE!OkN#?#uJ$mrk8HA3@g0!! zQF!UQuMYBAkcauoF32-1i7>TiA!IWJ%bb$7CijMn4IRz)PJ#MTPtr(t;< zrjw@YOljf=;t_F+xL%AAO~T`3uS_ZRf&OBs26uhxG`Q;_f3b&UF@wSD31)Kid7*q5 zs6hd*E_Jr9al0nlE1XR(dxg7IkCOajnv@-chhoeIi+ypavl;9S-X1Aeq{q{dTZ6o) ze7Y15nzp9_GI%|!N}Y|3iqcHZ{h*nSg(Z8@-sw^@pm7gFGq}q8XF!+ySRUg?T@Qr? zgket@={#&4M)u1+lrt5WrJ^68h*c-4Q-NrpkvQA|jg(o0v!redh@h4tDJU3NrUalsm!BSAvdo@ROqUNJ?iExlg#_Ug%nRTY z%SxSVI_*m`7P)B8(r^TeKs=JWSPBTlb21qK&AzmBQrRSg#nx&-m|CW$j-zLaB}t>@ zBsj*Pf~T5O!FK-Dbb+Zr{7igByi2SQ`h_=yHteo!a?Au``*Nlf4kR)>&#rKd^tYJjnoZa!J4|y-Ch;(~NtEz+p-XU+eK;o7 zD@^V6qle0+Oe~LHMto3E9i`6p_C}Y+9JGuO2RD~X!SD)t8S51)mUcSW79LLZClG5> zCcrs%%z|@VrS>w$gElOg1#QR#9@X}ydZn>}F|P1AYA@qE?7G&GYn3Z&>s<&H>9cvm zxEOExkWY!b(tw_a`e#W&bl(oJTuHOFrP@0Vr+|CgGIEO24(;Gn_Uob7@{0=%Gg7AZ zdg{*$_cDTnuhs}j z;BfnFrPZ~OE^kP)r}2$24`{d%$TN`w`3>jD2lAb;yx~r0;Y=x<{jtmR`&my1mGB6< z_VGl_?N-T)o|q~5&*T>_2@b*hn0cMqZnhxychI!nlmGzLB+k)j!|Q~pfF1<;6*bJI#RtBs=Z+}We#}7 zBMXB4=&3nUp=G(+%UH8ov0O&ZD#SkKc&A2CX_XY{gCPc&)e5by0vgZ;Uiee^INDz& z`9tUQ24NI0a;rYo?Z7qKru(5v3g+QJefW~G!!xwkmYJ7VXp9R6sJ#I!E?7pz*S5`6 zdl{R?ZLn<7PlC5d@?Q`HKe9K#i*B!$Y;<>}6dYWt_S#rbv2^N!W$yM)5`UHLG*l_c zNDSy5;cqtUviCU5%1eE4|?;Gd6I>8 zOMy0eZ=N(M0=p*}quA5emAaK?xC~`V6V~WjFakh8R6ZZC2SN;=(-Bsj4=~R$tF&B3 z#vtbnfCmegK{OWbwIk=!o<&>eQAPR|Dl#nGm1-{|X>e=9H5_(p0RzkAL$C(riVOzd zsrJTG(xZ;0^y#CHnLg{)UWUhthf*GM6zX9bjUL|qm?MC$JLt#)8`;a)7Hs6*k2%t{ za3ydB99e*#d?ST|)x)S3i|Yzr?~ShY9aQrC#AxbzBF#HnV_b?1-ab#cRahyQ?=vqp zPcS`aQZVK3i#KTj^dE)YWM2_m%u6y~Kk4nIN_{2>6Y%C( zcf1#^Tm)!XsrF`K7*5wN4A*V2S9fgb;MMG0ks8Z;*J~0MQdYh(NP(*{RK?Y9E^TzO z1BlEQ?XRlVNwo9USUU(ID8ORF;=?fvTR|OV&xJ$IivsH!Btw32(HO6`m+>nW*o`># zT34H0S!Z7i2e0czdknoWR|;mk!eAC6JI^B$R3il=C8U?Z>omo(10r}RSk|`5_PHI1 zcF%^lMKk*&W2qIQaFKgcAqp3HXAP9hSBN;#M>UeHg$=AiDx18E&0(f@;jm8rwradA$NKI6NVLPuek5$t(}U)Uv2NXkBI#u&z8I{vDk3hx5Zr&4-xT#V*ta83@h za|Zt%Q#egO<}YU*!w~tVWl~`9EVY-hFPxV>qayk(ez^>$d!E|MA>u-hWj7soCOBM= zy3AOPh}nF#ml5$4sORN~*l2NP-l)kMJ5po-x+Q8agW%s@m5%x+z2hNfG%E2&H;NI{k&3I!h5?4gV@^-l`5Mz>zv7z7f8we7-3k8k^LCa*E{Dh z(Z4T{WTd6^GN?^zvOHL-bTqC-YE0~_A)(Y#o9;&i7fJyvF6ng04I$%C6 ztoYbPQivA@YN_TT1gOvaCcz_E4Pg*{&y{wpX~QZ89YUsyB}WLJgONIB`xy+a!K73) zC?m}2x{JYpL12|G@bozXcl{LUP0wB|B_Sf;%V0iVq3SrkXz!i=i19@&x%kuZXn%hUA=B<8S7Ux(aCzSCOeYCyeR59fTvgL zrKv%fhz%IUMEnf|c(WD^rG-~V*tHc-wKxIXGe-BB;P0G(Eo`e}5RTIxAj`O9A?Q9! zkV>3bdKh5rZ#+W|p8=ClkYxlu*m(62#KwCWcjG*hm09j;?AWZwHhDVeloR)b6~uf2 zR*K|JRAU5vPqI6Awd8R=ayv1xEHu&8n0d1Dv#mh;QoSzcQc#uOkd zQsx3cV!nfvo5Ymp0?07YW;8qST$lua=d$VvpwnCYGXkh(f8Ye7CmeyucKZCHzJxhMC5(tUI--ZZ>grVwg8besn`*>oZ! zNML+sg$-UU{N;8?!e4%?%;{=#wzk<9Al-7OD;Y6YyyFy2f#w<%D2`wP0!O@g-XrL5 zF02YjF#(aP&=)Qs;#*zGh(Ph031274AsA%}0_S++yywV1=c>BTTP>KM0i_lV;JDso zMb@4oW(fZl-W6^@wn;=fRW|@#)V>mA)2Q@#=o=8hqcqw~wU5bz*e1*8Wv=FScZ-V_ zz7hmH#Jqd0TS^3N)W_Ta6wGI3PHg0PAR#Y5ks3%}9GGaMm)(*qO;`Jv6@U@^w9MJw z>eLY$v$p_8SUSe&TD988yZ|=RCs=B5>^Fj!Lq?Aayd0=aTDx8fj(`wz1piA20c~Dn zIeB19M;~RS+Q&=*?A<5pVec~L$5^QAK$=XB4VZn5GBI$@D3bDcaT|dCBDK#1NhB6N zumPqAp{$6|d|e~tj};Rs?yw_+Za4w{Y_~(ULU#h06u^ley{mGyk7)zw&J+6c((ktf z#B;{CcU&QY+J?0YFKrt{LE(PLqOL|g&9#EJ6!Y&{MzU3Z`*53g1M#GpJ~bURZ3olc zBmPBPE({9S!=u*!ajJb`IO|0o%4(D*X>I^9Zl&#wASG+nzEF%JrRVNOM7cP^1i~#`aar`SYpkbJ@Vl9Ot-w0wL$lL)=@$b=7)IN~vWk-B9C*SDWLX>#}h<-g* z6khOIq9tmdMkX{_zCzTt&1J8gv~Uu|RUnPpOOcWg)9Ygn0p!+~)b}xRJg($yRbIxV zDAMFGj58a6c-Q}N)VIOeF6*@IWe3Gp8F%=LeSpHkq&;g9K2F z!q6YL@>5xZ($S_M3m-v==4R5OYF*#K#=g}eJsXVaiGv`x<5Li9X>@Z$nRfd`+e0{$ z54q~aU<(Y3kgoAaOJETC7^lM^3>ps8T&-;%IlMu9XBh)&^VL2^>&UvB+=@V&rn+~3 zX7_cleg;QwIR9L=kBO{YkEI_~1RLB4pyPk(PAM{xj<*8UELHm=Au!8B1FZnynwrdO zla_#9=nKaH=!F~Gq(VL6S4)}bZIeP`{DnE}k=}#UNE`OTm8Lx4jJ?Q(3K!mEU3k=< z;ssTfM@yb^WH>k@Mhj_W85BR(M=mZ9tN4v8QX^)>-ldja$)30ckLS&3Faey(HdR*2p7J#cTYk;eW+SqBH zHL*j>ChB8)AXV`b%23JD>KutnIU6GE*i~AJM6tnY&r|!D8YosQzw7do?Yw2QNHxuT zITE?OOoN>0kYpg9KIR9Y(tl%Fy|x3h?M=xWC0l5j+Q-}gT?zB8E2Kmaad5(7kNf~i*qqE095xgeY8J3ouW5MDQtF9@GH#D znPsnM&mTAv<3pEkk^-Yy1zLn!e(mij^?22E4P4tN!5erBM+B1lCzes|la7Vt-Xhuf zd<@?)%eJzP#&&yEM-!Fwf_gc$1&NYa?+nya6hHs6)=uP5H0o;F`x2-vm)ge=9j-^x zC5StsDj)*!P+r=3#^j2%Y9AwYB(UCkiIlCS#Kj`NP>)UL8f^kj$iN*Ztb7{2%vICj zq-Ys8yPtNZpGG1qL!VUk!L%56o-xLaXJS+yr}#}MQ`(wP?t|1Y#1+{? zPGm1W+vo&Cnt?i`$Dbn|%yw%`O%$Z_wY^fzdxf13R2z+&HJ*DL`<{o)4ag+<1n$S> zNOtWPuM<;*&xN;yYlT)y+$znZe{Ge*Y%|opxwv+u;ul%&Y~4VfUoi8zmr5xiu#XI_ z6FhzqNUUyiHMe#;H-PIqiV)eYmm<~NsrJo*0PNQjm%@H&`3&PP!vIVdL+^|5S}w!D zheZx6)jo(U?v0m8)fT7`2G$jdUkKGs430F}E9k|Q0d@-9h7dQNZWg`28JR3QN+QP5 z)K1BPfIuI^U~H$ra;Iypvyp44=C^1BA!gK@?(dXr?CWqAMY!S@P}a!_wP!&0`pqDm zD%C!nkMfhtI@$ro6lXi#xi2;$mBBpc`eYkTKE#=y%23W0pTgp-MzXUFc!6hK66yr= zH%Kv4{OYv9xF2<=N1;6xicfGy5qaF{<_!tWy zt=tVmvZU2n*GW62Ks(L6T#65ZvbhlBP&STo*JjuWrqD}%Kqz$g<-o=8pjKiS9@IZB zhkteDOr!v@{*BUZGuLpNkX)fj`X$qG96Bn?`I+z*4E6w)jPZ1)LU*dr6PmhzUqw;~ z6bJ+1Y{f5uR&SR=^s+p@pyslTaXBE%AQ;f$qU|6(wE{lPG~B)&)GKTt(@N=zUtGDf zQ)4=pG;|;s1X~$Do=qU`2yTk>U6hs8$#bY2%RoBlZOGsDM<7NOr=kw#L9%ZRoXIC+ zSent~mtPLT(bZ{3okjiWdLzxBKYE2Ev9H6}Gy~xF3fw&BDWJSeO909;=KtWOFf>hQ z^2?>#_rp_Z*_9|%!LN)xt{E8V;;uU9) z1nxlfU|Yn{(3Mi41T|QP;Ute=R=K+sZ+}}uDk^figT1KYDk*@y2|W_+ms!pz(U9+R zWNRuTBba-HG)MIWwl{M-Ns8Yj!x1G?qTRtMS3qyZoGVDz>e3l!Nhh608cKz!ASjiI zBP(39Ke=3bkdrkg(@^)8R|w|Ep{^oLe+N`f7yl{#QJfDgE2d*Zi*FtMCw0HD?WJ z*TGI>VkWzZF8U*m(fGGp{s={i0p?-G44hfWyxmiPuR*bl?+d9KHM;3N_}b{fq;VQ+4t=F4XwJ5f!0%WJZuv zsrEAt%s~C^vyKpIh>eJ#!soySV1TjSn1Q)}LQHIh+Rrc#_N62>Vo`_6O4Z zXB}BdSj^d3S%#Bghyf3_@WS%eNeDu;x)D?10+>rNM=~Rv^Nbz5Q3}NF@0ZRy3|{!0 z>&#aB84bZ4F5v6TZgoQ20belPs_EA8xY6ifwcnqmgfUX~IdjU?ek(0_-jPZ(9}e_M z1Q^RIHdgdvoN-Zt;y3T~=|MUmmaX}q2`@Ng(Ea@uU8LqLkry1nK22&rGZ&kXrTcZ5l@5N1S&5wkg|9`i4cd1szp_+vtBE8 zUxH#Nt^B9u7RepIQ02yJBn_zwx>F8NdMSC=4{knKi+#oIlHh2bwF>wHO-`Mg{x!j+J zGr>G5vl>y;PBW&&MACw{5`AHwn8wUDGL(1{28ei)W>g|?bhaz4_7ZBbN^$HTCNi^T zfRm7Bgb3-TbEUoL!`r0vuu`?3v0sYYuW^>MwY_1J(%NLNLfY-+!xQaPcDs}ec-YS< z4~Bewd1te8O(WU21;o)kw@X2xcwLO>V6WZfD-e9ulgBR5owlEDNAfKs7{@`P;rtTd z+50sp=kcpA?`W=f!P1QsPah~s^NwUb!-!pQJB;gaJL|}Qmy{mFM6NO09RjH|ewS1V zC#K(_i>}o~55&(nzG$Ur3f+|L)u^^a-WZgmxz;ulZYH% zL0nT7iWR|LIab7`+1V(X;?Ta*2L8+{*)7=`&5L(gSV%AYSxSY`qgE8v_g`jRV|}fk7HTlmT)><1(&{Yw~NK zosm6)&zVyIMZkfUqGDs51@pl`Gg|R$gEZaXN{%DfT~aVA|N9wQjv07tWPp+6m;v!_ z{RocuVxaY$Q!%<6GjRG;3?|16@To$vM;JF^k9cNnW|o1|=i1^lJ;Qmyyh{oVifNVF zpAY$^3SD@d{mh>uK?Y6VmLo^DkN^Vn4%H z+~XzspjI1(Y1VGhn2)wn?Vkln1T=p63p|~_twcKMtiMV@fiMi^7=U5u zu<$snZzdyhit`JN8yb&VMpyh%K!C(SKp2WsLTLH6f3@q2NPcojt*aV)3% z_6CG&L}vs~K78!a8Jn;6Gq^-D!Zr6I8G%`Idi`GMLimsU98QHAyn6PW*(IocsjGwX zPoa}rkT=13SJZHylpcZGX3&`4^q60e{y=0+C=>V|d9I-=+o9f_!s?_UH-Ec@-ulFfD_ z&k;OWLqv>L+mOseR-SRq;DCkyj|0eFEPKW088fYL!~*>Y^?aA0Lq{B^yH3El-VYV% z50>k4Q>OT(cnsiWsu(X$K&YpQ689le@yvU{K`~qyzHLX9!-gkO1+cB73H_i9Kmb-5z_Xw?H! z3cqAVo2eeZ8)r8Rfehr=E)a(gRWm5?T5gdKN2wJE_@@)v>G<AivAvQEyw=Y!6KnqZ+3sdkqAYT4 zbfIdBd*38wgT7*~aI7(3p!PG?oTm8wiJys%?L|lDnr<~z(?<~-9ka1)mRZ@zmexs@!EclnnrH$+daEgsi%|s!($!57L1#X?idux zX2^lpxqEi2yKMu~zZH<1Aa1ZtVUCPt7(hLnAPdwJ`7pFbVF2P|TBX9;hk>4!s{IUm z=QL5*!%`w?9bUBlC$B#&6(fMz&(IbD%-TmVSK8fbIm8u@AmJCIjBm$`UVn4ic>41r zl0T{o`WfWHK;J<#9+a|z*&>WFm5}gI(SuOA#~zeoklfVIKo%i|dHWDjxROILtSofk zJtj+&dLPsR08YWY(_DpW&(};_P+jmbk{nvVig^nsgzL!uo?`|bIUuE@yVAgT{Z<~* zDh6QxQ91w;n+^uW#?UQ~Av9HTP^!VA9$=6O&Go<;!7|hsXk<7)0Q4!xAPshdu0JS6 z0O}7gv;=U^JOD(0I4CyE4r&Dd$uBI(HDEaiGPVR--$&U80LssZqO}o34S60A6?D=2 z{{KYboiHrTRQ&FxZK$o$YuE02RJv7y<=ToNcnYw>*xu$R*y$>?{J^jJ=BVtWo2FhiA;2 z>+yS%_p0_bkgtdW>Lxl?@CxIXYj6o5 z&JdOP%g3+^Mul&EObQ&ykVL}OZu0_^1U#YThkt_P)_KT~yblIDhq7OBOvLUTh{IWC zd2V?XJ-amZTK1|V1htz3cKi;9Y~L%6G)k&KYoY(V;^6eO0mg?|4KG)e+ACbm>#6o5 z>+COv-7RXCg5l(;zH{$@mNnKBs(FsRRf{=)Pyn#A<%eg^)k z7NPBVMhXp)g^Tpqk_9O8Ueiibi786_4@JG=NMiLJ<0Y#Dx#WDsF^y85m!_f6ae%=b z^u=*bJZoR05vO%*|^RE@vxOc%i!< zrweikBZykOF(c6i`Go&1Pp@O0jWCF4fOgpI1~>K*S}|O0N=Dtw^GKVo6BC4g34i4# zXoaYj8z`mCN06(~@-Z?UzdV9g7E{%M5?moz@%xn>s4R>W2)1d`2jQLK>B+!~8 zVASy|BfQhU#?$5(r8E#X1B}`Lg+8rN)^0&^9638d8E}`91kG?6p$w!)P}{lEl<|_3 zk6so7jM7jScGt_O3u7-UZ)9e3jWg?~4lrm775qM~P@Ii%)6@aRYN3kXN7}z@Q85q` z+ASEHhhb6}yTL^|QK7`4B~IMwP#|#&7fuK+Kvlq~Ld5|inC`=~58#KK$Z0z{g$50b zZO5PvB-sb252$pv*EJw`uQ^$yr5tQ}4lxF33XN0o_`P4D;9l${bt3^kt;+Zf$Y`Ai zZJd?(qWOArB~13m=tbCOnhq-MPH}-K3i}18kV(l$9a9chzwUV4L{TqGo9T&{q+H7s zb%5h^9fIFUdhsPVBA34;*`IhtGI`mVU`0yI!{$xq$!Ku+v}r3c;!cR$K^A<3$XF}I zAC(sP;|4i2lcHF?D@*25aerhob-jr;HYeVaG669L8tBubh~OfaXbXlfoR?z^ZehIM zFb-b~cS1*xO7h{YZ%BX8m}IMfK8|mjx0_2$znk`&)|keN&!LN^oub~9wi5@* z0g&OF=A+JL^u0UP0e0{ZOugkD#7wylp|+~&+jpdZn0e|z2Sy9QnpCBxMfmX7-EiFe;-T;R`A{DD&rOUb2K3{7V6~hTbyq;0^FnXC~>Oc!* zD?Ien+sG}}y2aE&8e={0baj9o%W%c&TZv>fT6hwLxSX)rKPBqmI9w#I$r@d$puV-F5m(S!dVczzl!}6yL5_EzphkKh zs^z{Ql$(`Se*km8=omWbXsPbIKajQ~Nn(IKOXM`nJBB2Q52W}Ay5|@$ z#X5C>T}d=oeUS$=^BQ^_i)e{Dz~BcJQ2ED^qp0=4(vqk&lapi2%zfOuK!3i|=Ln&TF>L7a|*sKL~`Jw1Q z4j6F;v8I2GPd7&$jE5k&-ASK-^wkPiQ3o-enm&>I!Tb)gk3D8oE3sbrsg!{vqd|74 z;}mONWhWY;BI`mg^ndYFEzmp2Np*mQUwjH!cxp#r1bQX#YR@Ad?t*FGurM>C>&!m6yrP@7pDY8<%p)+-*O}bj-CbM%*~^ERR;^H?<*;C!s*bB=HSuSUqU-B zR|nZco8zJEFEKk+Q(`3Q`d5&z*3A$Wa|}5EVfN0>5vI*J72W-{w94X92Xi2@O|h2H z%rBri68{YanEF~O`q83=EV=(J$$p#E!EA4|KJrnlGj*xG|HduPMhaI36Bwu#Ee0|l zeR!TitFS;Y?=vrkDI?P?@kdm4T~A?eI&Py&en}0cgWth+Kmk_Z>L7=Xe}_8?c_%T9 zyuZhuzyR~zV+JnxURuB#jlDc1B|QHvaGpjzAV|Hd!nHtlY62WTxTp04i-&ACz^kt)Kq(u9AS*kAJMJG zavrR8h8{4A&%Eh~W7;bskK+>z!i;3IKJjSVdl%ZAOgH^#dfap|xR=Mo9Y|Ih5O#6X z-Xvs$3@*dj@)c_>{dPT`dHG2+_qw466Td;k%oULm+wE`(S-TIAWLwA-zjta$ktShQqjfj@8 z?bGU~{`C!(s_i=|3`vTE)sRW>SeI3C+f8I!pSF;c|1Eaw#p+-c1c2}se+xHE>xa9e zI?_UWFglXzUB!)C8_c1mcMw>)7HZTcJ}x#RUGfWlUG0*CZ4|ryuu<#j;I#BWZR2r5 zF{KQk9tgvA=N(3~RWu|u)+CYOty7v6ipmyN)LfWt_pygLXdX8ePr+L>!#M9vwy!UuvygLYn2n&PL6tOUR z2eB|TQdt|#9g;3%XW#;i!qup&Qe5_Aa5r^&;WI9TVq3$7;NPx>qJxYvQ#DRf7L$SI3)5Vh9zxf3V_|JO0iXB3KS(wn=lnx};pWkCbXe2C zBSHrT@Q4@B!6GcGCS=Z_d|o3wVY7A0b_`>S)7I;!ZKUq$=^5z5hPGD5oeqh0MhWWZ z$8wmj4l+_k7;#5GjMSN~YuW53(1B*tqi8%BCcY?MEyf`KSmmZ@ zku>E;$;Z#S9ldU_1vphiXL7XnxBgdL5SwZnE(j=l_m6ijlQ;K6yXkz;){2r5JZBH2){SAuU#-1*G=6G+6%SCoF5|alPFj z_fH17ZRBEbA;v+t&}DR>FFJ@`8W$6t&M+6-IxF9pN`pCL9F*j-URsS-FUlIXR`=_< zIV~0^#^TKe>t!%KI5kIxuqP}(V^3&J5Ag)vH1}soioslO!f3I_dI@qH(I2=DzB$7g zBx0|3b2e5S?fqH05FL958SVoTmJI_EYDIM#^1FE$tO36WKcP{p@&*_2D*DqUA^7qq zbgTwK!UF&E$Ts8EOe(4$_u&oW;f^2OPvHCeBv6l zO8_^*_~Ja$l>ZyZ#6{{51MV3f>y`A;k7z-6ViEk08-J7LBVI9N#t^8P?|%a|Gd(&r zgt|&W*cSed1%Xip*yoHUYYwfkCb&!;Vu+26bpD0e_dD2UR0ch6u0R^{O=zOrjeZF8 zP!;qj*94XCT;N4(k2%)S#U|NDUwK&2nk_X}ZB?m5?A3!RpKp>8TjK9EXbb;Klg!lo zP!LAJxc_dFL-f%Cv&-Z z3V+$f>s_S#In^OXzhJHs-gQjU@m zUu^Ul#~s0XgE?(BI*&W#TaKVDl~u^+Sk@Y3_Pu0kHN_)fd$qV!_*r;XxRmVoLJU@kKpJ=Jee?Ayk>g%+uyu+$lz_3|ChJ|*jkJ4dcuX9-%*==xDR+o5yoA`DBVx2> zoE!u+G{nFX3|7}TIe}*FjEJJ6d*+x+~6%o=m7R!Z@fJWFt7yvJTq|1c>Q+AtF_4_m`V(WCwA3lOUF@SnogU`w2<(o{tD1&?TLr{~=F%0fnkIt~h z8G&j_gJ_9j-AnfI*nnsN7YnCLU+jiWg@;XLL67wwO;F6`GLM*8_S=DYij00cWEqA- z77-Rc>7KcAY#4u#1(Ny3Jq^he3Lh_L-LeyXim-Ho5KA9Q#=+?x>z-=GZQtZXmiz`6 z2L-TmV@Hzqp&1NN3==ql)^{8C&^GL$On&A5LNaSU#hiqq)*Fx&_O^J1I9c>U1NoZ- z4+hzkFrdOtp6MqC>q}^(pZr-6W}lHZX8+M@I4BvjJM1-jw&Z0?!@TJ>t88N#j;Wk0 zg9$Ivm$%W&P}CugtaN(F+h3ll1;xnaF9(HUp)fwjLOD>~ia=i{a%&M%-?bwN(dc7o z{u9}qRF{p!wp(!`Go$YNp z7&+MyU{3%c%0SWJt(U4pjQas^9;(K-ve1P=Yok>ACOVL{Opt?k17$-18)!e)-~Ze| zBaUu`VEzytwbvkIa}=F=rkO(U;i%h?`&^8V#q1;dg75@%mLFn7wOp~jM0-9&2Keie zoWZ}&J^NRXVDCH1C|Q=TL|}f1DS|S^`W)?)71d)yvoI9yu|6}Jw7k0` zV0@ZZ7so)qhq3Iai}a?W~xIB=c5(tQRx+vqacvpVc~KTeYY8?fr|*EbcLO5RM-vb5ThVuV{HwW3(tI(!b&H?WeK$V z5F?|#@}_;)mcpCP6RUm{Wa zDtx$R5~W4SX=II-s{>2aA%-TP`A^oMvpc++k&MtAqvaq(Vul!+fX)8m^eFN`wbpn4 zik2Nb-l30wer7yhAFqs&19_Yg3ywc${8o&!7G*3BE&3T4g$9mNYyZ^>$WobZVm)f) zoABt2)B(Ldo!iljvVo{oz7hfu90Bimx1c%#@U zW(r>mw`;5g%)>CFHNd4ot<(r+Zh^ZFA6@i(nrfez&u&6CiugtqOr<)^@gAtn0qp=@ zv7<*&NE}|zEOnTX9oA95E|Uz}p8B^&hEU6Y(=7?`d~n(^`Ngx(_MTctkjDj>6@k-8q7a==)dvYcSo2 z7B_S}N)8zz5D}?(98s7!xWYS3vrLI-_wu@UjaY(QJ1ts~Xj!NZvvZAD#qab`I;P>) ztqBqE!gx84apf>up%9#+SbwWQsdKB+PW}a{6NyVc=;K7$766G5UEGsX<`Sbwh3AQ7Rjo_CzKSqv`WOm&zMCrr(M z%iS(;e0ozxE$bmRS)KzrdYC~X7U6$J8Xz)Z(avA>l-Zvw&#Ho9(WLZViKpUO~n%+80fAB3SR zh9HbK_h^@>(Z8}!Y|KP`a&rrfjxuhSewmzsV>S$E6J16(WufPk4w-h{fy;_c##Y}lNA36BL~pkKG6wOj~YCxOO->BzcS1i z6sPn)eM&v6?O1;3czP~X_Gb}Boe&v!j))iRD4y8Z?sbVe%vf}m;*ZYlX?QtWyPn;@ zhT4!5!%ft(iVQ9tq#2>2Dd*K`a{Q<)_#N$OjGA|`I?S-OOz}5SO*-&QotPG*WrS(D zAjXu4Md~nP*BKtFPKOTFn#^%=Z=~)<8}Ao8i{UKd5)ZN{?P(>GO=(5PFh9 zYl`9@M1Qu&rJ@gn*3TU$FlbyXH^!{#ihm$1b{*Osw|3HkC&Lrz-AwpYwdycqQndK7 zd<>Jlyera5_E&?fU<~!_7-K)pb?PvqQLvhwA3O5&%pSHVP@~-2((q0$REHUiE>@`L zWBB;{P_4(`Z(-DfUSWn1{YrJ1!Dx-g--fn2=q6AW8X5&G%!N0wvSa!o%ut6Jj7BQ{ z{=AB~0}_g*G&)*y+>KfkvMIXk$ZpVNOL>a$A54+KIn~`qq}*_6OAY!ZeU2{!>_^s= zzxcFxGrl-DB-}4ljU?XC4cT%uK14QLg45$eWKU$vj**B}OVoJs&XH{>I2dN1KUML! z!V=*X7{4bhM$@JeLI@$^abC&X8xrBOTTe ztbeFMOwU_lDHdQD3!M{kj=;Sqq~H+`1uF3)^W{jB>Neev{#F?3W%Pj@97yhpRDOsQ5eR z?%!a5t12gkaA!R)`tN55*+VhR!8n3ag`Z==YF`K3^0}iJNOYJ%D%NLGjk~^8>pqH> zgUmPPp{b?;KEV>rhUA5Cl(OUued<}a(92nJ8FHV78KXj>d9v{m5AB0;*1jdVJX_{20>i6u9;l_PJgB7y*99P- z4_Ua>o+nqcPqYf7sG)d053k=XBKYf_FNcKV`Pq-p_xKmoC{0Q`9DojVm`0wfVnu$H z6Edhf9liiEn8W-UuBWV_mZhoqt_!!8dLmzzSzzV=67VjNWw`jmDeb;z z7~P=wXM$XIM9{%PDEfPshKCh$>aP|qKl`K5{z8*rzQJ6N0PK6Fou&LH_>H9@&i$$y9g_l5hPaXEO_Z{+&)Vy%v4UoRoYMtN(rWqp(9LR z`G^E2iwR&Z6oX8WY@;p3vV-3`!$Ac1_ZMShYZ-4^;?rQU9Dojh!wd&gJpLtTPUGA_ z+$)31C(9}Lc;GNY!RRLc88p2p%|Z7~mL>j`!5@B|uKgO0%F-NT@zz{*n86=tU+WZ5 zwBPK<$HcTEqq$R{PMXwVMt&XW(=ae;D9yVJItv>^mmuWGH zVFrcgj^2(@h9V3Kp?l`nD6Qzxgjhk-8uZuUYRe2ZC-^)X%!z?R#vvQ^L*|`(2+5^# zu-6K8xPvUy8pVGuDbwXd{qD4Hv&YN;`Bytl4nslpFatZ7?$sizo{g$n+wYfvoTyj(rS@Cy{io3lV+ zXfaQI=UM}fF|QnwjJnQ|q>$Oz;AQG5Z;WE$UsQu{JuYz8AuIoNbatwnEeG=`2huRQ zYV7DC9-XP4^1^7e;(uWc+DpvqXy3y5HSsi|Laqv!p`KzW20goiN6VEs4VlA3;$T{y zF-do^dWxYLCxTR9QyIR1$4{hr4Mz763ve66vBbJ&VgX)>1RHpfoFbQJY{oE09cD)jTC%;EUOqsQlJ*uq!=s&6R- zv0nfV&oT9wKF~U+%o9%`&SAmlANFhC_QEbb#dr<7^zBOQQf`8UL=J6>jtPa9tEU*X zL0PSz=X5uM30ho7GehyUNDU)(&4Cv3sHYf|UFxAn=g8CbZ)eI?atIGF4BLj*@m2B+ z-Rj*`g-Fm+^%RHwP!{+|6}H8HZpEj0f2fkDARcy#aTzY>szKK@z+SDnWplM$W+_om zF~)-SUqgQ{ms7PEVV*H#0}_7pO1V5a3LWMqt#7Hv=@>WRbhS0h7HDsl2zUe^k)sJQQ~3)Hn$TeX{hYg?^#tJY#e&1frduHz3 znRnjzJm);;ITDZ_o9}KaBlmWoXNu&dteIp$|LwJv<~3GPRQzaU@FdKI?77>N|%F#%XZ>%!|7 z1ZylhxH;~W6nG3JXham;tyOV>eM|t>`nqt06qgYzzGndwRBFE*k;+~S%X#)O!B;u3 z6&A3OO6iZvUuZ-PWkA4GPF=XQAXvSQD47&W)^GPOu{MpCOwmxaZy{3$J3&&M;IW0A zpu3J(`}e&X5YDiV35;TotJddJwH@ihoJKU&vy7#Fd1eDV&`l4AUJ;rX@&in%Wg%Yg zgWhsT9e;Ajrp5i&*~cZv8eD?6!l*!=Q%A$pmJ(ih z)-1s}tXbRDqGcmf)zK27I{dX8(Kvr4T?gr&Zq%-gwb(u;NM@oHzDxa4E!Ls*kO5Td)X=~2EJ{9ZMjZ=p zevz`48!2!$kImu4c~8g!1ot>CTI12mfMs}ffd zH&|pJD`FIEv1BE03Y5(_b@NIiGH#ZAtdM~*)#3XVRKP-Nq~2UwnVe{^bVHdDB}M|D zF}n6gjUYK6n}QMU#p7i-B7(D0rCCXKW~RIK#uEFOpy;{P;a7K`>lEUUTD91i(G%1@ zjMRPKkpI$2X?@57xHB&k)Xwl6KS{+?3;&T8MVF*w%hmdSq|H-lpQY{SAGD82a&5I0 z{xem4O+tpcvXUV0?pcGw_J5wXQRYx7!$g1^KPOwI3#&lcFUq*sGx& zLnN@58w+I}knAbzfRb4et^T&mI7@eT$aND)%$AflgkeawY$I{CvDfMg_evdSCC+g{zH1ncwF#%KW}< zHS=3bhyH0bBo18DRSe*o-t8P#ND@-YcZv@WH~a9WXXmMpR~vr#r^f^+xbl^+ylcU9uEE0+> zT)2j_>maNK#m}!X4E4u##>k=E*KpbyP}jK;alyaB3R#IO_n!A6D2BsSLb-9CTJy)W zegt{N-OqE=%ZltKff+pMH`I!9?pn8@L-YbEDzH_4?og$kAjGPO?--vG{jua(SPMFoLf(`l+6axDB<-$e^#gQtJ zK&MLG03u~lUrbW~qfpJNFmeZTg9J*jfWN$Ov$eizZLlUNjiXi@BU5yH#}qk#j{Eei zNf&YmZq`c+H&?=H2W~&lE>*nV7=#Scu^kMu7`>$y# z9zzP3nfMsGBE0y@0^19$@Lw!!2yP9oM<9yEG&D&hUMn{Y?cojdO!b7m z6uL8X10)x>Ev$5mb)m0E*Cx6E!5gfh2IO{rmrsa(dIUb|*cU-i=(!zYg`f>C0r z_tg-FyYzd?VFd`QuQ)btj@=Z_=$N|j_juBkRT-t5tj*Fkv%%4K5>k?@5ZW2)UGu!xoF9hsIVROxk~r>T-~9R?Bvz~JrE45nA{s*T@ZnCN~t3E&@6 z9sX;v(r`XSL=}0f3*4SGhJyVu{MAXrv0{kIRDs*MJ-HV>5PEfJQAkI~{UIe(svJQK zXBCRYZ+U*A_oAWPI6*+{CZ84uYbrLK;M)|^`NeVyGKSX~k*IAoCCcxp3;#Q9Ign#1 zcPJB&#l-YejdezpSO`+W;*--YUc*9ey?`Tb{l~@hks_u?7`xi4RmJa83`{%WvsF^P zF#?f~CV@Zf?SBhgg; zpk|}xSHW@?@7jCQ`m29zGDfpkHAP~>UKL->sw;u%@p2RN*Z1OMJG&+!ki#(fSA-5G zuJ{7%TUp<)@NT0;*zY`7Nf2ak;yk-avSE0}-*vAoPKRNUXIWA@+LM{RXo1?h(ywAC5Wu(HF%*YEDt9 z(XLG9h(V^>x78RHIoWQKKnD@x&$}(0x?@VEV7m0mT3{+skJC)m+FBz?mP?6Yu)AGd z%kCyr>+y~*GqDF3wv$Kd^ArkM>ozhN`61uKFF8LXmO$|;x`X|n=cwn9=X?q*ljBFn z*iGWwkMV?e6j#;g-n}!V#HyjHqJcXxi81a(d-s@{_)Ro|)N}$-o42uM9o%ND#EEGd zj~PzPN86Zdsc!^^B+7HtY|gRnYQdFulVICYOKsQ=o95nOL*mpk+d=6(48g7ot?*{G z{FQ`M_28P3@hL22h}OD*I%}waR@TraO=)RhCty(@Dct~gFa_h>Z}(igX)MO<+sBG4 z`AJr_e=5zXHPhgg9XbTsBv_W&@n3BaY^YY(4IAlK(HH9AYLnnv9FqSO&zvd{t6pUh zve5Nl7hGtJ7&6;#60k~)@dvS(-dJzdRzLv|5!glb@k7;bF9gps-6dGUbpM{|zBwp$ zFzX#=p&;|I`i;zX3phG&B>hXDj-$i@G3M^`+Htc{>RcLNhedE zO5bhds7EV?_fbu|4RZ)Tdp_TnV?~@*ELdo>#PQ(9o@@ts=M)g;r8`NSFm(mgBv}!C zF%4D{288-i8GVlc&u2rZ@|>S#e!tU7Q_;2ib4U4~O_7Vg0@5p@w}xA{EU!8wh`MeHb54sbV!VpUzr0V#D6 zM$Z9Gs8hb8o12m2@`>;q1i8cDt+t78=$bK|YJI>at;Sxzn9-4S5fRHQbJ-EgE=i=Q%qI3@^_4B>P z3|a*>EtE^LBKmb3Iej;k^($tdcFOMFjf?3xM|i^zv-O=t33?Dl!V47FU#;T4OeNm1g)gVy-0C>L}PylsZJhcfIR}EA1vhH;{P$eI+Db9TR^4N=kMZ*m~-~%&Uy& z)r?DwT>@bQTBEn}+e^5q^3-JMCdVdkooiFUP~i2chHAr4jA}LOQX{E5um%0^B|1~& zg#4RkQR_oeLVVsgycc`(Jl}Zk_FOG;19u`Z0Hfu+y@)x{{-hN*wBUp5p;yqotVQ= zpf`r+{!c@J-WZPWF;w4OV+_ZEYW6ZT)QZS2wrU%}v9xRUt3}sp=c-w-He=%$tJv-= zD(JFmX=Szm7r_ok%)#3cV_mkfPLZW-7p@fx+l%StVC2TTdGl-{7x8UuBDwku&Wd#B zp-m6!f%-d=@=LR;{w_tY^fPnAz zUdGe>m*-yX8_^G|_9i2SSXHyQ=RDFmJh8Rb=8AP{VSRkJ2>&ojB@nb~)(*K9FK9(GZ}@(RJlQGx>Rk| zN|(z5N$TC}j7*Bpn+0ZPR7Xr#M>mX&a)O1L13Tk-BV5J>Xfr;|HLhiIZoVF<&A32q z`k_32y+f@9Y9qRZ5dPR~_g2Z}3hL(f78ci6LAUgm&{p1;k)S*1AP>SnuBU~$;O*1R zX%fhk)aI_eqReg<&`sF>&<(uz(sqKRGP>Vx+8x&_AbX@0F+~~g4~o=cN$SR*8d35y z1!kWzbR=p>pRrlFHDIR9`Fr{uZ zrl}{sO-qosFPU>QkCt>d^(8F1CNVDAk$lT5a7(@w+RfsN<8>@PY3#Ie8SMBUIqsXv zW&71nZ!)G2s-+E3vjdEb)f?c1yp1B+x-|`N(NpHQ>>>e>}J8w zL~;rhksPVJMK%>q2S9tQTT-aRZWi1;)ry#}cJ0IWYiLM~SK?QOiKUuylaZ+dO%c)* z?itz?k3u>5WjxrmAt~N}&?50V??UDOCT+tx>zCQh;zUb;=vL63mZ!S>R<5SpZk7bk zx;k~=twxsG7KA({At<_-@r$zEvBODrv$)v2>T4D?N|%`UVco6YXWwQd6H{pxG|KSm zQ-<%m%`hk&Z5BKlX+@mBXtvWMcflm1Z@l~zSC9=efuU}*`Tt6b9(9i0EGf%Kj~u>i zuH7t{6z_Z0qICM5Z}wk6lY)~9rCI-C^=$c9nvsB^KvN9Q`!T~QlH#L#XHWDg&TbaW zn&Ua+K~wE!0j@Z?D;N0-MK$rdohgaZ>M|@@$cZSx_nZo2fvp&?IMrBFun}wSF`i*J zr(ztiB9<4^bgP;Wob;e$&jioRW&1=r6KW7BOO9tv%qJbS*2qUJkckdM~ojWkJvS1F&9vc`TEn$ z`>Ma)Y^1;;Y!-~1SQk-Il2L|a*2$D{U%$L%?uZtzk-%kMqjGJlrY;znNZcC!6l8JN zjm1!qb8kcXZ5WZ=(P#X``$K1kdMQ*|LMZZpx6vC5&HiO+oi-paPAxrPgsZm?7(V#B z&63;$y;pz7?@eW!(i@iN6c3@R5UPD(h&(7YB_=vXlxgChR%pF0i#uxa_^lh>o9aHwz*L zR%|J$KoM~r5)i~LE&sxbB;CdfnGJaiwAtu+d6wACf|Ci4wBALIM?!Is5F8$PF9o0Z zcC+AQ9MM&G^-VxP9Rym>rFXJmET8F zlp(>prwl#WJtWAMq1|UVN+9ehLvj?npJu_Y4DBkBH@Vvz(yYl8?)JDWH-Q0bfv#9z ze3~^R2C;T=_}K(Xu_pIs9Uy!wM8M@N`UKB-mE9!tV2ocJCjS86xcVo_v8>{r*-(L7g| zYYE3INpJRUJxYF&;3%HLO(j^iquxfAY?pp#R5EGLcWYnwF*;W#STRFuBDndibL?gb1&pbSxK@lu)Fesi zppcT2lAN6Cj0cVLWX@cG8MEN0B|wHEG8+=7R0#0)ReyibND+&2$Kt9}Ey7gMLz>Ri zEI|QYmn(Z-mkb_6Ei=RCncxZijPU)U&_2lUtcKn4EAOM;i&Xq~Y3tQ}j~EH! zHwyscDcz%jkFZ&-_>Q8H=tqr&aP|N}R_p4Jm0M~!P?+&2qQkFATi zvy{Z5TC+VV0Uo9(#h_0x)*ZfDXg6)Ozbj?@n4_A&8yO!l54sEog01 zoh$t34`~MRh2|}KG~#yk;19$XP8nxcZDf2*b;NDz-*-ets~HR6)xG{*no0km=FJST z;oe%(xK?_MmC`G{-r3EhZ2^s}B(LBOOR|bKa18tHEj`DmJ(cOH;jlSew^&X5K5a;M z4Iu5~{(`dUw2)&|iCsx}BOZVDQg62BBhNNz_#RLVkL#MB76DQ4m>zr_VuyCd-~A>T zi5S}4xK{EKyG76w6;Lrx5DlvQa6}wjLLK|bbt{Aw+bsjIBl5rP2_pZx&fu9Rh)u1q zTLdaCL@o9SvKTwJpv+i%IPz@ef6}PMgK0UNQMS*+rR%KCtOezWuq)%2aO26cg{k+S z#EqG2xAet|Rp^?-tU{vh>V)`HA7&mhD)9y!)d$qR!|a&7#}O21kuU?%zbOwhDheb# zc+u9A`QhfC&$L@4&cGbJzcg4w+dO|!u)d~hOHg+yp#`qUn~+I&%bTd|M~svLXOgFh z0{;qfnC&o&6l(Cpz3WqeZ|K21nfn=uDirF7JIiA2Z!{){+v$xB8iaj%vb1}GbT=_O=lG>7Ek!=w7DvtKsSse5UW zSOax06J92ha+5DIPVIWx5Ry}i#1L>rpM~7oP(=kK4A4y#+m#eSQkI58L6xm*#hhlh zNL+#0{R~GeY7}+kX{AmX;-k4k`>5+4GtzkXTO_IgihUX@^<4*|X8(N*G|3N;Z~{Ld z@^OB^gT+Qnvh;D$ZflkseDz@gTI((0f5XmKyPpdTSMOdD9)H7vsGo(2TmR&DQMZNc z3L9X5I}MBe_P1mCILH1rz(+s(+ju_Cw!aPM<1G7IIZ0ppn+87m*xyv}5oUk0n2%8V zo4I_1*xyX#!)t#th7XVZO_IkGdffiTXxR{Sy?2dXqZnit**D1S0e%*e%V+KGMkL&CX z?q}FOyL}5E*V^st`MAbzU&hDPcKa+oermTD@Nt#hp3cXWb~_y}!>+K~`}1+R-7dfE zGP_M~?xl8{9R3r#O}_pTyG_1+uf3~Hj<@YLIew4bCJ$$~-6jubm)(Z^RoKOL>oz_v zvRf&*r1iZrRGmX1hhc zzQJyh!|Ux9dA43sZR@9uGY{Cw~3QG7hVcQ;cc?76+WnId7&?%gd<@)`TMJjti+ z5=;{m%%?!_UyYbqc2+g+L5_O*L$8T;*CTOQMI_S$lV@9ecl^6~awTYl$T zd+kWiBv06{_u6u!ezkYcPCnk;yT{_=jlFy15?|lDXAvK-?cGzz$E$ny$Q8b_caL1* zCc7o#hVP%4xRc)>1mr8DurQZb-k?#;rSiU>4RA#qGxC64yieEyu z(ey}(S)wZ`AjggTXW1cl@ zo^7~OX64>;SQ8}-h(Giir`ZVUQS!OJCvQ~#f-#I*_!hr>lNIrbvrVASuhTj@FhO;> z6ex&ppbKfq{x!fePgvqXI`#YxO}S)BOcb>G5YGY6Jdx5GrRKeAob9#L`LDtkd8RfY z4*3}2xQunz2cK`ZjOW{zTM-|qtgOUHHSskzT}?2rc{ly6Sgc+60&58voXNWJHDgwP zyoYg&FR~*3=$!4N*KiF*ZdmzVhrr28D3E`vrOtcZI9JViFA%QQtce<+e*QX4=pwr% zhfzYmzb};?spl@>^b0GNDrq+>7JCWxo!MT4`QG>xdx-#^!5*felse1#UB8y;B4I$L zOVJVGX3ZL`*|cHmiX(>8@`uABDL`QE@0h_vcZx{T9*3?Q6nOkLwgw*b6$~(!Ko;g7pFBs8Ib{{S%}ec;Liy!Z#NX81{KQ06 z^*nTS@J`=82-A+uQ&0Tbm@tS-oQzeVI^v^J;`*EXrPii$a2QgcYMh##dYe4I+Jz{Z@2-!p{;{Vi| zSIMf%gdbPHvLO@R6{nO}Cqkr}o&n!n5?UDQp{+K&wbO~!BH0kC#ycqX`;8&B5^YOxUaiMh4p#V zm*H1Sn}Jr7>=p@%5t93-nsP3hk|Kbu4sxgrEp&#yat-BYn5-?w(z3<%oX0q>=jWw0 z)>eAXThtoPsUNM9Zb?nf;;y;dP|D*P=&6#&wTWVjw;`7nQaJsXcRl)<65^{8dc@2y zJl*wb$Gb*CNaHpqmG|kp_~6|1Zs6QmN~{+;%AT5$(X!@*tFiCFC*^7?^wp?E?@_QU z4XxCr?-`>>0=5WTW^%Wwd50rMsq%LXQ~tWv`D?5GE6Ul-+FsHGm`L`V16z6ygu~b( z!76TOb15=!)>?=$5ChfJ_em{+6jn0`QfShHD(k*L-2Qt<^i$j3HjHR?2uYxm?>|;* z)mLn9+*m<$Ab6P2zh+SA6nCy$r)rVivWg=h7Jm6QF!1B|jrde~6UMnC_WbnoW}Xj5#8Pb{D%iaSJU6OGvsrY z#hHkDeeAu_JJUPXo9g+y=UU+e4;ci|6YxH!&eyNBmik|!N+&AT5jJE?mQ9&nJUv&i z&~6bx53hdCA9%%eGx*VW`9*++^nxqDz`G;JKDN$xR%tEo8l|Xf=*arPAE>~ZZMW3R z*IK?X^~v)?qE+QTN5+U8F&L9y?AG?=<(9zLm}+0BUNvj0>Y)^osE`)CngV_3kA{!v ze2YZCGAv(6X)PO9eFnlU8Ot)}J6&-`zYkhG{zu?gx!oe6tqM!s^CwWeRtdQDPsWZg zp6~|s`ukLG7XQxZC;wR`|2dX!Me-0_J3sThve!JHERK<0mfTG*kbXqe`q|39&M`!8&<}J|HsNm z16kgz|1+XvS*mw2FwycEJon8`^YS9g+N54O6gS*a8~XD9j3WA*wCuz%+VX{C=;Ud% zbawfl4S&BHyJZKXcCqqGOo)luB(qMT<(i#IUyDvVG3Dhc(n+Y^r z6|7FoQa63XLc(7M>%XeUKEi`qusShrwB}OMJIxiK;jRcGXRZt@-3*POtdj0gM5EVL zCh7H^*Hk}DcdxD~c55`p47GeIa<|u0AukPsMvP+{)W&YQ6~=<>Pc`<7vEGy1N#_-I ztAP4N79tT5Z_qYNYa8`5oE&Fle6LDvmhh z#jG#L_Uj@JEiWMxv{yo7zTGM=ICUdeiRH%c31GeX1<#372-M^hKmUvYty8Sq(Y1aC zjrgN4jA3Cs$_!Q1mNthLaIK@%b!`-Y`Z|pWwYEJiN|q-r>g~D8^cxN*97tod~KWqoN5&Z zyVp>>`r=FG7DM7pGc@fCM~U0qYsfi@I*C^Cl39IAwNM>D&lh^7BX(DfX<9M-xTLZ&w&Yr>LFdOZcT|*NB&{<%Y>AIDyVzWl^s-T zf!#%L{&U>U9PgjKzodX+IIRbTd5Dtyx!wL4tI7a>Csq}b6%e&<@v)zz{`6>7m?$7vt!~L02MzHj< ze>)RbkSMcrrke0?ru)euau2P7Iyq+E*Bo>5J&*w*PPhh~`P`jDnIh=GqUY1&x@XSo zwCYIp{MDm8+dSvd8!jO%hPa}-_&cK%@?EQduoTO;q!dD&?7wQtcSHQ@g72tJWmF*7 zX`_j}^|C1D_fCViF2;Caoo}&P{m;a1*%e*sxb1txq%5yhGPgskeP#L)sJafgcdvF2 zm7X>PLzn#_-<|yBh6_f+jUV*`ZoFRPgyIY6p;7V6C)U1-el)vFJZU;%olEgPh!u(pTmG2T24*1--dP;ps`)BvaO1Hp#tO zfFWB`u`|O;Yl2$xbfh${U``gemHC*D^RZ?=F6_2mS07xv*3nTFL1ZnZGR}?YHV{t+`((i=$Ztoazm!H6a!m4IOD8Y}{JzVor5!6vN}V4iGnXeWs}97x9u zcd&@-6#$uI`BtffZxbmDU6XF8ubOnatyRDyL+81M3Y(2F)SI*l0A$r!so~95tG-;& z%`DQ(!o^WfW0fY)!RNVBT;m%;7t)9Izafvn*jNb;7h$4W?`2uI&i)QQJGyh6`E{*v3z;Eeq}ta8wm^^4I%10%1ww!sfd@c3fCNZ;91DOWQj_ zWlbGvQ6S}3$;+NHG{#6iYiNNRxnbAf*wwgBA$G%h*)cB#3^FgP%P7~8EA!)*E8RK% z+CG$aRR1Rz;mj6W+l@4`g{>R0z;CZC3vQ|?tyRG{MU{SNp$1lGGo%@PT!KoIELt6y!;{(9A}=RiIph<=ZX? z3{~@vMWT@Dyqn4rYzmT!xk6^78&)B=q&c>#0@>36TD_le~Ymz=_SyY)g2*=YF)#CJdp z$UjbaQ{RV%<7tuoHrcHLEgNZCbUbZ*cYmB0w11NC<`r+STLoIy0dYIh@_R0Fp583n zE4e(Hfu2#G&<8?SQ!@K_NF~W;A+FBzG=X<&7&`gSBr;^2mC5##vWgQ8Z8h2!~ej{H81!Hf(7{rd(`|-Py|{WYD#3VO@a(Pe?8d! zSBW&7{Oe#Hh@ob~<={=X+xn_+JB*1&eYdpKOuJ1Y5C{!sb%5#7K}t}YI^d!p)5;wA+}BVP?EGNfQ(H(oDBsI?Zkq#0T*Fsmu=4d}eG?Nv{vmLCpbyOxdgR z*qVBNK#|=hXpo)ys_r8SHz5S7^$CQ+G+e&Iy^e5z1UP>5fK+@=o=?v=a7_~X7*XxJ zvilplRTL7{OUnlLRZGq?!_m2ElgP&zjJRl_cjRZf-%-pZ=z;kaKYC6U&9?4f$K{TZ zv#p2|mP`nd``}6^U@XB7-iFKme;J!UV(iCJ_XLh8ILxkUAXR)Pn$hQ1;#oZwLuTts*Qm*1X0(3aH1TgCNzzPr zI$D0!T+7wmQ$}nL&iO`) z3_nRvcCOg+1}ri#ZFwqnpgE0Qy)74OcJ&Vjn!|LFU8JVLA$jSVTx$COGk_1(CLtAk zs5{FjJRa_!0~<}e6ufg$3&1;fbE`3z2+Qf_YTW>SZBDpZNVdLBLMUYGcZKu)bPR?3 z7H&o*&bQk}Gmuy3yS>cXNRt@|pC{^wBu{g6IT$f1!jzWZZ5ddSA)OpyCOK7i!|uV64pz?Zg_L<_h1l}U4wqTm zs@D07=>7vaSZ6T{O*6WGmE9)jv%1drklO9{C#ex3#2lwLQREm52`nNF+9six5ti>z z8PdC(Gz-lsadMvfe?tO>SV>go$E{|D1`L{mwMl@6{ptQPtG>3P+!B89_q&HDs{NsX zK{77k7{>2AWn4E8)0v=bcOqbp-6qkPEbAs|aiH794)O+0NR3YOgno^p)I5Cp&qD5n z=o#z%z4u!0Y^XVpv6A?bsflb8l)JG`9f>mYoC?jDXftXEZ>GT8oI2mnkue2HOY){d zx72Z}5J5?O)s|?}7s*c-xSLw%d)_haE`w69aU$xI+63e#*7=@0F^V(!0PNPyQKsmi zv1O^@D+9575e&)hmBn3b zw@G9Ne%^A!Owp7R#JZivRQc|zQ7%JbJ6z@CW%a>z8~yW1sjx>UmN?~K`R?*B!)}`; z#vYgPW?86AshRzdaL5gzYe<*AhxEo4f+D#g=Rixi-Mh@|^ZeEWCw@R6L$$@2nP^_L z2@b}c_*L1~s+z)z3V(T!?4tCsM+h4y2kkc3YBbSqtH3_G&iAIu9FvaM@sMwzdNS6G z8px>xG^f=0-Y8q5Mt_x_szT$;L9$5;E@t0-y{xgm9#PS{U*T?P(W)hJ<}g`^f*7D0 z_hlTbNXTo^3F_@Qa~G(oZ50FDlV6rK5`={kqI`GZoL)M_OqbD>&gjuzqX;IG24^QJ z=q=mZwn7aVY{sg}#WA#b6eZ`agUu_{wNd7X?ojPT0&=DG=)=VO)`Y}SS#%Xt+;@~e zDsmM}E#|zSN`lUx#GBngX9-?Vd7m?OoVz|XXtxQjM2IaT-W;u?%fya(J%#J!LLy9$ zI_xN!cyK7Q=w#V)np3Xr?o-68FBp_p|96WwZKh}nVtiq@nyT(ZGd;mHeY_18RzvH2 z?`tcGIwd;od2eK#0-d%R#<`{M>2aqyo%%GvTtlbKHi4j1E#GfcaTd3^GBGZWvP%JS z1@3~Jg?8Hp42d?qBZh-j$-C+CIZ`q#=&Zoadf=7`bY+=%d$IPmrSUXZzMSg^XY2a4 zOJYn@cEd^x3CJ9X;YE>#^Uf6clF{xupEVu=>GR2FJ{eLD1MSaj5kWlbm!(nJ&d4eK zr`hd-UzyAwtAfKL)73%0nJz1@z)qH*zb&E3Dzj*26)k)ug_cCc7ynNZNA8Q}sR;O- zY5D%DM*k~vsET=!dPGszP_;>B5n}gkf*<*wj~3S>-^JckPm4S`qxvq%6gB)d0gz`j zC`>k^5xs2_QTc@zk2B~I*Q`&Yt~P;yQ{`@ zyItTYlkXo(s_Hj4@{FduLS*IT;pQM5q;^50w50gka5K$mCno)pSSqwwR4)n__egLk z?&7QwxNE}nhPEc$F&Iv6hqc&lmnaV+XopAOs7V=ChGc&+bC=D?gVBW^_n{~`h?nXY zY!w-3O17)Guz-r2VYdrx%-HDrVQFPW#U{;rfTn>2mNU_jQ5~5zrk9B7Lc3j%V?mwo z`=u3|)>+jR{slDe+-`}!-NoOGOmbGD%8|VAi|uv+jVyi71X%inEZYABWgn3rWsNki zgCy5(s;s_&2{9L(K>kzhb^%-L_unj~CPRz&4-=&)?F74pT(A_Z)yq;zkavQnNx5q` zOuJohSBl5?^-}r})jK6etS9086%6{%r38R2|2*9zOj=_|Y%nE1-(CKOwFG9)WGykS zD6TQzO)unu4scESFlM>tAw&q>=@;}hSrIyhSkb$XJC}r*-rtfooI{t4=N!sY5yCv} z0`l^z4RDqeNEKDpuWN*$Qd*%F-80IcCb|i@yanzU95+;O;0Vj`ItLXZ-Z)t@Ai91d zZ?tJpx85!=5F5|wHhtBVqs;>L?DpZ0rMvQT2oOEUYTV%1!_anWr^1bvTS#Rin$TbF-g_F zV@s>JcVsV|1$?}C4`j6q+>5Y-0SWCq51l3ziJlii?hIKJ(g*SJ?cRX*9C{UQCAc#@ z)108Q1Js^mW%rWJ;g001{7f@lkJCR%#$CaQd3O6at|!kj2B^&G@iC5wzs^Y9l4WM1 zBHW(mjQ2lfTw)9e1iP4n6YO>YmV>K}bGW(H-8@g4{)m!MfqPM$Ww+;GIkL{^=R9eL z?57=gDYTP!ilQ60C@O~t5Y4cRvz#KfjJt*Fn+F-1tWUC?Kig{1B3m1KCe z*6^wva~?T|cEOfoETfNecu`}me{tzlG<0>jo)QhA7~(c=FNuQ$W}?a;9Ayqx2^nU_ zU{-7am#Ni8XwQidSf{6;e?%_7)2)Do@yH)D&XrfhO&f6@wq}TKB9Q(^%CaVTo1q-m zdoMujp`FwssV5ks6!5f*8$QG`VwML{xz)awkmuBv0@G0YbIr|kVr&XOOb&XgvN?E-ECmJ!kGtjhaZbRua(m~32z zi>u24f_8uO0KLh(+3Xx3XqN-RPyYsWccvNH&Gdql@gmJy8$xFy>-zybm_nZL!-#qG zryI{pB2f5dT&}vLU*K_4!O5;Q)Jw)$XUjlbg-rQ_ANZ}B{vKdG$o;*avGi%kN zKgT7bUzeZhPLg20(D{bM6Xxogc`P0pl&$#}s(Me4HzNj4wA%&Z4z`R0G}BMEWmFyG z&1Yp23-DwT$DUylYtK7El1dMU&ZnQnuW=HJL-M>`-oM~|=Xw4FmoqTmq5oQw%%lP5 z+U*)3RvWo1RK#6`OJ1L3nnVrT1spE2sDJle>L0Gf4g5?z@ze?m+|}rq3SPuCyT?@B zFxiauafjD3#PiKsVTo?5$RF>YL`3V*WOLb&!FIc(K{GtY=oJ<9<+`_OMNLBmEtS=| z{Q|?oaE(@}9p?lJ*iMqeA|(KiGwY7Pt6;xCO8@ihc7c|QExMb2a(Nmg?Y>cl`p=um z@lHVdvi^YxO4{02Xd`u?e;{2oznL7spQ2ku**UCMtTC5rf8yOTpT3ddz< z`lnT_udi@)Qemg{A4O&^r&r@O-beA{c^{|dZp(Gt8Gjjqf|UeUGGdZd%Txlf+)r`c z0|-tOno*8)%dA3EI)t$!w&K1vn=)Qbby`a$BG99Ce6*taZ@cO+a2Q2^M=lyO0&vxCo{Zc1}_9d zf_NF4;~Kh~A;d)5B{v(WR!3*>Y<01d?s45V!}P^4Dxf$}ZOlT%a)w2lK_=Cv%}zrv zZ8vYG`IJlq0jf-dXQnU_{&W$2On3Jma#kE@ACXDdo`IzR)zd7In-EJ^c96L&$Th_} zZ7%PAI%%Mu$*xU6p3Oj^Ej|b_H!S2+DsAd;ho7VZV2I~;o@-dD{Q;y*ItKs!JFV2)3dt=vdzloi^z2pGI=H}C*2|WfZdL?rUEe;KiI5;Dq}f_vW{=c{CUaQeYSU*KFB^DK8OW4i%V# z^R&|LkfiP6YNJd&JO@|^KRu4dbm@Jg-QWf@N!Tu~Ru9d=tJFp|wDnT2+gvWj>7xdhSq(-63!oe0%;h@a;K$ zsBSAh#`<;lG-fWN-RSp}(NN~K=8G62An<$I-7TS4K`V_JE2(Ucfw}XX_k2oheoh%J zdQFuy!=_w1%5fMdpM>J;4?Nwr? zc2x$@x1}UY-M^4v^SO3M6vNTg#(8@9`+boKyzoprdc5`Af6O8svy~^!)S6l5Bps+6 zDCFtKA@L3fc?J!vbQqkDpEj7rk!okLIWLS`oURTmGH1yn6EH~( z{QY9qVJ2F1gQO=R^@o_r-jG*dKK(Rg12K}9yk(w$s)PZ7T5pn*toXATnAraUyF>iX zD$CfeZjKCOt7H2jltJI@3o^lX9-tpQwJvbom9AaY-R*koCdpYE_pv*soF+o5G{& z5H!W;-rl1Pj3Uw5QN$>MNBb5NLDbQ7fzV8?Y^rEnThL6qL*N#U_8v853ESg?`Dkq= z@oxwlb_m=;*l^Mk7H2)sCtz`;a_(xF-JME zyzdVB`lq09KvF2nO~GW55O@WmyJ+f;MjSbG%d1R!tD_~a zI#-$b?Did{46ug}T*Vsf_#_g_UA)RPsIluPQ3sZrQ`J?=o&Q`U|G6McdcCRL%Q)hZ z6-0pVUS`gRYThxAQ?U_VRY+~91@aZOGaQU%BqXwyo6+QOJ0yjcSZ!P>CRGia)t=%Z zDD4S?Ucb!r(L%jLvS$UBafNzpZPXxD^eTbsw3X)kb9UMtvt$NET58WqbGDvAyl3)) zrZ@tYLUHobh%1!YlqlDe!gcOe>5nb(JbO-#nLQKfIXk91uh2$-oa-tgc}QTaE^W`dK;KX>o;lw!@{>y!u%*UZLpleRPtsaw}W zpwbglv%0P*$01=wlEf7}>A7o&%}U?c1YJkPiF#F&GJ_>?#WwNan(qBX?WQ9XI{dkr zdF~s9-zN|Qzwh3{ir{9=40WdN#GpA|Wvw++VKjAI;Mm-S&ALjuGoDDuJry)h)PJ1s zA;Uh0F7SV(M{PRo#DD6Y=N%x)k2SHANGg^hukT1HWVd zaMdAUZH_n}_#ZJ;xZaX#cmejM0Etj22UI{QrmPT1>@Z z5YHbU?~{!@s2r07vLki(Cwp#QYq$ zuY{RERkxXnsxTwFbGq9+p?8I@3~32D5Hbrw?9DV88tG~C{9gGpGg8!)FC)g0LFyEb znbguJn@BC`hU&FbV z(PB=$c58GzJAN)@OfJZQnZQQOe(^ud1T$jx^ByzlQhM6i1Ulk(oonHD$ybts79&@t zezn~xs1YLM9TpqXj3dc$#KJ{f5hXO&c3)(73WQ{bdA86B)(ccQ8D6C2Uf;olv2}!bQGe2}9Y@#}wqb zi`1|a*SfczdcBTR6L(+SY3|qG>$qS0A4rK)BkIknsF`-BpgTfzuRD6~yys5KQ{BA# z_w_6;i|tN9bgWeg{7wi5yI*<)3tus|M zHk!HW>}X<|{O2(F&uL-&`V{qIqd7-Cwgs4ZV6!<<=DeUVX6f(MgIk&Ny3dkS-$`K# z6)Z0HEVhEju>GCOR@Pi12-v!7o3Rya#tl8Rl^c5UtOk1}XLY&z>MxtkTySXT5bRma zhcwD+&XhqKA`_=S2kwW<>Blhc6vI5HN<|D^8;#>a&Gdx+DfG(FiLjy`3fUQQfwzNx zgK5aJD~KS09QE)H*n5lYPVuzabJ};XlnIu0me0u-n)3kyo#Jc*1U^-(qW}U0g8~`- z_^Wuv7S9$qx=D(R%GYoyJ^Xo zk8;faa;iBIeIm=4yI$MbcIQaUfv+DG1uGh)#g6n+B6p)}V)hRXL{cc%nf~K8k#Z3^ zIR);EP#MvIKzB%elPC0p&^MqSHA2xyg_(K>q2h&FI`DGp9gix%KVyd6wi$c}x9y=_ z+_qUSjT)qUpTvi0O%GUs?g}7m1qy&z{-Yk=g`;xPS~c$E1+1|<1q^Jr)E7HRyj?1N zPj&U}tc%PNP;RHV_yF1Oi_mSYLW@>*O6A)#ys!H3B6FZvh^LRmcfBlh^eg3Ja}_~> zPI1%;3Vd4>+`N^oQrI-IOVR+9u1D^WCAQ+JWBbi1wrbRNGZ-<^?i6eoTW$QaDA-V| zL|;|Cw%s(<(jDfU?%nDFPv{HCTc;D|vVocJ0PM%WaC!D7|EL*$k7qveV4P!|Wpovh zKWc!kSm?+T7Fs8&sdDz`0l8#R?xin_IbpY8VVr`nwYOcE`#j|edMXQ_jS5|bdG;bozO(F=!m3N}fx z%rI?P2#;^0&MfChUVtJo!vtK8{W!}EEwXAh>YRLcvl7aix;wlbN$98cUy7@S zwZNJGZT&sgh&XpH#X4Y_c+J&p+2XUzrCkJ%RL>aNq?m@73Cj6#Gx}xGw$rVf!XW~T zImFw2W*e^ax{d9pmlI{<(F%Y`sy2N^+Yyy6t5TmFj!jgVSD1nR zYwgbU3_0^9H|&cB~3k#wDnyt^lEP5;8p8AB7JWiTz0fPo zXt?*C6%3BF%z<#Gs~R|b`Zi0N#s{}24b@F?;-p_gp8I{l%PHp|yqv99;^izjFcctt z6+eWxe;ot7{eQlax4&oLJiAkn`C?1WxC#%XXJDS)8Dv1B*;f(D)9rm9+nLfgfgqZj zti{_W*uB@=H(3+^vfQ4Ev-bx)p+|TQ2_gTadC$&}soqXF9(R%G{MfV0gT^HP;7x2- zQ)6k=ct>oYznbxJTtbY@3)kDij}b`3kNGk-Fw((RS^_se4k{b_nxG)|z%OIiPNen} z&Z@ki?5=Kghbp^s3(a245$dNr>u#5DfBHc6`qgGyB!Oi%WQ_DEv zmTOE?Mg$s!s6jJ^+e2m}%=CnJii(Q~l&b^Rv$I`zy}2=bs@)}^CS{|UHVsa5S6J*Y zm2`vNzqoagqgc z<0N~B;3R+fQgRH%a-y)4%WCLa-k5s=!TF9=LzoD%S7pfNfTvoJ=c+bYkDDeKe1v5t zO$*j&>HZmw^=qAmeev2?Eyz5@R~1-}Q+s&~5`nZ{iqB^Q%+7LefHGHoo(nypzY5(F zni2AkkXu4Fg@hyRv(Y=k8^zA^bI-k=eI8}_0%hu!8_mh&kGli{v3`%6M#Hj(U}OCV z-Mmn?P(0?mylgj@O&!0{98Q3)OA=*6Ei^BQzX4+kXkXUdsY0=eC85Ft4nHEab1-6^b8S3RjiG3t_n$=6wf3Dq?!ih;Me{wTv zWgU^#A;0unNeMEVtVhl1YR{mdgL}s5b#wZelFn?a$Y2Q+7Stg)7cskv2dA{+FgS6h-9_h%9g2jL*3eO z%5CO2GXGuijIxgJxs7%FCVIoG-`r+q6ISkuQ~%g+PE$J++?fwGbRSPDm*}bsm9kC=B+IkR`Rd>u zgy23A6g&QBJaC2ti7|vUORphy@6XJ9c@reR#+xu_npGdHK)cO97kN9!v&_899~L9; zmMZ|Y((V%YkEb%>PCOOOSiba5u6L>3B`G$-XZPMolX8cNgh{cbh>pjQisX&`EP_$X86aiNs-k>8QU zq4~i$rs7D{EYLNJ4x4Xx%~qG+YtAR|(IudUJ!0{FOqmO6iHd3Akz4O$!Myn%GqpdD zRdDuP%dAuruO$bqn~v!C?(zG~NBalut|G>R)n#|Qj10hJW0PjxEO3*0u@Z3I+X~Ev zmCMaqXLkwCUT2wfbstL3{)t3ZJ4tc)B_)n~183LeT=GB!cdxe08pnQfJfyOl5M9WU z-=CG6@BaPH`k3bkXfCJM;G?iv-}Bz&9fyt)m01Qg@b zTsUo+wBxX9txYsWlDwttLFy+D0Pe67Kur4Nzyqw^S3W%~PW|ZtGqT$isPTk;3jbwh zXjbSDnrJ*8vMR*OVmRN^;d$CqBkRN*0w`VLqT|?JH+@URCjZ=;s){XY_faaZgb0?( zoFYEivv6Qv@7V7<#h(7+k^sudaVrI|UesX@sJ>P`enTMEA=~}oaTa|ZM=e7`( zz?Yvir^cCfmw?$6k9pbjP1RD5oRyu^z@k~H=01uuv2Q|pL>!K6L8iN90po&lv)H2# zvv1$GY;gQpZ1vfhxtZ$2N6n0wjh@iQ(0h!9)p|H&mG`*!L*23QUFDyUI`g{XzOqX0 z;tafMx2XwFvFA`E9iuegk8h)#!{vxzd$D7C>nXPAFo|vNEx^GU<}EW&5m?J!1}+2PtTQ2U+n94^oPfV_<^1uZzuAGI?ya?>xh1 zt8c1wJ5&9iHOE9TDp)kH+Po1_Q-{^0mOmj)ZHdmHNyV(nb?Y*)ISLV#&GGhUWpmVf z4<+9~;A}U;WsKd`D0UvPOPAGJz$&ZtosY3vi*HE5pcEKnWf!>X3!L?;NVbt=aziBa^z?0VMx#!J%LQlv0GR_imP-eX(O!=Sgu-CrNV*9DApHrDU#XjB#Gcfvr z8M9|h)tP=;KoMr=uDE$`7)tuEm!bOg&&|vMjrQ>np+WSq%%7<%e_>A1m2qt38eO^b zfmnJSOLh4#%tCEPzUDN$pnY86^JnOL#wy=UW06M{Av^w4q1Chs@`e01 z(%54t! zq)KMs`q0gg#GebffZV_OlNQCz&kS_B+W+&PYL@px8bx zSaNc;`TR`sRO{h!PNU^aRZVbn6|i9XiLRX5Nja1fSk|9+WC%y>@|e%41A~W0sUc4! z8>&1h5Y;W4vRHapYzR$;;C)-j3aA+Gd9Ng3GLbOr^UD8rN)C?y@v)qOwe9IwPdNTz zuTjrC(>|WZ0C?*+Gb^h7@_+aR(m;-N66t!i>NQizEXcx&S@7$bh5lJV>F(8Yazi?b&W;F^^N6fKKvgFVaGctRy zeOzE>hR1wOnt{?eqJAT@Xj4^9#Wef4;7UN$t1^T@P<=(s4nmgykFhratfIX7|L?sC zAOy%VbF)IY0YbP50g{l7J!~PY2|Ka|2oT|BfDjPtlH|!k5EZoexKxX+R_j)%T51=o zwbrF>RcqB+_r30|b*=n9=b1nzi0}W;`+I-$nsa9Ey))08=X}rdJrt?t;5JcW>DjpX zX#zF*Y4@9{qD1R=)zsC7FsM?TYB)29X%%>IKBt7;Q~qd9VYN$FQoX*fM|!&c$$bey zlM;-TX`PQnogXzSsvjKtPGBgESJ%S>E?taAq2Q-s?jdgAy$>a%fq0KgE)T@}4_)>! zYj*kdBM5Onj8}k2pbA^Zq=(r$jNp>ETv)$LNd9!aC)1mc3sAw^e!kpUCj&+Gk-l)R zNGFwyAmw*^Z~-Q|3~fyGbLCr|^|V6ItT}sqt()r68IL4nQfG5qU@FO(XUl6hx{NXp zJVN(20)eRr{?<)ENc{K&1i6ufXUaD_^*bdd&UYc*RCeRw^jrZ6WL8QGy5D~Rwcm3J z^~0$>lQ_fk&F42C7jVnm_6z?a{k<1aknreV$R{8FbHa>-jVJnKXEz@&L5)h+c@J{i zMD2_M6QC>@t;hX2VM0g@OF!RoDUc}(yb`#IvDM=!k$K6#*FWC(iSK7Rv}{l*#MZ|p z=a?6PC0T3cCJXg)4b34ipi$5=V0z*A}o^jD81 z43WD(2PsSWb=pEVN_22O6pRg>O%3?&J+lf4=y{ehYi2g5ux4H}rw}TyZ`e}XS=0N= z#}mRZCLFIoWk@996=^oDsnctl;W|ouBEgPX)qGrl_);g~WqsWf#8pgGtN97ODk8}u zk^=bg6F^%dh`TQ_IysMUujd<_*?e4pIv!l*LwIl%_opQn3r`JjvU_UJ-3Fl6zk@M6 zzQ9ju!wSH^_*0W>9N~M`ceBvy4`SHpaY0m@9KAo2Vuk5 ze@7K!=Y!1549AC3nvV-`%JU`sr@UcD!zTWhF~d7(Yus7Qw2|Zb^1mjG?_rXv`qC#8 zvS{)=E*U;T79Z>Dp5ievaf3LCJdKv8uyn{Jr^g=j^5)}`wVUrGe4s}^Nkpn7agZB9gZ7@wBA3X(d`FMuTbwH8H%d@|-?->$7KjN! z9^$g}ogSAkKwc!_z3(hM6FwFuv=Neb^#+FBH-vkB7aq>cs3C#p1Cc<6|7m}#zgQ0# z8m`f8&$0~ItX$k;Md>+1!-YET%ETV}-DeYGDbzf^MLyTD0yC>4Qf*J&#g6I?wJ?L4 zj*!vf@8Mv|NY*Y}#%X7{r}_-^FVc~(gXBN>I!56_%XraS0$`PQN*E*{NF_)|t?} z+2ACH(QTN6F3F_dh0RI=18i1bcAjTOP#9J#I1uvlyp9tucs0tr;9ty?nqsC7)M=+B zXRyBZ%e0>Q!J*;ULGsA@`o{XAenbJ!-*HH%laPN8TsM@VewUFF8Je5MeAwfHiOL6or6Z zzxqOgB|3uXPovW~CnrW1{ew4TUGs4P_thAHX9(CaKWl*0S^+3Lv4j=P#|7CF5B}yE z?3PJ5m<;8tzi|m1AwlzNB6`E$zyRhk|LSiid06&z1~+K!c{%U^CBcj62fe{xBuqIk zW{i}o%ADSn3`gS{lOp=_7fBkB$VyE!nY3;Jwi?wa5D06v_@4;{ChBG2nKV`vdUy9N zs!6BG($BC)X9lhHs0DU8EH6|LiNs2kF@@5csXI(KwcR^>%3<1 zUbRp`sC>#)o%eWLXe4DMW4aZ8bB^G5&WY=GPX5VrwB}*SwSVC1#eR=o{1|g>&wAAN zJeM%AYoXr|wKD1qvehfu4{n0{It21+cNco^3I^42c{=A0yh0pI#`59w+N%j;doNLqf{@7j?|Y5BzpOWgR?9|51GINXMzQZHiu#Gyc$F5Z zMuGg(9cz%TdYwqdb;84u_qxQ5RHNX1mfHN+`J0(LCxK$Z7ZA62pcION@h3&#^x+!x zz`#0UV#*BRLe=ACO;?Qq@v~S_FVdps?v@Zg>pd@mYnH0UUP$LgtTf$kBm}2D9|)!v z8CtJAuXioh$Ux*@My-#UM5O5*EYcYIVV-8xH6ueP$;j7$DKe?02PXTsLXR=^1^UlO2G6c8 zJ3Lg^*3vFwG6~1BfpAC#)_+%;mJ{ADKg&i+^yz30AxLT+Qb%H7#R>Luq0CZ^lAh*u z8OHLXVXS(SQ1MZ>*Psm-vx$r~yh0pB;3O#Z>E< zff8rEkq|$KyC;xml4FgnsACg%VJM)1tQ&kWE_NUF$CRGBEI1J6@Tl6b$5uqZI2Vvt| ze02l@_qz#3y$yWC`U#51`rZ6C?vS9(0&y(~`oLY|c`@9Zy2=Nw=nQfMS3tA=CZ=Q* zZsqm9RT8eA6r9Q=OfELWv1ZN!kk{5VH!V^*liz>(ZLW4QpONJ@IHok$+<%Z zFs6JAxm8cpfY)#gN-z{vz6*lsB45AkU4G4K)mVU(K-}%`CX6t4q;g(PT()eOl!kcA z;#fBMsIqLPR_r7yTfG zg{o2DI4SE_-%H3aVe29P!r1WlQReT~WH}}6&|JzvT12v3HI76w-?1i{WfUka70!|L zbfNAXgKO`(tLO@PM|Wa3U46$po&5>@8M4k0$Md3=VZwg_&rcZuti!+7KUSx|pD->C zD87@H3m&kbjD%{y#EOa6N3)^w{(J5CF4Z_y;$*!XT{0>>)pb?O49>%&!fSi4 zSB;ao(0ax?<&yOhWJM7QFR*) zMpZ@?1f1)H4s;y z5bM9bG6FIp68e&!p-{==Q#L2S4{WlZz$KcQ4lb`0I~ z(}acr{9Zw|g^qRR?2+?Fx&yJ87{a$XTc%S`ar`N}96x+6YW(n*KjnuTY%}=Z39p1C zJjfjJy9f`;K&3xGvQ{2QBKNutx|&CQx0*TP(b$;{`ur~wChBc#bNXugtAqmC(8c>^ zLm&Ai8~XE)O3CeFB4*;`M_$u9sV*cT7Ui-)jXILftZ+;xc_2S zq?o|;uP^>DZyRf84Z>o_+MK9z45;Zqs2`SpoyDM{2wwZU%f&`#S|2E z{3jtkodvcMDGO|~Yg$9I99jM=_#?~zuKyBjpL2V5^5vf=++vlhMgfsIj^SwN#;ZSmKB5Od{?yBi2McG|39XPf8n>{MJPTo=aEB}^9=XLl7M@j zxW0%;*Ysk<$dk(xV)d^A*7?ae+=9Epj-_VTIqSDL4Ld`#r9-*t1DHb^qO1||lT_nw zRMH%)dG^)@N=~KZEJOb@${NydoN5#_6^vMov$qNtYr1auCSgc#?5reGi3$AV8)5=f z>7*JQ2knFx$Kk06z^ZVp^R@Fo=`i^fmgUa>u@4{;T!j-8`5*4-NrB1c#`;R7-@XR- z?XiFgET^pHBlw>y{geHpeQ)|0XZSH`iqdEc`oax%KUxpT!si!wk?R80BZf2B!$ zS^SmQo|a)ENd<<0nJL`%ERs2@N&Hxh%cYWv5(c}_l$wpqkqo)u()8cm(330jv4Yrg z*bIAGK{qCo)XSRGdxmNf>=lMJs+VQEeg0SWvf@)_swRP5xsG)aRb+SPp?SP>LP4cN4+NtRU1-H7BlEi#yzs;Y-L7Fn$K1F)Cps*( zm_^=L2{%GeT!CZlBmGlpZERDS1&cz zye*>`4bF8|`K;@7UOc1W{&R*^8?#0=CCOhS*0t_mFY0ael3X&D@`i+Ho!Q5V6Q#ue zOX=?3u2Rrdq6uEE|2Uvz0!#*iMNc>kN(dq3H1A3rP>&)2tTJu5ZzSAx=Pk% zn%=MsM@Q~6<(Ulp@j9xDRFmL40N9mA*FRNXXXgxtcc>c!huEF|zIn0(*O_|uxiA`~ z_>cJ)v-5uGyN$sAJZVGE9v;i6aV|K}XZ>PMO(cRHsOR~MGt7dzea`gq`4Fo%)a?{^ zj@Cs}y)io9TfKq0c*LmR)?Hmc)7J{dOi@kZ7Y~V8x9TlL**O#mS;Jyht0u{TEqAP& z_3SeevvuzL^cel|v{1bMc|S}Wa&elG|NK;Wu)j4O=e|iG*7At;GkvruJ5g80TD|p$ z{RshO)zew{%l=k^D5bkfH=It%R9eBg;(6&;sHTCO0Y16@N|TOgYA@ zUlKi)vG4l)IBP2YeUrHEnGx%^bBKaa8M+9r&%A`}B)x4yC?*3pt=ly9NvcV_cr5jA z<~YDLX6xPu$)hYDos>_>S$({GnQvF@5vYuI<^(K)imW&RzW!2RY{iAN1s zx>FxX;8#gCx~4!pzBeLqpxNQ51T+W8`snZ_`lU3M#UBzenEjKi$w`{IQhs=Z%REB;q+m^N)5H?hREipVm91wkEjVNxm=Y z0Xi+`Gb;G`z_l=L4To0lpuZF>{}OjIA5(JjUzKVS_ZbNOcYRAT0i5z1AzTv_q<@ye zTEUc6A_vOdmttjT;m3u4+zQ%Qf%ynB9P4j$8d!QXv3GJcFHE(vajTm;-RkyKYq0U| zDCIY?XYW3WshPu7Ff~ujadt7*i&V5{LcI>9@dVjHXQRXpI*I=@_2I@b-jimvA3M*s zviv$L(HeL804q8a>x&4l%tdsYR7Dj~JJCiB|KPwG{`>GO7#E{M8?q~6=Bp-gwI@WZ zH!r^^d4Rt5a9n>q`J%YK%;&=-mU^pFSia(UvwYvsM~?(|0qTVxTq71(Jp7RxklOAuc+o=v4{R!0@ZL_k;h)O#j%IZsnxn zFGy`1an+aS!dFJ);Jg`g+!Avs!Poyyw?+h~tEOe5w8eUk3nDOPl>X%Npv65V5pWyr=Lvy_ z8RuJr{~Lfg>_=wM`y;+)${$B0#&bg)F2jBMw>uBho!MbhS&xLQcu^1lfWoJzD$rLa zQ5sL`2IUCKSrO|KS6LE^Zb(`9Z!?I7lzI!L%2d-<^fMyX$DJ2He==N;(n5)%=fWro z+CcFmkD@+fuoV{5QHu=IF>WxX!$edX23s&Ds;12d@VMXSq;*^MgujN<^tPYn^w*CK zwk}TKDQrMaLgC%c5g%Rs@56}_ckgTBx2;E;8}ZJ`fgq04V9X2s68sOK%TwCQ>J@xR zsyZ*kb3eIw^^OpGBvMJ|u(sdozP63nRBiP0)d;Yyp`+p#fhzwelv=Oz&%lj%-q*pf z8+Nd%dR1X~Xbf(y#LOxMwcIPX6iY7K~4shR|OEOx9f^~a@&iTZ`1IO*j{xOyg-^l~N~^C$@hLFo%u zX|^btaH^m*+$QP^yLGjwrk$Kn2_+ekc!7@u1 zjDfNJ%4{pnd=$NZq|v-v(n8hTi;u-ZznhJPcJV5se2ncW@kX($RI?xvUhG*pyx9MT zCfAhw5!d{A4%gh%FD}{4tEA+T1_;l7h@xPasg4~zw`K#iIXgr7SR2TR&DF;ig@e(2 zY?S`CFkA()Zx)PF@94XWU<)o0nY;+>)UCyvg%B;m6jO-G}=KX?`0gujtQ9N=SId5n{Sgwc4oBp%pqmxEgO}G z5aU}f4`C4{_Ki%+>9}!tP$=#ZW_gDD^+tp1jKR_jNH_{!n`6isyPO=O^*J>aI3(Lx%3EImdyi}BoGg{&xr>-#`AzTgmDFU zz=D}4Id<GaWm1Zq3eW18+mqUD9Xyne-!p z3%r9xC#q&~`coV`Wp2%mtuFni;S`*mZxs=ZYZly!k9A?b6*BcvG`R_@GsO(vZsqx^ zS@JkoNg|YhbT~(hxoSmKhCJV8g=!W&ywI@| z^hYlY&(b&DKrzXsxhFwAp&2R82s1dUi2(0E{TC6Gd0HxkKMtqR*}x*t;R0kpM~$(P z41^$(M(LQB5fmlK{d7~397#7m8-BTu}bGJ@Dv;@?8we+)vRzmMN zs#%~dQSDC($r_rR`r3O3N5g#UwFRgNr0u4*w}|sARkMKENs-HoF^Pr&>-8ebmcI`@ z&ei zX7x&%lGU3o%3CS?+qy+xcOWC(1%5Y=2GL;}LMY`%U>O`c+8Q;AgdZ=#ceWF%ypKgq z#x>hO?fos3osIGLgA?c?Q{~OGo1vPExlRrZ^rdXlhCui4rQwmi*QsWKs@1HY680QZ z(>_d8dW;QcMRP|A^wp(SrM_jXHAHSu9?IN^=f-j)%w!p<3B(RdO`ykJsaDOS(Og47 zwZs~wE56Ob4x_1)O8Het1<9^)Y#x3Iz_Cl-hP+R`Y91-67r&!NmykCyVzX%+DsjcR zo#NtgUU5)va<^8N>8g2zZX9DxH^wMlw%t1j?T>?y<{yEMz@)&4KuW;p|G9sS4wZy& z(a%q$j-`Ebb}G)kgl$T_IqxN^c^Y4v(B`m7)==XbW=q4PX_xRiuH5aZD25$-JjJc1 zREgPRP11g6;`8@UGAOHg3QFv^M<%e}8b|Zf32Y3{OtMB~$ExN@NC*1tk`sM1TvcE% zS1smG(r;SXK%~%JGRErOG?wx+%%@=AQpYZu>qOwa+u<}&@#~Uzhw^gub#vkeUOp~7 z68O<9*`XnhJ!Y=6u9k$g#$l$6l)(Xd+qm%97~W>Vu6YqVUsp$^C7M0Z%qb`HiA&Pu zNTDeh7R|gaP2Ex&wmTC^mATP zF`Jjmmx|bxb9amkP1{ks)g3RxC>kt8sW+W~t^gl&=XclD@03{y36oUwQp9PFJ#X#~ z8s8w1H3Rp?OtCBxO2P`^+-|}qgn)qN#Rvfb*G>ThEIlJTHQV&_l`w0f>qqlM7NM3C zv1iYvSY49XPJ}v->xPmPmy&}ls#yxWkw4B@_Kf4n(|&GdK#OEpV`U^`@ z*Jld(A;}`P|6;EPjG}}Gyo&ljIWE~;)hq#lVqB_nb|x{9F|wsgA`J3e{rAaMtE_Or z^sL&d?yGi&G%2#eJ)r}6LY8l|FX}x=pznz~9JN1cVblOhl;#8ysVn%Ee~Iri-$6#E zRFk(H?eit6<~{n!nbs=sezTw}@c!nRxD6)>f2De`$V*boJrPvJJt?l>j+xY3YXvU> z{-r=D{L7zI;9t@wGC+S)Vci(BK{X4?uW{`4`kvXWz~9eeftkY7&t?%UMlK*9`8roV zYBqAyXHq+xv`z6eYi(y-b+d5WZi`B049rb5_Vt6V|0e9gY}ViJe47Q8PGi?m0(PiL zs+oXKZ?1FWgfQbgloD)%{n|ZmN?Azqyjj!`l-&vW(w7s$@kC6OKpM8#U7|3nI?~mh zuk8uUp6oL*oD@ApsVM!(Tq|F{Fvp6M{|v}~R;SKUO7bCvj$JS3SJZ`ef_vfg>nu~* zKF5N*MKxc5QjTNq=&t0ME8@(vG6hZuHUUmtI}bQ<#Wd>f%%=A4JQm*~)qE~ea?;WB z37+k~Fw-rk8Vn4Eao6JzVjKjZV;t({l`WiFw!n~bXB(0Qar(S9(U|yi(B&3ITwQAO z2{I)^Yx=MGR!VArA0@drN1Yv2PGa*yswOfhTECjqmZQh0OjJr-$bnnz zmU%PhxDlpp;~~1-v;d$oLn(nvK<1RaGVcC)UUz%aun$0YWG zpM)*8+qkVsO2wl$Xp7w>QLZUlYq8kXwL|g57h174V!=Pq%8gcbY#Lu=JnJTDJ4LON3(kp{ZyuH!mt|N zGbubpXHN*{gB;WusDKodL_?z&r{7p&E$F*bsT6Udgoxe7BH}4mZ=kb=IMTwM%tmv6TzwU8_iUvE_^=5dtis5&36__J(L9Nbmw3k@ zxHlPc-Djx(DGD4XnXsEuwx|6!5>)wAN>m<79UHS)De*chBKEa9t_(-3&vKl-0l()( zD_L$WBy+8DMegWB%W>~aFhkrmnMp~>ujdV1s?-S4+^)YosoA&;r)k=m)_7S90)eJR zbjO(|96Mp8W(*WG(;h@NODTatd5(R>d<+X^*rB<2J4BH5U#G`4m zefW9!k{(`(twJg;=Bd(HowLe{rJzAcQl-qXf3E*`Lt>I%wMz25!uHy_${JzwoyQ{2 zjMz6;*6i5Gq+7Tt8sBF|fMmIcmX0dwmgGiVe9-TzkCftDhEjAJ>Rzst_@P+ipPjh) z)XfZD4pm9lR=U1ywPnR&Ndyhy``u7ky=@P41kVZI84lY}LT#hz`t9=Z&@DoDV8p&2 z-I^WisB1cS1?&Z*)>wt|?iC>A-K$%}yJx!YezV4!p;s=ma%4pb3Ys0!2bK|pG)wK- zWtMHgNIxI7RlfmnhZrt<1GNzSXhhtD>176*)KtyE&r`EGJ===CVL; zSZ4*PS5N}3zDMOZ>#VYL41yr00>{3+a%=S-8bCTNqPwe0lO3eu)Xh{VRfZy9_IQA`-wL3S`E#XFYYgSsp z&Iidzm0v||iArbQ?LC3|zzF}V6vq|$-u7K#Myf>f#h2;ovaqeM+F*^eyBf=s5`e-F z`lG&RgEh|6a;B7^6Ka_Imr+?GEKez<(z=m6an(+cvcCrVNO==+`WhU!Wl9Mw!O?iL zMjQ<&8}MS~!Qh2@NeOsa3>tCldpaMBVWpPRJu^01ZL};(_mrfDa3Ox*sWjUyr8AMl zXE$OGxQ-+g31EJ*5xXj^z#t!BaelYJUYSyrs10)L-*#T9e36UDqWRi-{3a_cjYl&N z9i0BVJ9TDIhe925`4j_O%^VTeB73R-_yz)r_y*OR_y$r66P79mzJa&OfpsgWh;@Ff z^XgL_XN&xtkbZxYm1;2#Azxb!rApl4zq{pwj(WB@OufDMfQUpl`^Wy2l^ zNWaI)bxVN{ZebhcRTrp1=HbW|G7qMPO^Q$@)KQY}MSR@3)q38P@Ql995Lm6$Do!J4 z{Mi&@vL>lAWh!BvhO+Pw8^3r3QvBjScYgL1TZl_q`Dp#($r3m{7I;177xYaMxiFiiA%kHx=V={ zmCYF*9E0T)1clvw?c^C0V7v1Hn;oon?5pG?TG(h)`Sn#BzngZhsRi339tl$I1{H}aY} zszqQE&cc61)z&+bvj^xu9E$I$OBw(O$OSiHVX7LiFb2k-lqODBEdracWB;jiLtG0Q z@K4Q{>sK4t9?DcpKNK+P|E_el(WPBUpU;Qj^wGPlEKqGrCv>Xb1+XytFsvOh`lem% z8_QISB%0W$?%%~mHK%Y`GIPL$MUKpGo+r~YL$ye@3A_D~`yq21U~G2x;nlmXi7`u5 zi^K>j9Qy-({%)+py2Z)qu$e)OQVg+DmpeCGwMfi>jrFW;{Mt4F6~Zi`Z`o$$mb&jB z;g-8WYf;p??;{cNgnzr=f@|nP39xkkw^X$VxSH+g+oqGge6xXatIwy?A$+E4kwjA! zJL0tPaDCw(_P4`<c(xVKgeZAEsAakV?(-=ClxqU{j5xoH0?E{A;mx{sb84b=sP@w3=Ue^B zjif>hIWd}#$tU{C^QjX>E*YfL$cafZi`TPX^A-rgDs+M|l{;$dnBg~% z;#=4$PIeAVxxlI*wc3)2+7^d0LhgJ}Pb|kh+d3nhCn5o0h|V}gq|?iZr6V8g%6pzF zf2=%Q5Hmux2;g7p3r34PF|`3GNO40Qd1MN$YPqQb^JhE3D3K32x!U4QeMf(07BCrp zX_Q4v`>z@7mrbDIQRrjx@Ix=tp*bUGVxD^SeRW_V+4qsU4(_nT2EFj zg1rVsf~j&wXpW3F#qnTLkqoIT_LB81R4szNq$HsYOe-DzZUW__Hp`*PvPH1h5GR;e z*|46eu$bM>*p}o+Nf+~ky~Q4!knf%lJoN-gpD^W{6TJ1+(^N|yCuBN7o8aPEf>amg z=Hj%xdSqR;)*hfYKLllT z?61R%^?{cDY5Ka4`=;r}Uxx==;F_);$!cFF%1LTpDu+b1uRn*N+UMtBtBze9EY)!q zhXmEJhC{sSSj-_#byRSORUH#J^j96!6!z$+I-qjy(N}dObBIwLy*czzd(Yv}TkYM- z;S9C6nnSM()ZQf=d#b%NIrLC_$8(5Qd*QO|5vBH~a|o!t76-rDE0^)9b}kcrT($FM zqQ6z`t2q2mwO4WYMzv4l@U?0$;_#Jf&*JcPjKhfh^oHiu7C8)THxAFH-l4j-vD?nU&6s#VVaK(*F#cwe=yiQZIJ~J^&gJliYT3f!b=7jg3XZR-7Ww#B zco8}Lm5d69CrNp6ctSOEXQCe`Rmydha9zkpwBnCN4DA@&wqy1ep&0o)rAclvebo}WZQ}JO_m(`4Ge?KV6xdI5V(Bk zzs`TIzmyEiQ7TNA)7${S-fQJry!A7AKe1ui3vw6j*~Y+E{pzgbL7BpET~y-bQbe`f zRSlo2S|X~RTo0-eRN<=KRfkCa2vv_4GfA~bJSEKu4zFsc4OKPh>cyB_)18>Sk8Xqt z)gl?_QBH7}KDrM?Y}~p7{9iP(w@4Ia6n^=>&a@3M%CKWHch}?cVud7%!XD7`LiPaT z-rsvga(`WMp%vdB$8a*zEGIams$!YG=cd$QCW1CdI>o!?JkgW@3YvqvX-XM9nx0K~ zf@+bdV@f2LQI&1NLz1XCe{ph8{eu>(KOIdi5_jZhgOg>q(MPwX^Ruh)Wgl#@GRT{@ zjB`IKy>mPA3?0zft=5U5stW~T9g5l=wE{+^Kfq#D9*8FV*6c6y{mb`f@F#t22U2qM z?1Su+U+%YdfE`;TRzp;`azA^KI|R59$MK5&R{#EdbBWjR&5IUP?{ULgrl9(Ui>x@2 zN~8v9p;y{7y{H>UBx(}3NpgZ?7F6%7&(KY)nATW&F?F;2a*5RN%L^7%N45!Pm)sh| zKG=o=;J8JiG$hFmUknz5Yc5s4b}=*BTf zGiiH14+ZZ(cGWGq^?-F{KbdxjLtZPNO{-J|ZSBYY1TCrfB#<@87%tE1(Ay7M=>k_a zp$}Zi6XLpCHYN-R<2Mu*b}#*D*=Ur4GZ^GoOWpL&(DYr<1|Hr>SKD(3t+FJRie#5r zl~Ylv*|E#1-4UWngZnxNGCvBNib}k5$9Vqh&?k1V>r$Yw;flKZQfoW)vMmy!DUJju z>6e~NPH~eYW_CsWW!7kFb6X@7GtLQ4& z+*!NNXlf1*%nGLsuvLqMU$T6``3s!t4N}!oPrkJT0JvRmniUS~waoq1Z_f%_(fnx3+X6Ayd~<~sNvMMofnu#XZY3rxp1dl z;bZIR_OFKBo6p_k1Z(ujD=CjRiCC#CCTj+^ofScIeNmrMjdcSyxHKv$@NeRPKL{)~ z+_4w=%lvV^+jZza>6!4$lZ~7IQ;MNYZNivqz{jgqs~}wBn^o7aK#kz=HGC#_JrMzu zVm`Qr-AyK8=&Wmr`6CeQIw}&Z(;r>Kj%Y;ZUTc+L+FJ#cV%mRyEvDVnz!}RL^i@;Iy|H=_=$B3eQB+dMPBLzcj$YrVU1kvi`5NRB?KquWo_1%g2>lDci@G*S(RTV=U~iy=foOO6H#4&DabJ_$!BCc!j7QFu zM)`sr5IJsec2oCU<5m{cRjAfNWOKxmHnj;4;E z8@BPDS_O3GMfAwIAUL@Mk>b-{La?S+&%MAx)hd`0O#6?yEDy8T2F?qYk<@DyD2Xv| zS;$zqNDT>b2Hx+~D>tVOamT0MI4>M8dV(U+Q{SiOpC8^J@3|zYdC#5sR4tfMjd#uu z&!M2cRiY+f*7Fyx-%)*H+Sz@Ftzah=65~+rAxB&q_#8IpYATJM_TTKU^u1-qpsXa4 z(JCHf?e^fM`sl!WTE+ikle&bbS0^3oGJw}ik$d_Ex}?iht2ltTA{UFoCK*9y zG7hdgWLoxz|IAgC9Q6OCm`!%5gfV$tkDaTF_sB^X{hwFwH&L}p93{mG?q9fBuX&Dj zE>UrzVJdW9pzyFYM*P}dBa;Sa+UbC1u_={Hew z6?rcQh71{b-|Keb?Xy+uT&_m!GW#~(yUp)0y2@~-*4~CRqFN=lwcF7j-b9z#u4_l6 z(nusOMzMD=7i!|odDZlTKesHpDqAI~T;K$+lybX;n<1WrR={*s0ubbX2t9Z^Sy;*y zoWWAQ_Gawnu%-B%O*dnm5ePo&CV1^;t2Ac4Y8BkF-U%Mk2MUKI>It{tlTywgGi-$4 z(vz`f6-h$4)(QSlR+*)5xdroUGFh@>2<{4Pz2|0cR;_}0wrmex<}SJuh9 zVxME^2Jk#?v96~6>20jaVkT|8M%?Ur_-vDyy);Xw-)bGv+ddwC2K3s6-tDzowVui6 ztYLJ`9i(E+P>Z^AhxSBow08*S2GzP8y&7s~?x418@iXB8sf2p+8IRJnLb%v6_hJtm zqOmsT*EcVVecyWN@;&F->9uf82~`~IydwkEdKQ}_D?3^C{4W@XcM)+&xa ze(d3eb&j)bPssG#Wl6l3U^A_#9v2$rDp&c(-%+Mc5oM1XfwCY6u6(UmS+D*u+;gVr zdLC9#wF-g=`-0b?yUqzQ9Wb&Deqp)Eh8gu()K+N7zhM)*gp!jF86UjV_qFfGh8dOi z@>T%>xS)6GIgL5POr4J;VMdpD9g=0Lbu((jFF&~pTxKfwO*-n?yG%BrRgl4Vq|8v1 z*V6OLCa6|{2LP=*7H+HFtqt>%`W2=NSD*$7uE2G_Vo94V>djx7o`Y7&=K?$Y$9VUI zgOkXeMDtmN-e~?@)hf86m{zf4lz@tTC)j)%MINgF3Y>;t@FfU1(?C|;utAr_4IM0V zT1yMPZmhoc2>be!Us}T`)@T*L!HKuJCsx$$s&@VTC*L0&t)q`}Gq7c=Q6hJieiZNX z@8_ikp$8t^Tdz1u>j{rmFiAL~xBrq-z16o`sbfqGV2pQIk^Agueg6$)*=s1QdNFWY zU^1J*MgDTa$}hW(@5?CXZxw8@#tHsGU-$3ipx*auJO?u-#n|?uyZJ(R4uUf994hZ- zDYrit?q`NW=>vCL!xLEm^+<6KcR-`7Iy)lf@|m z^dEm~O-zYbt&;i8@CA=8+y)rgkxT6fUuui~=uRrKq%KW2+(~ARznvwDCztZJ-;E$T zaiUAwK*JKy&^ymK=rLO7BL(L*%m z?RH(N+Qd62_f++Jii_NKGKO8~qTh47m#S8A%D*FJ+SHf=plz20Li2p18T_;U@OLb- zlUMq#E{>Xb^vff`2lUb7)U%Afhs8DX{b2GSDU$}96?xwU)Fm^E`kziw*MGgog7jCl zN*)&Z{in#Ol^X-l<8mJG!>T<8bqvxUagAhHbX0Mnx1S(GwVo~dK97D6S>A%OS>E@ac6mSeYwJV` zhQ#hIWDYHOQFb!4X&`f@|3*-06zvU=0+HD5J)ame7o#I=(!Dss285K{XIgmM`Wr#; zXXp!%mT;SSLifiB6m)$OF++r#VYfucwIQEFJix^j~&d)fq>5}16XQ7ywT}(#7d8cTtS!%uH(j*}W??bDw6I~vuG(GF{oyV~9jc-QHchpq z=!+k)(xT_6wq$+V16FZJBDqW|%r7kUxB$ykTM}2A>jeLCs5%>K{AY1n)@G&ZgMY@E znyuOd(Gnng`A;}YBy+{DGv1Fkxim|)3BColjs6qX_hhARFH^l*TBxu3vvnC(vMnAh ztYqb(bjgEke5^}Bx!u;KEWXZ^Y=aQ~tczMez0S>nGGe6<`Y+X~mEleLz$0Xs zKfeMhb5jZa;v?2{qC9PaMv3zL<6$u<()T^+5iobgU#yquJ8c_`bQ4{c3!v3Dd+e(V zxcwVcn}ACkrf(N8!oU>Bll1DPmn{tU?>}C(g^&iF;2R5})#gzl4?a?=Zv+^glu$!zzY#KjDM&Yje6y zV4_XH1%ZjCM+r=vsD$VZ3lk&aMtj|psj5xjMP?-U%_3par3VU{j3QxyPe+{z!DR8f ztQ_hBGEo2e|EId7Y*GK}JL*E)Em!yS7xHQsqt2`SrAOTiIW(pD{>SM^V)Y2LCQ>x< zaW?lOA24$A$cu43XrIA}%P%PQ7!+PI0oU`L;OF{+huFDh{WaWQho+?T)dwmu6YoAw z@C+q^*}RG8J;eIzQhD$pfuN~_umRHkA;yJ-iZ@S$ez~jP;}m^8 z=P9d}&~KYSrXi8Us70FzHjs^rKz#USZ)DbA2qF^EWJ< zp%Lv@h^cz)8Qg26lE~>Mz2k3IaOeWnwh%#?lNh&X-n`KKhMgN6hcLQ~HNsFC)Z|uA z1)sHkgy+#FsA`Rq*q6vkPLh7+S==o{XnbHX3>nm;0CDIz!LtB4K|%_g(C2g~5F?QjJSz}$AW?=KC$aaU+B&Alg!q4pYS-0t zMqr?c0-5u|dk1G>QYGdv-AOz{uZgBc>e6s3Z6eg$kCO-}yk}k3Ot$a@VP^O(*|`Fu zo}ZIcx+icJz~fCgOB{cgVywq}$E3IU&WuvM{yA>RCC^!l=&NfJ?8agqxCp0$WKQh{ zeROSBNVh(Z)06+al_)xb&d?cf8Xd7?g2~tg4?izH(P9RTn=O>h#2 z>AY`}6ZP$V$nZ?+Lqex;NjP5Q0+UWBZ+H=O!VeUbG$E3h>7MUSY><-9qyMxDpd4*; zke5ahhl)Jk9fmpbB`YtPZxTV26-gYji1y=Z?(h1V-6T8nplu({ro{BIuE&VB;3c#N zpGKQaCco74(9z!FYG-^`JLObueuO|QcAJ$iv)h;us^rtMXbc)X+KX+tuEZ7i7K6Ah zJlKn9hF+)3l9K4kr%WuLz-_+Q7jvIYy)WwbQS~q(yhyNOMj*%kB9M2xKjeGIcLX<{ z`Wkro$LP(kS+`-6+6Ay-lLozxO)3^P{S~i6_krIg2n@gNrC0IW7$`SDKl3`a1Azc8 zuYe{Ucq+z>(f@ee%A{YeO<+?vk~r#6N6JVBbHf(raTqaf0-HuTi6eFFQi{;bB$-Qk zq!WUIjN0?IqA7@J6pYwQDHAk$(>Wt$hH4XJloLrDvB=pLDyP598%Pz#0z3^q*7Ha? zN6-=HZZx51ItV!H-@FeYgpvYTRu7|eh$^} zR%*k?GhgbAz?%?-wlE0oL&6Rh`=>>!nQ|>0XBSNp<;=s7na$zb-{CfhhkA zG<+}hm-q*Oke>2g#4xGh?_jI!pM+9PCVmj>uh1K_EK}{0N8&D2EuP*vY|mtyboIN| z<-}0h#f>M1;(rfk%|z);EyS$%tgEq=?c!czD?fS<9|XTekgU7KZVAohI;MieOKwwJ8{MR$EkM7J6TTR+9eg0LSr7% z``)Ka27!3S2-chwJdJ>WR=c>t>_n@V)NZQXO1h&aRAR^+31*ZOc}HlYE8Z}=tCm17 zRPXY!)_uT+uvoQ^MpW)3o~cKEh&4?9edYjdVovslmic1h3-kHQ7Bh;#48~R;x?fCu zVgyT12%vkyKP~aBx|yn7{NY?DamnJXJ8L77Oatw1>}miCn*gY{Ig)d7+;bLx&pG<+ zkE~Ic!S*nEn8BkTxwsZo4_%!&DUiQ=oD_bez{!e8;zB*?9l~;EY08qym$~wzJqFLU z-(a%)up^g6&5i06IE?jpiYKIm*cXZ`7PHlm|D{%wtvMJ<@H z+iI6ZZGr{;d{BM-n(cEy;Bn|AMlmwz2LJgwby@f-?JNrig)9bsRSz4)Jk>64E-lLc z{4X#0J9CC7L%SqH3i60ldUhZb#l7_^>Rq2(+DDH-jpQJ$sR1;XVyiFHe> z8Sq6Na-BmYXeZ1p_uWKh@Xa&BQtr_%zzwa)_iKse7Pv;oV*l4Dl|x?d2TR^ak^RU`qO1$s}u3iE`1f#>b_*6@-F6! z|G~f0pXB?e?@qT_+ULWJui`T><4s>;#?55+wYP?1^`l=>4!2yjpNSNJKJzO8y79pd zd_^FMolUY{Irzf-ryJ)Fy*(mUzxx&bC(>m`n)m~K^edVoOdg<1zFD;|MILby&(TkQ z&EmeZkVcy$Ut5)l{0M|eTc2Gruj zxEX#b_2hcS|E!?c4e@5N8yAW~+0LD{40SOSQ~G~aP7MCbCgizW68GuQw-^!=mJ57K z5E0QvBhu;L;tUzVVg#vJYXMDI_`OS=9a}eq7CP(KizCw6ZYdTyM}86m8oKT+JE)rt zOKd;&EJIFU_{n-5x2Dpl)Gml>TqLnoA32VLY~pEB?XM3VCvAhg+Q{|o$JxD3N~uvS zE%tIMvET%JRYi2_mlQP}{{myQwj;fd-t?sv2Yq_`8uw>3FJ;~mQ#ASix7DoQ;&v+4 zd_l_@I)c*psZFQT`NKsiJ(xV@B~O$m7w4NM=4>+@B@a=5vy8gn5Bz_Dz+ovJz8{dd z*-xctTsl3K?c!?l^z?Fxj|+vnX;3=!sGUo-VY~RwxNnDCUck`O&BAsdB=kdZwDE=^ z(CWIu=!@r!{tr8O1Wgr)pniR^-(Cn(ZQqFk80cSq{LkHSxyd>lu#2hRX%_@Y9QeL~ z4a5BXX#@0619m=zlkJlDf)4GafSsmGhh+pAFA~>Fr$^bwC#o~j#EbPS0XxMb*HLzy zoGs{&vyVh^HuG=NQl$>BTLA@10{T2kOw0VnN|2>3`0lhz``i8?*ss2^Vmn8jGCJoN zb&pG-Gkc2>Pep+^<}Cc)zX8tkPk33(2%TcRY9)B4?`KK<^oUhZPTaXN{2*bMz2f*1 zc4=M324L#mOdZ!_tHS%ptnKA}lX{ry)zrge-wdnq^{c}&4P>v+72JPPVCWb7t_jDA zH!Cm>Gnl!Ckxj;%HYFK#Yr>P_cuoSMdxu*()YCST-8yWkamf%Z_(PN**aq=ufJgwm0&y9_z_z{Wz^5 zl6aGQZO-eQQF*VO8mI5>WygV2_x42zNOt3yHS5+pCn9Aep9qFCDTqWlcg=$tYSrEt z&TyQ>pXsvH>=b<{nx+`TVf|DzVd;l^*`=vI$UnozZo*A;J|_=*^Sz;{*`#J?}Wv*#g1Q7QKBJRwa~~-Y1o49%Q&4 zFKn&aE4X_V^)GUJ;H^w%Mo58dd{Dx9zQP){R}lCLM?c($1!%}IT4L-VLmu`D0$<@I z9?^g4V|VgqhzP%8uZ;-5;-@h-9F;c>N)|s*yusr9Q?Xfpi5J`%wU*kQUt*c_sR+E$ zU$0a9+ArxBzOnlqdwN|s*RMDBvxgm9*5AIpM>1jFBT;LK;U5T0@PFw);@?CS@cm-L z3G?#8<8ZWqwv(QkW5b7c5{v31;nZk-gKfvc ze6?4C+%-<(^Ln0bk3OA}UYlfJA4LH0Sg&OJ>!@L}7KaN7(;|X_#{#ngHmh+9jqum- z=ac{Rsto&O{p3J<12koOWgm04>xt=hXATcD*Hix}-EN9u{jU(IllYmQoX!sL!~hfZ<#Br60K1R=`kT09cm;srql#&q^E`4raFG3Wa*Rx<-_J&P zb6`9vz*TUoKkd8Lw@t?G4d$IWHYH@I`D2;}tG%0q7HHLWU7cyyxl@Nf&E&g0lx3G3 z8$Z~7z@Nb{>+c)qi+Y0Mt8GzJ2=qP|_+g+TFxY>ue>F_V2Xtr~+tAg+?ZrTzy%Mcj z?<6JYNSN0-In1Nk|3x^NjB1h835+iE_IIN%yDj?huKux{PJJd~3bGJ=kEO*H%5F_*N#p7jbh!rx+{V?7q2A-r(c^<@lANwCCmb2a;1n9P&!Ynn97CpW?*r{VQ zcW}2P(M>=3Bcttj%6B{DogU&OjVN2c!&xV6!BW0!+8EmN?09>+>X4T?%Sp;9qgZK< z*gt(=98-**&EvhDr8?x5#_gD!&pz_ozDY8bQhFPUD3J2lXB6cH_bTf7Zw={rY=6GJ z)30ks*zZl1pBL{d@kPB8^(gP_58)?U$vggEn9ElNdc%4b@n-^64x!TR-*UPUx%PY~ zX`-Guj@`s$!7m+S2NR~L4v8UTI!P1CHtedV!BI#8ad&wi{of)x9-h384CFlAqRwv> zDqmD46fYrNUTkL#nxi@fp-|`~jVW8dvvyZ)J(YW*vbvp{p%vQHS%!72*sjq37;SG& zmdDfEH%a!-8G-k4Ov0@0(Y~WP)M5=fSb0WF9nGO!Z;z8SO<%n;I70twqTSzZ3@}`b zHIwZ4=pU$#Jbg~7y;dLjBB6I88%SYkHx5}8Mt3Rb1!L`mKD$)MC^0R)9KCIzopMh<>X-!wa{U*fzUPhs3Pd zb;gfl*D=ecWgONLLADWeTT%ZSXQ!mb_#iL5xN`*4%0>)sC>X2wC8-LjZHhwb| zsBvs!yuNILEz@l~BqWOT_7l>}4^kdyYIKVWz4>lb#~9V5>9FMDD9EM0PnlIGQPS^S zb?;8J<2z#?8O9BuQU3Q7YZUt*!=R-29`K#3(>H`yNAniX)Qub9&8d7c;|%@l8k1P- zkkAabX_>CQGc>?0L{8WUe&D`HFouYB-bP9gOoj3`5v)`l(-AD(t}oe0d(^`jL6yTJvnv=As45mD2MIIWFF7e2oI=Re_ z6}iM9kuUVf&A8k3Wp=#C%Ut<_Q{?nBF=4{%Qt^Go!CCC+zm(b8Zjiu0ozy9IyoHev z-=<)DQf1ke>fH6z-|MoEhi17Y==D=VfNMO1WUV zJ&rQM4vE7ob&{%e-VB?m;>=3b_6*hQ)@HRCP!o zlN9shO%RF<+(b)c`zHEM5J=$CD;OvMlkIi1xAPG_iCdzVR>KA6Z*b>OM&}38clK|Z|2M<{ZQtEGv^Hhp!OEWUp=;cWJwB7&^to3?^wrz`6Wd=WR@fGk zn>)l0o$VxTg>n{qdQwgZpS_=F?r|YmToO*?Ww@e(M`Q@-%rveyDr`G$it1R2bkO#s zv&!l=5g2)LZbrzhsx6wu%HlbSSG#z-UNDQLx%p9s0LvnW_n7Jdrc!lYUbterUON{vZ9d`l zxptzw#}X~%J$`&H@39HW5d!U%!VnTqb_g|z9pX0B^St4 z_%S1tXx~TqXgu9dFq9{!4WSqabF@qEsfGMC=B#i(ai1EvB=@1IOxj{=&khX>&0klu zmH%VevN`U^uywTr3X;zX=S1UE)a$ub_VQ@1vqRrpWv50(pxpC65M*-a0^Y1D)ge_H zlbodU^oK8nQglH=c2FNCORAqiPM)AcLV4r~K3M>`GxKi?7rFw+75u2OQvi`YoCGwc zcwUj2szZW(w5E=#v=hy4!}y9`dR&#=pF+hBiS(T!jMisW+VLr~Rfk0Q3Y?@pWji8J z($>&&yvSq(@us1k6!=IE*Gs#?uaV#%<-4~mv`x=yvR-{|T+du)v3XIL7^D~>8d5}%FKo3x#I$^k6YeRwiB}S^%6SY z$@Jl?f}!C>ql$_Py~ZBx^S@7<2|=Rmxl?@i^UQZo+N+;f%+}-PEBJG(ToC1`qH95f{k_+8D@T~ngUX#V{y`lSU{8N0_*%`5IUErV+cMrO^l z>gUf25A4#_=WJop&L-6%n0O29wp*wslB!!C7e0WzWL?&iB`HuCETME`EsAHbZaZl% zXGp2*@~G&*?GX2W#2m_c{{np8H++YP0Hh6znGKf==dw7o{@*e?$;}E$_a44Rad#g8 zU5WmY{r!3wFyG{lMDtkba(jTE$mYIYh>2{jIg`kyamZx`jK2O%cJ&&yuP4$?5VfC) zVck6d&H!r#?mDMQ1h~vex>(*xN%FZ85a6Z$(aB3rfqQEm#WhkkW9ptmdgdBCo{<3iB;d`*Uww+MKKe{B zok}s|Qxy|Z?fPL;)V>5gVuhU-lozqYTi<{v-iS!EipX<2rmKAtA7^j6Qa&oQ)1e<1 zIz`iwD%~T@bSud(>>l3VC(&|Fx#IMv==NnNH~z)GsOxdOJ|X0{G7#|JNqs`JRF^$E zWX!?J9=KlnB$9w1*SG=K%RneI{dw;u+sdd^`y_V2Hh=3BZc}YNUclJU^z~cnX`P~M zX_ureLprmX&18|9K!R+w=S+ zRrX2Xo21Ir_4s%)D_uq%Q8$m<<>iuFqV`F!n?%Xa*4snPBEI~#6j^A+#oau?Wolm< ziuCCve(wyw2%59|7ta{FR^RX(~C#!`&&EtA@J2a^4F z`>*vYJz%rFOFvK-PM{@ZpCH7@cKvD{GuMRKGLx(dTtHsecc$7W*f7^gdho={sejQo zX{f%$3I9LF&I7KBGwc8N0-9K&Aa@k*rCdbCOHq&}8Vg0S_a2R+qN2hGf-OapNlYTW z=#w5zQDd5>ZhCK6W2>DiS3_dJ6z82A1B^X|Tr<(!#2t{p$h&qy2Rw7wCrkmH#Cd z1c&@(TdqTIkIo1UQ5TfMFmS#gH{^#;CYLR7JaV?gYs!ze82G51v>9fo_$-*Af0g6* z9Pq#Fk3r4+#E{Ej72*MirzPidehR{9R1FIcsnN2?S_ zlUKa5M8&PAe$0x}K)5Ifjd3ysC|2K4enYb+X%BLRs}j*<3X^ex z%yM;X9oy&XJTRT!gHp>qIe2V#2(ZIrbLUz-HXEOV^OitiD1a}%8W`x>Lt9Gn~#6T(}1yk@fdw4x) zdQLk*NwZ_8iC5;f;4_2%pp8NaEAH1=dL@+EcvHo!^OQwUkW%V4@x+1=qs=~F=fM_( zLM5u2qKo1O&CE=7`a#hZpos2Q4qZVC@|w|ge2EFx4grm6W}h$fN>=(OS5>YmB5a#> z!`eV2P)iza0WqAxA)K^Km6o%--@TuLFVB^GCWJHk1rjp)|1ID$uY_Qp(fz!A)vOB7 zSr7_4guIwbPu>ca2AzbKu%4v~f$$WNNgu0sD|nAu)P#so?;S!?5EFLWdVVVU$N=gu zL_~J>W(^tY98Bm5S&?n_Iie1&$M`v}8KT};*Jc2$mW-2`EXy|rok_*4huo`47o%74 zszkbJUf-3}f=Ws$M{MCMjoJbWuz$4l-XK;@Rc>M1W;qay$Z}A>g-u;&i@vgjyTmpS za3}$`TWCJV`0xs@A(wWjv-t#S0u@o4d=_eRk0jbx7gHTg2PD867PKh%?JRK38&6OM z2p6(ebJ)0r)(*jqNd%s3#)#EEiqYrvJ{3mm6pWkl$?J1_bUhHOQNzud2ghLrvnRu<*ZA---LWRS}L1MaN=~q7W!3e%r2y zEBA0$Kud09&?as~;s(@;O`a@clC`6iKlx2xi4ACNrE1vCJ~r)OLJ#%nCdNCvTqS20 zn!7e*P-jsT@GnbCDqFo4m8?kXhxw%NH zDGnYC`@fX$cSx6=zrr=w6;S?dc+@}I#%j9Cs_w#dOUb7_&y!_`KdyVdZ?`DjUSmjy z;tbQQ>QnVSsJ-Vgmvmj-PtOA!&akRmVQk3xOwt?r`Mj#|d{!9*f?#vah;FL$`JAIg z`$RO?sum18(TwP-k}RH8H*3@%orM)&s$Di^ssumc# zv0T+zp5empc|GD0OHWPDaOUc$yse%r*uZKx+Kb5HJe#nN)nQ2yh8=vG)iL-~ZQAO| zjLTdB^&q-(AQj8)sFAA%Onsu^nzq+l*tjBj5}HgqT^&w{r$% z&b*8TaVB(#yIE*e3kZZ|etJ7Bv#y5L>mtrS!>Sf`gzY))BDNLjudKb#SVft1V{)ud zORZ|*Mv6>z`9;K#$Z#^m9Ld0!ndRh{)!J>IajoPGRl*JiuVvGIFsLRdogk8D-RJ5G zVb@88uu)V~b&a6jtJ-?8r$keUec*nmo5=0A+inF`H7@asi9HgsF_{XbTEnqD7h2VR z?k&lT=$B_!t(BaW0)n28x7`(bn|9S{nHkQtg_C0SNhOV*a6wEX(ZhQd~CHx(o?I2 z0f{yvqVnkTvC*t3wQD!;tmbzaoI-dw2WPq+{X&5|XY`8<^)N~QeVCNQ!9=RuM+onP zpcEn#A9Gi#n99H&o$ah%uJep1%(Oa{%chtSL-Hz$Dz^yLMBb^n0dHa=yf(A& za`XhNdJu|fW<+YM;tT@0p~>-oY>^a_m{e(Qku@~O+1!G&1griZXQ|*iqFp|&_e6(8 zTGdG^Z39lE3pWI!2^6RnTsqv0NLGJMj`QhN2c})`&(6?86a}E7nAENqt|@r}XB?Y= zDys_g4Q1E}BJFQR1oV@r4@%2exbW7i$800#(OYWV8y$ z(Z`HPuvPc;^Tnv2E87Ctb=RGR^iX(=&(Vj91RLE6?w+ojbTF&9`=swOqE zp#AhnZ*R0b!jKM51++$Kt%zJTrIDZ>(NkTTu-q9SBM>n_Ml`W{O{k%XtuAQuMiT}# z($lpxVx$_?g!iMPT+S9u%-P3IezqXuOf%y26VKk!%+*=hbC9zO3|GJ27ZopEKE0&V z<4nb4=&;VlTh#)c2b&SYRQz|p?q1_1j;-g2u;Qv=&7#Z~Q|E4efPm<;Oj!9*2#Y-ddMW5%8)FpdbWCJb0DirkySm5Us!Ca+RHqHZN5cU!vGi$=>QYZ6!iKxO@S0> zI<{%Pi9lFh{7hAU8S|lYr^qPscq9gleajgG#s()4mJM#fg|iFnzkj7Ms37u z0j})K3sHxI5XPs%KY{vChZAGf<6EGL=2_K(VBrov+!7dIJ3pnITLi(i&T?*iOF^(q zyk9pF(sDcxzH=uEGNos$A!h~B;5Dk}qk~yic9uAFy8|Gl&7r#MtUwq!@742E%cY*& z*5(xWjvk>#^k`yk9wE*%n+5w3_gZ%%Db;(#d(=~$oK!JEOq9VU&Jx{63*`!My%m@!5brNIMIax@!v)l92euy(!~QKk<4&ce9QlMtn} zkAKy5o;1S8ss%bvH6zxl56a{E+l3;;-Fym}X&E_LIjZGKPZqUpss#@lX2fc~9if-W z@v75Ro}MBQ=!>A_Zvp|k2v+?~AmA3k%2q*~QdfDxKUw&4_dJiz+w5l?$h6S0lf{ zGdw)csum|}oEdSp{e?CbOEMfu_mW5@A2i)L<1jY_7eoL0_JZ4`-8)75*y;#@r3!cZ zNJmj1F?Puo6}^}Dtvkcty_c`V3>W;%4Bt!*6K1%Oi7Y=79?WX#3=c+C5HU-|h)fU>`$JXGzJZ5-iK8a!ffUl7L?((v;o&mPT)CH#-v}LO?DfqDuAI z!!*|%;V+2r+E;JTB4z9Wn`pto8{=`KL->2>dWgrVImQ1i)3q?#EIoxbtws{EkNMZ99MYV2*E zaM2K4jz<08GzLoh$IKx^oo`{RRU_yeE3)pm{-hGs;7Rr;O1zkKavkd2(a{%(eiD6E zb~MmAMbsUmOQubC$vwW1LR^mqZ6d4Z6G}!5#jX01RDQcOES1om*|Y>v=N^O(IeIU- zZlRnuRsIK;@C@U_ufnWrY65=nVe$FuRsQ(Nxi)XiZ6s}4UX-dPb2^u7H6+IayJk8;5`5hiUfN}=SDjx z(`gK#J^19>>gBsU;dp*)2B}f!22$(fBrv#$1m60JR-{H*rJ>3*+l$Y35s3C@g1Baq5 zfb}HWd|~P7obD`4gSMbn9%I^_JYVVUcyXtU3?p`(kSYfNKu;iR2R-fI+jS>nYOz%# zsFg_aLwDi}woCKNhzq{UmI`Y9n=}o&ff48UM)uM{pg|)gieIBA_8J_Gw`0mjuyky9 zB|r-YRuC3mGhXf3hNXE;z#FD!orgiq-vps1U;*(z?H;`Q_%~|!)CfXlalA`4Zo^wF z=cKa`V~kLdyM262wrT{gW}6Xr(!`l!T9cQ}C?X(QCO%7ens_; zldHyE*53~&3HWrD4qk562(T?SBW_m>WrkOMaX!WGcS`C0zE&XMpK8?zJjJLwm~SpK zE6rh2vZitcY?*&TRjD?a{c88GKDz2zIE*J)H3Cmzpl&;^KM|v~?1H3t%x@jXK|fZ9 zYhjI5Gny0Dn-RC#1L^C3K%lNXn&`!UOp{fbq&d(m+Cs>jL|YBH*K@pjLAi_eJu`xS zBusF8P$&0O?#l_%%yWIL{8v(rm-0*l?z!LrPm7xlZ8ZWRF;ySRH!C&}8EE67-Nz!R z*!zH|XVgTiMv!B=8S$X*wpZjIN2nC_hf6AGVz9~^ql=9a$C5^|QO8n`)gqV@tL3bR z*gG_lgGN33!fk-!`c54-FaLTD{R!`$7yCwByX3WJj1G)ixlpD&*O0SQqqVu zO-Fq5la4PbZ~Zj-ghIs>lbH8AeJVzi+;F>ljq*O>QEJf>_!NHrrzgzd)eGcXqOs!z1!CR5tzP^oIzj1eb?{T3Q`Od|JYB@j7chwY zt#-M%M=~>#xN%G2Nv(8YZzYrclrwHyhv>lIsKuJA*dQ8N(FoG!&E z5gBUN)4XPMmuX#f=xNN`!hICO*YO%uNWjVBcq6>MrD*c@4y)Bq0<-k^{o#pLGV(OZ zPLrzTz2RmaBET-q{U#f1yz5N?PGqV1xPZV#F7SDNMODdq8rRM#rjSYrfx}YQc#srj zNXs1REXu$+f*b$mIqJ0+7`JE%h{S<(>;*oytg|e0f4dm=kRZtMX2fSI>?MYrMw_!< z0#YFo42kGdhv?{w?DB{NLt;hsd`Wm(sk_TLqe=F!5l&=oxw`r#wtt!ucsgE*GYpJD0Jb1UOnPp_VNR*euEvE>o(=Tqld6=fvFscp}CdW*!g zCGT~VXoBZ7ajM=KyfWCU+24uo&*)E+O?`~(0I~tq_b@KhgAL)G)t`qwV`W9~>AQ8V-AR*@-%cn-0S+yRY zuSpTq(3BYXaU52Foor{&SdmpLP!S4q{40>11E1<`=f4p{Ex|Qe&Kz5G1u&xf57E^u z;gUw9o9h0mXDCKrtqUpE;FMQc(eI(JuH6p%(pPnGYK^%4!GvGu&tm&1URFX)Xi5CD z3oVIDjo)M+VX1bEWw4}>C4kJ_=K+~*dF3f5*A=FO-}v%>{)T$xd3zWNRl+d*?s@TJ z%Dw7BafvT@!iL-H6lv$z1<$9#=B-ST45r8ycQow6?cn0p)bm`cR#0H985vYiR8hRV zcmpL5q#%t{#OlY(rn|CZNk?5EA?ohGtE*dI^Yn)xsTEX*o%olUek3kdO<2&cr(NSU z?se{azEvBBoLzO~>kLhCd#H;Mu%Xt5YC*&wYV_;8el42whArx8i+=AY8cuk2t@u*2 z%heTcz!yn}=7CtdX+tuc{;n}rtq>*s%Oid*AONnwToo7RpJz8!6n54p>}+-icJ@rG zR%jC@+=MroaGI{fe@zzto1Rb^;X;=rlt=trP*g%cC`qeazI?Nq{#wBAqgsN5YCE=4 z9!^-4$>nP4VRmEL)3O+x3>KXAInF2-`^({syq_ilsX<>trjB%fPDt$OuCHBJy5{N} zm55NQR#0WEE3$h*5&69S{Hk?)oH%vng@Hks?=0Z_z5@YGvT6lBW}1;*)x(Xw@MaB< z2~`c3C3RPs7ZRO_TwJ)wyPO~wax9bOxqZ8uVb#WdWP z6nf=viaNf_S$Yyhp<7U#^p0Gyie=9{lGxcxfiR~rjh+xKxn^W%HRT;#M*o+lur6qJ za%g_gDdrSEmvrEoJd3(OLS;sVFr;zMveXnofe4dHjTgF0I14(X9r3@k)$+GUqvR_H zQxjbt8O-%cSiWXx6F)&v65}$<36oG3p62A!F9j^Y^mEu=_SooelUn^~wX!p4Gy&6B zyC=DRRZ$lN&hAlM5x2mq6$kQkGqR6*@O?HOsidMZK49)mwQ2?JVp&c90Lx0-ZuK9q z8Z(Oo?PAp3`a!Ev2iYd%YUYq^rz>i*Rhx)nwn-hBsn146+7;&G-e*@s6tG3%4pIL0 z0Bu37+JT5hnUTE;idX1Rr(v>i`g2JEpwGsd5|w*-e5Bps{QB*I@E)VB+62ysHY3A0 zLlqtK$0?bp>WA&*x)fTq1CRX95Ayz6cbKQ%#zbdam!Sk;)!!u|xz$R2Wnqyo&?b!IYk&j01_ETuXb1s!HHCkP3| z38(%2gftz$$O(=uKt5b|i7=4-khq{%f-IKfBkl(G3Tkrh)l(Xk#a68#_cP4M{%X$= zNWc$1WMyCXu_xYWpL`3gT0!lz&B%VDG|*0#opyS1sM>ynpdjRe(}_>H<_PgAI+Ye_ z5B2R4&+rI7lHhH=UtB>kT`_5RU0G2=bveyfnjbM17$gF^bBHSXh_Rp}XUHb#9En?s zN;d6xGSR9P{7o3#S07=`>1y5mKV~E#$k2kw81>CZY6jlwd~sRPOt%0^9Z{^;8>MMZzs1@;XHS zMAYgA8Do<&@6(EKNl<@^&YtH^q0DE!@`pzCSNWe{bk(l{i%XFdiW|8F+l%})*VMo0)D9!t{4+P^p#7@UQm8_k`6-Tj3 zeU9ZXnMJDcb4DhDnYQ3yo8YJjxc?al@YeMFg57oTePmN^>*njE=6&IrC{n@yNN*9T z-Bn5o)cx`WFAb@n{K;lymb&c=K7X5>oFPJ1oYRB z?mfI?w|$BAiiRNllWT;0MZ6QgH^IJ}kza8)wl#RMr;EDiD^_Tv<4-2V9S?tpm&-B# z7>&YB1>mMW!GzYyxqCnH7_Fguv_QUzvbLS5|G0>vDu>+jdBq2$?QyzL1K4ScRp64q zXm!se@LBv%f%W-j?BK7ntlCBVb&MG~M!ozEJF`wm)33G{XW`qZ6>tx# ze(4)_ns%w@TOJ0fAbg~0-*%90K#JS7R$x8@pSn0-Gw?UQ2l*;?r!u|)EFu?l&kRcX zniu(llnu~8ICV6YiEwP4~f%9hfE0DwMoqg~^Np?st60a>ZN$sl#Om0NzmU3CPnhEMqH6dzt zhul}fx~isX#tw1`n8+sDzM2ZG$EDqM>MQT2{lzmjg|T96j?-f^(~k1$(AvpfTA}Pm&EtcmX!8tA1nylHE|Gc?+DKfxPO13o4qlcv^=t$(dmD`3BhbdH~4 zUUYzqy}3|8!MV9$+Y0o@2HyTNGfn&cp8eUA-E*W>YezUl&Mz=mZn4XiuQ=)n7fA)D zM4FNF+9kKQN`wGFGPk3|VDl6PfE{vLAq%)rG&Y9w84psXP?Q9iqtTx#jWES|l!r`(cRFkeO)J39XQBMp7WZcXS^+=(y>>%sqyqa0(2^L;qzs>S*KCdyVn~WDC4>OyE>qY1$niqjZlq-8p+2bm$=CA;Av8fEtm zdLU>nAL}Mk;0C#lx~`Gj2Kv+W=E(%%^OiOi&`N>w_5~G1E7dLC`wUR$|IQtwAYNWR z$T10sk=s!ze^7jBx>YB@p5<}JA1sgLArQzbLBKEm;n_y3lR61tSZqd8G;XaCu1f#J zB9~k?39?S7=yLmfM^`XCy6c>}*njd>S^6Dcb&gdh$bP&TN!`!Z>z+bg#}q%Dv4B$C zvCeGdrB$2d^Fc~)KpLZ;t6eSGBi(zaWh?hr`&8Efvp4GAJg@HJ;mnVb=|J~HJ%Je zz&e2!z5_hokSz{O>&voJ-1{hfd6@w&wijo)rJV|+j?COy8HqELN%+C&b zhTC8VrIr@MlP4tE)$xS$tU7`ISU~5gBXLZk7u`mfxHG&eD9A|YnQPSviU*`_D=;^f zsoTy5j7f#xdsYS+m${Yt-7`%u26}V}D?72(X?z5yaRyO}H@A*1f_Ul%b1ATCqe|-+ z?NJkZf=qUNjTx&uEHs7~IUtxi0k9yL*Fua$JA^K_lOgtBoxoQ{*vL+l(vbKPe2+}d zoDNN%W?6LtW-&Xi>SXk_gW&YlKj~zMpSn&EEDY;kop`%q>#DJx4av)>6Z|^SjI37w z>}j!?9Zp%&jWUCjqzA~bvdf`RAZ0BdS7kT2_7srBQL`&!E3ju3v*KgYFb`)R;r89 zvl|~o5FwEBQd{Y|8+t|C#d|iL$}2@KK#&i1unQkd0+h8>T>nFcItiiqR-GWjsb=IZ zxl)|k<4Gb5wJR4vB*+k6@Vu^uO<7AmDRng*G}=_FP9Pzc+~-}5Xm!b*#3V{_L6zK% z`$Q_ZaJU)StiJ4O_-wh=&5-D^I>Chuyrz>5yzjaheImf;8);Pk0O8Gv%*s9P#n7ei z3O1xHjLNMEj8Xm`Mi*Mm*9l}xF(db?DK&vqs1i(bXIv6Xfgm-u-y5X4n;jc>cMrp0 z%dQiQhUEHoNl;J22t^`pS0vYoBwfcF(`ZYK9awBc9cyX6 zRVSD)-i+LXDs)SMxka7#XR@F45VA9eb|{xnVAYLOgX#hWn0s|2)P}miSmG<{PFIiA z0dQX0+pC*|5_^?ZkNw717q)`0zPmm^xuu9iT{wUh1`Eg;TytKCRX0qmC2rzM^+9c5 zkb0~JFZK%0o9 zjXHscJivj13bT|T+N{KQJHNqunh_>)iC{o};|X%^AZ=)d(-X{y7vh5vzh95|+`o-@ z+y2HedVTP?pfAXvSx2SU*J!HL!}XO*L4BoSemMS7Zo`mV);htL>`*ZVUqg%us1E^E zq-8soToeUp0`VSHe#2;`rS3P3p%fdg6C4Qv@qjv#BMr2B8$hB^D#6KY=#a>Vu3$=Z z?|0~GQ>E2tZtpklKk-u}b(H(^z~G1v+ofg9-Npdt!HyhMim zbl0yEm(98+OQRr6md5AQ^ay@MS7*>+Vev@Y2LMmHJ9Qsw{hro}yH2D?NFl z(hpo8`nPU5a_HYMpV8VKOS_R7l~_Oy3K7j^S~K!-H7GMWg-!=7d+2m<0MrRiO(=kyoeap_kvW=Ecc(3idoIR^8;==Dldmd#fKzVb(>Xv6s8yp zzc`iIBi$YJBJRNQH#AjP4Kor91!)U`}hxloim@fwD469DSDEKuahHw69 z0Yx-7#~5L~Mp<=&MSW)E%VX9S6aEsXa-Ru}QBTAe;bB-c0!OiG4v$&6()3SO>t<8^ zqF1b8h)hr@vX`8)rLo4;P>j-2WEiC{AZtC1RCL1bW$|?OKxBXmu>z`}8o}&p8{R48 zNYmfogb&iqHNr)Cg!w_g1w9qC8sh9G_XO7$u4cH&=xE7#onh4r=HxlAZsbli=hcww z?WB%0!k8fyl$mQreynykl3UR(&uv1!$f_5VIoFK*NV)qmpB{_D)XZwc1&2sLC88s3 zqKuFQR=rF87H1Tw#j&xSppDWfnc^@p7g=?JAUW#;6&lBje7SBLs(Glo4(~SI=ii*dcepH_=Z1P4w^PcZ1ObO39HJ-~#byLlh zw8SF>1#UqoFH)jj9{KJ!@lJi{@MPf+4X=zgBw=_VTEE697QO@5l5c zn9u1&Rc|#>HFjKMU{a3)t6q4G`0~il$ISDqkwX*vsnN}W-Z%j3h09=M{(H;@5_AZ( zw_WND&BT>Xw(48?jN6)Fz3edAE_B5r7=WZX2eM@(b>cdVq)$&6Nx4GwQJu+Ialu~e zaSh%Qya3MePFDJf)NsF#0{C9qX>NA)XY-wA)r;d+DAfSl?S+&A5*vHSP^XQJlE6Ku z618_k$uU#LTlG;Wv8eo}Mkg|)bh6#y4BFxzUKbOh`X{m?pybm^YGk5p$(P56E3L9A z(Fl*^gLskhL4FyVvY@zvu*9)NYnKrjclMo${p~6*ZzdXHM1<5wqR8s>^Kr%ewXDy( zXGg}cnrYUPDeqX)^R0UE(qfYRG&UtI!%r*FWz@x?-jmvtWF*O0=#4z5Jn}~s*55GP z)F2BD@9Ps%%9*H*o?+|#VC!Xyo?q?iXY`Vb2vfpEzSlxkJ`K0=v3`teM8c8aLhIQd zTSZ8#I6GEX|3b&%+RMJkG5aFR-cE?lkZ^ek?VZG+# zC$t5?q8)5&-y@$67%7Jmng>Bihp!a6ni|? z8PbEIFe_ZKgQ85Pj#r#%)eE;meDgmCvMggHdQ-H2nCawL#O2d=b?J^>DM2q$#w*tS z4B*G5lbyZ8q*m_~t6uOiF8Xz;j46qu#1jJaA=2G(C1$T6WM=R4sZ4PREay3O+&U53 z4$}xl0m~?+h@ymjGtDJQ1Lt`A09a?$3vfQiR2QciBki9R=YT|5J8WE@Q-~d&v-1$1 zvn~1`N<=grH#p0xAA}}WK^Y{= zQW!(+PBwaLk8$gSn?~O4HB`m?3TI`m>vh+;Ot{lq0!tuO>PM)nGmM!O6sbR*%amf3 z?xN1x&(9Ftcwq*2!kZSL%$xpi25uc)QJv`QObHh3^n%K`I+put!faM(OIaCdnnLdg+}{&sO4E$(6g<2p?wN5-Lo)1 zbX}1rv$$7Yyih&7_)oHU@%nX2F+_RsIUO7>TtY}6E-^NnOK1$GKM{A#Cvw~|uSiHA z#>S1=j13uSNxJX>Bh4}SWDcB4gi~-6?C8ru=LGe1Uqw}_D}|T7fNlcyW7Y1Kz+iRl zFl-eKb3Ynp7+ue`>cx??V^ zw(9fIEQf{9F@~z`cL%(ENE_Cv9*zg$L*}XTb_FJ#CIzxE*K#>&uBkFrAj!r!meRyX zy|6Pvj3|f^@#kZ!=#&alM;xP^pA~L~pMAR}FjPg2!H62NGjP0&4edY5v7j!cd{id2 zSFUnTryl4b%nhfeVZ9*0c+)#*Y*87F2`Lfjm&)dG>a!6>n8<}LL7wuzM*Azy~8TX!MUo9Kljjo!V+S@puDB$ay;#}<`RqOwSWNCrep z%`f7dXok_gieU8!nS#0a-;tPJf|aSfC|q>WPcMEM{mq4lh>bk|% zr2Ib+-!gVI+uV|&L?(^QH3rdcufB*INHM)RW5G4PGN*RYd6`Ssu+q{uCTEbJLO|>&Vg^LI`!9{L7 zor_>rM5s?s$Dl?a+(fqN9jtCT-DnL38$ALdN2YRj7bzSM5P!OZ78=h}XWO98wr<1F zp29&4K)oQm5vI35g^fK<>%39G9R zF7VP=-uU)!`g)_Jx&aHd({GKM@F1w|DQs0!7ZkGmB3OBXAY2k8Ip67JRA-GghLGS= zFKkD&=^ZY1PGugKn@ypD&qo`_lVxbzv@dvT@Bm`7w*)0XyKQqPlLtbXc^Ws7=2~dg z3zUN}$(@8z)do5eF>J6h9oq()g6on@@0776WfI;jKk1*^nywOgjF(wJ!Bxq`H3lnt`q`8t6_uL05e_8G{ic zdjs;}rgwsRbV}>0qI55n!YQ^~cn{>`Pn2JeT#WQeEmsdu0aEHw!r3wyIHJrmPYu8{7 zJFQ*u99pbheK<5*yZGLnnyg)NLZh{F1BV7{=V}i1*3Ly7>a3kpIMiA@^EuR5J881i zsoL6^#NlkKxstb!-)g-rFYBinCVXf5!72Ii!)zpu}YO6_ZyToeh&S90+ zB)7fNYLwevVKtU;D7G5qwzn>~8mDqxW;M!vFSQzTI22ipa!*UF#t06JtwxrfPG?#T zys}P3$2D#9L}&BK4i^Q?x^9OhaL864(V4RW#BR)dejEUTd> z2h6gwI85KlQpJ%`xr_sYX9fq1^06FP3P*C7go)09l{LU&0$`g1AUKQz%Y6t32uXQQ zFllQzKy;qT0VaMrhaJ{VIpGp(XAce+TRY`lTx7M#&u+K2wk+p(q17^%!v$8$L=KkK zBDa6O)grflp4F1TVVl(=m)UBygmXC8YB`m|Iac$z9Pm7h;Q+BFFAolFFb7=9GJ>G# zJRG1H<%AK$$#5Y2sEosK!W0&B97bp!ha9U`zUWZmRXJo^wQ`v(Lee>8l2O1R!>X0b zq?3ljVTe^Dmr1i~ia4ZNHFG!&wrb=X3?dblLyA=+50Om%Hisk<^Eo71HS+QTR*gH8 z<3LJ?$ll^{5!`lH@WkNE;Mm|(aW=mb^f=_U6*L{-^o{#|w;~3m3-v9CD69$VAHo;y zsd6tPs!d!n>iKEL(nyzg@z|1zV*ePL02i0$TMgZruvkN9sxPM*NvdiZO9+4MX8(0j z`(N*|rW<#IxY3WtFeSm`(I0_`feufM&clEBE|6+ za`y^Ywco~Bo&)hqaRQ80rW<C_1*Q=~jafh(rXaOYu+&Dwx@t z>rAUL$0{qM<}_)jCl#y`g5D=5dmQxG4b&7HNciuL6PoFv?V8DIz_s&D?*_GP9?QEB z$2u+;f`M+n4r_9v)gUZMy6LS_+ZI4|UFxCvZ07}-F^Gf`K~(7wEk=X|)*y5Uu|MZ7 zzuN4>Cs7tDGkRL4xyTdo2J`o^ohL*r=(AO(14o?(Rb9BnlSsexIrj!61SwdWDK zy@{B(7qSeTF*2wMtRXib>;M8Anp#3RUgYX*J=1RF43ZNMCQyS8fms^aDT+>J$>)sX_fpHim0Y^QOCwos2~uQ^e>Z;I$TK8$?!?sg>RGRl4* zrfS3lpi~nvPycmYuKY&>k!+W26d7C*B=_M$CXzcTv6UdMd&)QEI#0 zG(c5I75MuH&x9TqMHRBx$Ool2w9+Hf7lYC-8VO^e4WCOFvjB~^8j?9}u<6}0wxYOr zedT7NxMnVc2@#4+CtMmr=$;T=(vYOyo@Weo1c&5V4ML2>nchw6!+EePMe{ITnHLf# z1Drp19@dcUPMOzc^=G(f_*q1f!|R0D$GM*;v?-a!yQF1)80z6=bGo2oPFG7fU8n4d z^A3g~BQ4cQ?eLTWkKrPIS;A9lt5r1Bs3KzzwpWADE!2(tvIyy0lj9-?E0ko7^wf+F zgf@$W=3mOyHk3~R7sf-myirsY?4`7JezQX7g#=0;DDKo#hu!ycJm3GL% z8=NUJA!Cp=Ib_5+X@?z@o`V-*UlKYdz1-VaShQ?aN!c1A*zy7i>im_gK3H&hNXc!z zb|o19!6RYR(L(vjA`9gS`E{<<{Hy`wVGZAa*inhd;C#iq~P~% z5XxkX>AgxFdc2pRMz12XR09j~YDo+~bpaf_6U(hoC^@G0O8W%em`>Lis9Fs~DYhDf zHYqMw4XceIb~ux+FZ%D*MlXu|HB3Uf7~*SjmX6=tZlNQ`M|1NfLO-G)_?s zCiU$eh7t#8qs+Ixw{>I`dj}j$9oWZ;K~h6DWq|YnUSvqg?I2GB80)dQ0ak z!06DN9OoLX4qg+OjtPpdBwLci^MjrXT1e~M``kp{f1MC1k92UIaSdHe8;W^RO|rA@Q1d~^7^3S(loRaV1NgRn&FP459)pUBl%(WlVmS|hA$rPZ)Ro;H|T>uZf%`sMbFJ3&-eq4YaU)CdV^zJQc|#ePBD^7Io+bLi)SP8{ z?{w%ltY`e`pTB!Ox5oq!ng*BA9kx>OI@k@7lfNKCT`roX9$jzbC!OXR>>{Byh?rZy z`%~(GnfOItblpw2=81@$|EO(SjVS1W263L_NKVx#@k# zew2e-ct844zuUs2uCp41%s9vNKG-G?QORfFD9~m*!J6{cWzIR)7tRujgR>s!c$QC3 zQeuYX1jkx%UMH(zy$p%|cm^ts8FB|v>X%9*Y>=#xJzSZt;Jws@`Vq`BIVgiF)ZbHz z^g;Jb*H5m?5VrlJ`kieo4{dEFG2dzwa0M&dX%DNo-7M#FBaGi?UO4SFGzD-?HNCH> zQ}$4hsZEzgf1>Ny*q{fxqDxEFl5>o7wet_imq*Vru7&n&3_$>6S$Zx@vjiXMZr?Or zc22^XR%0+~*!TZbNn80EZN5hCOQLUcIyx~LgS55^Y-LMq(}mfGxkA@*XLGDZH@aY> zXH@kjVVi$ioL$?D5IPMLwtG|Xvfx;fD0T$JlPR>5;tDUfHO1Q< z$PO+pi_^8OqlH~h&v1Sqx7^>O;yT>xdhrq#vtAuL<%RttR zy;R+`#JP;VF3?pa9su`fj@!I0(C8_!8hdg9O!YSki%b18OC{Arw_)482Ru04YV3iS z*|2vv=uJn7eZD&oo*`o`)P*H^FFSHF2>%nDqATgt_$1S|z}+7Q+#~ow;0xOSQDsz0|g z+C-pB39-wzFA;E8f|!a;wQL(3xkeawZ!;=9+^-J-EAWxRRp$CidPWox9Yr8P@p(qL zC*NumkPj{Kp)Hm^b`rg-?rs%Fo?N`@0wa8&yv8u8f%sMM8^MoKPicMd)ZhSyxfH#jO%^mEal*;!eN$8f;_i^}k z$61Yn%dn?^F03e8F1hrDMQe*TsYi3jm099X>>3ZeqROfRUKLu6g3w@Jeri3(Chv6% z(4Ti033vw@1*O4O53J^frSgcbE5grbXFKr+ih|Ufib@CXKU|E8!R`0NP=YZOB^*CZA7=4O6Oax`HwWX+In@s2fPuGJ`3 z?L=H!wQT4*nN#=i(~&+-uOXUZ)c#FVZK!29uC*EkUR9A5QfmxTtKO!jxoi$paUfK~ z>DgaxH441K``E1xr{}zFfhe`Aj!P`G8b>0)e`(bb&dpaK?uJ zhnkX=JU&e-DP=mtA7seuG?W9uQ-b~z^cH<9rVzt-n|n5Ze@|-~N(e)9sw%%BFidsY z8<2WDjbet6H+`Y%&qgeqsf|XIj6prj{a$q*&pQTE924NXn_|#wK1P zf{C_ZNt07>TCUY7KrYtwbuXON8kOB(81i>PYW%(1iGLTM#^1X-|E}(9GQ5P)H3}kw zBY3|Fh@;1iRL)RI%^0po1(8iQeW$1o&=>lu z*@*1j!-XMvTkv9hp??G&q(`5Ze(Kwl_xeDKn)*yAWe0W{XZKM>^!KTk!xEUy0DOk3sWNA^E%@VaJ!+^zToNFsZc2rVDZzse` zU#1X)OyKmPPC&)%pQB>-QVjC&=zd+)CwmF2 zzxGlxulKdokU;nWoQESXG9{yTY!6rOKrp z(UJ#^Q&samA^^~vuJzQxeUt{&t&&8VBmp}RO3o3>{vmiW+w}E1e$BB}l~omL-3GFr z^)-LGzO5(18Nz#CM1aJ5SoH(=5F6cdD1b`h*yo|cDSwJlQ=%F##bp_LnbAvaB=Stn zxC~Q$iq$B-NWzE8FJpvCHE-K=(HX-In-N9vO``b1aYfbjawCg)&_;nvqbP`TIrH7< z66=l5)?k`-(=m`R2?Q)b%p;OW?g-+2eQ?5Q1A*CjW z>U7)`cA)?)fc&r)M)`Ir_@Noc3tO;LSUm(zjVM=pT3BQyBu0JI!ajpwi5BeI$=~IU zRqjqBk1YMhGx>X<+(#+EQi;a*=dZ0=YLC9hb{f4~YhKau;KtxNw1Rpe=pqWh4{*QZ zZp0DswreXr5Bgqdj8)T$;iKZOf)?Xh#6o8s7=0BJP5;()thMX_D+cjYyh8;Aw(As&2!_?~Nw z@j#+R0da&iena!vR*&hpJ|RA;7^P*9^wYlXqbm3f^fciLR(;#!d_%7gFPvLCEN8nW zBUV5hT+?lrVp!`Dd+gFSMhwgNI`-F(8SZg(V_8J(#m?4*Hud3dBeff@zpb3V$n*_Y zd-j3MrBs-6Idls9%VfL?F zvj@XPb59cd!TtytLA0i09-Lt{iXRB?|B`EA*A7%-nC~8$LL}q0I)tE6;NpqWQ`mMW z^5E=FgHuy5;~A!JsQuF)UJJflxylC09rS3=szK&JdI!CQ2lcEmiPxbbg_L!@$`f}9gQ5mz~vN;iEo#+CT_&$Ox)D>nOcOH1Zgk*snz2x{+*WEf1b zngreDn7-+%;YLu8{!vYwha8}I5^_OxEbxc-WAe30*-Z(?a_**RdeoX5jmV(m&5hcx zGRbNR=PDqpFXcBhjW0bw@m2BGk&35}jdHU3`bK6-yWBc}r=-|w3PrxsR4*R@yAwR< zRS7q-Sn?4BF&3J>3F@l-tOw)-NLw6SZj_>NAZQc?JEAzgT~TEb<2f~8s)k$HQ8m%BjrC4F zd#e%Fr@(3w2-)BCEgV;}rl_LIUq*>Td}6dQN|flqAz4|@4M9{fGX_RxnmJ+`o zxz1Pqbsir99r?tHaC*GyTRqOKWWTE{sx)CJB=oKL5W|IM8H@tYQlhR{>5b`BP`tKk zlN11s)|8Jh?wQUZ%?X3_3F_-ZU>n_5=(^kOE2Y?1TB*K0#2juDg^jeDk`YCkz7^xl ziuJ`?FtB3%i4=N(d3G!ynuNs z4zmD`(=R-5i*rfFUFV00ZDD!PLH&|R-SFwlMV9B-sLyu5EG_32%FLgYENyy8T8 z?%gcm^Q|V~HlQKTyc@@nu8cOiHnh9if44CT^R`Lo3h>XdyTL#E&!!lWR4i9R?_q&Q zDvSlv>GvF$+I7nB0qXI}gs8xif9M{_A=~67(sK~8=Bb&^LX>C5yWCkRNH#i%rw0-JLu$qM9NHcvK+CP^~DCw{N z>Yc{%wz1<}!MlR<*t~BKGHKBDHso5K>rdAkBtMUnwy^^U1!)qr$+xe8J&Nz6?#-Y8 zThlFpO(CPLrs-<hW z>5JoiT0|y0Wu=DXIPIoUR+F$6KGU~-{IX(yt}djj#0H7U>R^MQC`1N|7djLlet^;h zh=j^ObV0ia@$j51S30LEi0@hp+eyNcRh^VaM#y;qLPIV2QE5n1KSi$ za#5IQMX--?Uy3QZ53gp9^4=VHQ)NF6QG46X7(W{yH^SnkTTP4P*UNp)b4(#z(YeJ#-GIZ>O_fHhK$Aq8Fm9TcIS7 z3R!Z7>1$ArJc?b20o1w#i=1vRO+t`BS=7rKKE7-jrFo^lby}~)K6VUS{%!CK=m|%X z1jM+Fom)F4bcEX@ld#0Dyp0AIsLVO3id;a3q;Mk)$y&#d%(*3Sd{i$Mf6w^@!iNN1 zi&^TUhVTXMG*bF+a4i$iX;W(0u%o(@2loL#j?vN7jVe%FMo>RFP&2D2Ag+qwn$4(CY3r8)r-6Fssn_~Lq^c!Iqg|ENLHG|=x6Mzpx(WNK-hA2!5HHar z{KtILcZEuOAQ}p)d!Kl_?C8CZ0IB9!O~QLX4_>YgJs92Bu4uOHV^3EV`6wIU(8r8^ zumnv)Rls;Gcofr1o5fc@+L~+B9sev2>wWkslj%OKg2uZ)B$T_igfTvX?M2svq00R% zC32Vt0^dp~WBn|_huWX8q=kqj44(9yp^g<3O~G$}*TnaRrsKgejW(c(t(g2zOd~M} zX)q$mYLIMBY>)9SOb1a3yZ(tYL*g4!CA)>?TJl>QKhE+g)W_g*-@XZhCKVU0tP;{f zy5C39huUR3R^tN>$qPye`PDs7Myn4tab>lN|exjDiBxF!9 zyPOVi8+4Hw@^ElVa6!rWz$B~XBkItIq;NI%Y+5htYQfnr8)4q@RrN?f%|LIRC8WonVMoXcSkDJ>noTnt8Nd3sSo$YbW^v#V$A7QY&8q7QC#l3PnEqJ z9j(${#kST#L&dKey?alxnomWZUhcbhLP^>B;u3sd6myYOEA{BB#wa!YMI%>(*{-e$ zQhsH0(5E<&Q{0Eiwh3|VQ~t`(M4V9}^NHJ6b%z2|)v((GU9pCneOwo7IOPyd`TGvB z9d15EXGd;`!fdaz_RT+>*hgosw_}zMj=zM)i7wX`w^qj_wKVW>?S5 zpmufpDg2rMLHMR;>{GVB0X=<13G4aoZxG*rT*wXNPoE&CcoqW!j(Sj`^PU;>}8FEjB??04O{ z@1i%cvgTRM!g9dfK5onJeUliQw`PP!B#9S~2}7q=$Aqyh4mD5m&)=MF|6ufcxF#-Im56=zp79ic zvdw~^SeNSFXA0{`WsR?1f1ioTTNn6*N8{-GoTiIW`)i|ms3E{h{KU;dJ`5*8?gJKl zU7GRme(D)EeSpt_cPPvQlls;VnAGBtpem}+KBNyhX&;sRmXX!XZ#4_OFv{iompb@e zw5LzHe}F%O4=c<9r2e~fSSl+jTD`L|vaj0xmSOZlCTzlqvhUx5J{xB>3nM_RQ7+$8 zO*t5dqUv~BYPyrpw8tXl0&WUk6!h<)-9hshi|4ufQ=0P{*Cz6p{U3sUWWuVvBgU}P zPPdu`j2WiyyNM-s#j;2C$I|Zgh%r|NfB-8d!Z+$*c&tYyf5d!ybLha+RO$z@J%xCq zTbN_{Tw^s0$O77ZZJ*He5g$OiW*+*wXJ_@^M@A2N<~9qwT2}7+N`3t~1>i$J=5eOB zB!wv%FBD*AstiemD{UX#1y-|ol;g{NUrsDpoHXgzv}8w*-Nyj?&@TU5T;Vrp#43dDR7Mmd*!FN#I)YWpW^9TXf+F1 z!;TC33_DJf5yw8m80XCiG=ot51vUpmZ2kI@rS_}H|F_dRDj~}gva*Ic^R78VoY$Q3!{5))O(O{mf&_+NICriqYb&>xHCvO{esAA zEsg%tD3n_eR)Gr#$%%c`)K82aw*2ld?VWX|Eq9+F$9*L6;&cUc#*1^k8MeOb1bubE zSN8R$Yq{^Q|0SPh%l|x4F89+)7{o@#FRYd3-YnAV= zKrc1!Ya{9u=2tqansVPA7)~G0=4I;7uNm!su1@H!%DyocidoYEVG)0K3Ha|#orNkrp=%wHwR8rcZqbV)w~cX#U)z4W~NgiI!b;1 zHMY-F-x(vlJ*1V`^}+eU0|`9;FzAk;xkM3t&-lwwF?R;eqj@5cb<6%^U#EiW6p?lD zAKYJ^pM)rT`9D}X{6M)a_*MkkLf84@`QLLI2xT2o5Xza~gHSZrrKNknHx`8Sv6{=& z=(_`bLRd{o)fsmO=BeTL1Qw``chN+Ck<~1qc`mQz9ts@D7RL@QybLhG+5eA|1v0Y~ z-FPRqLmU06ez-Fb)@qubBW%n(ivC{@ei!1pAfjE6P@Kqc-pqtj=c*J%&KrixMrS<{e`#nP@c&Ku)uZndP~^Wn$SSMFjiA(w8mtcgz=PcKUo5fDAL=WeVx<&xn$zLF z!fJ7$U1CNJYSZqc*8FIsk+;$;5Sz@b7k?l#>!PnIV!GtpKu8k3I)^xjNP9P+_QUqz z!T2&Z1x3+$vdrBV8keSuvwQ<602elz%vvrMZARrzDq1exWtMD?i=oh`&OF2na^RkE zR*Qhx6fT5xARQuI~Or9H=Bu>cDl~l`1{Q$*9b*S_I=_ z07v|Z0W2=BSYcgB@9z-d&X*H>JFz@!xccxc`^*8{|2CJoujKNOjQQ7tw-1G}ezYNk;0gK#!wzF)b{aGhVJ&Lu#Q3SEsj64agphI|1abm_^bo0`mjnU}&v0wj}4 z69pZ61x@m#VlP-$u`KGkifdVQT@?%KuDWa2by3l^y{oI=?|vpE6TrQ`eXr|1nERgR zoSAvb{r}&s+-vl9ikwO7Y26~7PR8z77cLRt%q26=bcuc+@A zRlGiQ5FvGuz0~v|BYZHbf}T;G`s=Eut~Q)A){XpF8WC#uPXn`tcD1m2d5S$jDk$6c z7rgA@xOr1OM|67tl5xm%tsB9&6L?_uP0j1-JZQgmGw=4!i6(DpJbdV#tj zeHdQz_S#7UI3F;TQe4X$T|wID7M!X}SvquGdkYh32)az9`Jy{e{z3CL?g;ItWA|J6XL*Ia!-P0K5q+6Vr<_}fPJ(*re)3r2uwVK=0 zNa~P>tDe1#5VfecF^57yb%K*eSkWu`WT5$B`qCy(bC5#f%UHwV2n>-L9h|yR2#o0n9C3(og$!| zzr=sxB6mMO#uxa^gj>=v;YO=v-MC{!iH>M-hsc?W?S?CMjC2@D2!D#$>i+(WfJophT;t3A4FY;aV1zgVL9TAWNU`uKN$>VR&$jDwP#a@K zuhUPz&|0?+sMcP0_2m#FHJBHatp@ipCJ(NWLRb7}7FY1TiuDyFbnEiP!r;&CWen)h z%5=1fPScvy+c?>ki2eulK}qz)v3w@ISvGoop3kHb@s$x{*@OvmtP}9ccU9+=ZnYpu z3Trw5o)}4Fk8|j|Bj>q9U@ezao%s?~9cl!C+;xIpf!w!+8e^P3#6N`c+&FUtw&qr< zfnlW3>+^C+m|o#&akt)VZut zoT3%gp}t0@R#SC-xeWwD-)tcUp+oR_xM4>1m0DJZIrt{B4cz8i?(6S8Oud=UJ^Qpp zGsxqaK~WJd4Or3V<(2N*Ra!!i@|m@CRC!Z^C=)~bsV5`&hGll0Kv05k{~lpbj5?Cs z%>)=~^6=^wBUoca?`~K;EJCdqXbf_Sx#A@6u382fA)+HN^~^fKs;6OuhVmu^s!p|{ z&&eyTso7ehe!7#sK{_<4#4sepwN9`p*3>RX!9N{JyrzWqfwvEJ`o4^0x6GpDN9Pmc zA_1%;E2DR|Uo?fDv`qO0;$VqYVWts5OSw8htxTdFYU}HX0Y#;w?rO7Xgb;UECtMBI z^mct1N=XFWM=8~xnyhl)jfzuGm_{ycl{%qraH~unV6<1I-p0RVP771R*fnRKpsA4nS0!CRVdcfQkYdG>7v?L+P3U2@3Y7v}Pl{l{PJeJvbh4zqr=+`1TgT)h zg-nsv{F1Mn6xh3U?Y1{Pm+Ddk>^4IRD6Ydu6RhZK^J+Jg7CV)%7m@~7EnTwm@axGE zC|V!UPaS)bur=1Nco)+vqxa|4uG_NHpI5u3#LnU_I z2J|;t(N{R*y%I?W+?mmaA(LoO9KS%i&QQ*ybG>m*$^WSG z!b$LbYliTB`V2Zk0)uKAVuZ4#*9$Sh55A>y2!DzSeRUXJV~Hip#vwu|nad#}8`1#J zOsS5tkc`&X@X?ONA@e+7=mPIrZ!C$Jk9iuEzhKZ1H8ar|tL|$Z(EV_Az}Vt7rrGs^ z$9TUF=NFf5_4A0P*4F4SS2cK~@e%D>>O)oE5ylL2mR;}A1kn$id^<~urTF!;i9^|T zc{$X+b*((!wXg*snEO>_{>WJM$}pp^>y_6JGfsAT%Mz!?CK}}2;+sqBuqN+hDr~(% zDNLx5BjE;t67^!3vzz`|-8hO`QVXl1qZ^(W8mulFWkjfdj50QmaaAu^Zwy7{lMR!2 z)Nn%$I2ANE&v>)}m9dj3DM@Bj501uGM=tOWIX>f)a&1jZ znCVz|&LpaW|1jlV9*rs2bs!AAdO>`rOU*INJj<>ZjJLB=rHwJhOBbzZb=?>vjLhG9 z0d(19u8c7TtC_b`@b^e#M2|rP;J7R{)CAXMThULcLu0UvPAU>do@j(}nAQuLV|o06 zR>%}_&4(m9)R^Q~kyMk{jkWs8ym^Pvpba!`d(yYn7fTb5y@2QsJoPeTMwoLb7cvmAlj24nGL=f-fz7(fHgn! zoF{>IMQ}g$0vX_b-d87bSYTJ@U=95~!$`)ks27lcVev%{hJ_~N_bm=|kK(9t7uw-r z31;BV-&K?D9yUn5@gh+mH)mogAe!um{^1fay@OTvELH`xdJ=Lb|Bx&uzpl`&mu7L6 zkxIIJy}(@N{5$ICZEzi1-WU`uOBcTwEl^x`8k&N1(R{nBX0Xc6W~b#z3*6;NzvVpX zMJ46srPaF(Q_?K^aKfa)ni2I3xcL=lXQ&9 z@t&Y-;ZnXP5^_Ev?)6j%`lr-b-4q**F)2@Ep1u?Hy9qpz=_%3Cl60M#<7O_G+Vuhw z;J}TEU?}}&bn7@WDana;ofix3dO;0Xxw|LwUUd%X05cA&@skXHutfK(`=W=9P#2HIf|_sFix+sD75#C; zI8Hw6EHJ@GW7%(!2!eJ?0_tC98NJDOtrrNLU8a6Mi(CJAPGl6>p4`${_Z^`ncp9zy z#8h&%tsR2Te%XaDfigsVtpeeLJUq|kwD5}+n%h{f`M>XE1M zH;bZL`b;342(x;@LvSiT{3UTf80<}IX|U$r{4G>R@;PD`SE&j~ zX|;2%%FFEMArJSipe4RvXzIIw7kM)lQziy$gJ&9fxUWq%h7yibF9->j-Y=60!sLLL z?g)}>+NJm&GfnUj{L6}5V6s%`Q_Z?6C@9=irkEuv`entj)`BR_8+7> z?pL`$HXg75BJ7v`Q?Ot36qq%|khV|tg2ks=F&;H%DlbKMJ2~PX(sxiwmu`3{3Koat z_@%32FG=4**LC;kuGP9~)>Q1Djv>v{hAei}=KPWB;ekH}%s8H;HhqcCcWo35Sagb} zx~eXzM`R{?t}kY;uR)I`an~QEGRr|DIvUhLGaT2}jgmOVSr9*}d;Z9R5H(i4sJS*W zd4+u`vJ~`o(A5Mde(Sr_S3q;Wn{oO7=(&v^WKk4n@|;bnVg{RQ#e}JX7Xp#p(*-DT zl*+`?p>P|gvj_2=0?j5_F`-&bmyl8?77pmHo|}$=gIw?#Km5JvyaXNdhLnahGn^ev zfZ8}KCPc0_m3^EH3`tuQsx2+kz1-RD1h=8vzpHL{wRIZbw8X9#mg6^|1*BW=n zNBUXv!l2}&xvN8ABuJb`I>Gw^gwTf6*JWJy(%}7c)z{WIvjy>hr)3#x{)g!F5yg9(2jbb#H44q za}b%n-Bh0!s1CiNDmq*TmXn1~wdG9Lj);=b3~Q_yzdZ0{HR%PiW;-vCo_bVz?R?~1 zAS?qH#K{Hm>d2ockfm!s2uDJ?L@JS2UG#-;KtJ|O`jT5mGu$rvLP4M(CqOSI6Iy6eU1T>h8$U8|B+d>*u?(nDi z=c?3?3GhiVC|AlQO$O*bDOQ zE?r=prS6KLB+&;8@Ea_*8zKrt&<(_TTniL5HF5B^~9#AyX-iKf`Vib|PTKOyIRtS*7c# z)TZ|BrZkz3&rM%!gi=nSK}d=-DM`y4bxFID5EdwnKhsFVb?mJBnKPZV)a5R5)h|Ccd*D9ftwBdXZUG1+>iZmgw%(AHA*?%ji+6{Y7qBZLi{V>b*&je{^ttD#f7 zQ6tAe5~?lMVUD{F0|NgNJbZGYxy#WFR2=$88Xftig3H`48>7rQsgnA=(;7oU0A;9 zW$LkI;+UqQnf5f1)sRV5^v=0}Vv<&jnWi3J288WUg)2hU^*)(r0aTf1Q}avLRnY}h zm;H6p9d(YvgUd0hSh&XaX*Bj9|Hr}Y?#;nYA`Bxo;3R(6mXe)lSwT33^#?n)NT;&k1(&~)kcDo8d#kePaiB{le7Kr7w!m%> zc8|(T-Zjt?2%^=rHT>*Zc7u?3W6IQ;HQ*@ik=(m9(0vfg&4sy96E<&5SPik=P!ZF0Ob;69d&swf<#Q{|n*5Z{zDUIu84YT2krCH}*_=)Q zkBWFHFoTjV4MHf)CAg@VbrfICDOX)=Od#U7LFltwD`tf{Qe+sx%Pot!LIONNU3ikl zcIi{I(ryqE4Rdh0)>dh2jWCCn9B@A2+gsM+{$64?2%R?Didp6;wXTI`&;A&Dt>T~| zsdr30_mR!0!mlyvQhhiUHj2U8ka647{UiHyDY1Cff}Q7%#?(DRugp9@~Ja z$zKbczix8=I&32#gBdRvevB2fG2beqFh`YD%d(|jgeqDb84LTV)3?dsbZrT1?FOO9 z)>Ou9Q2WP)hO2uwg2Kfk%z+Om!E58LUc&4VvJ5bH&P$+B9McjK0dnZtpl6NUAWRuC zHGg{v!%R3eveu;SmqgRL79Hog&}54%)y$WPu+mTe+Lr@HG%G3b zU#6ubJAJz#O|l(^)@?YdZGR3-YM*?oow%UkcbUW$)Qv z1$k2yZEq>trc;D|R5EEZ6dzTOOFk3}rR)d(6BZZX2^n-hAgqF0jotLa;K zy9kB4!oaSszbs*}miQ%8LJA3Fx?dieLRX<#)uE}!0B|-eLo%i^rZV4>cnq4})>5Rb zv{>EfPxh-T*Apf-&2A75E5VAfI+RWlN8u&LKq|yH2zSN!<&J{NeLX2&Z&#a3fDFhN zJMywq=Tc9}V{y$+E0iF@GB`}&UiT4)W^!~0ur3Dqy2^4#g!PX^Q)iK6hU8C$VL z`jr{$#s1jBH(K7qJ-)WJNKN*_{gFN-SO*LzoZBPsTKE&Zh3jIG*HVZ_o`yg?X) z!B)(5`Bn|JmkQLO$dP`vvBC%yp%4QIuk8>XH~msCM>;-qp2R2$Ie_B+E{ePeDMHvq zQMdsV_qi2^o;D&Irtkx7qt~D)59P^jv9ap6l|;@=u^WU67-Gd-?a2J8Bh`(0p)uk) z3|76XjL=BljKF^;##Q-rb^(aZwaV7AR`g>NtgTAWlQ$?F05ffG6>rdSgh?I&2RA#P z%Phwn5^@c5=&dTuAzgL<<)?>rSAlBhY!Xh5v*~hmM>U(%Uth$g6TX82=9mEP*c;9< z;n(1`ZmVWD>d*`&>9 zUtp^~YWUGWn(|K>)K}edl-d?+ZPlA^BH`u9qk$BMX^nU_5KcR2CA0!_`#^rx=#JtT zP9mFlghDx_yZUd`bu~sZVU4PXy0_Mt&Zei@If54T+gbuNH`M@7_-i)?W&>(={+hK- zPb4M4pV!`$U*(@yTeC~baL20ix3P$3+e$z_bnt;~m@)bl9NWgWia^jj$D>j=@CPko z-^M@(BV@ZNEN)(aJf~dVb|_0dhNS4|>gbdS=$wIQdbDOty_&b3*w+qS_2qVh@;4q! z9`uYL53#8`Xeo8fyW2Yyj%UaMaZoL{mBHl%VqLQn;CrzY(bO)x=XM#P!x&spI&1o1 zz7)Wgs3zIT^DL`^5B)cl`yc>o#5qj9CAJdmE)(G#CW27E(jzvrORs5^1hc!90{A&m zauFZ-wi39`biX~nwxR;UvOuaX!D?w0nFt z5E3!jRsz%G%3^L^1l5^eTUNGHmzq)UzZwV=aflF7srn30>4L%>STNrcbW_k=nwmX8JIARM9j)}5WbIO?`|hYQVII#kTM5|b zD1B&NaT$KR$uWuXI^kjnTw+Rwd(NOMm>=B-yXtmVQ_eGPB=<%MCf`UE=kvf1lxL1r zkM4orMj&7uLD3$UV1}yLLHzujUB(FF@0Fn8?Zlz)AUa>?2!-xsSrpnzU@sxHqjv)Q zbhyRUb%3SXoe(h0L*bcDn}@S`#)J;J_APlF+WYgcu0V5xZ>4Xf_bu<`q-Xv}^M-QI z&{?(`!&u2y%pd0E7EaAw=$}Q^a;I0795A{d3O=CDSG>|zf}R&sYv_C;+MSFoDf4*I z`NnR1oJ!E`I4kCHRlF?0R8LXULpo|nAT{9)UFWUfTjuTWMRlOM;7LF16&Xi; z{Y<4}o7)g5vXvlLfL5yw&=UTHS}BriMt3+jo6gEhP~FZomVi8zKvQ=2!>aGO#zdw_ z7G=&|+X_=e2qvb;Z@W&BV8)f{!M*4V2Z+>K`QuaXJgr@02jhqRvZKRYAmERY!=bq&nl2=^T~!A{d$X z^7OnZx&ArDWqMwtEPijwVY=BClm#iDsytehu~1NU**r6Cm4b4hGUlmy#nhU{#7H~K zKdlyoK!q;#^j;%E#~t<6eT zv&)Xl`vP zV=J7J8jp@}N>{)s2?ZjlMce?>xbvN&HtrNPb;*Us$>_}8QtVoU%h`N zH-+Ltt*E?LNwy4+R!zDJ!5mu&*dJ4=R$qnba?xJmXq&Gx!o5;|p>=>NRukXApL1|B1?As*BM=~|M+tggR;m8-dSH~QABIyo@r^)O z@JL&&Rx9`8I~a1UF`J4aN`UyJGWE)}SbE$4L~(X)fE~V;V-cw!@zbRd*BKdMe6L{a zoXVJw=dasTyrraE9lbCqT=nzPkNcYI3`1t=QZ$&QAGK=;TRE#_r!L$IBO=kC(j3mU z@olt~fbvp`XYC_SGG-rEqhtr9Ib;FU8ZCb$KAHVc9^5Z;}p6UAj_F zwUq$#cq`_6mH+Ul0ERT_jTv3a&Z8r+9G&k@>fmET$F-xPBiJ0BZ?z5~BBzbB&{hJ= z$%*ZMj7g`{fz~{Y?Xu`tU;wyS2@)4ve2h?UstHFbZQ0y)ED$2Qp}=k?=hv#@7-;|^ z$Hy!Fc6_{Ue>gh(bX<2z;L7`w7Fbf#~AD(#38%<>TlmDe(1|%^>cyyINImj3T~TSx84##{B3WL=~-08j>Y$T|&IZy8XJcD*8*Cm`6x_ zD<>T7Ro{iwI{v%2!8?yCMlX9Vly)&G>cdtejU%YBr;KhXe;Y@T_HZoWUj*GZ_RxaZ z@PguX$r2)RwpF!ty;H&Lt~O(K*fhIQ!`HId&~_CysXH5E`T-+Mgo0v6l*JC{BD@eG zXGCKVLNY3EIB*hGiWg177c(;4xjbkJtVQ#`9hy3lf^;5QQn`@S9J^6aZK@U9PrcV@ zq$zbh5SzaWg5|G$^lMhTKQjAz0o z+l_)rW31S?f)dPwCAtBE6Sc1%x)JVch20p62D9)WQiq{Sdp>rl4ht0>_lzZ zP3>yx)|>GEF0mU0aL%@32dl)J;ZyXsD!fe;w@dP(>vqu`35p-ua|km>psq zONa|LWtKa{WP#l%I0IKt>n(hXB#qF!S9%QdezV;X8nf)icr-^=#*T52{#IeOhO6{j zjg97PyU~wuj1@bopp-g&HB@+-Qo2#)4vQM10}N>dhxP6zWDD)aI4%Kg{&*{BQ)2RB zq`8KiPi`xn$tO^knD&*o;S3vekdsqlNL15pL;&)X1n*9;Vgr~hFq}UP~OX6ba^i$(A`QM^&1xta*8Jib(l%tj801m zw@@Ke1QcxE7&BzI-DkqEEHp876<^Z=1!iX;q8bE&4W?z4Dmy6-Ue_!t( zH3NbumzQ{YLRJ7gnmIJ6JQ+bB$8l?qJhhYBvh*<^X#8;K{h?_&Xue5D3cV(8^MOKgbdh z_YP4%LVAn8$aNOZup0$%bMR!IoL37T86K}ILB``ZqJ5QX<)NMEXlIglzU%NpO)&X5D>hB#-U1OTDAk?7RSwfC~75eRTbaDIp2 z>3fawy~^!I0lquobM7Hqf3UjkZ#2SMYc~qq zEw*AOsW0!5JkswIBJ>ki##@eDaPFDp7bA~1>_!2%BR#Pb3rZ_0iV0LHFE61=SK8Tj zqhQ&&mb&#Viu}EJ2XP1jO|c$u-MD~zp4})omI&PgZ!$TgC$YGI(!o;9LYFP)oU3eJ zcLZIAwfS$X&1Do?`!{sibwuWWCYdptLNnA$_u(mJa}v~mt!W;@*3?CketU@Ng+TDZ zBrCQ+4Lan!Wx7=$B002Cpe-B1e5Youzuk=ixS3v7LZ80MYRIyP`wgi&)+pGPvua+u z?lfzoDz2a_RLTA11~W$lmok;^d4Mk=cs&Z2FNi-C-%{uDXQ2o*O)XPn?qi42ksWf{ zv7Hg0)TJE?ssdJ1%VKA%)cb%o9m?vNyE)S_7#z&1-n$!1Vqy%|>OTC9Lxrf%bVoU% zIgyb@TCp<=*q*4(n;HYWsW_3?Jp=9_D>L0?Lk+eYC!n0^iJehUx}#)kX*taK=MBnB3zM2x2l2}VQGoXfU$$=;$rQ(E(RMWjOJ{iF zy&l@dEb*kMQ4iu=i+YGz~OzyDn2e=cgQdi-Hy2GQ@0f=Y;f@BawV z@A7=;GMFM;w^X(5eEuj3KyfRophsB;2n3GgSg~8xfJb;t`Wc@Tt#?FQIz^-`bqufi zKWbFa{JOCSwdq#uMs@k4oWssrdf3^l1Rt|mUHT}ym=?VHdjt#Z#?=VOahd<%$tzAg z=m=JwD%gjB(2Pcb(79IZdbQv|-l-l;t{EjyEL;knI8W>j%wQ%k0D4Dx zdlC-vxTns8d0hkdH0Lp*SlS*lKE|8TC=dfP?5f{$#>_O$$iw`?{$BaQGUp4cRKf4s zzYuCqPN1|j+IMw6TvP?n^4lsqRp~L{+>ZcQZgk%7+HX{Ee`gv)P^?=~kI){54a7Sc z!5iYepQeUCc<$2RPQtKf+fCioRY#2LeX*CS(MPzqm+og5neq-h_cFUlO#Jy)>?NI| z_DC?vm2|C9RK>=}SvcwlWT+ma<_OOoftd7+aZ%?OdU()kli2m3)p>uQxW*lm2S+-2 zN@D=>?hw0TyK&Dcihenqh(|}!b(o`go>q*7j`{;GIvG=|5}1Ih>j$HHuA_QErz+kR zY@k!WUgk(24_HB1w%)$Gee+1cy_=Fa!Jb=A)*w+!-wsR(?|iK*?IyAFAtxK2g`5=o zLzg8`pF9gVEwG!!*q>lE{E^AA?QQVMq(Ab;`MVhQuD_3vuEIF?)3e<5JSN*sV%7sk z_7zwa{@Lp}(Vz6ksXe8`x|zfoxgN=KyGguA;NZKT0S9ZW@a;3a7zASaFR)^-R=;@$ z^GS==L?(1sfBHML1abiY$ggtAPhKj{R76+0L>-qxw>1eMO}1jMD6qDYSxT!Z?S__m zJi`R_WxCTFQ5Tqs`sH2KCC4I}o5z54nY+&Gpgjpome$<&;@{~-kj6Ui0M8>Q+mql- zY7%3cE%W*p*fMn}Ldx^pHUhD%r&_U;0eFFPp+m%Z+az{0o$BU4&xUw7e|Y2&S+NpU zoJo*T=i5b7jOd)o*cP>bQN3Au@22XQ90D0#IBLVFBoBXn3}{3%OH);AerjWjwpYJaG)bpTBvRwMtFC{(^R9GXE%w%m92Z<(+sF- z3GF84kmaUa>tUhYBnWp>Wo*6rDrvak9p$hD;v0`4OqEuB?lS@PFh{-aG<6!iovJSH zte>Rw91J>-0=KV{5t8T&25?{D9YE9&Cl+%CuOT7N& z4-++Y(M!fE5e#(%$3?I!IN9l7E46xEwkB#rPEpe>@I=jp6nH=aN!izLRNg-sXVK0( zGd=>{pST^w)*aQBSU7aK*=sM_PrMjr}k+dDZwBu4L|f<;LG+Nry|#U&rhD) z9D+Gre!JM%+?0BS->#{+y7vf(;7i1~hL}9`9>k>XWj*$&5ix`rCAKvHBvE9#;cUeK`=%OV(+Hr0U_>PMB-n?oOFwdUg4_Mc2hEfY&O zE1V;v>S)mi7=(DnCP9bG=uG!2@r)wi6cMH&$4xMD4hdG|96IO>bJdF^>FA>W1*2ev zE`1HA2_?aeDBW=;B~~|ttlNPm^SZA@NJ_o5N0`;Qz62Q5hrAoS-GxD&HDa2S_qz7o zz!D0(G)+>+-wn(H&^C$j450n<$Kn#m>0{M@-wRydH`s2 zm9Y=1khI~3D)@lXvoF3M7)hZ*r<*Nn9wV>|S-!$<5{GA@75hNPRiUbMeQ2oDUFO0M zm~bcw8Wfk-2i#ky^z#n_=I~J5??L;iWigtA^dVm*sS6(vzg+D-%Nyr;&2u+V%;$Q_ z1=UUq>0>u7V5EVb*gr4WUc5zRziup{m{XJ3;N0l*3u=qk`=^yumsHhAZo{DnoRAb? z3RbVaZd?xc*)$tPX4JCgBZEmD#ZgVmSEjK*GD>?VP8m6dA$Ur1S=)jv6kPy$U%rMYWEcVp_Ur6iZf)9p*O z_hD&Kd}05v>xv>O=!Dic`np#lqW2&a`A_x@em;J*Zy+)9 zSMl+^eSHZZ-`UqMlW`}!b0 z-nHAN^YIV6Z7d&ux7(8WcxR8@7SHF~b{qA=y1iw$4dCN%c3UtXf3;h;^YNzLTE@p; z?A9Vaj@hk?`FO)_oy*7TcIzZQUb9=%`FPcCm9IZ)x5n}DirpH@$IEuB+~7-gOAQ}? zwp%vx@uJZkA!5 zvYR*Y@dvwkB_B`P%?tQAVmD9W;|aSti;u_c<^UhRx0_@6c+75=AM-oAnXt5OkJ?SU z_;|!_+GFwgu-zoL_FHB%9}n40llgd%{hE&l>?RrJevB194%tmI%zaqoeB5g{?&jk+ zc4H|Y_t=dq__*6{oXy8wcH=lc?u2^d;~-osA9vV|bU*C&g?*rwkI(G`n|c4;j@t)T z@$oPFKmi}0*$3n<{%IeOum99OAYcE9eL(KwWBY)7{YUlz`T7s-HhDiE*lqIl@7rzi zEZ(!*WR%;*51GsyF_Qp^FK$1OX<{tE%81{0bfSH|8Jw3Pg*wNX`2PW|IhL zOew58D8o&R_x1a|0l6= z>X`vVJqEvng9Fh*NA!|QbpG2$_)zC%kS+X9(4|4?zV~n`%q8&pDf$49@q7gMzETZ+ z*O;X)``9>V0Qp&w}Qi@%$jWa?#xttMsA88qI_BKcR#3|YoX@_Z~ zr4)GG$J-{ID*>`ul*Z{?i;L~1Dl})8#U5A5AMt?16-$zebUDiz>kfWFvr=oS zksm=FX_sxqM;OnT<~--yNz~8Z zsF0sXqj^ee-9pxQ`f(CxZx|chTbZA;0O#7x-55HvEcR!0)#q#ox@)?GK@km@mEE-p zQ?odJGt1N!pYsAc6x9o#6LYfEZWdYyx66m0!y9Z|N$QN$gA!&s&F#frXg3Qf1TQt` z3ka+|7q%<%;81iuxIDXANFs3DonP>Mw=Jc8-X~vR-1D1-B1*T^sxRSn?;IQNcvVw* z@UFRynJfg6TMed+nTeVUniU__}-gGJ-Hjj4<=xjG*~g zUA9`x>KykRnr}A?mn2S*f3qMuhSU-9ZjV}l-7G8;OMms;w3~%T0`vR7WowZ{ zTebFEW1I+t2tshXTObEWvw?uEx#xFm&H4%rdS-tIenqO8ASir!vxKn;Ba#>D7 z2eD3$e8+OqxwX2mh5*}iH?T!h=%92fu8;Em7;ARwsWsMV*I5};JVC#u!skfeXGDVvMyycckz$UvYUmTO19#LFRa~IMT#iFp_cz_>hOvGbW(ME_ry%v=((OU zm!$rWOVWSQ_E)oTQ!Jm~{KE2);<>6~JT*D$e&Jwa`3OOEs#Lej$RMz$^Q32a2w%lQ zn)Cw;Nt@Q!R3~(gBbDDBJ2=5^7V^rp;^G&Q0p6Zr^6U>7tB8cRLNwGR3jIH9ycu@0 za8&^-ZitAS6#}iJDhrb0R0%4C*fk4Ng$h-AI#oI=t4M8sDyz5{NylWM&ETU!3wg~~ z6HoRDVLKOiGpLGng=b8?pY~?myr$nFZT5aUu#cMKHT4-Hj0DrS#A_yKUq+g|GGZ0R z5`EtJROZ;tlTl2y;?fI?%ZLy!g`X*rM4-7lS$E$h`c)5~85)D$Bu6jp*Ywu-%ux~C zq_AJyWJ+Q2)*8A`Y$$e1P$C4whB*K-19^ECxb*q^?SS^_~E|aG(oEuO7U)_27EYc{I-ouQL z^(hovcBNX-!yK&r;BlN5{Gasn=~{!KStvGKIrsFS@~U{uapg!FI5ibg+_c|RyLlR# zLn`C4)IWC*#&1Gek9N+W*@f%nXH7*j->UzG8Ka3!)=01V_s#HjBM@%$mY`WA4qxjV z3!U&Vfl>oJPdI#L0fkJOSIV!q;_}p?e~lXC1eECJkdO8>rO-+93P(QoOmZ?en}t*$ zb2FtEcdx@y?u!`JV-S`3T*n}fRVaq3R@`j$MK3c>ClfnCaFS}5)-@=rSy%>M!SPGR+6J6mB&Y-KuYR{%0CmC?l zDERjvl}{tRzk^mD>3LT|dMY9Y!x8a|1=`aXtMYSVRoJwteENBye*`AqMg$|RxU&nV zk%eBqo~)UQ;N)Q=WOmU@!98tJ7UYlelCH|Mwt>h&*|p6~vztql-OrRNiOqui6RfyJ z>hgZ(D55&0AFykGW=j&tj|=^Z{xBNaRr5xFGhDVy!T4;e3k%m(6|Y@OBVzeS8UGlf z_74d6t4l(hZME3ZTkya1qPT-1^tgk94!!pB;tUo$OsX1514S1=%e9+@{feoKo9|qr z6KAP_guO0Ki)?qg%5u9|0yLn?Qu~^Ty8D^tuEZxZ*6ou)ah0QZQ%Jj_`d5fKI0|0w zPKt7b`u^an_W8Yk_U?iR`jGtlSt|9G-idVi3#5y$RVUct9Cl5A@PeTAoXWU$WXx@( zoTh(n@s`>$+CAK`AuQghAO1<085YK45VX!?SX(F+^a{(=gr7$Y8zEH;_^H(KbQyUl zS31hYZe<(^k`^M$F6)5b&<^772{&WZj4uMw%xQ_`cfD?uEJhq>#jR2IhO?kWO_^aV z4MgRRXmy7uIU1XzjK5-%uhKsuw`!e~J)c=j*G$Lz5&vaipr~zi)K;EZjj|LHLdRos zTd^wr^FRg-H=2b(TVus7R}(+SaID)M9}8CGHdC-0JCAy7a$(T0$uBxi+XZ4WBh|CV z0|VOwt7#K=580QK>6iW-Z4@Hd3s-s*XlDAH=O)h*X&4ui7z*jm5FA9+g~Z`+@h>Xg zS~AOS5y}9&uZlmGZ`@Q|>VyuA8EC#Nd&ap)*#}skhS^S>=%!(X29^qPLGZxJa)Uiu z(<)l}2vXUx1jMsrZIP?#k+>-;y1m&?S~iiMowtXoFkq-|?o?HJufB4Cd6^m+X2uGd z5^4$~FfP>8MqrexjxfU^ahipN;`G@O%ITva;X|RO(VlVvYx8JO4IL&vrK3%WuMgGq zukeodJnJcPc$+^(a*nRGTLknMTMdKE_WC^w2AKnURoN{9_xDt)ib3WiHD?%*@s&a5 zEg=)^76IkhlRFDHm6WK^oBYJ5(>I=-2KLka@|M^w0@K;plLzwIJK9gUz#Oc+et%8*^Zr$}!Cmksun`xx4geK&iV*GtJTJnFupNt`QE3Yijg0 z(hCA-E!Vi%9F&B8>QK^`w(s#nJwbm8+8z|}{oZGTQ{I8G??xc(4iy{ClP-+rh|$LQ zMbYL0PRteo-<+85Mzg@~xHT-2jM5x7t+cW9*y()T8|)Ur;iXpGCF)R&Nm_IaM$h4; zJllOSJoL?WOC<72inhm?V>JSG+EQavx^~G;c8j3)GAr&PXPCTLe$QpabOt>y*1W72 za)IAvWK71HS$cf%n9w7H*}CbGId+SnZ+86i3pbISCsho~O2z$KUE<^bABi&ungw=? zfbemZaeKAe+|ufjEyX43-n;!H)ZR#QuAXo@AM*_&UT65;_EkX>zE7*r`2;UL(w>h= z*ilO&<3OEc2?n_ALCoFzA_oPloqjXaoN2cR{AQo5mv0d-K%rH;Ro!@NSllRqvAlG$ zlw6wwR|pd4in`OTP;o=}IFLMmK~Z4T(`lj5H!xLxJLal)Jzi;9VPADfY3B->@s}> zk(ZL-GStk_YHCqD8^LP3MNs%MOI603qnsd=Bk|^B^+udIh7uRlZu?Ep*;HP*&sRiO zu=@yNGCW5-n^o*EbE4YwRiIz*jSKA-fz0f*-<)8lm4b> zfuViB7!Knr0+tnzHyy89=i@E3TLcbc(Ke~OMqts-nME_qeO@9{3MPgIN5YJ|JqD-? zG{&esI0B=#Lm7*Kg^#Xl=y`Ta0NorbPBAB{=mT;xT-!gdq^7#qnQxlTyM37Hw59Fm z$#Ifj5^0BWp)be#1!akss;CnIa+T+e9IS3hGQ*6ic8g%#gtEAUg{50d%4;y$tO{MR zT7A>5AVDA~+;N)1w2^>N)`+0rkr0a`&4H@nU_1e~BYA8H1n9a2M7+Q{Q6j^IuTT?+ z%Nn~)6@M^1+$j(x8LwpGQ2pGU@rtehUUY9gMVHJO(RG~)JTpPOup|e+#$wU0^HZ6S z2n63EDE{|J!L)xn0>QIg1aifINp_2{N`tMqoAk8PA!iAac>q*N?^0v~)y&gW)sC+M z5iuJD0r&At*6q`M-}^4|1-#FAtB5Fh(Q|RVKiZE^OHQ6VuIEsBP@VrD>hRsyGr1ed z*3={^$~kSW?*-9u7vG&%QOkx=|#X>qB+e;?a<*% z|4B4M!QN=Lz>UIHaB#qIJ$Scb;pXXbToDsT#)D6 z-;?MBz(!M%=V9MQ8gjls%GWaQXm1d~(TQqUikYX@yiO19*Hf6iTkIBrq1EKWrI@tN z6a#Tis(Bsxmo0)DM_6&cE2LkW94FJHDwX${fpJONt4tpt*EB|7a3uPVo~DmgjVX)1 z%XH%~6I?m2QeBnC8@S|6BAfirM)Zpj^iN@o3^)46LJ(kyh48O5ECd~6ID)*Ceja$+Yl5cZ$vwm?$tEuOUT-;VfnI9oZ9|#Q z0&SVkFFHLNRq@@4!&LLPfl!eNl08-S88X?LOOUZOzx)k6^v-7!Wowq8OzMhvPDs=Q z)v~$2ppJgSD;7nSon?jxV~?&=cVwCq`tUEouUMwfse3ccgaq-%rnr4KOh!SjkT8EN zEHAF0Q{MU!P9lud-wfl6Q!>)rMgG+83^N6uv_(*9z>0gOu&j0?iGNij{w>s12ZjWg zOVmSiO?lJ>m!kgk>FR1~rWqWSd50KhGqm;$H%$*nT{PKXT@mc%xMGH-RN;`dQ|{ z0az)5U$Ii&EYvMgPy93>o*-zMy_tm7y6%TfyB)y(MXUOA*KebsT8SosN#>I%NU>C0 z8wi)Q!`Ne|U!roy@#9eu@G7SZ|LKGbH}Eea>RJS_az?y<`n3ta_H_bex#TtHW+?PF zT<`B-W<0nq%*^P5Zc%;p6jiV|s$FkF5H6}mJ5|-!-_Z`2&0-58sap6wJ@_;f(1h0P z?*pMk9<&I$Wh;5vxljkCi+l*%UIr03oiiI<0l4VCbc(JzIhK$~$p3t*{K0Pmp<`ru z_Vo;t=5(b&QIu(}@eTLBNmYXg3PY45;D0lSUSkZV(uXSV?(ifX1<0O8qN>}RX2$I~ zO^v<}qUQR=OYIi%ZbO?+m;h~x6CLy-MNTf6V1^M!+al0;nHBfG3Y};s>5w9IVghd* zk)Y;f1nf@4N|jin6p4F>ScQgjZNUQXv7P-M_(QvHo5up%=h`hhkivVsqXqypom${u zj^&pl+O9>ae+~#-{7$+A42MEmmv)jUI#50CE!P+~<~R#Zz&Z==Z_bO91*iUvC{f;F zsE2f_PlB3*YJ-ZXf}TYayk}`L80LKhemxS`@gtr}NvcXy%YO)%!PD&40jl1RN zAjJx<{E@^Dq&>AX?qBL?+KBiLd2lE`pRrwPFsSlL=1vOQwF+rNLA#0Lc|UsQ>44T< z3#jF2EGu+Xit}RqdD+7dibKmr*cCypIQct7%mBck0)y@SLCw zFQLH2w5e?s9JK}fJ=x4ux@K69TvIyWw#I5f+%M|TWHa3n?anplaFDh}BjO-^C6^Oc z7u~3MWn}Q-K2yw_y#sj%0LPrQTSZ@?RJpN5gUg2wMeY!-@`=4cYm_-r?<&e9#<_6;c7& zr%9!lA|1M2kfqFS6>zQt8I;>w=J;@xVu z3Wlz={66Qq#>`}eU;H8VZRJdUG;)E?wIry_&LCKTLsphZTUmgzPCbSx=*3X_S#}~==FiI z;`b%&e?C8QncXU|cE08Buga#3NYFbFOp(x}V{t{e&K?$r0NuHkzn`j1h=_B%9y&`R zVxAcqj67M5o`d0e!(201Rm?GaIX*D05;T`@Lq$+8L-aXy2rVzNTLtc}vi!Z}kquOB z6Gw!r^}~Qv8oWVnNY}5d0k zBF*jW%(Ghs)MA&uxRCqPF*&U29)mJyAl&&#P!l|xY551KmlkpmYQ^G0X51pXRp2We z#@<4v{dY$&&i+_v=0wf4TLq=2TYiIE5F51GKb7JOu8*24b`9^s^#(%$vrra0HHo2kCI^yOTX`SUyRO1($W1RHvqGO4@ z0J;)ZLqtI5GeTQ1>^jQbFE&#panaXof4r=3YtZ9N-aeTCgBxR=0~8_zZ=xfU@p znv6tdvpXY^%{~{U1k3N&v$>;p#<2n{hM9KjWTYc4f1ESdAHO3iQFcZQbec|gK4E!l zy*+uJpr)WS8p`eV#e{&6fZ<}xpQe(R!jkKBv|-Dbr-%gi7F%lM zQak`!AazZnvQo3$74kUc1@F$Z=p=i`GB#H^9hr_|Wl_nh^Vgs#SQm5Pwq;PyhY6jH9uL|bl*<1{5O#36i9AcWeyDH)vZ{0W|{uJoTJnuaP|%@dvR99>`3Y9bo=4gr%K`wy+gD3FH1IuajOa(1fw7c(OT zQZggQ7S@!MY^9h)MXA$hT)WgiUdg`1#9WRN(9O%w(0Rq9#e>a)CcM{m0H7%33^O=O zs?}7}lYF>;R&C8XRrxk8*$UT~1E~zxDzO3RWd52?|A}_%+2{X2~h@PgI9~kwPixi8Da- zPTRMNq#5P{O!8*m9739R;F@^Mqe4%NnvNf~Rd826bsN=BC7kE4zB?)mU=`Y*bO7!t zC&Nt=EwNh#eBnm?PYLeE!x2(Vasyl3YP(gS7r=A%27sq_*M>Ylly};ZjT{p1OZWR(`vE`rVT=3}KRN39Xk?+JZ5Yhw# z;=YX-5CRKy(E(V7u2cz%LY1I6zNlSMR}$cCM$z?U>^nl3u}AxzcDM6#R!)J$ZeABOiE=h?QX6F=VSP>B=~Vv&d^CopsDe#qfA#DpGfX$!)pyI9 zkxp5i^RB>d3*x)5z#>a|pPD!+_!a}%+>FVJQ~=%t%fCuRmEvd>xvp&WNU0+hgok)# zr&x7dPOFDD;W=1kD++5R98jub6<0{Zo8q{rctXQ4Ox)&Mq1`Hs2gSKA-%OB>d>iqM z5^Et0n7h9O&{If{F_wRsGxU_&>YC)-A9HlZSTGwYqF zHcd~E!djfAMuD9ESqA0;O+KOLRrw>S@37oUCQ@i$4G<#@G|5}y2 z6+5a!cPJ?<=(?yC9#404dDO+uZ&BsvCMBvbr-gP?4Hokpg>H^QkxI4W!c}2UPLo?U znc=$9N-xhYVdF>oe(=@#;^>vQiqZzV#Lz41Q$`Lfmx8$~)c)-_MEV@$4A@t}j#O^9 zMIyrYb8iK{9|Tdl%nKx$8?>#m+f3BJvNU?Hz?$-33uANV9Yld^SSV~AMnmV+4?lTmmwl+ptp2-xF#qTuhK#)8(i%5dtMj! z1zjE}P?Hcz5;22~@%VQ-Z^h~8J*CR39zDx$6Y>F$$GejgLE1a3XKJu75eV(TQr@oi z)tC`lM9e+brGQ~~(eJf(n=lZV;M?TQ#H%M1&H6%W&2DPcF^ctO)S3o%dYceXDB)cA zA4)<-p+xiFGblxDb4H4Bl&b%yl5kgybY`V*WF(&QV3e3rRWg!$N+F8UB6ZF7lP^H# zn$FAU?Wu4~tsc})IotcQx5Yb_b}1DyQ5O*b)|SkrYb?KAU!0VzO1()#)aTx$zH|?5 z6W(Hl<-Y*Q2(@P?yHP=AOdm6i70OylbG=xUN2&!o&0MX4>qxIQ_XdH6uoeurx9e~^ zqfmx(&E>^*TL5JmAsyHOXxB}cbpF&wJMc9wvfG4On^~rkcklvrKkC zv{QIR+k|M# zw*2R`&q%9W+PqDHEAY>$8ts$~-*%1}PRXw}q1sU0^*>aPqN)kRKAt$K)if7>-d(gK z`#-Pp=F~?fO;Agpjxcq@JPAJ`70|WAEw$T(w!jvfvxn$7tv4ogXm@ql9#iW5v|qdG_B?vL_=M#=wi?~o`8+sBv}JBrhsgX_AW zB#AX?6OK>pz97)oxBJ2+laO%w^h~$C&h!_4Z;e&ICTWaJ{^caaJyBdeI~*+ z7w;UR8~Ah|PEfXcN@t+&&Sy7fIH4;}m(ISx z43%Fe{2pIccjhlkJmt$cv4!bNuJm75xLrC$PqnNqr6v9XRqzU@p`1nP>kBY8&pOW> zPF?mkVfNxI|Ng?-stvej7dw%Ox)c=gyYO7Db&k5wd#LaG|5O*65A|zKSEmrMjP6?D zOh%#pz#E&-18+#{6}_m`!E?=%IcwBheugq%!7yygectv2K}dle(P_ z->mMs5LQp~;u0~9U)&uFh@wy*DBk2KCd`bF<|j#8Zr4v*XtxOwLJ-%p7h&nnI?f3u zMXZ59V6x6V2R&gyaxMQ2>bZ-s#zd2_H8GDw)kSWwR|*dTfpfi@cL_V0?lN9f6wy~* zdkH5ya$yPKf$}b4x9pJ03Kw?YJr&Uvj_@>HXC!tv;RQ1*)xDPhk!D6FI5vVI6|-=s zx_&f9{}ll!ZG%`EIwentT~Ql9wrb31y1cT*kB4Wb%Q_OalblCL{?n>ha5%QN#g> z12RKiN+wCOo$n7tVM^F652_=VVUSF|9D_ybacNLV!kwUhM~8l>TJNPT z!Uva|(yqNth(jRN?GiR!Esj{~`BH&ct=Tywj(H)}9=9+sbUL+yOai5^^_}lK3tFhjo9p?j^0$U3tI3~+4C{l1FKkbV<$qM&_zej>pI^xy zxbaQmP!91gkqgCx{E<`T@mH}N*tCVq!5=XBDlsj>k|<}ip0vwLuEOL;xiXbLhrDL{&rCbF@%dsYl_RObue2%iawHKN^d^b(K*#_6P735@;}sZ zfz$QyimQoR=1YaA;U~?yhMzQN`LK}sqCh{%j2%l^tIk=4V$m5C)iu|cl~g=8Q_qqI z*`GFeL9Ib!eP2-TVYyCBy2!hbWZZA4bAAm%_x~^hgxZ0T% zLJ1{(ZURZB1;{`kAtWRqLg+2@fFK9~0z?=lfdqk70k7*?S6qchd6fjkUa_Zxx~{IP zqH96dhO4f+_PV;3|MxsMkUIhY@9Ta(JDT&m&)m89Dd+r70~)fRtsPM6mddIVsO`&v zuGdg?WEU$=a~fT)!a86xT8Ch1*wbuHiP^hQb*BD8i}6j!#kvuu5$h&TeypHN&P z!{|M-M&%_0-D=11!LbqxF(N{%T59eSs%0Tg`#n(4i(ki4CZ=sR8$H?ikX>CLw1^fhk~ zE~UUBz!bGRCYUKx`&|CU)P8n8eZ(s_d8C7Ys=kaQ+^=GS5^-~bkS3yCbVdD>iY97e z*I=?-xy`!rna)=ZlD5|{29a&DxnQex!CyOHpub8qRAE@qP@krCOt8N-Ip4V@BX+7V z1iAM8Q|5iFW3WV9g`)wf(;cp~%>_s})&WCA7j2}6VD;i!)Eso1!pa-*IAL0v3`9QGo+ zbp&3xnN#3lnq@B(ylpR>Xzmk+h8gy1`}lf`*s89&Hq%2vR${yDgpPGGOmakB6yE|2236&vVitUz%Uyq^U(=r#|`R zVr(<5KAc}Vb3P?g(^Y~BIi#NCv`}~%sqWBY)cKi&@SMQb;2vNjvb176843AddHGC)}b}E>wG#k ziw+yM@s^wWB$|aC?QIL+$L)zxv#;eMDS@kYUh7Wo$=ppid7i77>)gruoQQRh9DY+& zDIwJRAR|9=Ug12Q1mY|CbLW4!f3e3GhCJV*K;lO|QEefWZI~_s9di(<80QN^>iT*~ z2;Klc~(gqI?X{j%%%9jH_N)GOD!6WR-KpeI{(t@pTw zkoL3NIok2Q;|i@Mi-&VIW#H5$2i#LsT#sNkbe(0KkZ4FtIT~v09J%OKaw=c!8iX_ z@KVhkZ2{*oZ^vezfEL;d^baSa(dHw|a`K9V3gZ?1N6;A-^QgNx)*N7ZAs?jWYUlx; zqvj<~NU09KPna*R{;t#2gV1A$inUD}OMhcs-bKTLLb|OSa;+z~nd;;!ty}O`3v{Pw6(G9~$s`a0V075qP38S$q^R@n zbjPTRzBI_xxs$C3x!C)slDqD}H_&*edy>qgQL3s33F3G62zFItdIWRiZzCiB)=!Oy zh5N}g_lX%k+To4X-x%u|#+??)pU6*&g+$Pvz$52+qSZCA!8qB-h2n~k?l>bmrZ*+X zZ99!p-GhF)U*WO1U#Hr2fNZ@Vx&`BPiMieqEq^D^v49eD%2i5Hnt#I5uXXwyZ%|^6 zIwu}_0qzs~K0EA9nNNTE_3P>9QdL>8$*T_UP4=lf?soTa&oK9iX0fzM0^?VQ-S!|Js0okX!_d(6iL0$%7I59!#QOg3?8aj!?Fj z$*d8xo(-hsp5q(HFZZ}dW|W%y#6}+x_Qubr7&z(cBjIGE_p@g))p@n9DKS85$Gz^s zvHZX(p!tD)c3+Y@gmpt|i`_y4Fxdk1762Nm0Bi>~4|oy)T!pvY#?()_(Icq=qR!>n z`CVWWHO$)+F9mjj0M+E%G0wbqxP77)2`z@cRC)*c(!y>`p4)DB$Lpi0m!!r$OgKP{ z>si-s@_CM7_syXce~V)yBKZgPS3)ZWg}wgy8!O5;)o!d%RS)`nD()bLInpIss&Wr9 zNq_gC&#fvDBq9(}fXlomUq&3$K4Ad{guNa*B5ssgU9%re^+^e~Xc`mIb;@4v1XV|9 zfvm7MQ)~F)bMS4>n{D-|TyeiU(G5cQ0T3A{BOU}H>Xi@!{%UXf{BZ5M@CNBcEBy~M zRhI{d5Ls*P6Cz+;wemke=_RT?LBQUl@c&~bM2FqQ(z6SoUk`%{-)a6b=Z}(?F_H3RV7aZJ?i%lVfeF5 z#dK$x4pzTB1S`P=v?{YOTtTiq-~p%@@R&$HJ;X_I94L$!K-=60D26*@235~T7*mHL zPksdT1kp-sjQbvDj0nLBOVHyHyFhMG%zOqLU>j^dgT=JBZ7v{}S;#CK5{`>E3)1#x*<#KD$rcj;xpE!0Xt|oRv0u8bJx#zZg|IrE zJh2o;i+Y2Q+iNIqeUEE0jdC^+2J*b4R-8o()w{id`yZ)qa9`_;-Py<77Z&Z3>MWs0 z-Dj$!?+os#s@~3u%fXC-3$s^K;4O>2UmW%hpD!HpR;%e``9?C<_9qRnnr4|z?wuKW z&#t3Y&r7aW*Hp?yf95=ds-NNb)p4)mD!pe%Pp1a4y1r-dP8FLN%t>WG6nmHba6;Mo zn#vFj$vYRsCOL-1OhIhhtK~AWez|P?iOZ}K3s$hB_FY5^J9KqoFoaujpV+-a9p15J zE7#W6$}b=?YyJAomF3muJ~4gI<4N=io~{<|=-W#jsy2G<=@Sgbt~U3H6CC# z0%F_VbzMy~)z@sF^Jswmt>b|crGU~f(d)!yWw)DK#_dlMf?`s8bhH$e^D^70!XGi) z>cp01Ue1v#3RKBEX_@K|&2TuUn{{HpBARUz{k_>el;UA^VumvFW|nPOUB04rJ-aM~+$Y(WdmIx$6w7h2MS>i$`d(Od1fHrQL;+=6aZYSxK8N?^gE79tQD zdj<_!2TOEF;qZvcK1>TSMDxSm>FW7b?1{xY$a5%bMW;d3)e=qXB*Mz5i_s$WY%5lV zT*LOGYqb>>+8+h?(M8{fcgl(RGP`!$HrOp49ILBIt!{J2_t<9EMa#mG8Sw`rg3XrU>pC~EL`D##C@d9Q+=>*aVxx;*wwPp7G2omi;;uy^SKs^v|oSieb) z{i1K?K(TyK=tdOU`G3%2rGj1(fyOnH9_>R(98qZZn(^M!fb-tYTrgznklDB|uSoUy z(L@W2?XG|lvn~}}X4t!ULC##!jI1EsU5DJsQ0;YwC0rCCe7jxfwuEQcg#_+tCY~yk zwi!0rtP@K*yV|>O0Vx@qY9w5Uc=GBuvoov;T^AiDooTLFCkAv$*tyzV)RA|ruD#LQEv#cqLv6l1tEGA1B6 zo1>LwDn>EOv|{0q${{sFRt{NfIkR!e>-=H6wmrqH6C)WzY}S()Rzv0gmKRAUg(rE^ zNX0JZfL^KQJPG@HLXJuxR?aXx1v9~{6XSS5$h%@e<;I%Ya*rxK77P%W&B80R(?1}^ zI0jj6NA{JvXdrFYz%sK=Oye`d>W06#bEG>{>IC8Q*lmjJ%7|gsWq@NNU$&rv8rR`X zIzeeucw@yTHb`NRvZ}pjEhw+4*+|%0g%#y`-y1}^zVn1Tsof(*cc2|nv93B-f%9+9 zYbab@4tMgA<7V9-h~n;3siDtEIn~}8+RdKB{3@*wFF{RvJr9z&W7NBUbI(UFt`pN5 zU(=n>qh9O48%g8qCM^JpM--1xHP5=Q?OtKliNT6yF!XQaWlVf3E=~RZZ#?}wRgJ;f18-D%%j=ydtOfLqi%e`ozUZa zvu=!hb#k>j^n!bu4g`UQln`&CCn@UEaf+~B#cpLmpSN%=-ESo(P*<%|QjSjTe9=9F z`1HC_V2DqD^+h78wv>@erOzbzfnjKV9iuHW>qdgaO?leiaZ~2#M@OjkzX=a_6vUy?e=7lsy3VUYI08d+vG+dM) zB5q0B_cGrL)yQWFd|&t+N!9#kf&Ax$_GyQ=`a1TGcPWRnhDL99J1d=86w0D475-|n zcV^Pafv+3APQCS#J3}}3kc?{Oec8Q>Qs;GIIHrfa7m0Clytbxz@O_;8`NQn{GT^DF z2FDlzwLN(riI|u?tJYU|R+?O^dj;hlftZ#Nf|yr1kJ+-tq-0;dP#t=Oxp3%JcMrKR zP1Qe49MAe!-NOYm!2+4T1?m&K)T|S$vaH&Bfu29no@uok)Rz-768ALpi&HlrAzWys zSvL+$d9^xxgqPE=1(${HsGh zn11Le;iKp%x0KOE=)t4>6eh4(d{e{TYgF}72rm%@M1K&gEZ=U?b7+d`$BBCN!paS2 zsPo<%=+&izaUnyZ*=Zo4Vg&;IQzTS1zveC@;I2+=!P;uo_jO4)$E~bx*b(Te&U>B6 zo^rEJtiNSp?;lnA>yWj%|GRPsF$~;uoKK$=$2{kyHQw zej+b2DEhXFo}9OlEA4YU=eR(54kf1W$T?EPNaMiSo*YcEh~(vWFgqHPA(fDdWyXP1 zr*lRD)1Itt0+v-vt^n{{HU!C)Lqf^EVh)=vdw5CmeX!5!V8@;-;D*zqQHnl``T z9!54u-E#HGo9_OuijXQfPwGpnXHWY$0k`51S<}}S? zTP2dClh&dOX@7*)QVKuQ03qom7xNrvrs|gzJX@^jPu|7QU36fuG?dg%qFn6vj?Hw2 zSy#n3p9Eyu1GL$o^Ub<2K)B=E{>f4j@|K1=P))eOZNCd6I4^F}Uvd0~B_&6Fc__uJlsgzNFyTXh-FQlvzmLQ^+s+krR&vnYUry&Z$7Heb z{}44CR`fFTmt**SmOD#y`JDS5*E-6SXLhRB)5ENH@fC><@1tAJ*fPef7w2=|u=kNO z=20}MhKe+SK^|4}zI!5kZJn6XINmZpz=q16mC&9HR0ojT7ekxd-}VlE!|6X664WD>7WJm>mKMNT4fNiv&V2`CRG=!E z2}GP&T@9i!Veeh4ASpOaU2@DFXfMZhi6iPTw)uvrg|6=)Hz&j9U+-Ki0^ zSuaNR%CPrwwd^DJQ0oMRSdKC1c45~JK#I-1lJ*E6p(5y$_TG=&$w?(;Z?ia0#3RQfJy*<;c7i%0wZpX*G z22nJ54LlDTY1!a>}bGj@w>%|OT81}ZP{r?tMA#X_S_&53h zA~C~->iD;~1`#B4O0s2)pgx3sw*LB_dr+@YW_>j9#IUzv%NbTfbWzsS>i697B8)nP za1fhmQG~uLbH2Ny!V#sYz7BGDuy?m+@^Z5R!hU)XVhn(aJK6%$cOIp z#;Dp)cpk`8v|N4i2|IR&bi}8e2S~*(zIaK z#AST$o@DvGqz(~9!t8a3D$IH@TGxcVPsm*BtM+_|9k=?f!D-YjA~TE{BewSdS_q?4 zpdtAf8?;Riw4U^4t0?lP6dWHx!^c(hR@yA{dcy60w3pPC-!Ol*(@A{8;-!j= zblT}K>oZ03?;BQozi^l8M0AQji&+|B_H8liGXxhK_P(gD|AJpM=}S&rU8U@*FPV?? z%zClu#)rKxsQ9n2k95e2PVWBZOWrSXAzQGP`+S96-61Xe3h9|z{?ASyWn)O1fU|PKP6|YvuqS`3&zB*HS4n(Boy|(shr=k-hMK0 zpJ)?JehEzq$f7N>+4hUg`hn`lZ}_>Rza<+?ye+WX(iF$GLjoGWs3^M;f)07|%r2*r*Wp_FZ{&T)0xvb| zg?WIhoBbVc!V09K`-pIUxH)Yq0Z8E;3YAqr%=-)n(t4v?4Eo zXdRi|MAzD9H&~yARhN8ETo1^8l5I9@xP9wl9t!(_DSgE^n9_O{9{a|f+`e7YdGp1n z%~8Fn;d3!fL!M{5D2AK6$?CnCNAc?5AJlglL5%R+e*M(U%-~!c!1ZFpbJpCEi9e#a zzc*Pe|Hf#8%&mYC%gdj?j1|s+BewKia?dajU%`y z&+a@9n)Sj9%yW3(K7sG*Bi5);)^#k!n8}`ALyhKxuG2^ly@NVd={V@FlC`}_UHu>T z<<#)3AHxv%w!U6mLH~kT^nGu4kM);*UV?<}p+KBkVzQ@Kd%tSOTXnZ~&=y23`N2Jx z1}F8Wfk1`(LY;+|R9AM_iHJY^!0uaZ){8yAJ?#Bl?R<3505$qYcC*Usvg38Mo!asv zpe1I#nDS*|?`P`R#RC&nxNB0ZYg|};elF=gyQcT;MLry{QFeWrcO+Im@AKy$Q8Koa z>rO^e`m~TKXJeh%J&FLbdo2AgyGNIw3nBJc=w0KFpVNg;3U*UvwoU7?`QW!dV$wZRZsrR4_s2!FDYA!$G|X?AYoIE#+mhE z+(Q!nv^Xp!GUk=9u~Het78{7sK$QvG17Qw`&7T$a{@23KpqA}QqPzH-080_2&$erh zHS2{4fRgxeahQ}ED!A#LCs7Lh5e{xI^rxQx$(_|>vsphumUx%yJwLn0Sy4gS+gXpGrb(xsr6A~Y4z0TI>)t^^5jRIyLP7;i`AiGZ@0eaR}qyp=b8=j-p7Z0 zJ$IKF`4&jb0QxDx|cKBizhr?mi z|2gV+E+bcsj57Mf^Pj>H^bPx>k&drjVXfPpQAV=Jgd;!}Ws_-@pJ&DEw@ogVrtk!1 zVO1Yx1hpE%yheqi6r;@^1}3alS$OyP?WpO5|7eu$*U8)J?dUHdP>K-HXIvM#MmwJ) zSzs3tuFRg? zh$)6JY$)FlR(8HUk!iZwAly_z$mbT^q{=mG@osGLlx*5mUQ0}^Sf2;F8%g+}8f01) zgw)~g)a=q#DSzs2%%!MigKVhuhCQQ)QDkw$2YVPPNfXTm**UYSeF=rbJ+s2wB!Bi; zD=bA!tdW#lVm6FM><#(iPl#((eD}Es&A|wUonagW^eZ z9&xT9OZ_H1lJSMaqoq$Z8-$3;3;D8$5*PpU2?M>jSUG>Dm1JQrZe*I-Ak!_MXrW$4 zs@`P#vZRDNwN3w!*&q{dYe?PJ%Q(#n!qVht_ufWa?Ad06OtnoRB1Z1$W%N^HdmDXq zIGOHw-Jc2^D3%?IX_DC>b1pmV^OjU@^o$Ebm=N<*zr@H?y$aI1s#kg&y;DF*kPax% zNhp6GLpr22$d+6Rht$XDuM2tHGwaZqdi^I3=!?LK$U5fFIzbip#!uEa7`k2T52}TM^sFajzlJ$ z7;EW5384sYaq@n^&Y7 zN$743LOgMJoHnj}!`b1S>E+wP=<$-{cO0|G2bVmA^(|j`vcGWLcsTbu%dBE3jcy_-Tr( zU*k8D=)=>n8~`t1xH{MBQYGm=LaH%TCyOX=8XMPQvq7j>80@iW#y~9?D2t4JH+Pslj%Kpi zAY^P#$TyB^dz+}DTcdV)f&qGG>Bm4JZ()c%-l=C{vA!t$5~Oa!|_d7Rm>&O(ogM60*w2V#7HZ3Y-%;c6NB^hoev8JZme z|5nE>TS_3AC3iBvKhoskr?F`5>o~QfjtO{>aJJ$w1 z1JHMA17i=Q=DUR|<-6xDjQ=@#2_u7RIt!RMR`&OC^Sy#{`+1)tps zK2SzK1^jmweAc+i@Y-^53Ru?s*Xc$Qq&gy?hi^E+y>!lCF0l5^wsRi zpZviD5p1>ucOMt93CsMquR%~k%yO(uRrmVQU-SS`-k=p2-&2ZBHAHQU@)K6}d$htg zoqL?K9AB%9mj;ffRsBS>u@{$ThkWJM4k8`+rnL8{)J)MuUL%gw=|&-0fh|87rmIUH z1qNZ*7z+#+&sScKd`Wp6pgp}rR@t`e@n)m&tXU!7Stmx*>IJV#j1heQwo?MM(5;}C zMxrUXkrm?xY#Vxs*{CVlkow-ozIyW&sZ@sa8wmuTHg;tcHu*EHQP?UsSUQbtg&cW} zF~~Vv5Bk{%HQ5l8t`FVDE|#FWpIwl^6~fV?x5qB*R3n@jH_KUV3V44WDwoR`Ws^@;NK{WFv7JF!r}o&Hs#tI6A-dhtR6?fe9t&_ zRi($RW-p5G?ZqiZWtEO^0UK{&D^9{swuGpE5vNh3 z-@=~rf5G}J?BVe}J7Xc^BJY8nO_+Ihwwm$f8$;!5Dpsw+EiA@P zP!4^jPz37*KGVW)`oH2cEd0jKc-)A_(DsOc@m5n>54-fmBx}5bnK9GZ-EkxHudkno zfHTcT;X)wew`T>jk0)OVRYZ2Wohn*sHVP9$#K(tO)FQdIg4)ZlD>1%&2&Mwt8!a&# zg%RQ8{=@jSVJOQv)@~^A|7v(vFfN*(I!s-jV@#BP%Tq7s7z5OyYmMHi7>pFD>X;m} z&Bk1YLT9~w2s-N{RK0_wmj6)!!gd&f8>(?WQ{6elNY_X;X()ROD`^NKR?-ELv%1DQ zm1X`1S$_HUWy(c4)CHZcSq6%5X+argx zI19NA(vu@s7uN)>YtBE_HIlxgzT!uw;ECH8HQ)6u<%efcaN_|&m`a^d%5zQJL^uIe z5x@!mJ=I#&z+v1o=gU}z|RB6%kkk2 z)wn(bxP1OBP%A^9uGgwY!q4q(&5bfcG5wqd?O(ifzTrPA>Wm1 zX+959TYSewLNz1$V~0qW9vTMo-7#0#T7_OFfZ@~rs8^cs$sIr#0W)0aG zvx0t^QXchgAedBeLdAWEh`-*}w9?}79Yk*}Zv=wPYy%DgSK@6S9H;ZR^>_Kl}3ASaRZD)%f<`)9;wW}`Gp z2CCf?&K^0H3)mxXuw9@X=K=Bm<2SdhaI_~OR?wcVAHT7-a?^kfYFWcTUw^5PAw0Of z$TL_WRlxp_9n0#K!qH%DPlLMWs#*-WiRCCA8(Buy4R1tLO!|vqA<1Dx+YZ~q z11EG4d*(e8Dp#RjP7f2ZwtX!P5FRgv3Pmn75c0cEB^T{e2q4(9yCzg@E3Y6NN&>Ak z`ItP?kTm4Rg#g%r@NJwSx5VmM&weNN<63%n|dXUz!qnluC9%TWAI|6vy{}*UXH5-LK%Bl99zlyh$7YHOE2 zbaO(qpI1J@o(l+CI9AX%os3p%h8uB3)(a+s^+AIB;$6+?>Oo?Rt|eJ4$?>9NSEuaq zrDmh>PK!dyIocR3O)Crvk_)?=pKE7#Pd6Kde(D?YHPOF1)NxExN|h`<+vW;VcqovK zkx2F7Xd@2CT%)j2h#P)GESwbLM=BAS6{bcYeB&q=_F@$iI!GOY0fq$?wK2z}6_7QPPbIeAet;U3X z52zdVCZy{YFN8GdLISyYcG`KK*(mJQ_^|JO_0!&jOuc1u6B6-*u4H$cvyz17WhEW# zypoS5_!_lZRYT|ObnT=w{kD%Us zHgtm24#3&lRehZu%pu{fQOGcaaW-MJ5ONWT;0w)0A;VzO?@L{DP-=EceB}Sl=ybp^-2r;(6CnnUEa0?LYu492wZh zJFxXJ1AC~K$1>9p3p0lJu}xUw{@uN%CQ`( zJa{3ua%gKhj(lxdBDypukqy))uxElnJqWV}^-wsTpDu>KTeNp6Jz}!}mz#}f3a7y} z-!&cuRJx@PlcE&>DZXJZC}J&U3JyO?zS0@QL_C3i+Jjf^cg~>dH!!$YZ5W7G{{2Zt zT>K=n$-$SSle{!>J=HGeM!a34z)4o0(>#P-Voey){v|+E0B_ z6`yT{bJ<420uzdCR7foe;(tp&hG`&mPRS^to}2CE0u*v=RLJ+dIxEO*)X?RhB*&=# z27|r(qHJtKp0m#P+(Z%?*PcUMsApPbNKOxlyhB6be|DCND>PlU&iCvouZS1#LZLl` zQC*o$h#Yf7$T4(@XC~BA-Fznh*S-OUUdkp$!%i>)7QzhhUps@p9vDn&PmISgCvSA1 z>pfTfiOPm6IDx;B6qdE|!;_|)O~MjD?7TNAC$Bx;bqS zOcw1e-Ks8aOf#f{VUrMNz}`9uhO#W?U>>axZ6^X(2zka8Z=Q5Twp_tp#}&3&GS+Mo z290y>jT2XBoq*noGV|;P7+4|I!2Tl=t1g&eBqSjgP7U$vkz#y7WXeW_f=n=*gl6OA zy{66_NVv}v6WOx(t8i@m^=RZ@g;(RRuXg;k{q)U|BGb#F`ng^sReOr_M}q7B;2cNe zkZT<|c!`exv&L*nXNXY9_oX_$lsEX^4E|5oS+9E87u#1J4HXq_JI5TesUKJ1kT|W> z@aWtZ42{U%C18YjD+&2Nmr*k`%EwPFu+P&Hvq_jY^!m>x(d&2@o!(H&X~oPHpXm92AUr7eKaXYLX^}C=cV;kN9H7SQ8&&q5(FRw z9)J%c06pDZy=*8&`L+!OY@&tzR|J;9_DnZ=_SsM~?e*}h zyb|FD{OkM<8YpZkUsqv0Mr?iIuOrxN=A=*r%)VbIt>0?3O(Zbr%WDY*6wOh+JR9y8 zl#l|TemOO&{~XOrGzsg6sy}89s=j#8G9|oJCZ9dSZ;II@q#p{#PpV`Nr0SHz6*(c&xB3q{0> z9mz`Ur8dqrrqCm!Nw_+I-~SenUevs)0(;mE_bsd)_x)Y_RoDfLzCoA8lRTwN`Kk60 zlhe&6A@9&aznwI7Qi(O2rKC2xG4;tJ_qKNG?i)c$Z4x!7lw3-w^*|>%+XNhKHVJFj zcb)HR4TZ9nDg$cO3?n`Pp-^-Pzp@MG$wz_8pFR#cRx>{y735hZ_q;5SE{cLK0 zRI9k1{bLfK_-uCYO0%h04J|Vksn5!c9^EU=CSgu+61o-`BP=CJ9+*070ijyg&o@$u z^lcKdZ(>Nb&Nrw`B!#k^Wq1J)46_8eCj^`38%aI4nN4{TPS&g1-$m8C`zNWs_xs}2 zzZXF8Y1Suap)pV{7eA?@=e0$rLXh5^n#)u^1#gQvYKRXpn!Lo z;TbK@v$tcow0b%_swY8aYh5Y0?Ke8}$Pl>KalPXbgq{9jixu92S}I>I85edVW6H>n}Mz7Y9--S%gc4q~>JnxEHPLl7#1TS?XiS=w}A9l(E zj#bJtI5;8tG_$EptsNXZP5m(^D27Fo7~-WN{{Yo%2sM~u{+ygfxRp?M_UR37uEwd@ zA=ES!l$t*TSLbZAX$}G!8CMNKGZmsi-8UqdCQuI@QT4p5l;2{cSH=^3FoV$~$NwmZmPTFykFm;^dLzZxoi{}el zQoK7bjW)F!oKSToA-_lEF5xs6q~;`bMGf16WSbMFE+_2IoE%=iit?W`>CszJV{Klt zg4MRAMxRuEr?7OR!~TrPVc}aa1SV6_r$*6NtG{k_pP9IxR-U5hWG?u%MQQP{t_ z?sn~>y2XE-cagEw3!~AqHaJX;JUj0%?s)4|ZwV*~UCzDnE{NWW$V;+qd@W_XsN{)rsBnCSt;PWfmPr%5l#YX4qVW+xU zRjo8e(((`*tx&F%0Hno_Z)VuS2|y`;wKerl}7Q@L}etC$4CXPh<8EXOO39f+)d z*k;9YXPZ5L72B*F{_5~5*701kNlbRSB)zo?qK(#KY06h&*(YM3qauy2U@=JneC?8v zD#iAa0H{)8s27C%~Z#Zqr))gBoS4kbI_FAy|8&KXOUJMrqfyM=+PIW;{0Jv>x02dYw_{fvsVlU(W zqK=eJyExNq5?-w=r0!Zyl&;PylW0+hWAty^Vv!f#!|^+*gRzhU?;h7|60ZN`%y+y> zj9Ogwaxxd1#PXgM^3PIv&FPt{tdy7#9YhWY(T{b2RgG8R1FNV@VF^4x#xxb zrI!3}A)}kR`@MvI#2F9E9d3_w2fM|>64fYQdjhL|2pRD*mYCs;HT{%w4kWR>=Y;*! zEcw0-MpsKscxr=@Na}EtkXy*7c9LU*Y8R$`X>vH#factqGIayAwzZ8}Av0!}nYqMl z5;|H6l*zar)L*l#tP?L{y%1( z+VN<1e|6---U(MPPpVS&U-ayE^^v50+pXmnv)p`aBd}%WW2^Z%%Y1ARA4|>0O8Hn~ zK32lVndW2YDlv=A$EevBv&ej`FCS-^kI^e3W}*3*e9Hp!@FqUW%){k;%r_6u=VP9E zcoH8I%tPJz7;mZbhB+FAEV8-fqa~1wo!8< zW|Y|$$Hz#sjh_`$Y_@LUqsVMMn~xD@>sfphnyvHrC@@>)3x}Jn#eC$Ot&|9k8D_R- z@R4V>#`BSDw#xkuHMh6OZ45D6R`QW!w#Z!!He2K_2AM6R`3RaVxqM`sEq*=*nk{ZV z2AD0ltYi9{&A;O#%WMww5ipzOxA@Iw8O3Kd%P3y6Sw``g&BOS}G@A)ikI68b<>959 z&D-T}`kBo!e5A27_()|d$!IAkg?uEVX!DVTF~>(DCO#htusM9hn@v>9 zkBNh3<)aVOJ0HFAwD8dj#~vR&%|>~XbIrr@eCL>lb9nzTv(3Yqe9STrC-O1VJlvI! zQuEOHe9SNp$<0hR56K&yW*#czW2$*bZf1&kNN#4bc_@dEN#-FB9}~?(NqofO&F7;B zF&}(%Hyh;@!T_^B#B?lm!C%hwch;Xl7J>zHg^zN9)6A74;Ri(4f#>NKIWOKAAH9Z$!b z&P$vHj-%3~cx^^MJlfG^ygGGll`))FiSd2&A2v-q= zx790_na3b^$L{D}WHt*CMD^E~a#0;cLxef#l9)?Wp3R({Z8k@#tE!FJ(fpfBy|~IfYJb_ZAu}q<*VI;cW>jvj5H-!4uGwP7vlAwB%w`8yU~Rlo zg|+doZB&~`sU}8rzS*=L!T4%bP|X>5W@*q0Pi4oKA#8j8YO_f=T)6F^JP4h)y0eN+ z5p7slTeRjmYTqV|g0X>As>`$2!|P-4*^bENW|J_t%P1_oiP%vJfu+&5o~Xp(_QEaJ zDD|7Cm-3`@g)_!+yM(KM*k_2EkxPi+u5CuF`gAkLfwnM30aR({aI*81 zh56(uKff6gy_56|v$>B*q1ewsDlHl5=paQ8it{6?eJnSddjnh=_ODQfYT2Q6kyDA> zrd)&^JvOTeY%h&ft+lx6P9T#{LQXTAd#WMBc>BwbP$6y4uwV)S3C+Tr4z2btQ_F`1 zlhw3g!5$rQBH@~QAm=DKYa0Dqtmc@LD?$(uqKvcTx5kMkuVHvZ8B=Dzu%lS>)wvi&XXWwe8*_tk?X9UQ9k2+q$&0_O%-$yeu<(h1p;i7jFgKM7 zcyibu(qLzyu0E~?{tkBwLg5`rkAG(y!CC0NMDM}!PR0IjX#GN|-e@I~$L9YE@kn_!E;T9){{A)B)>cgk?g+ z7Ci{Lu!_i6pGw|dKALj5dnpU?9HHsC&i9>HlQ;FbgXq8cKA(iHhi7#*-8 z{(aT`JWO#$&(fnS-+4SST^wiid4$%_G@AnmFyFVRcg|yVPnu5`(#OwZl_3%;4U_+^ z^SD(Jko(JgA7SU4K?!xn0Gm4o7$`nZaJIdHsp$omUG1-(R=HtQMWtsl;e*=p93~}6 zpycpn7TGjMwm}b9U@z57t6WDt$9dvCuk=WPQdM#;DHw;&rPfUU?fkw{vpEwiX#iuk zGYxgQ9j%VaWVb8LE6ipg(aOXAjjCijB-ef0u{$(VbpBQ&kw(GI>1ya!V+9T7nuSOQ zS#>Jpo*fi+>**-a%_5@`al5T?^`z|mS0VBk z;4rO7^e!s(|J3RonqO(o1INSOzJrG?o7MnvPqBFx+JjX~%;sEh-jM&o=^H9nS9m6_ zlI*w)4aNeAa83apYJtrNu#V5hI*5p!nP)Z+0gUmsc_+r3=31n}CN_65b%Z+(Lx4FN z=-;Wf?8M|c0cC3eYCAU>Nz3xKNlDS zcQ5D7EdN_tjQZdLZ6!7b5n?4eP2ScynLeWt%ssqV^DnxO9$p44w8^SBsg==ewt=q81zOL3@ zXvDRLt-?_4r(W(qUAMTFljZoL^I~F}zj54qf}KiJXAckdidqlFHTLno!~s_^_j+7v z^p0ZfDu$evv9utYX7w}Ds*3&kn%p6lB}xAQservmZ(kE z@o>hO&Eo|f@+-BjFgPd)l`$fp6u>yOsxUY%y4Y+kQFjyuNA%iM!@L~JWz5@aI?vmS zMp*N9jFzkYBTkyPGOLB`WmfMP9wC)$+bf9E^yq=8)lsRgzqw3TF@=L~VY`fF1?}$C z^2p&p-&(+MsFGJ*jw*Srfs5hTk+Xs2tMy3a_BR;w=Ia6&%K8s)r8WPd#&ZA99>#O6!>&MFd#?{iHe zXt)`2a4>ZbuUDQ43Bxh!cz(jv^86mQ+Qm*MB*P+}f9Xx7&B0e0y@{h}7M2#!L!CfG z7IM1rlOug)Kv=JV^FuDH`7zQh9FX9KEkSF?AlHk*YdUKjG;t7gBFk*w~%nrW_m zIjCNIqrKS(;KdgBo=)Ht@i7Co?ZQmFMJnS;Rucg~F|;m|xEq_+ixDZju#`EylCM1X zr=T&=N@djgv2BAHZ#D}-?5+0SSz5mKYzgNS(^S>4K-*n2R9}_w6~F6E3TDi4b$1@7 zNJ}nlwD;-yt4VA@VTNFjdfa*hwBgb$xNc!Y4sMa1L}Y1f06ie=f6PM9)`iIrcgdi= zB}y*YTN1=-%kSWdkafl3Q(mDeb{oH;k~?l)wfR zk{NUQlk3oVwXZpUFMBaJEbKCMf@bX{4-SgkpqZGCn5J61O~FRF5n`FbZOwbxZiTc_ z-|jV%soLHwgfcJfFQwFMIi4EmRbMRcQ#!EgK!CPALSAN^ zBVRnU%c2roKe_J5ZJxo&@SsX73cjW8d&3i>p4(^4h@EP-#4seM&+Do@s&9%EhBnla zIwMa+LZ=}*Y7;$=D0-6F;!?hmWJ!dplKQ9%N0Ot;--I~hXx%>&lI66K!R}g`Da}ww zb*6qq$CLmpoEgg3ODcOLoQEDKI4T&F^G>)h62_N~;@RuIR=ds}6sz`*!i|hn2r+Kz z1+{DxB+LoWrtZ=k=zbB^;JS$YkW!Cx~hQ>=DBQ%qv6@S4d~q*tu%Wz8^K zgz;d?eylFLkrWv^-e#!O8>!%cNGJ|Mb#rgT>W>fzqk-U(c0oV&^oDUfR@I5X3JEy{{ zqc<3FI%uS)I8ASjn(6w1e4Po-f0NT(LI%Y_N9cshRLb472+fii@_#?GWZw9axuSxW zR|Y)92NgublYtbf1>|=TNS`|UW}`RRs4c>G<--|_XhS?(YAx!OoTVZO? zDR5iu6$uZq=lAoSLL80>`#)1TFJuo=v!gk6RlQ~cTZATL=!5m`D?xo%53j{{3Ps56 ze4@_TkI^ZMWVkF6nR9jroUFKB4nj%l@op!yC%e4iyqs$2-%^sOQh9DOCiN!nuf%Mz z*pxt&8hV=%rc~P;4F}+Hc2p%2mR$YXfq1VXSd+<#TCJNagrGXsPLVgMTh!~^LME-U2!QNDHx{hi-1fP^IpsHTk$4pv8or*u_!-DUJPBouV6*&I~J=wKgmR$E4@Gw(Jg(zmrmn44^} zC+>m%lI&+)M{nvqMqK7hvqfl|QK3N3nUZonxne`brpis8iJN&&73BnRi8pj(7^pFQQn*fORcgw5cB*DGN2d7H)VnFd1VHE-09`u)JgVX@BQ9}**&;OQ zfKVXjI6$wR0djJaY7|kA2e5FZfV)J1)hG8FM!%kpr4qOhq8aIPoSp-zCVQcC7*(zA zb1c<~Yij9f!Re_R!&Wr!XtQMsgQbQ7{bo+l=D!r-Qdi$k>@YGRc#!qA$#jJvxIx@;Ds3}D((TJi&f#Y=m9oIz}rw7|zX_CbW+HQ@^Hd{(8baH3(gfZw= zlg$=khX}{7g)TyxeX=x_J#jwLp`pOQnYAm|S5V!|(#*6yOYcX1Uy;4m zCl?66#03LRzQC_;eb^Y>eTCT~Owr1adgEauPsQHePoijbW49uEuZ%8MH<}r(df3-n zZGKQwd@aHxVe(x0AZmk_dd8*pv`owA9yD_Cy0-}H!+h=b5c5?R4WGpt%d=jZ&S+T| zl|}25I!Z&lil=z0)8%M#)I?;oaB^3v9nHj_)w_(Y#9ByYS9>fz0AYqujK4@bD$)hQr|GvDz`yQK$wU;@9mxWEgbJY!Pdi<96=s@Vduum;CE_8_FeD zBa^}u)H;ixP=Jeh41CT>a5e6*kst$#RSaVG$%v~D8$t3ATZGgp4h3eOKv3|7|??DhC#Im~8KYdl9yVdzm)7a(%ew9PLEXY{?gokur;1 zNE_r+JIhNRx8%arAfM7nu64IPkMlOTJE3i)M&0B1B%~#DoOnv@erYwR*_hLpJw>P( z_LPaUCzp68;_0rcpwbn6NOfOGomo{#$7$PUE~_uzLBqNav0!#Y6+prNiXQtk)qC=t zA3ASvP9uHjHpgYsxGp(*8liJ)#}mXG9W4pw64Bl&mNX?%z8y<{(;J>(wiJ{ElLXgW zjrlY6BjS$ri&l^P*+|TsWwwf)JSrS0*WEcJ$XyzrP%xDw`BmzL3GrT)^duSilg(DK zkU0kqJ;7dcbV9sA=z#7!647=9T&#u5``>UqEL`rB?c)*P4(Thc>myF7*6tb?SbAa} z9KW?p)%2vX1OH{KP)eLcXPg4^yT2I2nV+pLAiUEB9gy}3PtPxyTn-QA{IlU}&zPnv z&Of7`jJiFljIv3su9f5>9AG&`tBkS1=TzJynM5f(qk}D4#Sk7*9jH=&{3})xyGNQ9 z(fXxTOyRt6AUvDA%1T`$aRX(3tWZ!7;Su7%${S|)U@bRW#V}qP4s1~OPRveL4?M%^ zB5}RoDN{_ZRH`0z>|G1ZRNMca`p#}hrg=BdH3I5ia2d~tkmh+0$<9NC@4|-evb19^0Tw*AkybwJ@s*RQZh98|WQN&lna8T_*>*cx9WnYx zXOW*zEd$%WP-3=jA_3!75{J1e@tC+#;`P=5yl7nV3w+o&(l1Nr+6{9zOU0~~+ zT5|u?{+lV9df<5@UPNN=BHGd+N|tDyh+v)3W~*Pl@RTt;b#;gR(<-D=dSzgnk0>R)YnfNDf;F2q80@a7iYDXBg=NagwJ@M zGoFUG+Z{ud?}#xgwJ^d3!7CO+c|<61xq9meYfRVM*92?r3nYy4q{KY#8wy-Dw<2dj zxV_4=%mQk*71E)%W4418BN^k(wUGJy#RcoifVWU1ot2Hkg zW1!7i#Q=sjyZ1$CGrhcY?%OvnLXjX9>$fBnxJVs*5u^Qtygxf!L1Y=tRtpW5 zei`c8zoES&5@HL{1vb&Qh$#HrDl`_fPu#OSZ0bRz4c9usaJy+@X^1-Hb1AV>Pos5= za(+)`sZwVUC-FWB`#jJiNXS{MWk;*FqeMYT(-XC8Hd^$cmyO=IKU&3#=C@xbRfA~$ zs3#MhHeWUpL@G8k(rY87bxYk{)L&mlgI!^^ibY%=R?)9eDE%V3RH(97sE9t+Y!%}- zGZff8H(b7oRd?{VL77sPK3d)S3bO`)Sib2K@Gp1^hy-o)>v6)#PZBxjH)S)!4sX^%~+bTx#_)y@0YTK8XX)O&&L6=bo zW9Yaspkgrty{QwFKxLpdvXXfwrZSZ%K7I|2OoAl~I9 zjLl6WJ@ZzUlexypOsa79Wf+`@=bxFDx$ zq?-N@P9g2zlOnk4@_#T57MZO=ND&El(?7_X)W>2~^Wd0N{JXaOn4cir6hzSfsKZBb z;poM3;HY60RE>2^a6~mlt>@IdpHg8_&VzKU`QEWtd3MDGBvf?56e81hy~Qr9d(=Gi z7G)OsYB4Zpg#!oGvHC=>dhj-qsbuez{!%#DZE7c2F*m{9XTx6jwvjBuh^>j}UYqFD z!|*f2?&N3Oqh8pbNXn^%N=axKy+dsqEVxA$?(PnpS~(3pg0DLR5fAMAX~BUy1CSs? zooG{Rr+UGO{W>QUxKr(zhLWRm1+ShSOp-em4hhj6okW;YtwJE>6P++Um}&)F%i%@k z65L4kj)JHRLMFkI-lj6A5(9P1l;H8`7^>Sgp~PGjH6v;SL{_z{xARW&`d?F?mj;%Q z>rg`qjP8mN4z#MO$KyFW-oaBQs$2$?HEer6eMD?Cc%9iQ*5)Rfy#3QCR%_OhTPxwP zG^pXW>=o3OnXO`N!YVYY9mil59=&alXycMdIwB&G6r`A&FbL-#gI^F_d&22SxYgE( zjU6NY7E-KJzPq6VsUCU*U6?Nu6BW^;Hj(#D%Bu1pS0Lg+K0I%2`Ks_aRw?ic--I_R zdCLe2KI0ZUFjW@jiBn-F{R@+u13^d?c-hD87+s7| zcdMkPHdVuIJ0DjFvBDLPopc3pzG9Ea6}E$cGmfCVcbSdn{nO|n=ka<5fQ~%G02KK< zUidL53#KaqY?6d z{)bZkwI59RV;|zyLLl}Wf@3EHSs&?OiMA*N=mW1}0&XO!VvBVkYh7^bM|d5`UvpWI zS55(WsvY9AATR$01PZ3j0fZm=lA5t&P=9r0my8&-_G6lI&36h?;R%;$Z52q0$extDd~5-vQyQ ze|}z7`N|5$)#s$o&=kzS4McBr5yRS<1saY6& zeku{$3_ieHE%39Qz=z+X9;zq}L=-WLFOtn{C2El&w>@d;&2z;sd;O`YnC?2@i3B+149r={nWxQ#h$V z9L?^fmaj_cr51du&4)H2C6HE~EG6foO^Arnb%A$OpHJ}+M_w&*As~>y-AOLJ*tkpE zikM}#2?;S~UEnQs@8_te;;&XCJ}2=Mk?; zju23*zAXj;yW8t}%28bz$GI=V>Nv6L!xJHwXF8(lqE2^x)3Udu`3T&i=vFeZ01+k{+Tn|r&I$R0^9P&;V)ruxq$o@JidmZqfvx^I=TtBBl? zxd`D}XfKLN+GnZ?e@RD~FTOOoqtvzuXMj@siQMS;jpeH?bG3(5t>AQlIaQy3X?O)G zEC9%lBa!H$$B`YI-W;<{h=Gz&;3KvFYgFOfuZ-?$>xCRgVwJK+3hd!hz>_Taho^!Q zl3rkUivdrx;Q#6bS1Dh!^)EHs5|A$p2R;yaw%YwOula(np|udjYmut^8md(U`I=^- z)31#XkVVncLEh9&uom&Ir^q@ibbiX&Q_9Knkd-?%RaMRi_U?ufIgfq}Yt@by`uYfc z%$H|gWUn4G#cUhEcR~sNcU~=Iu??^O`5pdV074iH4ej|J^5@bQ`dS%&5<+PYq9`@n zggh7#4*Z~As2z|fH6}9DpT1`coo==Xc_1pz_t=a3-;9sSeI0dvY7>o%(iq;5cWG~p!8|V zZTZYW(Ia)(yzSS?YfEsAUo#|#%?vIy&BNC1bgLUk;tWpvO+q<@J`__n~^jDkE zVrV=+w@=)viV87|S6ZCWNGrXGRxO>DP9K_pMM(>mWl?di!>-k?Sm&e8-FN^qon0Mm zj&mISRsWxi=_>PQBZe{#ZDK7A2xaw~ul1_=8|izgO58Lu)~%&h|E#NAwTZC=s_&^$ zkNj*5lwDl-h0&p`RQ1biiH5qdEEV%7X>eCHzd$TrI&_BI$vvw8f!HL6b9R>Re|k)Ri zs}`*T_h_qGBtdPf{c3BiZMEOlE?e!gt+nm%`Tm?hJ_*?W_fH@7!hOHaxo3RF`~7+^ z-QQK@BAajFq<_deX5#rwl $%`@r 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
    }a`v^TGItaNCMdZM>cKtN4{I4Fpq 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
    unascYH(^ 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 PMftR8N Date: Wed, 11 Dec 2019 16:11:25 -0800 Subject: [PATCH 003/105] Dynamically maps old album artwork URLs to new ones --- Delta/Database/Model/Human/Game.swift | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/Delta/Database/Model/Human/Game.swift b/Delta/Database/Model/Human/Game.swift index 67ea655..77c4017 100644 --- a/Delta/Database/Model/Human/Game.swift +++ b/Delta/Database/Model/Human/Game.swift @@ -30,10 +30,24 @@ public class Game: _Game, GameProtocol var artworkURL = self.primitiveValue(forKey: #keyPath(Game.artworkURL)) as? URL self.didAccessValue(forKey: #keyPath(Game.artworkURL)) - if let unwrappedArtworkURL = artworkURL, unwrappedArtworkURL.isFileURL + if let unwrappedArtworkURL = artworkURL { - // Recreate the stored URL relative to current sandbox location. - artworkURL = URL(fileURLWithPath: unwrappedArtworkURL.relativePath, relativeTo: DatabaseManager.gamesDirectoryURL) + if unwrappedArtworkURL.isFileURL + { + // Recreate the stored URL relative to current sandbox location. + artworkURL = URL(fileURLWithPath: unwrappedArtworkURL.relativePath, relativeTo: DatabaseManager.gamesDirectoryURL) + } + else if unwrappedArtworkURL.host?.lowercased() == "img.gamefaqs.net", var components = URLComponents(url: unwrappedArtworkURL, resolvingAgainstBaseURL: false) + { + // Quick fix for broken album artwork URLs due to host change. + components.host = "gamefaqs1.cbsistatic.com" + components.scheme = "https" + + if let url = components.url + { + artworkURL = url + } + } } return artworkURL From 82bfbd027ae88aef19414c44b6d1de9a65cb04ed Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Wed, 11 Dec 2019 16:12:01 -0800 Subject: [PATCH 004/105] Updates app version to 1.1.1 --- Delta.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index f4984b9..45b7b41 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -1320,11 +1320,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 15; + CURRENT_PROJECT_VERSION = 16; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.1; + MARKETING_VERSION = 1.1.1; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; @@ -1345,11 +1345,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 15; + CURRENT_PROJECT_VERSION = 16; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.1; + MARKETING_VERSION = 1.1.1; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DIMPACTOR"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; From 6cca0f244fc48e7e9d2c6cd0095903c94506493e Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 3 Feb 2020 19:28:23 -0800 Subject: [PATCH 005/105] Replaces frameworks with static libraries As of iOS 13.3.1, apps installed with free developer accounts that contain embedded frameworks fail to launch. To work around this, we now link all dependencies via Cocoapods as static libraries. --- Cores/DSDeltaCore | 2 +- Cores/DeltaCore | 2 +- Cores/GBADeltaCore | 2 +- Cores/GBCDeltaCore | 2 +- Cores/N64DeltaCore | 2 +- Cores/NESDeltaCore | 2 +- Cores/SNESDeltaCore | 2 +- Delta.xcodeproj/project.pbxproj | 160 +- .../xcshareddata/xcschemes/Delta.xcscheme | 125 +- Delta/AppDelegate.swift | 2 +- .../AppIconShortcutsViewController.swift | 1 + .../SyncingServicesViewController.swift | 1 - Delta/Syncing/SyncManager.swift | 2 - External/Harmony | 2 +- External/Roxas | 2 +- Podfile | 17 +- Podfile.lock | 126 +- Pods/Alamofire/LICENSE | 19 + Pods/Alamofire/README.md | 242 + Pods/Alamofire/Source/AFError.swift | 460 + Pods/Alamofire/Source/Alamofire.swift | 465 + .../Source/DispatchQueue+Alamofire.swift | 37 + Pods/Alamofire/Source/MultipartFormData.swift | 580 + .../Source/NetworkReachabilityManager.swift | 233 + Pods/Alamofire/Source/Notifications.swift | 55 + Pods/Alamofire/Source/ParameterEncoding.swift | 483 + Pods/Alamofire/Source/Request.swift | 654 + Pods/Alamofire/Source/Response.swift | 567 + .../Source/ResponseSerialization.swift | 715 + Pods/Alamofire/Source/Result.swift | 300 + Pods/Alamofire/Source/ServerTrustPolicy.swift | 307 + Pods/Alamofire/Source/SessionDelegate.swift | 725 + Pods/Alamofire/Source/SessionManager.swift | 896 + Pods/Alamofire/Source/TaskDelegate.swift | 466 + Pods/Alamofire/Source/Timeline.swift | 136 + Pods/Alamofire/Source/Validation.swift | 315 + Pods/GTMSessionFetcher/LICENSE | 202 + Pods/GTMSessionFetcher/README.md | 23 + .../Source/GTMGatherInputStream.h | 52 + .../Source/GTMGatherInputStream.m | 185 + .../Source/GTMMIMEDocument.h | 148 + .../Source/GTMMIMEDocument.m | 631 + .../Source/GTMReadMonitorInputStream.h | 49 + .../Source/GTMReadMonitorInputStream.m | 190 + .../Source/GTMSessionFetcher.h | 1322 + .../Source/GTMSessionFetcher.m | 4648 +++ .../Source/GTMSessionFetcherLogging.h | 112 + .../Source/GTMSessionFetcherLogging.m | 982 + .../Source/GTMSessionFetcherService.h | 193 + .../Source/GTMSessionFetcherService.m | 1369 + .../Source/GTMSessionUploadFetcher.h | 175 + .../Source/GTMSessionUploadFetcher.m | 1985 + Pods/GoogleAPIClientForREST/LICENSE | 202 + Pods/GoogleAPIClientForREST/README.md | 49 + .../Source/GTLRDefines.h | 109 + .../GeneratedServices/Drive/GTLRDrive.h | 14 + .../Drive/GTLRDriveObjects.h | 2648 ++ .../Drive/GTLRDriveObjects.m | 766 + .../GeneratedServices/Drive/GTLRDriveQuery.h | 2541 ++ .../GeneratedServices/Drive/GTLRDriveQuery.m | 1092 + .../Drive/GTLRDriveService.h | 124 + .../Drive/GTLRDriveService.m | 72 + .../Source/Objects/GTLRBatchQuery.h | 85 + .../Source/Objects/GTLRBatchQuery.m | 179 + .../Source/Objects/GTLRBatchResult.h | 78 + .../Source/Objects/GTLRBatchResult.m | 170 + .../Source/Objects/GTLRDateTime.h | 115 + .../Source/Objects/GTLRDateTime.m | 373 + .../Source/Objects/GTLRDuration.h | 83 + .../Source/Objects/GTLRDuration.m | 222 + .../Source/Objects/GTLRErrorObject.h | 116 + .../Source/Objects/GTLRErrorObject.m | 140 + .../Source/Objects/GTLRObject.h | 317 + .../Source/Objects/GTLRObject.m | 768 + .../Source/Objects/GTLRQuery.h | 253 + .../Source/Objects/GTLRQuery.m | 313 + .../Source/Objects/GTLRRuntimeCommon.h | 73 + .../Source/Objects/GTLRRuntimeCommon.m | 1060 + .../Source/Objects/GTLRService.h | 879 + .../Source/Objects/GTLRService.m | 2886 ++ .../Source/Objects/GTLRUploadParameters.h | 124 + .../Source/Objects/GTLRUploadParameters.m | 119 + .../Source/Utilities/GTLRBase64.h | 29 + .../Source/Utilities/GTLRBase64.m | 144 + .../Source/Utilities/GTLRFramework.h | 34 + .../Source/Utilities/GTLRFramework.m | 44 + .../Source/Utilities/GTLRURITemplate.h | 48 + .../Source/Utilities/GTLRURITemplate.m | 511 + .../Source/Utilities/GTLRUtilities.h | 52 + .../Source/Utilities/GTLRUtilities.m | 117 + Pods/GoogleSignIn/.cocoapods.yml | 5 + Pods/GoogleSignIn/CHANGELOG.md | 110 + .../GoogleSignIn.framework/GoogleSignIn | Bin 0 -> 7572960 bytes .../Headers/GIDAuthentication.h | 72 + .../Headers/GIDGoogleUser.h | 43 + .../Headers/GIDProfileData.h | 34 + .../Headers/GIDSignIn.h | 187 + .../Headers/GIDSignInButton.h | 51 + .../Headers/GoogleSignIn.h | 5 + .../Modules/module.modulemap | 12 + Pods/GoogleSignIn/README.md | 18 + .../Resources/GoogleSignIn.bundle/Info.plist | 24 + .../GoogleSignIn.bundle/Roboto-Bold.ttf | Bin 0 -> 127744 bytes .../ar.lproj/GoogleSignIn.strings | 44 + .../ca.lproj/GoogleSignIn.strings | 44 + .../cs.lproj/GoogleSignIn.strings | 44 + .../da.lproj/GoogleSignIn.strings | 44 + .../de.lproj/GoogleSignIn.strings | 44 + .../el.lproj/GoogleSignIn.strings | 44 + .../en.lproj/GoogleSignIn.strings | 44 + .../en_GB.lproj/GoogleSignIn.strings | 44 + .../es.lproj/GoogleSignIn.strings | 44 + .../es_MX.lproj/GoogleSignIn.strings | 44 + .../fi.lproj/GoogleSignIn.strings | 44 + .../fr.lproj/GoogleSignIn.strings | 44 + .../fr_CA.lproj/GoogleSignIn.strings | 44 + .../Resources/GoogleSignIn.bundle/google.png | Bin 0 -> 572 bytes .../GoogleSignIn.bundle/google@2x.png | Bin 0 -> 987 bytes .../GoogleSignIn.bundle/google@3x.png | Bin 0 -> 1622 bytes .../he.lproj/GoogleSignIn.strings | 44 + .../hi.lproj/GoogleSignIn.strings | 44 + .../hr.lproj/GoogleSignIn.strings | 44 + .../hu.lproj/GoogleSignIn.strings | 44 + .../id.lproj/GoogleSignIn.strings | 44 + .../it.lproj/GoogleSignIn.strings | 44 + .../ja.lproj/GoogleSignIn.strings | 44 + .../ko.lproj/GoogleSignIn.strings | 44 + .../ms.lproj/GoogleSignIn.strings | 44 + .../nb.lproj/GoogleSignIn.strings | 44 + .../nl.lproj/GoogleSignIn.strings | 44 + .../pl.lproj/GoogleSignIn.strings | 44 + .../pt.lproj/GoogleSignIn.strings | 44 + .../pt_BR.lproj/GoogleSignIn.strings | 44 + .../pt_PT.lproj/GoogleSignIn.strings | 44 + .../ro.lproj/GoogleSignIn.strings | 44 + .../ru.lproj/GoogleSignIn.strings | 44 + .../sk.lproj/GoogleSignIn.strings | 44 + .../sv.lproj/GoogleSignIn.strings | 44 + .../th.lproj/GoogleSignIn.strings | 44 + .../tr.lproj/GoogleSignIn.strings | 44 + .../uk.lproj/GoogleSignIn.strings | 44 + .../vi.lproj/GoogleSignIn.strings | 44 + .../zh_CN.lproj/GoogleSignIn.strings | 44 + .../zh_TW.lproj/GoogleSignIn.strings | 44 + .../DebugUtils/GTMDebugSelectorValidation.h | 101 + .../DebugUtils/GTMDebugThreadValidation.h | 44 + .../DebugUtils/GTMMethodCheck.h | 69 + .../Foundation/GTMNSDictionary+URLArguments.h | 40 + .../Foundation/GTMNSDictionary+URLArguments.m | 82 + .../Foundation/GTMNSString+URLArguments.h | 45 + .../Foundation/GTMNSString+URLArguments.m | 48 + Pods/GoogleToolboxForMac/GTMDefines.h | 375 + Pods/GoogleToolboxForMac/LICENSE | 202 + Pods/GoogleToolboxForMac/README.md | 15 + .../DSDeltaCore/DSDeltaCore/Types/DSTypes.h | 1 + .../desmume/desmume/src/Database.h | 1 + .../DSDeltaCore/desmume/desmume/src/FIFO.h | 1 + .../DSDeltaCore/desmume/desmume/src/GPU.h | 1 + .../DSDeltaCore/desmume/desmume/src/MMU.h | 1 + .../desmume/desmume/src/MMU_timing.h | 1 + .../desmume/desmume/src/NDSSystem.h | 1 + .../desmume/desmume/src/OGLRender.h | 1 + .../desmume/desmume/src/OGLRender_3_2.h | 1 + .../DSDeltaCore/desmume/desmume/src/PACKED.h | 1 + .../desmume/desmume/src/PACKED_END.h | 1 + .../desmume/desmume/src/ROMReader.h | 1 + .../DSDeltaCore/desmume/desmume/src/SPU.h | 1 + .../DSDeltaCore/desmume/desmume/src/arm_jit.h | 1 + .../DSDeltaCore/desmume/desmume/src/armcpu.h | 1 + .../DSDeltaCore/desmume/desmume/src/bios.h | 1 + .../desmume/desmume/src/cheatSystem.h | 1 + .../desmume/desmume/src/commandline.h | 1 + .../DSDeltaCore/desmume/desmume/src/common.h | 1 + .../DSDeltaCore/desmume/desmume/src/cp15.h | 1 + .../DSDeltaCore/desmume/desmume/src/debug.h | 1 + .../DSDeltaCore/desmume/desmume/src/driver.h | 1 + .../DSDeltaCore/desmume/desmume/src/emufile.h | 1 + .../DSDeltaCore/desmume/desmume/src/encrypt.h | 1 + .../desmume/desmume/src/firmware.h | 1 + .../DSDeltaCore/desmume/desmume/src/gdbstub.h | 1 + .../DSDeltaCore/desmume/desmume/src/gfx3d.h | 1 + .../desmume/src/instruction_attributes.h | 1 + .../desmume/desmume/src/instructions.h | 1 + .../src/libretro-common/include/boolean.h | 1 + .../src/libretro-common/include/clamping.h | 1 + .../src/libretro-common/include/filters.h | 1 + .../src/libretro-common/include/libco.h | 1 + .../src/libretro-common/include/libretro.h | 1 + .../libretro-common/include/libretro_vulkan.h | 1 + .../libretro-common/include/math/complex.h | 1 + .../src/libretro-common/include/math/fxp.h | 1 + .../src/libretro-common/include/memalign.h | 1 + .../src/libretro-common/include/memmap.h | 1 + .../libretro-common/include/retro_assert.h | 1 + .../libretro-common/include/retro_common.h | 1 + .../include/retro_common_api.h | 1 + .../libretro-common/include/retro_dirent.h | 1 + .../include/retro_endianness.h | 1 + .../include/retro_environment.h | 1 + .../libretro-common/include/retro_inline.h | 1 + .../include/retro_miscellaneous.h | 1 + .../src/libretro-common/include/retro_stat.h | 1 + .../src/libretro-common/include/rhash.h | 1 + .../desmume/desmume/src/lua-engine.h | 1 + .../DSDeltaCore/desmume/desmume/src/matrix.h | 1 + .../DSDeltaCore/desmume/desmume/src/mc.h | 1 + .../DSDeltaCore/desmume/desmume/src/mem.h | 1 + .../desmume/desmume/src/metaspu/SndOut.h | 1 + .../desmume/src/metaspu/SoundTouch/AAFilter.h | 1 + .../src/metaspu/SoundTouch/BPMDetect.h | 1 + .../src/metaspu/SoundTouch/FIFOSampleBuffer.h | 1 + .../src/metaspu/SoundTouch/FIFOSamplePipe.h | 1 + .../src/metaspu/SoundTouch/FIRFilter.h | 1 + .../src/metaspu/SoundTouch/RateTransposer.h | 1 + .../desmume/src/metaspu/SoundTouch/STTypes.h | 1 + .../src/metaspu/SoundTouch/SoundTouch.h | 1 + .../src/metaspu/SoundTouch/TDStretch.h | 1 + .../desmume/src/metaspu/SoundTouch/WavFile.h | 1 + .../src/metaspu/SoundTouch/cpu_detect.h | 1 + .../desmume/desmume/src/metaspu/metaspu.h | 1 + .../desmume/src/metaspu/win32/Dialogs.h | 1 + .../DSDeltaCore/desmume/desmume/src/mic.h | 1 + .../DSDeltaCore/desmume/desmume/src/movie.h | 1 + .../DSDeltaCore/desmume/desmume/src/path.h | 1 + .../desmume/desmume/src/rasterize.h | 1 + .../desmume/desmume/src/readwrite.h | 1 + .../desmume/desmume/src/registers.h | 1 + .../desmume/desmume/src/render3D.h | 1 + .../DSDeltaCore/desmume/desmume/src/rtc.h | 1 + .../DSDeltaCore/desmume/desmume/src/saves.h | 1 + .../DSDeltaCore/desmume/desmume/src/scmrev.h | 1 + .../DSDeltaCore/desmume/desmume/src/slot1.h | 1 + .../DSDeltaCore/desmume/desmume/src/slot2.h | 1 + .../desmume/desmume/src/texcache.h | 1 + .../DSDeltaCore/desmume/desmume/src/types.h | 1 + .../DSDeltaCore/desmume/desmume/src/version.h | 1 + .../DSDeltaCore/desmume/desmume/src/wifi.h | 1 + .../Private/DSDeltaCore/libDeSmuME/pcap.h | 1 + Pods/Headers/Private/DeltaCore/DeltaCore.h | 1 + Pods/Headers/Private/DeltaCore/DeltaTypes.h | 1 + .../GBADeltaCore/Bridge/GBAEmulatorBridge.h | 1 + .../GBADeltaCore/Bridge/GBASoundDriver.h | 1 + .../GBADeltaCore/GBADeltaCore/GBADeltaCore.h | 1 + .../GBADeltaCore/Types/GBATypes.h | 1 + .../GBADeltaCore/SFML/include/SFML/Audio.hpp | 1 + .../SFML/include/SFML/Audio/AlResource.hpp | 1 + .../SFML/include/SFML/Audio/Export.hpp | 1 + .../include/SFML/Audio/InputSoundFile.hpp | 1 + .../SFML/include/SFML/Audio/Listener.hpp | 1 + .../SFML/include/SFML/Audio/Music.hpp | 1 + .../include/SFML/Audio/OutputSoundFile.hpp | 1 + .../SFML/include/SFML/Audio/Sound.hpp | 1 + .../SFML/include/SFML/Audio/SoundBuffer.hpp | 1 + .../SFML/Audio/SoundBufferRecorder.hpp | 1 + .../include/SFML/Audio/SoundFileFactory.hpp | 1 + .../include/SFML/Audio/SoundFileFactory.inl | 1 + .../include/SFML/Audio/SoundFileReader.hpp | 1 + .../include/SFML/Audio/SoundFileWriter.hpp | 1 + .../SFML/include/SFML/Audio/SoundRecorder.hpp | 1 + .../SFML/include/SFML/Audio/SoundSource.hpp | 1 + .../SFML/include/SFML/Audio/SoundStream.hpp | 1 + .../GBADeltaCore/SFML/include/SFML/Config.hpp | 1 + .../SFML/include/SFML/Graphics.hpp | 1 + .../SFML/include/SFML/Graphics/BlendMode.hpp | 1 + .../include/SFML/Graphics/CircleShape.hpp | 1 + .../SFML/include/SFML/Graphics/Color.hpp | 1 + .../include/SFML/Graphics/ConvexShape.hpp | 1 + .../SFML/include/SFML/Graphics/Drawable.hpp | 1 + .../SFML/include/SFML/Graphics/Export.hpp | 1 + .../SFML/include/SFML/Graphics/Font.hpp | 1 + .../SFML/include/SFML/Graphics/Glsl.hpp | 1 + .../SFML/include/SFML/Graphics/Glsl.inl | 1 + .../SFML/include/SFML/Graphics/Glyph.hpp | 1 + .../SFML/include/SFML/Graphics/Image.hpp | 1 + .../include/SFML/Graphics/PrimitiveType.hpp | 1 + .../SFML/include/SFML/Graphics/Rect.hpp | 1 + .../SFML/include/SFML/Graphics/Rect.inl | 1 + .../include/SFML/Graphics/RectangleShape.hpp | 1 + .../include/SFML/Graphics/RenderStates.hpp | 1 + .../include/SFML/Graphics/RenderTarget.hpp | 1 + .../include/SFML/Graphics/RenderTexture.hpp | 1 + .../include/SFML/Graphics/RenderWindow.hpp | 1 + .../SFML/include/SFML/Graphics/Shader.hpp | 1 + .../SFML/include/SFML/Graphics/Shape.hpp | 1 + .../SFML/include/SFML/Graphics/Sprite.hpp | 1 + .../SFML/include/SFML/Graphics/Text.hpp | 1 + .../SFML/include/SFML/Graphics/Texture.hpp | 1 + .../SFML/include/SFML/Graphics/Transform.hpp | 1 + .../include/SFML/Graphics/Transformable.hpp | 1 + .../SFML/include/SFML/Graphics/Vertex.hpp | 1 + .../include/SFML/Graphics/VertexArray.hpp | 1 + .../SFML/include/SFML/Graphics/View.hpp | 1 + .../GBADeltaCore/SFML/include/SFML/Main.hpp | 1 + .../SFML/include/SFML/Network.hpp | 1 + .../SFML/include/SFML/Network/Export.hpp | 1 + .../SFML/include/SFML/Network/Ftp.hpp | 1 + .../SFML/include/SFML/Network/Http.hpp | 1 + .../SFML/include/SFML/Network/IpAddress.hpp | 1 + .../SFML/include/SFML/Network/Packet.hpp | 1 + .../SFML/include/SFML/Network/Socket.hpp | 1 + .../include/SFML/Network/SocketHandle.hpp | 1 + .../include/SFML/Network/SocketSelector.hpp | 1 + .../SFML/include/SFML/Network/TcpListener.hpp | 1 + .../SFML/include/SFML/Network/TcpSocket.hpp | 1 + .../SFML/include/SFML/Network/UdpSocket.hpp | 1 + .../GBADeltaCore/SFML/include/SFML/OpenGL.hpp | 1 + .../GBADeltaCore/SFML/include/SFML/System.hpp | 1 + .../SFML/include/SFML/System/Clock.hpp | 1 + .../SFML/include/SFML/System/Err.hpp | 1 + .../SFML/include/SFML/System/Export.hpp | 1 + .../include/SFML/System/FileInputStream.hpp | 1 + .../SFML/include/SFML/System/InputStream.hpp | 1 + .../SFML/include/SFML/System/Lock.hpp | 1 + .../include/SFML/System/MemoryInputStream.hpp | 1 + .../SFML/include/SFML/System/Mutex.hpp | 1 + .../include/SFML/System/NativeActivity.hpp | 1 + .../SFML/include/SFML/System/NonCopyable.hpp | 1 + .../SFML/include/SFML/System/Sleep.hpp | 1 + .../SFML/include/SFML/System/String.hpp | 1 + .../SFML/include/SFML/System/String.inl | 1 + .../SFML/include/SFML/System/Thread.hpp | 1 + .../SFML/include/SFML/System/Thread.inl | 1 + .../SFML/include/SFML/System/ThreadLocal.hpp | 1 + .../include/SFML/System/ThreadLocalPtr.hpp | 1 + .../include/SFML/System/ThreadLocalPtr.inl | 1 + .../SFML/include/SFML/System/Time.hpp | 1 + .../SFML/include/SFML/System/Utf.hpp | 1 + .../SFML/include/SFML/System/Utf.inl | 1 + .../SFML/include/SFML/System/Vector2.hpp | 1 + .../SFML/include/SFML/System/Vector2.inl | 1 + .../SFML/include/SFML/System/Vector3.hpp | 1 + .../SFML/include/SFML/System/Vector3.inl | 1 + .../GBADeltaCore/SFML/include/SFML/Window.hpp | 1 + .../SFML/include/SFML/Window/Context.hpp | 1 + .../include/SFML/Window/ContextSettings.hpp | 1 + .../SFML/include/SFML/Window/Event.hpp | 1 + .../SFML/include/SFML/Window/Export.hpp | 1 + .../SFML/include/SFML/Window/GlResource.hpp | 1 + .../SFML/include/SFML/Window/Joystick.hpp | 1 + .../SFML/include/SFML/Window/Keyboard.hpp | 1 + .../SFML/include/SFML/Window/Mouse.hpp | 1 + .../SFML/include/SFML/Window/Sensor.hpp | 1 + .../SFML/include/SFML/Window/Touch.hpp | 1 + .../SFML/include/SFML/Window/VideoMode.hpp | 1 + .../SFML/include/SFML/Window/Window.hpp | 1 + .../SFML/include/SFML/Window/WindowHandle.hpp | 1 + .../SFML/include/SFML/Window/WindowStyle.hpp | 1 + .../SFML/src/SFML/System/Unix/ThreadImpl.hpp | 1 + .../visualboyadvance-m/src/AutoBuild.h | 1 + .../GBADeltaCore/visualboyadvance-m/src/NLS.h | 1 + .../visualboyadvance-m/src/System.h | 1 + .../visualboyadvance-m/src/Util.h | 1 + .../src/common/ConfigManager.h | 1 + .../visualboyadvance-m/src/common/Patch.h | 1 + .../visualboyadvance-m/src/common/Port.h | 1 + .../src/common/SoundDriver.h | 1 + .../visualboyadvance-m/src/common/SoundSDL.h | 1 + .../visualboyadvance-m/src/common/Types.h | 1 + .../visualboyadvance-m/src/common/array.h | 1 + .../visualboyadvance-m/src/common/cstdint.h | 1 + .../src/common/dictionary.h | 1 + .../visualboyadvance-m/src/common/ffmpeg.h | 1 + .../visualboyadvance-m/src/common/iniparser.h | 1 + .../visualboyadvance-m/src/common/memgzio.h | 1 + .../src/common/ringbuffer.h | 1 + .../src/gba/BreakpointStructures.h | 1 + .../visualboyadvance-m/src/gba/CheatSearch.h | 1 + .../visualboyadvance-m/src/gba/Cheats.h | 1 + .../visualboyadvance-m/src/gba/EEprom.h | 1 + .../visualboyadvance-m/src/gba/Flash.h | 1 + .../visualboyadvance-m/src/gba/GBA.h | 1 + .../visualboyadvance-m/src/gba/GBAGfx.h | 1 + .../visualboyadvance-m/src/gba/GBALink.h | 1 + .../src/gba/GBASockClient.h | 1 + .../visualboyadvance-m/src/gba/GBAcpu.h | 1 + .../visualboyadvance-m/src/gba/GBAinline.h | 1 + .../visualboyadvance-m/src/gba/Globals.h | 1 + .../visualboyadvance-m/src/gba/RTC.h | 1 + .../visualboyadvance-m/src/gba/Sound.h | 1 + .../visualboyadvance-m/src/gba/Sram.h | 1 + .../visualboyadvance-m/src/gba/agbprint.h | 1 + .../visualboyadvance-m/src/gba/armdis.h | 1 + .../visualboyadvance-m/src/gba/bios.h | 1 + .../visualboyadvance-m/src/gba/elf.h | 1 + .../visualboyadvance-m/src/gba/ereader.h | 1 + .../visualboyadvance-m/src/gba/gbafilter.h | 1 + .../visualboyadvance-m/src/gba/remote.h | 1 + .../visualboyadvance-m/src/sdl/debugger.h | 1 + .../visualboyadvance-m/src/sdl/expr.cpp.h | 1 + .../visualboyadvance-m/src/sdl/exprNode.h | 1 + .../visualboyadvance-m/src/sdl/filters.h | 1 + .../visualboyadvance-m/src/sdl/getopt.h | 1 + .../visualboyadvance-m/src/sdl/inputSDL.h | 1 + .../visualboyadvance-m/src/sdl/text.h | 1 + .../GBCDeltaCore/Bridge/GBCEmulatorBridge.h | 1 + .../GBCDeltaCore/Bridge/GBCInputGetter.h | 1 + .../GBCDeltaCore/GBCDeltaCore/GBCDeltaCore.h | 1 + .../GBCDeltaCore/Model/GBCCheat.h | 1 + .../GBCDeltaCore/Types/GBCTypes.h | 1 + .../gambatte/common/adaptivesleep.h | 1 + .../GBCDeltaCore/gambatte/common/array.h | 1 + .../gambatte/common/defined_ptr.h | 1 + .../GBCDeltaCore/gambatte/common/rateest.h | 1 + .../GBCDeltaCore/gambatte/common/ringbuffer.h | 1 + .../GBCDeltaCore/gambatte/common/scoped_ptr.h | 1 + .../GBCDeltaCore/gambatte/common/skipsched.h | 1 + .../gambatte/common/transfer_ptr.h | 1 + .../GBCDeltaCore/gambatte/common/uncopyable.h | 1 + .../GBCDeltaCore/gambatte/common/usec.h | 1 + .../gambatte/libgambatte/include/gambatte.h | 1 + .../gambatte/libgambatte/include/gbint.h | 1 + .../libgambatte/include/inputgetter.h | 1 + .../gambatte/libgambatte/include/loadres.h | 1 + .../gambatte/libgambatte/include/pakinfo.h | 1 + .../gambatte/libgambatte/src/bitmap_font.h | 1 + .../gambatte/libgambatte/src/counterdef.h | 1 + .../gambatte/libgambatte/src/cpu.h | 1 + .../gambatte/libgambatte/src/initstate.h | 1 + .../gambatte/libgambatte/src/insertion_sort.h | 1 + .../gambatte/libgambatte/src/interrupter.h | 1 + .../libgambatte/src/interruptrequester.h | 1 + .../gambatte/libgambatte/src/memory.h | 1 + .../gambatte/libgambatte/src/minkeeper.h | 1 + .../gambatte/libgambatte/src/osd_element.h | 1 + .../gambatte/libgambatte/src/savestate.h | 1 + .../gambatte/libgambatte/src/sound.h | 1 + .../libgambatte/src/state_osd_elements.h | 1 + .../gambatte/libgambatte/src/statesaver.h | 1 + .../gambatte/libgambatte/src/tima.h | 1 + .../gambatte/libgambatte/src/video.h | 1 + .../GTMSessionFetcher/GTMGatherInputStream.h | 1 + .../GTMSessionFetcher/GTMMIMEDocument.h | 1 + .../GTMReadMonitorInputStream.h | 1 + .../GTMSessionFetcher/GTMSessionFetcher.h | 1 + .../GTMSessionFetcherLogging.h | 1 + .../GTMSessionFetcherService.h | 1 + .../GTMSessionUploadFetcher.h | 1 + .../GoogleAPIClientForREST/GTLRBase64.h | 1 + .../GoogleAPIClientForREST/GTLRBatchQuery.h | 1 + .../GoogleAPIClientForREST/GTLRBatchResult.h | 1 + .../GoogleAPIClientForREST/GTLRDateTime.h | 1 + .../GoogleAPIClientForREST/GTLRDefines.h | 1 + .../GoogleAPIClientForREST/GTLRDrive.h | 1 + .../GoogleAPIClientForREST/GTLRDriveObjects.h | 1 + .../GoogleAPIClientForREST/GTLRDriveQuery.h | 1 + .../GoogleAPIClientForREST/GTLRDriveService.h | 1 + .../GoogleAPIClientForREST/GTLRDuration.h | 1 + .../GoogleAPIClientForREST/GTLRErrorObject.h | 1 + .../GoogleAPIClientForREST/GTLRFramework.h | 1 + .../GoogleAPIClientForREST/GTLRObject.h | 1 + .../GoogleAPIClientForREST/GTLRQuery.h | 1 + .../GTLRRuntimeCommon.h | 1 + .../GoogleAPIClientForREST/GTLRService.h | 1 + .../GoogleAPIClientForREST/GTLRURITemplate.h | 1 + .../GTLRUploadParameters.h | 1 + .../GoogleAPIClientForREST/GTLRUtilities.h | 1 + .../GTMDebugSelectorValidation.h | 1 + .../GTMDebugThreadValidation.h | 1 + .../Private/GoogleToolboxForMac/GTMDefines.h | 1 + .../GoogleToolboxForMac/GTMMethodCheck.h | 1 + .../GTMNSDictionary+URLArguments.h | 1 + .../GTMNSString+URLArguments.h | 1 + .../Headers/Private/Harmony/Harmony/Harmony.h | 1 + .../Mupen64Plus/GLideN64/src/3DMath.h | 1 + .../src/BufferCopy/ColorBufferToRDRAM.h | 1 + .../src/BufferCopy/ColorBufferToRDRAMStub.h | 1 + .../src/BufferCopy/DepthBufferToRDRAM.h | 1 + .../src/BufferCopy/RDRAMtoColorBuffer.h | 1 + .../GLideN64/src/BufferCopy/WriteToRDRAM.h | 1 + .../Mupen64Plus/GLideN64/src/CRC.h | 1 + .../Mupen64Plus/GLideN64/src/Combiner.h | 1 + .../Mupen64Plus/GLideN64/src/CombinerKey.h | 1 + .../Mupen64Plus/GLideN64/src/Config.h | 1 + .../Mupen64Plus/GLideN64/src/DebugDump.h | 1 + .../Mupen64Plus/GLideN64/src/Debugger.h | 1 + .../Mupen64Plus/GLideN64/src/DepthBuffer.h | 1 + .../src/DepthBufferRender/ClipPolygon.h | 1 + .../src/DepthBufferRender/DepthBufferRender.h | 1 + .../GLideN64/src/DisplayLoadProgress.h | 1 + .../Mupen64Plus/GLideN64/src/DisplayWindow.h | 1 + .../Mupen64Plus/GLideN64/src/FrameBuffer.h | 1 + .../GLideN64/src/FrameBufferInfo.h | 1 + .../GLideN64/src/FrameBufferInfoAPI.h | 1 + .../Mupen64Plus/GLideN64/src/GBI.h | 1 + .../Mupen64Plus/GLideN64/src/GLideN64.h | 1 + .../GLideN64/src/GLideNHQ/Ext_TxFilter.h | 1 + .../GLideN64/src/GLideNHQ/TextureFilters.h | 1 + .../src/GLideNHQ/TextureFilters_2xsai.h | 1 + .../src/GLideNHQ/TextureFilters_hq2x.h | 1 + .../src/GLideNHQ/TextureFilters_hq4x.h | 1 + .../src/GLideNHQ/TextureFilters_lq2x.h | 1 + .../src/GLideNHQ/TextureFilters_xbrz.h | 1 + .../GLideN64/src/GLideNHQ/TxCache.h | 1 + .../Mupen64Plus/GLideN64/src/GLideNHQ/TxDbg.h | 1 + .../GLideN64/src/GLideNHQ/TxFilter.h | 1 + .../GLideN64/src/GLideNHQ/TxHiResCache.h | 1 + .../GLideN64/src/GLideNHQ/TxImage.h | 1 + .../GLideN64/src/GLideNHQ/TxInternal.h | 1 + .../GLideN64/src/GLideNHQ/TxQuantize.h | 1 + .../GLideN64/src/GLideNHQ/TxReSample.h | 1 + .../GLideN64/src/GLideNHQ/TxTexCache.h | 1 + .../GLideN64/src/GLideNHQ/TxUtil.h | 1 + .../Mupen64Plus/GLideN64/src/GLideNHQ/bldno.h | 1 + .../GLideN64/src/GLideNHQ/inc/png.h | 1 + .../GLideN64/src/GLideNHQ/inc/pngconf.h | 1 + .../GLideN64/src/GLideNHQ/inc/pnglibconf.h | 1 + .../GLideN64/src/GLideNHQ/inc/pngstruct.h | 1 + .../GLideN64/src/GLideNHQ/inc/zconf.h | 1 + .../GLideN64/src/GLideNHQ/inc/zlib.h | 1 + .../src/GLideNHQ/txWidestringWrapper.h | 1 + .../GLideN64/src/GLideNUI/AboutDialog.h | 1 + .../GLideN64/src/GLideNUI/ConfigDialog.h | 1 + .../src/GLideNUI/FullscreenResolutions.h | 1 + .../GLideN64/src/GLideNUI/GLideNUI.h | 1 + .../GLideN64/src/GLideNUI/Settings.h | 1 + .../GLideN64/src/Graphics/ColorBufferReader.h | 1 + .../GLideN64/src/Graphics/CombinerProgram.h | 1 + .../GLideN64/src/Graphics/Context.h | 1 + .../GLideN64/src/Graphics/ContextImpl.h | 1 + .../src/Graphics/FramebufferTextureFormats.h | 1 + .../GLideN64/src/Graphics/ObjectHandle.h | 1 + .../src/Graphics/OpenGLContext/GLFunctions.h | 1 + .../OpenGLContext/GLSL/glsl_CombinerInputs.h | 1 + .../GLSL/glsl_CombinerProgramBuilder.h | 1 + .../GLSL/glsl_CombinerProgramImpl.h | 1 + .../GLSL/glsl_CombinerProgramUniformFactory.h | 1 + .../Graphics/OpenGLContext/GLSL/glsl_FXAA.h | 1 + .../OpenGLContext/GLSL/glsl_ShaderPart.h | 1 + .../OpenGLContext/GLSL/glsl_ShaderStorage.h | 1 + .../GLSL/glsl_SpecialShadersFactory.h | 1 + .../Graphics/OpenGLContext/GLSL/glsl_Utils.h | 1 + .../GraphicBuffer/GraphicBufferWrapper.h | 1 + .../GraphicBuffer/PrivateApi/GraphicBuffer.h | 1 + .../GraphicBuffer/PrivateApi/gralloc.h | 1 + .../GraphicBuffer/PrivateApi/libhardware.h | 1 + .../android_hardware_buffer_compat.h | 1 + .../GraphicBuffer/PublicApi/check.h | 1 + .../GraphicBuffer/PublicApi/dcheck.h | 1 + .../OpenGLContext/opengl_Attributes.h | 1 + .../opengl_BufferManipulationObjectFactory.h | 1 + .../OpenGLContext/opengl_BufferedDrawer.h | 1 + .../OpenGLContext/opengl_CachedFunctions.h | 1 + ...pengl_ColorBufferReaderWithBufferStorage.h | 1 + .../opengl_ColorBufferReaderWithEGLImage.h | 1 + .../opengl_ColorBufferReaderWithPixelBuffer.h | 1 + .../opengl_ColorBufferReaderWithReadPixels.h | 1 + .../OpenGLContext/opengl_ContextImpl.h | 1 + .../Graphics/OpenGLContext/opengl_GLInfo.h | 1 + .../OpenGLContext/opengl_GraphicsDrawer.h | 1 + .../opengl_TextureManipulationObjectFactory.h | 1 + .../OpenGLContext/opengl_UnbufferedDrawer.h | 1 + .../src/Graphics/OpenGLContext/opengl_Utils.h | 1 + .../GLideN64/src/Graphics/Parameter.h | 1 + .../GLideN64/src/Graphics/Parameters.h | 1 + .../GLideN64/src/Graphics/PixelBuffer.h | 1 + .../GLideN64/src/Graphics/ShaderProgram.h | 1 + .../Mupen64Plus/GLideN64/src/GraphicsDrawer.h | 1 + .../Mupen64Plus/GLideN64/src/Keys.h | 1 + .../Mupen64Plus/GLideN64/src/Log.h | 1 + .../Mupen64Plus/GLideN64/src/MemoryStatus.h | 1 + .../Mupen64Plus/GLideN64/src/N64.h | 1 + .../Mupen64Plus/GLideN64/src/NoiseTexture.h | 1 + .../Mupen64Plus/GLideN64/src/PaletteTexture.h | 1 + .../Mupen64Plus/GLideN64/src/Performance.h | 1 + .../Mupen64Plus/GLideN64/src/Platform.h | 1 + .../Mupen64Plus/GLideN64/src/PluginAPI.h | 1 + .../Mupen64Plus/GLideN64/src/PostProcessor.h | 1 + .../Mupen64Plus/GLideN64/src/RDP.h | 1 + .../Mupen64Plus/GLideN64/src/RSP.h | 1 + .../Mupen64Plus/GLideN64/src/Revision.h | 1 + .../Mupen64Plus/GLideN64/src/SoftwareRender.h | 1 + .../Mupen64Plus/GLideN64/src/TexrectDrawer.h | 1 + .../Mupen64Plus/GLideN64/src/TextDrawer.h | 1 + .../GLideN64/src/TextureFilterHandler.h | 1 + .../Mupen64Plus/GLideN64/src/Textures.h | 1 + .../Mupen64Plus/GLideN64/src/Types.h | 1 + .../Mupen64Plus/GLideN64/src/VI.h | 1 + .../Mupen64Plus/GLideN64/src/ZilmarGFX_1_3.h | 1 + .../Mupen64Plus/GLideN64/src/ZlutTexture.h | 1 + .../Mupen64Plus/GLideN64/src/convert.h | 1 + .../Mupen64Plus/GLideN64/src/gDP.h | 1 + .../Mupen64Plus/GLideN64/src/gSP.h | 1 + .../GLideN64/src/inc/GL/glcorearb.h | 1 + .../Mupen64Plus/GLideN64/src/inc/GL/glext.h | 1 + .../Mupen64Plus/GLideN64/src/inc/GL/glxext.h | 1 + .../Mupen64Plus/GLideN64/src/inc/GL/wglext.h | 1 + .../Mupen64Plus/GLideN64/src/inc/callbacks.h | 1 + .../Mupen64Plus/GLideN64/src/inc/debugger.h | 1 + .../inc/freetype/include/config/ftconfig.h | 1 + .../inc/freetype/include/config/ftheader.h | 1 + .../inc/freetype/include/config/ftmodule.h | 1 + .../inc/freetype/include/config/ftoption.h | 1 + .../inc/freetype/include/config/ftstdlib.h | 1 + .../src/inc/freetype/include/freetype.h | 1 + .../src/inc/freetype/include/ft2build.h | 1 + .../src/inc/freetype/include/ftadvanc.h | 1 + .../src/inc/freetype/include/ftautoh.h | 1 + .../src/inc/freetype/include/ftbbox.h | 1 + .../GLideN64/src/inc/freetype/include/ftbdf.h | 1 + .../src/inc/freetype/include/ftbitmap.h | 1 + .../src/inc/freetype/include/ftbzip2.h | 1 + .../src/inc/freetype/include/ftcache.h | 1 + .../src/inc/freetype/include/ftcffdrv.h | 1 + .../src/inc/freetype/include/ftchapters.h | 1 + .../GLideN64/src/inc/freetype/include/ftcid.h | 1 + .../src/inc/freetype/include/fterrdef.h | 1 + .../src/inc/freetype/include/fterrors.h | 1 + .../src/inc/freetype/include/ftgasp.h | 1 + .../src/inc/freetype/include/ftglyph.h | 1 + .../src/inc/freetype/include/ftgxval.h | 1 + .../src/inc/freetype/include/ftgzip.h | 1 + .../src/inc/freetype/include/ftimage.h | 1 + .../src/inc/freetype/include/ftincrem.h | 1 + .../src/inc/freetype/include/ftlcdfil.h | 1 + .../src/inc/freetype/include/ftlist.h | 1 + .../GLideN64/src/inc/freetype/include/ftlzw.h | 1 + .../GLideN64/src/inc/freetype/include/ftmac.h | 1 + .../GLideN64/src/inc/freetype/include/ftmm.h | 1 + .../src/inc/freetype/include/ftmodapi.h | 1 + .../src/inc/freetype/include/ftmoderr.h | 1 + .../src/inc/freetype/include/ftotval.h | 1 + .../src/inc/freetype/include/ftoutln.h | 1 + .../GLideN64/src/inc/freetype/include/ftpfr.h | 1 + .../src/inc/freetype/include/ftrender.h | 1 + .../src/inc/freetype/include/ftsizes.h | 1 + .../src/inc/freetype/include/ftsnames.h | 1 + .../src/inc/freetype/include/ftstroke.h | 1 + .../src/inc/freetype/include/ftsynth.h | 1 + .../src/inc/freetype/include/ftsystem.h | 1 + .../src/inc/freetype/include/fttrigon.h | 1 + .../src/inc/freetype/include/ftttdrv.h | 1 + .../src/inc/freetype/include/fttypes.h | 1 + .../src/inc/freetype/include/ftwinfnt.h | 1 + .../src/inc/freetype/include/ftxf86.h | 1 + .../inc/freetype/include/internal/autohint.h | 1 + .../inc/freetype/include/internal/ftcalc.h | 1 + .../inc/freetype/include/internal/ftdebug.h | 1 + .../inc/freetype/include/internal/ftdriver.h | 1 + .../inc/freetype/include/internal/ftgloadr.h | 1 + .../inc/freetype/include/internal/ftmemory.h | 1 + .../inc/freetype/include/internal/ftobjs.h | 1 + .../src/inc/freetype/include/internal/ftpic.h | 1 + .../inc/freetype/include/internal/ftrfork.h | 1 + .../inc/freetype/include/internal/ftserv.h | 1 + .../inc/freetype/include/internal/ftstream.h | 1 + .../inc/freetype/include/internal/fttrace.h | 1 + .../inc/freetype/include/internal/ftvalid.h | 1 + .../inc/freetype/include/internal/internal.h | 1 + .../src/inc/freetype/include/internal/psaux.h | 1 + .../inc/freetype/include/internal/pshints.h | 1 + .../include/internal/services/svbdf.h | 1 + .../include/internal/services/svcid.h | 1 + .../include/internal/services/svgldict.h | 1 + .../include/internal/services/svgxval.h | 1 + .../include/internal/services/svkern.h | 1 + .../freetype/include/internal/services/svmm.h | 1 + .../include/internal/services/svotval.h | 1 + .../include/internal/services/svpfr.h | 1 + .../include/internal/services/svpostnm.h | 1 + .../include/internal/services/svprop.h | 1 + .../include/internal/services/svpscmap.h | 1 + .../include/internal/services/svpsinfo.h | 1 + .../include/internal/services/svsfnt.h | 1 + .../include/internal/services/svttcmap.h | 1 + .../include/internal/services/svtteng.h | 1 + .../include/internal/services/svttglyf.h | 1 + .../include/internal/services/svwinfnt.h | 1 + .../include/internal/services/svxf86nm.h | 1 + .../src/inc/freetype/include/internal/sfnt.h | 1 + .../inc/freetype/include/internal/t1types.h | 1 + .../inc/freetype/include/internal/tttypes.h | 1 + .../src/inc/freetype/include/t1tables.h | 1 + .../src/inc/freetype/include/ttnameid.h | 1 + .../src/inc/freetype/include/tttables.h | 1 + .../src/inc/freetype/include/tttags.h | 1 + .../src/inc/freetype/include/ttunpat.h | 1 + .../GLideN64/src/inc/m64p_common.h | 1 + .../GLideN64/src/inc/m64p_config.h | 1 + .../GLideN64/src/inc/m64p_debugger.h | 1 + .../GLideN64/src/inc/m64p_frontend.h | 1 + .../GLideN64/src/inc/m64p_plugin.h | 1 + .../Mupen64Plus/GLideN64/src/inc/m64p_types.h | 1 + .../GLideN64/src/inc/m64p_vidext.h | 1 + .../src/mupenplus/GLideN64_mupenplus.h | 1 + .../GLideN64/src/osal/osal_files.h | 1 + .../Mupen64Plus/GLideN64/src/sdl2_compat.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3D.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DAM.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DBETA.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DDKR.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DEX.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DEX2.h | 1 + .../GLideN64/src/uCodes/F3DEX2ACCLAIM.h | 1 + .../GLideN64/src/uCodes/F3DEX2CBFD.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DFLX2.h | 1 + .../GLideN64/src/uCodes/F3DGOLDEN.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DPD.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DSETA.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DTEXA.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F3DZEX2.h | 1 + .../GLideN64/src/uCodes/F5Indi_Naboo.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/F5Rogue.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/L3D.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/L3DEX.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/L3DEX2.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/S2DEX.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/S2DEX2.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/T3DUX.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/Turbo3D.h | 1 + .../Mupen64Plus/GLideN64/src/uCodes/ZSort.h | 1 + .../GLideN64/src/uCodes/ZSortBOSS.h | 1 + .../Mupen64Plus/GLideN64/src/winlnxdefs.h | 1 + .../Mupen64Plus/GLideN64/src/wst.h | 1 + .../Mupen64Plus/GLideN64/src/xxHash/xxhash.h | 1 + .../libpng/contrib/gregbook/readpng.h | 1 + .../libpng/contrib/gregbook/readpng2.h | 1 + .../libpng/contrib/gregbook/writepng.h | 1 + .../libpng/contrib/libtests/pngstest-errors.h | 1 + .../libpng/contrib/pngminim/decoder/pngusr.h | 1 + .../libpng/contrib/pngminim/encoder/pngusr.h | 1 + .../libpng/contrib/pngminim/preader/pngusr.h | 1 + .../Mupen64Plus/libpng/contrib/tools/sRGB.h | 1 + .../libpng/contrib/visupng/PngFile.h | 1 + .../libpng/contrib/visupng/cexcept.h | 1 + .../libpng/contrib/visupng/resource.h | 1 + .../N64DeltaCore/Mupen64Plus/libpng/png.h | 1 + .../N64DeltaCore/Mupen64Plus/libpng/pngconf.h | 1 + .../Mupen64Plus/libpng/pngdebug.h | 1 + .../N64DeltaCore/Mupen64Plus/libpng/pnginfo.h | 1 + .../N64DeltaCore/Mupen64Plus/libpng/pngpriv.h | 1 + .../Mupen64Plus/libpng/pngstruct.h | 1 + .../mupen64plus-core/src/api/callbacks.h | 1 + .../mupen64plus-core/src/api/debugger.h | 1 + .../mupen64plus-core/src/api/m64p_common.h | 1 + .../mupen64plus-core/src/api/m64p_config.h | 1 + .../mupen64plus-core/src/api/m64p_debugger.h | 1 + .../mupen64plus-core/src/api/m64p_frontend.h | 1 + .../mupen64plus-core/src/api/m64p_plugin.h | 1 + .../mupen64plus-core/src/api/m64p_types.h | 1 + .../mupen64plus-core/src/api/m64p_vidext.h | 1 + .../mupen64plus-core/src/api/vidext.h | 1 + .../src/api/vidext_sdl2_compat.h | 1 + .../src/backends/api/audio_out_backend.h | 1 + .../src/backends/api/clock_backend.h | 1 + .../backends/api/controller_input_backend.h | 1 + .../src/backends/api/joybus.h | 1 + .../src/backends/api/rumble_backend.h | 1 + .../src/backends/api/storage_backend.h | 1 + .../src/backends/api/video_capture_backend.h | 1 + .../src/backends/clock_ctime_plus_delta.h | 1 + .../src/backends/file_storage.h | 1 + .../backends/plugins_compat/plugins_compat.h | 1 + .../mupen64plus-core/src/device/cart/af_rtc.h | 1 + .../mupen64plus-core/src/device/cart/cart.h | 1 + .../src/device/cart/cart_rom.h | 1 + .../mupen64plus-core/src/device/cart/eeprom.h | 1 + .../src/device/cart/flashram.h | 1 + .../mupen64plus-core/src/device/cart/sram.h | 1 + .../src/device/controllers/game_controller.h | 1 + .../src/device/controllers/paks/biopak.h | 1 + .../src/device/controllers/paks/mempak.h | 1 + .../src/device/controllers/paks/rumblepak.h | 1 + .../src/device/controllers/paks/transferpak.h | 1 + .../src/device/dd/dd_controller.h | 1 + .../mupen64plus-core/src/device/device.h | 1 + .../mupen64plus-core/src/device/gb/gb_cart.h | 1 + .../mupen64plus-core/src/device/gb/m64282fp.h | 1 + .../mupen64plus-core/src/device/gb/mbc3_rtc.h | 1 + .../src/device/memory/memory.h | 1 + .../src/device/pif/bootrom_hle.h | 1 + .../mupen64plus-core/src/device/pif/cic.h | 1 + .../src/device/pif/n64_cic_nus_6105.h | 1 + .../mupen64plus-core/src/device/pif/pif.h | 1 + .../src/device/r4300/cached_interp.h | 1 + .../mupen64plus-core/src/device/r4300/cp0.h | 1 + .../mupen64plus-core/src/device/r4300/cp1.h | 1 + .../mupen64plus-core/src/device/r4300/fpu.h | 1 + .../mupen64plus-core/src/device/r4300/idec.h | 1 + .../src/device/r4300/instr_counters.h | 1 + .../src/device/r4300/interrupt.h | 1 + .../r4300/new_dynarec/arm/arm_cpu_features.h | 1 + .../device/r4300/new_dynarec/arm/assem_arm.h | 1 + .../r4300/new_dynarec/arm64/assem_arm64.h | 1 + .../device/r4300/new_dynarec/new_dynarec.h | 1 + .../device/r4300/new_dynarec/x64/assem_x64.h | 1 + .../device/r4300/new_dynarec/x86/assem_x86.h | 1 + .../src/device/r4300/pure_interp.h | 1 + .../src/device/r4300/r4300_core.h | 1 + .../src/device/r4300/recomp.h | 1 + .../src/device/r4300/recomp_types.h | 1 + .../mupen64plus-core/src/device/r4300/tlb.h | 1 + .../src/device/r4300/x86/assemble.h | 1 + .../src/device/r4300/x86/assemble_struct.h | 1 + .../src/device/r4300/x86/interpret.h | 1 + .../src/device/r4300/x86/regcache.h | 1 + .../src/device/r4300/x86_64/assemble.h | 1 + .../src/device/r4300/x86_64/assemble_struct.h | 1 + .../src/device/r4300/x86_64/interpret.h | 1 + .../src/device/r4300/x86_64/regcache.h | 1 + .../src/device/rcp/ai/ai_controller.h | 1 + .../src/device/rcp/mi/mi_controller.h | 1 + .../src/device/rcp/pi/pi_controller.h | 1 + .../mupen64plus-core/src/device/rcp/rdp/fb.h | 1 + .../src/device/rcp/rdp/rdp_core.h | 1 + .../src/device/rcp/ri/ri_controller.h | 1 + .../src/device/rcp/rsp/rsp_core.h | 1 + .../src/device/rcp/si/si_controller.h | 1 + .../src/device/rcp/vi/vi_controller.h | 1 + .../mupen64plus-core/src/device/rdram/rdram.h | 1 + .../mupen64plus-core/src/main/cheat.h | 1 + .../mupen64plus-core/src/main/eventloop.h | 1 + .../mupen64plus-core/src/main/lirc.h | 1 + .../mupen64plus-core/src/main/list.h | 1 + .../mupen64plus-core/src/main/main.h | 1 + .../mupen64plus-core/src/main/profile.h | 1 + .../mupen64plus-core/src/main/rom.h | 1 + .../mupen64plus-core/src/main/savestates.h | 1 + .../mupen64plus-core/src/main/screenshot.h | 1 + .../src/main/sdl_key_converter.h | 1 + .../mupen64plus-core/src/main/util.h | 1 + .../mupen64plus-core/src/main/version.h | 1 + .../mupen64plus-core/src/main/workqueue.h | 1 + .../mupen64plus-core/src/osal/dynamiclib.h | 1 + .../mupen64plus-core/src/osal/files.h | 1 + .../mupen64plus-core/src/osal/preproc.h | 1 + .../mupen64plus-core/src/osd/oglft_c.h | 1 + .../mupen64plus-core/src/osd/osd.h | 1 + .../mupen64plus-core/src/plugin/dummy_audio.h | 1 + .../mupen64plus-core/src/plugin/dummy_input.h | 1 + .../mupen64plus-core/src/plugin/dummy_rsp.h | 1 + .../mupen64plus-core/src/plugin/dummy_video.h | 1 + .../mupen64plus-core/src/plugin/plugin.h | 1 + .../mupen64plus-core/subprojects/md5/md5.h | 1 + .../subprojects/minizip/crypt.h | 1 + .../subprojects/minizip/ioapi.h | 1 + .../subprojects/minizip/unzip.h | 1 + .../subprojects/minizip/zip.h | 1 + .../subprojects/oglft/OGLFT.h | 1 + .../subprojects/xxhash/xxhash.h | 1 + .../N64DeltaCore/Bridge/N64EmulatorBridge.h | 1 + .../N64DeltaCore/N64DeltaCore/N64DeltaCore.h | 1 + .../N64DeltaCore/Types/N64Types.h | 1 + .../N64DeltaCore/libMupen64Plus/SDL/SDL.h | 1 + .../libMupen64Plus/SDL/SDL_config.h | 1 + .../libMupen64Plus/SDL/SDL_opengl.h | 1 + .../libMupen64Plus/SDL/SDL_opengles2.h | 1 + .../libMupen64Plus/SDL/SDL_thread.h | 1 + .../mupen64plus-rsp-hle/src/alist.h | 1 + .../mupen64plus-rsp-hle/src/arithmetics.h | 1 + .../mupen64plus-rsp-hle/src/audio.h | 1 + .../mupen64plus-rsp-hle/src/common.h | 1 + .../mupen64plus-rsp-hle/src/hle.h | 1 + .../mupen64plus-rsp-hle/src/hle_external.h | 1 + .../mupen64plus-rsp-hle/src/hle_internal.h | 1 + .../mupen64plus-rsp-hle/src/osal_dynamiclib.h | 1 + .../mupen64plus-rsp-hle/src/ucodes.h | 1 + .../NESDeltaCore/NESDeltaCore/NESDeltaCore.h | 1 + .../nestopia/source/core/NstApu.hpp | 1 + .../nestopia/source/core/NstAssert.hpp | 1 + .../nestopia/source/core/NstBarcodeReader.hpp | 1 + .../nestopia/source/core/NstBase.hpp | 1 + .../nestopia/source/core/NstCartridge.hpp | 1 + .../nestopia/source/core/NstCartridgeInes.hpp | 1 + .../source/core/NstCartridgeRomset.hpp | 1 + .../nestopia/source/core/NstCartridgeUnif.hpp | 1 + .../nestopia/source/core/NstCheats.hpp | 1 + .../nestopia/source/core/NstChecksum.hpp | 1 + .../nestopia/source/core/NstChips.hpp | 1 + .../nestopia/source/core/NstCore.hpp | 1 + .../nestopia/source/core/NstCpu.hpp | 1 + .../nestopia/source/core/NstCrc32.hpp | 1 + .../nestopia/source/core/NstDipSwitches.hpp | 1 + .../nestopia/source/core/NstFds.hpp | 1 + .../nestopia/source/core/NstFile.hpp | 1 + .../nestopia/source/core/NstFpuPrecision.hpp | 1 + .../nestopia/source/core/NstHook.hpp | 1 + .../nestopia/source/core/NstImage.hpp | 1 + .../nestopia/source/core/NstImageDatabase.hpp | 1 + .../nestopia/source/core/NstIoAccessor.hpp | 1 + .../nestopia/source/core/NstIoLine.hpp | 1 + .../nestopia/source/core/NstIoMap.hpp | 1 + .../nestopia/source/core/NstIoPort.hpp | 1 + .../nestopia/source/core/NstLog.hpp | 1 + .../nestopia/source/core/NstMachine.hpp | 1 + .../nestopia/source/core/NstMemory.hpp | 1 + .../nestopia/source/core/NstNsf.hpp | 1 + .../nestopia/source/core/NstPatcher.hpp | 1 + .../nestopia/source/core/NstPatcherIps.hpp | 1 + .../nestopia/source/core/NstPatcherUps.hpp | 1 + .../nestopia/source/core/NstPins.hpp | 1 + .../nestopia/source/core/NstPpu.hpp | 1 + .../nestopia/source/core/NstProperties.hpp | 1 + .../nestopia/source/core/NstRam.hpp | 1 + .../nestopia/source/core/NstSha1.hpp | 1 + .../nestopia/source/core/NstSoundPcm.hpp | 1 + .../nestopia/source/core/NstSoundPlayer.hpp | 1 + .../nestopia/source/core/NstSoundRenderer.hpp | 1 + .../nestopia/source/core/NstState.hpp | 1 + .../nestopia/source/core/NstStream.hpp | 1 + .../nestopia/source/core/NstTimer.hpp | 1 + .../nestopia/source/core/NstTracker.hpp | 1 + .../nestopia/source/core/NstTrackerMovie.hpp | 1 + .../source/core/NstTrackerRewinder.hpp | 1 + .../nestopia/source/core/NstVector.hpp | 1 + .../source/core/NstVideoFilter2xSaI.hpp | 1 + .../source/core/NstVideoFilterHqX.hpp | 1 + .../source/core/NstVideoFilterNone.hpp | 1 + .../source/core/NstVideoFilterNtsc.hpp | 1 + .../source/core/NstVideoFilterScaleX.hpp | 1 + .../source/core/NstVideoFilterxBR.hpp | 1 + .../nestopia/source/core/NstVideoRenderer.hpp | 1 + .../nestopia/source/core/NstVideoScreen.hpp | 1 + .../nestopia/source/core/NstXml.hpp | 1 + .../nestopia/source/core/NstZlib.hpp | 1 + .../nestopia/source/core/api/NstApi.hpp | 1 + .../source/core/api/NstApiBarcodeReader.hpp | 1 + .../source/core/api/NstApiCartridge.hpp | 1 + .../nestopia/source/core/api/NstApiCheats.hpp | 1 + .../nestopia/source/core/api/NstApiConfig.hpp | 1 + .../source/core/api/NstApiDipSwitches.hpp | 1 + .../source/core/api/NstApiEmulator.hpp | 1 + .../nestopia/source/core/api/NstApiFds.hpp | 1 + .../nestopia/source/core/api/NstApiInput.hpp | 1 + .../source/core/api/NstApiMachine.hpp | 1 + .../nestopia/source/core/api/NstApiMovie.hpp | 1 + .../nestopia/source/core/api/NstApiNsf.hpp | 1 + .../source/core/api/NstApiRewinder.hpp | 1 + .../nestopia/source/core/api/NstApiSound.hpp | 1 + .../source/core/api/NstApiTapeRecorder.hpp | 1 + .../nestopia/source/core/api/NstApiUser.hpp | 1 + .../nestopia/source/core/api/NstApiVideo.hpp | 1 + .../nestopia/source/core/board/NstBoard.hpp | 1 + .../source/core/board/NstBoardAcclaim.hpp | 1 + .../core/board/NstBoardAcclaimMcAcc.hpp | 1 + .../nestopia/source/core/board/NstBoardAe.hpp | 1 + .../source/core/board/NstBoardAgci.hpp | 1 + .../source/core/board/NstBoardAve.hpp | 1 + .../source/core/board/NstBoardAveD1012.hpp | 1 + .../source/core/board/NstBoardAveNina.hpp | 1 + .../source/core/board/NstBoardAxRom.hpp | 1 + .../source/core/board/NstBoardBandai.hpp | 1 + .../source/core/board/NstBoardBandai24c0x.hpp | 1 + .../board/NstBoardBandaiAerobicsStudio.hpp | 1 + .../core/board/NstBoardBandaiDatach.hpp | 1 + .../board/NstBoardBandaiKaraokeStudio.hpp | 1 + .../core/board/NstBoardBandaiLz93d50.hpp | 1 + .../core/board/NstBoardBandaiLz93d50ex.hpp | 1 + .../core/board/NstBoardBandaiOekaKids.hpp | 1 + .../source/core/board/NstBoardBenshengBs5.hpp | 1 + .../source/core/board/NstBoardBmc110in1.hpp | 1 + .../source/core/board/NstBoardBmc1200in1.hpp | 1 + .../source/core/board/NstBoardBmc150in1.hpp | 1 + .../source/core/board/NstBoardBmc15in1.hpp | 1 + .../source/core/board/NstBoardBmc20in1.hpp | 1 + .../source/core/board/NstBoardBmc21in1.hpp | 1 + .../source/core/board/NstBoardBmc22Games.hpp | 1 + .../source/core/board/NstBoardBmc31in1.hpp | 1 + .../source/core/board/NstBoardBmc35in1.hpp | 1 + .../source/core/board/NstBoardBmc36in1.hpp | 1 + .../source/core/board/NstBoardBmc64in1.hpp | 1 + .../source/core/board/NstBoardBmc72in1.hpp | 1 + .../source/core/board/NstBoardBmc76in1.hpp | 1 + .../source/core/board/NstBoardBmc800in1.hpp | 1 + .../source/core/board/NstBoardBmc8157.hpp | 1 + .../core/board/NstBoardBmc9999999in1.hpp | 1 + .../source/core/board/NstBoardBmcA65as.hpp | 1 + .../core/board/NstBoardBmcBallgames11in1.hpp | 1 + .../source/core/board/NstBoardBmcCh001.hpp | 1 + .../source/core/board/NstBoardBmcCtc65.hpp | 1 + .../core/board/NstBoardBmcFamily4646B.hpp | 1 + .../source/core/board/NstBoardBmcFk23c.hpp | 1 + .../core/board/NstBoardBmcGamestarA.hpp | 1 + .../core/board/NstBoardBmcGamestarB.hpp | 1 + .../core/board/NstBoardBmcGolden190in1.hpp | 1 + .../core/board/NstBoardBmcGoldenCard6in1.hpp | 1 + .../board/NstBoardBmcGoldenGame260in1.hpp | 1 + .../source/core/board/NstBoardBmcHero.hpp | 1 + .../core/board/NstBoardBmcMarioParty7in1.hpp | 1 + .../core/board/NstBoardBmcNovelDiamond.hpp | 1 + .../core/board/NstBoardBmcPowerjoy84in1.hpp | 1 + .../core/board/NstBoardBmcResetBased4in1.hpp | 1 + .../core/board/NstBoardBmcSuper22Games.hpp | 1 + .../core/board/NstBoardBmcSuper24in1.hpp | 1 + .../core/board/NstBoardBmcSuper40in1.hpp | 1 + .../core/board/NstBoardBmcSuper700in1.hpp | 1 + .../core/board/NstBoardBmcSuperBig7in1.hpp | 1 + .../core/board/NstBoardBmcSuperGun20in1.hpp | 1 + .../core/board/NstBoardBmcSuperHiK300in1.hpp | 1 + .../core/board/NstBoardBmcSuperHiK4in1.hpp | 1 + .../board/NstBoardBmcSuperVision16in1.hpp | 1 + .../source/core/board/NstBoardBmcT262.hpp | 1 + .../source/core/board/NstBoardBmcVrc4.hpp | 1 + .../source/core/board/NstBoardBmcVt5201.hpp | 1 + .../source/core/board/NstBoardBmcY2k64in1.hpp | 1 + .../source/core/board/NstBoardBtl2708.hpp | 1 + .../source/core/board/NstBoardBtl6035052.hpp | 1 + .../source/core/board/NstBoardBtlAx5705.hpp | 1 + .../core/board/NstBoardBtlDragonNinja.hpp | 1 + .../core/board/NstBoardBtlGeniusMerioBros.hpp | 1 + .../core/board/NstBoardBtlMarioBaby.hpp | 1 + .../core/board/NstBoardBtlPikachuY2k.hpp | 1 + .../core/board/NstBoardBtlShuiGuanPipe.hpp | 1 + .../source/core/board/NstBoardBtlSmb2a.hpp | 1 + .../source/core/board/NstBoardBtlSmb2b.hpp | 1 + .../source/core/board/NstBoardBtlSmb2c.hpp | 1 + .../source/core/board/NstBoardBtlSmb3.hpp | 1 + .../core/board/NstBoardBtlSuperBros11.hpp | 1 + .../source/core/board/NstBoardBtlT230.hpp | 1 + .../board/NstBoardBtlTobidaseDaisakusen.hpp | 1 + .../source/core/board/NstBoardBxRom.hpp | 1 + .../source/core/board/NstBoardCaltron.hpp | 1 + .../source/core/board/NstBoardCamerica.hpp | 1 + .../source/core/board/NstBoardCne.hpp | 1 + .../core/board/NstBoardCneDecathlon.hpp | 1 + .../source/core/board/NstBoardCnePsb.hpp | 1 + .../source/core/board/NstBoardCneShlz.hpp | 1 + .../source/core/board/NstBoardCony.hpp | 1 + .../source/core/board/NstBoardCxRom.hpp | 1 + .../source/core/board/NstBoardDiscrete.hpp | 1 + .../source/core/board/NstBoardDreamtech.hpp | 1 + .../source/core/board/NstBoardDxRom.hpp | 1 + .../source/core/board/NstBoardEvent.hpp | 1 + .../source/core/board/NstBoardExRom.hpp | 1 + .../nestopia/source/core/board/NstBoardFb.hpp | 1 + .../source/core/board/NstBoardFfe.hpp | 1 + .../source/core/board/NstBoardFujiya.hpp | 1 + .../source/core/board/NstBoardFukutake.hpp | 1 + .../source/core/board/NstBoardFutureMedia.hpp | 1 + .../source/core/board/NstBoardFxRom.hpp | 1 + .../source/core/board/NstBoardGouder.hpp | 1 + .../source/core/board/NstBoardGxRom.hpp | 1 + .../core/board/NstBoardHenggedianzi.hpp | 1 + .../source/core/board/NstBoardHes.hpp | 1 + .../source/core/board/NstBoardHosenkan.hpp | 1 + .../source/core/board/NstBoardHxRom.hpp | 1 + .../source/core/board/NstBoardIrem.hpp | 1 + .../source/core/board/NstBoardIremG101.hpp | 1 + .../source/core/board/NstBoardIremH3001.hpp | 1 + .../core/board/NstBoardIremHolyDiver.hpp | 1 + .../core/board/NstBoardIremKaiketsu.hpp | 1 + .../source/core/board/NstBoardIremLrog017.hpp | 1 + .../source/core/board/NstBoardJaleco.hpp | 1 + .../source/core/board/NstBoardJalecoJf11.hpp | 1 + .../source/core/board/NstBoardJalecoJf13.hpp | 1 + .../source/core/board/NstBoardJalecoJf16.hpp | 1 + .../source/core/board/NstBoardJalecoJf17.hpp | 1 + .../source/core/board/NstBoardJalecoJf19.hpp | 1 + .../core/board/NstBoardJalecoSs88006.hpp | 1 + .../source/core/board/NstBoardJxRom.hpp | 1 + .../source/core/board/NstBoardJyCompany.hpp | 1 + .../source/core/board/NstBoardKaiser.hpp | 1 + .../source/core/board/NstBoardKasing.hpp | 1 + .../source/core/board/NstBoardKay.hpp | 1 + .../source/core/board/NstBoardKayH2288.hpp | 1 + .../core/board/NstBoardKayPandaPrince.hpp | 1 + .../source/core/board/NstBoardKonami.hpp | 1 + .../source/core/board/NstBoardKonamiVrc1.hpp | 1 + .../source/core/board/NstBoardKonamiVrc2.hpp | 1 + .../source/core/board/NstBoardKonamiVrc3.hpp | 1 + .../source/core/board/NstBoardKonamiVrc4.hpp | 1 + .../source/core/board/NstBoardKonamiVrc6.hpp | 1 + .../source/core/board/NstBoardKonamiVrc7.hpp | 1 + .../core/board/NstBoardKonamiVsSystem.hpp | 1 + .../source/core/board/NstBoardMagicSeries.hpp | 1 + .../source/core/board/NstBoardMmc1.hpp | 1 + .../source/core/board/NstBoardMmc2.hpp | 1 + .../source/core/board/NstBoardMmc3.hpp | 1 + .../source/core/board/NstBoardMmc4.hpp | 1 + .../source/core/board/NstBoardMmc5.hpp | 1 + .../source/core/board/NstBoardMmc6.hpp | 1 + .../source/core/board/NstBoardMxRom.hpp | 1 + .../source/core/board/NstBoardNRom.hpp | 1 + .../source/core/board/NstBoardNamcot.hpp | 1 + .../source/core/board/NstBoardNamcot163.hpp | 1 + .../source/core/board/NstBoardNamcot175.hpp | 1 + .../source/core/board/NstBoardNamcot34xx.hpp | 1 + .../source/core/board/NstBoardNanjing.hpp | 1 + .../source/core/board/NstBoardNihon.hpp | 1 + .../source/core/board/NstBoardNitra.hpp | 1 + .../source/core/board/NstBoardNtdec.hpp | 1 + .../source/core/board/NstBoardNxRom.hpp | 1 + .../source/core/board/NstBoardOpenCorp.hpp | 1 + .../source/core/board/NstBoardPxRom.hpp | 1 + .../nestopia/source/core/board/NstBoardQj.hpp | 1 + .../source/core/board/NstBoardRcm.hpp | 1 + .../source/core/board/NstBoardRexSoft.hpp | 1 + .../source/core/board/NstBoardRexSoftDb5z.hpp | 1 + .../core/board/NstBoardRexSoftSl1632.hpp | 1 + .../core/board/NstBoardRumbleStation.hpp | 1 + .../source/core/board/NstBoardSachen.hpp | 1 + .../core/board/NstBoardSachen74x374.hpp | 1 + .../source/core/board/NstBoardSachenS8259.hpp | 1 + .../core/board/NstBoardSachenSa0036.hpp | 1 + .../core/board/NstBoardSachenSa0037.hpp | 1 + .../core/board/NstBoardSachenSa72007.hpp | 1 + .../core/board/NstBoardSachenSa72008.hpp | 1 + .../core/board/NstBoardSachenStreetHeroes.hpp | 1 + .../source/core/board/NstBoardSachenTca01.hpp | 1 + .../source/core/board/NstBoardSachenTcu.hpp | 1 + .../source/core/board/NstBoardSomeriTeam.hpp | 1 + .../core/board/NstBoardSomeriTeamSl12.hpp | 1 + .../source/core/board/NstBoardSubor.hpp | 1 + .../source/core/board/NstBoardSunsoft.hpp | 1 + .../source/core/board/NstBoardSunsoft1.hpp | 1 + .../source/core/board/NstBoardSunsoft2.hpp | 1 + .../source/core/board/NstBoardSunsoft3.hpp | 1 + .../source/core/board/NstBoardSunsoft4.hpp | 1 + .../source/core/board/NstBoardSunsoft5b.hpp | 1 + .../source/core/board/NstBoardSunsoftDcs.hpp | 1 + .../source/core/board/NstBoardSunsoftFme7.hpp | 1 + .../source/core/board/NstBoardSuperGame.hpp | 1 + .../core/board/NstBoardSuperGameBoogerman.hpp | 1 + .../core/board/NstBoardSuperGameLionKing.hpp | 1 + .../board/NstBoardSuperGamePocahontas2.hpp | 1 + .../source/core/board/NstBoardSxRom.hpp | 1 + .../source/core/board/NstBoardTaito.hpp | 1 + .../core/board/NstBoardTaitoTc0190fmc.hpp | 1 + .../board/NstBoardTaitoTc0190fmcPal16r4.hpp | 1 + .../source/core/board/NstBoardTaitoX1005.hpp | 1 + .../source/core/board/NstBoardTaitoX1017.hpp | 1 + .../source/core/board/NstBoardTengen.hpp | 1 + .../core/board/NstBoardTengenRambo1.hpp | 1 + .../source/core/board/NstBoardTxRom.hpp | 1 + .../source/core/board/NstBoardTxc.hpp | 1 + .../source/core/board/NstBoardTxcMxmdhtwo.hpp | 1 + .../core/board/NstBoardTxcPoliceman.hpp | 1 + .../source/core/board/NstBoardTxcTw.hpp | 1 + .../source/core/board/NstBoardUnlA9746.hpp | 1 + .../source/core/board/NstBoardUnlCc21.hpp | 1 + .../source/core/board/NstBoardUnlEdu2000.hpp | 1 + .../board/NstBoardUnlKingOfFighters96.hpp | 1 + .../board/NstBoardUnlKingOfFighters97.hpp | 1 + .../core/board/NstBoardUnlMortalKombat2.hpp | 1 + .../source/core/board/NstBoardUnlN625092.hpp | 1 + .../core/board/NstBoardUnlSuperFighter3.hpp | 1 + .../source/core/board/NstBoardUnlTf1201.hpp | 1 + .../core/board/NstBoardUnlWorldHero.hpp | 1 + .../source/core/board/NstBoardUnlXzy.hpp | 1 + .../source/core/board/NstBoardUxRom.hpp | 1 + .../source/core/board/NstBoardVsSystem.hpp | 1 + .../source/core/board/NstBoardWaixing.hpp | 1 + .../source/core/board/NstBoardWaixingFfv.hpp | 1 + .../source/core/board/NstBoardWaixingPs2.hpp | 1 + .../core/board/NstBoardWaixingSecurity.hpp | 1 + .../source/core/board/NstBoardWaixingSgz.hpp | 1 + .../core/board/NstBoardWaixingSgzlz.hpp | 1 + .../source/core/board/NstBoardWaixingSh2.hpp | 1 + .../source/core/board/NstBoardWaixingZs.hpp | 1 + .../source/core/board/NstBoardWhirlwind.hpp | 1 + .../nestopia/source/core/board/NstBoardZz.hpp | 1 + .../source/core/input/NstInpAdapter.hpp | 1 + .../core/input/NstInpBandaiHyperShot.hpp | 1 + .../source/core/input/NstInpBarcodeWorld.hpp | 1 + .../source/core/input/NstInpCrazyClimber.hpp | 1 + .../source/core/input/NstInpDevice.hpp | 1 + .../core/input/NstInpDoremikkoKeyboard.hpp | 1 + .../core/input/NstInpExcitingBoxing.hpp | 1 + .../core/input/NstInpFamilyKeyboard.hpp | 1 + .../source/core/input/NstInpFamilyTrainer.hpp | 1 + .../source/core/input/NstInpHoriTrack.hpp | 1 + .../core/input/NstInpKonamiHyperShot.hpp | 1 + .../source/core/input/NstInpMahjong.hpp | 1 + .../source/core/input/NstInpMouse.hpp | 1 + .../core/input/NstInpOekaKidsTablet.hpp | 1 + .../source/core/input/NstInpPachinko.hpp | 1 + .../nestopia/source/core/input/NstInpPad.hpp | 1 + .../source/core/input/NstInpPaddle.hpp | 1 + .../source/core/input/NstInpPartyTap.hpp | 1 + .../source/core/input/NstInpPokkunMoguraa.hpp | 1 + .../source/core/input/NstInpPowerGlove.hpp | 1 + .../source/core/input/NstInpPowerPad.hpp | 1 + .../nestopia/source/core/input/NstInpRob.hpp | 1 + .../source/core/input/NstInpSuborKeyboard.hpp | 1 + .../source/core/input/NstInpTopRider.hpp | 1 + .../source/core/input/NstInpTurboFile.hpp | 1 + .../source/core/input/NstInpZapper.hpp | 1 + .../source/core/vssystem/NstVsRbiBaseball.hpp | 1 + .../core/vssystem/NstVsSuperXevious.hpp | 1 + .../source/core/vssystem/NstVsSystem.hpp | 1 + .../source/core/vssystem/NstVsTkoBoxing.hpp | 1 + .../Private/Roxas/NSBundle+Extensions.h | 1 + .../Roxas/NSConstraintConflict+Conveniences.h | 1 + .../Private/Roxas/NSFileManager+URLs.h | 1 + .../Private/Roxas/NSLayoutConstraint+Edges.h | 1 + .../Private/Roxas/NSPredicate+Search.h | 1 + .../Private/Roxas/NSString+Localization.h | 1 + .../Roxas/NSUserDefaults+DynamicProperties.h | 1 + .../Private/Roxas/RSTActivityIndicating.h | 1 + .../Private/Roxas/RSTArrayDataSource.h | 1 + .../Headers/Private/Roxas/RSTBlockOperation.h | 1 + .../Private/Roxas/RSTCellContentCell.h | 1 + .../Private/Roxas/RSTCellContentChange.h | 1 + .../Roxas/RSTCellContentChangeOperation.h | 1 + .../Private/Roxas/RSTCellContentDataSource.h | 1 + .../RSTCellContentDataSource_Subclasses.h | 1 + .../RSTCellContentPrefetchingDataSource.h | 1 + .../Private/Roxas/RSTCellContentView.h | 1 + .../Private/Roxas/RSTCollectionViewCell.h | 1 + .../Roxas/RSTCollectionViewGridLayout.h | 1 + .../Private/Roxas/RSTCompositeDataSource.h | 1 + Pods/Headers/Private/Roxas/RSTConstants.h | 1 + Pods/Headers/Private/Roxas/RSTDefines.h | 1 + .../Private/Roxas/RSTDynamicDataSource.h | 1 + Pods/Headers/Private/Roxas/RSTError.h | 1 + .../Roxas/RSTFetchedResultsDataSource.h | 1 + Pods/Headers/Private/Roxas/RSTHasher.h | 1 + Pods/Headers/Private/Roxas/RSTHelperFile.h | 1 + .../Private/Roxas/RSTLaunchViewController.h | 1 + Pods/Headers/Private/Roxas/RSTLoadOperation.h | 1 + .../Private/Roxas/RSTNavigationController.h | 1 + Pods/Headers/Private/Roxas/RSTNibView.h | 1 + Pods/Headers/Private/Roxas/RSTOperation.h | 1 + .../Headers/Private/Roxas/RSTOperationQueue.h | 1 + .../Private/Roxas/RSTOperation_Subclasses.h | 1 + .../Private/Roxas/RSTPersistentContainer.h | 1 + .../Private/Roxas/RSTPlaceholderView.h | 1 + .../RSTRelationshipPreservingMergePolicy.h | 1 + .../Private/Roxas/RSTSearchController.h | 1 + Pods/Headers/Private/Roxas/RSTSeparatorView.h | 1 + .../Private/Roxas/RSTTintedImageView.h | 1 + Pods/Headers/Private/Roxas/RSTToastView.h | 1 + Pods/Headers/Private/Roxas/Roxas.h | 1 + .../Private/Roxas/UIAlertAction+Actions.h | 1 + .../Roxas/UICollectionView+CellContent.h | 1 + .../Roxas/UICollectionViewCell+CellContent.h | 1 + .../Private/Roxas/UICollectionViewCell+Nibs.h | 1 + .../Private/Roxas/UIImage+Manipulation.h | 1 + .../Private/Roxas/UIKit+ActivityIndicating.h | 1 + .../UISpringTimingParameters+Conveniences.h | 1 + .../Private/Roxas/UITableView+CellContent.h | 1 + .../Roxas/UITableViewCell+CellContent.h | 1 + .../Private/Roxas/UIView+AnimatedHide.h | 1 + .../Roxas/UIViewController+TransitionState.h | 1 + .../SDWebImage/NSData+ImageContentType.h | 1 + .../Headers/Private/SDWebImage/SDImageCache.h | 1 + .../Private/SDWebImage/SDWebImageCompat.h | 1 + .../Private/SDWebImage/SDWebImageDecoder.h | 1 + .../Private/SDWebImage/SDWebImageDownloader.h | 1 + .../SDWebImageDownloaderOperation.h | 1 + .../Private/SDWebImage/SDWebImageManager.h | 1 + .../Private/SDWebImage/SDWebImageOperation.h | 1 + .../Private/SDWebImage/SDWebImagePrefetcher.h | 1 + .../Private/SDWebImage/UIButton+WebCache.h | 1 + Pods/Headers/Private/SDWebImage/UIImage+GIF.h | 1 + .../Private/SDWebImage/UIImage+MultiFormat.h | 1 + .../UIImageView+HighlightedWebCache.h | 1 + .../Private/SDWebImage/UIImageView+WebCache.h | 1 + .../SDWebImage/UIView+WebCacheOperation.h | 1 + .../Private/SMCalloutView/SMCalloutView.h | 1 + .../SMCalloutView/SMClassicCalloutView.h | 1 + .../SNESDeltaCore/Bridge/SNESEmulatorBridge.h | 1 + .../SNESDeltaCore/SNESDeltaCore.h | 1 + .../SNESDeltaCore/Types/SNESTypes.h | 1 + .../Private/SNESDeltaCore/snes9x/65c816.h | 1 + .../Private/SNESDeltaCore/snes9x/apu/apu.h | 1 + .../snes9x/apu/hermite_resampler.h | 1 + .../SNESDeltaCore/snes9x/apu/resampler.h | 1 + .../SNESDeltaCore/snes9x/apu/ring_buffer.h | 1 + .../Private/SNESDeltaCore/snes9x/bsx.h | 1 + .../Headers/Private/SNESDeltaCore/snes9x/c4.h | 1 + .../Private/SNESDeltaCore/snes9x/cheats.h | 1 + .../Private/SNESDeltaCore/snes9x/conffile.h | 1 + .../Private/SNESDeltaCore/snes9x/controls.h | 1 + .../Private/SNESDeltaCore/snes9x/cpuaddr.h | 1 + .../Private/SNESDeltaCore/snes9x/cpuexec.h | 1 + .../Private/SNESDeltaCore/snes9x/cpumacro.h | 1 + .../Private/SNESDeltaCore/snes9x/cpuops.h | 1 + .../Private/SNESDeltaCore/snes9x/crosshairs.h | 1 + .../Private/SNESDeltaCore/snes9x/debug.h | 1 + .../Private/SNESDeltaCore/snes9x/display.h | 1 + .../Private/SNESDeltaCore/snes9x/dma.h | 1 + .../Private/SNESDeltaCore/snes9x/dsp.h | 1 + .../Private/SNESDeltaCore/snes9x/font.h | 1 + .../Private/SNESDeltaCore/snes9x/fxemu.h | 1 + .../Private/SNESDeltaCore/snes9x/fxinst.h | 1 + .../Private/SNESDeltaCore/snes9x/getset.h | 1 + .../Private/SNESDeltaCore/snes9x/gfx.h | 1 + .../Private/SNESDeltaCore/snes9x/language.h | 1 + .../Private/SNESDeltaCore/snes9x/logger.h | 1 + .../Private/SNESDeltaCore/snes9x/memmap.h | 1 + .../Private/SNESDeltaCore/snes9x/messages.h | 1 + .../Private/SNESDeltaCore/snes9x/missing.h | 1 + .../Private/SNESDeltaCore/snes9x/movie.h | 1 + .../Private/SNESDeltaCore/snes9x/msu1.h | 1 + .../Private/SNESDeltaCore/snes9x/netplay.h | 1 + .../Private/SNESDeltaCore/snes9x/obc1.h | 1 + .../Private/SNESDeltaCore/snes9x/pixform.h | 1 + .../Private/SNESDeltaCore/snes9x/port.h | 1 + .../Private/SNESDeltaCore/snes9x/ppu.h | 1 + .../Private/SNESDeltaCore/snes9x/sa1.h | 1 + .../Private/SNESDeltaCore/snes9x/sar.h | 1 + .../Private/SNESDeltaCore/snes9x/screenshot.h | 1 + .../Private/SNESDeltaCore/snes9x/sdd1.h | 1 + .../Private/SNESDeltaCore/snes9x/sdd1emu.h | 1 + .../Private/SNESDeltaCore/snes9x/seta.h | 1 + .../Private/SNESDeltaCore/snes9x/snapshot.h | 1 + .../Private/SNESDeltaCore/snes9x/snes9x.h | 1 + .../Private/SNESDeltaCore/snes9x/spc7110.h | 1 + .../Private/SNESDeltaCore/snes9x/spc7110dec.h | 1 + .../Private/SNESDeltaCore/snes9x/spc7110emu.h | 1 + .../Private/SNESDeltaCore/snes9x/srtc.h | 1 + .../Private/SNESDeltaCore/snes9x/srtcemu.h | 1 + .../SNESDeltaCore/snes9x/statemanager.h | 1 + .../Private/SNESDeltaCore/snes9x/stream.h | 1 + .../Private/SNESDeltaCore/snes9x/tile.h | 1 + Pods/Headers/Private/SQLite.swift/SQLite.h | 1 + .../Headers/Private/SQLite.swift/SQLiteObjc.h | 1 + .../Private/SQLite.swift/fts3_tokenizer.h | 1 + .../SwiftyDropbox/DBChunkInputStream.h | 1 + .../Private/SwiftyDropbox/SwiftyDropbox.h | 1 + .../Public/Alamofire/Alamofire-umbrella.h | 1 + .../Public/Alamofire/Alamofire.modulemap | 1 + .../Public/DSDeltaCore/DSDeltaCore-umbrella.h | 1 + .../Public/DSDeltaCore/DSDeltaCore.modulemap | 1 + .../DSDeltaCore/Bridge/DSEmulatorBridge.h | 1 + .../DSDeltaCore/DSDeltaCore/Types/DSTypes.h | 1 + .../Public/DeltaCore/DeltaCore-umbrella.h | 1 + .../Public/DeltaCore/DeltaCore.modulemap | 1 + Pods/Headers/Public/DeltaCore/DeltaTypes.h | 1 + .../GBADeltaCore/GBADeltaCore-umbrella.h | 1 + .../GBADeltaCore/GBADeltaCore.modulemap | 1 + .../GBADeltaCore/Bridge/GBAEmulatorBridge.h | 1 + .../GBADeltaCore/Types/GBATypes.h | 1 + .../GBCDeltaCore/GBCDeltaCore-umbrella.h | 1 + .../GBCDeltaCore/GBCDeltaCore.modulemap | 1 + .../GBCDeltaCore/Bridge/GBCEmulatorBridge.h | 1 + .../GBCDeltaCore/Types/GBCTypes.h | 1 + .../GTMSessionFetcher/GTMGatherInputStream.h | 1 + .../GTMSessionFetcher/GTMMIMEDocument.h | 1 + .../GTMReadMonitorInputStream.h | 1 + .../GTMSessionFetcher-umbrella.h | 1 + .../GTMSessionFetcher/GTMSessionFetcher.h | 1 + .../GTMSessionFetcher.modulemap | 1 + .../GTMSessionFetcherLogging.h | 1 + .../GTMSessionFetcherService.h | 1 + .../GTMSessionUploadFetcher.h | 1 + .../GoogleAPIClientForREST/GTLRBase64.h | 1 + .../GoogleAPIClientForREST/GTLRBatchQuery.h | 1 + .../GoogleAPIClientForREST/GTLRBatchResult.h | 1 + .../GoogleAPIClientForREST/GTLRDateTime.h | 1 + .../GoogleAPIClientForREST/GTLRDefines.h | 1 + .../Public/GoogleAPIClientForREST/GTLRDrive.h | 1 + .../GoogleAPIClientForREST/GTLRDriveObjects.h | 1 + .../GoogleAPIClientForREST/GTLRDriveQuery.h | 1 + .../GoogleAPIClientForREST/GTLRDriveService.h | 1 + .../GoogleAPIClientForREST/GTLRDuration.h | 1 + .../GoogleAPIClientForREST/GTLRErrorObject.h | 1 + .../GoogleAPIClientForREST/GTLRFramework.h | 1 + .../GoogleAPIClientForREST/GTLRObject.h | 1 + .../Public/GoogleAPIClientForREST/GTLRQuery.h | 1 + .../GTLRRuntimeCommon.h | 1 + .../GoogleAPIClientForREST/GTLRService.h | 1 + .../GoogleAPIClientForREST/GTLRURITemplate.h | 1 + .../GTLRUploadParameters.h | 1 + .../GoogleAPIClientForREST/GTLRUtilities.h | 1 + .../GoogleAPIClientForREST-umbrella.h | 1 + .../GoogleAPIClientForREST.modulemap | 1 + .../GTMDebugSelectorValidation.h | 1 + .../GTMDebugThreadValidation.h | 1 + .../Public/GoogleToolboxForMac/GTMDefines.h | 1 + .../GoogleToolboxForMac/GTMMethodCheck.h | 1 + .../GTMNSDictionary+URLArguments.h | 1 + .../GTMNSString+URLArguments.h | 1 + .../GoogleToolboxForMac-umbrella.h | 1 + .../GoogleToolboxForMac.modulemap | 1 + .../Headers/Public/Harmony/Harmony-umbrella.h | 1 + Pods/Headers/Public/Harmony/Harmony.modulemap | 1 + Pods/Headers/Public/Harmony/Harmony/Harmony.h | 1 + .../N64DeltaCore/N64DeltaCore-umbrella.h | 1 + .../N64DeltaCore/N64DeltaCore.modulemap | 1 + .../N64DeltaCore/Bridge/N64EmulatorBridge.h | 1 + .../N64DeltaCore/Types/N64Types.h | 1 + .../NESDeltaCore/NESDeltaCore-umbrella.h | 1 + .../NESDeltaCore/NESDeltaCore.modulemap | 1 + .../NestopiaJS/NESEmulatorBridge.hpp | 1 + .../Public/Roxas/NSBundle+Extensions.h | 1 + .../Roxas/NSConstraintConflict+Conveniences.h | 1 + .../Headers/Public/Roxas/NSFileManager+URLs.h | 1 + .../Public/Roxas/NSLayoutConstraint+Edges.h | 1 + .../Headers/Public/Roxas/NSPredicate+Search.h | 1 + .../Public/Roxas/NSString+Localization.h | 1 + .../Roxas/NSUserDefaults+DynamicProperties.h | 1 + .../Public/Roxas/RSTActivityIndicating.h | 1 + .../Headers/Public/Roxas/RSTArrayDataSource.h | 1 + Pods/Headers/Public/Roxas/RSTBlockOperation.h | 1 + .../Headers/Public/Roxas/RSTCellContentCell.h | 1 + .../Public/Roxas/RSTCellContentChange.h | 1 + .../Roxas/RSTCellContentChangeOperation.h | 1 + .../Public/Roxas/RSTCellContentDataSource.h | 1 + .../RSTCellContentPrefetchingDataSource.h | 1 + .../Headers/Public/Roxas/RSTCellContentView.h | 1 + .../Public/Roxas/RSTCollectionViewCell.h | 1 + .../Roxas/RSTCollectionViewGridLayout.h | 1 + .../Public/Roxas/RSTCompositeDataSource.h | 1 + Pods/Headers/Public/Roxas/RSTConstants.h | 1 + Pods/Headers/Public/Roxas/RSTDefines.h | 1 + .../Public/Roxas/RSTDynamicDataSource.h | 1 + Pods/Headers/Public/Roxas/RSTError.h | 1 + .../Roxas/RSTFetchedResultsDataSource.h | 1 + Pods/Headers/Public/Roxas/RSTHasher.h | 1 + Pods/Headers/Public/Roxas/RSTHelperFile.h | 1 + .../Public/Roxas/RSTLaunchViewController.h | 1 + Pods/Headers/Public/Roxas/RSTLoadOperation.h | 1 + .../Public/Roxas/RSTNavigationController.h | 1 + Pods/Headers/Public/Roxas/RSTNibView.h | 1 + Pods/Headers/Public/Roxas/RSTOperation.h | 1 + Pods/Headers/Public/Roxas/RSTOperationQueue.h | 1 + .../Public/Roxas/RSTOperation_Subclasses.h | 1 + .../Public/Roxas/RSTPersistentContainer.h | 1 + .../Headers/Public/Roxas/RSTPlaceholderView.h | 1 + .../RSTRelationshipPreservingMergePolicy.h | 1 + .../Public/Roxas/RSTSearchController.h | 1 + Pods/Headers/Public/Roxas/RSTSeparatorView.h | 1 + .../Headers/Public/Roxas/RSTTintedImageView.h | 1 + Pods/Headers/Public/Roxas/RSTToastView.h | 1 + Pods/Headers/Public/Roxas/Roxas-umbrella.h | 1 + Pods/Headers/Public/Roxas/Roxas.h | 1 + Pods/Headers/Public/Roxas/Roxas.modulemap | 1 + .../Public/Roxas/UIAlertAction+Actions.h | 1 + .../Roxas/UICollectionView+CellContent.h | 1 + .../Roxas/UICollectionViewCell+CellContent.h | 1 + .../Public/Roxas/UICollectionViewCell+Nibs.h | 1 + .../Public/Roxas/UIImage+Manipulation.h | 1 + .../Public/Roxas/UIKit+ActivityIndicating.h | 1 + .../UISpringTimingParameters+Conveniences.h | 1 + .../Public/Roxas/UITableView+CellContent.h | 1 + .../Roxas/UITableViewCell+CellContent.h | 1 + .../Public/Roxas/UIView+AnimatedHide.h | 1 + .../Roxas/UIViewController+TransitionState.h | 1 + .../SDWebImage/NSData+ImageContentType.h | 1 + Pods/Headers/Public/SDWebImage/SDImageCache.h | 1 + .../Public/SDWebImage/SDWebImage-umbrella.h | 1 + .../Public/SDWebImage/SDWebImage.modulemap | 1 + .../Public/SDWebImage/SDWebImageCompat.h | 1 + .../Public/SDWebImage/SDWebImageDecoder.h | 1 + .../Public/SDWebImage/SDWebImageDownloader.h | 1 + .../SDWebImageDownloaderOperation.h | 1 + .../Public/SDWebImage/SDWebImageManager.h | 1 + .../Public/SDWebImage/SDWebImageOperation.h | 1 + .../Public/SDWebImage/SDWebImagePrefetcher.h | 1 + .../Public/SDWebImage/UIButton+WebCache.h | 1 + Pods/Headers/Public/SDWebImage/UIImage+GIF.h | 1 + .../Public/SDWebImage/UIImage+MultiFormat.h | 1 + .../UIImageView+HighlightedWebCache.h | 1 + .../Public/SDWebImage/UIImageView+WebCache.h | 1 + .../SDWebImage/UIView+WebCacheOperation.h | 1 + .../SMCalloutView/SMCalloutView-umbrella.h | 1 + .../Public/SMCalloutView/SMCalloutView.h | 1 + .../SMCalloutView/SMCalloutView.modulemap | 1 + .../SMCalloutView/SMClassicCalloutView.h | 1 + .../SNESDeltaCore/SNESDeltaCore-umbrella.h | 1 + .../SNESDeltaCore/SNESDeltaCore.modulemap | 1 + .../SNESDeltaCore/Bridge/SNESEmulatorBridge.h | 1 + .../SNESDeltaCore/Types/SNESTypes.h | 1 + Pods/Headers/Public/SQLite.swift/SQLite.h | 1 + Pods/Headers/Public/SQLite.swift/SQLiteObjc.h | 1 + .../Public/SQLite/SQLite.swift-umbrella.h | 1 + .../Public/SQLite/SQLite.swift.modulemap | 1 + .../Public/SwiftyDropbox/DBChunkInputStream.h | 1 + .../SwiftyDropbox/SwiftyDropbox-umbrella.h | 1 + .../Public/SwiftyDropbox/SwiftyDropbox.h | 1 + .../SwiftyDropbox/SwiftyDropbox.modulemap | 1 + .../ZIPFoundation/ZIPFoundation-umbrella.h | 1 + .../ZIPFoundation/ZIPFoundation.modulemap | 1 + Pods/Local Podspecs/DSDeltaCore.podspec.json | 48 + Pods/Local Podspecs/DeltaCore.podspec.json | 36 + Pods/Local Podspecs/GBADeltaCore.podspec.json | 47 + Pods/Local Podspecs/GBCDeltaCore.podspec.json | 44 + Pods/Local Podspecs/Harmony.podspec.json | 49 + Pods/Local Podspecs/N64DeltaCore.podspec.json | 237 + Pods/Local Podspecs/NESDeltaCore.podspec.json | 40 + Pods/Local Podspecs/Roxas.podspec.json | 22 + .../Local Podspecs/SNESDeltaCore.podspec.json | 43 + Pods/Manifest.lock | 126 +- Pods/Pods.xcodeproj/project.pbxproj | 13539 ++++++- .../xcschemes/DSDeltaCore.xcscheme | 67 + .../xcshareddata/xcschemes/DeltaCore.xcscheme | 67 + .../xcschemes/GBADeltaCore.xcscheme | 67 + .../xcschemes/GBCDeltaCore.xcscheme | 67 + .../xcschemes/N64DeltaCore.xcscheme | 67 + .../xcschemes/NESDeltaCore.xcscheme | 67 + .../xcschemes/Pods-Delta.xcscheme | 81 + .../xcschemes/SNESDeltaCore.xcscheme | 67 + Pods/SQLite.swift/README.md | 16 +- Pods/SQLite.swift/Sources/SQLite/SQLite.h | 2 +- .../Sources/SQLite/Typed/Expression.swift | 2 +- .../Sources/SQLite/Typed/Schema.swift | 4 + .../{SQLite-Bridging.m => SQLiteObjc.m} | 2 +- .../{SQLite-Bridging.h => SQLiteObjc.h} | 0 Pods/SwiftyDropbox/LICENSE | 20 + Pods/SwiftyDropbox/README.md | 818 + .../SwiftyDropbox_iOS/OAuthMobile.swift | 249 + .../Shared/Generated/Async.swift | 260 + .../SwiftyDropbox/Shared/Generated/Auth.swift | 472 + .../Shared/Generated/AuthRoutes.swift | 37 + .../SwiftyDropbox/Shared/Generated/Base.swift | 42 + .../Shared/Generated/BaseTeam.swift | 18 + .../Shared/Generated/Common.swift | 250 + .../Shared/Generated/Contacts.swift | 112 + .../Shared/Generated/ContactsRoutes.swift | 37 + .../Shared/Generated/FileProperties.swift | 2032 + .../Generated/FilePropertiesRoutes.swift | 231 + .../Shared/Generated/FileRequests.swift | 936 + .../Shared/Generated/FileRequestsRoutes.swift | 73 + .../Shared/Generated/Files.swift | 7047 ++++ .../Shared/Generated/FilesRoutes.swift | 1287 + .../Shared/Generated/Paper.swift | 2434 ++ .../Shared/Generated/PaperRoutes.swift | 318 + .../Shared/Generated/SeenState.swift | 78 + .../Shared/Generated/Sharing.swift | 8787 +++++ .../Shared/Generated/SharingRoutes.swift | 672 + .../Shared/Generated/StoneBase.swift | 31 + .../Shared/Generated/StoneSerializers.swift | 415 + .../Shared/Generated/StoneValidators.swift | 81 + .../SwiftyDropbox/Shared/Generated/Team.swift | 10063 +++++ .../Shared/Generated/TeamCommon.swift | 270 + .../Shared/Generated/TeamLog.swift | 30735 ++++++++++++++++ .../Shared/Generated/TeamLogRoutes.swift | 49 + .../Shared/Generated/TeamPolicies.swift | 998 + .../Shared/Generated/TeamRoutes.swift | 929 + .../Shared/Generated/Users.swift | 704 + .../Shared/Generated/UsersCommon.swift | 62 + .../Shared/Generated/UsersRoutes.swift | 58 + .../Shared/Handwritten/Custom.swift | 65 + .../Shared/Handwritten/CustomRoutes.swift | 277 + .../Shared/Handwritten/CustomTasks.swift | 20 + .../Shared/Handwritten/DBChunkInputStream.h | 31 + .../Shared/Handwritten/DBChunkInputStream.m | 207 + .../Shared/Handwritten/DropboxClient.swift | 30 + .../Handwritten/DropboxClientsManager.swift | 166 + .../Handwritten/DropboxTeamClient.swift | 29 + .../Handwritten/DropboxTransportClient.swift | 623 + .../Shared/Handwritten/OAuth.swift | 507 + .../Shared/Handwritten/SDKConstants.swift | 10 + .../Shared/Handwritten/SwiftyDropbox.h | 24 + .../Shared/Handwritten/TransportConfig.swift | 27 + .../Alamofire/Alamofire-dummy.m | 5 + .../Alamofire/Alamofire-prefix.pch | 12 + .../Alamofire/Alamofire-umbrella.h | 16 + .../Alamofire/Alamofire.modulemap | 6 + .../Alamofire/Alamofire.xcconfig | 10 + .../Crashlytics/Crashlytics.xcconfig | 2 +- .../DSDeltaCore/DSDeltaCore-dummy.m | 5 + .../DSDeltaCore/DSDeltaCore-prefix.pch | 12 + .../DSDeltaCore/DSDeltaCore-umbrella.h | 18 + .../DSDeltaCore/DSDeltaCore.modulemap | 6 + .../DSDeltaCore/DSDeltaCore.xcconfig | 14 + ...eBundle-DSDeltaCore-DSDeltaCore-Info.plist | 24 + .../DeltaCore/DeltaCore-Info.plist | 26 + .../DeltaCore/DeltaCore-dummy.m | 5 + .../DeltaCore/DeltaCore-prefix.pch | 12 + .../DeltaCore/DeltaCore-umbrella.h | 17 + .../DeltaCore/DeltaCore.modulemap | 6 + .../DeltaCore/DeltaCore.xcconfig | 14 + ...ourceBundle-DeltaCore-DeltaCore-Info.plist | 24 + .../Fabric/Fabric.xcconfig | 2 +- .../GBADeltaCore/GBADeltaCore-dummy.m | 5 + .../GBADeltaCore/GBADeltaCore-prefix.pch | 12 + .../GBADeltaCore/GBADeltaCore-umbrella.h | 18 + .../GBADeltaCore/GBADeltaCore.modulemap | 6 + .../GBADeltaCore/GBADeltaCore.xcconfig | 14 + ...undle-GBADeltaCore-GBADeltaCore-Info.plist | 24 + .../GBCDeltaCore/GBCDeltaCore-dummy.m | 5 + .../GBCDeltaCore/GBCDeltaCore-prefix.pch | 12 + .../GBCDeltaCore/GBCDeltaCore-umbrella.h | 18 + .../GBCDeltaCore/GBCDeltaCore.modulemap | 6 + .../GBCDeltaCore/GBCDeltaCore.xcconfig | 14 + ...undle-GBCDeltaCore-GBCDeltaCore-Info.plist | 24 + .../GTMSessionFetcher-dummy.m | 5 + .../GTMSessionFetcher-prefix.pch | 12 + .../GTMSessionFetcher-umbrella.h | 23 + .../GTMSessionFetcher.modulemap | 6 + .../GTMSessionFetcher.xcconfig | 10 + .../GoogleAPIClientForREST-dummy.m | 5 + .../GoogleAPIClientForREST-prefix.pch | 12 + .../GoogleAPIClientForREST-umbrella.h | 35 + .../GoogleAPIClientForREST.modulemap | 6 + .../GoogleAPIClientForREST.xcconfig | 11 + .../GoogleSignIn/GoogleSignIn.xcconfig | 12 + .../GoogleToolboxForMac-dummy.m | 5 + .../GoogleToolboxForMac-prefix.pch | 12 + .../GoogleToolboxForMac-umbrella.h | 22 + .../GoogleToolboxForMac.modulemap | 6 + .../GoogleToolboxForMac.xcconfig | 10 + .../Harmony/Harmony-dummy.m | 5 + .../Harmony/Harmony-prefix.pch | 12 + .../Harmony/Harmony-umbrella.h | 17 + .../Harmony/Harmony.modulemap | 6 + .../Harmony/Harmony.xcconfig | 14 + .../N64DeltaCore/N64DeltaCore-dummy.m | 5 + .../N64DeltaCore/N64DeltaCore-prefix.pch | 12 + .../N64DeltaCore/N64DeltaCore-umbrella.h | 18 + .../N64DeltaCore/N64DeltaCore.modulemap | 6 + .../N64DeltaCore/N64DeltaCore.xcconfig | 18 + ...undle-N64DeltaCore-N64DeltaCore-Info.plist | 24 + .../NESDeltaCore/NESDeltaCore-dummy.m | 5 + .../NESDeltaCore/NESDeltaCore-prefix.pch | 12 + .../NESDeltaCore/NESDeltaCore-umbrella.h | 17 + .../NESDeltaCore/NESDeltaCore.modulemap | 6 + .../NESDeltaCore/NESDeltaCore.xcconfig | 15 + ...undle-NESDeltaCore-NESDeltaCore-Info.plist | 24 + .../Pods-Delta-acknowledgements.markdown | 694 + .../Pods-Delta-acknowledgements.plist | 736 + .../Pods-Delta/Pods-Delta-frameworks.sh | 14 +- .../Pods-Delta/Pods-Delta-resources.sh | 37 +- .../Pods-Delta/Pods-Delta.debug.xcconfig | 21 +- .../Pods-Delta/Pods-Delta.modulemap | 2 +- .../Pods-Delta/Pods-Delta.release.xcconfig | 21 +- .../Roxas/Roxas-Info.plist | 26 + Pods/Target Support Files/Roxas/Roxas-dummy.m | 5 + .../Roxas/Roxas-prefix.pch | 36 + .../Roxas/Roxas-umbrella.h | 68 + .../Roxas/Roxas.modulemap | 6 + .../Target Support Files/Roxas/Roxas.xcconfig | 10 + .../SDWebImage/SDWebImage.modulemap | 2 +- .../SDWebImage/SDWebImage.xcconfig | 3 +- .../SMCalloutView/SMCalloutView.modulemap | 2 +- .../SMCalloutView/SMCalloutView.xcconfig | 2 + ...dle-SNESDeltaCore-SNESDeltaCore-Info.plist | 24 + .../SNESDeltaCore/SNESDeltaCore-dummy.m | 5 + .../SNESDeltaCore/SNESDeltaCore-prefix.pch | 12 + .../SNESDeltaCore/SNESDeltaCore-umbrella.h | 18 + .../SNESDeltaCore/SNESDeltaCore.modulemap | 6 + .../SNESDeltaCore/SNESDeltaCore.xcconfig | 14 + .../SQLite.swift/SQLite.swift-umbrella.h | 2 +- .../SQLite.swift/SQLite.swift.modulemap | 2 +- .../SQLite.swift/SQLite.swift.xcconfig | 6 +- .../SwiftyDropbox/SwiftyDropbox-dummy.m | 5 + .../SwiftyDropbox/SwiftyDropbox-prefix.pch | 12 + .../SwiftyDropbox/SwiftyDropbox-umbrella.h | 18 + .../SwiftyDropbox/SwiftyDropbox.modulemap | 6 + .../SwiftyDropbox/SwiftyDropbox.xcconfig | 13 + .../ZIPFoundation/ZIPFoundation-dummy.m | 5 + .../ZIPFoundation/ZIPFoundation-prefix.pch | 12 + .../ZIPFoundation/ZIPFoundation-umbrella.h | 16 + .../ZIPFoundation/ZIPFoundation.modulemap | 6 + .../ZIPFoundation/ZIPFoundation.xcconfig | 10 + Pods/ZIPFoundation/LICENSE | 21 + Pods/ZIPFoundation/README.md | 276 + .../ZIPFoundation/Archive+Reading.swift | 133 + .../ZIPFoundation/Archive+Writing.swift | 353 + .../Sources/ZIPFoundation/Archive.swift | 362 + .../ZIPFoundation/Data+Compression.swift | 329 + .../ZIPFoundation/Data+Serialization.swift | 98 + .../Sources/ZIPFoundation/Entry.swift | 400 + .../ZIPFoundation/FileManager+ZIP.swift | 324 + Pods/exported_symbols.txt | 60 + 1647 files changed, 133215 insertions(+), 1134 deletions(-) create mode 100644 Pods/Alamofire/LICENSE create mode 100644 Pods/Alamofire/README.md create mode 100644 Pods/Alamofire/Source/AFError.swift create mode 100644 Pods/Alamofire/Source/Alamofire.swift create mode 100644 Pods/Alamofire/Source/DispatchQueue+Alamofire.swift create mode 100644 Pods/Alamofire/Source/MultipartFormData.swift create mode 100644 Pods/Alamofire/Source/NetworkReachabilityManager.swift create mode 100644 Pods/Alamofire/Source/Notifications.swift create mode 100644 Pods/Alamofire/Source/ParameterEncoding.swift create mode 100644 Pods/Alamofire/Source/Request.swift create mode 100644 Pods/Alamofire/Source/Response.swift create mode 100644 Pods/Alamofire/Source/ResponseSerialization.swift create mode 100644 Pods/Alamofire/Source/Result.swift create mode 100644 Pods/Alamofire/Source/ServerTrustPolicy.swift create mode 100644 Pods/Alamofire/Source/SessionDelegate.swift create mode 100644 Pods/Alamofire/Source/SessionManager.swift create mode 100644 Pods/Alamofire/Source/TaskDelegate.swift create mode 100644 Pods/Alamofire/Source/Timeline.swift create mode 100644 Pods/Alamofire/Source/Validation.swift create mode 100644 Pods/GTMSessionFetcher/LICENSE create mode 100644 Pods/GTMSessionFetcher/README.md create mode 100644 Pods/GTMSessionFetcher/Source/GTMGatherInputStream.h create mode 100644 Pods/GTMSessionFetcher/Source/GTMGatherInputStream.m create mode 100644 Pods/GTMSessionFetcher/Source/GTMMIMEDocument.h create mode 100644 Pods/GTMSessionFetcher/Source/GTMMIMEDocument.m create mode 100644 Pods/GTMSessionFetcher/Source/GTMReadMonitorInputStream.h create mode 100644 Pods/GTMSessionFetcher/Source/GTMReadMonitorInputStream.m create mode 100644 Pods/GTMSessionFetcher/Source/GTMSessionFetcher.h create mode 100644 Pods/GTMSessionFetcher/Source/GTMSessionFetcher.m create mode 100644 Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.h create mode 100644 Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.m create mode 100644 Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.h create mode 100644 Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.m create mode 100644 Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.h create mode 100644 Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.m create mode 100644 Pods/GoogleAPIClientForREST/LICENSE create mode 100644 Pods/GoogleAPIClientForREST/README.md create mode 100644 Pods/GoogleAPIClientForREST/Source/GTLRDefines.h create mode 100644 Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDrive.h create mode 100644 Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.h create mode 100644 Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.m create mode 100644 Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.h create mode 100644 Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.m create mode 100644 Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.h create mode 100644 Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRDateTime.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRDateTime.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRDuration.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRDuration.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRObject.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRObject.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRQuery.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRQuery.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRService.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRService.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Utilities/GTLRBase64.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Utilities/GTLRBase64.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Utilities/GTLRFramework.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Utilities/GTLRFramework.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.m create mode 100644 Pods/GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.h create mode 100644 Pods/GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.m create mode 100755 Pods/GoogleSignIn/.cocoapods.yml create mode 100755 Pods/GoogleSignIn/CHANGELOG.md create mode 100755 Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn create mode 100755 Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDAuthentication.h create mode 100755 Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDGoogleUser.h create mode 100755 Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDProfileData.h create mode 100755 Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDSignIn.h create mode 100755 Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDSignInButton.h create mode 100755 Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GoogleSignIn.h create mode 100755 Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Modules/module.modulemap create mode 100755 Pods/GoogleSignIn/README.md create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Info.plist create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Roboto-Bold.ttf create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ar.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ca.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/cs.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/da.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/de.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/el.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/en.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/en_GB.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/es.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/es_MX.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/fi.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/fr.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/fr_CA.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google.png create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@2x.png create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@3x.png create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hi.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings create mode 100755 Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings create mode 100644 Pods/GoogleToolboxForMac/DebugUtils/GTMDebugSelectorValidation.h create mode 100644 Pods/GoogleToolboxForMac/DebugUtils/GTMDebugThreadValidation.h create mode 100644 Pods/GoogleToolboxForMac/DebugUtils/GTMMethodCheck.h create mode 100644 Pods/GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.h create mode 100644 Pods/GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.m create mode 100644 Pods/GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.h create mode 100644 Pods/GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.m create mode 100644 Pods/GoogleToolboxForMac/GTMDefines.h create mode 100644 Pods/GoogleToolboxForMac/LICENSE create mode 100644 Pods/GoogleToolboxForMac/README.md create mode 120000 Pods/Headers/Private/DSDeltaCore/DSDeltaCore/Types/DSTypes.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/Database.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/FIFO.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/GPU.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/MMU.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/MMU_timing.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/NDSSystem.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/OGLRender.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/OGLRender_3_2.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/PACKED.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/PACKED_END.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/ROMReader.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/SPU.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/arm_jit.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/armcpu.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/bios.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/cheatSystem.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/commandline.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/common.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/cp15.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/debug.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/driver.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/emufile.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/encrypt.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/firmware.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/gdbstub.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/gfx3d.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/instruction_attributes.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/instructions.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/boolean.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/clamping.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/filters.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libco.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro_vulkan.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/complex.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/fxp.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/memalign.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/memmap.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_assert.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common_api.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_dirent.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_endianness.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_environment.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_inline.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_miscellaneous.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_stat.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/rhash.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/lua-engine.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/matrix.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mc.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mem.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SndOut.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/AAFilter.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/BPMDetect.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSampleBuffer.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSamplePipe.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIRFilter.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/RateTransposer.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/STTypes.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/SoundTouch.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/TDStretch.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/WavFile.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/cpu_detect.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/metaspu.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/win32/Dialogs.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mic.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/movie.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/path.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/rasterize.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/readwrite.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/registers.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/render3D.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/rtc.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/saves.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/scmrev.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/slot1.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/slot2.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/texcache.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/types.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/version.h create mode 120000 Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/wifi.h create mode 120000 Pods/Headers/Private/DSDeltaCore/libDeSmuME/pcap.h create mode 120000 Pods/Headers/Private/DeltaCore/DeltaCore.h create mode 120000 Pods/Headers/Private/DeltaCore/DeltaTypes.h create mode 120000 Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h create mode 120000 Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Bridge/GBASoundDriver.h create mode 120000 Pods/Headers/Private/GBADeltaCore/GBADeltaCore/GBADeltaCore.h create mode 120000 Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Types/GBATypes.h create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/AlResource.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Export.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/InputSoundFile.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Listener.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Music.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/OutputSoundFile.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Sound.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundBuffer.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundBufferRecorder.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.inl create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileReader.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileWriter.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundRecorder.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundSource.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundStream.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Config.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/BlendMode.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/CircleShape.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Color.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/ConvexShape.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Drawable.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Export.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Font.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.inl create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glyph.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Image.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/PrimitiveType.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Rect.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Rect.inl create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RectangleShape.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderStates.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderTarget.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderTexture.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderWindow.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Shader.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Shape.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Sprite.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Text.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Texture.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Transform.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Transformable.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Vertex.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/VertexArray.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/View.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Main.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Export.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Ftp.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Http.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/IpAddress.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Packet.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Socket.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/SocketHandle.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/SocketSelector.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/TcpListener.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/TcpSocket.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/UdpSocket.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/OpenGL.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Clock.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Err.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Export.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/FileInputStream.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/InputStream.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Lock.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/MemoryInputStream.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Mutex.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/NativeActivity.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/NonCopyable.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Sleep.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/String.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/String.inl create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Thread.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Thread.inl create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocal.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.inl create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Time.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Utf.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Utf.inl create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector2.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector2.inl create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector3.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector3.inl create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Context.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/ContextSettings.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Event.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Export.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/GlResource.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Joystick.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Keyboard.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Mouse.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Sensor.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Touch.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/VideoMode.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Window.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/WindowHandle.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/WindowStyle.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/SFML/src/SFML/System/Unix/ThreadImpl.hpp create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/AutoBuild.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/NLS.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/System.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/Util.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ConfigManager.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Patch.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Port.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/SoundDriver.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/SoundSDL.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Types.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/array.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/cstdint.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/dictionary.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ffmpeg.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/iniparser.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/memgzio.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ringbuffer.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/BreakpointStructures.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/CheatSearch.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Cheats.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/EEprom.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Flash.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBA.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAGfx.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBALink.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBASockClient.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAcpu.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAinline.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Globals.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/RTC.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Sound.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Sram.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/agbprint.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/armdis.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/bios.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/elf.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/ereader.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/gbafilter.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/remote.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/debugger.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/expr.cpp.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/exprNode.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/filters.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/getopt.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/inputSDL.h create mode 120000 Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/text.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Bridge/GBCInputGetter.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/GBCDeltaCore.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Model/GBCCheat.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/adaptivesleep.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/array.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/defined_ptr.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/rateest.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/ringbuffer.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/scoped_ptr.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/skipsched.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/transfer_ptr.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/uncopyable.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/common/usec.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/gambatte.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/gbint.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/inputgetter.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/loadres.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/pakinfo.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/bitmap_font.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/counterdef.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/cpu.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/initstate.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/insertion_sort.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/interrupter.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/interruptrequester.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/memory.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/minkeeper.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/osd_element.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/savestate.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/sound.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/state_osd_elements.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/statesaver.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/tima.h create mode 120000 Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/video.h create mode 120000 Pods/Headers/Private/GTMSessionFetcher/GTMGatherInputStream.h create mode 120000 Pods/Headers/Private/GTMSessionFetcher/GTMMIMEDocument.h create mode 120000 Pods/Headers/Private/GTMSessionFetcher/GTMReadMonitorInputStream.h create mode 120000 Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcher.h create mode 120000 Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcherLogging.h create mode 120000 Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcherService.h create mode 120000 Pods/Headers/Private/GTMSessionFetcher/GTMSessionUploadFetcher.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRBase64.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRBatchQuery.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRBatchResult.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRDateTime.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRDefines.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRDrive.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveObjects.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveQuery.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveService.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRDuration.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRErrorObject.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRFramework.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRObject.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRQuery.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRRuntimeCommon.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRService.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRURITemplate.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRUploadParameters.h create mode 120000 Pods/Headers/Private/GoogleAPIClientForREST/GTLRUtilities.h create mode 120000 Pods/Headers/Private/GoogleToolboxForMac/GTMDebugSelectorValidation.h create mode 120000 Pods/Headers/Private/GoogleToolboxForMac/GTMDebugThreadValidation.h create mode 120000 Pods/Headers/Private/GoogleToolboxForMac/GTMDefines.h create mode 120000 Pods/Headers/Private/GoogleToolboxForMac/GTMMethodCheck.h create mode 120000 Pods/Headers/Private/GoogleToolboxForMac/GTMNSDictionary+URLArguments.h create mode 120000 Pods/Headers/Private/GoogleToolboxForMac/GTMNSString+URLArguments.h create mode 120000 Pods/Headers/Private/Harmony/Harmony/Harmony.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/3DMath.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAM.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAMStub.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/DepthBufferToRDRAM.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/RDRAMtoColorBuffer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/WriteToRDRAM.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/CRC.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Combiner.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/CombinerKey.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Config.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DebugDump.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Debugger.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBuffer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/ClipPolygon.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/DepthBufferRender.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayLoadProgress.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayWindow.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBuffer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfo.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfoAPI.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GBI.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideN64.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/Ext_TxFilter.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_2xsai.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq2x.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq4x.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_lq2x.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_xbrz.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxCache.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxDbg.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxFilter.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxHiResCache.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxImage.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxInternal.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxQuantize.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxReSample.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxTexCache.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxUtil.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/bldno.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/png.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngconf.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pnglibconf.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngstruct.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zconf.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zlib.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/txWidestringWrapper.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/AboutDialog.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/ConfigDialog.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/FullscreenResolutions.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/GLideNUI.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/Settings.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ColorBufferReader.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/CombinerProgram.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Context.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ContextImpl.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/FramebufferTextureFormats.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ObjectHandle.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLFunctions.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerInputs.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramImpl.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_FXAA.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderPart.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_SpecialShadersFactory.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_Utils.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/GraphicBufferWrapper.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/GraphicBuffer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/gralloc.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/libhardware.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/android_hardware_buffer_compat.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/check.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/dcheck.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Attributes.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferManipulationObjectFactory.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferedDrawer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_CachedFunctions.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithBufferStorage.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithEGLImage.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithPixelBuffer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithReadPixels.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ContextImpl.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GLInfo.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GraphicsDrawer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_TextureManipulationObjectFactory.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_UnbufferedDrawer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Utils.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameter.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameters.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/PixelBuffer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ShaderProgram.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GraphicsDrawer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Keys.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Log.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/MemoryStatus.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/N64.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/NoiseTexture.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PaletteTexture.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Performance.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Platform.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PluginAPI.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PostProcessor.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/RDP.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/RSP.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Revision.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/SoftwareRender.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TexrectDrawer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TextDrawer.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TextureFilterHandler.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Textures.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Types.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/VI.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/ZilmarGFX_1_3.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/ZlutTexture.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/convert.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/gDP.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/gSP.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glcorearb.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glext.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glxext.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/wglext.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/callbacks.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/debugger.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftconfig.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftheader.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftmodule.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftoption.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftstdlib.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/freetype.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ft2build.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftadvanc.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftautoh.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbbox.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbdf.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbitmap.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbzip2.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcache.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcffdrv.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftchapters.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcid.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrdef.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrors.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgasp.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftglyph.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgxval.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgzip.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftimage.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftincrem.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlcdfil.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlist.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlzw.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmac.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmm.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmodapi.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmoderr.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftotval.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftoutln.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftpfr.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftrender.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsizes.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsnames.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftstroke.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsynth.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsystem.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttrigon.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftttdrv.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttypes.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftwinfnt.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftxf86.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/autohint.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftcalc.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdebug.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdriver.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftgloadr.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftmemory.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftobjs.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftpic.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftrfork.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftserv.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftstream.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/fttrace.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftvalid.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/internal.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/psaux.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/pshints.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svbdf.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svcid.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgldict.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgxval.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svkern.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svmm.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svotval.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpfr.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpostnm.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svprop.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpscmap.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpsinfo.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svsfnt.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttcmap.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svtteng.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttglyf.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svwinfnt.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svxf86nm.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/sfnt.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/t1types.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/tttypes.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/t1tables.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttnameid.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttables.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttags.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttunpat.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_common.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_config.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_debugger.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_frontend.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_plugin.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_types.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_vidext.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/mupenplus/GLideN64_mupenplus.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/osal/osal_files.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/sdl2_compat.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3D.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DAM.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DBETA.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DDKR.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2ACCLAIM.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2CBFD.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DFLX2.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DGOLDEN.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DPD.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DSETA.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DTEXA.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DZEX2.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Indi_Naboo.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Rogue.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3D.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX2.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX2.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/T3DUX.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/Turbo3D.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSort.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSortBOSS.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/winlnxdefs.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/wst.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/xxHash/xxhash.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng2.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/writepng.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/libtests/pngstest-errors.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/decoder/pngusr.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/encoder/pngusr.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/preader/pngusr.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/tools/sRGB.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/PngFile.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/cexcept.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/resource.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/png.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngconf.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngdebug.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pnginfo.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngpriv.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngstruct.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/callbacks.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/debugger.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_common.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_config.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_debugger.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_frontend.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_plugin.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_types.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_vidext.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext_sdl2_compat.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/audio_out_backend.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/clock_backend.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/controller_input_backend.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/joybus.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/rumble_backend.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/storage_backend.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/video_capture_backend.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/clock_ctime_plus_delta.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/file_storage.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/plugins_compat/plugins_compat.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/af_rtc.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart_rom.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/eeprom.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/flashram.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/sram.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/game_controller.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/biopak.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/mempak.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/rumblepak.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/transferpak.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/dd/dd_controller.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/device.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/gb_cart.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/m64282fp.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/mbc3_rtc.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/memory/memory.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/bootrom_hle.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/cic.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/n64_cic_nus_6105.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/pif.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cached_interp.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp0.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp1.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/fpu.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/idec.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/instr_counters.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/interrupt.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/arm_cpu_features.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/assem_arm.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm64/assem_arm64.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x64/assem_x64.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x86/assem_x86.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/pure_interp.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/r4300_core.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp_types.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/tlb.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble_struct.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/interpret.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/regcache.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble_struct.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/interpret.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/regcache.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ai/ai_controller.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/mi/mi_controller.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/pi/pi_controller.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/fb.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/rdp_core.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ri/ri_controller.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rsp/rsp_core.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/si/si_controller.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/vi/vi_controller.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rdram/rdram.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/cheat.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/eventloop.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/lirc.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/list.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/main.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/profile.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/rom.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/savestates.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/screenshot.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/sdl_key_converter.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/util.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/version.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/workqueue.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/dynamiclib.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/files.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/preproc.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/oglft_c.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/osd.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_audio.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_input.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_rsp.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_video.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/plugin.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/md5/md5.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/crypt.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/ioapi.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/unzip.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/zip.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/oglft/OGLFT.h create mode 120000 Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/xxhash/xxhash.h create mode 120000 Pods/Headers/Private/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h create mode 120000 Pods/Headers/Private/N64DeltaCore/N64DeltaCore/N64DeltaCore.h create mode 120000 Pods/Headers/Private/N64DeltaCore/N64DeltaCore/Types/N64Types.h create mode 120000 Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL.h create mode 120000 Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_config.h create mode 120000 Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_opengl.h create mode 120000 Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_opengles2.h create mode 120000 Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_thread.h create mode 120000 Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/alist.h create mode 120000 Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/arithmetics.h create mode 120000 Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/audio.h create mode 120000 Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/common.h create mode 120000 Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle.h create mode 120000 Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle_external.h create mode 120000 Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle_internal.h create mode 120000 Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/osal_dynamiclib.h create mode 120000 Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/ucodes.h create mode 120000 Pods/Headers/Private/NESDeltaCore/NESDeltaCore/NESDeltaCore.h create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstApu.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstAssert.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstBarcodeReader.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstBase.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridge.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeInes.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeRomset.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeUnif.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCheats.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstChecksum.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstChips.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCore.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCpu.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCrc32.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstDipSwitches.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFds.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFile.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFpuPrecision.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstHook.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstImage.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstImageDatabase.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoAccessor.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoLine.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoMap.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoPort.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstLog.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstMachine.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstMemory.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstNsf.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcher.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcherIps.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcherUps.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPins.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPpu.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstProperties.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstRam.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSha1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundPcm.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundPlayer.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundRenderer.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstState.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstStream.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTimer.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTracker.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTrackerMovie.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTrackerRewinder.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVector.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilter2xSaI.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterHqX.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterNone.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterNtsc.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterScaleX.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterxBR.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoRenderer.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoScreen.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstXml.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstZlib.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApi.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiBarcodeReader.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiCartridge.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiCheats.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiConfig.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiDipSwitches.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiEmulator.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiFds.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiInput.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiMachine.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiMovie.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiNsf.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiRewinder.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiSound.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiTapeRecorder.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiUser.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiVideo.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoard.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaim.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaimMcAcc.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAe.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAgci.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAve.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAveD1012.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAveNina.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandai.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandai24c0x.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiAerobicsStudio.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiDatach.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiKaraokeStudio.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50ex.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiOekaKids.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBenshengBs5.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc110in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc1200in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc150in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc15in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc20in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc21in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc22Games.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc31in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc35in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc36in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc64in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc72in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc76in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc800in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc8157.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc9999999in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcA65as.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcBallgames11in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCh001.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCtc65.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFamily4646B.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFk23c.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarA.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarB.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGolden190in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenCard6in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenGame260in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcHero.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcMarioParty7in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcNovelDiamond.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcPowerjoy84in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcResetBased4in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper22Games.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper24in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper40in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper700in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperBig7in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperGun20in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK300in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK4in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperVision16in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcT262.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVrc4.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVt5201.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcY2k64in1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtl2708.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtl6035052.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlAx5705.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlDragonNinja.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlGeniusMerioBros.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlMarioBaby.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlPikachuY2k.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlShuiGuanPipe.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2a.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2b.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2c.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb3.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSuperBros11.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlT230.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlTobidaseDaisakusen.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCaltron.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCamerica.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCne.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCneDecathlon.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCnePsb.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCneShlz.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCony.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDiscrete.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDreamtech.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardEvent.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardExRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFb.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFfe.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFujiya.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFukutake.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFutureMedia.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardGouder.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardGxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHenggedianzi.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHes.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHosenkan.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIrem.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremG101.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremH3001.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremHolyDiver.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremKaiketsu.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremLrog017.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJaleco.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf11.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf13.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf16.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf17.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf19.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoSs88006.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJyCompany.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKaiser.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKasing.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKay.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKayH2288.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKayPandaPrince.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonami.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc2.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc3.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc4.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc6.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc7.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVsSystem.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMagicSeries.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc2.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc3.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc4.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc5.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc6.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot163.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot175.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot34xx.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNanjing.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNihon.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNitra.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNtdec.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardOpenCorp.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardPxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardQj.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRcm.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoft.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftDb5z.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftSl1632.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRumbleStation.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachen.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachen74x374.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenS8259.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0036.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0037.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72007.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72008.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenStreetHeroes.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTca01.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTcu.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeam.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeamSl12.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSubor.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft2.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft3.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft4.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft5b.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftDcs.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftFme7.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGame.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameBoogerman.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameLionKing.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGamePocahontas2.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaito.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmc.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmcPal16r4.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1005.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1017.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTengen.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTengenRambo1.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxc.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcMxmdhtwo.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcPoliceman.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcTw.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlA9746.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlCc21.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlEdu2000.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters96.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters97.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlMortalKombat2.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlN625092.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlSuperFighter3.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlTf1201.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlWorldHero.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlXzy.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUxRom.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardVsSystem.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixing.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingFfv.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingPs2.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSecurity.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgz.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgzlz.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSh2.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingZs.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWhirlwind.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardZz.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpAdapter.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpBandaiHyperShot.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpBarcodeWorld.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpCrazyClimber.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpDevice.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpDoremikkoKeyboard.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpExcitingBoxing.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpFamilyKeyboard.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpFamilyTrainer.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpHoriTrack.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpKonamiHyperShot.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpMahjong.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpMouse.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpOekaKidsTablet.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPachinko.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPad.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPaddle.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPartyTap.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPokkunMoguraa.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPowerGlove.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPowerPad.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpRob.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpSuborKeyboard.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpTopRider.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpTurboFile.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpZapper.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsRbiBaseball.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsSuperXevious.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsSystem.hpp create mode 120000 Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsTkoBoxing.hpp create mode 120000 Pods/Headers/Private/Roxas/NSBundle+Extensions.h create mode 120000 Pods/Headers/Private/Roxas/NSConstraintConflict+Conveniences.h create mode 120000 Pods/Headers/Private/Roxas/NSFileManager+URLs.h create mode 120000 Pods/Headers/Private/Roxas/NSLayoutConstraint+Edges.h create mode 120000 Pods/Headers/Private/Roxas/NSPredicate+Search.h create mode 120000 Pods/Headers/Private/Roxas/NSString+Localization.h create mode 120000 Pods/Headers/Private/Roxas/NSUserDefaults+DynamicProperties.h create mode 120000 Pods/Headers/Private/Roxas/RSTActivityIndicating.h create mode 120000 Pods/Headers/Private/Roxas/RSTArrayDataSource.h create mode 120000 Pods/Headers/Private/Roxas/RSTBlockOperation.h create mode 120000 Pods/Headers/Private/Roxas/RSTCellContentCell.h create mode 120000 Pods/Headers/Private/Roxas/RSTCellContentChange.h create mode 120000 Pods/Headers/Private/Roxas/RSTCellContentChangeOperation.h create mode 120000 Pods/Headers/Private/Roxas/RSTCellContentDataSource.h create mode 120000 Pods/Headers/Private/Roxas/RSTCellContentDataSource_Subclasses.h create mode 120000 Pods/Headers/Private/Roxas/RSTCellContentPrefetchingDataSource.h create mode 120000 Pods/Headers/Private/Roxas/RSTCellContentView.h create mode 120000 Pods/Headers/Private/Roxas/RSTCollectionViewCell.h create mode 120000 Pods/Headers/Private/Roxas/RSTCollectionViewGridLayout.h create mode 120000 Pods/Headers/Private/Roxas/RSTCompositeDataSource.h create mode 120000 Pods/Headers/Private/Roxas/RSTConstants.h create mode 120000 Pods/Headers/Private/Roxas/RSTDefines.h create mode 120000 Pods/Headers/Private/Roxas/RSTDynamicDataSource.h create mode 120000 Pods/Headers/Private/Roxas/RSTError.h create mode 120000 Pods/Headers/Private/Roxas/RSTFetchedResultsDataSource.h create mode 120000 Pods/Headers/Private/Roxas/RSTHasher.h create mode 120000 Pods/Headers/Private/Roxas/RSTHelperFile.h create mode 120000 Pods/Headers/Private/Roxas/RSTLaunchViewController.h create mode 120000 Pods/Headers/Private/Roxas/RSTLoadOperation.h create mode 120000 Pods/Headers/Private/Roxas/RSTNavigationController.h create mode 120000 Pods/Headers/Private/Roxas/RSTNibView.h create mode 120000 Pods/Headers/Private/Roxas/RSTOperation.h create mode 120000 Pods/Headers/Private/Roxas/RSTOperationQueue.h create mode 120000 Pods/Headers/Private/Roxas/RSTOperation_Subclasses.h create mode 120000 Pods/Headers/Private/Roxas/RSTPersistentContainer.h create mode 120000 Pods/Headers/Private/Roxas/RSTPlaceholderView.h create mode 120000 Pods/Headers/Private/Roxas/RSTRelationshipPreservingMergePolicy.h create mode 120000 Pods/Headers/Private/Roxas/RSTSearchController.h create mode 120000 Pods/Headers/Private/Roxas/RSTSeparatorView.h create mode 120000 Pods/Headers/Private/Roxas/RSTTintedImageView.h create mode 120000 Pods/Headers/Private/Roxas/RSTToastView.h create mode 120000 Pods/Headers/Private/Roxas/Roxas.h create mode 120000 Pods/Headers/Private/Roxas/UIAlertAction+Actions.h create mode 120000 Pods/Headers/Private/Roxas/UICollectionView+CellContent.h create mode 120000 Pods/Headers/Private/Roxas/UICollectionViewCell+CellContent.h create mode 120000 Pods/Headers/Private/Roxas/UICollectionViewCell+Nibs.h create mode 120000 Pods/Headers/Private/Roxas/UIImage+Manipulation.h create mode 120000 Pods/Headers/Private/Roxas/UIKit+ActivityIndicating.h create mode 120000 Pods/Headers/Private/Roxas/UISpringTimingParameters+Conveniences.h create mode 120000 Pods/Headers/Private/Roxas/UITableView+CellContent.h create mode 120000 Pods/Headers/Private/Roxas/UITableViewCell+CellContent.h create mode 120000 Pods/Headers/Private/Roxas/UIView+AnimatedHide.h create mode 120000 Pods/Headers/Private/Roxas/UIViewController+TransitionState.h create mode 120000 Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h create mode 120000 Pods/Headers/Private/SDWebImage/SDImageCache.h create mode 120000 Pods/Headers/Private/SDWebImage/SDWebImageCompat.h create mode 120000 Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h create mode 120000 Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h create mode 120000 Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h create mode 120000 Pods/Headers/Private/SDWebImage/SDWebImageManager.h create mode 120000 Pods/Headers/Private/SDWebImage/SDWebImageOperation.h create mode 120000 Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h create mode 120000 Pods/Headers/Private/SDWebImage/UIButton+WebCache.h create mode 120000 Pods/Headers/Private/SDWebImage/UIImage+GIF.h create mode 120000 Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h create mode 120000 Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h create mode 120000 Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h create mode 120000 Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h create mode 120000 Pods/Headers/Private/SMCalloutView/SMCalloutView.h create mode 120000 Pods/Headers/Private/SMCalloutView/SMClassicCalloutView.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/SNESDeltaCore.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/65c816.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/apu/apu.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/apu/hermite_resampler.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/apu/resampler.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/apu/ring_buffer.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/bsx.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/c4.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/cheats.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/conffile.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/controls.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/cpuaddr.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/cpuexec.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/cpumacro.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/cpuops.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/crosshairs.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/debug.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/display.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/dma.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/dsp.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/font.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/fxemu.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/fxinst.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/getset.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/gfx.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/language.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/logger.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/memmap.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/messages.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/missing.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/movie.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/msu1.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/netplay.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/obc1.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/pixform.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/port.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/ppu.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/sa1.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/sar.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/screenshot.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/sdd1.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/sdd1emu.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/seta.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/snapshot.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/snes9x.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110dec.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110emu.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/srtc.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/srtcemu.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/statemanager.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/stream.h create mode 120000 Pods/Headers/Private/SNESDeltaCore/snes9x/tile.h create mode 120000 Pods/Headers/Private/SQLite.swift/SQLite.h create mode 120000 Pods/Headers/Private/SQLite.swift/SQLiteObjc.h create mode 120000 Pods/Headers/Private/SQLite.swift/fts3_tokenizer.h create mode 120000 Pods/Headers/Private/SwiftyDropbox/DBChunkInputStream.h create mode 120000 Pods/Headers/Private/SwiftyDropbox/SwiftyDropbox.h create mode 120000 Pods/Headers/Public/Alamofire/Alamofire-umbrella.h create mode 120000 Pods/Headers/Public/Alamofire/Alamofire.modulemap create mode 120000 Pods/Headers/Public/DSDeltaCore/DSDeltaCore-umbrella.h create mode 120000 Pods/Headers/Public/DSDeltaCore/DSDeltaCore.modulemap create mode 120000 Pods/Headers/Public/DSDeltaCore/DSDeltaCore/Bridge/DSEmulatorBridge.h create mode 120000 Pods/Headers/Public/DSDeltaCore/DSDeltaCore/Types/DSTypes.h create mode 120000 Pods/Headers/Public/DeltaCore/DeltaCore-umbrella.h create mode 120000 Pods/Headers/Public/DeltaCore/DeltaCore.modulemap create mode 120000 Pods/Headers/Public/DeltaCore/DeltaTypes.h create mode 120000 Pods/Headers/Public/GBADeltaCore/GBADeltaCore-umbrella.h create mode 120000 Pods/Headers/Public/GBADeltaCore/GBADeltaCore.modulemap create mode 120000 Pods/Headers/Public/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h create mode 120000 Pods/Headers/Public/GBADeltaCore/GBADeltaCore/Types/GBATypes.h create mode 120000 Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore-umbrella.h create mode 120000 Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore.modulemap create mode 120000 Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h create mode 120000 Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h create mode 120000 Pods/Headers/Public/GTMSessionFetcher/GTMGatherInputStream.h create mode 120000 Pods/Headers/Public/GTMSessionFetcher/GTMMIMEDocument.h create mode 120000 Pods/Headers/Public/GTMSessionFetcher/GTMReadMonitorInputStream.h create mode 120000 Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher-umbrella.h create mode 120000 Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.h create mode 120000 Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap create mode 120000 Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h create mode 120000 Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcherService.h create mode 120000 Pods/Headers/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRBase64.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRBatchQuery.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRBatchResult.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRDateTime.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRDefines.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRDrive.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveObjects.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveQuery.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveService.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRDuration.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRErrorObject.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRFramework.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRObject.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRQuery.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRRuntimeCommon.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRService.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRURITemplate.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRUploadParameters.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GTLRUtilities.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST-umbrella.h create mode 120000 Pods/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap create mode 120000 Pods/Headers/Public/GoogleToolboxForMac/GTMDebugSelectorValidation.h create mode 120000 Pods/Headers/Public/GoogleToolboxForMac/GTMDebugThreadValidation.h create mode 120000 Pods/Headers/Public/GoogleToolboxForMac/GTMDefines.h create mode 120000 Pods/Headers/Public/GoogleToolboxForMac/GTMMethodCheck.h create mode 120000 Pods/Headers/Public/GoogleToolboxForMac/GTMNSDictionary+URLArguments.h create mode 120000 Pods/Headers/Public/GoogleToolboxForMac/GTMNSString+URLArguments.h create mode 120000 Pods/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac-umbrella.h create mode 120000 Pods/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap create mode 120000 Pods/Headers/Public/Harmony/Harmony-umbrella.h create mode 120000 Pods/Headers/Public/Harmony/Harmony.modulemap create mode 120000 Pods/Headers/Public/Harmony/Harmony/Harmony.h create mode 120000 Pods/Headers/Public/N64DeltaCore/N64DeltaCore-umbrella.h create mode 120000 Pods/Headers/Public/N64DeltaCore/N64DeltaCore.modulemap create mode 120000 Pods/Headers/Public/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h create mode 120000 Pods/Headers/Public/N64DeltaCore/N64DeltaCore/Types/N64Types.h create mode 120000 Pods/Headers/Public/NESDeltaCore/NESDeltaCore-umbrella.h create mode 120000 Pods/Headers/Public/NESDeltaCore/NESDeltaCore.modulemap create mode 120000 Pods/Headers/Public/NESDeltaCore/NestopiaJS/NESEmulatorBridge.hpp create mode 120000 Pods/Headers/Public/Roxas/NSBundle+Extensions.h create mode 120000 Pods/Headers/Public/Roxas/NSConstraintConflict+Conveniences.h create mode 120000 Pods/Headers/Public/Roxas/NSFileManager+URLs.h create mode 120000 Pods/Headers/Public/Roxas/NSLayoutConstraint+Edges.h create mode 120000 Pods/Headers/Public/Roxas/NSPredicate+Search.h create mode 120000 Pods/Headers/Public/Roxas/NSString+Localization.h create mode 120000 Pods/Headers/Public/Roxas/NSUserDefaults+DynamicProperties.h create mode 120000 Pods/Headers/Public/Roxas/RSTActivityIndicating.h create mode 120000 Pods/Headers/Public/Roxas/RSTArrayDataSource.h create mode 120000 Pods/Headers/Public/Roxas/RSTBlockOperation.h create mode 120000 Pods/Headers/Public/Roxas/RSTCellContentCell.h create mode 120000 Pods/Headers/Public/Roxas/RSTCellContentChange.h create mode 120000 Pods/Headers/Public/Roxas/RSTCellContentChangeOperation.h create mode 120000 Pods/Headers/Public/Roxas/RSTCellContentDataSource.h create mode 120000 Pods/Headers/Public/Roxas/RSTCellContentPrefetchingDataSource.h create mode 120000 Pods/Headers/Public/Roxas/RSTCellContentView.h create mode 120000 Pods/Headers/Public/Roxas/RSTCollectionViewCell.h create mode 120000 Pods/Headers/Public/Roxas/RSTCollectionViewGridLayout.h create mode 120000 Pods/Headers/Public/Roxas/RSTCompositeDataSource.h create mode 120000 Pods/Headers/Public/Roxas/RSTConstants.h create mode 120000 Pods/Headers/Public/Roxas/RSTDefines.h create mode 120000 Pods/Headers/Public/Roxas/RSTDynamicDataSource.h create mode 120000 Pods/Headers/Public/Roxas/RSTError.h create mode 120000 Pods/Headers/Public/Roxas/RSTFetchedResultsDataSource.h create mode 120000 Pods/Headers/Public/Roxas/RSTHasher.h create mode 120000 Pods/Headers/Public/Roxas/RSTHelperFile.h create mode 120000 Pods/Headers/Public/Roxas/RSTLaunchViewController.h create mode 120000 Pods/Headers/Public/Roxas/RSTLoadOperation.h create mode 120000 Pods/Headers/Public/Roxas/RSTNavigationController.h create mode 120000 Pods/Headers/Public/Roxas/RSTNibView.h create mode 120000 Pods/Headers/Public/Roxas/RSTOperation.h create mode 120000 Pods/Headers/Public/Roxas/RSTOperationQueue.h create mode 120000 Pods/Headers/Public/Roxas/RSTOperation_Subclasses.h create mode 120000 Pods/Headers/Public/Roxas/RSTPersistentContainer.h create mode 120000 Pods/Headers/Public/Roxas/RSTPlaceholderView.h create mode 120000 Pods/Headers/Public/Roxas/RSTRelationshipPreservingMergePolicy.h create mode 120000 Pods/Headers/Public/Roxas/RSTSearchController.h create mode 120000 Pods/Headers/Public/Roxas/RSTSeparatorView.h create mode 120000 Pods/Headers/Public/Roxas/RSTTintedImageView.h create mode 120000 Pods/Headers/Public/Roxas/RSTToastView.h create mode 120000 Pods/Headers/Public/Roxas/Roxas-umbrella.h create mode 120000 Pods/Headers/Public/Roxas/Roxas.h create mode 120000 Pods/Headers/Public/Roxas/Roxas.modulemap create mode 120000 Pods/Headers/Public/Roxas/UIAlertAction+Actions.h create mode 120000 Pods/Headers/Public/Roxas/UICollectionView+CellContent.h create mode 120000 Pods/Headers/Public/Roxas/UICollectionViewCell+CellContent.h create mode 120000 Pods/Headers/Public/Roxas/UICollectionViewCell+Nibs.h create mode 120000 Pods/Headers/Public/Roxas/UIImage+Manipulation.h create mode 120000 Pods/Headers/Public/Roxas/UIKit+ActivityIndicating.h create mode 120000 Pods/Headers/Public/Roxas/UISpringTimingParameters+Conveniences.h create mode 120000 Pods/Headers/Public/Roxas/UITableView+CellContent.h create mode 120000 Pods/Headers/Public/Roxas/UITableViewCell+CellContent.h create mode 120000 Pods/Headers/Public/Roxas/UIView+AnimatedHide.h create mode 120000 Pods/Headers/Public/Roxas/UIViewController+TransitionState.h create mode 120000 Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h create mode 120000 Pods/Headers/Public/SDWebImage/SDImageCache.h create mode 120000 Pods/Headers/Public/SDWebImage/SDWebImage-umbrella.h create mode 120000 Pods/Headers/Public/SDWebImage/SDWebImage.modulemap create mode 120000 Pods/Headers/Public/SDWebImage/SDWebImageCompat.h create mode 120000 Pods/Headers/Public/SDWebImage/SDWebImageDecoder.h create mode 120000 Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h create mode 120000 Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h create mode 120000 Pods/Headers/Public/SDWebImage/SDWebImageManager.h create mode 120000 Pods/Headers/Public/SDWebImage/SDWebImageOperation.h create mode 120000 Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h create mode 120000 Pods/Headers/Public/SDWebImage/UIButton+WebCache.h create mode 120000 Pods/Headers/Public/SDWebImage/UIImage+GIF.h create mode 120000 Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h create mode 120000 Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h create mode 120000 Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h create mode 120000 Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h create mode 120000 Pods/Headers/Public/SMCalloutView/SMCalloutView-umbrella.h create mode 120000 Pods/Headers/Public/SMCalloutView/SMCalloutView.h create mode 120000 Pods/Headers/Public/SMCalloutView/SMCalloutView.modulemap create mode 120000 Pods/Headers/Public/SMCalloutView/SMClassicCalloutView.h create mode 120000 Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore-umbrella.h create mode 120000 Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore.modulemap create mode 120000 Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h create mode 120000 Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h create mode 120000 Pods/Headers/Public/SQLite.swift/SQLite.h create mode 120000 Pods/Headers/Public/SQLite.swift/SQLiteObjc.h create mode 120000 Pods/Headers/Public/SQLite/SQLite.swift-umbrella.h create mode 120000 Pods/Headers/Public/SQLite/SQLite.swift.modulemap create mode 120000 Pods/Headers/Public/SwiftyDropbox/DBChunkInputStream.h create mode 120000 Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h create mode 120000 Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox.h create mode 120000 Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap create mode 120000 Pods/Headers/Public/ZIPFoundation/ZIPFoundation-umbrella.h create mode 120000 Pods/Headers/Public/ZIPFoundation/ZIPFoundation.modulemap create mode 100644 Pods/Local Podspecs/DSDeltaCore.podspec.json create mode 100644 Pods/Local Podspecs/DeltaCore.podspec.json create mode 100644 Pods/Local Podspecs/GBADeltaCore.podspec.json create mode 100644 Pods/Local Podspecs/GBCDeltaCore.podspec.json create mode 100644 Pods/Local Podspecs/Harmony.podspec.json create mode 100644 Pods/Local Podspecs/N64DeltaCore.podspec.json create mode 100644 Pods/Local Podspecs/NESDeltaCore.podspec.json create mode 100644 Pods/Local Podspecs/Roxas.podspec.json create mode 100644 Pods/Local Podspecs/SNESDeltaCore.podspec.json create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/DSDeltaCore.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/DeltaCore.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/GBADeltaCore.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/GBCDeltaCore.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/N64DeltaCore.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/NESDeltaCore.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-Delta.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/SNESDeltaCore.xcscheme rename Pods/SQLite.swift/Sources/SQLiteObjc/{SQLite-Bridging.m => SQLiteObjc.m} (99%) rename Pods/SQLite.swift/Sources/SQLiteObjc/include/{SQLite-Bridging.h => SQLiteObjc.h} (100%) create mode 100644 Pods/SwiftyDropbox/LICENSE create mode 100644 Pods/SwiftyDropbox/README.md create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Platform/SwiftyDropbox_iOS/OAuthMobile.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Async.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Auth.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/AuthRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Base.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/BaseTeam.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Common.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Contacts.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/ContactsRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileProperties.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FilePropertiesRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileRequests.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileRequestsRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Files.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Paper.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/PaperRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/SeenState.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Sharing.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneBase.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneSerializers.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneValidators.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Team.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamCommon.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamLog.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamLogRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamPolicies.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Users.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/UsersCommon.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/UsersRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/Custom.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/CustomRoutes.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/CustomTasks.swift create mode 100755 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.h create mode 100755 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.m create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxClient.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxClientsManager.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxTeamClient.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxTransportClient.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/OAuth.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SDKConstants.swift create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SwiftyDropbox.h create mode 100644 Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/TransportConfig.swift create mode 100644 Pods/Target Support Files/Alamofire/Alamofire-dummy.m create mode 100644 Pods/Target Support Files/Alamofire/Alamofire-prefix.pch create mode 100644 Pods/Target Support Files/Alamofire/Alamofire-umbrella.h create mode 100644 Pods/Target Support Files/Alamofire/Alamofire.modulemap create mode 100644 Pods/Target Support Files/Alamofire/Alamofire.xcconfig create mode 100644 Pods/Target Support Files/DSDeltaCore/DSDeltaCore-dummy.m create mode 100644 Pods/Target Support Files/DSDeltaCore/DSDeltaCore-prefix.pch create mode 100644 Pods/Target Support Files/DSDeltaCore/DSDeltaCore-umbrella.h create mode 100644 Pods/Target Support Files/DSDeltaCore/DSDeltaCore.modulemap create mode 100644 Pods/Target Support Files/DSDeltaCore/DSDeltaCore.xcconfig create mode 100644 Pods/Target Support Files/DSDeltaCore/ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist create mode 100644 Pods/Target Support Files/DeltaCore/DeltaCore-Info.plist create mode 100644 Pods/Target Support Files/DeltaCore/DeltaCore-dummy.m create mode 100644 Pods/Target Support Files/DeltaCore/DeltaCore-prefix.pch create mode 100644 Pods/Target Support Files/DeltaCore/DeltaCore-umbrella.h create mode 100644 Pods/Target Support Files/DeltaCore/DeltaCore.modulemap create mode 100644 Pods/Target Support Files/DeltaCore/DeltaCore.xcconfig create mode 100644 Pods/Target Support Files/DeltaCore/ResourceBundle-DeltaCore-DeltaCore-Info.plist create mode 100644 Pods/Target Support Files/GBADeltaCore/GBADeltaCore-dummy.m create mode 100644 Pods/Target Support Files/GBADeltaCore/GBADeltaCore-prefix.pch create mode 100644 Pods/Target Support Files/GBADeltaCore/GBADeltaCore-umbrella.h create mode 100644 Pods/Target Support Files/GBADeltaCore/GBADeltaCore.modulemap create mode 100644 Pods/Target Support Files/GBADeltaCore/GBADeltaCore.xcconfig create mode 100644 Pods/Target Support Files/GBADeltaCore/ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist create mode 100644 Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-dummy.m create mode 100644 Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-prefix.pch create mode 100644 Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-umbrella.h create mode 100644 Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore.modulemap create mode 100644 Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore.xcconfig create mode 100644 Pods/Target Support Files/GBCDeltaCore/ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist create mode 100644 Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-dummy.m create mode 100644 Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-prefix.pch create mode 100644 Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-umbrella.h create mode 100644 Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap create mode 100644 Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.xcconfig create mode 100644 Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-dummy.m create mode 100644 Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-prefix.pch create mode 100644 Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-umbrella.h create mode 100644 Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap create mode 100644 Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST.xcconfig create mode 100644 Pods/Target Support Files/GoogleSignIn/GoogleSignIn.xcconfig create mode 100644 Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-dummy.m create mode 100644 Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch create mode 100644 Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-umbrella.h create mode 100644 Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.modulemap create mode 100644 Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.xcconfig create mode 100644 Pods/Target Support Files/Harmony/Harmony-dummy.m create mode 100644 Pods/Target Support Files/Harmony/Harmony-prefix.pch create mode 100644 Pods/Target Support Files/Harmony/Harmony-umbrella.h create mode 100644 Pods/Target Support Files/Harmony/Harmony.modulemap create mode 100644 Pods/Target Support Files/Harmony/Harmony.xcconfig create mode 100644 Pods/Target Support Files/N64DeltaCore/N64DeltaCore-dummy.m create mode 100644 Pods/Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch create mode 100644 Pods/Target Support Files/N64DeltaCore/N64DeltaCore-umbrella.h create mode 100644 Pods/Target Support Files/N64DeltaCore/N64DeltaCore.modulemap create mode 100644 Pods/Target Support Files/N64DeltaCore/N64DeltaCore.xcconfig create mode 100644 Pods/Target Support Files/N64DeltaCore/ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist create mode 100644 Pods/Target Support Files/NESDeltaCore/NESDeltaCore-dummy.m create mode 100644 Pods/Target Support Files/NESDeltaCore/NESDeltaCore-prefix.pch create mode 100644 Pods/Target Support Files/NESDeltaCore/NESDeltaCore-umbrella.h create mode 100644 Pods/Target Support Files/NESDeltaCore/NESDeltaCore.modulemap create mode 100644 Pods/Target Support Files/NESDeltaCore/NESDeltaCore.xcconfig create mode 100644 Pods/Target Support Files/NESDeltaCore/ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist create mode 100644 Pods/Target Support Files/Roxas/Roxas-Info.plist create mode 100644 Pods/Target Support Files/Roxas/Roxas-dummy.m create mode 100644 Pods/Target Support Files/Roxas/Roxas-prefix.pch create mode 100644 Pods/Target Support Files/Roxas/Roxas-umbrella.h create mode 100644 Pods/Target Support Files/Roxas/Roxas.modulemap create mode 100644 Pods/Target Support Files/Roxas/Roxas.xcconfig create mode 100644 Pods/Target Support Files/SNESDeltaCore/ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist create mode 100644 Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-dummy.m create mode 100644 Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-prefix.pch create mode 100644 Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-umbrella.h create mode 100644 Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore.modulemap create mode 100644 Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore.xcconfig create mode 100644 Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-dummy.m create mode 100644 Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch create mode 100644 Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-umbrella.h create mode 100644 Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox.modulemap create mode 100644 Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox.xcconfig create mode 100644 Pods/Target Support Files/ZIPFoundation/ZIPFoundation-dummy.m create mode 100644 Pods/Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch create mode 100644 Pods/Target Support Files/ZIPFoundation/ZIPFoundation-umbrella.h create mode 100644 Pods/Target Support Files/ZIPFoundation/ZIPFoundation.modulemap create mode 100644 Pods/Target Support Files/ZIPFoundation/ZIPFoundation.xcconfig create mode 100644 Pods/ZIPFoundation/LICENSE create mode 100644 Pods/ZIPFoundation/README.md create mode 100644 Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Reading.swift create mode 100644 Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift create mode 100644 Pods/ZIPFoundation/Sources/ZIPFoundation/Archive.swift create mode 100644 Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift create mode 100644 Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Serialization.swift create mode 100644 Pods/ZIPFoundation/Sources/ZIPFoundation/Entry.swift create mode 100644 Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift create mode 100644 Pods/exported_symbols.txt diff --git a/Cores/DSDeltaCore b/Cores/DSDeltaCore index 40d515a..88037a5 160000 --- a/Cores/DSDeltaCore +++ b/Cores/DSDeltaCore @@ -1 +1 @@ -Subproject commit 40d515a2088be952b6c4038ff715d1b91ce0667f +Subproject commit 88037a5745399074cedb665f435564bb5d89ba91 diff --git a/Cores/DeltaCore b/Cores/DeltaCore index bcedcc2..5570db1 160000 --- a/Cores/DeltaCore +++ b/Cores/DeltaCore @@ -1 +1 @@ -Subproject commit bcedcc293badfc9e4f07f3c66f496bf828450874 +Subproject commit 5570db1dfe95d6e08b0abaefe63b89a9cac211fc diff --git a/Cores/GBADeltaCore b/Cores/GBADeltaCore index 14474b0..d4bc2da 160000 --- a/Cores/GBADeltaCore +++ b/Cores/GBADeltaCore @@ -1 +1 @@ -Subproject commit 14474b02ec607953cdc6dd3959856f7de1449bdb +Subproject commit d4bc2da2b19dddb87610c62ea190c42029fdf3c2 diff --git a/Cores/GBCDeltaCore b/Cores/GBCDeltaCore index 85ced43..a15e8ae 160000 --- a/Cores/GBCDeltaCore +++ b/Cores/GBCDeltaCore @@ -1 +1 @@ -Subproject commit 85ced43f5f220ee7f19b99e0949d9091c963d549 +Subproject commit a15e8ae6fee927fd95a8243231ee849eab31e1ef diff --git a/Cores/N64DeltaCore b/Cores/N64DeltaCore index 9057ad5..9f9b7b3 160000 --- a/Cores/N64DeltaCore +++ b/Cores/N64DeltaCore @@ -1 +1 @@ -Subproject commit 9057ad53e99555c75de3b4083fc4c18de13254ce +Subproject commit 9f9b7b32503b0ed6bcc0065e7880e02c75859623 diff --git a/Cores/NESDeltaCore b/Cores/NESDeltaCore index 9d1a964..04d17a5 160000 --- a/Cores/NESDeltaCore +++ b/Cores/NESDeltaCore @@ -1 +1 @@ -Subproject commit 9d1a964c1b23f8c2835d469d2827d4f24bcc5214 +Subproject commit 04d17a5400711e7551d07cd158ca856a0302a005 diff --git a/Cores/SNESDeltaCore b/Cores/SNESDeltaCore index f54e044..b90b603 160000 --- a/Cores/SNESDeltaCore +++ b/Cores/SNESDeltaCore @@ -1 +1 @@ -Subproject commit f54e0440f1a9ed1fc005f5ea4729ebe26f36f945 +Subproject commit b90b6030a74420152b071073c3a4b2fdbe82f5af diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 45b7b41..23c8e17 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -21,20 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 4FE8465FD28810191C3E5212 /* Pods_Delta.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 695E8C07A709B16AAD83AEC8 /* Pods_Delta.framework */; }; + 1FA4ABA79AB72914FE414A61 /* libPods-Delta.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DC866E433B3BA9AE18ABA1EC /* libPods-Delta.a */; }; BF02D5DA1DDEBB3000A5E131 /* openvgdb.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = BF02D5D91DDEBB3000A5E131 /* openvgdb.sqlite */; }; - BF0418141D01E93400E85BCF /* GBADeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF0418131D01E93400E85BCF /* GBADeltaCore.framework */; }; - BF0418151D01E93400E85BCF /* GBADeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF0418131D01E93400E85BCF /* GBADeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF04E6FF1DB8625C000F35D3 /* ControllerSkinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF04E6FE1DB8625C000F35D3 /* ControllerSkinsViewController.swift */; }; - BF072010219A3A9D00F05DA4 /* ZIPFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF07200E219A3A9500F05DA4 /* ZIPFoundation.framework */; }; - BF072011219A3A9D00F05DA4 /* ZIPFoundation.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF07200E219A3A9500F05DA4 /* ZIPFoundation.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF1020E31F95B05B00313182 /* DeltaToDelta2.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = BF1020E21F95B05B00313182 /* DeltaToDelta2.xcmappingmodel */; }; BF107EC41BF413F000E0C32C /* GamesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF107EC31BF413F000E0C32C /* GamesViewController.swift */; }; BF1173501DA32CF600047DF8 /* ControllersSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF11734F1DA32CF600047DF8 /* ControllersSettingsViewController.swift */; }; BF13A7561D5D29B0000BB055 /* PreviewGameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF13A7551D5D29B0000BB055 /* PreviewGameViewController.swift */; }; BF13A7581D5D2FD9000BB055 /* EmulatorCore+Cheats.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF13A7571D5D2FD9000BB055 /* EmulatorCore+Cheats.swift */; }; - BF144C642238511400C387E1 /* Harmony_Dropbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFDE2CC6222DF345008038E0 /* Harmony_Dropbox.framework */; }; - BF144C652238511400C387E1 /* Harmony_Dropbox.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFDE2CC6222DF345008038E0 /* Harmony_Dropbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF15AF841F54B43B009B6AAB /* ActionInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF15AF831F54B43B009B6AAB /* ActionInput.swift */; }; BF18B61F1E2985F900F70067 /* UIAlertController+Importing.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */; }; BF1DAD5D1D9F576000E752A7 /* SystemControllerSkinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1DAD5C1D9F576000E752A7 /* SystemControllerSkinsViewController.swift */; }; @@ -60,10 +54,6 @@ BF4828861F9028F500028B97 /* System.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF4828851F9028F500028B97 /* System.swift */; }; BF4828881F90290F00028B97 /* Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF4828871F90290F00028B97 /* Action.swift */; }; BF48F74E219A16DA00BC2FC1 /* SyncingServicesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF48F74D219A16DA00BC2FC1 /* SyncingServicesViewController.swift */; }; - BF48F755219A1EF000BC2FC1 /* Harmony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF48F754219A1EEB00BC2FC1 /* Harmony.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - BF48F756219A1EF000BC2FC1 /* Harmony.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF48F754219A1EEB00BC2FC1 /* Harmony.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF48F75B219A1F8A00BC2FC1 /* Harmony_Drive.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF48F75A219A1F8300BC2FC1 /* Harmony_Drive.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; - BF48F75C219A1F8A00BC2FC1 /* Harmony_Drive.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF48F75A219A1F8300BC2FC1 /* Harmony_Drive.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF525EE81FF5F370004AA849 /* DeepLinkController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF525EE71FF5F370004AA849 /* DeepLinkController.swift */; }; BF525EEA1FF6CD12004AA849 /* DeepLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF525EE91FF6CD12004AA849 /* DeepLink.swift */; }; BF56450D220239B800A8EA26 /* GameControllerInputMappingMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF56450C220239B800A8EA26 /* GameControllerInputMappingMigrationPolicy.swift */; }; @@ -96,6 +86,10 @@ BF647A6A22FB8FCE0061D76D /* Bundle+SwizzleBundleID.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF647A6922FB8FCE0061D76D /* Bundle+SwizzleBundleID.swift */; }; BF6866171DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6866161DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift */; }; BF696B801D9B2B02009639E0 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF696B7F1D9B2B02009639E0 /* Theme.swift */; }; + BF69FBA223E375A20051BEEA /* libVBA-M.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF69FBA123E375A20051BEEA /* libVBA-M.a */; }; + BF69FBA823E396860051BEEA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BF69FBA723E3967B0051BEEA /* libz.tbd */; }; + BF69FBAA23E399AA0051BEEA /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF69FBA923E399AA0051BEEA /* CoreMotion.framework */; }; + BF69FBC923E3A8380051BEEA /* libNestopia.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF69FBC823E3A8380051BEEA /* libNestopia.a */; }; BF6BF3131EB7E47F008E83CD /* ImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF3121EB7E47F008E83CD /* ImportOption.swift */; }; BF6BF3181EB82111008E83CD /* iTunesImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF3171EB82111008E83CD /* iTunesImportOption.swift */; }; BF6BF31A1EB82146008E83CD /* ClipboardImportOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6BF3191EB82146008E83CD /* ClipboardImportOption.swift */; }; @@ -108,7 +102,6 @@ BF71CF871FE90006001F1613 /* AppIconShortcutsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF71CF861FE90006001F1613 /* AppIconShortcutsViewController.swift */; }; BF71CF8A1FE904B1001F1613 /* GameTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = BF71CF891FE904B1001F1613 /* GameTableViewCell.xib */; }; BF797A2D1C2D339F00F1A000 /* UILabel+FontSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */; }; - BF79966E224C076C009B094F /* N64DeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF79966C224C075A009B094F /* N64DeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF7AE8081C2E858400B1B5BC /* GridMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8041C2E858400B1B5BC /* GridMenuViewController.swift */; }; BF7AE80A1C2E8C7600B1B5BC /* UIColor+Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF7AE8091C2E8C7600B1B5BC /* UIColor+Delta.swift */; }; BF80E1D21F13117000847008 /* ControllerInputsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF616A121F08184A0077F8B2 /* ControllerInputsViewController.swift */; }; @@ -118,22 +111,11 @@ BF8DDD241F4F6C880088A21B /* InputCalloutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF8DDD231F4F6C880088A21B /* InputCalloutView.swift */; }; BF95E2771E4977BF0030E7AD /* GameMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF95E2761E4977BF0030E7AD /* GameMetadata.swift */; }; BF95E2791E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF95E2781E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift */; }; - BF98C9822204D9AB006B95AC /* NESDeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF98C9812204D9A1006B95AC /* NESDeltaCore.framework */; }; - BF98C9832204D9AB006B95AC /* NESDeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF98C9812204D9A1006B95AC /* NESDeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF99A5971DC2F9C400468E9E /* ControllerSkinTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF99A5961DC2F9C400468E9E /* ControllerSkinTableViewCell.swift */; }; - BF99C6941D0A9AA600BA92BC /* SNESDeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFC134E01AAD82460087AD7B /* SNESDeltaCore.framework */; }; - BF99C6951D0A9AA600BA92BC /* SNESDeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFC134E01AAD82460087AD7B /* SNESDeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BF9F4FCF1AAD7B87004C9500 /* DeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF9F4FCE1AAD7B87004C9500 /* DeltaCore.framework */; }; - BF9F4FD01AAD7B87004C9500 /* DeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BF9F4FCE1AAD7B87004C9500 /* DeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BFA0D1271D3AE1F600565894 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF63BDE91D389EEB00FCB040 /* GameViewController.swift */; }; BFAA1FED1B8AA4FA00495943 /* Settings.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFAA1FEC1B8AA4FA00495943 /* Settings.swift */; }; BFAB9F7D219A43380080EC7D /* SyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFAB9F7C219A43380080EC7D /* SyncManager.swift */; }; BFAB9F88219A4B670080EC7D /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BFAB9F87219A4B670080EC7D /* GoogleService-Info.plist */; }; - BFB3593A2278FD0000CFD920 /* N64DeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF79966C224C075A009B094F /* N64DeltaCore.framework */; }; - BFB359432278FD7E00CFD920 /* N64DeltaCore_Video.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFB359412278FD6700CFD920 /* N64DeltaCore_Video.framework */; }; - BFB359442278FD7E00CFD920 /* N64DeltaCore_Video.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFB359412278FD6700CFD920 /* N64DeltaCore_Video.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BFB359452278FD8100CFD920 /* N64DeltaCore_RSP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFB359422278FD6800CFD920 /* N64DeltaCore_RSP.framework */; }; - BFB359462278FD8100CFD920 /* N64DeltaCore_RSP.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFB359422278FD6800CFD920 /* N64DeltaCore_RSP.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BFB3645823245A6000CD0EB1 /* LicensesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFB3645723245A6000CD0EB1 /* LicensesViewController.swift */; }; BFBAB2E31EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFBAB2E21EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift */; }; BFC1F2CC22F9515F00606A45 /* CopyDeepLinkActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC1F2CB22F9515F00606A45 /* CopyDeepLinkActivity.swift */; }; @@ -145,21 +127,12 @@ BFD1EF402336BD8800D197CF /* UIDevice+Processor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFD1EF3F2336BD8800D197CF /* UIDevice+Processor.swift */; }; BFDB3418219E4B1700595A62 /* SyncStatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDB3417219E4B1700595A62 /* SyncStatusViewController.swift */; }; BFDD04F11D5E2C27002D450E /* GameCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */; }; - BFDE2CD1222DF36A008038E0 /* SwiftyDropbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFDE2CC8222DF345008038E0 /* SwiftyDropbox.framework */; }; - BFDE2CD2222DF36A008038E0 /* SwiftyDropbox.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFDE2CC8222DF345008038E0 /* SwiftyDropbox.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BFDE2CD3222DF36A008038E0 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFDE2CC7222DF345008038E0 /* Alamofire.framework */; }; - BFDE2CD4222DF36A008038E0 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFDE2CC7222DF345008038E0 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - BFDF71DD22F94CF70074D92E /* DSDeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFDF71DA22F94CDF0074D92E /* DSDeltaCore.framework */; }; - BFDF71DE22F94CF70074D92E /* DSDeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFDF71DA22F94CDF0074D92E /* DSDeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BFE022A01F5B57FF0052D888 /* PopoverMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */; }; BFE4269E1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */; }; BFE593CA21F3F8B7003412A6 /* GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593C921F3F8B7003412A6 /* GameSave.swift */; }; BFE593CC21F3F8C2003412A6 /* _GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593CB21F3F8C2003412A6 /* _GameSave.swift */; }; - BFEC732D1AAECC4A00650035 /* Roxas.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFEC732C1AAECC4A00650035 /* Roxas.framework */; }; - BFEC732E1AAECC4A00650035 /* Roxas.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFEC732C1AAECC4A00650035 /* Roxas.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + BFEE507D23E7612300416151 /* liblibDeSmuME.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF76BDE823E649150073702C /* liblibDeSmuME.a */; }; BFEF24F31F7DD4FD00454C62 /* SaveStateMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */; }; - BFF0742C1E9DC17500ACDF4A /* GBCDeltaCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */; }; - BFF0742D1E9DC17500ACDF4A /* GBCDeltaCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BFF6452E1F7CC5060056533E /* GameControllerInputMappingTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */; }; BFFA4C091E8A24D600D87934 /* GameTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFA4C081E8A24D600D87934 /* GameTableViewCell.swift */; }; BFFA71DD1AAC406100EE9DD1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFA71DC1AAC406100EE9DD1 /* AppDelegate.swift */; }; @@ -171,40 +144,13 @@ BFFC46231D5984A000AF2CC6 /* LaunchViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFC46221D5984A000AF2CC6 /* LaunchViewController.swift */; }; BFFC46461D59861000AF2CC6 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BFFC46441D59861000AF2CC6 /* LaunchScreen.storyboard */; }; BFFC464C1D5998D600AF2CC6 /* CheatTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFC464B1D5998D600AF2CC6 /* CheatTableViewCell.swift */; }; + BFFDF03723E3BB2600931B96 /* libSnes9x.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BFFDF03623E3BB2600931B96 /* libSnes9x.a */; }; + BFFDF03F23E3C28A00931B96 /* libGambatte.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BFFDF03D23E3C0F000931B96 /* libGambatte.a */; }; + BFFDF04623E3D3A600931B96 /* libMupen64Plus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BFFDF04523E3D3A600931B96 /* libMupen64Plus.a */; }; /* End PBXBuildFile section */ -/* Begin PBXCopyFilesBuildPhase section */ - BF9F4FCC1AAD7AEE004C9500 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - BF9F4FD01AAD7B87004C9500 /* DeltaCore.framework in Embed Frameworks */, - BFDE2CD2222DF36A008038E0 /* SwiftyDropbox.framework in Embed Frameworks */, - BF48F75C219A1F8A00BC2FC1 /* Harmony_Drive.framework in Embed Frameworks */, - BF79966E224C076C009B094F /* N64DeltaCore.framework in Embed Frameworks */, - BF48F756219A1EF000BC2FC1 /* Harmony.framework in Embed Frameworks */, - BFB359462278FD8100CFD920 /* N64DeltaCore_RSP.framework in Embed Frameworks */, - BFF0742D1E9DC17500ACDF4A /* GBCDeltaCore.framework in Embed Frameworks */, - BFEC732E1AAECC4A00650035 /* Roxas.framework in Embed Frameworks */, - BF0418151D01E93400E85BCF /* GBADeltaCore.framework in Embed Frameworks */, - BFDE2CD4222DF36A008038E0 /* Alamofire.framework in Embed Frameworks */, - BFB359442278FD7E00CFD920 /* N64DeltaCore_Video.framework in Embed Frameworks */, - BFDF71DE22F94CF70074D92E /* DSDeltaCore.framework in Embed Frameworks */, - BF144C652238511400C387E1 /* Harmony_Dropbox.framework in Embed Frameworks */, - BF98C9832204D9AB006B95AC /* NESDeltaCore.framework in Embed Frameworks */, - BF99C6951D0A9AA600BA92BC /* SNESDeltaCore.framework in Embed Frameworks */, - BF072011219A3A9D00F05DA4 /* ZIPFoundation.framework in Embed Frameworks */, - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - /* Begin PBXFileReference section */ 22506DA00971C4300AF90A35 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 695E8C07A709B16AAD83AEC8 /* Pods_Delta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Delta.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A19FF50F55441BC2B2248241 /* Pods-Delta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Delta.release.xcconfig"; path = "Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig"; sourceTree = ""; }; BF02D5D91DDEBB3000A5E131 /* openvgdb.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = openvgdb.sqlite; sourceTree = ""; }; BF0418131D01E93400E85BCF /* GBADeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GBADeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -274,6 +220,7 @@ BF5942901E09BD1A0051894B /* NSFetchedResultsController+Conveniences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSFetchedResultsController+Conveniences.m"; sourceTree = ""; }; BF5942911E09BD1A0051894B /* NSManagedObject+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Conveniences.swift"; sourceTree = ""; }; BF5942921E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Conveniences.swift"; sourceTree = ""; }; + BF5ACE3823E23D6500BD0F20 /* libVBA-M.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libVBA-M.a"; sourceTree = BUILT_PRODUCTS_DIR; }; BF5E7F431B9A650B00AE44F8 /* SettingsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; }; BF5E7F451B9A652600AE44F8 /* Settings.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Settings.storyboard; path = Delta/Base.lproj/Settings.storyboard; sourceTree = SOURCE_ROOT; }; BF616A121F08184A0077F8B2 /* ControllerInputsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllerInputsViewController.swift; sourceTree = ""; }; @@ -285,6 +232,10 @@ BF647A6922FB8FCE0061D76D /* Bundle+SwizzleBundleID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+SwizzleBundleID.swift"; sourceTree = ""; }; BF6866161DCAC8B900BF2D06 /* ControllerSkin+Configuring.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "ControllerSkin+Configuring.swift"; sourceTree = ""; }; BF696B7F1D9B2B02009639E0 /* Theme.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = ""; }; + BF69FBA123E375A20051BEEA /* libVBA-M.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = "libVBA-M.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + BF69FBA723E3967B0051BEEA /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; + BF69FBA923E399AA0051BEEA /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; + BF69FBC823E3A8380051BEEA /* libNestopia.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libNestopia.a; sourceTree = BUILT_PRODUCTS_DIR; }; BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameControllerInputMappingTransformer.swift; sourceTree = ""; }; BF6BB2451BB73FE800CCF94A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; BF6BF3121EB7E47F008E83CD /* ImportOption.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImportOption.swift; sourceTree = ""; }; @@ -299,6 +250,7 @@ BF713C0722499ED3004A1A2B /* Harmony.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Harmony.xcdatamodel; sourceTree = ""; }; BF71CF861FE90006001F1613 /* AppIconShortcutsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIconShortcutsViewController.swift; sourceTree = ""; }; BF71CF891FE904B1001F1613 /* GameTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GameTableViewCell.xib; sourceTree = ""; }; + BF76BDE823E649150073702C /* liblibDeSmuME.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liblibDeSmuME.a; sourceTree = BUILT_PRODUCTS_DIR; }; BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UILabel+FontSize.swift"; sourceTree = ""; }; BF79966C224C075A009B094F /* N64DeltaCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = N64DeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BF7AE8041C2E858400B1B5BC /* GridMenuViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GridMenuViewController.swift; sourceTree = ""; }; @@ -351,7 +303,11 @@ BFFC46221D5984A000AF2CC6 /* LaunchViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LaunchViewController.swift; sourceTree = ""; }; BFFC46451D59861000AF2CC6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; BFFC464B1D5998D600AF2CC6 /* CheatTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheatTableViewCell.swift; sourceTree = ""; }; + BFFDF03623E3BB2600931B96 /* libSnes9x.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libSnes9x.a; sourceTree = BUILT_PRODUCTS_DIR; }; + BFFDF03D23E3C0F000931B96 /* libGambatte.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libGambatte.a; sourceTree = BUILT_PRODUCTS_DIR; }; + BFFDF04523E3D3A600931B96 /* libMupen64Plus.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libMupen64Plus.a; sourceTree = BUILT_PRODUCTS_DIR; }; C786AF1D2DDB6223BE2063CC /* Pods-Delta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Delta.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig"; sourceTree = ""; }; + DC866E433B3BA9AE18ABA1EC /* libPods-Delta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Delta.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -359,23 +315,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BFB3593A2278FD0000CFD920 /* N64DeltaCore.framework in Frameworks */, - BF9F4FCF1AAD7B87004C9500 /* DeltaCore.framework in Frameworks */, - BFEC732D1AAECC4A00650035 /* Roxas.framework in Frameworks */, - BFDE2CD3222DF36A008038E0 /* Alamofire.framework in Frameworks */, - BF48F75B219A1F8A00BC2FC1 /* Harmony_Drive.framework in Frameworks */, - BFDF71DD22F94CF70074D92E /* DSDeltaCore.framework in Frameworks */, - BFB359452278FD8100CFD920 /* N64DeltaCore_RSP.framework in Frameworks */, - BF99C6941D0A9AA600BA92BC /* SNESDeltaCore.framework in Frameworks */, - BF98C9822204D9AB006B95AC /* NESDeltaCore.framework in Frameworks */, - BFB359432278FD7E00CFD920 /* N64DeltaCore_Video.framework in Frameworks */, - BF0418141D01E93400E85BCF /* GBADeltaCore.framework in Frameworks */, - BF072010219A3A9D00F05DA4 /* ZIPFoundation.framework in Frameworks */, - BFDE2CD1222DF36A008038E0 /* SwiftyDropbox.framework in Frameworks */, - BF144C642238511400C387E1 /* Harmony_Dropbox.framework in Frameworks */, - BFF0742C1E9DC17500ACDF4A /* GBCDeltaCore.framework in Frameworks */, - BF48F755219A1EF000BC2FC1 /* Harmony.framework in Frameworks */, - 4FE8465FD28810191C3E5212 /* Pods_Delta.framework in Frameworks */, + BFEE507D23E7612300416151 /* liblibDeSmuME.a in Frameworks */, + BF69FBA823E396860051BEEA /* libz.tbd in Frameworks */, + BF69FBAA23E399AA0051BEEA /* CoreMotion.framework in Frameworks */, + BF69FBA223E375A20051BEEA /* libVBA-M.a in Frameworks */, + BFFDF04623E3D3A600931B96 /* libMupen64Plus.a in Frameworks */, + BF69FBC923E3A8380051BEEA /* libNestopia.a in Frameworks */, + 1FA4ABA79AB72914FE414A61 /* libPods-Delta.a in Frameworks */, + BFFDF03F23E3C28A00931B96 /* libGambatte.a in Frameworks */, + BFFDF03723E3BB2600931B96 /* libSnes9x.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -669,6 +617,15 @@ BF9F4FCD1AAD7B25004C9500 /* Frameworks */ = { isa = PBXGroup; children = ( + BF76BDE823E649150073702C /* liblibDeSmuME.a */, + BFFDF04523E3D3A600931B96 /* libMupen64Plus.a */, + BFFDF03D23E3C0F000931B96 /* libGambatte.a */, + BFFDF03623E3BB2600931B96 /* libSnes9x.a */, + BF69FBC823E3A8380051BEEA /* libNestopia.a */, + BF69FBA923E399AA0051BEEA /* CoreMotion.framework */, + BF69FBA723E3967B0051BEEA /* libz.tbd */, + BF69FBA123E375A20051BEEA /* libVBA-M.a */, + BF5ACE3823E23D6500BD0F20 /* libVBA-M.a */, BFDF71DA22F94CDF0074D92E /* DSDeltaCore.framework */, BFB359412278FD6700CFD920 /* N64DeltaCore_Video.framework */, BFB359422278FD6800CFD920 /* N64DeltaCore_RSP.framework */, @@ -689,7 +646,7 @@ BF9F4FCE1AAD7B87004C9500 /* DeltaCore.framework */, BFC134E01AAD82460087AD7B /* SNESDeltaCore.framework */, 22506DA00971C4300AF90A35 /* Pods.framework */, - 695E8C07A709B16AAD83AEC8 /* Pods_Delta.framework */, + DC866E433B3BA9AE18ABA1EC /* libPods-Delta.a */, ); name = Frameworks; sourceTree = ""; @@ -873,9 +830,8 @@ BFFA71D31AAC406100EE9DD1 /* Sources */, BFFA71D41AAC406100EE9DD1 /* Frameworks */, BFFA71D51AAC406100EE9DD1 /* Resources */, - BF9F4FCC1AAD7AEE004C9500 /* Embed Frameworks */, - B444B2BB31CBCEE7D86E943D /* [CP] Embed Pods Frameworks */, BF6BF3281EB897F6008E83CD /* Fabric */, + 0E0279E4F38215820BB0C9A0 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -957,26 +913,42 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - B444B2BB31CBCEE7D86E943D /* [CP] Embed Pods Frameworks */ = { + 0E0279E4F38215820BB0C9A0 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", - "${BUILT_PRODUCTS_DIR}/SMCalloutView/SMCalloutView.framework", - "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework", + "${PODS_ROOT}/Target Support Files/Pods-Delta/Pods-Delta-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.bundle", + "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle", + "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld", + "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle", + "${PODS_ROOT}/../External/Roxas/Roxas/RSTCollectionViewCell.xib", + "${PODS_ROOT}/../External/Roxas/Roxas/RSTPlaceholderView.xib", + "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.bundle", ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SMCalloutView.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SQLite.framework", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DSDeltaCore.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/DeltaCore.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GBADeltaCore.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GBCDeltaCore.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Harmony.momd", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/N64DeltaCore.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/NESDeltaCore.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RSTCollectionViewCell.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RSTPlaceholderView.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/SNESDeltaCore.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Delta/Pods-Delta-resources.sh\"\n"; showEnvVarsInLog = 0; }; BF14D8981DE7A519002CA1BE /* mogenerator */ = { @@ -1317,6 +1289,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CLANG_MODULES_AUTOLINK = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; @@ -1342,6 +1315,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; + CLANG_MODULES_AUTOLINK = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; diff --git a/Delta.xcodeproj/xcshareddata/xcschemes/Delta.xcscheme b/Delta.xcodeproj/xcshareddata/xcschemes/Delta.xcscheme index d03741f..4c4537f 100644 --- a/Delta.xcodeproj/xcshareddata/xcschemes/Delta.xcscheme +++ b/Delta.xcodeproj/xcshareddata/xcschemes/Delta.xcscheme @@ -14,120 +14,8 @@ buildForAnalyzing = "YES"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -153,8 +41,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + + - - 0.11.0' + use_modular_headers! + + pod 'SQLite.swift', '~> 0.12.0' pod 'SDWebImage', '~> 3.8' pod 'Fabric', '~> 1.6.0' pod 'Crashlytics', '~> 3.8.0' pod 'SMCalloutView' + + pod 'DeltaCore', :path => 'Cores/DeltaCore' + pod 'NESDeltaCore', :path => 'Cores/NESDeltaCore' + pod 'SNESDeltaCore', :path => 'Cores/SNESDeltaCore' + pod 'N64DeltaCore', :path => 'Cores/N64DeltaCore' + pod 'GBCDeltaCore', :path => 'Cores/GBCDeltaCore' + pod 'GBADeltaCore', :path => 'Cores/GBADeltaCore' + pod 'DSDeltaCore', :path => 'Cores/DSDeltaCore' + pod 'Roxas', :path => 'External/Roxas' + pod 'Harmony', :path => 'External/Harmony' end \ No newline at end of file diff --git a/Podfile.lock b/Podfile.lock index 9931d06..bada546 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,37 +1,147 @@ PODS: + - Alamofire (4.7.3) - Crashlytics (3.8.6): - Fabric (~> 1.6.3) + - DeltaCore (0.1): + - ZIPFoundation + - DSDeltaCore (0.1): + - DeltaCore - Fabric (1.6.13) + - GBADeltaCore (0.1): + - DeltaCore + - GBCDeltaCore (0.1): + - DeltaCore + - GoogleAPIClientForREST/Core (1.3.11): + - GTMSessionFetcher (>= 1.1.7) + - GoogleAPIClientForREST/Drive (1.3.11): + - GoogleAPIClientForREST/Core + - GTMSessionFetcher (>= 1.1.7) + - GoogleSignIn (4.4.0): + - "GoogleToolboxForMac/NSDictionary+URLArguments (~> 2.1)" + - "GoogleToolboxForMac/NSString+URLArguments (~> 2.1)" + - GTMSessionFetcher/Core (~> 1.1) + - GoogleToolboxForMac/DebugUtils (2.2.2): + - GoogleToolboxForMac/Defines (= 2.2.2) + - GoogleToolboxForMac/Defines (2.2.2) + - "GoogleToolboxForMac/NSDictionary+URLArguments (2.2.2)": + - GoogleToolboxForMac/DebugUtils (= 2.2.2) + - GoogleToolboxForMac/Defines (= 2.2.2) + - "GoogleToolboxForMac/NSString+URLArguments (= 2.2.2)" + - "GoogleToolboxForMac/NSString+URLArguments (2.2.2)" + - GTMSessionFetcher (1.3.1): + - GTMSessionFetcher/Full (= 1.3.1) + - GTMSessionFetcher/Core (1.3.1) + - GTMSessionFetcher/Full (1.3.1): + - GTMSessionFetcher/Core (= 1.3.1) + - Harmony (0.1): + - Harmony/Harmony-Drive (= 0.1) + - Harmony/Harmony-Dropbox (= 0.1) + - Roxas + - Harmony/Harmony-Drive (0.1): + - GoogleAPIClientForREST/Drive (~> 1.3.0) + - GoogleSignIn (~> 4.4.0) + - Roxas + - Harmony/Harmony-Dropbox (0.1): + - Roxas + - SwiftyDropbox (~> 5.0.0) + - N64DeltaCore (0.1): + - DeltaCore + - N64DeltaCore/RSP (= 0.1) + - N64DeltaCore/Video (= 0.1) + - N64DeltaCore/RSP (0.1): + - DeltaCore + - N64DeltaCore/Video (0.1): + - DeltaCore + - NESDeltaCore (0.1): + - DeltaCore + - Roxas (0.1) - SDWebImage (3.8.3): - SDWebImage/Core (= 3.8.3) - SDWebImage/Core (3.8.3) - SMCalloutView (2.1.5) - - SQLite.swift (0.11.6): - - SQLite.swift/standard (= 0.11.6) - - SQLite.swift/standard (0.11.6) + - SNESDeltaCore (0.1): + - DeltaCore + - SQLite.swift (0.12.2): + - SQLite.swift/standard (= 0.12.2) + - SQLite.swift/standard (0.12.2) + - SwiftyDropbox (5.0.0): + - Alamofire (~> 4.7.3) + - ZIPFoundation (0.9.10) DEPENDENCIES: - Crashlytics (~> 3.8.0) + - DeltaCore (from `Cores/DeltaCore`) + - DSDeltaCore (from `Cores/DSDeltaCore`) - Fabric (~> 1.6.0) + - GBADeltaCore (from `Cores/GBADeltaCore`) + - GBCDeltaCore (from `Cores/GBCDeltaCore`) + - Harmony (from `External/Harmony`) + - N64DeltaCore (from `Cores/N64DeltaCore`) + - NESDeltaCore (from `Cores/NESDeltaCore`) + - Roxas (from `External/Roxas`) - SDWebImage (~> 3.8) - SMCalloutView - - SQLite.swift (~> 0.11.0) + - SNESDeltaCore (from `Cores/SNESDeltaCore`) + - SQLite.swift (~> 0.12.0) SPEC REPOS: - https://github.com/cocoapods/specs.git: + trunk: + - Alamofire - Crashlytics - Fabric + - GoogleAPIClientForREST + - GoogleSignIn + - GoogleToolboxForMac + - GTMSessionFetcher - SDWebImage - SMCalloutView - SQLite.swift + - SwiftyDropbox + - ZIPFoundation + +EXTERNAL SOURCES: + DeltaCore: + :path: Cores/DeltaCore + DSDeltaCore: + :path: Cores/DSDeltaCore + GBADeltaCore: + :path: Cores/GBADeltaCore + GBCDeltaCore: + :path: Cores/GBCDeltaCore + Harmony: + :path: External/Harmony + N64DeltaCore: + :path: Cores/N64DeltaCore + NESDeltaCore: + :path: Cores/NESDeltaCore + Roxas: + :path: External/Roxas + SNESDeltaCore: + :path: Cores/SNESDeltaCore SPEC CHECKSUMS: + Alamofire: c7287b6e5d7da964a70935e5db17046b7fde6568 Crashlytics: 95d05f4e4c19a771250c4bd9ce344d996de32bbf + DeltaCore: 1b246a4e436c6b2b377ea84a1bc847a1c5f4b6cd + DSDeltaCore: 7dc6a18e25d8036a5022a34c1ffb4062af9eed3d Fabric: 2fb5676bc811af011a04513451f463dac6803206 + GBADeltaCore: 10ff8fde89ed95c99888a9b7102b3d3e45d7458d + GBCDeltaCore: 7468dff742927139a14f6fc909e810f253b6293c + GoogleAPIClientForREST: 0f19a8280dfe6471f76016645d26eb5dae305101 + GoogleSignIn: 7ff245e1a7b26d379099d3243a562f5747e23d39 + GoogleToolboxForMac: 800648f8b3127618c1b59c7f97684427630c5ea3 + GTMSessionFetcher: cea130bbfe5a7edc8d06d3f0d17288c32ffe9925 + Harmony: 1978345dcf69ce6cf4c94c07405ebf01b7d6fe28 + N64DeltaCore: fd4823c300feae8d93ceea8aca2024a0be13c1d5 + NESDeltaCore: 41ab438dd78d51d4636aacb7d9a7336ea3d4728c + Roxas: 1990039f843f5dc284918dc82375feb80020ef62 SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c SMCalloutView: 5c0ee363dc8e7204b2fda17dfad38c93e9e23481 - SQLite.swift: 46d890be8601964454bd3392527f863d1b802d45 + SNESDeltaCore: eb7053f45204f9a6ceb426d53649e6ee35b97684 + SQLite.swift: d2b4642190917051ce6bd1d49aab565fe794eea3 + SwiftyDropbox: 378b4425a2e8d0cb24c7b0f2e3af72bfbaaf1e73 + ZIPFoundation: 249fa8890597086cd536bb2df5c9804d84e122b0 -PODFILE CHECKSUM: 1d7f9ff69da571c7991621312e07aa4b16a0a074 +PODFILE CHECKSUM: f31937de08bbf917d8b684c542c81b49e5fb72b5 -COCOAPODS: 1.6.1 +COCOAPODS: 1.8.4 diff --git a/Pods/Alamofire/LICENSE b/Pods/Alamofire/LICENSE new file mode 100644 index 0000000..2ec3cb1 --- /dev/null +++ b/Pods/Alamofire/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Pods/Alamofire/README.md b/Pods/Alamofire/README.md new file mode 100644 index 0000000..0208252 --- /dev/null +++ b/Pods/Alamofire/README.md @@ -0,0 +1,242 @@ +![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/master/alamofire.png) + +[![Build Status](https://travis-ci.org/Alamofire/Alamofire.svg?branch=master)](https://travis-ci.org/Alamofire/Alamofire) +[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/Alamofire.svg)](https://img.shields.io/cocoapods/v/Alamofire.svg) +[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![Platform](https://img.shields.io/cocoapods/p/Alamofire.svg?style=flat)](https://alamofire.github.io/Alamofire) +[![Twitter](https://img.shields.io/badge/twitter-@AlamofireSF-blue.svg?style=flat)](https://twitter.com/AlamofireSF) +[![Gitter](https://badges.gitter.im/Alamofire/Alamofire.svg)](https://gitter.im/Alamofire/Alamofire?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) + +Alamofire is an HTTP networking library written in Swift. + +- [Features](#features) +- [Component Libraries](#component-libraries) +- [Requirements](#requirements) +- [Migration Guides](#migration-guides) +- [Communication](#communication) +- [Installation](#installation) +- [Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md) + - **Intro -** [Making a Request](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#making-a-request), [Response Handling](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-handling), [Response Validation](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-validation), [Response Caching](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-caching) + - **HTTP -** [HTTP Methods](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-methods), [Parameter Encoding](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#parameter-encoding), [HTTP Headers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-headers), [Authentication](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#authentication) + - **Large Data -** [Downloading Data to a File](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#downloading-data-to-a-file), [Uploading Data to a Server](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server) + - **Tools -** [Statistical Metrics](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#statistical-metrics), [cURL Command Output](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#curl-command-output) +- [Advanced Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md) + - **URL Session -** [Session Manager](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#session-manager), [Session Delegate](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#session-delegate), [Request](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#request) + - **Routing -** [Routing Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#routing-requests), [Adapting and Retrying Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#adapting-and-retrying-requests) + - **Model Objects -** [Custom Response Serialization](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#custom-response-serialization) + - **Connection -** [Security](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#security), [Network Reachability](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#network-reachability) +- [Open Radars](#open-radars) +- [FAQ](#faq) +- [Credits](#credits) +- [Donations](#donations) +- [License](#license) + +## Features + +- [x] Chainable Request / Response Methods +- [x] URL / JSON / plist Parameter Encoding +- [x] Upload File / Data / Stream / MultipartFormData +- [x] Download File using Request or Resume Data +- [x] Authentication with URLCredential +- [x] HTTP Response Validation +- [x] Upload and Download Progress Closures with Progress +- [x] cURL Command Output +- [x] Dynamically Adapt and Retry Requests +- [x] TLS Certificate and Public Key Pinning +- [x] Network Reachability +- [x] Comprehensive Unit and Integration Test Coverage +- [x] [Complete Documentation](https://alamofire.github.io/Alamofire) + +## Component Libraries + +In order to keep Alamofire focused specifically on core networking implementations, additional component libraries have been created by the [Alamofire Software Foundation](https://github.com/Alamofire/Foundation) to bring additional functionality to the Alamofire ecosystem. + +- [AlamofireImage](https://github.com/Alamofire/AlamofireImage) - An image library including image response serializers, `UIImage` and `UIImageView` extensions, custom image filters, an auto-purging in-memory cache and a priority-based image downloading system. +- [AlamofireNetworkActivityIndicator](https://github.com/Alamofire/AlamofireNetworkActivityIndicator) - Controls the visibility of the network activity indicator on iOS using Alamofire. It contains configurable delay timers to help mitigate flicker and can support `URLSession` instances not managed by Alamofire. + +## Requirements + +- iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+ +- Xcode 8.3+ +- Swift 3.1+ + +## Migration Guides + +- [Alamofire 4.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md) +- [Alamofire 3.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md) +- [Alamofire 2.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%202.0%20Migration%20Guide.md) + +## Communication + +- If you **need help**, use [Stack Overflow](https://stackoverflow.com/questions/tagged/alamofire). (Tag 'alamofire') +- If you'd like to **ask a general question**, use [Stack Overflow](https://stackoverflow.com/questions/tagged/alamofire). +- If you **found a bug**, open an issue. +- If you **have a feature request**, open an issue. +- If you **want to contribute**, submit a pull request. + +## Installation + +### CocoaPods + +[CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: + +```bash +$ gem install cocoapods +``` + +> CocoaPods 1.1+ is required to build Alamofire 4.0+. + +To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`: + +```ruby +source 'https://github.com/CocoaPods/Specs.git' +platform :ios, '10.0' +use_frameworks! + +target '' do + pod 'Alamofire', '~> 4.7' +end +``` + +Then, run the following command: + +```bash +$ pod install +``` + +### Carthage + +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. + +You can install Carthage with [Homebrew](https://brew.sh/) using the following command: + +```bash +$ brew update +$ brew install carthage +``` + +To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`: + +```ogdl +github "Alamofire/Alamofire" ~> 4.7 +``` + +Run `carthage update` to build the framework and drag the built `Alamofire.framework` into your Xcode project. + +### Swift Package Manager + +The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. It is in early development, but Alamofire does support its use on supported platforms. + +Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. + +#### Swift 3 + +```swift +dependencies: [ + .Package(url: "https://github.com/Alamofire/Alamofire.git", majorVersion: 4) +] +``` + +#### Swift 4 + +```swift +dependencies: [ + .package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.0.0") +] +``` + +### Manually + +If you prefer not to use any of the aforementioned dependency managers, you can integrate Alamofire into your project manually. + +#### Embedded Framework + +- Open up Terminal, `cd` into your top-level project directory, and run the following command "if" your project is not initialized as a git repository: + + ```bash + $ git init + ``` + +- Add Alamofire as a git [submodule](https://git-scm.com/docs/git-submodule) by running the following command: + + ```bash + $ git submodule add https://github.com/Alamofire/Alamofire.git + ``` + +- Open the new `Alamofire` folder, and drag the `Alamofire.xcodeproj` into the Project Navigator of your application's Xcode project. + + > It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter. + +- Select the `Alamofire.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target. +- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar. +- In the tab bar at the top of that window, open the "General" panel. +- Click on the `+` button under the "Embedded Binaries" section. +- You will see two different `Alamofire.xcodeproj` folders each with two different versions of the `Alamofire.framework` nested inside a `Products` folder. + + > It does not matter which `Products` folder you choose from, but it does matter whether you choose the top or bottom `Alamofire.framework`. + +- Select the top `Alamofire.framework` for iOS and the bottom one for OS X. + + > You can verify which one you selected by inspecting the build log for your project. The build target for `Alamofire` will be listed as either `Alamofire iOS`, `Alamofire macOS`, `Alamofire tvOS` or `Alamofire watchOS`. + +- And that's it! + + > The `Alamofire.framework` is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device. + +## Open Radars + +The following radars have some effect on the current implementation of Alamofire. + +- [`rdar://21349340`](http://www.openradar.me/radar?id=5517037090635776) - Compiler throwing warning due to toll-free bridging issue in test case +- `rdar://26870455` - Background URL Session Configurations do not work in the simulator +- `rdar://26849668` - Some URLProtocol APIs do not properly handle `URLRequest` +- [`rdar://36082113`](http://openradar.appspot.com/radar?id=4942308441063424) - `URLSessionTaskMetrics` failing to link on watchOS 3.0+ + +## Resolved Radars + +The following radars have been resolved over time after being filed against the Alamofire project. + +- [`rdar://26761490`](http://www.openradar.me/radar?id=5010235949318144) - Swift string interpolation causing memory leak with common usage (Resolved on 9/1/17 in Xcode 9 beta 6). + +## FAQ + +### What's the origin of the name Alamofire? + +Alamofire is named after the [Alamo Fire flower](https://aggie-horticulture.tamu.edu/wildseed/alamofire.html), a hybrid variant of the Bluebonnet, the official state flower of Texas. + +### What logic belongs in a Router vs. a Request Adapter? + +Simple, static data such as paths, parameters and common headers belong in the `Router`. Dynamic data such as an `Authorization` header whose value can changed based on an authentication system belongs in a `RequestAdapter`. + +The reason the dynamic data MUST be placed into the `RequestAdapter` is to support retry operations. When a `Request` is retried, the original request is not rebuilt meaning the `Router` will not be called again. The `RequestAdapter` is called again allowing the dynamic data to be updated on the original request before retrying the `Request`. + +## Credits + +Alamofire is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). You can follow them on Twitter at [@AlamofireSF](https://twitter.com/AlamofireSF) for project updates and releases. + +### Security Disclosure + +If you believe you have identified a security vulnerability with Alamofire, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker. + +## Donations + +The [ASF](https://github.com/Alamofire/Foundation#members) is looking to raise money to officially stay registered as a federal non-profit organization. +Registering will allow us members to gain some legal protections and also allow us to put donations to use, tax free. +Donating to the ASF will enable us to: + +- Pay our yearly legal fees to keep the non-profit in good status +- Pay for our mail servers to help us stay on top of all questions and security issues +- Potentially fund test servers to make it easier for us to test the edge cases +- Potentially fund developers to work on one of our projects full-time + +The community adoption of the ASF libraries has been amazing. +We are greatly humbled by your enthusiasm around the projects, and want to continue to do everything we can to move the needle forward. +With your continued support, the ASF will be able to improve its reach and also provide better legal safety for the core members. +If you use any of our libraries for work, see if your employers would be interested in donating. +Any amount you can donate today to help us reach our goal would be greatly appreciated. + +[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W34WPEE74APJQ) + +## License + +Alamofire is released under the MIT license. [See LICENSE](https://github.com/Alamofire/Alamofire/blob/master/LICENSE) for details. diff --git a/Pods/Alamofire/Source/AFError.swift b/Pods/Alamofire/Source/AFError.swift new file mode 100644 index 0000000..8b90d84 --- /dev/null +++ b/Pods/Alamofire/Source/AFError.swift @@ -0,0 +1,460 @@ +// +// AFError.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// `AFError` is the error type returned by Alamofire. It encompasses a few different types of errors, each with +/// their own associated reasons. +/// +/// - invalidURL: Returned when a `URLConvertible` type fails to create a valid `URL`. +/// - parameterEncodingFailed: Returned when a parameter encoding object throws an error during the encoding process. +/// - multipartEncodingFailed: Returned when some step in the multipart encoding process fails. +/// - responseValidationFailed: Returned when a `validate()` call fails. +/// - responseSerializationFailed: Returned when a response serializer encounters an error in the serialization process. +public enum AFError: Error { + /// The underlying reason the parameter encoding error occurred. + /// + /// - missingURL: The URL request did not have a URL to encode. + /// - jsonEncodingFailed: JSON serialization failed with an underlying system error during the + /// encoding process. + /// - propertyListEncodingFailed: Property list serialization failed with an underlying system error during + /// encoding process. + public enum ParameterEncodingFailureReason { + case missingURL + case jsonEncodingFailed(error: Error) + case propertyListEncodingFailed(error: Error) + } + + /// The underlying reason the multipart encoding error occurred. + /// + /// - bodyPartURLInvalid: The `fileURL` provided for reading an encodable body part isn't a + /// file URL. + /// - bodyPartFilenameInvalid: The filename of the `fileURL` provided has either an empty + /// `lastPathComponent` or `pathExtension. + /// - bodyPartFileNotReachable: The file at the `fileURL` provided was not reachable. + /// - bodyPartFileNotReachableWithError: Attempting to check the reachability of the `fileURL` provided threw + /// an error. + /// - bodyPartFileIsDirectory: The file at the `fileURL` provided is actually a directory. + /// - bodyPartFileSizeNotAvailable: The size of the file at the `fileURL` provided was not returned by + /// the system. + /// - bodyPartFileSizeQueryFailedWithError: The attempt to find the size of the file at the `fileURL` provided + /// threw an error. + /// - bodyPartInputStreamCreationFailed: An `InputStream` could not be created for the provided `fileURL`. + /// - outputStreamCreationFailed: An `OutputStream` could not be created when attempting to write the + /// encoded data to disk. + /// - outputStreamFileAlreadyExists: The encoded body data could not be writtent disk because a file + /// already exists at the provided `fileURL`. + /// - outputStreamURLInvalid: The `fileURL` provided for writing the encoded body data to disk is + /// not a file URL. + /// - outputStreamWriteFailed: The attempt to write the encoded body data to disk failed with an + /// underlying error. + /// - inputStreamReadFailed: The attempt to read an encoded body part `InputStream` failed with + /// underlying system error. + public enum MultipartEncodingFailureReason { + case bodyPartURLInvalid(url: URL) + case bodyPartFilenameInvalid(in: URL) + case bodyPartFileNotReachable(at: URL) + case bodyPartFileNotReachableWithError(atURL: URL, error: Error) + case bodyPartFileIsDirectory(at: URL) + case bodyPartFileSizeNotAvailable(at: URL) + case bodyPartFileSizeQueryFailedWithError(forURL: URL, error: Error) + case bodyPartInputStreamCreationFailed(for: URL) + + case outputStreamCreationFailed(for: URL) + case outputStreamFileAlreadyExists(at: URL) + case outputStreamURLInvalid(url: URL) + case outputStreamWriteFailed(error: Error) + + case inputStreamReadFailed(error: Error) + } + + /// The underlying reason the response validation error occurred. + /// + /// - dataFileNil: The data file containing the server response did not exist. + /// - dataFileReadFailed: The data file containing the server response could not be read. + /// - missingContentType: The response did not contain a `Content-Type` and the `acceptableContentTypes` + /// provided did not contain wildcard type. + /// - unacceptableContentType: The response `Content-Type` did not match any type in the provided + /// `acceptableContentTypes`. + /// - unacceptableStatusCode: The response status code was not acceptable. + public enum ResponseValidationFailureReason { + case dataFileNil + case dataFileReadFailed(at: URL) + case missingContentType(acceptableContentTypes: [String]) + case unacceptableContentType(acceptableContentTypes: [String], responseContentType: String) + case unacceptableStatusCode(code: Int) + } + + /// The underlying reason the response serialization error occurred. + /// + /// - inputDataNil: The server response contained no data. + /// - inputDataNilOrZeroLength: The server response contained no data or the data was zero length. + /// - inputFileNil: The file containing the server response did not exist. + /// - inputFileReadFailed: The file containing the server response could not be read. + /// - stringSerializationFailed: String serialization failed using the provided `String.Encoding`. + /// - jsonSerializationFailed: JSON serialization failed with an underlying system error. + /// - propertyListSerializationFailed: Property list serialization failed with an underlying system error. + public enum ResponseSerializationFailureReason { + case inputDataNil + case inputDataNilOrZeroLength + case inputFileNil + case inputFileReadFailed(at: URL) + case stringSerializationFailed(encoding: String.Encoding) + case jsonSerializationFailed(error: Error) + case propertyListSerializationFailed(error: Error) + } + + case invalidURL(url: URLConvertible) + case parameterEncodingFailed(reason: ParameterEncodingFailureReason) + case multipartEncodingFailed(reason: MultipartEncodingFailureReason) + case responseValidationFailed(reason: ResponseValidationFailureReason) + case responseSerializationFailed(reason: ResponseSerializationFailureReason) +} + +// MARK: - Adapt Error + +struct AdaptError: Error { + let error: Error +} + +extension Error { + var underlyingAdaptError: Error? { return (self as? AdaptError)?.error } +} + +// MARK: - Error Booleans + +extension AFError { + /// Returns whether the AFError is an invalid URL error. + public var isInvalidURLError: Bool { + if case .invalidURL = self { return true } + return false + } + + /// Returns whether the AFError is a parameter encoding error. When `true`, the `underlyingError` property will + /// contain the associated value. + public var isParameterEncodingError: Bool { + if case .parameterEncodingFailed = self { return true } + return false + } + + /// Returns whether the AFError is a multipart encoding error. When `true`, the `url` and `underlyingError` properties + /// will contain the associated values. + public var isMultipartEncodingError: Bool { + if case .multipartEncodingFailed = self { return true } + return false + } + + /// Returns whether the `AFError` is a response validation error. When `true`, the `acceptableContentTypes`, + /// `responseContentType`, and `responseCode` properties will contain the associated values. + public var isResponseValidationError: Bool { + if case .responseValidationFailed = self { return true } + return false + } + + /// Returns whether the `AFError` is a response serialization error. When `true`, the `failedStringEncoding` and + /// `underlyingError` properties will contain the associated values. + public var isResponseSerializationError: Bool { + if case .responseSerializationFailed = self { return true } + return false + } +} + +// MARK: - Convenience Properties + +extension AFError { + /// The `URLConvertible` associated with the error. + public var urlConvertible: URLConvertible? { + switch self { + case .invalidURL(let url): + return url + default: + return nil + } + } + + /// The `URL` associated with the error. + public var url: URL? { + switch self { + case .multipartEncodingFailed(let reason): + return reason.url + default: + return nil + } + } + + /// The `Error` returned by a system framework associated with a `.parameterEncodingFailed`, + /// `.multipartEncodingFailed` or `.responseSerializationFailed` error. + public var underlyingError: Error? { + switch self { + case .parameterEncodingFailed(let reason): + return reason.underlyingError + case .multipartEncodingFailed(let reason): + return reason.underlyingError + case .responseSerializationFailed(let reason): + return reason.underlyingError + default: + return nil + } + } + + /// The acceptable `Content-Type`s of a `.responseValidationFailed` error. + public var acceptableContentTypes: [String]? { + switch self { + case .responseValidationFailed(let reason): + return reason.acceptableContentTypes + default: + return nil + } + } + + /// The response `Content-Type` of a `.responseValidationFailed` error. + public var responseContentType: String? { + switch self { + case .responseValidationFailed(let reason): + return reason.responseContentType + default: + return nil + } + } + + /// The response code of a `.responseValidationFailed` error. + public var responseCode: Int? { + switch self { + case .responseValidationFailed(let reason): + return reason.responseCode + default: + return nil + } + } + + /// The `String.Encoding` associated with a failed `.stringResponse()` call. + public var failedStringEncoding: String.Encoding? { + switch self { + case .responseSerializationFailed(let reason): + return reason.failedStringEncoding + default: + return nil + } + } +} + +extension AFError.ParameterEncodingFailureReason { + var underlyingError: Error? { + switch self { + case .jsonEncodingFailed(let error), .propertyListEncodingFailed(let error): + return error + default: + return nil + } + } +} + +extension AFError.MultipartEncodingFailureReason { + var url: URL? { + switch self { + case .bodyPartURLInvalid(let url), .bodyPartFilenameInvalid(let url), .bodyPartFileNotReachable(let url), + .bodyPartFileIsDirectory(let url), .bodyPartFileSizeNotAvailable(let url), + .bodyPartInputStreamCreationFailed(let url), .outputStreamCreationFailed(let url), + .outputStreamFileAlreadyExists(let url), .outputStreamURLInvalid(let url), + .bodyPartFileNotReachableWithError(let url, _), .bodyPartFileSizeQueryFailedWithError(let url, _): + return url + default: + return nil + } + } + + var underlyingError: Error? { + switch self { + case .bodyPartFileNotReachableWithError(_, let error), .bodyPartFileSizeQueryFailedWithError(_, let error), + .outputStreamWriteFailed(let error), .inputStreamReadFailed(let error): + return error + default: + return nil + } + } +} + +extension AFError.ResponseValidationFailureReason { + var acceptableContentTypes: [String]? { + switch self { + case .missingContentType(let types), .unacceptableContentType(let types, _): + return types + default: + return nil + } + } + + var responseContentType: String? { + switch self { + case .unacceptableContentType(_, let responseType): + return responseType + default: + return nil + } + } + + var responseCode: Int? { + switch self { + case .unacceptableStatusCode(let code): + return code + default: + return nil + } + } +} + +extension AFError.ResponseSerializationFailureReason { + var failedStringEncoding: String.Encoding? { + switch self { + case .stringSerializationFailed(let encoding): + return encoding + default: + return nil + } + } + + var underlyingError: Error? { + switch self { + case .jsonSerializationFailed(let error), .propertyListSerializationFailed(let error): + return error + default: + return nil + } + } +} + +// MARK: - Error Descriptions + +extension AFError: LocalizedError { + public var errorDescription: String? { + switch self { + case .invalidURL(let url): + return "URL is not valid: \(url)" + case .parameterEncodingFailed(let reason): + return reason.localizedDescription + case .multipartEncodingFailed(let reason): + return reason.localizedDescription + case .responseValidationFailed(let reason): + return reason.localizedDescription + case .responseSerializationFailed(let reason): + return reason.localizedDescription + } + } +} + +extension AFError.ParameterEncodingFailureReason { + var localizedDescription: String { + switch self { + case .missingURL: + return "URL request to encode was missing a URL" + case .jsonEncodingFailed(let error): + return "JSON could not be encoded because of error:\n\(error.localizedDescription)" + case .propertyListEncodingFailed(let error): + return "PropertyList could not be encoded because of error:\n\(error.localizedDescription)" + } + } +} + +extension AFError.MultipartEncodingFailureReason { + var localizedDescription: String { + switch self { + case .bodyPartURLInvalid(let url): + return "The URL provided is not a file URL: \(url)" + case .bodyPartFilenameInvalid(let url): + return "The URL provided does not have a valid filename: \(url)" + case .bodyPartFileNotReachable(let url): + return "The URL provided is not reachable: \(url)" + case .bodyPartFileNotReachableWithError(let url, let error): + return ( + "The system returned an error while checking the provided URL for " + + "reachability.\nURL: \(url)\nError: \(error)" + ) + case .bodyPartFileIsDirectory(let url): + return "The URL provided is a directory: \(url)" + case .bodyPartFileSizeNotAvailable(let url): + return "Could not fetch the file size from the provided URL: \(url)" + case .bodyPartFileSizeQueryFailedWithError(let url, let error): + return ( + "The system returned an error while attempting to fetch the file size from the " + + "provided URL.\nURL: \(url)\nError: \(error)" + ) + case .bodyPartInputStreamCreationFailed(let url): + return "Failed to create an InputStream for the provided URL: \(url)" + case .outputStreamCreationFailed(let url): + return "Failed to create an OutputStream for URL: \(url)" + case .outputStreamFileAlreadyExists(let url): + return "A file already exists at the provided URL: \(url)" + case .outputStreamURLInvalid(let url): + return "The provided OutputStream URL is invalid: \(url)" + case .outputStreamWriteFailed(let error): + return "OutputStream write failed with error: \(error)" + case .inputStreamReadFailed(let error): + return "InputStream read failed with error: \(error)" + } + } +} + +extension AFError.ResponseSerializationFailureReason { + var localizedDescription: String { + switch self { + case .inputDataNil: + return "Response could not be serialized, input data was nil." + case .inputDataNilOrZeroLength: + return "Response could not be serialized, input data was nil or zero length." + case .inputFileNil: + return "Response could not be serialized, input file was nil." + case .inputFileReadFailed(let url): + return "Response could not be serialized, input file could not be read: \(url)." + case .stringSerializationFailed(let encoding): + return "String could not be serialized with encoding: \(encoding)." + case .jsonSerializationFailed(let error): + return "JSON could not be serialized because of error:\n\(error.localizedDescription)" + case .propertyListSerializationFailed(let error): + return "PropertyList could not be serialized because of error:\n\(error.localizedDescription)" + } + } +} + +extension AFError.ResponseValidationFailureReason { + var localizedDescription: String { + switch self { + case .dataFileNil: + return "Response could not be validated, data file was nil." + case .dataFileReadFailed(let url): + return "Response could not be validated, data file could not be read: \(url)." + case .missingContentType(let types): + return ( + "Response Content-Type was missing and acceptable content types " + + "(\(types.joined(separator: ","))) do not match \"*/*\"." + ) + case .unacceptableContentType(let acceptableTypes, let responseType): + return ( + "Response Content-Type \"\(responseType)\" does not match any acceptable types: " + + "\(acceptableTypes.joined(separator: ","))." + ) + case .unacceptableStatusCode(let code): + return "Response status code was unacceptable: \(code)." + } + } +} diff --git a/Pods/Alamofire/Source/Alamofire.swift b/Pods/Alamofire/Source/Alamofire.swift new file mode 100644 index 0000000..2fcc05c --- /dev/null +++ b/Pods/Alamofire/Source/Alamofire.swift @@ -0,0 +1,465 @@ +// +// Alamofire.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// Types adopting the `URLConvertible` protocol can be used to construct URLs, which are then used to construct +/// URL requests. +public protocol URLConvertible { + /// Returns a URL that conforms to RFC 2396 or throws an `Error`. + /// + /// - throws: An `Error` if the type cannot be converted to a `URL`. + /// + /// - returns: A URL or throws an `Error`. + func asURL() throws -> URL +} + +extension String: URLConvertible { + /// Returns a URL if `self` represents a valid URL string that conforms to RFC 2396 or throws an `AFError`. + /// + /// - throws: An `AFError.invalidURL` if `self` is not a valid URL string. + /// + /// - returns: A URL or throws an `AFError`. + public func asURL() throws -> URL { + guard let url = URL(string: self) else { throw AFError.invalidURL(url: self) } + return url + } +} + +extension URL: URLConvertible { + /// Returns self. + public func asURL() throws -> URL { return self } +} + +extension URLComponents: URLConvertible { + /// Returns a URL if `url` is not nil, otherwise throws an `Error`. + /// + /// - throws: An `AFError.invalidURL` if `url` is `nil`. + /// + /// - returns: A URL or throws an `AFError`. + public func asURL() throws -> URL { + guard let url = url else { throw AFError.invalidURL(url: self) } + return url + } +} + +// MARK: - + +/// Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests. +public protocol URLRequestConvertible { + /// Returns a URL request or throws if an `Error` was encountered. + /// + /// - throws: An `Error` if the underlying `URLRequest` is `nil`. + /// + /// - returns: A URL request. + func asURLRequest() throws -> URLRequest +} + +extension URLRequestConvertible { + /// The URL request. + public var urlRequest: URLRequest? { return try? asURLRequest() } +} + +extension URLRequest: URLRequestConvertible { + /// Returns a URL request or throws if an `Error` was encountered. + public func asURLRequest() throws -> URLRequest { return self } +} + +// MARK: - + +extension URLRequest { + /// Creates an instance with the specified `method`, `urlString` and `headers`. + /// + /// - parameter url: The URL. + /// - parameter method: The HTTP method. + /// - parameter headers: The HTTP headers. `nil` by default. + /// + /// - returns: The new `URLRequest` instance. + public init(url: URLConvertible, method: HTTPMethod, headers: HTTPHeaders? = nil) throws { + let url = try url.asURL() + + self.init(url: url) + + httpMethod = method.rawValue + + if let headers = headers { + for (headerField, headerValue) in headers { + setValue(headerValue, forHTTPHeaderField: headerField) + } + } + } + + func adapt(using adapter: RequestAdapter?) throws -> URLRequest { + guard let adapter = adapter else { return self } + return try adapter.adapt(self) + } +} + +// MARK: - Data Request + +/// Creates a `DataRequest` using the default `SessionManager` to retrieve the contents of the specified `url`, +/// `method`, `parameters`, `encoding` and `headers`. +/// +/// - parameter url: The URL. +/// - parameter method: The HTTP method. `.get` by default. +/// - parameter parameters: The parameters. `nil` by default. +/// - parameter encoding: The parameter encoding. `URLEncoding.default` by default. +/// - parameter headers: The HTTP headers. `nil` by default. +/// +/// - returns: The created `DataRequest`. +@discardableResult +public func request( + _ url: URLConvertible, + method: HTTPMethod = .get, + parameters: Parameters? = nil, + encoding: ParameterEncoding = URLEncoding.default, + headers: HTTPHeaders? = nil) + -> DataRequest +{ + return SessionManager.default.request( + url, + method: method, + parameters: parameters, + encoding: encoding, + headers: headers + ) +} + +/// Creates a `DataRequest` using the default `SessionManager` to retrieve the contents of a URL based on the +/// specified `urlRequest`. +/// +/// - parameter urlRequest: The URL request +/// +/// - returns: The created `DataRequest`. +@discardableResult +public func request(_ urlRequest: URLRequestConvertible) -> DataRequest { + return SessionManager.default.request(urlRequest) +} + +// MARK: - Download Request + +// MARK: URL Request + +/// Creates a `DownloadRequest` using the default `SessionManager` to retrieve the contents of the specified `url`, +/// `method`, `parameters`, `encoding`, `headers` and save them to the `destination`. +/// +/// If `destination` is not specified, the contents will remain in the temporary location determined by the +/// underlying URL session. +/// +/// - parameter url: The URL. +/// - parameter method: The HTTP method. `.get` by default. +/// - parameter parameters: The parameters. `nil` by default. +/// - parameter encoding: The parameter encoding. `URLEncoding.default` by default. +/// - parameter headers: The HTTP headers. `nil` by default. +/// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. +/// +/// - returns: The created `DownloadRequest`. +@discardableResult +public func download( + _ url: URLConvertible, + method: HTTPMethod = .get, + parameters: Parameters? = nil, + encoding: ParameterEncoding = URLEncoding.default, + headers: HTTPHeaders? = nil, + to destination: DownloadRequest.DownloadFileDestination? = nil) + -> DownloadRequest +{ + return SessionManager.default.download( + url, + method: method, + parameters: parameters, + encoding: encoding, + headers: headers, + to: destination + ) +} + +/// Creates a `DownloadRequest` using the default `SessionManager` to retrieve the contents of a URL based on the +/// specified `urlRequest` and save them to the `destination`. +/// +/// If `destination` is not specified, the contents will remain in the temporary location determined by the +/// underlying URL session. +/// +/// - parameter urlRequest: The URL request. +/// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. +/// +/// - returns: The created `DownloadRequest`. +@discardableResult +public func download( + _ urlRequest: URLRequestConvertible, + to destination: DownloadRequest.DownloadFileDestination? = nil) + -> DownloadRequest +{ + return SessionManager.default.download(urlRequest, to: destination) +} + +// MARK: Resume Data + +/// Creates a `DownloadRequest` using the default `SessionManager` from the `resumeData` produced from a +/// previous request cancellation to retrieve the contents of the original request and save them to the `destination`. +/// +/// If `destination` is not specified, the contents will remain in the temporary location determined by the +/// underlying URL session. +/// +/// On the latest release of all the Apple platforms (iOS 10, macOS 10.12, tvOS 10, watchOS 3), `resumeData` is broken +/// on background URL session configurations. There's an underlying bug in the `resumeData` generation logic where the +/// data is written incorrectly and will always fail to resume the download. For more information about the bug and +/// possible workarounds, please refer to the following Stack Overflow post: +/// +/// - http://stackoverflow.com/a/39347461/1342462 +/// +/// - parameter resumeData: The resume data. This is an opaque data blob produced by `URLSessionDownloadTask` +/// when a task is cancelled. See `URLSession -downloadTask(withResumeData:)` for additional +/// information. +/// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. +/// +/// - returns: The created `DownloadRequest`. +@discardableResult +public func download( + resumingWith resumeData: Data, + to destination: DownloadRequest.DownloadFileDestination? = nil) + -> DownloadRequest +{ + return SessionManager.default.download(resumingWith: resumeData, to: destination) +} + +// MARK: - Upload Request + +// MARK: File + +/// Creates an `UploadRequest` using the default `SessionManager` from the specified `url`, `method` and `headers` +/// for uploading the `file`. +/// +/// - parameter file: The file to upload. +/// - parameter url: The URL. +/// - parameter method: The HTTP method. `.post` by default. +/// - parameter headers: The HTTP headers. `nil` by default. +/// +/// - returns: The created `UploadRequest`. +@discardableResult +public func upload( + _ fileURL: URL, + to url: URLConvertible, + method: HTTPMethod = .post, + headers: HTTPHeaders? = nil) + -> UploadRequest +{ + return SessionManager.default.upload(fileURL, to: url, method: method, headers: headers) +} + +/// Creates a `UploadRequest` using the default `SessionManager` from the specified `urlRequest` for +/// uploading the `file`. +/// +/// - parameter file: The file to upload. +/// - parameter urlRequest: The URL request. +/// +/// - returns: The created `UploadRequest`. +@discardableResult +public func upload(_ fileURL: URL, with urlRequest: URLRequestConvertible) -> UploadRequest { + return SessionManager.default.upload(fileURL, with: urlRequest) +} + +// MARK: Data + +/// Creates an `UploadRequest` using the default `SessionManager` from the specified `url`, `method` and `headers` +/// for uploading the `data`. +/// +/// - parameter data: The data to upload. +/// - parameter url: The URL. +/// - parameter method: The HTTP method. `.post` by default. +/// - parameter headers: The HTTP headers. `nil` by default. +/// +/// - returns: The created `UploadRequest`. +@discardableResult +public func upload( + _ data: Data, + to url: URLConvertible, + method: HTTPMethod = .post, + headers: HTTPHeaders? = nil) + -> UploadRequest +{ + return SessionManager.default.upload(data, to: url, method: method, headers: headers) +} + +/// Creates an `UploadRequest` using the default `SessionManager` from the specified `urlRequest` for +/// uploading the `data`. +/// +/// - parameter data: The data to upload. +/// - parameter urlRequest: The URL request. +/// +/// - returns: The created `UploadRequest`. +@discardableResult +public func upload(_ data: Data, with urlRequest: URLRequestConvertible) -> UploadRequest { + return SessionManager.default.upload(data, with: urlRequest) +} + +// MARK: InputStream + +/// Creates an `UploadRequest` using the default `SessionManager` from the specified `url`, `method` and `headers` +/// for uploading the `stream`. +/// +/// - parameter stream: The stream to upload. +/// - parameter url: The URL. +/// - parameter method: The HTTP method. `.post` by default. +/// - parameter headers: The HTTP headers. `nil` by default. +/// +/// - returns: The created `UploadRequest`. +@discardableResult +public func upload( + _ stream: InputStream, + to url: URLConvertible, + method: HTTPMethod = .post, + headers: HTTPHeaders? = nil) + -> UploadRequest +{ + return SessionManager.default.upload(stream, to: url, method: method, headers: headers) +} + +/// Creates an `UploadRequest` using the default `SessionManager` from the specified `urlRequest` for +/// uploading the `stream`. +/// +/// - parameter urlRequest: The URL request. +/// - parameter stream: The stream to upload. +/// +/// - returns: The created `UploadRequest`. +@discardableResult +public func upload(_ stream: InputStream, with urlRequest: URLRequestConvertible) -> UploadRequest { + return SessionManager.default.upload(stream, with: urlRequest) +} + +// MARK: MultipartFormData + +/// Encodes `multipartFormData` using `encodingMemoryThreshold` with the default `SessionManager` and calls +/// `encodingCompletion` with new `UploadRequest` using the `url`, `method` and `headers`. +/// +/// It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative +/// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most +/// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to +/// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory +/// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be +/// used for larger payloads such as video content. +/// +/// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory +/// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, +/// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk +/// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding +/// technique was used. +/// +/// - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. +/// - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. +/// `multipartFormDataEncodingMemoryThreshold` by default. +/// - parameter url: The URL. +/// - parameter method: The HTTP method. `.post` by default. +/// - parameter headers: The HTTP headers. `nil` by default. +/// - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. +public func upload( + multipartFormData: @escaping (MultipartFormData) -> Void, + usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold, + to url: URLConvertible, + method: HTTPMethod = .post, + headers: HTTPHeaders? = nil, + encodingCompletion: ((SessionManager.MultipartFormDataEncodingResult) -> Void)?) +{ + return SessionManager.default.upload( + multipartFormData: multipartFormData, + usingThreshold: encodingMemoryThreshold, + to: url, + method: method, + headers: headers, + encodingCompletion: encodingCompletion + ) +} + +/// Encodes `multipartFormData` using `encodingMemoryThreshold` and the default `SessionManager` and +/// calls `encodingCompletion` with new `UploadRequest` using the `urlRequest`. +/// +/// It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative +/// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most +/// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to +/// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory +/// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be +/// used for larger payloads such as video content. +/// +/// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory +/// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, +/// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk +/// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding +/// technique was used. +/// +/// - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. +/// - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. +/// `multipartFormDataEncodingMemoryThreshold` by default. +/// - parameter urlRequest: The URL request. +/// - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. +public func upload( + multipartFormData: @escaping (MultipartFormData) -> Void, + usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold, + with urlRequest: URLRequestConvertible, + encodingCompletion: ((SessionManager.MultipartFormDataEncodingResult) -> Void)?) +{ + return SessionManager.default.upload( + multipartFormData: multipartFormData, + usingThreshold: encodingMemoryThreshold, + with: urlRequest, + encodingCompletion: encodingCompletion + ) +} + +#if !os(watchOS) + +// MARK: - Stream Request + +// MARK: Hostname and Port + +/// Creates a `StreamRequest` using the default `SessionManager` for bidirectional streaming with the `hostname` +/// and `port`. +/// +/// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. +/// +/// - parameter hostName: The hostname of the server to connect to. +/// - parameter port: The port of the server to connect to. +/// +/// - returns: The created `StreamRequest`. +@discardableResult +@available(iOS 9.0, macOS 10.11, tvOS 9.0, *) +public func stream(withHostName hostName: String, port: Int) -> StreamRequest { + return SessionManager.default.stream(withHostName: hostName, port: port) +} + +// MARK: NetService + +/// Creates a `StreamRequest` using the default `SessionManager` for bidirectional streaming with the `netService`. +/// +/// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. +/// +/// - parameter netService: The net service used to identify the endpoint. +/// +/// - returns: The created `StreamRequest`. +@discardableResult +@available(iOS 9.0, macOS 10.11, tvOS 9.0, *) +public func stream(with netService: NetService) -> StreamRequest { + return SessionManager.default.stream(with: netService) +} + +#endif diff --git a/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift b/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift new file mode 100644 index 0000000..dea3ebc --- /dev/null +++ b/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift @@ -0,0 +1,37 @@ +// +// DispatchQueue+Alamofire.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Dispatch +import Foundation + +extension DispatchQueue { + static var userInteractive: DispatchQueue { return DispatchQueue.global(qos: .userInteractive) } + static var userInitiated: DispatchQueue { return DispatchQueue.global(qos: .userInitiated) } + static var utility: DispatchQueue { return DispatchQueue.global(qos: .utility) } + static var background: DispatchQueue { return DispatchQueue.global(qos: .background) } + + func after(_ delay: TimeInterval, execute closure: @escaping () -> Void) { + asyncAfter(deadline: .now() + delay, execute: closure) + } +} diff --git a/Pods/Alamofire/Source/MultipartFormData.swift b/Pods/Alamofire/Source/MultipartFormData.swift new file mode 100644 index 0000000..057e68b --- /dev/null +++ b/Pods/Alamofire/Source/MultipartFormData.swift @@ -0,0 +1,580 @@ +// +// MultipartFormData.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +#if os(iOS) || os(watchOS) || os(tvOS) +import MobileCoreServices +#elseif os(macOS) +import CoreServices +#endif + +/// Constructs `multipart/form-data` for uploads within an HTTP or HTTPS body. There are currently two ways to encode +/// multipart form data. The first way is to encode the data directly in memory. This is very efficient, but can lead +/// to memory issues if the dataset is too large. The second way is designed for larger datasets and will write all the +/// data to a single file on disk with all the proper boundary segmentation. The second approach MUST be used for +/// larger datasets such as video content, otherwise your app may run out of memory when trying to encode the dataset. +/// +/// For more information on `multipart/form-data` in general, please refer to the RFC-2388 and RFC-2045 specs as well +/// and the w3 form documentation. +/// +/// - https://www.ietf.org/rfc/rfc2388.txt +/// - https://www.ietf.org/rfc/rfc2045.txt +/// - https://www.w3.org/TR/html401/interact/forms.html#h-17.13 +open class MultipartFormData { + + // MARK: - Helper Types + + struct EncodingCharacters { + static let crlf = "\r\n" + } + + struct BoundaryGenerator { + enum BoundaryType { + case initial, encapsulated, final + } + + static func randomBoundary() -> String { + return String(format: "alamofire.boundary.%08x%08x", arc4random(), arc4random()) + } + + static func boundaryData(forBoundaryType boundaryType: BoundaryType, boundary: String) -> Data { + let boundaryText: String + + switch boundaryType { + case .initial: + boundaryText = "--\(boundary)\(EncodingCharacters.crlf)" + case .encapsulated: + boundaryText = "\(EncodingCharacters.crlf)--\(boundary)\(EncodingCharacters.crlf)" + case .final: + boundaryText = "\(EncodingCharacters.crlf)--\(boundary)--\(EncodingCharacters.crlf)" + } + + return boundaryText.data(using: String.Encoding.utf8, allowLossyConversion: false)! + } + } + + class BodyPart { + let headers: HTTPHeaders + let bodyStream: InputStream + let bodyContentLength: UInt64 + var hasInitialBoundary = false + var hasFinalBoundary = false + + init(headers: HTTPHeaders, bodyStream: InputStream, bodyContentLength: UInt64) { + self.headers = headers + self.bodyStream = bodyStream + self.bodyContentLength = bodyContentLength + } + } + + // MARK: - Properties + + /// The `Content-Type` header value containing the boundary used to generate the `multipart/form-data`. + open lazy var contentType: String = "multipart/form-data; boundary=\(self.boundary)" + + /// The content length of all body parts used to generate the `multipart/form-data` not including the boundaries. + public var contentLength: UInt64 { return bodyParts.reduce(0) { $0 + $1.bodyContentLength } } + + /// The boundary used to separate the body parts in the encoded form data. + public let boundary: String + + private var bodyParts: [BodyPart] + private var bodyPartError: AFError? + private let streamBufferSize: Int + + // MARK: - Lifecycle + + /// Creates a multipart form data object. + /// + /// - returns: The multipart form data object. + public init() { + self.boundary = BoundaryGenerator.randomBoundary() + self.bodyParts = [] + + /// + /// The optimal read/write buffer size in bytes for input and output streams is 1024 (1KB). For more + /// information, please refer to the following article: + /// - https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html + /// + + self.streamBufferSize = 1024 + } + + // MARK: - Body Parts + + /// Creates a body part from the data and appends it to the multipart form data object. + /// + /// The body part data will be encoded using the following format: + /// + /// - `Content-Disposition: form-data; name=#{name}` (HTTP Header) + /// - Encoded data + /// - Multipart form boundary + /// + /// - parameter data: The data to encode into the multipart form data. + /// - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header. + public func append(_ data: Data, withName name: String) { + let headers = contentHeaders(withName: name) + let stream = InputStream(data: data) + let length = UInt64(data.count) + + append(stream, withLength: length, headers: headers) + } + + /// Creates a body part from the data and appends it to the multipart form data object. + /// + /// The body part data will be encoded using the following format: + /// + /// - `Content-Disposition: form-data; name=#{name}` (HTTP Header) + /// - `Content-Type: #{generated mimeType}` (HTTP Header) + /// - Encoded data + /// - Multipart form boundary + /// + /// - parameter data: The data to encode into the multipart form data. + /// - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header. + /// - parameter mimeType: The MIME type to associate with the data content type in the `Content-Type` HTTP header. + public func append(_ data: Data, withName name: String, mimeType: String) { + let headers = contentHeaders(withName: name, mimeType: mimeType) + let stream = InputStream(data: data) + let length = UInt64(data.count) + + append(stream, withLength: length, headers: headers) + } + + /// Creates a body part from the data and appends it to the multipart form data object. + /// + /// The body part data will be encoded using the following format: + /// + /// - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header) + /// - `Content-Type: #{mimeType}` (HTTP Header) + /// - Encoded file data + /// - Multipart form boundary + /// + /// - parameter data: The data to encode into the multipart form data. + /// - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header. + /// - parameter fileName: The filename to associate with the data in the `Content-Disposition` HTTP header. + /// - parameter mimeType: The MIME type to associate with the data in the `Content-Type` HTTP header. + public func append(_ data: Data, withName name: String, fileName: String, mimeType: String) { + let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType) + let stream = InputStream(data: data) + let length = UInt64(data.count) + + append(stream, withLength: length, headers: headers) + } + + /// Creates a body part from the file and appends it to the multipart form data object. + /// + /// The body part data will be encoded using the following format: + /// + /// - `Content-Disposition: form-data; name=#{name}; filename=#{generated filename}` (HTTP Header) + /// - `Content-Type: #{generated mimeType}` (HTTP Header) + /// - Encoded file data + /// - Multipart form boundary + /// + /// The filename in the `Content-Disposition` HTTP header is generated from the last path component of the + /// `fileURL`. The `Content-Type` HTTP header MIME type is generated by mapping the `fileURL` extension to the + /// system associated MIME type. + /// + /// - parameter fileURL: The URL of the file whose content will be encoded into the multipart form data. + /// - parameter name: The name to associate with the file content in the `Content-Disposition` HTTP header. + public func append(_ fileURL: URL, withName name: String) { + let fileName = fileURL.lastPathComponent + let pathExtension = fileURL.pathExtension + + if !fileName.isEmpty && !pathExtension.isEmpty { + let mime = mimeType(forPathExtension: pathExtension) + append(fileURL, withName: name, fileName: fileName, mimeType: mime) + } else { + setBodyPartError(withReason: .bodyPartFilenameInvalid(in: fileURL)) + } + } + + /// Creates a body part from the file and appends it to the multipart form data object. + /// + /// The body part data will be encoded using the following format: + /// + /// - Content-Disposition: form-data; name=#{name}; filename=#{filename} (HTTP Header) + /// - Content-Type: #{mimeType} (HTTP Header) + /// - Encoded file data + /// - Multipart form boundary + /// + /// - parameter fileURL: The URL of the file whose content will be encoded into the multipart form data. + /// - parameter name: The name to associate with the file content in the `Content-Disposition` HTTP header. + /// - parameter fileName: The filename to associate with the file content in the `Content-Disposition` HTTP header. + /// - parameter mimeType: The MIME type to associate with the file content in the `Content-Type` HTTP header. + public func append(_ fileURL: URL, withName name: String, fileName: String, mimeType: String) { + let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType) + + //============================================================ + // Check 1 - is file URL? + //============================================================ + + guard fileURL.isFileURL else { + setBodyPartError(withReason: .bodyPartURLInvalid(url: fileURL)) + return + } + + //============================================================ + // Check 2 - is file URL reachable? + //============================================================ + + do { + let isReachable = try fileURL.checkPromisedItemIsReachable() + guard isReachable else { + setBodyPartError(withReason: .bodyPartFileNotReachable(at: fileURL)) + return + } + } catch { + setBodyPartError(withReason: .bodyPartFileNotReachableWithError(atURL: fileURL, error: error)) + return + } + + //============================================================ + // Check 3 - is file URL a directory? + //============================================================ + + var isDirectory: ObjCBool = false + let path = fileURL.path + + guard FileManager.default.fileExists(atPath: path, isDirectory: &isDirectory) && !isDirectory.boolValue else { + setBodyPartError(withReason: .bodyPartFileIsDirectory(at: fileURL)) + return + } + + //============================================================ + // Check 4 - can the file size be extracted? + //============================================================ + + let bodyContentLength: UInt64 + + do { + guard let fileSize = try FileManager.default.attributesOfItem(atPath: path)[.size] as? NSNumber else { + setBodyPartError(withReason: .bodyPartFileSizeNotAvailable(at: fileURL)) + return + } + + bodyContentLength = fileSize.uint64Value + } + catch { + setBodyPartError(withReason: .bodyPartFileSizeQueryFailedWithError(forURL: fileURL, error: error)) + return + } + + //============================================================ + // Check 5 - can a stream be created from file URL? + //============================================================ + + guard let stream = InputStream(url: fileURL) else { + setBodyPartError(withReason: .bodyPartInputStreamCreationFailed(for: fileURL)) + return + } + + append(stream, withLength: bodyContentLength, headers: headers) + } + + /// Creates a body part from the stream and appends it to the multipart form data object. + /// + /// The body part data will be encoded using the following format: + /// + /// - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header) + /// - `Content-Type: #{mimeType}` (HTTP Header) + /// - Encoded stream data + /// - Multipart form boundary + /// + /// - parameter stream: The input stream to encode in the multipart form data. + /// - parameter length: The content length of the stream. + /// - parameter name: The name to associate with the stream content in the `Content-Disposition` HTTP header. + /// - parameter fileName: The filename to associate with the stream content in the `Content-Disposition` HTTP header. + /// - parameter mimeType: The MIME type to associate with the stream content in the `Content-Type` HTTP header. + public func append( + _ stream: InputStream, + withLength length: UInt64, + name: String, + fileName: String, + mimeType: String) + { + let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType) + append(stream, withLength: length, headers: headers) + } + + /// Creates a body part with the headers, stream and length and appends it to the multipart form data object. + /// + /// The body part data will be encoded using the following format: + /// + /// - HTTP headers + /// - Encoded stream data + /// - Multipart form boundary + /// + /// - parameter stream: The input stream to encode in the multipart form data. + /// - parameter length: The content length of the stream. + /// - parameter headers: The HTTP headers for the body part. + public func append(_ stream: InputStream, withLength length: UInt64, headers: HTTPHeaders) { + let bodyPart = BodyPart(headers: headers, bodyStream: stream, bodyContentLength: length) + bodyParts.append(bodyPart) + } + + // MARK: - Data Encoding + + /// Encodes all the appended body parts into a single `Data` value. + /// + /// It is important to note that this method will load all the appended body parts into memory all at the same + /// time. This method should only be used when the encoded data will have a small memory footprint. For large data + /// cases, please use the `writeEncodedDataToDisk(fileURL:completionHandler:)` method. + /// + /// - throws: An `AFError` if encoding encounters an error. + /// + /// - returns: The encoded `Data` if encoding is successful. + public func encode() throws -> Data { + if let bodyPartError = bodyPartError { + throw bodyPartError + } + + var encoded = Data() + + bodyParts.first?.hasInitialBoundary = true + bodyParts.last?.hasFinalBoundary = true + + for bodyPart in bodyParts { + let encodedData = try encode(bodyPart) + encoded.append(encodedData) + } + + return encoded + } + + /// Writes the appended body parts into the given file URL. + /// + /// This process is facilitated by reading and writing with input and output streams, respectively. Thus, + /// this approach is very memory efficient and should be used for large body part data. + /// + /// - parameter fileURL: The file URL to write the multipart form data into. + /// + /// - throws: An `AFError` if encoding encounters an error. + public func writeEncodedData(to fileURL: URL) throws { + if let bodyPartError = bodyPartError { + throw bodyPartError + } + + if FileManager.default.fileExists(atPath: fileURL.path) { + throw AFError.multipartEncodingFailed(reason: .outputStreamFileAlreadyExists(at: fileURL)) + } else if !fileURL.isFileURL { + throw AFError.multipartEncodingFailed(reason: .outputStreamURLInvalid(url: fileURL)) + } + + guard let outputStream = OutputStream(url: fileURL, append: false) else { + throw AFError.multipartEncodingFailed(reason: .outputStreamCreationFailed(for: fileURL)) + } + + outputStream.open() + defer { outputStream.close() } + + self.bodyParts.first?.hasInitialBoundary = true + self.bodyParts.last?.hasFinalBoundary = true + + for bodyPart in self.bodyParts { + try write(bodyPart, to: outputStream) + } + } + + // MARK: - Private - Body Part Encoding + + private func encode(_ bodyPart: BodyPart) throws -> Data { + var encoded = Data() + + let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData() + encoded.append(initialData) + + let headerData = encodeHeaders(for: bodyPart) + encoded.append(headerData) + + let bodyStreamData = try encodeBodyStream(for: bodyPart) + encoded.append(bodyStreamData) + + if bodyPart.hasFinalBoundary { + encoded.append(finalBoundaryData()) + } + + return encoded + } + + private func encodeHeaders(for bodyPart: BodyPart) -> Data { + var headerText = "" + + for (key, value) in bodyPart.headers { + headerText += "\(key): \(value)\(EncodingCharacters.crlf)" + } + headerText += EncodingCharacters.crlf + + return headerText.data(using: String.Encoding.utf8, allowLossyConversion: false)! + } + + private func encodeBodyStream(for bodyPart: BodyPart) throws -> Data { + let inputStream = bodyPart.bodyStream + inputStream.open() + defer { inputStream.close() } + + var encoded = Data() + + while inputStream.hasBytesAvailable { + var buffer = [UInt8](repeating: 0, count: streamBufferSize) + let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize) + + if let error = inputStream.streamError { + throw AFError.multipartEncodingFailed(reason: .inputStreamReadFailed(error: error)) + } + + if bytesRead > 0 { + encoded.append(buffer, count: bytesRead) + } else { + break + } + } + + return encoded + } + + // MARK: - Private - Writing Body Part to Output Stream + + private func write(_ bodyPart: BodyPart, to outputStream: OutputStream) throws { + try writeInitialBoundaryData(for: bodyPart, to: outputStream) + try writeHeaderData(for: bodyPart, to: outputStream) + try writeBodyStream(for: bodyPart, to: outputStream) + try writeFinalBoundaryData(for: bodyPart, to: outputStream) + } + + private func writeInitialBoundaryData(for bodyPart: BodyPart, to outputStream: OutputStream) throws { + let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData() + return try write(initialData, to: outputStream) + } + + private func writeHeaderData(for bodyPart: BodyPart, to outputStream: OutputStream) throws { + let headerData = encodeHeaders(for: bodyPart) + return try write(headerData, to: outputStream) + } + + private func writeBodyStream(for bodyPart: BodyPart, to outputStream: OutputStream) throws { + let inputStream = bodyPart.bodyStream + + inputStream.open() + defer { inputStream.close() } + + while inputStream.hasBytesAvailable { + var buffer = [UInt8](repeating: 0, count: streamBufferSize) + let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize) + + if let streamError = inputStream.streamError { + throw AFError.multipartEncodingFailed(reason: .inputStreamReadFailed(error: streamError)) + } + + if bytesRead > 0 { + if buffer.count != bytesRead { + buffer = Array(buffer[0.. 0, outputStream.hasSpaceAvailable { + let bytesWritten = outputStream.write(buffer, maxLength: bytesToWrite) + + if let error = outputStream.streamError { + throw AFError.multipartEncodingFailed(reason: .outputStreamWriteFailed(error: error)) + } + + bytesToWrite -= bytesWritten + + if bytesToWrite > 0 { + buffer = Array(buffer[bytesWritten.. String { + if + let id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(), + let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue() + { + return contentType as String + } + + return "application/octet-stream" + } + + // MARK: - Private - Content Headers + + private func contentHeaders(withName name: String, fileName: String? = nil, mimeType: String? = nil) -> [String: String] { + var disposition = "form-data; name=\"\(name)\"" + if let fileName = fileName { disposition += "; filename=\"\(fileName)\"" } + + var headers = ["Content-Disposition": disposition] + if let mimeType = mimeType { headers["Content-Type"] = mimeType } + + return headers + } + + // MARK: - Private - Boundary Encoding + + private func initialBoundaryData() -> Data { + return BoundaryGenerator.boundaryData(forBoundaryType: .initial, boundary: boundary) + } + + private func encapsulatedBoundaryData() -> Data { + return BoundaryGenerator.boundaryData(forBoundaryType: .encapsulated, boundary: boundary) + } + + private func finalBoundaryData() -> Data { + return BoundaryGenerator.boundaryData(forBoundaryType: .final, boundary: boundary) + } + + // MARK: - Private - Errors + + private func setBodyPartError(withReason reason: AFError.MultipartEncodingFailureReason) { + guard bodyPartError == nil else { return } + bodyPartError = AFError.multipartEncodingFailed(reason: reason) + } +} diff --git a/Pods/Alamofire/Source/NetworkReachabilityManager.swift b/Pods/Alamofire/Source/NetworkReachabilityManager.swift new file mode 100644 index 0000000..3ff2e7f --- /dev/null +++ b/Pods/Alamofire/Source/NetworkReachabilityManager.swift @@ -0,0 +1,233 @@ +// +// NetworkReachabilityManager.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#if !os(watchOS) + +import Foundation +import SystemConfiguration + +/// The `NetworkReachabilityManager` class listens for reachability changes of hosts and addresses for both WWAN and +/// WiFi network interfaces. +/// +/// Reachability can be used to determine background information about why a network operation failed, or to retry +/// network requests when a connection is established. It should not be used to prevent a user from initiating a network +/// request, as it's possible that an initial request may be required to establish reachability. +open class NetworkReachabilityManager { + /// Defines the various states of network reachability. + /// + /// - unknown: It is unknown whether the network is reachable. + /// - notReachable: The network is not reachable. + /// - reachable: The network is reachable. + public enum NetworkReachabilityStatus { + case unknown + case notReachable + case reachable(ConnectionType) + } + + /// Defines the various connection types detected by reachability flags. + /// + /// - ethernetOrWiFi: The connection type is either over Ethernet or WiFi. + /// - wwan: The connection type is a WWAN connection. + public enum ConnectionType { + case ethernetOrWiFi + case wwan + } + + /// A closure executed when the network reachability status changes. The closure takes a single argument: the + /// network reachability status. + public typealias Listener = (NetworkReachabilityStatus) -> Void + + // MARK: - Properties + + /// Whether the network is currently reachable. + open var isReachable: Bool { return isReachableOnWWAN || isReachableOnEthernetOrWiFi } + + /// Whether the network is currently reachable over the WWAN interface. + open var isReachableOnWWAN: Bool { return networkReachabilityStatus == .reachable(.wwan) } + + /// Whether the network is currently reachable over Ethernet or WiFi interface. + open var isReachableOnEthernetOrWiFi: Bool { return networkReachabilityStatus == .reachable(.ethernetOrWiFi) } + + /// The current network reachability status. + open var networkReachabilityStatus: NetworkReachabilityStatus { + guard let flags = self.flags else { return .unknown } + return networkReachabilityStatusForFlags(flags) + } + + /// The dispatch queue to execute the `listener` closure on. + open var listenerQueue: DispatchQueue = DispatchQueue.main + + /// A closure executed when the network reachability status changes. + open var listener: Listener? + + open var flags: SCNetworkReachabilityFlags? { + var flags = SCNetworkReachabilityFlags() + + if SCNetworkReachabilityGetFlags(reachability, &flags) { + return flags + } + + return nil + } + + private let reachability: SCNetworkReachability + open var previousFlags: SCNetworkReachabilityFlags + + // MARK: - Initialization + + /// Creates a `NetworkReachabilityManager` instance with the specified host. + /// + /// - parameter host: The host used to evaluate network reachability. + /// + /// - returns: The new `NetworkReachabilityManager` instance. + public convenience init?(host: String) { + guard let reachability = SCNetworkReachabilityCreateWithName(nil, host) else { return nil } + self.init(reachability: reachability) + } + + /// Creates a `NetworkReachabilityManager` instance that monitors the address 0.0.0.0. + /// + /// Reachability treats the 0.0.0.0 address as a special token that causes it to monitor the general routing + /// status of the device, both IPv4 and IPv6. + /// + /// - returns: The new `NetworkReachabilityManager` instance. + public convenience init?() { + var address = sockaddr_in() + address.sin_len = UInt8(MemoryLayout.size) + address.sin_family = sa_family_t(AF_INET) + + guard let reachability = withUnsafePointer(to: &address, { pointer in + return pointer.withMemoryRebound(to: sockaddr.self, capacity: MemoryLayout.size) { + return SCNetworkReachabilityCreateWithAddress(nil, $0) + } + }) else { return nil } + + self.init(reachability: reachability) + } + + private init(reachability: SCNetworkReachability) { + self.reachability = reachability + self.previousFlags = SCNetworkReachabilityFlags() + } + + deinit { + stopListening() + } + + // MARK: - Listening + + /// Starts listening for changes in network reachability status. + /// + /// - returns: `true` if listening was started successfully, `false` otherwise. + @discardableResult + open func startListening() -> Bool { + var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil) + context.info = Unmanaged.passUnretained(self).toOpaque() + + let callbackEnabled = SCNetworkReachabilitySetCallback( + reachability, + { (_, flags, info) in + let reachability = Unmanaged.fromOpaque(info!).takeUnretainedValue() + reachability.notifyListener(flags) + }, + &context + ) + + let queueEnabled = SCNetworkReachabilitySetDispatchQueue(reachability, listenerQueue) + + listenerQueue.async { + self.previousFlags = SCNetworkReachabilityFlags() + self.notifyListener(self.flags ?? SCNetworkReachabilityFlags()) + } + + return callbackEnabled && queueEnabled + } + + /// Stops listening for changes in network reachability status. + open func stopListening() { + SCNetworkReachabilitySetCallback(reachability, nil, nil) + SCNetworkReachabilitySetDispatchQueue(reachability, nil) + } + + // MARK: - Internal - Listener Notification + + func notifyListener(_ flags: SCNetworkReachabilityFlags) { + guard previousFlags != flags else { return } + previousFlags = flags + + listener?(networkReachabilityStatusForFlags(flags)) + } + + // MARK: - Internal - Network Reachability Status + + func networkReachabilityStatusForFlags(_ flags: SCNetworkReachabilityFlags) -> NetworkReachabilityStatus { + guard isNetworkReachable(with: flags) else { return .notReachable } + + var networkStatus: NetworkReachabilityStatus = .reachable(.ethernetOrWiFi) + + #if os(iOS) + if flags.contains(.isWWAN) { networkStatus = .reachable(.wwan) } + #endif + + return networkStatus + } + + func isNetworkReachable(with flags: SCNetworkReachabilityFlags) -> Bool { + let isReachable = flags.contains(.reachable) + let needsConnection = flags.contains(.connectionRequired) + let canConnectAutomatically = flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic) + let canConnectWithoutUserInteraction = canConnectAutomatically && !flags.contains(.interventionRequired) + + return isReachable && (!needsConnection || canConnectWithoutUserInteraction) + } +} + +// MARK: - + +extension NetworkReachabilityManager.NetworkReachabilityStatus: Equatable {} + +/// Returns whether the two network reachability status values are equal. +/// +/// - parameter lhs: The left-hand side value to compare. +/// - parameter rhs: The right-hand side value to compare. +/// +/// - returns: `true` if the two values are equal, `false` otherwise. +public func ==( + lhs: NetworkReachabilityManager.NetworkReachabilityStatus, + rhs: NetworkReachabilityManager.NetworkReachabilityStatus) + -> Bool +{ + switch (lhs, rhs) { + case (.unknown, .unknown): + return true + case (.notReachable, .notReachable): + return true + case let (.reachable(lhsConnectionType), .reachable(rhsConnectionType)): + return lhsConnectionType == rhsConnectionType + default: + return false + } +} + +#endif diff --git a/Pods/Alamofire/Source/Notifications.swift b/Pods/Alamofire/Source/Notifications.swift new file mode 100644 index 0000000..e1b6120 --- /dev/null +++ b/Pods/Alamofire/Source/Notifications.swift @@ -0,0 +1,55 @@ +// +// Notifications.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +extension Notification.Name { + /// Used as a namespace for all `URLSessionTask` related notifications. + public struct Task { + /// Posted when a `URLSessionTask` is resumed. The notification `object` contains the resumed `URLSessionTask`. + public static let DidResume = Notification.Name(rawValue: "org.alamofire.notification.name.task.didResume") + + /// Posted when a `URLSessionTask` is suspended. The notification `object` contains the suspended `URLSessionTask`. + public static let DidSuspend = Notification.Name(rawValue: "org.alamofire.notification.name.task.didSuspend") + + /// Posted when a `URLSessionTask` is cancelled. The notification `object` contains the cancelled `URLSessionTask`. + public static let DidCancel = Notification.Name(rawValue: "org.alamofire.notification.name.task.didCancel") + + /// Posted when a `URLSessionTask` is completed. The notification `object` contains the completed `URLSessionTask`. + public static let DidComplete = Notification.Name(rawValue: "org.alamofire.notification.name.task.didComplete") + } +} + +// MARK: - + +extension Notification { + /// Used as a namespace for all `Notification` user info dictionary keys. + public struct Key { + /// User info dictionary key representing the `URLSessionTask` associated with the notification. + public static let Task = "org.alamofire.notification.key.task" + + /// User info dictionary key representing the responseData associated with the notification. + public static let ResponseData = "org.alamofire.notification.key.responseData" + } +} diff --git a/Pods/Alamofire/Source/ParameterEncoding.swift b/Pods/Alamofire/Source/ParameterEncoding.swift new file mode 100644 index 0000000..4a54f2d --- /dev/null +++ b/Pods/Alamofire/Source/ParameterEncoding.swift @@ -0,0 +1,483 @@ +// +// ParameterEncoding.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// HTTP method definitions. +/// +/// See https://tools.ietf.org/html/rfc7231#section-4.3 +public enum HTTPMethod: String { + case options = "OPTIONS" + case get = "GET" + case head = "HEAD" + case post = "POST" + case put = "PUT" + case patch = "PATCH" + case delete = "DELETE" + case trace = "TRACE" + case connect = "CONNECT" +} + +// MARK: - + +/// A dictionary of parameters to apply to a `URLRequest`. +public typealias Parameters = [String: Any] + +/// A type used to define how a set of parameters are applied to a `URLRequest`. +public protocol ParameterEncoding { + /// Creates a URL request by encoding parameters and applying them onto an existing request. + /// + /// - parameter urlRequest: The request to have parameters applied. + /// - parameter parameters: The parameters to apply. + /// + /// - throws: An `AFError.parameterEncodingFailed` error if encoding fails. + /// + /// - returns: The encoded request. + func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest +} + +// MARK: - + +/// Creates a url-encoded query string to be set as or appended to any existing URL query string or set as the HTTP +/// body of the URL request. Whether the query string is set or appended to any existing URL query string or set as +/// the HTTP body depends on the destination of the encoding. +/// +/// The `Content-Type` HTTP header field of an encoded request with HTTP body is set to +/// `application/x-www-form-urlencoded; charset=utf-8`. +/// +/// There is no published specification for how to encode collection types. By default the convention of appending +/// `[]` to the key for array values (`foo[]=1&foo[]=2`), and appending the key surrounded by square brackets for +/// nested dictionary values (`foo[bar]=baz`) is used. Optionally, `ArrayEncoding` can be used to omit the +/// square brackets appended to array keys. +/// +/// `BoolEncoding` can be used to configure how boolean values are encoded. The default behavior is to encode +/// `true` as 1 and `false` as 0. +public struct URLEncoding: ParameterEncoding { + + // MARK: Helper Types + + /// Defines whether the url-encoded query string is applied to the existing query string or HTTP body of the + /// resulting URL request. + /// + /// - methodDependent: Applies encoded query string result to existing query string for `GET`, `HEAD` and `DELETE` + /// requests and sets as the HTTP body for requests with any other HTTP method. + /// - queryString: Sets or appends encoded query string result to existing query string. + /// - httpBody: Sets encoded query string result as the HTTP body of the URL request. + public enum Destination { + case methodDependent, queryString, httpBody + } + + /// Configures how `Array` parameters are encoded. + /// + /// - brackets: An empty set of square brackets is appended to the key for every value. + /// This is the default behavior. + /// - noBrackets: No brackets are appended. The key is encoded as is. + public enum ArrayEncoding { + case brackets, noBrackets + + func encode(key: String) -> String { + switch self { + case .brackets: + return "\(key)[]" + case .noBrackets: + return key + } + } + } + + /// Configures how `Bool` parameters are encoded. + /// + /// - numeric: Encode `true` as `1` and `false` as `0`. This is the default behavior. + /// - literal: Encode `true` and `false` as string literals. + public enum BoolEncoding { + case numeric, literal + + func encode(value: Bool) -> String { + switch self { + case .numeric: + return value ? "1" : "0" + case .literal: + return value ? "true" : "false" + } + } + } + + // MARK: Properties + + /// Returns a default `URLEncoding` instance. + public static var `default`: URLEncoding { return URLEncoding() } + + /// Returns a `URLEncoding` instance with a `.methodDependent` destination. + public static var methodDependent: URLEncoding { return URLEncoding() } + + /// Returns a `URLEncoding` instance with a `.queryString` destination. + public static var queryString: URLEncoding { return URLEncoding(destination: .queryString) } + + /// Returns a `URLEncoding` instance with an `.httpBody` destination. + public static var httpBody: URLEncoding { return URLEncoding(destination: .httpBody) } + + /// The destination defining where the encoded query string is to be applied to the URL request. + public let destination: Destination + + /// The encoding to use for `Array` parameters. + public let arrayEncoding: ArrayEncoding + + /// The encoding to use for `Bool` parameters. + public let boolEncoding: BoolEncoding + + // MARK: Initialization + + /// Creates a `URLEncoding` instance using the specified destination. + /// + /// - parameter destination: The destination defining where the encoded query string is to be applied. + /// - parameter arrayEncoding: The encoding to use for `Array` parameters. + /// - parameter boolEncoding: The encoding to use for `Bool` parameters. + /// + /// - returns: The new `URLEncoding` instance. + public init(destination: Destination = .methodDependent, arrayEncoding: ArrayEncoding = .brackets, boolEncoding: BoolEncoding = .numeric) { + self.destination = destination + self.arrayEncoding = arrayEncoding + self.boolEncoding = boolEncoding + } + + // MARK: Encoding + + /// Creates a URL request by encoding parameters and applying them onto an existing request. + /// + /// - parameter urlRequest: The request to have parameters applied. + /// - parameter parameters: The parameters to apply. + /// + /// - throws: An `Error` if the encoding process encounters an error. + /// + /// - returns: The encoded request. + public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { + var urlRequest = try urlRequest.asURLRequest() + + guard let parameters = parameters else { return urlRequest } + + if let method = HTTPMethod(rawValue: urlRequest.httpMethod ?? "GET"), encodesParametersInURL(with: method) { + guard let url = urlRequest.url else { + throw AFError.parameterEncodingFailed(reason: .missingURL) + } + + if var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), !parameters.isEmpty { + let percentEncodedQuery = (urlComponents.percentEncodedQuery.map { $0 + "&" } ?? "") + query(parameters) + urlComponents.percentEncodedQuery = percentEncodedQuery + urlRequest.url = urlComponents.url + } + } else { + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = query(parameters).data(using: .utf8, allowLossyConversion: false) + } + + return urlRequest + } + + /// Creates percent-escaped, URL encoded query string components from the given key-value pair using recursion. + /// + /// - parameter key: The key of the query component. + /// - parameter value: The value of the query component. + /// + /// - returns: The percent-escaped, URL encoded query string components. + public func queryComponents(fromKey key: String, value: Any) -> [(String, String)] { + var components: [(String, String)] = [] + + if let dictionary = value as? [String: Any] { + for (nestedKey, value) in dictionary { + components += queryComponents(fromKey: "\(key)[\(nestedKey)]", value: value) + } + } else if let array = value as? [Any] { + for value in array { + components += queryComponents(fromKey: arrayEncoding.encode(key: key), value: value) + } + } else if let value = value as? NSNumber { + if value.isBool { + components.append((escape(key), escape(boolEncoding.encode(value: value.boolValue)))) + } else { + components.append((escape(key), escape("\(value)"))) + } + } else if let bool = value as? Bool { + components.append((escape(key), escape(boolEncoding.encode(value: bool)))) + } else { + components.append((escape(key), escape("\(value)"))) + } + + return components + } + + /// Returns a percent-escaped string following RFC 3986 for a query string key or value. + /// + /// RFC 3986 states that the following characters are "reserved" characters. + /// + /// - General Delimiters: ":", "#", "[", "]", "@", "?", "/" + /// - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" + /// + /// In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow + /// query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" + /// should be percent-escaped in the query string. + /// + /// - parameter string: The string to be percent-escaped. + /// + /// - returns: The percent-escaped string. + public func escape(_ string: String) -> String { + let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4 + let subDelimitersToEncode = "!$&'()*+,;=" + + var allowedCharacterSet = CharacterSet.urlQueryAllowed + allowedCharacterSet.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)") + + var escaped = "" + + //========================================================================================================== + // + // Batching is required for escaping due to an internal bug in iOS 8.1 and 8.2. Encoding more than a few + // hundred Chinese characters causes various malloc error crashes. To avoid this issue until iOS 8 is no + // longer supported, batching MUST be used for encoding. This introduces roughly a 20% overhead. For more + // info, please refer to: + // + // - https://github.com/Alamofire/Alamofire/issues/206 + // + //========================================================================================================== + + if #available(iOS 8.3, *) { + escaped = string.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) ?? string + } else { + let batchSize = 50 + var index = string.startIndex + + while index != string.endIndex { + let startIndex = index + let endIndex = string.index(index, offsetBy: batchSize, limitedBy: string.endIndex) ?? string.endIndex + let range = startIndex.. String { + var components: [(String, String)] = [] + + for key in parameters.keys.sorted(by: <) { + let value = parameters[key]! + components += queryComponents(fromKey: key, value: value) + } + return components.map { "\($0)=\($1)" }.joined(separator: "&") + } + + private func encodesParametersInURL(with method: HTTPMethod) -> Bool { + switch destination { + case .queryString: + return true + case .httpBody: + return false + default: + break + } + + switch method { + case .get, .head, .delete: + return true + default: + return false + } + } +} + +// MARK: - + +/// Uses `JSONSerialization` to create a JSON representation of the parameters object, which is set as the body of the +/// request. The `Content-Type` HTTP header field of an encoded request is set to `application/json`. +public struct JSONEncoding: ParameterEncoding { + + // MARK: Properties + + /// Returns a `JSONEncoding` instance with default writing options. + public static var `default`: JSONEncoding { return JSONEncoding() } + + /// Returns a `JSONEncoding` instance with `.prettyPrinted` writing options. + public static var prettyPrinted: JSONEncoding { return JSONEncoding(options: .prettyPrinted) } + + /// The options for writing the parameters as JSON data. + public let options: JSONSerialization.WritingOptions + + // MARK: Initialization + + /// Creates a `JSONEncoding` instance using the specified options. + /// + /// - parameter options: The options for writing the parameters as JSON data. + /// + /// - returns: The new `JSONEncoding` instance. + public init(options: JSONSerialization.WritingOptions = []) { + self.options = options + } + + // MARK: Encoding + + /// Creates a URL request by encoding parameters and applying them onto an existing request. + /// + /// - parameter urlRequest: The request to have parameters applied. + /// - parameter parameters: The parameters to apply. + /// + /// - throws: An `Error` if the encoding process encounters an error. + /// + /// - returns: The encoded request. + public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { + var urlRequest = try urlRequest.asURLRequest() + + guard let parameters = parameters else { return urlRequest } + + do { + let data = try JSONSerialization.data(withJSONObject: parameters, options: options) + + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = data + } catch { + throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error)) + } + + return urlRequest + } + + /// Creates a URL request by encoding the JSON object and setting the resulting data on the HTTP body. + /// + /// - parameter urlRequest: The request to apply the JSON object to. + /// - parameter jsonObject: The JSON object to apply to the request. + /// + /// - throws: An `Error` if the encoding process encounters an error. + /// + /// - returns: The encoded request. + public func encode(_ urlRequest: URLRequestConvertible, withJSONObject jsonObject: Any? = nil) throws -> URLRequest { + var urlRequest = try urlRequest.asURLRequest() + + guard let jsonObject = jsonObject else { return urlRequest } + + do { + let data = try JSONSerialization.data(withJSONObject: jsonObject, options: options) + + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = data + } catch { + throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error)) + } + + return urlRequest + } +} + +// MARK: - + +/// Uses `PropertyListSerialization` to create a plist representation of the parameters object, according to the +/// associated format and write options values, which is set as the body of the request. The `Content-Type` HTTP header +/// field of an encoded request is set to `application/x-plist`. +public struct PropertyListEncoding: ParameterEncoding { + + // MARK: Properties + + /// Returns a default `PropertyListEncoding` instance. + public static var `default`: PropertyListEncoding { return PropertyListEncoding() } + + /// Returns a `PropertyListEncoding` instance with xml formatting and default writing options. + public static var xml: PropertyListEncoding { return PropertyListEncoding(format: .xml) } + + /// Returns a `PropertyListEncoding` instance with binary formatting and default writing options. + public static var binary: PropertyListEncoding { return PropertyListEncoding(format: .binary) } + + /// The property list serialization format. + public let format: PropertyListSerialization.PropertyListFormat + + /// The options for writing the parameters as plist data. + public let options: PropertyListSerialization.WriteOptions + + // MARK: Initialization + + /// Creates a `PropertyListEncoding` instance using the specified format and options. + /// + /// - parameter format: The property list serialization format. + /// - parameter options: The options for writing the parameters as plist data. + /// + /// - returns: The new `PropertyListEncoding` instance. + public init( + format: PropertyListSerialization.PropertyListFormat = .xml, + options: PropertyListSerialization.WriteOptions = 0) + { + self.format = format + self.options = options + } + + // MARK: Encoding + + /// Creates a URL request by encoding parameters and applying them onto an existing request. + /// + /// - parameter urlRequest: The request to have parameters applied. + /// - parameter parameters: The parameters to apply. + /// + /// - throws: An `Error` if the encoding process encounters an error. + /// + /// - returns: The encoded request. + public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { + var urlRequest = try urlRequest.asURLRequest() + + guard let parameters = parameters else { return urlRequest } + + do { + let data = try PropertyListSerialization.data( + fromPropertyList: parameters, + format: format, + options: options + ) + + if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { + urlRequest.setValue("application/x-plist", forHTTPHeaderField: "Content-Type") + } + + urlRequest.httpBody = data + } catch { + throw AFError.parameterEncodingFailed(reason: .propertyListEncodingFailed(error: error)) + } + + return urlRequest + } +} + +// MARK: - + +extension NSNumber { + fileprivate var isBool: Bool { return CFBooleanGetTypeID() == CFGetTypeID(self) } +} diff --git a/Pods/Alamofire/Source/Request.swift b/Pods/Alamofire/Source/Request.swift new file mode 100644 index 0000000..ea43411 --- /dev/null +++ b/Pods/Alamofire/Source/Request.swift @@ -0,0 +1,654 @@ +// +// Request.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// A type that can inspect and optionally adapt a `URLRequest` in some manner if necessary. +public protocol RequestAdapter { + /// Inspects and adapts the specified `URLRequest` in some manner if necessary and returns the result. + /// + /// - parameter urlRequest: The URL request to adapt. + /// + /// - throws: An `Error` if the adaptation encounters an error. + /// + /// - returns: The adapted `URLRequest`. + func adapt(_ urlRequest: URLRequest) throws -> URLRequest +} + +// MARK: - + +/// A closure executed when the `RequestRetrier` determines whether a `Request` should be retried or not. +public typealias RequestRetryCompletion = (_ shouldRetry: Bool, _ timeDelay: TimeInterval) -> Void + +/// A type that determines whether a request should be retried after being executed by the specified session manager +/// and encountering an error. +public protocol RequestRetrier { + /// Determines whether the `Request` should be retried by calling the `completion` closure. + /// + /// This operation is fully asynchronous. Any amount of time can be taken to determine whether the request needs + /// to be retried. The one requirement is that the completion closure is called to ensure the request is properly + /// cleaned up after. + /// + /// - parameter manager: The session manager the request was executed on. + /// - parameter request: The request that failed due to the encountered error. + /// - parameter error: The error encountered when executing the request. + /// - parameter completion: The completion closure to be executed when retry decision has been determined. + func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) +} + +// MARK: - + +protocol TaskConvertible { + func task(session: URLSession, adapter: RequestAdapter?, queue: DispatchQueue) throws -> URLSessionTask +} + +/// A dictionary of headers to apply to a `URLRequest`. +public typealias HTTPHeaders = [String: String] + +// MARK: - + +/// Responsible for sending a request and receiving the response and associated data from the server, as well as +/// managing its underlying `URLSessionTask`. +open class Request { + + // MARK: Helper Types + + /// A closure executed when monitoring upload or download progress of a request. + public typealias ProgressHandler = (Progress) -> Void + + enum RequestTask { + case data(TaskConvertible?, URLSessionTask?) + case download(TaskConvertible?, URLSessionTask?) + case upload(TaskConvertible?, URLSessionTask?) + case stream(TaskConvertible?, URLSessionTask?) + } + + // MARK: Properties + + /// The delegate for the underlying task. + open internal(set) var delegate: TaskDelegate { + get { + taskDelegateLock.lock() ; defer { taskDelegateLock.unlock() } + return taskDelegate + } + set { + taskDelegateLock.lock() ; defer { taskDelegateLock.unlock() } + taskDelegate = newValue + } + } + + /// The underlying task. + open var task: URLSessionTask? { return delegate.task } + + /// The session belonging to the underlying task. + public let session: URLSession + + /// The request sent or to be sent to the server. + open var request: URLRequest? { return task?.originalRequest } + + /// The response received from the server, if any. + open var response: HTTPURLResponse? { return task?.response as? HTTPURLResponse } + + /// The number of times the request has been retried. + open internal(set) var retryCount: UInt = 0 + + let originalTask: TaskConvertible? + + var startTime: CFAbsoluteTime? + var endTime: CFAbsoluteTime? + + var validations: [() -> Void] = [] + + private var taskDelegate: TaskDelegate + private var taskDelegateLock = NSLock() + + // MARK: Lifecycle + + init(session: URLSession, requestTask: RequestTask, error: Error? = nil) { + self.session = session + + switch requestTask { + case .data(let originalTask, let task): + taskDelegate = DataTaskDelegate(task: task) + self.originalTask = originalTask + case .download(let originalTask, let task): + taskDelegate = DownloadTaskDelegate(task: task) + self.originalTask = originalTask + case .upload(let originalTask, let task): + taskDelegate = UploadTaskDelegate(task: task) + self.originalTask = originalTask + case .stream(let originalTask, let task): + taskDelegate = TaskDelegate(task: task) + self.originalTask = originalTask + } + + delegate.error = error + delegate.queue.addOperation { self.endTime = CFAbsoluteTimeGetCurrent() } + } + + // MARK: Authentication + + /// Associates an HTTP Basic credential with the request. + /// + /// - parameter user: The user. + /// - parameter password: The password. + /// - parameter persistence: The URL credential persistence. `.ForSession` by default. + /// + /// - returns: The request. + @discardableResult + open func authenticate( + user: String, + password: String, + persistence: URLCredential.Persistence = .forSession) + -> Self + { + let credential = URLCredential(user: user, password: password, persistence: persistence) + return authenticate(usingCredential: credential) + } + + /// Associates a specified credential with the request. + /// + /// - parameter credential: The credential. + /// + /// - returns: The request. + @discardableResult + open func authenticate(usingCredential credential: URLCredential) -> Self { + delegate.credential = credential + return self + } + + /// Returns a base64 encoded basic authentication credential as an authorization header tuple. + /// + /// - parameter user: The user. + /// - parameter password: The password. + /// + /// - returns: A tuple with Authorization header and credential value if encoding succeeds, `nil` otherwise. + open class func authorizationHeader(user: String, password: String) -> (key: String, value: String)? { + guard let data = "\(user):\(password)".data(using: .utf8) else { return nil } + + let credential = data.base64EncodedString(options: []) + + return (key: "Authorization", value: "Basic \(credential)") + } + + // MARK: State + + /// Resumes the request. + open func resume() { + guard let task = task else { delegate.queue.isSuspended = false ; return } + + if startTime == nil { startTime = CFAbsoluteTimeGetCurrent() } + + task.resume() + + NotificationCenter.default.post( + name: Notification.Name.Task.DidResume, + object: self, + userInfo: [Notification.Key.Task: task] + ) + } + + /// Suspends the request. + open func suspend() { + guard let task = task else { return } + + task.suspend() + + NotificationCenter.default.post( + name: Notification.Name.Task.DidSuspend, + object: self, + userInfo: [Notification.Key.Task: task] + ) + } + + /// Cancels the request. + open func cancel() { + guard let task = task else { return } + + task.cancel() + + NotificationCenter.default.post( + name: Notification.Name.Task.DidCancel, + object: self, + userInfo: [Notification.Key.Task: task] + ) + } +} + +// MARK: - CustomStringConvertible + +extension Request: CustomStringConvertible { + /// The textual representation used when written to an output stream, which includes the HTTP method and URL, as + /// well as the response status code if a response has been received. + open var description: String { + var components: [String] = [] + + if let HTTPMethod = request?.httpMethod { + components.append(HTTPMethod) + } + + if let urlString = request?.url?.absoluteString { + components.append(urlString) + } + + if let response = response { + components.append("(\(response.statusCode))") + } + + return components.joined(separator: " ") + } +} + +// MARK: - CustomDebugStringConvertible + +extension Request: CustomDebugStringConvertible { + /// The textual representation used when written to an output stream, in the form of a cURL command. + open var debugDescription: String { + return cURLRepresentation() + } + + func cURLRepresentation() -> String { + var components = ["$ curl -v"] + + guard let request = self.request, + let url = request.url, + let host = url.host + else { + return "$ curl command could not be created" + } + + if let httpMethod = request.httpMethod, httpMethod != "GET" { + components.append("-X \(httpMethod)") + } + + if let credentialStorage = self.session.configuration.urlCredentialStorage { + let protectionSpace = URLProtectionSpace( + host: host, + port: url.port ?? 0, + protocol: url.scheme, + realm: host, + authenticationMethod: NSURLAuthenticationMethodHTTPBasic + ) + + if let credentials = credentialStorage.credentials(for: protectionSpace)?.values { + for credential in credentials { + guard let user = credential.user, let password = credential.password else { continue } + components.append("-u \(user):\(password)") + } + } else { + if let credential = delegate.credential, let user = credential.user, let password = credential.password { + components.append("-u \(user):\(password)") + } + } + } + + if session.configuration.httpShouldSetCookies { + if + let cookieStorage = session.configuration.httpCookieStorage, + let cookies = cookieStorage.cookies(for: url), !cookies.isEmpty + { + let string = cookies.reduce("") { $0 + "\($1.name)=\($1.value);" } + + #if swift(>=3.2) + components.append("-b \"\(string[.. URLSessionTask { + do { + let urlRequest = try self.urlRequest.adapt(using: adapter) + return queue.sync { session.dataTask(with: urlRequest) } + } catch { + throw AdaptError(error: error) + } + } + } + + // MARK: Properties + + /// The request sent or to be sent to the server. + open override var request: URLRequest? { + if let request = super.request { return request } + if let requestable = originalTask as? Requestable { return requestable.urlRequest } + + return nil + } + + /// The progress of fetching the response data from the server for the request. + open var progress: Progress { return dataDelegate.progress } + + var dataDelegate: DataTaskDelegate { return delegate as! DataTaskDelegate } + + // MARK: Stream + + /// Sets a closure to be called periodically during the lifecycle of the request as data is read from the server. + /// + /// This closure returns the bytes most recently received from the server, not including data from previous calls. + /// If this closure is set, data will only be available within this closure, and will not be saved elsewhere. It is + /// also important to note that the server data in any `Response` object will be `nil`. + /// + /// - parameter closure: The code to be executed periodically during the lifecycle of the request. + /// + /// - returns: The request. + @discardableResult + open func stream(closure: ((Data) -> Void)? = nil) -> Self { + dataDelegate.dataStream = closure + return self + } + + // MARK: Progress + + /// Sets a closure to be called periodically during the lifecycle of the `Request` as data is read from the server. + /// + /// - parameter queue: The dispatch queue to execute the closure on. + /// - parameter closure: The code to be executed periodically as data is read from the server. + /// + /// - returns: The request. + @discardableResult + open func downloadProgress(queue: DispatchQueue = DispatchQueue.main, closure: @escaping ProgressHandler) -> Self { + dataDelegate.progressHandler = (closure, queue) + return self + } +} + +// MARK: - + +/// Specific type of `Request` that manages an underlying `URLSessionDownloadTask`. +open class DownloadRequest: Request { + + // MARK: Helper Types + + /// A collection of options to be executed prior to moving a downloaded file from the temporary URL to the + /// destination URL. + public struct DownloadOptions: OptionSet { + /// Returns the raw bitmask value of the option and satisfies the `RawRepresentable` protocol. + public let rawValue: UInt + + /// A `DownloadOptions` flag that creates intermediate directories for the destination URL if specified. + public static let createIntermediateDirectories = DownloadOptions(rawValue: 1 << 0) + + /// A `DownloadOptions` flag that removes a previous file from the destination URL if specified. + public static let removePreviousFile = DownloadOptions(rawValue: 1 << 1) + + /// Creates a `DownloadFileDestinationOptions` instance with the specified raw value. + /// + /// - parameter rawValue: The raw bitmask value for the option. + /// + /// - returns: A new log level instance. + public init(rawValue: UInt) { + self.rawValue = rawValue + } + } + + /// A closure executed once a download request has successfully completed in order to determine where to move the + /// temporary file written to during the download process. The closure takes two arguments: the temporary file URL + /// and the URL response, and returns a two arguments: the file URL where the temporary file should be moved and + /// the options defining how the file should be moved. + public typealias DownloadFileDestination = ( + _ temporaryURL: URL, + _ response: HTTPURLResponse) + -> (destinationURL: URL, options: DownloadOptions) + + enum Downloadable: TaskConvertible { + case request(URLRequest) + case resumeData(Data) + + func task(session: URLSession, adapter: RequestAdapter?, queue: DispatchQueue) throws -> URLSessionTask { + do { + let task: URLSessionTask + + switch self { + case let .request(urlRequest): + let urlRequest = try urlRequest.adapt(using: adapter) + task = queue.sync { session.downloadTask(with: urlRequest) } + case let .resumeData(resumeData): + task = queue.sync { session.downloadTask(withResumeData: resumeData) } + } + + return task + } catch { + throw AdaptError(error: error) + } + } + } + + // MARK: Properties + + /// The request sent or to be sent to the server. + open override var request: URLRequest? { + if let request = super.request { return request } + + if let downloadable = originalTask as? Downloadable, case let .request(urlRequest) = downloadable { + return urlRequest + } + + return nil + } + + /// The resume data of the underlying download task if available after a failure. + open var resumeData: Data? { return downloadDelegate.resumeData } + + /// The progress of downloading the response data from the server for the request. + open var progress: Progress { return downloadDelegate.progress } + + var downloadDelegate: DownloadTaskDelegate { return delegate as! DownloadTaskDelegate } + + // MARK: State + + /// Cancels the request. + open override func cancel() { + downloadDelegate.downloadTask.cancel { self.downloadDelegate.resumeData = $0 } + + NotificationCenter.default.post( + name: Notification.Name.Task.DidCancel, + object: self, + userInfo: [Notification.Key.Task: task as Any] + ) + } + + // MARK: Progress + + /// Sets a closure to be called periodically during the lifecycle of the `Request` as data is read from the server. + /// + /// - parameter queue: The dispatch queue to execute the closure on. + /// - parameter closure: The code to be executed periodically as data is read from the server. + /// + /// - returns: The request. + @discardableResult + open func downloadProgress(queue: DispatchQueue = DispatchQueue.main, closure: @escaping ProgressHandler) -> Self { + downloadDelegate.progressHandler = (closure, queue) + return self + } + + // MARK: Destination + + /// Creates a download file destination closure which uses the default file manager to move the temporary file to a + /// file URL in the first available directory with the specified search path directory and search path domain mask. + /// + /// - parameter directory: The search path directory. `.DocumentDirectory` by default. + /// - parameter domain: The search path domain mask. `.UserDomainMask` by default. + /// + /// - returns: A download file destination closure. + open class func suggestedDownloadDestination( + for directory: FileManager.SearchPathDirectory = .documentDirectory, + in domain: FileManager.SearchPathDomainMask = .userDomainMask) + -> DownloadFileDestination + { + return { temporaryURL, response in + let directoryURLs = FileManager.default.urls(for: directory, in: domain) + + if !directoryURLs.isEmpty { + return (directoryURLs[0].appendingPathComponent(response.suggestedFilename!), []) + } + + return (temporaryURL, []) + } + } +} + +// MARK: - + +/// Specific type of `Request` that manages an underlying `URLSessionUploadTask`. +open class UploadRequest: DataRequest { + + // MARK: Helper Types + + enum Uploadable: TaskConvertible { + case data(Data, URLRequest) + case file(URL, URLRequest) + case stream(InputStream, URLRequest) + + func task(session: URLSession, adapter: RequestAdapter?, queue: DispatchQueue) throws -> URLSessionTask { + do { + let task: URLSessionTask + + switch self { + case let .data(data, urlRequest): + let urlRequest = try urlRequest.adapt(using: adapter) + task = queue.sync { session.uploadTask(with: urlRequest, from: data) } + case let .file(url, urlRequest): + let urlRequest = try urlRequest.adapt(using: adapter) + task = queue.sync { session.uploadTask(with: urlRequest, fromFile: url) } + case let .stream(_, urlRequest): + let urlRequest = try urlRequest.adapt(using: adapter) + task = queue.sync { session.uploadTask(withStreamedRequest: urlRequest) } + } + + return task + } catch { + throw AdaptError(error: error) + } + } + } + + // MARK: Properties + + /// The request sent or to be sent to the server. + open override var request: URLRequest? { + if let request = super.request { return request } + + guard let uploadable = originalTask as? Uploadable else { return nil } + + switch uploadable { + case .data(_, let urlRequest), .file(_, let urlRequest), .stream(_, let urlRequest): + return urlRequest + } + } + + /// The progress of uploading the payload to the server for the upload request. + open var uploadProgress: Progress { return uploadDelegate.uploadProgress } + + var uploadDelegate: UploadTaskDelegate { return delegate as! UploadTaskDelegate } + + // MARK: Upload Progress + + /// Sets a closure to be called periodically during the lifecycle of the `UploadRequest` as data is sent to + /// the server. + /// + /// After the data is sent to the server, the `progress(queue:closure:)` APIs can be used to monitor the progress + /// of data being read from the server. + /// + /// - parameter queue: The dispatch queue to execute the closure on. + /// - parameter closure: The code to be executed periodically as data is sent to the server. + /// + /// - returns: The request. + @discardableResult + open func uploadProgress(queue: DispatchQueue = DispatchQueue.main, closure: @escaping ProgressHandler) -> Self { + uploadDelegate.uploadProgressHandler = (closure, queue) + return self + } +} + +// MARK: - + +#if !os(watchOS) + +/// Specific type of `Request` that manages an underlying `URLSessionStreamTask`. +@available(iOS 9.0, macOS 10.11, tvOS 9.0, *) +open class StreamRequest: Request { + enum Streamable: TaskConvertible { + case stream(hostName: String, port: Int) + case netService(NetService) + + func task(session: URLSession, adapter: RequestAdapter?, queue: DispatchQueue) throws -> URLSessionTask { + let task: URLSessionTask + + switch self { + case let .stream(hostName, port): + task = queue.sync { session.streamTask(withHostName: hostName, port: port) } + case let .netService(netService): + task = queue.sync { session.streamTask(with: netService) } + } + + return task + } + } +} + +#endif diff --git a/Pods/Alamofire/Source/Response.swift b/Pods/Alamofire/Source/Response.swift new file mode 100644 index 0000000..74b1ef5 --- /dev/null +++ b/Pods/Alamofire/Source/Response.swift @@ -0,0 +1,567 @@ +// +// Response.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// Used to store all data associated with an non-serialized response of a data or upload request. +public struct DefaultDataResponse { + /// The URL request sent to the server. + public let request: URLRequest? + + /// The server's response to the URL request. + public let response: HTTPURLResponse? + + /// The data returned by the server. + public let data: Data? + + /// The error encountered while executing or validating the request. + public let error: Error? + + /// The timeline of the complete lifecycle of the request. + public let timeline: Timeline + + var _metrics: AnyObject? + + /// Creates a `DefaultDataResponse` instance from the specified parameters. + /// + /// - Parameters: + /// - request: The URL request sent to the server. + /// - response: The server's response to the URL request. + /// - data: The data returned by the server. + /// - error: The error encountered while executing or validating the request. + /// - timeline: The timeline of the complete lifecycle of the request. `Timeline()` by default. + /// - metrics: The task metrics containing the request / response statistics. `nil` by default. + public init( + request: URLRequest?, + response: HTTPURLResponse?, + data: Data?, + error: Error?, + timeline: Timeline = Timeline(), + metrics: AnyObject? = nil) + { + self.request = request + self.response = response + self.data = data + self.error = error + self.timeline = timeline + } +} + +// MARK: - + +/// Used to store all data associated with a serialized response of a data or upload request. +public struct DataResponse { + /// The URL request sent to the server. + public let request: URLRequest? + + /// The server's response to the URL request. + public let response: HTTPURLResponse? + + /// The data returned by the server. + public let data: Data? + + /// The result of response serialization. + public let result: Result + + /// The timeline of the complete lifecycle of the request. + public let timeline: Timeline + + /// Returns the associated value of the result if it is a success, `nil` otherwise. + public var value: Value? { return result.value } + + /// Returns the associated error value if the result if it is a failure, `nil` otherwise. + public var error: Error? { return result.error } + + var _metrics: AnyObject? + + /// Creates a `DataResponse` instance with the specified parameters derived from response serialization. + /// + /// - parameter request: The URL request sent to the server. + /// - parameter response: The server's response to the URL request. + /// - parameter data: The data returned by the server. + /// - parameter result: The result of response serialization. + /// - parameter timeline: The timeline of the complete lifecycle of the `Request`. Defaults to `Timeline()`. + /// + /// - returns: The new `DataResponse` instance. + public init( + request: URLRequest?, + response: HTTPURLResponse?, + data: Data?, + result: Result, + timeline: Timeline = Timeline()) + { + self.request = request + self.response = response + self.data = data + self.result = result + self.timeline = timeline + } +} + +// MARK: - + +extension DataResponse: CustomStringConvertible, CustomDebugStringConvertible { + /// The textual representation used when written to an output stream, which includes whether the result was a + /// success or failure. + public var description: String { + return result.debugDescription + } + + /// The debug textual representation used when written to an output stream, which includes the URL request, the URL + /// response, the server data, the response serialization result and the timeline. + public var debugDescription: String { + var output: [String] = [] + + output.append(request != nil ? "[Request]: \(request!.httpMethod ?? "GET") \(request!)" : "[Request]: nil") + output.append(response != nil ? "[Response]: \(response!)" : "[Response]: nil") + output.append("[Data]: \(data?.count ?? 0) bytes") + output.append("[Result]: \(result.debugDescription)") + output.append("[Timeline]: \(timeline.debugDescription)") + + return output.joined(separator: "\n") + } +} + +// MARK: - + +extension DataResponse { + /// Evaluates the specified closure when the result of this `DataResponse` is a success, passing the unwrapped + /// result value as a parameter. + /// + /// Use the `map` method with a closure that does not throw. For example: + /// + /// let possibleData: DataResponse = ... + /// let possibleInt = possibleData.map { $0.count } + /// + /// - parameter transform: A closure that takes the success value of the instance's result. + /// + /// - returns: A `DataResponse` whose result wraps the value returned by the given closure. If this instance's + /// result is a failure, returns a response wrapping the same failure. + public func map(_ transform: (Value) -> T) -> DataResponse { + var response = DataResponse( + request: request, + response: self.response, + data: data, + result: result.map(transform), + timeline: timeline + ) + + response._metrics = _metrics + + return response + } + + /// Evaluates the given closure when the result of this `DataResponse` is a success, passing the unwrapped result + /// value as a parameter. + /// + /// Use the `flatMap` method with a closure that may throw an error. For example: + /// + /// let possibleData: DataResponse = ... + /// let possibleObject = possibleData.flatMap { + /// try JSONSerialization.jsonObject(with: $0) + /// } + /// + /// - parameter transform: A closure that takes the success value of the instance's result. + /// + /// - returns: A success or failure `DataResponse` depending on the result of the given closure. If this instance's + /// result is a failure, returns the same failure. + public func flatMap(_ transform: (Value) throws -> T) -> DataResponse { + var response = DataResponse( + request: request, + response: self.response, + data: data, + result: result.flatMap(transform), + timeline: timeline + ) + + response._metrics = _metrics + + return response + } + + /// Evaluates the specified closure when the `DataResponse` is a failure, passing the unwrapped error as a parameter. + /// + /// Use the `mapError` function with a closure that does not throw. For example: + /// + /// let possibleData: DataResponse = ... + /// let withMyError = possibleData.mapError { MyError.error($0) } + /// + /// - Parameter transform: A closure that takes the error of the instance. + /// - Returns: A `DataResponse` instance containing the result of the transform. + public func mapError(_ transform: (Error) -> E) -> DataResponse { + var response = DataResponse( + request: request, + response: self.response, + data: data, + result: result.mapError(transform), + timeline: timeline + ) + + response._metrics = _metrics + + return response + } + + /// Evaluates the specified closure when the `DataResponse` is a failure, passing the unwrapped error as a parameter. + /// + /// Use the `flatMapError` function with a closure that may throw an error. For example: + /// + /// let possibleData: DataResponse = ... + /// let possibleObject = possibleData.flatMapError { + /// try someFailableFunction(taking: $0) + /// } + /// + /// - Parameter transform: A throwing closure that takes the error of the instance. + /// + /// - Returns: A `DataResponse` instance containing the result of the transform. + public func flatMapError(_ transform: (Error) throws -> E) -> DataResponse { + var response = DataResponse( + request: request, + response: self.response, + data: data, + result: result.flatMapError(transform), + timeline: timeline + ) + + response._metrics = _metrics + + return response + } +} + +// MARK: - + +/// Used to store all data associated with an non-serialized response of a download request. +public struct DefaultDownloadResponse { + /// The URL request sent to the server. + public let request: URLRequest? + + /// The server's response to the URL request. + public let response: HTTPURLResponse? + + /// The temporary destination URL of the data returned from the server. + public let temporaryURL: URL? + + /// The final destination URL of the data returned from the server if it was moved. + public let destinationURL: URL? + + /// The resume data generated if the request was cancelled. + public let resumeData: Data? + + /// The error encountered while executing or validating the request. + public let error: Error? + + /// The timeline of the complete lifecycle of the request. + public let timeline: Timeline + + var _metrics: AnyObject? + + /// Creates a `DefaultDownloadResponse` instance from the specified parameters. + /// + /// - Parameters: + /// - request: The URL request sent to the server. + /// - response: The server's response to the URL request. + /// - temporaryURL: The temporary destination URL of the data returned from the server. + /// - destinationURL: The final destination URL of the data returned from the server if it was moved. + /// - resumeData: The resume data generated if the request was cancelled. + /// - error: The error encountered while executing or validating the request. + /// - timeline: The timeline of the complete lifecycle of the request. `Timeline()` by default. + /// - metrics: The task metrics containing the request / response statistics. `nil` by default. + public init( + request: URLRequest?, + response: HTTPURLResponse?, + temporaryURL: URL?, + destinationURL: URL?, + resumeData: Data?, + error: Error?, + timeline: Timeline = Timeline(), + metrics: AnyObject? = nil) + { + self.request = request + self.response = response + self.temporaryURL = temporaryURL + self.destinationURL = destinationURL + self.resumeData = resumeData + self.error = error + self.timeline = timeline + } +} + +// MARK: - + +/// Used to store all data associated with a serialized response of a download request. +public struct DownloadResponse { + /// The URL request sent to the server. + public let request: URLRequest? + + /// The server's response to the URL request. + public let response: HTTPURLResponse? + + /// The temporary destination URL of the data returned from the server. + public let temporaryURL: URL? + + /// The final destination URL of the data returned from the server if it was moved. + public let destinationURL: URL? + + /// The resume data generated if the request was cancelled. + public let resumeData: Data? + + /// The result of response serialization. + public let result: Result + + /// The timeline of the complete lifecycle of the request. + public let timeline: Timeline + + /// Returns the associated value of the result if it is a success, `nil` otherwise. + public var value: Value? { return result.value } + + /// Returns the associated error value if the result if it is a failure, `nil` otherwise. + public var error: Error? { return result.error } + + var _metrics: AnyObject? + + /// Creates a `DownloadResponse` instance with the specified parameters derived from response serialization. + /// + /// - parameter request: The URL request sent to the server. + /// - parameter response: The server's response to the URL request. + /// - parameter temporaryURL: The temporary destination URL of the data returned from the server. + /// - parameter destinationURL: The final destination URL of the data returned from the server if it was moved. + /// - parameter resumeData: The resume data generated if the request was cancelled. + /// - parameter result: The result of response serialization. + /// - parameter timeline: The timeline of the complete lifecycle of the `Request`. Defaults to `Timeline()`. + /// + /// - returns: The new `DownloadResponse` instance. + public init( + request: URLRequest?, + response: HTTPURLResponse?, + temporaryURL: URL?, + destinationURL: URL?, + resumeData: Data?, + result: Result, + timeline: Timeline = Timeline()) + { + self.request = request + self.response = response + self.temporaryURL = temporaryURL + self.destinationURL = destinationURL + self.resumeData = resumeData + self.result = result + self.timeline = timeline + } +} + +// MARK: - + +extension DownloadResponse: CustomStringConvertible, CustomDebugStringConvertible { + /// The textual representation used when written to an output stream, which includes whether the result was a + /// success or failure. + public var description: String { + return result.debugDescription + } + + /// The debug textual representation used when written to an output stream, which includes the URL request, the URL + /// response, the temporary and destination URLs, the resume data, the response serialization result and the + /// timeline. + public var debugDescription: String { + var output: [String] = [] + + output.append(request != nil ? "[Request]: \(request!.httpMethod ?? "GET") \(request!)" : "[Request]: nil") + output.append(response != nil ? "[Response]: \(response!)" : "[Response]: nil") + output.append("[TemporaryURL]: \(temporaryURL?.path ?? "nil")") + output.append("[DestinationURL]: \(destinationURL?.path ?? "nil")") + output.append("[ResumeData]: \(resumeData?.count ?? 0) bytes") + output.append("[Result]: \(result.debugDescription)") + output.append("[Timeline]: \(timeline.debugDescription)") + + return output.joined(separator: "\n") + } +} + +// MARK: - + +extension DownloadResponse { + /// Evaluates the given closure when the result of this `DownloadResponse` is a success, passing the unwrapped + /// result value as a parameter. + /// + /// Use the `map` method with a closure that does not throw. For example: + /// + /// let possibleData: DownloadResponse = ... + /// let possibleInt = possibleData.map { $0.count } + /// + /// - parameter transform: A closure that takes the success value of the instance's result. + /// + /// - returns: A `DownloadResponse` whose result wraps the value returned by the given closure. If this instance's + /// result is a failure, returns a response wrapping the same failure. + public func map(_ transform: (Value) -> T) -> DownloadResponse { + var response = DownloadResponse( + request: request, + response: self.response, + temporaryURL: temporaryURL, + destinationURL: destinationURL, + resumeData: resumeData, + result: result.map(transform), + timeline: timeline + ) + + response._metrics = _metrics + + return response + } + + /// Evaluates the given closure when the result of this `DownloadResponse` is a success, passing the unwrapped + /// result value as a parameter. + /// + /// Use the `flatMap` method with a closure that may throw an error. For example: + /// + /// let possibleData: DownloadResponse = ... + /// let possibleObject = possibleData.flatMap { + /// try JSONSerialization.jsonObject(with: $0) + /// } + /// + /// - parameter transform: A closure that takes the success value of the instance's result. + /// + /// - returns: A success or failure `DownloadResponse` depending on the result of the given closure. If this + /// instance's result is a failure, returns the same failure. + public func flatMap(_ transform: (Value) throws -> T) -> DownloadResponse { + var response = DownloadResponse( + request: request, + response: self.response, + temporaryURL: temporaryURL, + destinationURL: destinationURL, + resumeData: resumeData, + result: result.flatMap(transform), + timeline: timeline + ) + + response._metrics = _metrics + + return response + } + + /// Evaluates the specified closure when the `DownloadResponse` is a failure, passing the unwrapped error as a parameter. + /// + /// Use the `mapError` function with a closure that does not throw. For example: + /// + /// let possibleData: DownloadResponse = ... + /// let withMyError = possibleData.mapError { MyError.error($0) } + /// + /// - Parameter transform: A closure that takes the error of the instance. + /// - Returns: A `DownloadResponse` instance containing the result of the transform. + public func mapError(_ transform: (Error) -> E) -> DownloadResponse { + var response = DownloadResponse( + request: request, + response: self.response, + temporaryURL: temporaryURL, + destinationURL: destinationURL, + resumeData: resumeData, + result: result.mapError(transform), + timeline: timeline + ) + + response._metrics = _metrics + + return response + } + + /// Evaluates the specified closure when the `DownloadResponse` is a failure, passing the unwrapped error as a parameter. + /// + /// Use the `flatMapError` function with a closure that may throw an error. For example: + /// + /// let possibleData: DownloadResponse = ... + /// let possibleObject = possibleData.flatMapError { + /// try someFailableFunction(taking: $0) + /// } + /// + /// - Parameter transform: A throwing closure that takes the error of the instance. + /// + /// - Returns: A `DownloadResponse` instance containing the result of the transform. + public func flatMapError(_ transform: (Error) throws -> E) -> DownloadResponse { + var response = DownloadResponse( + request: request, + response: self.response, + temporaryURL: temporaryURL, + destinationURL: destinationURL, + resumeData: resumeData, + result: result.flatMapError(transform), + timeline: timeline + ) + + response._metrics = _metrics + + return response + } +} + +// MARK: - + +protocol Response { + /// The task metrics containing the request / response statistics. + var _metrics: AnyObject? { get set } + mutating func add(_ metrics: AnyObject?) +} + +extension Response { + mutating func add(_ metrics: AnyObject?) { + #if !os(watchOS) + guard #available(iOS 10.0, macOS 10.12, tvOS 10.0, *) else { return } + guard let metrics = metrics as? URLSessionTaskMetrics else { return } + + _metrics = metrics + #endif + } +} + +// MARK: - + +@available(iOS 10.0, macOS 10.12, tvOS 10.0, *) +extension DefaultDataResponse: Response { +#if !os(watchOS) + /// The task metrics containing the request / response statistics. + public var metrics: URLSessionTaskMetrics? { return _metrics as? URLSessionTaskMetrics } +#endif +} + +@available(iOS 10.0, macOS 10.12, tvOS 10.0, *) +extension DataResponse: Response { +#if !os(watchOS) + /// The task metrics containing the request / response statistics. + public var metrics: URLSessionTaskMetrics? { return _metrics as? URLSessionTaskMetrics } +#endif +} + +@available(iOS 10.0, macOS 10.12, tvOS 10.0, *) +extension DefaultDownloadResponse: Response { +#if !os(watchOS) + /// The task metrics containing the request / response statistics. + public var metrics: URLSessionTaskMetrics? { return _metrics as? URLSessionTaskMetrics } +#endif +} + +@available(iOS 10.0, macOS 10.12, tvOS 10.0, *) +extension DownloadResponse: Response { +#if !os(watchOS) + /// The task metrics containing the request / response statistics. + public var metrics: URLSessionTaskMetrics? { return _metrics as? URLSessionTaskMetrics } +#endif +} diff --git a/Pods/Alamofire/Source/ResponseSerialization.swift b/Pods/Alamofire/Source/ResponseSerialization.swift new file mode 100644 index 0000000..3333726 --- /dev/null +++ b/Pods/Alamofire/Source/ResponseSerialization.swift @@ -0,0 +1,715 @@ +// +// ResponseSerialization.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// The type in which all data response serializers must conform to in order to serialize a response. +public protocol DataResponseSerializerProtocol { + /// The type of serialized object to be created by this `DataResponseSerializerType`. + associatedtype SerializedObject + + /// A closure used by response handlers that takes a request, response, data and error and returns a result. + var serializeResponse: (URLRequest?, HTTPURLResponse?, Data?, Error?) -> Result { get } +} + +// MARK: - + +/// A generic `DataResponseSerializerType` used to serialize a request, response, and data into a serialized object. +public struct DataResponseSerializer: DataResponseSerializerProtocol { + /// The type of serialized object to be created by this `DataResponseSerializer`. + public typealias SerializedObject = Value + + /// A closure used by response handlers that takes a request, response, data and error and returns a result. + public var serializeResponse: (URLRequest?, HTTPURLResponse?, Data?, Error?) -> Result + + /// Initializes the `ResponseSerializer` instance with the given serialize response closure. + /// + /// - parameter serializeResponse: The closure used to serialize the response. + /// + /// - returns: The new generic response serializer instance. + public init(serializeResponse: @escaping (URLRequest?, HTTPURLResponse?, Data?, Error?) -> Result) { + self.serializeResponse = serializeResponse + } +} + +// MARK: - + +/// The type in which all download response serializers must conform to in order to serialize a response. +public protocol DownloadResponseSerializerProtocol { + /// The type of serialized object to be created by this `DownloadResponseSerializerType`. + associatedtype SerializedObject + + /// A closure used by response handlers that takes a request, response, url and error and returns a result. + var serializeResponse: (URLRequest?, HTTPURLResponse?, URL?, Error?) -> Result { get } +} + +// MARK: - + +/// A generic `DownloadResponseSerializerType` used to serialize a request, response, and data into a serialized object. +public struct DownloadResponseSerializer: DownloadResponseSerializerProtocol { + /// The type of serialized object to be created by this `DownloadResponseSerializer`. + public typealias SerializedObject = Value + + /// A closure used by response handlers that takes a request, response, url and error and returns a result. + public var serializeResponse: (URLRequest?, HTTPURLResponse?, URL?, Error?) -> Result + + /// Initializes the `ResponseSerializer` instance with the given serialize response closure. + /// + /// - parameter serializeResponse: The closure used to serialize the response. + /// + /// - returns: The new generic response serializer instance. + public init(serializeResponse: @escaping (URLRequest?, HTTPURLResponse?, URL?, Error?) -> Result) { + self.serializeResponse = serializeResponse + } +} + +// MARK: - Timeline + +extension Request { + var timeline: Timeline { + let requestStartTime = self.startTime ?? CFAbsoluteTimeGetCurrent() + let requestCompletedTime = self.endTime ?? CFAbsoluteTimeGetCurrent() + let initialResponseTime = self.delegate.initialResponseTime ?? requestCompletedTime + + return Timeline( + requestStartTime: requestStartTime, + initialResponseTime: initialResponseTime, + requestCompletedTime: requestCompletedTime, + serializationCompletedTime: CFAbsoluteTimeGetCurrent() + ) + } +} + +// MARK: - Default + +extension DataRequest { + /// Adds a handler to be called once the request has finished. + /// + /// - parameter queue: The queue on which the completion handler is dispatched. + /// - parameter completionHandler: The code to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func response(queue: DispatchQueue? = nil, completionHandler: @escaping (DefaultDataResponse) -> Void) -> Self { + delegate.queue.addOperation { + (queue ?? DispatchQueue.main).async { + var dataResponse = DefaultDataResponse( + request: self.request, + response: self.response, + data: self.delegate.data, + error: self.delegate.error, + timeline: self.timeline + ) + + dataResponse.add(self.delegate.metrics) + + completionHandler(dataResponse) + } + } + + return self + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter queue: The queue on which the completion handler is dispatched. + /// - parameter responseSerializer: The response serializer responsible for serializing the request, response, + /// and data. + /// - parameter completionHandler: The code to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func response( + queue: DispatchQueue? = nil, + responseSerializer: T, + completionHandler: @escaping (DataResponse) -> Void) + -> Self + { + delegate.queue.addOperation { + let result = responseSerializer.serializeResponse( + self.request, + self.response, + self.delegate.data, + self.delegate.error + ) + + var dataResponse = DataResponse( + request: self.request, + response: self.response, + data: self.delegate.data, + result: result, + timeline: self.timeline + ) + + dataResponse.add(self.delegate.metrics) + + (queue ?? DispatchQueue.main).async { completionHandler(dataResponse) } + } + + return self + } +} + +extension DownloadRequest { + /// Adds a handler to be called once the request has finished. + /// + /// - parameter queue: The queue on which the completion handler is dispatched. + /// - parameter completionHandler: The code to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func response( + queue: DispatchQueue? = nil, + completionHandler: @escaping (DefaultDownloadResponse) -> Void) + -> Self + { + delegate.queue.addOperation { + (queue ?? DispatchQueue.main).async { + var downloadResponse = DefaultDownloadResponse( + request: self.request, + response: self.response, + temporaryURL: self.downloadDelegate.temporaryURL, + destinationURL: self.downloadDelegate.destinationURL, + resumeData: self.downloadDelegate.resumeData, + error: self.downloadDelegate.error, + timeline: self.timeline + ) + + downloadResponse.add(self.delegate.metrics) + + completionHandler(downloadResponse) + } + } + + return self + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter queue: The queue on which the completion handler is dispatched. + /// - parameter responseSerializer: The response serializer responsible for serializing the request, response, + /// and data contained in the destination url. + /// - parameter completionHandler: The code to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func response( + queue: DispatchQueue? = nil, + responseSerializer: T, + completionHandler: @escaping (DownloadResponse) -> Void) + -> Self + { + delegate.queue.addOperation { + let result = responseSerializer.serializeResponse( + self.request, + self.response, + self.downloadDelegate.fileURL, + self.downloadDelegate.error + ) + + var downloadResponse = DownloadResponse( + request: self.request, + response: self.response, + temporaryURL: self.downloadDelegate.temporaryURL, + destinationURL: self.downloadDelegate.destinationURL, + resumeData: self.downloadDelegate.resumeData, + result: result, + timeline: self.timeline + ) + + downloadResponse.add(self.delegate.metrics) + + (queue ?? DispatchQueue.main).async { completionHandler(downloadResponse) } + } + + return self + } +} + +// MARK: - Data + +extension Request { + /// Returns a result data type that contains the response data as-is. + /// + /// - parameter response: The response from the server. + /// - parameter data: The data returned from the server. + /// - parameter error: The error already encountered if it exists. + /// + /// - returns: The result data type. + public static func serializeResponseData(response: HTTPURLResponse?, data: Data?, error: Error?) -> Result { + guard error == nil else { return .failure(error!) } + + if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success(Data()) } + + guard let validData = data else { + return .failure(AFError.responseSerializationFailed(reason: .inputDataNil)) + } + + return .success(validData) + } +} + +extension DataRequest { + /// Creates a response serializer that returns the associated data as-is. + /// + /// - returns: A data response serializer. + public static func dataResponseSerializer() -> DataResponseSerializer { + return DataResponseSerializer { _, response, data, error in + return Request.serializeResponseData(response: response, data: data, error: error) + } + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter completionHandler: The code to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func responseData( + queue: DispatchQueue? = nil, + completionHandler: @escaping (DataResponse) -> Void) + -> Self + { + return response( + queue: queue, + responseSerializer: DataRequest.dataResponseSerializer(), + completionHandler: completionHandler + ) + } +} + +extension DownloadRequest { + /// Creates a response serializer that returns the associated data as-is. + /// + /// - returns: A data response serializer. + public static func dataResponseSerializer() -> DownloadResponseSerializer { + return DownloadResponseSerializer { _, response, fileURL, error in + guard error == nil else { return .failure(error!) } + + guard let fileURL = fileURL else { + return .failure(AFError.responseSerializationFailed(reason: .inputFileNil)) + } + + do { + let data = try Data(contentsOf: fileURL) + return Request.serializeResponseData(response: response, data: data, error: error) + } catch { + return .failure(AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL))) + } + } + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter completionHandler: The code to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func responseData( + queue: DispatchQueue? = nil, + completionHandler: @escaping (DownloadResponse) -> Void) + -> Self + { + return response( + queue: queue, + responseSerializer: DownloadRequest.dataResponseSerializer(), + completionHandler: completionHandler + ) + } +} + +// MARK: - String + +extension Request { + /// Returns a result string type initialized from the response data with the specified string encoding. + /// + /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the server + /// response, falling back to the default HTTP default character set, ISO-8859-1. + /// - parameter response: The response from the server. + /// - parameter data: The data returned from the server. + /// - parameter error: The error already encountered if it exists. + /// + /// - returns: The result data type. + public static func serializeResponseString( + encoding: String.Encoding?, + response: HTTPURLResponse?, + data: Data?, + error: Error?) + -> Result + { + guard error == nil else { return .failure(error!) } + + if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success("") } + + guard let validData = data else { + return .failure(AFError.responseSerializationFailed(reason: .inputDataNil)) + } + + var convertedEncoding = encoding + + if let encodingName = response?.textEncodingName as CFString?, convertedEncoding == nil { + convertedEncoding = String.Encoding(rawValue: CFStringConvertEncodingToNSStringEncoding( + CFStringConvertIANACharSetNameToEncoding(encodingName)) + ) + } + + let actualEncoding = convertedEncoding ?? .isoLatin1 + + if let string = String(data: validData, encoding: actualEncoding) { + return .success(string) + } else { + return .failure(AFError.responseSerializationFailed(reason: .stringSerializationFailed(encoding: actualEncoding))) + } + } +} + +extension DataRequest { + /// Creates a response serializer that returns a result string type initialized from the response data with + /// the specified string encoding. + /// + /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the server + /// response, falling back to the default HTTP default character set, ISO-8859-1. + /// + /// - returns: A string response serializer. + public static func stringResponseSerializer(encoding: String.Encoding? = nil) -> DataResponseSerializer { + return DataResponseSerializer { _, response, data, error in + return Request.serializeResponseString(encoding: encoding, response: response, data: data, error: error) + } + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the + /// server response, falling back to the default HTTP default character set, + /// ISO-8859-1. + /// - parameter completionHandler: A closure to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func responseString( + queue: DispatchQueue? = nil, + encoding: String.Encoding? = nil, + completionHandler: @escaping (DataResponse) -> Void) + -> Self + { + return response( + queue: queue, + responseSerializer: DataRequest.stringResponseSerializer(encoding: encoding), + completionHandler: completionHandler + ) + } +} + +extension DownloadRequest { + /// Creates a response serializer that returns a result string type initialized from the response data with + /// the specified string encoding. + /// + /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the server + /// response, falling back to the default HTTP default character set, ISO-8859-1. + /// + /// - returns: A string response serializer. + public static func stringResponseSerializer(encoding: String.Encoding? = nil) -> DownloadResponseSerializer { + return DownloadResponseSerializer { _, response, fileURL, error in + guard error == nil else { return .failure(error!) } + + guard let fileURL = fileURL else { + return .failure(AFError.responseSerializationFailed(reason: .inputFileNil)) + } + + do { + let data = try Data(contentsOf: fileURL) + return Request.serializeResponseString(encoding: encoding, response: response, data: data, error: error) + } catch { + return .failure(AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL))) + } + } + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the + /// server response, falling back to the default HTTP default character set, + /// ISO-8859-1. + /// - parameter completionHandler: A closure to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func responseString( + queue: DispatchQueue? = nil, + encoding: String.Encoding? = nil, + completionHandler: @escaping (DownloadResponse) -> Void) + -> Self + { + return response( + queue: queue, + responseSerializer: DownloadRequest.stringResponseSerializer(encoding: encoding), + completionHandler: completionHandler + ) + } +} + +// MARK: - JSON + +extension Request { + /// Returns a JSON object contained in a result type constructed from the response data using `JSONSerialization` + /// with the specified reading options. + /// + /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. + /// - parameter response: The response from the server. + /// - parameter data: The data returned from the server. + /// - parameter error: The error already encountered if it exists. + /// + /// - returns: The result data type. + public static func serializeResponseJSON( + options: JSONSerialization.ReadingOptions, + response: HTTPURLResponse?, + data: Data?, + error: Error?) + -> Result + { + guard error == nil else { return .failure(error!) } + + if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success(NSNull()) } + + guard let validData = data, validData.count > 0 else { + return .failure(AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength)) + } + + do { + let json = try JSONSerialization.jsonObject(with: validData, options: options) + return .success(json) + } catch { + return .failure(AFError.responseSerializationFailed(reason: .jsonSerializationFailed(error: error))) + } + } +} + +extension DataRequest { + /// Creates a response serializer that returns a JSON object result type constructed from the response data using + /// `JSONSerialization` with the specified reading options. + /// + /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. + /// + /// - returns: A JSON object response serializer. + public static func jsonResponseSerializer( + options: JSONSerialization.ReadingOptions = .allowFragments) + -> DataResponseSerializer + { + return DataResponseSerializer { _, response, data, error in + return Request.serializeResponseJSON(options: options, response: response, data: data, error: error) + } + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. + /// - parameter completionHandler: A closure to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func responseJSON( + queue: DispatchQueue? = nil, + options: JSONSerialization.ReadingOptions = .allowFragments, + completionHandler: @escaping (DataResponse) -> Void) + -> Self + { + return response( + queue: queue, + responseSerializer: DataRequest.jsonResponseSerializer(options: options), + completionHandler: completionHandler + ) + } +} + +extension DownloadRequest { + /// Creates a response serializer that returns a JSON object result type constructed from the response data using + /// `JSONSerialization` with the specified reading options. + /// + /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. + /// + /// - returns: A JSON object response serializer. + public static func jsonResponseSerializer( + options: JSONSerialization.ReadingOptions = .allowFragments) + -> DownloadResponseSerializer + { + return DownloadResponseSerializer { _, response, fileURL, error in + guard error == nil else { return .failure(error!) } + + guard let fileURL = fileURL else { + return .failure(AFError.responseSerializationFailed(reason: .inputFileNil)) + } + + do { + let data = try Data(contentsOf: fileURL) + return Request.serializeResponseJSON(options: options, response: response, data: data, error: error) + } catch { + return .failure(AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL))) + } + } + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. + /// - parameter completionHandler: A closure to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func responseJSON( + queue: DispatchQueue? = nil, + options: JSONSerialization.ReadingOptions = .allowFragments, + completionHandler: @escaping (DownloadResponse) -> Void) + -> Self + { + return response( + queue: queue, + responseSerializer: DownloadRequest.jsonResponseSerializer(options: options), + completionHandler: completionHandler + ) + } +} + +// MARK: - Property List + +extension Request { + /// Returns a plist object contained in a result type constructed from the response data using + /// `PropertyListSerialization` with the specified reading options. + /// + /// - parameter options: The property list reading options. Defaults to `[]`. + /// - parameter response: The response from the server. + /// - parameter data: The data returned from the server. + /// - parameter error: The error already encountered if it exists. + /// + /// - returns: The result data type. + public static func serializeResponsePropertyList( + options: PropertyListSerialization.ReadOptions, + response: HTTPURLResponse?, + data: Data?, + error: Error?) + -> Result + { + guard error == nil else { return .failure(error!) } + + if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success(NSNull()) } + + guard let validData = data, validData.count > 0 else { + return .failure(AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength)) + } + + do { + let plist = try PropertyListSerialization.propertyList(from: validData, options: options, format: nil) + return .success(plist) + } catch { + return .failure(AFError.responseSerializationFailed(reason: .propertyListSerializationFailed(error: error))) + } + } +} + +extension DataRequest { + /// Creates a response serializer that returns an object constructed from the response data using + /// `PropertyListSerialization` with the specified reading options. + /// + /// - parameter options: The property list reading options. Defaults to `[]`. + /// + /// - returns: A property list object response serializer. + public static func propertyListResponseSerializer( + options: PropertyListSerialization.ReadOptions = []) + -> DataResponseSerializer + { + return DataResponseSerializer { _, response, data, error in + return Request.serializeResponsePropertyList(options: options, response: response, data: data, error: error) + } + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter options: The property list reading options. Defaults to `[]`. + /// - parameter completionHandler: A closure to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func responsePropertyList( + queue: DispatchQueue? = nil, + options: PropertyListSerialization.ReadOptions = [], + completionHandler: @escaping (DataResponse) -> Void) + -> Self + { + return response( + queue: queue, + responseSerializer: DataRequest.propertyListResponseSerializer(options: options), + completionHandler: completionHandler + ) + } +} + +extension DownloadRequest { + /// Creates a response serializer that returns an object constructed from the response data using + /// `PropertyListSerialization` with the specified reading options. + /// + /// - parameter options: The property list reading options. Defaults to `[]`. + /// + /// - returns: A property list object response serializer. + public static func propertyListResponseSerializer( + options: PropertyListSerialization.ReadOptions = []) + -> DownloadResponseSerializer + { + return DownloadResponseSerializer { _, response, fileURL, error in + guard error == nil else { return .failure(error!) } + + guard let fileURL = fileURL else { + return .failure(AFError.responseSerializationFailed(reason: .inputFileNil)) + } + + do { + let data = try Data(contentsOf: fileURL) + return Request.serializeResponsePropertyList(options: options, response: response, data: data, error: error) + } catch { + return .failure(AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL))) + } + } + } + + /// Adds a handler to be called once the request has finished. + /// + /// - parameter options: The property list reading options. Defaults to `[]`. + /// - parameter completionHandler: A closure to be executed once the request has finished. + /// + /// - returns: The request. + @discardableResult + public func responsePropertyList( + queue: DispatchQueue? = nil, + options: PropertyListSerialization.ReadOptions = [], + completionHandler: @escaping (DownloadResponse) -> Void) + -> Self + { + return response( + queue: queue, + responseSerializer: DownloadRequest.propertyListResponseSerializer(options: options), + completionHandler: completionHandler + ) + } +} + +/// A set of HTTP response status code that do not contain response data. +private let emptyDataStatusCodes: Set = [204, 205] diff --git a/Pods/Alamofire/Source/Result.swift b/Pods/Alamofire/Source/Result.swift new file mode 100644 index 0000000..df62e12 --- /dev/null +++ b/Pods/Alamofire/Source/Result.swift @@ -0,0 +1,300 @@ +// +// Result.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// Used to represent whether a request was successful or encountered an error. +/// +/// - success: The request and all post processing operations were successful resulting in the serialization of the +/// provided associated value. +/// +/// - failure: The request encountered an error resulting in a failure. The associated values are the original data +/// provided by the server as well as the error that caused the failure. +public enum Result { + case success(Value) + case failure(Error) + + /// Returns `true` if the result is a success, `false` otherwise. + public var isSuccess: Bool { + switch self { + case .success: + return true + case .failure: + return false + } + } + + /// Returns `true` if the result is a failure, `false` otherwise. + public var isFailure: Bool { + return !isSuccess + } + + /// Returns the associated value if the result is a success, `nil` otherwise. + public var value: Value? { + switch self { + case .success(let value): + return value + case .failure: + return nil + } + } + + /// Returns the associated error value if the result is a failure, `nil` otherwise. + public var error: Error? { + switch self { + case .success: + return nil + case .failure(let error): + return error + } + } +} + +// MARK: - CustomStringConvertible + +extension Result: CustomStringConvertible { + /// The textual representation used when written to an output stream, which includes whether the result was a + /// success or failure. + public var description: String { + switch self { + case .success: + return "SUCCESS" + case .failure: + return "FAILURE" + } + } +} + +// MARK: - CustomDebugStringConvertible + +extension Result: CustomDebugStringConvertible { + /// The debug textual representation used when written to an output stream, which includes whether the result was a + /// success or failure in addition to the value or error. + public var debugDescription: String { + switch self { + case .success(let value): + return "SUCCESS: \(value)" + case .failure(let error): + return "FAILURE: \(error)" + } + } +} + +// MARK: - Functional APIs + +extension Result { + /// Creates a `Result` instance from the result of a closure. + /// + /// A failure result is created when the closure throws, and a success result is created when the closure + /// succeeds without throwing an error. + /// + /// func someString() throws -> String { ... } + /// + /// let result = Result(value: { + /// return try someString() + /// }) + /// + /// // The type of result is Result + /// + /// The trailing closure syntax is also supported: + /// + /// let result = Result { try someString() } + /// + /// - parameter value: The closure to execute and create the result for. + public init(value: () throws -> Value) { + do { + self = try .success(value()) + } catch { + self = .failure(error) + } + } + + /// Returns the success value, or throws the failure error. + /// + /// let possibleString: Result = .success("success") + /// try print(possibleString.unwrap()) + /// // Prints "success" + /// + /// let noString: Result = .failure(error) + /// try print(noString.unwrap()) + /// // Throws error + public func unwrap() throws -> Value { + switch self { + case .success(let value): + return value + case .failure(let error): + throw error + } + } + + /// Evaluates the specified closure when the `Result` is a success, passing the unwrapped value as a parameter. + /// + /// Use the `map` method with a closure that does not throw. For example: + /// + /// let possibleData: Result = .success(Data()) + /// let possibleInt = possibleData.map { $0.count } + /// try print(possibleInt.unwrap()) + /// // Prints "0" + /// + /// let noData: Result = .failure(error) + /// let noInt = noData.map { $0.count } + /// try print(noInt.unwrap()) + /// // Throws error + /// + /// - parameter transform: A closure that takes the success value of the `Result` instance. + /// + /// - returns: A `Result` containing the result of the given closure. If this instance is a failure, returns the + /// same failure. + public func map(_ transform: (Value) -> T) -> Result { + switch self { + case .success(let value): + return .success(transform(value)) + case .failure(let error): + return .failure(error) + } + } + + /// Evaluates the specified closure when the `Result` is a success, passing the unwrapped value as a parameter. + /// + /// Use the `flatMap` method with a closure that may throw an error. For example: + /// + /// let possibleData: Result = .success(Data(...)) + /// let possibleObject = possibleData.flatMap { + /// try JSONSerialization.jsonObject(with: $0) + /// } + /// + /// - parameter transform: A closure that takes the success value of the instance. + /// + /// - returns: A `Result` containing the result of the given closure. If this instance is a failure, returns the + /// same failure. + public func flatMap(_ transform: (Value) throws -> T) -> Result { + switch self { + case .success(let value): + do { + return try .success(transform(value)) + } catch { + return .failure(error) + } + case .failure(let error): + return .failure(error) + } + } + + /// Evaluates the specified closure when the `Result` is a failure, passing the unwrapped error as a parameter. + /// + /// Use the `mapError` function with a closure that does not throw. For example: + /// + /// let possibleData: Result = .failure(someError) + /// let withMyError: Result = possibleData.mapError { MyError.error($0) } + /// + /// - Parameter transform: A closure that takes the error of the instance. + /// - Returns: A `Result` instance containing the result of the transform. If this instance is a success, returns + /// the same instance. + public func mapError(_ transform: (Error) -> T) -> Result { + switch self { + case .failure(let error): + return .failure(transform(error)) + case .success: + return self + } + } + + /// Evaluates the specified closure when the `Result` is a failure, passing the unwrapped error as a parameter. + /// + /// Use the `flatMapError` function with a closure that may throw an error. For example: + /// + /// let possibleData: Result = .success(Data(...)) + /// let possibleObject = possibleData.flatMapError { + /// try someFailableFunction(taking: $0) + /// } + /// + /// - Parameter transform: A throwing closure that takes the error of the instance. + /// + /// - Returns: A `Result` instance containing the result of the transform. If this instance is a success, returns + /// the same instance. + public func flatMapError(_ transform: (Error) throws -> T) -> Result { + switch self { + case .failure(let error): + do { + return try .failure(transform(error)) + } catch { + return .failure(error) + } + case .success: + return self + } + } + + /// Evaluates the specified closure when the `Result` is a success, passing the unwrapped value as a parameter. + /// + /// Use the `withValue` function to evaluate the passed closure without modifying the `Result` instance. + /// + /// - Parameter closure: A closure that takes the success value of this instance. + /// - Returns: This `Result` instance, unmodified. + @discardableResult + public func withValue(_ closure: (Value) -> Void) -> Result { + if case let .success(value) = self { closure(value) } + + return self + } + + /// Evaluates the specified closure when the `Result` is a failure, passing the unwrapped error as a parameter. + /// + /// Use the `withError` function to evaluate the passed closure without modifying the `Result` instance. + /// + /// - Parameter closure: A closure that takes the success value of this instance. + /// - Returns: This `Result` instance, unmodified. + @discardableResult + public func withError(_ closure: (Error) -> Void) -> Result { + if case let .failure(error) = self { closure(error) } + + return self + } + + /// Evaluates the specified closure when the `Result` is a success. + /// + /// Use the `ifSuccess` function to evaluate the passed closure without modifying the `Result` instance. + /// + /// - Parameter closure: A `Void` closure. + /// - Returns: This `Result` instance, unmodified. + @discardableResult + public func ifSuccess(_ closure: () -> Void) -> Result { + if isSuccess { closure() } + + return self + } + + /// Evaluates the specified closure when the `Result` is a failure. + /// + /// Use the `ifFailure` function to evaluate the passed closure without modifying the `Result` instance. + /// + /// - Parameter closure: A `Void` closure. + /// - Returns: This `Result` instance, unmodified. + @discardableResult + public func ifFailure(_ closure: () -> Void) -> Result { + if isFailure { closure() } + + return self + } +} diff --git a/Pods/Alamofire/Source/ServerTrustPolicy.swift b/Pods/Alamofire/Source/ServerTrustPolicy.swift new file mode 100644 index 0000000..7f44c8d --- /dev/null +++ b/Pods/Alamofire/Source/ServerTrustPolicy.swift @@ -0,0 +1,307 @@ +// +// ServerTrustPolicy.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// Responsible for managing the mapping of `ServerTrustPolicy` objects to a given host. +open class ServerTrustPolicyManager { + /// The dictionary of policies mapped to a particular host. + public let policies: [String: ServerTrustPolicy] + + /// Initializes the `ServerTrustPolicyManager` instance with the given policies. + /// + /// Since different servers and web services can have different leaf certificates, intermediate and even root + /// certficates, it is important to have the flexibility to specify evaluation policies on a per host basis. This + /// allows for scenarios such as using default evaluation for host1, certificate pinning for host2, public key + /// pinning for host3 and disabling evaluation for host4. + /// + /// - parameter policies: A dictionary of all policies mapped to a particular host. + /// + /// - returns: The new `ServerTrustPolicyManager` instance. + public init(policies: [String: ServerTrustPolicy]) { + self.policies = policies + } + + /// Returns the `ServerTrustPolicy` for the given host if applicable. + /// + /// By default, this method will return the policy that perfectly matches the given host. Subclasses could override + /// this method and implement more complex mapping implementations such as wildcards. + /// + /// - parameter host: The host to use when searching for a matching policy. + /// + /// - returns: The server trust policy for the given host if found. + open func serverTrustPolicy(forHost host: String) -> ServerTrustPolicy? { + return policies[host] + } +} + +// MARK: - + +extension URLSession { + private struct AssociatedKeys { + static var managerKey = "URLSession.ServerTrustPolicyManager" + } + + var serverTrustPolicyManager: ServerTrustPolicyManager? { + get { + return objc_getAssociatedObject(self, &AssociatedKeys.managerKey) as? ServerTrustPolicyManager + } + set (manager) { + objc_setAssociatedObject(self, &AssociatedKeys.managerKey, manager, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) + } + } +} + +// MARK: - ServerTrustPolicy + +/// The `ServerTrustPolicy` evaluates the server trust generally provided by an `NSURLAuthenticationChallenge` when +/// connecting to a server over a secure HTTPS connection. The policy configuration then evaluates the server trust +/// with a given set of criteria to determine whether the server trust is valid and the connection should be made. +/// +/// Using pinned certificates or public keys for evaluation helps prevent man-in-the-middle (MITM) attacks and other +/// vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged +/// to route all communication over an HTTPS connection with pinning enabled. +/// +/// - performDefaultEvaluation: Uses the default server trust evaluation while allowing you to control whether to +/// validate the host provided by the challenge. Applications are encouraged to always +/// validate the host in production environments to guarantee the validity of the server's +/// certificate chain. +/// +/// - performRevokedEvaluation: Uses the default and revoked server trust evaluations allowing you to control whether to +/// validate the host provided by the challenge as well as specify the revocation flags for +/// testing for revoked certificates. Apple platforms did not start testing for revoked +/// certificates automatically until iOS 10.1, macOS 10.12 and tvOS 10.1 which is +/// demonstrated in our TLS tests. Applications are encouraged to always validate the host +/// in production environments to guarantee the validity of the server's certificate chain. +/// +/// - pinCertificates: Uses the pinned certificates to validate the server trust. The server trust is +/// considered valid if one of the pinned certificates match one of the server certificates. +/// By validating both the certificate chain and host, certificate pinning provides a very +/// secure form of server trust validation mitigating most, if not all, MITM attacks. +/// Applications are encouraged to always validate the host and require a valid certificate +/// chain in production environments. +/// +/// - pinPublicKeys: Uses the pinned public keys to validate the server trust. The server trust is considered +/// valid if one of the pinned public keys match one of the server certificate public keys. +/// By validating both the certificate chain and host, public key pinning provides a very +/// secure form of server trust validation mitigating most, if not all, MITM attacks. +/// Applications are encouraged to always validate the host and require a valid certificate +/// chain in production environments. +/// +/// - disableEvaluation: Disables all evaluation which in turn will always consider any server trust as valid. +/// +/// - customEvaluation: Uses the associated closure to evaluate the validity of the server trust. +public enum ServerTrustPolicy { + case performDefaultEvaluation(validateHost: Bool) + case performRevokedEvaluation(validateHost: Bool, revocationFlags: CFOptionFlags) + case pinCertificates(certificates: [SecCertificate], validateCertificateChain: Bool, validateHost: Bool) + case pinPublicKeys(publicKeys: [SecKey], validateCertificateChain: Bool, validateHost: Bool) + case disableEvaluation + case customEvaluation((_ serverTrust: SecTrust, _ host: String) -> Bool) + + // MARK: - Bundle Location + + /// Returns all certificates within the given bundle with a `.cer` file extension. + /// + /// - parameter bundle: The bundle to search for all `.cer` files. + /// + /// - returns: All certificates within the given bundle. + public static func certificates(in bundle: Bundle = Bundle.main) -> [SecCertificate] { + var certificates: [SecCertificate] = [] + + let paths = Set([".cer", ".CER", ".crt", ".CRT", ".der", ".DER"].map { fileExtension in + bundle.paths(forResourcesOfType: fileExtension, inDirectory: nil) + }.joined()) + + for path in paths { + if + let certificateData = try? Data(contentsOf: URL(fileURLWithPath: path)) as CFData, + let certificate = SecCertificateCreateWithData(nil, certificateData) + { + certificates.append(certificate) + } + } + + return certificates + } + + /// Returns all public keys within the given bundle with a `.cer` file extension. + /// + /// - parameter bundle: The bundle to search for all `*.cer` files. + /// + /// - returns: All public keys within the given bundle. + public static func publicKeys(in bundle: Bundle = Bundle.main) -> [SecKey] { + var publicKeys: [SecKey] = [] + + for certificate in certificates(in: bundle) { + if let publicKey = publicKey(for: certificate) { + publicKeys.append(publicKey) + } + } + + return publicKeys + } + + // MARK: - Evaluation + + /// Evaluates whether the server trust is valid for the given host. + /// + /// - parameter serverTrust: The server trust to evaluate. + /// - parameter host: The host of the challenge protection space. + /// + /// - returns: Whether the server trust is valid. + public func evaluate(_ serverTrust: SecTrust, forHost host: String) -> Bool { + var serverTrustIsValid = false + + switch self { + case let .performDefaultEvaluation(validateHost): + let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) + SecTrustSetPolicies(serverTrust, policy) + + serverTrustIsValid = trustIsValid(serverTrust) + case let .performRevokedEvaluation(validateHost, revocationFlags): + let defaultPolicy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) + let revokedPolicy = SecPolicyCreateRevocation(revocationFlags) + SecTrustSetPolicies(serverTrust, [defaultPolicy, revokedPolicy] as CFTypeRef) + + serverTrustIsValid = trustIsValid(serverTrust) + case let .pinCertificates(pinnedCertificates, validateCertificateChain, validateHost): + if validateCertificateChain { + let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) + SecTrustSetPolicies(serverTrust, policy) + + SecTrustSetAnchorCertificates(serverTrust, pinnedCertificates as CFArray) + SecTrustSetAnchorCertificatesOnly(serverTrust, true) + + serverTrustIsValid = trustIsValid(serverTrust) + } else { + let serverCertificatesDataArray = certificateData(for: serverTrust) + let pinnedCertificatesDataArray = certificateData(for: pinnedCertificates) + + outerLoop: for serverCertificateData in serverCertificatesDataArray { + for pinnedCertificateData in pinnedCertificatesDataArray { + if serverCertificateData == pinnedCertificateData { + serverTrustIsValid = true + break outerLoop + } + } + } + } + case let .pinPublicKeys(pinnedPublicKeys, validateCertificateChain, validateHost): + var certificateChainEvaluationPassed = true + + if validateCertificateChain { + let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) + SecTrustSetPolicies(serverTrust, policy) + + certificateChainEvaluationPassed = trustIsValid(serverTrust) + } + + if certificateChainEvaluationPassed { + outerLoop: for serverPublicKey in ServerTrustPolicy.publicKeys(for: serverTrust) as [AnyObject] { + for pinnedPublicKey in pinnedPublicKeys as [AnyObject] { + if serverPublicKey.isEqual(pinnedPublicKey) { + serverTrustIsValid = true + break outerLoop + } + } + } + } + case .disableEvaluation: + serverTrustIsValid = true + case let .customEvaluation(closure): + serverTrustIsValid = closure(serverTrust, host) + } + + return serverTrustIsValid + } + + // MARK: - Private - Trust Validation + + private func trustIsValid(_ trust: SecTrust) -> Bool { + var isValid = false + + var result = SecTrustResultType.invalid + let status = SecTrustEvaluate(trust, &result) + + if status == errSecSuccess { + let unspecified = SecTrustResultType.unspecified + let proceed = SecTrustResultType.proceed + + + isValid = result == unspecified || result == proceed + } + + return isValid + } + + // MARK: - Private - Certificate Data + + private func certificateData(for trust: SecTrust) -> [Data] { + var certificates: [SecCertificate] = [] + + for index in 0.. [Data] { + return certificates.map { SecCertificateCopyData($0) as Data } + } + + // MARK: - Private - Public Key Extraction + + private static func publicKeys(for trust: SecTrust) -> [SecKey] { + var publicKeys: [SecKey] = [] + + for index in 0.. SecKey? { + var publicKey: SecKey? + + let policy = SecPolicyCreateBasicX509() + var trust: SecTrust? + let trustCreationStatus = SecTrustCreateWithCertificates(certificate, policy, &trust) + + if let trust = trust, trustCreationStatus == errSecSuccess { + publicKey = SecTrustCopyPublicKey(trust) + } + + return publicKey + } +} diff --git a/Pods/Alamofire/Source/SessionDelegate.swift b/Pods/Alamofire/Source/SessionDelegate.swift new file mode 100644 index 0000000..03bcb7c --- /dev/null +++ b/Pods/Alamofire/Source/SessionDelegate.swift @@ -0,0 +1,725 @@ +// +// SessionDelegate.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// Responsible for handling all delegate callbacks for the underlying session. +open class SessionDelegate: NSObject { + + // MARK: URLSessionDelegate Overrides + + /// Overrides default behavior for URLSessionDelegate method `urlSession(_:didBecomeInvalidWithError:)`. + open var sessionDidBecomeInvalidWithError: ((URLSession, Error?) -> Void)? + + /// Overrides default behavior for URLSessionDelegate method `urlSession(_:didReceive:completionHandler:)`. + open var sessionDidReceiveChallenge: ((URLSession, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? + + /// Overrides all behavior for URLSessionDelegate method `urlSession(_:didReceive:completionHandler:)` and requires the caller to call the `completionHandler`. + open var sessionDidReceiveChallengeWithCompletion: ((URLSession, URLAuthenticationChallenge, @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) -> Void)? + + /// Overrides default behavior for URLSessionDelegate method `urlSessionDidFinishEvents(forBackgroundURLSession:)`. + open var sessionDidFinishEventsForBackgroundURLSession: ((URLSession) -> Void)? + + // MARK: URLSessionTaskDelegate Overrides + + /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)`. + open var taskWillPerformHTTPRedirection: ((URLSession, URLSessionTask, HTTPURLResponse, URLRequest) -> URLRequest?)? + + /// Overrides all behavior for URLSessionTaskDelegate method `urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)` and + /// requires the caller to call the `completionHandler`. + open var taskWillPerformHTTPRedirectionWithCompletion: ((URLSession, URLSessionTask, HTTPURLResponse, URLRequest, @escaping (URLRequest?) -> Void) -> Void)? + + /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:didReceive:completionHandler:)`. + open var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? + + /// Overrides all behavior for URLSessionTaskDelegate method `urlSession(_:task:didReceive:completionHandler:)` and + /// requires the caller to call the `completionHandler`. + open var taskDidReceiveChallengeWithCompletion: ((URLSession, URLSessionTask, URLAuthenticationChallenge, @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) -> Void)? + + /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:needNewBodyStream:)`. + open var taskNeedNewBodyStream: ((URLSession, URLSessionTask) -> InputStream?)? + + /// Overrides all behavior for URLSessionTaskDelegate method `urlSession(_:task:needNewBodyStream:)` and + /// requires the caller to call the `completionHandler`. + open var taskNeedNewBodyStreamWithCompletion: ((URLSession, URLSessionTask, @escaping (InputStream?) -> Void) -> Void)? + + /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:)`. + open var taskDidSendBodyData: ((URLSession, URLSessionTask, Int64, Int64, Int64) -> Void)? + + /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:didCompleteWithError:)`. + open var taskDidComplete: ((URLSession, URLSessionTask, Error?) -> Void)? + + // MARK: URLSessionDataDelegate Overrides + + /// Overrides default behavior for URLSessionDataDelegate method `urlSession(_:dataTask:didReceive:completionHandler:)`. + open var dataTaskDidReceiveResponse: ((URLSession, URLSessionDataTask, URLResponse) -> URLSession.ResponseDisposition)? + + /// Overrides all behavior for URLSessionDataDelegate method `urlSession(_:dataTask:didReceive:completionHandler:)` and + /// requires caller to call the `completionHandler`. + open var dataTaskDidReceiveResponseWithCompletion: ((URLSession, URLSessionDataTask, URLResponse, @escaping (URLSession.ResponseDisposition) -> Void) -> Void)? + + /// Overrides default behavior for URLSessionDataDelegate method `urlSession(_:dataTask:didBecome:)`. + open var dataTaskDidBecomeDownloadTask: ((URLSession, URLSessionDataTask, URLSessionDownloadTask) -> Void)? + + /// Overrides default behavior for URLSessionDataDelegate method `urlSession(_:dataTask:didReceive:)`. + open var dataTaskDidReceiveData: ((URLSession, URLSessionDataTask, Data) -> Void)? + + /// Overrides default behavior for URLSessionDataDelegate method `urlSession(_:dataTask:willCacheResponse:completionHandler:)`. + open var dataTaskWillCacheResponse: ((URLSession, URLSessionDataTask, CachedURLResponse) -> CachedURLResponse?)? + + /// Overrides all behavior for URLSessionDataDelegate method `urlSession(_:dataTask:willCacheResponse:completionHandler:)` and + /// requires caller to call the `completionHandler`. + open var dataTaskWillCacheResponseWithCompletion: ((URLSession, URLSessionDataTask, CachedURLResponse, @escaping (CachedURLResponse?) -> Void) -> Void)? + + // MARK: URLSessionDownloadDelegate Overrides + + /// Overrides default behavior for URLSessionDownloadDelegate method `urlSession(_:downloadTask:didFinishDownloadingTo:)`. + open var downloadTaskDidFinishDownloadingToURL: ((URLSession, URLSessionDownloadTask, URL) -> Void)? + + /// Overrides default behavior for URLSessionDownloadDelegate method `urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)`. + open var downloadTaskDidWriteData: ((URLSession, URLSessionDownloadTask, Int64, Int64, Int64) -> Void)? + + /// Overrides default behavior for URLSessionDownloadDelegate method `urlSession(_:downloadTask:didResumeAtOffset:expectedTotalBytes:)`. + open var downloadTaskDidResumeAtOffset: ((URLSession, URLSessionDownloadTask, Int64, Int64) -> Void)? + + // MARK: URLSessionStreamDelegate Overrides + +#if !os(watchOS) + + /// Overrides default behavior for URLSessionStreamDelegate method `urlSession(_:readClosedFor:)`. + @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) + open var streamTaskReadClosed: ((URLSession, URLSessionStreamTask) -> Void)? { + get { + return _streamTaskReadClosed as? (URLSession, URLSessionStreamTask) -> Void + } + set { + _streamTaskReadClosed = newValue + } + } + + /// Overrides default behavior for URLSessionStreamDelegate method `urlSession(_:writeClosedFor:)`. + @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) + open var streamTaskWriteClosed: ((URLSession, URLSessionStreamTask) -> Void)? { + get { + return _streamTaskWriteClosed as? (URLSession, URLSessionStreamTask) -> Void + } + set { + _streamTaskWriteClosed = newValue + } + } + + /// Overrides default behavior for URLSessionStreamDelegate method `urlSession(_:betterRouteDiscoveredFor:)`. + @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) + open var streamTaskBetterRouteDiscovered: ((URLSession, URLSessionStreamTask) -> Void)? { + get { + return _streamTaskBetterRouteDiscovered as? (URLSession, URLSessionStreamTask) -> Void + } + set { + _streamTaskBetterRouteDiscovered = newValue + } + } + + /// Overrides default behavior for URLSessionStreamDelegate method `urlSession(_:streamTask:didBecome:outputStream:)`. + @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) + open var streamTaskDidBecomeInputAndOutputStreams: ((URLSession, URLSessionStreamTask, InputStream, OutputStream) -> Void)? { + get { + return _streamTaskDidBecomeInputStream as? (URLSession, URLSessionStreamTask, InputStream, OutputStream) -> Void + } + set { + _streamTaskDidBecomeInputStream = newValue + } + } + + var _streamTaskReadClosed: Any? + var _streamTaskWriteClosed: Any? + var _streamTaskBetterRouteDiscovered: Any? + var _streamTaskDidBecomeInputStream: Any? + +#endif + + // MARK: Properties + + var retrier: RequestRetrier? + weak var sessionManager: SessionManager? + + var requests: [Int: Request] = [:] + private let lock = NSLock() + + /// Access the task delegate for the specified task in a thread-safe manner. + open subscript(task: URLSessionTask) -> Request? { + get { + lock.lock() ; defer { lock.unlock() } + return requests[task.taskIdentifier] + } + set { + lock.lock() ; defer { lock.unlock() } + requests[task.taskIdentifier] = newValue + } + } + + // MARK: Lifecycle + + /// Initializes the `SessionDelegate` instance. + /// + /// - returns: The new `SessionDelegate` instance. + public override init() { + super.init() + } + + // MARK: NSObject Overrides + + /// Returns a `Bool` indicating whether the `SessionDelegate` implements or inherits a method that can respond + /// to a specified message. + /// + /// - parameter selector: A selector that identifies a message. + /// + /// - returns: `true` if the receiver implements or inherits a method that can respond to selector, otherwise `false`. + open override func responds(to selector: Selector) -> Bool { + #if !os(macOS) + if selector == #selector(URLSessionDelegate.urlSessionDidFinishEvents(forBackgroundURLSession:)) { + return sessionDidFinishEventsForBackgroundURLSession != nil + } + #endif + + #if !os(watchOS) + if #available(iOS 9.0, macOS 10.11, tvOS 9.0, *) { + switch selector { + case #selector(URLSessionStreamDelegate.urlSession(_:readClosedFor:)): + return streamTaskReadClosed != nil + case #selector(URLSessionStreamDelegate.urlSession(_:writeClosedFor:)): + return streamTaskWriteClosed != nil + case #selector(URLSessionStreamDelegate.urlSession(_:betterRouteDiscoveredFor:)): + return streamTaskBetterRouteDiscovered != nil + case #selector(URLSessionStreamDelegate.urlSession(_:streamTask:didBecome:outputStream:)): + return streamTaskDidBecomeInputAndOutputStreams != nil + default: + break + } + } + #endif + + switch selector { + case #selector(URLSessionDelegate.urlSession(_:didBecomeInvalidWithError:)): + return sessionDidBecomeInvalidWithError != nil + case #selector(URLSessionDelegate.urlSession(_:didReceive:completionHandler:)): + return (sessionDidReceiveChallenge != nil || sessionDidReceiveChallengeWithCompletion != nil) + case #selector(URLSessionTaskDelegate.urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)): + return (taskWillPerformHTTPRedirection != nil || taskWillPerformHTTPRedirectionWithCompletion != nil) + case #selector(URLSessionDataDelegate.urlSession(_:dataTask:didReceive:completionHandler:)): + return (dataTaskDidReceiveResponse != nil || dataTaskDidReceiveResponseWithCompletion != nil) + default: + return type(of: self).instancesRespond(to: selector) + } + } +} + +// MARK: - URLSessionDelegate + +extension SessionDelegate: URLSessionDelegate { + /// Tells the delegate that the session has been invalidated. + /// + /// - parameter session: The session object that was invalidated. + /// - parameter error: The error that caused invalidation, or nil if the invalidation was explicit. + open func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { + sessionDidBecomeInvalidWithError?(session, error) + } + + /// Requests credentials from the delegate in response to a session-level authentication request from the + /// remote server. + /// + /// - parameter session: The session containing the task that requested authentication. + /// - parameter challenge: An object that contains the request for authentication. + /// - parameter completionHandler: A handler that your delegate method must call providing the disposition + /// and credential. + open func urlSession( + _ session: URLSession, + didReceive challenge: URLAuthenticationChallenge, + completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) + { + guard sessionDidReceiveChallengeWithCompletion == nil else { + sessionDidReceiveChallengeWithCompletion?(session, challenge, completionHandler) + return + } + + var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling + var credential: URLCredential? + + if let sessionDidReceiveChallenge = sessionDidReceiveChallenge { + (disposition, credential) = sessionDidReceiveChallenge(session, challenge) + } else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { + let host = challenge.protectionSpace.host + + if + let serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicy(forHost: host), + let serverTrust = challenge.protectionSpace.serverTrust + { + if serverTrustPolicy.evaluate(serverTrust, forHost: host) { + disposition = .useCredential + credential = URLCredential(trust: serverTrust) + } else { + disposition = .cancelAuthenticationChallenge + } + } + } + + completionHandler(disposition, credential) + } + +#if !os(macOS) + + /// Tells the delegate that all messages enqueued for a session have been delivered. + /// + /// - parameter session: The session that no longer has any outstanding requests. + open func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) { + sessionDidFinishEventsForBackgroundURLSession?(session) + } + +#endif +} + +// MARK: - URLSessionTaskDelegate + +extension SessionDelegate: URLSessionTaskDelegate { + /// Tells the delegate that the remote server requested an HTTP redirect. + /// + /// - parameter session: The session containing the task whose request resulted in a redirect. + /// - parameter task: The task whose request resulted in a redirect. + /// - parameter response: An object containing the server’s response to the original request. + /// - parameter request: A URL request object filled out with the new location. + /// - parameter completionHandler: A closure that your handler should call with either the value of the request + /// parameter, a modified URL request object, or NULL to refuse the redirect and + /// return the body of the redirect response. + open func urlSession( + _ session: URLSession, + task: URLSessionTask, + willPerformHTTPRedirection response: HTTPURLResponse, + newRequest request: URLRequest, + completionHandler: @escaping (URLRequest?) -> Void) + { + guard taskWillPerformHTTPRedirectionWithCompletion == nil else { + taskWillPerformHTTPRedirectionWithCompletion?(session, task, response, request, completionHandler) + return + } + + var redirectRequest: URLRequest? = request + + if let taskWillPerformHTTPRedirection = taskWillPerformHTTPRedirection { + redirectRequest = taskWillPerformHTTPRedirection(session, task, response, request) + } + + completionHandler(redirectRequest) + } + + /// Requests credentials from the delegate in response to an authentication request from the remote server. + /// + /// - parameter session: The session containing the task whose request requires authentication. + /// - parameter task: The task whose request requires authentication. + /// - parameter challenge: An object that contains the request for authentication. + /// - parameter completionHandler: A handler that your delegate method must call providing the disposition + /// and credential. + open func urlSession( + _ session: URLSession, + task: URLSessionTask, + didReceive challenge: URLAuthenticationChallenge, + completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) + { + guard taskDidReceiveChallengeWithCompletion == nil else { + taskDidReceiveChallengeWithCompletion?(session, task, challenge, completionHandler) + return + } + + if let taskDidReceiveChallenge = taskDidReceiveChallenge { + let result = taskDidReceiveChallenge(session, task, challenge) + completionHandler(result.0, result.1) + } else if let delegate = self[task]?.delegate { + delegate.urlSession( + session, + task: task, + didReceive: challenge, + completionHandler: completionHandler + ) + } else { + urlSession(session, didReceive: challenge, completionHandler: completionHandler) + } + } + + /// Tells the delegate when a task requires a new request body stream to send to the remote server. + /// + /// - parameter session: The session containing the task that needs a new body stream. + /// - parameter task: The task that needs a new body stream. + /// - parameter completionHandler: A completion handler that your delegate method should call with the new body stream. + open func urlSession( + _ session: URLSession, + task: URLSessionTask, + needNewBodyStream completionHandler: @escaping (InputStream?) -> Void) + { + guard taskNeedNewBodyStreamWithCompletion == nil else { + taskNeedNewBodyStreamWithCompletion?(session, task, completionHandler) + return + } + + if let taskNeedNewBodyStream = taskNeedNewBodyStream { + completionHandler(taskNeedNewBodyStream(session, task)) + } else if let delegate = self[task]?.delegate { + delegate.urlSession(session, task: task, needNewBodyStream: completionHandler) + } + } + + /// Periodically informs the delegate of the progress of sending body content to the server. + /// + /// - parameter session: The session containing the data task. + /// - parameter task: The data task. + /// - parameter bytesSent: The number of bytes sent since the last time this delegate method was called. + /// - parameter totalBytesSent: The total number of bytes sent so far. + /// - parameter totalBytesExpectedToSend: The expected length of the body data. + open func urlSession( + _ session: URLSession, + task: URLSessionTask, + didSendBodyData bytesSent: Int64, + totalBytesSent: Int64, + totalBytesExpectedToSend: Int64) + { + if let taskDidSendBodyData = taskDidSendBodyData { + taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend) + } else if let delegate = self[task]?.delegate as? UploadTaskDelegate { + delegate.URLSession( + session, + task: task, + didSendBodyData: bytesSent, + totalBytesSent: totalBytesSent, + totalBytesExpectedToSend: totalBytesExpectedToSend + ) + } + } + +#if !os(watchOS) + + /// Tells the delegate that the session finished collecting metrics for the task. + /// + /// - parameter session: The session collecting the metrics. + /// - parameter task: The task whose metrics have been collected. + /// - parameter metrics: The collected metrics. + @available(iOS 10.0, macOS 10.12, tvOS 10.0, *) + @objc(URLSession:task:didFinishCollectingMetrics:) + open func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { + self[task]?.delegate.metrics = metrics + } + +#endif + + /// Tells the delegate that the task finished transferring data. + /// + /// - parameter session: The session containing the task whose request finished transferring data. + /// - parameter task: The task whose request finished transferring data. + /// - parameter error: If an error occurred, an error object indicating how the transfer failed, otherwise nil. + open func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { + /// Executed after it is determined that the request is not going to be retried + let completeTask: (URLSession, URLSessionTask, Error?) -> Void = { [weak self] session, task, error in + guard let strongSelf = self else { return } + + strongSelf.taskDidComplete?(session, task, error) + + strongSelf[task]?.delegate.urlSession(session, task: task, didCompleteWithError: error) + + var userInfo: [String: Any] = [Notification.Key.Task: task] + + if let data = (strongSelf[task]?.delegate as? DataTaskDelegate)?.data { + userInfo[Notification.Key.ResponseData] = data + } + + NotificationCenter.default.post( + name: Notification.Name.Task.DidComplete, + object: strongSelf, + userInfo: userInfo + ) + + strongSelf[task] = nil + } + + guard let request = self[task], let sessionManager = sessionManager else { + completeTask(session, task, error) + return + } + + // Run all validations on the request before checking if an error occurred + request.validations.forEach { $0() } + + // Determine whether an error has occurred + var error: Error? = error + + if request.delegate.error != nil { + error = request.delegate.error + } + + /// If an error occurred and the retrier is set, asynchronously ask the retrier if the request + /// should be retried. Otherwise, complete the task by notifying the task delegate. + if let retrier = retrier, let error = error { + retrier.should(sessionManager, retry: request, with: error) { [weak self] shouldRetry, timeDelay in + guard shouldRetry else { completeTask(session, task, error) ; return } + + DispatchQueue.utility.after(timeDelay) { [weak self] in + guard let strongSelf = self else { return } + + let retrySucceeded = strongSelf.sessionManager?.retry(request) ?? false + + if retrySucceeded, let task = request.task { + strongSelf[task] = request + return + } else { + completeTask(session, task, error) + } + } + } + } else { + completeTask(session, task, error) + } + } +} + +// MARK: - URLSessionDataDelegate + +extension SessionDelegate: URLSessionDataDelegate { + /// Tells the delegate that the data task received the initial reply (headers) from the server. + /// + /// - parameter session: The session containing the data task that received an initial reply. + /// - parameter dataTask: The data task that received an initial reply. + /// - parameter response: A URL response object populated with headers. + /// - parameter completionHandler: A completion handler that your code calls to continue the transfer, passing a + /// constant to indicate whether the transfer should continue as a data task or + /// should become a download task. + open func urlSession( + _ session: URLSession, + dataTask: URLSessionDataTask, + didReceive response: URLResponse, + completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) + { + guard dataTaskDidReceiveResponseWithCompletion == nil else { + dataTaskDidReceiveResponseWithCompletion?(session, dataTask, response, completionHandler) + return + } + + var disposition: URLSession.ResponseDisposition = .allow + + if let dataTaskDidReceiveResponse = dataTaskDidReceiveResponse { + disposition = dataTaskDidReceiveResponse(session, dataTask, response) + } + + completionHandler(disposition) + } + + /// Tells the delegate that the data task was changed to a download task. + /// + /// - parameter session: The session containing the task that was replaced by a download task. + /// - parameter dataTask: The data task that was replaced by a download task. + /// - parameter downloadTask: The new download task that replaced the data task. + open func urlSession( + _ session: URLSession, + dataTask: URLSessionDataTask, + didBecome downloadTask: URLSessionDownloadTask) + { + if let dataTaskDidBecomeDownloadTask = dataTaskDidBecomeDownloadTask { + dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask) + } else { + self[downloadTask]?.delegate = DownloadTaskDelegate(task: downloadTask) + } + } + + /// Tells the delegate that the data task has received some of the expected data. + /// + /// - parameter session: The session containing the data task that provided data. + /// - parameter dataTask: The data task that provided data. + /// - parameter data: A data object containing the transferred data. + open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { + if let dataTaskDidReceiveData = dataTaskDidReceiveData { + dataTaskDidReceiveData(session, dataTask, data) + } else if let delegate = self[dataTask]?.delegate as? DataTaskDelegate { + delegate.urlSession(session, dataTask: dataTask, didReceive: data) + } + } + + /// Asks the delegate whether the data (or upload) task should store the response in the cache. + /// + /// - parameter session: The session containing the data (or upload) task. + /// - parameter dataTask: The data (or upload) task. + /// - parameter proposedResponse: The default caching behavior. This behavior is determined based on the current + /// caching policy and the values of certain received headers, such as the Pragma + /// and Cache-Control headers. + /// - parameter completionHandler: A block that your handler must call, providing either the original proposed + /// response, a modified version of that response, or NULL to prevent caching the + /// response. If your delegate implements this method, it must call this completion + /// handler; otherwise, your app leaks memory. + open func urlSession( + _ session: URLSession, + dataTask: URLSessionDataTask, + willCacheResponse proposedResponse: CachedURLResponse, + completionHandler: @escaping (CachedURLResponse?) -> Void) + { + guard dataTaskWillCacheResponseWithCompletion == nil else { + dataTaskWillCacheResponseWithCompletion?(session, dataTask, proposedResponse, completionHandler) + return + } + + if let dataTaskWillCacheResponse = dataTaskWillCacheResponse { + completionHandler(dataTaskWillCacheResponse(session, dataTask, proposedResponse)) + } else if let delegate = self[dataTask]?.delegate as? DataTaskDelegate { + delegate.urlSession( + session, + dataTask: dataTask, + willCacheResponse: proposedResponse, + completionHandler: completionHandler + ) + } else { + completionHandler(proposedResponse) + } + } +} + +// MARK: - URLSessionDownloadDelegate + +extension SessionDelegate: URLSessionDownloadDelegate { + /// Tells the delegate that a download task has finished downloading. + /// + /// - parameter session: The session containing the download task that finished. + /// - parameter downloadTask: The download task that finished. + /// - parameter location: A file URL for the temporary file. Because the file is temporary, you must either + /// open the file for reading or move it to a permanent location in your app’s sandbox + /// container directory before returning from this delegate method. + open func urlSession( + _ session: URLSession, + downloadTask: URLSessionDownloadTask, + didFinishDownloadingTo location: URL) + { + if let downloadTaskDidFinishDownloadingToURL = downloadTaskDidFinishDownloadingToURL { + downloadTaskDidFinishDownloadingToURL(session, downloadTask, location) + } else if let delegate = self[downloadTask]?.delegate as? DownloadTaskDelegate { + delegate.urlSession(session, downloadTask: downloadTask, didFinishDownloadingTo: location) + } + } + + /// Periodically informs the delegate about the download’s progress. + /// + /// - parameter session: The session containing the download task. + /// - parameter downloadTask: The download task. + /// - parameter bytesWritten: The number of bytes transferred since the last time this delegate + /// method was called. + /// - parameter totalBytesWritten: The total number of bytes transferred so far. + /// - parameter totalBytesExpectedToWrite: The expected length of the file, as provided by the Content-Length + /// header. If this header was not provided, the value is + /// `NSURLSessionTransferSizeUnknown`. + open func urlSession( + _ session: URLSession, + downloadTask: URLSessionDownloadTask, + didWriteData bytesWritten: Int64, + totalBytesWritten: Int64, + totalBytesExpectedToWrite: Int64) + { + if let downloadTaskDidWriteData = downloadTaskDidWriteData { + downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) + } else if let delegate = self[downloadTask]?.delegate as? DownloadTaskDelegate { + delegate.urlSession( + session, + downloadTask: downloadTask, + didWriteData: bytesWritten, + totalBytesWritten: totalBytesWritten, + totalBytesExpectedToWrite: totalBytesExpectedToWrite + ) + } + } + + /// Tells the delegate that the download task has resumed downloading. + /// + /// - parameter session: The session containing the download task that finished. + /// - parameter downloadTask: The download task that resumed. See explanation in the discussion. + /// - parameter fileOffset: If the file's cache policy or last modified date prevents reuse of the + /// existing content, then this value is zero. Otherwise, this value is an + /// integer representing the number of bytes on disk that do not need to be + /// retrieved again. + /// - parameter expectedTotalBytes: The expected length of the file, as provided by the Content-Length header. + /// If this header was not provided, the value is NSURLSessionTransferSizeUnknown. + open func urlSession( + _ session: URLSession, + downloadTask: URLSessionDownloadTask, + didResumeAtOffset fileOffset: Int64, + expectedTotalBytes: Int64) + { + if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset { + downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes) + } else if let delegate = self[downloadTask]?.delegate as? DownloadTaskDelegate { + delegate.urlSession( + session, + downloadTask: downloadTask, + didResumeAtOffset: fileOffset, + expectedTotalBytes: expectedTotalBytes + ) + } + } +} + +// MARK: - URLSessionStreamDelegate + +#if !os(watchOS) + +@available(iOS 9.0, macOS 10.11, tvOS 9.0, *) +extension SessionDelegate: URLSessionStreamDelegate { + /// Tells the delegate that the read side of the connection has been closed. + /// + /// - parameter session: The session. + /// - parameter streamTask: The stream task. + open func urlSession(_ session: URLSession, readClosedFor streamTask: URLSessionStreamTask) { + streamTaskReadClosed?(session, streamTask) + } + + /// Tells the delegate that the write side of the connection has been closed. + /// + /// - parameter session: The session. + /// - parameter streamTask: The stream task. + open func urlSession(_ session: URLSession, writeClosedFor streamTask: URLSessionStreamTask) { + streamTaskWriteClosed?(session, streamTask) + } + + /// Tells the delegate that the system has determined that a better route to the host is available. + /// + /// - parameter session: The session. + /// - parameter streamTask: The stream task. + open func urlSession(_ session: URLSession, betterRouteDiscoveredFor streamTask: URLSessionStreamTask) { + streamTaskBetterRouteDiscovered?(session, streamTask) + } + + /// Tells the delegate that the stream task has been completed and provides the unopened stream objects. + /// + /// - parameter session: The session. + /// - parameter streamTask: The stream task. + /// - parameter inputStream: The new input stream. + /// - parameter outputStream: The new output stream. + open func urlSession( + _ session: URLSession, + streamTask: URLSessionStreamTask, + didBecome inputStream: InputStream, + outputStream: OutputStream) + { + streamTaskDidBecomeInputAndOutputStreams?(session, streamTask, inputStream, outputStream) + } +} + +#endif diff --git a/Pods/Alamofire/Source/SessionManager.swift b/Pods/Alamofire/Source/SessionManager.swift new file mode 100644 index 0000000..8779efd --- /dev/null +++ b/Pods/Alamofire/Source/SessionManager.swift @@ -0,0 +1,896 @@ +// +// SessionManager.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// Responsible for creating and managing `Request` objects, as well as their underlying `NSURLSession`. +open class SessionManager { + + // MARK: - Helper Types + + /// Defines whether the `MultipartFormData` encoding was successful and contains result of the encoding as + /// associated values. + /// + /// - Success: Represents a successful `MultipartFormData` encoding and contains the new `UploadRequest` along with + /// streaming information. + /// - Failure: Used to represent a failure in the `MultipartFormData` encoding and also contains the encoding + /// error. + public enum MultipartFormDataEncodingResult { + case success(request: UploadRequest, streamingFromDisk: Bool, streamFileURL: URL?) + case failure(Error) + } + + // MARK: - Properties + + /// A default instance of `SessionManager`, used by top-level Alamofire request methods, and suitable for use + /// directly for any ad hoc requests. + public static let `default`: SessionManager = { + let configuration = URLSessionConfiguration.default + configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders + + return SessionManager(configuration: configuration) + }() + + /// Creates default values for the "Accept-Encoding", "Accept-Language" and "User-Agent" headers. + public static let defaultHTTPHeaders: HTTPHeaders = { + // Accept-Encoding HTTP Header; see https://tools.ietf.org/html/rfc7230#section-4.2.3 + let acceptEncoding: String = "gzip;q=1.0, compress;q=0.5" + + // Accept-Language HTTP Header; see https://tools.ietf.org/html/rfc7231#section-5.3.5 + let acceptLanguage = Locale.preferredLanguages.prefix(6).enumerated().map { index, languageCode in + let quality = 1.0 - (Double(index) * 0.1) + return "\(languageCode);q=\(quality)" + }.joined(separator: ", ") + + // User-Agent Header; see https://tools.ietf.org/html/rfc7231#section-5.5.3 + // Example: `iOS Example/1.0 (org.alamofire.iOS-Example; build:1; iOS 10.0.0) Alamofire/4.0.0` + let userAgent: String = { + if let info = Bundle.main.infoDictionary { + let executable = info[kCFBundleExecutableKey as String] as? String ?? "Unknown" + let bundle = info[kCFBundleIdentifierKey as String] as? String ?? "Unknown" + let appVersion = info["CFBundleShortVersionString"] as? String ?? "Unknown" + let appBuild = info[kCFBundleVersionKey as String] as? String ?? "Unknown" + + let osNameVersion: String = { + let version = ProcessInfo.processInfo.operatingSystemVersion + let versionString = "\(version.majorVersion).\(version.minorVersion).\(version.patchVersion)" + + let osName: String = { + #if os(iOS) + return "iOS" + #elseif os(watchOS) + return "watchOS" + #elseif os(tvOS) + return "tvOS" + #elseif os(macOS) + return "OS X" + #elseif os(Linux) + return "Linux" + #else + return "Unknown" + #endif + }() + + return "\(osName) \(versionString)" + }() + + let alamofireVersion: String = { + guard + let afInfo = Bundle(for: SessionManager.self).infoDictionary, + let build = afInfo["CFBundleShortVersionString"] + else { return "Unknown" } + + return "Alamofire/\(build)" + }() + + return "\(executable)/\(appVersion) (\(bundle); build:\(appBuild); \(osNameVersion)) \(alamofireVersion)" + } + + return "Alamofire" + }() + + return [ + "Accept-Encoding": acceptEncoding, + "Accept-Language": acceptLanguage, + "User-Agent": userAgent + ] + }() + + /// Default memory threshold used when encoding `MultipartFormData` in bytes. + public static let multipartFormDataEncodingMemoryThreshold: UInt64 = 10_000_000 + + /// The underlying session. + public let session: URLSession + + /// The session delegate handling all the task and session delegate callbacks. + public let delegate: SessionDelegate + + /// Whether to start requests immediately after being constructed. `true` by default. + open var startRequestsImmediately: Bool = true + + /// The request adapter called each time a new request is created. + open var adapter: RequestAdapter? + + /// The request retrier called each time a request encounters an error to determine whether to retry the request. + open var retrier: RequestRetrier? { + get { return delegate.retrier } + set { delegate.retrier = newValue } + } + + /// The background completion handler closure provided by the UIApplicationDelegate + /// `application:handleEventsForBackgroundURLSession:completionHandler:` method. By setting the background + /// completion handler, the SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` closure implementation + /// will automatically call the handler. + /// + /// If you need to handle your own events before the handler is called, then you need to override the + /// SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` and manually call the handler when finished. + /// + /// `nil` by default. + open var backgroundCompletionHandler: (() -> Void)? + + let queue = DispatchQueue(label: "org.alamofire.session-manager." + UUID().uuidString) + + // MARK: - Lifecycle + + /// Creates an instance with the specified `configuration`, `delegate` and `serverTrustPolicyManager`. + /// + /// - parameter configuration: The configuration used to construct the managed session. + /// `URLSessionConfiguration.default` by default. + /// - parameter delegate: The delegate used when initializing the session. `SessionDelegate()` by + /// default. + /// - parameter serverTrustPolicyManager: The server trust policy manager to use for evaluating all server trust + /// challenges. `nil` by default. + /// + /// - returns: The new `SessionManager` instance. + public init( + configuration: URLSessionConfiguration = URLSessionConfiguration.default, + delegate: SessionDelegate = SessionDelegate(), + serverTrustPolicyManager: ServerTrustPolicyManager? = nil) + { + self.delegate = delegate + self.session = URLSession(configuration: configuration, delegate: delegate, delegateQueue: nil) + + commonInit(serverTrustPolicyManager: serverTrustPolicyManager) + } + + /// Creates an instance with the specified `session`, `delegate` and `serverTrustPolicyManager`. + /// + /// - parameter session: The URL session. + /// - parameter delegate: The delegate of the URL session. Must equal the URL session's delegate. + /// - parameter serverTrustPolicyManager: The server trust policy manager to use for evaluating all server trust + /// challenges. `nil` by default. + /// + /// - returns: The new `SessionManager` instance if the URL session's delegate matches; `nil` otherwise. + public init?( + session: URLSession, + delegate: SessionDelegate, + serverTrustPolicyManager: ServerTrustPolicyManager? = nil) + { + guard delegate === session.delegate else { return nil } + + self.delegate = delegate + self.session = session + + commonInit(serverTrustPolicyManager: serverTrustPolicyManager) + } + + private func commonInit(serverTrustPolicyManager: ServerTrustPolicyManager?) { + session.serverTrustPolicyManager = serverTrustPolicyManager + + delegate.sessionManager = self + + delegate.sessionDidFinishEventsForBackgroundURLSession = { [weak self] session in + guard let strongSelf = self else { return } + DispatchQueue.main.async { strongSelf.backgroundCompletionHandler?() } + } + } + + deinit { + session.invalidateAndCancel() + } + + // MARK: - Data Request + + /// Creates a `DataRequest` to retrieve the contents of the specified `url`, `method`, `parameters`, `encoding` + /// and `headers`. + /// + /// - parameter url: The URL. + /// - parameter method: The HTTP method. `.get` by default. + /// - parameter parameters: The parameters. `nil` by default. + /// - parameter encoding: The parameter encoding. `URLEncoding.default` by default. + /// - parameter headers: The HTTP headers. `nil` by default. + /// + /// - returns: The created `DataRequest`. + @discardableResult + open func request( + _ url: URLConvertible, + method: HTTPMethod = .get, + parameters: Parameters? = nil, + encoding: ParameterEncoding = URLEncoding.default, + headers: HTTPHeaders? = nil) + -> DataRequest + { + var originalRequest: URLRequest? + + do { + originalRequest = try URLRequest(url: url, method: method, headers: headers) + let encodedURLRequest = try encoding.encode(originalRequest!, with: parameters) + return request(encodedURLRequest) + } catch { + return request(originalRequest, failedWith: error) + } + } + + /// Creates a `DataRequest` to retrieve the contents of a URL based on the specified `urlRequest`. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter urlRequest: The URL request. + /// + /// - returns: The created `DataRequest`. + @discardableResult + open func request(_ urlRequest: URLRequestConvertible) -> DataRequest { + var originalRequest: URLRequest? + + do { + originalRequest = try urlRequest.asURLRequest() + let originalTask = DataRequest.Requestable(urlRequest: originalRequest!) + + let task = try originalTask.task(session: session, adapter: adapter, queue: queue) + let request = DataRequest(session: session, requestTask: .data(originalTask, task)) + + delegate[task] = request + + if startRequestsImmediately { request.resume() } + + return request + } catch { + return request(originalRequest, failedWith: error) + } + } + + // MARK: Private - Request Implementation + + private func request(_ urlRequest: URLRequest?, failedWith error: Error) -> DataRequest { + var requestTask: Request.RequestTask = .data(nil, nil) + + if let urlRequest = urlRequest { + let originalTask = DataRequest.Requestable(urlRequest: urlRequest) + requestTask = .data(originalTask, nil) + } + + let underlyingError = error.underlyingAdaptError ?? error + let request = DataRequest(session: session, requestTask: requestTask, error: underlyingError) + + if let retrier = retrier, error is AdaptError { + allowRetrier(retrier, toRetry: request, with: underlyingError) + } else { + if startRequestsImmediately { request.resume() } + } + + return request + } + + // MARK: - Download Request + + // MARK: URL Request + + /// Creates a `DownloadRequest` to retrieve the contents the specified `url`, `method`, `parameters`, `encoding`, + /// `headers` and save them to the `destination`. + /// + /// If `destination` is not specified, the contents will remain in the temporary location determined by the + /// underlying URL session. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter url: The URL. + /// - parameter method: The HTTP method. `.get` by default. + /// - parameter parameters: The parameters. `nil` by default. + /// - parameter encoding: The parameter encoding. `URLEncoding.default` by default. + /// - parameter headers: The HTTP headers. `nil` by default. + /// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. + /// + /// - returns: The created `DownloadRequest`. + @discardableResult + open func download( + _ url: URLConvertible, + method: HTTPMethod = .get, + parameters: Parameters? = nil, + encoding: ParameterEncoding = URLEncoding.default, + headers: HTTPHeaders? = nil, + to destination: DownloadRequest.DownloadFileDestination? = nil) + -> DownloadRequest + { + do { + let urlRequest = try URLRequest(url: url, method: method, headers: headers) + let encodedURLRequest = try encoding.encode(urlRequest, with: parameters) + return download(encodedURLRequest, to: destination) + } catch { + return download(nil, to: destination, failedWith: error) + } + } + + /// Creates a `DownloadRequest` to retrieve the contents of a URL based on the specified `urlRequest` and save + /// them to the `destination`. + /// + /// If `destination` is not specified, the contents will remain in the temporary location determined by the + /// underlying URL session. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter urlRequest: The URL request + /// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. + /// + /// - returns: The created `DownloadRequest`. + @discardableResult + open func download( + _ urlRequest: URLRequestConvertible, + to destination: DownloadRequest.DownloadFileDestination? = nil) + -> DownloadRequest + { + do { + let urlRequest = try urlRequest.asURLRequest() + return download(.request(urlRequest), to: destination) + } catch { + return download(nil, to: destination, failedWith: error) + } + } + + // MARK: Resume Data + + /// Creates a `DownloadRequest` from the `resumeData` produced from a previous request cancellation to retrieve + /// the contents of the original request and save them to the `destination`. + /// + /// If `destination` is not specified, the contents will remain in the temporary location determined by the + /// underlying URL session. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// On the latest release of all the Apple platforms (iOS 10, macOS 10.12, tvOS 10, watchOS 3), `resumeData` is broken + /// on background URL session configurations. There's an underlying bug in the `resumeData` generation logic where the + /// data is written incorrectly and will always fail to resume the download. For more information about the bug and + /// possible workarounds, please refer to the following Stack Overflow post: + /// + /// - http://stackoverflow.com/a/39347461/1342462 + /// + /// - parameter resumeData: The resume data. This is an opaque data blob produced by `URLSessionDownloadTask` + /// when a task is cancelled. See `URLSession -downloadTask(withResumeData:)` for + /// additional information. + /// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. + /// + /// - returns: The created `DownloadRequest`. + @discardableResult + open func download( + resumingWith resumeData: Data, + to destination: DownloadRequest.DownloadFileDestination? = nil) + -> DownloadRequest + { + return download(.resumeData(resumeData), to: destination) + } + + // MARK: Private - Download Implementation + + private func download( + _ downloadable: DownloadRequest.Downloadable, + to destination: DownloadRequest.DownloadFileDestination?) + -> DownloadRequest + { + do { + let task = try downloadable.task(session: session, adapter: adapter, queue: queue) + let download = DownloadRequest(session: session, requestTask: .download(downloadable, task)) + + download.downloadDelegate.destination = destination + + delegate[task] = download + + if startRequestsImmediately { download.resume() } + + return download + } catch { + return download(downloadable, to: destination, failedWith: error) + } + } + + private func download( + _ downloadable: DownloadRequest.Downloadable?, + to destination: DownloadRequest.DownloadFileDestination?, + failedWith error: Error) + -> DownloadRequest + { + var downloadTask: Request.RequestTask = .download(nil, nil) + + if let downloadable = downloadable { + downloadTask = .download(downloadable, nil) + } + + let underlyingError = error.underlyingAdaptError ?? error + + let download = DownloadRequest(session: session, requestTask: downloadTask, error: underlyingError) + download.downloadDelegate.destination = destination + + if let retrier = retrier, error is AdaptError { + allowRetrier(retrier, toRetry: download, with: underlyingError) + } else { + if startRequestsImmediately { download.resume() } + } + + return download + } + + // MARK: - Upload Request + + // MARK: File + + /// Creates an `UploadRequest` from the specified `url`, `method` and `headers` for uploading the `file`. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter file: The file to upload. + /// - parameter url: The URL. + /// - parameter method: The HTTP method. `.post` by default. + /// - parameter headers: The HTTP headers. `nil` by default. + /// + /// - returns: The created `UploadRequest`. + @discardableResult + open func upload( + _ fileURL: URL, + to url: URLConvertible, + method: HTTPMethod = .post, + headers: HTTPHeaders? = nil) + -> UploadRequest + { + do { + let urlRequest = try URLRequest(url: url, method: method, headers: headers) + return upload(fileURL, with: urlRequest) + } catch { + return upload(nil, failedWith: error) + } + } + + /// Creates a `UploadRequest` from the specified `urlRequest` for uploading the `file`. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter file: The file to upload. + /// - parameter urlRequest: The URL request. + /// + /// - returns: The created `UploadRequest`. + @discardableResult + open func upload(_ fileURL: URL, with urlRequest: URLRequestConvertible) -> UploadRequest { + do { + let urlRequest = try urlRequest.asURLRequest() + return upload(.file(fileURL, urlRequest)) + } catch { + return upload(nil, failedWith: error) + } + } + + // MARK: Data + + /// Creates an `UploadRequest` from the specified `url`, `method` and `headers` for uploading the `data`. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter data: The data to upload. + /// - parameter url: The URL. + /// - parameter method: The HTTP method. `.post` by default. + /// - parameter headers: The HTTP headers. `nil` by default. + /// + /// - returns: The created `UploadRequest`. + @discardableResult + open func upload( + _ data: Data, + to url: URLConvertible, + method: HTTPMethod = .post, + headers: HTTPHeaders? = nil) + -> UploadRequest + { + do { + let urlRequest = try URLRequest(url: url, method: method, headers: headers) + return upload(data, with: urlRequest) + } catch { + return upload(nil, failedWith: error) + } + } + + /// Creates an `UploadRequest` from the specified `urlRequest` for uploading the `data`. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter data: The data to upload. + /// - parameter urlRequest: The URL request. + /// + /// - returns: The created `UploadRequest`. + @discardableResult + open func upload(_ data: Data, with urlRequest: URLRequestConvertible) -> UploadRequest { + do { + let urlRequest = try urlRequest.asURLRequest() + return upload(.data(data, urlRequest)) + } catch { + return upload(nil, failedWith: error) + } + } + + // MARK: InputStream + + /// Creates an `UploadRequest` from the specified `url`, `method` and `headers` for uploading the `stream`. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter stream: The stream to upload. + /// - parameter url: The URL. + /// - parameter method: The HTTP method. `.post` by default. + /// - parameter headers: The HTTP headers. `nil` by default. + /// + /// - returns: The created `UploadRequest`. + @discardableResult + open func upload( + _ stream: InputStream, + to url: URLConvertible, + method: HTTPMethod = .post, + headers: HTTPHeaders? = nil) + -> UploadRequest + { + do { + let urlRequest = try URLRequest(url: url, method: method, headers: headers) + return upload(stream, with: urlRequest) + } catch { + return upload(nil, failedWith: error) + } + } + + /// Creates an `UploadRequest` from the specified `urlRequest` for uploading the `stream`. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter stream: The stream to upload. + /// - parameter urlRequest: The URL request. + /// + /// - returns: The created `UploadRequest`. + @discardableResult + open func upload(_ stream: InputStream, with urlRequest: URLRequestConvertible) -> UploadRequest { + do { + let urlRequest = try urlRequest.asURLRequest() + return upload(.stream(stream, urlRequest)) + } catch { + return upload(nil, failedWith: error) + } + } + + // MARK: MultipartFormData + + /// Encodes `multipartFormData` using `encodingMemoryThreshold` and calls `encodingCompletion` with new + /// `UploadRequest` using the `url`, `method` and `headers`. + /// + /// It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative + /// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most + /// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to + /// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory + /// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be + /// used for larger payloads such as video content. + /// + /// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory + /// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, + /// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk + /// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding + /// technique was used. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. + /// - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. + /// `multipartFormDataEncodingMemoryThreshold` by default. + /// - parameter url: The URL. + /// - parameter method: The HTTP method. `.post` by default. + /// - parameter headers: The HTTP headers. `nil` by default. + /// - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. + open func upload( + multipartFormData: @escaping (MultipartFormData) -> Void, + usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold, + to url: URLConvertible, + method: HTTPMethod = .post, + headers: HTTPHeaders? = nil, + encodingCompletion: ((MultipartFormDataEncodingResult) -> Void)?) + { + do { + let urlRequest = try URLRequest(url: url, method: method, headers: headers) + + return upload( + multipartFormData: multipartFormData, + usingThreshold: encodingMemoryThreshold, + with: urlRequest, + encodingCompletion: encodingCompletion + ) + } catch { + DispatchQueue.main.async { encodingCompletion?(.failure(error)) } + } + } + + /// Encodes `multipartFormData` using `encodingMemoryThreshold` and calls `encodingCompletion` with new + /// `UploadRequest` using the `urlRequest`. + /// + /// It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative + /// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most + /// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to + /// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory + /// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be + /// used for larger payloads such as video content. + /// + /// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory + /// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, + /// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk + /// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding + /// technique was used. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. + /// - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. + /// `multipartFormDataEncodingMemoryThreshold` by default. + /// - parameter urlRequest: The URL request. + /// - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. + open func upload( + multipartFormData: @escaping (MultipartFormData) -> Void, + usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold, + with urlRequest: URLRequestConvertible, + encodingCompletion: ((MultipartFormDataEncodingResult) -> Void)?) + { + DispatchQueue.global(qos: .utility).async { + let formData = MultipartFormData() + multipartFormData(formData) + + var tempFileURL: URL? + + do { + var urlRequestWithContentType = try urlRequest.asURLRequest() + urlRequestWithContentType.setValue(formData.contentType, forHTTPHeaderField: "Content-Type") + + let isBackgroundSession = self.session.configuration.identifier != nil + + if formData.contentLength < encodingMemoryThreshold && !isBackgroundSession { + let data = try formData.encode() + + let encodingResult = MultipartFormDataEncodingResult.success( + request: self.upload(data, with: urlRequestWithContentType), + streamingFromDisk: false, + streamFileURL: nil + ) + + DispatchQueue.main.async { encodingCompletion?(encodingResult) } + } else { + let fileManager = FileManager.default + let tempDirectoryURL = URL(fileURLWithPath: NSTemporaryDirectory()) + let directoryURL = tempDirectoryURL.appendingPathComponent("org.alamofire.manager/multipart.form.data") + let fileName = UUID().uuidString + let fileURL = directoryURL.appendingPathComponent(fileName) + + tempFileURL = fileURL + + var directoryError: Error? + + // Create directory inside serial queue to ensure two threads don't do this in parallel + self.queue.sync { + do { + try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil) + } catch { + directoryError = error + } + } + + if let directoryError = directoryError { throw directoryError } + + try formData.writeEncodedData(to: fileURL) + + let upload = self.upload(fileURL, with: urlRequestWithContentType) + + // Cleanup the temp file once the upload is complete + upload.delegate.queue.addOperation { + do { + try FileManager.default.removeItem(at: fileURL) + } catch { + // No-op + } + } + + DispatchQueue.main.async { + let encodingResult = MultipartFormDataEncodingResult.success( + request: upload, + streamingFromDisk: true, + streamFileURL: fileURL + ) + + encodingCompletion?(encodingResult) + } + } + } catch { + // Cleanup the temp file in the event that the multipart form data encoding failed + if let tempFileURL = tempFileURL { + do { + try FileManager.default.removeItem(at: tempFileURL) + } catch { + // No-op + } + } + + DispatchQueue.main.async { encodingCompletion?(.failure(error)) } + } + } + } + + // MARK: Private - Upload Implementation + + private func upload(_ uploadable: UploadRequest.Uploadable) -> UploadRequest { + do { + let task = try uploadable.task(session: session, adapter: adapter, queue: queue) + let upload = UploadRequest(session: session, requestTask: .upload(uploadable, task)) + + if case let .stream(inputStream, _) = uploadable { + upload.delegate.taskNeedNewBodyStream = { _, _ in inputStream } + } + + delegate[task] = upload + + if startRequestsImmediately { upload.resume() } + + return upload + } catch { + return upload(uploadable, failedWith: error) + } + } + + private func upload(_ uploadable: UploadRequest.Uploadable?, failedWith error: Error) -> UploadRequest { + var uploadTask: Request.RequestTask = .upload(nil, nil) + + if let uploadable = uploadable { + uploadTask = .upload(uploadable, nil) + } + + let underlyingError = error.underlyingAdaptError ?? error + let upload = UploadRequest(session: session, requestTask: uploadTask, error: underlyingError) + + if let retrier = retrier, error is AdaptError { + allowRetrier(retrier, toRetry: upload, with: underlyingError) + } else { + if startRequestsImmediately { upload.resume() } + } + + return upload + } + +#if !os(watchOS) + + // MARK: - Stream Request + + // MARK: Hostname and Port + + /// Creates a `StreamRequest` for bidirectional streaming using the `hostname` and `port`. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter hostName: The hostname of the server to connect to. + /// - parameter port: The port of the server to connect to. + /// + /// - returns: The created `StreamRequest`. + @discardableResult + @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) + open func stream(withHostName hostName: String, port: Int) -> StreamRequest { + return stream(.stream(hostName: hostName, port: port)) + } + + // MARK: NetService + + /// Creates a `StreamRequest` for bidirectional streaming using the `netService`. + /// + /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. + /// + /// - parameter netService: The net service used to identify the endpoint. + /// + /// - returns: The created `StreamRequest`. + @discardableResult + @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) + open func stream(with netService: NetService) -> StreamRequest { + return stream(.netService(netService)) + } + + // MARK: Private - Stream Implementation + + @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) + private func stream(_ streamable: StreamRequest.Streamable) -> StreamRequest { + do { + let task = try streamable.task(session: session, adapter: adapter, queue: queue) + let request = StreamRequest(session: session, requestTask: .stream(streamable, task)) + + delegate[task] = request + + if startRequestsImmediately { request.resume() } + + return request + } catch { + return stream(failedWith: error) + } + } + + @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) + private func stream(failedWith error: Error) -> StreamRequest { + let stream = StreamRequest(session: session, requestTask: .stream(nil, nil), error: error) + if startRequestsImmediately { stream.resume() } + return stream + } + +#endif + + // MARK: - Internal - Retry Request + + func retry(_ request: Request) -> Bool { + guard let originalTask = request.originalTask else { return false } + + do { + let task = try originalTask.task(session: session, adapter: adapter, queue: queue) + + if let originalTask = request.task { + delegate[originalTask] = nil // removes the old request to avoid endless growth + } + + request.delegate.task = task // resets all task delegate data + + request.retryCount += 1 + request.startTime = CFAbsoluteTimeGetCurrent() + request.endTime = nil + + task.resume() + + return true + } catch { + request.delegate.error = error.underlyingAdaptError ?? error + return false + } + } + + private func allowRetrier(_ retrier: RequestRetrier, toRetry request: Request, with error: Error) { + DispatchQueue.utility.async { [weak self] in + guard let strongSelf = self else { return } + + retrier.should(strongSelf, retry: request, with: error) { shouldRetry, timeDelay in + guard let strongSelf = self else { return } + + guard shouldRetry else { + if strongSelf.startRequestsImmediately { request.resume() } + return + } + + DispatchQueue.utility.after(timeDelay) { + guard let strongSelf = self else { return } + + let retrySucceeded = strongSelf.retry(request) + + if retrySucceeded, let task = request.task { + strongSelf.delegate[task] = request + } else { + if strongSelf.startRequestsImmediately { request.resume() } + } + } + } + } + } +} diff --git a/Pods/Alamofire/Source/TaskDelegate.swift b/Pods/Alamofire/Source/TaskDelegate.swift new file mode 100644 index 0000000..8e19888 --- /dev/null +++ b/Pods/Alamofire/Source/TaskDelegate.swift @@ -0,0 +1,466 @@ +// +// TaskDelegate.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// The task delegate is responsible for handling all delegate callbacks for the underlying task as well as +/// executing all operations attached to the serial operation queue upon task completion. +open class TaskDelegate: NSObject { + + // MARK: Properties + + /// The serial operation queue used to execute all operations after the task completes. + public let queue: OperationQueue + + /// The data returned by the server. + public var data: Data? { return nil } + + /// The error generated throughout the lifecyle of the task. + public var error: Error? + + var task: URLSessionTask? { + set { + taskLock.lock(); defer { taskLock.unlock() } + _task = newValue + } + get { + taskLock.lock(); defer { taskLock.unlock() } + return _task + } + } + + var initialResponseTime: CFAbsoluteTime? + var credential: URLCredential? + var metrics: AnyObject? // URLSessionTaskMetrics + + private var _task: URLSessionTask? { + didSet { reset() } + } + + private let taskLock = NSLock() + + // MARK: Lifecycle + + init(task: URLSessionTask?) { + _task = task + + self.queue = { + let operationQueue = OperationQueue() + + operationQueue.maxConcurrentOperationCount = 1 + operationQueue.isSuspended = true + operationQueue.qualityOfService = .utility + + return operationQueue + }() + } + + func reset() { + error = nil + initialResponseTime = nil + } + + // MARK: URLSessionTaskDelegate + + var taskWillPerformHTTPRedirection: ((URLSession, URLSessionTask, HTTPURLResponse, URLRequest) -> URLRequest?)? + var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? + var taskNeedNewBodyStream: ((URLSession, URLSessionTask) -> InputStream?)? + var taskDidCompleteWithError: ((URLSession, URLSessionTask, Error?) -> Void)? + + @objc(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:) + func urlSession( + _ session: URLSession, + task: URLSessionTask, + willPerformHTTPRedirection response: HTTPURLResponse, + newRequest request: URLRequest, + completionHandler: @escaping (URLRequest?) -> Void) + { + var redirectRequest: URLRequest? = request + + if let taskWillPerformHTTPRedirection = taskWillPerformHTTPRedirection { + redirectRequest = taskWillPerformHTTPRedirection(session, task, response, request) + } + + completionHandler(redirectRequest) + } + + @objc(URLSession:task:didReceiveChallenge:completionHandler:) + func urlSession( + _ session: URLSession, + task: URLSessionTask, + didReceive challenge: URLAuthenticationChallenge, + completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) + { + var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling + var credential: URLCredential? + + if let taskDidReceiveChallenge = taskDidReceiveChallenge { + (disposition, credential) = taskDidReceiveChallenge(session, task, challenge) + } else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { + let host = challenge.protectionSpace.host + + if + let serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicy(forHost: host), + let serverTrust = challenge.protectionSpace.serverTrust + { + if serverTrustPolicy.evaluate(serverTrust, forHost: host) { + disposition = .useCredential + credential = URLCredential(trust: serverTrust) + } else { + disposition = .cancelAuthenticationChallenge + } + } + } else { + if challenge.previousFailureCount > 0 { + disposition = .rejectProtectionSpace + } else { + credential = self.credential ?? session.configuration.urlCredentialStorage?.defaultCredential(for: challenge.protectionSpace) + + if credential != nil { + disposition = .useCredential + } + } + } + + completionHandler(disposition, credential) + } + + @objc(URLSession:task:needNewBodyStream:) + func urlSession( + _ session: URLSession, + task: URLSessionTask, + needNewBodyStream completionHandler: @escaping (InputStream?) -> Void) + { + var bodyStream: InputStream? + + if let taskNeedNewBodyStream = taskNeedNewBodyStream { + bodyStream = taskNeedNewBodyStream(session, task) + } + + completionHandler(bodyStream) + } + + @objc(URLSession:task:didCompleteWithError:) + func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { + if let taskDidCompleteWithError = taskDidCompleteWithError { + taskDidCompleteWithError(session, task, error) + } else { + if let error = error { + if self.error == nil { self.error = error } + + if + let downloadDelegate = self as? DownloadTaskDelegate, + let resumeData = (error as NSError).userInfo[NSURLSessionDownloadTaskResumeData] as? Data + { + downloadDelegate.resumeData = resumeData + } + } + + queue.isSuspended = false + } + } +} + +// MARK: - + +class DataTaskDelegate: TaskDelegate, URLSessionDataDelegate { + + // MARK: Properties + + var dataTask: URLSessionDataTask { return task as! URLSessionDataTask } + + override var data: Data? { + if dataStream != nil { + return nil + } else { + return mutableData + } + } + + var progress: Progress + var progressHandler: (closure: Request.ProgressHandler, queue: DispatchQueue)? + + var dataStream: ((_ data: Data) -> Void)? + + private var totalBytesReceived: Int64 = 0 + private var mutableData: Data + + private var expectedContentLength: Int64? + + // MARK: Lifecycle + + override init(task: URLSessionTask?) { + mutableData = Data() + progress = Progress(totalUnitCount: 0) + + super.init(task: task) + } + + override func reset() { + super.reset() + + progress = Progress(totalUnitCount: 0) + totalBytesReceived = 0 + mutableData = Data() + expectedContentLength = nil + } + + // MARK: URLSessionDataDelegate + + var dataTaskDidReceiveResponse: ((URLSession, URLSessionDataTask, URLResponse) -> URLSession.ResponseDisposition)? + var dataTaskDidBecomeDownloadTask: ((URLSession, URLSessionDataTask, URLSessionDownloadTask) -> Void)? + var dataTaskDidReceiveData: ((URLSession, URLSessionDataTask, Data) -> Void)? + var dataTaskWillCacheResponse: ((URLSession, URLSessionDataTask, CachedURLResponse) -> CachedURLResponse?)? + + func urlSession( + _ session: URLSession, + dataTask: URLSessionDataTask, + didReceive response: URLResponse, + completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) + { + var disposition: URLSession.ResponseDisposition = .allow + + expectedContentLength = response.expectedContentLength + + if let dataTaskDidReceiveResponse = dataTaskDidReceiveResponse { + disposition = dataTaskDidReceiveResponse(session, dataTask, response) + } + + completionHandler(disposition) + } + + func urlSession( + _ session: URLSession, + dataTask: URLSessionDataTask, + didBecome downloadTask: URLSessionDownloadTask) + { + dataTaskDidBecomeDownloadTask?(session, dataTask, downloadTask) + } + + func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { + if initialResponseTime == nil { initialResponseTime = CFAbsoluteTimeGetCurrent() } + + if let dataTaskDidReceiveData = dataTaskDidReceiveData { + dataTaskDidReceiveData(session, dataTask, data) + } else { + if let dataStream = dataStream { + dataStream(data) + } else { + mutableData.append(data) + } + + let bytesReceived = Int64(data.count) + totalBytesReceived += bytesReceived + let totalBytesExpected = dataTask.response?.expectedContentLength ?? NSURLSessionTransferSizeUnknown + + progress.totalUnitCount = totalBytesExpected + progress.completedUnitCount = totalBytesReceived + + if let progressHandler = progressHandler { + progressHandler.queue.async { progressHandler.closure(self.progress) } + } + } + } + + func urlSession( + _ session: URLSession, + dataTask: URLSessionDataTask, + willCacheResponse proposedResponse: CachedURLResponse, + completionHandler: @escaping (CachedURLResponse?) -> Void) + { + var cachedResponse: CachedURLResponse? = proposedResponse + + if let dataTaskWillCacheResponse = dataTaskWillCacheResponse { + cachedResponse = dataTaskWillCacheResponse(session, dataTask, proposedResponse) + } + + completionHandler(cachedResponse) + } +} + +// MARK: - + +class DownloadTaskDelegate: TaskDelegate, URLSessionDownloadDelegate { + + // MARK: Properties + + var downloadTask: URLSessionDownloadTask { return task as! URLSessionDownloadTask } + + var progress: Progress + var progressHandler: (closure: Request.ProgressHandler, queue: DispatchQueue)? + + var resumeData: Data? + override var data: Data? { return resumeData } + + var destination: DownloadRequest.DownloadFileDestination? + + var temporaryURL: URL? + var destinationURL: URL? + + var fileURL: URL? { return destination != nil ? destinationURL : temporaryURL } + + // MARK: Lifecycle + + override init(task: URLSessionTask?) { + progress = Progress(totalUnitCount: 0) + super.init(task: task) + } + + override func reset() { + super.reset() + + progress = Progress(totalUnitCount: 0) + resumeData = nil + } + + // MARK: URLSessionDownloadDelegate + + var downloadTaskDidFinishDownloadingToURL: ((URLSession, URLSessionDownloadTask, URL) -> URL)? + var downloadTaskDidWriteData: ((URLSession, URLSessionDownloadTask, Int64, Int64, Int64) -> Void)? + var downloadTaskDidResumeAtOffset: ((URLSession, URLSessionDownloadTask, Int64, Int64) -> Void)? + + func urlSession( + _ session: URLSession, + downloadTask: URLSessionDownloadTask, + didFinishDownloadingTo location: URL) + { + temporaryURL = location + + guard + let destination = destination, + let response = downloadTask.response as? HTTPURLResponse + else { return } + + let result = destination(location, response) + let destinationURL = result.destinationURL + let options = result.options + + self.destinationURL = destinationURL + + do { + if options.contains(.removePreviousFile), FileManager.default.fileExists(atPath: destinationURL.path) { + try FileManager.default.removeItem(at: destinationURL) + } + + if options.contains(.createIntermediateDirectories) { + let directory = destinationURL.deletingLastPathComponent() + try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) + } + + try FileManager.default.moveItem(at: location, to: destinationURL) + } catch { + self.error = error + } + } + + func urlSession( + _ session: URLSession, + downloadTask: URLSessionDownloadTask, + didWriteData bytesWritten: Int64, + totalBytesWritten: Int64, + totalBytesExpectedToWrite: Int64) + { + if initialResponseTime == nil { initialResponseTime = CFAbsoluteTimeGetCurrent() } + + if let downloadTaskDidWriteData = downloadTaskDidWriteData { + downloadTaskDidWriteData( + session, + downloadTask, + bytesWritten, + totalBytesWritten, + totalBytesExpectedToWrite + ) + } else { + progress.totalUnitCount = totalBytesExpectedToWrite + progress.completedUnitCount = totalBytesWritten + + if let progressHandler = progressHandler { + progressHandler.queue.async { progressHandler.closure(self.progress) } + } + } + } + + func urlSession( + _ session: URLSession, + downloadTask: URLSessionDownloadTask, + didResumeAtOffset fileOffset: Int64, + expectedTotalBytes: Int64) + { + if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset { + downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes) + } else { + progress.totalUnitCount = expectedTotalBytes + progress.completedUnitCount = fileOffset + } + } +} + +// MARK: - + +class UploadTaskDelegate: DataTaskDelegate { + + // MARK: Properties + + var uploadTask: URLSessionUploadTask { return task as! URLSessionUploadTask } + + var uploadProgress: Progress + var uploadProgressHandler: (closure: Request.ProgressHandler, queue: DispatchQueue)? + + // MARK: Lifecycle + + override init(task: URLSessionTask?) { + uploadProgress = Progress(totalUnitCount: 0) + super.init(task: task) + } + + override func reset() { + super.reset() + uploadProgress = Progress(totalUnitCount: 0) + } + + // MARK: URLSessionTaskDelegate + + var taskDidSendBodyData: ((URLSession, URLSessionTask, Int64, Int64, Int64) -> Void)? + + func URLSession( + _ session: URLSession, + task: URLSessionTask, + didSendBodyData bytesSent: Int64, + totalBytesSent: Int64, + totalBytesExpectedToSend: Int64) + { + if initialResponseTime == nil { initialResponseTime = CFAbsoluteTimeGetCurrent() } + + if let taskDidSendBodyData = taskDidSendBodyData { + taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend) + } else { + uploadProgress.totalUnitCount = totalBytesExpectedToSend + uploadProgress.completedUnitCount = totalBytesSent + + if let uploadProgressHandler = uploadProgressHandler { + uploadProgressHandler.queue.async { uploadProgressHandler.closure(self.uploadProgress) } + } + } + } +} diff --git a/Pods/Alamofire/Source/Timeline.swift b/Pods/Alamofire/Source/Timeline.swift new file mode 100644 index 0000000..181c988 --- /dev/null +++ b/Pods/Alamofire/Source/Timeline.swift @@ -0,0 +1,136 @@ +// +// Timeline.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +/// Responsible for computing the timing metrics for the complete lifecycle of a `Request`. +public struct Timeline { + /// The time the request was initialized. + public let requestStartTime: CFAbsoluteTime + + /// The time the first bytes were received from or sent to the server. + public let initialResponseTime: CFAbsoluteTime + + /// The time when the request was completed. + public let requestCompletedTime: CFAbsoluteTime + + /// The time when the response serialization was completed. + public let serializationCompletedTime: CFAbsoluteTime + + /// The time interval in seconds from the time the request started to the initial response from the server. + public let latency: TimeInterval + + /// The time interval in seconds from the time the request started to the time the request completed. + public let requestDuration: TimeInterval + + /// The time interval in seconds from the time the request completed to the time response serialization completed. + public let serializationDuration: TimeInterval + + /// The time interval in seconds from the time the request started to the time response serialization completed. + public let totalDuration: TimeInterval + + /// Creates a new `Timeline` instance with the specified request times. + /// + /// - parameter requestStartTime: The time the request was initialized. Defaults to `0.0`. + /// - parameter initialResponseTime: The time the first bytes were received from or sent to the server. + /// Defaults to `0.0`. + /// - parameter requestCompletedTime: The time when the request was completed. Defaults to `0.0`. + /// - parameter serializationCompletedTime: The time when the response serialization was completed. Defaults + /// to `0.0`. + /// + /// - returns: The new `Timeline` instance. + public init( + requestStartTime: CFAbsoluteTime = 0.0, + initialResponseTime: CFAbsoluteTime = 0.0, + requestCompletedTime: CFAbsoluteTime = 0.0, + serializationCompletedTime: CFAbsoluteTime = 0.0) + { + self.requestStartTime = requestStartTime + self.initialResponseTime = initialResponseTime + self.requestCompletedTime = requestCompletedTime + self.serializationCompletedTime = serializationCompletedTime + + self.latency = initialResponseTime - requestStartTime + self.requestDuration = requestCompletedTime - requestStartTime + self.serializationDuration = serializationCompletedTime - requestCompletedTime + self.totalDuration = serializationCompletedTime - requestStartTime + } +} + +// MARK: - CustomStringConvertible + +extension Timeline: CustomStringConvertible { + /// The textual representation used when written to an output stream, which includes the latency, the request + /// duration and the total duration. + public var description: String { + let latency = String(format: "%.3f", self.latency) + let requestDuration = String(format: "%.3f", self.requestDuration) + let serializationDuration = String(format: "%.3f", self.serializationDuration) + let totalDuration = String(format: "%.3f", self.totalDuration) + + // NOTE: Had to move to string concatenation due to memory leak filed as rdar://26761490. Once memory leak is + // fixed, we should move back to string interpolation by reverting commit 7d4a43b1. + let timings = [ + "\"Latency\": " + latency + " secs", + "\"Request Duration\": " + requestDuration + " secs", + "\"Serialization Duration\": " + serializationDuration + " secs", + "\"Total Duration\": " + totalDuration + " secs" + ] + + return "Timeline: { " + timings.joined(separator: ", ") + " }" + } +} + +// MARK: - CustomDebugStringConvertible + +extension Timeline: CustomDebugStringConvertible { + /// The textual representation used when written to an output stream, which includes the request start time, the + /// initial response time, the request completed time, the serialization completed time, the latency, the request + /// duration and the total duration. + public var debugDescription: String { + let requestStartTime = String(format: "%.3f", self.requestStartTime) + let initialResponseTime = String(format: "%.3f", self.initialResponseTime) + let requestCompletedTime = String(format: "%.3f", self.requestCompletedTime) + let serializationCompletedTime = String(format: "%.3f", self.serializationCompletedTime) + let latency = String(format: "%.3f", self.latency) + let requestDuration = String(format: "%.3f", self.requestDuration) + let serializationDuration = String(format: "%.3f", self.serializationDuration) + let totalDuration = String(format: "%.3f", self.totalDuration) + + // NOTE: Had to move to string concatenation due to memory leak filed as rdar://26761490. Once memory leak is + // fixed, we should move back to string interpolation by reverting commit 7d4a43b1. + let timings = [ + "\"Request Start Time\": " + requestStartTime, + "\"Initial Response Time\": " + initialResponseTime, + "\"Request Completed Time\": " + requestCompletedTime, + "\"Serialization Completed Time\": " + serializationCompletedTime, + "\"Latency\": " + latency + " secs", + "\"Request Duration\": " + requestDuration + " secs", + "\"Serialization Duration\": " + serializationDuration + " secs", + "\"Total Duration\": " + totalDuration + " secs" + ] + + return "Timeline: { " + timings.joined(separator: ", ") + " }" + } +} diff --git a/Pods/Alamofire/Source/Validation.swift b/Pods/Alamofire/Source/Validation.swift new file mode 100644 index 0000000..ec2c5c3 --- /dev/null +++ b/Pods/Alamofire/Source/Validation.swift @@ -0,0 +1,315 @@ +// +// Validation.swift +// +// Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +import Foundation + +extension Request { + + // MARK: Helper Types + + fileprivate typealias ErrorReason = AFError.ResponseValidationFailureReason + + /// Used to represent whether validation was successful or encountered an error resulting in a failure. + /// + /// - success: The validation was successful. + /// - failure: The validation failed encountering the provided error. + public enum ValidationResult { + case success + case failure(Error) + } + + fileprivate struct MIMEType { + let type: String + let subtype: String + + var isWildcard: Bool { return type == "*" && subtype == "*" } + + init?(_ string: String) { + let components: [String] = { + let stripped = string.trimmingCharacters(in: .whitespacesAndNewlines) + + #if swift(>=3.2) + let split = stripped[..<(stripped.range(of: ";")?.lowerBound ?? stripped.endIndex)] + #else + let split = stripped.substring(to: stripped.range(of: ";")?.lowerBound ?? stripped.endIndex) + #endif + + return split.components(separatedBy: "/") + }() + + if let type = components.first, let subtype = components.last { + self.type = type + self.subtype = subtype + } else { + return nil + } + } + + func matches(_ mime: MIMEType) -> Bool { + switch (type, subtype) { + case (mime.type, mime.subtype), (mime.type, "*"), ("*", mime.subtype), ("*", "*"): + return true + default: + return false + } + } + } + + // MARK: Properties + + fileprivate var acceptableStatusCodes: [Int] { return Array(200..<300) } + + fileprivate var acceptableContentTypes: [String] { + if let accept = request?.value(forHTTPHeaderField: "Accept") { + return accept.components(separatedBy: ",") + } + + return ["*/*"] + } + + // MARK: Status Code + + fileprivate func validate( + statusCode acceptableStatusCodes: S, + response: HTTPURLResponse) + -> ValidationResult + where S.Iterator.Element == Int + { + if acceptableStatusCodes.contains(response.statusCode) { + return .success + } else { + let reason: ErrorReason = .unacceptableStatusCode(code: response.statusCode) + return .failure(AFError.responseValidationFailed(reason: reason)) + } + } + + // MARK: Content Type + + fileprivate func validate( + contentType acceptableContentTypes: S, + response: HTTPURLResponse, + data: Data?) + -> ValidationResult + where S.Iterator.Element == String + { + guard let data = data, data.count > 0 else { return .success } + + guard + let responseContentType = response.mimeType, + let responseMIMEType = MIMEType(responseContentType) + else { + for contentType in acceptableContentTypes { + if let mimeType = MIMEType(contentType), mimeType.isWildcard { + return .success + } + } + + let error: AFError = { + let reason: ErrorReason = .missingContentType(acceptableContentTypes: Array(acceptableContentTypes)) + return AFError.responseValidationFailed(reason: reason) + }() + + return .failure(error) + } + + for contentType in acceptableContentTypes { + if let acceptableMIMEType = MIMEType(contentType), acceptableMIMEType.matches(responseMIMEType) { + return .success + } + } + + let error: AFError = { + let reason: ErrorReason = .unacceptableContentType( + acceptableContentTypes: Array(acceptableContentTypes), + responseContentType: responseContentType + ) + + return AFError.responseValidationFailed(reason: reason) + }() + + return .failure(error) + } +} + +// MARK: - + +extension DataRequest { + /// A closure used to validate a request that takes a URL request, a URL response and data, and returns whether the + /// request was valid. + public typealias Validation = (URLRequest?, HTTPURLResponse, Data?) -> ValidationResult + + /// Validates the request, using the specified closure. + /// + /// If validation fails, subsequent calls to response handlers will have an associated error. + /// + /// - parameter validation: A closure to validate the request. + /// + /// - returns: The request. + @discardableResult + public func validate(_ validation: @escaping Validation) -> Self { + let validationExecution: () -> Void = { [unowned self] in + if + let response = self.response, + self.delegate.error == nil, + case let .failure(error) = validation(self.request, response, self.delegate.data) + { + self.delegate.error = error + } + } + + validations.append(validationExecution) + + return self + } + + /// Validates that the response has a status code in the specified sequence. + /// + /// If validation fails, subsequent calls to response handlers will have an associated error. + /// + /// - parameter range: The range of acceptable status codes. + /// + /// - returns: The request. + @discardableResult + public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { + return validate { [unowned self] _, response, _ in + return self.validate(statusCode: acceptableStatusCodes, response: response) + } + } + + /// Validates that the response has a content type in the specified sequence. + /// + /// If validation fails, subsequent calls to response handlers will have an associated error. + /// + /// - parameter contentType: The acceptable content types, which may specify wildcard types and/or subtypes. + /// + /// - returns: The request. + @discardableResult + public func validate(contentType acceptableContentTypes: S) -> Self where S.Iterator.Element == String { + return validate { [unowned self] _, response, data in + return self.validate(contentType: acceptableContentTypes, response: response, data: data) + } + } + + /// Validates that the response has a status code in the default acceptable range of 200...299, and that the content + /// type matches any specified in the Accept HTTP header field. + /// + /// If validation fails, subsequent calls to response handlers will have an associated error. + /// + /// - returns: The request. + @discardableResult + public func validate() -> Self { + return validate(statusCode: self.acceptableStatusCodes).validate(contentType: self.acceptableContentTypes) + } +} + +// MARK: - + +extension DownloadRequest { + /// A closure used to validate a request that takes a URL request, a URL response, a temporary URL and a + /// destination URL, and returns whether the request was valid. + public typealias Validation = ( + _ request: URLRequest?, + _ response: HTTPURLResponse, + _ temporaryURL: URL?, + _ destinationURL: URL?) + -> ValidationResult + + /// Validates the request, using the specified closure. + /// + /// If validation fails, subsequent calls to response handlers will have an associated error. + /// + /// - parameter validation: A closure to validate the request. + /// + /// - returns: The request. + @discardableResult + public func validate(_ validation: @escaping Validation) -> Self { + let validationExecution: () -> Void = { [unowned self] in + let request = self.request + let temporaryURL = self.downloadDelegate.temporaryURL + let destinationURL = self.downloadDelegate.destinationURL + + if + let response = self.response, + self.delegate.error == nil, + case let .failure(error) = validation(request, response, temporaryURL, destinationURL) + { + self.delegate.error = error + } + } + + validations.append(validationExecution) + + return self + } + + /// Validates that the response has a status code in the specified sequence. + /// + /// If validation fails, subsequent calls to response handlers will have an associated error. + /// + /// - parameter range: The range of acceptable status codes. + /// + /// - returns: The request. + @discardableResult + public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { + return validate { [unowned self] _, response, _, _ in + return self.validate(statusCode: acceptableStatusCodes, response: response) + } + } + + /// Validates that the response has a content type in the specified sequence. + /// + /// If validation fails, subsequent calls to response handlers will have an associated error. + /// + /// - parameter contentType: The acceptable content types, which may specify wildcard types and/or subtypes. + /// + /// - returns: The request. + @discardableResult + public func validate(contentType acceptableContentTypes: S) -> Self where S.Iterator.Element == String { + return validate { [unowned self] _, response, _, _ in + let fileURL = self.downloadDelegate.fileURL + + guard let validFileURL = fileURL else { + return .failure(AFError.responseValidationFailed(reason: .dataFileNil)) + } + + do { + let data = try Data(contentsOf: validFileURL) + return self.validate(contentType: acceptableContentTypes, response: response, data: data) + } catch { + return .failure(AFError.responseValidationFailed(reason: .dataFileReadFailed(at: validFileURL))) + } + } + } + + /// Validates that the response has a status code in the default acceptable range of 200...299, and that the content + /// type matches any specified in the Accept HTTP header field. + /// + /// If validation fails, subsequent calls to response handlers will have an associated error. + /// + /// - returns: The request. + @discardableResult + public func validate() -> Self { + return validate(statusCode: self.acceptableStatusCodes).validate(contentType: self.acceptableContentTypes) + } +} diff --git a/Pods/GTMSessionFetcher/LICENSE b/Pods/GTMSessionFetcher/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/Pods/GTMSessionFetcher/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/Pods/GTMSessionFetcher/README.md b/Pods/GTMSessionFetcher/README.md new file mode 100644 index 0000000..478efde --- /dev/null +++ b/Pods/GTMSessionFetcher/README.md @@ -0,0 +1,23 @@ +# Google Toolbox for Mac - Session Fetcher # + +**Project site**
    +**Discussion group** + +[![Build Status](https://travis-ci.org/google/gtm-session-fetcher.svg?branch=master)](https://travis-ci.org/google/gtm-session-fetcher) + +`GTMSessionFetcher` makes it easy for Cocoa applications to perform http +operations. The fetcher is implemented as a wrapper on `NSURLSession`, so its +behavior is asynchronous and uses operating-system settings on iOS and Mac OS X. + +Features include: +- Simple to build; only one source/header file pair is required +- Simple to use: takes just two lines of code to fetch a request +- Supports upload and download sessions +- Flexible cookie storage +- Automatic retry on errors, with exponential backoff +- Support for generating multipart MIME upload streams +- Easy, convenient logging of http requests and responses +- Supports plug-in authentication such as with GTMAppAuth +- Easily testable; self-mocking +- Automatic rate limiting when created by the `GTMSessionFetcherService` factory class +- Fully independent of other projects diff --git a/Pods/GTMSessionFetcher/Source/GTMGatherInputStream.h b/Pods/GTMSessionFetcher/Source/GTMGatherInputStream.h new file mode 100644 index 0000000..ec3c012 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMGatherInputStream.h @@ -0,0 +1,52 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +// The GTMGatherInput stream is an input stream implementation that is to be +// instantiated with an NSArray of NSData objects. It works in the traditional +// scatter/gather vector I/O model. Rather than allocating a big NSData object +// to hold all of the data and performing a copy into that object, the +// GTMGatherInputStream will maintain a reference to the NSArray and read from +// each NSData in turn as the read method is called. You should not alter the +// underlying set of NSData objects until all read operations on this input +// stream have completed. + +#import + +#ifndef GTM_NONNULL + #if defined(__has_attribute) + #if __has_attribute(nonnull) + #define GTM_NONNULL(x) __attribute__((nonnull x)) + #else + #define GTM_NONNULL(x) + #endif + #else + #define GTM_NONNULL(x) + #endif +#endif + +// Avoid multiple declaration of this class. +// +// Note: This should match the declaration of GTMGatherInputStream in GTMMIMEDocument.m + +#ifndef GTM_GATHERINPUTSTREAM_DECLARED +#define GTM_GATHERINPUTSTREAM_DECLARED + +@interface GTMGatherInputStream : NSInputStream + ++ (NSInputStream *)streamWithArray:(NSArray *)dataArray GTM_NONNULL((1)); + +@end + +#endif // GTM_GATHERINPUTSTREAM_DECLARED diff --git a/Pods/GTMSessionFetcher/Source/GTMGatherInputStream.m b/Pods/GTMSessionFetcher/Source/GTMGatherInputStream.m new file mode 100644 index 0000000..0f65310 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMGatherInputStream.m @@ -0,0 +1,185 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "GTMGatherInputStream.h" + +@implementation GTMGatherInputStream { + NSArray *_dataArray; // NSDatas that should be "gathered" and streamed. + NSUInteger _arrayIndex; // Index in the array of the current NSData. + long long _dataOffset; // Offset in the current NSData we are processing. + NSStreamStatus _streamStatus; + id __weak _delegate; // Stream delegate, defaults to self. +} + ++ (NSInputStream *)streamWithArray:(NSArray *)dataArray { + return [(GTMGatherInputStream *)[self alloc] initWithArray:dataArray]; +} + +- (instancetype)initWithArray:(NSArray *)dataArray { + self = [super init]; + if (self) { + _dataArray = dataArray; + _delegate = self; // An NSStream's default delegate should be self. + } + return self; +} + +#pragma mark - NSStream + +- (void)open { + _arrayIndex = 0; + _dataOffset = 0; + _streamStatus = NSStreamStatusOpen; +} + +- (void)close { + _streamStatus = NSStreamStatusClosed; +} + +- (id)delegate { + return _delegate; +} + +- (void)setDelegate:(id)delegate { + if (delegate == nil) { + _delegate = self; + } else { + _delegate = delegate; + } +} + +- (id)propertyForKey:(NSString *)key { + if ([key isEqual:NSStreamFileCurrentOffsetKey]) { + return @([self absoluteOffset]); + } + return nil; +} + +- (BOOL)setProperty:(id)property forKey:(NSString *)key { + if ([key isEqual:NSStreamFileCurrentOffsetKey]) { + NSNumber *absoluteOffsetNumber = property; + [self setAbsoluteOffset:absoluteOffsetNumber.longLongValue]; + return YES; + } + return NO; +} + +- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode { +} + +- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode { +} + +- (NSStreamStatus)streamStatus { + return _streamStatus; +} + +- (NSError *)streamError { + return nil; +} + +#pragma mark - NSInputStream + +- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len { + NSInteger bytesRead = 0; + NSUInteger bytesRemaining = len; + + // Read bytes from the currently-indexed array. + while ((bytesRemaining > 0) && (_arrayIndex < _dataArray.count)) { + NSData *data = [_dataArray objectAtIndex:_arrayIndex]; + + NSUInteger dataLen = data.length; + NSUInteger dataBytesLeft = dataLen - (NSUInteger)_dataOffset; + + NSUInteger bytesToCopy = MIN(bytesRemaining, dataBytesLeft); + NSRange range = NSMakeRange((NSUInteger) _dataOffset, bytesToCopy); + + [data getBytes:(buffer + bytesRead) range:range]; + + bytesRead += bytesToCopy; + _dataOffset += bytesToCopy; + bytesRemaining -= bytesToCopy; + + if (_dataOffset == (long long)dataLen) { + _dataOffset = 0; + _arrayIndex++; + } + } + if (_arrayIndex >= _dataArray.count) { + _streamStatus = NSStreamStatusAtEnd; + } + return bytesRead; +} + +- (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len { + return NO; // We don't support this style of reading. +} + +- (BOOL)hasBytesAvailable { + // If we return no, the read never finishes, even if we've already delivered all the bytes. + return YES; +} + +#pragma mark - NSStreamDelegate + +- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent { + id delegate = _delegate; + if (delegate != self) { + [delegate stream:self handleEvent:streamEvent]; + } +} + +#pragma mark - Private + +- (long long)absoluteOffset { + long long absoluteOffset = 0; + NSUInteger index = 0; + for (NSData *data in _dataArray) { + if (index >= _arrayIndex) { + break; + } + absoluteOffset += data.length; + ++index; + } + absoluteOffset += _dataOffset; + return absoluteOffset; +} + +- (void)setAbsoluteOffset:(long long)absoluteOffset { + if (absoluteOffset < 0) { + absoluteOffset = 0; + } + _arrayIndex = 0; + _dataOffset = absoluteOffset; + for (NSData *data in _dataArray) { + long long dataLen = (long long) data.length; + if (dataLen > _dataOffset) { + break; + } + _arrayIndex++; + _dataOffset -= dataLen; + } + if (_arrayIndex == _dataArray.count) { + if (_dataOffset > 0) { + _dataOffset = 0; + } + } +} + +@end diff --git a/Pods/GTMSessionFetcher/Source/GTMMIMEDocument.h b/Pods/GTMSessionFetcher/Source/GTMMIMEDocument.h new file mode 100644 index 0000000..451e132 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMMIMEDocument.h @@ -0,0 +1,148 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +// This is a simple class to create or parse a MIME document. + +// To create a MIME document, allocate a new GTMMIMEDocument and start adding parts. +// When you are done adding parts, call generateInputStream or generateDispatchData. +// +// A good reference for MIME is http://en.wikipedia.org/wiki/MIME + +#import + +#ifndef GTM_NONNULL + #if defined(__has_attribute) + #if __has_attribute(nonnull) + #define GTM_NONNULL(x) __attribute__((nonnull x)) + #else + #define GTM_NONNULL(x) + #endif + #else + #define GTM_NONNULL(x) + #endif +#endif + +#ifndef GTM_DECLARE_GENERICS + #if __has_feature(objc_generics) + #define GTM_DECLARE_GENERICS 1 + #else + #define GTM_DECLARE_GENERICS 0 + #endif +#endif + +#ifndef GTM_NSArrayOf + #if GTM_DECLARE_GENERICS + #define GTM_NSArrayOf(value) NSArray + #define GTM_NSDictionaryOf(key, value) NSDictionary + #else + #define GTM_NSArrayOf(value) NSArray + #define GTM_NSDictionaryOf(key, value) NSDictionary + #endif // GTM_DECLARE_GENERICS +#endif // GTM_NSArrayOf + + +// GTMMIMEDocumentPart represents a part of a MIME document. +// +// +[GTMMIMEDocument MIMEPartsWithBoundary:data:] returns an array of these. +@interface GTMMIMEDocumentPart : NSObject + +@property(nonatomic, readonly) GTM_NSDictionaryOf(NSString *, NSString *) *headers; +@property(nonatomic, readonly) NSData *headerData; +@property(nonatomic, readonly) NSData *body; +@property(nonatomic, readonly) NSUInteger length; + ++ (instancetype)partWithHeaders:(NSDictionary *)headers body:(NSData *)body; + +@end + +@interface GTMMIMEDocument : NSObject + +// Get or set the unique boundary for the parts that have been added. +// +// When creating a MIME document from parts, this is typically calculated +// automatically after all parts have been added. +@property(nonatomic, copy) NSString *boundary; + +#pragma mark - Methods for Creating a MIME Document + ++ (instancetype)MIMEDocument; + +// Adds a new part to this mime document with the given headers and body. +// The headers keys and values should be NSStrings. +// Adding a part may cause the boundary string to change. +- (void)addPartWithHeaders:(GTM_NSDictionaryOf(NSString *, NSString *) *)headers + body:(NSData *)body GTM_NONNULL((1,2)); + +// An inputstream that can be used to efficiently read the contents of the MIME document. +// +// Any parameter may be null if the result is not wanted. +- (void)generateInputStream:(NSInputStream **)outStream + length:(unsigned long long *)outLength + boundary:(NSString **)outBoundary; + +// A dispatch_data_t with the contents of the MIME document. +// +// Note: dispatch_data_t is one-way toll-free bridged so the result +// may be cast directly to NSData *. +// +// Any parameter may be null if the result is not wanted. +- (void)generateDispatchData:(dispatch_data_t *)outDispatchData + length:(unsigned long long *)outLength + boundary:(NSString **)outBoundary; + +// Utility method for making a header section, including trailing newlines. ++ (NSData *)dataWithHeaders:(GTM_NSDictionaryOf(NSString *, NSString *) *)headers; + +#pragma mark - Methods for Parsing a MIME Document + +// Method for parsing out an array of MIME parts from a MIME document. +// +// Returns an array of GTMMIMEDocumentParts. Returns nil if no part can +// be found. ++ (GTM_NSArrayOf(GTMMIMEDocumentPart *) *)MIMEPartsWithBoundary:(NSString *)boundary + data:(NSData *)fullDocumentData; + +// Utility method for efficiently searching possibly discontiguous NSData +// for occurrences of target byte. This method does not "flatten" an NSData +// that is composed of discontiguous blocks. +// +// The byte offsets of non-overlapping occurrences of the target are returned as +// NSNumbers in the array. ++ (void)searchData:(NSData *)data + targetBytes:(const void *)targetBytes + targetLength:(NSUInteger)targetLength + foundOffsets:(GTM_NSArrayOf(NSNumber *) **)outFoundOffsets; + +// Utility method to parse header bytes into an NSDictionary. ++ (GTM_NSDictionaryOf(NSString *, NSString *) *)headersWithData:(NSData *)data; + +// ------ UNIT TESTING ONLY BELOW ------ + +// Internal methods, exposed for unit testing only. +- (void)seedRandomWith:(u_int32_t)seed; + ++ (NSUInteger)findBytesWithNeedle:(const unsigned char *)needle + needleLength:(NSUInteger)needleLength + haystack:(const unsigned char *)haystack + haystackLength:(NSUInteger)haystackLength + foundOffset:(NSUInteger *)foundOffset; + ++ (void)searchData:(NSData *)data + targetBytes:(const void *)targetBytes + targetLength:(NSUInteger)targetLength + foundOffsets:(GTM_NSArrayOf(NSNumber *) **)outFoundOffsets + foundBlockNumbers:(GTM_NSArrayOf(NSNumber *) **)outFoundBlockNumbers; + +@end diff --git a/Pods/GTMSessionFetcher/Source/GTMMIMEDocument.m b/Pods/GTMSessionFetcher/Source/GTMMIMEDocument.m new file mode 100644 index 0000000..f4460c5 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMMIMEDocument.m @@ -0,0 +1,631 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "GTMMIMEDocument.h" + +// Avoid a hard dependency on GTMGatherInputStream. +#ifndef GTM_GATHERINPUTSTREAM_DECLARED +#define GTM_GATHERINPUTSTREAM_DECLARED + +@interface GTMGatherInputStream : NSInputStream + ++ (NSInputStream *)streamWithArray:(NSArray *)dataArray GTM_NONNULL((1)); + +@end +#endif // GTM_GATHERINPUTSTREAM_DECLARED + +// FindBytes +// +// Helper routine to search for the existence of a set of bytes (needle) within +// a presumed larger set of bytes (haystack). Can find the first part of the +// needle at the very end of the haystack. +// +// Returns the needle length on complete success, the number of bytes matched +// if a partial needle was found at the end of the haystack, and 0 on failure. +static NSUInteger FindBytes(const unsigned char *needle, NSUInteger needleLen, + const unsigned char *haystack, NSUInteger haystackLen, + NSUInteger *foundOffset); + +// SearchDataForBytes +// +// This implements the functionality of the +searchData: methods below. See the documentation +// for those methods. +static void SearchDataForBytes(NSData *data, const void *targetBytes, NSUInteger targetLength, + NSMutableArray *foundOffsets, NSMutableArray *foundBlockNumbers); + +@implementation GTMMIMEDocumentPart { + NSDictionary *_headers; + NSData *_headerData; // Header content including the ending "\r\n". + NSData *_bodyData; +} + +@synthesize headers = _headers, + headerData = _headerData, + body = _bodyData; + +@dynamic length; + ++ (instancetype)partWithHeaders:(NSDictionary *)headers body:(NSData *)body { + return [[self alloc] initWithHeaders:headers body:body]; +} + +- (instancetype)initWithHeaders:(NSDictionary *)headers body:(NSData *)body { + self = [super init]; + if (self) { + _bodyData = body; + _headers = headers; + } + return self; +} + +// Returns true if the part's header or data contain the given set of bytes. +// +// NOTE: We assume that the 'bytes' we are checking for do not contain "\r\n", +// so we don't need to check the concatenation of the header and body bytes. +- (BOOL)containsBytes:(const unsigned char *)bytes length:(NSUInteger)length { + // This uses custom search code rather than strcpy because the encoded data may contain + // null values. + NSData *headerData = self.headerData; + return (FindBytes(bytes, length, headerData.bytes, headerData.length, NULL) == length || + FindBytes(bytes, length, _bodyData.bytes, _bodyData.length, NULL) == length); +} + +- (NSData *)headerData { + if (!_headerData) { + _headerData = [GTMMIMEDocument dataWithHeaders:_headers]; + } + return _headerData; +} + +- (NSData *)body { + return _bodyData; +} + +- (NSUInteger)length { + return _headerData.length + _bodyData.length; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p (headers %lu keys, body %lu bytes)", + [self class], self, (unsigned long)_headers.count, + (unsigned long)_bodyData.length]; +} + +- (BOOL)isEqual:(GTMMIMEDocumentPart *)other { + if (self == other) return YES; + if (![other isKindOfClass:[GTMMIMEDocumentPart class]]) return NO; + return ((_bodyData == other->_bodyData || [_bodyData isEqual:other->_bodyData]) + && (_headers == other->_headers || [_headers isEqual:other->_headers])); +} + +- (NSUInteger)hash { + return _bodyData.hash | _headers.hash; +} + +@end + +@implementation GTMMIMEDocument { + NSMutableArray *_parts; // Ordered array of GTMMIMEDocumentParts. + unsigned long long _length; // Length in bytes of the document. + NSString *_boundary; + u_int32_t _randomSeed; // For testing. +} + ++ (instancetype)MIMEDocument { + return [[self alloc] init]; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _parts = [[NSMutableArray alloc] init]; + } + return self; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p (%lu parts)", + [self class], self, (unsigned long)_parts.count]; +} + +#pragma mark - Joining Parts + +// Adds a new part to this mime document with the given headers and body. +- (void)addPartWithHeaders:(NSDictionary *)headers body:(NSData *)body { + GTMMIMEDocumentPart *part = [GTMMIMEDocumentPart partWithHeaders:headers body:body]; + [_parts addObject:part]; + _boundary = nil; +} + +// For unit testing only, seeds the random number generator so that we will +// have reproducible boundary strings. +- (void)seedRandomWith:(u_int32_t)seed { + _randomSeed = seed; + _boundary = nil; +} + +- (u_int32_t)random { + if (_randomSeed) { + // For testing only. + return _randomSeed++; + } else { + return arc4random(); + } +} + +// Computes the mime boundary to use. This should only be called +// after all the desired document parts have been added since it must compute +// a boundary that does not exist in the document data. +- (NSString *)boundary { + if (_boundary) { + return _boundary; + } + + // Use an easily-readable boundary string. + NSString *const kBaseBoundary = @"END_OF_PART"; + + _boundary = kBaseBoundary; + + // If the boundary isn't unique, append random numbers, up to 10 attempts; + // if that's still not unique, use a random number sequence instead, and call it good. + BOOL didCollide = NO; + + const int maxTries = 10; // Arbitrarily chosen maximum attempts. + for (int tries = 0; tries < maxTries; ++tries) { + + NSData *data = [_boundary dataUsingEncoding:NSUTF8StringEncoding]; + const void *dataBytes = data.bytes; + NSUInteger dataLen = data.length; + + for (GTMMIMEDocumentPart *part in _parts) { + didCollide = [part containsBytes:dataBytes length:dataLen]; + if (didCollide) break; + } + + if (!didCollide) break; // We're fine, no more attempts needed. + + // Try again with a random number appended. + _boundary = [NSString stringWithFormat:@"%@_%08x", kBaseBoundary, [self random]]; + } + + if (didCollide) { + // Fallback... two random numbers. + _boundary = [NSString stringWithFormat:@"%08x_tedborg_%08x", [self random], [self random]]; + } + return _boundary; +} + +- (void)setBoundary:(NSString *)str { + _boundary = [str copy]; +} + +// Internal method. +- (void)generateDataArray:(NSMutableArray *)dataArray + length:(unsigned long long *)outLength + boundary:(NSString **)outBoundary { + + // The input stream is of the form: + // --boundary + // [part_1_headers] + // [part_1_data] + // --boundary + // [part_2_headers] + // [part_2_data] + // --boundary-- + + // First we set up our boundary NSData objects. + NSString *boundary = self.boundary; + + NSString *mainBoundary = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary]; + NSString *endBoundary = [NSString stringWithFormat:@"\r\n--%@--\r\n", boundary]; + + NSData *mainBoundaryData = [mainBoundary dataUsingEncoding:NSUTF8StringEncoding]; + NSData *endBoundaryData = [endBoundary dataUsingEncoding:NSUTF8StringEncoding]; + + // Now we add them all in proper order to our dataArray. + unsigned long long length = 0; + + for (GTMMIMEDocumentPart *part in _parts) { + [dataArray addObject:mainBoundaryData]; + [dataArray addObject:part.headerData]; + [dataArray addObject:part.body]; + + length += part.length + mainBoundaryData.length; + } + + [dataArray addObject:endBoundaryData]; + length += endBoundaryData.length; + + if (outLength) *outLength = length; + if (outBoundary) *outBoundary = boundary; +} + +- (void)generateInputStream:(NSInputStream **)outStream + length:(unsigned long long *)outLength + boundary:(NSString **)outBoundary { + NSMutableArray *dataArray = outStream ? [NSMutableArray array] : nil; + [self generateDataArray:dataArray + length:outLength + boundary:outBoundary]; + + if (outStream) { + Class streamClass = NSClassFromString(@"GTMGatherInputStream"); + NSAssert(streamClass != nil, @"GTMGatherInputStream not available."); + + *outStream = [streamClass streamWithArray:dataArray]; + } +} + +- (void)generateDispatchData:(dispatch_data_t *)outDispatchData + length:(unsigned long long *)outLength + boundary:(NSString **)outBoundary { + NSMutableArray *dataArray = outDispatchData ? [NSMutableArray array] : nil; + [self generateDataArray:dataArray + length:outLength + boundary:outBoundary]; + + if (outDispatchData) { + // Create an empty data accumulator. + dispatch_data_t dataAccumulator; + + dispatch_queue_t bgQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + + for (NSData *partData in dataArray) { + __block NSData *immutablePartData = [partData copy]; + dispatch_data_t newDataPart = + dispatch_data_create(immutablePartData.bytes, immutablePartData.length, bgQueue, ^{ + // We want the data retained until this block executes. + immutablePartData = nil; + }); + + if (dataAccumulator == nil) { + // First part. + dataAccumulator = newDataPart; + } else { + // Append the additional part. + dataAccumulator = dispatch_data_create_concat(dataAccumulator, newDataPart); + } + } + *outDispatchData = dataAccumulator; + } +} + ++ (NSData *)dataWithHeaders:(NSDictionary *)headers { + // Generate the header data by coalescing the dictionary as lines of "key: value\r\n". + NSMutableString* headerString = [NSMutableString string]; + + // Sort the header keys so we have a deterministic order for unit testing. + SEL sortSel = @selector(caseInsensitiveCompare:); + NSArray *sortedKeys = [headers.allKeys sortedArrayUsingSelector:sortSel]; + + for (NSString *key in sortedKeys) { + NSString *value = [headers objectForKey:key]; + +#if DEBUG + // Look for troublesome characters in the header keys & values. + NSCharacterSet *badKeyChars = [NSCharacterSet characterSetWithCharactersInString:@":\r\n"]; + NSCharacterSet *badValueChars = [NSCharacterSet characterSetWithCharactersInString:@"\r\n"]; + + NSRange badRange = [key rangeOfCharacterFromSet:badKeyChars]; + NSAssert(badRange.location == NSNotFound, @"invalid key: %@", key); + + badRange = [value rangeOfCharacterFromSet:badValueChars]; + NSAssert(badRange.location == NSNotFound, @"invalid value: %@", value); +#endif + + [headerString appendFormat:@"%@: %@\r\n", key, value]; + } + // Headers end with an extra blank line. + [headerString appendString:@"\r\n"]; + + NSData *result = [headerString dataUsingEncoding:NSUTF8StringEncoding]; + return result; +} + +#pragma mark - Separating Parts + ++ (NSArray *)MIMEPartsWithBoundary:(NSString *)boundary + data:(NSData *)fullDocumentData { + // In MIME documents, the boundary is preceded by CRLF and two dashes, and followed + // at the end by two dashes. + NSData *boundaryData = [boundary dataUsingEncoding:NSUTF8StringEncoding]; + NSUInteger boundaryLength = boundaryData.length; + + NSMutableArray *foundBoundaryOffsets; + [self searchData:fullDocumentData + targetBytes:boundaryData.bytes + targetLength:boundaryLength + foundOffsets:&foundBoundaryOffsets]; + + // According to rfc1341, ignore anything before the first boundary, or after the last, though two + // dashes are expected to follow the last boundary. + if (foundBoundaryOffsets.count < 2) { + return nil; + } + + // Wrap the full document data with a dispatch_data_t for more efficient slicing + // and dicing. + dispatch_data_t dataWrapper; + if ([fullDocumentData conformsToProtocol:@protocol(OS_dispatch_data)]) { + dataWrapper = (dispatch_data_t)fullDocumentData; + } else { + // A no-op self invocation on fullDocumentData will keep it retained until the block is invoked. + dispatch_queue_t bgQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dataWrapper = dispatch_data_create(fullDocumentData.bytes, + fullDocumentData.length, + bgQueue, ^{ [fullDocumentData self]; }); + } + NSMutableArray *parts; + NSInteger previousBoundaryOffset = -1; + NSInteger partCounter = -1; + NSInteger numberOfPartsWithHeaders = 0; + for (NSNumber *currentBoundaryOffset in foundBoundaryOffsets) { + ++partCounter; + if (previousBoundaryOffset == -1) { + // This is the first boundary. + previousBoundaryOffset = currentBoundaryOffset.integerValue; + continue; + } else { + // Create a part data subrange between the previous boundary and this one. + // + // The last four bytes before a boundary are CRLF--. + // The first two bytes following a boundary are either CRLF or, for the last boundary, --. + NSInteger previousPartDataStartOffset = + previousBoundaryOffset + (NSInteger)boundaryLength + 2; + NSInteger previousPartDataEndOffset = currentBoundaryOffset.integerValue - 4; + NSInteger previousPartDataLength = previousPartDataEndOffset - previousPartDataStartOffset; + + if (previousPartDataLength < 2) { + // The preceding part was too short to be useful. +#if DEBUG + NSLog(@"MIME part %ld has %ld bytes", (long)partCounter - 1, + (long)previousPartDataLength); +#endif + } else { + if (!parts) parts = [NSMutableArray array]; + + dispatch_data_t partData = + dispatch_data_create_subrange(dataWrapper, + (size_t)previousPartDataStartOffset, (size_t)previousPartDataLength); + // Scan the part data for the separator between headers and body. After the CRLF, + // either the headers start immediately, or there's another CRLF and there are no headers. + // + // We need to map the part data to get the first two bytes. (Or we could cast it to + // NSData and get the bytes pointer of that.) If we're concerned that a single part + // data may be expensive to map, we could make a subrange here for just the first two bytes, + // and map that two-byte subrange. + const void *partDataBuffer; + size_t partDataBufferSize; + dispatch_data_t mappedPartData NS_VALID_UNTIL_END_OF_SCOPE = + dispatch_data_create_map(partData, &partDataBuffer, &partDataBufferSize); + dispatch_data_t bodyData; + NSDictionary *headers; + BOOL hasAnotherCRLF = (((char *)partDataBuffer)[0] == '\r' + && ((char *)partDataBuffer)[1] == '\n'); + mappedPartData = nil; + + if (hasAnotherCRLF) { + // There are no headers; skip the CRLF to get to the body, and leave headers nil. + bodyData = dispatch_data_create_subrange(partData, 2, (size_t)previousPartDataLength - 2); + } else { + // There are part headers. They are separated from body data by CRLFCRLF. + NSArray *crlfOffsets; + [self searchData:(NSData *)partData + targetBytes:"\r\n\r\n" + targetLength:4 + foundOffsets:&crlfOffsets]; + if (crlfOffsets.count == 0) { +#if DEBUG + // We could not distinguish body and headers. + NSLog(@"MIME part %ld lacks a header separator: %@", (long)partCounter - 1, + [[NSString alloc] initWithData:(NSData *)partData encoding:NSUTF8StringEncoding]); +#endif + } else { + NSInteger headerSeparatorOffset = ((NSNumber *)crlfOffsets.firstObject).integerValue; + dispatch_data_t headerData = + dispatch_data_create_subrange(partData, 0, (size_t)headerSeparatorOffset); + headers = [self headersWithData:(NSData *)headerData]; + + bodyData = dispatch_data_create_subrange(partData, (size_t)headerSeparatorOffset + 4, + (size_t)(previousPartDataLength - (headerSeparatorOffset + 4))); + + numberOfPartsWithHeaders++; + } // crlfOffsets.count == 0 + } // hasAnotherCRLF + GTMMIMEDocumentPart *part = [GTMMIMEDocumentPart partWithHeaders:headers + body:(NSData *)bodyData]; + [parts addObject:part]; + } // previousPartDataLength < 2 + previousBoundaryOffset = currentBoundaryOffset.integerValue; + } + } +#if DEBUG + // In debug builds, warn if a reasonably long document lacks any CRLF characters. + if (numberOfPartsWithHeaders == 0) { + NSUInteger length = fullDocumentData.length; + if (length > 20) { // Reasonably long. + NSMutableArray *foundCRLFs; + [self searchData:fullDocumentData + targetBytes:"\r\n" + targetLength:2 + foundOffsets:&foundCRLFs]; + if (foundCRLFs.count == 0) { + // Parts were logged above (due to lacking header separators.) + NSLog(@"Warning: MIME document lacks any headers (may have wrong line endings)"); + } + } + } +#endif // DEBUG + return parts; +} + +// Efficiently search the supplied data for the target bytes. +// +// This uses enumerateByteRangesUsingBlock: to scan for bytes. It can find +// the target even if it spans multiple separate byte ranges. +// +// Returns an array of found byte offset values, as NSNumbers. ++ (void)searchData:(NSData *)data + targetBytes:(const void *)targetBytes + targetLength:(NSUInteger)targetLength + foundOffsets:(GTM_NSArrayOf(NSNumber *) **)outFoundOffsets { + NSMutableArray *foundOffsets = [NSMutableArray array]; + SearchDataForBytes(data, targetBytes, targetLength, foundOffsets, NULL); + *outFoundOffsets = foundOffsets; +} + + +// This version of searchData: also returns the block numbers (0-based) where the +// target was found, used for testing that the supplied dispatch_data buffer +// has not been flattened. ++ (void)searchData:(NSData *)data + targetBytes:(const void *)targetBytes + targetLength:(NSUInteger)targetLength + foundOffsets:(GTM_NSArrayOf(NSNumber *) **)outFoundOffsets + foundBlockNumbers:(GTM_NSArrayOf(NSNumber *) **)outFoundBlockNumbers { + NSMutableArray *foundOffsets = [NSMutableArray array]; + NSMutableArray *foundBlockNumbers = [NSMutableArray array]; + + SearchDataForBytes(data, targetBytes, targetLength, foundOffsets, foundBlockNumbers); + *outFoundOffsets = foundOffsets; + *outFoundBlockNumbers = foundBlockNumbers; +} + +static void SearchDataForBytes(NSData *data, const void *targetBytes, NSUInteger targetLength, + NSMutableArray *foundOffsets, NSMutableArray *foundBlockNumbers) { + __block NSUInteger priorPartialMatchAmount = 0; + __block NSInteger priorPartialMatchStartingBlockNumber = -1; + __block NSInteger blockNumber = -1; + + [data enumerateByteRangesUsingBlock:^(const void *bytes, + NSRange byteRange, + BOOL *stop) { + // Search for the first character in the current range. + const void *ptr = bytes; + NSInteger remainingInCurrentRange = (NSInteger)byteRange.length; + ++blockNumber; + + if (priorPartialMatchAmount > 0) { + NSUInteger amountRemainingToBeMatched = targetLength - priorPartialMatchAmount; + NSUInteger remainingFoundOffset; + NSUInteger amountMatched = FindBytes(targetBytes + priorPartialMatchAmount, + amountRemainingToBeMatched, + ptr, (NSUInteger)remainingInCurrentRange, &remainingFoundOffset); + if (amountMatched == 0 || remainingFoundOffset > 0) { + // No match of the rest of the prior partial match in this range. + } else if (amountMatched < amountRemainingToBeMatched) { + // Another partial match; we're done with this range. + priorPartialMatchAmount = priorPartialMatchAmount + amountMatched; + return; + } else { + // The offset is in an earlier range. + NSUInteger offset = byteRange.location - priorPartialMatchAmount; + [foundOffsets addObject:@(offset)]; + [foundBlockNumbers addObject:@(priorPartialMatchStartingBlockNumber)]; + priorPartialMatchStartingBlockNumber = -1; + } + priorPartialMatchAmount = 0; + } + + while (remainingInCurrentRange > 0) { + NSUInteger offsetFromPtr; + NSUInteger amountMatched = FindBytes(targetBytes, targetLength, ptr, + (NSUInteger)remainingInCurrentRange, &offsetFromPtr); + if (amountMatched == 0) { + // No match in this range. + return; + } + if (amountMatched < targetLength) { + // Found a partial target. If there's another range, we'll check for the rest. + priorPartialMatchAmount = amountMatched; + priorPartialMatchStartingBlockNumber = blockNumber; + return; + } + // Found the full target. + NSUInteger globalOffset = byteRange.location + (NSUInteger)(ptr - bytes) + offsetFromPtr; + + [foundOffsets addObject:@(globalOffset)]; + [foundBlockNumbers addObject:@(blockNumber)]; + + ptr += targetLength + offsetFromPtr; + remainingInCurrentRange -= (targetLength + offsetFromPtr); + } + }]; +} + +// Internal method only for testing; this calls through the static method. ++ (NSUInteger)findBytesWithNeedle:(const unsigned char *)needle + needleLength:(NSUInteger)needleLength + haystack:(const unsigned char *)haystack + haystackLength:(NSUInteger)haystackLength + foundOffset:(NSUInteger *)foundOffset { + return FindBytes(needle, needleLength, haystack, haystackLength, foundOffset); +} + +// Utility method to parse header bytes into an NSDictionary. ++ (NSDictionary *)headersWithData:(NSData *)data { + NSString *headersString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + if (!headersString) return nil; + + NSMutableDictionary *headers = [NSMutableDictionary dictionary]; + NSScanner *scanner = [NSScanner scannerWithString:headersString]; + // The scanner is skipping leading whitespace and newline characters by default. + NSCharacterSet *newlineCharacters = [NSCharacterSet newlineCharacterSet]; + NSString *key; + NSString *value; + while ([scanner scanUpToString:@":" intoString:&key] + && [scanner scanString:@":" intoString:NULL] + && [scanner scanUpToCharactersFromSet:newlineCharacters intoString:&value]) { + [headers setObject:value forKey:key]; + // Discard the trailing newline. + [scanner scanCharactersFromSet:newlineCharacters intoString:NULL]; + } + return headers; +} + +@end + +// Return how much of the needle was found in the haystack. +// +// If the result is less than needleLen, then the beginning of the needle +// was found at the end of the haystack. +static NSUInteger FindBytes(const unsigned char* needle, NSUInteger needleLen, + const unsigned char* haystack, NSUInteger haystackLen, + NSUInteger *foundOffset) { + const unsigned char *ptr = haystack; + NSInteger remain = (NSInteger)haystackLen; + // Assume memchr is an efficient way to find a match for the first + // byte of the needle, and memcmp is an efficient way to compare a + // range of bytes. + while (remain > 0 && (ptr = memchr(ptr, needle[0], (size_t)remain)) != 0) { + // The first character is present. + NSUInteger offset = (NSUInteger)(ptr - haystack); + remain = (NSInteger)(haystackLen - offset); + + NSUInteger amountToCompare = MIN((NSUInteger)remain, needleLen); + if (memcmp(ptr, needle, amountToCompare) == 0) { + if (foundOffset) *foundOffset = offset; + return amountToCompare; + } + ptr++; + remain--; + } + if (foundOffset) *foundOffset = 0; + return 0; +} diff --git a/Pods/GTMSessionFetcher/Source/GTMReadMonitorInputStream.h b/Pods/GTMSessionFetcher/Source/GTMReadMonitorInputStream.h new file mode 100644 index 0000000..4e30642 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMReadMonitorInputStream.h @@ -0,0 +1,49 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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 + +#ifndef GTM_NONNULL + #if defined(__has_attribute) + #if __has_attribute(nonnull) + #define GTM_NONNULL(x) __attribute__((nonnull x)) + #else + #define GTM_NONNULL(x) + #endif + #else + #define GTM_NONNULL(x) + #endif +#endif + + +@interface GTMReadMonitorInputStream : NSInputStream + ++ (instancetype)inputStreamWithStream:(NSInputStream *)input GTM_NONNULL((1)); + +- (instancetype)initWithStream:(NSInputStream *)input GTM_NONNULL((1)); + +// The read monitor selector is called when bytes have been read. It should have this signature: +// +// - (void)inputStream:(GTMReadMonitorInputStream *)stream +// readIntoBuffer:(uint8_t *)buffer +// length:(int64_t)length; + +@property(atomic, weak) id readDelegate; +@property(atomic, assign) SEL readSelector; + +// Modes for invoking callbacks, when necessary. +@property(atomic, strong) NSArray *runLoopModes; + +@end diff --git a/Pods/GTMSessionFetcher/Source/GTMReadMonitorInputStream.m b/Pods/GTMSessionFetcher/Source/GTMReadMonitorInputStream.m new file mode 100644 index 0000000..6f95dd5 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMReadMonitorInputStream.m @@ -0,0 +1,190 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "GTMReadMonitorInputStream.h" + +@implementation GTMReadMonitorInputStream { + NSInputStream *_inputStream; // Encapsulated stream that does the work. + + NSThread *_thread; // Thread in which this object was created. + NSArray *_runLoopModes; // Modes for calling callbacks, when necessary. +} + + +@synthesize readDelegate = _readDelegate; +@synthesize readSelector = _readSelector; +@synthesize runLoopModes = _runLoopModes; + +// We'll forward all unhandled messages to the NSInputStream class or to the encapsulated input +// stream. This is needed for all messages sent to NSInputStream which aren't handled by our +// superclass; that includes various private run loop calls. ++ (NSMethodSignature *)methodSignatureForSelector:(SEL)selector { + return [NSInputStream methodSignatureForSelector:selector]; +} + ++ (void)forwardInvocation:(NSInvocation*)invocation { + [invocation invokeWithTarget:[NSInputStream class]]; +} + +- (BOOL)respondsToSelector:(SEL)selector { + return [_inputStream respondsToSelector:selector]; +} + +- (NSMethodSignature*)methodSignatureForSelector:(SEL)selector { + return [_inputStream methodSignatureForSelector:selector]; +} + +- (void)forwardInvocation:(NSInvocation*)invocation { + [invocation invokeWithTarget:_inputStream]; +} + +#pragma mark - + ++ (instancetype)inputStreamWithStream:(NSInputStream *)input { + return [[self alloc] initWithStream:input]; +} + +- (instancetype)initWithStream:(NSInputStream *)input { + self = [super init]; + if (self) { + _inputStream = input; + _thread = [NSThread currentThread]; + } + return self; +} + +- (instancetype)init { + [self doesNotRecognizeSelector:_cmd]; + return nil; +} + +#pragma mark - + +- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len { + // Read from the encapsulated stream. + NSInteger numRead = [_inputStream read:buffer maxLength:len]; + if (numRead > 0) { + if (_readDelegate && _readSelector) { + // Call the read selector with the buffer and number of bytes actually read into it. + BOOL isOnOriginalThread = [_thread isEqual:[NSThread currentThread]]; + if (isOnOriginalThread) { + // Invoke immediately. + NSData *data = [NSData dataWithBytesNoCopy:buffer + length:(NSUInteger)numRead + freeWhenDone:NO]; + [self invokeReadSelectorWithBuffer:data]; + } else { + // Copy the buffer into an NSData to be retained by the performSelector, + // and invoke on the proper thread. + SEL sel = @selector(invokeReadSelectorWithBuffer:); + NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numRead]; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + if (_runLoopModes) { + [self performSelector:sel + onThread:_thread + withObject:data + waitUntilDone:NO + modes:_runLoopModes]; + } else { + [self performSelector:sel + onThread:_thread + withObject:data + waitUntilDone:NO]; + } +#pragma clang diagnostic pop + } + } + } + return numRead; +} + +- (void)invokeReadSelectorWithBuffer:(NSData *)data { + const void *buffer = data.bytes; + int64_t length = (int64_t)data.length; + + id argSelf = self; + id readDelegate = _readDelegate; + if (readDelegate) { + NSMethodSignature *signature = [readDelegate methodSignatureForSelector:_readSelector]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + [invocation setSelector:_readSelector]; + [invocation setTarget:readDelegate]; + [invocation setArgument:&argSelf atIndex:2]; + [invocation setArgument:&buffer atIndex:3]; + [invocation setArgument:&length atIndex:4]; + [invocation invoke]; + } +} + +- (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len { + return [_inputStream getBuffer:buffer length:len]; +} + +- (BOOL)hasBytesAvailable { + return [_inputStream hasBytesAvailable]; +} + +#pragma mark Standard messages + +// Pass expected messages to our encapsulated stream. +// +// We want our encapsulated NSInputStream to handle the standard messages; +// we don't want the superclass to handle them. +- (void)open { + [_inputStream open]; +} + +- (void)close { + [_inputStream close]; +} + +- (id)delegate { + return [_inputStream delegate]; +} + +- (void)setDelegate:(id)delegate { + [_inputStream setDelegate:delegate]; +} + +- (id)propertyForKey:(NSString *)key { + return [_inputStream propertyForKey:key]; +} + +- (BOOL)setProperty:(id)property forKey:(NSString *)key { + return [_inputStream setProperty:property forKey:key]; +} + +- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode { + [_inputStream scheduleInRunLoop:aRunLoop forMode:mode]; +} + +- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode { + [_inputStream removeFromRunLoop:aRunLoop forMode:mode]; +} + +- (NSStreamStatus)streamStatus { + return [_inputStream streamStatus]; +} + +- (NSError *)streamError { + return [_inputStream streamError]; +} + +@end diff --git a/Pods/GTMSessionFetcher/Source/GTMSessionFetcher.h b/Pods/GTMSessionFetcher/Source/GTMSessionFetcher.h new file mode 100644 index 0000000..1937a32 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMSessionFetcher.h @@ -0,0 +1,1322 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +// GTMSessionFetcher is a wrapper around NSURLSession for http operations. +// +// What does this offer on top of of NSURLSession? +// +// - Block-style callbacks for useful functionality like progress rather +// than delegate methods. +// - Out-of-process uploads and downloads using NSURLSession, including +// management of fetches after relaunch. +// - Integration with GTMAppAuth for invisible management and refresh of +// authorization tokens. +// - Pretty-printed http logging. +// - Cookies handling that does not interfere with or get interfered with +// by WebKit cookies or on Mac by Safari and other apps. +// - Credentials handling for the http operation. +// - Rate-limiting and cookie grouping when fetchers are created with +// GTMSessionFetcherService. +// +// If the bodyData or bodyFileURL property is set, then a POST request is assumed. +// +// Each fetcher is assumed to be for a one-shot fetch request; don't reuse the object +// for a second fetch. +// +// The fetcher will be self-retained as long as a connection is pending. +// +// To keep user activity private, URLs must have an https scheme (unless the property +// allowedInsecureSchemes is set to permit the scheme.) +// +// Callbacks will be released when the fetch completes or is stopped, so there is no need +// to use weak self references in the callback blocks. +// +// Sample usage: +// +// _fetcherService = [[GTMSessionFetcherService alloc] init]; +// +// GTMSessionFetcher *myFetcher = [_fetcherService fetcherWithURLString:myURLString]; +// myFetcher.retryEnabled = YES; +// myFetcher.comment = @"First profile image"; +// +// // Optionally specify a file URL or NSData for the request body to upload. +// myFetcher.bodyData = [postString dataUsingEncoding:NSUTF8StringEncoding]; +// +// [myFetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) { +// if (error != nil) { +// // Server status code or network error. +// // +// // If the domain is kGTMSessionFetcherStatusDomain then the error code +// // is a failure status from the server. +// } else { +// // Fetch succeeded. +// } +// }]; +// +// There is also a beginFetch call that takes a pointer and selector for the completion handler; +// a pointer and selector is a better style when the callback is a substantial, separate method. +// +// NOTE: Fetches may retrieve data from the server even though the server +// returned an error, so the criteria for success is a non-nil error. +// The completion handler is called when the server status is >= 300 with an NSError +// having domain kGTMSessionFetcherStatusDomain and code set to the server status. +// +// Status codes are at +// +// +// Background session support: +// +// Out-of-process uploads and downloads may be created by setting the fetcher's +// useBackgroundSession property. Data to be uploaded should be provided via +// the uploadFileURL property; the download destination should be specified with +// the destinationFileURL. NOTE: Background upload files should be in a location +// that will be valid even after the device is restarted, so the file should not +// be uploaded from a system temporary or cache directory. +// +// Background session transfers are slower, and should typically be used only +// for very large downloads or uploads (hundreds of megabytes). +// +// When background sessions are used in iOS apps, the application delegate must +// pass through the parameters from UIApplicationDelegate's +// application:handleEventsForBackgroundURLSession:completionHandler: to the +// fetcher class. +// +// When the application has been relaunched, it may also create a new fetcher +// instance to handle completion of the transfers. +// +// - (void)application:(UIApplication *)application +// handleEventsForBackgroundURLSession:(NSString *)identifier +// completionHandler:(void (^)())completionHandler { +// // Application was re-launched on completing an out-of-process download. +// +// // Pass the URLSession info related to this re-launch to the fetcher class. +// [GTMSessionFetcher application:application +// handleEventsForBackgroundURLSession:identifier +// completionHandler:completionHandler]; +// +// // Get a fetcher related to this re-launch and re-hook up a completionHandler to it. +// GTMSessionFetcher *fetcher = [GTMSessionFetcher fetcherWithSessionIdentifier:identifier]; +// NSURL *destinationFileURL = fetcher.destinationFileURL; +// fetcher.completionHandler = ^(NSData *data, NSError *error) { +// [self downloadCompletedToFile:destinationFileURL error:error]; +// }; +// } +// +// +// Threading and queue support: +// +// Networking always happens on a background thread; there is no advantage to +// changing thread or queue to create or start a fetcher. +// +// Callbacks are run on the main thread; alternatively, the app may set the +// fetcher's callbackQueue to a dispatch queue. +// +// Once the fetcher's beginFetch method has been called, the fetcher's methods and +// properties may be accessed from any thread. +// +// Downloading to disk: +// +// To have downloaded data saved directly to disk, specify a file URL for the +// destinationFileURL property. +// +// HTTP methods and headers: +// +// Alternative HTTP methods, like PUT, and custom headers can be specified by +// creating the fetcher with an appropriate NSMutableURLRequest. +// +// +// Caching: +// +// The fetcher avoids caching. That is best for API requests, but may hurt +// repeat fetches of static data. Apps may enable a persistent disk cache by +// customizing the config: +// +// fetcher.configurationBlock = ^(GTMSessionFetcher *configFetcher, +// NSURLSessionConfiguration *config) { +// config.URLCache = [NSURLCache sharedURLCache]; +// }; +// +// Or use the standard system config to share cookie storage with web views +// and to enable disk caching: +// +// fetcher.configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; +// +// +// Cookies: +// +// There are three supported mechanisms for remembering cookies between fetches. +// +// By default, a standalone GTMSessionFetcher uses a mutable array held +// statically to track cookies for all instantiated fetchers. This avoids +// cookies being set by servers for the application from interfering with +// Safari and WebKit cookie settings, and vice versa. +// The fetcher cookies are lost when the application quits. +// +// To rely instead on WebKit's global NSHTTPCookieStorage, set the fetcher's +// cookieStorage property: +// myFetcher.cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; +// +// To share cookies with other apps, use the method introduced in iOS 9/OS X 10.11: +// myFetcher.cookieStorage = +// [NSHTTPCookieStorage sharedCookieStorageForGroupContainerIdentifier:kMyCompanyContainedID]; +// +// To ignore existing cookies and only have cookies related to the single fetch +// be applied, make a temporary cookie storage object: +// myFetcher.cookieStorage = [[GTMSessionCookieStorage alloc] init]; +// +// Note: cookies set while following redirects will be sent to the server, as +// the redirects are followed by the fetcher. +// +// To completely disable cookies, similar to setting cookieStorageMethod to +// kGTMHTTPFetcherCookieStorageMethodNone, adjust the session configuration +// appropriately in the fetcher or fetcher service: +// fetcher.configurationBlock = ^(GTMSessionFetcher *configFetcher, +// NSURLSessionConfiguration *config) { +// config.HTTPCookieAcceptPolicy = NSHTTPCookieAcceptPolicyNever; +// config.HTTPShouldSetCookies = NO; +// }; +// +// If the fetcher is created from a GTMSessionFetcherService object +// then the cookie storage mechanism is set to use the cookie storage in the +// service object rather than the static storage. Disabling cookies in the +// session configuration set on a service object will disable cookies for all +// fetchers created from that GTMSessionFetcherService object, since the session +// configuration is propagated to the fetcher. +// +// +// Monitoring data transfers. +// +// The fetcher supports a variety of properties for progress monitoring +// progress with callback blocks. +// GTMSessionFetcherSendProgressBlock sendProgressBlock +// GTMSessionFetcherReceivedProgressBlock receivedProgressBlock +// GTMSessionFetcherDownloadProgressBlock downloadProgressBlock +// +// If supplied by the server, the anticipated total download size is available +// as [[myFetcher response] expectedContentLength] (and may be -1 for unknown +// download sizes.) +// +// +// Automatic retrying of fetches +// +// The fetcher can optionally create a timer and reattempt certain kinds of +// fetch failures (status codes 408, request timeout; 502, gateway failure; +// 503, service unavailable; 504, gateway timeout; networking errors +// NSURLErrorTimedOut and NSURLErrorNetworkConnectionLost.) The user may +// set a retry selector to customize the type of errors which will be retried. +// +// Retries are done in an exponential-backoff fashion (that is, after 1 second, +// 2, 4, 8, and so on.) +// +// Enabling automatic retries looks like this: +// myFetcher.retryEnabled = YES; +// +// With retries enabled, the completion callbacks are called only +// when no more retries will be attempted. Calling the fetcher's stopFetching +// method will terminate the retry timer, without the finished or failure +// selectors being invoked. +// +// Optionally, the client may set the maximum retry interval: +// myFetcher.maxRetryInterval = 60.0; // in seconds; default is 60 seconds +// // for downloads, 600 for uploads +// +// Servers should never send a 400 or 500 status for errors that are retryable +// by clients, as those values indicate permanent failures. In nearly all +// cases, the default standard retry behavior is correct for clients, and no +// custom client retry behavior is needed or appropriate. Servers that send +// non-retryable status codes and expect the client to retry the request are +// faulty. +// +// Still, the client may provide a block to determine if a status code or other +// error should be retried. The block returns YES to set the retry timer or NO +// to fail without additional fetch attempts. +// +// The retry method may return the |suggestedWillRetry| argument to get the +// default retry behavior. Server status codes are present in the +// error argument, and have the domain kGTMSessionFetcherStatusDomain. The +// user's method may look something like this: +// +// myFetcher.retryBlock = ^(BOOL suggestedWillRetry, NSError *error, +// GTMSessionFetcherRetryResponse response) { +// // Perhaps examine error.domain and error.code, or fetcher.retryCount +// // +// // Respond with YES to start the retry timer, NO to proceed to the failure +// // callback, or suggestedWillRetry to get default behavior for the +// // current error domain and code values. +// response(suggestedWillRetry); +// }; + + +#import + +#if TARGET_OS_IPHONE +#import +#endif +#if TARGET_OS_WATCH +#import +#endif + +// By default it is stripped from non DEBUG builds. Developers can override +// this in their project settings. +#ifndef STRIP_GTM_FETCH_LOGGING + #if !DEBUG + #define STRIP_GTM_FETCH_LOGGING 1 + #else + #define STRIP_GTM_FETCH_LOGGING 0 + #endif +#endif + +// Logs in debug builds. +#ifndef GTMSESSION_LOG_DEBUG + #if DEBUG + #define GTMSESSION_LOG_DEBUG(...) NSLog(__VA_ARGS__) + #else + #define GTMSESSION_LOG_DEBUG(...) do { } while (0) + #endif +#endif + +// Asserts in debug builds (or logs in debug builds if GTMSESSION_ASSERT_AS_LOG +// or NS_BLOCK_ASSERTIONS are defined.) +#ifndef GTMSESSION_ASSERT_DEBUG + #if DEBUG && !defined(NS_BLOCK_ASSERTIONS) && !GTMSESSION_ASSERT_AS_LOG + #undef GTMSESSION_ASSERT_AS_LOG + #define GTMSESSION_ASSERT_AS_LOG 1 + #endif + + #if DEBUG && !GTMSESSION_ASSERT_AS_LOG + #define GTMSESSION_ASSERT_DEBUG(...) NSAssert(__VA_ARGS__) + #elif DEBUG + #define GTMSESSION_ASSERT_DEBUG(pred, ...) if (!(pred)) { NSLog(__VA_ARGS__); } + #else + #define GTMSESSION_ASSERT_DEBUG(pred, ...) do { } while (0) + #endif +#endif + +// Asserts in debug builds, logs in release builds (or logs in debug builds if +// GTMSESSION_ASSERT_AS_LOG is defined.) +#ifndef GTMSESSION_ASSERT_DEBUG_OR_LOG + #if DEBUG && !GTMSESSION_ASSERT_AS_LOG + #define GTMSESSION_ASSERT_DEBUG_OR_LOG(...) NSAssert(__VA_ARGS__) + #else + #define GTMSESSION_ASSERT_DEBUG_OR_LOG(pred, ...) if (!(pred)) { NSLog(__VA_ARGS__); } + #endif +#endif + +// Macro useful for examining messages from NSURLSession during debugging. +#if 0 +#define GTM_LOG_SESSION_DELEGATE(...) GTMSESSION_LOG_DEBUG(__VA_ARGS__) +#else +#define GTM_LOG_SESSION_DELEGATE(...) +#endif + +#ifndef GTM_NULLABLE + #if __has_feature(nullability) // Available starting in Xcode 6.3 + #define GTM_NULLABLE_TYPE __nullable + #define GTM_NONNULL_TYPE __nonnull + #define GTM_NULLABLE nullable + #define GTM_NONNULL_DECL nonnull // GTM_NONNULL is used by GTMDefines.h + #define GTM_NULL_RESETTABLE null_resettable + + #define GTM_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN + #define GTM_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END + #else + #define GTM_NULLABLE_TYPE + #define GTM_NONNULL_TYPE + #define GTM_NULLABLE + #define GTM_NONNULL_DECL + #define GTM_NULL_RESETTABLE + #define GTM_ASSUME_NONNULL_BEGIN + #define GTM_ASSUME_NONNULL_END + #endif // __has_feature(nullability) +#endif // GTM_NULLABLE + +#ifndef GTM_DECLARE_GENERICS + #if __has_feature(objc_generics) + #define GTM_DECLARE_GENERICS 1 + #else + #define GTM_DECLARE_GENERICS 0 + #endif +#endif + +#ifndef GTM_NSArrayOf + #if GTM_DECLARE_GENERICS + #define GTM_NSArrayOf(value) NSArray + #define GTM_NSDictionaryOf(key, value) NSDictionary + #else + #define GTM_NSArrayOf(value) NSArray + #define GTM_NSDictionaryOf(key, value) NSDictionary + #endif // __has_feature(objc_generics) +#endif // GTM_NSArrayOf + +// For iOS, the fetcher can declare itself a background task to allow fetches +// to finish when the app leaves the foreground. +// +// (This is unrelated to providing a background configuration, which allows +// out-of-process uploads and downloads.) +// +// To disallow use of background tasks during fetches, the target should define +// GTM_BACKGROUND_TASK_FETCHING to 0, or alternatively may set the +// skipBackgroundTask property to YES. +#if TARGET_OS_IPHONE && !TARGET_OS_WATCH && !defined(GTM_BACKGROUND_TASK_FETCHING) + #define GTM_BACKGROUND_TASK_FETCHING 1 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if (TARGET_OS_TV \ + || TARGET_OS_WATCH \ + || (!TARGET_OS_IPHONE && defined(MAC_OS_X_VERSION_10_11) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11) \ + || (TARGET_OS_IPHONE && defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0)) + #ifndef GTM_USE_SESSION_FETCHER + #define GTM_USE_SESSION_FETCHER 1 + #endif +#endif + +#if !defined(GTMBridgeFetcher) + // These bridge macros should be identical in GTMHTTPFetcher.h and GTMSessionFetcher.h + #if GTM_USE_SESSION_FETCHER + // Macros to new fetcher class. + #define GTMBridgeFetcher GTMSessionFetcher + #define GTMBridgeFetcherService GTMSessionFetcherService + #define GTMBridgeFetcherServiceProtocol GTMSessionFetcherServiceProtocol + #define GTMBridgeAssertValidSelector GTMSessionFetcherAssertValidSelector + #define GTMBridgeCookieStorage GTMSessionCookieStorage + #define GTMBridgeCleanedUserAgentString GTMFetcherCleanedUserAgentString + #define GTMBridgeSystemVersionString GTMFetcherSystemVersionString + #define GTMBridgeApplicationIdentifier GTMFetcherApplicationIdentifier + #define kGTMBridgeFetcherStatusDomain kGTMSessionFetcherStatusDomain + #define kGTMBridgeFetcherStatusBadRequest GTMSessionFetcherStatusBadRequest + #else + // Macros to old fetcher class. + #define GTMBridgeFetcher GTMHTTPFetcher + #define GTMBridgeFetcherService GTMHTTPFetcherService + #define GTMBridgeFetcherServiceProtocol GTMHTTPFetcherServiceProtocol + #define GTMBridgeAssertValidSelector GTMAssertSelectorNilOrImplementedWithArgs + #define GTMBridgeCookieStorage GTMCookieStorage + #define GTMBridgeCleanedUserAgentString GTMCleanedUserAgentString + #define GTMBridgeSystemVersionString GTMSystemVersionString + #define GTMBridgeApplicationIdentifier GTMApplicationIdentifier + #define kGTMBridgeFetcherStatusDomain kGTMHTTPFetcherStatusDomain + #define kGTMBridgeFetcherStatusBadRequest kGTMHTTPFetcherStatusBadRequest + #endif // GTM_USE_SESSION_FETCHER +#endif + +// When creating background sessions to perform out-of-process uploads and +// downloads, on app launch any background sessions must be reconnected in +// order to receive events that occurred while the app was not running. +// +// The fetcher will automatically attempt to recreate the sessions on app +// start, but doing so reads from NSUserDefaults. This may have launch-time +// performance impacts. +// +// To avoid launch performance impacts, on iPhone/iPad with iOS 13+ the +// GTMSessionFetcher class will register for the app launch notification and +// perform the reconnect then. +// +// Apps targeting Mac or older iOS SDKs can opt into the new behavior by defining +// GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH=1. +// +// Apps targeting new SDKs can force the old behavior by defining +// GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH = 0. +#ifndef GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH + // Default to the on-launch behavior for iOS 13+. + #if TARGET_OS_IOS && defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0 + #define GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH 1 + #else + #define GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH 0 + #endif +#endif + +GTM_ASSUME_NONNULL_BEGIN + +// Notifications +// +// Fetch started and stopped, and fetch retry delay started and stopped. +extern NSString *const kGTMSessionFetcherStartedNotification; +extern NSString *const kGTMSessionFetcherStoppedNotification; +extern NSString *const kGTMSessionFetcherRetryDelayStartedNotification; +extern NSString *const kGTMSessionFetcherRetryDelayStoppedNotification; + +// Completion handler notification. This is intended for use by code capturing +// and replaying fetch requests and results for testing. For fetches where +// destinationFileURL or accumulateDataBlock is set for the fetcher, the data +// will be nil for successful fetches. +// +// This notification is posted on the main thread. +extern NSString *const kGTMSessionFetcherCompletionInvokedNotification; +extern NSString *const kGTMSessionFetcherCompletionDataKey; +extern NSString *const kGTMSessionFetcherCompletionErrorKey; + +// Constants for NSErrors created by the fetcher (excluding server status errors, +// and error objects originating in the OS.) +extern NSString *const kGTMSessionFetcherErrorDomain; + +// The fetcher turns server error status values (3XX, 4XX, 5XX) into NSErrors +// with domain kGTMSessionFetcherStatusDomain. +// +// Any server response body data accompanying the status error is added to the +// userInfo dictionary with key kGTMSessionFetcherStatusDataKey. +extern NSString *const kGTMSessionFetcherStatusDomain; +extern NSString *const kGTMSessionFetcherStatusDataKey; +extern NSString *const kGTMSessionFetcherStatusDataContentTypeKey; + +// When a fetch fails with an error, these keys are included in the error userInfo +// dictionary if retries were attempted. +extern NSString *const kGTMSessionFetcherNumberOfRetriesDoneKey; +extern NSString *const kGTMSessionFetcherElapsedIntervalWithRetriesKey; + +// Background session support requires access to NSUserDefaults. +// If [NSUserDefaults standardUserDefaults] doesn't yield the correct NSUserDefaults for your usage, +// ie for an App Extension, then implement this class/method to return the correct NSUserDefaults. +// https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW6 +@interface GTMSessionFetcherUserDefaultsFactory : NSObject + ++ (NSUserDefaults *)fetcherUserDefaults; + +@end + +#ifdef __cplusplus +} +#endif + +typedef NS_ENUM(NSInteger, GTMSessionFetcherError) { + GTMSessionFetcherErrorDownloadFailed = -1, + GTMSessionFetcherErrorUploadChunkUnavailable = -2, + GTMSessionFetcherErrorBackgroundExpiration = -3, + GTMSessionFetcherErrorBackgroundFetchFailed = -4, + GTMSessionFetcherErrorInsecureRequest = -5, + GTMSessionFetcherErrorTaskCreationFailed = -6, +}; + +typedef NS_ENUM(NSInteger, GTMSessionFetcherStatus) { + // Standard http status codes. + GTMSessionFetcherStatusNotModified = 304, + GTMSessionFetcherStatusBadRequest = 400, + GTMSessionFetcherStatusUnauthorized = 401, + GTMSessionFetcherStatusForbidden = 403, + GTMSessionFetcherStatusPreconditionFailed = 412 +}; + +#ifdef __cplusplus +extern "C" { +#endif + +@class GTMSessionCookieStorage; +@class GTMSessionFetcher; + +// The configuration block is for modifying the NSURLSessionConfiguration only. +// DO NOT change any fetcher properties in the configuration block. +typedef void (^GTMSessionFetcherConfigurationBlock)(GTMSessionFetcher *fetcher, + NSURLSessionConfiguration *configuration); +typedef void (^GTMSessionFetcherSystemCompletionHandler)(void); +typedef void (^GTMSessionFetcherCompletionHandler)(NSData * GTM_NULLABLE_TYPE data, + NSError * GTM_NULLABLE_TYPE error); +typedef void (^GTMSessionFetcherBodyStreamProviderResponse)(NSInputStream *bodyStream); +typedef void (^GTMSessionFetcherBodyStreamProvider)(GTMSessionFetcherBodyStreamProviderResponse response); +typedef void (^GTMSessionFetcherDidReceiveResponseDispositionBlock)(NSURLSessionResponseDisposition disposition); +typedef void (^GTMSessionFetcherDidReceiveResponseBlock)(NSURLResponse *response, + GTMSessionFetcherDidReceiveResponseDispositionBlock dispositionBlock); +typedef void (^GTMSessionFetcherChallengeDispositionBlock)(NSURLSessionAuthChallengeDisposition disposition, + NSURLCredential * GTM_NULLABLE_TYPE credential); +typedef void (^GTMSessionFetcherChallengeBlock)(GTMSessionFetcher *fetcher, + NSURLAuthenticationChallenge *challenge, + GTMSessionFetcherChallengeDispositionBlock dispositionBlock); +typedef void (^GTMSessionFetcherWillRedirectResponse)(NSURLRequest * GTM_NULLABLE_TYPE redirectedRequest); +typedef void (^GTMSessionFetcherWillRedirectBlock)(NSHTTPURLResponse *redirectResponse, + NSURLRequest *redirectRequest, + GTMSessionFetcherWillRedirectResponse response); +typedef void (^GTMSessionFetcherAccumulateDataBlock)(NSData * GTM_NULLABLE_TYPE buffer); +typedef void (^GTMSessionFetcherSimulateByteTransferBlock)(NSData * GTM_NULLABLE_TYPE buffer, + int64_t bytesWritten, + int64_t totalBytesWritten, + int64_t totalBytesExpectedToWrite); +typedef void (^GTMSessionFetcherReceivedProgressBlock)(int64_t bytesWritten, + int64_t totalBytesWritten); +typedef void (^GTMSessionFetcherDownloadProgressBlock)(int64_t bytesWritten, + int64_t totalBytesWritten, + int64_t totalBytesExpectedToWrite); +typedef void (^GTMSessionFetcherSendProgressBlock)(int64_t bytesSent, + int64_t totalBytesSent, + int64_t totalBytesExpectedToSend); +typedef void (^GTMSessionFetcherWillCacheURLResponseResponse)(NSCachedURLResponse * GTM_NULLABLE_TYPE cachedResponse); +typedef void (^GTMSessionFetcherWillCacheURLResponseBlock)(NSCachedURLResponse *proposedResponse, + GTMSessionFetcherWillCacheURLResponseResponse responseBlock); +typedef void (^GTMSessionFetcherRetryResponse)(BOOL shouldRetry); +typedef void (^GTMSessionFetcherRetryBlock)(BOOL suggestedWillRetry, + NSError * GTM_NULLABLE_TYPE error, + GTMSessionFetcherRetryResponse response); + +typedef void (^GTMSessionFetcherTestResponse)(NSHTTPURLResponse * GTM_NULLABLE_TYPE response, + NSData * GTM_NULLABLE_TYPE data, + NSError * GTM_NULLABLE_TYPE error); +typedef void (^GTMSessionFetcherTestBlock)(GTMSessionFetcher *fetcherToTest, + GTMSessionFetcherTestResponse testResponse); + +void GTMSessionFetcherAssertValidSelector(id GTM_NULLABLE_TYPE obj, SEL GTM_NULLABLE_TYPE sel, ...); + +// Utility functions for applications self-identifying to servers via a +// user-agent header + +// The "standard" user agent includes the application identifier, taken from the bundle, +// followed by a space and the system version string. Pass nil to use +mainBundle as the source +// of the bundle identifier. +// +// Applications may use this as a starting point for their own user agent strings, perhaps +// with additional sections appended. Use GTMFetcherCleanedUserAgentString() below to +// clean up any string being added to the user agent. +NSString *GTMFetcherStandardUserAgentString(NSBundle * GTM_NULLABLE_TYPE bundle); + +// Make a generic name and version for the current application, like +// com.example.MyApp/1.2.3 relying on the bundle identifier and the +// CFBundleShortVersionString or CFBundleVersion. +// +// The bundle ID may be overridden as the base identifier string by +// adding to the bundle's Info.plist a "GTMUserAgentID" key. +// +// If no bundle ID or override is available, the process name preceded +// by "proc_" is used. +NSString *GTMFetcherApplicationIdentifier(NSBundle * GTM_NULLABLE_TYPE bundle); + +// Make an identifier like "MacOSX/10.7.1" or "iPod_Touch/4.1 hw/iPod1_1" +NSString *GTMFetcherSystemVersionString(void); + +// Make a parseable user-agent identifier from the given string, replacing whitespace +// and commas with underscores, and removing other characters that may interfere +// with parsing of the full user-agent string. +// +// For example, @"[My App]" would become @"My_App" +NSString *GTMFetcherCleanedUserAgentString(NSString *str); + +// Grab the data from an input stream. Since streams cannot be assumed to be rewindable, +// this may be destructive; the caller can try to rewind the stream (by setting the +// NSStreamFileCurrentOffsetKey property) or can just use the NSData to make a new +// NSInputStream. This function is intended to facilitate testing rather than be used in +// production. +// +// This function operates synchronously on the current thread. Depending on how the +// input stream is implemented, it may be appropriate to dispatch to a different +// queue before calling this function. +// +// Failure is indicated by a returned data value of nil. +NSData * GTM_NULLABLE_TYPE GTMDataFromInputStream(NSInputStream *inputStream, NSError **outError); + +#ifdef __cplusplus +} // extern "C" +#endif + + +#if !GTM_USE_SESSION_FETCHER +@protocol GTMHTTPFetcherServiceProtocol; +#endif + +// This protocol allows abstract references to the fetcher service, primarily for +// fetchers (which may be compiled without the fetcher service class present.) +// +// Apps should not need to use this protocol. +@protocol GTMSessionFetcherServiceProtocol +// This protocol allows us to call into the service without requiring +// GTMSessionFetcherService sources in this project + +@property(atomic, strong) dispatch_queue_t callbackQueue; + +- (BOOL)fetcherShouldBeginFetching:(GTMSessionFetcher *)fetcher; +- (void)fetcherDidCreateSession:(GTMSessionFetcher *)fetcher; +- (void)fetcherDidBeginFetching:(GTMSessionFetcher *)fetcher; +- (void)fetcherDidStop:(GTMSessionFetcher *)fetcher; + +- (GTMSessionFetcher *)fetcherWithRequest:(NSURLRequest *)request; +- (BOOL)isDelayingFetcher:(GTMSessionFetcher *)fetcher; + +@property(atomic, assign) BOOL reuseSession; +- (GTM_NULLABLE NSURLSession *)session; +- (GTM_NULLABLE NSURLSession *)sessionForFetcherCreation; +- (GTM_NULLABLE id)sessionDelegate; +- (GTM_NULLABLE NSDate *)stoppedAllFetchersDate; + +// Methods for compatibility with the old GTMHTTPFetcher. +@property(atomic, readonly, strong, GTM_NULLABLE) NSOperationQueue *delegateQueue; + +@end // @protocol GTMSessionFetcherServiceProtocol + +#ifndef GTM_FETCHER_AUTHORIZATION_PROTOCOL +#define GTM_FETCHER_AUTHORIZATION_PROTOCOL 1 +@protocol GTMFetcherAuthorizationProtocol +@required +// This protocol allows us to call the authorizer without requiring its sources +// in this project. +- (void)authorizeRequest:(GTM_NULLABLE NSMutableURLRequest *)request + delegate:(id)delegate + didFinishSelector:(SEL)sel; + +- (void)stopAuthorization; + +- (void)stopAuthorizationForRequest:(NSURLRequest *)request; + +- (BOOL)isAuthorizingRequest:(NSURLRequest *)request; + +- (BOOL)isAuthorizedRequest:(NSURLRequest *)request; + +@property(atomic, strong, readonly, GTM_NULLABLE) NSString *userEmail; + +@optional + +// Indicate if authorization may be attempted. Even if this succeeds, +// authorization may fail if the user's permissions have been revoked. +@property(atomic, readonly) BOOL canAuthorize; + +// For development only, allow authorization of non-SSL requests, allowing +// transmission of the bearer token unencrypted. +@property(atomic, assign) BOOL shouldAuthorizeAllRequests; + +- (void)authorizeRequest:(GTM_NULLABLE NSMutableURLRequest *)request + completionHandler:(void (^)(NSError * GTM_NULLABLE_TYPE error))handler; + +#if GTM_USE_SESSION_FETCHER +@property(atomic, weak, GTM_NULLABLE) id fetcherService; +#else +@property(atomic, weak, GTM_NULLABLE) id fetcherService; +#endif + +- (BOOL)primeForRefresh; + +@end +#endif // GTM_FETCHER_AUTHORIZATION_PROTOCOL + +#if GTM_BACKGROUND_TASK_FETCHING +// A protocol for an alternative target for messages from GTMSessionFetcher to UIApplication. +// Set the target using +[GTMSessionFetcher setSubstituteUIApplication:] +@protocol GTMUIApplicationProtocol +- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithName:(nullable NSString *)taskName + expirationHandler:(void(^ __nullable)(void))handler; +- (void)endBackgroundTask:(UIBackgroundTaskIdentifier)identifier; +@end +#endif + +#pragma mark - + +// GTMSessionFetcher objects are used for async retrieval of an http get or post +// +// See additional comments at the beginning of this file +@interface GTMSessionFetcher : NSObject + +// Create a fetcher +// +// fetcherWithRequest will return an autoreleased fetcher, but if +// the connection is successfully created, the connection should retain the +// fetcher for the life of the connection as well. So the caller doesn't have +// to retain the fetcher explicitly unless they want to be able to cancel it. ++ (instancetype)fetcherWithRequest:(GTM_NULLABLE NSURLRequest *)request; + +// Convenience methods that make a request, like +fetcherWithRequest ++ (instancetype)fetcherWithURL:(NSURL *)requestURL; ++ (instancetype)fetcherWithURLString:(NSString *)requestURLString; + +// Methods for creating fetchers to continue previous fetches. ++ (instancetype)fetcherWithDownloadResumeData:(NSData *)resumeData; ++ (GTM_NULLABLE instancetype)fetcherWithSessionIdentifier:(NSString *)sessionIdentifier; + +// Returns an array of currently active fetchers for background sessions, +// both restarted and newly created ones. ++ (GTM_NSArrayOf(GTMSessionFetcher *) *)fetchersForBackgroundSessions; + +// Designated initializer. +// +// Applications should create fetchers with a "fetcherWith..." method on a fetcher +// service or a class method, not with this initializer. +// +// The configuration should typically be nil. Applications needing to customize +// the configuration may do so by setting the configurationBlock property. +- (instancetype)initWithRequest:(GTM_NULLABLE NSURLRequest *)request + configuration:(GTM_NULLABLE NSURLSessionConfiguration *)configuration; + +// The fetcher's request. This may not be set after beginFetch has been invoked. The request +// may change due to redirects. +@property(atomic, strong, GTM_NULLABLE) NSURLRequest *request; + +// Set a header field value on the request. Header field value changes will not +// affect a fetch after the fetch has begun. +- (void)setRequestValue:(GTM_NULLABLE NSString *)value forHTTPHeaderField:(NSString *)field; + +// Data used for resuming a download task. +@property(atomic, readonly, GTM_NULLABLE) NSData *downloadResumeData; + +// The configuration; this must be set before the fetch begins. If no configuration is +// set or inherited from the fetcher service, then the fetcher uses an ephemeral config. +// +// NOTE: This property should typically be nil. Applications needing to customize +// the configuration should do so by setting the configurationBlock property. +// That allows the fetcher to pick an appropriate base configuration, with the +// application setting only the configuration properties it needs to customize. +@property(atomic, strong, GTM_NULLABLE) NSURLSessionConfiguration *configuration; + +// A block the client may use to customize the configuration used to create the session. +// +// This is called synchronously, either on the thread that begins the fetch or, during a retry, +// on the main thread. The configuration block may be called repeatedly if multiple fetchers are +// created. +// +// The configuration block is for modifying the NSURLSessionConfiguration only. +// DO NOT change any fetcher properties in the configuration block. Fetcher properties +// may be set in the fetcher service prior to fetcher creation, or on the fetcher prior +// to invoking beginFetch. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherConfigurationBlock configurationBlock; + +// A session is created as needed by the fetcher. A fetcher service object +// may maintain sessions for multiple fetches to the same host. +@property(atomic, strong, GTM_NULLABLE) NSURLSession *session; + +// The task in flight. +@property(atomic, readonly, GTM_NULLABLE) NSURLSessionTask *sessionTask; + +// The background session identifier. +@property(atomic, readonly, GTM_NULLABLE) NSString *sessionIdentifier; + +// Indicates a fetcher created to finish a background session task. +@property(atomic, readonly) BOOL wasCreatedFromBackgroundSession; + +// Additional user-supplied data to encode into the session identifier. Since session identifier +// length limits are unspecified, this should be kept small. Key names beginning with an underscore +// are reserved for use by the fetcher. +@property(atomic, strong, GTM_NULLABLE) GTM_NSDictionaryOf(NSString *, NSString *) *sessionUserInfo; + +// The human-readable description to be assigned to the task. +@property(atomic, copy, GTM_NULLABLE) NSString *taskDescription; + +// The priority assigned to the task, if any. Use NSURLSessionTaskPriorityLow, +// NSURLSessionTaskPriorityDefault, or NSURLSessionTaskPriorityHigh. +@property(atomic, assign) float taskPriority; + +// The fetcher encodes information used to resume a session in the session identifier. +// This method, intended for internal use returns the encoded information. The sessionUserInfo +// dictionary is stored as identifier metadata. +- (GTM_NULLABLE GTM_NSDictionaryOf(NSString *, NSString *) *)sessionIdentifierMetadata; + +#if TARGET_OS_IPHONE && !TARGET_OS_WATCH +// The app should pass to this method the completion handler passed in the app delegate method +// application:handleEventsForBackgroundURLSession:completionHandler: ++ (void)application:(UIApplication *)application + handleEventsForBackgroundURLSession:(NSString *)identifier + completionHandler:(GTMSessionFetcherSystemCompletionHandler)completionHandler; +#endif + +// Indicate that a newly created session should be a background session. +// A new session identifier will be created by the fetcher. +// +// Warning: The only thing background sessions are for is rare download +// of huge, batched files of data. And even just for those, there's a lot +// of pain and hackery needed to get transfers to actually happen reliably +// with background sessions. +// +// Don't try to upload or download in many background sessions, since the system +// will impose an exponentially increasing time penalty to prevent the app from +// getting too much background execution time. +// +// References: +// +// "Moving to Fewer, Larger Transfers" +// https://forums.developer.apple.com/thread/14853 +// +// "NSURLSession’s Resume Rate Limiter" +// https://forums.developer.apple.com/thread/14854 +// +// "Background Session Task state persistence" +// https://forums.developer.apple.com/thread/11554 +// +@property(atomic, assign) BOOL useBackgroundSession; + +// Indicates if the fetcher was started using a background session. +@property(atomic, readonly, getter=isUsingBackgroundSession) BOOL usingBackgroundSession; + +// Indicates if uploads should use an upload task. This is always set for file or stream-provider +// bodies, but may be set explicitly for NSData bodies. +@property(atomic, assign) BOOL useUploadTask; + +// Indicates that the fetcher is using a session that may be shared with other fetchers. +@property(atomic, readonly) BOOL canShareSession; + +// By default, the fetcher allows only secure (https) schemes unless this +// property is set, or the GTM_ALLOW_INSECURE_REQUESTS build flag is set. +// +// For example, during debugging when fetching from a development server that lacks SSL support, +// this may be set to @[ @"http" ], or when the fetcher is used to retrieve local files, +// this may be set to @[ @"file" ]. +// +// This should be left as nil for release builds to avoid creating the opportunity for +// leaking private user behavior and data. If a server is providing insecure URLs +// for fetching by the client app, report the problem as server security & privacy bug. +// +// For builds with the iOS 9/OS X 10.11 and later SDKs, this property is required only when +// the app specifies NSAppTransportSecurity/NSAllowsArbitraryLoads in the main bundle's Info.plist. +@property(atomic, copy, GTM_NULLABLE) GTM_NSArrayOf(NSString *) *allowedInsecureSchemes; + +// By default, the fetcher prohibits localhost requests unless this property is set, +// or the GTM_ALLOW_INSECURE_REQUESTS build flag is set. +// +// For localhost requests, the URL scheme is not checked when this property is set. +// +// For builds with the iOS 9/OS X 10.11 and later SDKs, this property is required only when +// the app specifies NSAppTransportSecurity/NSAllowsArbitraryLoads in the main bundle's Info.plist. +@property(atomic, assign) BOOL allowLocalhostRequest; + +// By default, the fetcher requires valid server certs. This may be bypassed +// temporarily for development against a test server with an invalid cert. +@property(atomic, assign) BOOL allowInvalidServerCertificates; + +// Cookie storage object for this fetcher. If nil, the fetcher will use a static cookie +// storage instance shared among fetchers. If this fetcher was created by a fetcher service +// object, it will be set to use the service object's cookie storage. See Cookies section above for +// the full discussion. +// +// Because as of Jan 2014 standalone instances of NSHTTPCookieStorage do not actually +// store any cookies (Radar 15735276) we use our own subclass, GTMSessionCookieStorage, +// to hold cookies in memory. +@property(atomic, strong, GTM_NULLABLE) NSHTTPCookieStorage *cookieStorage; + +// Setting the credential is optional; it is used if the connection receives +// an authentication challenge. +@property(atomic, strong, GTM_NULLABLE) NSURLCredential *credential; + +// Setting the proxy credential is optional; it is used if the connection +// receives an authentication challenge from a proxy. +@property(atomic, strong, GTM_NULLABLE) NSURLCredential *proxyCredential; + +// If body data, body file URL, or body stream provider is not set, then a GET request +// method is assumed. +@property(atomic, strong, GTM_NULLABLE) NSData *bodyData; + +// File to use as the request body. This forces use of an upload task. +@property(atomic, strong, GTM_NULLABLE) NSURL *bodyFileURL; + +// Length of body to send, expected or actual. +@property(atomic, readonly) int64_t bodyLength; + +// The body stream provider may be called repeatedly to provide a body. +// Setting a body stream provider forces use of an upload task. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherBodyStreamProvider bodyStreamProvider; + +// Object to add authorization to the request, if needed. +// +// This may not be changed once beginFetch has been invoked. +@property(atomic, strong, GTM_NULLABLE) id authorizer; + +// The service object that created and monitors this fetcher, if any. +@property(atomic, strong) id service; + +// The host, if any, used to classify this fetcher in the fetcher service. +@property(atomic, copy, GTM_NULLABLE) NSString *serviceHost; + +// The priority, if any, used for starting fetchers in the fetcher service. +// +// Lower values are higher priority; the default is 0, and values may +// be negative or positive. This priority affects only the start order of +// fetchers that are being delayed by a fetcher service when the running fetchers +// exceeds the service's maxRunningFetchersPerHost. A priority of NSIntegerMin will +// exempt this fetcher from delay. +@property(atomic, assign) NSInteger servicePriority; + +// The delegate's optional didReceiveResponse block may be used to inspect or alter +// the session task response. +// +// This is called on the callback queue. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherDidReceiveResponseBlock didReceiveResponseBlock; + +// The delegate's optional challenge block may be used to inspect or alter +// the session task challenge. +// +// If this block is not set, the fetcher's default behavior for the NSURLSessionTask +// didReceiveChallenge: delegate method is to use the fetcher's respondToChallenge: method +// which relies on the fetcher's credential and proxyCredential properties. +// +// Warning: This may be called repeatedly if the challenge fails. Check +// challenge.previousFailureCount to identify repeated invocations. +// +// This is called on the callback queue. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherChallengeBlock challengeBlock; + +// The delegate's optional willRedirect block may be used to inspect or alter +// the redirection. +// +// This is called on the callback queue. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherWillRedirectBlock willRedirectBlock; + +// The optional send progress block reports body bytes uploaded. +// +// This is called on the callback queue. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherSendProgressBlock sendProgressBlock; + +// The optional accumulate block may be set by clients wishing to accumulate data +// themselves rather than let the fetcher append each buffer to an NSData. +// +// When this is called with nil data (such as on redirect) the client +// should empty its accumulation buffer. +// +// This is called on the callback queue. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherAccumulateDataBlock accumulateDataBlock; + +// The optional received progress block may be used to monitor data +// received from a data task. +// +// This is called on the callback queue. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherReceivedProgressBlock receivedProgressBlock; + +// The delegate's optional downloadProgress block may be used to monitor download +// progress in writing to disk. +// +// This is called on the callback queue. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherDownloadProgressBlock downloadProgressBlock; + +// The delegate's optional willCacheURLResponse block may be used to alter the cached +// NSURLResponse. The user may prevent caching by passing nil to the block's response. +// +// This is called on the callback queue. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherWillCacheURLResponseBlock willCacheURLResponseBlock; + +// Enable retrying; see comments at the top of this file. Setting +// retryEnabled=YES resets the min and max retry intervals. +@property(atomic, assign, getter=isRetryEnabled) BOOL retryEnabled; + +// Retry block is optional for retries. +// +// If present, this block should call the response block with YES to cause a retry or NO to end the +// fetch. +// See comments at the top of this file. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherRetryBlock retryBlock; + +// Retry intervals must be strictly less than maxRetryInterval, else +// they will be limited to maxRetryInterval and no further retries will +// be attempted. Setting maxRetryInterval to 0.0 will reset it to the +// default value, 60 seconds for downloads and 600 seconds for uploads. +@property(atomic, assign) NSTimeInterval maxRetryInterval; + +// Starting retry interval. Setting minRetryInterval to 0.0 will reset it +// to a random value between 1.0 and 2.0 seconds. Clients should normally not +// set this except for unit testing. +@property(atomic, assign) NSTimeInterval minRetryInterval; + +// Multiplier used to increase the interval between retries, typically 2.0. +// Clients should not need to set this. +@property(atomic, assign) double retryFactor; + +// Number of retries attempted. +@property(atomic, readonly) NSUInteger retryCount; + +// Interval delay to precede next retry. +@property(atomic, readonly) NSTimeInterval nextRetryInterval; + +#if GTM_BACKGROUND_TASK_FETCHING +// Skip use of a UIBackgroundTask, thus requiring fetches to complete when the app is in the +// foreground. +// +// Targets should define GTM_BACKGROUND_TASK_FETCHING to 0 to avoid use of a UIBackgroundTask +// on iOS to allow fetches to complete in the background. This property is available when +// it's not practical to set the preprocessor define. +@property(atomic, assign) BOOL skipBackgroundTask; +#endif // GTM_BACKGROUND_TASK_FETCHING + +// Begin fetching the request +// +// The delegate may optionally implement the callback or pass nil for the selector or handler. +// +// The delegate and all callback blocks are retained between the beginFetch call until after the +// finish callback, or until the fetch is stopped. +// +// An error is passed to the callback for server statuses 300 or +// higher, with the status stored as the error object's code. +// +// finishedSEL has a signature like: +// - (void)fetcher:(GTMSessionFetcher *)fetcher +// finishedWithData:(NSData *)data +// error:(NSError *)error; +// +// If the application has specified a destinationFileURL or an accumulateDataBlock +// for the fetcher, the data parameter passed to the callback will be nil. + +- (void)beginFetchWithDelegate:(GTM_NULLABLE id)delegate + didFinishSelector:(GTM_NULLABLE SEL)finishedSEL; + +- (void)beginFetchWithCompletionHandler:(GTM_NULLABLE GTMSessionFetcherCompletionHandler)handler; + +// Returns YES if this fetcher is in the process of fetching a URL. +@property(atomic, readonly, getter=isFetching) BOOL fetching; + +// Cancel the fetch of the request that's currently in progress. The completion handler +// will not be called. +- (void)stopFetching; + +// A block to be called when the fetch completes. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherCompletionHandler completionHandler; + +// A block to be called if download resume data becomes available. +@property(atomic, strong, GTM_NULLABLE) void (^resumeDataBlock)(NSData *); + +// Return the status code from the server response. +@property(atomic, readonly) NSInteger statusCode; + +// Return the http headers from the response. +@property(atomic, strong, readonly, GTM_NULLABLE) GTM_NSDictionaryOf(NSString *, NSString *) *responseHeaders; + +// The response, once it's been received. +@property(atomic, strong, readonly, GTM_NULLABLE) NSURLResponse *response; + +// Bytes downloaded so far. +@property(atomic, readonly) int64_t downloadedLength; + +// Buffer of currently-downloaded data, if available. +@property(atomic, readonly, strong, GTM_NULLABLE) NSData *downloadedData; + +// Local path to which the downloaded file will be moved. +// +// If a file already exists at the path, it will be overwritten. +// Will create the enclosing folders if they are not present. +@property(atomic, strong, GTM_NULLABLE) NSURL *destinationFileURL; + +// The time this fetcher originally began fetching. This is useful as a time +// barrier for ignoring irrelevant fetch notifications or callbacks. +@property(atomic, strong, readonly, GTM_NULLABLE) NSDate *initialBeginFetchDate; + +// userData is retained solely for the convenience of the client. +@property(atomic, strong, GTM_NULLABLE) id userData; + +// Stored property values are retained solely for the convenience of the client. +@property(atomic, copy, GTM_NULLABLE) GTM_NSDictionaryOf(NSString *, id) *properties; + +- (void)setProperty:(GTM_NULLABLE id)obj forKey:(NSString *)key; // Pass nil for obj to remove the property. +- (GTM_NULLABLE id)propertyForKey:(NSString *)key; + +- (void)addPropertiesFromDictionary:(GTM_NSDictionaryOf(NSString *, id) *)dict; + +// Comments are useful for logging, so are strongly recommended for each fetcher. +@property(atomic, copy, GTM_NULLABLE) NSString *comment; + +- (void)setCommentWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); + +// Log of request and response, if logging is enabled +@property(atomic, copy, GTM_NULLABLE) NSString *log; + +// Callbacks are run on this queue. If none is supplied, the main queue is used. +@property(atomic, strong, GTM_NULL_RESETTABLE) dispatch_queue_t callbackQueue; + +// The queue used internally by the session to invoke its delegate methods in the fetcher. +// +// Application callbacks are always called by the fetcher on the callbackQueue above, +// not on this queue. Apps should generally not change this queue. +// +// The default delegate queue is the main queue. +// +// This value is ignored after the session has been created, so this +// property should be set in the fetcher service rather in the fetcher as it applies +// to a shared session. +@property(atomic, strong, GTM_NULL_RESETTABLE) NSOperationQueue *sessionDelegateQueue; + +// Spin the run loop or sleep the thread, discarding events, until the fetch has completed. +// +// This is only for use in testing or in tools without a user interface. +// +// Note: Synchronous fetches should never be used by shipping apps; they are +// sufficient reason for rejection from the app store. +// +// Returns NO if timed out. +- (BOOL)waitForCompletionWithTimeout:(NSTimeInterval)timeoutInSeconds; + +// Test block is optional for testing. +// +// If present, this block will cause the fetcher to skip starting the session, and instead +// use the test block response values when calling the completion handler and delegate code. +// +// Test code can set this on the fetcher or on the fetcher service. For testing libraries +// that use a fetcher without exposing either the fetcher or the fetcher service, the global +// method setGlobalTestBlock: will set the block for all fetchers that do not have a test +// block set. +// +// The test code can pass nil for all response parameters to indicate that the fetch +// should proceed. +// +// Applications can exclude test block support by setting GTM_DISABLE_FETCHER_TEST_BLOCK. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherTestBlock testBlock; + ++ (void)setGlobalTestBlock:(GTM_NULLABLE GTMSessionFetcherTestBlock)block; + +// When using the testBlock, |testBlockAccumulateDataChunkCount| is the desired number of chunks to +// divide the response data into if the client has streaming enabled. The data will be divided up to +// |testBlockAccumulateDataChunkCount| chunks; however, the exact amount may vary depending on the +// size of the response data (e.g. a 1-byte response can only be divided into one chunk). +@property(atomic, readwrite) NSUInteger testBlockAccumulateDataChunkCount; + +#if GTM_BACKGROUND_TASK_FETCHING +// For testing or to override UIApplication invocations, apps may specify an alternative +// target for messages to UIApplication. ++ (void)setSubstituteUIApplication:(nullable id)substituteUIApplication; ++ (nullable id)substituteUIApplication; +#endif // GTM_BACKGROUND_TASK_FETCHING + +// Exposed for testing. ++ (GTMSessionCookieStorage *)staticCookieStorage; ++ (BOOL)appAllowsInsecureRequests; + +#if STRIP_GTM_FETCH_LOGGING +// If logging is stripped, provide a stub for the main method +// for controlling logging. ++ (void)setLoggingEnabled:(BOOL)flag; ++ (BOOL)isLoggingEnabled; + +#else + +// These methods let an application log specific body text, such as the text description of a binary +// request or response. The application should set the fetcher to defer response body logging until +// the response has been received and the log response body has been set by the app. For example: +// +// fetcher.logRequestBody = [binaryObject stringDescription]; +// fetcher.deferResponseBodyLogging = YES; +// [fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) { +// if (error == nil) { +// fetcher.logResponseBody = [[[MyThing alloc] initWithData:data] stringDescription]; +// } +// fetcher.deferResponseBodyLogging = NO; +// }]; + +@property(atomic, copy, GTM_NULLABLE) NSString *logRequestBody; +@property(atomic, assign) BOOL deferResponseBodyLogging; +@property(atomic, copy, GTM_NULLABLE) NSString *logResponseBody; + +// Internal logging support. +@property(atomic, readonly) NSData *loggedStreamData; +@property(atomic, assign) BOOL hasLoggedError; +@property(atomic, strong, GTM_NULLABLE) NSURL *redirectedFromURL; +- (void)appendLoggedStreamData:(NSData *)dataToAdd; +- (void)clearLoggedStreamData; + +#endif // STRIP_GTM_FETCH_LOGGING + +@end + +@interface GTMSessionFetcher (BackwardsCompatibilityOnly) +// Clients using GTMSessionFetcher should set the cookie storage explicitly themselves. +// This method is just for compatibility with the old GTMHTTPFetcher class. +- (void)setCookieStorageMethod:(NSInteger)method; +@end + +// Until we can just instantiate NSHTTPCookieStorage for local use, we'll +// implement all the public methods ourselves. This stores cookies only in +// memory. Additional methods are provided for testing. +// +// iOS 9/OS X 10.11 added +[NSHTTPCookieStorage sharedCookieStorageForGroupContainerIdentifier:] +// which may also be used to create cookie storage. +@interface GTMSessionCookieStorage : NSHTTPCookieStorage + +// Add the array off cookies to the storage, replacing duplicates. +// Also removes expired cookies from the storage. +- (void)setCookies:(GTM_NULLABLE GTM_NSArrayOf(NSHTTPCookie *) *)cookies; + +- (void)removeAllCookies; + +@end + +// Macros to monitor synchronization blocks in debug builds. +// These report problems using GTMSessionCheckDebug. +// +// GTMSessionMonitorSynchronized Start monitoring a top-level-only +// @sync scope. +// GTMSessionMonitorRecursiveSynchronized Start monitoring a top-level or +// recursive @sync scope. +// GTMSessionCheckSynchronized Verify that the current execution +// is inside a @sync scope. +// GTMSessionCheckNotSynchronized Verify that the current execution +// is not inside a @sync scope. +// +// Example usage: +// +// - (void)myExternalMethod { +// @synchronized(self) { +// GTMSessionMonitorSynchronized(self) +// +// - (void)myInternalMethod { +// GTMSessionCheckSynchronized(self); +// +// - (void)callMyCallbacks { +// GTMSessionCheckNotSynchronized(self); +// +// GTMSessionCheckNotSynchronized is available for verifying the code isn't +// in a deadlockable @sync state when posting notifications and invoking +// callbacks. Don't use GTMSessionCheckNotSynchronized immediately before a +// @sync scope; the normal recursiveness check of GTMSessionMonitorSynchronized +// can catch those. + +#ifdef __OBJC__ +// If asserts are entirely no-ops, the synchronization monitor is just a bunch +// of counting code that doesn't report exceptional circumstances in any way. +// Only build the synchronization monitor code if NS_BLOCK_ASSERTIONS is not +// defined or asserts are being logged instead. +#if DEBUG && (!defined(NS_BLOCK_ASSERTIONS) || GTMSESSION_ASSERT_AS_LOG) + #define __GTMSessionMonitorSynchronizedVariableInner(varname, counter) \ + varname ## counter + #define __GTMSessionMonitorSynchronizedVariable(varname, counter) \ + __GTMSessionMonitorSynchronizedVariableInner(varname, counter) + + #define GTMSessionMonitorSynchronized(obj) \ + NS_VALID_UNTIL_END_OF_SCOPE id \ + __GTMSessionMonitorSynchronizedVariable(__monitor, __COUNTER__) = \ + [[GTMSessionSyncMonitorInternal alloc] initWithSynchronizationObject:obj \ + allowRecursive:NO \ + functionName:__func__] + + #define GTMSessionMonitorRecursiveSynchronized(obj) \ + NS_VALID_UNTIL_END_OF_SCOPE id \ + __GTMSessionMonitorSynchronizedVariable(__monitor, __COUNTER__) = \ + [[GTMSessionSyncMonitorInternal alloc] initWithSynchronizationObject:obj \ + allowRecursive:YES \ + functionName:__func__] + + #define GTMSessionCheckSynchronized(obj) { \ + GTMSESSION_ASSERT_DEBUG( \ + [GTMSessionSyncMonitorInternal functionsHoldingSynchronizationOnObject:obj], \ + @"GTMSessionCheckSynchronized(" #obj ") failed: not sync'd" \ + @" on " #obj " in %s. Call stack:\n%@", \ + __func__, [NSThread callStackSymbols]); \ + } + + #define GTMSessionCheckNotSynchronized(obj) { \ + GTMSESSION_ASSERT_DEBUG( \ + ![GTMSessionSyncMonitorInternal functionsHoldingSynchronizationOnObject:obj], \ + @"GTMSessionCheckNotSynchronized(" #obj ") failed: was sync'd" \ + @" on " #obj " in %s by %@. Call stack:\n%@", __func__, \ + [GTMSessionSyncMonitorInternal functionsHoldingSynchronizationOnObject:obj], \ + [NSThread callStackSymbols]); \ + } + +// GTMSessionSyncMonitorInternal is a private class that keeps track of the +// beginning and end of synchronized scopes. +// +// This class should not be used directly, but only via the +// GTMSessionMonitorSynchronized macro. +@interface GTMSessionSyncMonitorInternal : NSObject +- (instancetype)initWithSynchronizationObject:(id)object + allowRecursive:(BOOL)allowRecursive + functionName:(const char *)functionName; +// Return the names of the functions that hold sync on the object, or nil if none. ++ (NSArray *)functionsHoldingSynchronizationOnObject:(id)object; +@end + +#else + #define GTMSessionMonitorSynchronized(obj) do { } while (0) + #define GTMSessionMonitorRecursiveSynchronized(obj) do { } while (0) + #define GTMSessionCheckSynchronized(obj) do { } while (0) + #define GTMSessionCheckNotSynchronized(obj) do { } while (0) +#endif // !DEBUG +#endif // __OBJC__ + + +GTM_ASSUME_NONNULL_END diff --git a/Pods/GTMSessionFetcher/Source/GTMSessionFetcher.m b/Pods/GTMSessionFetcher/Source/GTMSessionFetcher.m new file mode 100644 index 0000000..c248847 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMSessionFetcher.m @@ -0,0 +1,4648 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "GTMSessionFetcher.h" +#if TARGET_OS_OSX && GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH +// To reconnect background sessions on Mac outside +load requires importing and linking +// AppKit to access the NSApplicationDidFinishLaunching symbol. +#import +#endif + +#import + +#ifndef STRIP_GTM_FETCH_LOGGING + #error GTMSessionFetcher headers should have defaulted this if it wasn't already defined. +#endif + +GTM_ASSUME_NONNULL_BEGIN + +NSString *const kGTMSessionFetcherStartedNotification = @"kGTMSessionFetcherStartedNotification"; +NSString *const kGTMSessionFetcherStoppedNotification = @"kGTMSessionFetcherStoppedNotification"; +NSString *const kGTMSessionFetcherRetryDelayStartedNotification = @"kGTMSessionFetcherRetryDelayStartedNotification"; +NSString *const kGTMSessionFetcherRetryDelayStoppedNotification = @"kGTMSessionFetcherRetryDelayStoppedNotification"; + +NSString *const kGTMSessionFetcherCompletionInvokedNotification = @"kGTMSessionFetcherCompletionInvokedNotification"; +NSString *const kGTMSessionFetcherCompletionDataKey = @"data"; +NSString *const kGTMSessionFetcherCompletionErrorKey = @"error"; + +NSString *const kGTMSessionFetcherErrorDomain = @"com.google.GTMSessionFetcher"; +NSString *const kGTMSessionFetcherStatusDomain = @"com.google.HTTPStatus"; +NSString *const kGTMSessionFetcherStatusDataKey = @"data"; // data returned with a kGTMSessionFetcherStatusDomain error +NSString *const kGTMSessionFetcherStatusDataContentTypeKey = @"data_content_type"; + +NSString *const kGTMSessionFetcherNumberOfRetriesDoneKey = @"kGTMSessionFetcherNumberOfRetriesDoneKey"; +NSString *const kGTMSessionFetcherElapsedIntervalWithRetriesKey = @"kGTMSessionFetcherElapsedIntervalWithRetriesKey"; + +static NSString *const kGTMSessionIdentifierPrefix = @"com.google.GTMSessionFetcher"; +static NSString *const kGTMSessionIdentifierDestinationFileURLMetadataKey = @"_destURL"; +static NSString *const kGTMSessionIdentifierBodyFileURLMetadataKey = @"_bodyURL"; + +// The default max retry interview is 10 minutes for uploads (POST/PUT/PATCH), +// 1 minute for downloads. +static const NSTimeInterval kUnsetMaxRetryInterval = -1.0; +static const NSTimeInterval kDefaultMaxDownloadRetryInterval = 60.0; +static const NSTimeInterval kDefaultMaxUploadRetryInterval = 60.0 * 10.; + +// The maximum data length that can be loaded to the error userInfo +static const int64_t kMaximumDownloadErrorDataLength = 20000; + +#ifdef GTMSESSION_PERSISTED_DESTINATION_KEY +// Projects using unique class names should also define a unique persisted destination key. +static NSString * const kGTMSessionFetcherPersistedDestinationKey = + GTMSESSION_PERSISTED_DESTINATION_KEY; +#else +static NSString * const kGTMSessionFetcherPersistedDestinationKey = + @"com.google.GTMSessionFetcher.downloads"; +#endif + +GTM_ASSUME_NONNULL_END + +// +// GTMSessionFetcher +// + +#if 0 +#define GTM_LOG_BACKGROUND_SESSION(...) GTMSESSION_LOG_DEBUG(__VA_ARGS__) +#else +#define GTM_LOG_BACKGROUND_SESSION(...) +#endif + +#ifndef GTM_TARGET_SUPPORTS_APP_TRANSPORT_SECURITY + #if (TARGET_OS_TV \ + || TARGET_OS_WATCH \ + || (!TARGET_OS_IPHONE && defined(MAC_OS_X_VERSION_10_11) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11) \ + || (TARGET_OS_IPHONE && defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0)) + #define GTM_TARGET_SUPPORTS_APP_TRANSPORT_SECURITY 1 + #endif +#endif + +#if ((defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST) || \ + (TARGET_OS_OSX && defined(__MAC_10_15) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_15) || \ + (TARGET_OS_IOS && defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_13_0) || \ + (TARGET_OS_WATCH && defined(__WATCHOS_6_0) && __WATCHOS_VERSION_MIN_REQUIRED >= __WATCHOS_6_0) || \ + (TARGET_OS_TV && defined(__TVOS_13_0) && __TVOS_VERSION_MIN_REQUIRED >= __TVOS_13_0)) +#define GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 1 +#define GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 1 +#elif ((TARGET_OS_OSX && defined(__MAC_10_15) && __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_15) || \ + (TARGET_OS_IOS && defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0) || \ + (TARGET_OS_WATCH && defined(__WATCHOS_6_0) && __WATCHOS_VERSION_MAX_ALLOWED >= __WATCHOS_6_0) || \ + (TARGET_OS_TV && defined(__TVOS_13_0) && __TVOS_VERSION_MAX_ALLOWED >= __TVOS_13_0)) +#define GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 0 +#define GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 1 +#else +#define GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 0 +#define GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION 0 +#endif + +#if ((defined(TARGET_OS_MACCATALYST) && TARGET_OS_MACCATALYST) || \ + (TARGET_OS_OSX && defined(__MAC_10_15) && __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_15) || \ + (TARGET_OS_IOS && defined(__IPHONE_13_0) && __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_13_0) || \ + (TARGET_OS_WATCH && defined(__WATCHOS_6_0) && __WATCHOS_VERSION_MIN_REQUIRED >= __WATCHOS_6_0) || \ + (TARGET_OS_TV && defined(__TVOS_13_0) && __TVOS_VERSION_MIN_REQUIRED >= __TVOS_13_0)) +#define GTM_SDK_REQUIRES_SECTRUSTEVALUATEWITHERROR 1 +#else +#define GTM_SDK_REQUIRES_SECTRUSTEVALUATEWITHERROR 0 +#endif + +@interface GTMSessionFetcher () + +@property(atomic, strong, readwrite, GTM_NULLABLE) NSData *downloadedData; +@property(atomic, strong, readwrite, GTM_NULLABLE) NSData *downloadResumeData; + +#if GTM_BACKGROUND_TASK_FETCHING +// Should always be accessed within an @synchronized(self). +@property(assign, nonatomic) UIBackgroundTaskIdentifier backgroundTaskIdentifier; +#endif + +@property(atomic, readwrite, getter=isUsingBackgroundSession) BOOL usingBackgroundSession; + +@end + +#if !GTMSESSION_BUILD_COMBINED_SOURCES +@interface GTMSessionFetcher (GTMSessionFetcherLoggingInternal) +- (void)logFetchWithError:(NSError *)error; +- (void)logNowWithError:(GTM_NULLABLE NSError *)error; +- (NSInputStream *)loggedInputStreamForInputStream:(NSInputStream *)inputStream; +- (GTMSessionFetcherBodyStreamProvider)loggedStreamProviderForStreamProvider: + (GTMSessionFetcherBodyStreamProvider)streamProvider; +@end +#endif // !GTMSESSION_BUILD_COMBINED_SOURCES + +GTM_ASSUME_NONNULL_BEGIN + +static NSTimeInterval InitialMinRetryInterval(void) { + return 1.0 + ((double)(arc4random_uniform(0x0FFFF)) / (double) 0x0FFFF); +} + +static BOOL IsLocalhost(NSString * GTM_NULLABLE_TYPE host) { + // We check if there's host, and then make the comparisons. + if (host == nil) return NO; + return ([host caseInsensitiveCompare:@"localhost"] == NSOrderedSame + || [host isEqual:@"::1"] + || [host isEqual:@"127.0.0.1"]); +} + +static NSDictionary *GTM_NULLABLE_TYPE GTMErrorUserInfoForData( + NSData *GTM_NULLABLE_TYPE data, NSDictionary *GTM_NULLABLE_TYPE responseHeaders) { + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + + if (data.length > 0) { + userInfo[kGTMSessionFetcherStatusDataKey] = data; + + NSString *contentType = responseHeaders[@"Content-Type"]; + if (contentType) { + userInfo[kGTMSessionFetcherStatusDataContentTypeKey] = contentType; + } + } + + return userInfo.count > 0 ? userInfo : nil; +} + +static GTMSessionFetcherTestBlock GTM_NULLABLE_TYPE gGlobalTestBlock; + +@implementation GTMSessionFetcher { + NSMutableURLRequest *_request; // after beginFetch, changed only in delegate callbacks + BOOL _useUploadTask; // immutable after beginFetch + NSURL *_bodyFileURL; // immutable after beginFetch + GTMSessionFetcherBodyStreamProvider _bodyStreamProvider; // immutable after beginFetch + NSURLSession *_session; + BOOL _shouldInvalidateSession; // immutable after beginFetch + NSURLSession *_sessionNeedingInvalidation; + NSURLSessionConfiguration *_configuration; + NSURLSessionTask *_sessionTask; + NSString *_taskDescription; + float _taskPriority; + NSURLResponse *_response; + NSString *_sessionIdentifier; + BOOL _wasCreatedFromBackgroundSession; + BOOL _didCreateSessionIdentifier; + NSString *_sessionIdentifierUUID; + BOOL _userRequestedBackgroundSession; + BOOL _usingBackgroundSession; + NSMutableData * GTM_NULLABLE_TYPE _downloadedData; + NSError *_downloadFinishedError; + NSData *_downloadResumeData; // immutable after construction + NSData * GTM_NULLABLE_TYPE _downloadTaskErrorData; // Data for when download task fails + NSURL *_destinationFileURL; + int64_t _downloadedLength; + NSURLCredential *_credential; // username & password + NSURLCredential *_proxyCredential; // credential supplied to proxy servers + BOOL _isStopNotificationNeeded; // set when start notification has been sent + BOOL _isUsingTestBlock; // set when a test block was provided (remains set when the block is released) + id _userData; // retained, if set by caller + NSMutableDictionary *_properties; // more data retained for caller + dispatch_queue_t _callbackQueue; + dispatch_group_t _callbackGroup; // read-only after creation + NSOperationQueue *_delegateQueue; // immutable after beginFetch + + id _authorizer; // immutable after beginFetch + + // The service object that created and monitors this fetcher, if any. + id _service; // immutable; set by the fetcher service upon creation + NSString *_serviceHost; + NSInteger _servicePriority; // immutable after beginFetch + BOOL _hasStoppedFetching; // counterpart to _initialBeginFetchDate + BOOL _userStoppedFetching; + + BOOL _isRetryEnabled; // user wants auto-retry + NSTimer *_retryTimer; + NSUInteger _retryCount; + NSTimeInterval _maxRetryInterval; // default 60 (download) or 600 (upload) seconds + NSTimeInterval _minRetryInterval; // random between 1 and 2 seconds + NSTimeInterval _retryFactor; // default interval multiplier is 2 + NSTimeInterval _lastRetryInterval; + NSDate *_initialBeginFetchDate; // date that beginFetch was first invoked; immutable after initial beginFetch + NSDate *_initialRequestDate; // date of first request to the target server (ignoring auth) + BOOL _hasAttemptedAuthRefresh; // accessed only in shouldRetryNowForStatus: + + NSString *_comment; // comment for log + NSString *_log; +#if !STRIP_GTM_FETCH_LOGGING + NSMutableData *_loggedStreamData; + NSURL *_redirectedFromURL; + NSString *_logRequestBody; + NSString *_logResponseBody; + BOOL _hasLoggedError; + BOOL _deferResponseBodyLogging; +#endif +} + +#if !GTMSESSION_UNIT_TESTING ++ (void)load { +#if GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH && TARGET_OS_IPHONE + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self + selector:@selector(reconnectFetchersForBackgroundSessionsOnAppLaunch:) + name:UIApplicationDidFinishLaunchingNotification + object:nil]; +#elif GTMSESSION_RECONNECT_BACKGROUND_SESSIONS_ON_LAUNCH && TARGET_OS_OSX + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc addObserver:self + selector:@selector(reconnectFetchersForBackgroundSessionsOnAppLaunch:) + name:NSApplicationDidFinishLaunchingNotification + object:nil]; +#else + [self fetchersForBackgroundSessions]; +#endif +} + ++ (void)reconnectFetchersForBackgroundSessionsOnAppLaunch:(NSNotification *)notification { + // Give all other app-did-launch handlers a chance to complete before + // reconnecting the fetchers. Not doing this may lead to reconnecting + // before the app delegate has a chance to run. + dispatch_async(dispatch_get_main_queue(), ^{ + [self fetchersForBackgroundSessions]; + }); +} +#endif // !GTMSESSION_UNIT_TESTING + ++ (instancetype)fetcherWithRequest:(GTM_NULLABLE NSURLRequest *)request { + return [[self alloc] initWithRequest:request configuration:nil]; +} + ++ (instancetype)fetcherWithURL:(NSURL *)requestURL { + return [self fetcherWithRequest:[NSURLRequest requestWithURL:requestURL]]; +} + ++ (instancetype)fetcherWithURLString:(NSString *)requestURLString { + return [self fetcherWithURL:(NSURL *)[NSURL URLWithString:requestURLString]]; +} + ++ (instancetype)fetcherWithDownloadResumeData:(NSData *)resumeData { + GTMSessionFetcher *fetcher = [self fetcherWithRequest:nil]; + fetcher.comment = @"Resuming download"; + fetcher.downloadResumeData = resumeData; + return fetcher; +} + ++ (GTM_NULLABLE instancetype)fetcherWithSessionIdentifier:(NSString *)sessionIdentifier { + GTMSESSION_ASSERT_DEBUG(sessionIdentifier != nil, @"Invalid session identifier"); + NSMapTable *sessionIdentifierToFetcherMap = [self sessionIdentifierToFetcherMap]; + GTMSessionFetcher *fetcher = [sessionIdentifierToFetcherMap objectForKey:sessionIdentifier]; + if (!fetcher && [sessionIdentifier hasPrefix:kGTMSessionIdentifierPrefix]) { + fetcher = [self fetcherWithRequest:nil]; + [fetcher setSessionIdentifier:sessionIdentifier]; + [sessionIdentifierToFetcherMap setObject:fetcher forKey:sessionIdentifier]; + fetcher->_wasCreatedFromBackgroundSession = YES; + [fetcher setCommentWithFormat:@"Resuming %@", + fetcher && fetcher->_sessionIdentifierUUID ? fetcher->_sessionIdentifierUUID : @"?"]; + } + return fetcher; +} + ++ (NSMapTable *)sessionIdentifierToFetcherMap { + // TODO: What if a service is involved in creating the fetcher? Currently, when re-creating + // fetchers, if a service was involved, it is not re-created. Should the service maintain a map? + static NSMapTable *gSessionIdentifierToFetcherMap = nil; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + gSessionIdentifierToFetcherMap = [NSMapTable strongToWeakObjectsMapTable]; + }); + return gSessionIdentifierToFetcherMap; +} + +#if !GTM_ALLOW_INSECURE_REQUESTS ++ (BOOL)appAllowsInsecureRequests { + // If the main bundle Info.plist key NSAppTransportSecurity is present, and it specifies + // NSAllowsArbitraryLoads, then we need to explicitly enforce secure schemes. +#if GTM_TARGET_SUPPORTS_APP_TRANSPORT_SECURITY + static BOOL allowsInsecureRequests; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + NSBundle *mainBundle = [NSBundle mainBundle]; + NSDictionary *appTransportSecurity = + [mainBundle objectForInfoDictionaryKey:@"NSAppTransportSecurity"]; + allowsInsecureRequests = + [[appTransportSecurity objectForKey:@"NSAllowsArbitraryLoads"] boolValue]; + }); + return allowsInsecureRequests; +#else + // For builds targeting iOS 8 or 10.10 and earlier, we want to require fetcher + // security checks. + return YES; +#endif // GTM_TARGET_SUPPORTS_APP_TRANSPORT_SECURITY +} +#else // GTM_ALLOW_INSECURE_REQUESTS ++ (BOOL)appAllowsInsecureRequests { + return YES; +} +#endif // !GTM_ALLOW_INSECURE_REQUESTS + + +- (instancetype)init { + return [self initWithRequest:nil configuration:nil]; +} + +- (instancetype)initWithRequest:(NSURLRequest *)request { + return [self initWithRequest:request configuration:nil]; +} + +- (instancetype)initWithRequest:(GTM_NULLABLE NSURLRequest *)request + configuration:(GTM_NULLABLE NSURLSessionConfiguration *)configuration { + self = [super init]; + if (self) { +#if GTM_BACKGROUND_TASK_FETCHING + _backgroundTaskIdentifier = UIBackgroundTaskInvalid; +#endif + _request = [request mutableCopy]; + _configuration = configuration; + + NSData *bodyData = request.HTTPBody; + if (bodyData) { + _bodyLength = (int64_t)bodyData.length; + } else { + _bodyLength = NSURLSessionTransferSizeUnknown; + } + + _callbackQueue = dispatch_get_main_queue(); + _callbackGroup = dispatch_group_create(); + _delegateQueue = [NSOperationQueue mainQueue]; + + _minRetryInterval = InitialMinRetryInterval(); + _maxRetryInterval = kUnsetMaxRetryInterval; + + _taskPriority = -1.0f; // Valid values if set are 0.0...1.0. + + _testBlockAccumulateDataChunkCount = 1; + +#if !STRIP_GTM_FETCH_LOGGING + // Encourage developers to set the comment property or use + // setCommentWithFormat: by providing a default string. + _comment = @"(No fetcher comment set)"; +#endif + } + return self; +} + +- (id)copyWithZone:(NSZone *)zone { + // disallow use of fetchers in a copy property + [self doesNotRecognizeSelector:_cmd]; + return nil; +} + +- (NSString *)description { + NSString *requestStr = self.request.URL.description; + if (requestStr.length == 0) { + if (self.downloadResumeData.length > 0) { + requestStr = @""; + } else if (_wasCreatedFromBackgroundSession) { + requestStr = @""; + } else { + requestStr = @""; + } + } + return [NSString stringWithFormat:@"%@ %p (%@)", [self class], self, requestStr]; +} + +- (void)dealloc { + GTMSESSION_ASSERT_DEBUG(!_isStopNotificationNeeded, + @"unbalanced fetcher notification for %@", _request.URL); + [self forgetSessionIdentifierForFetcherWithoutSyncCheck]; + + // Note: if a session task or a retry timer was pending, then this instance + // would be retained by those so it wouldn't be getting dealloc'd, + // hence we don't need to stopFetch here +} + +#pragma mark - + +// Begin fetching the URL (or begin a retry fetch). The delegate is retained +// for the duration of the fetch connection. + +- (void)beginFetchWithCompletionHandler:(GTM_NULLABLE GTMSessionFetcherCompletionHandler)handler { + GTMSessionCheckNotSynchronized(self); + + _completionHandler = [handler copy]; + + // The user may have called setDelegate: earlier if they want to use other + // delegate-style callbacks during the fetch; otherwise, the delegate is nil, + // which is fine. + [self beginFetchMayDelay:YES mayAuthorize:YES]; +} + +// Begin fetching the URL for a retry fetch. The delegate and completion handler +// are already provided, and do not need to be copied. +- (void)beginFetchForRetry { + GTMSessionCheckNotSynchronized(self); + + [self beginFetchMayDelay:YES mayAuthorize:YES]; +} + +- (GTMSessionFetcherCompletionHandler)completionHandlerWithTarget:(GTM_NULLABLE_TYPE id)target + didFinishSelector:(GTM_NULLABLE_TYPE SEL)finishedSelector { + GTMSessionFetcherAssertValidSelector(target, finishedSelector, @encode(GTMSessionFetcher *), + @encode(NSData *), @encode(NSError *), 0); + GTMSessionFetcherCompletionHandler completionHandler = ^(NSData *data, NSError *error) { + if (target && finishedSelector) { + id selfArg = self; // Placate ARC. + NSMethodSignature *sig = [target methodSignatureForSelector:finishedSelector]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; + [invocation setSelector:(SEL)finishedSelector]; + [invocation setTarget:target]; + [invocation setArgument:&selfArg atIndex:2]; + [invocation setArgument:&data atIndex:3]; + [invocation setArgument:&error atIndex:4]; + [invocation invoke]; + } + }; + return completionHandler; +} + +- (void)beginFetchWithDelegate:(GTM_NULLABLE_TYPE id)target + didFinishSelector:(GTM_NULLABLE_TYPE SEL)finishedSelector { + GTMSessionCheckNotSynchronized(self); + + GTMSessionFetcherCompletionHandler handler = [self completionHandlerWithTarget:target + didFinishSelector:finishedSelector]; + [self beginFetchWithCompletionHandler:handler]; +} + +- (void)beginFetchMayDelay:(BOOL)mayDelay + mayAuthorize:(BOOL)mayAuthorize { + // This is the internal entry point for re-starting fetches. + GTMSessionCheckNotSynchronized(self); + + NSMutableURLRequest *fetchRequest = _request; // The request property is now externally immutable. + NSURL *fetchRequestURL = fetchRequest.URL; + NSString *priorSessionIdentifier = self.sessionIdentifier; + + // A utility block for creating error objects when we fail to start the fetch. + NSError *(^beginFailureError)(NSInteger) = ^(NSInteger code){ + NSString *urlString = fetchRequestURL.absoluteString; + NSDictionary *userInfo = @{ + NSURLErrorFailingURLStringErrorKey : (urlString ? urlString : @"(missing URL)") + }; + return [NSError errorWithDomain:kGTMSessionFetcherErrorDomain + code:code + userInfo:userInfo]; + }; + + // Catch delegate queue maxConcurrentOperationCount values other than 1, particularly + // NSOperationQueueDefaultMaxConcurrentOperationCount (-1), to avoid the additional complexity + // of simultaneous or out-of-order delegate callbacks. + GTMSESSION_ASSERT_DEBUG(_delegateQueue.maxConcurrentOperationCount == 1, + @"delegate queue %@ should support one concurrent operation, not %ld", + _delegateQueue.name, + (long)_delegateQueue.maxConcurrentOperationCount); + + if (!_initialBeginFetchDate) { + // This ivar is set only here on the initial beginFetch so need not be synchronized. + _initialBeginFetchDate = [[NSDate alloc] init]; + } + + if (self.sessionTask != nil) { + // If cached fetcher returned through fetcherWithSessionIdentifier:, then it's + // already begun, but don't consider this a failure, since the user need not know this. + if (self.sessionIdentifier != nil) { + return; + } + GTMSESSION_ASSERT_DEBUG(NO, @"Fetch object %@ being reused; this should never happen", self); + [self failToBeginFetchWithError:beginFailureError(GTMSessionFetcherErrorDownloadFailed)]; + return; + } + + if (fetchRequestURL == nil && !_downloadResumeData && !priorSessionIdentifier) { + GTMSESSION_ASSERT_DEBUG(NO, @"Beginning a fetch requires a request with a URL"); + [self failToBeginFetchWithError:beginFailureError(GTMSessionFetcherErrorDownloadFailed)]; + return; + } + + // We'll respect the user's request for a background session (unless this is + // an upload fetcher, which does its initial request foreground.) + self.usingBackgroundSession = self.useBackgroundSession && [self canFetchWithBackgroundSession]; + + NSURL *bodyFileURL = self.bodyFileURL; + if (bodyFileURL) { + NSError *fileCheckError; + if (![bodyFileURL checkResourceIsReachableAndReturnError:&fileCheckError]) { + // This assert fires when the file being uploaded no longer exists once + // the fetcher is ready to start the upload. + GTMSESSION_ASSERT_DEBUG_OR_LOG(0, @"Body file is unreachable: %@\n %@", + bodyFileURL.path, fileCheckError); + [self failToBeginFetchWithError:fileCheckError]; + return; + } + } + + NSString *requestScheme = fetchRequestURL.scheme; + BOOL isDataRequest = [requestScheme isEqual:@"data"]; + if (isDataRequest) { + // NSURLSession does not support data URLs in background sessions. +#if DEBUG + if (priorSessionIdentifier || self.sessionIdentifier) { + GTMSESSION_LOG_DEBUG(@"Converting background to foreground session for %@", + fetchRequest); + } +#endif + [self setSessionIdentifierInternal:nil]; + self.useBackgroundSession = NO; + } + +#if GTM_ALLOW_INSECURE_REQUESTS + BOOL shouldCheckSecurity = NO; +#else + BOOL shouldCheckSecurity = (fetchRequestURL != nil + && !isDataRequest + && [[self class] appAllowsInsecureRequests]); +#endif + + if (shouldCheckSecurity) { + // Allow https only for requests, unless overridden by the client. + // + // Non-https requests may too easily be snooped, so we disallow them by default. + // + // file: and data: schemes are usually safe if they are hardcoded in the client or provided + // by a trusted source, but since it's fairly rare to need them, it's safest to make clients + // explicitly whitelist them. + BOOL isSecure = + requestScheme != nil && [requestScheme caseInsensitiveCompare:@"https"] == NSOrderedSame; + if (!isSecure) { + BOOL allowRequest = NO; + NSString *host = fetchRequestURL.host; + + // Check schemes first. A file scheme request may be allowed here, or as a localhost request. + for (NSString *allowedScheme in _allowedInsecureSchemes) { + if (requestScheme != nil && + [requestScheme caseInsensitiveCompare:allowedScheme] == NSOrderedSame) { + allowRequest = YES; + break; + } + } + if (!allowRequest) { + // Check for localhost requests. Security checks only occur for non-https requests, so + // this check won't happen for an https request to localhost. + BOOL isLocalhostRequest = (host.length == 0 && [fetchRequestURL isFileURL]) || IsLocalhost(host); + if (isLocalhostRequest) { + if (self.allowLocalhostRequest) { + allowRequest = YES; + } else { + GTMSESSION_ASSERT_DEBUG(NO, @"Fetch request for localhost but fetcher" + @" allowLocalhostRequest is not set: %@", fetchRequestURL); + } + } else { + GTMSESSION_ASSERT_DEBUG(NO, @"Insecure fetch request has a scheme (%@)" + @" not found in fetcher allowedInsecureSchemes (%@): %@", + requestScheme, _allowedInsecureSchemes ?: @" @[] ", fetchRequestURL); + } + } + + if (!allowRequest) { +#if !DEBUG + NSLog(@"Insecure fetch disallowed for %@", fetchRequestURL.description ?: @"nil request URL"); +#endif + [self failToBeginFetchWithError:beginFailureError(GTMSessionFetcherErrorInsecureRequest)]; + return; + } + } // !isSecure + } // (requestURL != nil) && !isDataRequest + + if (self.cookieStorage == nil) { + self.cookieStorage = [[self class] staticCookieStorage]; + } + + BOOL isRecreatingSession = (self.sessionIdentifier != nil) && (fetchRequest == nil); + + self.canShareSession = !isRecreatingSession && !self.usingBackgroundSession; + + if (!self.session && self.canShareSession) { + self.session = [_service sessionForFetcherCreation]; + // If _session is nil, then the service's session creation semaphore will block + // until this fetcher invokes fetcherDidCreateSession: below, so this *must* invoke + // that method, even if the session fails to be created. + } + + if (!self.session) { + // Create a session. + if (!_configuration) { + if (priorSessionIdentifier || self.usingBackgroundSession) { + NSString *sessionIdentifier = priorSessionIdentifier; + if (!sessionIdentifier) { + sessionIdentifier = [self createSessionIdentifierWithMetadata:nil]; + } + NSMapTable *sessionIdentifierToFetcherMap = [[self class] sessionIdentifierToFetcherMap]; + [sessionIdentifierToFetcherMap setObject:self forKey:self.sessionIdentifier]; + + if (@available(iOS 8.0, tvOS 9.0, watchOS 2.0, macOS 10.10, *)) { + _configuration = + [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionIdentifier]; + } else { +#if ((!TARGET_OS_IPHONE && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10) \ + || (TARGET_OS_IPHONE && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0)) + // If building with support for iOS 7 or < macOS 10.10, allow using the older + // -backgroundSessionConfiguration: method, otherwise leave it out to avoid deprecated + // API warnings/errors. + _configuration = + [NSURLSessionConfiguration backgroundSessionConfiguration:sessionIdentifier]; +#endif + } + self.usingBackgroundSession = YES; + self.canShareSession = NO; + } else { + _configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; + } +#if !GTM_ALLOW_INSECURE_REQUESTS +#if GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION + _configuration.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12; +#elif GTM_SDK_SUPPORTS_TLSMINIMUMSUPPORTEDPROTOCOLVERSION + if (@available(iOS 13, tvOS 13, watchOS 6, macOS 10.15, *)) { +#if TARGET_OS_IOS + // Early seeds of iOS 13 don't actually support the selector and several + // months later, those seeds are still in use, so validate if the selector + // is supported. + if ([_configuration respondsToSelector:@selector(setTLSMinimumSupportedProtocolVersion:)]) { + _configuration.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12; + } else { + _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12; + } +#else + _configuration.TLSMinimumSupportedProtocolVersion = tls_protocol_version_TLSv12; +#endif // TARGET_OS_IOS + } else { + _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12; + } +#else + _configuration.TLSMinimumSupportedProtocol = kTLSProtocol12; +#endif // GTM_SDK_REQUIRES_TLSMINIMUMSUPPORTEDPROTOCOLVERSION +#endif + } // !_configuration + _configuration.HTTPCookieStorage = self.cookieStorage; + + if (_configurationBlock) { + _configurationBlock(self, _configuration); + } + + id delegate = [_service sessionDelegate]; + if (!delegate || !self.canShareSession) { + delegate = self; + } + self.session = [NSURLSession sessionWithConfiguration:_configuration + delegate:delegate + delegateQueue:self.sessionDelegateQueue]; + GTMSESSION_ASSERT_DEBUG(self.session, @"Couldn't create session"); + + // Tell the service about the session created by this fetcher. This also signals the + // service's semaphore to allow other fetchers to request this session. + [_service fetcherDidCreateSession:self]; + + // If this assertion fires, the client probably tried to use a session identifier that was + // already used. The solution is to make the client use a unique identifier (or better yet let + // the session fetcher assign the identifier). + GTMSESSION_ASSERT_DEBUG(self.session.delegate == delegate, @"Couldn't assign delegate."); + + if (self.session) { + BOOL isUsingSharedDelegate = (delegate != self); + if (!isUsingSharedDelegate) { + _shouldInvalidateSession = YES; + } + } + } + + if (isRecreatingSession) { + _shouldInvalidateSession = YES; + + // Let's make sure there are tasks still running or if not that we get a callback from a + // completed one; otherwise, we assume the tasks failed. + // This is the observed behavior perhaps 25% of the time within the Simulator running 7.0.3 on + // exiting the app after starting an upload and relaunching the app if we manage to relaunch + // after the task has completed, but before the system relaunches us in the background. + [self.session getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, + NSArray *downloadTasks) { + if (dataTasks.count == 0 && uploadTasks.count == 0 && downloadTasks.count == 0) { + double const kDelayInSeconds = 1.0; // We should get progress indication or completion soon + dispatch_time_t checkForFeedbackDelay = + dispatch_time(DISPATCH_TIME_NOW, (int64_t)(kDelayInSeconds * NSEC_PER_SEC)); + dispatch_after(checkForFeedbackDelay, dispatch_get_main_queue(), ^{ + if (!self.sessionTask && !fetchRequest) { + // If our task and/or request haven't been restored, then we assume task feedback lost. + [self removePersistedBackgroundSessionFromDefaults]; + NSError *sessionError = + [NSError errorWithDomain:kGTMSessionFetcherErrorDomain + code:GTMSessionFetcherErrorBackgroundFetchFailed + userInfo:nil]; + [self failToBeginFetchWithError:sessionError]; + } + }); + } + }]; + return; + } + + self.downloadedData = nil; + self.downloadedLength = 0; + + if (_servicePriority == NSIntegerMin) { + mayDelay = NO; + } + if (mayDelay && _service) { + BOOL shouldFetchNow = [_service fetcherShouldBeginFetching:self]; + if (!shouldFetchNow) { + // The fetch is deferred, but will happen later. + // + // If this session is held by the fetcher service, clear the session now so that we don't + // assume it's still valid after the fetcher is restarted. + if (self.canShareSession) { + self.session = nil; + } + return; + } + } + + NSString *effectiveHTTPMethod = [fetchRequest valueForHTTPHeaderField:@"X-HTTP-Method-Override"]; + if (effectiveHTTPMethod == nil) { + effectiveHTTPMethod = fetchRequest.HTTPMethod; + } + BOOL isEffectiveHTTPGet = (effectiveHTTPMethod == nil + || [effectiveHTTPMethod isEqual:@"GET"]); + + BOOL needsUploadTask = (self.useUploadTask || self.bodyFileURL || self.bodyStreamProvider); + if (_bodyData || self.bodyStreamProvider || fetchRequest.HTTPBodyStream) { + if (isEffectiveHTTPGet) { + fetchRequest.HTTPMethod = @"POST"; + isEffectiveHTTPGet = NO; + } + + if (_bodyData) { + if (!needsUploadTask) { + fetchRequest.HTTPBody = _bodyData; + } +#if !STRIP_GTM_FETCH_LOGGING + } else if (fetchRequest.HTTPBodyStream) { + if ([self respondsToSelector:@selector(loggedInputStreamForInputStream:)]) { + fetchRequest.HTTPBodyStream = + [self performSelector:@selector(loggedInputStreamForInputStream:) + withObject:fetchRequest.HTTPBodyStream]; + } +#endif + } + } + + // We authorize after setting up the http method and body in the request + // because OAuth 1 may need to sign the request body + if (mayAuthorize && _authorizer && !isDataRequest) { + BOOL isAuthorized = [_authorizer isAuthorizedRequest:fetchRequest]; + if (!isAuthorized) { + // Authorization needed. + // + // If this session is held by the fetcher service, clear the session now so that we don't + // assume it's still valid after authorization completes. + if (self.canShareSession) { + self.session = nil; + } + + // Authorizing the request will recursively call this beginFetch:mayDelay: + // or failToBeginFetchWithError:. + [self authorizeRequest]; + return; + } + } + + // set the default upload or download retry interval, if necessary + if ([self isRetryEnabled] && self.maxRetryInterval <= 0) { + if (isEffectiveHTTPGet || [effectiveHTTPMethod isEqual:@"HEAD"]) { + [self setMaxRetryInterval:kDefaultMaxDownloadRetryInterval]; + } else { + [self setMaxRetryInterval:kDefaultMaxUploadRetryInterval]; + } + } + + // finally, start the connection + NSURLSessionTask *newSessionTask; + BOOL needsDataAccumulator = NO; + if (_downloadResumeData) { + newSessionTask = [_session downloadTaskWithResumeData:_downloadResumeData]; + GTMSESSION_ASSERT_DEBUG_OR_LOG(newSessionTask, + @"Failed downloadTaskWithResumeData for %@, resume data %lu bytes", + _session, (unsigned long)_downloadResumeData.length); + } else if (_destinationFileURL && !isDataRequest) { + newSessionTask = [_session downloadTaskWithRequest:fetchRequest]; + GTMSESSION_ASSERT_DEBUG_OR_LOG(newSessionTask, @"Failed downloadTaskWithRequest for %@, %@", + _session, fetchRequest); + } else if (needsUploadTask) { + if (bodyFileURL) { + newSessionTask = [_session uploadTaskWithRequest:fetchRequest + fromFile:bodyFileURL]; + GTMSESSION_ASSERT_DEBUG_OR_LOG(newSessionTask, + @"Failed uploadTaskWithRequest for %@, %@, file %@", + _session, fetchRequest, bodyFileURL.path); + } else if (self.bodyStreamProvider) { + newSessionTask = [_session uploadTaskWithStreamedRequest:fetchRequest]; + GTMSESSION_ASSERT_DEBUG_OR_LOG(newSessionTask, + @"Failed uploadTaskWithStreamedRequest for %@, %@", + _session, fetchRequest); + } else { + GTMSESSION_ASSERT_DEBUG_OR_LOG(_bodyData != nil, + @"Upload task needs body data, %@", fetchRequest); + newSessionTask = [_session uploadTaskWithRequest:fetchRequest + fromData:(NSData * GTM_NONNULL_TYPE)_bodyData]; + GTMSESSION_ASSERT_DEBUG_OR_LOG(newSessionTask, + @"Failed uploadTaskWithRequest for %@, %@, body data %lu bytes", + _session, fetchRequest, (unsigned long)_bodyData.length); + } + needsDataAccumulator = YES; + } else { + newSessionTask = [_session dataTaskWithRequest:fetchRequest]; + needsDataAccumulator = YES; + GTMSESSION_ASSERT_DEBUG_OR_LOG(newSessionTask, @"Failed dataTaskWithRequest for %@, %@", + _session, fetchRequest); + } + self.sessionTask = newSessionTask; + + if (!newSessionTask) { + // We shouldn't get here; if we're here, an earlier assertion should have fired to explain + // which session task creation failed. + [self failToBeginFetchWithError:beginFailureError(GTMSessionFetcherErrorTaskCreationFailed)]; + return; + } + + if (needsDataAccumulator && _accumulateDataBlock == nil) { + self.downloadedData = [NSMutableData data]; + } + if (_taskDescription) { + newSessionTask.taskDescription = _taskDescription; + } + if (_taskPriority >= 0) { + if (@available(iOS 8.0, macOS 10.10, *)) { + newSessionTask.priority = _taskPriority; + } + } + +#if GTM_DISABLE_FETCHER_TEST_BLOCK + GTMSESSION_ASSERT_DEBUG(_testBlock == nil && gGlobalTestBlock == nil, @"test blocks disabled"); + _testBlock = nil; +#else + if (!_testBlock) { + if (gGlobalTestBlock) { + // Note that the test block may pass nil for all of its response parameters, + // indicating that the fetch should actually proceed. This is useful when the + // global test block has been set, and the app is only testing a specific + // fetcher. The block simulation code will then resume the task. + _testBlock = gGlobalTestBlock; + } + } + _isUsingTestBlock = (_testBlock != nil); +#endif // GTM_DISABLE_FETCHER_TEST_BLOCK + +#if GTM_BACKGROUND_TASK_FETCHING + id app = [[self class] fetcherUIApplication]; + // Background tasks seem to interfere with out-of-process uploads and downloads. + if (app && !self.skipBackgroundTask && !self.useBackgroundSession) { + // Tell UIApplication that we want to continue even when the app is in the + // background. +#if DEBUG + NSString *bgTaskName = [NSString stringWithFormat:@"%@-%@", + [self class], fetchRequest.URL.host]; +#else + NSString *bgTaskName = @"GTMSessionFetcher"; +#endif + __block UIBackgroundTaskIdentifier bgTaskID = [app beginBackgroundTaskWithName:bgTaskName + expirationHandler:^{ + // Background task expiration callback - this block is always invoked by + // UIApplication on the main thread. + if (bgTaskID != UIBackgroundTaskInvalid) { + @synchronized(self) { + if (bgTaskID == self.backgroundTaskIdentifier) { + self.backgroundTaskIdentifier = UIBackgroundTaskInvalid; + } + } + [app endBackgroundTask:bgTaskID]; + } + }]; + @synchronized(self) { + self.backgroundTaskIdentifier = bgTaskID; + } + } +#endif + + if (!_initialRequestDate) { + _initialRequestDate = [[NSDate alloc] init]; + } + + // We don't expect to reach here even on retry or auth until a stop notification has been sent + // for the previous task, but we should ensure that we don't unbalance that. + GTMSESSION_ASSERT_DEBUG(!_isStopNotificationNeeded, @"Start notification without a prior stop"); + [self sendStopNotificationIfNeeded]; + + [self addPersistedBackgroundSessionToDefaults]; + + [self setStopNotificationNeeded:YES]; + + [self postNotificationOnMainThreadWithName:kGTMSessionFetcherStartedNotification + userInfo:nil + requireAsync:NO]; + + // The service needs to know our task if it is serving as NSURLSession delegate. + [_service fetcherDidBeginFetching:self]; + + if (_testBlock) { +#if !GTM_DISABLE_FETCHER_TEST_BLOCK + [self simulateFetchForTestBlock]; +#endif + } else { + // We resume the session task after posting the notification since the + // delegate callbacks may happen immediately if the fetch is started off + // the main thread or the session delegate queue is on a background thread, + // and we don't want to post a start notification after a premature finish + // of the session task. + [newSessionTask resume]; + } +} + +NSData * GTM_NULLABLE_TYPE GTMDataFromInputStream(NSInputStream *inputStream, NSError **outError) { + NSMutableData *data = [NSMutableData data]; + + [inputStream open]; + NSInteger numberOfBytesRead = 0; + while ([inputStream hasBytesAvailable]) { + uint8_t buffer[512]; + numberOfBytesRead = [inputStream read:buffer maxLength:sizeof(buffer)]; + if (numberOfBytesRead > 0) { + [data appendBytes:buffer length:(NSUInteger)numberOfBytesRead]; + } else { + break; + } + } + [inputStream close]; + NSError *streamError = inputStream.streamError; + + if (streamError) { + data = nil; + } + if (outError) { + *outError = streamError; + } + return data; +} + +#if !GTM_DISABLE_FETCHER_TEST_BLOCK + +- (void)simulateFetchForTestBlock { + // This is invoked on the same thread as the beginFetch method was. + // + // Callbacks will all occur on the callback queue. + _testBlock(self, ^(NSURLResponse *response, NSData *responseData, NSError *error) { + // Callback from test block. + if (response == nil && responseData == nil && error == nil) { + // Assume the fetcher should execute rather than be tested. + self->_testBlock = nil; + self->_isUsingTestBlock = NO; + [self->_sessionTask resume]; + return; + } + + GTMSessionFetcherBodyStreamProvider bodyStreamProvider = self.bodyStreamProvider; + if (bodyStreamProvider) { + bodyStreamProvider(^(NSInputStream *bodyStream){ + // Read from the input stream into an NSData buffer. We'll drain the stream + // explicitly on a background queue. + [self invokeOnCallbackQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0) + afterUserStopped:NO + block:^{ + NSError *streamError; + NSData *streamedData = GTMDataFromInputStream(bodyStream, &streamError); + + dispatch_async(dispatch_get_main_queue(), ^{ + // Continue callbacks on the main thread, since serial behavior + // is more reliable for tests. + [self simulateDataCallbacksForTestBlockWithBodyData:streamedData + response:response + responseData:responseData + error:(error ?: streamError)]; + }); + }]; + }); + } else { + // No input stream; use the supplied data or file URL. + NSURL *bodyFileURL = self.bodyFileURL; + if (bodyFileURL) { + NSError *readError; + self->_bodyData = [NSData dataWithContentsOfURL:bodyFileURL + options:NSDataReadingMappedIfSafe + error:&readError]; + error = readError; + } + + // No stream provider. + + // In real fetches, nothing happens until the run loop spins, so apps have leeway to + // set callbacks after they call beginFetch. We'll mirror that fetcher behavior by + // delaying callbacks here at least to the next spin of the run loop. That keeps + // immediate, synchronous setting of callback blocks after beginFetch working in tests. + dispatch_async(dispatch_get_main_queue(), ^{ + [self simulateDataCallbacksForTestBlockWithBodyData:self->_bodyData + response:response + responseData:responseData + error:error]; + }); + } + }); +} + +- (void)simulateByteTransferReportWithDataLength:(int64_t)totalDataLength + block:(GTMSessionFetcherSendProgressBlock)block { + // This utility method simulates transfer progress with up to three callbacks. + // It is used to call back to any of the progress blocks. + int64_t sendReportSize = totalDataLength / 3 + 1; + int64_t totalSent = 0; + while (totalSent < totalDataLength) { + int64_t bytesRemaining = totalDataLength - totalSent; + sendReportSize = MIN(sendReportSize, bytesRemaining); + totalSent += sendReportSize; + [self invokeOnCallbackQueueUnlessStopped:^{ + block(sendReportSize, totalSent, totalDataLength); + }]; + } +} + +- (void)simulateDataCallbacksForTestBlockWithBodyData:(NSData * GTM_NULLABLE_TYPE)bodyData + response:(NSURLResponse *)response + responseData:(NSData *)suppliedData + error:(NSError *)suppliedError { + __block NSData *responseData = suppliedData; + __block NSError *responseError = suppliedError; + + // This method does the test simulation of callbacks once the upload + // and download data are known. + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + // Get copies of ivars we'll access in async invocations. This simulation assumes + // they won't change during fetcher execution. + NSURL *destinationFileURL = _destinationFileURL; + GTMSessionFetcherWillRedirectBlock willRedirectBlock = _willRedirectBlock; + GTMSessionFetcherDidReceiveResponseBlock didReceiveResponseBlock = _didReceiveResponseBlock; + GTMSessionFetcherSendProgressBlock sendProgressBlock = _sendProgressBlock; + GTMSessionFetcherDownloadProgressBlock downloadProgressBlock = _downloadProgressBlock; + GTMSessionFetcherAccumulateDataBlock accumulateDataBlock = _accumulateDataBlock; + GTMSessionFetcherReceivedProgressBlock receivedProgressBlock = _receivedProgressBlock; + GTMSessionFetcherWillCacheURLResponseBlock willCacheURLResponseBlock = + _willCacheURLResponseBlock; + GTMSessionFetcherChallengeBlock challengeBlock = _challengeBlock; + + // Simulate receipt of redirection. + if (willRedirectBlock) { + [self invokeOnCallbackUnsynchronizedQueueAfterUserStopped:YES + block:^{ + willRedirectBlock((NSHTTPURLResponse *)response, self->_request, + ^(NSURLRequest *redirectRequest) { + // For simulation, we'll assume the app will just continue. + }); + }]; + } + + // If the fetcher has a challenge block, simulate a challenge. + // + // It might be nice to eventually let the user determine which testBlock + // fetches get challenged rather than always executing the supplied + // challenge block. + if (challengeBlock) { + [self invokeOnCallbackUnsynchronizedQueueAfterUserStopped:YES + block:^{ + NSURL *requestURL = self->_request.URL; + NSString *host = requestURL.host; + NSURLProtectionSpace *pspace = + [[NSURLProtectionSpace alloc] initWithHost:host + port:requestURL.port.integerValue + protocol:requestURL.scheme + realm:nil + authenticationMethod:NSURLAuthenticationMethodHTTPBasic]; + id unusedSender = + (id)[NSNull null]; + NSURLAuthenticationChallenge *challenge = + [[NSURLAuthenticationChallenge alloc] initWithProtectionSpace:pspace + proposedCredential:nil + previousFailureCount:0 + failureResponse:nil + error:nil + sender:unusedSender]; + challengeBlock(self, challenge, ^(NSURLSessionAuthChallengeDisposition disposition, + NSURLCredential * GTM_NULLABLE_TYPE credential){ + // We could change the responseData and responseError based on the disposition, + // but it's easier for apps to just supply the expected data and error + // directly to the test block. So this simulation ignores the disposition. + }); + }]; + } + + // Simulate receipt of an initial response. + if (response && didReceiveResponseBlock) { + [self invokeOnCallbackUnsynchronizedQueueAfterUserStopped:YES + block:^{ + didReceiveResponseBlock(response, ^(NSURLSessionResponseDisposition desiredDisposition) { + // For simulation, we'll assume the disposition is to continue. + }); + }]; + } + + // Simulate reporting send progress. + if (sendProgressBlock) { + [self simulateByteTransferReportWithDataLength:(int64_t)bodyData.length + block:^(int64_t bytesSent, + int64_t totalBytesSent, + int64_t totalBytesExpectedToSend) { + // This is invoked on the callback queue unless stopped. + sendProgressBlock(bytesSent, totalBytesSent, totalBytesExpectedToSend); + }]; + } + + if (destinationFileURL) { + // Simulate download to file progress. + if (downloadProgressBlock) { + [self simulateByteTransferReportWithDataLength:(int64_t)responseData.length + block:^(int64_t bytesDownloaded, + int64_t totalBytesDownloaded, + int64_t totalBytesExpectedToDownload) { + // This is invoked on the callback queue unless stopped. + downloadProgressBlock(bytesDownloaded, totalBytesDownloaded, + totalBytesExpectedToDownload); + }]; + } + + NSError *writeError; + [responseData writeToURL:destinationFileURL + options:NSDataWritingAtomic + error:&writeError]; + if (writeError) { + // Tell the test code that writing failed. + responseError = writeError; + } + } else { + // Simulate download to NSData progress. + if ((accumulateDataBlock || receivedProgressBlock) && responseData) { + [self simulateByteTransferWithData:responseData + block:^(NSData *data, + int64_t bytesReceived, + int64_t totalBytesReceived, + int64_t totalBytesExpectedToReceive) { + // This is invoked on the callback queue unless stopped. + if (accumulateDataBlock) { + accumulateDataBlock(data); + } + + if (receivedProgressBlock) { + receivedProgressBlock(bytesReceived, totalBytesReceived); + } + }]; + } + + if (!accumulateDataBlock) { + _downloadedData = [responseData mutableCopy]; + } + + if (willCacheURLResponseBlock) { + // Simulate letting the client inspect and alter the cached response. + NSData *cachedData = responseData ?: [[NSData alloc] init]; // Always have non-nil data. + NSCachedURLResponse *cachedResponse = + [[NSCachedURLResponse alloc] initWithResponse:response + data:cachedData]; + [self invokeOnCallbackUnsynchronizedQueueAfterUserStopped:YES + block:^{ + willCacheURLResponseBlock(cachedResponse, ^(NSCachedURLResponse *responseToCache){ + // The app may provide an alternative response, or nil to defeat caching. + }); + }]; + } + } + _response = response; + } // @synchronized(self) + + NSOperationQueue *queue = self.sessionDelegateQueue; + [queue addOperationWithBlock:^{ + // Rather than invoke failToBeginFetchWithError: we want to simulate completion of + // a connection that started and ended, so we'll call down to finishWithError: + NSInteger status = responseError ? responseError.code : 200; + if (status >= 200 && status <= 399) { + [self finishWithError:nil shouldRetry:NO]; + } else { + [self shouldRetryNowForStatus:status + error:responseError + forceAssumeRetry:NO + response:^(BOOL shouldRetry) { + [self finishWithError:responseError shouldRetry:shouldRetry]; + }]; + } + }]; +} + +- (void)simulateByteTransferWithData:(NSData *)responseData + block:(GTMSessionFetcherSimulateByteTransferBlock)transferBlock { + // This utility method simulates transfering data to the client. It divides the data into at most + // "chunkCount" chunks and then passes each chunk along with a progress update to transferBlock. + // This function can be used with accumulateDataBlock or receivedProgressBlock. + + NSUInteger chunkCount = MAX(self.testBlockAccumulateDataChunkCount, (NSUInteger) 1); + NSUInteger totalDataLength = responseData.length; + NSUInteger sendDataSize = totalDataLength / chunkCount + 1; + NSUInteger totalSent = 0; + while (totalSent < totalDataLength) { + NSUInteger bytesRemaining = totalDataLength - totalSent; + sendDataSize = MIN(sendDataSize, bytesRemaining); + NSData *chunkData = [responseData subdataWithRange:NSMakeRange(totalSent, sendDataSize)]; + totalSent += sendDataSize; + [self invokeOnCallbackQueueUnlessStopped:^{ + transferBlock(chunkData, + (int64_t)sendDataSize, + (int64_t)totalSent, + (int64_t)totalDataLength); + }]; + } +} + +#endif // !GTM_DISABLE_FETCHER_TEST_BLOCK + +- (void)setSessionTask:(NSURLSessionTask *)sessionTask { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_sessionTask != sessionTask) { + _sessionTask = sessionTask; + if (_sessionTask) { + // Request could be nil on restoring this fetcher from a background session. + if (!_request) { + _request = [_sessionTask.originalRequest mutableCopy]; + } + } + } + } // @synchronized(self) +} + +- (NSURLSessionTask * GTM_NULLABLE_TYPE)sessionTask { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _sessionTask; + } // @synchronized(self) +} + ++ (NSUserDefaults *)fetcherUserDefaults { + static NSUserDefaults *gFetcherUserDefaults = nil; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + Class fetcherUserDefaultsClass = NSClassFromString(@"GTMSessionFetcherUserDefaultsFactory"); + if (fetcherUserDefaultsClass) { + gFetcherUserDefaults = [fetcherUserDefaultsClass fetcherUserDefaults]; + } else { + gFetcherUserDefaults = [NSUserDefaults standardUserDefaults]; + } + }); + return gFetcherUserDefaults; +} + +- (void)addPersistedBackgroundSessionToDefaults { + NSString *sessionIdentifier = self.sessionIdentifier; + if (!sessionIdentifier) { + return; + } + NSArray *oldBackgroundSessions = [[self class] activePersistedBackgroundSessions]; + if ([oldBackgroundSessions containsObject:_sessionIdentifier]) { + return; + } + NSMutableArray *newBackgroundSessions = + [NSMutableArray arrayWithArray:oldBackgroundSessions]; + [newBackgroundSessions addObject:sessionIdentifier]; + GTM_LOG_BACKGROUND_SESSION(@"Add to background sessions: %@", newBackgroundSessions); + + NSUserDefaults *userDefaults = [[self class] fetcherUserDefaults]; + [userDefaults setObject:newBackgroundSessions + forKey:kGTMSessionFetcherPersistedDestinationKey]; + [userDefaults synchronize]; +} + +- (void)removePersistedBackgroundSessionFromDefaults { + NSString *sessionIdentifier = self.sessionIdentifier; + if (!sessionIdentifier) return; + + NSArray *oldBackgroundSessions = [[self class] activePersistedBackgroundSessions]; + if (!oldBackgroundSessions) { + return; + } + NSMutableArray *newBackgroundSessions = + [NSMutableArray arrayWithArray:oldBackgroundSessions]; + NSUInteger sessionIndex = [newBackgroundSessions indexOfObject:sessionIdentifier]; + if (sessionIndex == NSNotFound) { + return; + } + [newBackgroundSessions removeObjectAtIndex:sessionIndex]; + GTM_LOG_BACKGROUND_SESSION(@"Remove from background sessions: %@", newBackgroundSessions); + + NSUserDefaults *userDefaults = [[self class] fetcherUserDefaults]; + if (newBackgroundSessions.count == 0) { + [userDefaults removeObjectForKey:kGTMSessionFetcherPersistedDestinationKey]; + } else { + [userDefaults setObject:newBackgroundSessions + forKey:kGTMSessionFetcherPersistedDestinationKey]; + } + [userDefaults synchronize]; +} + ++ (GTM_NULLABLE NSArray *)activePersistedBackgroundSessions { + NSUserDefaults *userDefaults = [[self class] fetcherUserDefaults]; + NSArray *oldBackgroundSessions = + [userDefaults arrayForKey:kGTMSessionFetcherPersistedDestinationKey]; + if (oldBackgroundSessions.count == 0) { + return nil; + } + NSMutableArray *activeBackgroundSessions = nil; + NSMapTable *sessionIdentifierToFetcherMap = [self sessionIdentifierToFetcherMap]; + for (NSString *sessionIdentifier in oldBackgroundSessions) { + GTMSessionFetcher *fetcher = [sessionIdentifierToFetcherMap objectForKey:sessionIdentifier]; + if (fetcher) { + if (!activeBackgroundSessions) { + activeBackgroundSessions = [[NSMutableArray alloc] init]; + } + [activeBackgroundSessions addObject:sessionIdentifier]; + } + } + return activeBackgroundSessions; +} + ++ (NSArray *)fetchersForBackgroundSessions { + NSUserDefaults *userDefaults = [[self class] fetcherUserDefaults]; + NSArray *backgroundSessions = + [userDefaults arrayForKey:kGTMSessionFetcherPersistedDestinationKey]; + NSMapTable *sessionIdentifierToFetcherMap = [self sessionIdentifierToFetcherMap]; + NSMutableArray *fetchers = [NSMutableArray array]; + for (NSString *sessionIdentifier in backgroundSessions) { + GTMSessionFetcher *fetcher = [sessionIdentifierToFetcherMap objectForKey:sessionIdentifier]; + if (!fetcher) { + fetcher = [self fetcherWithSessionIdentifier:sessionIdentifier]; + GTMSESSION_ASSERT_DEBUG(fetcher != nil, + @"Unexpected invalid session identifier: %@", sessionIdentifier); + [fetcher beginFetchWithCompletionHandler:nil]; + } + GTM_LOG_BACKGROUND_SESSION(@"%@ restoring session %@ by creating fetcher %@ %p", + [self class], sessionIdentifier, fetcher, fetcher); + if (fetcher != nil) { + [fetchers addObject:fetcher]; + } + } + return fetchers; +} + +#if TARGET_OS_IPHONE && !TARGET_OS_WATCH ++ (void)application:(UIApplication *)application + handleEventsForBackgroundURLSession:(NSString *)identifier + completionHandler:(GTMSessionFetcherSystemCompletionHandler)completionHandler { + GTMSessionFetcher *fetcher = [self fetcherWithSessionIdentifier:identifier]; + if (fetcher != nil) { + fetcher.systemCompletionHandler = completionHandler; + } else { + GTM_LOG_BACKGROUND_SESSION(@"%@ did not create background session identifier: %@", + [self class], identifier); + } +} +#endif + +- (NSString * GTM_NULLABLE_TYPE)sessionIdentifier { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _sessionIdentifier; + } // @synchronized(self) +} + +- (void)setSessionIdentifier:(NSString *)sessionIdentifier { + GTMSESSION_ASSERT_DEBUG(sessionIdentifier != nil, @"Invalid session identifier"); + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + GTMSESSION_ASSERT_DEBUG(!_session, @"Unable to set session identifier after session created"); + _sessionIdentifier = [sessionIdentifier copy]; + _usingBackgroundSession = YES; + _canShareSession = NO; + [self restoreDefaultStateForSessionIdentifierMetadata]; + } // @synchronized(self) +} + +- (void)setSessionIdentifierInternal:(GTM_NULLABLE NSString *)sessionIdentifier { + // This internal method only does a synchronized set of the session identifier. + // It does not have side effects on the background session, shared session, or + // session identifier metadata. + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _sessionIdentifier = [sessionIdentifier copy]; + } // @synchronized(self) +} + +- (NSDictionary * GTM_NULLABLE_TYPE)sessionUserInfo { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_sessionUserInfo == nil) { + // We'll return the metadata dictionary with internal keys removed. This avoids the user + // re-using the userInfo dictionary later and accidentally including the internal keys. + NSMutableDictionary *metadata = [[self sessionIdentifierMetadataUnsynchronized] mutableCopy]; + NSSet *keysToRemove = [metadata keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) { + return [key hasPrefix:@"_"]; + }]; + [metadata removeObjectsForKeys:[keysToRemove allObjects]]; + if (metadata.count > 0) { + _sessionUserInfo = metadata; + } + } + return _sessionUserInfo; + } // @synchronized(self) +} + +- (void)setSessionUserInfo:(NSDictionary * GTM_NULLABLE_TYPE)dictionary { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + GTMSESSION_ASSERT_DEBUG(_sessionIdentifier == nil, @"Too late to assign userInfo"); + _sessionUserInfo = dictionary; + } // @synchronized(self) +} + +- (GTM_NULLABLE NSDictionary *)sessionIdentifierDefaultMetadata { + GTMSessionCheckSynchronized(self); + + NSMutableDictionary *defaultUserInfo = [[NSMutableDictionary alloc] init]; + if (_destinationFileURL) { + defaultUserInfo[kGTMSessionIdentifierDestinationFileURLMetadataKey] = + [_destinationFileURL absoluteString]; + } + if (_bodyFileURL) { + defaultUserInfo[kGTMSessionIdentifierBodyFileURLMetadataKey] = [_bodyFileURL absoluteString]; + } + return (defaultUserInfo.count > 0) ? defaultUserInfo : nil; +} + +- (void)restoreDefaultStateForSessionIdentifierMetadata { + GTMSessionCheckSynchronized(self); + + NSDictionary *metadata = [self sessionIdentifierMetadataUnsynchronized]; + NSString *destinationFileURLString = metadata[kGTMSessionIdentifierDestinationFileURLMetadataKey]; + if (destinationFileURLString) { + _destinationFileURL = [NSURL URLWithString:destinationFileURLString]; + GTM_LOG_BACKGROUND_SESSION(@"Restoring destination file URL: %@", _destinationFileURL); + } + NSString *bodyFileURLString = metadata[kGTMSessionIdentifierBodyFileURLMetadataKey]; + if (bodyFileURLString) { + _bodyFileURL = [NSURL URLWithString:bodyFileURLString]; + GTM_LOG_BACKGROUND_SESSION(@"Restoring body file URL: %@", _bodyFileURL); + } +} + +- (NSDictionary * GTM_NULLABLE_TYPE)sessionIdentifierMetadata { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return [self sessionIdentifierMetadataUnsynchronized]; + } +} + +- (NSDictionary * GTM_NULLABLE_TYPE)sessionIdentifierMetadataUnsynchronized { + GTMSessionCheckSynchronized(self); + + // Session Identifier format: "com.google.__ + if (!_sessionIdentifier) { + return nil; + } + NSScanner *metadataScanner = [NSScanner scannerWithString:_sessionIdentifier]; + [metadataScanner setCharactersToBeSkipped:nil]; + NSString *metadataString; + NSString *uuid; + if ([metadataScanner scanUpToString:@"_" intoString:NULL] && + [metadataScanner scanString:@"_" intoString:NULL] && + [metadataScanner scanUpToString:@"_" intoString:&uuid] && + [metadataScanner scanString:@"_" intoString:NULL] && + [metadataScanner scanUpToString:@"\n" intoString:&metadataString]) { + _sessionIdentifierUUID = uuid; + NSData *metadataData = [metadataString dataUsingEncoding:NSUTF8StringEncoding]; + NSError *error; + NSDictionary *metadataDict = + [NSJSONSerialization JSONObjectWithData:metadataData + options:0 + error:&error]; + GTM_LOG_BACKGROUND_SESSION(@"User Info from session identifier: %@ %@", + metadataDict, error ? error : @""); + return metadataDict; + } + return nil; +} + +- (NSString *)createSessionIdentifierWithMetadata:(NSDictionary * GTM_NULLABLE_TYPE)metadataToInclude { + NSString *result; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + // Session Identifier format: "com.google.__ + GTMSESSION_ASSERT_DEBUG(!_sessionIdentifier, @"Session identifier already created"); + _sessionIdentifierUUID = [[NSUUID UUID] UUIDString]; + _sessionIdentifier = + [NSString stringWithFormat:@"%@_%@", kGTMSessionIdentifierPrefix, _sessionIdentifierUUID]; + // Start with user-supplied keys so they cannot accidentally override the fetcher's keys. + NSMutableDictionary *metadataDict = + [NSMutableDictionary dictionaryWithDictionary:(NSDictionary * GTM_NONNULL_TYPE)_sessionUserInfo]; + + if (metadataToInclude) { + [metadataDict addEntriesFromDictionary:(NSDictionary *)metadataToInclude]; + } + NSDictionary *defaultMetadataDict = [self sessionIdentifierDefaultMetadata]; + if (defaultMetadataDict) { + [metadataDict addEntriesFromDictionary:defaultMetadataDict]; + } + if (metadataDict.count > 0) { + NSData *metadataData = [NSJSONSerialization dataWithJSONObject:metadataDict + options:0 + error:NULL]; + GTMSESSION_ASSERT_DEBUG(metadataData != nil, + @"Session identifier user info failed to convert to JSON"); + if (metadataData.length > 0) { + NSString *metadataString = [[NSString alloc] initWithData:metadataData + encoding:NSUTF8StringEncoding]; + _sessionIdentifier = + [_sessionIdentifier stringByAppendingFormat:@"_%@", metadataString]; + } + } + _didCreateSessionIdentifier = YES; + result = _sessionIdentifier; + } // @synchronized(self) + return result; +} + +- (void)failToBeginFetchWithError:(NSError *)error { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _hasStoppedFetching = YES; + } + + if (error == nil) { + error = [NSError errorWithDomain:kGTMSessionFetcherErrorDomain + code:GTMSessionFetcherErrorDownloadFailed + userInfo:nil]; + } + + [self invokeFetchCallbacksOnCallbackQueueWithData:nil + error:error]; + [self releaseCallbacks]; + + [_service fetcherDidStop:self]; + + self.authorizer = nil; +} + ++ (GTMSessionCookieStorage *)staticCookieStorage { + static GTMSessionCookieStorage *gCookieStorage = nil; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + gCookieStorage = [[GTMSessionCookieStorage alloc] init]; + }); + return gCookieStorage; +} + +#if GTM_BACKGROUND_TASK_FETCHING + +- (void)endBackgroundTask { + // Whenever the connection stops or background execution expires, + // we need to tell UIApplication we're done. + UIBackgroundTaskIdentifier bgTaskID; + @synchronized(self) { + bgTaskID = self.backgroundTaskIdentifier; + if (bgTaskID != UIBackgroundTaskInvalid) { + self.backgroundTaskIdentifier = UIBackgroundTaskInvalid; + } + } + + if (bgTaskID != UIBackgroundTaskInvalid) { + id app = [[self class] fetcherUIApplication]; + [app endBackgroundTask:bgTaskID]; + } +} + +#endif // GTM_BACKGROUND_TASK_FETCHING + +- (void)authorizeRequest { + GTMSessionCheckNotSynchronized(self); + + id authorizer = self.authorizer; + SEL asyncAuthSel = @selector(authorizeRequest:delegate:didFinishSelector:); + if ([authorizer respondsToSelector:asyncAuthSel]) { + SEL callbackSel = @selector(authorizer:request:finishedWithError:); + NSMutableURLRequest *mutableRequest = [self.request mutableCopy]; + [authorizer authorizeRequest:mutableRequest + delegate:self + didFinishSelector:callbackSel]; + } else { + GTMSESSION_ASSERT_DEBUG(authorizer == nil, @"invalid authorizer for fetch"); + + // No authorizing possible, and authorizing happens only after any delay; + // just begin fetching + [self beginFetchMayDelay:NO + mayAuthorize:NO]; + } +} + +- (void)authorizer:(id)auth + request:(NSMutableURLRequest *)authorizedRequest + finishedWithError:(NSError *)error { + GTMSessionCheckNotSynchronized(self); + + if (error != nil) { + // We can't fetch without authorization + [self failToBeginFetchWithError:error]; + } else { + @synchronized(self) { + _request = authorizedRequest; + } + [self beginFetchMayDelay:NO + mayAuthorize:NO]; + } +} + + +- (BOOL)canFetchWithBackgroundSession { + // Subclasses may override. + return YES; +} + +// Returns YES if the fetcher has been started and has not yet stopped. +// +// Fetching includes waiting for authorization or for retry, waiting to be allowed by the +// service object to start the request, and actually fetching the request. +- (BOOL)isFetching { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return [self isFetchingUnsynchronized]; + } +} + +- (BOOL)isFetchingUnsynchronized { + GTMSessionCheckSynchronized(self); + + BOOL hasBegun = (_initialBeginFetchDate != nil); + return hasBegun && !_hasStoppedFetching; +} + +- (NSURLResponse * GTM_NULLABLE_TYPE)response { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSURLResponse *response = [self responseUnsynchronized]; + return response; + } // @synchronized(self) +} + +- (NSURLResponse * GTM_NULLABLE_TYPE)responseUnsynchronized { + GTMSessionCheckSynchronized(self); + + NSURLResponse *response = _sessionTask.response; + if (!response) response = _response; + return response; +} + +- (NSInteger)statusCode { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSInteger statusCode = [self statusCodeUnsynchronized]; + return statusCode; + } // @synchronized(self) +} + +- (NSInteger)statusCodeUnsynchronized { + GTMSessionCheckSynchronized(self); + + NSURLResponse *response = [self responseUnsynchronized]; + NSInteger statusCode; + + if ([response respondsToSelector:@selector(statusCode)]) { + statusCode = [(NSHTTPURLResponse *)response statusCode]; + } else { + // Default to zero, in hopes of hinting "Unknown" (we can't be + // sure that things are OK enough to use 200). + statusCode = 0; + } + return statusCode; +} + +- (NSDictionary * GTM_NULLABLE_TYPE)responseHeaders { + GTMSessionCheckNotSynchronized(self); + + NSURLResponse *response = self.response; + if ([response respondsToSelector:@selector(allHeaderFields)]) { + NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields]; + return headers; + } + return nil; +} + +- (NSDictionary * GTM_NULLABLE_TYPE)responseHeadersUnsynchronized { + GTMSessionCheckSynchronized(self); + + NSURLResponse *response = [self responseUnsynchronized]; + if ([response respondsToSelector:@selector(allHeaderFields)]) { + NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields]; + return headers; + } + return nil; +} + +- (void)releaseCallbacks { + // Avoid releasing blocks in the sync section since objects dealloc'd by + // the blocks being released may call back into the fetcher or fetcher + // service. + dispatch_queue_t NS_VALID_UNTIL_END_OF_SCOPE holdCallbackQueue; + GTMSessionFetcherCompletionHandler NS_VALID_UNTIL_END_OF_SCOPE holdCompletionHandler; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + holdCallbackQueue = _callbackQueue; + holdCompletionHandler = _completionHandler; + + _callbackQueue = nil; + _completionHandler = nil; // Setter overridden in upload. Setter assumed to be used externally. + } + + // Set local callback pointers to nil here rather than let them release at the end of the scope + // to make any problems due to the blocks being released be a bit more obvious in a stack trace. + holdCallbackQueue = nil; + holdCompletionHandler = nil; + + self.configurationBlock = nil; + self.didReceiveResponseBlock = nil; + self.challengeBlock = nil; + self.willRedirectBlock = nil; + self.sendProgressBlock = nil; + self.receivedProgressBlock = nil; + self.downloadProgressBlock = nil; + self.accumulateDataBlock = nil; + self.willCacheURLResponseBlock = nil; + self.retryBlock = nil; + self.testBlock = nil; + self.resumeDataBlock = nil; +} + +- (void)forgetSessionIdentifierForFetcher { + GTMSessionCheckSynchronized(self); + [self forgetSessionIdentifierForFetcherWithoutSyncCheck]; +} + +- (void)forgetSessionIdentifierForFetcherWithoutSyncCheck { + // This should be called inside a @synchronized block (except during dealloc.) + if (_sessionIdentifier) { + NSMapTable *sessionIdentifierToFetcherMap = [[self class] sessionIdentifierToFetcherMap]; + [sessionIdentifierToFetcherMap removeObjectForKey:_sessionIdentifier]; + _sessionIdentifier = nil; + _didCreateSessionIdentifier = NO; + } +} + +// External stop method +- (void)stopFetching { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + // Prevent enqueued callbacks from executing. + _userStoppedFetching = YES; + } // @synchronized(self) + [self stopFetchReleasingCallbacks:YES]; +} + +// Cancel the fetch of the URL that's currently in progress. +// +// If shouldReleaseCallbacks is NO then the fetch will be retried so the callbacks +// need to still be retained. +- (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks { + [self removePersistedBackgroundSessionFromDefaults]; + + id service; + NSMutableURLRequest *request; + + // If the task or the retry timer is all that's retaining the fetcher, + // we want to be sure this instance survives stopping at least long enough for + // the stack to unwind. + __autoreleasing GTMSessionFetcher *holdSelf = self; + + BOOL hasCanceledTask = NO; + + [holdSelf destroyRetryTimer]; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _hasStoppedFetching = YES; + + service = _service; + request = _request; + + if (_sessionTask) { + // In case cancelling the task or session calls this recursively, we want + // to ensure that we'll only release the task and delegate once, + // so first set _sessionTask to nil + // + // This may be called in a callback from the task, so use autorelease to avoid + // releasing the task in its own callback. + __autoreleasing NSURLSessionTask *oldTask = _sessionTask; + if (!_isUsingTestBlock) { + _response = _sessionTask.response; + } + _sessionTask = nil; + + if ([oldTask state] != NSURLSessionTaskStateCompleted) { + // For download tasks, when the fetch is stopped, we may provide resume data that can + // be used to create a new session. + BOOL mayResume = (_resumeDataBlock + && [oldTask respondsToSelector:@selector(cancelByProducingResumeData:)]); + if (!mayResume) { + [oldTask cancel]; + // A side effect of stopping the task is that URLSession:task:didCompleteWithError: + // will be invoked asynchronously on the delegate queue. + } else { + void (^resumeBlock)(NSData *) = _resumeDataBlock; + _resumeDataBlock = nil; + + // Save callbackQueue since releaseCallbacks clears it. + dispatch_queue_t callbackQueue = _callbackQueue; + dispatch_group_enter(_callbackGroup); + [(NSURLSessionDownloadTask *)oldTask cancelByProducingResumeData:^(NSData *resumeData) { + [self invokeOnCallbackQueue:callbackQueue + afterUserStopped:YES + block:^{ + resumeBlock(resumeData); + dispatch_group_leave(self->_callbackGroup); + }]; + }]; + } + hasCanceledTask = YES; + } + } + + // If the task was canceled, wait until the URLSession:task:didCompleteWithError: to call + // finishTasksAndInvalidate, since calling it immediately tends to crash, see radar 18471901. + if (_session) { + BOOL shouldInvalidate = _shouldInvalidateSession; +#if TARGET_OS_IPHONE + // Don't invalidate if we've got a systemCompletionHandler, since + // URLSessionDidFinishEventsForBackgroundURLSession: won't be called if invalidated. + shouldInvalidate = shouldInvalidate && !self.systemCompletionHandler; +#endif + if (shouldInvalidate) { + __autoreleasing NSURLSession *oldSession = _session; + _session = nil; + + if (!hasCanceledTask) { + [oldSession finishTasksAndInvalidate]; + } else { + _sessionNeedingInvalidation = oldSession; + } + } + } + } // @synchronized(self) + + // send the stopped notification + [self sendStopNotificationIfNeeded]; + + [_authorizer stopAuthorizationForRequest:request]; + + if (shouldReleaseCallbacks) { + [self releaseCallbacks]; + + self.authorizer = nil; + } + + [service fetcherDidStop:self]; + +#if GTM_BACKGROUND_TASK_FETCHING + [self endBackgroundTask]; +#endif +} + +- (void)setStopNotificationNeeded:(BOOL)flag { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _isStopNotificationNeeded = flag; + } // @synchronized(self) +} + +- (void)sendStopNotificationIfNeeded { + BOOL sendNow = NO; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_isStopNotificationNeeded) { + _isStopNotificationNeeded = NO; + sendNow = YES; + } + } // @synchronized(self) + + if (sendNow) { + [self postNotificationOnMainThreadWithName:kGTMSessionFetcherStoppedNotification + userInfo:nil + requireAsync:NO]; + } +} + +- (void)retryFetch { + [self stopFetchReleasingCallbacks:NO]; + + // A retry will need a configuration with a fresh session identifier. + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_sessionIdentifier && _didCreateSessionIdentifier) { + [self forgetSessionIdentifierForFetcher]; + _configuration = nil; + } + + if (_canShareSession) { + // Force a grab of the current session from the fetcher service in case + // the service's old one has become invalid. + _session = nil; + } + } // @synchronized(self) + + [self beginFetchForRetry]; +} + +- (BOOL)waitForCompletionWithTimeout:(NSTimeInterval)timeoutInSeconds { + // Uncovered in upload fetcher testing, because the chunk fetcher is being waited on, and gets + // released by the upload code. The uploader just holds onto it with an ivar, and that gets + // nilled in the chunk fetcher callback. + // Used once in while loop just to avoid unused variable compiler warning. + __autoreleasing GTMSessionFetcher *holdSelf = self; + + NSDate *giveUpDate = [NSDate dateWithTimeIntervalSinceNow:timeoutInSeconds]; + + BOOL shouldSpinRunLoop = ([NSThread isMainThread] && + (!self.callbackQueue + || self.callbackQueue == dispatch_get_main_queue())); + BOOL expired = NO; + + // Loop until the callbacks have been called and released, and until + // the connection is no longer pending, until there are no callback dispatches + // in flight, or until the timeout has expired. + int64_t delta = (int64_t)(100 * NSEC_PER_MSEC); // 100 ms + while (1) { + BOOL isTaskInProgress = (holdSelf->_sessionTask + && [_sessionTask state] != NSURLSessionTaskStateCompleted); + BOOL needsToCallCompletion = (_completionHandler != nil); + BOOL isCallbackInProgress = (_callbackGroup + && dispatch_group_wait(_callbackGroup, dispatch_time(DISPATCH_TIME_NOW, delta))); + + if (!isTaskInProgress && !needsToCallCompletion && !isCallbackInProgress) break; + + expired = ([giveUpDate timeIntervalSinceNow] < 0); + if (expired) { + GTMSESSION_LOG_DEBUG(@"GTMSessionFetcher waitForCompletionWithTimeout:%0.1f expired -- " + @"%@%@%@", timeoutInSeconds, + isTaskInProgress ? @"taskInProgress " : @"", + needsToCallCompletion ? @"needsToCallCompletion " : @"", + isCallbackInProgress ? @"isCallbackInProgress" : @""); + break; + } + + // Run the current run loop 1/1000 of a second to give the networking + // code a chance to work + const NSTimeInterval kSpinInterval = 0.001; + if (shouldSpinRunLoop) { + NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:kSpinInterval]; + [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; + } else { + [NSThread sleepForTimeInterval:kSpinInterval]; + } + } + return !expired; +} + ++ (void)setGlobalTestBlock:(GTMSessionFetcherTestBlock GTM_NULLABLE_TYPE)block { +#if GTM_DISABLE_FETCHER_TEST_BLOCK + GTMSESSION_ASSERT_DEBUG(block == nil, @"test blocks disabled"); +#endif + gGlobalTestBlock = [block copy]; +} + +#if GTM_BACKGROUND_TASK_FETCHING + +static GTM_NULLABLE_TYPE id gSubstituteUIApp; + ++ (void)setSubstituteUIApplication:(nullable id)app { + gSubstituteUIApp = app; +} + ++ (nullable id)substituteUIApplication { + return gSubstituteUIApp; +} + ++ (nullable id)fetcherUIApplication { + id app = gSubstituteUIApp; + if (app) return app; + + // iOS App extensions should not call [UIApplication sharedApplication], even + // if UIApplication responds to it. + + static Class applicationClass = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + BOOL isAppExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; + if (!isAppExtension) { + Class cls = NSClassFromString(@"UIApplication"); + if (cls && [cls respondsToSelector:NSSelectorFromString(@"sharedApplication")]) { + applicationClass = cls; + } + } + }); + + if (applicationClass) { + app = (id)[applicationClass sharedApplication]; + } + return app; +} +#endif // GTM_BACKGROUND_TASK_FETCHING + +#pragma mark NSURLSession Delegate Methods + +// NSURLSession documentation indicates that redirectRequest can be passed to the handler +// but empirically redirectRequest lacks the HTTP body, so passing it will break POSTs. +// Instead, we construct a new request, a copy of the original, with overrides from the +// redirect. + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +willPerformHTTPRedirection:(NSHTTPURLResponse *)redirectResponse + newRequest:(NSURLRequest *)redirectRequest + completionHandler:(void (^)(NSURLRequest * GTM_NULLABLE_TYPE))handler { + [self setSessionTask:task]; + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ task:%@ willPerformHTTPRedirection:%@ newRequest:%@", + [self class], self, session, task, redirectResponse, redirectRequest); + + if ([self userStoppedFetching]) { + handler(nil); + return; + } + if (redirectRequest && redirectResponse) { + // Copy the original request, including the body. + NSURLRequest *originalRequest = self.request; + NSMutableURLRequest *newRequest = [originalRequest mutableCopy]; + + // The new requests's URL overrides the original's URL. + [newRequest setURL:[GTMSessionFetcher redirectURLWithOriginalRequestURL:originalRequest.URL + redirectRequestURL:redirectRequest.URL]]; + + // Any headers in the redirect override headers in the original. + NSDictionary *redirectHeaders = redirectRequest.allHTTPHeaderFields; + for (NSString *key in redirectHeaders) { + NSString *value = [redirectHeaders objectForKey:key]; + [newRequest setValue:value forHTTPHeaderField:key]; + } + + redirectRequest = newRequest; + + // Log the response we just received + [self setResponse:redirectResponse]; + [self logNowWithError:nil]; + + GTMSessionFetcherWillRedirectBlock willRedirectBlock = self.willRedirectBlock; + if (willRedirectBlock) { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + [self invokeOnCallbackQueueAfterUserStopped:YES + block:^{ + willRedirectBlock(redirectResponse, redirectRequest, ^(NSURLRequest *clientRequest) { + + // Update the request for future logging. + [self updateMutableRequest:[clientRequest mutableCopy]]; + + handler(clientRequest); + }); + }]; + } // @synchronized(self) + return; + } + // Continues here if the client did not provide a redirect block. + + // Update the request for future logging. + [self updateMutableRequest:[redirectRequest mutableCopy]]; + } + handler(redirectRequest); +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))handler { + [self setSessionTask:dataTask]; + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ dataTask:%@ didReceiveResponse:%@", + [self class], self, session, dataTask, response); + void (^accumulateAndFinish)(NSURLSessionResponseDisposition) = + ^(NSURLSessionResponseDisposition dispositionValue) { + // This method is called when the server has determined that it + // has enough information to create the NSURLResponse + // it can be called multiple times, for example in the case of a + // redirect, so each time we reset the data. + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + BOOL hadPreviousData = self->_downloadedLength > 0; + + [self->_downloadedData setLength:0]; + self->_downloadedLength = 0; + + if (hadPreviousData && (dispositionValue != NSURLSessionResponseCancel)) { + // Tell the accumulate block to discard prior data. + GTMSessionFetcherAccumulateDataBlock accumulateBlock = self->_accumulateDataBlock; + if (accumulateBlock) { + [self invokeOnCallbackQueueUnlessStopped:^{ + accumulateBlock(nil); + }]; + } + } + } // @synchronized(self) + handler(dispositionValue); + }; + + GTMSessionFetcherDidReceiveResponseBlock receivedResponseBlock; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + receivedResponseBlock = _didReceiveResponseBlock; + if (receivedResponseBlock) { + // We will ultimately need to call back to NSURLSession's handler with the disposition value + // for this delegate method even if the user has stopped the fetcher. + [self invokeOnCallbackQueueAfterUserStopped:YES + block:^{ + receivedResponseBlock(response, ^(NSURLSessionResponseDisposition desiredDisposition) { + accumulateAndFinish(desiredDisposition); + }); + }]; + } + } // @synchronized(self) + + if (receivedResponseBlock == nil) { + accumulateAndFinish(NSURLSessionResponseAllow); + } +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask { + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ dataTask:%@ didBecomeDownloadTask:%@", + [self class], self, session, dataTask, downloadTask); + [self setSessionTask:downloadTask]; +} + + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, + NSURLCredential * GTM_NULLABLE_TYPE credential))handler { + [self setSessionTask:task]; + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ task:%@ didReceiveChallenge:%@", + [self class], self, session, task, challenge); + + GTMSessionFetcherChallengeBlock challengeBlock = self.challengeBlock; + if (challengeBlock) { + // The fetcher user has provided custom challenge handling. + // + // We will ultimately need to call back to NSURLSession's handler with the disposition value + // for this delegate method even if the user has stopped the fetcher. + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + [self invokeOnCallbackQueueAfterUserStopped:YES + block:^{ + challengeBlock(self, challenge, handler); + }]; + } + } else { + // No challenge block was provided by the client. + [self respondToChallenge:challenge + completionHandler:handler]; + } +} + +- (void)respondToChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, + NSURLCredential * GTM_NULLABLE_TYPE credential))handler { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSInteger previousFailureCount = [challenge previousFailureCount]; + if (previousFailureCount <= 2) { + NSURLProtectionSpace *protectionSpace = [challenge protectionSpace]; + NSString *authenticationMethod = [protectionSpace authenticationMethod]; + if ([authenticationMethod isEqual:NSURLAuthenticationMethodServerTrust]) { + // SSL. + // + // Background sessions seem to require an explicit check of the server trust object + // rather than default handling. + SecTrustRef serverTrust = challenge.protectionSpace.serverTrust; + if (serverTrust == NULL) { + // No server trust information is available. + handler(NSURLSessionAuthChallengePerformDefaultHandling, nil); + } else { + // Server trust information is available. + void (^callback)(SecTrustRef, BOOL) = ^(SecTrustRef trustRef, BOOL allow){ + if (allow) { + NSURLCredential *trustCredential = [NSURLCredential credentialForTrust:trustRef]; + handler(NSURLSessionAuthChallengeUseCredential, trustCredential); + } else { + GTMSESSION_LOG_DEBUG(@"Cancelling authentication challenge for %@", self->_request.URL); + handler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil); + } + }; + if (_allowInvalidServerCertificates) { + callback(serverTrust, YES); + } else { + [[self class] evaluateServerTrust:serverTrust + forRequest:_request + completionHandler:callback]; + } + } + return; + } + + NSURLCredential *credential = _credential; + + if ([[challenge protectionSpace] isProxy] && _proxyCredential != nil) { + credential = _proxyCredential; + } + + if (credential) { + handler(NSURLSessionAuthChallengeUseCredential, credential); + } else { + // The credential is still nil; tell the OS to use the default handling. This is needed + // for things that can come out of the keychain (proxies, client certificates, etc.). + // + // Note: Looking up a credential with NSURLCredentialStorage's + // defaultCredentialForProtectionSpace: is *not* the same invoking the handler with + // NSURLSessionAuthChallengePerformDefaultHandling. In the case of + // NSURLAuthenticationMethodClientCertificate, you can get nil back from + // NSURLCredentialStorage, while using this code path instead works. + handler(NSURLSessionAuthChallengePerformDefaultHandling, nil); + } + + } else { + // We've failed auth 3 times. The completion handler will be called with code + // NSURLErrorCancelled. + handler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil); + } + } // @synchronized(self) +} + +// Return redirect URL based on the original request URL and redirect request URL. +// +// Method disallows any scheme changes between the original request URL and redirect request URL +// aside from "http" to "https". If a change in scheme is detected the redirect URL inherits the +// scheme from the original request URL. ++ (GTM_NULLABLE NSURL *)redirectURLWithOriginalRequestURL:(GTM_NULLABLE NSURL *)originalRequestURL + redirectRequestURL:(GTM_NULLABLE NSURL *)redirectRequestURL { + // In the case of an NSURLSession redirect, neither URL should ever be nil; as a sanity check + // if either is nil return the other URL. + if (!redirectRequestURL) return originalRequestURL; + if (!originalRequestURL) return redirectRequestURL; + + NSString *originalScheme = originalRequestURL.scheme; + NSString *redirectScheme = redirectRequestURL.scheme; + BOOL insecureToSecureRedirect = + (originalScheme != nil && [originalScheme caseInsensitiveCompare:@"http"] == NSOrderedSame && + redirectScheme != nil && [redirectScheme caseInsensitiveCompare:@"https"] == NSOrderedSame); + + // This can't really be nil for the inputs, but to keep the analyzer happy + // for the -caseInsensitiveCompare: call below, give it a value if it were. + if (!originalScheme) originalScheme = @"https"; + + // Check for changes to the scheme and disallow any changes except for http to https. + if (!insecureToSecureRedirect && + (redirectScheme.length != originalScheme.length || + [redirectScheme caseInsensitiveCompare:originalScheme] != NSOrderedSame)) { + NSURLComponents *components = + [NSURLComponents componentsWithURL:(NSURL * _Nonnull)redirectRequestURL + resolvingAgainstBaseURL:NO]; + components.scheme = originalScheme; + return components.URL; + } + + return redirectRequestURL; +} + +// Validate the certificate chain. +// +// This may become a public method if it appears to be useful to users. ++ (void)evaluateServerTrust:(SecTrustRef)serverTrust + forRequest:(NSURLRequest *)request + completionHandler:(void (^)(SecTrustRef trustRef, BOOL allow))handler { + // Retain the trust object to avoid a SecTrustEvaluate() crash on iOS 7. + CFRetain(serverTrust); + + // Evaluate the certificate chain. + // + // The delegate queue may be the main thread. Trust evaluation could cause some + // blocking network activity, so we must evaluate async, as documented at + // https://developer.apple.com/library/ios/technotes/tn2232/ + // + // We must also avoid multiple uses of the trust object, per docs: + // "It is not safe to call this function concurrently with any other function that uses + // the same trust management object, or to re-enter this function for the same trust + // management object." + // + // SecTrustEvaluateAsync both does sync execution of Evaluate and calls back on the + // queue passed to it, according to at sources in + // http://www.opensource.apple.com/source/libsecurity_keychain/libsecurity_keychain-55050.9/lib/SecTrust.cpp + // It would require a global serial queue to ensure the evaluate happens only on a + // single thread at a time, so we'll stick with using SecTrustEvaluate on a background + // thread. + dispatch_queue_t evaluateBackgroundQueue = + dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_async(evaluateBackgroundQueue, ^{ + // It looks like the implementation of SecTrustEvaluate() on Mac grabs a global lock, + // so it may be redundant for us to also lock, but it's easy to synchronize here + // anyway. + BOOL shouldAllow; +#if GTM_SDK_REQUIRES_SECTRUSTEVALUATEWITHERROR + CFErrorRef errorRef = NULL; + @synchronized ([GTMSessionFetcher class]) { + GTMSessionMonitorSynchronized([GTMSessionFetcher class]); + + // SecTrustEvaluateWithError handles both the "proceed" and "unspecified" cases, + // so it is not necessary to check the trust result the evaluation returns true. + shouldAllow = SecTrustEvaluateWithError(serverTrust, &errorRef); + } + + if (errorRef) { + GTMSESSION_LOG_DEBUG(@"Error %d evaluating trust for %@", + (int)CFErrorGetCode(errorRef), request); + CFRelease(errorRef); + } +#else + SecTrustResultType trustEval = kSecTrustResultInvalid; + OSStatus trustError; + @synchronized([GTMSessionFetcher class]) { + GTMSessionMonitorSynchronized([GTMSessionFetcher class]); + + trustError = SecTrustEvaluate(serverTrust, &trustEval); + } + if (trustError != errSecSuccess) { + GTMSESSION_LOG_DEBUG(@"Error %d evaluating trust for %@", + (int)trustError, request); + shouldAllow = NO; + } else { + // Having a trust level "unspecified" by the user is the usual result, described at + // https://developer.apple.com/library/mac/qa/qa1360 + if (trustEval == kSecTrustResultUnspecified + || trustEval == kSecTrustResultProceed) { + shouldAllow = YES; + } else { + shouldAllow = NO; + GTMSESSION_LOG_DEBUG(@"Challenge SecTrustResultType %u for %@, properties: %@", + trustEval, request.URL.host, + CFBridgingRelease(SecTrustCopyProperties(serverTrust))); + } + } +#endif // GTM_SDK_REQUIRES_SECTRUSTEVALUATEWITHERROR + handler(serverTrust, shouldAllow); + + CFRelease(serverTrust); + }); +} + +- (void)invokeOnCallbackQueueUnlessStopped:(void (^)(void))block { + [self invokeOnCallbackQueueAfterUserStopped:NO + block:block]; +} + +- (void)invokeOnCallbackQueueAfterUserStopped:(BOOL)afterStopped + block:(void (^)(void))block { + GTMSessionCheckSynchronized(self); + + [self invokeOnCallbackUnsynchronizedQueueAfterUserStopped:afterStopped + block:block]; +} + +- (void)invokeOnCallbackUnsynchronizedQueueAfterUserStopped:(BOOL)afterStopped + block:(void (^)(void))block { + // testBlock simulation code may not be synchronizing when this is invoked. + [self invokeOnCallbackQueue:_callbackQueue + afterUserStopped:afterStopped + block:block]; +} + +- (void)invokeOnCallbackQueue:(dispatch_queue_t)callbackQueue + afterUserStopped:(BOOL)afterStopped + block:(void (^)(void))block { + if (callbackQueue) { + dispatch_group_async(_callbackGroup, callbackQueue, ^{ + if (!afterStopped) { + NSDate *serviceStoppedAllDate = [self->_service stoppedAllFetchersDate]; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + // Avoid a race between stopFetching and the callback. + if (self->_userStoppedFetching) { + return; + } + + // Also avoid calling back if the service has stopped all fetchers + // since this one was created. The fetcher may have stopped before + // stopAllFetchers was invoked, so _userStoppedFetching wasn't set, + // but the app still won't expect the callback to fire after + // the service's stopAllFetchers was invoked. + if (serviceStoppedAllDate + && [self->_initialBeginFetchDate compare:serviceStoppedAllDate] != NSOrderedDescending) { + // stopAllFetchers was called after this fetcher began. + return; + } + } // @synchronized(self) + } + block(); + }); + } +} + +- (void)invokeFetchCallbacksOnCallbackQueueWithData:(GTM_NULLABLE NSData *)data + error:(GTM_NULLABLE NSError *)error { + // Callbacks will be released in the method stopFetchReleasingCallbacks: + GTMSessionFetcherCompletionHandler handler; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + handler = _completionHandler; + + if (handler) { + [self invokeOnCallbackQueueUnlessStopped:^{ + handler(data, error); + + // Post a notification, primarily to allow code to collect responses for + // testing. + // + // The observing code is not likely on the fetcher's callback + // queue, so this posts explicitly to the main queue. + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + if (data) { + userInfo[kGTMSessionFetcherCompletionDataKey] = data; + } + if (error) { + userInfo[kGTMSessionFetcherCompletionErrorKey] = error; + } + [self postNotificationOnMainThreadWithName:kGTMSessionFetcherCompletionInvokedNotification + userInfo:userInfo + requireAsync:NO]; + }]; + } + } // @synchronized(self) +} + +- (void)postNotificationOnMainThreadWithName:(NSString *)noteName + userInfo:(GTM_NULLABLE NSDictionary *)userInfo + requireAsync:(BOOL)requireAsync { + dispatch_block_t postBlock = ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:noteName + object:self + userInfo:userInfo]; + }; + + if ([NSThread isMainThread] && !requireAsync) { + // Post synchronously for compatibility with older code using the fetcher. + + // Avoid calling out to other code from inside a sync block to avoid risk + // of a deadlock or of recursive sync. + GTMSessionCheckNotSynchronized(self); + + postBlock(); + } else { + dispatch_async(dispatch_get_main_queue(), postBlock); + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)uploadTask + needNewBodyStream:(void (^)(NSInputStream * GTM_NULLABLE_TYPE bodyStream))completionHandler { + [self setSessionTask:uploadTask]; + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ task:%@ needNewBodyStream:", + [self class], self, session, uploadTask); + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + GTMSessionFetcherBodyStreamProvider provider = _bodyStreamProvider; +#if !STRIP_GTM_FETCH_LOGGING + if ([self respondsToSelector:@selector(loggedStreamProviderForStreamProvider:)]) { + provider = [self performSelector:@selector(loggedStreamProviderForStreamProvider:) + withObject:provider]; + } +#endif + if (provider) { + [self invokeOnCallbackQueueUnlessStopped:^{ + provider(completionHandler); + }]; + } else { + GTMSESSION_ASSERT_DEBUG(NO, @"NSURLSession expects a stream provider"); + + completionHandler(nil); + } + } // @synchronized(self) +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { + [self setSessionTask:task]; + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ task:%@ didSendBodyData:%lld" + @" totalBytesSent:%lld totalBytesExpectedToSend:%lld", + [self class], self, session, task, bytesSent, totalBytesSent, + totalBytesExpectedToSend); + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (!_sendProgressBlock) { + return; + } + // We won't hold on to send progress block; it's ok to not send it if the upload finishes. + [self invokeOnCallbackQueueUnlessStopped:^{ + GTMSessionFetcherSendProgressBlock progressBlock; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + progressBlock = self->_sendProgressBlock; + } + if (progressBlock) { + progressBlock(bytesSent, totalBytesSent, totalBytesExpectedToSend); + } + }]; + } // @synchronized(self) +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data { + [self setSessionTask:dataTask]; + NSUInteger bufferLength = data.length; + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ dataTask:%@ didReceiveData:%p (%llu bytes)", + [self class], self, session, dataTask, data, + (unsigned long long)bufferLength); + if (bufferLength == 0) { + // Observed on completing an out-of-process upload. + return; + } + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + GTMSessionFetcherAccumulateDataBlock accumulateBlock = _accumulateDataBlock; + if (accumulateBlock) { + // Let the client accumulate the data. + _downloadedLength += bufferLength; + [self invokeOnCallbackQueueUnlessStopped:^{ + accumulateBlock(data); + }]; + } else if (!_userStoppedFetching) { + // Append to the mutable data buffer unless the fetch has been cancelled. + + // Resumed upload tasks may not yet have a data buffer. + if (_downloadedData == nil) { + // Using NSClassFromString for iOS 6 compatibility. + GTMSESSION_ASSERT_DEBUG( + ![dataTask isKindOfClass:NSClassFromString(@"NSURLSessionDownloadTask")], + @"Resumed download tasks should not receive data bytes"); + _downloadedData = [[NSMutableData alloc] init]; + } + + [_downloadedData appendData:data]; + _downloadedLength = (int64_t)_downloadedData.length; + + // We won't hold on to receivedProgressBlock here; it's ok to not send + // it if the transfer finishes. + if (_receivedProgressBlock) { + [self invokeOnCallbackQueueUnlessStopped:^{ + GTMSessionFetcherReceivedProgressBlock progressBlock; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + progressBlock = self->_receivedProgressBlock; + } + if (progressBlock) { + progressBlock((int64_t)bufferLength, self->_downloadedLength); + } + }]; + } + } + } // @synchronized(self) +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *cachedResponse))completionHandler { + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ dataTask:%@ willCacheResponse:%@ %@", + [self class], self, session, dataTask, + proposedResponse, proposedResponse.response); + GTMSessionFetcherWillCacheURLResponseBlock callback; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + callback = _willCacheURLResponseBlock; + + if (callback) { + [self invokeOnCallbackQueueAfterUserStopped:YES + block:^{ + callback(proposedResponse, completionHandler); + }]; + } + } // @synchronized(self) + if (!callback) { + completionHandler(proposedResponse); + } +} + + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didWriteData:(int64_t)bytesWritten + totalBytesWritten:(int64_t)totalBytesWritten +totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite { + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ downloadTask:%@ didWriteData:%lld" + @" bytesWritten:%lld totalBytesExpectedToWrite:%lld", + [self class], self, session, downloadTask, bytesWritten, + totalBytesWritten, totalBytesExpectedToWrite); + [self setSessionTask:downloadTask]; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if ((totalBytesExpectedToWrite != NSURLSessionTransferSizeUnknown) && + (totalBytesExpectedToWrite < totalBytesWritten)) { + // Have observed cases were bytesWritten == totalBytesExpectedToWrite, + // but totalBytesWritten > totalBytesExpectedToWrite, so setting to unkown in these cases. + totalBytesExpectedToWrite = NSURLSessionTransferSizeUnknown; + } + + GTMSessionFetcherDownloadProgressBlock progressBlock; + progressBlock = self->_downloadProgressBlock; + if (progressBlock) { + [self invokeOnCallbackQueueUnlessStopped:^{ + progressBlock(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + }]; + } + } // @synchronized(self) +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes { + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ downloadTask:%@ didResumeAtOffset:%lld" + @" expectedTotalBytes:%lld", + [self class], self, session, downloadTask, fileOffset, + expectedTotalBytes); + [self setSessionTask:downloadTask]; +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)downloadLocationURL { + // Download may have relaunched app, so update _sessionTask. + [self setSessionTask:downloadTask]; + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ downloadTask:%@ didFinishDownloadingToURL:%@", + [self class], self, session, downloadTask, downloadLocationURL); + NSNumber *fileSizeNum; + [downloadLocationURL getResourceValue:&fileSizeNum + forKey:NSURLFileSizeKey + error:NULL]; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSURL *destinationURL = _destinationFileURL; + + _downloadedLength = fileSizeNum.longLongValue; + + // Overwrite any previous file at the destination URL. + NSFileManager *fileMgr = [NSFileManager defaultManager]; + NSError *removeError; + if (![fileMgr removeItemAtURL:destinationURL error:&removeError] + && removeError.code != NSFileNoSuchFileError) { + GTMSESSION_LOG_DEBUG(@"Could not remove previous file at %@ due to %@", + downloadLocationURL.path, removeError); + } + + NSInteger statusCode = [self statusCodeUnsynchronized]; + if (statusCode < 200 || statusCode > 399) { + // In OS X 10.11, the response body is written to a file even on a server + // status error. For convenience of the fetcher client, we'll skip saving the + // downloaded body to the destination URL so that clients do not need to know + // to delete the file following fetch errors. + GTMSESSION_LOG_DEBUG(@"Abandoning download due to status %ld, file %@", + (long)statusCode, downloadLocationURL.path); + + // On error code, add the contents of the temporary file to _downloadTaskErrorData + // This way fetcher clients have access to error details possibly passed by the server. + if (_downloadedLength > 0 && _downloadedLength <= kMaximumDownloadErrorDataLength) { + _downloadTaskErrorData = [NSData dataWithContentsOfURL:downloadLocationURL]; + } else if (_downloadedLength > kMaximumDownloadErrorDataLength) { + GTMSESSION_LOG_DEBUG(@"Download error data for file %@ not passed to userInfo due to size " + @"%lld", downloadLocationURL.path, _downloadedLength); + } + } else { + NSError *moveError; + NSURL *destinationFolderURL = [destinationURL URLByDeletingLastPathComponent]; + BOOL didMoveDownload = NO; + if ([fileMgr createDirectoryAtURL:destinationFolderURL + withIntermediateDirectories:YES + attributes:nil + error:&moveError]) { + didMoveDownload = [fileMgr moveItemAtURL:downloadLocationURL + toURL:destinationURL + error:&moveError]; + } + if (!didMoveDownload) { + _downloadFinishedError = moveError; + } + GTM_LOG_BACKGROUND_SESSION(@"%@ %p Moved download from \"%@\" to \"%@\" %@", + [self class], self, + downloadLocationURL.path, destinationURL.path, + error ? error : @""); + } + } // @synchronized(self) +} + +/* Sent as the last message related to a specific task. Error may be + * nil, which implies that no error occurred and this task is complete. + */ +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error { + [self setSessionTask:task]; + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ task:%@ didCompleteWithError:%@", + [self class], self, session, task, error); + + NSInteger status = self.statusCode; + BOOL forceAssumeRetry = NO; + BOOL succeeded = NO; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + +#if !GTM_DISABLE_FETCHER_TEST_BLOCK + // The task is never resumed when a testBlock is used. When the session is destroyed, + // we should ignore the callback, since the testBlock support code itself invokes + // shouldRetryNowForStatus: and finishWithError:shouldRetry: + if (_isUsingTestBlock) return; +#endif + + if (error == nil) { + error = _downloadFinishedError; + } + succeeded = (error == nil && status >= 0 && status < 300); + if (succeeded) { + // Succeeded. + _bodyLength = task.countOfBytesSent; + } + } // @synchronized(self) + + if (succeeded) { + [self finishWithError:nil shouldRetry:NO]; + return; + } + // For background redirects, no delegate method is called, so we cannot restore a stripped + // Authorization header, so if a 403 ("Forbidden") was generated due to a missing OAuth 2 header, + // set the current request's URL to the redirected URL, so we in effect restore the Authorization + // header. + if ((status == 403) && self.usingBackgroundSession) { + NSURL *redirectURL = self.response.URL; + NSURLRequest *request = self.request; + if (![request.URL isEqual:redirectURL]) { + NSString *authorizationHeader = [request.allHTTPHeaderFields objectForKey:@"Authorization"]; + if (authorizationHeader != nil) { + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + mutableRequest.URL = redirectURL; + [self updateMutableRequest:mutableRequest]; + // Avoid assuming the session is still valid. + self.session = nil; + forceAssumeRetry = YES; + } + } + } + + // If invalidating the session was deferred in stopFetchReleasingCallbacks: then do it now. + NSURLSession *oldSession = self.sessionNeedingInvalidation; + if (oldSession) { + [self setSessionNeedingInvalidation:NULL]; + [oldSession finishTasksAndInvalidate]; + } + + // Failed. + [self shouldRetryNowForStatus:status + error:error + forceAssumeRetry:forceAssumeRetry + response:^(BOOL shouldRetry) { + [self finishWithError:error shouldRetry:shouldRetry]; + }]; +} + +#if TARGET_OS_IPHONE +- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session { + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSessionDidFinishEventsForBackgroundURLSession:%@", + [self class], self, session); + [self removePersistedBackgroundSessionFromDefaults]; + + GTMSessionFetcherSystemCompletionHandler handler; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + handler = self.systemCompletionHandler; + self.systemCompletionHandler = nil; + } // @synchronized(self) + if (handler) { + GTM_LOG_BACKGROUND_SESSION(@"%@ %p Calling system completionHandler", [self class], self); + handler(); + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSURLSession *oldSession = _session; + _session = nil; + if (_shouldInvalidateSession) { + [oldSession finishTasksAndInvalidate]; + } + } // @synchronized(self) + } +} +#endif + +- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(GTM_NULLABLE NSError *)error { + // This may happen repeatedly for retries. On authentication callbacks, the retry + // may begin before the prior session sends the didBecomeInvalid delegate message. + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ didBecomeInvalidWithError:%@", + [self class], self, session, error); + if (session == (NSURLSession *)self.session) { + GTM_LOG_SESSION_DELEGATE(@" Unexpected retained invalid session: %@", session); + self.session = nil; + } +} + +- (void)finishWithError:(GTM_NULLABLE NSError *)error shouldRetry:(BOOL)shouldRetry { + [self removePersistedBackgroundSessionFromDefaults]; + + BOOL shouldStopFetching = YES; + NSData *downloadedData = nil; +#if !STRIP_GTM_FETCH_LOGGING + BOOL shouldDeferLogging = NO; +#endif + BOOL shouldBeginRetryTimer = NO; + NSInteger status = [self statusCode]; + NSURL *destinationURL = self.destinationFileURL; + + BOOL fetchSucceeded = (error == nil && status >= 0 && status < 300); + +#if !STRIP_GTM_FETCH_LOGGING + if (!fetchSucceeded) { + if (!shouldDeferLogging && !self.hasLoggedError) { + [self logNowWithError:error]; + self.hasLoggedError = YES; + } + } +#endif // !STRIP_GTM_FETCH_LOGGING + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + +#if !STRIP_GTM_FETCH_LOGGING + shouldDeferLogging = _deferResponseBodyLogging; +#endif + if (fetchSucceeded) { + // Success + if ((_downloadedData.length > 0) && (destinationURL != nil)) { + // Overwrite any previous file at the destination URL. + NSFileManager *fileMgr = [NSFileManager defaultManager]; + [fileMgr removeItemAtURL:destinationURL + error:NULL]; + NSURL *destinationFolderURL = [destinationURL URLByDeletingLastPathComponent]; + BOOL didMoveDownload = NO; + if ([fileMgr createDirectoryAtURL:destinationFolderURL + withIntermediateDirectories:YES + attributes:nil + error:&error]) { + didMoveDownload = [_downloadedData writeToURL:destinationURL + options:NSDataWritingAtomic + error:&error]; + } + if (didMoveDownload) { + _downloadedData = nil; + } else { + _downloadFinishedError = error; + } + } + downloadedData = _downloadedData; + } else { + // Unsuccessful with error or status over 300. Retry or notify the delegate of failure + if (shouldRetry) { + // Retrying. + shouldBeginRetryTimer = YES; + shouldStopFetching = NO; + } else { + if (error == nil) { + // Create an error. + NSDictionary *userInfo = GTMErrorUserInfoForData( + _downloadedData.length > 0 ? _downloadedData : _downloadTaskErrorData, + [self responseHeadersUnsynchronized]); + + error = [NSError errorWithDomain:kGTMSessionFetcherStatusDomain + code:status + userInfo:userInfo]; + } else { + // If the error had resume data, and the client supplied a resume block, pass the + // data to the client. + void (^resumeBlock)(NSData *) = _resumeDataBlock; + _resumeDataBlock = nil; + if (resumeBlock) { + NSData *resumeData = [error.userInfo objectForKey:NSURLSessionDownloadTaskResumeData]; + if (resumeData) { + [self invokeOnCallbackQueueAfterUserStopped:YES block:^{ + resumeBlock(resumeData); + }]; + } + } + } + if (_downloadedData.length > 0) { + downloadedData = _downloadedData; + } + // If the error occurred after retries, report the number and duration of the + // retries. This provides a clue to a developer looking at the error description + // that the fetcher did retry before failing with this error. + if (_retryCount > 0) { + NSMutableDictionary *userInfoWithRetries = + [NSMutableDictionary dictionaryWithDictionary:(NSDictionary *)error.userInfo]; + NSTimeInterval timeSinceInitialRequest = -[_initialRequestDate timeIntervalSinceNow]; + [userInfoWithRetries setObject:@(timeSinceInitialRequest) + forKey:kGTMSessionFetcherElapsedIntervalWithRetriesKey]; + [userInfoWithRetries setObject:@(_retryCount) + forKey:kGTMSessionFetcherNumberOfRetriesDoneKey]; + error = [NSError errorWithDomain:(NSString *)error.domain + code:error.code + userInfo:userInfoWithRetries]; + } + } + } + } // @synchronized(self) + + if (shouldBeginRetryTimer) { + [self beginRetryTimer]; + } + + // We want to send the stop notification before calling the delegate's + // callback selector, since the callback selector may release all of + // the fetcher properties that the client is using to track the fetches. + // + // We'll also stop now so that, to any observers watching the notifications, + // it doesn't look like our wait for a retry (which may be long, + // 30 seconds or more) is part of the network activity. + [self sendStopNotificationIfNeeded]; + + if (shouldStopFetching) { + [self invokeFetchCallbacksOnCallbackQueueWithData:downloadedData + error:error]; + // The upload subclass doesn't want to release callbacks until upload chunks have completed. + BOOL shouldRelease = [self shouldReleaseCallbacksUponCompletion]; + [self stopFetchReleasingCallbacks:shouldRelease]; + } + +#if !STRIP_GTM_FETCH_LOGGING + // _hasLoggedError is only set by this method + if (!shouldDeferLogging && !_hasLoggedError) { + [self logNowWithError:error]; + } +#endif +} + +- (BOOL)shouldReleaseCallbacksUponCompletion { + // A subclass can override this to keep callbacks around after the + // connection has finished successfully + return YES; +} + +- (void)logNowWithError:(GTM_NULLABLE NSError *)error { + GTMSessionCheckNotSynchronized(self); + + // If the logging category is available, then log the current request, + // response, data, and error + if ([self respondsToSelector:@selector(logFetchWithError:)]) { + [self performSelector:@selector(logFetchWithError:) withObject:error]; + } +} + +#pragma mark Retries + +- (BOOL)isRetryError:(NSError *)error { + struct RetryRecord { + __unsafe_unretained NSString *const domain; + NSInteger code; + }; + + struct RetryRecord retries[] = { + { kGTMSessionFetcherStatusDomain, 408 }, // request timeout + { kGTMSessionFetcherStatusDomain, 502 }, // failure gatewaying to another server + { kGTMSessionFetcherStatusDomain, 503 }, // service unavailable + { kGTMSessionFetcherStatusDomain, 504 }, // request timeout + { NSURLErrorDomain, NSURLErrorTimedOut }, + { NSURLErrorDomain, NSURLErrorNetworkConnectionLost }, + { nil, 0 } + }; + + // NSError's isEqual always returns false for equal but distinct instances + // of NSError, so we have to compare the domain and code values explicitly + NSString *domain = error.domain; + NSInteger code = error.code; + for (int idx = 0; retries[idx].domain != nil; idx++) { + if (code == retries[idx].code && [domain isEqual:retries[idx].domain]) { + return YES; + } + } + return NO; +} + +// shouldRetryNowForStatus:error: responds with YES if the user has enabled retries +// and the status or error is one that is suitable for retrying. "Suitable" +// means either the isRetryError:'s list contains the status or error, or the +// user's retry block is present and returns YES when called, or the +// authorizer may be able to fix. +- (void)shouldRetryNowForStatus:(NSInteger)status + error:(NSError *)error + forceAssumeRetry:(BOOL)forceAssumeRetry + response:(GTMSessionFetcherRetryResponse)response { + // Determine if a refreshed authorizer may avoid an authorization error + BOOL willRetry = NO; + + // We assume _authorizer is immutable after beginFetch, and _hasAttemptedAuthRefresh is modified + // only in this method, and this method is invoked on the serial delegate queue. + // + // We want to avoid calling the authorizer from inside a sync block. + BOOL isFirstAuthError = (_authorizer != nil + && !_hasAttemptedAuthRefresh + && status == GTMSessionFetcherStatusUnauthorized); // 401 + + BOOL hasPrimed = NO; + if (isFirstAuthError) { + if ([_authorizer respondsToSelector:@selector(primeForRefresh)]) { + hasPrimed = [_authorizer primeForRefresh]; + } + } + + BOOL shouldRetryForAuthRefresh = NO; + if (hasPrimed) { + shouldRetryForAuthRefresh = YES; + _hasAttemptedAuthRefresh = YES; + [self updateRequestValue:nil forHTTPHeaderField:@"Authorization"]; + } + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + BOOL shouldDoRetry = [self isRetryEnabledUnsynchronized]; + if (shouldDoRetry && ![self hasRetryAfterInterval]) { + + // Determine if we're doing exponential backoff retries + shouldDoRetry = [self nextRetryIntervalUnsynchronized] < _maxRetryInterval; + + if (shouldDoRetry) { + // If an explicit max retry interval was set, we expect repeated backoffs to take + // up to roughly twice that for repeated fast failures. If the initial attempt is + // already more than 3 times the max retry interval, then failures have taken a long time + // (such as from network timeouts) so don't retry again to avoid the app becoming + // unexpectedly unresponsive. + if (_maxRetryInterval > 0) { + NSTimeInterval maxAllowedIntervalBeforeRetry = _maxRetryInterval * 3; + NSTimeInterval timeSinceInitialRequest = -[_initialRequestDate timeIntervalSinceNow]; + if (timeSinceInitialRequest > maxAllowedIntervalBeforeRetry) { + shouldDoRetry = NO; + } + } + } + } + BOOL canRetry = shouldRetryForAuthRefresh || forceAssumeRetry || shouldDoRetry; + if (canRetry) { + NSDictionary *userInfo = + GTMErrorUserInfoForData(_downloadedData, [self responseHeadersUnsynchronized]); + NSError *statusError = [NSError errorWithDomain:kGTMSessionFetcherStatusDomain + code:status + userInfo:userInfo]; + if (error == nil) { + error = statusError; + } + willRetry = shouldRetryForAuthRefresh || + forceAssumeRetry || + [self isRetryError:error] || + ((error != statusError) && [self isRetryError:statusError]); + + // If the user has installed a retry callback, consult that. + GTMSessionFetcherRetryBlock retryBlock = _retryBlock; + if (retryBlock) { + [self invokeOnCallbackQueueUnlessStopped:^{ + retryBlock(willRetry, error, response); + }]; + return; + } + } + } // @synchronized(self) + response(willRetry); +} + +- (BOOL)hasRetryAfterInterval { + GTMSessionCheckSynchronized(self); + + NSDictionary *responseHeaders = [self responseHeadersUnsynchronized]; + NSString *retryAfterValue = [responseHeaders valueForKey:@"Retry-After"]; + return (retryAfterValue != nil); +} + +- (NSTimeInterval)retryAfterInterval { + GTMSessionCheckSynchronized(self); + + NSDictionary *responseHeaders = [self responseHeadersUnsynchronized]; + NSString *retryAfterValue = [responseHeaders valueForKey:@"Retry-After"]; + if (retryAfterValue == nil) { + return 0; + } + // Retry-After formatted as HTTP-date | delta-seconds + // Reference: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html + NSDateFormatter *rfc1123DateFormatter = [[NSDateFormatter alloc] init]; + rfc1123DateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; + rfc1123DateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; + rfc1123DateFormatter.dateFormat = @"EEE',' dd MMM yyyy HH':'mm':'ss z"; + NSDate *retryAfterDate = [rfc1123DateFormatter dateFromString:retryAfterValue]; + NSTimeInterval retryAfterInterval = (retryAfterDate != nil) ? + retryAfterDate.timeIntervalSinceNow : retryAfterValue.intValue; + retryAfterInterval = MAX(0, retryAfterInterval); + return retryAfterInterval; +} + +- (void)beginRetryTimer { + if (![NSThread isMainThread]) { + // Defer creating and starting the timer until we're on the main thread to ensure it has + // a run loop. + dispatch_group_async(_callbackGroup, dispatch_get_main_queue(), ^{ + [self beginRetryTimer]; + }); + return; + } + + [self destroyRetryTimer]; + +#if GTM_BACKGROUND_TASK_FETCHING + // Don't keep a background task active while awaiting retry, which can lead to the + // app exceeding the allotted time for keeping the background task open, causing the + // system to terminate the app. When the retry starts, a new background task will + // be created. + [self endBackgroundTask]; +#endif // GTM_BACKGROUND_TASK_FETCHING + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSTimeInterval nextInterval = [self nextRetryIntervalUnsynchronized]; + NSTimeInterval maxInterval = _maxRetryInterval; + NSTimeInterval newInterval = MIN(nextInterval, (maxInterval > 0 ? maxInterval : DBL_MAX)); + NSTimeInterval newIntervalTolerance = (newInterval / 10) > 1.0 ?: 1.0; + + _lastRetryInterval = newInterval; + + _retryTimer = [NSTimer timerWithTimeInterval:newInterval + target:self + selector:@selector(retryTimerFired:) + userInfo:nil + repeats:NO]; + _retryTimer.tolerance = newIntervalTolerance; + [[NSRunLoop mainRunLoop] addTimer:_retryTimer + forMode:NSDefaultRunLoopMode]; + } // @synchronized(self) + + [self postNotificationOnMainThreadWithName:kGTMSessionFetcherRetryDelayStartedNotification + userInfo:nil + requireAsync:NO]; +} + +- (void)retryTimerFired:(NSTimer *)timer { + [self destroyRetryTimer]; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _retryCount++; + } // @synchronized(self) + + NSOperationQueue *queue = self.sessionDelegateQueue; + [queue addOperationWithBlock:^{ + [self retryFetch]; + }]; +} + +- (void)destroyRetryTimer { + BOOL shouldNotify = NO; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_retryTimer) { + [_retryTimer invalidate]; + _retryTimer = nil; + shouldNotify = YES; + } + } + + if (shouldNotify) { + [self postNotificationOnMainThreadWithName:kGTMSessionFetcherRetryDelayStoppedNotification + userInfo:nil + requireAsync:NO]; + } +} + +- (NSUInteger)retryCount { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _retryCount; + } // @synchronized(self) +} + +- (NSTimeInterval)nextRetryInterval { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSTimeInterval interval = [self nextRetryIntervalUnsynchronized]; + return interval; + } // @synchronized(self) +} + +- (NSTimeInterval)nextRetryIntervalUnsynchronized { + GTMSessionCheckSynchronized(self); + + NSInteger statusCode = [self statusCodeUnsynchronized]; + if ((statusCode == 503) && [self hasRetryAfterInterval]) { + NSTimeInterval secs = [self retryAfterInterval]; + return secs; + } + // The next wait interval is the factor (2.0) times the last interval, + // but never less than the minimum interval. + NSTimeInterval secs = _lastRetryInterval * _retryFactor; + if (_maxRetryInterval > 0) { + secs = MIN(secs, _maxRetryInterval); + } + secs = MAX(secs, _minRetryInterval); + + return secs; +} + +- (NSTimer *)retryTimer { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _retryTimer; + } // @synchronized(self) +} + +- (BOOL)isRetryEnabled { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _isRetryEnabled; + } // @synchronized(self) +} + +- (BOOL)isRetryEnabledUnsynchronized { + GTMSessionCheckSynchronized(self); + + return _isRetryEnabled; +} + +- (void)setRetryEnabled:(BOOL)flag { + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (flag && !_isRetryEnabled) { + // We defer initializing these until the user calls setRetryEnabled + // to avoid using the random number generator if it's not needed. + // However, this means min and max intervals for this fetcher are reset + // as a side effect of calling setRetryEnabled. + // + // Make an initial retry interval random between 1.0 and 2.0 seconds + _minRetryInterval = InitialMinRetryInterval(); + _maxRetryInterval = kUnsetMaxRetryInterval; + _retryFactor = 2.0; + _lastRetryInterval = 0.0; + } + _isRetryEnabled = flag; + } // @synchronized(self) +}; + +- (NSTimeInterval)maxRetryInterval { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _maxRetryInterval; + } // @synchronized(self) +} + +- (void)setMaxRetryInterval:(NSTimeInterval)secs { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (secs > 0) { + _maxRetryInterval = secs; + } else { + _maxRetryInterval = kUnsetMaxRetryInterval; + } + } // @synchronized(self) +} + +- (double)minRetryInterval { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _minRetryInterval; + } // @synchronized(self) +} + +- (void)setMinRetryInterval:(NSTimeInterval)secs { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (secs > 0) { + _minRetryInterval = secs; + } else { + // Set min interval to a random value between 1.0 and 2.0 seconds + // so that if multiple clients start retrying at the same time, they'll + // repeat at different times and avoid overloading the server + _minRetryInterval = InitialMinRetryInterval(); + } + } // @synchronized(self) + +} + +#pragma mark iOS System Completion Handlers + +#if TARGET_OS_IPHONE +static NSMutableDictionary *gSystemCompletionHandlers = nil; + +- (GTM_NULLABLE GTMSessionFetcherSystemCompletionHandler)systemCompletionHandler { + return [[self class] systemCompletionHandlerForSessionIdentifier:_sessionIdentifier]; +} + +- (void)setSystemCompletionHandler:(GTM_NULLABLE GTMSessionFetcherSystemCompletionHandler)systemCompletionHandler { + [[self class] setSystemCompletionHandler:systemCompletionHandler + forSessionIdentifier:_sessionIdentifier]; +} + ++ (void)setSystemCompletionHandler:(GTM_NULLABLE GTMSessionFetcherSystemCompletionHandler)systemCompletionHandler + forSessionIdentifier:(NSString *)sessionIdentifier { + if (!sessionIdentifier) { + NSLog(@"%s with nil identifier", __PRETTY_FUNCTION__); + return; + } + + @synchronized([GTMSessionFetcher class]) { + if (gSystemCompletionHandlers == nil && systemCompletionHandler != nil) { + gSystemCompletionHandlers = [[NSMutableDictionary alloc] init]; + } + // Use setValue: to remove the object if completionHandler is nil. + [gSystemCompletionHandlers setValue:systemCompletionHandler + forKey:sessionIdentifier]; + } +} + ++ (GTM_NULLABLE GTMSessionFetcherSystemCompletionHandler)systemCompletionHandlerForSessionIdentifier:(NSString *)sessionIdentifier { + if (!sessionIdentifier) { + return nil; + } + @synchronized([GTMSessionFetcher class]) { + return [gSystemCompletionHandlers objectForKey:sessionIdentifier]; + } +} +#endif // TARGET_OS_IPHONE + +#pragma mark Getters and Setters + +@synthesize downloadResumeData = _downloadResumeData, + configuration = _configuration, + configurationBlock = _configurationBlock, + sessionTask = _sessionTask, + wasCreatedFromBackgroundSession = _wasCreatedFromBackgroundSession, + sessionUserInfo = _sessionUserInfo, + taskDescription = _taskDescription, + taskPriority = _taskPriority, + usingBackgroundSession = _usingBackgroundSession, + canShareSession = _canShareSession, + completionHandler = _completionHandler, + credential = _credential, + proxyCredential = _proxyCredential, + bodyData = _bodyData, + bodyLength = _bodyLength, + service = _service, + serviceHost = _serviceHost, + accumulateDataBlock = _accumulateDataBlock, + receivedProgressBlock = _receivedProgressBlock, + downloadProgressBlock = _downloadProgressBlock, + resumeDataBlock = _resumeDataBlock, + didReceiveResponseBlock = _didReceiveResponseBlock, + challengeBlock = _challengeBlock, + willRedirectBlock = _willRedirectBlock, + sendProgressBlock = _sendProgressBlock, + willCacheURLResponseBlock = _willCacheURLResponseBlock, + retryBlock = _retryBlock, + retryFactor = _retryFactor, + allowedInsecureSchemes = _allowedInsecureSchemes, + allowLocalhostRequest = _allowLocalhostRequest, + allowInvalidServerCertificates = _allowInvalidServerCertificates, + cookieStorage = _cookieStorage, + callbackQueue = _callbackQueue, + initialBeginFetchDate = _initialBeginFetchDate, + testBlock = _testBlock, + testBlockAccumulateDataChunkCount = _testBlockAccumulateDataChunkCount, + comment = _comment, + log = _log; + +#if !STRIP_GTM_FETCH_LOGGING +@synthesize redirectedFromURL = _redirectedFromURL, + logRequestBody = _logRequestBody, + logResponseBody = _logResponseBody, + hasLoggedError = _hasLoggedError; +#endif + +#if GTM_BACKGROUND_TASK_FETCHING +@synthesize backgroundTaskIdentifier = _backgroundTaskIdentifier, + skipBackgroundTask = _skipBackgroundTask; +#endif + +- (GTM_NULLABLE NSURLRequest *)request { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return [_request copy]; + } // @synchronized(self) +} + +- (void)setRequest:(GTM_NULLABLE NSURLRequest *)request { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (![self isFetchingUnsynchronized]) { + _request = [request mutableCopy]; + } else { + GTMSESSION_ASSERT_DEBUG(0, @"request may not be set after beginFetch has been invoked"); + } + } // @synchronized(self) +} + +- (GTM_NULLABLE NSMutableURLRequest *)mutableRequestForTesting { + // Allow tests only to modify the request, useful during retries. + return _request; +} + +// Internal method for updating the request property such as on redirects. +- (void)updateMutableRequest:(GTM_NULLABLE NSMutableURLRequest *)request { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _request = request; + } // @synchronized(self) +} + +// Set a header field value on the request. Header field value changes will not +// affect a fetch after the fetch has begun. +- (void)setRequestValue:(GTM_NULLABLE NSString *)value forHTTPHeaderField:(NSString *)field { + if (![self isFetching]) { + [self updateRequestValue:value forHTTPHeaderField:field]; + } else { + GTMSESSION_ASSERT_DEBUG(0, @"request may not be set after beginFetch has been invoked"); + } +} + +// Internal method for updating request headers. +- (void)updateRequestValue:(GTM_NULLABLE NSString *)value forHTTPHeaderField:(NSString *)field { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + [_request setValue:value forHTTPHeaderField:field]; + } // @synchronized(self) +} + +- (void)setResponse:(GTM_NULLABLE NSURLResponse *)response { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _response = response; + } // @synchronized(self) +} + +- (int64_t)bodyLength { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_bodyLength == NSURLSessionTransferSizeUnknown) { + if (_bodyData) { + _bodyLength = (int64_t)_bodyData.length; + } else if (_bodyFileURL) { + NSNumber *fileSizeNum = nil; + NSError *fileSizeError = nil; + if ([_bodyFileURL getResourceValue:&fileSizeNum + forKey:NSURLFileSizeKey + error:&fileSizeError]) { + _bodyLength = [fileSizeNum longLongValue]; + } + } + } + return _bodyLength; + } // @synchronized(self) +} + +- (BOOL)useUploadTask { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _useUploadTask; + } // @synchronized(self) +} + +- (void)setUseUploadTask:(BOOL)flag { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (flag != _useUploadTask) { + GTMSESSION_ASSERT_DEBUG(![self isFetchingUnsynchronized], + @"useUploadTask should not change after beginFetch has been invoked"); + _useUploadTask = flag; + } + } // @synchronized(self) +} + +- (GTM_NULLABLE NSURL *)bodyFileURL { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _bodyFileURL; + } // @synchronized(self) +} + +- (void)setBodyFileURL:(GTM_NULLABLE NSURL *)fileURL { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + // The comparison here is a trivial optimization and forgiveness for any client that + // repeatedly sets the property, so it just uses pointer comparison rather than isEqual:. + if (fileURL != _bodyFileURL) { + GTMSESSION_ASSERT_DEBUG(![self isFetchingUnsynchronized], + @"fileURL should not change after beginFetch has been invoked"); + + _bodyFileURL = fileURL; + } + } // @synchronized(self) +} + +- (GTM_NULLABLE GTMSessionFetcherBodyStreamProvider)bodyStreamProvider { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _bodyStreamProvider; + } // @synchronized(self) +} + +- (void)setBodyStreamProvider:(GTM_NULLABLE GTMSessionFetcherBodyStreamProvider)block { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + GTMSESSION_ASSERT_DEBUG(![self isFetchingUnsynchronized], + @"stream provider should not change after beginFetch has been invoked"); + + _bodyStreamProvider = [block copy]; + } // @synchronized(self) +} + +- (GTM_NULLABLE id)authorizer { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _authorizer; + } // @synchronized(self) +} + +- (void)setAuthorizer:(GTM_NULLABLE id)authorizer { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (authorizer != _authorizer) { + if ([self isFetchingUnsynchronized]) { + GTMSESSION_ASSERT_DEBUG(0, @"authorizer should not change after beginFetch has been invoked"); + } else { + _authorizer = authorizer; + } + } + } // @synchronized(self) +} + +- (GTM_NULLABLE NSData *)downloadedData { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _downloadedData; + } // @synchronized(self) +} + +- (void)setDownloadedData:(GTM_NULLABLE NSData *)data { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _downloadedData = [data mutableCopy]; + } // @synchronized(self) +} + +- (int64_t)downloadedLength { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _downloadedLength; + } // @synchronized(self) +} + +- (void)setDownloadedLength:(int64_t)length { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _downloadedLength = length; + } // @synchronized(self) +} + +- (dispatch_queue_t GTM_NONNULL_TYPE)callbackQueue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _callbackQueue; + } // @synchronized(self) +} + +- (void)setCallbackQueue:(dispatch_queue_t GTM_NULLABLE_TYPE)queue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _callbackQueue = queue ?: dispatch_get_main_queue(); + } // @synchronized(self) +} + +- (GTM_NULLABLE NSURLSession *)session { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _session; + } // @synchronized(self) +} + +- (NSInteger)servicePriority { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _servicePriority; + } // @synchronized(self) +} + +- (void)setServicePriority:(NSInteger)value { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (value != _servicePriority) { + GTMSESSION_ASSERT_DEBUG(![self isFetchingUnsynchronized], + @"servicePriority should not change after beginFetch has been invoked"); + + _servicePriority = value; + } + } // @synchronized(self) +} + + +- (void)setSession:(GTM_NULLABLE NSURLSession *)session { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _session = session; + } // @synchronized(self) +} + +- (BOOL)canShareSession { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _canShareSession; + } // @synchronized(self) +} + +- (void)setCanShareSession:(BOOL)flag { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _canShareSession = flag; + } // @synchronized(self) +} + +- (BOOL)useBackgroundSession { + // This reflects if the user requested a background session, not necessarily + // if one was created. That is tracked with _usingBackgroundSession. + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _userRequestedBackgroundSession; + } // @synchronized(self) +} + +- (void)setUseBackgroundSession:(BOOL)flag { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (flag != _userRequestedBackgroundSession) { + GTMSESSION_ASSERT_DEBUG(![self isFetchingUnsynchronized], + @"useBackgroundSession should not change after beginFetch has been invoked"); + + _userRequestedBackgroundSession = flag; + } + } // @synchronized(self) +} + +- (BOOL)isUsingBackgroundSession { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _usingBackgroundSession; + } // @synchronized(self) +} + +- (void)setUsingBackgroundSession:(BOOL)flag { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _usingBackgroundSession = flag; + } // @synchronized(self) +} + +- (GTM_NULLABLE NSURLSession *)sessionNeedingInvalidation { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _sessionNeedingInvalidation; + } // @synchronized(self) +} + +- (void)setSessionNeedingInvalidation:(GTM_NULLABLE NSURLSession *)session { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _sessionNeedingInvalidation = session; + } // @synchronized(self) +} + +- (NSOperationQueue * GTM_NONNULL_TYPE)sessionDelegateQueue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _delegateQueue; + } // @synchronized(self) +} + +- (void)setSessionDelegateQueue:(NSOperationQueue * GTM_NULLABLE_TYPE)queue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (queue != _delegateQueue) { + if ([self isFetchingUnsynchronized]) { + GTMSESSION_ASSERT_DEBUG(0, @"sessionDelegateQueue should not change after fetch begins"); + } else { + _delegateQueue = queue ?: [NSOperationQueue mainQueue]; + } + } + } // @synchronized(self) +} + +- (BOOL)userStoppedFetching { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _userStoppedFetching; + } // @synchronized(self) +} + +- (GTM_NULLABLE id)userData { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _userData; + } // @synchronized(self) +} + +- (void)setUserData:(GTM_NULLABLE id)theObj { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _userData = theObj; + } // @synchronized(self) +} + +- (GTM_NULLABLE NSURL *)destinationFileURL { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _destinationFileURL; + } // @synchronized(self) +} + +- (void)setDestinationFileURL:(GTM_NULLABLE NSURL *)destinationFileURL { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (((_destinationFileURL == nil) && (destinationFileURL == nil)) || + [_destinationFileURL isEqual:destinationFileURL]) { + return; + } + if (_sessionIdentifier) { + // This is something we don't expect to happen in production. + // However if it ever happen, leave a system log. + NSLog(@"%@: Destination File URL changed from (%@) to (%@) after session identifier has " + @"been created.", + [self class], _destinationFileURL, destinationFileURL); +#if DEBUG + // On both the simulator and devices, the path can change to the download file, but the name + // shouldn't change. Technically, this isn't supported in the fetcher, but the change of + // URL is expected to happen only across development runs through Xcode. + NSString *oldFilename = [_destinationFileURL lastPathComponent]; + NSString *newFilename = [destinationFileURL lastPathComponent]; + #pragma unused(oldFilename) + #pragma unused(newFilename) + GTMSESSION_ASSERT_DEBUG([oldFilename isEqualToString:newFilename], + @"Destination File URL cannot be changed after session identifier has been created"); +#endif + } + _destinationFileURL = destinationFileURL; + } // @synchronized(self) +} + +- (void)setProperties:(GTM_NULLABLE NSDictionary *)dict { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _properties = [dict mutableCopy]; + } // @synchronized(self) +} + +- (GTM_NULLABLE NSDictionary *)properties { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _properties; + } // @synchronized(self) +} + +- (void)setProperty:(GTM_NULLABLE id)obj forKey:(NSString *)key { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_properties == nil && obj != nil) { + _properties = [[NSMutableDictionary alloc] init]; + } + [_properties setValue:obj forKey:key]; + } // @synchronized(self) +} + +- (GTM_NULLABLE id)propertyForKey:(NSString *)key { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return [_properties objectForKey:key]; + } // @synchronized(self) +} + +- (void)addPropertiesFromDictionary:(NSDictionary *)dict { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_properties == nil && dict != nil) { + [self setProperties:[dict mutableCopy]]; + } else { + [_properties addEntriesFromDictionary:dict]; + } + } // @synchronized(self) +} + +- (void)setCommentWithFormat:(id)format, ... { +#if !STRIP_GTM_FETCH_LOGGING + NSString *result = format; + if (format) { + va_list argList; + va_start(argList, format); + + result = [[NSString alloc] initWithFormat:format + arguments:argList]; + va_end(argList); + } + [self setComment:result]; +#endif +} + +#if !STRIP_GTM_FETCH_LOGGING +- (NSData *)loggedStreamData { + return _loggedStreamData; +} + +- (void)appendLoggedStreamData:dataToAdd { + if (!_loggedStreamData) { + _loggedStreamData = [NSMutableData data]; + } + [_loggedStreamData appendData:dataToAdd]; +} + +- (void)clearLoggedStreamData { + _loggedStreamData = nil; +} + +- (void)setDeferResponseBodyLogging:(BOOL)deferResponseBodyLogging { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (deferResponseBodyLogging != _deferResponseBodyLogging) { + _deferResponseBodyLogging = deferResponseBodyLogging; + if (!deferResponseBodyLogging && !self.hasLoggedError) { + [_delegateQueue addOperationWithBlock:^{ + [self logNowWithError:nil]; + }]; + } + } + } // @synchronized(self) +} + +- (BOOL)deferResponseBodyLogging { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _deferResponseBodyLogging; + } // @synchronized(self) +} + +#else ++ (void)setLoggingEnabled:(BOOL)flag { +} + ++ (BOOL)isLoggingEnabled { + return NO; +} +#endif // STRIP_GTM_FETCH_LOGGING + +@end + +@implementation GTMSessionFetcher (BackwardsCompatibilityOnly) + +- (void)setCookieStorageMethod:(NSInteger)method { + // For backwards compatibility with the old fetcher, we'll support the old constants. + // + // Clients using the GTMSessionFetcher class should set the cookie storage explicitly + // themselves. + NSHTTPCookieStorage *storage = nil; + switch(method) { + case 0: // kGTMHTTPFetcherCookieStorageMethodStatic + // nil storage will use [[self class] staticCookieStorage] when the fetch begins. + break; + case 1: // kGTMHTTPFetcherCookieStorageMethodFetchHistory + // Do nothing; use whatever was set by the fetcher service. + return; + case 2: // kGTMHTTPFetcherCookieStorageMethodSystemDefault + storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + break; + case 3: // kGTMHTTPFetcherCookieStorageMethodNone + // Create temporary storage for this fetcher only. + storage = [[GTMSessionCookieStorage alloc] init]; + break; + default: + GTMSESSION_ASSERT_DEBUG(0, @"Invalid cookie storage method: %d", (int)method); + } + self.cookieStorage = storage; +} + +@end + +@implementation GTMSessionCookieStorage { + NSMutableArray *_cookies; + NSHTTPCookieAcceptPolicy _policy; +} + +- (id)init { + self = [super init]; + if (self != nil) { + _cookies = [[NSMutableArray alloc] init]; + } + return self; +} + +- (GTM_NULLABLE NSArray *)cookies { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return [_cookies copy]; + } // @synchronized(self) +} + +- (void)setCookie:(NSHTTPCookie *)cookie { + if (!cookie) return; + if (_policy == NSHTTPCookieAcceptPolicyNever) return; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + [self internalSetCookie:cookie]; + } // @synchronized(self) +} + +// Note: this should only be called from inside a @synchronized(self) block. +- (void)internalSetCookie:(NSHTTPCookie *)newCookie { + GTMSessionCheckSynchronized(self); + + if (_policy == NSHTTPCookieAcceptPolicyNever) return; + + BOOL isValidCookie = (newCookie.name.length > 0 + && newCookie.domain.length > 0 + && newCookie.path.length > 0); + GTMSESSION_ASSERT_DEBUG(isValidCookie, @"invalid cookie: %@", newCookie); + + if (isValidCookie) { + // Remove the cookie if it's currently in the array. + NSHTTPCookie *oldCookie = [self cookieMatchingCookie:newCookie]; + if (oldCookie) { + [_cookies removeObjectIdenticalTo:oldCookie]; + } + + if (![[self class] hasCookieExpired:newCookie]) { + [_cookies addObject:newCookie]; + } + } +} + +// Add all cookies in the new cookie array to the storage, +// replacing stored cookies as appropriate. +// +// Side effect: removes expired cookies from the storage array. +- (void)setCookies:(GTM_NULLABLE NSArray *)newCookies { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + [self removeExpiredCookies]; + + for (NSHTTPCookie *newCookie in newCookies) { + [self internalSetCookie:newCookie]; + } + } // @synchronized(self) +} + +- (void)setCookies:(NSArray *)cookies forURL:(GTM_NULLABLE NSURL *)URL mainDocumentURL:(GTM_NULLABLE NSURL *)mainDocumentURL { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_policy == NSHTTPCookieAcceptPolicyNever) { + return; + } + + if (_policy == NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain) { + NSString *mainHost = mainDocumentURL.host; + NSString *associatedHost = URL.host; + if (!mainHost || ![associatedHost hasSuffix:mainHost]) { + return; + } + } + } // @synchronized(self) + [self setCookies:cookies]; +} + +- (void)deleteCookie:(NSHTTPCookie *)cookie { + if (!cookie) return; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSHTTPCookie *foundCookie = [self cookieMatchingCookie:cookie]; + if (foundCookie) { + [_cookies removeObjectIdenticalTo:foundCookie]; + } + } // @synchronized(self) +} + +// Retrieve all cookies appropriate for the given URL, considering +// domain, path, cookie name, expiration, security setting. +// Side effect: removed expired cookies from the storage array. +- (GTM_NULLABLE NSArray *)cookiesForURL:(NSURL *)theURL { + NSMutableArray *foundCookies = nil; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + [self removeExpiredCookies]; + + // We'll prepend "." to the desired domain, since we want the + // actual domain "nytimes.com" to still match the cookie domain + // ".nytimes.com" when we check it below with hasSuffix. + NSString *host = theURL.host.lowercaseString; + NSString *path = theURL.path; + NSString *scheme = [theURL scheme]; + + NSString *requestingDomain = nil; + BOOL isLocalhostRetrieval = NO; + + if (IsLocalhost(host)) { + isLocalhostRetrieval = YES; + } else { + if (host.length > 0) { + requestingDomain = [@"." stringByAppendingString:host]; + } + } + + for (NSHTTPCookie *storedCookie in _cookies) { + NSString *cookieDomain = storedCookie.domain.lowercaseString; + NSString *cookiePath = storedCookie.path; + BOOL cookieIsSecure = [storedCookie isSecure]; + + BOOL isDomainOK; + + if (isLocalhostRetrieval) { + // Prior to 10.5.6, the domain stored into NSHTTPCookies for localhost + // is "localhost.local" + isDomainOK = (IsLocalhost(cookieDomain) + || [cookieDomain isEqual:@"localhost.local"]); + } else { + // Ensure we're matching exact domain names. We prepended a dot to the + // requesting domain, so we can also prepend one here if needed before + // checking if the request contains the cookie domain. + if (![cookieDomain hasPrefix:@"."]) { + cookieDomain = [@"." stringByAppendingString:cookieDomain]; + } + isDomainOK = [requestingDomain hasSuffix:cookieDomain]; + } + + BOOL isPathOK = [cookiePath isEqual:@"/"] || [path hasPrefix:cookiePath]; + BOOL isSecureOK = (!cookieIsSecure + || [scheme caseInsensitiveCompare:@"https"] == NSOrderedSame); + + if (isDomainOK && isPathOK && isSecureOK) { + if (foundCookies == nil) { + foundCookies = [NSMutableArray array]; + } + [foundCookies addObject:storedCookie]; + } + } + } // @synchronized(self) + return foundCookies; +} + +// Override methods from the NSHTTPCookieStorage (NSURLSessionTaskAdditions) category. +- (void)storeCookies:(NSArray *)cookies forTask:(NSURLSessionTask *)task { + NSURLRequest *currentRequest = task.currentRequest; + [self setCookies:cookies forURL:currentRequest.URL mainDocumentURL:nil]; +} + +- (void)getCookiesForTask:(NSURLSessionTask *)task + completionHandler:(void (^)(GTM_NSArrayOf(NSHTTPCookie *) *))completionHandler { + if (completionHandler) { + NSURLRequest *currentRequest = task.currentRequest; + NSURL *currentRequestURL = currentRequest.URL; + NSArray *cookies = [self cookiesForURL:currentRequestURL]; + completionHandler(cookies); + } +} + +// Return a cookie from the array with the same name, domain, and path as the +// given cookie, or else return nil if none found. +// +// Both the cookie being tested and all cookies in the storage array should +// be valid (non-nil name, domains, paths). +// +// Note: this should only be called from inside a @synchronized(self) block +- (GTM_NULLABLE NSHTTPCookie *)cookieMatchingCookie:(NSHTTPCookie *)cookie { + GTMSessionCheckSynchronized(self); + + NSString *name = cookie.name; + NSString *domain = cookie.domain; + NSString *path = cookie.path; + + GTMSESSION_ASSERT_DEBUG(name && domain && path, + @"Invalid stored cookie (name:%@ domain:%@ path:%@)", name, domain, path); + + for (NSHTTPCookie *storedCookie in _cookies) { + if ([storedCookie.name isEqual:name] + && [storedCookie.domain isEqual:domain] + && [storedCookie.path isEqual:path]) { + return storedCookie; + } + } + return nil; +} + +// Internal routine to remove any expired cookies from the array, excluding +// cookies with nil expirations. +// +// Note: this should only be called from inside a @synchronized(self) block +- (void)removeExpiredCookies { + GTMSessionCheckSynchronized(self); + + // Count backwards since we're deleting items from the array + for (NSInteger idx = (NSInteger)_cookies.count - 1; idx >= 0; idx--) { + NSHTTPCookie *storedCookie = [_cookies objectAtIndex:(NSUInteger)idx]; + if ([[self class] hasCookieExpired:storedCookie]) { + [_cookies removeObjectAtIndex:(NSUInteger)idx]; + } + } +} + ++ (BOOL)hasCookieExpired:(NSHTTPCookie *)cookie { + NSDate *expiresDate = [cookie expiresDate]; + if (expiresDate == nil) { + // Cookies seem to have a Expires property even when the expiresDate method returns nil. + id expiresVal = [[cookie properties] objectForKey:NSHTTPCookieExpires]; + if ([expiresVal isKindOfClass:[NSDate class]]) { + expiresDate = expiresVal; + } + } + BOOL hasExpired = (expiresDate != nil && [expiresDate timeIntervalSinceNow] < 0); + return hasExpired; +} + +- (void)removeAllCookies { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + [_cookies removeAllObjects]; + } // @synchronized(self) +} + +- (NSHTTPCookieAcceptPolicy)cookieAcceptPolicy { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _policy; + } // @synchronized(self) +} + +- (void)setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)cookieAcceptPolicy { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _policy = cookieAcceptPolicy; + } // @synchronized(self) +} + +@end + +void GTMSessionFetcherAssertValidSelector(id GTM_NULLABLE_TYPE obj, SEL GTM_NULLABLE_TYPE sel, ...) { + // Verify that the object's selector is implemented with the proper + // number and type of arguments +#if DEBUG + va_list argList; + va_start(argList, sel); + + if (obj && sel) { + // Check that the selector is implemented + if (![obj respondsToSelector:sel]) { + NSLog(@"\"%@\" selector \"%@\" is unimplemented or misnamed", + NSStringFromClass([(id)obj class]), + NSStringFromSelector((SEL)sel)); + NSCAssert(0, @"callback selector unimplemented or misnamed"); + } else { + const char *expectedArgType; + unsigned int argCount = 2; // skip self and _cmd + NSMethodSignature *sig = [obj methodSignatureForSelector:sel]; + + // Check that each expected argument is present and of the correct type + while ((expectedArgType = va_arg(argList, const char*)) != 0) { + + if ([sig numberOfArguments] > argCount) { + const char *foundArgType = [sig getArgumentTypeAtIndex:argCount]; + + if (0 != strncmp(foundArgType, expectedArgType, strlen(expectedArgType))) { + NSLog(@"\"%@\" selector \"%@\" argument %d should be type %s", + NSStringFromClass([(id)obj class]), + NSStringFromSelector((SEL)sel), (argCount - 2), expectedArgType); + NSCAssert(0, @"callback selector argument type mistake"); + } + } + argCount++; + } + + // Check that the proper number of arguments are present in the selector + if (argCount != [sig numberOfArguments]) { + NSLog(@"\"%@\" selector \"%@\" should have %d arguments", + NSStringFromClass([(id)obj class]), + NSStringFromSelector((SEL)sel), (argCount - 2)); + NSCAssert(0, @"callback selector arguments incorrect"); + } + } + } + + va_end(argList); +#endif +} + +NSString *GTMFetcherCleanedUserAgentString(NSString *str) { + // Reference http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html + // and http://www-archive.mozilla.org/build/user-agent-strings.html + + if (str == nil) return @""; + + NSMutableString *result = [NSMutableString stringWithString:str]; + + // Replace spaces and commas with underscores + [result replaceOccurrencesOfString:@" " + withString:@"_" + options:0 + range:NSMakeRange(0, result.length)]; + [result replaceOccurrencesOfString:@"," + withString:@"_" + options:0 + range:NSMakeRange(0, result.length)]; + + // Delete http token separators and remaining whitespace + static NSCharacterSet *charsToDelete = nil; + if (charsToDelete == nil) { + // Make a set of unwanted characters + NSString *const kSeparators = @"()<>@;:\\\"/[]?={}"; + + NSMutableCharacterSet *mutableChars = + [[NSCharacterSet whitespaceAndNewlineCharacterSet] mutableCopy]; + [mutableChars addCharactersInString:kSeparators]; + charsToDelete = [mutableChars copy]; // hang on to an immutable copy + } + + while (1) { + NSRange separatorRange = [result rangeOfCharacterFromSet:charsToDelete]; + if (separatorRange.location == NSNotFound) break; + + [result deleteCharactersInRange:separatorRange]; + }; + + return result; +} + +NSString *GTMFetcherSystemVersionString(void) { + static NSString *sSavedSystemString; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + // The Xcode 8 SDKs finally cleaned up this mess by providing TARGET_OS_OSX + // and TARGET_OS_IOS, but to build with older SDKs, those don't exist and + // instead one has to rely on TARGET_OS_MAC (which is true for iOS, watchOS, + // and tvOS) and TARGET_OS_IPHONE (which is true for iOS, watchOS, tvOS). So + // one has to order these carefully so you pick off the specific things + // first. + // If the code can ever assume Xcode 8 or higher (even when building for + // older OSes), then + // TARGET_OS_MAC -> TARGET_OS_OSX + // TARGET_OS_IPHONE -> TARGET_OS_IOS + // TARGET_IPHONE_SIMULATOR -> TARGET_OS_SIMULATOR +#if TARGET_OS_WATCH + // watchOS - WKInterfaceDevice + + WKInterfaceDevice *currentDevice = [WKInterfaceDevice currentDevice]; + + NSString *rawModel = [currentDevice model]; + NSString *model = GTMFetcherCleanedUserAgentString(rawModel); + + NSString *systemVersion = [currentDevice systemVersion]; + +#if TARGET_OS_SIMULATOR + NSString *hardwareModel = @"sim"; +#else + NSString *hardwareModel; + struct utsname unameRecord; + if (uname(&unameRecord) == 0) { + NSString *machineName = @(unameRecord.machine); + hardwareModel = GTMFetcherCleanedUserAgentString(machineName); + } + if (hardwareModel.length == 0) { + hardwareModel = @"unk"; + } +#endif + + sSavedSystemString = [[NSString alloc] initWithFormat:@"%@/%@ hw/%@", + model, systemVersion, hardwareModel]; + // Example: Apple_Watch/3.0 hw/Watch1_2 +#elif TARGET_OS_TV || TARGET_OS_IPHONE + // iOS and tvOS have UIDevice, use that. + UIDevice *currentDevice = [UIDevice currentDevice]; + + NSString *rawModel = [currentDevice model]; + NSString *model = GTMFetcherCleanedUserAgentString(rawModel); + + NSString *systemVersion = [currentDevice systemVersion]; + +#if TARGET_IPHONE_SIMULATOR || TARGET_OS_SIMULATOR + NSString *hardwareModel = @"sim"; +#else + NSString *hardwareModel; + struct utsname unameRecord; + if (uname(&unameRecord) == 0) { + NSString *machineName = @(unameRecord.machine); + hardwareModel = GTMFetcherCleanedUserAgentString(machineName); + } + if (hardwareModel.length == 0) { + hardwareModel = @"unk"; + } +#endif + + sSavedSystemString = [[NSString alloc] initWithFormat:@"%@/%@ hw/%@", + model, systemVersion, hardwareModel]; + // Example: iPod_Touch/2.2 hw/iPod1_1 + // Example: Apple_TV/9.2 hw/AppleTV5,3 +#elif TARGET_OS_MAC + // Mac build + NSProcessInfo *procInfo = [NSProcessInfo processInfo]; +#if !defined(MAC_OS_X_VERSION_10_10) + BOOL hasOperatingSystemVersion = NO; +#elif MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_10 + BOOL hasOperatingSystemVersion = + [procInfo respondsToSelector:@selector(operatingSystemVersion)]; +#else + BOOL hasOperatingSystemVersion = YES; +#endif + NSString *versString; + if (hasOperatingSystemVersion) { +#if defined(MAC_OS_X_VERSION_10_10) + // A reference to NSOperatingSystemVersion requires the 10.10 SDK. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" +// Disable unguarded availability warning as we can't use the @availability macro until we require +// all clients to build with Xcode 9 or above. + NSOperatingSystemVersion version = procInfo.operatingSystemVersion; +#pragma clang diagnostic pop + versString = [NSString stringWithFormat:@"%ld.%ld.%ld", + (long)version.majorVersion, (long)version.minorVersion, + (long)version.patchVersion]; +#else +#pragma unused(procInfo) +#endif + } else { + // With Gestalt inexplicably deprecated in 10.8, we're reduced to reading + // the system plist file. + NSString *const kPath = @"/System/Library/CoreServices/SystemVersion.plist"; + NSDictionary *plist = [NSDictionary dictionaryWithContentsOfFile:kPath]; + versString = [plist objectForKey:@"ProductVersion"]; + if (versString.length == 0) { + versString = @"10.?.?"; + } + } + + sSavedSystemString = [[NSString alloc] initWithFormat:@"MacOSX/%@", versString]; +#elif defined(_SYS_UTSNAME_H) + // Foundation-only build + struct utsname unameRecord; + uname(&unameRecord); + + sSavedSystemString = [NSString stringWithFormat:@"%s/%s", + unameRecord.sysname, unameRecord.release]; // "Darwin/8.11.1" +#else +#error No branch taken for a default user agent +#endif + }); + return sSavedSystemString; +} + +NSString *GTMFetcherStandardUserAgentString(NSBundle * GTM_NULLABLE_TYPE bundle) { + NSString *result = [NSString stringWithFormat:@"%@ %@", + GTMFetcherApplicationIdentifier(bundle), + GTMFetcherSystemVersionString()]; + return result; +} + +NSString *GTMFetcherApplicationIdentifier(NSBundle * GTM_NULLABLE_TYPE bundle) { + @synchronized([GTMSessionFetcher class]) { + static NSMutableDictionary *sAppIDMap = nil; + + // If there's a bundle ID, use that; otherwise, use the process name + if (bundle == nil) { + bundle = [NSBundle mainBundle]; + } + NSString *bundleID = [bundle bundleIdentifier]; + if (bundleID == nil) { + bundleID = @""; + } + + NSString *identifier = [sAppIDMap objectForKey:bundleID]; + if (identifier) return identifier; + + // Apps may add a string to the info.plist to uniquely identify different builds. + identifier = [bundle objectForInfoDictionaryKey:@"GTMUserAgentID"]; + if (identifier.length == 0) { + if (bundleID.length > 0) { + identifier = bundleID; + } else { + // Fall back on the procname, prefixed by "proc" to flag that it's + // autogenerated and perhaps unreliable + NSString *procName = [[NSProcessInfo processInfo] processName]; + identifier = [NSString stringWithFormat:@"proc_%@", procName]; + } + } + + // Clean up whitespace and special characters + identifier = GTMFetcherCleanedUserAgentString(identifier); + + // If there's a version number, append that + NSString *version = [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + if (version.length == 0) { + version = [bundle objectForInfoDictionaryKey:@"CFBundleVersion"]; + } + + // Clean up whitespace and special characters + version = GTMFetcherCleanedUserAgentString(version); + + // Glue the two together (cleanup done above or else cleanup would strip the + // slash) + if (version.length > 0) { + identifier = [identifier stringByAppendingFormat:@"/%@", version]; + } + + if (sAppIDMap == nil) { + sAppIDMap = [[NSMutableDictionary alloc] init]; + } + [sAppIDMap setObject:identifier forKey:bundleID]; + return identifier; + } +} + +#if DEBUG && (!defined(NS_BLOCK_ASSERTIONS) || GTMSESSION_ASSERT_AS_LOG) +@implementation GTMSessionSyncMonitorInternal { + NSValue *_objectKey; // The synchronize target object. + const char *_functionName; // The function containing the monitored sync block. +} + +- (instancetype)initWithSynchronizationObject:(id)object + allowRecursive:(BOOL)allowRecursive + functionName:(const char *)functionName { + self = [super init]; + if (self) { + Class threadKey = [GTMSessionSyncMonitorInternal class]; + _objectKey = [NSValue valueWithNonretainedObject:object]; + _functionName = functionName; + + NSMutableDictionary *threadDict = [NSThread currentThread].threadDictionary; + NSMutableDictionary *counters = threadDict[threadKey]; + if (counters == nil) { + counters = [NSMutableDictionary dictionary]; + threadDict[(id)threadKey] = counters; + } + NSCountedSet *functionNamesCounter = counters[_objectKey]; + NSUInteger numberOfSyncingFunctions = functionNamesCounter.count; + + if (!allowRecursive) { + BOOL isTopLevelSyncScope = (numberOfSyncingFunctions == 0); + NSArray *stack = [NSThread callStackSymbols]; + GTMSESSION_ASSERT_DEBUG(isTopLevelSyncScope, + @"*** Recursive sync on %@ at %s; previous sync at %@\n%@", + [object class], functionName, functionNamesCounter.allObjects, + [stack subarrayWithRange:NSMakeRange(1, stack.count - 1)]); + } + + if (!functionNamesCounter) { + functionNamesCounter = [NSCountedSet set]; + counters[_objectKey] = functionNamesCounter; + } + [functionNamesCounter addObject:(id _Nonnull)@(functionName)]; + } + return self; +} + +- (void)dealloc { + Class threadKey = [GTMSessionSyncMonitorInternal class]; + + NSMutableDictionary *threadDict = [NSThread currentThread].threadDictionary; + NSMutableDictionary *counters = threadDict[threadKey]; + NSCountedSet *functionNamesCounter = counters[_objectKey]; + NSString *functionNameStr = @(_functionName); + NSUInteger numberOfSyncsByThisFunction = [functionNamesCounter countForObject:functionNameStr]; + NSArray *stack = [NSThread callStackSymbols]; + GTMSESSION_ASSERT_DEBUG(numberOfSyncsByThisFunction > 0, @"Sync not found on %@ at %s\n%@", + [_objectKey.nonretainedObjectValue class], _functionName, + [stack subarrayWithRange:NSMakeRange(1, stack.count - 1)]); + [functionNamesCounter removeObject:functionNameStr]; + if (functionNamesCounter.count == 0) { + [counters removeObjectForKey:_objectKey]; + } +} + ++ (NSArray *)functionsHoldingSynchronizationOnObject:(id)object { + Class threadKey = [GTMSessionSyncMonitorInternal class]; + NSValue *localObjectKey = [NSValue valueWithNonretainedObject:object]; + + NSMutableDictionary *threadDict = [NSThread currentThread].threadDictionary; + NSMutableDictionary *counters = threadDict[threadKey]; + NSCountedSet *functionNamesCounter = counters[localObjectKey]; + return functionNamesCounter.count > 0 ? functionNamesCounter.allObjects : nil; +} +@end +#endif // DEBUG && (!defined(NS_BLOCK_ASSERTIONS) || GTMSESSION_ASSERT_AS_LOG) +GTM_ASSUME_NONNULL_END diff --git a/Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.h b/Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.h new file mode 100644 index 0000000..5ccea78 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.h @@ -0,0 +1,112 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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 "GTMSessionFetcher.h" + +// GTM HTTP Logging +// +// All traffic using GTMSessionFetcher can be easily logged. Call +// +// [GTMSessionFetcher setLoggingEnabled:YES]; +// +// to begin generating log files. +// +// Unless explicitly set by the application using +setLoggingDirectory:, +// logs are put into a default directory, located at: +// * macOS: ~/Desktop/GTMHTTPDebugLogs +// * iOS simulator: ~/GTMHTTPDebugLogs (in application sandbox) +// * iOS device: ~/Documents/GTMHTTPDebugLogs (in application sandbox) +// +// Tip: use the Finder's "Sort By Date" to find the most recent logs. +// +// Each run of an application gets a separate set of log files. An html +// file is generated to simplify browsing the run's http transactions. +// The html file includes javascript links for inline viewing of uploaded +// and downloaded data. +// +// A symlink is created in the logs folder to simplify finding the html file +// for the latest run of the application; the symlink is called +// +// AppName_http_log_newest.html +// +// For better viewing of XML logs, use Camino or Firefox rather than Safari. +// +// Each fetcher may be given a comment to be inserted as a label in the logs, +// such as +// [fetcher setCommentWithFormat:@"retrieve item %@", itemName]; +// +// Projects may define STRIP_GTM_FETCH_LOGGING to remove logging code. + +#if !STRIP_GTM_FETCH_LOGGING + +@interface GTMSessionFetcher (GTMSessionFetcherLogging) + +// Note: on macOS the default logs directory is ~/Desktop/GTMHTTPDebugLogs; on +// iOS simulators it will be the ~/GTMHTTPDebugLogs (in the app sandbox); on +// iOS devices it will be in ~/Documents/GTMHTTPDebugLogs (in the app sandbox). +// These directories will be created as needed, and are excluded from backups +// to iCloud and iTunes. +// +// If a custom directory is set, the directory should already exist. It is +// the application's responsibility to exclude any custom directory from +// backups, if desired. ++ (void)setLoggingDirectory:(NSString *)path; ++ (NSString *)loggingDirectory; + +// client apps can turn logging on and off ++ (void)setLoggingEnabled:(BOOL)isLoggingEnabled; ++ (BOOL)isLoggingEnabled; + +// client apps can turn off logging to a file if they want to only check +// the fetcher's log property ++ (void)setLoggingToFileEnabled:(BOOL)isLoggingToFileEnabled; ++ (BOOL)isLoggingToFileEnabled; + +// client apps can optionally specify process name and date string used in +// log file names ++ (void)setLoggingProcessName:(NSString *)processName; ++ (NSString *)loggingProcessName; + ++ (void)setLoggingDateStamp:(NSString *)dateStamp; ++ (NSString *)loggingDateStamp; + +// client apps can specify the directory for the log for this specific run, +// typically to match the directory used by another fetcher class, like: +// +// [GTMSessionFetcher setLogDirectoryForCurrentRun:[GTMHTTPFetcher logDirectoryForCurrentRun]]; +// +// Setting this overrides the logging directory, process name, and date stamp when writing +// the log file. ++ (void)setLogDirectoryForCurrentRun:(NSString *)logDirectoryForCurrentRun; ++ (NSString *)logDirectoryForCurrentRun; + +// Prunes old log directories that have not been modified since the provided date. +// This will not delete the current run's log directory. ++ (void)deleteLogDirectoriesOlderThanDate:(NSDate *)date; + +// internal; called by fetcher +- (void)logFetchWithError:(NSError *)error; +- (NSInputStream *)loggedInputStreamForInputStream:(NSInputStream *)inputStream; +- (GTMSessionFetcherBodyStreamProvider)loggedStreamProviderForStreamProvider: + (GTMSessionFetcherBodyStreamProvider)streamProvider; + +// internal; accessors useful for viewing logs ++ (NSString *)processNameLogPrefix; ++ (NSString *)symlinkNameSuffix; ++ (NSString *)htmlFileName; + +@end + +#endif // !STRIP_GTM_FETCH_LOGGING diff --git a/Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.m b/Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.m new file mode 100644 index 0000000..cdf5c17 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMSessionFetcherLogging.m @@ -0,0 +1,982 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#include +#include + +#import "GTMSessionFetcherLogging.h" + +#ifndef STRIP_GTM_FETCH_LOGGING + #error GTMSessionFetcher headers should have defaulted this if it wasn't already defined. +#endif + +#if !STRIP_GTM_FETCH_LOGGING + +// Sensitive credential strings are replaced in logs with _snip_ +// +// Apps that must see the contents of sensitive tokens can set this to 1 +#ifndef SKIP_GTM_FETCH_LOGGING_SNIPPING +#define SKIP_GTM_FETCH_LOGGING_SNIPPING 0 +#endif + +// If GTMReadMonitorInputStream is available, it can be used for +// capturing uploaded streams of data +// +// We locally declare methods of GTMReadMonitorInputStream so we +// do not need to import the header, as some projects may not have it available +#if !GTMSESSION_BUILD_COMBINED_SOURCES +@interface GTMReadMonitorInputStream : NSInputStream + ++ (instancetype)inputStreamWithStream:(NSInputStream *)input; + +@property (assign) id readDelegate; +@property (assign) SEL readSelector; + +@end +#else +@class GTMReadMonitorInputStream; +#endif // !GTMSESSION_BUILD_COMBINED_SOURCES + +@interface GTMSessionFetcher (GTMHTTPFetcherLoggingUtilities) + ++ (NSString *)headersStringForDictionary:(NSDictionary *)dict; ++ (NSString *)snipSubstringOfString:(NSString *)originalStr + betweenStartString:(NSString *)startStr + endString:(NSString *)endStr; +- (void)inputStream:(GTMReadMonitorInputStream *)stream + readIntoBuffer:(void *)buffer + length:(int64_t)length; + +@end + +@implementation GTMSessionFetcher (GTMSessionFetcherLogging) + +// fetchers come and fetchers go, but statics are forever +static BOOL gIsLoggingEnabled = NO; +static BOOL gIsLoggingToFile = YES; +static NSString *gLoggingDirectoryPath = nil; +static NSString *gLogDirectoryForCurrentRun = nil; +static NSString *gLoggingDateStamp = nil; +static NSString *gLoggingProcessName = nil; + ++ (void)setLoggingDirectory:(NSString *)path { + gLoggingDirectoryPath = [path copy]; +} + ++ (NSString *)loggingDirectory { + if (!gLoggingDirectoryPath) { + NSArray *paths = nil; +#if TARGET_IPHONE_SIMULATOR + // default to a directory called GTMHTTPDebugLogs into a sandbox-safe + // directory that a developer can find easily, the application home + paths = @[ NSHomeDirectory() ]; +#elif TARGET_OS_IPHONE + // Neither ~/Desktop nor ~/Home is writable on an actual iOS, watchOS, or tvOS device. + // Put it in ~/Documents. + paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); +#else + // default to a directory called GTMHTTPDebugLogs in the desktop folder + paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES); +#endif + + NSString *desktopPath = paths.firstObject; + if (desktopPath) { + NSString *const kGTMLogFolderName = @"GTMHTTPDebugLogs"; + NSString *logsFolderPath = [desktopPath stringByAppendingPathComponent:kGTMLogFolderName]; + + NSFileManager *fileMgr = [NSFileManager defaultManager]; + BOOL isDir; + BOOL doesFolderExist = [fileMgr fileExistsAtPath:logsFolderPath isDirectory:&isDir]; + if (!doesFolderExist) { + // make the directory + doesFolderExist = [fileMgr createDirectoryAtPath:logsFolderPath + withIntermediateDirectories:YES + attributes:nil + error:NULL]; + if (doesFolderExist) { + // The directory has been created. Exclude it from backups. + NSURL *pathURL = [NSURL fileURLWithPath:logsFolderPath isDirectory:YES]; + [pathURL setResourceValue:@YES forKey:NSURLIsExcludedFromBackupKey error:NULL]; + } + } + + if (doesFolderExist) { + // it's there; store it in the global + gLoggingDirectoryPath = [logsFolderPath copy]; + } + } + } + return gLoggingDirectoryPath; +} + ++ (void)setLogDirectoryForCurrentRun:(NSString *)logDirectoryForCurrentRun { + // Set the path for this run's logs. + gLogDirectoryForCurrentRun = [logDirectoryForCurrentRun copy]; +} + ++ (NSString *)logDirectoryForCurrentRun { + // make a directory for this run's logs, like SyncProto_logs_10-16_01-56-58PM + if (gLogDirectoryForCurrentRun) return gLogDirectoryForCurrentRun; + + NSString *parentDir = [self loggingDirectory]; + NSString *logNamePrefix = [self processNameLogPrefix]; + NSString *dateStamp = [self loggingDateStamp]; + NSString *dirName = [NSString stringWithFormat:@"%@%@", logNamePrefix, dateStamp]; + NSString *logDirectory = [parentDir stringByAppendingPathComponent:dirName]; + + if (gIsLoggingToFile) { + NSFileManager *fileMgr = [NSFileManager defaultManager]; + // Be sure that the first time this app runs, it's not writing to a preexisting folder + static BOOL gShouldReuseFolder = NO; + if (!gShouldReuseFolder) { + gShouldReuseFolder = YES; + NSString *origLogDir = logDirectory; + for (int ctr = 2; ctr < 20; ++ctr) { + if (![fileMgr fileExistsAtPath:logDirectory]) break; + + // append a digit + logDirectory = [origLogDir stringByAppendingFormat:@"_%d", ctr]; + } + } + if (![fileMgr createDirectoryAtPath:logDirectory + withIntermediateDirectories:YES + attributes:nil + error:NULL]) return nil; + } + gLogDirectoryForCurrentRun = logDirectory; + + return gLogDirectoryForCurrentRun; +} + ++ (void)setLoggingEnabled:(BOOL)isLoggingEnabled { + gIsLoggingEnabled = isLoggingEnabled; +} + ++ (BOOL)isLoggingEnabled { + return gIsLoggingEnabled; +} + ++ (void)setLoggingToFileEnabled:(BOOL)isLoggingToFileEnabled { + gIsLoggingToFile = isLoggingToFileEnabled; +} + ++ (BOOL)isLoggingToFileEnabled { + return gIsLoggingToFile; +} + ++ (void)setLoggingProcessName:(NSString *)processName { + gLoggingProcessName = [processName copy]; +} + ++ (NSString *)loggingProcessName { + // get the process name (once per run) replacing spaces with underscores + if (!gLoggingProcessName) { + NSString *procName = [[NSProcessInfo processInfo] processName]; + gLoggingProcessName = [procName stringByReplacingOccurrencesOfString:@" " withString:@"_"]; + } + return gLoggingProcessName; +} + ++ (void)setLoggingDateStamp:(NSString *)dateStamp { + gLoggingDateStamp = [dateStamp copy]; +} + ++ (NSString *)loggingDateStamp { + // We'll pick one date stamp per run, so a run that starts at a later second + // will get a unique results html file + if (!gLoggingDateStamp) { + // produce a string like 08-21_01-41-23PM + + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + [formatter setFormatterBehavior:NSDateFormatterBehavior10_4]; + [formatter setDateFormat:@"M-dd_hh-mm-ssa"]; + + gLoggingDateStamp = [formatter stringFromDate:[NSDate date]]; + } + return gLoggingDateStamp; +} + ++ (NSString *)processNameLogPrefix { + static NSString *gPrefix = nil; + if (!gPrefix) { + NSString *processName = [self loggingProcessName]; + gPrefix = [[NSString alloc] initWithFormat:@"%@_log_", processName]; + } + return gPrefix; +} + ++ (NSString *)symlinkNameSuffix { + return @"_log_newest.html"; +} + ++ (NSString *)htmlFileName { + return @"aperçu_http_log.html"; +} + ++ (void)deleteLogDirectoriesOlderThanDate:(NSDate *)cutoffDate { + NSFileManager *fileMgr = [NSFileManager defaultManager]; + NSURL *parentDir = [NSURL fileURLWithPath:[[self class] loggingDirectory]]; + NSURL *logDirectoryForCurrentRun = + [NSURL fileURLWithPath:[[self class] logDirectoryForCurrentRun]]; + NSError *error; + NSArray *contents = [fileMgr contentsOfDirectoryAtURL:parentDir + includingPropertiesForKeys:@[ NSURLContentModificationDateKey ] + options:0 + error:&error]; + for (NSURL *itemURL in contents) { + if ([itemURL isEqual:logDirectoryForCurrentRun]) continue; + + NSDate *modDate; + if ([itemURL getResourceValue:&modDate + forKey:NSURLContentModificationDateKey + error:&error]) { + if ([modDate compare:cutoffDate] == NSOrderedAscending) { + if (![fileMgr removeItemAtURL:itemURL error:&error]) { + NSLog(@"deleteLogDirectoriesOlderThanDate failed to delete %@: %@", + itemURL.path, error); + } + } + } else { + NSLog(@"deleteLogDirectoriesOlderThanDate failed to get mod date of %@: %@", + itemURL.path, error); + } + } +} + +// formattedStringFromData returns a prettyprinted string for XML or JSON input, +// and a plain string for other input data +- (NSString *)formattedStringFromData:(NSData *)inputData + contentType:(NSString *)contentType + JSON:(NSDictionary **)outJSON { + if (!inputData) return nil; + + // if the content type is JSON and we have the parsing class available, use that + if ([contentType hasPrefix:@"application/json"] && inputData.length > 5) { + // convert from JSON string to NSObjects and back to a formatted string + NSMutableDictionary *obj = [NSJSONSerialization JSONObjectWithData:inputData + options:NSJSONReadingMutableContainers + error:NULL]; + if (obj) { + if (outJSON) *outJSON = obj; + if ([obj isKindOfClass:[NSMutableDictionary class]]) { + // for security and privacy, omit OAuth 2 response access and refresh tokens + if ([obj valueForKey:@"refresh_token"] != nil) { + [obj setObject:@"_snip_" forKey:@"refresh_token"]; + } + if ([obj valueForKey:@"access_token"] != nil) { + [obj setObject:@"_snip_" forKey:@"access_token"]; + } + } + NSData *data = [NSJSONSerialization dataWithJSONObject:obj + options:NSJSONWritingPrettyPrinted + error:NULL]; + if (data) { + NSString *jsonStr = [[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding]; + return jsonStr; + } + } + } + +#if !TARGET_OS_IPHONE && !GTM_SKIP_LOG_XMLFORMAT + // verify that this data starts with the bytes indicating XML + + NSString *const kXMLLintPath = @"/usr/bin/xmllint"; + static BOOL gHasCheckedAvailability = NO; + static BOOL gIsXMLLintAvailable = NO; + + if (!gHasCheckedAvailability) { + gIsXMLLintAvailable = [[NSFileManager defaultManager] fileExistsAtPath:kXMLLintPath]; + gHasCheckedAvailability = YES; + } + if (gIsXMLLintAvailable + && inputData.length > 5 + && strncmp(inputData.bytes, " 0) { + // success + inputData = formattedData; + } + } +#else + // we can't call external tasks on the iPhone; leave the XML unformatted +#endif + + NSString *dataStr = [[NSString alloc] initWithData:inputData + encoding:NSUTF8StringEncoding]; + return dataStr; +} + +// stringFromStreamData creates a string given the supplied data +// +// If NSString can create a UTF-8 string from the data, then that is returned. +// +// Otherwise, this routine tries to find a MIME boundary at the beginning of the data block, and +// uses that to break up the data into parts. Each part will be used to try to make a UTF-8 string. +// For parts that fail, a replacement string showing the part header and <> is supplied +// in place of the binary data. + +- (NSString *)stringFromStreamData:(NSData *)data + contentType:(NSString *)contentType { + + if (!data) return nil; + + // optimistically, see if the whole data block is UTF-8 + NSString *streamDataStr = [self formattedStringFromData:data + contentType:contentType + JSON:NULL]; + if (streamDataStr) return streamDataStr; + + // Munge a buffer by replacing non-ASCII bytes with underscores, and turn that munged buffer an + // NSString. That gives us a string we can use with NSScanner. + NSMutableData *mutableData = [NSMutableData dataWithData:data]; + unsigned char *bytes = (unsigned char *)mutableData.mutableBytes; + + for (unsigned int idx = 0; idx < mutableData.length; ++idx) { + if (bytes[idx] > 0x7F || bytes[idx] == 0) { + bytes[idx] = '_'; + } + } + + NSString *mungedStr = [[NSString alloc] initWithData:mutableData + encoding:NSUTF8StringEncoding]; + if (mungedStr) { + + // scan for the boundary string + NSString *boundary = nil; + NSScanner *scanner = [NSScanner scannerWithString:mungedStr]; + + if ([scanner scanUpToString:@"\r\n" intoString:&boundary] + && [boundary hasPrefix:@"--"]) { + + // we found a boundary string; use it to divide the string into parts + NSArray *mungedParts = [mungedStr componentsSeparatedByString:boundary]; + + // look at each munged part in the original string, and try to convert those into UTF-8 + NSMutableArray *origParts = [NSMutableArray array]; + NSUInteger offset = 0; + for (NSString *mungedPart in mungedParts) { + NSUInteger partSize = mungedPart.length; + NSData *origPartData = [data subdataWithRange:NSMakeRange(offset, partSize)]; + NSString *origPartStr = [[NSString alloc] initWithData:origPartData + encoding:NSUTF8StringEncoding]; + if (origPartStr) { + // we could make this original part into UTF-8; use the string + [origParts addObject:origPartStr]; + } else { + // this part can't be made into UTF-8; scan the header, if we can + NSString *header = nil; + NSScanner *headerScanner = [NSScanner scannerWithString:mungedPart]; + if (![headerScanner scanUpToString:@"\r\n\r\n" intoString:&header]) { + // we couldn't find a header + header = @""; + } + // make a part string with the header and <> + NSString *binStr = [NSString stringWithFormat:@"\r%@\r<<%lu bytes>>\r", + header, (long)(partSize - header.length)]; + [origParts addObject:binStr]; + } + offset += partSize + boundary.length; + } + // rejoin the original parts + streamDataStr = [origParts componentsJoinedByString:boundary]; + } + } + if (!streamDataStr) { + // give up; just make a string showing the uploaded bytes + streamDataStr = [NSString stringWithFormat:@"<<%u bytes>>", (unsigned int)data.length]; + } + return streamDataStr; +} + +// logFetchWithError is called following a successful or failed fetch attempt +// +// This method does all the work for appending to and creating log files + +- (void)logFetchWithError:(NSError *)error { + if (![[self class] isLoggingEnabled]) return; + NSString *logDirectory = [[self class] logDirectoryForCurrentRun]; + if (!logDirectory) return; + NSString *processName = [[self class] loggingProcessName]; + + // TODO: add Javascript to display response data formatted in hex + + // each response's NSData goes into its own xml or txt file, though all responses for this run of + // the app share a main html file. This counter tracks all fetch responses for this app run. + // + // we'll use a local variable since this routine may be reentered while waiting for XML formatting + // to be completed by an external task + static int gResponseCounter = 0; + int responseCounter = ++gResponseCounter; + + NSURLResponse *response = [self response]; + NSDictionary *responseHeaders = [self responseHeaders]; + NSString *responseDataStr = nil; + NSDictionary *responseJSON = nil; + + // if there's response data, decide what kind of file to put it in based on the first bytes of the + // file or on the mime type supplied by the server + NSString *responseMIMEType = [response MIMEType]; + BOOL isResponseImage = NO; + + // file name for an image data file + NSString *responseDataFileName = nil; + + int64_t responseDataLength = self.downloadedLength; + if (responseDataLength > 0) { + NSData *downloadedData = self.downloadedData; + if (downloadedData == nil + && responseDataLength > 0 + && responseDataLength < 20000 + && self.destinationFileURL) { + // There's a download file that's not too big, so get the data to display from the downloaded + // file. + NSURL *destinationURL = self.destinationFileURL; + downloadedData = [NSData dataWithContentsOfURL:destinationURL]; + } + NSString *responseType = [responseHeaders valueForKey:@"Content-Type"]; + responseDataStr = [self formattedStringFromData:downloadedData + contentType:responseType + JSON:&responseJSON]; + NSString *responseDataExtn = nil; + NSData *dataToWrite = nil; + if (responseDataStr) { + // we were able to make a UTF-8 string from the response data + if ([responseMIMEType isEqual:@"application/atom+xml"] + || [responseMIMEType hasSuffix:@"/xml"]) { + responseDataExtn = @"xml"; + dataToWrite = [responseDataStr dataUsingEncoding:NSUTF8StringEncoding]; + } + } else if ([responseMIMEType isEqual:@"image/jpeg"]) { + responseDataExtn = @"jpg"; + dataToWrite = downloadedData; + isResponseImage = YES; + } else if ([responseMIMEType isEqual:@"image/gif"]) { + responseDataExtn = @"gif"; + dataToWrite = downloadedData; + isResponseImage = YES; + } else if ([responseMIMEType isEqual:@"image/png"]) { + responseDataExtn = @"png"; + dataToWrite = downloadedData; + isResponseImage = YES; + } else { + // add more non-text types here + } + // if we have an extension, save the raw data in a file with that extension + if (responseDataExtn && dataToWrite) { + // generate a response file base name like + NSString *responseBaseName = [NSString stringWithFormat:@"fetch_%d_response", responseCounter]; + responseDataFileName = [responseBaseName stringByAppendingPathExtension:responseDataExtn]; + NSString *responseDataFilePath = [logDirectory stringByAppendingPathComponent:responseDataFileName]; + + NSError *downloadedError = nil; + if (gIsLoggingToFile && ![dataToWrite writeToFile:responseDataFilePath + options:0 + error:&downloadedError]) { + NSLog(@"%@ logging write error:%@ (%@)", [self class], downloadedError, responseDataFileName); + } + } + } + // we'll have one main html file per run of the app + NSString *htmlName = [[self class] htmlFileName]; + NSString *htmlPath =[logDirectory stringByAppendingPathComponent:htmlName]; + + // if the html file exists (from logging previous fetches) we don't need + // to re-write the header or the scripts + NSFileManager *fileMgr = [NSFileManager defaultManager]; + BOOL didFileExist = [fileMgr fileExistsAtPath:htmlPath]; + + NSMutableString* outputHTML = [NSMutableString string]; + + // we need a header to say we'll have UTF-8 text + if (!didFileExist) { + [outputHTML appendFormat:@"%@ HTTP fetch log %@", + processName, [[self class] loggingDateStamp]]; + } + // now write the visible html elements + NSString *copyableFileName = [NSString stringWithFormat:@"fetch_%d.txt", responseCounter]; + + NSDate *now = [NSDate date]; + // write the date & time, the comment, and the link to the plain-text (copyable) log + [outputHTML appendFormat:@"%@      ", now]; + + NSString *comment = [self comment]; + if (comment.length > 0) { + [outputHTML appendFormat:@"%@      ", comment]; + } + [outputHTML appendFormat:@"
    request/response log
    ", copyableFileName]; + NSTimeInterval elapsed = -self.initialBeginFetchDate.timeIntervalSinceNow; + [outputHTML appendFormat:@"elapsed: %5.3fsec
    ", elapsed]; + + // write the request URL + NSURLRequest *request = self.request; + NSString *requestMethod = request.HTTPMethod; + NSURL *requestURL = request.URL; + + // Save the request URL for next time in case this redirects. + NSString *redirectedFromURLString = [self.redirectedFromURL absoluteString]; + self.redirectedFromURL = [requestURL copy]; + if (redirectedFromURLString) { + [outputHTML appendFormat:@"redirected from %@
    ", + redirectedFromURLString]; + } + [outputHTML appendFormat:@"request: %@ %@
    \n", requestMethod, requestURL]; + + // write the request headers + NSDictionary *requestHeaders = request.allHTTPHeaderFields; + NSUInteger numberOfRequestHeaders = requestHeaders.count; + if (numberOfRequestHeaders > 0) { + // Indicate if the request is authorized; warn if the request is authorized but non-SSL + NSString *auth = [requestHeaders objectForKey:@"Authorization"]; + NSString *headerDetails = @""; + if (auth) { + BOOL isInsecure = [[requestURL scheme] isEqual:@"http"]; + if (isInsecure) { + // 26A0 = ⚠ + headerDetails = + @"   authorized, non-SSL "; + } else { + headerDetails = @"   authorized"; + } + } + NSString *cookiesHdr = [requestHeaders objectForKey:@"Cookie"]; + if (cookiesHdr) { + headerDetails = [headerDetails stringByAppendingString:@"   cookies"]; + } + NSString *matchHdr = [requestHeaders objectForKey:@"If-Match"]; + if (matchHdr) { + headerDetails = [headerDetails stringByAppendingString:@"   if-match"]; + } + matchHdr = [requestHeaders objectForKey:@"If-None-Match"]; + if (matchHdr) { + headerDetails = [headerDetails stringByAppendingString:@"   if-none-match"]; + } + [outputHTML appendFormat:@"   headers: %d %@
    ", + (int)numberOfRequestHeaders, headerDetails]; + } else { + [outputHTML appendFormat:@"   headers: none
    "]; + } + // write the request post data + NSData *bodyData = nil; + NSData *loggedStreamData = self.loggedStreamData; + if (loggedStreamData) { + bodyData = loggedStreamData; + } else { + bodyData = self.bodyData; + if (bodyData == nil) { + bodyData = self.request.HTTPBody; + } + } + uint64_t bodyDataLength = bodyData.length; + + if (bodyData.length == 0) { + // If the data is in a body upload file URL, read that in if it's not huge. + NSURL *bodyFileURL = self.bodyFileURL; + if (bodyFileURL) { + NSNumber *fileSizeNum = nil; + NSError *fileSizeError = nil; + if ([bodyFileURL getResourceValue:&fileSizeNum + forKey:NSURLFileSizeKey + error:&fileSizeError]) { + bodyDataLength = [fileSizeNum unsignedLongLongValue]; + if (bodyDataLength > 0 && bodyDataLength < 50000) { + bodyData = [NSData dataWithContentsOfURL:bodyFileURL + options:NSDataReadingUncached + error:&fileSizeError]; + } + } + } + } + NSString *bodyDataStr = nil; + NSString *postType = [requestHeaders valueForKey:@"Content-Type"]; + + if (bodyDataLength > 0) { + [outputHTML appendFormat:@"   data: %llu bytes, %@
    \n", + bodyDataLength, postType ? postType : @"(no type)"]; + NSString *logRequestBody = self.logRequestBody; + if (logRequestBody) { + bodyDataStr = [logRequestBody copy]; + self.logRequestBody = nil; + } else { + bodyDataStr = [self stringFromStreamData:bodyData + contentType:postType]; + if (bodyDataStr) { + // remove OAuth 2 client secret and refresh token + bodyDataStr = [[self class] snipSubstringOfString:bodyDataStr + betweenStartString:@"client_secret=" + endString:@"&"]; + bodyDataStr = [[self class] snipSubstringOfString:bodyDataStr + betweenStartString:@"refresh_token=" + endString:@"&"]; + // remove ClientLogin password + bodyDataStr = [[self class] snipSubstringOfString:bodyDataStr + betweenStartString:@"&Passwd=" + endString:@"&"]; + } + } + } else { + // no post data + } + // write the response status, MIME type, URL + NSInteger status = [self statusCode]; + if (response) { + NSString *statusString = @""; + if (status != 0) { + if (status == 200 || status == 201) { + statusString = [NSString stringWithFormat:@"%ld", (long)status]; + + // report any JSON-RPC error + if ([responseJSON isKindOfClass:[NSDictionary class]]) { + NSDictionary *jsonError = [responseJSON objectForKey:@"error"]; + if ([jsonError isKindOfClass:[NSDictionary class]]) { + NSString *jsonCode = [[jsonError valueForKey:@"code"] description]; + NSString *jsonMessage = [jsonError valueForKey:@"message"]; + if (jsonCode || jsonMessage) { + // 2691 = ⚑ + NSString *const jsonErrFmt = + @"   JSON error: %@ %@  ⚑"; + statusString = [statusString stringByAppendingFormat:jsonErrFmt, + jsonCode ? jsonCode : @"", + jsonMessage ? jsonMessage : @""]; + } + } + } + } else { + // purple for anything other than 200 or 201 + NSString *flag = status >= 400 ? @" ⚑" : @""; // 2691 = ⚑ + NSString *explanation = [NSHTTPURLResponse localizedStringForStatusCode:status]; + NSString *const statusFormat = @"%ld %@ %@"; + statusString = [NSString stringWithFormat:statusFormat, (long)status, explanation, flag]; + } + } + // show the response URL only if it's different from the request URL + NSString *responseURLStr = @""; + NSURL *responseURL = response.URL; + + if (responseURL && ![responseURL isEqual:request.URL]) { + NSString *const responseURLFormat = + @"response URL: %@
    \n"; + responseURLStr = [NSString stringWithFormat:responseURLFormat, [responseURL absoluteString]]; + } + [outputHTML appendFormat:@"response:  status %@
    \n%@", + statusString, responseURLStr]; + // Write the response headers + NSUInteger numberOfResponseHeaders = responseHeaders.count; + if (numberOfResponseHeaders > 0) { + // Indicate if the server is setting cookies + NSString *cookiesSet = [responseHeaders valueForKey:@"Set-Cookie"]; + NSString *cookiesStr = + cookiesSet ? @"  sets cookies" : @""; + // Indicate if the server is redirecting + NSString *location = [responseHeaders valueForKey:@"Location"]; + BOOL isRedirect = status >= 300 && status <= 399 && location != nil; + NSString *redirectsStr = + isRedirect ? @"  redirects" : @""; + [outputHTML appendFormat:@"   headers: %d %@ %@
    \n", + (int)numberOfResponseHeaders, cookiesStr, redirectsStr]; + } else { + [outputHTML appendString:@"   headers: none
    \n"]; + } + } + // error + if (error) { + [outputHTML appendFormat:@"Error: %@
    \n", error.description]; + } + // Write the response data + if (responseDataFileName) { + if (isResponseImage) { + // Make a small inline image that links to the full image file + [outputHTML appendFormat:@"   data: %lld bytes, %@
    ", + responseDataLength, responseMIMEType]; + NSString *const fmt = + @"image\n"; + [outputHTML appendFormat:fmt, responseDataFileName, responseDataFileName]; + } else { + // The response data was XML; link to the xml file + NSString *const fmt = + @"   data: %lld bytes, %@   %@\n"; + [outputHTML appendFormat:fmt, responseDataLength, responseMIMEType, + responseDataFileName, [responseDataFileName pathExtension]]; + } + } else { + // The response data was not an image; just show the length and MIME type + [outputHTML appendFormat:@"   data: %lld bytes, %@\n", + responseDataLength, responseMIMEType ? responseMIMEType : @"(no response type)"]; + } + // Make a single string of the request and response, suitable for copying + // to the clipboard and pasting into a bug report + NSMutableString *copyable = [NSMutableString string]; + if (comment) { + [copyable appendFormat:@"%@\n\n", comment]; + } + [copyable appendFormat:@"%@ elapsed: %5.3fsec\n", now, elapsed]; + if (redirectedFromURLString) { + [copyable appendFormat:@"Redirected from %@\n", redirectedFromURLString]; + } + [copyable appendFormat:@"Request: %@ %@\n", requestMethod, requestURL]; + if (requestHeaders.count > 0) { + [copyable appendFormat:@"Request headers:\n%@\n", + [[self class] headersStringForDictionary:requestHeaders]]; + } + if (bodyDataLength > 0) { + [copyable appendFormat:@"Request body: (%llu bytes)\n", bodyDataLength]; + if (bodyDataStr) { + [copyable appendFormat:@"%@\n", bodyDataStr]; + } + [copyable appendString:@"\n"]; + } + if (response) { + [copyable appendFormat:@"Response: status %d\n", (int) status]; + [copyable appendFormat:@"Response headers:\n%@\n", + [[self class] headersStringForDictionary:responseHeaders]]; + [copyable appendFormat:@"Response body: (%lld bytes)\n", responseDataLength]; + if (responseDataLength > 0) { + NSString *logResponseBody = self.logResponseBody; + if (logResponseBody) { + // The user has provided the response body text. + responseDataStr = [logResponseBody copy]; + self.logResponseBody = nil; + } + if (responseDataStr != nil) { + [copyable appendFormat:@"%@\n", responseDataStr]; + } else { + // Even though it's redundant, we'll put in text to indicate that all the bytes are binary. + if (self.destinationFileURL) { + [copyable appendFormat:@"<<%lld bytes>> to file %@\n", + responseDataLength, self.destinationFileURL.path]; + } else { + [copyable appendFormat:@"<<%lld bytes>>\n", responseDataLength]; + } + } + } + } + if (error) { + [copyable appendFormat:@"Error: %@\n", error]; + } + // Save to log property before adding the separator + self.log = copyable; + + [copyable appendString:@"-----------------------------------------------------------\n"]; + + // Write the copyable version to another file (linked to at the top of the html file, above) + // + // Ideally, something to just copy this to the clipboard like + // Copy here." + // would work everywhere, but it only works in Safari as of 8/2010 + if (gIsLoggingToFile) { + NSString *parentDir = [[self class] loggingDirectory]; + NSString *copyablePath = [logDirectory stringByAppendingPathComponent:copyableFileName]; + NSError *copyableError = nil; + if (![copyable writeToFile:copyablePath + atomically:NO + encoding:NSUTF8StringEncoding + error:©ableError]) { + // Error writing to file + NSLog(@"%@ logging write error:%@ (%@)", [self class], copyableError, copyablePath); + } + [outputHTML appendString:@"

    "]; + + // Append the HTML to the main output file + const char* htmlBytes = outputHTML.UTF8String; + NSOutputStream *stream = [NSOutputStream outputStreamToFileAtPath:htmlPath + append:YES]; + [stream open]; + [stream write:(const uint8_t *) htmlBytes maxLength:strlen(htmlBytes)]; + [stream close]; + + // Make a symlink to the latest html + NSString *const symlinkNameSuffix = [[self class] symlinkNameSuffix]; + NSString *symlinkName = [processName stringByAppendingString:symlinkNameSuffix]; + NSString *symlinkPath = [parentDir stringByAppendingPathComponent:symlinkName]; + + [fileMgr removeItemAtPath:symlinkPath error:NULL]; + [fileMgr createSymbolicLinkAtPath:symlinkPath + withDestinationPath:htmlPath + error:NULL]; +#if TARGET_OS_IPHONE + static BOOL gReportedLoggingPath = NO; + if (!gReportedLoggingPath) { + gReportedLoggingPath = YES; + NSLog(@"GTMSessionFetcher logging to \"%@\"", parentDir); + } +#endif + } +} + +- (NSInputStream *)loggedInputStreamForInputStream:(NSInputStream *)inputStream { + if (!inputStream) return nil; + if (![GTMSessionFetcher isLoggingEnabled]) return inputStream; + + [self clearLoggedStreamData]; // Clear any previous data. + Class monitorClass = NSClassFromString(@"GTMReadMonitorInputStream"); + if (!monitorClass) { + NSString const *str = @"<>"; + NSData *stringData = [str dataUsingEncoding:NSUTF8StringEncoding]; + [self appendLoggedStreamData:stringData]; + return inputStream; + } + inputStream = [monitorClass inputStreamWithStream:inputStream]; + + GTMReadMonitorInputStream *readMonitorInputStream = (GTMReadMonitorInputStream *)inputStream; + [readMonitorInputStream setReadDelegate:self]; + SEL readSel = @selector(inputStream:readIntoBuffer:length:); + [readMonitorInputStream setReadSelector:readSel]; + + return inputStream; +} + +- (GTMSessionFetcherBodyStreamProvider)loggedStreamProviderForStreamProvider: + (GTMSessionFetcherBodyStreamProvider)streamProvider { + if (!streamProvider) return nil; + if (![GTMSessionFetcher isLoggingEnabled]) return streamProvider; + + [self clearLoggedStreamData]; // Clear any previous data. + Class monitorClass = NSClassFromString(@"GTMReadMonitorInputStream"); + if (!monitorClass) { + NSString const *str = @"<>"; + NSData *stringData = [str dataUsingEncoding:NSUTF8StringEncoding]; + [self appendLoggedStreamData:stringData]; + return streamProvider; + } + GTMSessionFetcherBodyStreamProvider loggedStreamProvider = + ^(GTMSessionFetcherBodyStreamProviderResponse response) { + streamProvider(^(NSInputStream *bodyStream) { + bodyStream = [self loggedInputStreamForInputStream:bodyStream]; + response(bodyStream); + }); + }; + return loggedStreamProvider; +} + +@end + +@implementation GTMSessionFetcher (GTMSessionFetcherLoggingUtilities) + +- (void)inputStream:(GTMReadMonitorInputStream *)stream + readIntoBuffer:(void *)buffer + length:(int64_t)length { + // append the captured data + NSData *data = [NSData dataWithBytesNoCopy:buffer + length:(NSUInteger)length + freeWhenDone:NO]; + [self appendLoggedStreamData:data]; +} + +#pragma mark Fomatting Utilities + ++ (NSString *)snipSubstringOfString:(NSString *)originalStr + betweenStartString:(NSString *)startStr + endString:(NSString *)endStr { +#if SKIP_GTM_FETCH_LOGGING_SNIPPING + return originalStr; +#else + if (!originalStr) return nil; + + // Find the start string, and replace everything between it + // and the end string (or the end of the original string) with "_snip_" + NSRange startRange = [originalStr rangeOfString:startStr]; + if (startRange.location == NSNotFound) return originalStr; + + // We found the start string + NSUInteger originalLength = originalStr.length; + NSUInteger startOfTarget = NSMaxRange(startRange); + NSRange targetAndRest = NSMakeRange(startOfTarget, originalLength - startOfTarget); + NSRange endRange = [originalStr rangeOfString:endStr + options:0 + range:targetAndRest]; + NSRange replaceRange; + if (endRange.location == NSNotFound) { + // Found no end marker so replace to end of string + replaceRange = targetAndRest; + } else { + // Replace up to the endStr + replaceRange = NSMakeRange(startOfTarget, endRange.location - startOfTarget); + } + NSString *result = [originalStr stringByReplacingCharactersInRange:replaceRange + withString:@"_snip_"]; + return result; +#endif // SKIP_GTM_FETCH_LOGGING_SNIPPING +} + ++ (NSString *)headersStringForDictionary:(NSDictionary *)dict { + // Format the dictionary in http header style, like + // Accept: application/json + // Cache-Control: no-cache + // Content-Type: application/json; charset=utf-8 + // + // Pad the key names, but not beyond 16 chars, since long custom header + // keys just create too much whitespace + NSArray *keys = [dict.allKeys sortedArrayUsingSelector:@selector(compare:)]; + + NSMutableString *str = [NSMutableString string]; + for (NSString *key in keys) { + NSString *value = [dict valueForKey:key]; + if ([key isEqual:@"Authorization"]) { + // Remove OAuth 1 token + value = [[self class] snipSubstringOfString:value + betweenStartString:@"oauth_token=\"" + endString:@"\""]; + + // Remove OAuth 2 bearer token (draft 16, and older form) + value = [[self class] snipSubstringOfString:value + betweenStartString:@"Bearer " + endString:@"\n"]; + value = [[self class] snipSubstringOfString:value + betweenStartString:@"OAuth " + endString:@"\n"]; + + // Remove Google ClientLogin + value = [[self class] snipSubstringOfString:value + betweenStartString:@"GoogleLogin auth=" + endString:@"\n"]; + } + [str appendFormat:@" %@: %@\n", key, value]; + } + return str; +} + +@end + +#endif // !STRIP_GTM_FETCH_LOGGING diff --git a/Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.h b/Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.h new file mode 100644 index 0000000..fb743ca --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.h @@ -0,0 +1,193 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +// For best performance and convenient usage, fetchers should be generated by a common +// GTMSessionFetcherService instance, like +// +// _fetcherService = [[GTMSessionFetcherService alloc] init]; +// GTMSessionFetcher* myFirstFetcher = [_fetcherService fetcherWithRequest:request1]; +// GTMSessionFetcher* mySecondFetcher = [_fetcherService fetcherWithRequest:request2]; + +#import "GTMSessionFetcher.h" + +GTM_ASSUME_NONNULL_BEGIN + +// Notifications. + +// This notification indicates a reusable session has become invalid. It is intended mainly for the +// service's unit tests. +// +// The notification object is the fetcher service. +// The invalid session is provided via the userInfo kGTMSessionFetcherServiceSessionKey key. +extern NSString *const kGTMSessionFetcherServiceSessionBecameInvalidNotification; +extern NSString *const kGTMSessionFetcherServiceSessionKey; + +@interface GTMSessionFetcherService : NSObject + +// Queues of delayed and running fetchers. Each dictionary contains arrays +// of GTMSessionFetcher *fetchers, keyed by NSString *host +@property(atomic, strong, readonly, GTM_NULLABLE) GTM_NSDictionaryOf(NSString *, NSArray *) *delayedFetchersByHost; +@property(atomic, strong, readonly, GTM_NULLABLE) GTM_NSDictionaryOf(NSString *, NSArray *) *runningFetchersByHost; + +// A max value of 0 means no fetchers should be delayed. +// The default limit is 10 simultaneous fetchers targeting each host. +// This does not apply to fetchers whose useBackgroundSession property is YES. Since services are +// not resurrected on an app relaunch, delayed fetchers would effectively be abandoned. +@property(atomic, assign) NSUInteger maxRunningFetchersPerHost; + +// Properties to be applied to each fetcher; see GTMSessionFetcher.h for descriptions +@property(atomic, strong, GTM_NULLABLE) NSURLSessionConfiguration *configuration; +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherConfigurationBlock configurationBlock; +@property(atomic, strong, GTM_NULLABLE) NSHTTPCookieStorage *cookieStorage; +@property(atomic, strong, GTM_NULL_RESETTABLE) dispatch_queue_t callbackQueue; +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherChallengeBlock challengeBlock; +@property(atomic, strong, GTM_NULLABLE) NSURLCredential *credential; +@property(atomic, strong) NSURLCredential *proxyCredential; +@property(atomic, copy, GTM_NULLABLE) GTM_NSArrayOf(NSString *) *allowedInsecureSchemes; +@property(atomic, assign) BOOL allowLocalhostRequest; +@property(atomic, assign) BOOL allowInvalidServerCertificates; +@property(atomic, assign, getter=isRetryEnabled) BOOL retryEnabled; +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherRetryBlock retryBlock; +@property(atomic, assign) NSTimeInterval maxRetryInterval; +@property(atomic, assign) NSTimeInterval minRetryInterval; +@property(atomic, copy, GTM_NULLABLE) GTM_NSDictionaryOf(NSString *, id) *properties; + +#if GTM_BACKGROUND_TASK_FETCHING +@property(atomic, assign) BOOL skipBackgroundTask; +#endif + +// A default useragent of GTMFetcherStandardUserAgentString(nil) will be given to each fetcher +// created by this service unless the request already has a user-agent header set. +// This default will be added starting with builds with the SDKs for OS X 10.11 and iOS 9. +// +// To use the configuration's default user agent, set this property to nil. +@property(atomic, copy, GTM_NULLABLE) NSString *userAgent; + +// The authorizer to attach to the created fetchers. If a specific fetcher should +// not authorize its requests, the fetcher's authorizer property may be set to nil +// before the fetch begins. +@property(atomic, strong, GTM_NULLABLE) id authorizer; + +// Delegate queue used by the session when calling back to the fetcher. The default +// is the main queue. Changing this does not affect the queue used to call back to the +// application; that is specified by the callbackQueue property above. +@property(atomic, strong, GTM_NULL_RESETTABLE) NSOperationQueue *sessionDelegateQueue; + +// When enabled, indicates the same session should be used by subsequent fetchers. +// +// This is enabled by default. +@property(atomic, assign) BOOL reuseSession; + +// Sets the delay until an unused session is invalidated. +// The default interval is 60 seconds. +// +// If the interval is set to 0, then any reused session is not invalidated except by +// explicitly invoking -resetSession. Be aware that setting the interval to 0 thus +// causes the session's delegate to be retained until the session is explicitly reset. +@property(atomic, assign) NSTimeInterval unusedSessionTimeout; + +// If shouldReuseSession is enabled, this will force creation of a new session when future +// fetchers begin. +- (void)resetSession; + +// Create a fetcher +// +// These methods will return a fetcher. If successfully created, the connection +// will hold a strong reference to it for the life of the connection as well. +// So the caller doesn't have to hold onto the fetcher explicitly unless they +// want to be able to monitor or cancel it. +- (GTMSessionFetcher *)fetcherWithRequest:(NSURLRequest *)request; +- (GTMSessionFetcher *)fetcherWithURL:(NSURL *)requestURL; +- (GTMSessionFetcher *)fetcherWithURLString:(NSString *)requestURLString; + +// Common method for fetcher creation. +// +// -fetcherWithRequest:fetcherClass: may be overridden to customize creation of +// fetchers. This is the ONLY method in the GTMSessionFetcher library intended to +// be overridden. +- (id)fetcherWithRequest:(NSURLRequest *)request + fetcherClass:(Class)fetcherClass; + +- (BOOL)isDelayingFetcher:(GTMSessionFetcher *)fetcher; + +- (NSUInteger)numberOfFetchers; // running + delayed fetchers +- (NSUInteger)numberOfRunningFetchers; +- (NSUInteger)numberOfDelayedFetchers; + +// Return a list of all running or delayed fetchers. This includes fetchers created +// by the service which have been started and have not yet stopped. +// +// Returns an array of fetcher objects, or nil if none. +- (GTM_NULLABLE GTM_NSArrayOf(GTMSessionFetcher *) *)issuedFetchers; + +// Search for running or delayed fetchers with the specified URL. +// +// Returns an array of fetcher objects found, or nil if none found. +- (GTM_NULLABLE GTM_NSArrayOf(GTMSessionFetcher *) *)issuedFetchersWithRequestURL:(NSURL *)requestURL; + +- (void)stopAllFetchers; + +// Methods for use by the fetcher class only. +- (GTM_NULLABLE NSURLSession *)session; +- (GTM_NULLABLE NSURLSession *)sessionForFetcherCreation; +- (GTM_NULLABLE id)sessionDelegate; +- (GTM_NULLABLE NSDate *)stoppedAllFetchersDate; + +// The testBlock can inspect its fetcher parameter's request property to +// determine which fetcher is being faked. +@property(atomic, copy, GTM_NULLABLE) GTMSessionFetcherTestBlock testBlock; + +@end + +@interface GTMSessionFetcherService (TestingSupport) + +// Convenience methods to create a fetcher service for testing. +// +// Fetchers generated by this mock fetcher service will not perform any +// network operation, but will invoke callbacks and provide the supplied data +// or error to the completion handler. +// +// You can make more customized mocks by setting the test block property of the service +// or fetcher; the test block can inspect the fetcher's request or other properties. +// +// See the description of the testBlock property below. ++ (instancetype)mockFetcherServiceWithFakedData:(GTM_NULLABLE NSData *)fakedDataOrNil + fakedError:(GTM_NULLABLE NSError *)fakedErrorOrNil; ++ (instancetype)mockFetcherServiceWithFakedData:(GTM_NULLABLE NSData *)fakedDataOrNil + fakedResponse:(NSHTTPURLResponse *)fakedResponse + fakedError:(GTM_NULLABLE NSError *)fakedErrorOrNil; + +// Spin the run loop and discard events (or, if not on the main thread, just sleep the thread) +// until all running and delayed fetchers have completed. +// +// This is only for use in testing or in tools without a user interface. +// +// Synchronous fetches should never be done by shipping apps; they are +// sufficient reason for rejection from the app store. +// +// Returns NO if timed out. +- (BOOL)waitForCompletionOfAllFetchersWithTimeout:(NSTimeInterval)timeoutInSeconds; + +@end + +@interface GTMSessionFetcherService (BackwardsCompatibilityOnly) + +// Clients using GTMSessionFetcher should set the cookie storage explicitly themselves. +// This method is just for compatibility with the old fetcher. +@property(atomic, assign) NSInteger cookieStorageMethod; + +@end + +GTM_ASSUME_NONNULL_END diff --git a/Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.m b/Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.m new file mode 100644 index 0000000..bd44787 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMSessionFetcherService.m @@ -0,0 +1,1369 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "GTMSessionFetcherService.h" + +NSString *const kGTMSessionFetcherServiceSessionBecameInvalidNotification + = @"kGTMSessionFetcherServiceSessionBecameInvalidNotification"; +NSString *const kGTMSessionFetcherServiceSessionKey + = @"kGTMSessionFetcherServiceSessionKey"; + +#if !GTMSESSION_BUILD_COMBINED_SOURCES +@interface GTMSessionFetcher (ServiceMethods) +- (BOOL)beginFetchMayDelay:(BOOL)mayDelay + mayAuthorize:(BOOL)mayAuthorize; +@end +#endif // !GTMSESSION_BUILD_COMBINED_SOURCES + +@interface GTMSessionFetcherService () + +@property(atomic, strong, readwrite) NSDictionary *delayedFetchersByHost; +@property(atomic, strong, readwrite) NSDictionary *runningFetchersByHost; + +@end + +// Since NSURLSession doesn't support a separate delegate per task (!), instances of this +// class serve as a session delegate trampoline. +// +// This class maps a session's tasks to fetchers, and resends delegate messages to the task's +// fetcher. +@interface GTMSessionFetcherSessionDelegateDispatcher : NSObject + +// The session for the tasks in this dispatcher's task-to-fetcher map. +@property(atomic) NSURLSession *session; + +// The timer interval for invalidating a session that has no active tasks. +@property(atomic) NSTimeInterval discardInterval; + +// The current discard timer. +@property(atomic, readonly) NSTimer *discardTimer; + + +- (instancetype)initWithParentService:(GTMSessionFetcherService *)parentService + sessionDiscardInterval:(NSTimeInterval)discardInterval; + +- (void)setFetcher:(GTMSessionFetcher *)fetcher + forTask:(NSURLSessionTask *)task; +- (void)removeFetcher:(GTMSessionFetcher *)fetcher; + +// Before using a session, tells the delegate dispatcher to stop the discard timer. +- (void)startSessionUsage; + +// When abandoning a delegate dispatcher, we want to avoid the session retaining +// the delegate after tasks complete. +- (void)abandon; + +@end + + +@implementation GTMSessionFetcherService { + NSMutableDictionary *_delayedFetchersByHost; + NSMutableDictionary *_runningFetchersByHost; + NSUInteger _maxRunningFetchersPerHost; + + // When this ivar is nil, the service will not reuse sessions. + GTMSessionFetcherSessionDelegateDispatcher *_delegateDispatcher; + + // Fetchers will wait on this if another fetcher is creating the shared NSURLSession. + dispatch_semaphore_t _sessionCreationSemaphore; + + dispatch_queue_t _callbackQueue; + NSOperationQueue *_delegateQueue; + NSHTTPCookieStorage *_cookieStorage; + NSString *_userAgent; + NSTimeInterval _timeout; + + NSURLCredential *_credential; // Username & password. + NSURLCredential *_proxyCredential; // Credential supplied to proxy servers. + + NSInteger _cookieStorageMethod; + + id _authorizer; + + // For waitForCompletionOfAllFetchersWithTimeout: we need to wait on stopped fetchers since + // they've not yet finished invoking their queued callbacks. This array is nil except when + // waiting on fetchers. + NSMutableArray *_stoppedFetchersToWaitFor; + + // For fetchers that enqueued their callbacks before stopAllFetchers was called on the service, + // set a barrier so the callbacks know to bail out. + NSDate *_stoppedAllFetchersDate; +} + +@synthesize maxRunningFetchersPerHost = _maxRunningFetchersPerHost, + configuration = _configuration, + configurationBlock = _configurationBlock, + cookieStorage = _cookieStorage, + userAgent = _userAgent, + challengeBlock = _challengeBlock, + credential = _credential, + proxyCredential = _proxyCredential, + allowedInsecureSchemes = _allowedInsecureSchemes, + allowLocalhostRequest = _allowLocalhostRequest, + allowInvalidServerCertificates = _allowInvalidServerCertificates, + retryEnabled = _retryEnabled, + retryBlock = _retryBlock, + maxRetryInterval = _maxRetryInterval, + minRetryInterval = _minRetryInterval, + properties = _properties, + unusedSessionTimeout = _unusedSessionTimeout, + testBlock = _testBlock; + +#if GTM_BACKGROUND_TASK_FETCHING +@synthesize skipBackgroundTask = _skipBackgroundTask; +#endif + +- (instancetype)init { + self = [super init]; + if (self) { + _delayedFetchersByHost = [[NSMutableDictionary alloc] init]; + _runningFetchersByHost = [[NSMutableDictionary alloc] init]; + _maxRunningFetchersPerHost = 10; + _cookieStorageMethod = -1; + _unusedSessionTimeout = 60.0; + _delegateDispatcher = + [[GTMSessionFetcherSessionDelegateDispatcher alloc] initWithParentService:self + sessionDiscardInterval:_unusedSessionTimeout]; + _callbackQueue = dispatch_get_main_queue(); + + _delegateQueue = [[NSOperationQueue alloc] init]; + _delegateQueue.maxConcurrentOperationCount = 1; + _delegateQueue.name = @"com.google.GTMSessionFetcher.NSURLSessionDelegateQueue"; + + _sessionCreationSemaphore = dispatch_semaphore_create(1); + + // Starting with the SDKs for OS X 10.11/iOS 9, the service has a default useragent. + // Apps can remove this and get the default system "CFNetwork" useragent by setting the + // fetcher service's userAgent property to nil. +#if (!TARGET_OS_IPHONE && defined(MAC_OS_X_VERSION_10_11) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_11) \ + || (TARGET_OS_IPHONE && defined(__IPHONE_9_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0) + _userAgent = GTMFetcherStandardUserAgentString(nil); +#endif + } + return self; +} + +- (void)dealloc { + [self detachAuthorizer]; + [_delegateDispatcher abandon]; +} + +#pragma mark Generate a new fetcher + +// Clients may override this method. Clients should not override any other library methods. +- (id)fetcherWithRequest:(NSURLRequest *)request + fetcherClass:(Class)fetcherClass { + GTMSessionFetcher *fetcher = [[fetcherClass alloc] initWithRequest:request + configuration:self.configuration]; + fetcher.callbackQueue = self.callbackQueue; + fetcher.sessionDelegateQueue = self.sessionDelegateQueue; + fetcher.challengeBlock = self.challengeBlock; + fetcher.credential = self.credential; + fetcher.proxyCredential = self.proxyCredential; + fetcher.authorizer = self.authorizer; + fetcher.cookieStorage = self.cookieStorage; + fetcher.allowedInsecureSchemes = self.allowedInsecureSchemes; + fetcher.allowLocalhostRequest = self.allowLocalhostRequest; + fetcher.allowInvalidServerCertificates = self.allowInvalidServerCertificates; + fetcher.configurationBlock = self.configurationBlock; + fetcher.retryEnabled = self.retryEnabled; + fetcher.retryBlock = self.retryBlock; + fetcher.maxRetryInterval = self.maxRetryInterval; + fetcher.minRetryInterval = self.minRetryInterval; + fetcher.properties = self.properties; + fetcher.service = self; + if (self.cookieStorageMethod >= 0) { + [fetcher setCookieStorageMethod:self.cookieStorageMethod]; + } + +#if GTM_BACKGROUND_TASK_FETCHING + fetcher.skipBackgroundTask = self.skipBackgroundTask; +#endif + + NSString *userAgent = self.userAgent; + if (userAgent.length > 0 + && [request valueForHTTPHeaderField:@"User-Agent"] == nil) { + [fetcher setRequestValue:userAgent + forHTTPHeaderField:@"User-Agent"]; + } + fetcher.testBlock = self.testBlock; + + return fetcher; +} + +- (GTMSessionFetcher *)fetcherWithRequest:(NSURLRequest *)request { + return [self fetcherWithRequest:request + fetcherClass:[GTMSessionFetcher class]]; +} + +- (GTMSessionFetcher *)fetcherWithURL:(NSURL *)requestURL { + return [self fetcherWithRequest:[NSURLRequest requestWithURL:requestURL]]; +} + +- (GTMSessionFetcher *)fetcherWithURLString:(NSString *)requestURLString { + NSURL *url = [NSURL URLWithString:requestURLString]; + return [self fetcherWithURL:url]; +} + +// Returns a session for the fetcher's host, or nil. +- (NSURLSession *)session { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSURLSession *session = _delegateDispatcher.session; + return session; + } +} + +// Returns a session for the fetcher's host, or nil. For shared sessions, this +// waits on a semaphore, blocking other fetchers while the caller creates the +// session if needed. +- (NSURLSession *)sessionForFetcherCreation { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + if (!_delegateDispatcher) { + // This fetcher is creating a non-shared session, so skip the semaphore usage. + return nil; + } + } + + // Wait if another fetcher is currently creating a session; avoid waiting + // inside the @synchronized block, as that can deadlock. + dispatch_semaphore_wait(_sessionCreationSemaphore, DISPATCH_TIME_FOREVER); + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + // Before getting the NSURLSession for task creation, it is + // important to invalidate and nil out the session discard timer; otherwise + // the session can be invalidated between when it is returned to the + // fetcher, and when the fetcher attempts to create its NSURLSessionTask. + [_delegateDispatcher startSessionUsage]; + + NSURLSession *session = _delegateDispatcher.session; + if (session) { + // The calling fetcher will receive a preexisting session, so + // we can allow other fetchers to create a session. + dispatch_semaphore_signal(_sessionCreationSemaphore); + } else { + // No existing session was obtained, so the calling fetcher will create the session; + // it *must* invoke fetcherDidCreateSession: to signal the dispatcher's semaphore after + // the session has been created (or fails to be created) to avoid a hang. + } + return session; + } +} + +- (id)sessionDelegate { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _delegateDispatcher; + } +} + +#pragma mark Queue Management + +- (void)addRunningFetcher:(GTMSessionFetcher *)fetcher + forHost:(NSString *)host { + // Add to the array of running fetchers for this host, creating the array if needed. + NSMutableArray *runningForHost = [_runningFetchersByHost objectForKey:host]; + if (runningForHost == nil) { + runningForHost = [NSMutableArray arrayWithObject:fetcher]; + [_runningFetchersByHost setObject:runningForHost forKey:host]; + } else { + [runningForHost addObject:fetcher]; + } +} + +- (void)addDelayedFetcher:(GTMSessionFetcher *)fetcher + forHost:(NSString *)host { + // Add to the array of delayed fetchers for this host, creating the array if needed. + NSMutableArray *delayedForHost = [_delayedFetchersByHost objectForKey:host]; + if (delayedForHost == nil) { + delayedForHost = [NSMutableArray arrayWithObject:fetcher]; + [_delayedFetchersByHost setObject:delayedForHost forKey:host]; + } else { + [delayedForHost addObject:fetcher]; + } +} + +- (BOOL)isDelayingFetcher:(GTMSessionFetcher *)fetcher { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSString *host = fetcher.request.URL.host; + if (host == nil) { + return NO; + } + NSArray *delayedForHost = [_delayedFetchersByHost objectForKey:host]; + NSUInteger idx = [delayedForHost indexOfObjectIdenticalTo:fetcher]; + BOOL isDelayed = (delayedForHost != nil) && (idx != NSNotFound); + return isDelayed; + } +} + +- (BOOL)fetcherShouldBeginFetching:(GTMSessionFetcher *)fetcher { + // Entry point from the fetcher + NSURL *requestURL = fetcher.request.URL; + NSString *host = requestURL.host; + + // Addresses "file:///path" case where localhost is the implicit host. + if (host.length == 0 && [requestURL isFileURL]) { + host = @"localhost"; + } + + if (host.length == 0) { + // Data URIs legitimately have no host, reject other hostless URLs. + GTMSESSION_ASSERT_DEBUG([[requestURL scheme] isEqual:@"data"], @"%@ lacks host", fetcher); + return YES; + } + + BOOL shouldBeginResult; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSMutableArray *runningForHost = [_runningFetchersByHost objectForKey:host]; + if (runningForHost != nil + && [runningForHost indexOfObjectIdenticalTo:fetcher] != NSNotFound) { + GTMSESSION_ASSERT_DEBUG(NO, @"%@ was already running", fetcher); + return YES; + } + + BOOL shouldRunNow = (fetcher.usingBackgroundSession + || _maxRunningFetchersPerHost == 0 + || _maxRunningFetchersPerHost > + [[self class] numberOfNonBackgroundSessionFetchers:runningForHost]); + if (shouldRunNow) { + [self addRunningFetcher:fetcher forHost:host]; + shouldBeginResult = YES; + } else { + [self addDelayedFetcher:fetcher forHost:host]; + shouldBeginResult = NO; + } + } // @synchronized(self) + + // We'll save the host that serves as the key for this fetcher's array + // to avoid any chance of the underlying request changing, stranding + // the fetcher in the wrong array + fetcher.serviceHost = host; + + return shouldBeginResult; +} + +- (void)startFetcher:(GTMSessionFetcher *)fetcher { + [fetcher beginFetchMayDelay:NO + mayAuthorize:YES]; +} + +// Internal utility. Returns a fetcher's delegate if it's a dispatcher, or nil if the fetcher +// is its own delegate (possibly via proxy) and has no dispatcher. +- (GTMSessionFetcherSessionDelegateDispatcher *)delegateDispatcherForFetcher:(GTMSessionFetcher *)fetcher { + GTMSessionCheckNotSynchronized(self); + + NSURLSession *fetcherSession = fetcher.session; + if (fetcherSession) { + id fetcherDelegate = fetcherSession.delegate; + // If the delegate is non-nil and claims to be a GTMSessionFetcher, there is no dispatcher; + // assume the fetcher is the delegate or has been proxied (some third-party frameworks + // are known to swizzle NSURLSession to proxy its delegate). + BOOL hasDispatcher = (fetcherDelegate != nil && + ![fetcherDelegate isKindOfClass:[GTMSessionFetcher class]]); + if (hasDispatcher) { + GTMSESSION_ASSERT_DEBUG([fetcherDelegate isKindOfClass:[GTMSessionFetcherSessionDelegateDispatcher class]], + @"Fetcher delegate class: %@", [fetcherDelegate class]); + return (GTMSessionFetcherSessionDelegateDispatcher *)fetcherDelegate; + } + } + return nil; +} + +- (void)fetcherDidCreateSession:(GTMSessionFetcher *)fetcher { + if (fetcher.canShareSession) { + NSURLSession *fetcherSession = fetcher.session; + GTMSESSION_ASSERT_DEBUG(fetcherSession != nil, @"Fetcher missing its session: %@", fetcher); + + GTMSessionFetcherSessionDelegateDispatcher *delegateDispatcher = + [self delegateDispatcherForFetcher:fetcher]; + if (delegateDispatcher) { + GTMSESSION_ASSERT_DEBUG(delegateDispatcher.session == nil, + @"Fetcher made an extra session: %@", fetcher); + + // Save this fetcher's session. + delegateDispatcher.session = fetcherSession; + + // Allow other fetchers to request this session now. + dispatch_semaphore_signal(_sessionCreationSemaphore); + } + } +} + +- (void)fetcherDidBeginFetching:(GTMSessionFetcher *)fetcher { + // If this fetcher has a separate delegate with a shared session, then + // this fetcher should be added to the delegate's map of tasks to fetchers. + GTMSessionFetcherSessionDelegateDispatcher *delegateDispatcher = + [self delegateDispatcherForFetcher:fetcher]; + if (delegateDispatcher) { + GTMSESSION_ASSERT_DEBUG(fetcher.canShareSession, + @"Inappropriate shared session: %@", fetcher); + + // There should already be a session, from this or a previous fetcher. + // + // Sanity check that the fetcher's session is the delegate's shared session. + NSURLSession *sharedSession = delegateDispatcher.session; + NSURLSession *fetcherSession = fetcher.session; + GTMSESSION_ASSERT_DEBUG(sharedSession != nil, @"Missing delegate session: %@", fetcher); + GTMSESSION_ASSERT_DEBUG(fetcherSession == sharedSession, + @"Inconsistent session: %@ %@ (shared: %@)", + fetcher, fetcherSession, sharedSession); + + if (sharedSession != nil && fetcherSession == sharedSession) { + NSURLSessionTask *task = fetcher.sessionTask; + GTMSESSION_ASSERT_DEBUG(task != nil, @"Missing session task: %@", fetcher); + + if (task) { + [delegateDispatcher setFetcher:fetcher + forTask:task]; + } + } + } +} + +- (void)stopFetcher:(GTMSessionFetcher *)fetcher { + [fetcher stopFetching]; +} + +- (void)fetcherDidStop:(GTMSessionFetcher *)fetcher { + // Entry point from the fetcher + NSString *host = fetcher.serviceHost; + if (!host) { + // fetcher has been stopped previously + return; + } + + // This removeFetcher: invocation is a fallback; typically, fetchers are removed from the task + // map when the task completes. + GTMSessionFetcherSessionDelegateDispatcher *delegateDispatcher = + [self delegateDispatcherForFetcher:fetcher]; + [delegateDispatcher removeFetcher:fetcher]; + + NSMutableArray *fetchersToStart; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + // If a test is waiting for all fetchers to stop, it needs to wait for this one + // to invoke its callbacks on the callback queue. + [_stoppedFetchersToWaitFor addObject:fetcher]; + + NSMutableArray *runningForHost = [_runningFetchersByHost objectForKey:host]; + [runningForHost removeObject:fetcher]; + + NSMutableArray *delayedForHost = [_delayedFetchersByHost objectForKey:host]; + [delayedForHost removeObject:fetcher]; + + while (delayedForHost.count > 0 + && [[self class] numberOfNonBackgroundSessionFetchers:runningForHost] + < _maxRunningFetchersPerHost) { + // Start another delayed fetcher running, scanning for the minimum + // priority value, defaulting to FIFO for equal priorities + GTMSessionFetcher *nextFetcher = nil; + for (GTMSessionFetcher *delayedFetcher in delayedForHost) { + if (nextFetcher == nil + || delayedFetcher.servicePriority < nextFetcher.servicePriority) { + nextFetcher = delayedFetcher; + } + } + + if (nextFetcher) { + [self addRunningFetcher:nextFetcher forHost:host]; + runningForHost = [_runningFetchersByHost objectForKey:host]; + + [delayedForHost removeObjectIdenticalTo:nextFetcher]; + + if (!fetchersToStart) { + fetchersToStart = [NSMutableArray array]; + } + [fetchersToStart addObject:nextFetcher]; + } + } + + if (runningForHost.count == 0) { + // None left; remove the empty array + [_runningFetchersByHost removeObjectForKey:host]; + } + + if (delayedForHost.count == 0) { + [_delayedFetchersByHost removeObjectForKey:host]; + } + } // @synchronized(self) + + // Start fetchers outside of the synchronized block to avoid a deadlock. + for (GTMSessionFetcher *nextFetcher in fetchersToStart) { + [self startFetcher:nextFetcher]; + } + + // The fetcher is no longer in the running or the delayed array, + // so remove its host and thread properties + fetcher.serviceHost = nil; +} + +- (NSUInteger)numberOfFetchers { + NSUInteger running = [self numberOfRunningFetchers]; + NSUInteger delayed = [self numberOfDelayedFetchers]; + return running + delayed; +} + +- (NSUInteger)numberOfRunningFetchers { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSUInteger sum = 0; + for (NSString *host in _runningFetchersByHost) { + NSArray *fetchers = [_runningFetchersByHost objectForKey:host]; + sum += fetchers.count; + } + return sum; + } +} + +- (NSUInteger)numberOfDelayedFetchers { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSUInteger sum = 0; + for (NSString *host in _delayedFetchersByHost) { + NSArray *fetchers = [_delayedFetchersByHost objectForKey:host]; + sum += fetchers.count; + } + return sum; + } +} + +- (NSArray *)issuedFetchers { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSMutableArray *allFetchers = [NSMutableArray array]; + void (^accumulateFetchers)(id, id, BOOL *) = ^(NSString *host, + NSArray *fetchersForHost, + BOOL *stop) { + [allFetchers addObjectsFromArray:fetchersForHost]; + }; + [_runningFetchersByHost enumerateKeysAndObjectsUsingBlock:accumulateFetchers]; + [_delayedFetchersByHost enumerateKeysAndObjectsUsingBlock:accumulateFetchers]; + + GTMSESSION_ASSERT_DEBUG(allFetchers.count == [NSSet setWithArray:allFetchers].count, + @"Fetcher appears multiple times\n running: %@\n delayed: %@", + _runningFetchersByHost, _delayedFetchersByHost); + + return allFetchers.count > 0 ? allFetchers : nil; + } +} + +- (NSArray *)issuedFetchersWithRequestURL:(NSURL *)requestURL { + NSString *host = requestURL.host; + if (host.length == 0) return nil; + + NSURL *targetURL = [requestURL absoluteURL]; + + NSArray *allFetchers = [self issuedFetchers]; + NSIndexSet *indexes = [allFetchers indexesOfObjectsPassingTest:^BOOL(GTMSessionFetcher *fetcher, + NSUInteger idx, + BOOL *stop) { + NSURL *fetcherURL = [fetcher.request.URL absoluteURL]; + return [fetcherURL isEqual:targetURL]; + }]; + + NSArray *result = nil; + if (indexes.count > 0) { + result = [allFetchers objectsAtIndexes:indexes]; + } + return result; +} + +- (void)stopAllFetchers { + NSArray *delayedFetchersByHost; + NSArray *runningFetchersByHost; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + // Set the time barrier so fetchers know not to call back even if + // the stop calls below occur after the fetchers naturally + // stopped and so were removed from _runningFetchersByHost, + // but while the callbacks were already enqueued before stopAllFetchers + // was invoked. + _stoppedAllFetchersDate = [[NSDate alloc] init]; + + // Remove fetchers from the delayed list to avoid fetcherDidStop: from + // starting more fetchers running as a side effect of stopping one + delayedFetchersByHost = _delayedFetchersByHost.allValues; + [_delayedFetchersByHost removeAllObjects]; + + runningFetchersByHost = _runningFetchersByHost.allValues; + [_runningFetchersByHost removeAllObjects]; + } + + for (NSArray *delayedForHost in delayedFetchersByHost) { + for (GTMSessionFetcher *fetcher in delayedForHost) { + [self stopFetcher:fetcher]; + } + } + + for (NSArray *runningForHost in runningFetchersByHost) { + for (GTMSessionFetcher *fetcher in runningForHost) { + [self stopFetcher:fetcher]; + } + } +} + +- (NSDate *)stoppedAllFetchersDate { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _stoppedAllFetchersDate; + } +} + +#pragma mark Accessors + +- (BOOL)reuseSession { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _delegateDispatcher != nil; + } +} + +- (void)setReuseSession:(BOOL)shouldReuse { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + BOOL wasReusing = (_delegateDispatcher != nil); + if (shouldReuse != wasReusing) { + [self abandonDispatcher]; + if (shouldReuse) { + _delegateDispatcher = + [[GTMSessionFetcherSessionDelegateDispatcher alloc] initWithParentService:self + sessionDiscardInterval:_unusedSessionTimeout]; + } else { + _delegateDispatcher = nil; + } + } + } +} + +- (void)resetSession { + GTMSessionCheckNotSynchronized(self); + dispatch_semaphore_wait(_sessionCreationSemaphore, DISPATCH_TIME_FOREVER); + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + [self resetSessionInternal]; + } + + dispatch_semaphore_signal(_sessionCreationSemaphore); +} + +- (void)resetSessionInternal { + GTMSessionCheckSynchronized(self); + + // The old dispatchers may be retained as delegates of any ongoing sessions by those sessions. + if (_delegateDispatcher) { + [self abandonDispatcher]; + _delegateDispatcher = + [[GTMSessionFetcherSessionDelegateDispatcher alloc] initWithParentService:self + sessionDiscardInterval:_unusedSessionTimeout]; + } +} + +- (void)resetSessionForDispatcherDiscardTimer:(NSTimer *)timer { + GTMSessionCheckNotSynchronized(self); + + dispatch_semaphore_wait(_sessionCreationSemaphore, DISPATCH_TIME_FOREVER); + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_delegateDispatcher.discardTimer == timer) { + // If the delegate dispatcher's current discardTimer is the same object as the timer + // that fired, no fetcher has recently attempted to start using the session by calling + // startSessionUsage, which invalidates and nils out the timer. + [self resetSessionInternal]; + } else { + // A fetcher has invalidated the timer between its triggering and now, potentially + // meaning a fetcher has requested access to the NSURLSession, and may be in the process + // of starting a new task. The dispatcher should not be abandoned, as this can lead + // to a race condition between calling -finishTasksAndInvalidate on the NSURLSession + // and the fetcher attempting to create a new task. + } + } + + dispatch_semaphore_signal(_sessionCreationSemaphore); +} + +- (NSTimeInterval)unusedSessionTimeout { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _unusedSessionTimeout; + } +} + +- (void)setUnusedSessionTimeout:(NSTimeInterval)timeout { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _unusedSessionTimeout = timeout; + _delegateDispatcher.discardInterval = timeout; + } +} + +// This method should be called inside of @synchronized(self) +- (void)abandonDispatcher { + GTMSessionCheckSynchronized(self); + [_delegateDispatcher abandon]; +} + +- (NSDictionary *)runningFetchersByHost { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return [_runningFetchersByHost copy]; + } +} + +- (void)setRunningFetchersByHost:(NSDictionary *)dict { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _runningFetchersByHost = [dict mutableCopy]; + } +} + +- (NSDictionary *)delayedFetchersByHost { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return [_delayedFetchersByHost copy]; + } +} + +- (void)setDelayedFetchersByHost:(NSDictionary *)dict { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _delayedFetchersByHost = [dict mutableCopy]; + } +} + +- (id)authorizer { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _authorizer; + } +} + +- (void)setAuthorizer:(id)obj { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (obj != _authorizer) { + [self detachAuthorizer]; + } + + _authorizer = obj; + } + + // Use the fetcher service for the authorization fetches if the auth + // object supports fetcher services + if ([obj respondsToSelector:@selector(setFetcherService:)]) { +#if GTM_USE_SESSION_FETCHER + [obj setFetcherService:self]; +#else + [obj setFetcherService:(id)self]; +#endif + } +} + +// This should be called inside a @synchronized(self) block except during dealloc. +- (void)detachAuthorizer { + // This method is called by the fetcher service's dealloc and setAuthorizer: + // methods; do not override. + // + // The fetcher service retains the authorizer, and the authorizer has a + // weak pointer to the fetcher service (a non-zeroing pointer for + // compatibility with iOS 4 and Mac OS X 10.5/10.6.) + // + // When this fetcher service no longer uses the authorizer, we want to remove + // the authorizer's dependence on the fetcher service. Authorizers can still + // function without a fetcher service. + if ([_authorizer respondsToSelector:@selector(fetcherService)]) { + id authFetcherService = [_authorizer fetcherService]; + if (authFetcherService == self) { + [_authorizer setFetcherService:nil]; + } + } +} + +- (dispatch_queue_t GTM_NONNULL_TYPE)callbackQueue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _callbackQueue; + } // @synchronized(self) +} + +- (void)setCallbackQueue:(dispatch_queue_t GTM_NULLABLE_TYPE)queue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _callbackQueue = queue ?: dispatch_get_main_queue(); + } // @synchronized(self) +} + +- (NSOperationQueue * GTM_NONNULL_TYPE)sessionDelegateQueue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _delegateQueue; + } // @synchronized(self) +} + +- (void)setSessionDelegateQueue:(NSOperationQueue * GTM_NULLABLE_TYPE)queue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _delegateQueue = queue ?: [NSOperationQueue mainQueue]; + } // @synchronized(self) +} + +- (NSOperationQueue *)delegateQueue { + // Provided for compatibility with the old fetcher service. The gtm-oauth2 code respects + // any custom delegate queue for calling the app. + return nil; +} + ++ (NSUInteger)numberOfNonBackgroundSessionFetchers:(NSArray *)fetchers { + NSUInteger sum = 0; + for (GTMSessionFetcher *fetcher in fetchers) { + if (!fetcher.usingBackgroundSession) { + ++sum; + } + } + return sum; +} + +@end + +@implementation GTMSessionFetcherService (TestingSupport) + ++ (instancetype)mockFetcherServiceWithFakedData:(NSData *)fakedDataOrNil + fakedError:(NSError *)fakedErrorOrNil { +#if !GTM_DISABLE_FETCHER_TEST_BLOCK + NSURL *url = [NSURL URLWithString:@"http://example.invalid"]; + NSHTTPURLResponse *fakedResponse = + [[NSHTTPURLResponse alloc] initWithURL:url + statusCode:(fakedErrorOrNil ? 500 : 200) + HTTPVersion:@"HTTP/1.1" + headerFields:nil]; + return [self mockFetcherServiceWithFakedData:fakedDataOrNil + fakedResponse:fakedResponse + fakedError:fakedErrorOrNil]; +#else + GTMSESSION_ASSERT_DEBUG(0, @"Test blocks disabled"); + return nil; +#endif // GTM_DISABLE_FETCHER_TEST_BLOCK +} + ++ (instancetype)mockFetcherServiceWithFakedData:(NSData *)fakedDataOrNil + fakedResponse:(NSHTTPURLResponse *)fakedResponse + fakedError:(NSError *)fakedErrorOrNil { +#if !GTM_DISABLE_FETCHER_TEST_BLOCK + GTMSessionFetcherService *service = [[self alloc] init]; + service.allowedInsecureSchemes = @[ @"http" ]; + service.testBlock = ^(GTMSessionFetcher *fetcherToTest, + GTMSessionFetcherTestResponse testResponse) { + testResponse(fakedResponse, fakedDataOrNil, fakedErrorOrNil); + }; + return service; +#else + GTMSESSION_ASSERT_DEBUG(0, @"Test blocks disabled"); + return nil; +#endif // GTM_DISABLE_FETCHER_TEST_BLOCK +} + +#pragma mark Synchronous Wait for Unit Testing + +- (BOOL)waitForCompletionOfAllFetchersWithTimeout:(NSTimeInterval)timeoutInSeconds { + NSDate *giveUpDate = [NSDate dateWithTimeIntervalSinceNow:timeoutInSeconds]; + _stoppedFetchersToWaitFor = [NSMutableArray array]; + + BOOL shouldSpinRunLoop = [NSThread isMainThread]; + const NSTimeInterval kSpinInterval = 0.001; + BOOL didTimeOut = NO; + while (([self numberOfFetchers] > 0 || _stoppedFetchersToWaitFor.count > 0)) { + didTimeOut = [giveUpDate timeIntervalSinceNow] < 0; + if (didTimeOut) break; + + GTMSessionFetcher *stoppedFetcher = _stoppedFetchersToWaitFor.firstObject; + if (stoppedFetcher) { + [_stoppedFetchersToWaitFor removeObject:stoppedFetcher]; + [stoppedFetcher waitForCompletionWithTimeout:10.0 * kSpinInterval]; + } + + if (shouldSpinRunLoop) { + NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:kSpinInterval]; + [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; + } else { + [NSThread sleepForTimeInterval:kSpinInterval]; + } + } + _stoppedFetchersToWaitFor = nil; + + return !didTimeOut; +} + +@end + +@implementation GTMSessionFetcherService (BackwardsCompatibilityOnly) + +- (NSInteger)cookieStorageMethod { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _cookieStorageMethod; + } +} + +- (void)setCookieStorageMethod:(NSInteger)cookieStorageMethod { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _cookieStorageMethod = cookieStorageMethod; + } +} + +@end + +@implementation GTMSessionFetcherSessionDelegateDispatcher { + __weak GTMSessionFetcherService *_parentService; + NSURLSession *_session; + + // The task map maps NSURLSessionTasks to GTMSessionFetchers + NSMutableDictionary *_taskToFetcherMap; + // The discard timer will invalidate sessions after the session's last task completes. + NSTimer *_discardTimer; + NSTimeInterval _discardInterval; +} + +@synthesize discardInterval = _discardInterval, + session = _session; + +- (instancetype)init { + [self doesNotRecognizeSelector:_cmd]; + return nil; +} + +- (instancetype)initWithParentService:(GTMSessionFetcherService *)parentService + sessionDiscardInterval:(NSTimeInterval)discardInterval { + self = [super init]; + if (self) { + _discardInterval = discardInterval; + _parentService = parentService; + } + return self; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p %@ %@", + [self class], self, + _session ?: @"", + _taskToFetcherMap.count > 0 ? _taskToFetcherMap : @""]; +} + +- (NSTimer *)discardTimer { + GTMSessionCheckNotSynchronized(self); + @synchronized(self) { + return _discardTimer; + } +} + +// This method should be called inside of a @synchronized(self) block. +- (void)startDiscardTimer { + GTMSessionCheckSynchronized(self); + [_discardTimer invalidate]; + _discardTimer = nil; + if (_discardInterval > 0) { + _discardTimer = [NSTimer timerWithTimeInterval:_discardInterval + target:self + selector:@selector(discardTimerFired:) + userInfo:nil + repeats:NO]; + [_discardTimer setTolerance:(_discardInterval / 10)]; + [[NSRunLoop mainRunLoop] addTimer:_discardTimer forMode:NSRunLoopCommonModes]; + } +} + +// This method should be called inside of a @synchronized(self) block. +- (void)destroyDiscardTimer { + GTMSessionCheckSynchronized(self); + [_discardTimer invalidate]; + _discardTimer = nil; +} + +- (void)discardTimerFired:(NSTimer *)timer { + GTMSessionFetcherService *service; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + NSUInteger numberOfTasks = _taskToFetcherMap.count; + if (numberOfTasks == 0) { + service = _parentService; + } + } + + // Inform the service that the discard timer has fired, and should check whether the + // service can abandon us. -resetSession cannot be called directly, as there is a + // race condition that must be guarded against with the NSURLSession being returned + // from sessionForFetcherCreation outside other locks. The service can take steps + // to prevent resetting the session if that has occurred. + // + // The service must be called from outside the @synchronized block. + [service resetSessionForDispatcherDiscardTimer:timer]; +} + +- (void)abandon { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + [self destroySessionAndTimer]; + } +} + +- (void)startSessionUsage { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + [self destroyDiscardTimer]; + } +} + +// This method should be called inside of a @synchronized(self) block. +- (void)destroySessionAndTimer { + GTMSessionCheckSynchronized(self); + [self destroyDiscardTimer]; + + // Break any retain cycle from the session holding the delegate. + [_session finishTasksAndInvalidate]; + + // Immediately clear the session so no new task may be issued with it. + // + // The _taskToFetcherMap needs to stay valid until the outstanding tasks finish. + _session = nil; +} + +- (void)setFetcher:(GTMSessionFetcher *)fetcher forTask:(NSURLSessionTask *)task { + GTMSESSION_ASSERT_DEBUG(fetcher != nil, @"missing fetcher"); + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_taskToFetcherMap == nil) { + _taskToFetcherMap = [[NSMutableDictionary alloc] init]; + } + + if (fetcher) { + [_taskToFetcherMap setObject:fetcher forKey:task]; + [self destroyDiscardTimer]; + } + } +} + +- (void)removeFetcher:(GTMSessionFetcher *)fetcher { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + // Typically, a fetcher should be removed when its task invokes + // URLSession:task:didCompleteWithError:. + // + // When fetching with a testBlock, though, the task completed delegate + // method may not be invoked, requiring cleanup here. + NSArray *tasks = [_taskToFetcherMap allKeysForObject:fetcher]; + GTMSESSION_ASSERT_DEBUG(tasks.count <= 1, @"fetcher task not unmapped: %@", tasks); + [_taskToFetcherMap removeObjectsForKeys:tasks]; + + if (_taskToFetcherMap.count == 0) { + [self startDiscardTimer]; + } + } +} + +// This helper method provides synchronized access to the task map for the delegate +// methods below. +- (id)fetcherForTask:(NSURLSessionTask *)task { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return [_taskToFetcherMap objectForKey:task]; + } +} + +- (void)removeTaskFromMap:(NSURLSessionTask *)task { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + [_taskToFetcherMap removeObjectForKey:task]; + } +} + +- (void)setSession:(NSURLSession *)session { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _session = session; + } +} + +- (NSURLSession *)session { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _session; + } +} + +- (NSTimeInterval)discardInterval { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _discardInterval; + } +} + +- (void)setDiscardInterval:(NSTimeInterval)interval { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _discardInterval = interval; + } +} + +// NSURLSessionDelegate protocol methods. + +// - (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session; +// +// TODO(seh): How do we route this to an appropriate fetcher? + + +- (void)URLSession:(NSURLSession *)session didBecomeInvalidWithError:(NSError *)error { + GTM_LOG_SESSION_DELEGATE(@"%@ %p URLSession:%@ didBecomeInvalidWithError:%@", + [self class], self, session, error); + NSDictionary *localTaskToFetcherMap; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _session = nil; + + localTaskToFetcherMap = [_taskToFetcherMap copy]; + } + + // Any "suspended" tasks may not have received callbacks from NSURLSession when the session + // completes; we'll call them now. + [localTaskToFetcherMap enumerateKeysAndObjectsUsingBlock:^(NSURLSessionTask *task, + GTMSessionFetcher *fetcher, + BOOL *stop) { + if (fetcher.session == session) { + // Our delegate method URLSession:task:didCompleteWithError: will rely on + // _taskToFetcherMap so that should still contain this fetcher. + NSError *canceledError = [NSError errorWithDomain:NSURLErrorDomain + code:NSURLErrorCancelled + userInfo:nil]; + [self URLSession:session task:task didCompleteWithError:canceledError]; + } else { + GTMSESSION_ASSERT_DEBUG(0, @"Unexpected session in fetcher: %@ has %@ (expected %@)", + fetcher, fetcher.session, session); + } + }]; + + // Our tests rely on this notification to know the session discard timer fired. + NSDictionary *userInfo = @{ kGTMSessionFetcherServiceSessionKey : session }; + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:kGTMSessionFetcherServiceSessionBecameInvalidNotification + object:_parentService + userInfo:userInfo]; +} + + +#pragma mark - NSURLSessionTaskDelegate + +// NSURLSessionTaskDelegate protocol methods. +// +// We won't test here if the fetcher responds to these since we only want this +// class to implement the same delegate methods the fetcher does (so NSURLSession's +// tests for respondsToSelector: will have the same result whether the session +// delegate is the fetcher or this dispatcher.) + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +willPerformHTTPRedirection:(NSHTTPURLResponse *)response + newRequest:(NSURLRequest *)request + completionHandler:(void (^)(NSURLRequest *))completionHandler { + id fetcher = [self fetcherForTask:task]; + [fetcher URLSession:session + task:task +willPerformHTTPRedirection:response + newRequest:request + completionHandler:completionHandler]; +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge + completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))handler { + id fetcher = [self fetcherForTask:task]; + [fetcher URLSession:session + task:task + didReceiveChallenge:challenge + completionHandler:handler]; +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + needNewBodyStream:(void (^)(NSInputStream *bodyStream))handler { + id fetcher = [self fetcherForTask:task]; + [fetcher URLSession:session + task:task + needNewBodyStream:handler]; +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent +totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { + id fetcher = [self fetcherForTask:task]; + [fetcher URLSession:session + task:task + didSendBodyData:bytesSent + totalBytesSent:totalBytesSent +totalBytesExpectedToSend:totalBytesExpectedToSend]; +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task +didCompleteWithError:(NSError *)error { + id fetcher = [self fetcherForTask:task]; + + // This is the usual way tasks are removed from the task map. + [self removeTaskFromMap:task]; + + [fetcher URLSession:session + task:task + didCompleteWithError:error]; +} + +// NSURLSessionDataDelegate protocol methods. + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didReceiveResponse:(NSURLResponse *)response + completionHandler:(void (^)(NSURLSessionResponseDisposition))handler { + id fetcher = [self fetcherForTask:dataTask]; + [fetcher URLSession:session + dataTask:dataTask + didReceiveResponse:response + completionHandler:handler]; +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask +didBecomeDownloadTask:(NSURLSessionDownloadTask *)downloadTask { + id fetcher = [self fetcherForTask:dataTask]; + GTMSESSION_ASSERT_DEBUG(fetcher != nil, @"Missing fetcher for %@", dataTask); + [self removeTaskFromMap:dataTask]; + if (fetcher) { + GTMSESSION_ASSERT_DEBUG([fetcher isKindOfClass:[GTMSessionFetcher class]], + @"Expecting GTMSessionFetcher"); + [self setFetcher:(GTMSessionFetcher *)fetcher forTask:downloadTask]; + } + + [fetcher URLSession:session + dataTask:dataTask +didBecomeDownloadTask:downloadTask]; +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + didReceiveData:(NSData *)data { + id fetcher = [self fetcherForTask:dataTask]; + [fetcher URLSession:session + dataTask:dataTask + didReceiveData:data]; +} + +- (void)URLSession:(NSURLSession *)session + dataTask:(NSURLSessionDataTask *)dataTask + willCacheResponse:(NSCachedURLResponse *)proposedResponse + completionHandler:(void (^)(NSCachedURLResponse *))handler { + id fetcher = [self fetcherForTask:dataTask]; + [fetcher URLSession:session + dataTask:dataTask + willCacheResponse:proposedResponse + completionHandler:handler]; +} + +// NSURLSessionDownloadDelegate protocol methods. + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask +didFinishDownloadingToURL:(NSURL *)location { + id fetcher = [self fetcherForTask:downloadTask]; + [fetcher URLSession:session + downloadTask:downloadTask +didFinishDownloadingToURL:location]; +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didWriteData:(int64_t)bytesWritten + totalBytesWritten:(int64_t)totalWritten +totalBytesExpectedToWrite:(int64_t)totalExpected { + id fetcher = [self fetcherForTask:downloadTask]; + [fetcher URLSession:session + downloadTask:downloadTask + didWriteData:bytesWritten + totalBytesWritten:totalWritten +totalBytesExpectedToWrite:totalExpected]; +} + +- (void)URLSession:(NSURLSession *)session + downloadTask:(NSURLSessionDownloadTask *)downloadTask + didResumeAtOffset:(int64_t)fileOffset +expectedTotalBytes:(int64_t)expectedTotalBytes { + id fetcher = [self fetcherForTask:downloadTask]; + [fetcher URLSession:session + downloadTask:downloadTask + didResumeAtOffset:fileOffset + expectedTotalBytes:expectedTotalBytes]; +} + +@end diff --git a/Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.h b/Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.h new file mode 100644 index 0000000..2f9023a --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.h @@ -0,0 +1,175 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +// GTMSessionUploadFetcher implements Google's resumable upload protocol. + +// +// This subclass of GTMSessionFetcher simulates the series of fetches +// needed for chunked upload as a single fetch operation. +// +// Protocol document: TBD +// +// To the client, the only fetcher that exists is this class; the subsidiary +// fetchers needed for uploading chunks are not visible (though the most recent +// chunk fetcher may be accessed via the -activeFetcher or -chunkFetcher methods, and +// -responseHeaders and -statusCode reflect results from the most recent chunk +// fetcher.) +// +// Chunk fetchers are discarded as soon as they have completed. +// +// The protocol also allows for a cancellation notification request to be sent to the +// server to allow discarding of the currently uploaded data and this will be sent +// automatically upon calling stopFetching if the upload has already started. +// +// Note: Unlike the fetcher superclass, the methods of GTMSessionUploadFetcher should +// only be used from the main thread until further work is done to make this subclass +// thread-safe. + +#import "GTMSessionFetcher.h" +#import "GTMSessionFetcherService.h" + +GTM_ASSUME_NONNULL_BEGIN + +// The value to use for file size parameters when the file size is not yet known. +extern int64_t const kGTMSessionUploadFetcherUnknownFileSize; + +// Unless an application knows it needs a smaller chunk size, it should use the standard +// chunk size, which sends the entire file as a single chunk to minimize upload overhead. +// Setting an explicit chunk size that comfortably fits in memory is advisable for large +// uploads. +extern int64_t const kGTMSessionUploadFetcherStandardChunkSize; + +// When uploading requires data buffer allocations (such as uploading from an NSData or +// an NSFileHandle) this is the maximum buffer size that will be created by the fetcher. +extern int64_t const kGTMSessionUploadFetcherMaximumDemandBufferSize; + +// Notification that the upload location URL was provided by the server. +extern NSString *const kGTMSessionFetcherUploadLocationObtainedNotification; + +// Block to provide data during uploads. +// +// Response data may be allocated with dataWithBytesNoCopy:length:freeWhenDone: for efficiency, +// and released after the response block returns. +// +// If the length of the file being uploaded is unknown or already set, send +// kGTMSessionUploadFetcherUnknownFileSize for |fullUploadLength|. Otherwise, set |fullUploadLength| +// to its proper value. +// +// Pass nil as the data (and optionally an NSError) for a failure. +typedef void (^GTMSessionUploadFetcherDataProviderResponse)(NSData * GTM_NULLABLE_TYPE data, + int64_t fullUploadLength, + NSError * GTM_NULLABLE_TYPE error); +// Do not call the response with an NSData object with less data than the requested length unless +// you are passing the fullUploadLength to the fetcher for the first time and it is the last chunk +// of data in the file being uploaded. +typedef void (^GTMSessionUploadFetcherDataProvider)(int64_t offset, int64_t length, + GTMSessionUploadFetcherDataProviderResponse response); + +// Block to be notified about the final status of the cancellation request started in stopFetching. +// +// |fetcher| will be the cancel request that was sent to the server, or nil if stopFetching is not +// going to send a cancel request. If |fetcher| is provided, the other parameters correspond to the +// completion handler of the cancellation request fetcher. +typedef void (^GTMSessionUploadFetcherCancellationHandler)( + GTMSessionFetcher * GTM_NULLABLE_TYPE fetcher, + NSData * GTM_NULLABLE_TYPE data, + NSError * GTM_NULLABLE_TYPE error); + +@interface GTMSessionUploadFetcher : GTMSessionFetcher + +// Create an upload fetcher specifying either the request or the resume location URL, +// then set an upload data source using one of these: +// +// setUploadFileURL: +// setUploadDataLength:provider: +// setUploadFileHandle: +// setUploadData: + ++ (instancetype)uploadFetcherWithRequest:(NSURLRequest *)request + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(int64_t)chunkSize + fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil; + +// Allows cellular access. ++ (instancetype)uploadFetcherWithLocation:(NSURL * GTM_NULLABLE_TYPE)uploadLocationURL + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(int64_t)chunkSize + fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil; + ++ (instancetype)uploadFetcherWithLocation:(NSURL *GTM_NULLABLE_TYPE)uploadLocationURL + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(int64_t)chunkSize + allowsCellularAccess:(BOOL)allowsCellularAccess + fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil; + +// Allows dataProviders for files of unknown length. Pass kGTMSessionUploadFetcherUnknownFileSize as +// |fullLength| if the length is unknown. +- (void)setUploadDataLength:(int64_t)fullLength + provider:(GTM_NULLABLE GTMSessionUploadFetcherDataProvider)block; + ++ (NSArray *)uploadFetchersForBackgroundSessions; ++ (GTM_NULLABLE instancetype)uploadFetcherForSessionIdentifier:(NSString *)sessionIdentifier; + +- (void)pauseFetching; +- (void)resumeFetching; +- (BOOL)isPaused; + +@property(atomic, strong, GTM_NULLABLE) NSURL *uploadLocationURL; +@property(atomic, strong, GTM_NULLABLE) NSData *uploadData; +@property(atomic, strong, GTM_NULLABLE) NSURL *uploadFileURL; +@property(atomic, strong, GTM_NULLABLE) NSFileHandle *uploadFileHandle; +@property(atomic, copy, readonly, GTM_NULLABLE) GTMSessionUploadFetcherDataProvider uploadDataProvider; +@property(atomic, copy) NSString *uploadMIMEType; +@property(atomic, readonly, assign) int64_t chunkSize; +@property(atomic, readonly, assign) int64_t currentOffset; +// Reflects the original NSURLRequest's @c allowCellularAccess property. +@property(atomic, readonly, assign) BOOL allowsCellularAccess; + +// The fetcher for the current data chunk, if any +@property(atomic, strong, GTM_NULLABLE) GTMSessionFetcher *chunkFetcher; + +// The active fetcher is the current chunk fetcher, or the upload fetcher itself +// if no chunk fetcher has yet been created. +@property(atomic, readonly) GTMSessionFetcher *activeFetcher; + +// The last request made by an active fetcher. Useful for testing. +@property(atomic, readonly, GTM_NULLABLE) NSURLRequest *lastChunkRequest; + +// The status code from the most recently-completed fetch. +@property(atomic, assign) NSInteger statusCode; + +// Invoked as part of the stop fetching process. Invoked immediately if there is no upload in +// progress, otherwise invoked with the results of the attempt to notify the server that the +// upload will not continue. +// +// Unlike other callbacks, since this is related specifically to the stopFetching flow it is not +// cleared by stopFetching. It will instead clear itself after it is invoked or if the completion +// has occured before stopFetching is called. +@property(atomic, copy, GTM_NULLABLE) GTMSessionUploadFetcherCancellationHandler + cancellationHandler; + +// Exposed for testing only. +@property(atomic, readonly, GTM_NULLABLE) dispatch_queue_t delegateCallbackQueue; +@property(atomic, readonly, GTM_NULLABLE) GTMSessionFetcherCompletionHandler delegateCompletionHandler; + +@end + +@interface GTMSessionFetcher (GTMSessionUploadFetcherMethods) + +@property(readonly, GTM_NULLABLE) GTMSessionUploadFetcher *parentUploadFetcher; + +@end + +GTM_ASSUME_NONNULL_END diff --git a/Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.m b/Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.m new file mode 100644 index 0000000..4ea43f6 --- /dev/null +++ b/Pods/GTMSessionFetcher/Source/GTMSessionUploadFetcher.m @@ -0,0 +1,1985 @@ +/* Copyright 2014 Google Inc. All rights reserved. + * + * 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. + */ + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "GTMSessionUploadFetcher.h" + +static NSString *const kGTMSessionIdentifierIsUploadChunkFetcherMetadataKey = @"_upChunk"; +static NSString *const kGTMSessionIdentifierUploadFileURLMetadataKey = @"_upFileURL"; +static NSString *const kGTMSessionIdentifierUploadFileLengthMetadataKey = @"_upFileLen"; +static NSString *const kGTMSessionIdentifierUploadLocationURLMetadataKey = @"_upLocURL"; +static NSString *const kGTMSessionIdentifierUploadMIMETypeMetadataKey = @"_uploadMIME"; +static NSString *const kGTMSessionIdentifierUploadChunkSizeMetadataKey = @"_upChSize"; +static NSString *const kGTMSessionIdentifierUploadCurrentOffsetMetadataKey = @"_upOffset"; +static NSString *const kGTMSessionIdentifierUploadAllowsCellularAccess = @"_upAllowsCellularAccess"; + +static NSString *const kGTMSessionHeaderXGoogUploadChunkGranularity = @"X-Goog-Upload-Chunk-Granularity"; +static NSString *const kGTMSessionHeaderXGoogUploadCommand = @"X-Goog-Upload-Command"; +static NSString *const kGTMSessionHeaderXGoogUploadContentLength = @"X-Goog-Upload-Content-Length"; +static NSString *const kGTMSessionHeaderXGoogUploadContentType = @"X-Goog-Upload-Content-Type"; +static NSString *const kGTMSessionHeaderXGoogUploadOffset = @"X-Goog-Upload-Offset"; +static NSString *const kGTMSessionHeaderXGoogUploadProtocol = @"X-Goog-Upload-Protocol"; +static NSString *const kGTMSessionXGoogUploadProtocolResumable = @"resumable"; +static NSString *const kGTMSessionHeaderXGoogUploadSizeReceived = @"X-Goog-Upload-Size-Received"; +static NSString *const kGTMSessionHeaderXGoogUploadStatus = @"X-Goog-Upload-Status"; +static NSString *const kGTMSessionHeaderXGoogUploadURL = @"X-Goog-Upload-URL"; + +// Property of chunk fetchers identifying the parent upload fetcher. Non-retained NSValue. +static NSString *const kGTMSessionUploadFetcherChunkParentKey = @"_uploadFetcherChunkParent"; + +int64_t const kGTMSessionUploadFetcherUnknownFileSize = -1; + +int64_t const kGTMSessionUploadFetcherStandardChunkSize = (int64_t)LLONG_MAX; + +#if TARGET_OS_IPHONE +int64_t const kGTMSessionUploadFetcherMaximumDemandBufferSize = 10 * 1024 * 1024; // 10 MB for iOS, watchOS, tvOS +#else +int64_t const kGTMSessionUploadFetcherMaximumDemandBufferSize = 100 * 1024 * 1024; // 100 MB for macOS +#endif + +typedef NS_ENUM(NSUInteger, GTMSessionUploadFetcherStatus) { + kStatusUnknown, + kStatusActive, + kStatusFinal, + kStatusCancelled, +}; + +NSString *const kGTMSessionFetcherUploadLocationObtainedNotification = + @"kGTMSessionFetcherUploadLocationObtainedNotification"; + +#if !GTMSESSION_BUILD_COMBINED_SOURCES +@interface GTMSessionFetcher (ProtectedMethods) + +// Access to non-public method on the parent fetcher class. +- (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks; +- (void)createSessionIdentifierWithMetadata:(NSDictionary *)metadata; +- (GTMSessionFetcherCompletionHandler)completionHandlerWithTarget:(id)target + didFinishSelector:(SEL)finishedSelector; +- (void)invokeOnCallbackQueue:(dispatch_queue_t)callbackQueue + afterUserStopped:(BOOL)afterStopped + block:(void (^)(void))block; +- (NSTimer *)retryTimer; +- (void)beginFetchForRetry; + +@property(readwrite, strong) NSData *downloadedData; +- (void)releaseCallbacks; + +- (NSInteger)statusCodeUnsynchronized; + +- (BOOL)userStoppedFetching; + +@end +#endif // !GTMSESSION_BUILD_COMBINED_SOURCES + +@interface GTMSessionUploadFetcher () + +// Changing readonly to readwrite. +@property(atomic, strong, readwrite) NSURLRequest *lastChunkRequest; +@property(atomic, readwrite, assign) int64_t currentOffset; + +// Internal properties. +@property(strong, atomic, GTM_NULLABLE) GTMSessionFetcher *fetcherInFlight; // Synchronized on self. + +@property(assign, atomic, getter=isSubdataGenerating) BOOL subdataGenerating; +@property(assign, atomic) BOOL shouldInitiateOffsetQuery; +@property(assign, atomic) int64_t uploadGranularity; +@property(assign, atomic) BOOL allowsCellularAccess; + +@end + +@implementation GTMSessionUploadFetcher { + GTMSessionFetcher *_chunkFetcher; + + // We'll call through to the delegate's completion handler. + GTMSessionFetcherCompletionHandler _delegateCompletionHandler; + dispatch_queue_t _delegateCallbackQueue; + + // The initial fetch's body length and bytes actually sent are + // needed for calculating progress during subsequent chunk uploads + int64_t _initialBodyLength; + int64_t _initialBodySent; + + // The upload server address for the chunks of this upload session. + NSURL *_uploadLocationURL; + + // _uploadData, _uploadDataProvider, or _uploadFileHandle may be set, but only one. + NSData *_uploadData; + NSFileHandle *_uploadFileHandle; + GTMSessionUploadFetcherDataProvider _uploadDataProvider; + NSURL *_uploadFileURL; + int64_t _uploadFileLength; + NSString *_uploadMIMEType; + int64_t _chunkSize; + int64_t _uploadGranularity; + BOOL _isPaused; + BOOL _isRestartedUpload; + BOOL _shouldInitiateOffsetQuery; + + // Tied to useBackgroundSession property, since this property is applicable to chunk fetchers. + BOOL _useBackgroundSessionOnChunkFetchers; + + // We keep the latest offset into the upload data just for progress reporting. + int64_t _currentOffset; + + NSDictionary *_recentChunkReponseHeaders; + NSInteger _recentChunkStatusCode; + + // For waiting, we need to know the fetcher in flight, if any, and if subdata generation + // is in progress. + GTMSessionFetcher *_fetcherInFlight; + BOOL _isSubdataGenerating; + BOOL _isCancelInFlight; + + GTMSessionUploadFetcherCancellationHandler _cancellationHandler; +} + ++ (void)load { + [self uploadFetchersForBackgroundSessions]; +} + ++ (instancetype)uploadFetcherWithRequest:(NSURLRequest *)request + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(int64_t)chunkSize + fetcherService:(GTMSessionFetcherService *)fetcherService { + GTMSessionUploadFetcher *fetcher = [self uploadFetcherWithRequest:request + fetcherService:fetcherService]; + [fetcher setLocationURL:nil + uploadMIMEType:uploadMIMEType + chunkSize:chunkSize + allowsCellularAccess:request.allowsCellularAccess]; + return fetcher; +} + ++ (instancetype)uploadFetcherWithLocation:(NSURL *GTM_NULLABLE_TYPE)uploadLocationURL + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(int64_t)chunkSize + fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil { + return [self uploadFetcherWithLocation:uploadLocationURL + uploadMIMEType:uploadMIMEType + chunkSize:chunkSize + allowsCellularAccess:YES + fetcherService:fetcherServiceOrNil]; +} + ++ (instancetype)uploadFetcherWithLocation:(NSURL *GTM_NULLABLE_TYPE)uploadLocationURL + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(int64_t)chunkSize + allowsCellularAccess:(BOOL)allowsCellularAccess + fetcherService:(GTMSessionFetcherService *)fetcherService { + GTMSessionUploadFetcher *fetcher = [self uploadFetcherWithRequest:nil + fetcherService:fetcherService]; + [fetcher setLocationURL:uploadLocationURL + uploadMIMEType:uploadMIMEType + chunkSize:chunkSize + allowsCellularAccess:allowsCellularAccess]; + return fetcher; +} + ++ (instancetype)uploadFetcherForSessionIdentifierMetadata:(NSDictionary *)metadata { + GTMSESSION_ASSERT_DEBUG( + [metadata[kGTMSessionIdentifierIsUploadChunkFetcherMetadataKey] boolValue], + @"Session identifier metadata is not for an upload fetcher: %@", metadata); + + NSNumber *uploadFileLengthNum = metadata[kGTMSessionIdentifierUploadFileLengthMetadataKey]; + GTMSESSION_ASSERT_DEBUG(uploadFileLengthNum != nil, + @"Session metadata missing an UploadFileSize"); + if (uploadFileLengthNum == nil) return nil; + + int64_t uploadFileLength = [uploadFileLengthNum longLongValue]; + GTMSESSION_ASSERT_DEBUG(uploadFileLength >= 0, @"Session metadata UploadFileSize is unknown"); + + NSString *uploadFileURLString = metadata[kGTMSessionIdentifierUploadFileURLMetadataKey]; + GTMSESSION_ASSERT_DEBUG(uploadFileURLString, @"Session metadata missing an UploadFileURL"); + if (uploadFileURLString == nil) return nil; + + NSURL *uploadFileURL = [NSURL URLWithString:uploadFileURLString]; + // There used to be a call here to NSURL checkResourceIsReachableAndReturnError: to check for the + // existence of the file (also tried NSFileManager fileExistsAtPath:). We've determined + // empirically that the check can fail at startup even when the upload file does in fact exist. + // For now, we'll go ahead and restore the background upload fetcher. If the file doesn't exist, + // it will fail later. + + NSString *uploadLocationURLString = metadata[kGTMSessionIdentifierUploadLocationURLMetadataKey]; + NSURL *uploadLocationURL = + uploadLocationURLString ? [NSURL URLWithString:uploadLocationURLString] : nil; + + NSString *uploadMIMEType = + metadata[kGTMSessionIdentifierUploadMIMETypeMetadataKey]; + int64_t uploadChunkSize = + [metadata[kGTMSessionIdentifierUploadChunkSizeMetadataKey] longLongValue]; + if (uploadChunkSize <= 0) { + uploadChunkSize = kGTMSessionUploadFetcherStandardChunkSize; + } + int64_t currentOffset = + [metadata[kGTMSessionIdentifierUploadCurrentOffsetMetadataKey] longLongValue]; + + BOOL allowsCellularAccess = YES; + if (metadata[kGTMSessionIdentifierUploadAllowsCellularAccess]) { + allowsCellularAccess = [metadata[kGTMSessionIdentifierUploadAllowsCellularAccess] boolValue]; + } + + GTMSESSION_ASSERT_DEBUG(currentOffset <= uploadFileLength, + @"CurrentOffset (%lld) exceeds UploadFileSize (%lld)", + currentOffset, uploadFileLength); + if (currentOffset > uploadFileLength) return nil; + + GTMSessionUploadFetcher *uploadFetcher = [self uploadFetcherWithLocation:uploadLocationURL + uploadMIMEType:uploadMIMEType + chunkSize:uploadChunkSize + allowsCellularAccess:allowsCellularAccess + fetcherService:nil]; + // Set the upload file length before setting the upload file URL tries to determine the length. + [uploadFetcher setUploadFileLength:uploadFileLength]; + + uploadFetcher.uploadFileURL = uploadFileURL; + uploadFetcher.sessionUserInfo = metadata; + uploadFetcher.useBackgroundSession = YES; + uploadFetcher.currentOffset = currentOffset; + uploadFetcher.delegateCallbackQueue = uploadFetcher.callbackQueue; + uploadFetcher.allowedInsecureSchemes = @[ @"http" ]; // Allowed on restored upload fetcher. + return uploadFetcher; +} + ++ (instancetype)uploadFetcherWithRequest:(NSURLRequest *)request + fetcherService:(GTMSessionFetcherService *)fetcherService { + // Internal utility method for instantiating fetchers + GTMSessionUploadFetcher *fetcher; + if ([fetcherService isKindOfClass:[GTMSessionFetcherService class]]) { + fetcher = [fetcherService fetcherWithRequest:request + fetcherClass:self]; + } else { + fetcher = [self fetcherWithRequest:request]; + } + fetcher.useBackgroundSession = YES; + return fetcher; +} + ++ (NSPointerArray *)uploadFetcherPointerArrayForBackgroundSessions { + static NSPointerArray *gUploadFetcherPointerArrayForBackgroundSessions = nil; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + gUploadFetcherPointerArrayForBackgroundSessions = [NSPointerArray weakObjectsPointerArray]; + }); + return gUploadFetcherPointerArrayForBackgroundSessions; +} + ++ (instancetype)uploadFetcherForSessionIdentifier:(NSString *)sessionIdentifier { + GTMSESSION_ASSERT_DEBUG(sessionIdentifier != nil, @"Invalid session identifier"); + NSArray *uploadFetchersForBackgroundSessions = [self uploadFetchersForBackgroundSessions]; + for (GTMSessionUploadFetcher *uploadFetcher in uploadFetchersForBackgroundSessions) { + if ([uploadFetcher.chunkFetcher.sessionIdentifier isEqual:sessionIdentifier]) { + return uploadFetcher; + } + } + return nil; +} + ++ (NSArray *)uploadFetchersForBackgroundSessions { + NSMutableSet *restoredSessionIdentifiers = [[NSMutableSet alloc] init]; + NSMutableArray *uploadFetchers = [[NSMutableArray alloc] init]; + NSPointerArray *uploadFetcherPointerArray = [self uploadFetcherPointerArrayForBackgroundSessions]; + + // Collect the background session upload fetchers that are still in memory. + @synchronized(uploadFetcherPointerArray) { + [uploadFetcherPointerArray compact]; + for (GTMSessionUploadFetcher *uploadFetcher in uploadFetcherPointerArray) { + NSString *sessionIdentifier = uploadFetcher.chunkFetcher.sessionIdentifier; + if (sessionIdentifier) { + [restoredSessionIdentifiers addObject:sessionIdentifier]; + [uploadFetchers addObject:uploadFetcher]; + } + } + } // @synchronized(uploadFetcherPointerArray) + + // The system may have other ongoing background upload sessions. Restore upload fetchers for those + // too. + NSArray *fetchers = [GTMSessionFetcher fetchersForBackgroundSessions]; + for (GTMSessionFetcher *fetcher in fetchers) { + NSString *sessionIdentifier = fetcher.sessionIdentifier; + if (!sessionIdentifier || [restoredSessionIdentifiers containsObject:sessionIdentifier]) { + continue; + } + NSDictionary *sessionIdentifierMetadata = [fetcher sessionIdentifierMetadata]; + if (sessionIdentifierMetadata == nil) { + continue; + } + if (![sessionIdentifierMetadata[kGTMSessionIdentifierIsUploadChunkFetcherMetadataKey] boolValue]) { + continue; + } + GTMSessionUploadFetcher *uploadFetcher = + [self uploadFetcherForSessionIdentifierMetadata:sessionIdentifierMetadata]; + if (uploadFetcher == nil) { + // Something went wrong with this upload fetcher, so kill the restored chunk fetcher. + [fetcher stopFetching]; + continue; + } + [uploadFetchers addObject:uploadFetcher]; + uploadFetcher->_chunkFetcher = fetcher; + uploadFetcher->_fetcherInFlight = fetcher; + [uploadFetcher attachSendProgressBlockToChunkFetcher:fetcher]; + fetcher.completionHandler = + [fetcher completionHandlerWithTarget:uploadFetcher + didFinishSelector:@selector(chunkFetcher:finishedWithData:error:)]; + + GTMSESSION_LOG_DEBUG(@"%@ restoring upload fetcher %@ for chunk fetcher %@", + [self class], uploadFetcher, fetcher); + } + return uploadFetchers; +} + +- (void)setUploadData:(NSData *)data { + BOOL changed = NO; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_uploadData != data) { + _uploadData = data; + changed = YES; + } + } + if (changed) { + [self setupRequestHeaders]; + } +} + +- (NSData *)uploadData { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _uploadData; + } +} + +- (void)setUploadFileHandle:(NSFileHandle *)fh { + BOOL changed = NO; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_uploadFileHandle != fh) { + _uploadFileHandle = fh; + changed = YES; + } + } + if (changed) { + [self setupRequestHeaders]; + } +} + +- (NSFileHandle *)uploadFileHandle { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _uploadFileHandle; + } +} + +- (void)setUploadFileURL:(NSURL *)uploadURL { + BOOL changed = NO; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_uploadFileURL != uploadURL) { + _uploadFileURL = uploadURL; + changed = YES; + } + } + if (changed) { + [self setupRequestHeaders]; + } +} + +- (NSURL *)uploadFileURL { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _uploadFileURL; + } +} + +- (void)setUploadFileLength:(int64_t)fullLength { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_uploadFileLength == kGTMSessionUploadFetcherUnknownFileSize && + fullLength != kGTMSessionUploadFetcherUnknownFileSize) { + _uploadFileLength = fullLength; + } + } +} + +- (void)setUploadDataLength:(int64_t)fullLength + provider:(GTMSessionUploadFetcherDataProvider)block { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _uploadDataProvider = [block copy]; + _uploadFileLength = fullLength; + } + [self setupRequestHeaders]; +} + +- (GTMSessionUploadFetcherDataProvider)uploadDataProvider { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _uploadDataProvider; + } +} + + +- (void)setUploadMIMEType:(NSString *)uploadMIMEType { + GTMSESSION_ASSERT_DEBUG(0, @"TODO: disallow setUploadMIMEType by making declaration readonly"); + // (and uploadMIMEType, chunksize, currentOffset) + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _uploadMIMEType = uploadMIMEType; + } +} + +- (NSString *)uploadMIMEType { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _uploadMIMEType; + } +} + +- (int64_t)chunkSize { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _chunkSize; + } +} + +- (void)setupRequestHeaders { + GTMSessionCheckNotSynchronized(self); + +#if DEBUG + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + int hasData = (_uploadData != nil) ? 1 : 0; + int hasFileHandle = (_uploadFileHandle != nil) ? 1 : 0; + int hasFileURL = (_uploadFileURL != nil) ? 1 : 0; + int hasUploadDataProvider = (_uploadDataProvider != nil) ? 1 : 0; + int numberOfSources = hasData + hasFileHandle + hasFileURL + hasUploadDataProvider; + #pragma unused(numberOfSources) + GTMSESSION_ASSERT_DEBUG(numberOfSources == 1, + @"Need just one upload source (%d)", numberOfSources); + } // @synchronized(self) +#endif + + // Add our custom headers to the initial request indicating the data + // type and total size to be delivered later in the chunk requests. + NSMutableURLRequest *mutableRequest = [self.request mutableCopy]; + + GTMSESSION_ASSERT_DEBUG((mutableRequest == nil) != (_uploadLocationURL == nil), + @"Request and location are mutually exclusive"); + if (!mutableRequest) return; + + [mutableRequest setValue:kGTMSessionXGoogUploadProtocolResumable + forHTTPHeaderField:kGTMSessionHeaderXGoogUploadProtocol]; + [mutableRequest setValue:@"start" + forHTTPHeaderField:kGTMSessionHeaderXGoogUploadCommand]; + [mutableRequest setValue:_uploadMIMEType + forHTTPHeaderField:kGTMSessionHeaderXGoogUploadContentType]; + [mutableRequest setValue:@([self fullUploadLength]).stringValue + forHTTPHeaderField:kGTMSessionHeaderXGoogUploadContentLength]; + + NSString *method = mutableRequest.HTTPMethod; + if (method == nil || [method caseInsensitiveCompare:@"GET"] == NSOrderedSame) { + [mutableRequest setHTTPMethod:@"POST"]; + } + + // Ensure the user agent header identifies this to the upload server as a + // GTMSessionUploadFetcher client. The /1 can be incremented in the unlikely circumstance + // we need to make a bug fix in the client that the server can recognize. + NSString *const kUserAgentStub = @"(GTMSUF/1)"; + NSString *userAgent = [mutableRequest valueForHTTPHeaderField:@"User-Agent"]; + if (userAgent == nil + || [userAgent rangeOfString:kUserAgentStub].location == NSNotFound) { + if (userAgent.length == 0) { + userAgent = GTMFetcherStandardUserAgentString(nil); + } + userAgent = [userAgent stringByAppendingFormat:@" %@", kUserAgentStub]; + [mutableRequest setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + } + [self setRequest:mutableRequest]; +} + +- (void)setLocationURL:(NSURL *GTM_NULLABLE_TYPE)location + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(int64_t)chunkSize + allowsCellularAccess:(BOOL)allowsCellularAccess { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + GTMSESSION_ASSERT_DEBUG(chunkSize > 0, @"chunk size is zero"); + + _allowsCellularAccess = allowsCellularAccess; + + // When resuming an upload, set the known upload target URL. + _uploadLocationURL = location; + + _uploadMIMEType = uploadMIMEType; + _chunkSize = chunkSize; + + // Indicate that we've not yet determined the file handle's length + _uploadFileLength = kGTMSessionUploadFetcherUnknownFileSize; + + // Indicate that we've not yet determined the upload fetcher status + _recentChunkStatusCode = -1; + + // If this is restarting an upload begun by another fetcher, + // the location is specified but the request is nil + _isRestartedUpload = (location != nil); + } // @synchronized(self) +} + +- (int64_t)fullUploadLength { + int64_t result; + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_uploadData) { + result = (int64_t)_uploadData.length; + } else { + if (_uploadFileLength == kGTMSessionUploadFetcherUnknownFileSize) { + if (_uploadFileHandle) { + // First time through, seek to end to determine file length + _uploadFileLength = (int64_t)[_uploadFileHandle seekToEndOfFile]; + } else if (_uploadDataProvider) { + // _uploadFileLength is set when the _uploadDataProvider is set. + GTMSESSION_ASSERT_DEBUG(_uploadFileLength >= 0, @"No uploadDataProvider length set"); + } else { + NSNumber *filesizeNum; + NSError *valueError; + if ([_uploadFileURL getResourceValue:&filesizeNum + forKey:NSURLFileSizeKey + error:&valueError]) { + _uploadFileLength = filesizeNum.longLongValue; + } else { + GTMSESSION_ASSERT_DEBUG(NO, @"Cannot get file size: %@\n %@", + valueError, _uploadFileURL.path); + _uploadFileLength = 0; + } + } + } + result = _uploadFileLength; + } + } // @synchronized(self) + return result; +} + +// Make a subdata of the upload data. +- (void)generateChunkSubdataWithOffset:(int64_t)offset + length:(int64_t)length + response:(GTMSessionUploadFetcherDataProviderResponse)response { + GTMSessionUploadFetcherDataProvider uploadDataProvider = self.uploadDataProvider; + if (uploadDataProvider) { + uploadDataProvider(offset, length, response); + return; + } + + NSData *uploadData = self.uploadData; + if (uploadData) { + // NSData provided. + NSData *resultData; + if (offset == 0 && length == (int64_t)uploadData.length) { + resultData = uploadData; + } else { + int64_t dataLength = (int64_t)uploadData.length; + // Ensure our range is valid. b/18007814 + if (offset + length > dataLength) { + NSString *errorMessage = [NSString stringWithFormat: + @"Range invalid for upload data. offset: %lld\tlength: %lld\tdataLength: %lld", + offset, length, dataLength]; + GTMSESSION_ASSERT_DEBUG(NO, @"%@", errorMessage); + response(nil, + kGTMSessionUploadFetcherUnknownFileSize, + [self uploadChunkUnavailableErrorWithDescription:errorMessage]); + return; + } + NSRange range = NSMakeRange((NSUInteger)offset, (NSUInteger)length); + + @try { + resultData = [uploadData subdataWithRange:range]; + } + @catch (NSException *exception) { + NSString *errorMessage = exception.description; + GTMSESSION_ASSERT_DEBUG(NO, @"%@", errorMessage); + response(nil, + kGTMSessionUploadFetcherUnknownFileSize, + [self uploadChunkUnavailableErrorWithDescription:errorMessage]); + return; + } + } + response(resultData, kGTMSessionUploadFetcherUnknownFileSize, nil); + return; + } + NSURL *uploadFileURL = self.uploadFileURL; + if (uploadFileURL) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [self generateChunkSubdataFromFileURL:uploadFileURL + offset:offset + length:length + response:response]; + }); + return; + } + GTMSESSION_ASSERT_DEBUG(_uploadFileHandle, @"Unexpectedly missing upload data package"); + NSFileHandle *uploadFileHandle = self.uploadFileHandle; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [self generateChunkSubdataFromFileHandle:uploadFileHandle + offset:offset + length:length + response:response]; + }); +} + +- (void)generateChunkSubdataFromFileHandle:(NSFileHandle *)fileHandle + offset:(int64_t)offset + length:(int64_t)length + response:(GTMSessionUploadFetcherDataProviderResponse)response { + NSData *resultData; + NSError *error; + @try { + [fileHandle seekToFileOffset:(unsigned long long)offset]; + resultData = [fileHandle readDataOfLength:(NSUInteger)length]; + } + @catch (NSException *exception) { + GTMSESSION_ASSERT_DEBUG(NO, @"uploadFileHandle failed to read, %@", exception); + error = [self uploadChunkUnavailableErrorWithDescription:exception.description]; + } + // The response always re-dispatches to the main thread, so we skip doing that here. + response(resultData, kGTMSessionUploadFetcherUnknownFileSize, error); +} + +- (void)generateChunkSubdataFromFileURL:(NSURL *)fileURL + offset:(int64_t)offset + length:(int64_t)length + response:(GTMSessionUploadFetcherDataProviderResponse)response { + GTMSessionCheckNotSynchronized(self); + + NSData *resultData; + NSError *error; + int64_t fullUploadLength = [self fullUploadLength]; + NSData *mappedData = + [NSData dataWithContentsOfURL:fileURL + options:NSDataReadingMappedAlways + NSDataReadingUncached + error:&error]; + if (!mappedData) { + // We could not create an NSData by memory-mapping the file. +#if TARGET_IPHONE_SIMULATOR + // NSTemporaryDirectory() can differ in the simulator between app restarts, + // yet the contents for the new path remains unchanged, so try the latest temp path. + if ([error.domain isEqual:NSCocoaErrorDomain] && (error.code == NSFileReadNoSuchFileError)) { + NSString *filename = [fileURL lastPathComponent]; + NSString *filePath = [NSTemporaryDirectory() stringByAppendingPathComponent:filename]; + NSURL *newFileURL = [NSURL fileURLWithPath:filePath]; + if (![newFileURL isEqual:fileURL]) { + [self generateChunkSubdataFromFileURL:newFileURL + offset:offset + length:length + response:response]; + return; + } + } +#endif + + // If the file is just too large to create an NSData for, or if for some other reason we can't + // map it, create an NSFileHandle instead to read a subset into an NSData. +#if DEBUG + NSNumber *fileSizeNum; + BOOL hasFileSize = [fileURL getResourceValue:&fileSizeNum forKey:NSURLFileSizeKey error:NULL]; + GTMSESSION_LOG_DEBUG(@"Note: uploadFileURL is falling back to creating upload chunks by reading" + @" an NSFileHandle since uploadFileURL failed to map the upload file," + @" file size %@, %@", + hasFileSize ? fileSizeNum : @"unknown", error); +#endif + + NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingFromURL:fileURL + error:&error]; + if (fileHandle != nil) { + [self generateChunkSubdataFromFileHandle:fileHandle + offset:offset + length:length + response:response]; + return; + } + GTMSESSION_ASSERT_DEBUG(NO, @"uploadFileURL failed to read, %@", error); + // Fall through with the error. + } else { + // Successfully created an NSData by memory-mapping the file. + if ((NSUInteger)(offset + length) > mappedData.length) { + NSString *errorMessage = [NSString stringWithFormat: + @"Range invalid for upload data. offset: %lld\tlength: %lld\tdataLength: %lld\texpected UploadLength: %lld", + offset, length, (long long)mappedData.length, fullUploadLength]; + GTMSESSION_ASSERT_DEBUG(NO, @"%@", errorMessage); + response(nil, + kGTMSessionUploadFetcherUnknownFileSize, + [self uploadChunkUnavailableErrorWithDescription:errorMessage]); + return; + } + if (offset > 0 || length < fullUploadLength) { + NSRange range = NSMakeRange((NSUInteger)offset, (NSUInteger)length); + resultData = [mappedData subdataWithRange:range]; + } else { + resultData = mappedData; + } + } + // The response always re-dispatches to the main thread, so we skip re-dispatching here. + response(resultData, kGTMSessionUploadFetcherUnknownFileSize, error); +} + +- (NSError *)uploadChunkUnavailableErrorWithDescription:(NSString *)description { + // The description in the userInfo is intended as a clue to programmers, not + // for client code to examine or rely on. + NSDictionary *userInfo = @{ @"description" : description }; + return [NSError errorWithDomain:kGTMSessionFetcherErrorDomain + code:GTMSessionFetcherErrorUploadChunkUnavailable + userInfo:userInfo]; +} + +- (NSError *)prematureFailureErrorWithUserInfo:(NSDictionary *)userInfo { + // An error for if we get an unexpected status from the upload server or + // otherwise cannot continue. This is an issue beyond the upload protocol; + // there's no way the client can do anything useful except give up. + NSError *error = [NSError errorWithDomain:kGTMSessionFetcherStatusDomain + code:501 // Not implemented + userInfo:userInfo]; + return error; +} + ++ (GTMSessionUploadFetcherStatus)uploadStatusFromResponseHeaders:(NSDictionary *)responseHeaders { + NSString *statusString = [responseHeaders objectForKey:kGTMSessionHeaderXGoogUploadStatus]; + if ([statusString isEqual:@"active"]) { + return kStatusActive; + } + if ([statusString isEqual:@"final"]) { + return kStatusFinal; + } + if ([statusString isEqual:@"cancelled"]) { + return kStatusCancelled; + } + return kStatusUnknown; +} + +#pragma mark Method overrides affecting the initial fetch only + +- (void)setCompletionHandler:(GTMSessionFetcherCompletionHandler)handler { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _delegateCompletionHandler = handler; + } +} + +- (void)setDelegateCallbackQueue:(dispatch_queue_t GTM_NULLABLE_TYPE)queue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _delegateCallbackQueue = queue; + } +} + +- (dispatch_queue_t GTM_NULLABLE_TYPE)delegateCallbackQueue { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _delegateCallbackQueue; + } +} + +- (BOOL)isRestartedUpload { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _isRestartedUpload; + } +} + +- (GTMSessionFetcher * GTM_NULLABLE_TYPE)chunkFetcher { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _chunkFetcher; + } +} + +- (void)setChunkFetcher:(GTMSessionFetcher * GTM_NULLABLE_TYPE)fetcher { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _chunkFetcher = fetcher; + } +} + +- (void)setFetcherInFlight:(GTMSessionFetcher * GTM_NULLABLE_TYPE)fetcher { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _fetcherInFlight = fetcher; + } +} + +- (GTMSessionFetcher * GTM_NULLABLE_TYPE)fetcherInFlight { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _fetcherInFlight; + } +} + +- (void)setCancellationHandler:(GTMSessionUploadFetcherCancellationHandler GTM_NULLABLE_TYPE) + cancellationHandler { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _cancellationHandler = cancellationHandler; + } +} + +- (GTMSessionUploadFetcherCancellationHandler GTM_NULLABLE_TYPE)cancellationHandler { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _cancellationHandler; + } +} + +- (void)beginFetchForRetry { + GTMSessionCheckNotSynchronized(self); + + // Override the superclass to reset the initial body length and fetcher-in-flight, + // then call the superclass implementation. + [self setInitialBodyLength:[self bodyLength]]; + + GTMSESSION_ASSERT_DEBUG(self.fetcherInFlight == nil, @"unexpected fetcher in flight: %@", + self.fetcherInFlight); + self.fetcherInFlight = self; + [super beginFetchForRetry]; +} + +- (void)beginFetchWithCompletionHandler:(GTMSessionFetcherCompletionHandler)handler { + GTMSessionCheckNotSynchronized(self); + + [self setInitialBodyLength:[self bodyLength]]; + + // We'll hold onto the superclass's callback queue so we can invoke the handler + // even after the superclass has released the queue and its callback handler, as + // happens during auth failure. + [self setDelegateCallbackQueue:self.callbackQueue]; + self.completionHandler = handler; + + if ([self isRestartedUpload]) { + // When restarting an upload, we know the destination location for chunk fetches, + // but we need to query to find the initial offset. + if (![self isPaused]) { + [self sendQueryForUploadOffsetWithFetcherProperties:self.properties]; + } + return; + } + // We don't want to call into the client's completion block immediately + // after the finish of the initial connection (the delegate is called only + // when uploading finishes), so we substitute our own completion block to be + // called when the initial connection finishes + GTMSESSION_ASSERT_DEBUG(self.fetcherInFlight == nil, @"unexpected fetcher in flight: %@", + self.fetcherInFlight); + + self.fetcherInFlight = self; + [super beginFetchWithCompletionHandler:^(NSData *data, NSError *error) { + self.fetcherInFlight = nil; + // callback + + BOOL hasTestBlock = (self.testBlock != nil); + if (![self isRestartedUpload] && !hasTestBlock) { + if (error == nil) { + [self beginChunkFetches]; + } else { + if ([self retryTimer] == nil) { + [self invokeFinalCallbackWithData:nil + error:error + shouldInvalidateLocation:YES]; + } + } + } else { + // If there was no initial request, then this fetch is resuming some + // other uploadFetcher's initial request, and the superclass's connection + // is never used, so at this point we call the user's actual completion + // block. + if (!hasTestBlock) { + [self invokeFinalCallbackWithData:data + error:error + shouldInvalidateLocation:YES]; + } else { + // There was a test block, so we won't do chunk fetches, but we simulate obtaining + // the data to be uploaded from the upload data provider block or the file handle, + // and then call back. + [self generateChunkSubdataWithOffset:0 + length:[self fullUploadLength] + response:^(NSData *generateData, int64_t fullUploadLength, NSError *generateError) { + [self invokeFinalCallbackWithData:data + error:error + shouldInvalidateLocation:YES]; + }]; + } + } + }]; +} + +- (void)beginChunkFetches { + GTMSessionCheckNotSynchronized(self); + +#if DEBUG + // The initial response of the resumable upload protocol should have an + // empty body + // + // This assert typically happens because the upload create/edit link URL was + // not supplied with the request, and the server is thus expecting a non- + // resumable request/response. + if (self.downloadedData.length > 0) { + NSData *downloadedData = self.downloadedData; + NSString *str = [[NSString alloc] initWithData:downloadedData + encoding:NSUTF8StringEncoding]; + #pragma unused(str) + GTMSESSION_ASSERT_DEBUG(NO, @"unexpected response data (uploading to the wrong URL?)\n%@", str); + } +#endif + + // We need to get the upload URL from the location header to continue. + NSDictionary *responseHeaders = [self responseHeaders]; + + [self retrieveUploadChunkGranularityFromResponseHeaders:responseHeaders]; + + GTMSessionUploadFetcherStatus uploadStatus = + [[self class] uploadStatusFromResponseHeaders:responseHeaders]; + GTMSESSION_ASSERT_DEBUG(uploadStatus != kStatusUnknown, + @"beginChunkFetches has unexpected upload status for headers %@", responseHeaders); + + BOOL isPrematureStop = (uploadStatus == kStatusFinal) || (uploadStatus == kStatusCancelled); + + NSString *uploadLocationURLStr = [responseHeaders objectForKey:kGTMSessionHeaderXGoogUploadURL]; + BOOL hasUploadLocation = (uploadLocationURLStr.length > 0); + + if (isPrematureStop || !hasUploadLocation) { + GTMSESSION_ASSERT_DEBUG(NO, @"Premature failure: upload-status:\"%@\" location:%@", + [responseHeaders objectForKey:kGTMSessionHeaderXGoogUploadStatus], uploadLocationURLStr); + // We cannot continue since we do not know the location to use + // as our upload destination. + NSDictionary *userInfo = nil; + NSData *downloadedData = self.downloadedData; + if (downloadedData.length > 0) { + userInfo = @{ kGTMSessionFetcherStatusDataKey : downloadedData }; + } + NSError *failureError = [self prematureFailureErrorWithUserInfo:userInfo]; + [self invokeFinalCallbackWithData:nil + error:failureError + shouldInvalidateLocation:YES]; + return; + } + + self.uploadLocationURL = [NSURL URLWithString:uploadLocationURLStr]; + + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:kGTMSessionFetcherUploadLocationObtainedNotification + object:self]; + + // we've now sent all of the initial post body data, so we need to include + // its size in future progress indicator callbacks + [self setInitialBodySent:[self initialBodyLength]]; + + // just in case the user paused us during the initial fetch... + if (![self isPaused]) { + [self uploadNextChunkWithOffset:0]; + } +} + +- (void)URLSession:(NSURLSession *)session + task:(NSURLSessionTask *)task + didSendBodyData:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent + totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { + // Overrides the superclass. + [self invokeDelegateWithDidSendBytes:bytesSent + totalBytesSent:totalBytesSent + totalBytesExpectedToSend:totalBytesExpectedToSend + [self fullUploadLength]]; +} + +- (BOOL)shouldReleaseCallbacksUponCompletion { + // Overrides the superclass. + + // We don't want the superclass to release the delegate and callback + // blocks once the initial fetch has finished + // + // This is invoked for only successful completion of the connection; + // an error always will invoke and release the callbacks + return NO; +} + +- (void)invokeFinalCallbackWithData:(NSData *)data + error:(NSError *)error + shouldInvalidateLocation:(BOOL)shouldInvalidateLocation { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (shouldInvalidateLocation) { + _uploadLocationURL = nil; + } + + dispatch_queue_t queue = _delegateCallbackQueue; + GTMSessionFetcherCompletionHandler handler = _delegateCompletionHandler; + if (queue && handler) { + [self invokeOnCallbackQueue:queue + afterUserStopped:NO + block:^{ + handler(data, error); + }]; + } + } // @synchronized(self) + + [self releaseUploadAndBaseCallbacks:!self.userStoppedFetching]; +} + +- (void)releaseUploadAndBaseCallbacks:(BOOL)shouldReleaseCancellation { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _delegateCallbackQueue = nil; + _delegateCompletionHandler = nil; + _uploadDataProvider = nil; + if (shouldReleaseCancellation) { + _cancellationHandler = nil; + } + } + + // Release the base class's callbacks, too, if needed. + [self releaseCallbacks]; +} + +- (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks { + GTMSessionCheckNotSynchronized(self); + + // Clear _fetcherInFlight when stopped. Moved from stopFetching, since that's a public method, + // where this method does the work. Fixes issue clearing value when retryBlock included. + GTMSessionFetcher *fetcherInFlight = self.fetcherInFlight; + if (fetcherInFlight == self) { + self.fetcherInFlight = nil; + } + + [super stopFetchReleasingCallbacks:shouldReleaseCallbacks]; + + if (shouldReleaseCallbacks) { + [self releaseUploadAndBaseCallbacks:NO]; + } +} + +#pragma mark Chunk fetching methods + +- (void)uploadNextChunkWithOffset:(int64_t)offset { + // use the properties in each chunk fetcher + NSDictionary *props = [self properties]; + + [self uploadNextChunkWithOffset:offset + fetcherProperties:props]; +} + +- (void)sendQueryForUploadOffsetWithFetcherProperties:(NSDictionary *)props { + GTMSessionFetcher *queryFetcher = [self uploadFetcherWithProperties:props + isQueryFetch:YES]; + queryFetcher.bodyData = [NSData data]; + + NSString *originalComment = self.comment; + [queryFetcher setCommentWithFormat:@"%@ (query offset)", + originalComment ? originalComment : @"upload"]; + + [queryFetcher setRequestValue:@"query" forHTTPHeaderField:kGTMSessionHeaderXGoogUploadCommand]; + + self.fetcherInFlight = queryFetcher; + [queryFetcher beginFetchWithDelegate:self + didFinishSelector:@selector(queryFetcher:finishedWithData:error:)]; +} + +- (void)queryFetcher:(GTMSessionFetcher *)queryFetcher + finishedWithData:(NSData *)data + error:(NSError *)error { + self.fetcherInFlight = nil; + + NSDictionary *responseHeaders = [queryFetcher responseHeaders]; + NSString *sizeReceivedHeader; + + GTMSessionUploadFetcherStatus uploadStatus = + [[self class] uploadStatusFromResponseHeaders:responseHeaders]; + GTMSESSION_ASSERT_DEBUG(uploadStatus != kStatusUnknown || error != nil, + @"query fetcher completion has unexpected upload status for headers %@", responseHeaders); + + if (error == nil) { + sizeReceivedHeader = [responseHeaders objectForKey:kGTMSessionHeaderXGoogUploadSizeReceived]; + + if (uploadStatus == kStatusCancelled || + (uploadStatus == kStatusActive && sizeReceivedHeader == nil)) { + NSDictionary *userInfo = nil; + if (data.length > 0) { + userInfo = @{ kGTMSessionFetcherStatusDataKey : data }; + } + error = [self prematureFailureErrorWithUserInfo:userInfo]; + } + } + + if (error == nil) { + int64_t offset = [sizeReceivedHeader longLongValue]; + int64_t fullUploadLength = [self fullUploadLength]; + if (uploadStatus == kStatusFinal || + (offset >= fullUploadLength && + fullUploadLength != kGTMSessionUploadFetcherUnknownFileSize)) { + // Handle we're done + [self chunkFetcher:queryFetcher finishedWithData:data error:nil]; + } else { + [self retrieveUploadChunkGranularityFromResponseHeaders:responseHeaders]; + [self uploadNextChunkWithOffset:offset]; + } + } else { + // Handle query error + [self chunkFetcher:queryFetcher finishedWithData:data error:error]; + } +} + +- (void)sendCancelUploadWithFetcherProperties:(NSDictionary *)props { + @synchronized(self) { + _isCancelInFlight = YES; + } + GTMSessionFetcher *cancelFetcher = [self uploadFetcherWithProperties:props + isQueryFetch:YES]; + cancelFetcher.bodyData = [NSData data]; + + NSString *originalComment = self.comment; + [cancelFetcher setCommentWithFormat:@"%@ (cancel)", + originalComment ? originalComment : @"upload"]; + + [cancelFetcher setRequestValue:@"cancel" forHTTPHeaderField:kGTMSessionHeaderXGoogUploadCommand]; + + self.fetcherInFlight = cancelFetcher; + [cancelFetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) { + self.fetcherInFlight = nil; + if (![self triggerCancellationHandlerForFetch:cancelFetcher data:data error:error]) { + if (error) { + GTMSESSION_LOG_DEBUG(@"cancelFetcher %@", error); + } + } + @synchronized(self) { + self->_isCancelInFlight = NO; + } + }]; +} + +- (void)uploadNextChunkWithOffset:(int64_t)offset + fetcherProperties:(NSDictionary *)props { + GTMSessionCheckNotSynchronized(self); + + // Example chunk headers: + // X-Goog-Upload-Command: upload, finalize + // X-Goog-Upload-Offset: 0 + // Content-Length: 2000000 + // Content-Type: image/jpeg + // + // {bytes 0-1999999} + + // The chunk upload URL requires no authentication header. + GTMSessionFetcher *chunkFetcher = [self uploadFetcherWithProperties:props + isQueryFetch:NO]; + [self attachSendProgressBlockToChunkFetcher:chunkFetcher]; + int64_t chunkSize = [self updateChunkFetcher:chunkFetcher + forChunkAtOffset:offset]; + BOOL isUploadingFileURL = (self.uploadFileURL != nil); + int64_t fullUploadLength = [self fullUploadLength]; + + // The chunk size may have changed, so determine again if we're uploading the full file. + BOOL isUploadingFullFile = (offset == 0 && + fullUploadLength != kGTMSessionUploadFetcherUnknownFileSize && + chunkSize >= fullUploadLength); + if (isUploadingFullFile && isUploadingFileURL) { + // The data is the full upload file URL. + chunkFetcher.bodyFileURL = self.uploadFileURL; + [self beginChunkFetcher:chunkFetcher + offset:offset]; + } else { + // Make an NSData for the subset for this upload chunk. + self.subdataGenerating = YES; + [self generateChunkSubdataWithOffset:offset + length:chunkSize + response:^(NSData *chunkData, int64_t uploadFileLength, NSError *chunkError) { + // The subdata methods may leave us on a background thread. + dispatch_async(dispatch_get_main_queue(), ^{ + self.subdataGenerating = NO; + + // dont allow the updating of fileLength for uploads not using a data provider as they + // should know the file length before the upload starts. + if (self->_uploadDataProvider != nil && uploadFileLength > 0) { + [self setUploadFileLength:uploadFileLength]; + // Update the command and content-length headers if this is the last chunk to be sent. + if (offset + chunkSize >= uploadFileLength) { + int64_t updatedChunkSize = [self updateChunkFetcher:chunkFetcher + forChunkAtOffset:offset]; + if (updatedChunkSize == 0) { + // Calling beginChunkFetcher early when there is no more data to send allows us to + // properly handle nil chunkData below without having to account for the case where + // we are just finalizing the file. + chunkFetcher.bodyData = [[NSData alloc] init]; + [self beginChunkFetcher:chunkFetcher + offset:offset]; + return; + } + } + } + + if (chunkData == nil) { + NSError *responseError = chunkError; + if (!responseError) { + responseError = [self uploadChunkUnavailableErrorWithDescription:@"chunkData is nil"]; + } + [self invokeFinalCallbackWithData:nil + error:responseError + shouldInvalidateLocation:YES]; + return; + } + + BOOL didWriteFile = NO; + if (isUploadingFileURL) { + // Make a temporary file with the data subset. + NSString *tempName = + [NSString stringWithFormat:@"GTMUpload_temp_%@", [[NSUUID UUID] UUIDString]]; + NSString *tempPath = [NSTemporaryDirectory() stringByAppendingPathComponent:tempName]; + NSError *writeError; + didWriteFile = [chunkData writeToFile:tempPath + options:NSDataWritingAtomic + error:&writeError]; + if (didWriteFile) { + chunkFetcher.bodyFileURL = [NSURL fileURLWithPath:tempPath]; + } else { + GTMSESSION_LOG_DEBUG(@"writeToFile failed: %@\n%@", writeError, tempPath); + } + } + if (!didWriteFile) { + chunkFetcher.bodyData = [chunkData copy]; + } + [self beginChunkFetcher:chunkFetcher + offset:offset]; + }); + }]; + } +} + +- (void)beginChunkFetcher:(GTMSessionFetcher *)chunkFetcher + offset:(int64_t)offset { + + // Track the current offset for progress reporting + self.currentOffset = offset; + + // Hang on to the fetcher in case we need to cancel it. We set these before beginning the + // chunk fetch so the observers notified of chunk fetches can inspect the upload fetcher to + // match to the chunk. + self.chunkFetcher = chunkFetcher; + self.fetcherInFlight = chunkFetcher; + + // Update the last chunk request, including any request headers. + self.lastChunkRequest = chunkFetcher.request; + + [chunkFetcher beginFetchWithDelegate:self + didFinishSelector:@selector(chunkFetcher:finishedWithData:error:)]; +} + +- (void)attachSendProgressBlockToChunkFetcher:(GTMSessionFetcher *)chunkFetcher { + chunkFetcher.sendProgressBlock = ^(int64_t bytesSent, int64_t totalBytesSent, + int64_t totalBytesExpectedToSend) { + // The total bytes expected include the initial body and the full chunked + // data, independent of how big this fetcher's chunk is. + int64_t initialBodySent = [self bodyLength]; // TODO(grobbins) use [self initialBodySent] + int64_t totalSent = initialBodySent + self.currentOffset + totalBytesSent; + int64_t totalExpected = initialBodySent + [self fullUploadLength]; + + [self invokeDelegateWithDidSendBytes:bytesSent + totalBytesSent:totalSent + totalBytesExpectedToSend:totalExpected]; + }; +} + +- (NSDictionary *)uploadSessionIdentifierMetadata { + NSMutableDictionary *metadata = [NSMutableDictionary dictionary]; + metadata[kGTMSessionIdentifierIsUploadChunkFetcherMetadataKey] = @YES; + GTMSESSION_ASSERT_DEBUG(self.uploadFileURL, + @"Invalid upload fetcher to create session identifier for metadata"); + metadata[kGTMSessionIdentifierUploadFileURLMetadataKey] = [self.uploadFileURL absoluteString]; + metadata[kGTMSessionIdentifierUploadFileLengthMetadataKey] = @([self fullUploadLength]); + + if (self.uploadLocationURL) { + metadata[kGTMSessionIdentifierUploadLocationURLMetadataKey] = + [self.uploadLocationURL absoluteString]; + } + if (self.uploadMIMEType) { + metadata[kGTMSessionIdentifierUploadMIMETypeMetadataKey] = self.uploadMIMEType; + } + metadata[kGTMSessionIdentifierUploadChunkSizeMetadataKey] = @(self.chunkSize); + metadata[kGTMSessionIdentifierUploadCurrentOffsetMetadataKey] = @(self.currentOffset); + metadata[kGTMSessionIdentifierUploadAllowsCellularAccess] = @(self.request.allowsCellularAccess); + + return metadata; +} + +- (GTMSessionFetcher *)uploadFetcherWithProperties:(NSDictionary *)properties + isQueryFetch:(BOOL)isQueryFetch { + GTMSessionCheckNotSynchronized(self); + + // Common code to make a request for a query command or for a chunk upload. + NSURL *uploadLocationURL = self.uploadLocationURL; + NSMutableURLRequest *chunkRequest = [NSMutableURLRequest requestWithURL:uploadLocationURL]; + [chunkRequest setHTTPMethod:@"PUT"]; + + // copy the user-agent from the original connection + // n.b. that self.request is nil for upload fetchers created with an existing upload location + // URL. + NSURLRequest *origRequest = self.request; + + chunkRequest.allowsCellularAccess = origRequest.allowsCellularAccess; + if (!origRequest) { + chunkRequest.allowsCellularAccess = _allowsCellularAccess; + } + NSString *userAgent = [origRequest valueForHTTPHeaderField:@"User-Agent"]; + if (userAgent.length > 0) { + [chunkRequest setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + } + + [chunkRequest setValue:kGTMSessionXGoogUploadProtocolResumable + forHTTPHeaderField:kGTMSessionHeaderXGoogUploadProtocol]; + + // To avoid timeouts when debugging, copy the timeout of the initial fetcher. + NSTimeInterval origTimeout = [origRequest timeoutInterval]; + [chunkRequest setTimeoutInterval:origTimeout]; + + // + // Make a new chunk fetcher. + // + GTMSessionFetcher *chunkFetcher = [GTMSessionFetcher fetcherWithRequest:chunkRequest]; + chunkFetcher.callbackQueue = self.callbackQueue; + chunkFetcher.sessionUserInfo = self.sessionUserInfo; + chunkFetcher.configurationBlock = self.configurationBlock; + chunkFetcher.allowedInsecureSchemes = self.allowedInsecureSchemes; + chunkFetcher.allowLocalhostRequest = self.allowLocalhostRequest; + chunkFetcher.allowInvalidServerCertificates = self.allowInvalidServerCertificates; + chunkFetcher.useUploadTask = !isQueryFetch; + + if (self.uploadFileURL && !isQueryFetch && self.useBackgroundSession) { + [chunkFetcher createSessionIdentifierWithMetadata:[self uploadSessionIdentifierMetadata]]; + } + + // Give the chunk fetcher the same properties as the previous chunk fetcher + chunkFetcher.properties = [properties mutableCopy]; + [chunkFetcher setProperty:[NSValue valueWithNonretainedObject:self] + forKey:kGTMSessionUploadFetcherChunkParentKey]; + + // copy other fetcher settings to the new fetcher + chunkFetcher.retryEnabled = self.retryEnabled; + chunkFetcher.maxRetryInterval = self.maxRetryInterval; + + if ([self isRetryEnabled]) { + // We interpose our own retry method both so we can change the request to ask the server to + // tell us where to resume the chunk. + chunkFetcher.retryBlock = ^(BOOL suggestedWillRetry, NSError *chunkError, + GTMSessionFetcherRetryResponse response) { + void (^finish)(BOOL) = ^(BOOL shouldRetry){ + // We'll retry by sending an offset query. + if (shouldRetry) { + self.shouldInitiateOffsetQuery = !isQueryFetch; + + // We don't know what our actual offset is anymore, but the server will tell us. + self.currentOffset = 0; + } + // We don't actually want to retry this specific fetcher. + response(NO); + }; + + GTMSessionFetcherRetryBlock retryBlock = self.retryBlock; + if (retryBlock) { + // Ask the client, then call the finish block above. + retryBlock(suggestedWillRetry, chunkError, finish); + } else { + finish(suggestedWillRetry); + } + }; + } + + return chunkFetcher; +} + +- (void)chunkFetcher:(GTMSessionFetcher *)chunkFetcher + finishedWithData:(NSData *)data + error:(NSError *)error { + BOOL hasDestroyedOldChunkFetcher = NO; + self.fetcherInFlight = nil; + + NSDictionary *responseHeaders = [chunkFetcher responseHeaders]; + GTMSessionUploadFetcherStatus uploadStatus = + [[self class] uploadStatusFromResponseHeaders:responseHeaders]; + GTMSESSION_ASSERT_DEBUG(uploadStatus != kStatusUnknown + || error != nil + || self.wasCreatedFromBackgroundSession, + @"chunk fetcher completion has kStatusUnknown upload status for headers %@ fetcher %@", + responseHeaders, self); + BOOL isUploadStatusStopped = (uploadStatus == kStatusFinal || uploadStatus == kStatusCancelled); + + // Check if the fetcher was actually querying. If it failed, do not retry, + // as it would enter an infinite retry loop. + NSString *uploadCommand = + chunkFetcher.request.allHTTPHeaderFields[kGTMSessionHeaderXGoogUploadCommand]; + BOOL isQueryFetch = [uploadCommand isEqual:@"query"]; + + // TODO + // Maybe here we can check to see if the request had x goog content length set. (the file length one). + int64_t previousContentLength = + [[chunkFetcher.request valueForHTTPHeaderField:@"Content-Length"] longLongValue]; + // The Content-Length header may not be present if the chunk fetcher was recreated from + // a background session. + BOOL hasKnownChunkSize = (previousContentLength > 0); + BOOL needsQuery = (!hasKnownChunkSize && !isUploadStatusStopped); + + if (error || (needsQuery && !isQueryFetch)) { + NSInteger status = error.code; + + // Status 4xx indicates a bad offset in the Google upload protocol. However, do not retry status + // 404 per spec, nor if the upload size appears to have been zero (since the server will just + // keep asking us to retry.) + if (self.shouldInitiateOffsetQuery || + (needsQuery && !isQueryFetch) || + ([error.domain isEqual:kGTMSessionFetcherStatusDomain] && + status >= 400 && status <= 499 && + status != 404 && + uploadStatus == kStatusActive && + previousContentLength > 0)) { + self.shouldInitiateOffsetQuery = NO; + [self destroyChunkFetcher]; + hasDestroyedOldChunkFetcher = YES; + [self sendQueryForUploadOffsetWithFetcherProperties:chunkFetcher.properties]; + } else { + // Some unexpected status has occurred; handle it as we would a regular + // object fetcher failure. + [self invokeFinalCallbackWithData:data + error:error + shouldInvalidateLocation:NO]; + } + } else { + // The chunk has uploaded successfully. + int64_t newOffset = self.currentOffset + previousContentLength; +#if DEBUG + // Verify that if we think all of the uploading data has been sent, the server responded with + // the "final" upload status. + BOOL hasUploadAllData = (newOffset == [self fullUploadLength]); + BOOL isFinalStatus = (uploadStatus == kStatusFinal); + #pragma unused(hasUploadAllData,isFinalStatus) + GTMSESSION_ASSERT_DEBUG(hasUploadAllData == isFinalStatus || !hasKnownChunkSize, + @"uploadStatus:%@ newOffset:%lld (%lld + %lld) fullUploadLength:%lld" + @" chunkFetcher:%@ requestHeaders:%@ responseHeaders:%@", + [responseHeaders objectForKey:kGTMSessionHeaderXGoogUploadStatus], + newOffset, self.currentOffset, previousContentLength, + [self fullUploadLength], + chunkFetcher, chunkFetcher.request.allHTTPHeaderFields, + responseHeaders); +#endif + if (isUploadStatusStopped || (_currentOffset > _uploadFileLength && _uploadFileLength > 0)) { + // This was the last chunk. + if (error == nil && uploadStatus == kStatusCancelled) { + // Report cancelled status as an error. + NSDictionary *userInfo = nil; + if (data.length > 0) { + userInfo = @{ kGTMSessionFetcherStatusDataKey : data }; + } + data = nil; + error = [self prematureFailureErrorWithUserInfo:userInfo]; + } else { + // The upload is in final status. + // + // Take the chunk fetcher's data as the superclass data. + self.downloadedData = data; + self.statusCode = chunkFetcher.statusCode; + } + + // we're done + [self invokeFinalCallbackWithData:data + error:error + shouldInvalidateLocation:YES]; + } else { + // Start the next chunk. + self.currentOffset = newOffset; + + // We want to destroy this chunk fetcher before creating the next one, but + // we want to pass on its properties + NSDictionary *props = [chunkFetcher properties]; + + // We no longer need to be able to cancel this chunkFetcher. Destroy it + // before we create a new chunk fetcher. + [self destroyChunkFetcher]; + hasDestroyedOldChunkFetcher = YES; + + [self uploadNextChunkWithOffset:newOffset + fetcherProperties:props]; + } + } + if (!hasDestroyedOldChunkFetcher) { + [self destroyChunkFetcher]; + } +} + +- (void)destroyChunkFetcher { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_fetcherInFlight == _chunkFetcher) { + _fetcherInFlight = nil; + } + + [_chunkFetcher stopFetching]; + + NSURL *chunkFileURL = _chunkFetcher.bodyFileURL; + BOOL wasTemporaryUploadFile = ![chunkFileURL isEqual:_uploadFileURL]; + if (wasTemporaryUploadFile) { + NSError *error; + [[NSFileManager defaultManager] removeItemAtURL:chunkFileURL + error:&error]; + if (error) { + GTMSESSION_LOG_DEBUG(@"removingItemAtURL failed: %@\n%@", error, chunkFileURL); + } + } + + _recentChunkReponseHeaders = _chunkFetcher.responseHeaders; + + // To avoid retain cycles, remove all properties except the parent identifier. + _chunkFetcher.properties = + @{ kGTMSessionUploadFetcherChunkParentKey : [NSValue valueWithNonretainedObject:self] }; + + _chunkFetcher.retryBlock = nil; + _chunkFetcher.sendProgressBlock = nil; + _chunkFetcher = nil; + } // @synchronized(self) +} + +// This method calculates the proper values to pass to the client's send progress block. +// +// The actual total bytes sent include the initial body sent, plus the +// offset into the batched data prior to the current chunk fetcher + +- (void)invokeDelegateWithDidSendBytes:(int64_t)bytesSent + totalBytesSent:(int64_t)totalBytesSent + totalBytesExpectedToSend:(int64_t)totalBytesExpected { + GTMSessionCheckNotSynchronized(self); + + // Ensure the chunk fetcher survives the callback in case the user pauses the upload process. + __block GTMSessionFetcher *holdFetcher = self.chunkFetcher; + + [self invokeOnCallbackQueue:self.delegateCallbackQueue + afterUserStopped:NO + block:^{ + GTMSessionFetcherSendProgressBlock sendProgressBlock = self.sendProgressBlock; + if (sendProgressBlock) { + sendProgressBlock(bytesSent, totalBytesSent, totalBytesExpected); + } + holdFetcher = nil; + }]; +} + +- (void)retrieveUploadChunkGranularityFromResponseHeaders:(NSDictionary *)responseHeaders { + GTMSessionCheckNotSynchronized(self); + + // Standard granularity for Google uploads is 256K. + NSString *chunkGranularityHeader = + [responseHeaders objectForKey:kGTMSessionHeaderXGoogUploadChunkGranularity]; + self.uploadGranularity = chunkGranularityHeader.longLongValue; +} + +#pragma mark - + +- (BOOL)isPaused { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _isPaused; + } // @synchronized(self) +} + +- (void)pauseFetching { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _isPaused = YES; + } // @synchronized(self) + + // Pausing just means stopping the current chunk from uploading; + // when we resume, we will send a query request to the server to + // figure out what bytes to resume sending. + // + // We won't try to cancel the initial data upload, but rather will check + // for being paused in beginChunkFetches. + [self destroyChunkFetcher]; +} + +- (void)resumeFetching { + BOOL wasPaused; + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + wasPaused = _isPaused; + _isPaused = NO; + } // @synchronized(self) + + if (wasPaused) { + [self sendQueryForUploadOffsetWithFetcherProperties:self.properties]; + } +} + +- (void)stopFetching { + // Overrides the superclass + [self destroyChunkFetcher]; + + // If we think the server is waiting for more data, then tell it there won't be more. + if (self.uploadLocationURL) { + [self sendCancelUploadWithFetcherProperties:[self properties]]; + self.uploadLocationURL = nil; + } else { + [self invokeOnCallbackQueue:self.callbackQueue + afterUserStopped:YES + block:^{ + // Repeated calls to stopFetching may cause this path to be reached despite having sent a real + // cancel request, check here to ensure that the cancellation handler invocation which fires + // will definitely be for the real request sent previously. + @synchronized(self) { + if (self->_isCancelInFlight) { + return; + } + } + [self triggerCancellationHandlerForFetch:nil data:nil error:nil]; + }]; + } + + [super stopFetching]; +} + +// Fires the cancellation handler, returning whether there was a handler to be fired. +- (BOOL)triggerCancellationHandlerForFetch:(GTMSessionFetcher *)fetcher + data:(NSData *)data + error:(NSError *)error { + GTMSessionUploadFetcherCancellationHandler handler = self.cancellationHandler; + if (handler) { + handler(fetcher, data, error); + self.cancellationHandler = nil; + return YES; + } + return NO; +} + +#pragma mark - + +- (int64_t)updateChunkFetcher:(GTMSessionFetcher *)chunkFetcher + forChunkAtOffset:(int64_t)offset { + BOOL isUploadingFileURL = (self.uploadFileURL != nil); + + // Upload another chunk, meeting server-required granularity. + int64_t chunkSize = self.chunkSize; + + int64_t fullUploadLength = [self fullUploadLength]; + BOOL isFileLengthKnown = fullUploadLength >= 0; + + BOOL isUploadingFullFile = (offset == 0 && isFileLengthKnown && chunkSize >= fullUploadLength); + if (!isUploadingFileURL || !isUploadingFullFile) { + // We're not uploading the entire file and given the file URL. Since we'll be + // allocating a subdata block for a chunk, we need to bound it to something that + // won't blow the process's memory. + if (chunkSize > kGTMSessionUploadFetcherMaximumDemandBufferSize) { + chunkSize = kGTMSessionUploadFetcherMaximumDemandBufferSize; + } + } + + int64_t granularity = self.uploadGranularity; + if (granularity > 0) { + if (chunkSize < granularity) { + chunkSize = granularity; + } else { + chunkSize = chunkSize - (chunkSize % granularity); + } + } + + GTMSESSION_ASSERT_DEBUG(offset < fullUploadLength || fullUploadLength == 0, + @"offset %lld exceeds data length %lld", offset, fullUploadLength); + + if (granularity > 0) { + offset = offset - (offset % granularity); + } + + // If the chunk size is bigger than the remaining data, or else + // it's close enough in size to the remaining data that we'd rather + // avoid having a whole extra http fetch for the leftover bit, then make + // this chunk size exactly match the remaining data size + NSString *command; + int64_t thisChunkSize = chunkSize; + + BOOL isChunkTooBig = (thisChunkSize >= (fullUploadLength - offset)); + BOOL isChunkAlmostBigEnough = (fullUploadLength - offset - 2500 < thisChunkSize); + BOOL isFinalChunk = (isChunkTooBig || isChunkAlmostBigEnough) && isFileLengthKnown; + if (isFinalChunk) { + thisChunkSize = fullUploadLength - offset; + if (thisChunkSize > 0) { + command = @"upload, finalize"; + } else { + command = @"finalize"; + } + } else { + command = @"upload"; + } + NSString *lengthStr = @(thisChunkSize).stringValue; + NSString *offsetStr = @(offset).stringValue; + + [chunkFetcher setRequestValue:command forHTTPHeaderField:kGTMSessionHeaderXGoogUploadCommand]; + [chunkFetcher setRequestValue:lengthStr forHTTPHeaderField:@"Content-Length"]; + [chunkFetcher setRequestValue:offsetStr forHTTPHeaderField:kGTMSessionHeaderXGoogUploadOffset]; + if (_uploadFileLength != kGTMSessionUploadFetcherUnknownFileSize) { + [chunkFetcher setRequestValue:@([self fullUploadLength]).stringValue + forHTTPHeaderField:kGTMSessionHeaderXGoogUploadContentLength]; + } + + // Append the range of bytes in this chunk to the fetcher comment. + NSString *baseComment = self.comment; + [chunkFetcher setCommentWithFormat:@"%@ (%lld-%lld)", + baseComment ? baseComment : @"upload", offset, MAX(0, offset + thisChunkSize - 1)]; + + return thisChunkSize; +} + +// Public properties. +@synthesize currentOffset = _currentOffset, + allowsCellularAccess = _allowsCellularAccess, + delegateCompletionHandler = _delegateCompletionHandler, + chunkFetcher = _chunkFetcher, + lastChunkRequest = _lastChunkRequest, + subdataGenerating = _subdataGenerating, + shouldInitiateOffsetQuery = _shouldInitiateOffsetQuery, + uploadGranularity = _uploadGranularity; + +// Internal properties. +@dynamic fetcherInFlight; +@dynamic activeFetcher; +@dynamic statusCode; +@dynamic delegateCallbackQueue; + ++ (void)removePointer:(void *)pointer fromPointerArray:(NSPointerArray *)pointerArray { + for (NSUInteger index = 0, count = pointerArray.count; index < count; ++index) { + void *pointerAtIndex = [pointerArray pointerAtIndex:index]; + if (pointerAtIndex == pointer) { + [pointerArray removePointerAtIndex:index]; + return; + } + } +} + +- (BOOL)useBackgroundSession { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _useBackgroundSessionOnChunkFetchers; + } // @synchronized(self +} + +- (void)setUseBackgroundSession:(BOOL)useBackgroundSession { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_useBackgroundSessionOnChunkFetchers != useBackgroundSession) { + _useBackgroundSessionOnChunkFetchers = useBackgroundSession; + NSPointerArray *uploadFetcherPointerArrayForBackgroundSessions = + [[self class] uploadFetcherPointerArrayForBackgroundSessions]; + @synchronized(uploadFetcherPointerArrayForBackgroundSessions) { + if (_useBackgroundSessionOnChunkFetchers) { + [uploadFetcherPointerArrayForBackgroundSessions addPointer:(__bridge void *)self]; + } else { + [[self class] removePointer:(__bridge void *)self + fromPointerArray:uploadFetcherPointerArrayForBackgroundSessions]; + } + } // @synchronized(uploadFetcherPointerArrayForBackgroundSessions) + } + } // @synchronized(self) +} + +- (BOOL)canFetchWithBackgroundSession { + // The initial upload fetcher is always a foreground session; the + // useBackgroundSession property will apply only to chunk fetchers, + // not to queries. + return NO; +} + +- (NSDictionary *)responseHeaders { + GTMSessionCheckNotSynchronized(self); + // Overrides the superclass + + // If asked for the fetcher's response, use the most recent chunk fetcher's response, + // since the original request's response lacks useful information like the actual + // Content-Type. + NSDictionary *dict = self.chunkFetcher.responseHeaders; + if (dict) { + return dict; + } + + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + if (_recentChunkReponseHeaders) { + return _recentChunkReponseHeaders; + } + } // @synchronized(self + + // No chunk fetcher yet completed, so return whatever we have from the initial fetch. + return [super responseHeaders]; +} + +- (NSInteger)statusCodeUnsynchronized { + GTMSessionCheckSynchronized(self); + + if (_recentChunkStatusCode != -1) { + // Overrides the superclass to indicate status appropriate to the initial + // or latest chunk fetch + return _recentChunkStatusCode; + } else { + return [super statusCodeUnsynchronized]; + } +} + + +- (void)setStatusCode:(NSInteger)val { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _recentChunkStatusCode = val; + } +} + +- (int64_t)initialBodyLength { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _initialBodyLength; + } +} + +- (void)setInitialBodyLength:(int64_t)length { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _initialBodyLength = length; + } +} + +- (int64_t)initialBodySent { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _initialBodySent; + } +} + +- (void)setInitialBodySent:(int64_t)length { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _initialBodySent = length; + } +} + +- (NSURL *)uploadLocationURL { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + return _uploadLocationURL; + } +} + +- (void)setUploadLocationURL:(NSURL *)locationURL { + @synchronized(self) { + GTMSessionMonitorSynchronized(self); + + _uploadLocationURL = locationURL; + } +} + +- (GTMSessionFetcher *)activeFetcher { + GTMSessionFetcher *result = self.fetcherInFlight; + if (result) return result; + + return self; +} + +- (BOOL)isFetching { + // If there is an active chunk fetcher, then the upload fetcher is considered + // to still be fetching. + if (self.fetcherInFlight != nil) return YES; + + return [super isFetching]; +} + +- (BOOL)waitForCompletionWithTimeout:(NSTimeInterval)timeoutInSeconds { + NSDate *timeoutDate = [NSDate dateWithTimeIntervalSinceNow:timeoutInSeconds]; + + while (self.fetcherInFlight || self.subdataGenerating) { + if ([timeoutDate timeIntervalSinceNow] < 0) return NO; + + if (self.subdataGenerating) { + // Allow time for subdata generation. + NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:0.001]; + [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; + } else { + // Wait for any chunk or query fetchers that still have pending callbacks or + // notifications. + BOOL timedOut; + + if (self.fetcherInFlight == self) { + timedOut = ![super waitForCompletionWithTimeout:timeoutInSeconds]; + } else { + timedOut = ![self.fetcherInFlight waitForCompletionWithTimeout:timeoutInSeconds]; + } + if (timedOut) return NO; + } + } + return YES; +} + +@end + +@implementation GTMSessionFetcher (GTMSessionUploadFetcherMethods) + +- (GTMSessionUploadFetcher *)parentUploadFetcher { + NSValue *property = [self propertyForKey:kGTMSessionUploadFetcherChunkParentKey]; + if (!property) return nil; + + GTMSessionUploadFetcher *uploadFetcher = property.nonretainedObjectValue; + + GTMSESSION_ASSERT_DEBUG([uploadFetcher isKindOfClass:[GTMSessionUploadFetcher class]], + @"Unexpected parent upload fetcher class: %@", [uploadFetcher class]); + return uploadFetcher; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/LICENSE b/Pods/GoogleAPIClientForREST/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/Pods/GoogleAPIClientForREST/README.md b/Pods/GoogleAPIClientForREST/README.md new file mode 100644 index 0000000..6a3c797 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/README.md @@ -0,0 +1,49 @@ +# Google APIs Client Library for Objective-C for REST # + +**Project site**
    +**Discussion group** + +[![Build Status](https://travis-ci.org/google/google-api-objectivec-client-for-rest.svg?branch=master)](https://travis-ci.org/google/google-api-objectivec-client-for-rest) + +Written by Google, this library is a flexible and efficient Objective-C +framework for accessing JSON APIs. + +This is the recommended library for accessing JSON-based Google APIs for iOS and +Mac OS X applications. The library is compatible with applications built for +iOS 7 and later, and Mac OS X 10.9 and later. + +**To get started** with Google APIs and the Objective-C client library, Read the +[wiki](https://github.com/google/google-api-objectivec-client-for-rest/wiki). +See +[BuildingTheLibrary](https://github.com/google/google-api-objectivec-client-for-rest/wiki/BuildingTheLibrary) +for how to add the library to a Mac or iPhone application project, it covers +directly adding sources or using CocoaPods. Study the +[example applications](https://github.com/google/google-api-objectivec-client-for-rest/tree/master/Examples). + +Generated interfaces for Google APIs are in the +[GeneratedServices folder](https://github.com/google/google-api-objectivec-client-for-rest/tree/master/Source/GeneratedServices). + +In addition to the pre generated classes included with the library, you can +generate your own source for other services that have a +[discovery document](https://developers.google.com/discovery/v1/reference/apis#resource-representations) +by using the +[ServiceGenerator](https://github.com/google/google-api-objectivec-client-for-rest/wiki/ServiceGenerator). + +**If you have a problem** or want a new feature to be included in the library, +please join the +[discussion group](http://groups.google.com/group/google-api-objectivec-client). +Be sure to include +[http logs](https://github.com/google/google-api-objectivec-client-for-rest/wiki#logging-http-server-traffic) +for requests and responses when posting questions. Bugs may also be submitted +on the [issues list](https://github.com/google/google-api-objectivec-client-for-rest/issues). + +**Externally-included projects**: The library is built on top of code from the separate +project [GTM Session Fetcher](https://github.com/google/gtm-session-fetcher). To work +with some remote services, it also needs +[Authentication/Authorization](https://github.com/google/google-api-objectivec-client-for-rest/wiki#authentication-and-authorization). + +**Google Data APIs**: The much older library for XML-based APIs is +[still available](https://github.com/google/gdata-objectivec-client). + +Other useful classes for Mac and iOS developers are available in the +[Google Toolbox for Mac](https://github.com/google/google-toolbox-for-mac). diff --git a/Pods/GoogleAPIClientForREST/Source/GTLRDefines.h b/Pods/GoogleAPIClientForREST/Source/GTLRDefines.h new file mode 100644 index 0000000..726fbbd --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/GTLRDefines.h @@ -0,0 +1,109 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// +// GTLRDefines.h +// + +// Ensure Apple's conditionals we depend on are defined. +#import +#import + +// These can be redefined via a prefix if you are prefixing symbols to prefix +// the names used in strings. Something like: +// #define _HELPER(x) "MyPrefix" #x +// #define GTLR_CLASSNAME_STR(x) @_HELPER(x) +// #define GTLR_CLASSNAME_CSTR(x) _HELPER(x) +#ifndef GTLR_CLASSNAME_STR + #define _GTLR_CLASSNAME_HELPER(x) #x + #define GTLR_CLASSNAME_STR(x) @_GTLR_CLASSNAME_HELPER(x) + #define GTLR_CLASSNAME_CSTR(x) _GTLR_CLASSNAME_HELPER(x) +#endif + +// Provide a common definition for externing constants/functions +#if defined(__cplusplus) + #define GTLR_EXTERN extern "C" +#else + #define GTLR_EXTERN extern +#endif + +// +// GTLR_ASSERT defaults to bridging to NSAssert. This macro exists just in case +// it needs to be remapped. +// GTLR_DEBUG_ASSERT is similar, but compiles in only for debug builds +// + +#ifndef GTLR_ASSERT + // NSCAssert to avoid capturing self if used in a block. + #define GTLR_ASSERT(condition, ...) NSCAssert(condition, __VA_ARGS__) +#endif // GTLR_ASSERT + +#ifndef GTLR_DEBUG_ASSERT + #if DEBUG && !defined(NS_BLOCK_ASSERTIONS) + #define GTLR_DEBUG_ASSERT(condition, ...) GTLR_ASSERT(condition, __VA_ARGS__) + #elif DEBUG + // In DEBUG builds with assertions blocked, log to avoid unused variable warnings. + #define GTLR_DEBUG_ASSERT(condition, ...) if (!(condition)) { NSLog(__VA_ARGS__); } + #else + #define GTLR_DEBUG_ASSERT(condition, ...) do { } while (0) + #endif +#endif + +#ifndef GTLR_DEBUG_LOG + #if DEBUG + #define GTLR_DEBUG_LOG(...) NSLog(__VA_ARGS__) + #else + #define GTLR_DEBUG_LOG(...) do { } while (0) + #endif +#endif + +#ifndef GTLR_DEBUG_ASSERT_CURRENT_QUEUE + #define GTLR_ASSERT_CURRENT_QUEUE_DEBUG(targetQueue) \ + GTLR_DEBUG_ASSERT(0 == strcmp(GTLR_QUEUE_NAME(targetQueue), \ + GTLR_QUEUE_NAME(DISPATCH_CURRENT_QUEUE_LABEL)), \ + @"Current queue is %s (expected %s)", \ + GTLR_QUEUE_NAME(DISPATCH_CURRENT_QUEUE_LABEL), \ + GTLR_QUEUE_NAME(targetQueue)) + + #define GTLR_QUEUE_NAME(queue) \ + (strlen(dispatch_queue_get_label(queue)) > 0 ? dispatch_queue_get_label(queue) : "unnamed") +#endif // GTLR_ASSERT_CURRENT_QUEUE_DEBUG + +// Sanity check the min versions. + +#if (defined(TARGET_OS_TV) && TARGET_OS_TV) || (defined(TARGET_OS_WATCH) && TARGET_OS_WATCH) + // No min checks for these two. +#elif TARGET_OS_IPHONE + #if !defined(__IPHONE_9_0) || (__IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_9_0) + #error "This project expects to be compiled with the iOS 9.0 SDK (or later)." + #endif + #if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0 + #error "The minimum supported iOS version is 7.0." + #endif +#elif TARGET_OS_MAC + #if !defined(MAC_OS_X_VERSION_10_10) || (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_10) + #error "This project expects to be compiled with the OS X 10.10 SDK (or later)." + #endif + #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9 + #error "The minimum supported OS X version is 10.9." + #endif +#else + #error "Unknown target platform." +#endif + +// Version marker used to validate the generated sources against the library +// version. The will be changed any time the library makes a change that means +// past sources need to be regenerated. +#define GTLR_RUNTIME_VERSION 3000 diff --git a/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDrive.h b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDrive.h new file mode 100644 index 0000000..8ae141a --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDrive.h @@ -0,0 +1,14 @@ +// NOTE: This file was generated by the ServiceGenerator. + +// ---------------------------------------------------------------------------- +// API: +// Drive API (drive/v3) +// Description: +// Manages files in Drive including uploading, downloading, searching, +// detecting changes, and updating sharing permissions. +// Documentation: +// https://developers.google.com/drive/ + +#import "GTLRDriveObjects.h" +#import "GTLRDriveQuery.h" +#import "GTLRDriveService.h" diff --git a/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.h b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.h new file mode 100644 index 0000000..4e0511d --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.h @@ -0,0 +1,2648 @@ +// NOTE: This file was generated by the ServiceGenerator. + +// ---------------------------------------------------------------------------- +// API: +// Drive API (drive/v3) +// Description: +// Manages files in Drive including uploading, downloading, searching, +// detecting changes, and updating sharing permissions. +// Documentation: +// https://developers.google.com/drive/ + +#if GTLR_BUILT_AS_FRAMEWORK + #import "GTLR/GTLRObject.h" +#else + #import "GTLRObject.h" +#endif + +#if GTLR_RUNTIME_VERSION != 3000 +#error This file was generated by a different version of ServiceGenerator which is incompatible with this GTLR library source. +#endif + +@class GTLRDrive_About_DriveThemes_Item; +@class GTLRDrive_About_ExportFormats; +@class GTLRDrive_About_ImportFormats; +@class GTLRDrive_About_MaxImportSizes; +@class GTLRDrive_About_StorageQuota; +@class GTLRDrive_About_TeamDriveThemes_Item; +@class GTLRDrive_Change; +@class GTLRDrive_Channel_Params; +@class GTLRDrive_Comment; +@class GTLRDrive_Comment_QuotedFileContent; +@class GTLRDrive_Drive; +@class GTLRDrive_Drive_BackgroundImageFile; +@class GTLRDrive_Drive_Capabilities; +@class GTLRDrive_Drive_Restrictions; +@class GTLRDrive_File; +@class GTLRDrive_File_AppProperties; +@class GTLRDrive_File_Capabilities; +@class GTLRDrive_File_ContentHints; +@class GTLRDrive_File_ContentHints_Thumbnail; +@class GTLRDrive_File_ExportLinks; +@class GTLRDrive_File_ImageMediaMetadata; +@class GTLRDrive_File_ImageMediaMetadata_Location; +@class GTLRDrive_File_Properties; +@class GTLRDrive_File_VideoMediaMetadata; +@class GTLRDrive_Permission; +@class GTLRDrive_Permission_PermissionDetails_Item; +@class GTLRDrive_Permission_TeamDrivePermissionDetails_Item; +@class GTLRDrive_Reply; +@class GTLRDrive_Revision; +@class GTLRDrive_Revision_ExportLinks; +@class GTLRDrive_TeamDrive; +@class GTLRDrive_TeamDrive_BackgroundImageFile; +@class GTLRDrive_TeamDrive_Capabilities; +@class GTLRDrive_TeamDrive_Restrictions; +@class GTLRDrive_User; + +// Generated comments include content from the discovery document; avoid them +// causing warnings since clang's checks are some what arbitrary. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdocumentation" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Information about the user, the user's Drive, and system capabilities. + */ +@interface GTLRDrive_About : GTLRObject + +/** + * Whether the user has installed the requesting app. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *appInstalled; + +/** + * Whether the user can create shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canCreateDrives; + +/** + * Deprecated - use canCreateDrives instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canCreateTeamDrives; + +/** A list of themes that are supported for shared drives. */ +@property(nonatomic, strong, nullable) NSArray *driveThemes; + +/** + * A map of source MIME type to possible targets for all supported exports. + */ +@property(nonatomic, strong, nullable) GTLRDrive_About_ExportFormats *exportFormats; + +/** The currently supported folder colors as RGB hex strings. */ +@property(nonatomic, strong, nullable) NSArray *folderColorPalette; + +/** + * A map of source MIME type to possible targets for all supported imports. + */ +@property(nonatomic, strong, nullable) GTLRDrive_About_ImportFormats *importFormats; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#about". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** A map of maximum import sizes by MIME type, in bytes. */ +@property(nonatomic, strong, nullable) GTLRDrive_About_MaxImportSizes *maxImportSizes; + +/** + * The maximum upload size in bytes. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *maxUploadSize; + +/** + * The user's storage quota limits and usage. All fields are measured in bytes. + */ +@property(nonatomic, strong, nullable) GTLRDrive_About_StorageQuota *storageQuota; + +/** Deprecated - use driveThemes instead. */ +@property(nonatomic, strong, nullable) NSArray *teamDriveThemes; + +/** The authenticated user. */ +@property(nonatomic, strong, nullable) GTLRDrive_User *user; + +@end + + +/** + * GTLRDrive_About_DriveThemes_Item + */ +@interface GTLRDrive_About_DriveThemes_Item : GTLRObject + +/** A link to this theme's background image. */ +@property(nonatomic, copy, nullable) NSString *backgroundImageLink; + +/** The color of this theme as an RGB hex string. */ +@property(nonatomic, copy, nullable) NSString *colorRgb; + +/** + * The ID of the theme. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +@end + + +/** + * A map of source MIME type to possible targets for all supported exports. + * + * @note This class is documented as having more properties of NSArrays of + * NSString. Use @c -additionalJSONKeys and @c + * -additionalPropertyForName: to get the list of properties and then + * fetch them; or @c -additionalProperties to fetch them all at once. + */ +@interface GTLRDrive_About_ExportFormats : GTLRObject +@end + + +/** + * A map of source MIME type to possible targets for all supported imports. + * + * @note This class is documented as having more properties of NSArrays of + * NSString. Use @c -additionalJSONKeys and @c + * -additionalPropertyForName: to get the list of properties and then + * fetch them; or @c -additionalProperties to fetch them all at once. + */ +@interface GTLRDrive_About_ImportFormats : GTLRObject +@end + + +/** + * A map of maximum import sizes by MIME type, in bytes. + * + * @note This class is documented as having more properties of NSNumber (Uses + * NSNumber of longLongValue.). Use @c -additionalJSONKeys and @c + * -additionalPropertyForName: to get the list of properties and then + * fetch them; or @c -additionalProperties to fetch them all at once. + */ +@interface GTLRDrive_About_MaxImportSizes : GTLRObject +@end + + +/** + * The user's storage quota limits and usage. All fields are measured in bytes. + */ +@interface GTLRDrive_About_StorageQuota : GTLRObject + +/** + * The usage limit, if applicable. This will not be present if the user has + * unlimited storage. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *limit; + +/** + * The total usage across all services. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *usage; + +/** + * The usage by all files in Google Drive. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *usageInDrive; + +/** + * The usage by trashed files in Google Drive. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *usageInDriveTrash; + +@end + + +/** + * GTLRDrive_About_TeamDriveThemes_Item + */ +@interface GTLRDrive_About_TeamDriveThemes_Item : GTLRObject + +/** Deprecated - use driveThemes/backgroundImageLink instead. */ +@property(nonatomic, copy, nullable) NSString *backgroundImageLink; + +/** Deprecated - use driveThemes/colorRgb instead. */ +@property(nonatomic, copy, nullable) NSString *colorRgb; + +/** + * Deprecated - use driveThemes/id instead. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +@end + + +/** + * A change to a file or shared drive. + */ +@interface GTLRDrive_Change : GTLRObject + +/** The type of the change. Possible values are file and drive. */ +@property(nonatomic, copy, nullable) NSString *changeType; + +/** + * The updated state of the shared drive. Present if the changeType is drive, + * the user is still a member of the shared drive, and the shared drive has not + * been deleted. + */ +@property(nonatomic, strong, nullable) GTLRDrive_Drive *drive; + +/** The ID of the shared drive associated with this change. */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * The updated state of the file. Present if the type is file and the file has + * not been removed from this list of changes. + */ +@property(nonatomic, strong, nullable) GTLRDrive_File *file; + +/** The ID of the file which has changed. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#change". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * Whether the file or shared drive has been removed from this list of changes, + * for example by deletion or loss of access. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *removed; + +/** Deprecated - use drive instead. */ +@property(nonatomic, strong, nullable) GTLRDrive_TeamDrive *teamDrive; + +/** Deprecated - use driveId instead. */ +@property(nonatomic, copy, nullable) NSString *teamDriveId; + +/** The time of this change (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *time; + +/** Deprecated - use changeType instead. */ +@property(nonatomic, copy, nullable) NSString *type; + +@end + + +/** + * A list of changes for a user. + * + * @note This class supports NSFastEnumeration and indexed subscripting over + * its "changes" property. If returned as the result of a query, it + * should support automatic pagination (when @c shouldFetchNextPages is + * enabled). + */ +@interface GTLRDrive_ChangeList : GTLRCollectionObject + +/** + * The list of changes. If nextPageToken is populated, then this list may be + * incomplete and an additional page of results should be fetched. + * + * @note This property is used to support NSFastEnumeration and indexed + * subscripting on this class. + */ +@property(nonatomic, strong, nullable) NSArray *changes; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#changeList". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * The starting page token for future changes. This will be present only if the + * end of the current changes list has been reached. + */ +@property(nonatomic, copy, nullable) NSString *newStartPageToken NS_RETURNS_NOT_RETAINED; + +/** + * The page token for the next page of changes. This will be absent if the end + * of the changes list has been reached. If the token is rejected for any + * reason, it should be discarded, and pagination should be restarted from the + * first page of results. + */ +@property(nonatomic, copy, nullable) NSString *nextPageToken; + +@end + + +/** + * An notification channel used to watch for resource changes. + */ +@interface GTLRDrive_Channel : GTLRObject + +/** The address where notifications are delivered for this channel. */ +@property(nonatomic, copy, nullable) NSString *address; + +/** + * Date and time of notification channel expiration, expressed as a Unix + * timestamp, in milliseconds. Optional. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *expiration; + +/** + * A UUID or similar unique string that identifies this channel. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** + * Identifies this as a notification channel used to watch for changes to a + * resource, which is "api#channel". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** Additional parameters controlling delivery channel behavior. Optional. */ +@property(nonatomic, strong, nullable) GTLRDrive_Channel_Params *params; + +/** + * A Boolean value to indicate whether payload is wanted. Optional. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *payload; + +/** + * An opaque ID that identifies the resource being watched on this channel. + * Stable across different API versions. + */ +@property(nonatomic, copy, nullable) NSString *resourceId; + +/** A version-specific identifier for the watched resource. */ +@property(nonatomic, copy, nullable) NSString *resourceUri; + +/** + * An arbitrary string delivered to the target address with each notification + * delivered over this channel. Optional. + */ +@property(nonatomic, copy, nullable) NSString *token; + +/** The type of delivery mechanism used for this channel. */ +@property(nonatomic, copy, nullable) NSString *type; + +@end + + +/** + * Additional parameters controlling delivery channel behavior. Optional. + * + * @note This class is documented as having more properties of NSString. Use @c + * -additionalJSONKeys and @c -additionalPropertyForName: to get the list + * of properties and then fetch them; or @c -additionalProperties to + * fetch them all at once. + */ +@interface GTLRDrive_Channel_Params : GTLRObject +@end + + +/** + * A comment on a file. + */ +@interface GTLRDrive_Comment : GTLRObject + +/** + * A region of the document represented as a JSON string. See anchor + * documentation for details on how to define and interpret anchor properties. + */ +@property(nonatomic, copy, nullable) NSString *anchor; + +/** + * The author of the comment. The author's email address and permission ID will + * not be populated. + */ +@property(nonatomic, strong, nullable) GTLRDrive_User *author; + +/** + * The plain text content of the comment. This field is used for setting the + * content, while htmlContent should be displayed. + */ +@property(nonatomic, copy, nullable) NSString *content; + +/** The time at which the comment was created (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *createdTime; + +/** + * Whether the comment has been deleted. A deleted comment has no content. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *deleted; + +/** The content of the comment with HTML formatting. */ +@property(nonatomic, copy, nullable) NSString *htmlContent; + +/** + * The ID of the comment. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#comment". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * The last time the comment or any of its replies was modified (RFC 3339 + * date-time). + */ +@property(nonatomic, strong, nullable) GTLRDateTime *modifiedTime; + +/** + * The file content to which the comment refers, typically within the anchor + * region. For a text file, for example, this would be the text at the location + * of the comment. + */ +@property(nonatomic, strong, nullable) GTLRDrive_Comment_QuotedFileContent *quotedFileContent; + +/** The full list of replies to the comment in chronological order. */ +@property(nonatomic, strong, nullable) NSArray *replies; + +/** + * Whether the comment has been resolved by one of its replies. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *resolved; + +@end + + +/** + * The file content to which the comment refers, typically within the anchor + * region. For a text file, for example, this would be the text at the location + * of the comment. + */ +@interface GTLRDrive_Comment_QuotedFileContent : GTLRObject + +/** The MIME type of the quoted content. */ +@property(nonatomic, copy, nullable) NSString *mimeType; + +/** + * The quoted content itself. This is interpreted as plain text if set through + * the API. + */ +@property(nonatomic, copy, nullable) NSString *value; + +@end + + +/** + * A list of comments on a file. + * + * @note This class supports NSFastEnumeration and indexed subscripting over + * its "comments" property. If returned as the result of a query, it + * should support automatic pagination (when @c shouldFetchNextPages is + * enabled). + */ +@interface GTLRDrive_CommentList : GTLRCollectionObject + +/** + * The list of comments. If nextPageToken is populated, then this list may be + * incomplete and an additional page of results should be fetched. + * + * @note This property is used to support NSFastEnumeration and indexed + * subscripting on this class. + */ +@property(nonatomic, strong, nullable) NSArray *comments; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#commentList". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * The page token for the next page of comments. This will be absent if the end + * of the comments list has been reached. If the token is rejected for any + * reason, it should be discarded, and pagination should be restarted from the + * first page of results. + */ +@property(nonatomic, copy, nullable) NSString *nextPageToken; + +@end + + +/** + * Representation of a shared drive. + */ +@interface GTLRDrive_Drive : GTLRObject + +/** + * An image file and cropping parameters from which a background image for this + * shared drive is set. This is a write only field; it can only be set on + * drive.drives.update requests that don't set themeId. When specified, all + * fields of the backgroundImageFile must be set. + */ +@property(nonatomic, strong, nullable) GTLRDrive_Drive_BackgroundImageFile *backgroundImageFile; + +/** A short-lived link to this shared drive's background image. */ +@property(nonatomic, copy, nullable) NSString *backgroundImageLink; + +/** Capabilities the current user has on this shared drive. */ +@property(nonatomic, strong, nullable) GTLRDrive_Drive_Capabilities *capabilities; + +/** + * The color of this shared drive as an RGB hex string. It can only be set on a + * drive.drives.update request that does not set themeId. + */ +@property(nonatomic, copy, nullable) NSString *colorRgb; + +/** The time at which the shared drive was created (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *createdTime; + +/** + * Whether the shared drive is hidden from default view. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *hidden; + +/** + * The ID of this shared drive which is also the ID of the top level folder of + * this shared drive. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#drive". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** The name of this shared drive. */ +@property(nonatomic, copy, nullable) NSString *name; + +/** + * A set of restrictions that apply to this shared drive or items inside this + * shared drive. + */ +@property(nonatomic, strong, nullable) GTLRDrive_Drive_Restrictions *restrictions; + +/** + * The ID of the theme from which the background image and color will be set. + * The set of possible driveThemes can be retrieved from a drive.about.get + * response. When not specified on a drive.drives.create request, a random + * theme is chosen from which the background image and color are set. This is a + * write-only field; it can only be set on requests that don't set colorRgb or + * backgroundImageFile. + */ +@property(nonatomic, copy, nullable) NSString *themeId; + +@end + + +/** + * An image file and cropping parameters from which a background image for this + * shared drive is set. This is a write only field; it can only be set on + * drive.drives.update requests that don't set themeId. When specified, all + * fields of the backgroundImageFile must be set. + */ +@interface GTLRDrive_Drive_BackgroundImageFile : GTLRObject + +/** + * The ID of an image file in Google Drive to use for the background image. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** + * The width of the cropped image in the closed range of 0 to 1. This value + * represents the width of the cropped image divided by the width of the entire + * image. The height is computed by applying a width to height aspect ratio of + * 80 to 9. The resulting image must be at least 1280 pixels wide and 144 + * pixels high. + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *width; + +/** + * The X coordinate of the upper left corner of the cropping area in the + * background image. This is a value in the closed range of 0 to 1. This value + * represents the horizontal distance from the left side of the entire image to + * the left side of the cropping area divided by the width of the entire image. + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *xCoordinate; + +/** + * The Y coordinate of the upper left corner of the cropping area in the + * background image. This is a value in the closed range of 0 to 1. This value + * represents the vertical distance from the top side of the entire image to + * the top side of the cropping area divided by the height of the entire image. + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *yCoordinate; + +@end + + +/** + * Capabilities the current user has on this shared drive. + */ +@interface GTLRDrive_Drive_Capabilities : GTLRObject + +/** + * Whether the current user can add children to folders in this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canAddChildren; + +/** + * Whether the current user can change the copyRequiresWriterPermission + * restriction of this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeCopyRequiresWriterPermissionRestriction; + +/** + * Whether the current user can change the domainUsersOnly restriction of this + * shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeDomainUsersOnlyRestriction; + +/** + * Whether the current user can change the background of this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeDriveBackground; + +/** + * Whether the current user can change the driveMembersOnly restriction of this + * shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeDriveMembersOnlyRestriction; + +/** + * Whether the current user can comment on files in this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canComment; + +/** + * Whether the current user can copy files in this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canCopy; + +/** + * Whether the current user can delete children from folders in this shared + * drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canDeleteChildren; + +/** + * Whether the current user can delete this shared drive. Attempting to delete + * the shared drive may still fail if there are untrashed items inside the + * shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canDeleteDrive; + +/** + * Whether the current user can download files in this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canDownload; + +/** + * Whether the current user can edit files in this shared drive + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canEdit; + +/** + * Whether the current user can list the children of folders in this shared + * drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canListChildren; + +/** + * Whether the current user can add members to this shared drive or remove them + * or change their role. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canManageMembers; + +/** + * Whether the current user can read the revisions resource of files in this + * shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canReadRevisions; + +/** + * Whether the current user can rename files or folders in this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canRename; + +/** + * Whether the current user can rename this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canRenameDrive; + +/** + * Whether the current user can share files or folders in this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canShare; + +/** + * Whether the current user can trash children from folders in this shared + * drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canTrashChildren; + +@end + + +/** + * A set of restrictions that apply to this shared drive or items inside this + * shared drive. + */ +@interface GTLRDrive_Drive_Restrictions : GTLRObject + +/** + * Whether administrative privileges on this shared drive are required to + * modify restrictions. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *adminManagedRestrictions; + +/** + * Whether the options to copy, print, or download files inside this shared + * drive, should be disabled for readers and commenters. When this restriction + * is set to true, it will override the similarly named field to true for any + * file inside this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *copyRequiresWriterPermission NS_RETURNS_NOT_RETAINED; + +/** + * Whether access to this shared drive and items inside this shared drive is + * restricted to users of the domain to which this shared drive belongs. This + * restriction may be overridden by other sharing policies controlled outside + * of this shared drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *domainUsersOnly; + +/** + * Whether access to items inside this shared drive is restricted to its + * members. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *driveMembersOnly; + +@end + + +/** + * A list of shared drives. + * + * @note This class supports NSFastEnumeration and indexed subscripting over + * its "drives" property. If returned as the result of a query, it should + * support automatic pagination (when @c shouldFetchNextPages is + * enabled). + */ +@interface GTLRDrive_DriveList : GTLRCollectionObject + +/** + * The list of shared drives. If nextPageToken is populated, then this list may + * be incomplete and an additional page of results should be fetched. + * + * @note This property is used to support NSFastEnumeration and indexed + * subscripting on this class. + */ +@property(nonatomic, strong, nullable) NSArray *drives; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#driveList". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * The page token for the next page of shared drives. This will be absent if + * the end of the list has been reached. If the token is rejected for any + * reason, it should be discarded, and pagination should be restarted from the + * first page of results. + */ +@property(nonatomic, copy, nullable) NSString *nextPageToken; + +@end + + +/** + * The metadata for a file. + */ +@interface GTLRDrive_File : GTLRObject + +/** + * A collection of arbitrary key-value pairs which are private to the + * requesting app. + * Entries with null values are cleared in update and copy requests. + */ +@property(nonatomic, strong, nullable) GTLRDrive_File_AppProperties *appProperties; + +/** + * Capabilities the current user has on this file. Each capability corresponds + * to a fine-grained action that a user may take. + */ +@property(nonatomic, strong, nullable) GTLRDrive_File_Capabilities *capabilities; + +/** + * Additional information about the content of the file. These fields are never + * populated in responses. + */ +@property(nonatomic, strong, nullable) GTLRDrive_File_ContentHints *contentHints; + +/** + * Whether the options to copy, print, or download this file, should be + * disabled for readers and commenters. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *copyRequiresWriterPermission NS_RETURNS_NOT_RETAINED; + +/** The time at which the file was created (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *createdTime; + +/** + * A short description of the file. + * + * Remapped to 'descriptionProperty' to avoid NSObject's 'description'. + */ +@property(nonatomic, copy, nullable) NSString *descriptionProperty; + +/** + * ID of the shared drive the file resides in. Only populated for items in + * shared drives. + */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Whether the file has been explicitly trashed, as opposed to recursively + * trashed from a parent folder. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *explicitlyTrashed; + +/** Links for exporting Google Docs to specific formats. */ +@property(nonatomic, strong, nullable) GTLRDrive_File_ExportLinks *exportLinks; + +/** + * The final component of fullFileExtension. This is only available for files + * with binary content in Google Drive. + */ +@property(nonatomic, copy, nullable) NSString *fileExtension; + +/** + * The color for a folder as an RGB hex string. The supported colors are + * published in the folderColorPalette field of the About resource. + * If an unsupported color is specified, the closest color in the palette will + * be used instead. + */ +@property(nonatomic, copy, nullable) NSString *folderColorRgb; + +/** + * The full file extension extracted from the name field. May contain multiple + * concatenated extensions, such as "tar.gz". This is only available for files + * with binary content in Google Drive. + * This is automatically updated when the name field changes, however it is not + * cleared if the new name does not contain a valid extension. + */ +@property(nonatomic, copy, nullable) NSString *fullFileExtension; + +/** + * Whether there are permissions directly on this file. This field is only + * populated for items in shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *hasAugmentedPermissions; + +/** + * Whether this file has a thumbnail. This does not indicate whether the + * requesting app has access to the thumbnail. To check access, look for the + * presence of the thumbnailLink field. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *hasThumbnail; + +/** + * The ID of the file's head revision. This is currently only available for + * files with binary content in Google Drive. + */ +@property(nonatomic, copy, nullable) NSString *headRevisionId; + +/** A static, unauthenticated link to the file's icon. */ +@property(nonatomic, copy, nullable) NSString *iconLink; + +/** + * The ID of the file. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** Additional metadata about image media, if available. */ +@property(nonatomic, strong, nullable) GTLRDrive_File_ImageMediaMetadata *imageMediaMetadata; + +/** + * Whether the file was created or opened by the requesting app. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *isAppAuthorized; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#file". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** The last user to modify the file. */ +@property(nonatomic, strong, nullable) GTLRDrive_User *lastModifyingUser; + +/** + * The MD5 checksum for the content of the file. This is only applicable to + * files with binary content in Google Drive. + */ +@property(nonatomic, copy, nullable) NSString *md5Checksum; + +/** + * The MIME type of the file. + * Google Drive will attempt to automatically detect an appropriate value from + * uploaded content if no value is provided. The value cannot be changed unless + * a new revision is uploaded. + * If a file is created with a Google Doc MIME type, the uploaded content will + * be imported if possible. The supported import formats are published in the + * About resource. + */ +@property(nonatomic, copy, nullable) NSString *mimeType; + +/** + * Whether the file has been modified by this user. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *modifiedByMe; + +/** The last time the file was modified by the user (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *modifiedByMeTime; + +/** + * The last time the file was modified by anyone (RFC 3339 date-time). + * Note that setting modifiedTime will also update modifiedByMeTime for the + * user. + */ +@property(nonatomic, strong, nullable) GTLRDateTime *modifiedTime; + +/** + * The name of the file. This is not necessarily unique within a folder. Note + * that for immutable items such as the top level folders of shared drives, My + * Drive root folder, and Application Data folder the name is constant. + */ +@property(nonatomic, copy, nullable) NSString *name; + +/** + * The original filename of the uploaded content if available, or else the + * original value of the name field. This is only available for files with + * binary content in Google Drive. + */ +@property(nonatomic, copy, nullable) NSString *originalFilename; + +/** + * Whether the user owns the file. Not populated for items in shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *ownedByMe; + +/** + * The owners of the file. Currently, only certain legacy files may have more + * than one owner. Not populated for items in shared drives. + */ +@property(nonatomic, strong, nullable) NSArray *owners; + +/** + * The IDs of the parent folders which contain the file. + * If not specified as part of a create request, the file will be placed + * directly in the user's My Drive folder. If not specified as part of a copy + * request, the file will inherit any discoverable parents of the source file. + * Update requests must use the addParents and removeParents parameters to + * modify the parents list. + */ +@property(nonatomic, strong, nullable) NSArray *parents; + +/** List of permission IDs for users with access to this file. */ +@property(nonatomic, strong, nullable) NSArray *permissionIds; + +/** + * The full list of permissions for the file. This is only available if the + * requesting user can share the file. Not populated for items in shared + * drives. + */ +@property(nonatomic, strong, nullable) NSArray *permissions; + +/** + * A collection of arbitrary key-value pairs which are visible to all apps. + * Entries with null values are cleared in update and copy requests. + */ +@property(nonatomic, strong, nullable) GTLRDrive_File_Properties *properties; + +/** + * The number of storage quota bytes used by the file. This includes the head + * revision as well as previous revisions with keepForever enabled. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *quotaBytesUsed; + +/** + * Whether the file has been shared. Not populated for items in shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *shared; + +/** + * The time at which the file was shared with the user, if applicable (RFC 3339 + * date-time). + */ +@property(nonatomic, strong, nullable) GTLRDateTime *sharedWithMeTime; + +/** The user who shared the file with the requesting user, if applicable. */ +@property(nonatomic, strong, nullable) GTLRDrive_User *sharingUser; + +/** + * The size of the file's content in bytes. This is only applicable to files + * with binary content in Google Drive. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *size; + +/** + * The list of spaces which contain the file. The currently supported values + * are 'drive', 'appDataFolder' and 'photos'. + */ +@property(nonatomic, strong, nullable) NSArray *spaces; + +/** + * Whether the user has starred the file. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *starred; + +/** Deprecated - use driveId instead. */ +@property(nonatomic, copy, nullable) NSString *teamDriveId; + +/** + * A short-lived link to the file's thumbnail, if available. Typically lasts on + * the order of hours. Only populated when the requesting app can access the + * file's content. + */ +@property(nonatomic, copy, nullable) NSString *thumbnailLink; + +/** + * The thumbnail version for use in thumbnail cache invalidation. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *thumbnailVersion; + +/** + * Whether the file has been trashed, either explicitly or from a trashed + * parent folder. Only the owner may trash a file, and other users cannot see + * files in the owner's trash. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *trashed; + +/** + * The time that the item was trashed (RFC 3339 date-time). Only populated for + * items in shared drives. + */ +@property(nonatomic, strong, nullable) GTLRDateTime *trashedTime; + +/** + * If the file has been explicitly trashed, the user who trashed it. Only + * populated for items in shared drives. + */ +@property(nonatomic, strong, nullable) GTLRDrive_User *trashingUser; + +/** + * A monotonically increasing version number for the file. This reflects every + * change made to the file on the server, even those not visible to the user. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *version; + +/** + * Additional metadata about video media. This may not be available immediately + * upon upload. + */ +@property(nonatomic, strong, nullable) GTLRDrive_File_VideoMediaMetadata *videoMediaMetadata; + +/** + * Whether the file has been viewed by this user. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *viewedByMe; + +/** The last time the file was viewed by the user (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *viewedByMeTime; + +/** + * Deprecated - use copyRequiresWriterPermission instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *viewersCanCopyContent; + +/** + * A link for downloading the content of the file in a browser. This is only + * available for files with binary content in Google Drive. + */ +@property(nonatomic, copy, nullable) NSString *webContentLink; + +/** + * A link for opening the file in a relevant Google editor or viewer in a + * browser. + */ +@property(nonatomic, copy, nullable) NSString *webViewLink; + +/** + * Whether users with only writer permission can modify the file's permissions. + * Not populated for items in shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *writersCanShare; + +@end + + +/** + * A collection of arbitrary key-value pairs which are private to the + * requesting app. + * Entries with null values are cleared in update and copy requests. + * + * @note This class is documented as having more properties of NSString. Use @c + * -additionalJSONKeys and @c -additionalPropertyForName: to get the list + * of properties and then fetch them; or @c -additionalProperties to + * fetch them all at once. + */ +@interface GTLRDrive_File_AppProperties : GTLRObject +@end + + +/** + * Capabilities the current user has on this file. Each capability corresponds + * to a fine-grained action that a user may take. + */ +@interface GTLRDrive_File_Capabilities : GTLRObject + +/** + * Whether the current user can add children to this folder. This is always + * false when the item is not a folder. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canAddChildren; + +/** + * Whether the current user can change the copyRequiresWriterPermission + * restriction of this file. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeCopyRequiresWriterPermission; + +/** + * Deprecated + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeViewersCanCopyContent; + +/** + * Whether the current user can comment on this file. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canComment; + +/** + * Whether the current user can copy this file. For an item in a shared drive, + * whether the current user can copy non-folder descendants of this item, or + * this item itself if it is not a folder. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canCopy; + +/** + * Whether the current user can delete this file. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canDelete; + +/** + * Whether the current user can delete children of this folder. This is false + * when the item is not a folder. Only populated for items in shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canDeleteChildren; + +/** + * Whether the current user can download this file. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canDownload; + +/** + * Whether the current user can edit this file. Other factors may limit the + * type of changes a user can make to a file. For example, see + * canChangeCopyRequiresWriterPermission or canModifyContent. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canEdit; + +/** + * Whether the current user can list the children of this folder. This is + * always false when the item is not a folder. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canListChildren; + +/** + * Whether the current user can modify the content of this file. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canModifyContent; + +/** + * Whether the current user can move children of this folder outside of the + * shared drive. This is false when the item is not a folder. Only populated + * for items in shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveChildrenOutOfDrive; + +/** + * Deprecated - use canMoveChildrenOutOfDrive instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveChildrenOutOfTeamDrive; + +/** + * Whether the current user can move children of this folder within the shared + * drive. This is false when the item is not a folder. Only populated for items + * in shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveChildrenWithinDrive; + +/** + * Deprecated - use canMoveChildrenWithinDrive instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveChildrenWithinTeamDrive; + +/** + * Deprecated - use canMoveItemOutOfDrive instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveItemIntoTeamDrive; + +/** + * Whether the current user can move this item outside of this drive by + * changing its parent. Note that a request to change the parent of the item + * may still fail depending on the new parent that is being added. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveItemOutOfDrive; + +/** + * Deprecated - use canMoveItemOutOfDrive instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveItemOutOfTeamDrive; + +/** + * Whether the current user can move this item within this shared drive. Note + * that a request to change the parent of the item may still fail depending on + * the new parent that is being added. Only populated for items in shared + * drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveItemWithinDrive; + +/** + * Deprecated - use canMoveItemWithinDrive instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveItemWithinTeamDrive; + +/** + * Deprecated - use canMoveItemWithinDrive or canMoveItemOutOfDrive instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canMoveTeamDriveItem; + +/** + * Whether the current user can read the shared drive to which this file + * belongs. Only populated for items in shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canReadDrive; + +/** + * Whether the current user can read the revisions resource of this file. For a + * shared drive item, whether revisions of non-folder descendants of this item, + * or this item itself if it is not a folder, can be read. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canReadRevisions; + +/** + * Deprecated - use canReadDrive instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canReadTeamDrive; + +/** + * Whether the current user can remove children from this folder. This is + * always false when the item is not a folder. For a folder in a shared drive, + * use canDeleteChildren or canTrashChildren instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canRemoveChildren; + +/** + * Whether the current user can rename this file. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canRename; + +/** + * Whether the current user can modify the sharing settings for this file. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canShare; + +/** + * Whether the current user can move this file to trash. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canTrash; + +/** + * Whether the current user can trash children of this folder. This is false + * when the item is not a folder. Only populated for items in shared drives. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canTrashChildren; + +/** + * Whether the current user can restore this file from trash. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canUntrash; + +@end + + +/** + * Additional information about the content of the file. These fields are never + * populated in responses. + */ +@interface GTLRDrive_File_ContentHints : GTLRObject + +/** + * Text to be indexed for the file to improve fullText queries. This is limited + * to 128KB in length and may contain HTML elements. + */ +@property(nonatomic, copy, nullable) NSString *indexableText; + +/** + * A thumbnail for the file. This will only be used if Google Drive cannot + * generate a standard thumbnail. + */ +@property(nonatomic, strong, nullable) GTLRDrive_File_ContentHints_Thumbnail *thumbnail; + +@end + + +/** + * Links for exporting Google Docs to specific formats. + * + * @note This class is documented as having more properties of NSString. Use @c + * -additionalJSONKeys and @c -additionalPropertyForName: to get the list + * of properties and then fetch them; or @c -additionalProperties to + * fetch them all at once. + */ +@interface GTLRDrive_File_ExportLinks : GTLRObject +@end + + +/** + * Additional metadata about image media, if available. + */ +@interface GTLRDrive_File_ImageMediaMetadata : GTLRObject + +/** + * The aperture used to create the photo (f-number). + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *aperture; + +/** The make of the camera used to create the photo. */ +@property(nonatomic, copy, nullable) NSString *cameraMake; + +/** The model of the camera used to create the photo. */ +@property(nonatomic, copy, nullable) NSString *cameraModel; + +/** The color space of the photo. */ +@property(nonatomic, copy, nullable) NSString *colorSpace; + +/** + * The exposure bias of the photo (APEX value). + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *exposureBias; + +/** The exposure mode used to create the photo. */ +@property(nonatomic, copy, nullable) NSString *exposureMode; + +/** + * The length of the exposure, in seconds. + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *exposureTime; + +/** + * Whether a flash was used to create the photo. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *flashUsed; + +/** + * The focal length used to create the photo, in millimeters. + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *focalLength; + +/** + * The height of the image in pixels. + * + * Uses NSNumber of intValue. + */ +@property(nonatomic, strong, nullable) NSNumber *height; + +/** + * The ISO speed used to create the photo. + * + * Uses NSNumber of intValue. + */ +@property(nonatomic, strong, nullable) NSNumber *isoSpeed; + +/** The lens used to create the photo. */ +@property(nonatomic, copy, nullable) NSString *lens; + +/** Geographic location information stored in the image. */ +@property(nonatomic, strong, nullable) GTLRDrive_File_ImageMediaMetadata_Location *location; + +/** + * The smallest f-number of the lens at the focal length used to create the + * photo (APEX value). + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *maxApertureValue; + +/** The metering mode used to create the photo. */ +@property(nonatomic, copy, nullable) NSString *meteringMode; + +/** + * The rotation in clockwise degrees from the image's original orientation. + * + * Uses NSNumber of intValue. + */ +@property(nonatomic, strong, nullable) NSNumber *rotation; + +/** The type of sensor used to create the photo. */ +@property(nonatomic, copy, nullable) NSString *sensor; + +/** + * The distance to the subject of the photo, in meters. + * + * Uses NSNumber of intValue. + */ +@property(nonatomic, strong, nullable) NSNumber *subjectDistance; + +/** The date and time the photo was taken (EXIF DateTime). */ +@property(nonatomic, copy, nullable) NSString *time; + +/** The white balance mode used to create the photo. */ +@property(nonatomic, copy, nullable) NSString *whiteBalance; + +/** + * The width of the image in pixels. + * + * Uses NSNumber of intValue. + */ +@property(nonatomic, strong, nullable) NSNumber *width; + +@end + + +/** + * A collection of arbitrary key-value pairs which are visible to all apps. + * Entries with null values are cleared in update and copy requests. + * + * @note This class is documented as having more properties of NSString. Use @c + * -additionalJSONKeys and @c -additionalPropertyForName: to get the list + * of properties and then fetch them; or @c -additionalProperties to + * fetch them all at once. + */ +@interface GTLRDrive_File_Properties : GTLRObject +@end + + +/** + * Additional metadata about video media. This may not be available immediately + * upon upload. + */ +@interface GTLRDrive_File_VideoMediaMetadata : GTLRObject + +/** + * The duration of the video in milliseconds. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *durationMillis; + +/** + * The height of the video in pixels. + * + * Uses NSNumber of intValue. + */ +@property(nonatomic, strong, nullable) NSNumber *height; + +/** + * The width of the video in pixels. + * + * Uses NSNumber of intValue. + */ +@property(nonatomic, strong, nullable) NSNumber *width; + +@end + + +/** + * A thumbnail for the file. This will only be used if Google Drive cannot + * generate a standard thumbnail. + */ +@interface GTLRDrive_File_ContentHints_Thumbnail : GTLRObject + +/** + * The thumbnail data encoded with URL-safe Base64 (RFC 4648 section 5). + * + * Contains encoded binary data; GTLRBase64 can encode/decode (probably + * web-safe format). + */ +@property(nonatomic, copy, nullable) NSString *image; + +/** The MIME type of the thumbnail. */ +@property(nonatomic, copy, nullable) NSString *mimeType; + +@end + + +/** + * Geographic location information stored in the image. + */ +@interface GTLRDrive_File_ImageMediaMetadata_Location : GTLRObject + +/** + * The altitude stored in the image. + * + * Uses NSNumber of doubleValue. + */ +@property(nonatomic, strong, nullable) NSNumber *altitude; + +/** + * The latitude stored in the image. + * + * Uses NSNumber of doubleValue. + */ +@property(nonatomic, strong, nullable) NSNumber *latitude; + +/** + * The longitude stored in the image. + * + * Uses NSNumber of doubleValue. + */ +@property(nonatomic, strong, nullable) NSNumber *longitude; + +@end + + +/** + * A list of files. + * + * @note This class supports NSFastEnumeration and indexed subscripting over + * its "files" property. If returned as the result of a query, it should + * support automatic pagination (when @c shouldFetchNextPages is + * enabled). + */ +@interface GTLRDrive_FileList : GTLRCollectionObject + +/** + * The list of files. If nextPageToken is populated, then this list may be + * incomplete and an additional page of results should be fetched. + * + * @note This property is used to support NSFastEnumeration and indexed + * subscripting on this class. + */ +@property(nonatomic, strong, nullable) NSArray *files; + +/** + * Whether the search process was incomplete. If true, then some search results + * may be missing, since all documents were not searched. This may occur when + * searching multiple drives with the "allDrives" corpora, but all corpora + * could not be searched. When this happens, it is suggested that clients + * narrow their query by choosing a different corpus such as "user" or "drive". + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *incompleteSearch; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#fileList". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * The page token for the next page of files. This will be absent if the end of + * the files list has been reached. If the token is rejected for any reason, it + * should be discarded, and pagination should be restarted from the first page + * of results. + */ +@property(nonatomic, copy, nullable) NSString *nextPageToken; + +@end + + +/** + * A list of generated file IDs which can be provided in create requests. + */ +@interface GTLRDrive_GeneratedIds : GTLRObject + +/** The IDs generated for the requesting user in the specified space. */ +@property(nonatomic, strong, nullable) NSArray *ids; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#generatedIds". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** The type of file that can be created with these IDs. */ +@property(nonatomic, copy, nullable) NSString *space; + +@end + + +/** + * A permission for a file. A permission grants a user, group, domain or the + * world access to a file or a folder hierarchy. + */ +@interface GTLRDrive_Permission : GTLRObject + +/** + * Whether the permission allows the file to be discovered through search. This + * is only applicable for permissions of type domain or anyone. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *allowFileDiscovery; + +/** + * Whether the account associated with this permission has been deleted. This + * field only pertains to user and group permissions. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *deleted; + +/** + * The "pretty" name of the value of the permission. The following is a list of + * examples for each type of permission: + * - user - User's full name, as defined for their Google account, such as "Joe + * Smith." + * - group - Name of the Google Group, such as "The Company Administrators." + * - domain - String domain name, such as "thecompany.com." + * - anyone - No displayName is present. + */ +@property(nonatomic, copy, nullable) NSString *displayName; + +/** The domain to which this permission refers. */ +@property(nonatomic, copy, nullable) NSString *domain; + +/** The email address of the user or group to which this permission refers. */ +@property(nonatomic, copy, nullable) NSString *emailAddress; + +/** + * The time at which this permission will expire (RFC 3339 date-time). + * Expiration times have the following restrictions: + * - They can only be set on user and group permissions + * - The time must be in the future + * - The time cannot be more than a year in the future + */ +@property(nonatomic, strong, nullable) GTLRDateTime *expirationTime; + +/** + * The ID of this permission. This is a unique identifier for the grantee, and + * is published in User resources as permissionId. IDs should be treated as + * opaque values. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#permission". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * Details of whether the permissions on this shared drive item are inherited + * or directly on this item. This is an output-only field which is present only + * for shared drive items. + */ +@property(nonatomic, strong, nullable) NSArray *permissionDetails; + +/** A link to the user's profile photo, if available. */ +@property(nonatomic, copy, nullable) NSString *photoLink; + +/** + * The role granted by this permission. While new values may be supported in + * the future, the following are currently allowed: + * - owner + * - organizer + * - fileOrganizer + * - writer + * - commenter + * - reader + */ +@property(nonatomic, copy, nullable) NSString *role; + +/** Deprecated - use permissionDetails instead. */ +@property(nonatomic, strong, nullable) NSArray *teamDrivePermissionDetails; + +/** + * The type of the grantee. Valid values are: + * - user + * - group + * - domain + * - anyone When creating a permission, if type is user or group, you must + * provide an emailAddress for the user or group. When type is domain, you must + * provide a domain. There isn't extra information required for a anyone type. + */ +@property(nonatomic, copy, nullable) NSString *type; + +@end + + +/** + * GTLRDrive_Permission_PermissionDetails_Item + */ +@interface GTLRDrive_Permission_PermissionDetails_Item : GTLRObject + +/** + * Whether this permission is inherited. This field is always populated. This + * is an output-only field. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *inherited; + +/** + * The ID of the item from which this permission is inherited. This is an + * output-only field and is only populated for members of the shared drive. + */ +@property(nonatomic, copy, nullable) NSString *inheritedFrom; + +/** + * The permission type for this user. While new values may be added in future, + * the following are currently possible: + * - file + * - member + */ +@property(nonatomic, copy, nullable) NSString *permissionType; + +/** + * The primary role for this user. While new values may be added in the future, + * the following are currently possible: + * - organizer + * - fileOrganizer + * - writer + * - commenter + * - reader + */ +@property(nonatomic, copy, nullable) NSString *role; + +@end + + +/** + * GTLRDrive_Permission_TeamDrivePermissionDetails_Item + */ +@interface GTLRDrive_Permission_TeamDrivePermissionDetails_Item : GTLRObject + +/** + * Deprecated - use permissionDetails/inherited instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *inherited; + +/** Deprecated - use permissionDetails/inheritedFrom instead. */ +@property(nonatomic, copy, nullable) NSString *inheritedFrom; + +/** Deprecated - use permissionDetails/role instead. */ +@property(nonatomic, copy, nullable) NSString *role; + +/** Deprecated - use permissionDetails/permissionType instead. */ +@property(nonatomic, copy, nullable) NSString *teamDrivePermissionType; + +@end + + +/** + * A list of permissions for a file. + * + * @note This class supports NSFastEnumeration and indexed subscripting over + * its "permissions" property. If returned as the result of a query, it + * should support automatic pagination (when @c shouldFetchNextPages is + * enabled). + */ +@interface GTLRDrive_PermissionList : GTLRCollectionObject + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#permissionList". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * The page token for the next page of permissions. This field will be absent + * if the end of the permissions list has been reached. If the token is + * rejected for any reason, it should be discarded, and pagination should be + * restarted from the first page of results. + */ +@property(nonatomic, copy, nullable) NSString *nextPageToken; + +/** + * The list of permissions. If nextPageToken is populated, then this list may + * be incomplete and an additional page of results should be fetched. + * + * @note This property is used to support NSFastEnumeration and indexed + * subscripting on this class. + */ +@property(nonatomic, strong, nullable) NSArray *permissions; + +@end + + +/** + * A reply to a comment on a file. + */ +@interface GTLRDrive_Reply : GTLRObject + +/** + * The action the reply performed to the parent comment. Valid values are: + * - resolve + * - reopen + */ +@property(nonatomic, copy, nullable) NSString *action; + +/** + * The author of the reply. The author's email address and permission ID will + * not be populated. + */ +@property(nonatomic, strong, nullable) GTLRDrive_User *author; + +/** + * The plain text content of the reply. This field is used for setting the + * content, while htmlContent should be displayed. This is required on creates + * if no action is specified. + */ +@property(nonatomic, copy, nullable) NSString *content; + +/** The time at which the reply was created (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *createdTime; + +/** + * Whether the reply has been deleted. A deleted reply has no content. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *deleted; + +/** The content of the reply with HTML formatting. */ +@property(nonatomic, copy, nullable) NSString *htmlContent; + +/** + * The ID of the reply. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#reply". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** The last time the reply was modified (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *modifiedTime; + +@end + + +/** + * A list of replies to a comment on a file. + * + * @note This class supports NSFastEnumeration and indexed subscripting over + * its "replies" property. If returned as the result of a query, it + * should support automatic pagination (when @c shouldFetchNextPages is + * enabled). + */ +@interface GTLRDrive_ReplyList : GTLRCollectionObject + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#replyList". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * The page token for the next page of replies. This will be absent if the end + * of the replies list has been reached. If the token is rejected for any + * reason, it should be discarded, and pagination should be restarted from the + * first page of results. + */ +@property(nonatomic, copy, nullable) NSString *nextPageToken; + +/** + * The list of replies. If nextPageToken is populated, then this list may be + * incomplete and an additional page of results should be fetched. + * + * @note This property is used to support NSFastEnumeration and indexed + * subscripting on this class. + */ +@property(nonatomic, strong, nullable) NSArray *replies; + +@end + + +/** + * The metadata for a revision to a file. + */ +@interface GTLRDrive_Revision : GTLRObject + +/** Links for exporting Google Docs to specific formats. */ +@property(nonatomic, strong, nullable) GTLRDrive_Revision_ExportLinks *exportLinks; + +/** + * The ID of the revision. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** + * Whether to keep this revision forever, even if it is no longer the head + * revision. If not set, the revision will be automatically purged 30 days + * after newer content is uploaded. This can be set on a maximum of 200 + * revisions for a file. + * This field is only applicable to files with binary content in Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *keepForever; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#revision". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** The last user to modify this revision. */ +@property(nonatomic, strong, nullable) GTLRDrive_User *lastModifyingUser; + +/** + * The MD5 checksum of the revision's content. This is only applicable to files + * with binary content in Drive. + */ +@property(nonatomic, copy, nullable) NSString *md5Checksum; + +/** The MIME type of the revision. */ +@property(nonatomic, copy, nullable) NSString *mimeType; + +/** The last time the revision was modified (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *modifiedTime; + +/** + * The original filename used to create this revision. This is only applicable + * to files with binary content in Drive. + */ +@property(nonatomic, copy, nullable) NSString *originalFilename; + +/** + * Whether subsequent revisions will be automatically republished. This is only + * applicable to Google Docs. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *publishAuto; + +/** + * Whether this revision is published. This is only applicable to Google Docs. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *published; + +/** + * Whether this revision is published outside the domain. This is only + * applicable to Google Docs. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *publishedOutsideDomain; + +/** + * The size of the revision's content in bytes. This is only applicable to + * files with binary content in Drive. + * + * Uses NSNumber of longLongValue. + */ +@property(nonatomic, strong, nullable) NSNumber *size; + +@end + + +/** + * Links for exporting Google Docs to specific formats. + * + * @note This class is documented as having more properties of NSString. Use @c + * -additionalJSONKeys and @c -additionalPropertyForName: to get the list + * of properties and then fetch them; or @c -additionalProperties to + * fetch them all at once. + */ +@interface GTLRDrive_Revision_ExportLinks : GTLRObject +@end + + +/** + * A list of revisions of a file. + * + * @note This class supports NSFastEnumeration and indexed subscripting over + * its "revisions" property. If returned as the result of a query, it + * should support automatic pagination (when @c shouldFetchNextPages is + * enabled). + */ +@interface GTLRDrive_RevisionList : GTLRCollectionObject + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#revisionList". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * The page token for the next page of revisions. This will be absent if the + * end of the revisions list has been reached. If the token is rejected for any + * reason, it should be discarded, and pagination should be restarted from the + * first page of results. + */ +@property(nonatomic, copy, nullable) NSString *nextPageToken; + +/** + * The list of revisions. If nextPageToken is populated, then this list may be + * incomplete and an additional page of results should be fetched. + * + * @note This property is used to support NSFastEnumeration and indexed + * subscripting on this class. + */ +@property(nonatomic, strong, nullable) NSArray *revisions; + +@end + + +/** + * GTLRDrive_StartPageToken + */ +@interface GTLRDrive_StartPageToken : GTLRObject + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#startPageToken". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** The starting page token for listing changes. */ +@property(nonatomic, copy, nullable) NSString *startPageToken; + +@end + + +/** + * Deprecated: use the drive collection instead. + */ +@interface GTLRDrive_TeamDrive : GTLRObject + +/** + * An image file and cropping parameters from which a background image for this + * Team Drive is set. This is a write only field; it can only be set on + * drive.teamdrives.update requests that don't set themeId. When specified, all + * fields of the backgroundImageFile must be set. + */ +@property(nonatomic, strong, nullable) GTLRDrive_TeamDrive_BackgroundImageFile *backgroundImageFile; + +/** A short-lived link to this Team Drive's background image. */ +@property(nonatomic, copy, nullable) NSString *backgroundImageLink; + +/** Capabilities the current user has on this Team Drive. */ +@property(nonatomic, strong, nullable) GTLRDrive_TeamDrive_Capabilities *capabilities; + +/** + * The color of this Team Drive as an RGB hex string. It can only be set on a + * drive.teamdrives.update request that does not set themeId. + */ +@property(nonatomic, copy, nullable) NSString *colorRgb; + +/** The time at which the Team Drive was created (RFC 3339 date-time). */ +@property(nonatomic, strong, nullable) GTLRDateTime *createdTime; + +/** + * The ID of this Team Drive which is also the ID of the top level folder of + * this Team Drive. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#teamDrive". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** The name of this Team Drive. */ +@property(nonatomic, copy, nullable) NSString *name; + +/** + * A set of restrictions that apply to this Team Drive or items inside this + * Team Drive. + */ +@property(nonatomic, strong, nullable) GTLRDrive_TeamDrive_Restrictions *restrictions; + +/** + * The ID of the theme from which the background image and color will be set. + * The set of possible teamDriveThemes can be retrieved from a drive.about.get + * response. When not specified on a drive.teamdrives.create request, a random + * theme is chosen from which the background image and color are set. This is a + * write-only field; it can only be set on requests that don't set colorRgb or + * backgroundImageFile. + */ +@property(nonatomic, copy, nullable) NSString *themeId; + +@end + + +/** + * An image file and cropping parameters from which a background image for this + * Team Drive is set. This is a write only field; it can only be set on + * drive.teamdrives.update requests that don't set themeId. When specified, all + * fields of the backgroundImageFile must be set. + */ +@interface GTLRDrive_TeamDrive_BackgroundImageFile : GTLRObject + +/** + * The ID of an image file in Drive to use for the background image. + * + * identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). + */ +@property(nonatomic, copy, nullable) NSString *identifier; + +/** + * The width of the cropped image in the closed range of 0 to 1. This value + * represents the width of the cropped image divided by the width of the entire + * image. The height is computed by applying a width to height aspect ratio of + * 80 to 9. The resulting image must be at least 1280 pixels wide and 144 + * pixels high. + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *width; + +/** + * The X coordinate of the upper left corner of the cropping area in the + * background image. This is a value in the closed range of 0 to 1. This value + * represents the horizontal distance from the left side of the entire image to + * the left side of the cropping area divided by the width of the entire image. + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *xCoordinate; + +/** + * The Y coordinate of the upper left corner of the cropping area in the + * background image. This is a value in the closed range of 0 to 1. This value + * represents the vertical distance from the top side of the entire image to + * the top side of the cropping area divided by the height of the entire image. + * + * Uses NSNumber of floatValue. + */ +@property(nonatomic, strong, nullable) NSNumber *yCoordinate; + +@end + + +/** + * Capabilities the current user has on this Team Drive. + */ +@interface GTLRDrive_TeamDrive_Capabilities : GTLRObject + +/** + * Whether the current user can add children to folders in this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canAddChildren; + +/** + * Whether the current user can change the copyRequiresWriterPermission + * restriction of this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeCopyRequiresWriterPermissionRestriction; + +/** + * Whether the current user can change the domainUsersOnly restriction of this + * Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeDomainUsersOnlyRestriction; + +/** + * Whether the current user can change the background of this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeTeamDriveBackground; + +/** + * Whether the current user can change the teamMembersOnly restriction of this + * Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canChangeTeamMembersOnlyRestriction; + +/** + * Whether the current user can comment on files in this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canComment; + +/** + * Whether the current user can copy files in this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canCopy; + +/** + * Whether the current user can delete children from folders in this Team + * Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canDeleteChildren; + +/** + * Whether the current user can delete this Team Drive. Attempting to delete + * the Team Drive may still fail if there are untrashed items inside the Team + * Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canDeleteTeamDrive; + +/** + * Whether the current user can download files in this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canDownload; + +/** + * Whether the current user can edit files in this Team Drive + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canEdit; + +/** + * Whether the current user can list the children of folders in this Team + * Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canListChildren; + +/** + * Whether the current user can add members to this Team Drive or remove them + * or change their role. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canManageMembers; + +/** + * Whether the current user can read the revisions resource of files in this + * Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canReadRevisions; + +/** + * Deprecated - use canDeleteChildren or canTrashChildren instead. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canRemoveChildren; + +/** + * Whether the current user can rename files or folders in this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canRename; + +/** + * Whether the current user can rename this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canRenameTeamDrive; + +/** + * Whether the current user can share files or folders in this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canShare; + +/** + * Whether the current user can trash children from folders in this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *canTrashChildren; + +@end + + +/** + * A set of restrictions that apply to this Team Drive or items inside this + * Team Drive. + */ +@interface GTLRDrive_TeamDrive_Restrictions : GTLRObject + +/** + * Whether administrative privileges on this Team Drive are required to modify + * restrictions. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *adminManagedRestrictions; + +/** + * Whether the options to copy, print, or download files inside this Team + * Drive, should be disabled for readers and commenters. When this restriction + * is set to true, it will override the similarly named field to true for any + * file inside this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *copyRequiresWriterPermission NS_RETURNS_NOT_RETAINED; + +/** + * Whether access to this Team Drive and items inside this Team Drive is + * restricted to users of the domain to which this Team Drive belongs. This + * restriction may be overridden by other sharing policies controlled outside + * of this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *domainUsersOnly; + +/** + * Whether access to items inside this Team Drive is restricted to members of + * this Team Drive. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *teamMembersOnly; + +@end + + +/** + * A list of Team Drives. + * + * @note This class supports NSFastEnumeration and indexed subscripting over + * its "teamDrives" property. If returned as the result of a query, it + * should support automatic pagination (when @c shouldFetchNextPages is + * enabled). + */ +@interface GTLRDrive_TeamDriveList : GTLRCollectionObject + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#teamDriveList". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * The page token for the next page of Team Drives. This will be absent if the + * end of the Team Drives list has been reached. If the token is rejected for + * any reason, it should be discarded, and pagination should be restarted from + * the first page of results. + */ +@property(nonatomic, copy, nullable) NSString *nextPageToken; + +/** + * The list of Team Drives. If nextPageToken is populated, then this list may + * be incomplete and an additional page of results should be fetched. + * + * @note This property is used to support NSFastEnumeration and indexed + * subscripting on this class. + */ +@property(nonatomic, strong, nullable) NSArray *teamDrives; + +@end + + +/** + * Information about a Drive user. + */ +@interface GTLRDrive_User : GTLRObject + +/** A plain text displayable name for this user. */ +@property(nonatomic, copy, nullable) NSString *displayName; + +/** + * The email address of the user. This may not be present in certain contexts + * if the user has not made their email address visible to the requester. + */ +@property(nonatomic, copy, nullable) NSString *emailAddress; + +/** + * Identifies what kind of resource this is. Value: the fixed string + * "drive#user". + */ +@property(nonatomic, copy, nullable) NSString *kind; + +/** + * Whether this user is the requesting user. + * + * Uses NSNumber of boolValue. + */ +@property(nonatomic, strong, nullable) NSNumber *me; + +/** The user's ID as visible in Permission resources. */ +@property(nonatomic, copy, nullable) NSString *permissionId; + +/** A link to the user's profile photo, if available. */ +@property(nonatomic, copy, nullable) NSString *photoLink; + +@end + +NS_ASSUME_NONNULL_END + +#pragma clang diagnostic pop diff --git a/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.m b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.m new file mode 100644 index 0000000..2978cdd --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.m @@ -0,0 +1,766 @@ +// NOTE: This file was generated by the ServiceGenerator. + +// ---------------------------------------------------------------------------- +// API: +// Drive API (drive/v3) +// Description: +// Manages files in Drive including uploading, downloading, searching, +// detecting changes, and updating sharing permissions. +// Documentation: +// https://developers.google.com/drive/ + +#import "GTLRDriveObjects.h" + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_About +// + +@implementation GTLRDrive_About +@dynamic appInstalled, canCreateDrives, canCreateTeamDrives, driveThemes, + exportFormats, folderColorPalette, importFormats, kind, maxImportSizes, + maxUploadSize, storageQuota, teamDriveThemes, user; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"driveThemes" : [GTLRDrive_About_DriveThemes_Item class], + @"folderColorPalette" : [NSString class], + @"teamDriveThemes" : [GTLRDrive_About_TeamDriveThemes_Item class] + }; + return map; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_About_DriveThemes_Item +// + +@implementation GTLRDrive_About_DriveThemes_Item +@dynamic backgroundImageLink, colorRgb, identifier; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_About_ExportFormats +// + +@implementation GTLRDrive_About_ExportFormats + ++ (Class)classForAdditionalProperties { + return [NSString class]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_About_ImportFormats +// + +@implementation GTLRDrive_About_ImportFormats + ++ (Class)classForAdditionalProperties { + return [NSString class]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_About_MaxImportSizes +// + +@implementation GTLRDrive_About_MaxImportSizes + ++ (Class)classForAdditionalProperties { + return [NSNumber class]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_About_StorageQuota +// + +@implementation GTLRDrive_About_StorageQuota +@dynamic limit, usage, usageInDrive, usageInDriveTrash; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_About_TeamDriveThemes_Item +// + +@implementation GTLRDrive_About_TeamDriveThemes_Item +@dynamic backgroundImageLink, colorRgb, identifier; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Change +// + +@implementation GTLRDrive_Change +@dynamic changeType, drive, driveId, file, fileId, kind, removed, teamDrive, + teamDriveId, time, type; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_ChangeList +// + +@implementation GTLRDrive_ChangeList +@dynamic changes, kind, newStartPageToken, nextPageToken; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"changes" : [GTLRDrive_Change class] + }; + return map; +} + ++ (NSString *)collectionItemsKey { + return @"changes"; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Channel +// + +@implementation GTLRDrive_Channel +@dynamic address, expiration, identifier, kind, params, payload, resourceId, + resourceUri, token, type; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Channel_Params +// + +@implementation GTLRDrive_Channel_Params + ++ (Class)classForAdditionalProperties { + return [NSString class]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Comment +// + +@implementation GTLRDrive_Comment +@dynamic anchor, author, content, createdTime, deleted, htmlContent, identifier, + kind, modifiedTime, quotedFileContent, replies, resolved; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"replies" : [GTLRDrive_Reply class] + }; + return map; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Comment_QuotedFileContent +// + +@implementation GTLRDrive_Comment_QuotedFileContent +@dynamic mimeType, value; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_CommentList +// + +@implementation GTLRDrive_CommentList +@dynamic comments, kind, nextPageToken; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"comments" : [GTLRDrive_Comment class] + }; + return map; +} + ++ (NSString *)collectionItemsKey { + return @"comments"; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Drive +// + +@implementation GTLRDrive_Drive +@dynamic backgroundImageFile, backgroundImageLink, capabilities, colorRgb, + createdTime, hidden, identifier, kind, name, restrictions, themeId; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Drive_BackgroundImageFile +// + +@implementation GTLRDrive_Drive_BackgroundImageFile +@dynamic identifier, width, xCoordinate, yCoordinate; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Drive_Capabilities +// + +@implementation GTLRDrive_Drive_Capabilities +@dynamic canAddChildren, canChangeCopyRequiresWriterPermissionRestriction, + canChangeDomainUsersOnlyRestriction, canChangeDriveBackground, + canChangeDriveMembersOnlyRestriction, canComment, canCopy, + canDeleteChildren, canDeleteDrive, canDownload, canEdit, + canListChildren, canManageMembers, canReadRevisions, canRename, + canRenameDrive, canShare, canTrashChildren; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Drive_Restrictions +// + +@implementation GTLRDrive_Drive_Restrictions +@dynamic adminManagedRestrictions, copyRequiresWriterPermission, + domainUsersOnly, driveMembersOnly; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_DriveList +// + +@implementation GTLRDrive_DriveList +@dynamic drives, kind, nextPageToken; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"drives" : [GTLRDrive_Drive class] + }; + return map; +} + ++ (NSString *)collectionItemsKey { + return @"drives"; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File +// + +@implementation GTLRDrive_File +@dynamic appProperties, capabilities, contentHints, + copyRequiresWriterPermission, createdTime, descriptionProperty, + driveId, explicitlyTrashed, exportLinks, fileExtension, folderColorRgb, + fullFileExtension, hasAugmentedPermissions, hasThumbnail, + headRevisionId, iconLink, identifier, imageMediaMetadata, + isAppAuthorized, kind, lastModifyingUser, md5Checksum, mimeType, + modifiedByMe, modifiedByMeTime, modifiedTime, name, originalFilename, + ownedByMe, owners, parents, permissionIds, permissions, properties, + quotaBytesUsed, shared, sharedWithMeTime, sharingUser, size, spaces, + starred, teamDriveId, thumbnailLink, thumbnailVersion, trashed, + trashedTime, trashingUser, version, videoMediaMetadata, viewedByMe, + viewedByMeTime, viewersCanCopyContent, webContentLink, webViewLink, + writersCanShare; + ++ (NSDictionary *)propertyToJSONKeyMap { + NSDictionary *map = @{ + @"descriptionProperty" : @"description", + @"identifier" : @"id" + }; + return map; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"owners" : [GTLRDrive_User class], + @"parents" : [NSString class], + @"permissionIds" : [NSString class], + @"permissions" : [GTLRDrive_Permission class], + @"spaces" : [NSString class] + }; + return map; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File_AppProperties +// + +@implementation GTLRDrive_File_AppProperties + ++ (Class)classForAdditionalProperties { + return [NSString class]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File_Capabilities +// + +@implementation GTLRDrive_File_Capabilities +@dynamic canAddChildren, canChangeCopyRequiresWriterPermission, + canChangeViewersCanCopyContent, canComment, canCopy, canDelete, + canDeleteChildren, canDownload, canEdit, canListChildren, + canModifyContent, canMoveChildrenOutOfDrive, + canMoveChildrenOutOfTeamDrive, canMoveChildrenWithinDrive, + canMoveChildrenWithinTeamDrive, canMoveItemIntoTeamDrive, + canMoveItemOutOfDrive, canMoveItemOutOfTeamDrive, + canMoveItemWithinDrive, canMoveItemWithinTeamDrive, + canMoveTeamDriveItem, canReadDrive, canReadRevisions, canReadTeamDrive, + canRemoveChildren, canRename, canShare, canTrash, canTrashChildren, + canUntrash; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File_ContentHints +// + +@implementation GTLRDrive_File_ContentHints +@dynamic indexableText, thumbnail; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File_ExportLinks +// + +@implementation GTLRDrive_File_ExportLinks + ++ (Class)classForAdditionalProperties { + return [NSString class]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File_ImageMediaMetadata +// + +@implementation GTLRDrive_File_ImageMediaMetadata +@dynamic aperture, cameraMake, cameraModel, colorSpace, exposureBias, + exposureMode, exposureTime, flashUsed, focalLength, height, isoSpeed, + lens, location, maxApertureValue, meteringMode, rotation, sensor, + subjectDistance, time, whiteBalance, width; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File_Properties +// + +@implementation GTLRDrive_File_Properties + ++ (Class)classForAdditionalProperties { + return [NSString class]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File_VideoMediaMetadata +// + +@implementation GTLRDrive_File_VideoMediaMetadata +@dynamic durationMillis, height, width; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File_ContentHints_Thumbnail +// + +@implementation GTLRDrive_File_ContentHints_Thumbnail +@dynamic image, mimeType; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_File_ImageMediaMetadata_Location +// + +@implementation GTLRDrive_File_ImageMediaMetadata_Location +@dynamic altitude, latitude, longitude; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_FileList +// + +@implementation GTLRDrive_FileList +@dynamic files, incompleteSearch, kind, nextPageToken; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"files" : [GTLRDrive_File class] + }; + return map; +} + ++ (NSString *)collectionItemsKey { + return @"files"; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_GeneratedIds +// + +@implementation GTLRDrive_GeneratedIds +@dynamic ids, kind, space; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"ids" : [NSString class] + }; + return map; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Permission +// + +@implementation GTLRDrive_Permission +@dynamic allowFileDiscovery, deleted, displayName, domain, emailAddress, + expirationTime, identifier, kind, permissionDetails, photoLink, role, + teamDrivePermissionDetails, type; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"permissionDetails" : [GTLRDrive_Permission_PermissionDetails_Item class], + @"teamDrivePermissionDetails" : [GTLRDrive_Permission_TeamDrivePermissionDetails_Item class] + }; + return map; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Permission_PermissionDetails_Item +// + +@implementation GTLRDrive_Permission_PermissionDetails_Item +@dynamic inherited, inheritedFrom, permissionType, role; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Permission_TeamDrivePermissionDetails_Item +// + +@implementation GTLRDrive_Permission_TeamDrivePermissionDetails_Item +@dynamic inherited, inheritedFrom, role, teamDrivePermissionType; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_PermissionList +// + +@implementation GTLRDrive_PermissionList +@dynamic kind, nextPageToken, permissions; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"permissions" : [GTLRDrive_Permission class] + }; + return map; +} + ++ (NSString *)collectionItemsKey { + return @"permissions"; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Reply +// + +@implementation GTLRDrive_Reply +@dynamic action, author, content, createdTime, deleted, htmlContent, identifier, + kind, modifiedTime; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_ReplyList +// + +@implementation GTLRDrive_ReplyList +@dynamic kind, nextPageToken, replies; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"replies" : [GTLRDrive_Reply class] + }; + return map; +} + ++ (NSString *)collectionItemsKey { + return @"replies"; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Revision +// + +@implementation GTLRDrive_Revision +@dynamic exportLinks, identifier, keepForever, kind, lastModifyingUser, + md5Checksum, mimeType, modifiedTime, originalFilename, publishAuto, + published, publishedOutsideDomain, size; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_Revision_ExportLinks +// + +@implementation GTLRDrive_Revision_ExportLinks + ++ (Class)classForAdditionalProperties { + return [NSString class]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_RevisionList +// + +@implementation GTLRDrive_RevisionList +@dynamic kind, nextPageToken, revisions; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"revisions" : [GTLRDrive_Revision class] + }; + return map; +} + ++ (NSString *)collectionItemsKey { + return @"revisions"; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_StartPageToken +// + +@implementation GTLRDrive_StartPageToken +@dynamic kind, startPageToken; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_TeamDrive +// + +@implementation GTLRDrive_TeamDrive +@dynamic backgroundImageFile, backgroundImageLink, capabilities, colorRgb, + createdTime, identifier, kind, name, restrictions, themeId; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_TeamDrive_BackgroundImageFile +// + +@implementation GTLRDrive_TeamDrive_BackgroundImageFile +@dynamic identifier, width, xCoordinate, yCoordinate; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"identifier" : @"id" }; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_TeamDrive_Capabilities +// + +@implementation GTLRDrive_TeamDrive_Capabilities +@dynamic canAddChildren, canChangeCopyRequiresWriterPermissionRestriction, + canChangeDomainUsersOnlyRestriction, canChangeTeamDriveBackground, + canChangeTeamMembersOnlyRestriction, canComment, canCopy, + canDeleteChildren, canDeleteTeamDrive, canDownload, canEdit, + canListChildren, canManageMembers, canReadRevisions, canRemoveChildren, + canRename, canRenameTeamDrive, canShare, canTrashChildren; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_TeamDrive_Restrictions +// + +@implementation GTLRDrive_TeamDrive_Restrictions +@dynamic adminManagedRestrictions, copyRequiresWriterPermission, + domainUsersOnly, teamMembersOnly; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_TeamDriveList +// + +@implementation GTLRDrive_TeamDriveList +@dynamic kind, nextPageToken, teamDrives; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = @{ + @"teamDrives" : [GTLRDrive_TeamDrive class] + }; + return map; +} + ++ (NSString *)collectionItemsKey { + return @"teamDrives"; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLRDrive_User +// + +@implementation GTLRDrive_User +@dynamic displayName, emailAddress, kind, me, permissionId, photoLink; +@end diff --git a/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.h b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.h new file mode 100644 index 0000000..5e3f03a --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.h @@ -0,0 +1,2541 @@ +// NOTE: This file was generated by the ServiceGenerator. + +// ---------------------------------------------------------------------------- +// API: +// Drive API (drive/v3) +// Description: +// Manages files in Drive including uploading, downloading, searching, +// detecting changes, and updating sharing permissions. +// Documentation: +// https://developers.google.com/drive/ + +#if GTLR_BUILT_AS_FRAMEWORK + #import "GTLR/GTLRQuery.h" +#else + #import "GTLRQuery.h" +#endif + +#if GTLR_RUNTIME_VERSION != 3000 +#error This file was generated by a different version of ServiceGenerator which is incompatible with this GTLR library source. +#endif + +@class GTLRDrive_Channel; +@class GTLRDrive_Comment; +@class GTLRDrive_Drive; +@class GTLRDrive_File; +@class GTLRDrive_Permission; +@class GTLRDrive_Reply; +@class GTLRDrive_Revision; +@class GTLRDrive_TeamDrive; + +// Generated comments include content from the discovery document; avoid them +// causing warnings since clang's checks are some what arbitrary. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdocumentation" + +NS_ASSUME_NONNULL_BEGIN + +// ---------------------------------------------------------------------------- +// Constants - For some of the query classes' properties below. + +// ---------------------------------------------------------------------------- +// corpus + +/** + * Files shared to the user's domain. + * + * Value: "domain" + */ +GTLR_EXTERN NSString * const kGTLRDriveCorpusDomain; +/** + * Files owned by or shared to the user. + * + * Value: "user" + */ +GTLR_EXTERN NSString * const kGTLRDriveCorpusUser; + +// ---------------------------------------------------------------------------- +// Query Classes +// + +/** + * Parent class for other Drive query classes. + */ +@interface GTLRDriveQuery : GTLRQuery + +/** Selector specifying which fields to include in a partial response. */ +@property(nonatomic, copy, nullable) NSString *fields; + +@end + +/** + * Gets information about the user, the user's Drive, and system capabilities. + * + * Method: drive.about.get + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_AboutGet : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForAboutGet] + +/** + * Fetches a @c GTLRDrive_About. + * + * Gets information about the user, the user's Drive, and system capabilities. + * + * @return GTLRDriveQuery_AboutGet + */ ++ (instancetype)query; + +@end + +/** + * Gets the starting pageToken for listing future changes. + * + * Method: drive.changes.getStartPageToken + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_ChangesGetStartPageToken : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForChangesGetStartPageToken] + +/** + * The ID of the shared drive for which the starting pageToken for listing + * future changes from that shared drive will be returned. + */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** Deprecated use driveId instead. */ +@property(nonatomic, copy, nullable) NSString *teamDriveId; + +/** + * Fetches a @c GTLRDrive_StartPageToken. + * + * Gets the starting pageToken for listing future changes. + * + * @return GTLRDriveQuery_ChangesGetStartPageToken + */ ++ (instancetype)query; + +@end + +/** + * Lists the changes for a user or shared drive. + * + * Method: drive.changes.list + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_ChangesList : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForChangesListWithpageToken:] + +/** + * The shared drive from which changes will be returned. If specified the + * change IDs will be reflective of the shared drive; use the combined drive ID + * and change ID as an identifier. + */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Whether changes should include the file resource if the file is still + * accessible by the user at the time of the request, even when a file was + * removed from the list of changes and there will be no further change entries + * for this file. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeCorpusRemovals; + +/** + * Deprecated - Whether both My Drive and shared drive items should be included + * in results. This parameter will only be effective until June 1, 2020. + * Afterwards shared drive items will be included in the results. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeItemsFromAllDrives; + +/** + * Whether to include changes indicating that items have been removed from the + * list of changes, for example by deletion or loss of access. + * + * @note If not set, the documented server-side default will be true. + */ +@property(nonatomic, assign) BOOL includeRemoved; + +/** + * Deprecated use includeItemsFromAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeTeamDriveItems; + +/** + * The maximum number of changes to return per page. + * + * @note If not set, the documented server-side default will be 100 (from the + * range 1..1000). + */ +@property(nonatomic, assign) NSInteger pageSize; + +/** + * The token for continuing a previous list request on the next page. This + * should be set to the value of 'nextPageToken' from the previous response or + * to the response from the getStartPageToken method. + */ +@property(nonatomic, copy, nullable) NSString *pageToken; + +/** + * Whether to restrict the results to changes inside the My Drive hierarchy. + * This omits changes to files such as those in the Application Data folder or + * shared files which have not been added to My Drive. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL restrictToMyDrive; + +/** + * A comma-separated list of spaces to query within the user corpus. Supported + * values are 'drive', 'appDataFolder' and 'photos'. + * + * @note If not set, the documented server-side default will be drive. + */ +@property(nonatomic, copy, nullable) NSString *spaces; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** Deprecated use driveId instead. */ +@property(nonatomic, copy, nullable) NSString *teamDriveId; + +/** + * Fetches a @c GTLRDrive_ChangeList. + * + * Lists the changes for a user or shared drive. + * + * @param pageToken The token for continuing a previous list request on the + * next page. This should be set to the value of 'nextPageToken' from the + * previous response or to the response from the getStartPageToken method. + * + * @return GTLRDriveQuery_ChangesList + * + * @note Automatic pagination will be done when @c shouldFetchNextPages is + * enabled. See @c shouldFetchNextPages on @c GTLRService for more + * information. + */ ++ (instancetype)queryWithPageToken:(NSString *)pageToken; + +@end + +/** + * Subscribes to changes for a user. + * + * Method: drive.changes.watch + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_ChangesWatch : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForChangesWatchWithObject:pageToken:] + +/** + * The shared drive from which changes will be returned. If specified the + * change IDs will be reflective of the shared drive; use the combined drive ID + * and change ID as an identifier. + */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Whether changes should include the file resource if the file is still + * accessible by the user at the time of the request, even when a file was + * removed from the list of changes and there will be no further change entries + * for this file. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeCorpusRemovals; + +/** + * Deprecated - Whether both My Drive and shared drive items should be included + * in results. This parameter will only be effective until June 1, 2020. + * Afterwards shared drive items will be included in the results. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeItemsFromAllDrives; + +/** + * Whether to include changes indicating that items have been removed from the + * list of changes, for example by deletion or loss of access. + * + * @note If not set, the documented server-side default will be true. + */ +@property(nonatomic, assign) BOOL includeRemoved; + +/** + * Deprecated use includeItemsFromAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeTeamDriveItems; + +/** + * The maximum number of changes to return per page. + * + * @note If not set, the documented server-side default will be 100 (from the + * range 1..1000). + */ +@property(nonatomic, assign) NSInteger pageSize; + +/** + * The token for continuing a previous list request on the next page. This + * should be set to the value of 'nextPageToken' from the previous response or + * to the response from the getStartPageToken method. + */ +@property(nonatomic, copy, nullable) NSString *pageToken; + +/** + * Whether to restrict the results to changes inside the My Drive hierarchy. + * This omits changes to files such as those in the Application Data folder or + * shared files which have not been added to My Drive. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL restrictToMyDrive; + +/** + * A comma-separated list of spaces to query within the user corpus. Supported + * values are 'drive', 'appDataFolder' and 'photos'. + * + * @note If not set, the documented server-side default will be drive. + */ +@property(nonatomic, copy, nullable) NSString *spaces; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** Deprecated use driveId instead. */ +@property(nonatomic, copy, nullable) NSString *teamDriveId; + +/** + * Fetches a @c GTLRDrive_Channel. + * + * Subscribes to changes for a user. + * + * @param object The @c GTLRDrive_Channel to include in the query. + * @param pageToken The token for continuing a previous list request on the + * next page. This should be set to the value of 'nextPageToken' from the + * previous response or to the response from the getStartPageToken method. + * + * @return GTLRDriveQuery_ChangesWatch + */ ++ (instancetype)queryWithObject:(GTLRDrive_Channel *)object + pageToken:(NSString *)pageToken; + +@end + +/** + * Stop watching resources through this channel + * + * Method: drive.channels.stop + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_ChannelsStop : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForChannelsStopWithObject:] + +/** + * Upon successful completion, the callback's object and error parameters will + * be nil. This query does not fetch an object. + * + * Stop watching resources through this channel + * + * @param object The @c GTLRDrive_Channel to include in the query. + * + * @return GTLRDriveQuery_ChannelsStop + */ ++ (instancetype)queryWithObject:(GTLRDrive_Channel *)object; + +@end + +/** + * Creates a new comment on a file. + * + * Method: drive.comments.create + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_CommentsCreate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForCommentsCreateWithObject:fileId:] + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Fetches a @c GTLRDrive_Comment. + * + * Creates a new comment on a file. + * + * @param object The @c GTLRDrive_Comment to include in the query. + * @param fileId The ID of the file. + * + * @return GTLRDriveQuery_CommentsCreate + */ ++ (instancetype)queryWithObject:(GTLRDrive_Comment *)object + fileId:(NSString *)fileId; + +@end + +/** + * Deletes a comment. + * + * Method: drive.comments.delete + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_CommentsDelete : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForCommentsDeleteWithfileId:commentId:] + +/** The ID of the comment. */ +@property(nonatomic, copy, nullable) NSString *commentId; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Upon successful completion, the callback's object and error parameters will + * be nil. This query does not fetch an object. + * + * Deletes a comment. + * + * @param fileId The ID of the file. + * @param commentId The ID of the comment. + * + * @return GTLRDriveQuery_CommentsDelete + */ ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId; + +@end + +/** + * Gets a comment by ID. + * + * Method: drive.comments.get + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_CommentsGet : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForCommentsGetWithfileId:commentId:] + +/** The ID of the comment. */ +@property(nonatomic, copy, nullable) NSString *commentId; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Whether to return deleted comments. Deleted comments will not include their + * original content. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeDeleted; + +/** + * Fetches a @c GTLRDrive_Comment. + * + * Gets a comment by ID. + * + * @param fileId The ID of the file. + * @param commentId The ID of the comment. + * + * @return GTLRDriveQuery_CommentsGet + */ ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId; + +@end + +/** + * Lists a file's comments. + * + * Method: drive.comments.list + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_CommentsList : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForCommentsListWithfileId:] + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Whether to include deleted comments. Deleted comments will not include their + * original content. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeDeleted; + +/** + * The maximum number of comments to return per page. + * + * @note If not set, the documented server-side default will be 20 (from the + * range 1..100). + */ +@property(nonatomic, assign) NSInteger pageSize; + +/** + * The token for continuing a previous list request on the next page. This + * should be set to the value of 'nextPageToken' from the previous response. + */ +@property(nonatomic, copy, nullable) NSString *pageToken; + +/** + * The minimum value of 'modifiedTime' for the result comments (RFC 3339 + * date-time). + */ +@property(nonatomic, copy, nullable) NSString *startModifiedTime; + +/** + * Fetches a @c GTLRDrive_CommentList. + * + * Lists a file's comments. + * + * @param fileId The ID of the file. + * + * @return GTLRDriveQuery_CommentsList + * + * @note Automatic pagination will be done when @c shouldFetchNextPages is + * enabled. See @c shouldFetchNextPages on @c GTLRService for more + * information. + */ ++ (instancetype)queryWithFileId:(NSString *)fileId; + +@end + +/** + * Updates a comment with patch semantics. + * + * Method: drive.comments.update + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_CommentsUpdate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForCommentsUpdateWithObject:fileId:commentId:] + +/** The ID of the comment. */ +@property(nonatomic, copy, nullable) NSString *commentId; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Fetches a @c GTLRDrive_Comment. + * + * Updates a comment with patch semantics. + * + * @param object The @c GTLRDrive_Comment to include in the query. + * @param fileId The ID of the file. + * @param commentId The ID of the comment. + * + * @return GTLRDriveQuery_CommentsUpdate + */ ++ (instancetype)queryWithObject:(GTLRDrive_Comment *)object + fileId:(NSString *)fileId + commentId:(NSString *)commentId; + +@end + +/** + * Creates a new shared drive. + * + * Method: drive.drives.create + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + */ +@interface GTLRDriveQuery_DrivesCreate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForDrivesCreateWithObject:requestId:] + +/** + * An ID, such as a random UUID, which uniquely identifies this user's request + * for idempotent creation of a shared drive. A repeated request by the same + * user and with the same request ID will avoid creating duplicates by + * attempting to create the same shared drive. If the shared drive already + * exists a 409 error will be returned. + */ +@property(nonatomic, copy, nullable) NSString *requestId; + +/** + * Fetches a @c GTLRDrive_Drive. + * + * Creates a new shared drive. + * + * @param object The @c GTLRDrive_Drive to include in the query. + * @param requestId An ID, such as a random UUID, which uniquely identifies + * this user's request for idempotent creation of a shared drive. A repeated + * request by the same user and with the same request ID will avoid creating + * duplicates by attempting to create the same shared drive. If the shared + * drive already exists a 409 error will be returned. + * + * @return GTLRDriveQuery_DrivesCreate + */ ++ (instancetype)queryWithObject:(GTLRDrive_Drive *)object + requestId:(NSString *)requestId; + +@end + +/** + * Permanently deletes a shared drive for which the user is an organizer. The + * shared drive cannot contain any untrashed items. + * + * Method: drive.drives.delete + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + */ +@interface GTLRDriveQuery_DrivesDelete : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForDrivesDeleteWithdriveId:] + +/** The ID of the shared drive. */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Upon successful completion, the callback's object and error parameters will + * be nil. This query does not fetch an object. + * + * Permanently deletes a shared drive for which the user is an organizer. The + * shared drive cannot contain any untrashed items. + * + * @param driveId The ID of the shared drive. + * + * @return GTLRDriveQuery_DrivesDelete + */ ++ (instancetype)queryWithDriveId:(NSString *)driveId; + +@end + +/** + * Gets a shared drive's metadata by ID. + * + * Method: drive.drives.get + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_DrivesGet : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForDrivesGetWithdriveId:] + +/** The ID of the shared drive. */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Issue the request as a domain administrator; if set to true, then the + * requester will be granted access if they are an administrator of the domain + * to which the shared drive belongs. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_Drive. + * + * Gets a shared drive's metadata by ID. + * + * @param driveId The ID of the shared drive. + * + * @return GTLRDriveQuery_DrivesGet + */ ++ (instancetype)queryWithDriveId:(NSString *)driveId; + +@end + +/** + * Hides a shared drive from the default view. + * + * Method: drive.drives.hide + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + */ +@interface GTLRDriveQuery_DrivesHide : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForDrivesHideWithdriveId:] + +/** The ID of the shared drive. */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Fetches a @c GTLRDrive_Drive. + * + * Hides a shared drive from the default view. + * + * @param driveId The ID of the shared drive. + * + * @return GTLRDriveQuery_DrivesHide + */ ++ (instancetype)queryWithDriveId:(NSString *)driveId; + +@end + +/** + * Lists the user's shared drives. + * + * Method: drive.drives.list + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_DrivesList : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForDrivesList] + +/** + * Maximum number of shared drives to return. + * + * @note If not set, the documented server-side default will be 10 (from the + * range 1..100). + */ +@property(nonatomic, assign) NSInteger pageSize; + +/** Page token for shared drives. */ +@property(nonatomic, copy, nullable) NSString *pageToken; + +/** Query string for searching shared drives. */ +@property(nonatomic, copy, nullable) NSString *q; + +/** + * Issue the request as a domain administrator; if set to true, then all shared + * drives of the domain in which the requester is an administrator are + * returned. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_DriveList. + * + * Lists the user's shared drives. + * + * @return GTLRDriveQuery_DrivesList + * + * @note Automatic pagination will be done when @c shouldFetchNextPages is + * enabled. See @c shouldFetchNextPages on @c GTLRService for more + * information. + */ ++ (instancetype)query; + +@end + +/** + * Restores a shared drive to the default view. + * + * Method: drive.drives.unhide + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + */ +@interface GTLRDriveQuery_DrivesUnhide : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForDrivesUnhideWithdriveId:] + +/** The ID of the shared drive. */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Fetches a @c GTLRDrive_Drive. + * + * Restores a shared drive to the default view. + * + * @param driveId The ID of the shared drive. + * + * @return GTLRDriveQuery_DrivesUnhide + */ ++ (instancetype)queryWithDriveId:(NSString *)driveId; + +@end + +/** + * Updates the metadate for a shared drive. + * + * Method: drive.drives.update + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + */ +@interface GTLRDriveQuery_DrivesUpdate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForDrivesUpdateWithObject:driveId:] + +/** The ID of the shared drive. */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Issue the request as a domain administrator; if set to true, then the + * requester will be granted access if they are an administrator of the domain + * to which the shared drive belongs. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_Drive. + * + * Updates the metadate for a shared drive. + * + * @param object The @c GTLRDrive_Drive to include in the query. + * @param driveId The ID of the shared drive. + * + * @return GTLRDriveQuery_DrivesUpdate + */ ++ (instancetype)queryWithObject:(GTLRDrive_Drive *)object + driveId:(NSString *)driveId; + +@end + +/** + * Creates a copy of a file and applies any requested updates with patch + * semantics. + * + * Method: drive.files.copy + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDrivePhotosReadonly + */ +@interface GTLRDriveQuery_FilesCopy : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesCopyWithObject:fileId:] + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Whether to ignore the domain's default visibility settings for the created + * file. Domain administrators can choose to make all uploaded files visible to + * the domain by default; this parameter bypasses that behavior for the + * request. Permissions are still inherited from parent folders. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL ignoreDefaultVisibility; + +/** + * Whether to set the 'keepForever' field in the new head revision. This is + * only applicable to files with binary content in Google Drive. Only 200 + * revisions for the file can be kept forever. If the limit is reached, try + * deleting pinned revisions. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL keepRevisionForever; + +/** + * A language hint for OCR processing during image import (ISO 639-1 code). + */ +@property(nonatomic, copy, nullable) NSString *ocrLanguage; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Fetches a @c GTLRDrive_File. + * + * Creates a copy of a file and applies any requested updates with patch + * semantics. + * + * @param object The @c GTLRDrive_File to include in the query. + * @param fileId The ID of the file. + * + * @return GTLRDriveQuery_FilesCopy + */ ++ (instancetype)queryWithObject:(GTLRDrive_File *)object + fileId:(NSString *)fileId; + +@end + +/** + * Creates a new file. + * + * Method: drive.files.create + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_FilesCreate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesCreateWithObject:] + +/** + * Whether to ignore the domain's default visibility settings for the created + * file. Domain administrators can choose to make all uploaded files visible to + * the domain by default; this parameter bypasses that behavior for the + * request. Permissions are still inherited from parent folders. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL ignoreDefaultVisibility; + +/** + * Whether to set the 'keepForever' field in the new head revision. This is + * only applicable to files with binary content in Google Drive. Only 200 + * revisions for the file can be kept forever. If the limit is reached, try + * deleting pinned revisions. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL keepRevisionForever; + +/** + * A language hint for OCR processing during image import (ISO 639-1 code). + */ +@property(nonatomic, copy, nullable) NSString *ocrLanguage; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Whether to use the uploaded content as indexable text. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useContentAsIndexableText; + +/** + * Fetches a @c GTLRDrive_File. + * + * Creates a new file. + * + * @param object The @c GTLRDrive_File to include in the query. + * @param uploadParameters The media to include in this query. Maximum size + * 5120GB. Accepted MIME type: * / * + * + * @return GTLRDriveQuery_FilesCreate + */ ++ (instancetype)queryWithObject:(GTLRDrive_File *)object + uploadParameters:(nullable GTLRUploadParameters *)uploadParameters; + +@end + +/** + * Permanently deletes a file owned by the user without moving it to the trash. + * If the file belongs to a shared drive the user must be an organizer on the + * parent. If the target is a folder, all descendants owned by the user are + * also deleted. + * + * Method: drive.files.delete + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_FilesDelete : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesDeleteWithfileId:] + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Upon successful completion, the callback's object and error parameters will + * be nil. This query does not fetch an object. + * + * Permanently deletes a file owned by the user without moving it to the trash. + * If the file belongs to a shared drive the user must be an organizer on the + * parent. If the target is a folder, all descendants owned by the user are + * also deleted. + * + * @param fileId The ID of the file. + * + * @return GTLRDriveQuery_FilesDelete + */ ++ (instancetype)queryWithFileId:(NSString *)fileId; + +@end + +/** + * Permanently deletes all of the user's trashed files. + * + * Method: drive.files.emptyTrash + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + */ +@interface GTLRDriveQuery_FilesEmptyTrash : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesEmptyTrash] + +/** + * Upon successful completion, the callback's object and error parameters will + * be nil. This query does not fetch an object. + * + * Permanently deletes all of the user's trashed files. + * + * @return GTLRDriveQuery_FilesEmptyTrash + */ ++ (instancetype)query; + +@end + +/** + * Exports a Google Doc to the requested MIME type and returns the exported + * content. Please note that the exported content is limited to 10MB. + * + * Method: drive.files.export + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_FilesExport : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesExportWithfileId:mimeType:] + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** The MIME type of the format requested for this export. */ +@property(nonatomic, copy, nullable) NSString *mimeType; + +/** + * Fetches the requested resource data as a @c GTLRDataObject. + * + * Exports a Google Doc to the requested MIME type and returns the exported + * content. Please note that the exported content is limited to 10MB. + * + * @param fileId The ID of the file. + * @param mimeType The MIME type of the format requested for this export. + * + * @return GTLRDriveQuery_FilesExport + */ ++ (instancetype)queryForMediaWithFileId:(NSString *)fileId + mimeType:(NSString *)mimeType; + +@end + +/** + * Generates a set of file IDs which can be provided in create or copy + * requests. + * + * Method: drive.files.generateIds + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_FilesGenerateIds : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesGenerateIds] + +/** + * The number of IDs to return. + * + * @note If not set, the documented server-side default will be 10 (from the + * range 1..1000). + */ +@property(nonatomic, assign) NSInteger count; + +/** + * The space in which the IDs can be used to create new files. Supported values + * are 'drive' and 'appDataFolder'. + * + * @note If not set, the documented server-side default will be drive. + */ +@property(nonatomic, copy, nullable) NSString *space; + +/** + * Fetches a @c GTLRDrive_GeneratedIds. + * + * Generates a set of file IDs which can be provided in create or copy + * requests. + * + * @return GTLRDriveQuery_FilesGenerateIds + */ ++ (instancetype)query; + +@end + +/** + * Gets a file's metadata or content by ID. + * + * Method: drive.files.get + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_FilesGet : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesGetWithfileId:] + +/** + * Whether the user is acknowledging the risk of downloading known malware or + * other abusive files. This is only applicable when alt=media. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL acknowledgeAbuse; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Fetches a @c GTLRDrive_File. + * + * Gets a file's metadata or content by ID. + * + * @param fileId The ID of the file. + * + * @return GTLRDriveQuery_FilesGet + */ ++ (instancetype)queryWithFileId:(NSString *)fileId; + +/** + * Fetches the requested resource data as a @c GTLRDataObject. + * + * Gets a file's metadata or content by ID. + * + * @param fileId The ID of the file. + * + * @return GTLRDriveQuery_FilesGet + */ ++ (instancetype)queryForMediaWithFileId:(NSString *)fileId; + +@end + +/** + * Lists or searches files. + * + * Method: drive.files.list + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_FilesList : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesList] + +/** + * Bodies of items (files/documents) to which the query applies. Supported + * bodies are 'user', 'domain', 'drive' and 'allDrives'. Prefer 'user' or + * 'drive' to 'allDrives' for efficiency. + */ +@property(nonatomic, copy, nullable) NSString *corpora; + +/** + * The source of files to list. Deprecated: use 'corpora' instead. + * + * Likely values: + * @arg @c kGTLRDriveCorpusDomain Files shared to the user's domain. (Value: + * "domain") + * @arg @c kGTLRDriveCorpusUser Files owned by or shared to the user. (Value: + * "user") + */ +@property(nonatomic, copy, nullable) NSString *corpus; + +/** ID of the shared drive to search. */ +@property(nonatomic, copy, nullable) NSString *driveId; + +/** + * Deprecated - Whether both My Drive and shared drive items should be included + * in results. This parameter will only be effective until June 1, 2020. + * Afterwards shared drive items will be included in the results. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeItemsFromAllDrives; + +/** + * Deprecated use includeItemsFromAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeTeamDriveItems; + +/** + * A comma-separated list of sort keys. Valid keys are 'createdTime', 'folder', + * 'modifiedByMeTime', 'modifiedTime', 'name', 'name_natural', + * 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', and + * 'viewedByMeTime'. Each key sorts ascending by default, but may be reversed + * with the 'desc' modifier. Example usage: ?orderBy=folder,modifiedTime + * desc,name. Please note that there is a current limitation for users with + * approximately one million files in which the requested sort order is + * ignored. + */ +@property(nonatomic, copy, nullable) NSString *orderBy; + +/** + * The maximum number of files to return per page. Partial or empty result + * pages are possible even before the end of the files list has been reached. + * + * @note If not set, the documented server-side default will be 100 (from the + * range 1..1000). + */ +@property(nonatomic, assign) NSInteger pageSize; + +/** + * The token for continuing a previous list request on the next page. This + * should be set to the value of 'nextPageToken' from the previous response. + */ +@property(nonatomic, copy, nullable) NSString *pageToken; + +/** + * A query for filtering the file results. See the "Search for Files" guide for + * supported syntax. + */ +@property(nonatomic, copy, nullable) NSString *q; + +/** + * A comma-separated list of spaces to query within the corpus. Supported + * values are 'drive', 'appDataFolder' and 'photos'. + * + * @note If not set, the documented server-side default will be drive. + */ +@property(nonatomic, copy, nullable) NSString *spaces; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** Deprecated use driveId instead. */ +@property(nonatomic, copy, nullable) NSString *teamDriveId; + +/** + * Fetches a @c GTLRDrive_FileList. + * + * Lists or searches files. + * + * @return GTLRDriveQuery_FilesList + * + * @note Automatic pagination will be done when @c shouldFetchNextPages is + * enabled. See @c shouldFetchNextPages on @c GTLRService for more + * information. + */ ++ (instancetype)query; + +@end + +/** + * Updates a file's metadata and/or content with patch semantics. + * + * Method: drive.files.update + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveScripts + */ +@interface GTLRDriveQuery_FilesUpdate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesUpdateWithObject:fileId:] + +/** A comma-separated list of parent IDs to add. */ +@property(nonatomic, copy, nullable) NSString *addParents; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Whether to set the 'keepForever' field in the new head revision. This is + * only applicable to files with binary content in Google Drive. Only 200 + * revisions for the file can be kept forever. If the limit is reached, try + * deleting pinned revisions. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL keepRevisionForever; + +/** + * A language hint for OCR processing during image import (ISO 639-1 code). + */ +@property(nonatomic, copy, nullable) NSString *ocrLanguage; + +/** A comma-separated list of parent IDs to remove. */ +@property(nonatomic, copy, nullable) NSString *removeParents; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Whether to use the uploaded content as indexable text. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useContentAsIndexableText; + +/** + * Fetches a @c GTLRDrive_File. + * + * Updates a file's metadata and/or content with patch semantics. + * + * @param object The @c GTLRDrive_File to include in the query. + * @param fileId The ID of the file. + * @param uploadParameters The media to include in this query. Maximum size + * 5120GB. Accepted MIME type: * / * + * + * @return GTLRDriveQuery_FilesUpdate + */ ++ (instancetype)queryWithObject:(GTLRDrive_File *)object + fileId:(NSString *)fileId + uploadParameters:(nullable GTLRUploadParameters *)uploadParameters; + +@end + +/** + * Subscribes to changes to a file + * + * Method: drive.files.watch + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_FilesWatch : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForFilesWatchWithObject:fileId:] + +/** + * Whether the user is acknowledging the risk of downloading known malware or + * other abusive files. This is only applicable when alt=media. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL acknowledgeAbuse; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Fetches a @c GTLRDrive_Channel. + * + * Subscribes to changes to a file + * + * @param object The @c GTLRDrive_Channel to include in the query. + * @param fileId The ID of the file. + * + * @return GTLRDriveQuery_FilesWatch + */ ++ (instancetype)queryWithObject:(GTLRDrive_Channel *)object + fileId:(NSString *)fileId; + +/** + * Fetches the requested resource data as a @c GTLRDataObject. + * + * Subscribes to changes to a file + * + * @param object The @c GTLRDrive_Channel to include in the query. + * @param fileId The ID of the file. + * + * @return GTLRDriveQuery_FilesWatch + */ ++ (instancetype)queryForMediaWithObject:(GTLRDrive_Channel *)object + fileId:(NSString *)fileId; + +@end + +/** + * Creates a permission for a file or shared drive. + * + * Method: drive.permissions.create + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_PermissionsCreate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForPermissionsCreateWithObject:fileId:] + +/** A plain text custom message to include in the notification email. */ +@property(nonatomic, copy, nullable) NSString *emailMessage; + +/** The ID of the file or shared drive. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Whether to send a notification email when sharing to users or groups. This + * defaults to true for users and groups, and is not allowed for other + * requests. It must not be disabled for ownership transfers. + */ +@property(nonatomic, assign) BOOL sendNotificationEmail; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Whether to transfer ownership to the specified user and downgrade the + * current owner to a writer. This parameter is required as an acknowledgement + * of the side effect. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL transferOwnership; + +/** + * Issue the request as a domain administrator; if set to true, then the + * requester will be granted access if the file ID parameter refers to a shared + * drive and the requester is an administrator of the domain to which the + * shared drive belongs. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_Permission. + * + * Creates a permission for a file or shared drive. + * + * @param object The @c GTLRDrive_Permission to include in the query. + * @param fileId The ID of the file or shared drive. + * + * @return GTLRDriveQuery_PermissionsCreate + */ ++ (instancetype)queryWithObject:(GTLRDrive_Permission *)object + fileId:(NSString *)fileId; + +@end + +/** + * Deletes a permission. + * + * Method: drive.permissions.delete + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_PermissionsDelete : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForPermissionsDeleteWithfileId:permissionId:] + +/** The ID of the file or shared drive. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** The ID of the permission. */ +@property(nonatomic, copy, nullable) NSString *permissionId; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Issue the request as a domain administrator; if set to true, then the + * requester will be granted access if the file ID parameter refers to a shared + * drive and the requester is an administrator of the domain to which the + * shared drive belongs. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Upon successful completion, the callback's object and error parameters will + * be nil. This query does not fetch an object. + * + * Deletes a permission. + * + * @param fileId The ID of the file or shared drive. + * @param permissionId The ID of the permission. + * + * @return GTLRDriveQuery_PermissionsDelete + */ ++ (instancetype)queryWithFileId:(NSString *)fileId + permissionId:(NSString *)permissionId; + +@end + +/** + * Gets a permission by ID. + * + * Method: drive.permissions.get + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_PermissionsGet : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForPermissionsGetWithfileId:permissionId:] + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** The ID of the permission. */ +@property(nonatomic, copy, nullable) NSString *permissionId; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Issue the request as a domain administrator; if set to true, then the + * requester will be granted access if the file ID parameter refers to a shared + * drive and the requester is an administrator of the domain to which the + * shared drive belongs. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_Permission. + * + * Gets a permission by ID. + * + * @param fileId The ID of the file. + * @param permissionId The ID of the permission. + * + * @return GTLRDriveQuery_PermissionsGet + */ ++ (instancetype)queryWithFileId:(NSString *)fileId + permissionId:(NSString *)permissionId; + +@end + +/** + * Lists a file's or shared drive's permissions. + * + * Method: drive.permissions.list + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_PermissionsList : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForPermissionsListWithfileId:] + +/** The ID of the file or shared drive. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * The maximum number of permissions to return per page. When not set for files + * in a shared drive, at most 100 results will be returned. When not set for + * files that are not in a shared drive, the entire list will be returned. + * + * @note The documented range is 1..100. + */ +@property(nonatomic, assign) NSInteger pageSize; + +/** + * The token for continuing a previous list request on the next page. This + * should be set to the value of 'nextPageToken' from the previous response. + */ +@property(nonatomic, copy, nullable) NSString *pageToken; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Issue the request as a domain administrator; if set to true, then the + * requester will be granted access if the file ID parameter refers to a shared + * drive and the requester is an administrator of the domain to which the + * shared drive belongs. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_PermissionList. + * + * Lists a file's or shared drive's permissions. + * + * @param fileId The ID of the file or shared drive. + * + * @return GTLRDriveQuery_PermissionsList + * + * @note Automatic pagination will be done when @c shouldFetchNextPages is + * enabled. See @c shouldFetchNextPages on @c GTLRService for more + * information. + */ ++ (instancetype)queryWithFileId:(NSString *)fileId; + +@end + +/** + * Updates a permission with patch semantics. + * + * Method: drive.permissions.update + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_PermissionsUpdate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForPermissionsUpdateWithObject:fileId:permissionId:] + +/** The ID of the file or shared drive. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** The ID of the permission. */ +@property(nonatomic, copy, nullable) NSString *permissionId; + +/** + * Whether to remove the expiration date. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL removeExpiration; + +/** + * Deprecated - Whether the requesting application supports both My Drives and + * shared drives. This parameter will only be effective until June 1, 2020. + * Afterwards all applications are assumed to support shared drives. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsAllDrives; + +/** + * Deprecated use supportsAllDrives instead. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL supportsTeamDrives; + +/** + * Whether to transfer ownership to the specified user and downgrade the + * current owner to a writer. This parameter is required as an acknowledgement + * of the side effect. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL transferOwnership; + +/** + * Issue the request as a domain administrator; if set to true, then the + * requester will be granted access if the file ID parameter refers to a shared + * drive and the requester is an administrator of the domain to which the + * shared drive belongs. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_Permission. + * + * Updates a permission with patch semantics. + * + * @param object The @c GTLRDrive_Permission to include in the query. + * @param fileId The ID of the file or shared drive. + * @param permissionId The ID of the permission. + * + * @return GTLRDriveQuery_PermissionsUpdate + */ ++ (instancetype)queryWithObject:(GTLRDrive_Permission *)object + fileId:(NSString *)fileId + permissionId:(NSString *)permissionId; + +@end + +/** + * Creates a new reply to a comment. + * + * Method: drive.replies.create + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_RepliesCreate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForRepliesCreateWithObject:fileId:commentId:] + +/** The ID of the comment. */ +@property(nonatomic, copy, nullable) NSString *commentId; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Fetches a @c GTLRDrive_Reply. + * + * Creates a new reply to a comment. + * + * @param object The @c GTLRDrive_Reply to include in the query. + * @param fileId The ID of the file. + * @param commentId The ID of the comment. + * + * @return GTLRDriveQuery_RepliesCreate + */ ++ (instancetype)queryWithObject:(GTLRDrive_Reply *)object + fileId:(NSString *)fileId + commentId:(NSString *)commentId; + +@end + +/** + * Deletes a reply. + * + * Method: drive.replies.delete + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_RepliesDelete : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForRepliesDeleteWithfileId:commentId:replyId:] + +/** The ID of the comment. */ +@property(nonatomic, copy, nullable) NSString *commentId; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** The ID of the reply. */ +@property(nonatomic, copy, nullable) NSString *replyId; + +/** + * Upon successful completion, the callback's object and error parameters will + * be nil. This query does not fetch an object. + * + * Deletes a reply. + * + * @param fileId The ID of the file. + * @param commentId The ID of the comment. + * @param replyId The ID of the reply. + * + * @return GTLRDriveQuery_RepliesDelete + */ ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId + replyId:(NSString *)replyId; + +@end + +/** + * Gets a reply by ID. + * + * Method: drive.replies.get + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_RepliesGet : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForRepliesGetWithfileId:commentId:replyId:] + +/** The ID of the comment. */ +@property(nonatomic, copy, nullable) NSString *commentId; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Whether to return deleted replies. Deleted replies will not include their + * original content. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeDeleted; + +/** The ID of the reply. */ +@property(nonatomic, copy, nullable) NSString *replyId; + +/** + * Fetches a @c GTLRDrive_Reply. + * + * Gets a reply by ID. + * + * @param fileId The ID of the file. + * @param commentId The ID of the comment. + * @param replyId The ID of the reply. + * + * @return GTLRDriveQuery_RepliesGet + */ ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId + replyId:(NSString *)replyId; + +@end + +/** + * Lists a comment's replies. + * + * Method: drive.replies.list + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_RepliesList : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForRepliesListWithfileId:commentId:] + +/** The ID of the comment. */ +@property(nonatomic, copy, nullable) NSString *commentId; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * Whether to include deleted replies. Deleted replies will not include their + * original content. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL includeDeleted; + +/** + * The maximum number of replies to return per page. + * + * @note If not set, the documented server-side default will be 20 (from the + * range 1..100). + */ +@property(nonatomic, assign) NSInteger pageSize; + +/** + * The token for continuing a previous list request on the next page. This + * should be set to the value of 'nextPageToken' from the previous response. + */ +@property(nonatomic, copy, nullable) NSString *pageToken; + +/** + * Fetches a @c GTLRDrive_ReplyList. + * + * Lists a comment's replies. + * + * @param fileId The ID of the file. + * @param commentId The ID of the comment. + * + * @return GTLRDriveQuery_RepliesList + * + * @note Automatic pagination will be done when @c shouldFetchNextPages is + * enabled. See @c shouldFetchNextPages on @c GTLRService for more + * information. + */ ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId; + +@end + +/** + * Updates a reply with patch semantics. + * + * Method: drive.replies.update + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_RepliesUpdate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForRepliesUpdateWithObject:fileId:commentId:replyId:] + +/** The ID of the comment. */ +@property(nonatomic, copy, nullable) NSString *commentId; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** The ID of the reply. */ +@property(nonatomic, copy, nullable) NSString *replyId; + +/** + * Fetches a @c GTLRDrive_Reply. + * + * Updates a reply with patch semantics. + * + * @param object The @c GTLRDrive_Reply to include in the query. + * @param fileId The ID of the file. + * @param commentId The ID of the comment. + * @param replyId The ID of the reply. + * + * @return GTLRDriveQuery_RepliesUpdate + */ ++ (instancetype)queryWithObject:(GTLRDrive_Reply *)object + fileId:(NSString *)fileId + commentId:(NSString *)commentId + replyId:(NSString *)replyId; + +@end + +/** + * Permanently deletes a file version. You can only delete revisions for files + * with binary content in Google Drive, like images or videos. Revisions for + * other files, like Google Docs or Sheets, and the last remaining file version + * can't be deleted. + * + * Method: drive.revisions.delete + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_RevisionsDelete : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForRevisionsDeleteWithfileId:revisionId:] + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** The ID of the revision. */ +@property(nonatomic, copy, nullable) NSString *revisionId; + +/** + * Upon successful completion, the callback's object and error parameters will + * be nil. This query does not fetch an object. + * + * Permanently deletes a file version. You can only delete revisions for files + * with binary content in Google Drive, like images or videos. Revisions for + * other files, like Google Docs or Sheets, and the last remaining file version + * can't be deleted. + * + * @param fileId The ID of the file. + * @param revisionId The ID of the revision. + * + * @return GTLRDriveQuery_RevisionsDelete + */ ++ (instancetype)queryWithFileId:(NSString *)fileId + revisionId:(NSString *)revisionId; + +@end + +/** + * Gets a revision's metadata or content by ID. + * + * Method: drive.revisions.get + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_RevisionsGet : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForRevisionsGetWithfileId:revisionId:] + +/** + * Whether the user is acknowledging the risk of downloading known malware or + * other abusive files. This is only applicable when alt=media. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL acknowledgeAbuse; + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** The ID of the revision. */ +@property(nonatomic, copy, nullable) NSString *revisionId; + +/** + * Fetches a @c GTLRDrive_Revision. + * + * Gets a revision's metadata or content by ID. + * + * @param fileId The ID of the file. + * @param revisionId The ID of the revision. + * + * @return GTLRDriveQuery_RevisionsGet + */ ++ (instancetype)queryWithFileId:(NSString *)fileId + revisionId:(NSString *)revisionId; + +/** + * Fetches the requested resource data as a @c GTLRDataObject. + * + * Gets a revision's metadata or content by ID. + * + * @param fileId The ID of the file. + * @param revisionId The ID of the revision. + * + * @return GTLRDriveQuery_RevisionsGet + */ ++ (instancetype)queryForMediaWithFileId:(NSString *)fileId + revisionId:(NSString *)revisionId; + +@end + +/** + * Lists a file's revisions. + * + * Method: drive.revisions.list + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + * @c kGTLRAuthScopeDriveMetadata + * @c kGTLRAuthScopeDriveMetadataReadonly + * @c kGTLRAuthScopeDrivePhotosReadonly + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_RevisionsList : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForRevisionsListWithfileId:] + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** + * The maximum number of revisions to return per page. + * + * @note If not set, the documented server-side default will be 200 (from the + * range 1..1000). + */ +@property(nonatomic, assign) NSInteger pageSize; + +/** + * The token for continuing a previous list request on the next page. This + * should be set to the value of 'nextPageToken' from the previous response. + */ +@property(nonatomic, copy, nullable) NSString *pageToken; + +/** + * Fetches a @c GTLRDrive_RevisionList. + * + * Lists a file's revisions. + * + * @param fileId The ID of the file. + * + * @return GTLRDriveQuery_RevisionsList + * + * @note Automatic pagination will be done when @c shouldFetchNextPages is + * enabled. See @c shouldFetchNextPages on @c GTLRService for more + * information. + */ ++ (instancetype)queryWithFileId:(NSString *)fileId; + +@end + +/** + * Updates a revision with patch semantics. + * + * Method: drive.revisions.update + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveAppdata + * @c kGTLRAuthScopeDriveFile + */ +@interface GTLRDriveQuery_RevisionsUpdate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForRevisionsUpdateWithObject:fileId:revisionId:] + +/** The ID of the file. */ +@property(nonatomic, copy, nullable) NSString *fileId; + +/** The ID of the revision. */ +@property(nonatomic, copy, nullable) NSString *revisionId; + +/** + * Fetches a @c GTLRDrive_Revision. + * + * Updates a revision with patch semantics. + * + * @param object The @c GTLRDrive_Revision to include in the query. + * @param fileId The ID of the file. + * @param revisionId The ID of the revision. + * + * @return GTLRDriveQuery_RevisionsUpdate + */ ++ (instancetype)queryWithObject:(GTLRDrive_Revision *)object + fileId:(NSString *)fileId + revisionId:(NSString *)revisionId; + +@end + +/** + * Deprecated use drives.create instead. + * + * Method: drive.teamdrives.create + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + */ +@interface GTLRDriveQuery_TeamdrivesCreate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForTeamdrivesCreateWithObject:requestId:] + +/** + * An ID, such as a random UUID, which uniquely identifies this user's request + * for idempotent creation of a Team Drive. A repeated request by the same user + * and with the same request ID will avoid creating duplicates by attempting to + * create the same Team Drive. If the Team Drive already exists a 409 error + * will be returned. + */ +@property(nonatomic, copy, nullable) NSString *requestId; + +/** + * Fetches a @c GTLRDrive_TeamDrive. + * + * Deprecated use drives.create instead. + * + * @param object The @c GTLRDrive_TeamDrive to include in the query. + * @param requestId An ID, such as a random UUID, which uniquely identifies + * this user's request for idempotent creation of a Team Drive. A repeated + * request by the same user and with the same request ID will avoid creating + * duplicates by attempting to create the same Team Drive. If the Team Drive + * already exists a 409 error will be returned. + * + * @return GTLRDriveQuery_TeamdrivesCreate + */ ++ (instancetype)queryWithObject:(GTLRDrive_TeamDrive *)object + requestId:(NSString *)requestId; + +@end + +/** + * Deprecated use drives.delete instead. + * + * Method: drive.teamdrives.delete + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + */ +@interface GTLRDriveQuery_TeamdrivesDelete : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForTeamdrivesDeleteWithteamDriveId:] + +/** The ID of the Team Drive */ +@property(nonatomic, copy, nullable) NSString *teamDriveId; + +/** + * Upon successful completion, the callback's object and error parameters will + * be nil. This query does not fetch an object. + * + * Deprecated use drives.delete instead. + * + * @param teamDriveId The ID of the Team Drive + * + * @return GTLRDriveQuery_TeamdrivesDelete + */ ++ (instancetype)queryWithTeamDriveId:(NSString *)teamDriveId; + +@end + +/** + * Deprecated use drives.get instead. + * + * Method: drive.teamdrives.get + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_TeamdrivesGet : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForTeamdrivesGetWithteamDriveId:] + +/** The ID of the Team Drive */ +@property(nonatomic, copy, nullable) NSString *teamDriveId; + +/** + * Issue the request as a domain administrator; if set to true, then the + * requester will be granted access if they are an administrator of the domain + * to which the Team Drive belongs. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_TeamDrive. + * + * Deprecated use drives.get instead. + * + * @param teamDriveId The ID of the Team Drive + * + * @return GTLRDriveQuery_TeamdrivesGet + */ ++ (instancetype)queryWithTeamDriveId:(NSString *)teamDriveId; + +@end + +/** + * Deprecated use drives.list instead. + * + * Method: drive.teamdrives.list + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + * @c kGTLRAuthScopeDriveReadonly + */ +@interface GTLRDriveQuery_TeamdrivesList : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForTeamdrivesList] + +/** + * Maximum number of Team Drives to return. + * + * @note If not set, the documented server-side default will be 10 (from the + * range 1..100). + */ +@property(nonatomic, assign) NSInteger pageSize; + +/** Page token for Team Drives. */ +@property(nonatomic, copy, nullable) NSString *pageToken; + +/** Query string for searching Team Drives. */ +@property(nonatomic, copy, nullable) NSString *q; + +/** + * Issue the request as a domain administrator; if set to true, then all Team + * Drives of the domain in which the requester is an administrator are + * returned. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_TeamDriveList. + * + * Deprecated use drives.list instead. + * + * @return GTLRDriveQuery_TeamdrivesList + * + * @note Automatic pagination will be done when @c shouldFetchNextPages is + * enabled. See @c shouldFetchNextPages on @c GTLRService for more + * information. + */ ++ (instancetype)query; + +@end + +/** + * Deprecated use drives.update instead + * + * Method: drive.teamdrives.update + * + * Authorization scope(s): + * @c kGTLRAuthScopeDrive + */ +@interface GTLRDriveQuery_TeamdrivesUpdate : GTLRDriveQuery +// Previous library name was +// +[GTLQueryDrive queryForTeamdrivesUpdateWithObject:teamDriveId:] + +/** The ID of the Team Drive */ +@property(nonatomic, copy, nullable) NSString *teamDriveId; + +/** + * Issue the request as a domain administrator; if set to true, then the + * requester will be granted access if they are an administrator of the domain + * to which the Team Drive belongs. + * + * @note If not set, the documented server-side default will be false. + */ +@property(nonatomic, assign) BOOL useDomainAdminAccess; + +/** + * Fetches a @c GTLRDrive_TeamDrive. + * + * Deprecated use drives.update instead + * + * @param object The @c GTLRDrive_TeamDrive to include in the query. + * @param teamDriveId The ID of the Team Drive + * + * @return GTLRDriveQuery_TeamdrivesUpdate + */ ++ (instancetype)queryWithObject:(GTLRDrive_TeamDrive *)object + teamDriveId:(NSString *)teamDriveId; + +@end + +NS_ASSUME_NONNULL_END + +#pragma clang diagnostic pop diff --git a/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.m b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.m new file mode 100644 index 0000000..eb180c8 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.m @@ -0,0 +1,1092 @@ +// NOTE: This file was generated by the ServiceGenerator. + +// ---------------------------------------------------------------------------- +// API: +// Drive API (drive/v3) +// Description: +// Manages files in Drive including uploading, downloading, searching, +// detecting changes, and updating sharing permissions. +// Documentation: +// https://developers.google.com/drive/ + +#import "GTLRDriveQuery.h" + +#import "GTLRDriveObjects.h" + +// ---------------------------------------------------------------------------- +// Constants + +// corpus +NSString * const kGTLRDriveCorpusDomain = @"domain"; +NSString * const kGTLRDriveCorpusUser = @"user"; + +// ---------------------------------------------------------------------------- +// Query Classes +// + +@implementation GTLRDriveQuery + +@dynamic fields; + +@end + +@implementation GTLRDriveQuery_AboutGet + ++ (instancetype)query { + NSString *pathURITemplate = @"about"; + GTLRDriveQuery_AboutGet *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:nil]; + query.expectedObjectClass = [GTLRDrive_About class]; + query.loggingName = @"drive.about.get"; + return query; +} + +@end + +@implementation GTLRDriveQuery_ChangesGetStartPageToken + +@dynamic driveId, supportsAllDrives, supportsTeamDrives, teamDriveId; + ++ (instancetype)query { + NSString *pathURITemplate = @"changes/startPageToken"; + GTLRDriveQuery_ChangesGetStartPageToken *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:nil]; + query.expectedObjectClass = [GTLRDrive_StartPageToken class]; + query.loggingName = @"drive.changes.getStartPageToken"; + return query; +} + +@end + +@implementation GTLRDriveQuery_ChangesList + +@dynamic driveId, includeCorpusRemovals, includeItemsFromAllDrives, + includeRemoved, includeTeamDriveItems, pageSize, pageToken, + restrictToMyDrive, spaces, supportsAllDrives, supportsTeamDrives, + teamDriveId; + ++ (instancetype)queryWithPageToken:(NSString *)pageToken { + NSString *pathURITemplate = @"changes"; + GTLRDriveQuery_ChangesList *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:nil]; + query.pageToken = pageToken; + query.expectedObjectClass = [GTLRDrive_ChangeList class]; + query.loggingName = @"drive.changes.list"; + return query; +} + +@end + +@implementation GTLRDriveQuery_ChangesWatch + +@dynamic driveId, includeCorpusRemovals, includeItemsFromAllDrives, + includeRemoved, includeTeamDriveItems, pageSize, pageToken, + restrictToMyDrive, spaces, supportsAllDrives, supportsTeamDrives, + teamDriveId; + ++ (instancetype)queryWithObject:(GTLRDrive_Channel *)object + pageToken:(NSString *)pageToken { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSString *pathURITemplate = @"changes/watch"; + GTLRDriveQuery_ChangesWatch *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:nil]; + query.bodyObject = object; + query.pageToken = pageToken; + query.expectedObjectClass = [GTLRDrive_Channel class]; + query.loggingName = @"drive.changes.watch"; + return query; +} + +@end + +@implementation GTLRDriveQuery_ChannelsStop + ++ (instancetype)queryWithObject:(GTLRDrive_Channel *)object { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSString *pathURITemplate = @"channels/stop"; + GTLRDriveQuery_ChannelsStop *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:nil]; + query.bodyObject = object; + query.loggingName = @"drive.channels.stop"; + return query; +} + +@end + +@implementation GTLRDriveQuery_CommentsCreate + +@dynamic fileId; + ++ (instancetype)queryWithObject:(GTLRDrive_Comment *)object + fileId:(NSString *)fileId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}/comments"; + GTLRDriveQuery_CommentsCreate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.expectedObjectClass = [GTLRDrive_Comment class]; + query.loggingName = @"drive.comments.create"; + return query; +} + +@end + +@implementation GTLRDriveQuery_CommentsDelete + +@dynamic commentId, fileId; + ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId { + NSArray *pathParams = @[ + @"commentId", @"fileId" + ]; + NSString *pathURITemplate = @"files/{fileId}/comments/{commentId}"; + GTLRDriveQuery_CommentsDelete *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"DELETE" + pathParameterNames:pathParams]; + query.fileId = fileId; + query.commentId = commentId; + query.loggingName = @"drive.comments.delete"; + return query; +} + +@end + +@implementation GTLRDriveQuery_CommentsGet + +@dynamic commentId, fileId, includeDeleted; + ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId { + NSArray *pathParams = @[ + @"commentId", @"fileId" + ]; + NSString *pathURITemplate = @"files/{fileId}/comments/{commentId}"; + GTLRDriveQuery_CommentsGet *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.commentId = commentId; + query.expectedObjectClass = [GTLRDrive_Comment class]; + query.loggingName = @"drive.comments.get"; + return query; +} + +@end + +@implementation GTLRDriveQuery_CommentsList + +@dynamic fileId, includeDeleted, pageSize, pageToken, startModifiedTime; + ++ (instancetype)queryWithFileId:(NSString *)fileId { + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}/comments"; + GTLRDriveQuery_CommentsList *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.expectedObjectClass = [GTLRDrive_CommentList class]; + query.loggingName = @"drive.comments.list"; + return query; +} + +@end + +@implementation GTLRDriveQuery_CommentsUpdate + +@dynamic commentId, fileId; + ++ (instancetype)queryWithObject:(GTLRDrive_Comment *)object + fileId:(NSString *)fileId + commentId:(NSString *)commentId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ + @"commentId", @"fileId" + ]; + NSString *pathURITemplate = @"files/{fileId}/comments/{commentId}"; + GTLRDriveQuery_CommentsUpdate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"PATCH" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.commentId = commentId; + query.expectedObjectClass = [GTLRDrive_Comment class]; + query.loggingName = @"drive.comments.update"; + return query; +} + +@end + +@implementation GTLRDriveQuery_DrivesCreate + +@dynamic requestId; + ++ (instancetype)queryWithObject:(GTLRDrive_Drive *)object + requestId:(NSString *)requestId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSString *pathURITemplate = @"drives"; + GTLRDriveQuery_DrivesCreate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:nil]; + query.bodyObject = object; + query.requestId = requestId; + query.expectedObjectClass = [GTLRDrive_Drive class]; + query.loggingName = @"drive.drives.create"; + return query; +} + +@end + +@implementation GTLRDriveQuery_DrivesDelete + +@dynamic driveId; + ++ (instancetype)queryWithDriveId:(NSString *)driveId { + NSArray *pathParams = @[ @"driveId" ]; + NSString *pathURITemplate = @"drives/{driveId}"; + GTLRDriveQuery_DrivesDelete *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"DELETE" + pathParameterNames:pathParams]; + query.driveId = driveId; + query.loggingName = @"drive.drives.delete"; + return query; +} + +@end + +@implementation GTLRDriveQuery_DrivesGet + +@dynamic driveId, useDomainAdminAccess; + ++ (instancetype)queryWithDriveId:(NSString *)driveId { + NSArray *pathParams = @[ @"driveId" ]; + NSString *pathURITemplate = @"drives/{driveId}"; + GTLRDriveQuery_DrivesGet *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.driveId = driveId; + query.expectedObjectClass = [GTLRDrive_Drive class]; + query.loggingName = @"drive.drives.get"; + return query; +} + +@end + +@implementation GTLRDriveQuery_DrivesHide + +@dynamic driveId; + ++ (instancetype)queryWithDriveId:(NSString *)driveId { + NSArray *pathParams = @[ @"driveId" ]; + NSString *pathURITemplate = @"drives/{driveId}/hide"; + GTLRDriveQuery_DrivesHide *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:pathParams]; + query.driveId = driveId; + query.expectedObjectClass = [GTLRDrive_Drive class]; + query.loggingName = @"drive.drives.hide"; + return query; +} + +@end + +@implementation GTLRDriveQuery_DrivesList + +@dynamic pageSize, pageToken, q, useDomainAdminAccess; + ++ (instancetype)query { + NSString *pathURITemplate = @"drives"; + GTLRDriveQuery_DrivesList *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:nil]; + query.expectedObjectClass = [GTLRDrive_DriveList class]; + query.loggingName = @"drive.drives.list"; + return query; +} + +@end + +@implementation GTLRDriveQuery_DrivesUnhide + +@dynamic driveId; + ++ (instancetype)queryWithDriveId:(NSString *)driveId { + NSArray *pathParams = @[ @"driveId" ]; + NSString *pathURITemplate = @"drives/{driveId}/unhide"; + GTLRDriveQuery_DrivesUnhide *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:pathParams]; + query.driveId = driveId; + query.expectedObjectClass = [GTLRDrive_Drive class]; + query.loggingName = @"drive.drives.unhide"; + return query; +} + +@end + +@implementation GTLRDriveQuery_DrivesUpdate + +@dynamic driveId, useDomainAdminAccess; + ++ (instancetype)queryWithObject:(GTLRDrive_Drive *)object + driveId:(NSString *)driveId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ @"driveId" ]; + NSString *pathURITemplate = @"drives/{driveId}"; + GTLRDriveQuery_DrivesUpdate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"PATCH" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.driveId = driveId; + query.expectedObjectClass = [GTLRDrive_Drive class]; + query.loggingName = @"drive.drives.update"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesCopy + +@dynamic fileId, ignoreDefaultVisibility, keepRevisionForever, ocrLanguage, + supportsAllDrives, supportsTeamDrives; + ++ (instancetype)queryWithObject:(GTLRDrive_File *)object + fileId:(NSString *)fileId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}/copy"; + GTLRDriveQuery_FilesCopy *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.expectedObjectClass = [GTLRDrive_File class]; + query.loggingName = @"drive.files.copy"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesCreate + +@dynamic ignoreDefaultVisibility, keepRevisionForever, ocrLanguage, + supportsAllDrives, supportsTeamDrives, useContentAsIndexableText; + ++ (instancetype)queryWithObject:(GTLRDrive_File *)object + uploadParameters:(GTLRUploadParameters *)uploadParameters { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSString *pathURITemplate = @"files"; + GTLRDriveQuery_FilesCreate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:nil]; + query.bodyObject = object; + query.uploadParameters = uploadParameters; + query.expectedObjectClass = [GTLRDrive_File class]; + query.loggingName = @"drive.files.create"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesDelete + +@dynamic fileId, supportsAllDrives, supportsTeamDrives; + ++ (instancetype)queryWithFileId:(NSString *)fileId { + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}"; + GTLRDriveQuery_FilesDelete *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"DELETE" + pathParameterNames:pathParams]; + query.fileId = fileId; + query.loggingName = @"drive.files.delete"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesEmptyTrash + ++ (instancetype)query { + NSString *pathURITemplate = @"files/trash"; + GTLRDriveQuery_FilesEmptyTrash *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"DELETE" + pathParameterNames:nil]; + query.loggingName = @"drive.files.emptyTrash"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesExport + +@dynamic fileId, mimeType; + ++ (instancetype)queryWithFileId:(NSString *)fileId + mimeType:(NSString *)mimeType { + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}/export"; + GTLRDriveQuery_FilesExport *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.mimeType = mimeType; + query.loggingName = @"drive.files.export"; + return query; +} + ++ (instancetype)queryForMediaWithFileId:(NSString *)fileId + mimeType:(NSString *)mimeType { + GTLRDriveQuery_FilesExport *query = + [self queryWithFileId:fileId + mimeType:mimeType]; + query.downloadAsDataObjectType = @"media"; + query.loggingName = @"Download drive.files.export"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesGenerateIds + +@dynamic count, space; + ++ (instancetype)query { + NSString *pathURITemplate = @"files/generateIds"; + GTLRDriveQuery_FilesGenerateIds *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:nil]; + query.expectedObjectClass = [GTLRDrive_GeneratedIds class]; + query.loggingName = @"drive.files.generateIds"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesGet + +@dynamic acknowledgeAbuse, fileId, supportsAllDrives, supportsTeamDrives; + ++ (instancetype)queryWithFileId:(NSString *)fileId { + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}"; + GTLRDriveQuery_FilesGet *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.expectedObjectClass = [GTLRDrive_File class]; + query.loggingName = @"drive.files.get"; + return query; +} + ++ (instancetype)queryForMediaWithFileId:(NSString *)fileId { + GTLRDriveQuery_FilesGet *query = + [self queryWithFileId:fileId]; + query.downloadAsDataObjectType = @"media"; + query.useMediaDownloadService = YES; + query.loggingName = @"Download drive.files.get"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesList + +@dynamic corpora, corpus, driveId, includeItemsFromAllDrives, + includeTeamDriveItems, orderBy, pageSize, pageToken, q, spaces, + supportsAllDrives, supportsTeamDrives, teamDriveId; + ++ (instancetype)query { + NSString *pathURITemplate = @"files"; + GTLRDriveQuery_FilesList *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:nil]; + query.expectedObjectClass = [GTLRDrive_FileList class]; + query.loggingName = @"drive.files.list"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesUpdate + +@dynamic addParents, fileId, keepRevisionForever, ocrLanguage, removeParents, + supportsAllDrives, supportsTeamDrives, useContentAsIndexableText; + ++ (instancetype)queryWithObject:(GTLRDrive_File *)object + fileId:(NSString *)fileId + uploadParameters:(GTLRUploadParameters *)uploadParameters { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}"; + GTLRDriveQuery_FilesUpdate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"PATCH" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.uploadParameters = uploadParameters; + query.expectedObjectClass = [GTLRDrive_File class]; + query.loggingName = @"drive.files.update"; + return query; +} + +@end + +@implementation GTLRDriveQuery_FilesWatch + +@dynamic acknowledgeAbuse, fileId, supportsAllDrives, supportsTeamDrives; + ++ (instancetype)queryWithObject:(GTLRDrive_Channel *)object + fileId:(NSString *)fileId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}/watch"; + GTLRDriveQuery_FilesWatch *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.expectedObjectClass = [GTLRDrive_Channel class]; + query.loggingName = @"drive.files.watch"; + return query; +} + ++ (instancetype)queryForMediaWithObject:(GTLRDrive_Channel *)object + fileId:(NSString *)fileId { + GTLRDriveQuery_FilesWatch *query = + [self queryWithObject:object + fileId:fileId]; + query.downloadAsDataObjectType = @"media"; + query.useMediaDownloadService = YES; + query.loggingName = @"Download drive.files.watch"; + return query; +} + +@end + +@implementation GTLRDriveQuery_PermissionsCreate + +@dynamic emailMessage, fileId, sendNotificationEmail, supportsAllDrives, + supportsTeamDrives, transferOwnership, useDomainAdminAccess; + ++ (instancetype)queryWithObject:(GTLRDrive_Permission *)object + fileId:(NSString *)fileId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}/permissions"; + GTLRDriveQuery_PermissionsCreate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.expectedObjectClass = [GTLRDrive_Permission class]; + query.loggingName = @"drive.permissions.create"; + return query; +} + +@end + +@implementation GTLRDriveQuery_PermissionsDelete + +@dynamic fileId, permissionId, supportsAllDrives, supportsTeamDrives, + useDomainAdminAccess; + ++ (instancetype)queryWithFileId:(NSString *)fileId + permissionId:(NSString *)permissionId { + NSArray *pathParams = @[ + @"fileId", @"permissionId" + ]; + NSString *pathURITemplate = @"files/{fileId}/permissions/{permissionId}"; + GTLRDriveQuery_PermissionsDelete *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"DELETE" + pathParameterNames:pathParams]; + query.fileId = fileId; + query.permissionId = permissionId; + query.loggingName = @"drive.permissions.delete"; + return query; +} + +@end + +@implementation GTLRDriveQuery_PermissionsGet + +@dynamic fileId, permissionId, supportsAllDrives, supportsTeamDrives, + useDomainAdminAccess; + ++ (instancetype)queryWithFileId:(NSString *)fileId + permissionId:(NSString *)permissionId { + NSArray *pathParams = @[ + @"fileId", @"permissionId" + ]; + NSString *pathURITemplate = @"files/{fileId}/permissions/{permissionId}"; + GTLRDriveQuery_PermissionsGet *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.permissionId = permissionId; + query.expectedObjectClass = [GTLRDrive_Permission class]; + query.loggingName = @"drive.permissions.get"; + return query; +} + +@end + +@implementation GTLRDriveQuery_PermissionsList + +@dynamic fileId, pageSize, pageToken, supportsAllDrives, supportsTeamDrives, + useDomainAdminAccess; + ++ (instancetype)queryWithFileId:(NSString *)fileId { + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}/permissions"; + GTLRDriveQuery_PermissionsList *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.expectedObjectClass = [GTLRDrive_PermissionList class]; + query.loggingName = @"drive.permissions.list"; + return query; +} + +@end + +@implementation GTLRDriveQuery_PermissionsUpdate + +@dynamic fileId, permissionId, removeExpiration, supportsAllDrives, + supportsTeamDrives, transferOwnership, useDomainAdminAccess; + ++ (instancetype)queryWithObject:(GTLRDrive_Permission *)object + fileId:(NSString *)fileId + permissionId:(NSString *)permissionId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ + @"fileId", @"permissionId" + ]; + NSString *pathURITemplate = @"files/{fileId}/permissions/{permissionId}"; + GTLRDriveQuery_PermissionsUpdate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"PATCH" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.permissionId = permissionId; + query.expectedObjectClass = [GTLRDrive_Permission class]; + query.loggingName = @"drive.permissions.update"; + return query; +} + +@end + +@implementation GTLRDriveQuery_RepliesCreate + +@dynamic commentId, fileId; + ++ (instancetype)queryWithObject:(GTLRDrive_Reply *)object + fileId:(NSString *)fileId + commentId:(NSString *)commentId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ + @"commentId", @"fileId" + ]; + NSString *pathURITemplate = @"files/{fileId}/comments/{commentId}/replies"; + GTLRDriveQuery_RepliesCreate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.commentId = commentId; + query.expectedObjectClass = [GTLRDrive_Reply class]; + query.loggingName = @"drive.replies.create"; + return query; +} + +@end + +@implementation GTLRDriveQuery_RepliesDelete + +@dynamic commentId, fileId, replyId; + ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId + replyId:(NSString *)replyId { + NSArray *pathParams = @[ + @"commentId", @"fileId", @"replyId" + ]; + NSString *pathURITemplate = @"files/{fileId}/comments/{commentId}/replies/{replyId}"; + GTLRDriveQuery_RepliesDelete *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"DELETE" + pathParameterNames:pathParams]; + query.fileId = fileId; + query.commentId = commentId; + query.replyId = replyId; + query.loggingName = @"drive.replies.delete"; + return query; +} + +@end + +@implementation GTLRDriveQuery_RepliesGet + +@dynamic commentId, fileId, includeDeleted, replyId; + ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId + replyId:(NSString *)replyId { + NSArray *pathParams = @[ + @"commentId", @"fileId", @"replyId" + ]; + NSString *pathURITemplate = @"files/{fileId}/comments/{commentId}/replies/{replyId}"; + GTLRDriveQuery_RepliesGet *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.commentId = commentId; + query.replyId = replyId; + query.expectedObjectClass = [GTLRDrive_Reply class]; + query.loggingName = @"drive.replies.get"; + return query; +} + +@end + +@implementation GTLRDriveQuery_RepliesList + +@dynamic commentId, fileId, includeDeleted, pageSize, pageToken; + ++ (instancetype)queryWithFileId:(NSString *)fileId + commentId:(NSString *)commentId { + NSArray *pathParams = @[ + @"commentId", @"fileId" + ]; + NSString *pathURITemplate = @"files/{fileId}/comments/{commentId}/replies"; + GTLRDriveQuery_RepliesList *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.commentId = commentId; + query.expectedObjectClass = [GTLRDrive_ReplyList class]; + query.loggingName = @"drive.replies.list"; + return query; +} + +@end + +@implementation GTLRDriveQuery_RepliesUpdate + +@dynamic commentId, fileId, replyId; + ++ (instancetype)queryWithObject:(GTLRDrive_Reply *)object + fileId:(NSString *)fileId + commentId:(NSString *)commentId + replyId:(NSString *)replyId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ + @"commentId", @"fileId", @"replyId" + ]; + NSString *pathURITemplate = @"files/{fileId}/comments/{commentId}/replies/{replyId}"; + GTLRDriveQuery_RepliesUpdate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"PATCH" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.commentId = commentId; + query.replyId = replyId; + query.expectedObjectClass = [GTLRDrive_Reply class]; + query.loggingName = @"drive.replies.update"; + return query; +} + +@end + +@implementation GTLRDriveQuery_RevisionsDelete + +@dynamic fileId, revisionId; + ++ (instancetype)queryWithFileId:(NSString *)fileId + revisionId:(NSString *)revisionId { + NSArray *pathParams = @[ + @"fileId", @"revisionId" + ]; + NSString *pathURITemplate = @"files/{fileId}/revisions/{revisionId}"; + GTLRDriveQuery_RevisionsDelete *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"DELETE" + pathParameterNames:pathParams]; + query.fileId = fileId; + query.revisionId = revisionId; + query.loggingName = @"drive.revisions.delete"; + return query; +} + +@end + +@implementation GTLRDriveQuery_RevisionsGet + +@dynamic acknowledgeAbuse, fileId, revisionId; + ++ (instancetype)queryWithFileId:(NSString *)fileId + revisionId:(NSString *)revisionId { + NSArray *pathParams = @[ + @"fileId", @"revisionId" + ]; + NSString *pathURITemplate = @"files/{fileId}/revisions/{revisionId}"; + GTLRDriveQuery_RevisionsGet *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.revisionId = revisionId; + query.expectedObjectClass = [GTLRDrive_Revision class]; + query.loggingName = @"drive.revisions.get"; + return query; +} + ++ (instancetype)queryForMediaWithFileId:(NSString *)fileId + revisionId:(NSString *)revisionId { + GTLRDriveQuery_RevisionsGet *query = + [self queryWithFileId:fileId + revisionId:revisionId]; + query.downloadAsDataObjectType = @"media"; + query.useMediaDownloadService = YES; + query.loggingName = @"Download drive.revisions.get"; + return query; +} + +@end + +@implementation GTLRDriveQuery_RevisionsList + +@dynamic fileId, pageSize, pageToken; + ++ (instancetype)queryWithFileId:(NSString *)fileId { + NSArray *pathParams = @[ @"fileId" ]; + NSString *pathURITemplate = @"files/{fileId}/revisions"; + GTLRDriveQuery_RevisionsList *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.fileId = fileId; + query.expectedObjectClass = [GTLRDrive_RevisionList class]; + query.loggingName = @"drive.revisions.list"; + return query; +} + +@end + +@implementation GTLRDriveQuery_RevisionsUpdate + +@dynamic fileId, revisionId; + ++ (instancetype)queryWithObject:(GTLRDrive_Revision *)object + fileId:(NSString *)fileId + revisionId:(NSString *)revisionId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ + @"fileId", @"revisionId" + ]; + NSString *pathURITemplate = @"files/{fileId}/revisions/{revisionId}"; + GTLRDriveQuery_RevisionsUpdate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"PATCH" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.fileId = fileId; + query.revisionId = revisionId; + query.expectedObjectClass = [GTLRDrive_Revision class]; + query.loggingName = @"drive.revisions.update"; + return query; +} + +@end + +@implementation GTLRDriveQuery_TeamdrivesCreate + +@dynamic requestId; + ++ (instancetype)queryWithObject:(GTLRDrive_TeamDrive *)object + requestId:(NSString *)requestId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSString *pathURITemplate = @"teamdrives"; + GTLRDriveQuery_TeamdrivesCreate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"POST" + pathParameterNames:nil]; + query.bodyObject = object; + query.requestId = requestId; + query.expectedObjectClass = [GTLRDrive_TeamDrive class]; + query.loggingName = @"drive.teamdrives.create"; + return query; +} + +@end + +@implementation GTLRDriveQuery_TeamdrivesDelete + +@dynamic teamDriveId; + ++ (instancetype)queryWithTeamDriveId:(NSString *)teamDriveId { + NSArray *pathParams = @[ @"teamDriveId" ]; + NSString *pathURITemplate = @"teamdrives/{teamDriveId}"; + GTLRDriveQuery_TeamdrivesDelete *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"DELETE" + pathParameterNames:pathParams]; + query.teamDriveId = teamDriveId; + query.loggingName = @"drive.teamdrives.delete"; + return query; +} + +@end + +@implementation GTLRDriveQuery_TeamdrivesGet + +@dynamic teamDriveId, useDomainAdminAccess; + ++ (instancetype)queryWithTeamDriveId:(NSString *)teamDriveId { + NSArray *pathParams = @[ @"teamDriveId" ]; + NSString *pathURITemplate = @"teamdrives/{teamDriveId}"; + GTLRDriveQuery_TeamdrivesGet *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:pathParams]; + query.teamDriveId = teamDriveId; + query.expectedObjectClass = [GTLRDrive_TeamDrive class]; + query.loggingName = @"drive.teamdrives.get"; + return query; +} + +@end + +@implementation GTLRDriveQuery_TeamdrivesList + +@dynamic pageSize, pageToken, q, useDomainAdminAccess; + ++ (instancetype)query { + NSString *pathURITemplate = @"teamdrives"; + GTLRDriveQuery_TeamdrivesList *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:nil + pathParameterNames:nil]; + query.expectedObjectClass = [GTLRDrive_TeamDriveList class]; + query.loggingName = @"drive.teamdrives.list"; + return query; +} + +@end + +@implementation GTLRDriveQuery_TeamdrivesUpdate + +@dynamic teamDriveId, useDomainAdminAccess; + ++ (instancetype)queryWithObject:(GTLRDrive_TeamDrive *)object + teamDriveId:(NSString *)teamDriveId { + if (object == nil) { + GTLR_DEBUG_ASSERT(object != nil, @"Got a nil object"); + return nil; + } + NSArray *pathParams = @[ @"teamDriveId" ]; + NSString *pathURITemplate = @"teamdrives/{teamDriveId}"; + GTLRDriveQuery_TeamdrivesUpdate *query = + [[self alloc] initWithPathURITemplate:pathURITemplate + HTTPMethod:@"PATCH" + pathParameterNames:pathParams]; + query.bodyObject = object; + query.teamDriveId = teamDriveId; + query.expectedObjectClass = [GTLRDrive_TeamDrive class]; + query.loggingName = @"drive.teamdrives.update"; + return query; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.h b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.h new file mode 100644 index 0000000..82e9439 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.h @@ -0,0 +1,124 @@ +// NOTE: This file was generated by the ServiceGenerator. + +// ---------------------------------------------------------------------------- +// API: +// Drive API (drive/v3) +// Description: +// Manages files in Drive including uploading, downloading, searching, +// detecting changes, and updating sharing permissions. +// Documentation: +// https://developers.google.com/drive/ + +#if GTLR_BUILT_AS_FRAMEWORK + #import "GTLR/GTLRService.h" +#else + #import "GTLRService.h" +#endif + +#if GTLR_RUNTIME_VERSION != 3000 +#error This file was generated by a different version of ServiceGenerator which is incompatible with this GTLR library source. +#endif + +// Generated comments include content from the discovery document; avoid them +// causing warnings since clang's checks are some what arbitrary. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdocumentation" + +NS_ASSUME_NONNULL_BEGIN + +// ---------------------------------------------------------------------------- +// Authorization scopes + +/** + * Authorization scope: See, edit, create, and delete all of your Google Drive + * files + * + * Value "https://www.googleapis.com/auth/drive" + */ +GTLR_EXTERN NSString * const kGTLRAuthScopeDrive; +/** + * Authorization scope: View and manage its own configuration data in your + * Google Drive + * + * Value "https://www.googleapis.com/auth/drive.appdata" + */ +GTLR_EXTERN NSString * const kGTLRAuthScopeDriveAppdata; +/** + * Authorization scope: View and manage Google Drive files and folders that you + * have opened or created with this app + * + * Value "https://www.googleapis.com/auth/drive.file" + */ +GTLR_EXTERN NSString * const kGTLRAuthScopeDriveFile; +/** + * Authorization scope: View and manage metadata of files in your Google Drive + * + * Value "https://www.googleapis.com/auth/drive.metadata" + */ +GTLR_EXTERN NSString * const kGTLRAuthScopeDriveMetadata; +/** + * Authorization scope: View metadata for files in your Google Drive + * + * Value "https://www.googleapis.com/auth/drive.metadata.readonly" + */ +GTLR_EXTERN NSString * const kGTLRAuthScopeDriveMetadataReadonly; +/** + * Authorization scope: View the photos, videos and albums in your Google + * Photos + * + * Value "https://www.googleapis.com/auth/drive.photos.readonly" + */ +GTLR_EXTERN NSString * const kGTLRAuthScopeDrivePhotosReadonly; +/** + * Authorization scope: See and download all your Google Drive files + * + * Value "https://www.googleapis.com/auth/drive.readonly" + */ +GTLR_EXTERN NSString * const kGTLRAuthScopeDriveReadonly; +/** + * Authorization scope: Modify your Google Apps Script scripts' behavior + * + * Value "https://www.googleapis.com/auth/drive.scripts" + */ +GTLR_EXTERN NSString * const kGTLRAuthScopeDriveScripts; + +// ---------------------------------------------------------------------------- +// GTLRDriveService +// + +/** + * Service for executing Drive API queries. + * + * Manages files in Drive including uploading, downloading, searching, + * detecting changes, and updating sharing permissions. + */ +@interface GTLRDriveService : GTLRService + +// No new methods + +// Clients should create a standard query with any of the class methods in +// GTLRDriveQuery.h. The query can the be sent with GTLRService's execute +// methods, +// +// - (GTLRServiceTicket *)executeQuery:(GTLRQuery *)query +// completionHandler:(void (^)(GTLRServiceTicket *ticket, +// id object, NSError *error))handler; +// or +// - (GTLRServiceTicket *)executeQuery:(GTLRQuery *)query +// delegate:(id)delegate +// didFinishSelector:(SEL)finishedSelector; +// +// where finishedSelector has a signature of: +// +// - (void)serviceTicket:(GTLRServiceTicket *)ticket +// finishedWithObject:(id)object +// error:(NSError *)error; +// +// The object passed to the completion handler or delegate method +// is a subclass of GTLRObject, determined by the query method executed. + +@end + +NS_ASSUME_NONNULL_END + +#pragma clang diagnostic pop diff --git a/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.m b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.m new file mode 100644 index 0000000..2a7dda8 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.m @@ -0,0 +1,72 @@ +// NOTE: This file was generated by the ServiceGenerator. + +// ---------------------------------------------------------------------------- +// API: +// Drive API (drive/v3) +// Description: +// Manages files in Drive including uploading, downloading, searching, +// detecting changes, and updating sharing permissions. +// Documentation: +// https://developers.google.com/drive/ + +#import "GTLRDrive.h" + +// ---------------------------------------------------------------------------- +// Authorization scopes + +NSString * const kGTLRAuthScopeDrive = @"https://www.googleapis.com/auth/drive"; +NSString * const kGTLRAuthScopeDriveAppdata = @"https://www.googleapis.com/auth/drive.appdata"; +NSString * const kGTLRAuthScopeDriveFile = @"https://www.googleapis.com/auth/drive.file"; +NSString * const kGTLRAuthScopeDriveMetadata = @"https://www.googleapis.com/auth/drive.metadata"; +NSString * const kGTLRAuthScopeDriveMetadataReadonly = @"https://www.googleapis.com/auth/drive.metadata.readonly"; +NSString * const kGTLRAuthScopeDrivePhotosReadonly = @"https://www.googleapis.com/auth/drive.photos.readonly"; +NSString * const kGTLRAuthScopeDriveReadonly = @"https://www.googleapis.com/auth/drive.readonly"; +NSString * const kGTLRAuthScopeDriveScripts = @"https://www.googleapis.com/auth/drive.scripts"; + +// ---------------------------------------------------------------------------- +// GTLRDriveService +// + +@implementation GTLRDriveService + +- (instancetype)init { + self = [super init]; + if (self) { + // From discovery. + self.rootURLString = @"https://www.googleapis.com/"; + self.servicePath = @"drive/v3/"; + self.resumableUploadPath = @"resumable/upload/"; + self.simpleUploadPath = @"upload/"; + self.batchPath = @"batch/drive/v3"; + self.prettyPrintQueryParameterNames = @[ @"prettyPrint" ]; + } + return self; +} + ++ (NSDictionary *)kindStringToClassMap { + return @{ + @"api#channel" : [GTLRDrive_Channel class], + @"drive#about" : [GTLRDrive_About class], + @"drive#change" : [GTLRDrive_Change class], + @"drive#changeList" : [GTLRDrive_ChangeList class], + @"drive#comment" : [GTLRDrive_Comment class], + @"drive#commentList" : [GTLRDrive_CommentList class], + @"drive#drive" : [GTLRDrive_Drive class], + @"drive#driveList" : [GTLRDrive_DriveList class], + @"drive#file" : [GTLRDrive_File class], + @"drive#fileList" : [GTLRDrive_FileList class], + @"drive#generatedIds" : [GTLRDrive_GeneratedIds class], + @"drive#permission" : [GTLRDrive_Permission class], + @"drive#permissionList" : [GTLRDrive_PermissionList class], + @"drive#reply" : [GTLRDrive_Reply class], + @"drive#replyList" : [GTLRDrive_ReplyList class], + @"drive#revision" : [GTLRDrive_Revision class], + @"drive#revisionList" : [GTLRDrive_RevisionList class], + @"drive#startPageToken" : [GTLRDrive_StartPageToken class], + @"drive#teamDrive" : [GTLRDrive_TeamDrive class], + @"drive#teamDriveList" : [GTLRDrive_TeamDriveList class], + @"drive#user" : [GTLRDrive_User class], + }; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.h new file mode 100644 index 0000000..0a318d0 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.h @@ -0,0 +1,85 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// Batch query documentation: +// https://github.com/google/google-api-objectivec-client-for-rest/wiki#batch-operations + +#import "GTLRQuery.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface GTLRBatchQuery : NSObject + +/** + * Queries included in this batch. Each query should have a unique @c requestID. + */ +@property(atomic, copy, nullable) NSArray *queries; + +/** + * Flag indicating if query execution should skip authorization. Defaults to NO. + */ +@property(atomic, assign) BOOL shouldSkipAuthorization; + +/** + * Any additional HTTP headers for this batch. + * + * These headers override the same keys from the service object's + * @c additionalHTTPHeaders. + */ +@property(atomic, copy, nullable) NSDictionary *additionalHTTPHeaders; + +/** + * Any additional URL query parameters to add to the batch query. + * + * These query parameters override the same keys from the service object's + * @c additionalURLQueryParameters + */ +@property(atomic, copy, nullable) NSDictionary *additionalURLQueryParameters; + +/** + * The batch request multipart boundary, once determined. + */ +@property(atomic, copy, nullable) NSString *boundary; + +/** + * The brief string to identify this query in @c GTMSessionFetcher http logs. + * + * The default logging name for batch requests includes the API method names. + */ +@property(atomic, copy, nullable) NSString *loggingName; + +/** + * Constructor for a batch query, for use with @c addQuery: + */ ++ (instancetype)batchQuery; + +/** + * Constructor for a batch query, from an array of @c GTLRQuery objects. + */ ++ (instancetype)batchQueryWithQueries:(NSArray *)array; + +/** + * Add a single @c GTLRQuery to the batch. + */ +- (void)addQuery:(GTLRQuery *)query; + +/** + * Search the batch for a query with the specified ID. + */ +- (nullable GTLRQuery *)queryForRequestID:(NSString *)requestID; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.m new file mode 100644 index 0000000..bde6320 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.m @@ -0,0 +1,179 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#import "GTLRBatchQuery.h" + +#import "GTLRService.h" + +#if DEBUG +static void DebugAssertValidBatchQueryItem(GTLRQuery *query) { + GTLR_DEBUG_ASSERT([query isKindOfClass:[GTLRQuery class]], + @"unexpected query class: %@", [query class]); + GTLR_DEBUG_ASSERT(query.uploadParameters == nil, + @"batch may not contain upload: %@", query); + GTLR_DEBUG_ASSERT(!query.hasExecutionParameters, + @"queries added to a batch may not contain executionParameters: %@", query); + GTLR_DEBUG_ASSERT(!query.queryInvalid, + @"batch may not contain query already executed: %@", query); +} +#else +static void DebugAssertValidBatchQueryItem(GTLRQuery *query) { } +#endif + +@implementation GTLRBatchQuery { + NSMutableArray *_queries; + NSMutableDictionary *_requestIDMap; + GTLRServiceExecutionParameters *_executionParameters; +} + +@synthesize shouldSkipAuthorization = _shouldSkipAuthorization, + additionalHTTPHeaders = _additionalHTTPHeaders, + additionalURLQueryParameters = _additionalURLQueryParameters, + boundary = _boundary, + loggingName = _loggingName; + ++ (instancetype)batchQuery { + GTLRBatchQuery *obj = [[self alloc] init]; + return obj; +} + ++ (instancetype)batchQueryWithQueries:(NSArray *)queries { + GTLRBatchQuery *obj = [self batchQuery]; + obj.queries = queries; + +#if DEBUG + for (GTLRQuery *query in queries) { + DebugAssertValidBatchQueryItem(query); + } +#endif + return obj; +} + +- (id)copyWithZone:(NSZone *)zone { + // Deep copy the list of queries + GTLRBatchQuery *newBatch = [[[self class] allocWithZone:zone] init]; + if (_queries) { + newBatch.queries = [[NSArray alloc] initWithArray:_queries + copyItems:YES]; + } + + // Using the executionParameters ivar avoids creating the object. + newBatch.executionParameters = _executionParameters; + + // Copied in the same order as synthesized above. + newBatch.shouldSkipAuthorization = _shouldSkipAuthorization; + newBatch.additionalHTTPHeaders = _additionalHTTPHeaders; + newBatch.additionalURLQueryParameters = _additionalURLQueryParameters; + newBatch.boundary = _boundary; + newBatch.loggingName = _loggingName; + + // No need to copy _requestIDMap as it's created on demand. + return newBatch; +} + +- (NSString *)description { + NSArray *queries = self.queries; + NSArray *loggingNames = [queries valueForKey:@"loggingName"]; + NSMutableSet *dedupedNames = [NSMutableSet setWithArray:loggingNames]; // de-dupe + [dedupedNames removeObject:[NSNull null]]; // In case any didn't have a loggingName. + NSString *namesStr = [[dedupedNames allObjects] componentsJoinedByString:@","]; + + return [NSString stringWithFormat:@"%@ %p (queries:%lu - %@)", + [self class], self, (unsigned long)queries.count, namesStr]; +} + +#pragma mark - + +- (BOOL)isBatchQuery { + return YES; +} + +- (GTLRUploadParameters *)uploadParameters { + // File upload is not supported for batches + return nil; +} + +- (void)invalidateQuery { + NSArray *queries = self.queries; + [queries makeObjectsPerformSelector:@selector(invalidateQuery)]; + + _executionParameters = nil; +} + +- (GTLRQuery *)queryForRequestID:(NSString *)requestID { + GTLRQuery *result = [_requestIDMap objectForKey:requestID]; + if (result) return result; + + // We've not before tried to look up a query, or the map is stale + _requestIDMap = [[NSMutableDictionary alloc] init]; + + for (GTLRQuery *query in _queries) { + [_requestIDMap setObject:query forKey:query.requestID]; + } + + result = [_requestIDMap objectForKey:requestID]; + return result; +} + +#pragma mark - + +- (void)setQueries:(NSArray *)array { +#if DEBUG + for (GTLRQuery *query in array) { + DebugAssertValidBatchQueryItem(query); + } +#endif + + _queries = [array mutableCopy]; +} + +- (NSArray *)queries { + return _queries; +} + +- (void)addQuery:(GTLRQuery *)query { + DebugAssertValidBatchQueryItem(query); + + if (_queries == nil) { + _queries = [[NSMutableArray alloc] init]; + } + + [_queries addObject:query]; +} + +- (GTLRServiceExecutionParameters *)executionParameters { + @synchronized(self) { + if (!_executionParameters) { + _executionParameters = [[GTLRServiceExecutionParameters alloc] init]; + } + } + return _executionParameters; +} + +- (void)setExecutionParameters:(GTLRServiceExecutionParameters *)executionParameters { + @synchronized(self) { + _executionParameters = executionParameters; + } +} + +- (BOOL)hasExecutionParameters { + return _executionParameters.hasParameters; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.h new file mode 100644 index 0000000..0cc7e3f --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.h @@ -0,0 +1,78 @@ +/* Copyright (c) 2011 Google Inc. +* +* 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 "GTLRObject.h" + +NS_ASSUME_NONNULL_BEGIN + +@class GTLRErrorObject; + +/** + * A batch result includes a dictionary of successes, a dictionary of failures, and a dictionary of + * HTTP response headers. + * + * Dictionary keys are request ID strings; dictionary values are @c GTLRObject for + * successes, @c GTLRErrorObject for failures, @c NSDictionary for responseHeaders. + * + * For successes with no returned object (such as from delete operations), + * the object for the dictionary entry is @c NSNull. + * + * The original query for each result is available from the service ticket, as shown in + * the code snippet here. + * + * When the queries in the batch are unrelated, adding a @c completionBlock to each of + * the queries may be a simpler way to handle the batch results. + * + * @code + * NSDictionary *successes = batchResults.successes; + * for (NSString *requestID in successes) { + * GTLRObject *obj = successes[requestID]; + * GTLRQuery *query = [ticket queryForRequestID:requestID]; + * NSLog(@"Query %@ returned object %@", query, obj); + * } + * + * NSDictionary *failures = batchResults.failures; + * for (NSString *requestID in failures) { + * GTLRErrorObject *errorObj = failures[requestID]; + * GTLRQuery *query = [ticket queryForRequestID:requestID]; + * NSLog(@"Query %@ failed with error %@", query, errorObj); + * } + * @endcode + */ +@interface GTLRBatchResult : GTLRObject + +/** + * Object results of successful queries in the batch, keyed by request ID. + * + * Queries which do not return an object when successful have a @c NSNull value. + */ +@property(atomic, strong, nullable) NSDictionary *successes; + +/** + * Object results of unsuccessful queries in the batch, keyed by request ID. + */ +@property(atomic, strong, nullable) NSDictionary *failures; + +/** + * Any HTTP response headers that were returned for a query request. Headers are optional therefore + * not all queries will have them. Query request with response headers are stored in a + * dictionary and keyed by request ID. + */ +@property(atomic, strong, nullable) + NSDictionary *responseHeaders; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.m new file mode 100644 index 0000000..a01d152 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.m @@ -0,0 +1,170 @@ +/* Copyright (c) 2011 Google Inc. +* +* 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. +*/ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#import "GTLRBatchResult.h" + +#import "GTLRErrorObject.h" +#import "GTLRUtilities.h" + +static NSString *const kGTLRBatchResultSuccessesKeys = @"successesKeys"; +static NSString *const kGTLRBatchResultSuccessKeyPrefix = @"Success-"; +static NSString *const kGTLRBatchResultFailuresKeys = @"failuresKeys"; +static NSString *const kGTLRBatchResultFailurKeyPrefix = @"Failure-"; +static NSString *const kGTLRBatchResultResponseHeaders = @"responseHeaders"; + +@implementation GTLRBatchResult + +@synthesize successes = _successes, + failures = _failures, + responseHeaders = _responseHeaders; + +// Since this class doesn't use the json property, provide the basic NSObject +// methods needed to ensure proper behaviors. + +- (id)copyWithZone:(NSZone *)zone { + GTLRBatchResult* newObject = [super copyWithZone:zone]; + newObject.successes = [self.successes copyWithZone:zone]; + newObject.failures = [self.failures copyWithZone:zone]; + newObject.responseHeaders = [self.responseHeaders copyWithZone:zone]; + return newObject; +} + +- (NSUInteger)hash { + NSUInteger result = [super hash]; + result += result * 13 + [self.successes hash]; + result += result * 13 + [self.failures hash]; + result += result * 13 + [self.responseHeaders hash]; + return result; +} + +- (BOOL)isEqual:(id)object { + if (self == object) return YES; + + if (![super isEqual:object]) { + return NO; + } + + if (![object isKindOfClass:[GTLRBatchResult class]]) { + return NO; + } + + GTLRBatchResult *other = (GTLRBatchResult *)object; + if (!GTLR_AreEqualOrBothNil(self.successes, other.successes)) { + return NO; + } + if (!GTLR_AreEqualOrBothNil(self.failures, other.failures)) { + return NO; + } + return GTLR_AreEqualOrBothNil(self.responseHeaders, other.responseHeaders); +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p (successes:%lu failures:%lu responseHeaders:%lu)", + [self class], self, + (unsigned long)self.successes.count, + (unsigned long)self.failures.count, + (unsigned long)self.responseHeaders.count]; +} + +// This class is a subclass of GTLRObject, which declares NSSecureCoding +// conformance. Since this class does't really use the json property, provide +// a custom implementation to maintain the contract. +// +// For success/failures, one could do: +// [encoder encodeObject:self.successes forKey:kGTLRBatchResultSuccesses]; +// [encoder encodeObject:self.failures forKey:kGTLRBatchResultFailuresKeys]; +// and then use -decodeObjectOfClasses:forKey:, but nothing actually checks the +// structure of the dictionary, so instead the dicts are blown out to provide +// better validation by the encoder/decoder. + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (self) { + NSArray *keys = + [decoder decodeObjectOfClass:[NSArray class] + forKey:kGTLRBatchResultSuccessesKeys]; + if (keys.count) { + NSMutableDictionary *dict = + [NSMutableDictionary dictionaryWithCapacity:keys.count]; + for (NSString *key in keys) { + NSString *storageKey = + [kGTLRBatchResultSuccessKeyPrefix stringByAppendingString:key]; + GTLRObject *obj = [decoder decodeObjectOfClass:[GTLRObject class] + forKey:storageKey]; + if (obj) { + [dict setObject:obj forKey:key]; + } + } + self.successes = dict; + } + + keys = [decoder decodeObjectOfClass:[NSArray class] + forKey:kGTLRBatchResultFailuresKeys]; + if (keys.count) { + NSMutableDictionary *dict = + [NSMutableDictionary dictionaryWithCapacity:keys.count]; + for (NSString *key in keys) { + NSString *storageKey = + [kGTLRBatchResultFailurKeyPrefix stringByAppendingString:key]; + GTLRObject *obj = [decoder decodeObjectOfClass:[GTLRObject class] + forKey:storageKey]; + if (obj) { + [dict setObject:obj forKey:key]; + } + } + self.failures = dict; + } + + self.responseHeaders = + [decoder decodeObjectOfClass:[NSDictionary class] + forKey:kGTLRBatchResultResponseHeaders]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)encoder { + [super encodeWithCoder:encoder]; + [encoder encodeObject:self.successes.allKeys + forKey:kGTLRBatchResultSuccessesKeys]; + [self.successes enumerateKeysAndObjectsUsingBlock:^(NSString *key, + GTLRObject * obj, + BOOL * stop) { + NSString *storageKey = + [kGTLRBatchResultSuccessKeyPrefix stringByAppendingString:key]; + [encoder encodeObject:obj forKey:storageKey]; + }]; + + [encoder encodeObject:self.failures.allKeys forKey:kGTLRBatchResultFailuresKeys]; + [self.failures enumerateKeysAndObjectsUsingBlock:^(NSString *key, + GTLRObject * obj, + BOOL * stop) { + NSString *storageKey = + [kGTLRBatchResultFailurKeyPrefix stringByAppendingString:key]; + [encoder encodeObject:obj forKey:storageKey]; + }]; + + [encoder encodeObject:self.responseHeaders + forKey:kGTLRBatchResultResponseHeaders]; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDateTime.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDateTime.h new file mode 100644 index 0000000..c66de63 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDateTime.h @@ -0,0 +1,115 @@ +/* Copyright (c) 2011 Google Inc. +* +* 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 +#import "GTLRDefines.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * An immutable class representing a date and optionally a time in UTC. + */ +@interface GTLRDateTime : NSObject + +/** + * Constructor from a string representation. + */ ++ (nullable instancetype)dateTimeWithRFC3339String:(nullable NSString *)str; + +/** + * Constructor from a date and time representation. + */ ++ (instancetype)dateTimeWithDate:(NSDate *)date; + +/** + * Constructor from a date and time representation, along with an offset + * minutes value used when creating a RFC3339 string representation. + * + * The date value is independent of time zone; the offset affects how the + * date will be rendered as a string. + * + * The offsetMinutes may be initialized from a NSTimeZone as + * (timeZone.secondsFromGMT / 60) + */ ++ (instancetype)dateTimeWithDate:(NSDate *)date + offsetMinutes:(NSInteger)offsetMinutes; + +/** + * Constructor from a date for an all-day event. + * + * Use this constructor to create a @c GTLRDateTime that is "date only". + * + * @note @c hasTime will be set to NO. + */ ++ (instancetype)dateTimeForAllDayWithDate:(NSDate *)date; + +/** + * Constructor from date components. + */ ++ (instancetype)dateTimeWithDateComponents:(NSDateComponents *)date; + +/** + * The represented date and time. + * + * If @c hasTime is NO, the time is set to noon GMT so the date is valid for all time zones. + */ +@property(nonatomic, readonly) NSDate *date; + +/** + * The date and time as a RFC3339 string representation. + */ +@property(nonatomic, readonly) NSString *RFC3339String; + +/** + * The date and time as a RFC3339 string representation. + * + * This returns the same string as @c RFC3339String. + */ +@property(nonatomic, readonly) NSString *stringValue; + +/** + * The represented date and time as date components. + */ +@property(nonatomic, readonly, copy) NSDateComponents *dateComponents; + +/** + * The fraction of seconds represented, 0-999. + */ +@property(nonatomic, readonly) NSInteger milliseconds; + +/** + * The time offset displayed in the string representation, if any. + * + * If the offset is not nil, the date and time will be rendered as a string + * for the time zone indicated by the offset. + * + * An app may create a NSTimeZone for this with + * [NSTimeZone timeZoneForSecondsFromGMT:(offsetMinutes.integerValue * 60)] + */ +@property(nonatomic, readonly, nullable) NSNumber *offsetMinutes; + +/** + * Flag indicating if the object represents date only, or date with time. + */ +@property(nonatomic, readonly) BOOL hasTime; + +/** + * The calendar used by this class, Gregorian and UTC. + */ ++ (NSCalendar *)calendar; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDateTime.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDateTime.m new file mode 100644 index 0000000..e8cb6ca --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDateTime.m @@ -0,0 +1,373 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#import "GTLRDateTime.h" + +static NSUInteger const kGTLRDateComponentBits = (NSCalendarUnitYear | NSCalendarUnitMonth + | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute + | NSCalendarUnitSecond); + +@interface GTLRDateTime () + +- (void)setFromDate:(NSDate *)date; +- (void)setFromRFC3339String:(NSString *)str; + +@property(nonatomic, copy, readwrite) NSDateComponents *dateComponents; +@property(nonatomic, assign, readwrite) NSInteger milliseconds; +@property(nonatomic, strong, readwrite, nullable) NSNumber *offsetMinutes; + +@property(nonatomic, assign, readwrite) BOOL hasTime; + +@end + + +@implementation GTLRDateTime { + NSDate *_cachedDate; + NSString *_cachedRFC3339String; +} + +// A note about _milliseconds: +// RFC 3339 has support for fractions of a second. NSDateComponents is all +// NSInteger based, so it can't handle a fraction of a second. NSDate is +// built on NSTimeInterval so it has sub-millisecond precision. GTLR takes +// the compromise of supporting the RFC's optional fractional second support +// by maintaining a number of milliseconds past what fits in the +// NSDateComponents. The parsing and string conversions will include +// 3 decimal digits (hence milliseconds). When going to a string, the decimal +// digits are only included if the milliseconds are non zero. + +@dynamic date; +@dynamic RFC3339String; +@dynamic stringValue; +@dynamic hasTime; + +@synthesize dateComponents = _dateComponents, + milliseconds = _milliseconds, + offsetMinutes = _offsetMinutes; + ++ (instancetype)dateTimeWithRFC3339String:(NSString *)str { + if (str == nil) return nil; + + GTLRDateTime *result = [[self alloc] init]; + [result setFromRFC3339String:str]; + return result; +} + ++ (instancetype)dateTimeWithDate:(NSDate *)date { + if (date == nil) return nil; + + GTLRDateTime *result = [[self alloc] init]; + [result setFromDate:date]; + return result; +} + ++ (instancetype)dateTimeWithDate:(NSDate *)date + offsetMinutes:(NSInteger)offsetMinutes { + GTLRDateTime *result = [self dateTimeWithDate:date]; + result.offsetMinutes = @(offsetMinutes); + return result; +} + ++ (instancetype)dateTimeForAllDayWithDate:(NSDate *)date { + if (date == nil) return nil; + + GTLRDateTime *result = [[self alloc] init]; + [result setFromDate:date]; + result.hasTime = NO; + return result; +} + ++ (instancetype)dateTimeWithDateComponents:(NSDateComponents *)components { + NSCalendar *cal = components.calendar ?: [self calendar]; + NSDate *date = [cal dateFromComponents:components]; + + return [self dateTimeWithDate:date]; +} + +- (id)copyWithZone:(NSZone *)zone { + // Object is immutable + return self; +} + +- (BOOL)isEqual:(GTLRDateTime *)other { + if (self == other) return YES; + if (![other isKindOfClass:[GTLRDateTime class]]) return NO; + + BOOL areDateComponentsEqual = [self.dateComponents isEqual:other.dateComponents]; + if (!areDateComponentsEqual) return NO; + + NSNumber *offsetMinutes = self.offsetMinutes; + NSNumber *otherOffsetMinutes = other.offsetMinutes; + if ((offsetMinutes == nil) != (otherOffsetMinutes == nil) + || (offsetMinutes.integerValue != otherOffsetMinutes.integerValue)) return NO; + + return (self.milliseconds == other.milliseconds); +} + +- (NSUInteger)hash { + return [[self date] hash]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p: {%@}", + [self class], self, self.RFC3339String]; +} + +- (NSDate *)date { + @synchronized(self) { + if (_cachedDate) return _cachedDate; + } + + NSDateComponents *dateComponents = self.dateComponents; + NSTimeInterval extraMillisecondsAsSeconds = 0.0; + NSCalendar *cal = [[self class] calendar]; + + if (!self.hasTime) { + // We're not keeping track of a time, but NSDate always is based on + // an absolute time. We want to avoid returning an NSDate where the + // calendar date appears different from what was used to create our + // date-time object. + // + // We'll make a copy of the date components, setting the time on our + // copy to noon GMT, since that ensures the date renders correctly for + // any time zone. + NSDateComponents *noonDateComponents = [dateComponents copy]; + [noonDateComponents setHour:12]; + [noonDateComponents setMinute:0]; + [noonDateComponents setSecond:0]; + dateComponents = noonDateComponents; + } else { + // Add in the fractional seconds that don't fit into NSDateComponents. + extraMillisecondsAsSeconds = ((NSTimeInterval)self.milliseconds) / 1000.0; + } + + NSDate *date = [cal dateFromComponents:dateComponents]; + + // Add in any milliseconds that didn't fit into the dateComponents. + if (extraMillisecondsAsSeconds > 0.0) { + date = [date dateByAddingTimeInterval:extraMillisecondsAsSeconds]; + } + + @synchronized(self) { + _cachedDate = date; + } + return date; +} + +- (NSString *)stringValue { + return self.RFC3339String; +} + +- (NSString *)RFC3339String { + @synchronized(self) { + if (_cachedRFC3339String) return _cachedRFC3339String; + } + + NSDateComponents *dateComponents = self.dateComponents; + + NSString *timeString = @""; // timeString like "T15:10:46-08:00" + + if (self.hasTime) { + NSString *fractionalSecondsString = @""; + if (self.milliseconds > 0.0) { + fractionalSecondsString = [NSString stringWithFormat:@".%03ld", (long)self.milliseconds]; + } + + // If the dateTime was created from a string with a time offset, render that back in + // and adjust the time. + NSString *offsetStr = @"Z"; + NSNumber *offsetMinutes = self.offsetMinutes; + if (offsetMinutes != nil) { + BOOL isNegative = NO; + NSInteger offsetVal = offsetMinutes.integerValue; + if (offsetVal < 0) { + isNegative = YES; + offsetVal = -offsetVal; + } + NSInteger mins = offsetVal % 60; + NSInteger hours = (offsetVal - mins) / 60; + offsetStr = [NSString stringWithFormat:@"%c%02ld:%02ld", + isNegative ? '-' : '+', (long)hours, (long)mins]; + + // Adjust date components back to account for the offset. + // + // This is the inverse of the adjustment done in setFromRFC3339String:. + if (offsetVal != 0) { + NSDate *adjustedDate = + [self.date dateByAddingTimeInterval:(offsetMinutes.integerValue * 60)]; + NSCalendar *calendar = [[self class] calendar]; + dateComponents = [calendar components:kGTLRDateComponentBits + fromDate:adjustedDate]; + } + } + + timeString = [NSString stringWithFormat:@"T%02ld:%02ld:%02ld%@%@", + (long)dateComponents.hour, (long)dateComponents.minute, + (long)dateComponents.second, fractionalSecondsString, + offsetStr]; + } + + // full dateString like "2006-11-17T15:10:46-08:00" + NSString *dateString = [NSString stringWithFormat:@"%04ld-%02ld-%02ld%@", + (long)dateComponents.year, (long)dateComponents.month, + (long)dateComponents.day, timeString]; + + @synchronized(self) { + _cachedRFC3339String = dateString; + } + return dateString; +} + +- (void)setFromDate:(NSDate *)date { + NSCalendar *cal = [[self class] calendar]; + + NSDateComponents *components = [cal components:kGTLRDateComponentBits + fromDate:date]; + self.dateComponents = components; + + // Extract the fractional seconds. + NSTimeInterval asTimeInterval = [date timeIntervalSince1970]; + NSTimeInterval worker = asTimeInterval - trunc(asTimeInterval); + self.milliseconds = (NSInteger)round(worker * 1000.0); +} + +- (void)setFromRFC3339String:(NSString *)str { + static NSCharacterSet *gDashSet; + static NSCharacterSet *gTSet; + static NSCharacterSet *gColonSet; + static NSCharacterSet *gPlusMinusZSet; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + gDashSet = [NSCharacterSet characterSetWithCharactersInString:@"-"]; + gTSet = [NSCharacterSet characterSetWithCharactersInString:@"Tt "]; + gColonSet = [NSCharacterSet characterSetWithCharactersInString:@":"]; + gPlusMinusZSet = [NSCharacterSet characterSetWithCharactersInString:@"+-zZ"]; + }); + + NSInteger year = NSDateComponentUndefined; + NSInteger month = NSDateComponentUndefined; + NSInteger day = NSDateComponentUndefined; + NSInteger hour = NSDateComponentUndefined; + NSInteger minute = NSDateComponentUndefined; + NSInteger sec = NSDateComponentUndefined; + NSInteger milliseconds = 0; + double secDouble = -1.0; + NSString* sign = nil; + NSInteger offsetHour = 0; + NSInteger offsetMinute = 0; + + if (str.length > 0) { + NSScanner* scanner = [NSScanner scannerWithString:str]; + // There should be no whitespace, so no skip characters. + [scanner setCharactersToBeSkipped:nil]; + + // for example, scan 2006-11-17T15:10:46-08:00 + // or 2006-11-17T15:10:46Z + if (// yyyy-mm-dd + [scanner scanInteger:&year] && + [scanner scanCharactersFromSet:gDashSet intoString:NULL] && + [scanner scanInteger:&month] && + [scanner scanCharactersFromSet:gDashSet intoString:NULL] && + [scanner scanInteger:&day] && + // Thh:mm:ss + [scanner scanCharactersFromSet:gTSet intoString:NULL] && + [scanner scanInteger:&hour] && + [scanner scanCharactersFromSet:gColonSet intoString:NULL] && + [scanner scanInteger:&minute] && + [scanner scanCharactersFromSet:gColonSet intoString:NULL] && + [scanner scanDouble:&secDouble]) { + + // At this point we got secDouble, pull it apart. + sec = (NSInteger)secDouble; + double worker = secDouble - ((double)sec); + milliseconds = (NSInteger)round(worker * 1000.0); + + // Finish parsing, now the offset info. + if (// Z or +hh:mm + [scanner scanCharactersFromSet:gPlusMinusZSet intoString:&sign] && + [scanner scanInteger:&offsetHour] && + [scanner scanCharactersFromSet:gColonSet intoString:NULL] && + [scanner scanInteger:&offsetMinute]) { + } + } + } + + NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; + [dateComponents setYear:year]; + [dateComponents setMonth:month]; + [dateComponents setDay:day]; + [dateComponents setHour:hour]; + [dateComponents setMinute:minute]; + [dateComponents setSecond:sec]; + + BOOL isMinusOffset = [sign isEqual:@"-"]; + if (isMinusOffset || [sign isEqual:@"+"]) { + NSInteger totalOffsetMinutes = ((offsetHour * 60) + offsetMinute) * (isMinusOffset ? -1 : 1); + self.offsetMinutes = @(totalOffsetMinutes); + + // Minus offset means Universal time is that many hours and minutes ahead. + // + // This is the inverse of the adjustment done above in RFC3339String. + NSTimeInterval deltaOffsetSeconds = -totalOffsetMinutes * 60; + NSCalendar *calendar = [[self class] calendar]; + NSDate *scannedDate = [calendar dateFromComponents:dateComponents]; + NSDate *offsetDate = [scannedDate dateByAddingTimeInterval:deltaOffsetSeconds]; + + dateComponents = [calendar components:kGTLRDateComponentBits + fromDate:offsetDate]; + } + + self.dateComponents = dateComponents; + self.milliseconds = milliseconds; +} + +- (BOOL)hasTime { + NSDateComponents *dateComponents = self.dateComponents; + + BOOL hasTime = ([dateComponents hour] != NSDateComponentUndefined + && [dateComponents minute] != NSDateComponentUndefined); + + return hasTime; +} + +- (void)setHasTime:(BOOL)shouldHaveTime { + // We'll set time values to zero or kUndefinedDateComponent as appropriate. + BOOL hadTime = self.hasTime; + + if (shouldHaveTime && !hadTime) { + [_dateComponents setHour:0]; + [_dateComponents setMinute:0]; + [_dateComponents setSecond:0]; + _milliseconds = 0; + } else if (hadTime && !shouldHaveTime) { + [_dateComponents setHour:NSDateComponentUndefined]; + [_dateComponents setMinute:NSDateComponentUndefined]; + [_dateComponents setSecond:NSDateComponentUndefined]; + _milliseconds = 0; + } +} + ++ (NSCalendar *)calendar { + NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; + cal.timeZone = (NSTimeZone * _Nonnull)[NSTimeZone timeZoneWithName:@"Universal"]; + return cal; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDuration.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDuration.h new file mode 100644 index 0000000..58eba34 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDuration.h @@ -0,0 +1,83 @@ +/* Copyright (c) 2016 Google Inc. +* +* 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 +#import "GTLRDefines.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * An immutable class representing a string data type 'google-duration'. + * It is based off the protocol buffers definition: + * https://github.com/google/protobuf/blob/master/src/google/protobuf/duration.proto + */ +@interface GTLRDuration : NSObject + +/** + * Signed seconds of the span of time. Must be from -315,576,000,000 + * to +315,576,000,000 inclusive. + **/ +@property(nonatomic, readonly) int64_t seconds; + +/** + * Signed fractions of a second at nanosecond resolution of the span + * of time. Durations less than one second are represented with a 0 + * `seconds` field and a positive or negative `nanos` field. For durations + * of one second or more, a non-zero value for the `nanos` field must be + * of the same sign as the `seconds` field. Must be from -999,999,999 + * to +999,999,999 inclusive. + **/ +@property(nonatomic, readonly) int32_t nanos; + +/** + * This duration expressed as a NSTimeInterval. + * + * @note: Not all second/nanos combinations can be represented in a + * NSTimeInterval, so this could be a lossy transform. + **/ +@property(nonatomic, readonly) NSTimeInterval timeInterval; + +/** + * Returns the string form used to send this data type in a JSON payload. + */ +@property(nonatomic, readonly) NSString *jsonString; + +/** + * Constructor for a new duration with the given seconds and nanoseconds. + * + * Will fail if seconds/nanos differ in sign or if nanos is more than one + * second. + **/ ++ (nullable instancetype)durationWithSeconds:(int64_t)seconds + nanos:(int32_t)nanos; + +/** + * Constructor for a new duration from the given string form. + * + * Will return nil if jsonString is invalid. + **/ ++ (nullable instancetype)durationWithJSONString:(nullable NSString *)jsonString; + +/** + * Constructor for a new duration from the NSTimeInterval. + * + * @note NSTimeInterval doesn't always express things as exactly as one might + * expect, so coverting from to integer seconds & nanos can reveal this. + **/ ++ (instancetype)durationWithTimeInterval:(NSTimeInterval)timeInterval; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDuration.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDuration.m new file mode 100644 index 0000000..ed5a5e6 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRDuration.m @@ -0,0 +1,222 @@ +/* Copyright (c) 2016 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#import "GTLRDuration.h" + +static const int32_t kNanosPerMillisecond = 1000000; +static const int32_t kNanosPerMicrosecond = 1000; +static const int32_t kNanosPerSecond = 1000000000; + +static int32_t IntPow10(int x) { + int32_t result = 1; + for (int i = 0; i < x; ++i) { + result *= 10; + } + return result; +} + +@implementation GTLRDuration + +@dynamic timeInterval; + +@synthesize seconds = _seconds, + nanos = _nanos, + jsonString = _jsonString; + ++ (instancetype)durationWithSeconds:(int64_t)seconds nanos:(int32_t)nanos { + if (seconds < 0) { + if (nanos > 0) { + // secs was -, nanos was + + return nil; + } + } else if (seconds > 0) { + if (nanos < 0) { + // secs was +, nanos was - + return nil; + } + } + if ((nanos <= -kNanosPerSecond) || (nanos >= kNanosPerSecond)) { + // more than a seconds worth + return nil; + } + return [[self alloc] initWithSeconds:seconds nanos:nanos jsonString:NULL]; +} + ++ (instancetype)durationWithJSONString:(NSString *)jsonString { + // It has to end in "s", so it needs >1 character. + if (jsonString.length <= 1) { + return nil; + } + + static NSCharacterSet *gNumberSet; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + gNumberSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; + }); + + NSScanner* scanner = [NSScanner scannerWithString:jsonString]; + // There should be no whitespace, so no skip characters. + [scanner setCharactersToBeSkipped:nil]; + + // Can start with a '-'. + BOOL isNeg = [scanner scanString:@"-" intoString:NULL]; + + int64_t seconds; + if (![scanner scanLongLong:&seconds]) { + return nil; + } + + // Since the sign was manually scanned, seconds should be positive + // (i.e. no "--#" in the put). + if (seconds < 0) { + return nil; + } + + // See if it has a ".[nanos]". Spec seems to say it is required, but play + // it safe and make it optional. + int32_t nanos = 0; + if ([scanner scanString:@"." intoString:NULL]) { + NSString *nanosStr; + if (![scanner scanCharactersFromSet:gNumberSet intoString:&nanosStr]) { + return nil; + } + // Ensure not too many digits (also ensure it is within range). + if (nanosStr.length > 9) { + return nil; + } + // Can use NSString's intValue since the character set was controlled. + nanos = [nanosStr intValue]; + // Scale based on length. + nanos *= IntPow10(9 - (int)nanosStr.length); + } + + // And must have the final 's'. + if (![scanner scanString:@"s" intoString:NULL]) { + return nil; + } + + // Better be the end... + if (![scanner isAtEnd]) { + return nil; + } + + if (isNeg) { + seconds = -seconds; + nanos = -nanos; + } + + // Pass on the json string so it will be reflected back out as it came in + // (incase it had a different number of digits, etc). + return [[self alloc] initWithSeconds:seconds + nanos:nanos + jsonString:jsonString]; +} + ++ (instancetype)durationWithTimeInterval:(NSTimeInterval)timeInterval { + NSTimeInterval seconds; + NSTimeInterval nanos = modf(timeInterval, &seconds); + nanos *= (NSTimeInterval)kNanosPerSecond; + + return [[self alloc] initWithSeconds:(int64_t)seconds + nanos:(int32_t)nanos + jsonString:NULL]; +} + +- (instancetype)init { + return [self initWithSeconds:0 nanos:0 jsonString:NULL]; +} + +- (instancetype)initWithSeconds:(int64_t)seconds + nanos:(int32_t)nanos + jsonString:(NSString *)jsonString { + self = [super init]; + if (self) { + // Sanity asserts, the class methods should make sure this doesn't happen. + GTLR_DEBUG_ASSERT((((seconds <= 0) && (nanos <= 0)) || + ((seconds >= 0) && (nanos >= 0))), + @"Seconds and nanos must have the same sign (%lld & %d)", + seconds, nanos); + GTLR_DEBUG_ASSERT(((nanos < kNanosPerSecond) && + (nanos > -kNanosPerSecond)), + @"Nanos is a second or more (%d)", nanos); + + _seconds = seconds; + _nanos = nanos; + + if (jsonString.length) { + _jsonString = [jsonString copy]; + } else { + // Based off the JSON serialization code in protocol buffers + // ( https://github.com/google/protobuf/ ). + NSString *sign = @""; + if ((seconds < 0) || (nanos < 0)) { + sign = @"-"; + seconds = -seconds; + nanos = -nanos; + } + int nanoDigts; + int32_t nanoDivider; + if (nanos % kNanosPerMillisecond == 0) { + nanoDigts = 3; + nanoDivider = kNanosPerMillisecond; + } else if (nanos % kNanosPerMicrosecond == 0) { + nanoDigts = 6; + nanoDivider = kNanosPerMicrosecond; + } else { + nanoDigts = 9; + nanoDivider = 1; + } + _jsonString = [NSString stringWithFormat:@"%@%lld.%0*ds", + sign, seconds, nanoDigts, (nanos / nanoDivider)]; + } + } + return self; +} + +- (NSTimeInterval)timeInterval { + NSTimeInterval result = self.seconds; + result += (NSTimeInterval)self.nanos / (NSTimeInterval)kNanosPerSecond; + return result; +} + +- (id)copyWithZone:(NSZone *)zone { + // Object is immutable + return self; +} + +- (BOOL)isEqual:(GTLRDuration *)other { + if (self == other) return YES; + if (![other isKindOfClass:[GTLRDuration class]]) return NO; + + BOOL result = ((self.seconds == other.seconds) && + (self.nanos == other.nanos)); + return result; +} + +- (NSUInteger)hash { + NSUInteger result = (NSUInteger)((self.seconds * 13) + self.nanos); + return result; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p: {%@}", + [self class], self, self.jsonString]; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.h new file mode 100644 index 0000000..8c5ac80 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.h @@ -0,0 +1,116 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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 "GTLRObject.h" + +NS_ASSUME_NONNULL_BEGIN + +@class GTLRErrorObjectErrorItem; +@class GTLRErrorObjectDetail; + +/** + * This class wraps JSON responses (both V1 and V2 of Google JSON errors) and NSErrors. + * + * A GTLRErrorObject can be created using +objectWithJSON: or +objectWithFoundationError: + */ +@interface GTLRErrorObject : GTLRObject + +/** + * Convenience method for creating an error object from an NSError. + * + * @param error The @c NSError to be encapsulated by the @c GTLRErrorObject + * + * @return A @c GTLRErrorObject wrapping the NSError. + */ ++ (instancetype)objectWithFoundationError:(NSError *)error; + +/** + * Convenience utility for extracting the GTLRErrorObject that was used to create an NSError. + * + * @param foundationError The NSError that may have been obtained from a GTLRErrorObject. + * + * @return The GTLRErrorObject, nil if the error was not originally from a GTLRErrorObject. + */ ++ (nullable GTLRErrorObject *)underlyingObjectForError:(NSError *)foundationError; + +// +// V1 & V2 properties. +// + +/** + * The numeric error code. + */ +@property(nonatomic, strong, nullable) NSNumber *code; + +/** + * An error message string, typically provided by the API server. This is not localized, + * and its reliability depends on the API server. + */ +@property(nonatomic, strong, nullable) NSString *message; + +// +// V1 properties. +// + +/** + * Underlying errors that occurred on the server. + */ +@property(nonatomic, strong, nullable) NSArray *errors; + +// +// V2 properties +// + +/** + * A status error string, defined by the API server, such as "NOT_FOUND". + */ +@property(nonatomic, strong, nullable) NSString *status; + +/** + * Additional diagnostic error details provided by the API server. + */ +@property(nonatomic, strong, nullable) NSArray *details; + +/** + * An NSError, either underlying the error object or manufactured from the error object's + * properties. + */ +@property(nonatomic, readonly) NSError *foundationError; + +@end + +/** + * Class representing the items of the "errors" array inside the Google V1 error JSON. + * + * Client applications should not rely on the property values of these items. + */ +@interface GTLRErrorObjectErrorItem : GTLRObject +@property(nonatomic, strong, nullable) NSString *domain; +@property(nonatomic, strong, nullable) NSString *reason; +@property(nonatomic, strong, nullable) NSString *message; +@property(nonatomic, strong, nullable) NSString *location; +@end + +/** + * Class representing the items of the "details" array inside the Google V2 error JSON. + * + * Client applications should not rely on the property values of these items. + */ +@interface GTLRErrorObjectDetail : GTLRObject +@property(nonatomic, strong, nullable) NSString *type; +@property(nonatomic, strong, nullable) NSString *detail; +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.m new file mode 100644 index 0000000..f04741c --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.m @@ -0,0 +1,140 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#import "GTLRErrorObject.h" + +#import "GTLRUtilities.h" +#import "GTLRService.h" + +static NSString *const kGTLRErrorObjectFoundationErrorKey = @"foundationError"; + +@implementation GTLRErrorObject { + NSError *_originalFoundationError; +} + +// V1 & V2 properties. +@dynamic code; +@dynamic message; + +// V1 properties. +@dynamic errors; + +// V2 properties. +@dynamic status; +@dynamic details; + +// Implemented below. +@dynamic foundationError; + ++ (instancetype)objectWithFoundationError:(NSError *)error { + GTLRErrorObject *object = [self object]; + object->_originalFoundationError = error; + object.code = @(error.code); + object.message = error.localizedDescription; + return object; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + return @{ + @"errors" : [GTLRErrorObjectErrorItem class], + @"details" : [GTLRErrorObjectDetail class] + }; +} + +- (NSError *)foundationError { + // If there was an original foundation error, copy its userInfo as the basis for ours. + NSMutableDictionary *userInfo = + [NSMutableDictionary dictionaryWithDictionary:_originalFoundationError.userInfo]; + + // This structured GTLRErrorObject will be available in the error's userInfo + // dictionary. + userInfo[kGTLRStructuredErrorKey] = self; + + NSError *error; + if (_originalFoundationError) { + error = [NSError errorWithDomain:_originalFoundationError.domain + code:_originalFoundationError.code + userInfo:userInfo]; + } else { + NSString *reasonStr = self.message; + if (reasonStr) { + userInfo[NSLocalizedDescriptionKey] = reasonStr; + } + + error = [NSError errorWithDomain:kGTLRErrorObjectDomain + code:self.code.integerValue + userInfo:userInfo]; + } + return error; +} + ++ (GTLRErrorObject *)underlyingObjectForError:(NSError *)foundationError { + NSDictionary *userInfo = [foundationError userInfo]; + GTLRErrorObject *errorObj = [userInfo objectForKey:kGTLRStructuredErrorKey]; + return errorObj; +} + +- (BOOL)isEqual:(id)object { + // Include the underlying foundation error in equality checks. + if (self == object) return YES; + if (![super isEqual:object]) return NO; + if (![object isKindOfClass:[GTLRErrorObject class]]) return NO; + GTLRErrorObject *other = (GTLRErrorObject *)object; + return GTLR_AreEqualOrBothNil(_originalFoundationError, + other->_originalFoundationError); +} + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super initWithCoder:decoder]; + if (self) { + _originalFoundationError = + [decoder decodeObjectOfClass:[NSError class] + forKey:kGTLRErrorObjectFoundationErrorKey]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)encoder { + [super encodeWithCoder:encoder]; + [encoder encodeObject:_originalFoundationError + forKey:kGTLRErrorObjectFoundationErrorKey]; +} + +@end + +@implementation GTLRErrorObjectErrorItem +@dynamic domain; +@dynamic reason; +@dynamic message; +@dynamic location; +@end + +@implementation GTLRErrorObjectDetail +@dynamic type; +@dynamic detail; + ++ (NSDictionary *)propertyToJSONKeyMap { + return @{ @"type" : @"@type" }; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRObject.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRObject.h new file mode 100644 index 0000000..8f54dff --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRObject.h @@ -0,0 +1,317 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// GTLRObject documentation: +// https://github.com/google/google-api-objectivec-client-for-rest/wiki#objects-and-queries + +#import + +#import "GTLRDefines.h" +#import "GTLRDateTime.h" +#import "GTLRDuration.h" + +NS_ASSUME_NONNULL_BEGIN + +@class GTLRObject; + +/** + * Protocol that can be implemented to provide custom logic for what class + * should be created out of the given JSON. + */ +@protocol GTLRObjectClassResolver +- (Class)classForJSON:(NSDictionary *)json + defaultClass:(Class)defaultClass; +@end + +/** + * Standard GTLRObjectClassResolver used by the core library. + */ +@interface GTLRObjectClassResolver : NSObject + +/** + * Returns a resolver that will look up the 'kind' properties to find classes + * based on the JSON. + * + * The generated service classes provide a +kindStringToClassMap method for any + * mappings that were found from discovery when generating the service. + */ ++ (instancetype)resolverWithKindMap:(NSDictionary *)kindStringToClassMap; + +/** + * Returns a resolver that will look up the 'kind' properties to find classes + * based on the JSON and then applies mapping of surrogate classes to swap out + * specific classes. + * + * Surrogates are subclasses to be instantiated instead of standard classes + * when creating objects from the JSON. For example, this code will, for one query's + * execution, swap a service's default resolver for one that will then use + * MyCalendarEventSubclass instead of GTLRCalendarEvent and + * MyCalendarReminderSubclass instead of GTLRCalendarReminder. + * + * @code + * NSDictionary *surrogates = @{ + * [GTLRCalendarEvent class] : [MyCalendarEventSubclass class] + * [GTLRCalendarReminder class] : [MyCalendarReminderSubclass class], + * }; + * NSDictionary *serviceKindMap = [[calendarService class] kindStringToClassMap]; + * GTLRObjectClassResolver *updatedResolver = + * [GTLRObjectClassResolver resolverWithKindMap:serviceKindMap + * surrogates:surrogates]; + * query.executionParameters.objectClassResolver = updatedResolver; + * @endcode + * + * @note To install surrogates for all queries executed by the service, use + * the service's @c -setSurrogates method. + */ ++ (instancetype)resolverWithKindMap:(NSDictionary *)kindStringToClassMap + surrogates:(NSDictionary *)surrogates; + +@end + +/** + * @c GTLRObject serves as the common superclass for classes wrapping JSON, errors, and other data + * passed in server requests and responses. + * + * @note This class is @em not safe for simultaneous use from multiple threads. Applications should + * serialize or protect access to a @c GTLRObject instance as they would for any standard + * Cocoa mutable container. + */ +@interface GTLRObject : NSObject + +/** + * The JSON underlying the property values for this object. + * + * The JSON should be accessed or set using the generated properties of a + * class derived from GTLRObject or with the methods @c setJSONValue:forKey: + * and @c JSONValueForKey: + * + * @note: Applications should use @c additionalPropertyForKey: when accessing + * API object properties that do not have generated @c \@property accessors. + */ +@property(nonatomic, strong, nullable) NSMutableDictionary *JSON; + +/** + * A dictionary retained by the object for the convenience of the client application. + * + * A client application may use this to retain any dictionary. + * + * The values of the user properties dictionary will not be sent to the server during + * query execution, and will not be copied by NSCopying or encoded by NSSecureCoding. + */ +@property(nonatomic, strong) NSDictionary *userProperties; + +///////////////////////////////////////////////////////////////////////////////////////////// +// +// Public methods +// +// These methods are intended for users of the library +// +///////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Constructor for an empty object. + */ ++ (instancetype)object; + +/** + * Constructor for an object including JSON. + */ ++ (instancetype)objectWithJSON:(nullable NSDictionary *)dict; + +/** + * Constructor for an object including JSON and providing a resolver to help + * select the correct classes for sub objects within the json. + * + * The generated services provide a default resolver (-objectClassResolver) + * that covers the kinds for that service. They also expose the kind mappings + * via the +kindStringToClassMap method. + */ ++ (instancetype)objectWithJSON:(nullable NSDictionary *)dict + objectClassResolver:(id)objectClassResolver; + +/** + * The JSON for the object, or an empty string if there is no JSON or if the JSON + * dictionary cannot be represented as JSON. + */ +- (NSString *)JSONString; + +/** + * Generic access for setting entries in the JSON dictionary. This creates the JSON dictionary + * if necessary. + * + * @note: Applications should use @c setAdditionalProperty:forKey: when setting + * API object properties that do not have generated @c \@property accessors. + */ +- (void)setJSONValue:(nullable id)obj forKey:(nonnull NSString *)key; + +/** + * Generic access to the JSON dictionary. + * + * @note: Applications should use @c additionalPropertyForKey: when accessing + * API object properties that do not have generated @c \@property accessors. + */ +- (nullable id)JSONValueForKey:(NSString *)key; + +/** + * The list of keys in this object's JSON that are not listed as properties on the object. + */ +- (nullable NSArray *)additionalJSONKeys; + +/** + * Setter for any key in the JSON that is not listed as a @c \@property in the class declaration. + */ +- (void)setAdditionalProperty:(id)obj forName:(NSString *)name; + +/** + * Accessor for any key in the JSON that is not listed as a @c \@property in the class + * declaration. + */ +- (nullable id)additionalPropertyForName:(NSString *)name; + +/** + * A dictionary of all keys in the JSON that is not listed as a @c \@property in the class + * declaration. + */ +- (NSDictionary *)additionalProperties; + +/** + * A string for a partial query describing the fields present. + * + * @note Only the first element of any array is examined. + * + * @see https://developers.google.com/google-apps/tasks/performance?csw=1#partial + * + * @return A @c fields string describing the fields present in the object. + */ +- (NSString *)fieldsDescription; + +/** + * An object containing only the changes needed to do a partial update (patch), + * where the patch would be to change an object from the original to the receiver, + * such as + * @c GTLRSomeObject *patchObject = [newVersion patchObjectFromOriginal:oldVersion]; + * + * @note This method returns nil if there are no changes between the original and the receiver. + * + * @see https://developers.google.com/google-apps/tasks/performance?csw=1#patch + * + * @param original The original object from which to create the patch object. + * + * @return The object used for the patch body. + */ +- (nullable id)patchObjectFromOriginal:(GTLRObject *)original; + +/** + * A null value to set object properties for patch queries that delete fields. + * + * Do not use this except when setting an object property for a patch query. + * + * @return The null value object. + */ ++ (id)nullValue; + +#pragma mark Internal + +/////////////////////////////////////////////////////////////////////////////// +// +// Protected methods +// +// These methods are intended for subclasses of GTLRObject +// + +// Creation of objects from a JSON dictionary. The class created depends on +// the content of the JSON, not the class messaged. ++ (nullable GTLRObject *)objectForJSON:(NSMutableDictionary *)json + defaultClass:(nullable Class)defaultClass + objectClassResolver:(id)objectClassResolver; + +// Property-to-key mapping (for JSON keys which are not used as method names) ++ (nullable NSDictionary *)propertyToJSONKeyMap; + +// property-to-Class mapping for array properties (to say what is in the array) ++ (nullable NSDictionary *)arrayPropertyToClassMap; + +// The default class for additional JSON keys ++ (nullable Class)classForAdditionalProperties; + +// Indicates if a "kind" property on this class can be used for the class +// registry or if it appears to be non standard. ++ (BOOL)isKindValidForClassRegistry; + +@end + +/** + * Collection results have a property containing an array of @c GTLRObject + * + * This provides support for @c NSFastEnumeration and for indexed subscripting to + * access the objects in the array. + */ +@interface GTLRCollectionObject : GTLRObject + +/** + * The property name that holds the collection. + * + * @return The key for the property holding the array of @c GTLRObject items. + */ ++ (NSString *)collectionItemsKey; + +// objectAtIndexedSubscript: will throw if the index is out of bounds (like +// NSArray does). +- (nullable id)objectAtIndexedSubscript:(NSUInteger)idx; + +@end + +/** + * A GTLRDataObject holds media data and the MIME type of the data returned by a media + * download query. + * + * The JSON for the object may be nil. + */ +@interface GTLRDataObject : GTLRObject + +/** + * The downloaded media data. + */ +@property(atomic, strong) NSData *data; + +/** + * The MIME type of the downloaded media data. + */ +@property(atomic, copy) NSString *contentType; + +@end + +/** + * Base class used when a service method directly returns an array instead + * of a JSON object. This exists for the methods not up to spec. + */ +@interface GTLRResultArray : GTLRCollectionObject + +/** + * This method should only be called by subclasses. + */ +- (nullable NSArray *)itemsWithItemClass:(Class)itemClass; +@end + +/** + * Helper to call the resolver and find the class to use for the given JSON. + * Intended for internal library use only. + */ +Class GTLRObjectResolveClass( + id objectClassResolver, + NSDictionary *json, + Class defaultClass); + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRObject.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRObject.m new file mode 100644 index 0000000..aaa53fe --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRObject.m @@ -0,0 +1,768 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#include + +#import "GTLRObject.h" +#import "GTLRRuntimeCommon.h" +#import "GTLRUtilities.h" + +static NSString *const kUserDataPropertyKey = @"_userData"; + +static NSString *const kGTLRObjectJSONCoderKey = @"json"; + +static NSMutableDictionary *DeepMutableCopyOfJSONDictionary(NSDictionary *initialJSON); + +@interface GTLRObject () + +@property(nonatomic, strong) idobjectClassResolver; + +@end + +@implementation GTLRObject { + // Any complex object hung off this object goes into the cache so the + // next fetch will get the same object back instead of having to recreate + // it. + NSMutableDictionary *_childCache; +} + +@synthesize JSON = _json, + objectClassResolver = _objectClassResolver, + userProperties = _userProperties; + ++ (instancetype)object { + return [[self alloc] init]; +} + ++ (instancetype)objectWithJSON:(NSDictionary *)dict { + GTLRObject *obj = [self object]; + obj->_json = DeepMutableCopyOfJSONDictionary(dict); + return obj; +} + ++ (instancetype)objectWithJSON:(nullable NSDictionary *)dict + objectClassResolver:(id)objectClassResolver { + GTLRObject *obj = [self objectWithJSON:dict]; + obj->_objectClassResolver = objectClassResolver; + return obj; +} + ++ (NSDictionary *)propertyToJSONKeyMap { + return nil; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + return nil; +} + ++ (Class)classForAdditionalProperties { + return Nil; +} + ++ (BOOL)isKindValidForClassRegistry { + return YES; +} + +- (BOOL)isEqual:(GTLRObject *)other { + if (self == other) return YES; + if (other == nil) return NO; + + // The objects should be the same class, or one should be a subclass of the + // other's class + if (![other isKindOfClass:[self class]] + && ![self isKindOfClass:[other class]]) return NO; + + // What we're not comparing here: + // properties + return GTLR_AreEqualOrBothNil(_json, [other JSON]); +} + +// By definition, for two objects to potentially be considered equal, +// they must have the same hash value. The hash is mostly ignored, +// but removeObjectsInArray: in Leopard does seem to check the hash, +// and NSObject's default hash method just returns the instance pointer. +// We'll define hash here for all of our GTLRObjects. +- (NSUInteger)hash { + return (NSUInteger) (__bridge void *) [GTLRObject class]; +} + +- (id)copyWithZone:(NSZone *)zone { + GTLRObject *newObject = [[[self class] allocWithZone:zone] init]; + newObject.JSON = DeepMutableCopyOfJSONDictionary(self.JSON); + newObject.objectClassResolver = self.objectClassResolver; + + // What we're not copying: + // userProperties + return newObject; +} + +- (NSString *)descriptionWithLocale:(id)locale { + return self.description; +} + ++ (BOOL)supportsSecureCoding { + return YES; +} + +- (instancetype)initWithCoder:(NSCoder *)decoder { + self = [super init]; + if (self) { + // NSDictionary/NSArray seem to allow strings and numbers with secure coding + // just fine, but to allow sub arrays or dictionaries (or an null) the + // classes have to be explicitly listed to decode correctly. + NSSet *expectedClasses = + [NSSet setWithObjects: + [NSMutableDictionary class], [NSMutableArray class], [NSNull class], nil]; + _json = [decoder decodeObjectOfClasses:expectedClasses + forKey:kGTLRObjectJSONCoderKey]; + } + return self; +} + +- (void)encodeWithCoder:(NSCoder *)encoder { + [encoder encodeObject:_json forKey:kGTLRObjectJSONCoderKey]; +} + +#pragma mark JSON values + +- (void)setJSONValue:(id)obj forKey:(NSString *)key { + NSMutableDictionary *dict = self.JSON; + if (dict == nil && obj != nil) { + dict = [NSMutableDictionary dictionaryWithCapacity:1]; + self.JSON = dict; + } + [dict setValue:obj forKey:key]; +} + +- (id)JSONValueForKey:(NSString *)key { + id obj = [self.JSON objectForKey:key]; + return obj; +} + +- (NSString *)JSONString { + NSError *error; + NSDictionary *json = self.JSON; + if (json) { + NSData *data = [NSJSONSerialization dataWithJSONObject:json + options:NSJSONWritingPrettyPrinted + error:&error]; + GTLR_DEBUG_ASSERT(data != nil, @"JSONString generate failed: %@\n JSON: %@", error, json); + if (data) { + NSString *jsonStr = [[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding]; + if (jsonStr) return jsonStr; + } + } + return @""; +} + +- (NSArray *)additionalJSONKeys { + NSArray *knownKeys = [[self class] allKnownKeys]; + NSMutableArray *result; + NSArray *allKeys = _json.allKeys; + if (allKeys) { + result = [NSMutableArray arrayWithArray:allKeys]; + [result removeObjectsInArray:knownKeys]; + // Return nil instead of an empty array. + if (result.count == 0) { + result = nil; + } + } + return result; +} + +#pragma mark Partial - Fields + +- (NSString *)fieldsDescription { + NSString *str = [GTLRObject fieldsDescriptionForJSON:self.JSON]; + return str; +} + ++ (NSString *)fieldsDescriptionForJSON:(NSDictionary *)targetJSON { + // Internal routine: recursively generate a string field description + // by joining elements + NSArray *array = [self fieldsElementsForJSON:targetJSON]; + NSString *str = [array componentsJoinedByString:@","]; + return str; +} + ++ (NSArray *)fieldsElementsForJSON:(NSDictionary *)targetJSON { + // Internal routine: recursively generate an array of field description + // element strings + NSMutableArray *resultFields = [NSMutableArray array]; + + // Sorting the dictionary keys gives us deterministic results when iterating + NSArray *sortedKeys = [targetJSON.allKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; + for (NSString *key in sortedKeys) { + // We'll build a comma-separated list of fields + id value = [targetJSON objectForKey:key]; + if ([value isKindOfClass:[NSString class]] + || [value isKindOfClass:[NSNumber class]]) { + // Basic type (string, number), so the key is what we want + [resultFields addObject:key]; + } else if ([value isKindOfClass:[NSDictionary class]]) { + // Object (dictionary): "parent/child1,parent/child2,parent/child3" + NSArray *subElements = [self fieldsElementsForJSON:value]; + for (NSString *subElem in subElements) { + NSString *prepended = [NSString stringWithFormat:@"%@/%@", + key, subElem]; + [resultFields addObject:prepended]; + } + } else if ([value isKindOfClass:[NSArray class]]) { + // Array; we'll generate from the first array entry: + // "parent(child1,child2,child3)" + // + // Open question: should this instead create the union of elements for + // all items in the array, rather than just get fields from the first + // array object? + if (((NSArray *)value).count > 0) { + id firstObj = [value objectAtIndex:0]; + if ([firstObj isKindOfClass:[NSDictionary class]]) { + // An array of objects + NSString *contentsStr = [self fieldsDescriptionForJSON:firstObj]; + NSString *encapsulated = [NSString stringWithFormat:@"%@(%@)", + key, contentsStr]; + [resultFields addObject:encapsulated]; + } else { + // An array of some basic type, or of arrays + [resultFields addObject:key]; + } + } + } else { + GTLR_ASSERT(0, @"GTLRObject unknown field element for %@ (%@)", + key, NSStringFromClass([value class])); + } + } + return resultFields; +} + +#pragma mark Partial - Patch + +- (id)patchObjectFromOriginal:(GTLRObject *)original { + GTLRObject *resultObj; + NSMutableDictionary *resultJSON = [GTLRObject patchDictionaryForJSON:self.JSON + fromOriginalJSON:original.JSON]; + if (resultJSON.count > 0) { + // Avoid an extra copy by assigning the JSON directly rather than using +objectWithJSON: + resultObj = [[self class] object]; + resultObj.JSON = resultJSON; + } else { + // Client apps should not attempt to patch with an object containing + // empty JSON + resultObj = nil; + } + return resultObj; +} + ++ (NSMutableDictionary *)patchDictionaryForJSON:(NSDictionary *)newJSON + fromOriginalJSON:(NSDictionary *)originalJSON { + // Internal recursive routine to create an object suitable for + // our patch semantics + NSMutableDictionary *resultJSON = [NSMutableDictionary dictionary]; + + // Iterate through keys present in the old object + NSArray *originalKeys = originalJSON.allKeys; + for (NSString *key in originalKeys) { + id originalValue = [originalJSON objectForKey:key]; + id newValue = [newJSON valueForKey:key]; + if (newValue == nil) { + // There is no new value for this key, so set the value to NSNull + [resultJSON setValue:[NSNull null] forKey:key]; + } else if (!GTLR_AreEqualOrBothNil(originalValue, newValue)) { + // The values for this key differ + if ([originalValue isKindOfClass:[NSDictionary class]] + && [newValue isKindOfClass:[NSDictionary class]]) { + // Both are objects; recurse + NSMutableDictionary *subDict = [self patchDictionaryForJSON:newValue + fromOriginalJSON:originalValue]; + [resultJSON setValue:subDict forKey:key]; + } else { + // They are non-object values; the new replaces the old. Per the + // documentation for patch, this replaces entire arrays. + [resultJSON setValue:newValue forKey:key]; + } + } else { + // The values are the same; omit this key-value pair + } + } + + // Iterate through keys present only in the new object, and add them to the + // result + NSMutableArray *newKeys = [NSMutableArray arrayWithArray:newJSON.allKeys]; + [newKeys removeObjectsInArray:originalKeys]; + + for (NSString *key in newKeys) { + id value = [newJSON objectForKey:key]; + [resultJSON setValue:value forKey:key]; + } + return resultJSON; +} + ++ (id)nullValue { + return [NSNull null]; +} + +#pragma mark Additional Properties + +- (id)additionalPropertyForName:(NSString *)name { + // Return the cached object, if any, before creating one. + id result = [self cacheChildForKey:name]; + if (result != nil) { + return result; + } + + Class defaultClass = [[self class] classForAdditionalProperties]; + id jsonObj = [self JSONValueForKey:name]; + BOOL shouldCache = NO; + if (jsonObj != nil) { + idobjectClassResolver = self.objectClassResolver; + result = [GTLRRuntimeCommon objectFromJSON:jsonObj + defaultClass:defaultClass + objectClassResolver:objectClassResolver + isCacheable:&shouldCache]; + } + + [self setCacheChild:(shouldCache ? result : nil) + forKey:name]; + return result; +} + +- (void)setAdditionalProperty:(id)obj forName:(NSString *)name { + BOOL shouldCache = NO; + Class defaultClass = [[self class] classForAdditionalProperties]; + id json = [GTLRRuntimeCommon jsonFromAPIObject:obj + expectedClass:defaultClass + isCacheable:&shouldCache]; + [self setJSONValue:json forKey:name]; + [self setCacheChild:(shouldCache ? obj : nil) + forKey:name]; +} + +- (NSDictionary *)additionalProperties { + NSMutableDictionary *result = [NSMutableDictionary dictionary]; + + NSArray *propertyNames = [self additionalJSONKeys]; + for (NSString *name in propertyNames) { + id obj = [self additionalPropertyForName:name]; + [result setObject:obj forKey:name]; + } + + return result; +} + +#pragma mark Child Cache methods + +// There is no property for _childCache as there shouldn't be KVC/KVO +// support for it, it's an implementation detail. + +- (void)setCacheChild:(id)obj forKey:(NSString *)key { + if (_childCache == nil && obj != nil) { + _childCache = [[NSMutableDictionary alloc] initWithObjectsAndKeys: + obj, key, nil]; + } else { + [_childCache setValue:obj forKey:key]; + } +} + +- (id)cacheChildForKey:(NSString *)key { + id obj = [_childCache objectForKey:key]; + return obj; +} + +#pragma mark Support methods + ++ (NSMutableArray *)allDeclaredProperties { + NSMutableArray *array = [NSMutableArray array]; + + // walk from this class up the hierarchy to GTLRObject + Class topClass = class_getSuperclass([GTLRObject class]); + for (Class currClass = self; + currClass != topClass; + currClass = class_getSuperclass(currClass)) { + // step through this class's properties, and add the property names to the + // array + objc_property_t *properties = class_copyPropertyList(currClass, NULL); + if (properties) { + for (objc_property_t *prop = properties; + *prop != NULL; + ++prop) { + const char *propName = property_getName(*prop); + // We only want dynamic properties; their attributes contain ",D". + const char *attr = property_getAttributes(*prop); + const char *dynamicMarker = strstr(attr, ",D"); + if (dynamicMarker && + (dynamicMarker[2] == 0 || dynamicMarker[2] == ',' )) { + [array addObject:(id _Nonnull)@(propName)]; + } + } + free(properties); + } + } + return array; +} + ++ (NSArray *)allKnownKeys { + NSArray *allProps = [self allDeclaredProperties]; + NSMutableArray *knownKeys = [NSMutableArray arrayWithArray:allProps]; + + NSDictionary *propMap = [GTLRObject propertyToJSONKeyMapForClass:[self class]]; + + NSUInteger idx = 0; + for (NSString *propName in allProps) { + NSString *jsonKey = [propMap objectForKey:propName]; + if (jsonKey) { + [knownKeys replaceObjectAtIndex:idx + withObject:jsonKey]; + } + ++idx; + } + return knownKeys; +} + +- (NSString *)description { + NSString *jsonDesc = [self JSONDescription]; + + NSString *str = [NSString stringWithFormat:@"%@ %p: %@", + [self class], self, jsonDesc]; + return str; +} + +// Internal utility for creating an appropriate description summary for the object's JSON. +- (NSString *)JSONDescription { + // Find the list of declared and otherwise known JSON keys for this class. + NSArray *knownKeys = [[self class] allKnownKeys]; + + NSMutableString *descStr = [NSMutableString stringWithString:@"{"]; + + NSString *spacer = @""; + for (NSString *key in [[_json allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]) { + NSString *value = nil; + // show question mark for JSON keys not supported by a declared property: + // foo?:"Hi mom." + NSString *qmark = [knownKeys containsObject:key] ? @"" : @"?"; + + // determine property value to dislay + id rawValue = [_json valueForKey:key]; + if ([rawValue isKindOfClass:[NSDictionary class]]) { + // for dictionaries, show the list of keys: + // {key1,key2,key3} + NSArray *subKeys = [((NSDictionary *)rawValue).allKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; + NSString *subkeyList = [subKeys componentsJoinedByString:@","]; + value = [NSString stringWithFormat:@"{%@}", subkeyList]; + } else if ([rawValue isKindOfClass:[NSArray class]]) { + // for arrays, show the number of items in the array: + // [3] + value = [NSString stringWithFormat:@"[%lu]", + (unsigned long)((NSArray *)rawValue).count]; + } else if ([rawValue isKindOfClass:[NSString class]]) { + // for strings, show the string in quotes: + // "Hi mom." + value = [NSString stringWithFormat:@"\"%@\"", rawValue]; + } else { + // for numbers, show just the number + value = [rawValue description]; + } + [descStr appendFormat:@"%@%@%@:%@", spacer, key, qmark, value]; + spacer = @" "; + } + [descStr appendString:@"}"]; + return descStr; +} + +#pragma mark Object Instantiation + ++ (GTLRObject *)objectForJSON:(NSMutableDictionary *)json + defaultClass:(Class)defaultClass + objectClassResolver:(id)objectClassResolver { + if (((id)json == [NSNull null]) || json.count == 0) { + if (json != nil && defaultClass != Nil) { + // The JSON included an empty dictionary, just create the object. + Class classToCreate = + GTLRObjectResolveClass(objectClassResolver, + [NSDictionary dictionary], + defaultClass); + return [classToCreate object]; + } + // No actual result, such as the response from a delete. + return nil; + } + + if (defaultClass == Nil) { + defaultClass = self; + } + + Class classToCreate = + GTLRObjectResolveClass(objectClassResolver, json, defaultClass); + + // now instantiate the GTLRObject + GTLRObject *parsedObject = [classToCreate object]; + parsedObject.objectClassResolver = objectClassResolver; + parsedObject.JSON = json; + return parsedObject; +} + +#pragma mark Runtime Utilities + +static NSMutableDictionary *gJSONKeyMapCache = nil; +static NSMutableDictionary *gArrayPropertyToClassMapCache = nil; + ++ (void)initialize { + // Note that initialize is guaranteed by the runtime to be called in a + // thread-safe manner + if (gJSONKeyMapCache == nil) { + gJSONKeyMapCache = [[NSMutableDictionary alloc] init]; + } + if (gArrayPropertyToClassMapCache == nil) { + gArrayPropertyToClassMapCache = [[NSMutableDictionary alloc] init]; + } +} + ++ (NSDictionary *)propertyToJSONKeyMapForClass:(Class)aClass { + NSDictionary *resultMap = + [GTLRRuntimeCommon mergedClassDictionaryForSelector:@selector(propertyToJSONKeyMap) + startClass:aClass + ancestorClass:[GTLRObject class] + cache:gJSONKeyMapCache]; + return resultMap; +} + ++ (NSDictionary *)arrayPropertyToClassMapForClass:(Class)aClass { + NSDictionary *resultMap = + [GTLRRuntimeCommon mergedClassDictionaryForSelector:@selector(arrayPropertyToClassMap) + startClass:aClass + ancestorClass:[GTLRObject class] + cache:gArrayPropertyToClassMapCache]; + return resultMap; +} + +#pragma mark Runtime Support + ++ (Class)ancestorClass { + return [GTLRObject class]; +} + ++ (BOOL)resolveInstanceMethod:(SEL)sel { + BOOL resolved = [GTLRRuntimeCommon resolveInstanceMethod:sel onClass:self]; + if (resolved) + return YES; + + return [super resolveInstanceMethod:sel]; +} + +@end + +@implementation GTLRCollectionObject + ++ (NSString *)collectionItemsKey { + // GTLRCollectionObject fast enumeration, indexed access, and automatic pagination + // (when shouldFetchNextPages is enabled) applies to the object array property "items". + // The array property's key may be different if subclasses override this method. + return @"items"; +} + +- (id)objectAtIndexedSubscript:(NSUInteger)idx { + NSString *key = [[self class] collectionItemsKey]; + NSArray *items = [self valueForKey:key]; + if (items == nil) { + [NSException raise:NSRangeException + format:@"index %lu beyond bounds (%@ property \"%@\" is nil)", + (unsigned long)idx, [self class], key]; + } + id result = [items objectAtIndexedSubscript:idx]; + return result; +} + +// NSFastEnumeration protocol +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state + objects:(__unsafe_unretained id _Nonnull *)stackbuf + count:(NSUInteger)len { + NSString *key = [[self class] collectionItemsKey]; + NSArray *items = [self valueForKey:key]; + NSUInteger result = [items countByEnumeratingWithState:state + objects:stackbuf + count:len]; + return result; +} + +@end + +@implementation GTLRDataObject + +@synthesize data = _data, + contentType = _contentType; + +- (NSString *)description { + NSString *jsonDesc = @""; + if (self.JSON.count > 0) { + jsonDesc = [self JSONDescription]; + } + return [NSString stringWithFormat:@"%@ %p: %lu bytes, contentType:%@ %@", + [self class], self, (unsigned long)self.data.length, self.contentType, + jsonDesc]; +} + +- (id)copyWithZone:(NSZone *)zone { + GTLRDataObject *newObj = [super copyWithZone:zone]; + newObj.data = [self.data copy]; + newObj.contentType = self.contentType; + return newObj; +} + +@end + +@implementation GTLRResultArray + +- (NSArray *)itemsWithItemClass:(Class)itemClass { + // Return the cached array before creating on demand. + NSString *cacheKey = @"result_array_items"; + NSMutableArray *cachedArray = [self cacheChildForKey:cacheKey]; + if (cachedArray != nil) { + return cachedArray; + } + NSArray *result = nil; + NSArray *array = (NSArray *)self.JSON; + if (array != nil) { + if ([array isKindOfClass:[NSArray class]]) { + idobjectClassResolver = self.objectClassResolver; + result = [GTLRRuntimeCommon objectFromJSON:array + defaultClass:itemClass + objectClassResolver:objectClassResolver + isCacheable:NULL]; + } else { +#if DEBUG + if (![array isKindOfClass:[NSNull class]]) { + GTLR_DEBUG_LOG(@"GTLRObject: unexpected JSON: %@ should be an array, actually is a %@:\n%@", + NSStringFromClass([self class]), + NSStringFromClass([array class]), + array); + } +#endif + result = array; + } + } + + [self setCacheChild:result forKey:cacheKey]; + return result; +} + +- (NSString *)JSONDescription { + // Just like GTLRObject's handing of arrays, just return the count. + return [NSString stringWithFormat:@"[%lu]", (unsigned long)self.JSON.count]; +} + +@end + +Class GTLRObjectResolveClass( + idobjectClassResolver, + NSDictionary *json, + Class defaultClass) { + Class result = [objectClassResolver classForJSON:json + defaultClass:defaultClass]; + if (result == Nil) { + result = defaultClass; + } + return result; +} + +@implementation GTLRObjectClassResolver { + NSDictionary *_kindToClassMap; + NSDictionary *_surrogates; +} + ++ (instancetype)resolverWithKindMap:(NSDictionary *)kindStringToClassMap { + GTLRObjectClassResolver *result = [[self alloc] initWithKindMap:kindStringToClassMap + surrogates:nil]; + return result; +} + ++ (instancetype)resolverWithKindMap:(NSDictionary *)kindStringToClassMap + surrogates:(NSDictionary *)surrogates { + GTLRObjectClassResolver *result = [[self alloc] initWithKindMap:kindStringToClassMap + surrogates:surrogates]; + return result; +} + +- (instancetype)initWithKindMap:(NSDictionary *)kindStringToClassMap + surrogates:(NSDictionary *)surrogates { + self = [super init]; + if (self) { + _kindToClassMap = [kindStringToClassMap copy]; + _surrogates = [surrogates copy]; + } + return self; +} + +- (Class)classForJSON:(NSDictionary *)json + defaultClass:(Class)defaultClass { + Class result = defaultClass; + + // Apply kind map. + BOOL shouldUseKind = (result == Nil) || [result isKindValidForClassRegistry]; + if (shouldUseKind && [json isKindOfClass:[NSDictionary class]]) { + NSString *kind = [json valueForKey:@"kind"]; + if ([kind isKindOfClass:[NSString class]] && kind.length > 0) { + Class dynamicClass = [_kindToClassMap objectForKey:kind]; + if (dynamicClass) { + result = dynamicClass; + } + } + } + + // Apply surrogate map. + Class surrogate = [_surrogates objectForKey:result]; + if (surrogate) { + result = surrogate; + } + + return result; +} + +@end + +static NSMutableDictionary *DeepMutableCopyOfJSONDictionary(NSDictionary *initialJSON) { + if (!initialJSON) return nil; + + NSMutableDictionary *result; + CFPropertyListRef ref = CFPropertyListCreateDeepCopy(kCFAllocatorDefault, + (__bridge CFPropertyListRef)(initialJSON), + kCFPropertyListMutableContainers); + if (ref) { + result = CFBridgingRelease(ref); + } else { + // Failed to copy, probably due to a non-plist type such as NSNull. + // + // As a fallback, round-trip through NSJSONSerialization. + NSError *serializationError; + NSData *data = [NSJSONSerialization dataWithJSONObject:initialJSON + options:0 + error:&serializationError]; + if (!data) { + GTLR_DEBUG_ASSERT(0, @"Copy failed due to serialization: %@\nJSON: %@", + serializationError, initialJSON); + } else { + result = [NSJSONSerialization JSONObjectWithData:data + options:NSJSONReadingMutableContainers + error:&serializationError]; + GTLR_DEBUG_ASSERT(result != nil, @"Copy failed due to deserialization: %@\nJSON: %@", + serializationError, + [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); + } + } + return result; +} diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRQuery.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRQuery.h new file mode 100644 index 0000000..897153f --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRQuery.h @@ -0,0 +1,253 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// Query documentation: +// https://github.com/google/google-api-objectivec-client-for-rest/wiki#query-operations + +#import "GTLRObject.h" +#import "GTLRUploadParameters.h" + +NS_ASSUME_NONNULL_BEGIN + +@class GTLRServiceTicket; +@class GTLRServiceExecutionParameters; +@class GTLRQuery; + +/** + * This protocol is just to support passing of either a batch or a single query + * to a GTLRService instance. The library does not expect or support client app + * implementations of this protocol. + */ +@protocol GTLRQueryProtocol + +/** + * Service ticket values may be set in the execution parameters for an individual query + * prior to executing the query. + */ +@property(atomic, strong, null_resettable) GTLRServiceExecutionParameters *executionParameters; + +- (BOOL)isBatchQuery; +- (BOOL)hasExecutionParameters; +- (BOOL)shouldSkipAuthorization; +- (void)invalidateQuery; +- (nullable NSDictionary *)additionalHTTPHeaders; +- (nullable NSDictionary *)additionalURLQueryParameters; +- (nullable NSString *)loggingName; +- (nullable GTLRUploadParameters *)uploadParameters; + +@end + +@protocol GTLRQueryCollectionProtocol +@optional +@property(nonatomic, strong) NSString *pageToken; +@end + +/** + * A block called when a query completes executing. + * + * Errors passed to the completionBlock will have an "underlying" GTLRErrorObject + * when the server returned an error for this specific query: + * + * GTLRErrorObject *errorObj = [GTLRErrorObject underlyingObjectForError:callbackError]; + * if (errorObj) { + * // The server returned this error for this specific query. + * } else { + * // The query execution fetch failed. + * } + * + * @param callbackTicket The ticket that tracked query execution. + * @param object The result of query execution. This will be derived from + * GTLRObject. + * @param callbackError If non-nil, the query execution failed. + */ +typedef void (^GTLRQueryCompletionBlock)(GTLRServiceTicket *callbackTicket, + id _Nullable object, + NSError * _Nullable callbackError); + +/** + * Class for a single query. + */ +@interface GTLRQuery : NSObject + +/** + * The object to be uploaded with the query. The JSON of this object becomes + * the body for PUT and POST requests. + */ +@property(atomic, strong, nullable) GTLRObject *bodyObject; + +/** + * Each query must have a request ID string. The client app may replace the + * default assigned request ID with a custom string, provided that if + * used in a batch query, all request IDs in the batch must be unique. + */ +@property(atomic, copy) NSString *requestID; + +/** + * For queries which support file upload, the MIME type and file URL + * or data must be provided. + */ +@property(atomic, copy, nullable) GTLRUploadParameters *uploadParameters; + +/** + * Any additional URL query parameters for this query. + * + * These query parameters override the same keys from the service object's + * additionalURLQueryParameters + */ +@property(atomic, copy, nullable) NSDictionary *additionalURLQueryParameters; + +/** + * Any additional HTTP headers for this query. + * + * These headers override the same keys from the service object's additionalHTTPHeaders + */ +@property(atomic, copy, nullable) NSDictionary *additionalHTTPHeaders; + +/** + * If set, when the query is executed, an @c "alt" query parameter is added + * with this value and the raw result of the query is returned in a + * GTLRDataObject. This is useful when the server documents result datatypes + * other than JSON ("csv", for example). + */ +@property(atomic, copy) NSString *downloadAsDataObjectType; + +/** + * If set, and the query also has a non-empty @c downloadAsDataObjectType, the + * URL to download from will be modified to include "download/". This extra path + * component avoids the need for a server redirect to the download URL. + */ +@property(atomic, assign) BOOL useMediaDownloadService; + +/** + * Clients may set this to YES to disallow authorization. Defaults to NO. + */ +@property(atomic, assign) BOOL shouldSkipAuthorization; + +/** + * An optional callback block to be called immediately before the executeQuery: completion handler. + * + * The completionBlock property is particularly useful for queries executed in a batch. + */ +@property(atomic, copy, nullable) GTLRQueryCompletionBlock completionBlock; + +/** + * The brief string to identify this query in GTMSessionFetcher http logs. + * + * A default logging name is set by the code generator, but may be overridden by the client app. + */ +@property(atomic, copy, nullable) NSString *loggingName; + +#pragma mark Internal +///////////////////////////////////////////////////////////////////////////////////////////// +// +// Properties below are used by the library and aren't typically needed by client apps. +// +///////////////////////////////////////////////////////////////////////////////////////////// + +/** + * The URITemplate path segment. This is initialized in by the service generator. + */ +@property(atomic, readonly) NSString *pathURITemplate; + +/** + * The HTTP method to use for this query. This is initialized in by the service generator. + */ +@property(atomic, readonly, nullable) NSString *httpMethod; + +/** + * The parameters names that are in the URI Template. + * This is initialized in by the service generator. + * + * The service generator collects these via the discovery info instead of having to parse the + * template to figure out what is part of the path. + */ +@property(atomic, readonly, nullable) NSArray *pathParameterNames; + +/** + * The JSON dictionary of all the parameters set on this query. + * + * The JSON values are set by setting the query's properties. + */ +@property(nonatomic, strong, nullable) NSMutableDictionary *JSON; + +/** + * A custom URI template for resumable uploads. This is initialized by the service generator + * if needed. + */ +@property(atomic, copy, nullable) NSString *resumableUploadPathURITemplateOverride; + +/** + * A custom URI template for simple and multipart media uploads. This is initialized + * by the service generator. + */ +@property(atomic, copy, nullable) NSString *simpleUploadPathURITemplateOverride; + +/** + * The GTLRObject subclass expected for results. This is initialized by the service generator. + * + * This is needed if the object returned by the server lacks a known "kind" string. + */ +@property(atomic, assign, nullable) Class expectedObjectClass; + +/** + * Set when the query has been invalidated, meaning it was slated for execution so it's been copied + * and its callbacks were released, or it's a copy that has finished executing. + * + * Once a query has been invalidated, it cannot be executed, added to a batch, or copied. + */ +@property(atomic, assign, getter=isQueryInvalid) BOOL queryInvalid; + +/** + * Internal query init method. + * + * @param pathURITemplate URI template to be filled in with parameters. + * @param httpMethod The requests's http method. A nil method will execute as GET. + * @param pathParameterNames Names of parameters to be replaced in the template. + */ +- (instancetype)initWithPathURITemplate:(NSString *)pathURITemplate + HTTPMethod:(nullable NSString *)httpMethod + pathParameterNames:(nullable NSArray *)pathParameterNames NS_DESIGNATED_INITIALIZER; + +/** + * @return Auto-generated request ID string. + */ ++ (NSString *)nextRequestID; + +/** + * Overridden by subclasses. + * + * @return Substitute parameter names where needed for Objective-C or library compatibility. + */ ++ (nullable NSDictionary *)parameterNameMap; + +/** + * Overridden by subclasses. + * + * @return Map of property keys to specifying the class of objects to be instantiated in arrays. + */ ++ (nullable NSDictionary *)arrayPropertyToClassMap; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +/** + * The library doesn't use GTLRQueryCollectionImpl, but it provides a concrete implementation + * of the protocol so the methods do not cause private method errors in Xcode/AppStore review. + */ +@interface GTLRQueryCollectionImpl : GTLRQuery +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRQuery.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRQuery.m new file mode 100644 index 0000000..45e16e4 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRQuery.m @@ -0,0 +1,313 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#include + +#import "GTLRQuery.h" +#import "GTLRRuntimeCommon.h" +#import "GTLRService.h" +#import "GTLRUtilities.h" + +@interface GTLRQuery () +@end + +@implementation GTLRQuery { + NSMutableDictionary *_childCache; + GTLRServiceExecutionParameters *_executionParameters; +} + +@synthesize additionalURLQueryParameters = _additionalURLQueryParameters, + additionalHTTPHeaders = _additionalHTTPHeaders, + bodyObject = _bodyObject, + completionBlock = _completionBlock, + downloadAsDataObjectType = _downloadAsDataObjectType, + expectedObjectClass = _expectedObjectClass, + httpMethod = _httpMethod, + JSON = _json, + loggingName = _loggingName, + pathParameterNames = _pathParameterNames, + pathURITemplate = _pathURITemplate, + queryInvalid = _queryInvalid, + requestID = _requestID, + resumableUploadPathURITemplateOverride = _resumableUploadPathURITemplateOverride, + shouldSkipAuthorization = _shouldSkipAuthorization, + simpleUploadPathURITemplateOverride = _simpleUploadPathURITemplateOverride, + uploadParameters = _uploadParameters, + useMediaDownloadService = _useMediaDownloadService; + +#if DEBUG +- (instancetype)init { + [self doesNotRecognizeSelector:_cmd]; + self = nil; + return self; +} +#endif + +- (instancetype)initWithPathURITemplate:(NSString *)pathURITemplate + HTTPMethod:(nullable NSString *)httpMethod + pathParameterNames:(nullable NSArray *)pathParameterNames { + self = [super init]; + if (self) { + _requestID = [[self class] nextRequestID]; + + _pathURITemplate = [pathURITemplate copy]; + _httpMethod = [httpMethod copy]; + _pathParameterNames = [pathParameterNames copy]; + + if (_pathURITemplate.length == 0) { + self = nil; + } + } + return self; +} + +- (id)copyWithZone:(NSZone *)zone { + GTLR_DEBUG_ASSERT(!self.queryInvalid, @"Cannot copy an executed query: %@", self); + + GTLRQuery *query = + [[[self class] allocWithZone:zone] initWithPathURITemplate:self.pathURITemplate + HTTPMethod:self.httpMethod + pathParameterNames:self.pathParameterNames]; + + if (_json.count > 0) { + // Deep copy the parameters + CFPropertyListRef ref = CFPropertyListCreateDeepCopy(kCFAllocatorDefault, + (__bridge CFPropertyListRef)(_json), + kCFPropertyListMutableContainers); + query.JSON = CFBridgingRelease(ref); + } + + // Using the executionParameters ivar avoids creating the object. + query.executionParameters = self.executionParameters; + + // Copied in the same order as synthesized above. + query.additionalHTTPHeaders = self.additionalHTTPHeaders; + query.additionalURLQueryParameters = self.additionalURLQueryParameters; + query.bodyObject = self.bodyObject; + query.completionBlock = self.completionBlock; + query.downloadAsDataObjectType = self.downloadAsDataObjectType; + query.expectedObjectClass = self.expectedObjectClass; + // http method passed to init above. + // JSON copied above. + query.loggingName = self.loggingName; + // pathParameterNames passed to init above. + // pathURITemplate passed to init above. + query.queryInvalid = self.queryInvalid; + query.requestID = self.requestID; + query.resumableUploadPathURITemplateOverride = self.resumableUploadPathURITemplateOverride; + query.shouldSkipAuthorization = self.shouldSkipAuthorization; + query.simpleUploadPathURITemplateOverride = self.simpleUploadPathURITemplateOverride; + query.uploadParameters = self.uploadParameters; + query.useMediaDownloadService = self.useMediaDownloadService; + + return query; +} + +#if DEBUG +- (NSString *)description { + NSArray *keys = self.JSON.allKeys; + NSArray *params = [keys sortedArrayUsingSelector:@selector(compare:)]; + NSString *paramsSummary = @""; + if (params.count > 0) { + paramsSummary = [NSString stringWithFormat:@" params:(%@)", + [params componentsJoinedByString:@","]]; + } + + NSString *invalidStr = @""; + if (self.queryInvalid) { + invalidStr = @" [callbacks released]"; + } + + keys = self.additionalURLQueryParameters.allKeys; + NSArray *urlQParams = [keys sortedArrayUsingSelector:@selector(compare:)]; + NSString *urlQParamsSummary = @""; + if (urlQParams.count > 0) { + urlQParamsSummary = [NSString stringWithFormat:@" urlQParams:(%@)", + [urlQParams componentsJoinedByString:@","]]; + } + + GTLRObject *bodyObj = self.bodyObject; + NSString *bodyObjSummary = @""; + if (bodyObj != nil) { + bodyObjSummary = [NSString stringWithFormat:@" bodyObject:%@", [bodyObj class]]; + } + + NSString *uploadStr = @""; + GTLRUploadParameters *uploadParams = self.uploadParameters; + if (uploadParams) { + uploadStr = [NSString stringWithFormat:@" %@", uploadParams]; + } + + NSString *httpMethod = self.httpMethod; + if (httpMethod == nil) { + httpMethod = @"GET"; + } + + NSString *dataObjectType = self.downloadAsDataObjectType; + NSString *downloadStr = @""; + if (dataObjectType.length > 0) { + downloadStr = + [NSString stringWithFormat:@" downloadDataAs:%@", dataObjectType]; + } + + return [NSString stringWithFormat:@"%@ %p:%@%@ {%@ pathTemplate:%@%@%@%@%@}", + [self class], self, invalidStr, downloadStr, + httpMethod, self.pathURITemplate, + paramsSummary, urlQParamsSummary, bodyObjSummary, uploadStr]; +} +#endif // DEBUG + +- (BOOL)isBatchQuery { + return NO; +} + +- (void)invalidateQuery { + self.queryInvalid = YES; + self.completionBlock = nil; + self.executionParameters = nil; +} + +- (GTLRServiceExecutionParameters *)executionParameters { + @synchronized(self) { + if (!_executionParameters) { + _executionParameters = [[GTLRServiceExecutionParameters alloc] init]; + } + return _executionParameters; + } +} + +- (void)setExecutionParameters:(nullable GTLRServiceExecutionParameters *)executionParameters { + @synchronized(self) { + _executionParameters = executionParameters; + } +} + +- (BOOL)hasExecutionParameters { + return self.executionParameters.hasParameters; +} + ++ (NSString *)nextRequestID { + static NSUInteger lastRequestID = 0; + NSString *result; + + @synchronized([GTLRQuery class]) { + ++lastRequestID; + result = [NSString stringWithFormat:@"gtlr_%lu", (unsigned long)lastRequestID]; + } + return result; +} + +#pragma mark GTLRRuntimeCommon Support + +- (void)setJSONValue:(id)obj forKey:(NSString *)key { + NSMutableDictionary *dict = self.JSON; + if (dict == nil && obj != nil) { + dict = [NSMutableDictionary dictionaryWithCapacity:1]; + self.JSON = dict; + } + [dict setValue:obj forKey:key]; +} + +- (id)JSONValueForKey:(NSString *)key { + id obj = [self.JSON objectForKey:key]; + return obj; +} + +// There is no property for _childCache as there shouldn't be KVC/KVO +// support for it, since it's an implementation detail. + +- (void)setCacheChild:(id)obj forKey:(NSString *)key { + if (_childCache == nil && obj != nil) { + _childCache = [[NSMutableDictionary alloc] initWithObjectsAndKeys:obj, key, nil]; + } else { + [_childCache setValue:obj forKey:key]; + } +} + +- (id)cacheChildForKey:(NSString *)key { + id obj = [_childCache objectForKey:key]; + return obj; +} + +#pragma mark Methods for Subclasses to Override + ++ (NSDictionary *)parameterNameMap { + return nil; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + return nil; +} + +#pragma mark Runtime Utilities + +static NSMutableDictionary *gQueryParameterNameMapCache = nil; +static NSMutableDictionary *gQueryArrayPropertyToClassMapCache = nil; + ++ (void)initialize { + // Note that +initialize is guaranteed by the runtime to be called in a thread-safe manner. + if (gQueryParameterNameMapCache == nil) { + gQueryParameterNameMapCache = [[NSMutableDictionary alloc] init]; + } + if (gQueryArrayPropertyToClassMapCache == nil) { + gQueryArrayPropertyToClassMapCache = [[NSMutableDictionary alloc] init]; + } +} + ++ (NSDictionary *)propertyToJSONKeyMapForClass:(Class)aClass { + NSDictionary *resultMap = + [GTLRRuntimeCommon mergedClassDictionaryForSelector:@selector(parameterNameMap) + startClass:aClass + ancestorClass:[GTLRQuery class] + cache:gQueryParameterNameMapCache]; + return resultMap; +} + ++ (NSDictionary *)arrayPropertyToClassMapForClass:(Class)aClass { + NSDictionary *resultMap = + [GTLRRuntimeCommon mergedClassDictionaryForSelector:@selector(arrayPropertyToClassMap) + startClass:aClass + ancestorClass:[GTLRQuery class] + cache:gQueryArrayPropertyToClassMapCache]; + return resultMap; +} + +#pragma mark Runtime Support + +- (id)objectClassResolver { + // Stub method just needed for RuntimeCommon. + return nil; +} + ++ (Class)ancestorClass { + return [GTLRQuery class]; +} + ++ (BOOL)resolveInstanceMethod:(SEL)sel { + BOOL resolved = [GTLRRuntimeCommon resolveInstanceMethod:sel onClass:self]; + if (resolved) return YES; + + return [super resolveInstanceMethod:sel]; +} + +@end + +@implementation GTLRQueryCollectionImpl +@dynamic pageToken; +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.h new file mode 100644 index 0000000..d68f4bb --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.h @@ -0,0 +1,73 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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 + +#import "GTLRDefines.h" + +@protocol GTLRObjectClassResolver; + +NS_ASSUME_NONNULL_BEGIN + +// This protocol and support class are an internal implementation detail so +// GTLRObject and GTLRQuery can share some code. + +/** + * An internal protocol for the GTLR library. + * + * None of these methods should be used by client apps. + */ +@protocol GTLRRuntimeCommon +@required +// Get/Set properties +- (void)setJSONValue:(nullable id)obj forKey:(NSString *)key; +- (id)JSONValueForKey:(NSString *)key; +// Child cache +- (void)setCacheChild:(nullable id)obj forKey:(NSString *)key; +- (nullable id)cacheChildForKey:(NSString *)key; +// Object mapper. +- (nullable id)objectClassResolver; +// Key map ++ (nullable NSDictionary *)propertyToJSONKeyMapForClass:(Class)aClass; +// Array item types ++ (nullable NSDictionary *)arrayPropertyToClassMapForClass:(Class)aClass; +// The parent class for dynamic support ++ (nullable Class)ancestorClass; +@end + +/** + * An internal class for the GTLR library. + * + * None of these methods should be used by client apps. + */ +@interface GTLRRuntimeCommon : NSObject +// Wire things up. ++ (BOOL)resolveInstanceMethod:(SEL)sel onClass:(Class)onClass; +// Helpers ++ (nullable id)objectFromJSON:(id)json + defaultClass:(nullable Class)defaultClass + objectClassResolver:(id)objectClassResolver + isCacheable:(nullable BOOL *)isCacheable; ++ (nullable id)jsonFromAPIObject:(id)obj + expectedClass:(nullable Class)expectedClass + isCacheable:(nullable BOOL *)isCacheable; +// Walk up the class tree merging dictionaries and return the result. ++ (NSDictionary *)mergedClassDictionaryForSelector:(SEL)selector + startClass:(Class)startClass + ancestorClass:(Class)ancestorClass + cache:(NSMutableDictionary *)cache; +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.m new file mode 100644 index 0000000..cef93f9 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.m @@ -0,0 +1,1060 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#include +#include + +#import "GTLRRuntimeCommon.h" + +#import "GTLRDateTime.h" +#import "GTLRDuration.h" +#import "GTLRObject.h" +#import "GTLRUtilities.h" + +// Note: NSObject's class is used as a marker for the expected/default class +// when Discovery says it can be any type of object. + +@implementation GTLRRuntimeCommon + +// Helper to generically convert JSON to an api object type. ++ (id)objectFromJSON:(id)json + defaultClass:(Class)defaultClass + objectClassResolver:(id)objectClassResolver + isCacheable:(BOOL*)isCacheable { + id result = nil; + BOOL canBeCached = YES; + + // TODO(TVL): use defaultClass to validate things like expectedClass is + // done in jsonFromAPIObject:expectedClass:isCacheable:? + + if ([json isKindOfClass:[NSDictionary class]]) { + // If no default, or the default was any object, then default to base + // object here (and hope there is a kind to get the right thing). + if ((defaultClass == Nil) || [defaultClass isEqual:[NSObject class]]) { + defaultClass = [GTLRObject class]; + } + result = [GTLRObject objectForJSON:json + defaultClass:defaultClass + objectClassResolver:objectClassResolver]; + } else if ([json isKindOfClass:[NSArray class]]) { + NSArray *jsonArray = json; + // make an object for each JSON dictionary in the array + NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:jsonArray.count]; + for (id jsonItem in jsonArray) { + id item = [self objectFromJSON:jsonItem + defaultClass:defaultClass + objectClassResolver:objectClassResolver + isCacheable:NULL]; + [resultArray addObject:item]; + } + result = resultArray; + } else if ([json isKindOfClass:[NSString class]]) { + // DateTimes and Durations live in JSON as strings, so convert. + if ([defaultClass isEqual:[GTLRDateTime class]]) { + result = [GTLRDateTime dateTimeWithRFC3339String:json]; + } else if ([defaultClass isEqual:[GTLRDuration class]]) { + result = [GTLRDuration durationWithJSONString:json]; + } else if ([defaultClass isEqual:[NSNumber class]]) { + result = GTLR_EnsureNSNumber(json); + canBeCached = NO; + } else { + result = json; + canBeCached = NO; + } + } else if ([json isKindOfClass:[NSNumber class]] || + [json isKindOfClass:[NSNull class]]) { + result = json; + canBeCached = NO; + } else { + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: unsupported class '%s' in objectFromJSON", + class_getName([json class])); + } + + if (isCacheable) { + *isCacheable = canBeCached; + } + return result; +} + +// Helper to generically convert an api object type to JSON. +// |expectedClass| is the type that was expected for |obj|. ++ (id)jsonFromAPIObject:(id)obj + expectedClass:(Class)expectedClass + isCacheable:(BOOL *)isCacheable { + id result = nil; + BOOL canBeCached = YES; + BOOL checkExpected = (expectedClass != Nil); + + if ([obj isKindOfClass:[NSString class]]) { + result = [obj copy]; + canBeCached = NO; + } else if ([obj isKindOfClass:[NSNumber class]] || + [obj isKindOfClass:[NSNull class]]) { + result = obj; + canBeCached = NO; + } else if ([obj isKindOfClass:[GTLRObject class]]) { + result = [(GTLRObject *)obj JSON]; + if (result == nil) { + // adding an empty object; it should have a JSON dictionary so it can + // hold future assignments + [(GTLRObject *)obj setJSON:[NSMutableDictionary dictionary]]; + result = [(GTLRObject *)obj JSON]; + } + } else if ([obj isKindOfClass:[NSArray class]]) { + checkExpected = NO; + NSArray *array = obj; + // get the JSON for each thing in the array + NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:array.count]; + for (id item in array) { + id itemJSON = [self jsonFromAPIObject:item + expectedClass:expectedClass + isCacheable:NULL]; + [resultArray addObject:itemJSON]; + } + result = resultArray; + } else if ([obj isKindOfClass:[GTLRDateTime class]]) { + // DateTimes live in JSON as strings, so convert. + GTLRDateTime *dateTime = obj; + result = dateTime.RFC3339String; + } else if ([obj isKindOfClass:[GTLRDuration class]]) { + // Durations live in JSON as strings, so convert. + GTLRDuration *duration = obj; + result = duration.jsonString; + } else { + checkExpected = NO; + if (obj) { + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: unsupported class '%s' in jsonFromAPIObject", + class_getName([obj class])); + } + } + + if (checkExpected) { + // If the default was any object, then clear it to skip validation checks. + if ([expectedClass isEqual:[NSObject class]] || + [obj isKindOfClass:[NSNull class]]) { + expectedClass = nil; + } + if (expectedClass && ![obj isKindOfClass:expectedClass]) { + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: jsonFromAPIObject expected class '%s' instead got '%s'", + class_getName(expectedClass), class_getName([obj class])); + } + } + + if (isCacheable) { + *isCacheable = canBeCached; + } + return result; +} + ++ (NSDictionary *)mergedClassDictionaryForSelector:(SEL)selector + startClass:(Class)startClass + ancestorClass:(Class)ancestorClass + cache:(NSMutableDictionary *)cache { + NSDictionary *result; + @synchronized(cache) { + result = [cache objectForKey:startClass]; + if (result == nil) { + // Collect the class's dictionary. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" + NSDictionary *classDict = [startClass performSelector:selector]; +#pragma clang diagnostic pop + + // Collect the parent class's merged dictionary. + NSDictionary *parentClassMergedDict; + if ([startClass isEqual:ancestorClass]) { + parentClassMergedDict = nil; + } else { + Class parentClass = class_getSuperclass(startClass); + parentClassMergedDict = + [self mergedClassDictionaryForSelector:selector + startClass:parentClass + ancestorClass:ancestorClass + cache:cache]; + } + + // Merge this class's into the parent's so things properly override. + NSMutableDictionary *mergeDict; + if (parentClassMergedDict != nil) { + mergeDict = + [NSMutableDictionary dictionaryWithDictionary:parentClassMergedDict]; + } else { + mergeDict = [NSMutableDictionary dictionary]; + } + if (classDict != nil) { + [mergeDict addEntriesFromDictionary:classDict]; + } + + // Make an immutable version. + result = [NSDictionary dictionaryWithDictionary:mergeDict]; + + // Save it. + [cache setObject:result forKey:(id)startClass]; + } + } + return result; +} + +#pragma mark Runtime lookup support + +static objc_property_t PropertyForSel(Class startClass, + SEL sel, BOOL isSetter, + Class *outFoundClass) { + const char *selName = sel_getName(sel); + const char *baseName = selName; + size_t baseNameLen = strlen(baseName); + if (isSetter) { + baseName += 3; // skip "set" + baseNameLen -= 4; // subtract "set" and the final colon + } + + // walk from this class up the hierarchy to the ancestor class + Class topClass = class_getSuperclass([startClass ancestorClass]); + for (Class currClass = startClass; + currClass != topClass; + currClass = class_getSuperclass(currClass)) { + // step through this class's properties + objc_property_t foundProp = NULL; + objc_property_t *properties = class_copyPropertyList(currClass, NULL); + if (properties) { + for (objc_property_t *prop = properties; *prop != NULL; ++prop) { + const char *propAttrs = property_getAttributes(*prop); + const char *dynamicMarker = strstr(propAttrs, ",D"); + if (!dynamicMarker || + (dynamicMarker[2] != 0 && dynamicMarker[2] != ',' )) { + // It isn't dynamic, skip it. + continue; + } + + if (!isSetter) { + // See if this property has an explicit getter=. (the attributes always start with a T, + // so we can check for the leading ','. + const char *getterMarker = strstr(propAttrs, ",G"); + if (getterMarker) { + const char *getterStart = getterMarker + 2; + const char *getterEnd = getterStart; + while ((*getterEnd != 0) && (*getterEnd != ',')) { + ++getterEnd; + } + size_t getterLen = (size_t)(getterEnd - getterStart); + if ((strncmp(selName, getterStart, getterLen) == 0) + && (selName[getterLen] == 0)) { + // return the actual property + foundProp = *prop; + // if requested, return the class containing the property + if (outFoundClass) *outFoundClass = currClass; + break; + } + } // if (getterMarker) + } // if (!isSetter) + + // Search for an exact-name match (a getter), but case-insensitive on the + // first character (in case baseName comes from a setter) + const char *propName = property_getName(*prop); + size_t propNameLen = strlen(propName); + if (baseNameLen == propNameLen + && strncasecmp(baseName, propName, 1) == 0 + && (baseNameLen <= 1 + || strncmp(baseName + 1, propName + 1, baseNameLen - 1) == 0)) { + // return the actual property + foundProp = *prop; + + // if requested, return the class containing the property + if (outFoundClass) *outFoundClass = currClass; + break; + } + } // for (prop in properties) + free(properties); + } + if (foundProp) return foundProp; + } + + // not found; this occasionally happens when the system looks for a method + // like "getFoo" or "descriptionWithLocale:indent:" + return NULL; +} + +typedef NS_ENUM(NSUInteger, GTLRPropertyType) { +#if !defined(__LP64__) || !__LP64__ + // These two only needed in 32bit builds since NSInteger in 64bit ends up in the LongLong paths. + GTLRPropertyTypeInt32 = 1, + GTLRPropertyTypeUInt32, +#endif + GTLRPropertyTypeLongLong = 3, + GTLRPropertyTypeULongLong, + GTLRPropertyTypeFloat, + GTLRPropertyTypeDouble, + GTLRPropertyTypeBool, + GTLRPropertyTypeNSString, + GTLRPropertyTypeNSNumber, + GTLRPropertyTypeGTLRDateTime, + GTLRPropertyTypeGTLRDuration, + GTLRPropertyTypeNSArray, + GTLRPropertyTypeNSObject, + GTLRPropertyTypeGTLRObject, +}; + +typedef struct { + const char *attributePrefix; + + GTLRPropertyType propertyType; + const char *setterEncoding; + const char *getterEncoding; + + // These are the "fixed" return classes, but some properties will require + // looking up the return class instead (because it is a subclass of + // GTLRObject). + const char *returnClassName; + Class returnClass; + BOOL extractReturnClass; + +} GTLRDynamicImpInfo; + +static const GTLRDynamicImpInfo *DynamicImpInfoForProperty(objc_property_t prop, + Class *outReturnClass) { + + if (outReturnClass) *outReturnClass = nil; + + // dynamic method resolution: + // http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html + // + // property runtimes: + // http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html + + // Get and parse the property attributes, which look something like + // T@"NSString",&,D,P + // Ti,D -- NSInteger on 32bit + // Tq,D -- NSInteger on 64bit, long long on 32bit & 64bit + // TB,D -- BOOL comes as bool on 64bit iOS + // Tc,D -- BOOL comes as char otherwise + // T@"NSString",D + // T@"GTLRLink",D + // T@"NSArray",D + + + static GTLRDynamicImpInfo kImplInfo[] = { +#if !defined(__LP64__) || !__LP64__ + { // NSInteger on 32bit + "Ti", + GTLRPropertyTypeInt32, + "v@:i", + "i@:", + nil, nil, + NO + }, + { // NSUInteger on 32bit + "TI", + GTLRPropertyTypeUInt32, + "v@:I", + "I@:", + nil, nil, + NO + }, +#endif + { // NSInteger on 64bit, long long on 32bit and 64bit. + "Tq", + GTLRPropertyTypeLongLong, + "v@:q", + "q@:", + nil, nil, + NO + }, + { // NSUInteger on 64bit, long long on 32bit and 64bit. + "TQ", + GTLRPropertyTypeULongLong, + "v@:Q", + "Q@:", + nil, nil, + NO + }, + { // float + "Tf", + GTLRPropertyTypeFloat, + "v@:f", + "f@:", + nil, nil, + NO + }, + { // double + "Td", + GTLRPropertyTypeDouble, + "v@:d", + "d@:", + nil, nil, + NO + }, +#if defined(OBJC_BOOL_IS_BOOL) && OBJC_BOOL_IS_BOOL + { // BOOL as bool + "TB", + GTLRPropertyTypeBool, + "v@:B", + "B@:", + nil, nil, + NO + }, +#elif defined(OBJC_BOOL_IS_CHAR) && OBJC_BOOL_IS_CHAR + { // BOOL as char + "Tc", + GTLRPropertyTypeBool, + "v@:c", + "c@:", + nil, nil, + NO + }, +#else + #error unknown definition for ObjC BOOL type +#endif + { // NSString + "T@\"NSString\"", + GTLRPropertyTypeNSString, + "v@:@", + "@@:", + "NSString", nil, + NO + }, + { // NSNumber + "T@\"NSNumber\"", + GTLRPropertyTypeNSNumber, + "v@:@", + "@@:", + "NSNumber", nil, + NO + }, + { // GTLRDateTime + "T@\"" GTLR_CLASSNAME_CSTR(GTLRDateTime) "\"", + GTLRPropertyTypeGTLRDateTime, + "v@:@", + "@@:", + GTLR_CLASSNAME_CSTR(GTLRDateTime), nil, + NO + }, + { // GTLRDuration + "T@\"" GTLR_CLASSNAME_CSTR(GTLRDuration) "\"", + GTLRPropertyTypeGTLRDuration, + "v@:@", + "@@:", + GTLR_CLASSNAME_CSTR(GTLRDuration), nil, + NO + }, + { // NSArray with type + "T@\"NSArray\"", + GTLRPropertyTypeNSArray, + "v@:@", + "@@:", + "NSArray", nil, + NO + }, + { // id (any of the objects above) + "T@,", + GTLRPropertyTypeNSObject, + "v@:@", + "@@:", + "NSObject", nil, + NO + }, + { // GTLRObject - Last, cause it's a special case and prefix is general + "T@\"", + GTLRPropertyTypeGTLRObject, + "v@:@", + "@@:", + nil, nil, + YES + }, + }; + + static BOOL hasLookedUpClasses = NO; + if (!hasLookedUpClasses) { + // Unfortunately, you can't put [NSString class] into the static structure, + // so this lookup has to be done at runtime. + hasLookedUpClasses = YES; + for (uint32_t idx = 0; idx < sizeof(kImplInfo)/sizeof(kImplInfo[0]); ++idx) { + if (kImplInfo[idx].returnClassName) { + kImplInfo[idx].returnClass = objc_getClass(kImplInfo[idx].returnClassName); + NSCAssert1(kImplInfo[idx].returnClass != nil, + @"GTLRRuntimeCommon: class lookup failed: %s", kImplInfo[idx].returnClassName); + } + } + } + + const char *attr = property_getAttributes(prop); + + const char *dynamicMarker = strstr(attr, ",D"); + if (!dynamicMarker || + (dynamicMarker[2] != 0 && dynamicMarker[2] != ',' )) { + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: property %s isn't dynamic, attributes %s", + property_getName(prop), attr ? attr : "(nil)"); + return NULL; + } + + const GTLRDynamicImpInfo *result = NULL; + + // Cycle over the list + + for (uint32_t idx = 0; idx < sizeof(kImplInfo)/sizeof(kImplInfo[0]); ++idx) { + const char *attributePrefix = kImplInfo[idx].attributePrefix; + if (strncmp(attr, attributePrefix, strlen(attributePrefix)) == 0) { + result = &kImplInfo[idx]; + if (outReturnClass) *outReturnClass = result->returnClass; + break; + } + } + + if (result == NULL) { + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: unexpected attributes %s for property %s", + attr ? attr : "(nil)", property_getName(prop)); + return NULL; + } + + if (result->extractReturnClass && outReturnClass) { + + // add a null at the next quotation mark + char *attrCopy = strdup(attr); + char *classNameStart = attrCopy + 3; + char *classNameEnd = strstr(classNameStart, "\""); + if (classNameEnd) { + *classNameEnd = '\0'; + + // Lookup the return class + *outReturnClass = objc_getClass(classNameStart); + if (*outReturnClass == nil) { + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: did not find class with name \"%s\" " + @"for property \"%s\" with attributes \"%s\"", + classNameStart, property_getName(prop), attr); + } + } else { + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: Failed to find end of class name for " + @"property \"%s\" with attributes \"%s\"", + property_getName(prop), attr); + } + free(attrCopy); + } + + return result; +} + +// Helper to get the IMP for wiring up the getters. +// NOTE: Every argument passed in should be safe to capture in a block. Avoid +// passing something like selName instead of sel, because nothing says that +// pointer will be valid when it is finally used when the method IMP is invoked +// some time later. +static IMP GTLRRuntimeGetterIMP(SEL sel, + GTLRPropertyType propertyType, + NSString *jsonKey, + Class containedClass, + Class returnClass) { + // Only used in DEBUG logging. +#pragma unused(sel) + + IMP resultIMP; + switch (propertyType) { + +#if !defined(__LP64__) || !__LP64__ + case GTLRPropertyTypeInt32: { + resultIMP = imp_implementationWithBlock(^(id obj) { + NSNumber *num = [obj JSONValueForKey:jsonKey]; + num = GTLR_EnsureNSNumber(num); + NSInteger result = num.integerValue; + return result; + }); + break; + } + + case GTLRPropertyTypeUInt32: { + resultIMP = imp_implementationWithBlock(^(id obj) { + NSNumber *num = [obj JSONValueForKey:jsonKey]; + num = GTLR_EnsureNSNumber(num); + NSUInteger result = num.unsignedIntegerValue; + return result; + }); + break; + } +#endif // __LP64__ + + case GTLRPropertyTypeLongLong: { + resultIMP = imp_implementationWithBlock(^(id obj) { + NSNumber *num = [obj JSONValueForKey:jsonKey]; + num = GTLR_EnsureNSNumber(num); + long long result = num.longLongValue; + return result; + }); + break; + } + + case GTLRPropertyTypeULongLong: { + resultIMP = imp_implementationWithBlock(^(id obj) { + NSNumber *num = [obj JSONValueForKey:jsonKey]; + num = GTLR_EnsureNSNumber(num); + unsigned long long result = num.unsignedLongLongValue; + return result; + }); + break; + } + + case GTLRPropertyTypeFloat: { + resultIMP = imp_implementationWithBlock(^(id obj) { + NSNumber *num = [obj JSONValueForKey:jsonKey]; + num = GTLR_EnsureNSNumber(num); + float result = num.floatValue; + return result; + }); + break; + } + + case GTLRPropertyTypeDouble: { + resultIMP = imp_implementationWithBlock(^(id obj) { + NSNumber *num = [obj JSONValueForKey:jsonKey]; + num = GTLR_EnsureNSNumber(num); + double result = num.doubleValue; + return result; + }); + break; + } + + case GTLRPropertyTypeBool: { + resultIMP = imp_implementationWithBlock(^(id obj) { + NSNumber *num = [obj JSONValueForKey:jsonKey]; + BOOL flag = num.boolValue; + return flag; + }); + break; + } + + case GTLRPropertyTypeNSString: { + resultIMP = imp_implementationWithBlock(^(id obj) { + NSString *str = [obj JSONValueForKey:jsonKey]; + return str; + }); + break; + } + + case GTLRPropertyTypeGTLRDateTime: { + resultIMP = imp_implementationWithBlock(^GTLRDateTime *(GTLRObject *obj) { + // Return the cached object before creating on demand. + GTLRDateTime *cachedDateTime = [obj cacheChildForKey:jsonKey]; + if (cachedDateTime != nil) { + return cachedDateTime; + } + NSString *str = [obj JSONValueForKey:jsonKey]; + id cacheValue, resultValue; + if (![str isKindOfClass:[NSNull class]]) { + GTLRDateTime *dateTime = [GTLRDateTime dateTimeWithRFC3339String:str]; + + cacheValue = dateTime; + resultValue = dateTime; + } else { + cacheValue = nil; + resultValue = [NSNull null]; + } + [obj setCacheChild:cacheValue forKey:jsonKey]; + return resultValue; + }); + break; + } + + case GTLRPropertyTypeGTLRDuration: { + resultIMP = imp_implementationWithBlock(^GTLRDuration *(GTLRObject *obj) { + // Return the cached object before creating on demand. + GTLRDuration *cachedDuration = [obj cacheChildForKey:jsonKey]; + if (cachedDuration != nil) { + return cachedDuration; + } + NSString *str = [obj JSONValueForKey:jsonKey]; + id cacheValue, resultValue; + if (![str isKindOfClass:[NSNull class]]) { + GTLRDuration *duration = [GTLRDuration durationWithJSONString:str]; + + cacheValue = duration; + resultValue = duration; + } else { + cacheValue = nil; + resultValue = [NSNull null]; + } + [obj setCacheChild:cacheValue forKey:jsonKey]; + return resultValue; + }); + break; + } + + case GTLRPropertyTypeNSNumber: { + resultIMP = imp_implementationWithBlock(^(id obj) { + NSNumber *num = [obj JSONValueForKey:jsonKey]; + num = GTLR_EnsureNSNumber(num); + return num; + }); + break; + } + + case GTLRPropertyTypeGTLRObject: { + // Default return class to GTLRObject if it wasn't found. + if (returnClass == Nil) { + returnClass = [GTLRObject class]; + } + resultIMP = imp_implementationWithBlock(^GTLRObject *(GTLRObject *obj) { + // Return the cached object before creating on demand. + GTLRObject *cachedObj = [obj cacheChildForKey:jsonKey]; + if (cachedObj != nil) { + return cachedObj; + } + NSMutableDictionary *dict = [obj JSONValueForKey:jsonKey]; + if ([dict isKindOfClass:[NSMutableDictionary class]]) { + idobjectClassResolver = [obj objectClassResolver]; + GTLRObject *subObj = [GTLRObject objectForJSON:dict + defaultClass:returnClass + objectClassResolver:objectClassResolver]; + [obj setCacheChild:subObj forKey:jsonKey]; + return subObj; + } else if ([dict isKindOfClass:[NSNull class]]) { + [obj setCacheChild:nil forKey:jsonKey]; + return (GTLRObject*)[NSNull null]; + } else if (dict != nil) { + // unexpected; probably got a string -- let the caller figure it out + GTLR_DEBUG_LOG(@"GTLRObject: unexpected JSON: %@.%@ should be a dictionary, actually is a %@:\n%@", + NSStringFromClass([obj class]), + NSStringFromSelector(sel), + NSStringFromClass([dict class]), dict); + return (GTLRObject *)dict; + } + return nil; + }); + break; + } + + case GTLRPropertyTypeNSArray: { + resultIMP = imp_implementationWithBlock(^(GTLRObject *obj) { + // Return the cached array before creating on demand. + NSMutableArray *cachedArray = [obj cacheChildForKey:jsonKey]; + if (cachedArray != nil) { + return cachedArray; + } + NSMutableArray *result = nil; + NSArray *array = [obj JSONValueForKey:jsonKey]; + if (array != nil) { + if ([array isKindOfClass:[NSArray class]]) { + idobjectClassResolver = [obj objectClassResolver]; + result = [GTLRRuntimeCommon objectFromJSON:array + defaultClass:containedClass + objectClassResolver:objectClassResolver + isCacheable:NULL]; + } else { +#if DEBUG + if (![array isKindOfClass:[NSNull class]]) { + GTLR_DEBUG_LOG(@"GTLRObject: unexpected JSON: %@.%@ should be an array, actually is a %@:\n%@", + NSStringFromClass([obj class]), + NSStringFromSelector(sel), + NSStringFromClass([array class]), array); + } +#endif + result = (NSMutableArray *)array; + } + } + [obj setCacheChild:result forKey:jsonKey]; + return result; + }); + break; + } + + case GTLRPropertyTypeNSObject: { + resultIMP = imp_implementationWithBlock(^id(GTLRObject *obj) { + // Return the cached object before creating on demand. + id cachedObj = [obj cacheChildForKey:jsonKey]; + if (cachedObj != nil) { + return cachedObj; + } + id jsonObj = [obj JSONValueForKey:jsonKey]; + if (jsonObj != nil) { + BOOL shouldCache = NO; + idobjectClassResolver = [obj objectClassResolver]; + id result = [GTLRRuntimeCommon objectFromJSON:jsonObj + defaultClass:nil + objectClassResolver:objectClassResolver + isCacheable:&shouldCache]; + + [obj setCacheChild:(shouldCache ? result : nil) + forKey:jsonKey]; + return result; + } + return nil; + }); + break; + } + } // switch(propertyType) + + return resultIMP; +} + +// Helper to get the IMP for wiring up the setters. +// NOTE: Every argument passed in should be safe to capture in a block. Avoid +// passing something like selName instead of sel, because nothing says that +// pointer will be valid when it is finally used when the method IMP is invoked +// some time later. +static IMP GTLRRuntimeSetterIMP(SEL sel, + GTLRPropertyType propertyType, + NSString *jsonKey, + Class containedClass, + Class returnClass) { +#pragma unused(sel, returnClass) + IMP resultIMP; + switch (propertyType) { + +#if !defined(__LP64__) || !__LP64__ + case GTLRPropertyTypeInt32: { + resultIMP = imp_implementationWithBlock(^(id obj, NSInteger val) { + [obj setJSONValue:@(val) forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeUInt32: { + resultIMP = imp_implementationWithBlock(^(id obj, NSUInteger val) { + [obj setJSONValue:@(val) forKey:jsonKey]; + }); + break; + } +#endif // __LP64__ + + case GTLRPropertyTypeLongLong: { + resultIMP = imp_implementationWithBlock(^(id obj, long long val) { + [obj setJSONValue:@(val) forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeULongLong: { + resultIMP = imp_implementationWithBlock(^(id obj, + unsigned long long val) { + [obj setJSONValue:@(val) forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeFloat: { + resultIMP = imp_implementationWithBlock(^(id obj, float val) { + [obj setJSONValue:@(val) forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeDouble: { + resultIMP = imp_implementationWithBlock(^(id obj, double val) { + [obj setJSONValue:@(val) forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeBool: { + resultIMP = imp_implementationWithBlock(^(id obj, BOOL val) { + NSNumber *numValue = (NSNumber *)(val ? kCFBooleanTrue : kCFBooleanFalse); + [obj setJSONValue:numValue forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeNSString: { + resultIMP = imp_implementationWithBlock(^(id obj, NSString *val) { + NSString *copiedStr = [val copy]; + [obj setJSONValue:copiedStr forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeGTLRDateTime: { + resultIMP = imp_implementationWithBlock(^(GTLRObject *obj, + GTLRDateTime *val) { + id cacheValue, jsonValue; + if (![val isKindOfClass:[NSNull class]]) { + jsonValue = val.RFC3339String; + cacheValue = val; + } else { + jsonValue = [NSNull null]; + cacheValue = nil; + } + + [obj setJSONValue:jsonValue forKey:jsonKey]; + [obj setCacheChild:cacheValue forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeGTLRDuration: { + resultIMP = imp_implementationWithBlock(^(GTLRObject *obj, + GTLRDuration *val) { + id cacheValue, jsonValue; + if (![val isKindOfClass:[NSNull class]]) { + jsonValue = val.jsonString; + cacheValue = val; + } else { + jsonValue = [NSNull null]; + cacheValue = nil; + } + + [obj setJSONValue:jsonValue forKey:jsonKey]; + [obj setCacheChild:cacheValue forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeNSNumber: { + resultIMP = imp_implementationWithBlock(^(id obj, NSNumber *val) { + [obj setJSONValue:val forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeGTLRObject: { + resultIMP = imp_implementationWithBlock(^(GTLRObject *obj, + GTLRObject *val) { + id cacheValue, jsonValue; + if (![val isKindOfClass:[NSNull class]]) { + NSMutableDictionary *dict = [val JSON]; + if (dict == nil && val != nil) { + // adding an empty object; it should have a JSON dictionary so it + // can hold future assignments + val.JSON = [NSMutableDictionary dictionary]; + jsonValue = val.JSON; + } else { + jsonValue = dict; + } + cacheValue = val; + } else { + jsonValue = [NSNull null]; + cacheValue = nil; + } + [obj setJSONValue:jsonValue forKey:jsonKey]; + [obj setCacheChild:cacheValue forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeNSArray: { + resultIMP = imp_implementationWithBlock(^(GTLRObject *obj, + NSMutableArray *val) { + id json = [GTLRRuntimeCommon jsonFromAPIObject:val + expectedClass:containedClass + isCacheable:NULL]; + [obj setJSONValue:json forKey:jsonKey]; + [obj setCacheChild:val forKey:jsonKey]; + }); + break; + } + + case GTLRPropertyTypeNSObject: { + resultIMP = imp_implementationWithBlock(^(GTLRObject *obj, + id val) { + BOOL shouldCache = NO; + id json = [GTLRRuntimeCommon jsonFromAPIObject:val + expectedClass:Nil + isCacheable:&shouldCache]; + [obj setJSONValue:json forKey:jsonKey]; + [obj setCacheChild:(shouldCache ? val : nil) + forKey:jsonKey]; + }); + break; + } + } // switch(propertyType) + + return resultIMP; +} + +#pragma mark Runtime - wiring point + ++ (BOOL)resolveInstanceMethod:(SEL)sel onClass:(Class)onClass { + // dynamic method resolution: + // http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html + // + // property runtimes: + // http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html + + const char *selName = sel_getName(sel); + size_t selNameLen = strlen(selName); + char lastChar = selName[selNameLen - 1]; + BOOL isSetter = (lastChar == ':'); + + // look for a declared property matching this selector name exactly + Class foundClass = nil; + + objc_property_t prop = PropertyForSel(onClass, sel, isSetter, &foundClass); + if (prop == NULL || foundClass == nil) { + return NO; // No luck, out of here. + } + + Class returnClass = nil; + const GTLRDynamicImpInfo *implInfo = DynamicImpInfoForProperty(prop, + &returnClass); + if (implInfo == NULL) { + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: unexpected return type class %s for " + @"property \"%s\" of class \"%s\"", + returnClass ? class_getName(returnClass) : "", + property_getName(prop), + class_getName(onClass)); + return NO; // Failed to find our impl info, out of here. + } + + const char *propName = property_getName(prop); + NSString *propStr = @(propName); + + // replace the property name with the proper JSON key if it's + // special-cased with a map in the found class; otherwise, the property + // name is the JSON key + // NOTE: These caches that are built up could likely be dropped and do this + // lookup on demand from the class tree. Most are checked once when a method + // is first resolved, so eventually become wasted memory. + NSDictionary *keyMap = + [[foundClass ancestorClass] propertyToJSONKeyMapForClass:foundClass]; + NSString *jsonKey = [keyMap objectForKey:propStr]; + if (jsonKey == nil) { + jsonKey = propStr; + } + + // For arrays we need to look up what the contained class is. + Class containedClass = nil; + if (implInfo->propertyType == GTLRPropertyTypeNSArray) { + NSDictionary *classMap = + [[foundClass ancestorClass] arrayPropertyToClassMapForClass:foundClass]; + containedClass = [classMap objectForKey:jsonKey]; + if (containedClass == Nil) { + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: expected array item class for " + @"property \"%s\" of class \"%s\"", + property_getName(prop), class_getName(foundClass)); + } + } + + // Wire in the method. + IMP imp; + const char *encoding; + if (isSetter) { + imp = GTLRRuntimeSetterIMP(sel, implInfo->propertyType, + jsonKey, containedClass, returnClass); + encoding = implInfo->setterEncoding; + } else { + imp = GTLRRuntimeGetterIMP(sel, implInfo->propertyType, + jsonKey, containedClass, returnClass); + encoding = implInfo->getterEncoding; + } + if (class_addMethod(foundClass, sel, imp, encoding)) { + return YES; + } + // Not much we can do if this fails, but leave a breadcumb in the log. + GTLR_DEBUG_LOG(@"GTLRRuntimeCommon: Failed to wire %@ on %@ (encoding: %s).", + NSStringFromSelector(sel), + NSStringFromClass(foundClass), + encoding); + return NO; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRService.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRService.h new file mode 100644 index 0000000..721dfd9 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRService.h @@ -0,0 +1,879 @@ +/* Copyright (c) 2016 Google Inc. + * + * 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. + */ + +// Service object documentation: +// https://github.com/google/google-api-objectivec-client-for-rest/wiki#services-and-tickets + +#import + +#import "GTLRDefines.h" +#import "GTLRBatchQuery.h" +#import "GTLRBatchResult.h" +#import "GTLRDateTime.h" +#import "GTLRDuration.h" +#import "GTLRErrorObject.h" +#import "GTLRObject.h" +#import "GTLRQuery.h" + +@class GTMSessionFetcher; +@class GTMSessionFetcherService; +@protocol GTMFetcherAuthorizationProtocol; + +NS_ASSUME_NONNULL_BEGIN + +/** + * The domain used used for NSErrors created by GTLRService query execution. + */ +extern NSString *const kGTLRServiceErrorDomain; + +typedef NS_ENUM(NSInteger, GTLRServiceError) { + GTLRServiceErrorQueryResultMissing = -3000, + GTLRServiceErrorBatchResponseUnexpected = -3001, + GTLRServiceErrorBatchResponseStatusCode = -3002 +}; + +/** + * The kGTLRServiceErrorDomain userInfo key for the server response body. + */ +extern NSString *const kGTLRServiceErrorBodyDataKey; + +/** + * The kGTLRServiceErrorDomain userInfo key for the response content ID, if appropriate. + */ +extern NSString *const kGTLRServiceErrorContentIDKey; + +/** + * The domain used for foundation errors created from GTLRErrorObjects that + * were not originally foundation errors. + */ +extern NSString *const kGTLRErrorObjectDomain; + +/** + * The userInfo key for a GTLRErrorObject for errors with domain kGTLRErrorObjectDomain + * when the error was created from a structured JSON error response body. + */ +extern NSString *const kGTLRStructuredErrorKey; + +/** + * A constant ETag for when updating or deleting a single entry, telling + * the server to replace the current value unconditionally. + * + * Do not use this in entries in a batch feed. + */ +extern NSString *const kGTLRETagWildcard; + +/** + * Notification of a ticket starting. The notification object is the ticket. + * This is posted on the main thread. + * + * Use the stopped notification to log all requests made by the library. + */ +extern NSString *const kGTLRServiceTicketStartedNotification; + +/** + * Notification of a ticket stopping. The notification object is the ticket. + * This is posted on the main thread. + */ +extern NSString *const kGTLRServiceTicketStoppedNotification; + +/** + * Notifications when parsing of a server response or entry begins. + * This is posted on the main thread. + */ +extern NSString *const kGTLRServiceTicketParsingStartedNotification; + +/** + * Notifications when parsing of a server response or entry ends. + * This is posted on the main thread. + */ +extern NSString *const kGTLRServiceTicketParsingStoppedNotification; + +/** + * The header name used to send an Application's Bundle Identifier. + * For more information on adding API restrictions see the docs: + * https://cloud.google.com/docs/authentication/api-keys#api_key_restrictions + */ +extern NSString *const kXIosBundleIdHeader; + +@class GTLRServiceTicket; + +/** + * Callback block for query execution. + * + * @param callbackTicket The ticket that tracked query execution. + * @param object The result of query execution. This will be derived from + * GTLRObject. The object may be nil for operations such as DELETE which + * do not return an object. The object will be a GTLRBatchResult for + * batch operations, and GTLRDataObject for media downloads. + * @param callbackError If non-nil, the query execution failed. For batch requests, + * this may be nil even if individual queries in the batch have failed. + */ +typedef void (^GTLRServiceCompletionHandler)(GTLRServiceTicket *callbackTicket, + id _Nullable object, + NSError * _Nullable callbackError); + +/** + * Callback block for upload of query data. + * + * @param progressTicket The ticket that tracks query execution. + * @param totalBytesUploaded Number of bytes uploaded so far. + * @param totalBytesExpectedToUpload Number of bytes expected to be uploaded. + */ +typedef void (^GTLRServiceUploadProgressBlock)(GTLRServiceTicket *progressTicket, + unsigned long long totalBytesUploaded, + unsigned long long totalBytesExpectedToUpload); + +/** + * Callback block invoked when an eror occurs during query execution. + * + * @param retryTicket The ticket that tracks query execution. + * @param suggestedWillRetry Flag indicating if the library would retry this without a retry block. + * @param fetchError The error that occurred. If the domain is + * kGTMSessionFetcherStatusDomain then the error's code is the server + * response status. Details on the error from the server are available + * in the userInfo via the keys kGTLRStructuredErrorKey and + * NSLocalizedDescriptionKey. + * + * @return YES if the request should be retried. + */ +typedef BOOL (^GTLRServiceRetryBlock)(GTLRServiceTicket *retryTicket, + BOOL suggestedWillRetry, + NSError * _Nullable fetchError); + +/** + * Block to be invoked by a test block. + * + * @param object The faked object, if any, to be passed to the test code's completion handler. + * @param error The faked error if any, to be passed to the test code's completion handler. + */ +typedef void (^GTLRServiceTestResponse)(id _Nullable object, NSError *_Nullable error); + +/** + * A test block enables testing of query execution without any network activity. + * + * The test block must finish by calling the response block, passing either an object + * (GTLRObject or GTLRBatchResult) or an NSError. + * + * The query is available to the test block code as testTicket.originalQuery. + * + * Because query execution is asynchronous, the test code must wait for a callback, + * either with GTLRService's waitForTicket:timeout:fetchedObject:error: or with + * XCTestCase's waitForExpectationsWithTimeout: + * + * Example usage is available in GTLRServiceTest. + * + * @param testTicket The ticket that tracks query execution. + * @param testResponse A block that must be invoked by the test block. This may be invoked + * synchronously or asynchornously. + */ +typedef void (^GTLRServiceTestBlock)(GTLRServiceTicket *testTicket, + GTLRServiceTestResponse testResponse); + +#pragma mark - + +/** + * Base class for the service that executes queries and manages tickets. + * + * Client apps will typically use a generated subclass of GTLRService. + */ +@interface GTLRService : NSObject + +#pragma mark Query Execution + +/** + * Executes the supplied query + * + * Success is indicated in the completion handler by a nil error parameter, not by a non-nil + * object parameter. + * + * The callback block is invoked exactly once unless the ticket is cancelled. + * The callback will be called on the service's callback queue. + * + * Various execution parameters will be taken from the service's properties, unless overridden + * in the query's @c executionParameters property. + * + * A query may only be executed a single time. To reuse a query, make a copy before executing + * it. + * + * To get a NSURLRequest that represents the query, use @c -[GTLRService requestForQuery:] + * + * @param query The API query, either a subclass of GTLRQuery, or a GTLRBatchQuery. + * @param handler The execution callback block. + * + * @return A ticket for tracking or canceling query execution. + */ +- (GTLRServiceTicket *)executeQuery:(id)query + completionHandler:(nullable GTLRServiceCompletionHandler)handler; + +/** + * Executes the supplied query + * + * The callback is invoked exactly once unless the ticket is cancelled. + * The callback will be called on the service's callbackQueue. + * Various execution parameters will be taken from the service's properties, unless overridden + * in the query's @c executionParameters property. + * + * The selector should have a signature matching: + * @code + * - (void)serviceTicket:(GTLRServiceTicket *)callbackTicket + * finishedWithObject:(GTLRObject *)object + * error:(NSError *)callbackError + * @endcode + * + * @param query The API query, either a subclass of GTLRQuery, or a GTLRBatchQuery. + * @param delegate The object to be with the selector to be invoked upon completion. + * @param finishedSelector The selector to be invoked upon completion. + * + * @return A ticket for tracking or canceling query execution. + */ +- (GTLRServiceTicket *)executeQuery:(id)query + delegate:(nullable id)delegate + didFinishSelector:(nullable SEL)finishedSelector; + + +/** + * Enable automatic pagination. + * + * A ticket can optionally do a sequence of fetches for queries where repeated requests + * with a @c nextPageToken query parameter is required to retrieve all pages of + * the response collection. The client's callback is invoked only when all items have + * been retrieved, or an error has occurred. + * + * The final object may be a combination of multiple page responses + * so it may not be the same as if all results had been returned in a single + * page. Some fields of the response may reflect only the final page's values. + * + * Automatic page fetches will return an error if more than 25 page fetches are + * required. For debug builds, this will log a warning to the console when more + * than 2 page fetches occur, as a reminder that the query's @c maxResults parameter + * should probably be increased to specify more items returned per page. + * + * Automatic page accumulation is available for query result objects that are derived + * from GTLRCollectionObject. + * + * This may also be specified for a single query in the query's @c executionParameters property. + * + * Default value is NO. + */ +@property(nonatomic, assign) BOOL shouldFetchNextPages; + +/** + * Some services require a developer key for quotas and limits. + * + * If you have enabled the iOS API Key Restriction, you will want + * to manually set the @c APIKeyRestrictionBundleID property, or + * use -setMainBundleIDRestrictionWithAPIKey: to set your API key + * and set the restriction to the main bundle's bundle id. + */ +@property(nonatomic, copy, nullable) NSString *APIKey; + +/** + * The Bundle Identifier to use for the API key restriction. This will be + * sent in an X-Ios-Bundle-Identifier header; for more information see + * the API key documentation + * https://cloud.google.com/docs/authentication/api-keys#api_key_restrictions + */ +@property(nonatomic, copy, nullable) NSString *APIKeyRestrictionBundleID; + +/** + * Helper method to set the @c APIKey to the given value and set the + * @c APIKeyRestrictionBundleID to the main bundle's bundle identifier. + */ +- (void)setMainBundleIDRestrictionWithAPIKey:(NSString *)apiKey; + +/** + * An authorizer adds user authentication headers to the request as needed. + * + * This may be overridden on individual queries with the @c shouldSkipAuthorization property. + */ +@property(nonatomic, retain, nullable) id authorizer; + +/** + * Enable fetcher retry support. See the explanation of retry support in @c GTMSessionFetcher.h + * + * Default value is NO, but retry is also enabled if the retryBlock is not nil. + * + * This may also be specified for a single query in the query's @c executionParameters property. + */ +@property(nonatomic, assign, getter=isRetryEnabled) BOOL retryEnabled; + +/** + * A retry block may be provided to inspect and change retry criteria. + * + * This may also be specified for a single query in the query's @c executionParameters property. + */ +@property(atomic, copy, nullable) GTLRServiceRetryBlock retryBlock; + +/** + * The maximum retry interval. Retries occur at increasing intervals, up to the specified maximum. + * + * This may also be specified for a single query in the query's @c executionParameters property. + */ +@property(nonatomic, assign) NSTimeInterval maxRetryInterval; + +#pragma mark Fetch Object by Resource URL + +/** + * Fetch an object given the resource URL. This is appropriate when the object's + * full link is known, such as from a selfLink response property. + * + * @param resourceURL The URL of the object to be fetched. + * @param objectClass The GTLRObject subclass to be instantiated. If nil, the library + * will try to infer the class from the object's "kind" string property. + * @param executionParameters Values to override the service's properties when executing the + * ticket. + * @param handler The execution callback block. + * + * @return A ticket for tracking or canceling query execution. + */ +- (GTLRServiceTicket *)fetchObjectWithURL:(NSURL *)resourceURL + objectClass:(nullable Class)objectClass + executionParameters:(nullable GTLRServiceExecutionParameters *)executionParameters + completionHandler:(nullable GTLRServiceCompletionHandler)handler; + +#pragma mark Support for Client Tests + +/** + * A test block can be provided to test service calls without any network activity. + * + * See the description of @c GTLRServiceTestBlock for additional details. + * + * This may also be specified for a single query in the query's @c executionParameters property. + * + * A service instance for testing can also be created with @c +mockServiceWithFakedObject + */ +@property(nonatomic, copy, nullable) GTLRServiceTestBlock testBlock; + +#pragma mark Converting a Query to an NSURLRequest + +/** + * Creates a NSURLRequest from the query object and from properties on this service + * (additionalHTTPHeaders, additionalURLQueryParameters, APIKey) without executing + * it. This can be useful for using @c GTMSessionFetcher or @c NSURLSession to + * perform the fetch. + * + * For requests to non-public resources, the request will not yet be authorized; + * that can be done using the GTLR service's authorizer. Creating a @c GTMSessionFetcher + * from the GTLRService's @c fetcherService will take care of authorization as well. + * + * This works only for GET queries, and only for an individual query, not a batch query. + * + * @note @c Unlike executeQuery:, requestForQuery: does not release the query's callback blocks. + * + * @param query The query used to create the request. + * + * @return A request suitable for use with @c GTMSessionFetcher or @c NSURLSession + */ +- (NSMutableURLRequest *)requestForQuery:(GTLRQuery *)query; + +#pragma mark User Properties + +/** + * The service properties dictionary is copied to become the initial property dictionary + * for each ticket, augmented by a query's execution parameter's properties. + */ +@property(nonatomic, copy, nullable) NSDictionary *serviceProperties; + +#pragma mark JSON to GTLRObject Mapping + +/** + * Specifies subclasses to be created instead of standard library objects, allowing + * an app to add properties and methods to GTLR objects. + * + * This is just a helper method that sets the service's objectClassResolver:. + * + * Example: + * @code + * NSDictionary *surrogates = @{ + * [MyDriveFile class] : [GTLRDrive_File_Surrogate class], + * [MyDriveFileList class] : [GTLRDrive_FileList_Surrogate class] + * }; + * [service setSurrogates:surrogates]; + * @endcode + */ +- (void)setSurrogates:(NSDictionary *)surrogates; + +/** + * Used to decide what GTLRObject subclass to make from the received JSON. + * + * This defaults to a resolver that will use any kindStringToClassMap the service + * provides. + * + * To use a standard resolver with a surrogates dictionary, invoke setSurrogates: instead + * of setting this property. + */ +@property(nonatomic, strong) id objectClassResolver; + +/** + * A dictionary mapping "kind" strings to the GTLObject subclasses that should + * be created for JSON with the given kind. + */ ++ (NSDictionary *)kindStringToClassMap; + +#pragma mark Request Settings + +/** + * The queue used to invoked callbacks. By default, the main queue is used for callbacks. + */ +@property(nonatomic, retain) dispatch_queue_t callbackQueue; + +/** + * Allows the application to make non-SSL and localhost requests for testing. + * + * Default value is NO. + */ +@property(nonatomic, assign) BOOL allowInsecureQueries; + +/** + * The fetcher service creates the fetcher instances for this API service. + * + * Applications may set this to an authorized fetcher service created elsewhere + * in the app, or may take the fetcher service created by this GTLRService and use it + * to create fetchers independent of this service. + */ +@property(nonatomic, retain) GTMSessionFetcherService *fetcherService; + +#pragma mark Custom User Agents + +/** + * Applications needing an additional identifier in the server logs may specify one + * through this property and it will be added to the existing UserAgent. It should + * already be a valid identifier as no cleaning/validation is done. + */ +@property(nonatomic, copy, nullable) NSString *userAgentAddition; + +/** + * A base user-agent based on the application signature in the Info.plist settings. + * + * Most applications should not explicitly set this property. Any string provided will + * be cleaned of inappropriate characters. + */ +@property(nonatomic, copy, nullable) NSString *userAgent; + +/** + * The request user agent includes the library and OS version appended to the + * base userAgent, along with the optional addition string. + */ +@property(nonatomic, readonly, nullable) NSString *requestUserAgent; + +/** + * A precise base userAgent string identifying the application. No cleaning of characters + * is done. Library-specific details will be appended. + * + * @param userAgent A wire-ready user agent string. + */ +- (void)setExactUserAgent:(nullable NSString *)userAgent; + +/** + * A precise userAgent string to send on requests; no cleaning is done. When + * set, requestUserAgent will be exactly this, no library or system information + * will be auto added. + * + * @param requestUserAgent A wire-ready user agent string. + */ +- (void)overrideRequestUserAgent:(nullable NSString *)requestUserAgent; + +/** + * Any additional URL query parameters for the queries executed by this service. + * + * Individual queries may have additionalURLQueryParameters specified as well. + */ +@property(atomic, copy, nullable) NSDictionary *additionalURLQueryParameters; + +/** + * Any additional HTTP headers for this queries executed by this service. + * + * Individual queries may have additionalHTTPHeaders specified as well. + */ +@property(atomic, copy, nullable) NSDictionary *additionalHTTPHeaders; + +#pragma mark Request URL Construction + +/* + * The URL for where to send a Query is built out of these parts + * ( https://developers.google.com/discovery/v1/using#build-compose ) : + * + * service.rootURLString + service.servicePath + query.pathURITemplate + * + * Note: odds are these both should end in a '/', so make sure any value you + * provide will combine correctly with the above rules. + */ + +/** + * The scheme and host for the API server. This may be modified to point at a test server. + */ +@property(nonatomic, copy) NSString *rootURLString; + +/** + * The path for the specific API service instance, relative to the rootURLString. + */ +@property(nonatomic, copy) NSString *servicePath; + +/** + * A path fragment added in to URLs before "servicePath" to build + * the full URL used for resumable media uploads. + */ +@property(nonatomic, copy) NSString *resumableUploadPath; + +/** + * A path fragment added in to URLs before "servicePath" to build + * the full URL used for simple and multipart media uploads. + */ +@property(nonatomic, copy) NSString *simpleUploadPath; + +/** + * A path fragment added in to URLs before "servicePath" to build + * the full URL used for batch requests. + */ +@property(nonatomic, copy) NSString *batchPath; + +#pragma mark Resumable Uploads + +/** + * A block called to track upload progress. + * + * A query's service execution parameters may be used to override this. + */ +@property(nonatomic, copy, nullable) GTLRServiceUploadProgressBlock uploadProgressBlock; + +/** + * The default chunk size for resumable uploads. This defaults to kGTLRStandardUploadChunkSize + * for service subclasses that support chunked uploads. + */ +@property(nonatomic, assign) NSUInteger serviceUploadChunkSize; + +/** + * Service subclasses may override this to specify their own default chunk size for + * resumable uploads. + */ ++ (NSUInteger)defaultServiceUploadChunkSize; + +#pragma mark Internal +///////////////////////////////////////////////////////////////////////////////////////////// +// +// Properties below are used by the library and should not typically be set by client apps. +// +///////////////////////////////////////////////////////////////////////////////////////////// + +/** + * The queue used for parsing JSON responses. + * + * Applications should typically not change this. + */ +@property(nonatomic, retain) dispatch_queue_t parseQueue; + +/** + * If this service supports pretty printing the JSON on the wire, these are + * the names of the query params that enable it. If there are any values, + * the library disables pretty printing to save on bandwidth. + * + * Applications should typically not need change this; the ServiceGenerator + * will set this up when generating the custom subclass. + */ +@property(nonatomic, strong, nullable) NSArray *prettyPrintQueryParameterNames; + +/** + * This indicates if the API requires a "data" JSON element to wrap the payload + * on requests and responses. + * + * Applications should typically not change this. + */ +@property(nonatomic, assign, getter=isDataWrapperRequired) BOOL dataWrapperRequired; + +@end + +@interface GTLRService (TestingSupport) + +/** + * Convenience method to create a mock GTLR service just for testing. + * + * Queries executed by this mock service will not perform any network operation, + * but will invoke callbacks and provide the supplied object or error to the + * completion handler. + * + * You can make more customized mocks by setting the test block property of a service + * or a query's execution parameters. The test block can inspect the query as ticket.originalQuery + * to customize test behavior. + * + * See the description of @c GTLRServiceTestBlock for more details on customized testing. + * + * Example usage is in the unit test method @c testService_MockService_Succeeding + * + * @param object An object derived from GTLRObject to be passed to query completion handlers. + * @param error An error to be passed to query completion handlers. + * + * @return A mock instance of the service, suitable for unit testing. + */ ++ (instancetype)mockServiceWithFakedObject:(nullable id)object + fakedError:(nullable NSError *)error; + +/** + * Wait synchronously for fetch to complete (strongly discouraged) + * + * This method is intended for use only in unit tests and command-line tools. + * Unit tests may also use XCTest's waitForExpectationsWithTimeout: instead of + * or after this method. + * + * This method just runs the current event loop until the fetch completes + * or the timout limit is reached. This may discard unexpected events + * that occur while spinning, so it's really not appropriate for use + * in serious applications. + * + * Returns YES if an object was successfully fetched. If the wait + * timed out, returns NO and the returned error is nil. + * + * @param ticket The ticket being executed. + * @param timeoutInSeconds Maximum duration to wait. + * + * @return YES if the ticket completed or was cancelled; NO if the wait timed out. + */ +- (BOOL)waitForTicket:(GTLRServiceTicket *)ticket + timeout:(NSTimeInterval)timeoutInSeconds; + +@end + +#pragma mark - + +/** + * Service execution parameters may be set on an individual query + * to alter the service's settings. + */ +@interface GTLRServiceExecutionParameters : NSObject + +/** + * Override the service's property @c shouldFetchNextPages for automatic pagination. + * + * A BOOL value should be specified. + */ +@property(atomic, strong, nullable) NSNumber *shouldFetchNextPages; + +/** + * Override the service's property @c shouldFetchNextPages for enabling automatic retries. + * + * A BOOL value should be specified. + * + * Retry is also enabled if the retryBlock is not nil + */ +@property(atomic, strong, nullable, getter=isRetryEnabled) NSNumber *retryEnabled; + +/** + * Override the service's property @c retryBlock for customizing automatic retries. + */ +@property(atomic, copy, nullable) GTLRServiceRetryBlock retryBlock; + +/** + * Override the service's property @c maxRetryInterval for customizing automatic retries. + * + * A NSTimeInterval (double) value should be specified. + */ +@property(atomic, strong, nullable) NSNumber *maxRetryInterval; + +/** + * Override the service's property @c uploadProgressBlock for monitoring upload progress. + */ +@property(atomic, copy, nullable) GTLRServiceUploadProgressBlock uploadProgressBlock; + +/** + * Override the service's property @c callbackQueue for invoking callbacks. + */ +@property(atomic, retain, nullable) dispatch_queue_t callbackQueue; + +/** + * Override the service's property @c testBlock for simulating query execution. + * + * See the description of @c GTLRServiceTestBlock for additional details. + */ +@property(atomic, copy, nullable) GTLRServiceTestBlock testBlock; + +/** + * Override the service's property @c objectClassResolver for controlling object class selection. + */ +@property(atomic, strong, nullable) id objectClassResolver; + +/** + * The ticket's properties are the service properties, with the execution parameter's + * ticketProperties added (replacing any keys already present from the service.) + */ +@property(atomic, copy, nullable) NSDictionary *ticketProperties; + +/** + * Indicates if any of the execution parameters properties are set. + */ +@property(nonatomic, readonly) BOOL hasParameters; + +@end + +/** + * A ticket tracks the progress of a query being executed. + */ +@interface GTLRServiceTicket : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +/** + * The service that issued this ticket. + * + * This method may be invoked from any thread. + */ +@property(atomic, readonly) GTLRService *service; + +#pragma mark Execution Control + +/** + * Invoking cancelTicket stops the fetch if it is in progress. The query callbacks + * will not be invoked. + * + * This method may be invoked from any thread. + */ +- (void)cancelTicket; + +/** + * The time the ticket was created. + */ +@property(atomic, readonly) NSDate *creationDate; + +/** + * Pause the ticket execution. This is valid only for chunked, resumable upload queries. + */ +- (void)pauseUpload; + +/** + * Resume the ticket execution. This is valid only for chunked, resumable upload queries. + */ +- (void)resumeUpload; + +/** + * Checks if the ticket execution is paused. + */ +@property(nonatomic, readonly, getter=isUploadPaused) BOOL uploadPaused; + +/** + * The request being fetched for the query. + */ +@property(nonatomic, readonly, nullable) NSURLRequest *fetchRequest; + +/** + * The fetcher being used for the query request. + */ +@property(atomic, readonly, nullable) GTMSessionFetcher *objectFetcher; + +/** + * The queue used for query callbacks. + */ +@property(atomic, readonly) dispatch_queue_t callbackQueue; + +/** + * The API key used for the query requeat. + */ +@property(atomic, readonly, nullable) NSString *APIKey; + +/** + * The Bundle Identifier to use for the API key restriciton. + */ +@property(atomic, readonly, nullable) NSString *APIKeyRestrictionBundleID; + +#pragma mark Status + +/** + * The server's response status for the query's fetch, if available. + */ +@property(nonatomic, readonly) NSInteger statusCode; + +/** + * The error resulting from the query's fetch, if available. + */ +@property(nonatomic, readonly, nullable) NSError *fetchError; + +/** + * A flag indicating if the query's callbacks have been invoked. + */ +@property(nonatomic, readonly) BOOL hasCalledCallback; + +/** + * A flag indicating if the query execution was cancelled by the client app. + */ +@property(atomic, readonly, getter=isCancelled) BOOL cancelled; + +#pragma mark Pagination + +/** + * A flag indicating if automatic pagination is enabled for the query. + */ +@property(nonatomic, readonly) BOOL shouldFetchNextPages; + +/** + * The number of pages fetched, if automatic pagination is enabled for the query and multiple + * pages have been fetched. + */ +@property(nonatomic, readonly) NSUInteger pagesFetchedCounter; + +#pragma mark User Properties + +/** + * Ticket properties a way to pass values via the ticket for the convenience of the client app. + * + * Ticket properties are initialized from serviceProperties and augmented by the ticketProperties + * of the query's execution parameters. + */ +@property(nonatomic, readonly, nullable) NSDictionary *ticketProperties; + +#pragma mark Payload + +/** + * The object being uploaded via POST, PUT, or PATCH. + */ +@property(nonatomic, readonly, nullable) GTLRObject *postedObject; + +/** + * The object downloaded for the query, after parsing. + */ +@property(nonatomic, readonly, nullable) GTLRObject *fetchedObject; + +/** + * The query currently being fetched by this ticket. This may not be the original query when + * fetching a second or later pages. + */ +@property(atomic, readonly, nullable) id executingQuery; + +/** + * The query used to create this ticket + */ +@property(atomic, readonly, nullable) id originalQuery; + +/** + * The @c GTLRObjectClassResolver for controlling object class selection. + */ +@property(atomic, readonly, strong) id objectClassResolver; + +/** + * The query from within the ticket's batch request with the given ID. + * + * @param requestID The desired ticket's request ID. + * + * @return The query with the specified ID, if found. + */ +- (nullable GTLRQuery *)queryForRequestID:(NSString *)requestID; + +@end + +/** + * The library doesn't use GTLRObjectCollectionImpl, but it provides a concrete implementation + * so the methods do not cause private method errors in Xcode/AppStore review. + */ +@interface GTLRObjectCollectionImpl : GTLRObject +@property(nonatomic, copy) NSString *nextPageToken; +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRService.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRService.m new file mode 100644 index 0000000..ebd347d --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRService.m @@ -0,0 +1,2886 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#import + +#if TARGET_OS_IPHONE +#import +#endif + +#if !defined(GTLR_USE_FRAMEWORK_IMPORTS) + #if defined(COCOAPODS) && COCOAPODS + #define GTLR_USE_FRAMEWORK_IMPORTS 1 + #else + #define GTLR_USE_FRAMEWORK_IMPORTS 0 + #endif +#endif + +#import "GTLRService.h" + +#import "GTLRFramework.h" +#import "GTLRURITemplate.h" +#import "GTLRUtilities.h" + +#if GTLR_USE_FRAMEWORK_IMPORTS + #import + #import + #import +#else + #import "GTMSessionFetcher.h" + #import "GTMSessionFetcherService.h" + #import "GTMMIMEDocument.h" +#endif // GTLR_USE_FRAMEWORK_IMPORTS + + +#ifndef STRIP_GTM_FETCH_LOGGING + #error GTMSessionFetcher headers should have defaulted this if it wasn't already defined. +#endif + +NSString *const kGTLRServiceErrorDomain = @"com.google.GTLRServiceDomain"; +NSString *const kGTLRErrorObjectDomain = @"com.google.GTLRErrorObjectDomain"; +NSString *const kGTLRServiceErrorBodyDataKey = @"body"; +NSString *const kGTLRServiceErrorContentIDKey = @"contentID"; +NSString *const kGTLRStructuredErrorKey = @"GTLRStructuredError"; +NSString *const kGTLRETagWildcard = @"*"; + +NSString *const kGTLRServiceTicketStartedNotification = @"kGTLRServiceTicketStartedNotification"; +NSString *const kGTLRServiceTicketStoppedNotification = @"kGTLRServiceTicketStoppedNotification"; +NSString *const kGTLRServiceTicketParsingStartedNotification = @"kGTLRServiceTicketParsingStartedNotification"; +NSString *const kGTLRServiceTicketParsingStoppedNotification = @"kGTLRServiceTicketParsingStoppedNotification"; + +NSString *const kXIosBundleIdHeader = @"X-Ios-Bundle-Identifier"; + +static NSString *const kDeveloperAPIQueryParamKey = @"key"; + +static const NSUInteger kMaxNumberOfNextPagesFetched = 25; + +static const NSUInteger kMaxGETURLLength = 2048; + +// we'll enforce 50K chunks minimum just to avoid the server getting hit +// with too many small upload chunks +static const NSUInteger kMinimumUploadChunkSize = 50000; + +// Helper to get the ETag if it is defined on an object. +static NSString *ETagIfPresent(GTLRObject *obj) { + NSString *result = [obj.JSON objectForKey:@"etag"]; + return result; +} + +// Merge two dictionaries. Either may be nil. +// If both are nil, return nil. +// In case of a key collision, values of the second dictionary prevail. +static NSDictionary *MergeDictionaries(NSDictionary *recessiveDict, NSDictionary *dominantDict) { + if (!dominantDict) return recessiveDict; + if (!recessiveDict) return dominantDict; + + NSMutableDictionary *worker = [recessiveDict mutableCopy]; + [worker addEntriesFromDictionary:dominantDict]; + return worker; +} + +@interface GTLRServiceTicket () + +- (instancetype)initWithService:(GTLRService *)service + executionParameters:(GTLRServiceExecutionParameters *)params NS_DESIGNATED_INITIALIZER; + +// Thread safety: ticket properties are all publicly exposed as read-only. +// +// Service execution of a ticket is serial (started by the app, then executing on the fetcher +// callback queue and then the parse queue), so we don't need to worry about synchronization. +// +// One important exception is when the user invoked cancelTicket. During cancellation, ticket +// properties are released. This should be harmless even during the fetch start-parse-callback +// phase because nothing released in cancelTicket is used to begin a fetch, and the cancellation +// flag will prevent any application callbacks from being invoked. +// +// The cancel and objectFetcher properties are synchronized on the ticket. + +// Ticket properties exposed publicly as readonly. +@property(atomic, readwrite, nullable) id originalQuery; +@property(atomic, readwrite, nullable) id executingQuery; +@property(atomic, readwrite, nullable) GTMSessionFetcher *objectFetcher; +@property(nonatomic, readwrite, nullable) NSURLRequest *fetchRequest; +@property(nonatomic, readwrite, nullable) GTLRObject *postedObject; +@property(nonatomic, readwrite, nullable) GTLRObject *fetchedObject; +@property(nonatomic, readwrite, nullable) NSError *fetchError; +@property(nonatomic, readwrite) BOOL hasCalledCallback; +@property(nonatomic, readwrite) NSUInteger pagesFetchedCounter; +@property(readwrite, atomic, strong) id objectClassResolver; + +// Internal properties copied from the service. +@property(nonatomic, assign) BOOL allowInsecureQueries; +@property(nonatomic, strong) GTMSessionFetcherService *fetcherService; +@property(nonatomic, strong, nullable) id authorizer; + +// Internal properties copied from serviceExecutionParameters. +@property(nonatomic, getter=isRetryEnabled) BOOL retryEnabled; +@property(nonatomic, readwrite) NSTimeInterval maxRetryInterval; +@property(nonatomic, strong, nullable) GTLRServiceRetryBlock retryBlock; +@property(nonatomic, strong, nullable) GTLRServiceUploadProgressBlock uploadProgressBlock; +@property(nonatomic, strong, nullable) GTLRServiceTestBlock testBlock; +@property(nonatomic, readwrite) BOOL shouldFetchNextPages; + +// Internal properties used by the service. +#if GTM_BACKGROUND_TASK_FETCHING +// Access to backgroundTaskIdentifier should be protected by @synchronized(self). +@property(nonatomic, assign) UIBackgroundTaskIdentifier backgroundTaskIdentifier; +#endif // GTM_BACKGROUND_TASK_FETCHING + +// Dispatch group enabling waitForTicket: to delay until async callbacks and notifications +// related to the ticket have completed. +@property(nonatomic, readonly) dispatch_group_t callbackGroup; + +// startBackgroundTask and endBackgroundTask do nothing if !GTM_BACKGROUND_TASK_FETCHING +- (void)startBackgroundTask; +- (void)endBackgroundTask; + +- (void)notifyStarting:(BOOL)isStarting; +- (void)releaseTicketCallbacks; + +// Posts a notification on the main queue using the ticket's dispatch group. +- (void)postNotificationOnMainThreadWithName:(NSString *)name + object:(id)object + userInfo:(NSDictionary *)userInfo; +@end + +#if !defined(GTLR_HAS_SESSION_UPLOAD_FETCHER_IMPORT) + #if defined(COCOAPODS) && COCOAPODS + #define GTLR_HAS_SESSION_UPLOAD_FETCHER_IMPORT 1 + #else + #define GTLR_HAS_SESSION_UPLOAD_FETCHER_IMPORT 0 + #endif +#endif + +#if GTLR_HAS_SESSION_UPLOAD_FETCHER_IMPORT + #if GTLR_USE_FRAMEWORK_IMPORTS + #import + #else + #import "GTMSessionUploadFetcher.h" + #endif // GTLR_USE_FRAMEWORK_IMPORTS +#else +// If the upload fetcher class is available, it can be used for chunked uploads +// +// We locally declare some methods of the upload fetcher so we +// do not need to import the header, as some projects may not have it available +@interface GTMSessionUploadFetcher : GTMSessionFetcher + ++ (instancetype)uploadFetcherWithRequest:(NSURLRequest *)request + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(int64_t)chunkSize + fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil; + ++ (instancetype)uploadFetcherWithLocation:(NSURL *)uploadLocationURL + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(int64_t)chunkSize + fetcherService:(GTM_NULLABLE GTMSessionFetcherService *)fetcherServiceOrNil; + +@property(strong) NSURL *uploadLocationURL; +@property(strong) NSData *uploadData; +@property(strong) NSURL *uploadFileURL; +@property(strong) NSFileHandle *uploadFileHandle; + +- (void)pauseFetching; +- (void)resumeFetching; +- (BOOL)isPaused; +@end +#endif // GTLR_HAS_SESSION_UPLOAD_FETCHER_IMPORT + + +@interface GTLRObject (StandardProperties) +// Common properties on GTLRObject that are invoked below. +@property(nonatomic, copy) NSString *nextPageToken; +@end + +// This class encapsulates the pieces of a single batch response, including +// inner http response code and message, inner headers, JSON body (parsed as a dictionary), +// or parsing NSError. +// +// See responsePartsWithMIMEParts: for an example of the wire format data used +// to populate this object. +@interface GTLRBatchResponsePart : NSObject +@property(nonatomic, copy) NSString *contentID; +@property(nonatomic, assign) NSInteger statusCode; +@property(nonatomic, copy) NSString *statusString; +@property(nonatomic, strong) NSDictionary *headers; +@property(nonatomic, strong) NSDictionary *JSON; +@property(nonatomic, strong) NSError *parseError; +@end + +@implementation GTLRBatchResponsePart +@synthesize contentID = _contentID, + headers = _headers, + JSON = _JSON, + parseError = _parseError, + statusCode = _statusCode, + statusString = _statusString; +#if DEBUG +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p: %@\n%ld %@\nheaders:%@\nJSON:%@\nerror:%@", + [self class], self, self.contentID, (long)self.statusCode, self.statusString, + self.headers, self.JSON, self.parseError]; +} +#endif +@end + +// GTLRResourceURLQuery is an internal class used as a query object placeholder +// when fetchObjectWithURL: is invoked by the client app. This lets the service's +// plumbing treat the request like other queries, without allowing users to +// set arbitrary query properties that may not work as anticipated. +@interface GTLRResourceURLQuery : GTLRQuery + +@property(nonatomic, strong, nullable) NSURL *resourceURL; + ++ (instancetype)queryWithResourceURL:(NSURL *)resourceURL + objectClass:(nullable Class)objectClass; + +@end + +@implementation GTLRService { + NSString *_userAgent; + NSString *_overrideUserAgent; + NSDictionary *_serviceProperties; // Properties retained for the convenience of the client app. + NSUInteger _uploadChunkSize; // Only applies to resumable chunked uploads. +} + +@synthesize additionalHTTPHeaders = _additionalHTTPHeaders, + additionalURLQueryParameters = _additionalURLQueryParameters, + allowInsecureQueries = _allowInsecureQueries, + callbackQueue = _callbackQueue, + APIKey = _apiKey, + APIKeyRestrictionBundleID = _apiKeyRestrictionBundleID, + batchPath = _batchPath, + dataWrapperRequired = _dataWrapperRequired, + fetcherService = _fetcherService, + maxRetryInterval = _maxRetryInterval, + parseQueue = _parseQueue, + prettyPrintQueryParameterNames = _prettyPrintQueryParameterNames, + resumableUploadPath = _resumableUploadPath, + retryBlock = _retryBlock, + retryEnabled = _retryEnabled, + rootURLString = _rootURLString, + servicePath = _servicePath, + shouldFetchNextPages = _shouldFetchNextPages, + simpleUploadPath = _simpleUploadPath, + objectClassResolver = _objectClassResolver, + testBlock = _testBlock, + uploadProgressBlock = _uploadProgressBlock, + userAgentAddition = _userAgentAddition; + ++ (Class)ticketClass { + return [GTLRServiceTicket class]; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _parseQueue = dispatch_queue_create("com.google.GTLRServiceParse", DISPATCH_QUEUE_SERIAL); + _callbackQueue = dispatch_get_main_queue(); + _fetcherService = [[GTMSessionFetcherService alloc] init]; + + // Make the session fetcher use a background delegate queue instead of bouncing + // through the main queue for its callbacks from NSURLSession. This should improve + // performance, and eventually be the default behavior for the fetcher. + NSOperationQueue *delegateQueue = [[NSOperationQueue alloc] init]; + delegateQueue.maxConcurrentOperationCount = 1; + delegateQueue.name = @"com.google.GTLRServiceFetcherDelegate"; + _fetcherService.sessionDelegateQueue = delegateQueue; + + NSDictionary *kindMap = [[self class] kindStringToClassMap]; + _objectClassResolver = [GTLRObjectClassResolver resolverWithKindMap:kindMap]; + } + return self; +} + +- (NSString *)requestUserAgent { + if (_overrideUserAgent != nil) { + return _overrideUserAgent; + } + + NSString *userAgent = self.userAgent; + if (userAgent.length == 0) { + // The service instance is missing an explicit user-agent; use the bundle ID + // or process name. Don't use the bundle ID of the library's framework. + NSBundle *owningBundle = [NSBundle bundleForClass:[self class]]; + if (owningBundle == nil + || [owningBundle.bundleIdentifier isEqual:@"com.google.GTLR"]) { + owningBundle = [NSBundle mainBundle]; + } + userAgent = GTMFetcherApplicationIdentifier(owningBundle); + } + + NSString *requestUserAgent = userAgent; + + // if the user agent already specifies the library version, we'll + // use it verbatim in the request + NSString *libraryString = @"google-api-objc-client"; + NSRange libRange = [userAgent rangeOfString:libraryString + options:NSCaseInsensitiveSearch]; + if (libRange.location == NSNotFound) { + // the user agent doesn't specify the client library, so append that + // information, and the system version + NSString *libVersionString = GTLRFrameworkVersionString(); + + NSString *systemString = GTMFetcherSystemVersionString(); + + // We don't clean this with GTMCleanedUserAgentString so spaces are + // preserved + NSString *userAgentAddition = self.userAgentAddition; + NSString *customString = userAgentAddition ? + [@" " stringByAppendingString:userAgentAddition] : @""; + + // Google servers look for gzip in the user agent before sending gzip- + // encoded responses. See Service.java + requestUserAgent = [NSString stringWithFormat:@"%@ %@/%@ %@%@ (gzip)", + userAgent, libraryString, libVersionString, systemString, customString]; + } + return requestUserAgent; +} + +- (void)setMainBundleIDRestrictionWithAPIKey:(NSString *)apiKey { + self.APIKey = apiKey; + self.APIKeyRestrictionBundleID = [[NSBundle mainBundle] bundleIdentifier]; +} + +- (NSMutableURLRequest *)requestForURL:(NSURL *)url + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + ticket:(GTLRServiceTicket *)ticket { + + // subclasses may add headers to this + NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url + cachePolicy:NSURLRequestReloadIgnoringCacheData + timeoutInterval:60]; + NSString *requestUserAgent = self.requestUserAgent; + [request setValue:requestUserAgent forHTTPHeaderField:@"User-Agent"]; + + if (httpMethod.length > 0) { + [request setHTTPMethod:httpMethod]; + } + + if (etag.length > 0) { + + // it's rather unexpected for an etagged object to be provided for a GET, + // but we'll check for an etag anyway, similar to HttpGDataRequest.java, + // and if present use it to request only an unchanged resource + + BOOL isDoingHTTPGet = (httpMethod == nil + || [httpMethod caseInsensitiveCompare:@"GET"] == NSOrderedSame); + + if (isDoingHTTPGet) { + + // set the etag header, even if weak, indicating we don't want + // another copy of the resource if it's the same as the object + [request setValue:etag forHTTPHeaderField:@"If-None-Match"]; + + } else { + + // if we're doing PUT or DELETE, set the etag header indicating + // we only want to update the resource if our copy matches the current + // one (unless the etag is weak and so shouldn't be a constraint at all) + BOOL isWeakETag = [etag hasPrefix:@"W/"]; + + BOOL isModifying = + [httpMethod caseInsensitiveCompare:@"PUT"] == NSOrderedSame + || [httpMethod caseInsensitiveCompare:@"DELETE"] == NSOrderedSame + || [httpMethod caseInsensitiveCompare:@"PATCH"] == NSOrderedSame; + + if (isModifying && !isWeakETag) { + [request setValue:etag forHTTPHeaderField:@"If-Match"]; + } + } + } + + return request; +} + +// objectRequestForURL returns an NSMutableURLRequest for a GTLRObject +// +// the object is the object being sent to the server, or nil; +// the http method may be nil for get, or POST, PUT, DELETE + +- (NSMutableURLRequest *)objectRequestForURL:(NSURL *)url + object:(GTLRObject *)object + contentType:(NSString *)contentType + contentLength:(NSString *)contentLength + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + additionalHeaders:(NSDictionary *)additionalHeaders + ticket:(GTLRServiceTicket *)ticket { + if (object) { + // if the object being sent has an etag, add it to the request header to + // avoid retrieving a duplicate or to avoid writing over an updated + // version of the resource on the server + // + // Typically, delete requests will provide an explicit ETag parameter, and + // other requests will have the ETag carried inside the object being updated + if (etag == nil) { + etag = ETagIfPresent(object); + } + } + + NSMutableURLRequest *request = [self requestForURL:url + ETag:etag + httpMethod:httpMethod + ticket:ticket]; + [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; + [request setValue:contentType forHTTPHeaderField:@"Content-Type"]; + + [request setValue:@"no-cache" forHTTPHeaderField:@"Cache-Control"]; + + if (contentLength) { + [request setValue:contentLength forHTTPHeaderField:@"Content-Length"]; + } + + // Add the additional http headers from the service, and then from the query + NSDictionary *headers = self.additionalHTTPHeaders; + for (NSString *key in headers) { + NSString *value = [headers objectForKey:key]; + [request setValue:value forHTTPHeaderField:key]; + } + + headers = additionalHeaders; + for (NSString *key in headers) { + NSString *value = [headers objectForKey:key]; + [request setValue:value forHTTPHeaderField:key]; + } + + return request; +} + +#pragma mark - + +- (NSMutableURLRequest *)requestForQuery:(GTLRQuery *)query { + GTLR_DEBUG_ASSERT(query.bodyObject == nil, + @"requestForQuery: supports only GET methods, but was passed: %@", query); + GTLR_DEBUG_ASSERT(query.uploadParameters == nil, + @"requestForQuery: does not support uploads, but was passed: %@", query); + + NSURL *url = [self URLFromQueryObject:query + usePartialPaths:NO + includeServiceURLQueryParams:YES]; + + // If there is a developer key, add it onto the url. + NSString *apiKey = self.APIKey; + if (apiKey.length > 0) { + NSDictionary *queryParameters; + queryParameters = @{ kDeveloperAPIQueryParamKey : apiKey }; + url = [GTLRService URLWithString:url.absoluteString + queryParameters:queryParameters]; + } + + NSMutableURLRequest *request = [self requestForURL:url + ETag:nil + httpMethod:query.httpMethod + ticket:nil]; + NSString *apiRestriction = self.APIKeyRestrictionBundleID; + if ([apiRestriction length] > 0) { + [request setValue:apiRestriction forHTTPHeaderField:kXIosBundleIdHeader]; + } + + NSDictionary *headers = self.additionalHTTPHeaders; + for (NSString *key in headers) { + NSString *value = [headers objectForKey:key]; + [request setValue:value forHTTPHeaderField:key]; + } + + headers = query.additionalHTTPHeaders; + for (NSString *key in headers) { + NSString *value = [headers objectForKey:key]; + [request setValue:value forHTTPHeaderField:key]; + } + + return request; +} + +// common fetch starting method + +- (GTLRServiceTicket *)fetchObjectWithURL:(NSURL *)targetURL + objectClass:(Class)objectClass + bodyObject:(GTLRObject *)bodyObject + dataToPost:(NSData *)dataToPost + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + mayAuthorize:(BOOL)mayAuthorize + completionHandler:(GTLRServiceCompletionHandler)completionHandler + executingQuery:(id)executingQuery + ticket:(GTLRServiceTicket *)ticket { + // Once inside this method, we should not access any service properties that may reasonably + // be changed by the app, as this method may execute multiple times during query execution + // and we want consistent behavior. Service properties should be copied to the ticket. + + GTLR_DEBUG_ASSERT(executingQuery != nil, + @"no query? service additionalURLQueryParameters needs to be added to targetURL"); + + GTLR_DEBUG_ASSERT(targetURL != nil, @"no url?"); + if (targetURL == nil) return nil; + + BOOL hasExecutionParams = [executingQuery hasExecutionParameters]; + GTLRServiceExecutionParameters *executionParams = (hasExecutionParams ? + executingQuery.executionParameters : nil); + + // We need to create a ticket unless one was created earlier (like during authentication.) + if (!ticket) { + ticket = [[[[self class] ticketClass] alloc] initWithService:self + executionParameters:executionParams]; + [ticket notifyStarting:YES]; + } + + // If there is a developer key, add it onto the URL. + NSString *apiKey = ticket.APIKey; + if (apiKey.length > 0) { + NSDictionary *queryParameters; + queryParameters = @{ kDeveloperAPIQueryParamKey : apiKey }; + targetURL = [GTLRService URLWithString:targetURL.absoluteString + queryParameters:queryParameters]; + } + + NSString *contentType = @"application/json; charset=utf-8"; + NSString *contentLength; // nil except for single-request uploads. + + if ([executingQuery isBatchQuery]) { + contentType = [NSString stringWithFormat:@"multipart/mixed; boundary=%@", + ((GTLRBatchQuery *)executingQuery).boundary]; + } + + + GTLRUploadParameters *uploadParams = executingQuery.uploadParameters; + + if (uploadParams.shouldUploadWithSingleRequest) { + NSData *uploadData = uploadParams.data; + NSString *uploadMIMEType = uploadParams.MIMEType; + if (!uploadData) { + GTLR_DEBUG_ASSERT(0, @"Uploading with a single request requires bytes to upload as NSData"); + } else { + if (uploadParams.shouldSendUploadOnly) { + contentType = uploadMIMEType; + dataToPost = uploadData; + contentLength = @(dataToPost.length).stringValue; + } else { + GTMMIMEDocument *mimeDoc = [GTMMIMEDocument MIMEDocument]; + if (dataToPost) { + // Include the object as metadata with the upload. + [mimeDoc addPartWithHeaders:@{ @"Content-Type" : contentType } + body:dataToPost]; + } + [mimeDoc addPartWithHeaders:@{ @"Content-Type" : uploadMIMEType } + body:uploadData]; + + dispatch_data_t mimeDispatchData; + unsigned long long mimeLength; + NSString *mimeBoundary; + [mimeDoc generateDispatchData:&mimeDispatchData + length:&mimeLength + boundary:&mimeBoundary]; + + contentType = [NSString stringWithFormat:@"multipart/related; boundary=%@", mimeBoundary]; + dataToPost = (NSData *)mimeDispatchData; + contentLength = @(mimeLength).stringValue; + } + } + } + + NSDictionary *additionalHeaders = nil; + NSString *restriction = self.APIKeyRestrictionBundleID; + if ([restriction length] > 0) { + additionalHeaders = @{ kXIosBundleIdHeader : restriction }; + } + + NSDictionary *queryAdditionalHeaders = executingQuery.additionalHTTPHeaders; + if (queryAdditionalHeaders) { + if (additionalHeaders) { + NSMutableDictionary *builder = [additionalHeaders mutableCopy]; + [builder addEntriesFromDictionary:queryAdditionalHeaders]; + additionalHeaders = builder; + } else { + additionalHeaders = queryAdditionalHeaders; + } + } + + NSURLRequest *request = [self objectRequestForURL:targetURL + object:bodyObject + contentType:contentType + contentLength:contentLength + ETag:etag + httpMethod:httpMethod + additionalHeaders:additionalHeaders + ticket:ticket]; + ticket.postedObject = bodyObject; + ticket.executingQuery = executingQuery; + + GTLRQuery *originalQuery = (GTLRQuery *)ticket.originalQuery; + if (originalQuery == nil) { + originalQuery = (GTLRQuery *)executingQuery; + ticket.originalQuery = originalQuery; + } + + // Some proxy servers (and some web servers) have issues with GET URLs being + // too long, trap that and move the query parameters into the body. The + // uploadParams and dataToPost should be nil for a GET, but playing it safe + // and confirming. + NSString *requestHTTPMethod = request.HTTPMethod; + BOOL isDoingHTTPGet = + (requestHTTPMethod == nil + || [requestHTTPMethod caseInsensitiveCompare:@"GET"] == NSOrderedSame); + if (isDoingHTTPGet && + (request.URL.absoluteString.length >= kMaxGETURLLength) && + (uploadParams == nil) && + (dataToPost == nil)) { + NSString *urlString = request.URL.absoluteString; + NSRange range = [urlString rangeOfString:@"?"]; + if (range.location != NSNotFound) { + NSURL *trimmedURL = [NSURL URLWithString:[urlString substringToIndex:range.location]]; + NSString *urlArgsString = [urlString substringFromIndex:(range.location + 1)]; + if (trimmedURL && (urlArgsString.length > 0)) { + dataToPost = [urlArgsString dataUsingEncoding:NSUTF8StringEncoding]; + NSMutableURLRequest *mutableRequest = [request mutableCopy]; + mutableRequest.URL = trimmedURL; + mutableRequest.HTTPMethod = @"POST"; + [mutableRequest setValue:@"GET" forHTTPHeaderField:@"X-HTTP-Method-Override"]; + [mutableRequest setValue:@"application/x-www-form-urlencoded" + forHTTPHeaderField:@"Content-Type"]; + [mutableRequest setValue:@(dataToPost.length).stringValue + forHTTPHeaderField:@"Content-Length"]; + request = mutableRequest; + } + } + } + ticket.fetchRequest = request; + + GTLRServiceTestBlock testBlock = ticket.testBlock; + if (testBlock) { + [self simulateFetchWithTicket:ticket + testBlock:testBlock + dataToPost:dataToPost + completionHandler:completionHandler]; + return ticket; + } + + GTMSessionFetcherService *fetcherService = ticket.fetcherService; + GTMSessionFetcher *fetcher; + + if (uploadParams == nil || uploadParams.shouldUploadWithSingleRequest) { + // Create a single-request fetcher. + fetcher = [fetcherService fetcherWithRequest:request]; + } else { + fetcher = [self uploadFetcherWithRequest:request + fetcherService:fetcherService + params:uploadParams]; + } + + if (ticket.allowInsecureQueries) { + fetcher.allowLocalhostRequest = YES; + fetcher.allowedInsecureSchemes = @[ @"http" ]; + } + + NSString *loggingName = executingQuery.loggingName; + if (loggingName.length > 0) { + NSUInteger pageNumber = ticket.pagesFetchedCounter + 1; + if (pageNumber > 1) { + loggingName = [loggingName stringByAppendingFormat:@", page %lu", + (unsigned long)pageNumber]; + } + fetcher.comment = loggingName; + } + + if (!mayAuthorize) { + fetcher.authorizer = nil; + } else { + fetcher.authorizer = ticket.authorizer; + } + + // copy the ticket's retry settings into the fetcher + fetcher.retryEnabled = ticket.retryEnabled; + fetcher.maxRetryInterval = ticket.maxRetryInterval; + + BOOL shouldExamineRetries = (ticket.retryBlock != nil); + if (shouldExamineRetries) { + GTLR_DEBUG_ASSERT(ticket.retryEnabled, @"Setting retry block without retry enabled."); + + fetcher.retryBlock = ^(BOOL suggestedWillRetry, NSError *error, + GTMSessionFetcherRetryResponse response) { + // The object fetcher may call into this retry block; this one invokes the + // selector provided by the user. + GTLRServiceRetryBlock retryBlock = ticket.retryBlock; + if (!retryBlock) { + response(suggestedWillRetry); + } else { + dispatch_group_async(ticket.callbackGroup, ticket.callbackQueue, ^{ + if (ticket.cancelled) { + response(NO); + return; + } + BOOL willRetry = retryBlock(ticket, suggestedWillRetry, error); + response(willRetry); + }); + } + }; + } + + // Remember the object fetcher in the ticket. + ticket.objectFetcher = fetcher; + + // Set the upload data. + fetcher.bodyData = dataToPost; + + // Have the fetcher call back on the parse queue. + fetcher.callbackQueue = self.parseQueue; + + // If this ticket is paging, end any ongoing background task immediately, and + // rely on the fetcher's background task now instead. + [ticket endBackgroundTask]; + + [fetcher beginFetchWithCompletionHandler:^(NSData * _Nullable data, NSError * _Nullable error) { + // We now have the JSON data for an object, or an error. + GTLR_ASSERT_CURRENT_QUEUE_DEBUG(self.parseQueue); + + // Until now, the only async operation has been the fetch, and we rely on the fetcher's + // background task on iOS to get us here if the app was backgrounded. + // + // Now we'll let the ticket create a background task so that the async parsing and call back to + // the app will happen if the app is sent to the background. The ticket is responsible for + // ending the background task. + [ticket startBackgroundTask]; + + if (ticket.cancelled) { + // If the user cancels the ticket, then cancelTicket will stop the fetcher so this + // callback probably won't occur. + // + // But just for safety, if we get here, skip any parsing steps by fabricating an error. + data = nil; + error = [NSError errorWithDomain:NSURLErrorDomain + code:NSURLErrorCancelled + userInfo:nil]; + } + + if (error == nil) { + // Successful fetch. + if (data.length > 0) { + [self prepareToParseObjectForFetcher:fetcher + executingQuery:executingQuery + ticket:ticket + error:error + defaultClass:objectClass + completionHandler:completionHandler]; + } else { + // no data (such as when deleting) + [self handleParsedObjectForFetcher:fetcher + executingQuery:executingQuery + ticket:ticket + error:nil + parsedObject:nil + hasSentParsingStartNotification:NO + completionHandler:completionHandler]; + } + return; + } + + // Failed fetch. + NSInteger status = [error code]; + if (status >= 300) { + // Return the HTTP error status code along with a more descriptive error + // from within the HTTP response payload. + NSData *responseData = fetcher.downloadedData; + if (responseData.length > 0) { + NSDictionary *responseHeaders = fetcher.responseHeaders; + NSString *responseContentType = [responseHeaders objectForKey:@"Content-Type"]; + + if (data.length > 0) { + if ([responseContentType hasPrefix:@"application/json"]) { + NSError *parseError = nil; + NSMutableDictionary *jsonWrapper = + [NSJSONSerialization JSONObjectWithData:(NSData * _Nonnull)data + options:NSJSONReadingMutableContainers + error:&parseError]; + // If the json parse worked, then extract potentially better + // information. + if (!parseError) { + // HTTP Streaming defined by Google services is is an array + // of requests and replies. This code never makes one of + // these requests; but, some GET apis can actually be to + // a Streaming result (for media?), so the errors can still + // come back in an array. + if ([jsonWrapper isKindOfClass:[NSArray class]]) { + NSArray *jsonWrapperAsArray = (NSArray *)jsonWrapper; +#if DEBUG + if (jsonWrapperAsArray.count > 1) { + GTLR_DEBUG_LOG(@"Got error array with >1 item, only using first. Full list: %@", + jsonWrapperAsArray); + } +#endif + // Use the first. + jsonWrapper = [jsonWrapperAsArray firstObject]; + } + + // Convert the JSON error payload into a structured error + NSMutableDictionary *errorJSON = [jsonWrapper valueForKey:@"error"]; + if (errorJSON) { + GTLRErrorObject *errorObject = [GTLRErrorObject objectWithJSON:errorJSON]; + error = [errorObject foundationError]; + } + } + } else { + // No structured JSON error was available; make a plaintext server + // error response visible in the error object. + NSString *reasonStr = [[NSString alloc] initWithData:(NSData * _Nonnull)data + encoding:NSUTF8StringEncoding]; + NSDictionary *userInfo = @{ NSLocalizedDescriptionKey : reasonStr }; + error = [NSError errorWithDomain:kGTMSessionFetcherStatusDomain + code:status + userInfo:userInfo]; + } + } else { + // Response data length is zero; we'll settle for returning the + // fetcher's error. + } + } + } + + [self handleParsedObjectForFetcher:fetcher + executingQuery:executingQuery + ticket:ticket + error:error + parsedObject:nil + hasSentParsingStartNotification:NO + completionHandler:completionHandler]; + }]; // fetcher completion handler + + // If something weird happens and the networking callbacks have been called + // already synchronously, we don't want to return the ticket since the caller + // will never know when to stop retaining it, so we'll make sure the + // success/failure callbacks have not yet been called by checking the + // ticket + if (ticket.hasCalledCallback) { + return nil; + } + + return ticket; +} + +- (GTMSessionUploadFetcher *)uploadFetcherWithRequest:(NSURLRequest *)request + fetcherService:(GTMSessionFetcherService *)fetcherService + params:(GTLRUploadParameters *)uploadParams { + // Hang on to the user's requested chunk size, and ensure it's not tiny + NSUInteger uploadChunkSize = [self serviceUploadChunkSize]; + if (uploadChunkSize < kMinimumUploadChunkSize) { + uploadChunkSize = kMinimumUploadChunkSize; + } + + NSString *uploadClassName = GTLR_CLASSNAME_STR(GTMSessionUploadFetcher); + Class uploadClass = NSClassFromString(uploadClassName); + GTLR_ASSERT(uploadClass != nil, @"GTMSessionUploadFetcher needed"); + + NSString *uploadMIMEType = uploadParams.MIMEType; + NSData *uploadData = uploadParams.data; + NSURL *uploadFileURL = uploadParams.fileURL; + NSFileHandle *uploadFileHandle = uploadParams.fileHandle; + NSURL *uploadLocationURL = uploadParams.uploadLocationURL; + + // Create the upload fetcher. + GTMSessionUploadFetcher *fetcher; + if (uploadLocationURL) { + // Resuming with the session fetcher and a file URL. + GTLR_DEBUG_ASSERT(uploadFileURL != nil, @"Resume requires a file URL"); + fetcher = [uploadClass uploadFetcherWithLocation:uploadLocationURL + uploadMIMEType:uploadMIMEType + chunkSize:(int64_t)uploadChunkSize + fetcherService:fetcherService]; + fetcher.uploadFileURL = uploadFileURL; + } else { + fetcher = [uploadClass uploadFetcherWithRequest:request + uploadMIMEType:uploadMIMEType + chunkSize:(int64_t)uploadChunkSize + fetcherService:fetcherService]; + if (uploadFileURL) { + fetcher.uploadFileURL = uploadFileURL; + } else if (uploadData) { + fetcher.uploadData = uploadData; + } else if (uploadFileHandle) { +#if DEBUG + if (uploadParams.useBackgroundSession) { + GTLR_DEBUG_LOG(@"Warning: GTLRUploadParameters should be supplied an uploadFileURL rather" + @" than a file handle to support background uploads.\n %@", uploadParams); + } +#endif + fetcher.uploadFileHandle = uploadFileHandle; + } + } + fetcher.useBackgroundSession = uploadParams.useBackgroundSession; + return fetcher; +} + +#pragma mark - + +- (GTLRServiceTicket *)executeBatchQuery:(GTLRBatchQuery *)batchObj + completionHandler:(GTLRServiceCompletionHandler)completionHandler + ticket:(GTLRServiceTicket *)ticket { + // Copy the original batch object and each query inside so our working queries cannot be modified + // by the caller, and release the callback blocks from the supplied query objects. + GTLRBatchQuery *batchCopy = [batchObj copy]; + [batchObj invalidateQuery]; + + NSArray *queries = batchCopy.queries; + NSUInteger numberOfQueries = queries.count; + if (numberOfQueries == 0) return nil; + + // Create the batch of REST calls. + NSMutableSet *requestIDs = [NSMutableSet setWithCapacity:numberOfQueries]; + NSMutableSet *loggingNames = [NSMutableSet set]; + GTMMIMEDocument *mimeDoc = [GTMMIMEDocument MIMEDocument]; + + // Each batch part has two "header" sections, an outer and inner. + // The inner headers are preceded by a line specifying the http request. + // So a part looks like this: + // + // --END_OF_PART + // Content-ID: gtlr_3 + // Content-Transfer-Encoding: binary + // Content-Type: application/http + // + // POST https://www.googleapis.com/drive/v3/files/ + // Content-Length: 0 + // Content-Type: application/json + // + // { + // "id": "04109509152946699072k" + // } + + for (GTLRQuery *query in queries) { + GTLRObject *bodyObject = query.bodyObject; + NSDictionary *bodyJSON = bodyObject.JSON; + NSString *requestID = query.requestID; + + if (requestID.length == 0) { + GTLR_DEBUG_ASSERT(0, @"Invalid query ID: %@", [query class]); + return nil; + } + + if ([requestIDs containsObject:requestID]) { + GTLR_DEBUG_ASSERT(0, @"Duplicate request ID in batch: %@", requestID); + return nil; + } + [requestIDs addObject:requestID]; + + // Create the inner request, body, and headers. + + NSURL *requestURL = [self URLFromQueryObject:query + usePartialPaths:YES + includeServiceURLQueryParams:NO]; + NSString *requestURLString = requestURL.absoluteString; + + NSError *error = nil; + NSData *bodyData; + if (bodyJSON) { + bodyData = [NSJSONSerialization dataWithJSONObject:bodyJSON + options:0 + error:&error]; + if (bodyData == nil) { + GTLR_DEBUG_ASSERT(0, @"JSON generation error: %@\n JSON: %@", error, bodyJSON); + return nil; + } + } + + NSString *httpRequestString = [NSString stringWithFormat:@"%@ %@\r\n", + query.httpMethod ?: @"GET", requestURLString]; + NSDictionary *innerPartHeaders = @{ @"Content-Type" : @"application/json", + @"Content-Length" : @(bodyData.length).stringValue }; + + innerPartHeaders = MergeDictionaries(query.additionalHTTPHeaders, innerPartHeaders); + + NSData *innerPartHeadersData = [GTMMIMEDocument dataWithHeaders:innerPartHeaders]; + + NSMutableData *innerData = + [[httpRequestString dataUsingEncoding:NSUTF8StringEncoding] mutableCopy]; + [innerData appendData:innerPartHeadersData]; + if (bodyData) { + [innerData appendData:bodyData]; + } + + // Combine the outer headers with the inner headers and body data. + NSDictionary *outerPartHeaders = @{ @"Content-Type" : @"application/http", + @"Content-ID" : requestID, + @"Content-Transfer-Encoding" : @"binary" }; + + [mimeDoc addPartWithHeaders:outerPartHeaders + body:innerData]; + + NSString *loggingName = query.loggingName ?: [[query class] description]; + [loggingNames addObject:loggingName]; + } + +#if !STRIP_GTM_FETCH_LOGGING + // Set the fetcher log comment. + if (!batchCopy.loggingName) { + NSUInteger pageNumber = ticket.pagesFetchedCounter; + NSString *pageStr = @""; + if (pageNumber > 0) { + pageStr = [NSString stringWithFormat:@"page %lu, ", + (unsigned long)(pageNumber + 1)]; + } + batchCopy.loggingName = [NSString stringWithFormat:@"batch: %@ (%@%lu queries)", + [loggingNames.allObjects componentsJoinedByString:@", "], + pageStr, (unsigned long)numberOfQueries]; + } +#endif + + dispatch_data_t mimeDispatchData; + unsigned long long mimeLength; + NSString *mimeBoundary; + [mimeDoc generateDispatchData:&mimeDispatchData + length:&mimeLength + boundary:&mimeBoundary]; + + batchCopy.boundary = mimeBoundary; + + BOOL mayAuthorize = (batchCopy ? !batchCopy.shouldSkipAuthorization : YES); + + NSString *rootURLString = self.rootURLString; + NSString *batchPath = self.batchPath ?: @""; + NSString *batchURLString = [rootURLString stringByAppendingString:batchPath]; + + GTLR_DEBUG_ASSERT(![batchPath hasPrefix:@"/"], + @"batchPath shouldn't start with a slash: %@", + batchPath); + + // Query parameters override service parameters. + NSDictionary *mergedQueryParams = MergeDictionaries(self.additionalURLQueryParameters, + batchObj.additionalURLQueryParameters); + NSURL *batchURL; + if (mergedQueryParams.count > 0) { + batchURL = [GTLRService URLWithString:batchURLString + queryParameters:mergedQueryParams]; + } else { + batchURL = [NSURL URLWithString:batchURLString]; + } + + GTLRServiceTicket *resultTicket = [self fetchObjectWithURL:batchURL + objectClass:[GTLRBatchResult class] + bodyObject:nil + dataToPost:(NSData *)mimeDispatchData + ETag:nil + httpMethod:@"POST" + mayAuthorize:mayAuthorize + completionHandler:completionHandler + executingQuery:batchCopy + ticket:ticket]; + return resultTicket; +} + +#pragma mark - + +// Raw REST fetch method. + +- (GTLRServiceTicket *)fetchObjectWithURL:(NSURL *)targetURL + objectClass:(Class)objectClass + bodyObject:(GTLRObject *)bodyObject + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + mayAuthorize:(BOOL)mayAuthorize + completionHandler:(GTLRServiceCompletionHandler)completionHandler + executingQuery:(id)executingQuery + ticket:(GTLRServiceTicket *)ticket { + // if no URL was supplied, treat this as if the fetch failed (below) + // and immediately return a nil ticket, skipping the callbacks + // + // this might be considered normal (say, updating a read-only entry + // that lacks an edit link) though higher-level calls may assert or + // return errors depending on the specific usage + if (targetURL == nil) return nil; + + NSData *dataToPost = nil; + if (bodyObject != nil && !executingQuery.uploadParameters.shouldSendUploadOnly) { + NSError *error = nil; + + NSDictionary *whatToSend; + NSDictionary *json = bodyObject.JSON; + if (json == nil) { + // Since a body object was provided, we'll ensure there's at least an empty dictionary. + json = [NSDictionary dictionary]; + } + if (_dataWrapperRequired) { + // create the top-level "data" object + whatToSend = @{ @"data" : json }; + } else { + whatToSend = json; + } + dataToPost = [NSJSONSerialization dataWithJSONObject:whatToSend + options:0 + error:&error]; + if (dataToPost == nil) { + GTLR_DEBUG_LOG(@"JSON generation error: %@", error); + } + } + + return [self fetchObjectWithURL:targetURL + objectClass:objectClass + bodyObject:bodyObject + dataToPost:dataToPost + ETag:etag + httpMethod:httpMethod + mayAuthorize:mayAuthorize + completionHandler:completionHandler + executingQuery:executingQuery + ticket:ticket]; +} + +- (void)invokeProgressCallbackForTicket:(GTLRServiceTicket *)ticket + deliveredBytes:(unsigned long long)numReadSoFar + totalBytes:(unsigned long long)total { + + GTLRServiceUploadProgressBlock block = ticket.uploadProgressBlock; + if (block) { + dispatch_group_async(ticket.callbackGroup, ticket.callbackQueue, ^{ + if (ticket.cancelled) return; + + block(ticket, numReadSoFar, total); + }); + } +} + +// Three methods handle parsing of the fetched JSON data: +// - prepareToParse posts a start notification and then spawns off parsing +// on the operation queue (if there's an operation queue) +// - parseObject does the parsing of the JSON string +// - handleParsedObject posts the stop notification and calls the callback +// with the parsed object or an error +// +// The middle method may run on a separate thread. + +- (void)prepareToParseObjectForFetcher:(GTMSessionFetcher *)fetcher + executingQuery:(id)executingQuery + ticket:(GTLRServiceTicket *)ticket + error:(NSError *)error + defaultClass:(Class)defaultClass + completionHandler:(GTLRServiceCompletionHandler)completionHandler { + GTLR_ASSERT_CURRENT_QUEUE_DEBUG(self.parseQueue); + + [ticket postNotificationOnMainThreadWithName:kGTLRServiceTicketParsingStartedNotification + object:ticket + userInfo:nil]; + + // For unit tests to cancel during parsing, we need a synchronous notification posted. + // Because this notification is intended only for unit tests, there is no public symbol + // for the notification name. + NSNotificationCenter *nc =[NSNotificationCenter defaultCenter]; + [nc postNotificationName:@"kGTLRServiceTicketParsingStartedForTestNotification" + object:ticket + userInfo:nil]; + + NSDictionary *batchClassMap; + if ([executingQuery isBatchQuery]) { + // build a dictionary of expected classes for the batch responses + GTLRBatchQuery *batchQuery = (GTLRBatchQuery *)executingQuery; + NSArray *queries = batchQuery.queries; + batchClassMap = [NSMutableDictionary dictionaryWithCapacity:queries.count]; + for (GTLRQuery *singleQuery in queries) { + [batchClassMap setValue:singleQuery.expectedObjectClass + forKey:singleQuery.requestID]; + } + } + + [self parseObjectFromDataOfFetcher:fetcher + executingQuery:executingQuery + ticket:ticket + error:error + defaultClass:defaultClass + batchClassMap:batchClassMap + hasSentParsingStartNotification:YES + completionHandler:completionHandler]; +} + +- (void)parseObjectFromDataOfFetcher:(GTMSessionFetcher *)fetcher + executingQuery:(id)executingQuery + ticket:(GTLRServiceTicket *)ticket + error:(NSError *)error + defaultClass:(Class)defaultClass + batchClassMap:(NSDictionary *)batchClassMap + hasSentParsingStartNotification:(BOOL)hasSentParsingStartNotification + completionHandler:(GTLRServiceCompletionHandler)completionHandler { + GTLR_ASSERT_CURRENT_QUEUE_DEBUG(self.parseQueue); + + NSError *fetchError = error; + + NSString *downloadAsDataObjectType = nil; + if (![executingQuery isBatchQuery]) { + GTLRQuery *singleQuery = (GTLRQuery *)executingQuery; + downloadAsDataObjectType = singleQuery.downloadAsDataObjectType; + } + + NSDictionary *responseHeaders = fetcher.responseHeaders; + NSString *contentType = [responseHeaders objectForKey:@"Content-Type"]; + NSData *data = fetcher.downloadedData; + BOOL hasData = data.length > 0; + BOOL isJSON = [contentType hasPrefix:@"application/json"]; + GTLRObject *parsedObject; + + if (hasData) { +#if GTLR_LOG_PERFORMANCE + NSTimeInterval secs1, secs2; + secs1 = [NSDate timeIntervalSinceReferenceDate]; +#endif + id objectClassResolver = ticket.objectClassResolver; + + if ((downloadAsDataObjectType.length != 0) && fetchError == nil) { + GTLRDataObject *dataObject = [GTLRDataObject object]; + dataObject.data = data; + dataObject.contentType = contentType; + parsedObject = dataObject; + } else if (isJSON) { + NSError *parseError = nil; + NSMutableDictionary *jsonWrapper = + [NSJSONSerialization JSONObjectWithData:data + options:NSJSONReadingMutableContainers + error:&parseError]; + if (jsonWrapper == nil) { + fetchError = parseError; + } else { + NSMutableDictionary *json; + + if (_dataWrapperRequired) { + json = [jsonWrapper valueForKey:@"data"]; + } else { + json = jsonWrapper; + } + + if (json != nil) { + parsedObject = [GTLRObject objectForJSON:json + defaultClass:defaultClass + objectClassResolver:objectClassResolver]; + } + } + } else { + // Has non-JSON data; it may be batch data. + NSString *boundary; + BOOL isBatchResponse = [self isContentTypeMultipart:contentType + boundary:&boundary]; + if (isBatchResponse) { + NSArray *mimeParts = [GTMMIMEDocument MIMEPartsWithBoundary:boundary + data:data]; + NSArray *responseParts = [self responsePartsWithMIMEParts:mimeParts]; + GTLRBatchResult *batchResult = [self batchResultWithResponseParts:responseParts + batchClassMap:batchClassMap + objectClassResolver:objectClassResolver]; + parsedObject = batchResult; + } else { + GTLR_DEBUG_ASSERT(0, @"Got unexpected content type '%@'", contentType); + } + } // isJSON + +#if GTLR_LOG_PERFORMANCE + secs2 = [NSDate timeIntervalSinceReferenceDate]; + NSLog(@"allocation of %@ took %f seconds", objectClass, secs2 - secs1); +#endif + } + + [self handleParsedObjectForFetcher:fetcher + executingQuery:executingQuery + ticket:ticket + error:fetchError + parsedObject:parsedObject + hasSentParsingStartNotification:hasSentParsingStartNotification + completionHandler:completionHandler]; +} + +- (void)handleParsedObjectForFetcher:(GTMSessionFetcher *)fetcher + executingQuery:(id)executingQuery + ticket:(GTLRServiceTicket *)ticket + error:(NSError *)error + parsedObject:(GTLRObject *)object + hasSentParsingStartNotification:(BOOL)hasSentParsingStartNotification + completionHandler:(GTLRServiceCompletionHandler)completionHandler { + GTLR_ASSERT_CURRENT_QUEUE_DEBUG(self.parseQueue); + + BOOL isResourceURLQuery = [executingQuery isKindOfClass:[GTLRResourceURLQuery class]]; + + // There may not be an object due to a fetch or parsing error + BOOL shouldFetchNextPages = ticket.shouldFetchNextPages && !isResourceURLQuery; + GTLRObject *previousObject = ticket.fetchedObject; + BOOL isFirstPage = (previousObject == nil); + + if (shouldFetchNextPages && !isFirstPage && (object != nil)) { + // Accumulate new results + object = [self mergedNewResultObject:object + oldResultObject:previousObject + forQuery:executingQuery + ticket:ticket]; + } + + ticket.fetchedObject = object; + ticket.fetchError = error; + + if (hasSentParsingStartNotification) { + // we want to always balance the start and stop notifications + [ticket postNotificationOnMainThreadWithName:kGTLRServiceTicketParsingStoppedNotification + object:ticket + userInfo:nil]; + } + + BOOL shouldCallCallbacks = YES; + + if (error == nil) { + ++ticket.pagesFetchedCounter; + + // Use the nextPageToken to fetch any later pages for non-batch queries + // + // This assumes a pagination model where objects have entries in a known "items" + // field and a "nextPageToken" field, and queries support a "pageToken" + // parameter. + + if (shouldFetchNextPages) { + // Determine if we should fetch more pages of results + + GTLRQuery *nextPageQuery = + (GTLRQuery *)[self nextPageQueryForQuery:executingQuery + result:object + ticket:ticket]; + if (nextPageQuery) { + BOOL isFetchingMore = [self fetchNextPageWithQuery:nextPageQuery + completionHandler:completionHandler + ticket:ticket]; + if (isFetchingMore) { + shouldCallCallbacks = NO; + } + } else { + // nextPageQuery == nil; no more page tokens are present + #if DEBUG && !GTLR_SKIP_PAGES_WARNING + // Each next page followed to accumulate all pages of a feed takes up to + // a few seconds. When multiple pages are being fetched, that + // usually indicates that a larger page size (that is, more items per + // feed fetched) should be requested. + // + // To avoid fetching many pages, set query.maxResults so the feed + // requested is large enough to rarely need to follow next links. + NSUInteger pageCount = ticket.pagesFetchedCounter; + if (pageCount > 2) { + NSString *queryLabel; + if ([executingQuery isBatchQuery]) { + queryLabel = @"batch query"; + } else { + queryLabel = [[executingQuery class] description]; + } + GTLR_DEBUG_LOG(@"Executing %@ query required fetching %lu pages; use a query with" + @" a larger maxResults for faster results", + queryLabel, (unsigned long)pageCount); + } + #endif + } // nextPageQuery + } else { + // !ticket.shouldFetchNextPages + #if DEBUG && !GTLR_SKIP_PAGES_WARNING + // Let the developer know that there were additional pages that would have been + // fetched if shouldFetchNextPages was enabled. + // + // The client may specify a larger page size with the query's maxResults property, + // or enable automatic pagination by turning on shouldFetchNextPages on the service + // or on the query's executionParameters. + if ([executingQuery respondsToSelector:@selector(pageToken)] + && [object isKindOfClass:[GTLRCollectionObject class]] + && [object respondsToSelector:@selector(nextPageToken)] + && object.nextPageToken.length > 0) { + GTLR_DEBUG_LOG(@"Executing %@ has additional pages of results not fetched because" + @" shouldFetchNextPages is not enabled", [executingQuery class]); + } + #endif + } // ticket.shouldFetchNextPages + } // error == nil + + if (!isFirstPage) { + // Release callbacks from this completed page's query. + [executingQuery invalidateQuery]; + } + + // We no longer care about the queries for page 2 or later, so for the client + // inspecting the ticket in the callback, the executing query should be + // the original one + ticket.executingQuery = ticket.originalQuery; + + if (!shouldCallCallbacks) { + // More fetches are happening. + } else { + dispatch_group_async(ticket.callbackGroup, ticket.callbackQueue, ^{ + // First, call query-specific callback blocks. We do this before the + // fetch callback to let applications do any final clean-up (or update + // their UI) in the fetch callback. + GTLRQuery *originalQuery = (GTLRQuery *)ticket.originalQuery; + + if (!ticket.cancelled) { + if (![originalQuery isBatchQuery]) { + // Single query + GTLRServiceCompletionHandler completionBlock = originalQuery.completionBlock; + if (completionBlock) { + completionBlock(ticket, object, error); + } + } else { + [self invokeBatchCompletionsWithTicket:ticket + batchQuery:(GTLRBatchQuery *)originalQuery + batchResult:(GTLRBatchResult *)object + error:error]; + } + + if (completionHandler) { + completionHandler(ticket, object, error); + } + ticket.hasCalledCallback = YES; + } // !ticket.cancelled + + [ticket releaseTicketCallbacks]; + [ticket endBackgroundTask]; + + // Even if the ticket has been cancelled, it should notify that it's stopped. + [ticket notifyStarting:NO]; + + // Release query callback blocks. + [originalQuery invalidateQuery]; + }); + } +} + +- (BOOL)isContentTypeMultipart:(NSString *)contentType + boundary:(NSString **)outBoundary { + NSScanner *scanner = [NSScanner scannerWithString:contentType]; + // By default, the scanner skips leading whitespace. + if ([scanner scanString:@"multipart/mixed; boundary=" intoString:NULL] + && [scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] + intoString:outBoundary]) { + return YES; + } + return NO; +} + +- (NSArray *)responsePartsWithMIMEParts:(NSArray *)mimeParts { + NSMutableArray *resultParts = [NSMutableArray arrayWithCapacity:mimeParts.count]; + + for (GTMMIMEDocumentPart *mimePart in mimeParts) { + GTLRBatchResponsePart *responsePart = [self responsePartWithMIMEPart:mimePart]; + [resultParts addObject:responsePart]; + } + return resultParts; +} + +- (GTLRBatchResponsePart *)responsePartWithMIMEPart:(GTMMIMEDocumentPart *)mimePart { + // The MIME part body looks like + // + // Headers (from the MIME part): + // Content-Type: application/http + // Content-ID: response-gtlr_5 + // + // Body (including inner headers): + // HTTP/1.1 200 OK + // Content-Type: application/json; charset=UTF-8 + // Date: Sat, 16 Jan 2016 18:57:05 GMT + // Expires: Sat, 16 Jan 2016 18:57:05 GMT + // Cache-Control: private, max-age=0 + // Content-Length: 13459 + // + // {"kind":"drive#fileList", ...} + + GTLRBatchResponsePart *responsePart = [[GTLRBatchResponsePart alloc] init]; + + // The only header in the actual (outer) MIME multipart headers we want is Content-ID. + // + // The content ID in the response looks like + // + // Content-ID: response-gtlr_5 + // + // but we will strip the "response-" prefix. + NSDictionary *mimeHeaders = mimePart.headers; + NSString *responseContentID = mimeHeaders[@"Content-ID"]; + if ([responseContentID hasPrefix:@"response-"]) { + responseContentID = [responseContentID substringFromIndex:@"response-".length]; + } + responsePart.contentID = responseContentID; + + // Split the body from the inner headers at the first CRLFCRLF. + NSArray *offsets; + NSData *mimePartBody = mimePart.body; + [GTMMIMEDocument searchData:mimePartBody + targetBytes:"\r\n\r\n" + targetLength:4 + foundOffsets:&offsets]; + if (offsets.count == 0) { + // Parse error. + NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; + [userInfo setValue:mimePartBody forKey:kGTLRServiceErrorBodyDataKey]; + [userInfo setValue:responseContentID forKey:kGTLRServiceErrorContentIDKey]; + responsePart.parseError = [NSError errorWithDomain:kGTLRServiceErrorDomain + code:GTLRServiceErrorBatchResponseUnexpected + userInfo:userInfo]; + } else { + // Separate the status/inner headers and the actual body. + NSUInteger partBodyLength = mimePartBody.length; + NSUInteger separatorOffset = offsets[0].unsignedIntegerValue; + NSData *innerHeaderData = + [mimePartBody subdataWithRange:NSMakeRange(0, (NSUInteger)separatorOffset)]; + + NSData *partBodyData; + if (separatorOffset + 4 < partBodyLength) { + NSUInteger offsetToBodyData = separatorOffset + 4; + NSUInteger bodyLength = mimePartBody.length - offsetToBodyData; + partBodyData = [mimePartBody subdataWithRange:NSMakeRange(offsetToBodyData, bodyLength)]; + } + + // Parse to separate the status line and the inner headers (though we don't + // really do much with either.) + [GTMMIMEDocument searchData:innerHeaderData + targetBytes:"\r\n" + targetLength:2 + foundOffsets:&offsets]; + if (offsets.count < 2) { + // Lack of status line and inner headers is strange, but not fatal since + // if the JSON was delivered. + GTLR_DEBUG_LOG(@"GTLRService: Batch result cannot parse headers for request %@:\n%@", + responseContentID, + [[NSString alloc] initWithData:innerHeaderData + encoding:NSUTF8StringEncoding]); + } else { + NSString *statusString; + NSInteger statusCode; + [self getResponseLineFromData:innerHeaderData + statusCode:&statusCode + statusString:&statusString]; + responsePart.statusCode = statusCode; + responsePart.statusString = statusString; + + NSUInteger actualInnerHeaderOffset = offsets[0].unsignedIntegerValue + 2; + NSData *actualInnerHeaderData; + if (innerHeaderData.length - actualInnerHeaderOffset > 0) { + NSRange actualInnerHeaderRange = + NSMakeRange(actualInnerHeaderOffset, + innerHeaderData.length - actualInnerHeaderOffset); + actualInnerHeaderData = [innerHeaderData subdataWithRange:actualInnerHeaderRange]; + } + responsePart.headers = [GTMMIMEDocument headersWithData:actualInnerHeaderData]; + } + + // Create JSON from the body. + NSError *parseError = nil; + NSMutableDictionary *json; + if (partBodyData) { + json = [NSJSONSerialization JSONObjectWithData:partBodyData + options:NSJSONReadingMutableContainers + error:&parseError]; + } else { + parseError = [NSError errorWithDomain:kGTLRServiceErrorDomain + code:GTLRServiceErrorBatchResponseUnexpected + userInfo:nil]; + } + responsePart.JSON = json; + + if (!json) { + // Add our content ID and part body data to the parse error. + NSMutableDictionary *userInfo = + [NSMutableDictionary dictionaryWithDictionary:parseError.userInfo]; + [userInfo setValue:mimePartBody forKey:kGTLRServiceErrorBodyDataKey]; + [userInfo setValue:responseContentID forKey:kGTLRServiceErrorContentIDKey]; + responsePart.parseError = [NSError errorWithDomain:parseError.domain + code:parseError.code + userInfo:userInfo]; + } + } + return responsePart; +} + +- (void)getResponseLineFromData:(NSData *)data + statusCode:(NSInteger *)outStatusCode + statusString:(NSString **)outStatusString { + // Sample response line: + // HTTP/1.1 200 OK + + *outStatusCode = -1; + *outStatusString = @"???"; + NSString *responseLine = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + if (!responseLine) return; + + NSScanner *scanner = [NSScanner scannerWithString:responseLine]; + // Scanner by default skips whitespace when locating the start of the next characters to + // scan. + NSCharacterSet *wsSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; + NSCharacterSet *newlineSet = [NSCharacterSet newlineCharacterSet]; + NSString *httpVersion; + if ([scanner scanUpToCharactersFromSet:wsSet intoString:&httpVersion] + && [scanner scanInteger:outStatusCode] + && [scanner scanUpToCharactersFromSet:newlineSet intoString:outStatusString]) { + // Got it all. + } +} + +- (GTLRBatchResult *)batchResultWithResponseParts:(NSArray *)parts + batchClassMap:(NSDictionary *)batchClassMap + objectClassResolver:(id)objectClassResolver { + // Allow the resolver to override the batch rules class also. + Class resultClass = + GTLRObjectResolveClass(objectClassResolver, + [NSDictionary dictionary], + [GTLRBatchResult class]); + GTLRBatchResult *batchResult = [resultClass object]; + + NSMutableDictionary *successes = [NSMutableDictionary dictionary]; + NSMutableDictionary *failures = [NSMutableDictionary dictionary]; + NSMutableDictionary *responseHeaders = [NSMutableDictionary dictionary]; + + for (GTLRBatchResponsePart *responsePart in parts) { + NSString *contentID = responsePart.contentID; + NSDictionary *json = responsePart.JSON; + NSError *parseError = responsePart.parseError; + NSInteger statusCode = responsePart.statusCode; + [responseHeaders setValue:responsePart.headers forKey:contentID]; + + if (parseError) { + GTLRErrorObject *parseErrorObject = [GTLRErrorObject objectWithFoundationError:parseError]; + [failures setValue:parseErrorObject forKey:contentID]; + } else { + // There is JSON. + NSMutableDictionary *errorJSON = [json objectForKey:@"error"]; + if (errorJSON) { + // A JSON error body should be the most informative error. + GTLRErrorObject *errorObject = [GTLRErrorObject objectWithJSON:errorJSON]; + [failures setValue:errorObject forKey:contentID]; + } else if (statusCode < 200 || statusCode > 399) { + // Report a fetch failure for this part that lacks a JSON error. + NSString *errorStr = responsePart.statusString; + NSDictionary *userInfo = @{ + NSLocalizedDescriptionKey : (errorStr ?: @""), + }; + NSError *httpError = [NSError errorWithDomain:kGTLRServiceErrorDomain + code:GTLRServiceErrorBatchResponseStatusCode + userInfo:userInfo]; + GTLRErrorObject *httpErrorObject = [GTLRErrorObject objectWithFoundationError:httpError]; + [failures setValue:httpErrorObject forKey:contentID]; + } else { + // The JSON represents a successful response. + Class defaultClass = batchClassMap[contentID]; + id resultObject = [GTLRObject objectForJSON:[json mutableCopy] + defaultClass:defaultClass + objectClassResolver:objectClassResolver]; + if (resultObject == nil) { + // Methods like delete return no object. + resultObject = [NSNull null]; + } + [successes setValue:resultObject forKey:contentID]; + } // errorJSON + } // parseError + } // for + batchResult.successes = successes; + batchResult.failures = failures; + batchResult.responseHeaders = responseHeaders; + return batchResult; +} + +- (void)invokeBatchCompletionsWithTicket:(GTLRServiceTicket *)ticket + batchQuery:(GTLRBatchQuery *)batchQuery + batchResult:(GTLRBatchResult *)batchResult + error:(NSError *)error { + // Batch query + // + // We'll step through the queries of the original batch, not of the + // batch result + GTLR_ASSERT_CURRENT_QUEUE_DEBUG(ticket.callbackQueue); + + NSDictionary *successes = batchResult.successes; + NSDictionary *failures = batchResult.failures; + + for (GTLRQuery *oneQuery in batchQuery.queries) { + GTLRServiceCompletionHandler completionBlock = oneQuery.completionBlock; + if (completionBlock) { + // If there was no networking error, look for a query-specific + // error or result + GTLRObject *oneResult = nil; + NSError *oneError = error; + if (oneError == nil) { + NSString *requestID = [oneQuery requestID]; + GTLRErrorObject *gtlrError = [failures objectForKey:requestID]; + if (gtlrError) { + oneError = [gtlrError foundationError]; + } else { + oneResult = [successes objectForKey:requestID]; + if (oneResult == nil) { + // We found neither a success nor a failure for this query, unexpectedly. + GTLR_DEBUG_LOG(@"GTLRService: Batch result missing for request %@", + requestID); + oneError = [NSError errorWithDomain:kGTLRServiceErrorDomain + code:GTLRServiceErrorQueryResultMissing + userInfo:nil]; + } + } + } + completionBlock(ticket, oneResult, oneError); + } + } +} + +- (void)simulateFetchWithTicket:(GTLRServiceTicket *)ticket + testBlock:(GTLRServiceTestBlock)testBlock + dataToPost:(NSData *)dataToPost + completionHandler:(GTLRServiceCompletionHandler)completionHandler { + + GTLRQuery *originalQuery = (GTLRQuery *)ticket.originalQuery; + ticket.executingQuery = originalQuery; + + testBlock(ticket, ^(id testObject, NSError *testError) { + dispatch_group_async(ticket.callbackGroup, ticket.callbackQueue, ^{ + if (!ticket.cancelled) { + if (testError) { + // During simulation, we invoke any retry block, but ignore the result. + const BOOL willRetry = NO; + GTLRServiceRetryBlock retryBlock = ticket.retryBlock; + if (retryBlock) { + (void)retryBlock(ticket, willRetry, testError); + } + } else { + // Simulate upload progress, calling back up to three times. + if (ticket.uploadProgressBlock) { + GTLRQuery *query = (GTLRQuery *)ticket.originalQuery; + unsigned long long uploadLength = [self simulatedUploadLengthForQuery:query + dataToPost:dataToPost]; + unsigned long long sendReportSize = uploadLength / 3 + 1; + unsigned long long totalSentSoFar = 0; + while (totalSentSoFar < uploadLength) { + unsigned long long bytesRemaining = uploadLength - totalSentSoFar; + sendReportSize = MIN(sendReportSize, bytesRemaining); + totalSentSoFar += sendReportSize; + + [self invokeProgressCallbackForTicket:ticket + deliveredBytes:(unsigned long long)totalSentSoFar + totalBytes:(unsigned long long)uploadLength]; + } + [ticket postNotificationOnMainThreadWithName:kGTLRServiceTicketParsingStartedNotification + object:ticket + userInfo:nil]; + [ticket postNotificationOnMainThreadWithName:kGTLRServiceTicketParsingStoppedNotification + object:ticket + userInfo:nil]; + } + } + + if (![originalQuery isBatchQuery]) { + // Single query + GTLRServiceCompletionHandler completionBlock = originalQuery.completionBlock; + if (completionBlock) { + completionBlock(ticket, testObject, testError); + } + } else { + // Batch query + GTLR_DEBUG_ASSERT(!testObject || [testObject isKindOfClass:[GTLRBatchResult class]], + @"Batch queries should have result objects of type GTLRBatchResult (not %@)", + [testObject class]); + + [self invokeBatchCompletionsWithTicket:ticket + batchQuery:(GTLRBatchQuery *)originalQuery + batchResult:(GTLRBatchResult *)testObject + error:testError]; + } // isBatchQuery + + if (completionHandler) { + completionHandler(ticket, testObject, testError); + } + ticket.hasCalledCallback = YES; + } // !ticket.cancelled + + // Even if the ticket has been cancelled, it should notify that it's stopped. + [ticket notifyStarting:NO]; + + // Release query callback blocks. + [originalQuery invalidateQuery]; + }); // dispatch_group_async + }); // testBlock +} + +- (unsigned long long)simulatedUploadLengthForQuery:(GTLRQuery *)query + dataToPost:(NSData *)dataToPost { + // We're uploading the body object and other posted metadata, plus optionally the + // data or file specified in the upload parameters. + unsigned long long uploadLength = dataToPost.length; + + GTLRUploadParameters *uploadParameters = query.uploadParameters; + if (uploadParameters) { + NSData *uploadData = uploadParameters.data; + if (uploadData) { + uploadLength += uploadData.length; + } else { + NSURL *fileURL = uploadParameters.fileURL; + if (fileURL) { + NSError *fileError = nil; + NSNumber *fileSizeNum = nil; + if ([fileURL getResourceValue:&fileSizeNum + forKey:NSURLFileSizeKey + error:&fileError]) { + uploadLength += fileSizeNum.unsignedLongLongValue; + } + } else { + NSFileHandle *fileHandle = uploadParameters.fileHandle; + unsigned long long fileLength = [fileHandle seekToEndOfFile]; + uploadLength += fileLength; + } + } + } + return uploadLength; +} + +#pragma mark - + +// Given a single or batch query and its result, make a new query +// for the next pages, if any. Returns nil if there's no additional +// query to make. +// +// This method calls itself recursively to make the individual next page +// queries for a batch query. +- (id )nextPageQueryForQuery:(id)query + result:(GTLRObject *)object + ticket:(GTLRServiceTicket *)ticket { + if (![query isBatchQuery]) { + // This is a single query + GTLRQuery *currentPageQuery = (GTLRQuery *)query; + + // Determine if we should fetch more pages of results + GTLRQuery *nextPageQuery = nil; + NSString *nextPageToken = nil; + + if ([object respondsToSelector:@selector(nextPageToken)] + && [currentPageQuery respondsToSelector:@selector(pageToken)]) { + nextPageToken = [object performSelector:@selector(nextPageToken)]; + } + + if (nextPageToken && [object isKindOfClass:[GTLRCollectionObject class]]) { + NSString *itemsKey = [[object class] collectionItemsKey]; + GTLR_DEBUG_ASSERT(itemsKey != nil, @"Missing accumulation items key for %@", [object class]); + + SEL itemsSel = NSSelectorFromString(itemsKey); + if ([object respondsToSelector:itemsSel]) { + // Make a query for the next page, preserving the request ID + nextPageQuery = [currentPageQuery copy]; + nextPageQuery.requestID = currentPageQuery.requestID; + + [nextPageQuery performSelector:@selector(setPageToken:) + withObject:nextPageToken]; + } else { + GTLR_DEBUG_ASSERT(0, @"%@ does not implement its collection items property \"%@\"", + [object class], itemsKey); + } + } + return nextPageQuery; + } else { + // This is a batch query + // + // Check if there's a next page to fetch for any of the success + // results by invoking this method recursively on each of those results + GTLRBatchResult *batchResult = (GTLRBatchResult *)object; + GTLRBatchQuery *nextPageBatchQuery = nil; + NSDictionary *successes = batchResult.successes; + + for (NSString *requestID in successes) { + GTLRObject *singleObject = [successes objectForKey:requestID]; + GTLRQuery *singleQuery = [ticket queryForRequestID:requestID]; + + GTLRQuery *newQuery = + (GTLRQuery *)[self nextPageQueryForQuery:singleQuery + result:singleObject + ticket:ticket]; + if (newQuery) { + // There is another query to fetch + if (nextPageBatchQuery == nil) { + nextPageBatchQuery = [GTLRBatchQuery batchQuery]; + } + [nextPageBatchQuery addQuery:newQuery]; + } + } + return nextPageBatchQuery; + } +} + +// When a ticket is set to fetch more pages for feeds, this routine +// initiates the fetch for each additional feed page +// +// Returns YES if fetching of the next page has started. +- (BOOL)fetchNextPageWithQuery:(GTLRQuery *)query + completionHandler:(GTLRServiceCompletionHandler)handler + ticket:(GTLRServiceTicket *)ticket { + // Sanity check the number of pages fetched already + if (ticket.pagesFetchedCounter > kMaxNumberOfNextPagesFetched) { + // Sanity check failed: way too many pages were fetched, so the query's + // page size should be bigger to avoid driving up networking and server + // overhead. + // + // The client should be querying with a higher max results per page + // to avoid this. + GTLR_DEBUG_ASSERT(0, @"Fetched too many next pages executing %@;" + @" increase maxResults page size to avoid this.", + [query class]); + return NO; + } + + GTLRServiceTicket *newTicket; + if ([query isBatchQuery]) { + newTicket = [self executeBatchQuery:(GTLRBatchQuery *)query + completionHandler:handler + ticket:ticket]; + } else { + BOOL mayAuthorize = !query.shouldSkipAuthorization; + NSURL *url = [self URLFromQueryObject:query + usePartialPaths:NO + includeServiceURLQueryParams:YES]; + newTicket = [self fetchObjectWithURL:url + objectClass:query.expectedObjectClass + bodyObject:query.bodyObject + ETag:nil + httpMethod:query.httpMethod + mayAuthorize:mayAuthorize + completionHandler:handler + executingQuery:query + ticket:ticket]; + } + + // In the bizarre case that the fetch didn't begin, newTicket will be + // nil. So long as the new ticket is the same as the ticket we're + // continuing, then we're happy. + GTLR_ASSERT(newTicket == ticket || newTicket == nil, + @"Pagination should not create an additional ticket: %@", newTicket); + + BOOL isFetchingNextPageWithCurrentTicket = (newTicket == ticket); + return isFetchingNextPageWithCurrentTicket; +} + +// Given a new single or batch result (meaning additional pages for a previous +// query result), merge it into the old result, and return the updated object. +// +// For a single result, this inserts the old result items into the new result. +// For batch results, this replaces some of the old items with new items. +// +// This method changes the objects passed in (the old result for batches, the new result +// for individual objects.) +- (GTLRObject *)mergedNewResultObject:(GTLRObject *)newResult + oldResultObject:(GTLRObject *)oldResult + forQuery:(id)query + ticket:(GTLRServiceTicket *)ticket { + GTLR_DEBUG_ASSERT([oldResult isMemberOfClass:[newResult class]], + @"Trying to merge %@ and %@", [oldResult class], [newResult class]); + + if ([query isBatchQuery]) { + // Batch query result + // + // The new batch results are a subset of the old result's queries, since + // not all queries in the batch necessarily have additional pages. + // + // New success objects replace old success objects, with the old items + // prepended; new failure objects replace old success objects. + // We will update the old batch results with accumulated items, using the + // new objects, and return the old batch. + // + // We reuse the old batch results object because it may include some earlier + // results which did not have additional pages. + GTLRBatchResult *newBatchResult = (GTLRBatchResult *)newResult; + GTLRBatchResult *oldBatchResult = (GTLRBatchResult *)oldResult; + + NSDictionary *newSuccesses = newBatchResult.successes; + if (newSuccesses.count > 0) { + NSDictionary *oldSuccesses = oldBatchResult.successes; + NSMutableDictionary *mutableOldSuccesses = [oldSuccesses mutableCopy]; + + for (NSString *requestID in newSuccesses) { + GTLRObject *newObj = [newSuccesses objectForKey:requestID]; + GTLRObject *oldObj = [oldSuccesses objectForKey:requestID]; + + GTLRQuery *thisQuery = [ticket queryForRequestID:requestID]; + + // Recursively merge the single query's result object, appending new items to the old items. + GTLRObject *updatedObj = [self mergedNewResultObject:newObj + oldResultObject:oldObj + forQuery:thisQuery + ticket:ticket]; + + // In the old batch, replace the old result object with the new one. + [mutableOldSuccesses setObject:updatedObj forKey:requestID]; + } // for requestID + oldBatchResult.successes = mutableOldSuccesses; + } // newSuccesses.count > 0 + + NSDictionary *newFailures = newBatchResult.failures; + if (newFailures.count > 0) { + NSMutableDictionary *mutableOldSuccesses = [oldBatchResult.successes mutableCopy]; + NSMutableDictionary *mutableOldFailures = [oldBatchResult.failures mutableCopy]; + for (NSString *requestID in newFailures) { + // In the old batch, replace old successes or failures with the new failure. + GTLRErrorObject *newError = [newFailures objectForKey:requestID]; + [mutableOldFailures setObject:newError forKey:requestID]; + + [mutableOldSuccesses removeObjectForKey:requestID]; + } + oldBatchResult.failures = mutableOldFailures; + oldBatchResult.successes = mutableOldSuccesses; + } // newFailures.count > 0 + return oldBatchResult; + } else { + // Single query result + // + // Merge the items into the new object, and return the new object. + NSString *itemsKey = [[oldResult class] collectionItemsKey]; + + GTLR_DEBUG_ASSERT([oldResult respondsToSelector:NSSelectorFromString(itemsKey)], + @"Collection items key \"%@\" not implemented by %@", itemsKey, oldResult); + if (itemsKey) { + // Append the new items to the old items. + NSArray *oldItems = [oldResult valueForKey:itemsKey]; + NSArray *newItems = [newResult valueForKey:itemsKey]; + NSMutableArray *items = [NSMutableArray arrayWithArray:oldItems]; + [items addObjectsFromArray:newItems]; + [newResult setValue:items forKey:itemsKey]; + } else { + // This shouldn't happen. + newResult = oldResult; + } + return newResult; + } +} + +#pragma mark - + +// GTLRQuery methods. + +// Helper to create the URL from the parts. +- (NSURL *)URLFromQueryObject:(GTLRQuery *)query + usePartialPaths:(BOOL)usePartialPaths + includeServiceURLQueryParams:(BOOL)includeServiceURLQueryParams { + NSString *rootURLString = self.rootURLString; + + // Skip URI template expansion if the resource URL was provided. + if ([query isKindOfClass:[GTLRResourceURLQuery class]]) { + // Because the query is created by the service rather than by the user, + // query.additionalURLQueryParameters must be nil, and usePartialPaths + // is irrelevant as the query is not in a batch. + GTLR_DEBUG_ASSERT(!usePartialPaths, + @"Batch not supported with resource URL fetch"); + GTLR_DEBUG_ASSERT(!query.uploadParameters && !query.useMediaDownloadService + && !query.downloadAsDataObjectType && !query.additionalURLQueryParameters, + @"Unsupported query properties"); + NSURL *result = ((GTLRResourceURLQuery *)query).resourceURL; + if (includeServiceURLQueryParams) { + NSDictionary *additionalParams = self.additionalURLQueryParameters; + if (additionalParams.count) { + result = [GTLRService URLWithString:result.absoluteString + queryParameters:additionalParams]; + } + } + return result; + } + + // This is all the dance needed due to having query and path parameters for + // REST based queries. + NSDictionary *params = query.JSON; + NSString *queryFilledPathURI = [GTLRURITemplate expandTemplate:query.pathURITemplate + values:params]; + + // Per https://developers.google.com/discovery/v1/using#build-compose and + // https://developers.google.com/discovery/v1/using#discovery-doc-methods-mediadownload + // glue together the parts. + NSString *servicePath = self.servicePath ?: @""; + NSString *uploadPath = @""; + NSString *downloadPath = @""; + + GTLR_DEBUG_ASSERT([rootURLString hasSuffix:@"/"], + @"rootURLString should end in a slash: %@", rootURLString); + GTLR_DEBUG_ASSERT(((servicePath.length == 0) || + (![servicePath hasPrefix:@"/"] && [servicePath hasSuffix:@"/"])), + @"servicePath shouldn't start with a slash but should end with one: %@", + servicePath); + GTLR_DEBUG_ASSERT(![query.pathURITemplate hasPrefix:@"/"], + @"the queries's pathURITemplate should not start with a slash: %@", + query.pathURITemplate); + + GTLRUploadParameters *uploadParameters = query.uploadParameters; + if (uploadParameters != nil) { + // If there is an override, clear all the parts and just use it with the + // the rootURLString. + NSString *override = (uploadParameters.shouldUploadWithSingleRequest + ? query.simpleUploadPathURITemplateOverride + : query.resumableUploadPathURITemplateOverride); + if (override.length > 0) { + GTLR_DEBUG_ASSERT(![override hasPrefix:@"/"], + @"The query's %@UploadPathURITemplateOverride should not start with a slash: %@", + (uploadParameters.shouldUploadWithSingleRequest ? @"simple" : @"resumable"), + override); + queryFilledPathURI = [GTLRURITemplate expandTemplate:override + values:params]; + servicePath = @""; + } else { + if (uploadParameters.shouldUploadWithSingleRequest) { + uploadPath = self.simpleUploadPath ?: @""; + } else { + uploadPath = self.resumableUploadPath ?: @""; + } + GTLR_DEBUG_ASSERT(((uploadPath.length == 0) || + (![uploadPath hasPrefix:@"/"] && + [uploadPath hasSuffix:@"/"])), + @"%@UploadPath shouldn't start with a slash but should end with one: %@", + (uploadParameters.shouldUploadWithSingleRequest ? @"simple" : @"resumable"), + uploadPath); + } + } + + if (query.useMediaDownloadService && + (query.downloadAsDataObjectType.length > 0)) { + downloadPath = @"download/"; + GTLR_DEBUG_ASSERT(uploadPath.length == 0, + @"Uploading while also downloading via mediaDownService" + @" is not well defined."); + } + + if (usePartialPaths) rootURLString = @"/"; + + NSString *urlString = + [NSString stringWithFormat:@"%@%@%@%@%@", + rootURLString, downloadPath, uploadPath, servicePath, queryFilledPathURI]; + + // Remove the path parameters from the dictionary. + NSMutableDictionary *workingQueryParams = [NSMutableDictionary dictionaryWithDictionary:params]; + + NSArray *pathParameterNames = query.pathParameterNames; + if (pathParameterNames.count > 0) { + [workingQueryParams removeObjectsForKeys:pathParameterNames]; + } + + // Note: A developer can override the uploadType and alt query parameters via + // query.additionalURLQueryParameters since those are added afterwards. + if (uploadParameters.shouldUploadWithSingleRequest) { + NSString *uploadType = uploadParameters.shouldSendUploadOnly ? @"media" : @"multipart"; + [workingQueryParams setObject:uploadType forKey:@"uploadType"]; + } + NSString *downloadAsDataObjectType = query.downloadAsDataObjectType; + if (downloadAsDataObjectType.length > 0) { + [workingQueryParams setObject:downloadAsDataObjectType + forKey:@"alt"]; + } + + // Add any parameters the user added directly to the query. + NSDictionary *mergedParams = MergeDictionaries(workingQueryParams, + query.additionalURLQueryParameters); + if (includeServiceURLQueryParams) { + // Query parameters override service parameters. + mergedParams = MergeDictionaries(self.additionalURLQueryParameters, mergedParams); + } + + NSURL *result = [GTLRService URLWithString:urlString + queryParameters:mergedParams]; + return result; +} + +- (GTLRServiceTicket *)executeQuery:(id)queryObj + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + GTMSessionFetcherAssertValidSelector(delegate, finishedSelector, + @encode(GTLRServiceTicket *), @encode(GTLRObject *), @encode(NSError *), 0); + GTLRServiceCompletionHandler completionHandler = ^(GTLRServiceTicket *ticket, + id object, + NSError *error) { + if (delegate && finishedSelector) { + NSMethodSignature *sig = [delegate methodSignatureForSelector:finishedSelector]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; + [invocation setSelector:(SEL)finishedSelector]; + [invocation setTarget:delegate]; + [invocation setArgument:&ticket atIndex:2]; + [invocation setArgument:&object atIndex:3]; + [invocation setArgument:&error atIndex:4]; + [invocation invoke]; + } + }; + return [self executeQuery:queryObj completionHandler:completionHandler]; +} + +- (GTLRServiceTicket *)executeQuery:(id)queryObj + completionHandler:(void (^)(GTLRServiceTicket *ticket, id object, + NSError *error))handler { + if ([queryObj isBatchQuery]) { + GTLR_DEBUG_ASSERT([queryObj isKindOfClass:[GTLRBatchQuery class]], + @"GTLRBatchQuery required for batches (passed %@)", + [queryObj class]); + return [self executeBatchQuery:(GTLRBatchQuery *)queryObj + completionHandler:handler + ticket:nil]; + } + GTLR_DEBUG_ASSERT([queryObj isKindOfClass:[GTLRQuery class]], + @"GTLRQuery required for single queries (passed %@)", + [queryObj class]); + + // Copy the original query so our working query cannot be modified by the caller, + // and release the callback blocks from the supplied query object. + GTLRQuery *query = [(GTLRQuery *)queryObj copy]; + + GTLR_DEBUG_ASSERT(!query.queryInvalid, @"Query has already been executed: %@", query); + [queryObj invalidateQuery]; + + // For individual queries, we rely on the fetcher's log formatting so pretty-printing + // is not needed. Developers may override this in the query's additionalURLQueryParameters. + NSArray *prettyPrintNames = self.prettyPrintQueryParameterNames; + NSString *firstPrettyPrintName = prettyPrintNames.firstObject; + if (firstPrettyPrintName && (query.downloadAsDataObjectType.length == 0) + && ![query isKindOfClass:[GTLRResourceURLQuery class]]) { + NSDictionary *queryParams = query.additionalURLQueryParameters; + BOOL foundOne = NO; + for (NSString *name in prettyPrintNames) { + if ([queryParams objectForKey:name] != nil) { + foundOne = YES; + break; + } + } + if (!foundOne) { + NSMutableDictionary *worker = + [NSMutableDictionary dictionaryWithDictionary:queryParams]; + [worker setObject:@"false" forKey:firstPrettyPrintName]; + query.additionalURLQueryParameters = worker; + } + } + + BOOL mayAuthorize = !query.shouldSkipAuthorization; + NSURL *url = [self URLFromQueryObject:query + usePartialPaths:NO + includeServiceURLQueryParams:YES]; + + return [self fetchObjectWithURL:url + objectClass:query.expectedObjectClass + bodyObject:query.bodyObject + ETag:nil + httpMethod:query.httpMethod + mayAuthorize:mayAuthorize + completionHandler:handler + executingQuery:query + ticket:nil]; +} + +- (GTLRServiceTicket *)fetchObjectWithURL:(NSURL *)resourceURL + objectClass:(nullable Class)objectClass + executionParameters:(nullable GTLRServiceExecutionParameters *)executionParameters + completionHandler:(nullable GTLRServiceCompletionHandler)handler { + GTLRResourceURLQuery *query = [GTLRResourceURLQuery queryWithResourceURL:resourceURL + objectClass:objectClass]; + query.executionParameters = executionParameters; + + return [self executeQuery:query + completionHandler:handler]; +} + +#pragma mark - + +- (NSString *)userAgent { + return _userAgent; +} + +- (void)setExactUserAgent:(NSString *)userAgent { + _userAgent = [userAgent copy]; +} + +- (void)setUserAgent:(NSString *)userAgent { + // remove whitespace and unfriendly characters + NSString *str = GTMFetcherCleanedUserAgentString(userAgent); + [self setExactUserAgent:str]; +} + +- (void)overrideRequestUserAgent:(nullable NSString *)requestUserAgent { + _overrideUserAgent = [requestUserAgent copy]; +} + +#pragma mark - + ++ (NSDictionary *)kindStringToClassMap { + // Generated services will provide custom ones. + return [NSDictionary dictionary]; +} + +#pragma mark - + +// The service properties becomes the initial value for each future ticket's +// properties +- (void)setServiceProperties:(NSDictionary *)dict { + _serviceProperties = [dict copy]; +} + +- (NSDictionary *)serviceProperties { + // be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + __autoreleasing id props = _serviceProperties; + return props; +} + +- (void)setAuthorizer:(id )authorizer { + self.fetcherService.authorizer = authorizer; +} + +- (id )authorizer { + return self.fetcherService.authorizer; +} + ++ (NSUInteger)defaultServiceUploadChunkSize { + // Subclasses may override this method. + + // The upload server prefers multiples of 256K. + const NSUInteger kMegabyte = 4 * 256 * 1024; + +#if TARGET_OS_IPHONE + // For iOS, we're balancing a large upload size with limiting the memory + // used for the upload data buffer. + return 4 * kMegabyte; +#else + // A large upload chunk size minimizes http overhead and server effort. + return 25 * kMegabyte; +#endif +} + +- (NSUInteger)serviceUploadChunkSize { + if (_uploadChunkSize > 0) { + return _uploadChunkSize; + } + return [[self class] defaultServiceUploadChunkSize]; +} + +- (void)setServiceUploadChunkSize:(NSUInteger)val { + _uploadChunkSize = val; +} + +- (void)setSurrogates:(NSDictionary *)surrogates { + NSDictionary *kindMap = [[self class] kindStringToClassMap]; + + self.objectClassResolver = [GTLRObjectClassResolver resolverWithKindMap:kindMap + surrogates:surrogates]; +} + +#pragma mark - Internal helper + +// If there are already query parameters on urlString, the new ones are simply +// appended after them. ++ (NSURL *)URLWithString:(NSString *)urlString + queryParameters:(NSDictionary *)queryParameters { + if (urlString.length == 0) return nil; + + NSString *fullURLString; + if (queryParameters.count > 0) { + // Use GTLRURITemplate by building up a template and then feeding in the + // values. The template is query expansion ('?'), and any key that is + // an array or dictionary gets tagged to explode them ('+'). + NSArray *sortedQueryParamKeys = + [queryParameters.allKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; + + NSMutableString *template = [@"{" mutableCopy]; + char joiner = '?'; + for (NSString *key in sortedQueryParamKeys) { + [template appendFormat:@"%c%@", joiner, key]; + id value = [queryParameters objectForKey:key]; + if ([value isKindOfClass:[NSArray class]] || + [value isKindOfClass:[NSDictionary class]]) { + [template appendString:@"+"]; + } + joiner = ','; + } + [template appendString:@"}"]; + NSString *urlArgs = + [GTLRURITemplate expandTemplate:template + values:queryParameters]; + urlArgs = [urlArgs substringFromIndex:1]; // Drop the '?' and use the joiner. + + BOOL missingQMark = ([urlString rangeOfString:@"?"].location == NSNotFound); + joiner = missingQMark ? '?' : '&'; + fullURLString = + [NSString stringWithFormat:@"%@%c%@", urlString, joiner, urlArgs]; + } else { + fullURLString = urlString; + } + NSURL *result = [NSURL URLWithString:fullURLString]; + return result; +} + +@end + +@implementation GTLRService (TestingSupport) + ++ (instancetype)mockServiceWithFakedObject:(id)objectOrNil + fakedError:(NSError *)errorOrNil { + GTLRService *service = [[GTLRService alloc] init]; + service.rootURLString = @"https://example.invalid/"; + service.testBlock = ^(GTLRServiceTicket *ticket, GTLRServiceTestResponse testResponse) { + testResponse(objectOrNil, errorOrNil); + }; + return service; +} + +- (BOOL)waitForTicket:(GTLRServiceTicket *)ticket + timeout:(NSTimeInterval)timeoutInSeconds { + // Loop until the fetch completes or is cancelled, or until the timeout has expired. + NSDate *giveUpDate = [NSDate dateWithTimeIntervalSinceNow:timeoutInSeconds]; + + BOOL hasTimedOut = NO; + while (1) { + int64_t delta = (int64_t)(100 * NSEC_PER_MSEC); // 100 ms + BOOL areCallbacksPending = + (dispatch_group_wait(ticket.callbackGroup, dispatch_time(DISPATCH_TIME_NOW, delta)) != 0); + + if (!areCallbacksPending && (ticket.hasCalledCallback || ticket.cancelled)) break; + + hasTimedOut = (giveUpDate.timeIntervalSinceNow <= 0); + if (hasTimedOut) { + if (areCallbacksPending) { + // A timeout while waiting for the dispatch group to finish is seriously unexpected. + GTLR_DEBUG_LOG(@"%s timed out while waiting for the dispatch group", __PRETTY_FUNCTION__); + } else { + GTLR_DEBUG_LOG(@"%s timed out without callbacks pending", __PRETTY_FUNCTION__); + } + break; + } + + // Run the current run loop 1/1000 of a second to give the networking + // code a chance to work. + NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:0.001]; + [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; + } + return !hasTimedOut; +} + +@end + +@implementation GTLRServiceTicket { + GTLRService *_service; + NSDictionary *_ticketProperties; + GTLRServiceUploadProgressBlock _uploadProgressBlock; + BOOL _needsStopNotification; +} + +@synthesize APIKey = _apiKey, + APIKeyRestrictionBundleID = _apiKeyRestrictionBundleID, + allowInsecureQueries = _allowInsecureQueries, + authorizer = _authorizer, + cancelled = _cancelled, + callbackGroup = _callbackGroup, + callbackQueue = _callbackQueue, + creationDate = _creationDate, + executingQuery = _executingQuery, + fetchedObject = _fetchedObject, + fetchError = _fetchError, + fetchRequest = _fetchRequest, + fetcherService = _fetcherService, + hasCalledCallback = _hasCalledCallback, + maxRetryInterval = _maxRetryInterval, + objectFetcher = _objectFetcher, + originalQuery = _originalQuery, + pagesFetchedCounter = _pagesFetchedCounter, + postedObject = _postedObject, + retryBlock = _retryBlock, + retryEnabled = _retryEnabled, + shouldFetchNextPages = _shouldFetchNextPages, + objectClassResolver = _objectClassResolver, + testBlock = _testBlock; + +#if GTM_BACKGROUND_TASK_FETCHING +@synthesize backgroundTaskIdentifier = _backgroundTaskIdentifier; +#endif + +#if DEBUG +- (instancetype)init { + [self doesNotRecognizeSelector:_cmd]; + self = nil; + return self; +} +#endif + +#if GTM_BACKGROUND_TASK_FETCHING && DEBUG +- (void)dealloc { + GTLR_DEBUG_ASSERT(_backgroundTaskIdentifier == UIBackgroundTaskInvalid, + @"Background task not ended"); +} +#endif // GTM_BACKGROUND_TASK_FETCHING && DEBUG + + +- (instancetype)initWithService:(GTLRService *)service + executionParameters:(GTLRServiceExecutionParameters *)params { + self = [super init]; + if (self) { + // ivars set at init time and never changed are exposed as atomic readonly properties. + _service = service; + _fetcherService = service.fetcherService; + _authorizer = service.authorizer; + + _ticketProperties = MergeDictionaries(service.serviceProperties, params.ticketProperties); + + _objectClassResolver = params.objectClassResolver ?: service.objectClassResolver; + + _retryEnabled = ((params.retryEnabled != nil) ? params.retryEnabled.boolValue : service.retryEnabled); + _maxRetryInterval = ((params.maxRetryInterval != nil) ? + params.maxRetryInterval.doubleValue : service.maxRetryInterval); + _shouldFetchNextPages = ((params.shouldFetchNextPages != nil)? + params.shouldFetchNextPages.boolValue : service.shouldFetchNextPages); + + GTLRServiceUploadProgressBlock uploadProgressBlock = + params.uploadProgressBlock ?: service.uploadProgressBlock; + _uploadProgressBlock = [uploadProgressBlock copy]; + + GTLRServiceRetryBlock retryBlock = params.retryBlock ?: service.retryBlock; + _retryBlock = [retryBlock copy]; + if (_retryBlock) { + _retryEnabled = YES; + } + + _testBlock = params.testBlock ?: service.testBlock; + + _callbackQueue = ((_Nonnull dispatch_queue_t)params.callbackQueue) ?: service.callbackQueue; + _callbackGroup = dispatch_group_create(); + + _apiKey = [service.APIKey copy]; + _apiKeyRestrictionBundleID = [service.APIKeyRestrictionBundleID copy]; + _allowInsecureQueries = service.allowInsecureQueries; + +#if GTM_BACKGROUND_TASK_FETCHING + _backgroundTaskIdentifier = UIBackgroundTaskInvalid; +#endif + + _creationDate = [NSDate date]; + } + return self; +} + +- (NSString *)description { + NSString *devKeyInfo = @""; + if (_apiKey != nil) { + devKeyInfo = [NSString stringWithFormat:@" devKey:%@", _apiKey]; + } + NSString *keyRestrictionInfo = @""; + if (_apiKeyRestrictionBundleID != nil) { + keyRestrictionInfo = [NSString stringWithFormat:@" restriction:%@", + _apiKeyRestrictionBundleID]; + } + + NSString *authorizerInfo = @""; + id authorizer = self.objectFetcher.authorizer; + if (authorizer != nil) { + authorizerInfo = [NSString stringWithFormat:@" authorizer:%@", authorizer]; + } + + return [NSString stringWithFormat:@"%@ %p: {service:%@%@%@%@ fetcher:%@ }", + [self class], self, + _service, devKeyInfo, keyRestrictionInfo, authorizerInfo, _objectFetcher]; +} + +- (void)postNotificationOnMainThreadWithName:(NSString *)name + object:(id)object + userInfo:(NSDictionary *)userInfo { + // We always post these async to ensure they remain in order. + dispatch_group_async(self.callbackGroup, dispatch_get_main_queue(), ^{ + [[NSNotificationCenter defaultCenter] postNotificationName:name + object:object + userInfo:userInfo]; + }); +} + +- (void)pauseUpload { + GTMSessionFetcher *fetcher = self.objectFetcher; + BOOL canPause = [fetcher respondsToSelector:@selector(pauseFetching)]; + GTLR_DEBUG_ASSERT(canPause, @"tickets can be paused only for chunked resumable uploads"); + + if (canPause) { + [(GTMSessionUploadFetcher *)fetcher pauseFetching]; + } +} + +- (void)resumeUpload { + GTMSessionFetcher *fetcher = self.objectFetcher; + BOOL canResume = [fetcher respondsToSelector:@selector(resumeFetching)]; + GTLR_DEBUG_ASSERT(canResume, @"tickets can be resumed only for chunked resumable uploads"); + + if (canResume) { + [(GTMSessionUploadFetcher *)fetcher resumeFetching]; + } +} + +- (BOOL)isUploadPaused { + BOOL isPausable = [_objectFetcher respondsToSelector:@selector(isPaused)]; + GTLR_DEBUG_ASSERT(isPausable, @"tickets can be paused only for chunked resumable uploads"); + + if (isPausable) { + return [(GTMSessionUploadFetcher *)_objectFetcher isPaused]; + } + return NO; +} + +- (BOOL)isCancelled { + @synchronized(self) { + return _cancelled; + } +} + +- (void)cancelTicket { + @synchronized(self) { + _cancelled = YES; + } + + [_objectFetcher stopFetching]; + + self.objectFetcher = nil; + self.fetchRequest = nil; + _ticketProperties = nil; + + [self releaseTicketCallbacks]; + [self endBackgroundTask]; + + [self.executingQuery invalidateQuery]; + + id originalQuery = self.originalQuery; + self.executingQuery = originalQuery; + [originalQuery invalidateQuery]; + + _service = nil; + _fetcherService = nil; + _authorizer = nil; + _testBlock = nil; +} + +#if GTM_BACKGROUND_TASK_FETCHING +// When the fetcher's substitute UIApplication object is present, GTLRService +// will use that instead of UIApplication. This is just to reduce duplicating +// that plumbing for testing. ++ (nullable id)fetcherUIApplication { + id app = [GTMSessionFetcher substituteUIApplication]; + if (app) return app; + + static Class applicationClass = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + BOOL isAppExtension = [[[NSBundle mainBundle] bundlePath] hasSuffix:@".appex"]; + if (!isAppExtension) { + Class cls = NSClassFromString(@"UIApplication"); + if (cls && [cls respondsToSelector:NSSelectorFromString(@"sharedApplication")]) { + applicationClass = cls; + } + } + }); + + if (applicationClass) { + app = (id)[applicationClass sharedApplication]; + } + return app; +} +#endif // GTM_BACKGROUND_TASK_FETCHING + +- (void)startBackgroundTask { +#if GTM_BACKGROUND_TASK_FETCHING + GTLR_DEBUG_ASSERT(self.backgroundTaskIdentifier == UIBackgroundTaskInvalid, + @"Redundant GTLRService background task: %lu", + (unsigned long)self.backgroundTaskIdentifier); + + NSString *taskName = [[self.executingQuery class] description]; + + id app = [[self class] fetcherUIApplication]; + + // We'll use a locally-scoped task ID variable so the expiration block is guaranteed + // to refer to this task rather than to whatever task the property has. + __block UIBackgroundTaskIdentifier bgTaskID = + [app beginBackgroundTaskWithName:taskName + expirationHandler:^{ + // Background task expiration callback. This block is always invoked by + // UIApplication on the main thread. + if (bgTaskID != UIBackgroundTaskInvalid) { + @synchronized(self) { + if (bgTaskID == self.backgroundTaskIdentifier) { + self.backgroundTaskIdentifier = UIBackgroundTaskInvalid; + } + } + // This explicitly ends the captured bgTaskID rather than the backgroundTaskIdentifier + // property to ensure expiration is handled even if the property has changed. + [app endBackgroundTask:bgTaskID]; + } + }]; + @synchronized(self) { + self.backgroundTaskIdentifier = bgTaskID; + } +#endif // GTM_BACKGROUND_TASK_FETCHING +} + +- (void)endBackgroundTask { +#if GTM_BACKGROUND_TASK_FETCHING + // Whenever the connection stops or a next page is about to be fetched, + // tell UIApplication we're done. + UIBackgroundTaskIdentifier bgTaskID; + @synchronized(self) { + bgTaskID = self.backgroundTaskIdentifier; + self.backgroundTaskIdentifier = UIBackgroundTaskInvalid; + } + if (bgTaskID != UIBackgroundTaskInvalid) { + [[[self class] fetcherUIApplication] endBackgroundTask:bgTaskID]; + } +#endif // GTM_BACKGROUND_TASK_FETCHING +} + +- (void)releaseTicketCallbacks { + self.uploadProgressBlock = nil; + self.retryBlock = nil; +} + +- (void)notifyStarting:(BOOL)isStarting { + GTLR_DEBUG_ASSERT(!GTLR_AreBoolsEqual(isStarting, _needsStopNotification), + @"Notification mismatch (isStarting=%d)", isStarting); + if (GTLR_AreBoolsEqual(isStarting, _needsStopNotification)) return; + + NSString *name; + if (isStarting) { + name = kGTLRServiceTicketStartedNotification; + _needsStopNotification = YES; + } else { + name = kGTLRServiceTicketStoppedNotification; + _needsStopNotification = NO; + } + [self postNotificationOnMainThreadWithName:name + object:self + userInfo:nil]; +} + +- (id)service { + return _service; +} + +- (void)setObjectFetcher:(GTMSessionFetcher *)fetcher { + @synchronized(self) { + _objectFetcher = fetcher; + } + + [self updateObjectFetcherProgressCallbacks]; +} + +- (GTMSessionFetcher *)objectFetcher { + @synchronized(self) { + return _objectFetcher; + } +} + +- (NSDictionary *)ticketProperties { + // be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + __autoreleasing id props = _ticketProperties; + return props; +} + +- (GTLRServiceUploadProgressBlock)uploadProgressBlock { + return _uploadProgressBlock; +} + +- (void)setUploadProgressBlock:(GTLRServiceUploadProgressBlock)block { + if (_uploadProgressBlock != block) { + _uploadProgressBlock = [block copy]; + + [self updateObjectFetcherProgressCallbacks]; + } +} + +- (void)updateObjectFetcherProgressCallbacks { + // Internal method. Do not override. + GTMSessionFetcher *fetcher = [self objectFetcher]; + + if (_uploadProgressBlock) { + // Use a local block variable to avoid a spurious retain cycle warning. + GTMSessionFetcherSendProgressBlock fetcherSentDataBlock = ^(int64_t bytesSent, + int64_t totalBytesSent, + int64_t totalBytesExpectedToSend) { + [self->_service invokeProgressCallbackForTicket:self + deliveredBytes:(unsigned long long)totalBytesSent + totalBytes:(unsigned long long)totalBytesExpectedToSend]; + }; + + fetcher.sendProgressBlock = fetcherSentDataBlock; + } else { + fetcher.sendProgressBlock = nil; + } +} + +- (NSInteger)statusCode { + return [_objectFetcher statusCode]; +} + +- (GTLRQuery *)queryForRequestID:(NSString *)requestID { + id queryObj = self.executingQuery; + if ([queryObj isBatchQuery]) { + GTLRBatchQuery *batch = (GTLRBatchQuery *)queryObj; + GTLRQuery *result = [batch queryForRequestID:requestID]; + return result; + } else { + GTLR_DEBUG_ASSERT(0, @"just use ticket.executingQuery"); + return nil; + } +} + +@end + +@implementation GTLRServiceExecutionParameters + +@synthesize maxRetryInterval = _maxRetryInterval, + retryEnabled = _retryEnabled, + retryBlock = _retryBlock, + shouldFetchNextPages = _shouldFetchNextPages, + objectClassResolver = _objectClassResolver, + testBlock = _testBlock, + ticketProperties = _ticketProperties, + uploadProgressBlock = _uploadProgressBlock, + callbackQueue = _callbackQueue; + +- (id)copyWithZone:(NSZone *)zone { + GTLRServiceExecutionParameters *newObject = [[self class] allocWithZone:zone]; + newObject.maxRetryInterval = self.maxRetryInterval; + newObject.retryEnabled = self.retryEnabled; + newObject.retryBlock = self.retryBlock; + newObject.shouldFetchNextPages = self.shouldFetchNextPages; + newObject.objectClassResolver = self.objectClassResolver; + newObject.testBlock = self.testBlock; + newObject.ticketProperties = self.ticketProperties; + newObject.uploadProgressBlock = self.uploadProgressBlock; + newObject.callbackQueue = self.callbackQueue; + return newObject; +} + +- (BOOL)hasParameters { + if (self.maxRetryInterval != nil) return YES; + if (self.retryEnabled != nil) return YES; + if (self.retryBlock) return YES; + if (self.shouldFetchNextPages != nil) return YES; + if (self.objectClassResolver) return YES; + if (self.testBlock) return YES; + if (self.ticketProperties) return YES; + if (self.uploadProgressBlock) return YES; + if (self.callbackQueue) return YES; + return NO; +} + +@end + + +@implementation GTLRResourceURLQuery + +@synthesize resourceURL = _resourceURL; + ++ (instancetype)queryWithResourceURL:(NSURL *)resourceURL + objectClass:(Class)objectClass { + GTLRResourceURLQuery *query = [[self alloc] initWithPathURITemplate:@"_usingGTLRResourceURLQuery_" + HTTPMethod:nil + pathParameterNames:nil]; + query.expectedObjectClass = objectClass; + query.resourceURL = resourceURL; + return query; +} + +- (instancetype)copyWithZone:(NSZone *)zone { + GTLRResourceURLQuery *result = [super copyWithZone:zone]; + result->_resourceURL = self->_resourceURL; + return result; +} + +// TODO: description + +@end + +@implementation GTLRObjectCollectionImpl +@dynamic nextPageToken; +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.h b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.h new file mode 100644 index 0000000..fb2402b --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.h @@ -0,0 +1,124 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +// Uploading documentation: +// https://github.com/google/google-api-objectivec-client-for-rest/wiki#uploading-files + +#import + +#import "GTLRDefines.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Upload parameters are required for chunked-resumable or simple/multipart uploads. + * + * The MIME type and one source for data (@c NSData, file URL, or @c NSFileHandle) must + * be specified. + */ +@interface GTLRUploadParameters : NSObject + +/** + * The type of media being uploaded. + */ +@property(atomic, copy, nullable) NSString *MIMEType; + +/** + * The media to be uploaded, represented as @c NSData. + */ +@property(atomic, retain, nullable) NSData *data; + +/** + * The URL for the local file to be uploaded. + */ +@property(atomic, retain, nullable) NSURL *fileURL; + +/** + * The media to be uploaded, represented as @c NSFileHandle. + * + * @note This property is provided for compatibility with older code. + * Uploading using @c fileURL is preferred over @c fileHandle + */ +@property(atomic, retain, nullable) NSFileHandle *fileHandle; + +/** + * Resuming an in-progress resumable, chunked upload is done with the upload location URL, + * and requires a file URL or file handle for uploading. + */ +@property(atomic, retain, nullable) NSURL *uploadLocationURL; + +/** + * Small uploads (for example, under 200K) can be done with a single multipart upload + * request. The upload body must be provided as NSData, not a file URL or file handle. + * + * Default value is NO. + */ +@property(atomic, assign) BOOL shouldUploadWithSingleRequest; + +/** + * Uploads may be done without a JSON body as metadata in the initial request. + * + * Default value is NO. + */ +@property(atomic, assign) BOOL shouldSendUploadOnly; + +/** + * Uploads may use a background session when uploading via GTMSessionUploadFetcher. + * Since background session fetches are slower than foreground fetches, this defaults + * to NO. + * + * It's reasonable for an application to set this to YES for a rare upload of a large file. + * + * Default value is NO. + * + * For more information about the hazards of background sessions, see the header comments for + * the GTMSessionFetcher useBackgroundSession property. + */ +@property(atomic, assign) BOOL useBackgroundSession; + +/** + * Constructor for uploading from @c NSData. + * + * @param data The data to uploaded. + * @param mimeType The media's type. + * + * @return The upload parameters object. + */ ++ (instancetype)uploadParametersWithData:(NSData *)data + MIMEType:(NSString *)mimeType; + +/** + * Constructor for uploading from a file URL. + * + * @param fileURL The file to upload. + * @param mimeType The media's type. + * + * @return The upload parameters object. + */ ++ (instancetype)uploadParametersWithFileURL:(NSURL *)fileURL + MIMEType:(NSString *)mimeType; + +/** + * Constructor for uploading from a file handle. + * + * @note This method is provided for compatibility with older code. To upload files, + * use a file URL. + */ ++ (instancetype)uploadParametersWithFileHandle:(NSFileHandle *)fileHandle + MIMEType:(NSString *)mimeType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.m b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.m new file mode 100644 index 0000000..545288a --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.m @@ -0,0 +1,119 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#include + +#import "GTLRUploadParameters.h" + +@implementation GTLRUploadParameters + +@synthesize MIMEType = _MIMEType, + data = _data, + fileHandle = _fileHandle, + uploadLocationURL = _uploadLocationURL, + fileURL = _fileURL, + shouldUploadWithSingleRequest = _shouldUploadWithSingleRequest, + shouldSendUploadOnly = _shouldSendUploadOnly, + useBackgroundSession = _useBackgroundSession; + ++ (instancetype)uploadParametersWithData:(NSData *)data + MIMEType:(NSString *)mimeType { + GTLRUploadParameters *params = [[self alloc] init]; + params.data = data; + params.MIMEType = mimeType; + return params; +} + ++ (instancetype)uploadParametersWithFileHandle:(NSFileHandle *)fileHandle + MIMEType:(NSString *)mimeType { + GTLRUploadParameters *params = [[self alloc] init]; + params.fileHandle = fileHandle; + params.MIMEType = mimeType; + return params; +} + ++ (instancetype)uploadParametersWithFileURL:(NSURL *)fileURL + MIMEType:(NSString *)mimeType { + GTLRUploadParameters *params = [[self alloc] init]; + params.fileURL = fileURL; + params.MIMEType = mimeType; + return params; +} + +- (id)copyWithZone:(NSZone *)zone { + GTLRUploadParameters *newParams = [[[self class] allocWithZone:zone] init]; + newParams.MIMEType = self.MIMEType; + newParams.data = self.data; + newParams.fileHandle = self.fileHandle; + newParams.fileURL = self.fileURL; + newParams.uploadLocationURL = self.uploadLocationURL; + newParams.shouldUploadWithSingleRequest = self.shouldUploadWithSingleRequest; + newParams.shouldSendUploadOnly = self.shouldSendUploadOnly; + newParams.useBackgroundSession = self.useBackgroundSession; + return newParams; +} + +#if DEBUG +- (NSString *)description { + NSMutableArray *array = [NSMutableArray array]; + NSString *str = [NSString stringWithFormat:@"MIMEType:%@", _MIMEType]; + [array addObject:str]; + + if (_data) { + str = [NSString stringWithFormat:@"data:%llu bytes", + (unsigned long long)_data.length]; + [array addObject:str]; + } + + if (_fileHandle) { + str = [NSString stringWithFormat:@"fileHandle:%@", _fileHandle]; + [array addObject:str]; + } + + if (_fileURL) { + str = [NSString stringWithFormat:@"file:%@", [_fileURL path]]; + [array addObject:str]; + } + + if (_uploadLocationURL) { + str = [NSString stringWithFormat:@"uploadLocation:%@", + [_uploadLocationURL absoluteString]]; + [array addObject:str]; + } + + if (_shouldSendUploadOnly) { + [array addObject:@"shouldSendUploadOnly"]; + } + + if (_shouldUploadWithSingleRequest) { + [array addObject:@"uploadWithSingleRequest"]; + } + + if (_useBackgroundSession) { + [array addObject:@"useBackgroundSession"]; + } + + NSString *descStr = [array componentsJoinedByString:@", "]; + str = [NSString stringWithFormat:@"%@ %p: {%@}", + [self class], self, descStr]; + return str; +} +#endif // DEBUG + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRBase64.h b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRBase64.h new file mode 100644 index 0000000..7872156 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRBase64.h @@ -0,0 +1,29 @@ +/* Copyright (c) 2012 Google Inc. + * + * 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 + +NS_ASSUME_NONNULL_BEGIN + +NSData * _Nullable GTLRDecodeBase64(NSString * _Nullable base64Str); +NSString * _Nullable GTLREncodeBase64(NSData * _Nullable data); + +// "Web-safe" encoding substitutes - and _ for + and / in the encoding table, +// per http://www.ietf.org/rfc/rfc4648.txt section 5. + +NSData * _Nullable GTLRDecodeWebSafeBase64(NSString * _Nullable base64Str); +NSString * _Nullable GTLREncodeWebSafeBase64(NSData * _Nullable data); + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRBase64.m b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRBase64.m new file mode 100644 index 0000000..2231286 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRBase64.m @@ -0,0 +1,144 @@ +/* Copyright (c) 2012 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#import "GTLRBase64.h" + +// Based on Cyrus Najmabadi's elegent little encoder and decoder from +// http://www.cocoadev.com/index.pl?BaseSixtyFour + +static char gStandardEncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +static char gWebSafeEncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + +#pragma mark Encode + +static NSString *EncodeBase64StringCommon(NSData *data, const char *table) { + if (data == nil) return nil; + + const uint8_t* input = data.bytes; + NSUInteger length = data.length; + + NSUInteger bufferSize = ((length + 2) / 3) * 4; + NSMutableData* buffer = [NSMutableData dataWithLength:bufferSize]; + + int8_t *output = buffer.mutableBytes; + + for (NSUInteger i = 0; i < length; i += 3) { + NSUInteger value = 0; + for (NSUInteger j = i; j < (i + 3); j++) { + value <<= 8; + + if (j < length) { + value |= (0xFF & input[j]); + } + } + + NSInteger idx = (i / 3) * 4; + output[idx + 0] = table[(value >> 18) & 0x3F]; + output[idx + 1] = table[(value >> 12) & 0x3F]; + output[idx + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; + output[idx + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; + } + + NSString *result = [[NSString alloc] initWithData:buffer + encoding:NSASCIIStringEncoding]; + return result; +} + +NSString *GTLREncodeBase64(NSData *data) { + return EncodeBase64StringCommon(data, gStandardEncodingTable); +} + +NSString *GTLREncodeWebSafeBase64(NSData *data) { + return EncodeBase64StringCommon(data, gWebSafeEncodingTable); +} + +#pragma mark Decode + +static void CreateDecodingTable(const char *encodingTable, + size_t encodingTableSize, char *decodingTable) { + memset(decodingTable, 0, 128); + for (unsigned int i = 0; i < encodingTableSize; i++) { + decodingTable[(unsigned int) encodingTable[i]] = (char)i; + } +} + +static NSData *DecodeBase64StringCommon(NSString *base64Str, + char *decodingTable, + BOOL requirePadding) { + // The input string should be plain ASCII + const char *cString = [base64Str cStringUsingEncoding:NSASCIIStringEncoding]; + if (cString == nil) return nil; + + NSInteger inputLength = (NSInteger)strlen(cString); + if (requirePadding && (inputLength % 4 != 0)) return nil; + if (inputLength == 0) return [NSData data]; + + while (inputLength > 0 && cString[inputLength - 1] == '=') { + inputLength--; + } + + NSInteger outputLength = inputLength * 3 / 4; + NSMutableData* data = [NSMutableData dataWithLength:(NSUInteger)outputLength]; + uint8_t *output = data.mutableBytes; + + NSInteger inputPoint = 0; + NSInteger outputPoint = 0; + char *table = decodingTable; + + while (inputPoint < inputLength) { + int i0 = cString[inputPoint++]; + int i1 = cString[inputPoint++]; + int i2 = inputPoint < inputLength ? cString[inputPoint++] : 'A'; // 'A' will decode to \0 + int i3 = inputPoint < inputLength ? cString[inputPoint++] : 'A'; + + output[outputPoint++] = (uint8_t)((table[i0] << 2) | (table[i1] >> 4)); + if (outputPoint < outputLength) { + output[outputPoint++] = (uint8_t)(((table[i1] & 0xF) << 4) | (table[i2] >> 2)); + } + if (outputPoint < outputLength) { + output[outputPoint++] = (uint8_t)(((table[i2] & 0x3) << 6) | table[i3]); + } + } + + return data; +} + +NSData *GTLRDecodeBase64(NSString *base64Str) { + static char decodingTable[128]; + static BOOL hasInited = NO; + + if (!hasInited) { + CreateDecodingTable(gStandardEncodingTable, sizeof(gStandardEncodingTable), + decodingTable); + hasInited = YES; + } + return DecodeBase64StringCommon(base64Str, decodingTable, YES /* requirePadding */ ); +} + +NSData *GTLRDecodeWebSafeBase64(NSString *base64Str) { + static char decodingTable[128]; + static BOOL hasInited = NO; + + if (!hasInited) { + CreateDecodingTable(gWebSafeEncodingTable, sizeof(gWebSafeEncodingTable), + decodingTable); + hasInited = YES; + } + return DecodeBase64StringCommon(base64Str, decodingTable, NO /* requirePadding */); +} diff --git a/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRFramework.h b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRFramework.h new file mode 100644 index 0000000..ab94a4c --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRFramework.h @@ -0,0 +1,34 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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 + +#import "GTLRDefines.h" + +NS_ASSUME_NONNULL_BEGIN + +// Returns the version of the framework. Major and minor should +// match the bundle version in the Info.plist file. +// +// Pass NULL to ignore any of the parameters. + +void GTLRFrameworkVersion(NSUInteger * _Nullable major, + NSUInteger * _Nullable minor, + NSUInteger * _Nullable release); + +// Returns the version in @"a.b" or @"a.b.c" format +NSString *GTLRFrameworkVersionString(void); + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRFramework.m b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRFramework.m new file mode 100644 index 0000000..4dad100 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRFramework.m @@ -0,0 +1,44 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#include "GTLRFramework.h" + +void GTLRFrameworkVersion(NSUInteger* major, NSUInteger* minor, NSUInteger* release) { + // version 3.0.0 + if (major) *major = 3; + if (minor) *minor = 0; + if (release) *release = 0; +} + +NSString *GTLRFrameworkVersionString(void) { + NSUInteger major, minor, release; + NSString *libVersionString; + + GTLRFrameworkVersion(&major, &minor, &release); + + // most library releases will have a release value of zero + if (release != 0) { + libVersionString = [NSString stringWithFormat:@"%d.%d.%d", + (int)major, (int)minor, (int)release]; + } else { + libVersionString = [NSString stringWithFormat:@"%d.%d", + (int)major, (int)minor]; + } + return libVersionString; +} diff --git a/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.h b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.h new file mode 100644 index 0000000..fa200fe --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.h @@ -0,0 +1,48 @@ +/* Copyright (c) 2010 Google Inc. + * + * 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 + +#ifndef SKIP_GTLR_DEFINES + #import "GTLRDefines.h" +#endif + +NS_ASSUME_NONNULL_BEGIN + +// +// URI Template +// +// http://tools.ietf.org/html/draft-gregorio-uritemplate-04 +// +// NOTE: This implemention is only a subset of the spec. It should be able +// to parse any tempate that matches the spec, but if the template makes use +// of a feature that is not supported, it will fail with an error. +// + +@interface GTLRURITemplate : NSObject + +// Process the template. If the template uses an unsupported feature, it will +// throw an exception to help catch that limitation. Currently unsupported +// feature is partial result modifiers (prefix/suffix). +// +// valueProvider should be anything that implements -objectForKey:. At the +// simplest level, this can be an NSDictionary. However, a custom class that +// implements valueForKey my be better for some uses. ++ (NSString *)expandTemplate:(NSString *)URITemplate + values:(NSDictionary *)valueProvider; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.m b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.m new file mode 100644 index 0000000..2f478dc --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.m @@ -0,0 +1,511 @@ +/* Copyright (c) 2010 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#import "GTLRURITemplate.h" + +// Key constants for handling variables. +static NSString *const kVariable = @"variable"; // NSString +static NSString *const kExplode = @"explode"; // NSString +static NSString *const kPartial = @"partial"; // NSString +static NSString *const kPartialValue = @"partialValue"; // NSNumber + +// Help for passing the Expansion info in one shot. +struct ExpansionInfo { + // Constant for the whole expansion. + unichar expressionOperator; + __unsafe_unretained NSString *joiner; + BOOL allowReservedInEscape; + + // Update for each variable. + __unsafe_unretained NSString *explode; +}; + +// Helper just to shorten the lines when needed. +static NSString *UnescapeString(NSString *str) { + return [str stringByRemovingPercentEncoding]; +} + +static NSString *EscapeString(NSString *str, BOOL allowReserved) { + // The spec is a little hard to map onto the charsets, so force + // reserved bits in/out. + NSMutableCharacterSet *cs = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy]; + NSString * const kReservedChars = @":/?#[]@!$&'()*+,;="; + if (allowReserved) { + [cs addCharactersInString:kReservedChars]; + } else { + [cs removeCharactersInString:kReservedChars]; + } + NSString *resultStr = [str stringByAddingPercentEncodingWithAllowedCharacters:cs]; + return resultStr; +} + +static NSString *StringFromNSNumber(NSNumber *rawValue) { + NSString *strValue; + // NSNumber doesn't expose a way to tell if it is holding a BOOL or something + // else. -[NSNumber objCType] for a BOOL is the same as @encoding(char), but + // in the 64bit runtine @encoding(BOOL) (or for "bool") won't match that as + // the 64bit runtime actually has a true boolean type. Instead we reply on + // checking if the numbers are the CFBoolean constants to force true/value + // values. + if ((rawValue == (NSNumber *)kCFBooleanTrue) || + (rawValue == (NSNumber *)kCFBooleanFalse)) { + strValue = (rawValue.boolValue ? @"true" : @"false"); + } else { + strValue = [rawValue stringValue]; + } + return strValue; +} + +@implementation GTLRURITemplate + +#pragma mark Internal Helpers + ++ (BOOL)parseExpression:(NSString *)expression + expressionOperator:(unichar*)outExpressionOperator + variables:(NSMutableArray **)outVariables + defaultValues:(NSMutableDictionary **)outDefaultValues { + + // Please see the spec for full details, but here are the basics: + // + // URI-Template = *( literals / expression ) + // expression = "{" [ operator ] variable-list "}" + // variable-list = varspec *( "," varspec ) + // varspec = varname [ modifier ] [ "=" default ] + // varname = varchar *( varchar / "." ) + // modifier = explode / partial + // explode = ( "*" / "+" ) + // partial = ( substring / remainder ) offset + // + // Examples: + // http://www.example.com/foo{?query,number} + // http://maps.com/mapper{?address*} + // http://directions.org/directions{?from+,to+} + // http://search.org/query{?terms+=none} + // + + // http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-2.2 + // Operator and op-reserve characters + static NSCharacterSet *operatorSet = nil; + // http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-2.4.1 + // Explode characters + static NSCharacterSet *explodeSet = nil; + // http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-2.4.2 + // Partial (prefix/subset) characters + static NSCharacterSet *partialSet = nil; + + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + operatorSet = [NSCharacterSet characterSetWithCharactersInString:@"+./;?|!@"]; + explodeSet = [NSCharacterSet characterSetWithCharactersInString:@"*+"]; + partialSet = [NSCharacterSet characterSetWithCharactersInString:@":^"]; + }); + + // http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-3.3 + // Empty expression inlines the expression. + if (expression.length == 0) return NO; + + // Pull off any operator. + *outExpressionOperator = 0; + unichar firstChar = [expression characterAtIndex:0]; + if ([operatorSet characterIsMember:firstChar]) { + *outExpressionOperator = firstChar; + expression = [expression substringFromIndex:1]; + } + + if (expression.length == 0) return NO; + + // Need to find atleast one varspec for the expresssion to be considered + // valid. + BOOL gotAVarspec = NO; + + // Split the variable list. + NSArray *varspecs = [expression componentsSeparatedByString:@","]; + + // Extract the defaults, explodes and modifiers from the varspecs. + *outVariables = [NSMutableArray arrayWithCapacity:varspecs.count]; + for (__strong NSString *varspec in varspecs) { + NSString *defaultValue = nil; + + if (varspec.length == 0) continue; + + NSMutableDictionary *varInfo = + [NSMutableDictionary dictionaryWithCapacity:4]; + + // Check for a default (foo=bar). + NSRange range = [varspec rangeOfString:@"="]; + if (range.location != NSNotFound) { + defaultValue = + UnescapeString([varspec substringFromIndex:range.location + 1]); + varspec = [varspec substringToIndex:range.location]; + + if (varspec.length == 0) continue; + } + + // Check for explode (foo*). + NSUInteger lenLessOne = varspec.length - 1; + if ([explodeSet characterIsMember:[varspec characterAtIndex:lenLessOne]]) { + [varInfo setObject:[varspec substringFromIndex:lenLessOne] forKey:kExplode]; + varspec = [varspec substringToIndex:lenLessOne]; + if (varspec.length == 0) continue; + } else { + // Check for partial (prefix/suffix) (foo:12). + range = [varspec rangeOfCharacterFromSet:partialSet]; + if (range.location != NSNotFound) { + NSString *partialMode = [varspec substringWithRange:range]; + NSString *valueStr = [varspec substringFromIndex:range.location + 1]; + // If there wasn't a value for the partial, ignore it. + if (valueStr.length > 0) { + [varInfo setObject:partialMode forKey:kPartial]; + // TODO: Should validate valueStr is just a number... + [varInfo setObject:[NSNumber numberWithInteger:[valueStr integerValue]] + forKey:kPartialValue]; + } + varspec = [varspec substringToIndex:range.location]; + if (varspec.length == 0) continue; + } + } + + // Spec allows percent escaping in names, so undo that. + varspec = UnescapeString(varspec); + + // Save off the cleaned up variable name. + [varInfo setObject:varspec forKey:kVariable]; + [*outVariables addObject:varInfo]; + gotAVarspec = YES; + + // Now that the variable has been cleaned up, store its default. + if (defaultValue) { + if (*outDefaultValues == nil) { + *outDefaultValues = [NSMutableDictionary dictionary]; + } + [*outDefaultValues setObject:defaultValue forKey:varspec]; + } + } + // All done. + return gotAVarspec; +} + ++ (NSString *)expandVariables:(NSArray *)variables + expressionOperator:(unichar)expressionOperator + values:(NSDictionary *)valueProvider + defaultValues:(NSMutableDictionary *)defaultValues { + NSString *prefix = nil; + struct ExpansionInfo expansionInfo = { + .expressionOperator = expressionOperator, + .joiner = nil, + .allowReservedInEscape = NO, + .explode = nil, + }; + switch (expressionOperator) { + case 0: + expansionInfo.joiner = @","; + prefix = @""; + break; + case '+': + expansionInfo.joiner = @","; + prefix = @""; + // The reserved character are safe from escaping. + expansionInfo.allowReservedInEscape = YES; + break; + case '.': + expansionInfo.joiner = @"."; + prefix = @"."; + break; + case '/': + expansionInfo.joiner = @"/"; + prefix = @"/"; + break; + case ';': + expansionInfo.joiner = @";"; + prefix = @";"; + break; + case '?': + expansionInfo.joiner = @"&"; + prefix = @"?"; + break; + default: + [NSException raise:@"GTLRURITemplateUnsupported" + format:@"Unknown expression operator '%C'", expressionOperator]; + break; + } + + NSMutableArray *results = [NSMutableArray arrayWithCapacity:variables.count]; + + for (NSDictionary *varInfo in variables) { + NSString *variable = [varInfo objectForKey:kVariable]; + + expansionInfo.explode = [varInfo objectForKey:kExplode]; + // Look up the variable value. + id rawValue = [valueProvider objectForKey:variable]; + + // If the value is an empty array or dictionary, the default is still used. + if (([rawValue isKindOfClass:[NSArray class]] + || [rawValue isKindOfClass:[NSDictionary class]]) + && ((NSArray *)rawValue).count == 0) { + rawValue = nil; + } + + // Got nothing? Check defaults. + if (rawValue == nil) { + rawValue = [defaultValues objectForKey:variable]; + } + + // If we didn't get any value, on to the next thing. + if (!rawValue) { + continue; + } + + // Time do to the work... + NSString *result = nil; + if ([rawValue isKindOfClass:[NSString class]]) { + result = [self expandString:rawValue + variableName:variable + expansionInfo:&expansionInfo]; + } else if ([rawValue isKindOfClass:[NSNumber class]]) { + // Turn the number into a string and send it on its way. + NSString *strValue = StringFromNSNumber(rawValue); + result = [self expandString:strValue + variableName:variable + expansionInfo:&expansionInfo]; + } else if ([rawValue isKindOfClass:[NSArray class]]) { + result = [self expandArray:rawValue + variableName:variable + expansionInfo:&expansionInfo]; + } else if ([rawValue isKindOfClass:[NSDictionary class]]) { + result = [self expandDictionary:rawValue + variableName:variable + expansionInfo:&expansionInfo]; + } else { + [NSException raise:@"GTLRURITemplateUnsupported" + format:@"Variable returned unsupported type (%@)", + NSStringFromClass([rawValue class])]; + } + + // Did it generate anything? + if (result == nil) + continue; + + // Apply partial. + // Defaults should get partial applied? + // ( http://tools.ietf.org/html/draft-gregorio-uritemplate-04#section-2.5 ) + NSString *partial = [varInfo objectForKey:kPartial]; + if (partial.length > 0) { + [NSException raise:@"GTLRURITemplateUnsupported" + format:@"Unsupported partial on expansion %@", partial]; + } + + // Add the result + [results addObject:result]; + } + + // Join and add any needed prefix. + NSString *joinedResults = + [results componentsJoinedByString:expansionInfo.joiner]; + if ((prefix.length > 0) && (joinedResults.length > 0)) { + return [prefix stringByAppendingString:joinedResults]; + } + return joinedResults; +} + ++ (NSString *)expandString:(NSString *)valueStr + variableName:(NSString *)variableName + expansionInfo:(struct ExpansionInfo *)expansionInfo { + NSString *escapedValue = + EscapeString(valueStr, expansionInfo->allowReservedInEscape); + switch (expansionInfo->expressionOperator) { + case ';': + case '?': + if (valueStr.length > 0) { + return [NSString stringWithFormat:@"%@=%@", variableName, escapedValue]; + } + return variableName; + default: + return escapedValue; + } +} + ++ (NSString *)expandArray:(NSArray *)valueArray + variableName:(NSString *)variableName + expansionInfo:(struct ExpansionInfo *)expansionInfo { + NSMutableArray *results = [NSMutableArray arrayWithCapacity:valueArray.count]; + // When joining variable with value, use "var.val" except for 'path' and + // 'form' style expression, use 'var=val' then. + char variableValueJoiner = '.'; + unichar expressionOperator = expansionInfo->expressionOperator; + if ((expressionOperator == ';') || (expressionOperator == '?')) { + variableValueJoiner = '='; + } + // Loop over the values. + for (id rawValue in valueArray) { + NSString *value; + if ([rawValue isKindOfClass:[NSNumber class]]) { + value = StringFromNSNumber((id)rawValue); + } else if ([rawValue isKindOfClass:[NSString class]]) { + value = rawValue; + } else { + [NSException raise:@"GTLRURITemplateUnsupported" + format:@"Variable '%@' returned NSArray with unsupported type (%@), array: %@", + variableName, NSStringFromClass([rawValue class]), valueArray]; + } + // Escape it. + value = EscapeString(value, expansionInfo->allowReservedInEscape); + // Should variable names be used? + if ([expansionInfo->explode isEqual:@"+"]) { + value = [NSString stringWithFormat:@"%@%c%@", + variableName, variableValueJoiner, value]; + } + [results addObject:value]; + } + if (results.count > 0) { + // Use the default joiner unless there was no explode request, then a list + // always gets comma seperated. + NSString *joiner = expansionInfo->joiner; + if (expansionInfo->explode == nil) { + joiner = @","; + } + // Join the values. + NSString *joined = [results componentsJoinedByString:joiner]; + // 'form' style without an explode gets the variable name set to the + // joined list of values. + if ((expressionOperator == '?') && (expansionInfo->explode == nil)) { + return [NSString stringWithFormat:@"%@=%@", variableName, joined]; + } + return joined; + } + return nil; +} + ++ (NSString *)expandDictionary:(NSDictionary *)valueDict + variableName:(NSString *)variableName + expansionInfo:(struct ExpansionInfo *)expansionInfo { + NSMutableArray *results = [NSMutableArray arrayWithCapacity:valueDict.count]; + // When joining variable with value: + // - Default to the joiner... + // - No explode, always comma... + // - For 'path' and 'form' style expression, use 'var=val'. + NSString *keyValueJoiner = expansionInfo->joiner; + unichar expressionOperator = expansionInfo->expressionOperator; + if (expansionInfo->explode == nil) { + keyValueJoiner = @","; + } else if ((expressionOperator == ';') || (expressionOperator == '?')) { + keyValueJoiner = @"="; + } + // Loop over the sorted keys. + NSArray *sortedKeys = [valueDict.allKeys sortedArrayUsingSelector:@selector(compare:)]; + for (__strong NSString *key in sortedKeys) { + NSString *value = [valueDict objectForKey:key]; + // Escape them. + key = EscapeString(key, expansionInfo->allowReservedInEscape); + value = EscapeString(value, expansionInfo->allowReservedInEscape); + // Should variable names be used? + if ([expansionInfo->explode isEqual:@"+"]) { + key = [NSString stringWithFormat:@"%@.%@", variableName, key]; + } + if ((expressionOperator == '?' || expressionOperator == ';') + && (value.length == 0)) { + [results addObject:key]; + } else { + NSString *pair = [NSString stringWithFormat:@"%@%@%@", + key, keyValueJoiner, value]; + [results addObject:pair]; + } + } + if (results.count) { + // Use the default joiner unless there was no explode request, then a list + // always gets comma seperated. + NSString *joiner = expansionInfo->joiner; + if (expansionInfo->explode == nil) { + joiner = @","; + } + // Join the values. + NSString *joined = [results componentsJoinedByString:joiner]; + // 'form' style without an explode gets the variable name set to the + // joined list of values. + if ((expressionOperator == '?') && (expansionInfo->explode == nil)) { + return [NSString stringWithFormat:@"%@=%@", variableName, joined]; + } + return joined; + } + return nil; +} + +#pragma mark Public API + ++ (NSString *)expandTemplate:(NSString *)uriTemplate + values:(NSDictionary *)valueProvider { + NSMutableString *result = + [NSMutableString stringWithCapacity:uriTemplate.length]; + + NSScanner *scanner = [NSScanner scannerWithString:uriTemplate]; + [scanner setCharactersToBeSkipped:nil]; + + // Defaults have to live through the full evaluation, so if any are encoured + // they are reused throughout the expansion calls. + NSMutableDictionary *defaultValues = nil; + + // Pull out the expressions for processing. + while (![scanner isAtEnd]) { + NSString *skipped = nil; + // Find the next '{'. + if ([scanner scanUpToString:@"{" intoString:&skipped]) { + // Add anything before it to the result. + [result appendString:skipped]; + } + // Advance over the '{'. + [scanner scanString:@"{" intoString:nil]; + // Collect the expression. + NSString *expression = nil; + if ([scanner scanUpToString:@"}" intoString:&expression]) { + // Collect the trailing '}' on the expression. + BOOL hasTrailingBrace = [scanner scanString:@"}" intoString:nil]; + + // Parse the expression. + NSMutableArray *variables = nil; + unichar expressionOperator = 0; + if ([self parseExpression:expression + expressionOperator:&expressionOperator + variables:&variables + defaultValues:&defaultValues]) { + // Do the expansion. + NSString *substitution = [self expandVariables:variables + expressionOperator:expressionOperator + values:valueProvider + defaultValues:defaultValues]; + if (substitution) { + [result appendString:substitution]; + } + } else { + // Failed to parse, add the raw expression to the output. + if (hasTrailingBrace) { + [result appendFormat:@"{%@}", expression]; + } else { + [result appendFormat:@"{%@", expression]; + } + } + } else if (![scanner isAtEnd]) { + // Empty expression ('{}'). Copy over the opening brace and the trailing + // one will be copied by the next cycle of the loop. + [result appendString:@"{"]; + } + } + + return result; +} + +@end diff --git a/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.h b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.h new file mode 100644 index 0000000..5c37f13 --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.h @@ -0,0 +1,52 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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 + +#ifndef SKIP_GTLR_DEFINES + #import "GTLRDefines.h" +#endif + +NS_ASSUME_NONNULL_BEGIN + +// Helper functions for implementing isEqual: +BOOL GTLR_AreEqualOrBothNil(id _Nullable obj1, id _Nullable obj2); +BOOL GTLR_AreBoolsEqual(BOOL b1, BOOL b2); + +// Helper to ensure a number is a number. +// +// The Google API servers will send numbers >53 bits as strings to avoid +// bugs in some JavaScript implementations. Work around this by catching +// the string and turning it back into a number. +NSNumber *GTLR_EnsureNSNumber(NSNumber *num); + +@interface GTLRUtilities : NSObject + +// Key-value coding searches in an array +// +// Utilities to get from an array objects having a known value (or nil) +// at a keyPath + ++ (NSArray *)objectsFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath; + ++ (nullable id)firstObjectFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.m b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.m new file mode 100644 index 0000000..fc9aa3d --- /dev/null +++ b/Pods/GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.m @@ -0,0 +1,117 @@ +/* Copyright (c) 2011 Google Inc. + * + * 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. + */ + +#if !__has_feature(objc_arc) +#error "This file needs to be compiled with ARC enabled." +#endif + +#import "GTLRUtilities.h" + +#include + +@implementation GTLRUtilities + +#pragma mark Key-Value Coding Searches in an Array + ++ (NSArray *)objectsFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath { + // Step through all entries, get the value from + // the key path, and see if it's equal to the + // desired value + NSMutableArray *results = [NSMutableArray array]; + + for(id obj in sourceArray) { + id val = [obj valueForKeyPath:keyPath]; + if (GTLR_AreEqualOrBothNil(val, desiredValue)) { + + // found a match; add it to the results array + [results addObject:obj]; + } + } + return results; +} + ++ (id)firstObjectFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath { + for (id obj in sourceArray) { + id val = [obj valueForKeyPath:keyPath]; + if (GTLR_AreEqualOrBothNil(val, desiredValue)) { + // found a match; return it + return obj; + } + } + return nil; +} + +#pragma mark Version helpers + +@end + +// isEqual: has the fatal flaw that it doesn't deal well with the receiver +// being nil. We'll use this utility instead. +BOOL GTLR_AreEqualOrBothNil(id obj1, id obj2) { + if (obj1 == obj2) { + return YES; + } + if (obj1 && obj2) { + BOOL areEqual = [(NSObject *)obj1 isEqual:obj2]; + return areEqual; + } + return NO; +} + +BOOL GTLR_AreBoolsEqual(BOOL b1, BOOL b2) { + // avoid comparison problems with boolean types by negating + // both booleans + return (!b1 == !b2); +} + +NSNumber *GTLR_EnsureNSNumber(NSNumber *num) { + // If the server returned a string object where we expect a number, try + // to make a number object. + if ([num isKindOfClass:[NSString class]]) { + NSNumber *newNum; + NSString *str = (NSString *)num; + if ([str rangeOfString:@"."].location != NSNotFound) { + // This is a floating-point number. + // Force the parser to use '.' as the decimal separator. + static NSLocale *usLocale = nil; + @synchronized([GTLRUtilities class]) { + if (usLocale == nil) { + usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; + } + newNum = [NSDecimalNumber decimalNumberWithString:(NSString*)num + locale:(id)usLocale]; + } + } else { + // NSDecimalNumber +decimalNumberWithString:locale: + // does not correctly create an NSNumber for large values like + // 71100000000007780. + if ([str hasPrefix:@"-"]) { + newNum = @([str longLongValue]); + } else { + const char *utf8 = str.UTF8String; + unsigned long long ull = strtoull(utf8, NULL, 10); + newNum = @(ull); + } + } + if (newNum != nil) { + num = newNum; + } + } + return num; +} diff --git a/Pods/GoogleSignIn/.cocoapods.yml b/Pods/GoogleSignIn/.cocoapods.yml new file mode 100755 index 0000000..64a82b1 --- /dev/null +++ b/Pods/GoogleSignIn/.cocoapods.yml @@ -0,0 +1,5 @@ +try: + install: + pre: + - git clone https://github.com/googlesamples/google-services + project: 'google-services/ios/signin/SignInExample.xcodeproj' diff --git a/Pods/GoogleSignIn/CHANGELOG.md b/Pods/GoogleSignIn/CHANGELOG.md new file mode 100755 index 0000000..d796ae4 --- /dev/null +++ b/Pods/GoogleSignIn/CHANGELOG.md @@ -0,0 +1,110 @@ +# 2018-11-26 -- v4.4.0 +- Removes the dependency on GTM OAuth 2. + +# 2018-10-1 -- v4.3.0 +- Supports Google's Enterprise Mobile Management. + +# 2018-8-10 -- v4.2.0 +- Adds `grantedScopes` to `GIDGoogleUser`, allowing confirmation of which scopes + have been granted after a successful sign-in. +- Deprecates `accessibleScopes` in `GIDGoogleUser`, use `grantedScopes` instead. +- Localizes `GIDSignInButton` for hi (Hindi) and fr-CA (French (Canada)). +- Adds dependency to the system `LocalAuthentication` framework. + +# 2018-1-8 -- v4.1.2 +- Add `pod try` support for the GoogleSignIn CocoaPod. + +# 2017-10-17 -- v4.1.1 +- Fixes an issue that `GIDSignInUIDelegate`'s `signInWillDispatch:error:` was + not called on iOS 11. Please note that it is intended that neither + `signIn:presentViewController:` nor `signIn:dismissViewController:` is called + on iOS 11 because SFAuthenticationSession is not presented by the app's view + controller. + +# 2017-09-13 -- v4.1.0 +- Uses SFAuthenticationSession on iOS 11. + +# 2017-02-06 -- v4.0.2 +- No longer depends on GoogleAppUtilities. + +# 2016-10-24 -- v4.0.1 +- Switches to open source pod dependencies. +- Appearance of sign-in button no longer depends on requested scopes. + +# 2016-04-21 -- v4.0.0 +- GoogleSignIn pod now takes form of a static framework. Import with + `#import ` in Objective-C. +- Adds module support. You can also use `@import GoogleSignIn;` in Objective-C, + if module is enabled, and `import GoogleSignIn` in Swift without using a + bridge-header. +- For users of the stand-alone zip distribution, multiple frameworks are now + provided and all need to be added to a project. This decomposition allows more + flexibility in case of duplicated dependencies. +- Removes deprecated method `checkGoogleSignInAppInstalled` from `GIDSignIn`. +- Removes `allowsSignInWithBrowser` and `allowsSignInWithWebView` properties + from `GIDSignIn`. +- No longer requires adding bundle ID as a URL scheme supported by the app. + +# 2016-03-04 -- v3.0.0 +- Provides `givenName` and `familyName` properties on `GIDProfileData`. +- Allows setting the `loginHint` property on `GIDSignIn` to prefill the user's + ID or email address in the sign-in flow. +- Removed the `UIViewController(SignIn)` category as well as the `delegate` + property from `GIDSignInButton`. +- Requires that `uiDelegate` has been set properly on `GIDSignIn` and that + SafariServices framework has been linked. +- Removes the dependency on StoreKit. +- Provides bitcode support. +- Requires Xcode 7.0 or above due to bitcode incompatibilities with Xcode 6. + +# 2015-10-26 -- v2.4.0 +- Updates sign-in button with the new Google logo. +- Supports domain restriction for sign-in. +- Allows refreshing ID tokens. + +# 2015-10-09 -- v2.3.2 +- No longer requires Xcode 7. + +# 2015-10-01 -- v2.3.1 +- Fixes a crash in `GIDProfileData`'s `imageURLWithDimension:`. + +# 2015-09-25 -- v2.3.0 +- Requires Xcode 7.0 or above. +- Uses SFSafariViewController for signing in on iOS 9. `uiDelegate` must be + set for this to work. +- Optimizes fetching user profile. +- Supports GTMFetcherAuthorizationProtocol in GIDAuthentication. + +# 2015-07-15 -- v2.2.0 +- Compatible with iOS 9 (beta). Note that this version of the Sign-In SDK does + not include bitcode, so you must set ENABLE_BITCODE to NO in your project if + you use Xcode 7. +- Adds descriptive identifiers for GIDSignInButton's Auto Layout constraints. +- `signInSilently` no longer requires setting `uiDelegate`. + +# 2015-06-17 -- v2.1.0 +- Fixes Auto Layout issues with GIDSignInButton. +- Adds API to refresh access token in GIDAuthentication. +- Better exception description for unassigned clientID in GIDSignIn. +- Other minor bug fixes. + +# 2015-05-28 -- v2.0.1 +- Bug fixes + +# 2015-05-21 -- v2.0.0 +- Supports sign-in via UIWebView rather than app switching to a browser, + configurable with the new `allowsSignInWithWebView` property. +- Now apps which have disabled the app switch to a browser via the + `allowsSignInWithBrowser` and in-app web view via `allowsSignInWithWebView` + properties have the option to display a prompt instructing the user to + download the Google app from the App Store. +- Fixes sign-in button sizing issue when auto-layout is enabled +- `signInSilently` now calls the delegate with error when `hasAuthInKeychain` + is `NO` as documented +- Other minor bug fixes + +# 2015-03-12 -- v1.0.0 +- New sign-in focused SDK with refreshed API +- Dynamically rendered sign-in button with contextual branding +- Basic profile support +- Added allowsSignInWithBrowser property diff --git a/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/GoogleSignIn new file mode 100755 index 0000000000000000000000000000000000000000..8c1ab38f894161bcf1f7b929ae23247cbdb4df95 GIT binary patch literal 7572960 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 ~Ao;(vg@f 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 z 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 XF$6DZ0`WeIUAE9*+}&7&5|&*Lxk*Cp7S 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%0A4++TzmH%c0eF>t^Wcxlez~ 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%0DbZy<()j9Ef=)%JJNqMi3G9l}INrX?T7Ji+I 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�(_7TuixNj@sG0cFM_ldJjDjr+xVZi;q#6SJ&dW=wD^v;g-@4_e>s%P zf+v7n7QdSf4X%wWc$SUdV3XH=8{F51&(}75Z~(OMG1&MI+4u+9_)~2B?KWjuZsRAY z?VrE&5QwJj*(&NetNcWittD3CiD#q){mhm;bpnsqpGZz^LeVhn?>w;=NJssd+?FR& zk7bC*T_VP%Iru(yoVYR1BKJli`rJ⪚vCLN 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

    a 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 z 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

    H13SRY1~c*E{;>epJ4cdGJG3w8t*y4$$q>( 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

    jX=Nhu4V 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ȹ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

    W}hQ?C+(lX>Jx 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 p8+wTd>yBW|MWER!+D(W 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�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 z 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

    |M= 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%0AVyyUWAQW@DZmQ( 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

    ?rGtNMHo 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

    ?o_m>uB|)YDIA=<<6dy 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

      f~84LMV^w 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%0Da{ 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 z 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

      Ju%Wt!Qwlom)chnPN9?rHWd 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 + +@protocol GTMFetcherAuthorizationProtocol; +@class GIDAuthentication; + +// @relates GIDAuthentication +// +// The callback block that takes a GIDAuthentication, or an error if attempt to refresh was +// unsuccessful. +typedef void (^GIDAuthenticationHandler)(GIDAuthentication *authentication, NSError *error); + +// @relates GIDAuthentication +// +// The callback block that takes an access token, or an error if attempt to refresh was +// unsuccessful. +typedef void (^GIDAccessTokenHandler)(NSString *accessToken, NSError *error); + +// This class represents the OAuth 2.0 entities needed for sign-in. +@interface GIDAuthentication : NSObject + +// The client ID associated with the authentication. +@property(nonatomic, readonly) NSString *clientID; + +// The OAuth2 access token to access Google services. +@property(nonatomic, readonly) NSString *accessToken; + +// The estimated expiration date of the access token. +@property(nonatomic, readonly) NSDate *accessTokenExpirationDate; + +// The OAuth2 refresh token to exchange for new access tokens. +@property(nonatomic, readonly) NSString *refreshToken; + +// An OpenID Connect ID token that identifies the user. Send this token to your server to +// authenticate the user there. For more information on this topic, see +// https://developers.google.com/identity/sign-in/ios/backend-auth +@property(nonatomic, readonly) NSString *idToken; + +// The estimated expiration date of the ID token. +@property(nonatomic, readonly) NSDate *idTokenExpirationDate; + +// Gets a new authorizer for GTLService, GTMSessionFetcher, or GTMHTTPFetcher. +- (id)fetcherAuthorizer; + +// Get a valid access token and a valid ID token, refreshing them first if they have expired or are +// about to expire. +- (void)getTokensWithHandler:(GIDAuthenticationHandler)handler; + +// Refreshes the access token and the ID token using the refresh token. +- (void)refreshTokensWithHandler:(GIDAuthenticationHandler)handler; + +// Gets the access token, which may be a new one from the refresh token if the original has already +// expired or is about to expire. Deprecated: use |getTokensWithHandler:| to get access tokens +// instead. +- (void)getAccessTokenWithHandler:(GIDAccessTokenHandler)handler + DEPRECATED_MSG_ATTRIBUTE("Use |getTokensWithHandler:| instead."); + +// Refreshes the access token with the refresh token. Deprecated: Use |refreshTokensWithHandler:| +// to refresh access tokens instead. +- (void)refreshAccessTokenWithHandler:(GIDAccessTokenHandler)handler + DEPRECATED_MSG_ATTRIBUTE("Use |refreshTokensWithHandler:| instead."); + +@end diff --git a/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDGoogleUser.h b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDGoogleUser.h new file mode 100755 index 0000000..7a051d2 --- /dev/null +++ b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDGoogleUser.h @@ -0,0 +1,43 @@ +/* + * GIDGoogleUser.h + * Google Sign-In iOS SDK + * + * Copyright 2014 Google Inc. + * + * Use of this SDK is subject to the Google APIs Terms of Service: + * https://developers.google.com/terms/ + */ + +#import + +@class GIDAuthentication; +@class GIDProfileData; + +// This class represents a user account. +@interface GIDGoogleUser : NSObject + +// The Google user ID. +@property(nonatomic, readonly) NSString *userID; + +// Representation of the Basic profile data. It is only available if |shouldFetchBasicProfile| +// is set and either |signIn| or |signInSilently| has been completed successfully. +@property(nonatomic, readonly) GIDProfileData *profile; + +// The authentication object for the user. +@property(nonatomic, readonly) GIDAuthentication *authentication; + +// The API scopes requested by the app in an array of |NSString|s. Deprecated. +// Use |grantedScopes| instead. +@property(nonatomic, readonly) NSArray *accessibleScopes + __attribute__((deprecated("Use grantedScopes instead."))); + +// The API scopes granted to the app in an array of |NSString|s. +@property(nonatomic, readonly) NSArray *grantedScopes; + +// For Google Apps hosted accounts, the domain of the user. +@property(nonatomic, readonly) NSString *hostedDomain; + +// An OAuth2 authorization code for the home server. +@property(nonatomic, readonly) NSString *serverAuthCode; + +@end diff --git a/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDProfileData.h b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDProfileData.h new file mode 100755 index 0000000..8ffc995 --- /dev/null +++ b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDProfileData.h @@ -0,0 +1,34 @@ +/* + * GIDProfileData.h + * Google Sign-In iOS SDK + * + * Copyright 2014 Google Inc. + * + * Use of this SDK is subject to the Google APIs Terms of Service: + * https://developers.google.com/terms/ + */ + +#import + +// This class represents the basic profile information of a GIDGoogleUser. +@interface GIDProfileData : NSObject + +// The Google user's email. +@property(nonatomic, readonly) NSString *email; + +// The Google user's full name. +@property(nonatomic, readonly) NSString *name; + +// The Google user's given name. +@property(nonatomic, readonly) NSString *givenName; + +// The Google user's family name. +@property(nonatomic, readonly) NSString *familyName; + +// Whether or not the user has profile image. +@property(nonatomic, readonly) BOOL hasImage; + +// Gets the user's profile image URL for the given dimension in pixels for each side of the square. +- (NSURL *)imageURLWithDimension:(NSUInteger)dimension; + +@end diff --git a/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDSignIn.h b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDSignIn.h new file mode 100755 index 0000000..f62a3fb --- /dev/null +++ b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDSignIn.h @@ -0,0 +1,187 @@ +/* + * GIDSignIn.h + * Google Sign-In iOS SDK + * + * Copyright 2012 Google Inc. + * + * Use of this SDK is subject to the Google APIs Terms of Service: + * https://developers.google.com/terms/ + */ + +#import +#import + +@class GIDGoogleUser; +@class GIDSignIn; + +// The error domain for NSErrors returned by the Google Identity SDK. +extern NSString *const kGIDSignInErrorDomain; + +// A list of potential error codes returned from the Google Identity SDK. +typedef NS_ENUM(NSInteger, GIDSignInErrorCode) { + // Indicates an unknown error has occurred. + kGIDSignInErrorCodeUnknown = -1, + // Indicates a problem reading or writing to the application keychain. + kGIDSignInErrorCodeKeychain = -2, + // Indicates no appropriate applications are installed on the user's device which can handle + // sign-in. This code will only ever be returned if using webview and switching to browser have + // both been disabled. + kGIDSignInErrorCodeNoSignInHandlersInstalled = -3, + // Indicates there are no auth tokens in the keychain. This error code will be returned by + // signInSilently if the user has never signed in before with the given scopes, or if they have + // since signed out. + kGIDSignInErrorCodeHasNoAuthInKeychain = -4, + // Indicates the user canceled the sign in request. + kGIDSignInErrorCodeCanceled = -5, + // Indicates an Enterprise Mobility Management related error has occurred. + kGIDSignInErrorCodeEMM = -6, +}; + +// A protocol implemented by the delegate of |GIDSignIn| to receive a refresh token or an error. +@protocol GIDSignInDelegate + +// The sign-in flow has finished and was successful if |error| is |nil|. +- (void)signIn:(GIDSignIn *)signIn + didSignInForUser:(GIDGoogleUser *)user + withError:(NSError *)error; + +@optional + +// Finished disconnecting |user| from the app successfully if |error| is |nil|. +- (void)signIn:(GIDSignIn *)signIn + didDisconnectWithUser:(GIDGoogleUser *)user + withError:(NSError *)error; + +@end + +// A protocol which may be implemented by consumers of |GIDSignIn| to be notified of when +// GIDSignIn has finished dispatching the sign-in request. +// +// This protocol is useful for developers who implement their own "Sign In with Google" button. +// Because there may be a brief delay between when the call to |signIn| is made, and when the +// app switch occurs, it is best practice to have the UI react to the user's input by displaying +// a spinner or other UI element. The |signInWillDispatch| method should be used to +// stop or hide the spinner. +@protocol GIDSignInUIDelegate + +@optional + +// The sign-in flow has finished selecting how to proceed, and the UI should no longer display +// a spinner or other "please wait" element. +- (void)signInWillDispatch:(GIDSignIn *)signIn error:(NSError *)error; + +// If implemented, this method will be invoked when sign in needs to display a view controller. +// The view controller should be displayed modally (via UIViewController's |presentViewController| +// method, and not pushed unto a navigation controller's stack. +- (void)signIn:(GIDSignIn *)signIn presentViewController:(UIViewController *)viewController; + +// If implemented, this method will be invoked when sign in needs to dismiss a view controller. +// Typically, this should be implemented by calling |dismissViewController| on the passed +// view controller. +- (void)signIn:(GIDSignIn *)signIn dismissViewController:(UIViewController *)viewController; + +@end + +// This class signs the user in with Google. It also provides single sign-on via a capable Google +// app if one is installed. +// +// For reference, please see "Google Sign-In for iOS" at +// https://developers.google.com/identity/sign-in/ios +// Here is sample code to use |GIDSignIn|: +// 1. Get a reference to the |GIDSignIn| shared instance: +// GIDSignIn *signIn = [GIDSignIn sharedInstance]; +// 2. Set the OAuth 2.0 scopes you want to request: +// [signIn setScopes:[NSArray arrayWithObject:@"https://www.googleapis.com/auth/plus.login"]]; +// 3. Call [signIn setDelegate:self]; +// 4. Set up delegate method |signIn:didSignInForUser:withError:|. +// 5. Call |handleURL| on the shared instance from |application:openUrl:...| in your app delegate. +// 6. Call |signIn| on the shared instance; +@interface GIDSignIn : NSObject + +// The authentication object for the current user, or |nil| if there is currently no logged in user. +@property(nonatomic, readonly) GIDGoogleUser *currentUser; + +// The object to be notified when authentication is finished. +@property(nonatomic, weak) id delegate; + +// The object to be notified when sign in dispatch selection is finished. +@property(nonatomic, weak) id uiDelegate; + +// The client ID of the app from the Google APIs console. Must set for sign-in to work. +@property(nonatomic, copy) NSString *clientID; + +// The API scopes requested by the app in an array of |NSString|s. The default value is |@[]|. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSArray *scopes; + +// Whether or not to fetch basic profile data after signing in. The data is saved in the +// |GIDGoogleUser.profileData| object. +// +// Setting the flag will add "email" and "profile" to scopes. +// Defaults to |YES|. +@property(nonatomic, assign) BOOL shouldFetchBasicProfile; + +// The language for sign-in, in the form of ISO 639-1 language code optionally followed by a dash +// and ISO 3166-1 alpha-2 region code, such as |@"it"| or |@"pt-PT"|. Only set if different from +// system default. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *language; + +// The login hint to the authorization server, for example the user's ID, or email address, +// to be prefilled if possible. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *loginHint; + +// The client ID of the home web server. This will be returned as the |audience| property of the +// OpenID Connect ID token. For more info on the ID token: +// https://developers.google.com/identity/sign-in/ios/backend-auth +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *serverClientID; + +// The OpenID2 realm of the home web server. This allows Google to include the user's OpenID +// Identifier in the OpenID Connect ID token. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *openIDRealm; + +// The Google Apps domain to which users must belong to sign in. To verify, check |GIDGoogleUser|'s +// |hostedDomain| property. +// +// This property is optional. If you set it, set it before calling |signIn|. +@property(nonatomic, copy) NSString *hostedDomain; + +// Returns a shared |GIDSignIn| instance. ++ (GIDSignIn *)sharedInstance; + +// This method should be called from your |UIApplicationDelegate|'s +// |application:openURL:sourceApplication:annotation|. Returns |YES| if |GIDSignIn| handled this +// URL. +- (BOOL)handleURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +// Checks whether the user has either currently signed in or has previous authentication saved in +// keychain. +- (BOOL)hasAuthInKeychain; + +// Attempts to sign in a previously authenticated user without interaction. The delegate will be +// called at the end of this process indicating success or failure. +- (void)signInSilently; + +// Starts the sign-in process. The delegate will be called at the end of this process. Note that +// this method should not be called when the app is starting up, (e.g in +// application:didFinishLaunchingWithOptions:). Instead use the |signInSilently| method. +- (void)signIn; + +// Marks current user as being in the signed out state. +- (void)signOut; + +// Disconnects the current user from the app and revokes previous authentication. If the operation +// succeeds, the OAuth 2.0 token is also removed from keychain. +- (void)disconnect; + +@end diff --git a/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDSignInButton.h b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDSignInButton.h new file mode 100755 index 0000000..1e75fd6 --- /dev/null +++ b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GIDSignInButton.h @@ -0,0 +1,51 @@ +/* + * GIDSignInButton.h + * Google Sign-In iOS SDK + * + * Copyright 2012 Google Inc. + * + * Use of this SDK is subject to the Google APIs Terms of Service: + * https://developers.google.com/terms/ + */ + +#import + +// The various layout styles supported by the GIDSignInButton. +// The minimum size of the button depends on the language used for text. +// The following dimensions (in points) fit for all languages: +// kGIDSignInButtonStyleStandard: 230 x 48 +// kGIDSignInButtonStyleWide: 312 x 48 +// kGIDSignInButtonStyleIconOnly: 48 x 48 (no text, fixed size) +typedef NS_ENUM(NSInteger, GIDSignInButtonStyle) { + kGIDSignInButtonStyleStandard = 0, + kGIDSignInButtonStyleWide = 1, + kGIDSignInButtonStyleIconOnly = 2 +}; + +// The various color schemes supported by the GIDSignInButton. +typedef NS_ENUM(NSInteger, GIDSignInButtonColorScheme) { + kGIDSignInButtonColorSchemeDark = 0, + kGIDSignInButtonColorSchemeLight = 1 +}; + +// This class provides the "Sign in with Google" button. You can instantiate this +// class programmatically or from a NIB file. You should set up the +// |GIDSignIn| shared instance with your client ID and any additional scopes, +// implement the delegate methods for |GIDSignIn|, and add this button to your +// view hierarchy. +@interface GIDSignInButton : UIControl + +// The layout style for the sign-in button. +// Possible values: +// - kGIDSignInButtonStyleStandard: 230 x 48 (default) +// - kGIDSignInButtonStyleWide: 312 x 48 +// - kGIDSignInButtonStyleIconOnly: 48 x 48 (no text, fixed size) +@property(nonatomic, assign) GIDSignInButtonStyle style; + +// The color scheme for the sign-in button. +// Possible values: +// - kGIDSignInButtonColorSchemeDark +// - kGIDSignInButtonColorSchemeLight (default) +@property(nonatomic, assign) GIDSignInButtonColorScheme colorScheme; + +@end diff --git a/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GoogleSignIn.h b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GoogleSignIn.h new file mode 100755 index 0000000..8ccf7cd --- /dev/null +++ b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Headers/GoogleSignIn.h @@ -0,0 +1,5 @@ +#import "GIDAuthentication.h" +#import "GIDGoogleUser.h" +#import "GIDProfileData.h" +#import "GIDSignIn.h" +#import "GIDSignInButton.h" diff --git a/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Modules/module.modulemap b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Modules/module.modulemap new file mode 100755 index 0000000..4e52825 --- /dev/null +++ b/Pods/GoogleSignIn/Frameworks/GoogleSignIn.framework/Modules/module.modulemap @@ -0,0 +1,12 @@ +framework module GoogleSignIn { + umbrella header "GoogleSignIn.h" + export * + module * { export *} + link framework "CoreGraphics" + link framework "CoreText" + link framework "Foundation" + link framework "LocalAuthentication" + link framework "SafariServices" + link framework "Security" + link framework "SystemConfiguration" + link framework "UIKit"} diff --git a/Pods/GoogleSignIn/README.md b/Pods/GoogleSignIn/README.md new file mode 100755 index 0000000..4418b66 --- /dev/null +++ b/Pods/GoogleSignIn/README.md @@ -0,0 +1,18 @@ +# Google Sign-In SDK for iOS + +The Google Sign-In SDK allows users to sign in with their Google account from +third-party apps. + +Please visit [our developer site](https://developers.google.com/identity/sign-in/ios/) +for integration instructions, documentation, support information, and terms of +service. + +## Getting Started + +* Try our example app with: + ``` + $ pod try GoogleSignIn + ``` + and follow the directions [here](https://developers.google.com/identity/sign-in/ios/start). +* Read our [getting started guides](https://developers.google.com/identity/sign-in/ios/start-integrating). +* Take a look at the [API reference](https://developers.google.com/identity/sign-in/ios/api/). diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Info.plist b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Info.plist new file mode 100755 index 0000000..290d534 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIconFile + + CFBundleIdentifier + com.google.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Roboto-Bold.ttf b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/Roboto-Bold.ttf new file mode 100755 index 0000000000000000000000000000000000000000..68822caf2421c331497581f9b80e49401189b996 GIT binary patch literal 127744 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%0AmbY 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 JPDHLkV1h!Z?2`Zh literal 0 HcmV?d00001 diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@3x.png b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/google@3x.png new file mode 100755 index 0000000000000000000000000000000000000000..d978ed26a231ef362d6897ebf208f3f1f4f1c7da GIT binary patch literal 1622 zcmV-c2C4apP)0n7a+ByQ8!ahvZ4Bun~Qz)$OQXm;|AK-T;yJkwe z5lB|-2hb?eu^!N_zrfEgVCIW(%}c{J?Gjx7CO(zGCwvl-oT+PonEn~#mX1?^fxYJw z%=Xzqv$hLRB7d5d9l|!{41P_5HFX(Ksy6wBJ0M#7YdYKUcVVkK4M-1e<+#o-o6eMa z0gxV>{DQWAqP|6~-v6`N+#Se>@Q4w8xC{T=*3SmgYoji>YtO&On*L609Vtygd%^KQ z>GZe7G!)2)_8%I{^3RXnyORiyS7dL!X1pP8plsB>XEl}Q{nS+6MXdGq5mki)Wp2L< zfwC2GX{yK@$D!IZF6l1n&N?X3p0W@qn{lDW^8DvG&?d^dh)B^MBIHoF_&^wT4A~7R zn~|7FdF#r%RCAbE);zVHsG2&sJs5AcK-rEOSLUl6Adz+RdWxFk`{EW22%xOL`H%YMPC8pf4E9&##ZKi2xLSif>}$VUjc%x?9wU|49}|s zG9oj<8h(TST`*|)3y5#Us9f{N`v}O0jLw*J^C;_517t*on#b2bSkztKlx_E-tovR- zdS$5HzX=FdmiLVG23^+Wcp$wpG-G}s;t!ZIq1KdjZFzJ-|5-qKnQxEoqKCCKIxdA7 zD+L6r?4l$K_2-H{;>6iDq57PS+RVdt0m>u{^c>k>_M*r!K*XP(`BV`v)Z5E;6Jz~T z5XueUb>9Y*Nf>a2Y%s^o^#=kGO3ZcE2v08TCklKn4%E)%ajsTo9<~=yCSXtMYb$DK zl?i1jZuk?3apB{RedACyWj)1(b4PKIm=vFT8BiuzN+NTm*H>}mX&}ahgrJ-?EAoHg zP+zUsK}?%9kpm>8c->b3btG)GF1b)`GZvi;#JDi}Vfi-KFIc>v80nwE15eK5Zq&^8CW3aW-p^Bmb^9>>&h!Gc7=pWWY^*Dc(3ANFBYgWCk(}B{-Tv~SkAB|Ev zN)<@6Thk~4+8CEj6!;7GHTj(NF$2i?TJg9q zQoYmn1WKgu%)`2>K9@uFI-kXwUE6jItT8e2;g|RnA$6J`dq-<8pp9|ag5oPYjQ@dQ z9_RNM_)Ol^;cD)r_wF4t-kZE9CVKtwr;CL3)=>Ol*x&4>(Fs7C;}R1O07Pdi zc;QT8zT?Z-vsDzm6DSrgG4WbaJg%oZKOA_E6r&$ly7?#N<%i7_c|fsniHmNyAs0>I znXCv0!yms-*h*`8?Y(WjA=n!z9xh2?ZIot9xM9y+^V*2p!hL`e;Ua}wIhsMFlY>3U zofIe;F4A}_P<_sqGrz{%wS0I0lEo!ud`2|++`o5xC})f6aXrVIH&80L=yJf)3EfOy z*I8&T-*rHsMtpzCNaJkCGx`+JJl>Bq_B20Ul-pn21`0ZNyD04`wR UaJO?$Q2+n{07*qoM6N<$f*zI^s{jB1 literal 0 HcmV?d00001 diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..efd53fe --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/he.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "היכנס"; + +/* Long form sign-in button text */ +"Sign in with Google" = "היכנס באמצעות Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "כניסה באמצעות Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "התקן את Google app בחינם והיכנס אל אפליקציות באמצעות חשבון Google. לא תצטרך עוד לזכור סיסמאות."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "בטל"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "התקן"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "אישור"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "ביטול"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "הגדרות"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "לא ניתן להיכנס לחשבון"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "מנהל המערכת דורש ממך להגדיר קוד סיסמה במכשיר זה כדי לגשת לחשבון זה. יש להגדיר קוד סיסמה ולנסות שוב."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "המכשיר אינו פועל בהתאם למדיניות האבטחה שנקבעה על-ידי מנהל המערכת."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "האם להתחבר באמצעות האפליקציית Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "על מנת להגן על נתוני הארגון שלך, יש להתחבר באמצעות אפליקציית Device Policy לפני הכניסה לחשבון."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "התחברות"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hi.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hi.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..3b7cd1f --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hi.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "साइन इन करें"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Google के साथ साइन इन करें"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Google के साथ साइन इन करें"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "मुफ़्त Google ऐप्लिकेशन पाएं और अपने Google खाते से ऐप्लिकेशन में साइन इन करें. पासवर्ड याद रखने की ज़रूरत नहीं."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "अभी नहीं"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "पाएं"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "ठीक"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "अभी नहीं"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "सेटिंग"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "खाते में साइन इन नहीं किया जा सका"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "आपके एडमिन के लिए ज़रूरी है कि आप यह खाता एक्सेस करने के लिए इस डिवाइस पर एक पासकोड सेट करें. कृपया पासकोड सेट करें और दोबारा कोशिश करें."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "डिवाइस आपके एडमिन के ज़रिए सेट की गई सुरक्षा नीति का अनुपालन नहीं करता है."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "क्या Device Policy ऐप्लिकेशन से कनेक्ट करना चाहते हैं?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "अपने संगठन डेटा की सुरक्षा के लिए, आपको लॉग-इन करने से पहले Device Policy ऐप्लिकेशन से कनेक्ट करना होगा."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "कनेक्ट करें"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..32b6cc3 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hr.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Prijava"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Prijavite se putem Googlea"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Prijavite se putem Googlea"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Preuzmite besplatnu aplikaciju Google i prijavljujte se na aplikacije svojim Google računom. Ne morate pamtiti zaporke."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Odustani"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Nabavi"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "U redu"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Odbaci"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Postavke"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Prijava na račun nije moguća"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Vaš administrator zahtijeva da postavite šifru zaporke na ovom uređaju da biste pristupili računu. Postavite šifru zaporke i pokušajte ponovo."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Uređaj nije usklađen sa sigurnosnim pravilima koja je postavio vaš administrator."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Želite li se povezati s aplikacijom Pravila za uređaje?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Da biste zaštitili podatke svoje organizacije, morate se povezati s aplikacijom Pravila za uređaje prije prijave."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Poveži"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..9359cf5 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/hu.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Bejelentkezés"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Bejelentkezés Google-fiókkal"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Bejelentkezés Google-fiókkal"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Telepítse az ingyenes Google alkalmazást, és jelentkezzen be az egyes termékekbe Google-fiókjával. Nem kell különböző jelszavakat megjegyeznie."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Mégse"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Telepítés"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Mégse"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Beállítások"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Nem sikerült bejelentkezni a fiókba"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Adminisztrátora biztonsági kód beállítását kéri ezen az eszközön a fiókhoz való hozzáféréshez. Kérjük, állítson be biztonsági kódot, majd próbálja újra."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Az eszköz nem felel meg a rendszergazda által beállított biztonsági házirendnek."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Csatlakozik a Device Policy alkalmazáshoz?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "A szervezet adatainak védelme érdekében a bejelentkezés előtt csatlakoznia kell a Device Policy alkalmazáshoz."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Csatlakozás"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..9b66ca3 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/id.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Masuk"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Masuk dengan Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Masuk dengan Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Dapatkan Google app gratis dan masuk ke aplikasi dengan Akun Google. Tidak perlu mengingat sandi."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Batal"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Ambil"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "Oke"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Batal"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Setelan"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Tidak dapat login ke akun"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administrator mengharuskan Anda menyetel kode sandi di perangkat ini untuk mengakses akun ini. Setel kode sandi dan coba lagi."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Perangkat ini tidak sesuai dengan kebijakan keamanan yang disetel oleh administrator."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Sambungkan dengan Aplikasi Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Untuk melindungi data organisasi, Anda harus tersambung dengan aplikasi Device Policy sebelum login."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Sambungkan"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..9c3e576 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/it.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Accedi"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Accedi con Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Accedi con Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Scarica gratis l'app Google app e accedi alle app con il tuo account Google: liberati dai vincoli delle password."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Annulla"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Scarica"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Annulla"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Impostazioni"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Impossibile accedere all'account"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "L'amministratore richiede l'impostazione di un passcode sul dispositivo per accedere a questo account. Imposta un passcode e riprova."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Il dispositivo non è conforme alle norme di sicurezza stabilite dall'amministratore."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vuoi collegarti all'app Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Per proteggere i dati della tua organizzazione, devi collegarti all'app Device Policy prima di accedere."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Collega"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..6dab02c --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ja.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "ログイン"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Googleでログイン"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Googleでログイン"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "無料のGoogleアプリをインストールして、Googleアカウントでアプリにログインしよう。パスワードを覚えておく必要はありません。"; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "キャンセル"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "インストール"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "キャンセル"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "設定"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "アカウントにログインできません"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "このアカウントにアクセスするには、この端末でパスコードを設定する必要があります。パスコードを設定してから、もう一度お試しください。"; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "この端末は、管理者が設定したセキュリティ ポリシーに準拠していません。"; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Device Policy アプリと接続しますか?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "組織のデータを保護するために、ログインする前に Device Policy アプリと接続する必要があります。"; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "接続"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..b596605 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ko.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "로그인"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Google 계정으로 로그인"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Google 계정으로 로그인"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "무료 Google 앱을 다운로드하여 Google 계정으로 앱에 로그인하세요. 비밀번호를 기억할 필요가 없습니다."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "취소"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "설치"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "확인"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "취소"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "설정"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "계정에 로그인할 수 없음"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "관리자의 설정에 따라 이 계정에 액세스하려면 사용 중인 기기에 비밀번호를 설정해야 합니다. 비밀번호를 설정한 후 다시 시도해 주세요."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "관리자가 설정한 보안 정책을 준수하지 않는 기기입니다."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Device Policy 앱과 연결하시겠습니까?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "조직의 데이터를 보호하려면 로그인하기 전에 Device Policy 앱과 연결해야 합니다."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "연결"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..700aaf2 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ms.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Log masuk"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Log masuk dengan Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Log masuk dengan Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Dapatkan apl Google percuma dan log masuk ke apl menggunakan Akaun Google anda. Tidak perlu mengingati kata laluan."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Batal"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Dapatkan"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Batal"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Tetapan"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Tidak dapat log masuk ke akaun"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Pentadbir menghendaki anda menetapkan kod laluan pada peranti ini untuk mengakses akaun ini. Sila tetapkan kod laluan, kemudian cuba lagi."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Peranti tidak mematuhi dasar keselamatan yang ditetapkan oleh pentadbir anda."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Berhubung dengan Apl Dasar Peranti?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Untuk melindungi data organisasi anda, anda mesti berhubung dengan apl Dasar Peranti sebelum log masuk."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Hubungkan"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..994b40f --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nb.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Logg på"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Logg på med Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Logg på med Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Skaff deg den gratis Google-appen, og logg på apper med Google-kontoen din. Du trenger ikke å huske passord."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Avbryt"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Hent"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Avbryt"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Innstillinger"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Kan ikke logge på kontoen"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administratoren din krever at du angir en adgangskode på denne enheten for å få tilgang til kontoen. Angi en adgangskode, og prøv på nytt."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Enheten overholder ikke retningslinjene for sikkerhet som ble angitt av administratoren din."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vil du koble til med Device Policy-appen?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "For å beskytte dataene til organisasjonen din må du koble til med Device Policy-appen før du logger på."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Koble til"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..fb539e0 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/nl.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Inloggen"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Inloggen met Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Inloggen met Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Installeer de gratis Google-app en log in bij apps met uw Google-account. U hoeft geen wachtwoorden te onthouden."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Annuleren"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Installeren"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Annuleren"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Instellingen"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Kan niet inloggen op account"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Uw beheerder vereist dat u een toegangscode instelt op dit apparaat om toegang te krijgen tot dit account. Stel een toegangscode in en probeer het opnieuw."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Het apparaat voldoet niet aan het beveiligingsbeleid dat is ingesteld door uw beheerder."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Verbinden met Device Policy-app?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Ter bescherming van de gegevens van uw organisatie moet u verbinding maken met de Device Policy-app voordat u inlogt."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Verbinden"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..6ed4b57 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pl.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Zaloguj się"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Zaloguj się przez Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Zaloguj się przez Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Pobierz darmową aplikację Google i zaloguj się do aplikacji, używając konta Google. Nie musisz pamiętać haseł."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Anuluj"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Pobierz"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Anuluj"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Ustawienia"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Nie można zalogować się na konto"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administrator wymaga ustawienia kodu dostępu do konta na tym urządzeniu. Ustaw kod dostępu i spróbuj ponownie."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Urządzenie nie jest zgodne z zasadami bezpieczeństwa ustanowionymi przez Twojego administratora."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Połączyć z aplikacją Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Aby chronić dane organizacji, przed zalogowaniem musisz się połączyć z aplikacją Device Policy."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Połącz"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..3207312 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Fazer login"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Fazer login com o Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Fazer login com o Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Faça o download do Google app gratuitamente e faça login em aplicativos com sua Conta do Google. Não há necessidade de lembrar senhas."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancelar"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Instalar"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancelar"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Configurações"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Não foi possível fazer login na conta"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Seu administrador exige que você defina uma senha neste dispositivo para acessar esta conta. Defina uma senha e tente novamente."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "O dispositivo não está em conformidade com a política de segurança definida pelo administrador."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Conectar-se ao app Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Para proteger os dados da sua organização, você precisa se conectar ao app Device Policy antes de fazer login."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Conectar"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..3207312 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_BR.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Fazer login"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Fazer login com o Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Fazer login com o Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Faça o download do Google app gratuitamente e faça login em aplicativos com sua Conta do Google. Não há necessidade de lembrar senhas."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancelar"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Instalar"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancelar"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Configurações"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Não foi possível fazer login na conta"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Seu administrador exige que você defina uma senha neste dispositivo para acessar esta conta. Defina uma senha e tente novamente."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "O dispositivo não está em conformidade com a política de segurança definida pelo administrador."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Conectar-se ao app Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Para proteger os dados da sua organização, você precisa se conectar ao app Device Policy antes de fazer login."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Conectar"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..91d7a25 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/pt_PT.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Iniciar sessão"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Iniciar sessão com o Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Iniciar sessão com o Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Obtenha a aplicação Google gratuita e inicie sessão nas aplicações com a sua Conta Google. Não precisa de memorizar palavras-passe."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Cancelar"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Obter"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Cancelar"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Definições"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Não é possível iniciar sessão na conta"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "O administrador requer a definição de um código secreto neste dispositivo para aceder a esta conta. Defina um código secreto e tente novamente."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "O dispositivo não está em conformidade com a política de segurança definida pelo seu administrador."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Pretende ligar-se à aplicação Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Para proteger os dados da sua entidade, tem de se ligar à aplicação Device Policy antes de iniciar sessão."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Ligar"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..34b4239 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ro.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Conectați-vă"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Conectați-vă cu Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Conectați-vă cu Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Instalați aplicația Google gratuită și conectați-vă la aplicații folosind Contul Google. Nu mai trebuie să rețineți parolele."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Anulați"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Instalați"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Anulați"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Setări"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Nu vă puteți conecta la cont"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administratorul impune să setați o parolă pe acest dispozitiv ca să accesați contul. Setați o parolă și încercați din nou."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Dispozitivul nu respectă politica de securitate stabilită de administrator."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vă conectați cu aplicația Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Pentru a vă proteja datele organizației, trebuie să vă conectați cu aplicația Device Policy înainte de a vă conecta."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Conectați"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..6d6c98a --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/ru.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Войти"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Войти в аккаунт Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Надоело вводить пароль?"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Установите бесплатное приложение Google и входите в другие мобильные программы, используя учетные данные своего аккаунта."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Отмена"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Установить"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "ОК"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Отмена"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Настройки"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Не удалось войти в аккаунт"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "В соответствии с требованиями администратора для входа в аккаунт необходимо установить на устройстве код доступа. Сделайте это и повторите попытку."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Устройство не соответствует правилам безопасности, которые установлены администратором."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Подключить приложение Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "В целях защиты корпоративных данных перед входом в аккаунт необходимо подключить приложение Device Policy."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Подключить"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..eaf2f7f --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sk.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Prihlásiť sa"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Prihlásiť sa pomocou účtu Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Prihlásenie pomocou účtu Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Nainštalujte si zdarma aplikáciu Google a prihlasujte sa do aplikácií pomocou účtu Google. Nebudete si už musieť pamätať rôzne heslá."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Zrušiť"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Inštalovať"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Zrušiť"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Nastavenia"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Nedá sa prihlásiť do účtu"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Správca vyžaduje, aby ste v tomto zariadení nastavili vstupný kód na prístup do príslušného účtu. Nastavte vstupný kód a skúste to znova."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Zariadenie nespĺňa pravidlá zabezpečenia nastavené vaším správcom."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Prepojiť s aplikáciou Pravidlá pre zariadenie?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Na to, aby bolo možné chrániť dáta vašej organizácie, je nutné pred prihlásením aktivovať prepojenie s aplikáciou Pravidlá pre zariadenie."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Prepojiť"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..3192e07 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/sv.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Logga in"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Logga in med Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Logga in med Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Hämta Google-appen utan kostnad och logga in i appar med ditt Google-konto. Du behöver inte komma ihåg en massa lösenord."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Avbryt"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Hämta"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "Ok"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Avbryt"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Inställningar"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Det gick inte att logga in på kontot"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Administratören kräver att du anger ett lösenord på den här enheten för att få åtkomst till kontot. Ange ett lösenord och försök igen."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Säkerhetspolicyn som administratören har angett efterlevs inte på enheten."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Vill du ansluta med appen Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Du måste ansluta med appen Device Policy innan du loggar in för att skydda organisationens data."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Anslut"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..353394c --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/th.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "ลงชื่อเข้าใช้"; + +/* Long form sign-in button text */ +"Sign in with Google" = "ลงชื่อเข้าใช้ด้วย Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "ลงชื่อเข้าใช้ด้วย Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "ติดตั้งแอป Google ฟรีและลงชื่อเข้าใช้แอปต่างๆ ด้วยบัญชี Google คุณไม่ต้องจำรหัสผ่านอีกแล้ว"; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "ยกเลิก"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "ติดตั้ง"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "ตกลง"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "ยกเลิก"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "การตั้งค่า"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "ลงชื่อเข้าใช้บัญชีไม่ได้"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "ผู้ดูแลระบบกำหนดให้คุณตั้งรหัสผ่านในอุปกรณ์นี้เพื่อเข้าถึงบัญชีนี้ โปรดตั้งรหัสผ่าน แล้วลองอีกครั้ง"; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "อุปกรณ์ไม่ตรงตามนโยบายความปลอดภัยที่กำหนดโดยผู้ดูแลระบบของคุณ"; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "เชื่อมต่อแอป Device Policy ไหม"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "เพื่อปกป้องข้อมูลขององค์กร คุณต้องเชื่อมต่อแอป Device Policy ก่อนลงชื่อเข้าสู่ระบบ"; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "เชื่อมต่อ"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..414b7b9 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/tr.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Oturum aç"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Google ile oturum aç"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Google ile oturum aç"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Ücretsiz Google uygulamasını edinin ve uygulamalarda Google Hesabınızla oturum açın. Şifrelerinizi hatırlamanız gerekmez."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "İptal"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Yükle"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "Tamam"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "İptal"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Ayarlar"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Hesapta oturum açılamıyor"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Yöneticiniz, bu hesaba erişmek için bu cihazda bir şifre kodu ayarlamanızı gerektiriyor. Lütfen şifre kodu ayarlayın ve tekrar deneyin."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Bu cihaz, yöneticinizin ayarladığı güvenlik politikasıyla uyumlu değil."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Cihaz Politika Uygulamasına bağlanılsın mı?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Kuruluşunuzun verilerini korumak için, giriş yapmadan önce Cihaz Politikası uygulamasına bağlanmalısınız."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Bağlan"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..faaa0bc --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/uk.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Увійти"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Увійти в обліковий запис Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Входьте в обліковий запис Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Установіть безкоштовний додаток Google і входьте в обліковий запис Google у додатках. Не потрібно запам’ятовувати паролі."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Скасувати"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Установити"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Скасувати"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Налаштування"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Не вдається ввійти в обліковий запис"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Щоб увійти в обліковий запис, потрібно налаштувати код доступу на пристрої. Зробіть це й повторіть спробу."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Пристрій не відповідає правилу безпеки, яке налаштував адміністратор."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "З’єднатися з додатком Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Щоб захистити дані організації, потрібно з’єднатися з додатком Device Policy, перш ніж увійти."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "З’єднатися"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..94f858c --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/vi.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "Đăng nhập"; + +/* Long form sign-in button text */ +"Sign in with Google" = "Đăng nhập bằng Google"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "Đăng nhập bằng Google"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "Tải ứng dụng Google miễn phí và đăng nhập vào các ứng dụng bằng Tài khoản Google của bạn. Không cần phải nhớ mật khẩu."; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "Hủy"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "Tải"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "OK"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "Hủy"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "Cài đặt"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "Không thể đăng nhập vào tài khoản"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "Quản trị viên của bạn yêu cầu bạn phải đặt mật mã trên thiết bị này để truy cập vào tài khoản này. Hãy đặt mật mã và thử lại."; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "Thiết bị này không tuân thủ chính sách bảo mật do quản trị viên của bạn thiết lập."; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "Kết nối với ứng dụng Device Policy?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "Để bảo vệ dữ liệu của tổ chức của mình, bạn phải kết nối với ứng dụng Device Policy trước khi đăng nhập."; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "Kết nối"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..0c087f6 --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_CN.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "登录"; + +/* Long form sign-in button text */ +"Sign in with Google" = "使用 Google 帐号登录"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "使用 Google 帐号登录"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "安装免费的“Google”应用后,您可以使用自己的 Google 帐号登录众多应用(无需记住众多密码)。"; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "取消"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "安装"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "确定"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "取消"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "设置"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "无法登录帐号"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "您的管理员要求您必须先在此设备上设置密码,然后才能访问此帐号。请设置密码并重试。"; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "该设备不符合管理员设置的安全政策。"; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "要关联 Device Policy 应用吗?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "要保护您组织的数据,您必须在登录前关联 Device Policy 应用。"; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "关联"; diff --git a/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings new file mode 100755 index 0000000..748468f --- /dev/null +++ b/Pods/GoogleSignIn/Resources/GoogleSignIn.bundle/zh_TW.lproj/GoogleSignIn.strings @@ -0,0 +1,44 @@ +/* Sign-in button text */ +"Sign in" = "登入"; + +/* Long form sign-in button text */ +"Sign in with Google" = "登入 Google 帳戶"; + +/* The title of the promotional prompt to install the Google app. */ +"PromoTitle" = "登入 Google 帳戶"; + +/* The body message of the promotional prompt to install the Google app. */ +"PromoMessage" = "只要安裝免費的 Google app,即可使用 Google 帳戶登入應用程式,而不必費心記住密碼。"; + +/* The cancel button on the promotional prompt to install the Google app. */ +"PromoActionCancel" = "取消"; + +/* The install button on the promotional prompt to install the Google app. */ +"PromoActionInstall" = "安裝"; + +/* The text for the button for user to acknowledge and dismiss a dialog. */ +"OK" = "確定"; + +/* The text for the button for user to dismiss a dialog without taking any action. */ +"Cancel" = "取消"; + +/* The name of the iOS native "Settings" app. */ +"SettingsAppName" = "設定"; + +/* The title for the error dialog for unable to sign in because of EMM policy. */ +"EmmErrorTitle" = "無法登入帳戶"; + +/* The text in the error dialog asking user to set up a passcode for the device due to EMM policy. */ +"EmmPasscodeRequired" = "管理員要求您必須為這個裝置設定通行碼,才能存取這個帳戶。請設定通行碼,然後再試一次。"; + +/* The text in the error dialog informing user that EMM policy prevented sign-in on the device. */ +"EmmGeneralError" = "這部裝置不符合您的管理員所設定的安全性政策規定。"; + +/* The title in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectTitle" = "要連結 Device Policy 應用程式嗎?"; + +/* The text in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectText" = "為了保護貴機構的資料,您必須在登入前連結 Device Policy 應用程式。"; + +/* The action button label in the error dialog informing user that connecting with Device Policy app is required. */ +"EmmConnectLabel" = "連結"; diff --git a/Pods/GoogleToolboxForMac/DebugUtils/GTMDebugSelectorValidation.h b/Pods/GoogleToolboxForMac/DebugUtils/GTMDebugSelectorValidation.h new file mode 100644 index 0000000..0c4c4da --- /dev/null +++ b/Pods/GoogleToolboxForMac/DebugUtils/GTMDebugSelectorValidation.h @@ -0,0 +1,101 @@ +// +// GTMDebugSelectorValidation.h +// +// This file should only be included within an implimation file. In any +// function that takes an object and selector to invoke, you should call: +// +// GTMAssertSelectorNilOrImplementedWithArguments(obj, sel, @encode(arg1type), ..., NULL) +// or +// GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments(obj, sel, @encode(returnType), @encode(arg1type), ..., NULL) +// +// This will then validate that the selector is defined and using the right +// type(s), this can help catch errors much earlier then waiting for the +// selector to actually fire (and in the case of error selectors, might never +// really be tested until in the field). +// +// Copyright 2007-2008 Google Inc. +// +// 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. +// + +#if DEBUG + +#import +#import +#import "GTMDefines.h" + +static void GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments(id obj, SEL sel, const char *retType, ...) { + + // verify that the object's selector is implemented with the proper + // number and type of arguments + va_list argList; + va_start(argList, retType); + + if (obj && sel) { + // check that the selector is implemented + _GTMDevAssert([obj respondsToSelector:sel], + @"\"%@\" selector \"%@\" is unimplemented or misnamed", + NSStringFromClass([obj class]), + NSStringFromSelector(sel)); + + const char *expectedArgType; + NSUInteger argCount = 2; // skip self and _cmd + NSMethodSignature *sig = [obj methodSignatureForSelector:sel]; + + // check that each expected argument is present and of the correct type + while ((expectedArgType = va_arg(argList, const char*)) != 0) { + + if ([sig numberOfArguments] > argCount) { + const char *foundArgType = [sig getArgumentTypeAtIndex:argCount]; + + _GTMDevAssert(0 == strncmp(foundArgType, expectedArgType, strlen(expectedArgType)), + @"\"%@\" selector \"%@\" argument %u should be type %s", + NSStringFromClass([obj class]), + NSStringFromSelector(sel), + (uint32_t)(argCount - 2), + expectedArgType); + } + argCount++; + } + + // check that the proper number of arguments are present in the selector + _GTMDevAssert(argCount == [sig numberOfArguments], + @"\"%@\" selector \"%@\" should have %u arguments", + NSStringFromClass([obj class]), + NSStringFromSelector(sel), + (uint32_t)(argCount - 2)); + + // if asked, validate the return type + if (retType && (strcmp("gtm_skip_return_test", retType) != 0)) { + const char *foundRetType = [sig methodReturnType]; + _GTMDevAssert(0 == strncmp(foundRetType, retType, strlen(retType)), + @"\"%@\" selector \"%@\" return type should be type %s", + NSStringFromClass([obj class]), + NSStringFromSelector(sel), + retType); + } + } + + va_end(argList); +} + +#define GTMAssertSelectorNilOrImplementedWithArguments(obj, sel, ...) \ + GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments((obj), (sel), "gtm_skip_return_test", __VA_ARGS__) + +#else // DEBUG + +// make it go away if not debug +#define GTMAssertSelectorNilOrImplementedWithReturnTypeAndArguments(obj, sel, retType, ...) do { } while (0) +#define GTMAssertSelectorNilOrImplementedWithArguments(obj, sel, ...) do { } while (0) + +#endif // DEBUG diff --git a/Pods/GoogleToolboxForMac/DebugUtils/GTMDebugThreadValidation.h b/Pods/GoogleToolboxForMac/DebugUtils/GTMDebugThreadValidation.h new file mode 100644 index 0000000..8d116d9 --- /dev/null +++ b/Pods/GoogleToolboxForMac/DebugUtils/GTMDebugThreadValidation.h @@ -0,0 +1,44 @@ +// +// GTMDebugThreadValidation.h +// +// Copyright 2016 Google Inc. +// +// 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 "GTMDefines.h" +#import + +// GTMCheckCurrentQueue, GTMIsCurrentQueue +// +// GTMCheckCurrentQueue takes a target queue and uses _GTMDevAssert to +// report if that is not the currently executing queue. +// +// GTMIsCurrentQueue takes a target queue and returns true if the target queue +// is the currently executing dispatch queue. This can be passed to another +// assertion call in debug builds; it should never be used in release code. +// +// The dispatch queue must have a label. +#define GTMCheckCurrentQueue(targetQueue) \ + _GTMDevAssert(GTMIsCurrentQueue(targetQueue), \ + @"Current queue is %s (expected %s)", \ + _GTMQueueName(DISPATCH_CURRENT_QUEUE_LABEL), \ + _GTMQueueName(targetQueue)) + +#define GTMIsCurrentQueue(targetQueue) \ + (strcmp(_GTMQueueName(DISPATCH_CURRENT_QUEUE_LABEL), \ + _GTMQueueName(targetQueue)) == 0) + +#define _GTMQueueName(queue) \ + (strlen(dispatch_queue_get_label(queue)) > 0 ? \ + dispatch_queue_get_label(queue) : "unnamed") diff --git a/Pods/GoogleToolboxForMac/DebugUtils/GTMMethodCheck.h b/Pods/GoogleToolboxForMac/DebugUtils/GTMMethodCheck.h new file mode 100644 index 0000000..9fad81d --- /dev/null +++ b/Pods/GoogleToolboxForMac/DebugUtils/GTMMethodCheck.h @@ -0,0 +1,69 @@ +// +// GTMMethodCheck.h +// +// Copyright 2006-2016 Google Inc. +// +// 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 +#import +#import + +/// A macro for enforcing debug time checks to make sure all required methods are linked in +// +// When using categories, it can be very easy to forget to include the +// implementation of a category. +// Let's say you had a class foo that depended on method bar of class baz, and +// method bar was implemented as a member of a category. +// You could add the following code: +// +// GTM_METHOD_CHECK(baz, bar) +// +// and the code would check to make sure baz was implemented just before main +// was called. This works for both dynamic libraries, and executables. +// +// +// This is not compiled into release builds. + +#ifdef DEBUG + +// This is the "magic". +// A) we need a multi layer define here so that the preprocessor expands +// __LINE__ the way we want it. We need __LINE__ so that each of our +// GTM_METHOD_CHECKs generates a unique function name. +#define GTM_METHOD_CHECK(class, method) GTM_METHOD_CHECK_INNER(class, method, __LINE__) +#define GTM_METHOD_CHECK_INNER(class, method, line) \ + GTM_METHOD_CHECK_INNER_INNER(class, method, line) + +// B) define a function that is called at startup to check that |class| has an +// implementation for |method| (either a class method or an instance method). +#define GTM_METHOD_CHECK_INNER_INNER(class, method, line) \ +__attribute__ ((constructor, visibility("hidden"))) \ + static void xxGTMMethodCheckMethod ## class ## line () { \ + @autoreleasepool { \ + if (![class instancesRespondToSelector:@selector(method)] \ + && ![class respondsToSelector:@selector(method)]) { \ + fprintf(stderr, "%s:%d: error: We need method '%s' to be linked in for class '%s'\n", \ + __FILE__, line, #method, #class); \ + exit(EX_SOFTWARE); \ + } \ + } \ +} + +#else // DEBUG + +// Do nothing in release. +#define GTM_METHOD_CHECK(class, method) + +#endif // DEBUG diff --git a/Pods/GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.h b/Pods/GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.h new file mode 100644 index 0000000..285a82c --- /dev/null +++ b/Pods/GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.h @@ -0,0 +1,40 @@ +// +// GTMNSDictionary+URLArguments.h +// +// Copyright 2006-2008 Google Inc. +// +// 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 + +/// Utility for building a URL or POST argument string. +@interface NSDictionary (GTMNSDictionaryURLArgumentsAdditions) + +/// Returns a dictionary of the decoded key-value pairs in a http arguments +/// string of the form key1=value1&key2=value2&...&keyN=valueN. +/// Keys and values will be unescaped automatically. +/// Only the first value for a repeated key is returned. +/// +/// NOTE: Apps targeting iOS 8 or OS X 10.10 and later should use +/// NSURLComponents and NSURLQueryItem to create URLs with +/// query arguments instead of using these category methods. ++ (NSDictionary *)gtm_dictionaryWithHttpArgumentsString:(NSString *)argString NS_DEPRECATED(10_0, 10_10, 2_0, 8_0, "Use NSURLComponents and NSURLQueryItem."); + +/// Gets a string representation of the dictionary in the form +/// key1=value1&key2=value2&...&keyN=valueN, suitable for use as either +/// URL arguments (after a '?') or POST body. Keys and values will be escaped +/// automatically, so should be unescaped in the dictionary. +- (NSString *)gtm_httpArgumentsString NS_DEPRECATED(10_0, 10_10, 2_0, 8_0, "Use NSURLComponents and NSURLQueryItem."); + +@end diff --git a/Pods/GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.m b/Pods/GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.m new file mode 100644 index 0000000..612ba5b --- /dev/null +++ b/Pods/GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.m @@ -0,0 +1,82 @@ +// +// GTMNSDictionary+URLArguments.m +// +// Copyright 2006-2008 Google Inc. +// +// 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 "GTMNSDictionary+URLArguments.h" +#import "GTMNSString+URLArguments.h" +#import "GTMMethodCheck.h" +#import "GTMDefines.h" + + +// Export a nonsense symbol to suppress a libtool warning when this is linked alone in a static lib. +__attribute__((visibility("default"))) + char GTMNSDictionaryURLArgumentsExportToSuppressLibToolWarning = 0; + +#pragma clang diagnostic push +// Ignore all of the deprecation warnings for GTMNSString+URLArguments +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + +@implementation NSDictionary (GTMNSDictionaryURLArgumentsAdditions) + +GTM_METHOD_CHECK(NSString, gtm_stringByEscapingForURLArgument); +GTM_METHOD_CHECK(NSString, gtm_stringByUnescapingFromURLArgument); + ++ (NSDictionary *)gtm_dictionaryWithHttpArgumentsString:(NSString *)argString { + NSMutableDictionary* ret = [NSMutableDictionary dictionary]; + NSArray* components = [argString componentsSeparatedByString:@"&"]; + NSString* component; + // Use reverse order so that the first occurrence of a key replaces + // those subsequent. + for (component in [components reverseObjectEnumerator]) { + if ([component length] == 0) + continue; + NSRange pos = [component rangeOfString:@"="]; + NSString *key; + NSString *val; + if (pos.location == NSNotFound) { + key = [component gtm_stringByUnescapingFromURLArgument]; + val = @""; + } else { + key = [[component substringToIndex:pos.location] + gtm_stringByUnescapingFromURLArgument]; + val = [[component substringFromIndex:pos.location + pos.length] + gtm_stringByUnescapingFromURLArgument]; + } + // gtm_stringByUnescapingFromURLArgument returns nil on invalid UTF8 + // and NSMutableDictionary raises an exception when passed nil values. + if (!key) key = @""; + if (!val) val = @""; + [ret setObject:val forKey:key]; + } + return ret; +} + +- (NSString *)gtm_httpArgumentsString { + NSMutableArray* arguments = [NSMutableArray arrayWithCapacity:[self count]]; + NSString* key; + for (key in self) { + [arguments addObject:[NSString stringWithFormat:@"%@=%@", + [key gtm_stringByEscapingForURLArgument], + [[[self objectForKey:key] description] gtm_stringByEscapingForURLArgument]]]; + } + + return [arguments componentsJoinedByString:@"&"]; +} + +@end + +#pragma clang diagnostic pop diff --git a/Pods/GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.h b/Pods/GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.h new file mode 100644 index 0000000..08fe231 --- /dev/null +++ b/Pods/GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.h @@ -0,0 +1,45 @@ +// +// GTMNSString+URLArguments.h +// +// Copyright 2006-2008 Google Inc. +// +// 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 + +/// Utilities for encoding and decoding URL arguments. +@interface NSString (GTMNSStringURLArgumentsAdditions) + +/// Returns a string that is escaped properly to be a URL argument. +/// +/// This differs from stringByAddingPercentEscapesUsingEncoding: in that it +/// will escape all the reserved characters (per RFC 3986 +/// ) which +/// stringByAddingPercentEscapesUsingEncoding would leave. +/// +/// This will also escape '%', so this should not be used on a string that has +/// already been escaped unless double-escaping is the desired result. +/// +/// NOTE: Apps targeting iOS 8 or OS X 10.10 and later should use +/// NSURLComponents and NSURLQueryItem to create properly-escaped +/// URLs instead of using these category methods. +- (NSString*)gtm_stringByEscapingForURLArgument NS_DEPRECATED(10_0, 10_10, 2_0, 8_0, "Use NSURLComponents."); + +/// Returns the unescaped version of a URL argument +/// +/// This has the same behavior as stringByReplacingPercentEscapesUsingEncoding:, +/// except that it will also convert '+' to space. +- (NSString*)gtm_stringByUnescapingFromURLArgument NS_DEPRECATED(10_0, 10_10, 2_0, 8_0, "Use NSURLComponents."); + +@end diff --git a/Pods/GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.m b/Pods/GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.m new file mode 100644 index 0000000..e785c5e --- /dev/null +++ b/Pods/GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.m @@ -0,0 +1,48 @@ +// +// GTMNSString+URLArguments.m +// +// Copyright 2006-2008 Google Inc. +// +// 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 "GTMNSString+URLArguments.h" + +@implementation NSString (GTMNSStringURLArgumentsAdditions) + +- (NSString *)gtm_stringByEscapingForURLArgument { + // Encode all the reserved characters, per RFC 3986 + // () + CFStringRef escaped = + CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, + (CFStringRef)self, + NULL, + (CFStringRef)@"!*'();:@&=+$,/?%#[]", + kCFStringEncodingUTF8); +#if defined(__has_feature) && __has_feature(objc_arc) + return CFBridgingRelease(escaped); +#else + return [(NSString *)escaped autorelease]; +#endif +} + +- (NSString *)gtm_stringByUnescapingFromURLArgument { + NSMutableString *resultString = [NSMutableString stringWithString:self]; + [resultString replaceOccurrencesOfString:@"+" + withString:@" " + options:NSLiteralSearch + range:NSMakeRange(0, [resultString length])]; + return [resultString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; +} + +@end diff --git a/Pods/GoogleToolboxForMac/GTMDefines.h b/Pods/GoogleToolboxForMac/GTMDefines.h new file mode 100644 index 0000000..68ff8c0 --- /dev/null +++ b/Pods/GoogleToolboxForMac/GTMDefines.h @@ -0,0 +1,375 @@ +// +// GTMDefines.h +// +// Copyright 2008 Google Inc. +// +// 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. +// + +// ============================================================================ + +#include +#include + +#ifdef __OBJC__ +#include +#endif // __OBJC__ + +#if TARGET_OS_IPHONE +#include +#endif // TARGET_OS_IPHONE + +// ---------------------------------------------------------------------------- +// CPP symbols that can be overridden in a prefix to control how the toolbox +// is compiled. +// ---------------------------------------------------------------------------- + + +// By setting the GTM_CONTAINERS_VALIDATION_FAILED_LOG and +// GTM_CONTAINERS_VALIDATION_FAILED_ASSERT macros you can control what happens +// when a validation fails. If you implement your own validators, you may want +// to control their internals using the same macros for consistency. +#ifndef GTM_CONTAINERS_VALIDATION_FAILED_ASSERT + #define GTM_CONTAINERS_VALIDATION_FAILED_ASSERT 0 +#endif + +// Ensure __has_feature and __has_extension are safe to use. +// See http://clang-analyzer.llvm.org/annotations.html +#ifndef __has_feature // Optional. + #define __has_feature(x) 0 // Compatibility with non-clang compilers. +#endif + +#ifndef __has_extension + #define __has_extension __has_feature // Compatibility with pre-3.0 compilers. +#endif + +// Give ourselves a consistent way to do inlines. Apple's macros even use +// a few different actual definitions, so we're based off of the foundation +// one. +#if !defined(GTM_INLINE) + #if (defined (__GNUC__) && (__GNUC__ == 4)) || defined (__clang__) + #define GTM_INLINE static __inline__ __attribute__((always_inline)) + #else + #define GTM_INLINE static __inline__ + #endif +#endif + +// Give ourselves a consistent way of doing externs that links up nicely +// when mixing objc and objc++ +#if !defined (GTM_EXTERN) + #if defined __cplusplus + #define GTM_EXTERN extern "C" + #define GTM_EXTERN_C_BEGIN extern "C" { + #define GTM_EXTERN_C_END } + #else + #define GTM_EXTERN extern + #define GTM_EXTERN_C_BEGIN + #define GTM_EXTERN_C_END + #endif +#endif + +// Give ourselves a consistent way of exporting things if we have visibility +// set to hidden. +#if !defined (GTM_EXPORT) + #define GTM_EXPORT __attribute__((visibility("default"))) +#endif + +// Give ourselves a consistent way of declaring something as unused. This +// doesn't use __unused because that is only supported in gcc 4.2 and greater. +#if !defined (GTM_UNUSED) +#define GTM_UNUSED(x) ((void)(x)) +#endif + +// _GTMDevLog & _GTMDevAssert +// +// _GTMDevLog & _GTMDevAssert are meant to be a very lightweight shell for +// developer level errors. This implementation simply macros to NSLog/NSAssert. +// It is not intended to be a general logging/reporting system. +// +// Please see http://code.google.com/p/google-toolbox-for-mac/wiki/DevLogNAssert +// for a little more background on the usage of these macros. +// +// _GTMDevLog log some error/problem in debug builds +// _GTMDevAssert assert if condition isn't met w/in a method/function +// in all builds. +// +// To replace this system, just provide different macro definitions in your +// prefix header. Remember, any implementation you provide *must* be thread +// safe since this could be called by anything in what ever situtation it has +// been placed in. +// + +// Ignore the "Macro name is a reserved identifier" warning in this section +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wreserved-id-macro" + +// We only define the simple macros if nothing else has defined this. +#ifndef _GTMDevLog + +#ifdef DEBUG + #define _GTMDevLog(...) NSLog(__VA_ARGS__) +#else + #define _GTMDevLog(...) do { } while (0) +#endif + +#endif // _GTMDevLog + +#ifndef _GTMDevAssert +// we directly invoke the NSAssert handler so we can pass on the varargs +// (NSAssert doesn't have a macro we can use that takes varargs) +#if !defined(NS_BLOCK_ASSERTIONS) + #define _GTMDevAssert(condition, ...) \ + do { \ + if (!(condition)) { \ + [[NSAssertionHandler currentHandler] \ + handleFailureInFunction:(NSString *) \ + [NSString stringWithUTF8String:__PRETTY_FUNCTION__] \ + file:(NSString *)[NSString stringWithUTF8String:__FILE__] \ + lineNumber:__LINE__ \ + description:__VA_ARGS__]; \ + } \ + } while(0) +#else // !defined(NS_BLOCK_ASSERTIONS) + #define _GTMDevAssert(condition, ...) do { } while (0) +#endif // !defined(NS_BLOCK_ASSERTIONS) + +#endif // _GTMDevAssert + +// _GTMCompileAssert +// +// Note: Software for current compilers should just use _Static_assert directly +// instead of this macro. +// +// _GTMCompileAssert is an assert that is meant to fire at compile time if you +// want to check things at compile instead of runtime. For example if you +// want to check that a wchar is 4 bytes instead of 2 you would use +// _GTMCompileAssert(sizeof(wchar_t) == 4, wchar_t_is_4_bytes_on_OS_X) +// Note that the second "arg" is not in quotes, and must be a valid processor +// symbol in it's own right (no spaces, punctuation etc). + +// Wrapping this in an #ifndef allows external groups to define their own +// compile time assert scheme. +#ifndef _GTMCompileAssert + #if __has_feature(c_static_assert) || __has_extension(c_static_assert) + #define _GTMCompileAssert(test, msg) _Static_assert((test), #msg) + #else + // Pre-Xcode 7 support. + // + // We got this technique from here: + // http://unixjunkie.blogspot.com/2007/10/better-compile-time-asserts_29.html + #define _GTMCompileAssertSymbolInner(line, msg) _GTMCOMPILEASSERT ## line ## __ ## msg + #define _GTMCompileAssertSymbol(line, msg) _GTMCompileAssertSymbolInner(line, msg) + #define _GTMCompileAssert(test, msg) \ + typedef char _GTMCompileAssertSymbol(__LINE__, msg) [ ((test) ? 1 : -1) ] + #endif // __has_feature(c_static_assert) || __has_extension(c_static_assert) +#endif // _GTMCompileAssert + +#pragma clang diagnostic pop + +// ---------------------------------------------------------------------------- +// CPP symbols defined based on the project settings so the GTM code has +// simple things to test against w/o scattering the knowledge of project +// setting through all the code. +// ---------------------------------------------------------------------------- + +// Provide a single constant CPP symbol that all of GTM uses for ifdefing +// iPhone code. +#if TARGET_OS_IPHONE // iPhone SDK + // For iPhone specific stuff + #define GTM_IPHONE_SDK 1 + #if TARGET_IPHONE_SIMULATOR + #define GTM_IPHONE_DEVICE 0 + #define GTM_IPHONE_SIMULATOR 1 + #else + #define GTM_IPHONE_DEVICE 1 + #define GTM_IPHONE_SIMULATOR 0 + #endif // TARGET_IPHONE_SIMULATOR + // By default, GTM has provided it's own unittesting support, define this + // to use the support provided by Xcode, especially for the Xcode4 support + // for unittesting. + #ifndef GTM_USING_XCTEST + #define GTM_USING_XCTEST 0 + #endif + #define GTM_MACOS_SDK 0 +#else + // For MacOS specific stuff + #define GTM_MACOS_SDK 1 + #define GTM_IPHONE_SDK 0 + #define GTM_IPHONE_SIMULATOR 0 + #define GTM_IPHONE_DEVICE 0 + #ifndef GTM_USING_XCTEST + #define GTM_USING_XCTEST 0 + #endif +#endif + +// Some of our own availability macros +#if GTM_MACOS_SDK +#define GTM_AVAILABLE_ONLY_ON_IPHONE UNAVAILABLE_ATTRIBUTE +#define GTM_AVAILABLE_ONLY_ON_MACOS +#else +#define GTM_AVAILABLE_ONLY_ON_IPHONE +#define GTM_AVAILABLE_ONLY_ON_MACOS UNAVAILABLE_ATTRIBUTE +#endif + +// GC was dropped by Apple, define the old constant incase anyone still keys +// off of it. +#ifndef GTM_SUPPORT_GC + #define GTM_SUPPORT_GC 0 +#endif + +// Some support for advanced clang static analysis functionality +#ifndef NS_RETURNS_RETAINED + #if __has_feature(attribute_ns_returns_retained) + #define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) + #else + #define NS_RETURNS_RETAINED + #endif +#endif + +#ifndef NS_RETURNS_NOT_RETAINED + #if __has_feature(attribute_ns_returns_not_retained) + #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) + #else + #define NS_RETURNS_NOT_RETAINED + #endif +#endif + +#ifndef CF_RETURNS_RETAINED + #if __has_feature(attribute_cf_returns_retained) + #define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) + #else + #define CF_RETURNS_RETAINED + #endif +#endif + +#ifndef CF_RETURNS_NOT_RETAINED + #if __has_feature(attribute_cf_returns_not_retained) + #define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) + #else + #define CF_RETURNS_NOT_RETAINED + #endif +#endif + +#ifndef NS_CONSUMED + #if __has_feature(attribute_ns_consumed) + #define NS_CONSUMED __attribute__((ns_consumed)) + #else + #define NS_CONSUMED + #endif +#endif + +#ifndef CF_CONSUMED + #if __has_feature(attribute_cf_consumed) + #define CF_CONSUMED __attribute__((cf_consumed)) + #else + #define CF_CONSUMED + #endif +#endif + +#ifndef NS_CONSUMES_SELF + #if __has_feature(attribute_ns_consumes_self) + #define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) + #else + #define NS_CONSUMES_SELF + #endif +#endif + +#ifndef GTM_NONNULL + #if defined(__has_attribute) + #if __has_attribute(nonnull) + #define GTM_NONNULL(x) __attribute__((nonnull x)) + #else + #define GTM_NONNULL(x) + #endif + #else + #define GTM_NONNULL(x) + #endif +#endif + +// Invalidates the initializer from which it's called. +#ifndef GTMInvalidateInitializer + #if __has_feature(objc_arc) + #define GTMInvalidateInitializer() \ + do { \ + [self class]; /* Avoid warning of dead store to |self|. */ \ + _GTMDevAssert(NO, @"Invalid initializer."); \ + return nil; \ + } while (0) + #else + #define GTMInvalidateInitializer() \ + do { \ + [self release]; \ + _GTMDevAssert(NO, @"Invalid initializer."); \ + return nil; \ + } while (0) + #endif +#endif + +#ifndef GTMCFAutorelease + // GTMCFAutorelease returns an id. In contrast, Apple's CFAutorelease returns + // a CFTypeRef. + #if __has_feature(objc_arc) + #define GTMCFAutorelease(x) CFBridgingRelease(x) + #else + #define GTMCFAutorelease(x) ([(id)x autorelease]) + #endif +#endif + +#ifdef __OBJC__ + + +// Macro to allow you to create NSStrings out of other macros. +// #define FOO foo +// NSString *fooString = GTM_NSSTRINGIFY(FOO); +#if !defined (GTM_NSSTRINGIFY) + #define GTM_NSSTRINGIFY_INNER(x) @#x + #define GTM_NSSTRINGIFY(x) GTM_NSSTRINGIFY_INNER(x) +#endif + +// ============================================================================ + +// GTM_SEL_STRING is for specifying selector (usually property) names to KVC +// or KVO methods. +// In debug it will generate warnings for undeclared selectors if +// -Wunknown-selector is turned on. +// In release it will have no runtime overhead. +#ifndef GTM_SEL_STRING + #ifdef DEBUG + #define GTM_SEL_STRING(selName) NSStringFromSelector(@selector(selName)) + #else + #define GTM_SEL_STRING(selName) @#selName + #endif // DEBUG +#endif // GTM_SEL_STRING + +#ifndef GTM_WEAK +#if __has_feature(objc_arc_weak) + // With ARC enabled, __weak means a reference that isn't implicitly + // retained. __weak objects are accessed through runtime functions, so + // they are zeroed out, but this requires OS X 10.7+. + // At clang r251041+, ARC-style zeroing weak references even work in + // non-ARC mode. + #define GTM_WEAK __weak + #elif __has_feature(objc_arc) + // ARC, but targeting 10.6 or older, where zeroing weak references don't + // exist. + #define GTM_WEAK __unsafe_unretained + #else + // With manual reference counting, __weak used to be silently ignored. + // clang r251041 gives it the ARC semantics instead. This means they + // now require a deployment target of 10.7, while some clients of GTM + // still target 10.6. In these cases, expand to __unsafe_unretained instead + #define GTM_WEAK + #endif +#endif + +#endif // __OBJC__ diff --git a/Pods/GoogleToolboxForMac/LICENSE b/Pods/GoogleToolboxForMac/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/Pods/GoogleToolboxForMac/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/Pods/GoogleToolboxForMac/README.md b/Pods/GoogleToolboxForMac/README.md new file mode 100644 index 0000000..710560a --- /dev/null +++ b/Pods/GoogleToolboxForMac/README.md @@ -0,0 +1,15 @@ +# GTM: Google Toolbox for Mac # + +**Project site**
      +**Discussion group** + +# Google Toolbox for Mac # + +A collection of source from different Google projects that may be of use to +developers working other iOS or OS X projects. + +If you find a problem/bug or want a new feature to be included in the Google +Toolbox for Mac, please join the +[discussion group](http://groups.google.com/group/google-toolbox-for-mac) +or submit an +[issue](https://github.com/google/google-toolbox-for-mac/issues). diff --git a/Pods/Headers/Private/DSDeltaCore/DSDeltaCore/Types/DSTypes.h b/Pods/Headers/Private/DSDeltaCore/DSDeltaCore/Types/DSTypes.h new file mode 120000 index 0000000..1e41193 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/DSDeltaCore/Types/DSTypes.h @@ -0,0 +1 @@ +../../../../../../Cores/DSDeltaCore/DSDeltaCore/Types/DSTypes.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/Database.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/Database.h new file mode 120000 index 0000000..40dc7aa --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/Database.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/Database.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/FIFO.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/FIFO.h new file mode 120000 index 0000000..c1a207d --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/FIFO.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/FIFO.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/GPU.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/GPU.h new file mode 120000 index 0000000..9ba002a --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/GPU.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/GPU.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/MMU.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/MMU.h new file mode 120000 index 0000000..f0a0d5d --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/MMU.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/MMU.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/MMU_timing.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/MMU_timing.h new file mode 120000 index 0000000..642c8b9 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/MMU_timing.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/MMU_timing.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/NDSSystem.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/NDSSystem.h new file mode 120000 index 0000000..df3b70a --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/NDSSystem.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/NDSSystem.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/OGLRender.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/OGLRender.h new file mode 120000 index 0000000..b476b5f --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/OGLRender.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/OGLRender.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/OGLRender_3_2.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/OGLRender_3_2.h new file mode 120000 index 0000000..f475941 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/OGLRender_3_2.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/OGLRender_3_2.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/PACKED.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/PACKED.h new file mode 120000 index 0000000..4a391e5 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/PACKED.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/PACKED.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/PACKED_END.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/PACKED_END.h new file mode 120000 index 0000000..aae7d33 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/PACKED_END.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/PACKED_END.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/ROMReader.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/ROMReader.h new file mode 120000 index 0000000..9dff8c0 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/ROMReader.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/ROMReader.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/SPU.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/SPU.h new file mode 120000 index 0000000..a1a15b3 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/SPU.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/SPU.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/arm_jit.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/arm_jit.h new file mode 120000 index 0000000..c592aef --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/arm_jit.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/arm_jit.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/armcpu.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/armcpu.h new file mode 120000 index 0000000..3b5df41 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/armcpu.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/armcpu.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/bios.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/bios.h new file mode 120000 index 0000000..0169195 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/bios.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/bios.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/cheatSystem.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/cheatSystem.h new file mode 120000 index 0000000..23f989b --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/cheatSystem.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/cheatSystem.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/commandline.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/commandline.h new file mode 120000 index 0000000..47fe64a --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/commandline.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/commandline.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/common.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/common.h new file mode 120000 index 0000000..10d054f --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/common.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/common.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/cp15.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/cp15.h new file mode 120000 index 0000000..403fb88 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/cp15.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/cp15.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/debug.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/debug.h new file mode 120000 index 0000000..4a50ad3 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/debug.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/debug.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/driver.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/driver.h new file mode 120000 index 0000000..b02a7e6 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/driver.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/driver.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/emufile.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/emufile.h new file mode 120000 index 0000000..3d9f482 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/emufile.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/emufile.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/encrypt.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/encrypt.h new file mode 120000 index 0000000..994d81b --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/encrypt.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/encrypt.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/firmware.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/firmware.h new file mode 120000 index 0000000..4ddfe30 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/firmware.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/firmware.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/gdbstub.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/gdbstub.h new file mode 120000 index 0000000..2863204 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/gdbstub.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/gdbstub.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/gfx3d.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/gfx3d.h new file mode 120000 index 0000000..0e7ab53 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/gfx3d.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/gfx3d.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/instruction_attributes.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/instruction_attributes.h new file mode 120000 index 0000000..99eaf93 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/instruction_attributes.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/instruction_attributes.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/instructions.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/instructions.h new file mode 120000 index 0000000..8ab6675 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/instructions.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/instructions.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/boolean.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/boolean.h new file mode 120000 index 0000000..833c904 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/boolean.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/boolean.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/clamping.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/clamping.h new file mode 120000 index 0000000..64475a0 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/clamping.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/clamping.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/filters.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/filters.h new file mode 120000 index 0000000..c7d8a7e --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/filters.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/filters.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libco.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libco.h new file mode 120000 index 0000000..f2d6a7f --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libco.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/libco.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro.h new file mode 120000 index 0000000..68deba3 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro_vulkan.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro_vulkan.h new file mode 120000 index 0000000..b37a21a --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro_vulkan.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/libretro_vulkan.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/complex.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/complex.h new file mode 120000 index 0000000..5d501d8 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/complex.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/complex.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/fxp.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/fxp.h new file mode 120000 index 0000000..cc658f7 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/fxp.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/math/fxp.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/memalign.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/memalign.h new file mode 120000 index 0000000..b0d8f74 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/memalign.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/memalign.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/memmap.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/memmap.h new file mode 120000 index 0000000..4326275 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/memmap.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/memmap.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_assert.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_assert.h new file mode 120000 index 0000000..ae0ec94 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_assert.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_assert.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common.h new file mode 120000 index 0000000..3f8df4c --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common_api.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common_api.h new file mode 120000 index 0000000..b530d7c --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common_api.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_common_api.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_dirent.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_dirent.h new file mode 120000 index 0000000..bcec727 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_dirent.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_dirent.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_endianness.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_endianness.h new file mode 120000 index 0000000..a1c4e8c --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_endianness.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_endianness.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_environment.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_environment.h new file mode 120000 index 0000000..00b1e01 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_environment.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_environment.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_inline.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_inline.h new file mode 120000 index 0000000..c28e8d5 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_inline.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_inline.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_miscellaneous.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_miscellaneous.h new file mode 120000 index 0000000..b320559 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_miscellaneous.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_miscellaneous.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_stat.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_stat.h new file mode 120000 index 0000000..71e1f42 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_stat.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/retro_stat.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/rhash.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/rhash.h new file mode 120000 index 0000000..eb7598b --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include/rhash.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/libretro-common/include/rhash.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/lua-engine.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/lua-engine.h new file mode 120000 index 0000000..3952850 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/lua-engine.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/lua-engine.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/matrix.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/matrix.h new file mode 120000 index 0000000..6a5db56 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/matrix.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/matrix.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mc.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mc.h new file mode 120000 index 0000000..0902a80 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mc.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/mc.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mem.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mem.h new file mode 120000 index 0000000..a516a3f --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mem.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/mem.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SndOut.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SndOut.h new file mode 120000 index 0000000..59bd921 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SndOut.h @@ -0,0 +1 @@ +../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SndOut.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/AAFilter.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/AAFilter.h new file mode 120000 index 0000000..1f714bc --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/AAFilter.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/AAFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/BPMDetect.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/BPMDetect.h new file mode 120000 index 0000000..4bb3ca6 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/BPMDetect.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/BPMDetect.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSampleBuffer.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSampleBuffer.h new file mode 120000 index 0000000..a116d77 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSampleBuffer.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSampleBuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSamplePipe.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSamplePipe.h new file mode 120000 index 0000000..8e1361a --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSamplePipe.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIFOSamplePipe.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIRFilter.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIRFilter.h new file mode 120000 index 0000000..d6361f5 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIRFilter.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/FIRFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/RateTransposer.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/RateTransposer.h new file mode 120000 index 0000000..cfcc427 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/RateTransposer.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/RateTransposer.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/STTypes.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/STTypes.h new file mode 120000 index 0000000..37585e7 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/STTypes.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/STTypes.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/SoundTouch.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/SoundTouch.h new file mode 120000 index 0000000..d5d953e --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/SoundTouch.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/SoundTouch.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/TDStretch.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/TDStretch.h new file mode 120000 index 0000000..366f018 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/TDStretch.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/TDStretch.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/WavFile.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/WavFile.h new file mode 120000 index 0000000..3e35cf6 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/WavFile.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/WavFile.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/cpu_detect.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/cpu_detect.h new file mode 120000 index 0000000..18fd162 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/cpu_detect.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/SoundTouch/cpu_detect.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/metaspu.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/metaspu.h new file mode 120000 index 0000000..e08f158 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/metaspu.h @@ -0,0 +1 @@ +../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/metaspu.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/win32/Dialogs.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/win32/Dialogs.h new file mode 120000 index 0000000..5633e03 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/metaspu/win32/Dialogs.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/metaspu/win32/Dialogs.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mic.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mic.h new file mode 120000 index 0000000..feb76f2 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/mic.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/mic.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/movie.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/movie.h new file mode 120000 index 0000000..87befc0 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/movie.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/movie.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/path.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/path.h new file mode 120000 index 0000000..e20ad1d --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/path.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/path.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/rasterize.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/rasterize.h new file mode 120000 index 0000000..2648ac4 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/rasterize.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/rasterize.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/readwrite.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/readwrite.h new file mode 120000 index 0000000..daee9ae --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/readwrite.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/readwrite.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/registers.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/registers.h new file mode 120000 index 0000000..c14b5d8 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/registers.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/registers.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/render3D.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/render3D.h new file mode 120000 index 0000000..41e6d49 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/render3D.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/render3D.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/rtc.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/rtc.h new file mode 120000 index 0000000..46d31bb --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/rtc.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/rtc.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/saves.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/saves.h new file mode 120000 index 0000000..93017a9 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/saves.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/saves.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/scmrev.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/scmrev.h new file mode 120000 index 0000000..411f585 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/scmrev.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/scmrev.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/slot1.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/slot1.h new file mode 120000 index 0000000..574ea8e --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/slot1.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/slot1.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/slot2.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/slot2.h new file mode 120000 index 0000000..7f200b1 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/slot2.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/slot2.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/texcache.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/texcache.h new file mode 120000 index 0000000..3de8725 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/texcache.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/texcache.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/types.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/types.h new file mode 120000 index 0000000..7131ec1 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/types.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/types.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/version.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/version.h new file mode 120000 index 0000000..d119e6e --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/version.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/version.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/wifi.h b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/wifi.h new file mode 120000 index 0000000..64ea60b --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/desmume/desmume/src/wifi.h @@ -0,0 +1 @@ +../../../../../../../Cores/DSDeltaCore/desmume/desmume/src/wifi.h \ No newline at end of file diff --git a/Pods/Headers/Private/DSDeltaCore/libDeSmuME/pcap.h b/Pods/Headers/Private/DSDeltaCore/libDeSmuME/pcap.h new file mode 120000 index 0000000..9c31d32 --- /dev/null +++ b/Pods/Headers/Private/DSDeltaCore/libDeSmuME/pcap.h @@ -0,0 +1 @@ +../../../../../Cores/DSDeltaCore/libDeSmuME/pcap.h \ No newline at end of file diff --git a/Pods/Headers/Private/DeltaCore/DeltaCore.h b/Pods/Headers/Private/DeltaCore/DeltaCore.h new file mode 120000 index 0000000..3db3017 --- /dev/null +++ b/Pods/Headers/Private/DeltaCore/DeltaCore.h @@ -0,0 +1 @@ +../../../../Cores/DeltaCore/DeltaCore/DeltaCore.h \ No newline at end of file diff --git a/Pods/Headers/Private/DeltaCore/DeltaTypes.h b/Pods/Headers/Private/DeltaCore/DeltaTypes.h new file mode 120000 index 0000000..e1aa22f --- /dev/null +++ b/Pods/Headers/Private/DeltaCore/DeltaTypes.h @@ -0,0 +1 @@ +../../../../Cores/DeltaCore/DeltaCore/DeltaTypes.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h b/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h new file mode 120000 index 0000000..8d4c629 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Bridge/GBASoundDriver.h b/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Bridge/GBASoundDriver.h new file mode 120000 index 0000000..0216d2a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Bridge/GBASoundDriver.h @@ -0,0 +1 @@ +../../../../../../Cores/GBADeltaCore/GBADeltaCore/Bridge/GBASoundDriver.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/GBADeltaCore.h b/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/GBADeltaCore.h new file mode 120000 index 0000000..a9dfee2 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/GBADeltaCore.h @@ -0,0 +1 @@ +../../../../../Cores/GBADeltaCore/GBADeltaCore/GBADeltaCore.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Types/GBATypes.h b/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Types/GBATypes.h new file mode 120000 index 0000000..02bec4b --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/GBADeltaCore/Types/GBATypes.h @@ -0,0 +1 @@ +../../../../../../Cores/GBADeltaCore/GBADeltaCore/Types/GBATypes.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio.hpp new file mode 120000 index 0000000..1b9d46e --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/AlResource.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/AlResource.hpp new file mode 120000 index 0000000..523a751 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/AlResource.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/AlResource.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Export.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Export.hpp new file mode 120000 index 0000000..d1f28c9 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Export.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/Export.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/InputSoundFile.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/InputSoundFile.hpp new file mode 120000 index 0000000..ce79dbd --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/InputSoundFile.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/InputSoundFile.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Listener.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Listener.hpp new file mode 120000 index 0000000..37496e0 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Listener.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/Listener.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Music.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Music.hpp new file mode 120000 index 0000000..b6ade58 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Music.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/Music.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/OutputSoundFile.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/OutputSoundFile.hpp new file mode 120000 index 0000000..773abce --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/OutputSoundFile.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/OutputSoundFile.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Sound.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Sound.hpp new file mode 120000 index 0000000..31a8718 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/Sound.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/Sound.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundBuffer.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundBuffer.hpp new file mode 120000 index 0000000..c379445 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundBuffer.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/SoundBuffer.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundBufferRecorder.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundBufferRecorder.hpp new file mode 120000 index 0000000..311511c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundBufferRecorder.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/SoundBufferRecorder.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.hpp new file mode 120000 index 0000000..ce0e303 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.inl b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.inl new file mode 120000 index 0000000..4b8e5a5 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.inl @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/SoundFileFactory.inl \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileReader.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileReader.hpp new file mode 120000 index 0000000..658cca3 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileReader.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/SoundFileReader.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileWriter.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileWriter.hpp new file mode 120000 index 0000000..9b8ba70 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundFileWriter.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/SoundFileWriter.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundRecorder.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundRecorder.hpp new file mode 120000 index 0000000..a201fb1 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundRecorder.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/SoundRecorder.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundSource.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundSource.hpp new file mode 120000 index 0000000..de69e37 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundSource.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/SoundSource.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundStream.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundStream.hpp new file mode 120000 index 0000000..9d07819 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Audio/SoundStream.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Audio/SoundStream.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Config.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Config.hpp new file mode 120000 index 0000000..33c196b --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Config.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Config.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics.hpp new file mode 120000 index 0000000..f309e6c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/BlendMode.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/BlendMode.hpp new file mode 120000 index 0000000..0e55736 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/BlendMode.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/BlendMode.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/CircleShape.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/CircleShape.hpp new file mode 120000 index 0000000..016bf89 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/CircleShape.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/CircleShape.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Color.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Color.hpp new file mode 120000 index 0000000..53e2529 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Color.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Color.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/ConvexShape.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/ConvexShape.hpp new file mode 120000 index 0000000..14fc539 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/ConvexShape.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/ConvexShape.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Drawable.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Drawable.hpp new file mode 120000 index 0000000..08c4a42 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Drawable.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Drawable.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Export.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Export.hpp new file mode 120000 index 0000000..61d7cc5 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Export.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Export.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Font.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Font.hpp new file mode 120000 index 0000000..e193d5e --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Font.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Font.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.hpp new file mode 120000 index 0000000..088854f --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.inl b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.inl new file mode 120000 index 0000000..7fae97b --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.inl @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Glsl.inl \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glyph.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glyph.hpp new file mode 120000 index 0000000..c22851a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Glyph.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Glyph.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Image.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Image.hpp new file mode 120000 index 0000000..84e11a8 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Image.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Image.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/PrimitiveType.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/PrimitiveType.hpp new file mode 120000 index 0000000..28762fc --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/PrimitiveType.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/PrimitiveType.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Rect.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Rect.hpp new file mode 120000 index 0000000..04047dd --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Rect.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Rect.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Rect.inl b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Rect.inl new file mode 120000 index 0000000..4f75e29 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Rect.inl @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Rect.inl \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RectangleShape.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RectangleShape.hpp new file mode 120000 index 0000000..a63e697 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RectangleShape.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/RectangleShape.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderStates.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderStates.hpp new file mode 120000 index 0000000..1178fce --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderStates.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/RenderStates.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderTarget.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderTarget.hpp new file mode 120000 index 0000000..6519c58 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderTarget.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/RenderTarget.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderTexture.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderTexture.hpp new file mode 120000 index 0000000..7ae3c39 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderTexture.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/RenderTexture.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderWindow.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderWindow.hpp new file mode 120000 index 0000000..6b38b82 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/RenderWindow.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/RenderWindow.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Shader.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Shader.hpp new file mode 120000 index 0000000..7d36f2c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Shader.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Shader.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Shape.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Shape.hpp new file mode 120000 index 0000000..d677cbe --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Shape.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Shape.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Sprite.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Sprite.hpp new file mode 120000 index 0000000..9549fff --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Sprite.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Sprite.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Text.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Text.hpp new file mode 120000 index 0000000..2a1822c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Text.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Text.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Texture.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Texture.hpp new file mode 120000 index 0000000..547bf3d --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Texture.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Texture.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Transform.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Transform.hpp new file mode 120000 index 0000000..6094158 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Transform.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Transform.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Transformable.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Transformable.hpp new file mode 120000 index 0000000..f9dd9b8 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Transformable.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Transformable.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Vertex.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Vertex.hpp new file mode 120000 index 0000000..36023e5 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/Vertex.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/Vertex.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/VertexArray.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/VertexArray.hpp new file mode 120000 index 0000000..a90da60 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/VertexArray.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/VertexArray.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/View.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/View.hpp new file mode 120000 index 0000000..e9b6c1a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Graphics/View.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Graphics/View.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Main.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Main.hpp new file mode 120000 index 0000000..1b83ae8 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Main.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Main.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network.hpp new file mode 120000 index 0000000..dfe2783 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Export.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Export.hpp new file mode 120000 index 0000000..6275321 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Export.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/Export.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Ftp.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Ftp.hpp new file mode 120000 index 0000000..a3b36b9 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Ftp.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/Ftp.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Http.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Http.hpp new file mode 120000 index 0000000..bff047d --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Http.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/Http.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/IpAddress.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/IpAddress.hpp new file mode 120000 index 0000000..7fa5509 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/IpAddress.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/IpAddress.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Packet.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Packet.hpp new file mode 120000 index 0000000..484cea1 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Packet.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/Packet.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Socket.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Socket.hpp new file mode 120000 index 0000000..c7b1e01 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/Socket.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/Socket.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/SocketHandle.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/SocketHandle.hpp new file mode 120000 index 0000000..4515994 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/SocketHandle.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/SocketHandle.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/SocketSelector.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/SocketSelector.hpp new file mode 120000 index 0000000..442d563 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/SocketSelector.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/SocketSelector.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/TcpListener.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/TcpListener.hpp new file mode 120000 index 0000000..f09f8f5 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/TcpListener.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/TcpListener.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/TcpSocket.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/TcpSocket.hpp new file mode 120000 index 0000000..9cc1876 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/TcpSocket.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/TcpSocket.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/UdpSocket.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/UdpSocket.hpp new file mode 120000 index 0000000..722cf95 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Network/UdpSocket.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Network/UdpSocket.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/OpenGL.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/OpenGL.hpp new file mode 120000 index 0000000..731ccc1 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/OpenGL.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/OpenGL.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System.hpp new file mode 120000 index 0000000..76d1194 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Clock.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Clock.hpp new file mode 120000 index 0000000..3d41e6a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Clock.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Clock.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Err.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Err.hpp new file mode 120000 index 0000000..f317d75 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Err.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Err.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Export.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Export.hpp new file mode 120000 index 0000000..c420fae --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Export.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Export.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/FileInputStream.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/FileInputStream.hpp new file mode 120000 index 0000000..b2004d8 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/FileInputStream.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/FileInputStream.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/InputStream.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/InputStream.hpp new file mode 120000 index 0000000..e12071e --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/InputStream.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/InputStream.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Lock.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Lock.hpp new file mode 120000 index 0000000..ec44168 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Lock.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Lock.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/MemoryInputStream.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/MemoryInputStream.hpp new file mode 120000 index 0000000..b375f8f --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/MemoryInputStream.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/MemoryInputStream.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Mutex.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Mutex.hpp new file mode 120000 index 0000000..429c405 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Mutex.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Mutex.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/NativeActivity.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/NativeActivity.hpp new file mode 120000 index 0000000..b993b5c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/NativeActivity.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/NativeActivity.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/NonCopyable.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/NonCopyable.hpp new file mode 120000 index 0000000..69d8bb0 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/NonCopyable.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/NonCopyable.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Sleep.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Sleep.hpp new file mode 120000 index 0000000..6a4703e --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Sleep.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Sleep.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/String.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/String.hpp new file mode 120000 index 0000000..2c0e18a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/String.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/String.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/String.inl b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/String.inl new file mode 120000 index 0000000..7f28dfc --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/String.inl @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/String.inl \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Thread.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Thread.hpp new file mode 120000 index 0000000..e8cea5e --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Thread.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Thread.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Thread.inl b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Thread.inl new file mode 120000 index 0000000..db70c64 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Thread.inl @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Thread.inl \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocal.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocal.hpp new file mode 120000 index 0000000..68fd8c8 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocal.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/ThreadLocal.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.hpp new file mode 120000 index 0000000..d426fec --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.inl b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.inl new file mode 120000 index 0000000..405a62f --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.inl @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/ThreadLocalPtr.inl \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Time.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Time.hpp new file mode 120000 index 0000000..8779c78 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Time.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Time.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Utf.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Utf.hpp new file mode 120000 index 0000000..b95657b --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Utf.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Utf.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Utf.inl b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Utf.inl new file mode 120000 index 0000000..aed82fd --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Utf.inl @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Utf.inl \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector2.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector2.hpp new file mode 120000 index 0000000..e0d297c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector2.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Vector2.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector2.inl b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector2.inl new file mode 120000 index 0000000..c6b43a1 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector2.inl @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Vector2.inl \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector3.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector3.hpp new file mode 120000 index 0000000..bbd8998 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector3.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Vector3.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector3.inl b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector3.inl new file mode 120000 index 0000000..8ef0dd4 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/System/Vector3.inl @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/System/Vector3.inl \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window.hpp new file mode 120000 index 0000000..58d81dc --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Context.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Context.hpp new file mode 120000 index 0000000..4ba44b5 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Context.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/Context.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/ContextSettings.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/ContextSettings.hpp new file mode 120000 index 0000000..dc2c2b6 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/ContextSettings.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/ContextSettings.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Event.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Event.hpp new file mode 120000 index 0000000..5bc3f53 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Event.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/Event.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Export.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Export.hpp new file mode 120000 index 0000000..15f3026 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Export.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/Export.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/GlResource.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/GlResource.hpp new file mode 120000 index 0000000..e7c2ead --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/GlResource.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/GlResource.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Joystick.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Joystick.hpp new file mode 120000 index 0000000..456335b --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Joystick.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/Joystick.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Keyboard.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Keyboard.hpp new file mode 120000 index 0000000..c3cc738 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Keyboard.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/Keyboard.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Mouse.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Mouse.hpp new file mode 120000 index 0000000..59424f4 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Mouse.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/Mouse.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Sensor.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Sensor.hpp new file mode 120000 index 0000000..17c56ea --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Sensor.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/Sensor.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Touch.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Touch.hpp new file mode 120000 index 0000000..1e1633d --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Touch.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/Touch.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/VideoMode.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/VideoMode.hpp new file mode 120000 index 0000000..b96150c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/VideoMode.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/VideoMode.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Window.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Window.hpp new file mode 120000 index 0000000..a2af891 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/Window.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/Window.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/WindowHandle.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/WindowHandle.hpp new file mode 120000 index 0000000..191d724 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/WindowHandle.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/WindowHandle.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/WindowStyle.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/WindowStyle.hpp new file mode 120000 index 0000000..5483c6a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/include/SFML/Window/WindowStyle.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/GBADeltaCore/SFML/include/SFML/Window/WindowStyle.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/SFML/src/SFML/System/Unix/ThreadImpl.hpp b/Pods/Headers/Private/GBADeltaCore/SFML/src/SFML/System/Unix/ThreadImpl.hpp new file mode 120000 index 0000000..e4fb99c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/SFML/src/SFML/System/Unix/ThreadImpl.hpp @@ -0,0 +1 @@ +../../../../../../../../../Cores/GBADeltaCore/SFML/src/SFML/System/Unix/ThreadImpl.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/AutoBuild.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/AutoBuild.h new file mode 120000 index 0000000..436b69a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/AutoBuild.h @@ -0,0 +1 @@ +../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/AutoBuild.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/NLS.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/NLS.h new file mode 120000 index 0000000..db89a31 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/NLS.h @@ -0,0 +1 @@ +../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/NLS.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/System.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/System.h new file mode 120000 index 0000000..bf45065 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/System.h @@ -0,0 +1 @@ +../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/System.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/Util.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/Util.h new file mode 120000 index 0000000..c830367 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/Util.h @@ -0,0 +1 @@ +../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/Util.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ConfigManager.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ConfigManager.h new file mode 120000 index 0000000..bd1bb0c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ConfigManager.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/ConfigManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Patch.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Patch.h new file mode 120000 index 0000000..0d674a2 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Patch.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/Patch.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Port.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Port.h new file mode 120000 index 0000000..20cb119 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Port.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/Port.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/SoundDriver.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/SoundDriver.h new file mode 120000 index 0000000..d22c898 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/SoundDriver.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/SoundDriver.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/SoundSDL.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/SoundSDL.h new file mode 120000 index 0000000..37ee04a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/SoundSDL.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/SoundSDL.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Types.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Types.h new file mode 120000 index 0000000..932f3f5 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/Types.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/Types.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/array.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/array.h new file mode 120000 index 0000000..2333908 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/array.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/array.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/cstdint.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/cstdint.h new file mode 120000 index 0000000..63b5e24 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/cstdint.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/cstdint.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/dictionary.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/dictionary.h new file mode 120000 index 0000000..d1c4015 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/dictionary.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/dictionary.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ffmpeg.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ffmpeg.h new file mode 120000 index 0000000..aab4ed6 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ffmpeg.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/ffmpeg.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/iniparser.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/iniparser.h new file mode 120000 index 0000000..7bb4deb --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/iniparser.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/iniparser.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/memgzio.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/memgzio.h new file mode 120000 index 0000000..bdeeb75 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/memgzio.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/memgzio.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ringbuffer.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ringbuffer.h new file mode 120000 index 0000000..f8f0bee --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/common/ringbuffer.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/common/ringbuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/BreakpointStructures.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/BreakpointStructures.h new file mode 120000 index 0000000..ff607cc --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/BreakpointStructures.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/BreakpointStructures.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/CheatSearch.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/CheatSearch.h new file mode 120000 index 0000000..e7a510b --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/CheatSearch.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/CheatSearch.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Cheats.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Cheats.h new file mode 120000 index 0000000..b9f27f3 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Cheats.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/Cheats.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/EEprom.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/EEprom.h new file mode 120000 index 0000000..cb5b2a3 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/EEprom.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/EEprom.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Flash.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Flash.h new file mode 120000 index 0000000..4a4518c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Flash.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/Flash.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBA.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBA.h new file mode 120000 index 0000000..6cb09e7 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBA.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/GBA.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAGfx.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAGfx.h new file mode 120000 index 0000000..ef2ddbb --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAGfx.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/GBAGfx.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBALink.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBALink.h new file mode 120000 index 0000000..0fcd362 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBALink.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/GBALink.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBASockClient.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBASockClient.h new file mode 120000 index 0000000..2359b04 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBASockClient.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/GBASockClient.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAcpu.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAcpu.h new file mode 120000 index 0000000..fb18df2 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAcpu.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/GBAcpu.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAinline.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAinline.h new file mode 120000 index 0000000..c289166 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/GBAinline.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/GBAinline.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Globals.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Globals.h new file mode 120000 index 0000000..bf0ea3b --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Globals.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/Globals.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/RTC.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/RTC.h new file mode 120000 index 0000000..4792c1a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/RTC.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/RTC.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Sound.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Sound.h new file mode 120000 index 0000000..3f66395 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Sound.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/Sound.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Sram.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Sram.h new file mode 120000 index 0000000..28f9427 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/Sram.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/Sram.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/agbprint.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/agbprint.h new file mode 120000 index 0000000..4c73c4a --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/agbprint.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/agbprint.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/armdis.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/armdis.h new file mode 120000 index 0000000..d7571f7 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/armdis.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/armdis.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/bios.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/bios.h new file mode 120000 index 0000000..503fa4f --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/bios.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/bios.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/elf.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/elf.h new file mode 120000 index 0000000..7586ea2 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/elf.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/elf.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/ereader.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/ereader.h new file mode 120000 index 0000000..9dd9259 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/ereader.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/ereader.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/gbafilter.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/gbafilter.h new file mode 120000 index 0000000..8940f6c --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/gbafilter.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/gbafilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/remote.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/remote.h new file mode 120000 index 0000000..82b00d8 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/gba/remote.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/gba/remote.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/debugger.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/debugger.h new file mode 120000 index 0000000..567f009 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/debugger.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/sdl/debugger.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/expr.cpp.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/expr.cpp.h new file mode 120000 index 0000000..97d4c43 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/expr.cpp.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/sdl/expr.cpp.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/exprNode.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/exprNode.h new file mode 120000 index 0000000..89c1ad0 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/exprNode.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/sdl/exprNode.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/filters.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/filters.h new file mode 120000 index 0000000..cce53d1 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/filters.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/sdl/filters.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/getopt.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/getopt.h new file mode 120000 index 0000000..015c545 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/getopt.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/sdl/getopt.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/inputSDL.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/inputSDL.h new file mode 120000 index 0000000..335d0a8 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/inputSDL.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/sdl/inputSDL.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/text.h b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/text.h new file mode 120000 index 0000000..39be6b5 --- /dev/null +++ b/Pods/Headers/Private/GBADeltaCore/visualboyadvance-m/src/sdl/text.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBADeltaCore/visualboyadvance-m/src/sdl/text.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h new file mode 120000 index 0000000..b382a5b --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Bridge/GBCInputGetter.h b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Bridge/GBCInputGetter.h new file mode 120000 index 0000000..6220037 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Bridge/GBCInputGetter.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/GBCDeltaCore/Bridge/GBCInputGetter.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/GBCDeltaCore.h b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/GBCDeltaCore.h new file mode 120000 index 0000000..194b074 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/GBCDeltaCore.h @@ -0,0 +1 @@ +../../../../../Cores/GBCDeltaCore/GBCDeltaCore/GBCDeltaCore.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Model/GBCCheat.h b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Model/GBCCheat.h new file mode 120000 index 0000000..32f737b --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Model/GBCCheat.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/GBCDeltaCore/Model/GBCCheat.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h new file mode 120000 index 0000000..e3b347e --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/adaptivesleep.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/adaptivesleep.h new file mode 120000 index 0000000..0a97c06 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/adaptivesleep.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/adaptivesleep.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/array.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/array.h new file mode 120000 index 0000000..c83c460 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/array.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/array.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/defined_ptr.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/defined_ptr.h new file mode 120000 index 0000000..514a751 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/defined_ptr.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/defined_ptr.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/rateest.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/rateest.h new file mode 120000 index 0000000..32fd4de --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/rateest.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/rateest.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/ringbuffer.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/ringbuffer.h new file mode 120000 index 0000000..bcdb498 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/ringbuffer.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/ringbuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/scoped_ptr.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/scoped_ptr.h new file mode 120000 index 0000000..30974f2 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/scoped_ptr.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/scoped_ptr.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/skipsched.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/skipsched.h new file mode 120000 index 0000000..7398b98 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/skipsched.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/skipsched.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/transfer_ptr.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/transfer_ptr.h new file mode 120000 index 0000000..d787358 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/transfer_ptr.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/transfer_ptr.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/uncopyable.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/uncopyable.h new file mode 120000 index 0000000..cca719e --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/uncopyable.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/uncopyable.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/common/usec.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/usec.h new file mode 120000 index 0000000..3905d44 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/common/usec.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/gambatte/common/usec.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/gambatte.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/gambatte.h new file mode 120000 index 0000000..7490e43 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/gambatte.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/include/gambatte.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/gbint.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/gbint.h new file mode 120000 index 0000000..266606b --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/gbint.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/include/gbint.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/inputgetter.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/inputgetter.h new file mode 120000 index 0000000..84d2b5f --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/inputgetter.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/include/inputgetter.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/loadres.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/loadres.h new file mode 120000 index 0000000..6fa59de --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/loadres.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/include/loadres.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/pakinfo.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/pakinfo.h new file mode 120000 index 0000000..de4bc1e --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/include/pakinfo.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/include/pakinfo.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/bitmap_font.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/bitmap_font.h new file mode 120000 index 0000000..f524231 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/bitmap_font.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/bitmap_font.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/counterdef.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/counterdef.h new file mode 120000 index 0000000..23c117b --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/counterdef.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/counterdef.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/cpu.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/cpu.h new file mode 120000 index 0000000..bddb90e --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/cpu.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/cpu.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/initstate.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/initstate.h new file mode 120000 index 0000000..823373f --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/initstate.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/initstate.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/insertion_sort.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/insertion_sort.h new file mode 120000 index 0000000..679e05e --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/insertion_sort.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/insertion_sort.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/interrupter.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/interrupter.h new file mode 120000 index 0000000..54e8437 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/interrupter.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/interrupter.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/interruptrequester.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/interruptrequester.h new file mode 120000 index 0000000..3d0dc1f --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/interruptrequester.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/interruptrequester.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/memory.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/memory.h new file mode 120000 index 0000000..0813f5b --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/memory.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/memory.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/minkeeper.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/minkeeper.h new file mode 120000 index 0000000..d31280a --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/minkeeper.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/minkeeper.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/osd_element.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/osd_element.h new file mode 120000 index 0000000..e50a48f --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/osd_element.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/osd_element.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/savestate.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/savestate.h new file mode 120000 index 0000000..aa03491 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/savestate.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/savestate.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/sound.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/sound.h new file mode 120000 index 0000000..3909997 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/sound.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/sound.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/state_osd_elements.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/state_osd_elements.h new file mode 120000 index 0000000..fbe13f9 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/state_osd_elements.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/state_osd_elements.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/statesaver.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/statesaver.h new file mode 120000 index 0000000..8319705 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/statesaver.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/statesaver.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/tima.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/tima.h new file mode 120000 index 0000000..7176055 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/tima.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/tima.h \ No newline at end of file diff --git a/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/video.h b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/video.h new file mode 120000 index 0000000..87cde48 --- /dev/null +++ b/Pods/Headers/Private/GBCDeltaCore/gambatte/libgambatte/src/video.h @@ -0,0 +1 @@ +../../../../../../../Cores/GBCDeltaCore/gambatte/libgambatte/src/video.h \ No newline at end of file diff --git a/Pods/Headers/Private/GTMSessionFetcher/GTMGatherInputStream.h b/Pods/Headers/Private/GTMSessionFetcher/GTMGatherInputStream.h new file mode 120000 index 0000000..231c9ee --- /dev/null +++ b/Pods/Headers/Private/GTMSessionFetcher/GTMGatherInputStream.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMGatherInputStream.h \ No newline at end of file diff --git a/Pods/Headers/Private/GTMSessionFetcher/GTMMIMEDocument.h b/Pods/Headers/Private/GTMSessionFetcher/GTMMIMEDocument.h new file mode 120000 index 0000000..2d2d247 --- /dev/null +++ b/Pods/Headers/Private/GTMSessionFetcher/GTMMIMEDocument.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMMIMEDocument.h \ No newline at end of file diff --git a/Pods/Headers/Private/GTMSessionFetcher/GTMReadMonitorInputStream.h b/Pods/Headers/Private/GTMSessionFetcher/GTMReadMonitorInputStream.h new file mode 120000 index 0000000..2beacd8 --- /dev/null +++ b/Pods/Headers/Private/GTMSessionFetcher/GTMReadMonitorInputStream.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMReadMonitorInputStream.h \ No newline at end of file diff --git a/Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcher.h b/Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcher.h new file mode 120000 index 0000000..7ed730f --- /dev/null +++ b/Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcher.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMSessionFetcher.h \ No newline at end of file diff --git a/Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcherLogging.h b/Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcherLogging.h new file mode 120000 index 0000000..ada41e3 --- /dev/null +++ b/Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcherLogging.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMSessionFetcherLogging.h \ No newline at end of file diff --git a/Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcherService.h b/Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcherService.h new file mode 120000 index 0000000..1ef9cbb --- /dev/null +++ b/Pods/Headers/Private/GTMSessionFetcher/GTMSessionFetcherService.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMSessionFetcherService.h \ No newline at end of file diff --git a/Pods/Headers/Private/GTMSessionFetcher/GTMSessionUploadFetcher.h b/Pods/Headers/Private/GTMSessionFetcher/GTMSessionUploadFetcher.h new file mode 120000 index 0000000..cef7a0d --- /dev/null +++ b/Pods/Headers/Private/GTMSessionFetcher/GTMSessionUploadFetcher.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMSessionUploadFetcher.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRBase64.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRBase64.h new file mode 120000 index 0000000..675bb65 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRBase64.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Utilities/GTLRBase64.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRBatchQuery.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRBatchQuery.h new file mode 120000 index 0000000..d7dd887 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRBatchQuery.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRBatchResult.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRBatchResult.h new file mode 120000 index 0000000..4f292a1 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRBatchResult.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDateTime.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDateTime.h new file mode 120000 index 0000000..213b193 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDateTime.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRDateTime.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDefines.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDefines.h new file mode 120000 index 0000000..dd50bd9 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDefines.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GTLRDefines.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDrive.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDrive.h new file mode 120000 index 0000000..a2302b3 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDrive.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDrive.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveObjects.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveObjects.h new file mode 120000 index 0000000..7db9e87 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveObjects.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveQuery.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveQuery.h new file mode 120000 index 0000000..8007e12 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveQuery.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveService.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveService.h new file mode 120000 index 0000000..cc0f6c9 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDriveService.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDuration.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDuration.h new file mode 120000 index 0000000..78c882f --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRDuration.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRDuration.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRErrorObject.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRErrorObject.h new file mode 120000 index 0000000..32b1224 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRErrorObject.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRFramework.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRFramework.h new file mode 120000 index 0000000..0f79b8a --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRFramework.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Utilities/GTLRFramework.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRObject.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRObject.h new file mode 120000 index 0000000..66351b9 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRObject.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRObject.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRQuery.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRQuery.h new file mode 120000 index 0000000..e843d3c --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRQuery.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRQuery.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRRuntimeCommon.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRRuntimeCommon.h new file mode 120000 index 0000000..9ae1ed7 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRRuntimeCommon.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRService.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRService.h new file mode 120000 index 0000000..5403ba9 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRService.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRService.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRURITemplate.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRURITemplate.h new file mode 120000 index 0000000..5e9f0dd --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRURITemplate.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRUploadParameters.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRUploadParameters.h new file mode 120000 index 0000000..a896f4d --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRUploadParameters.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleAPIClientForREST/GTLRUtilities.h b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRUtilities.h new file mode 120000 index 0000000..85b5440 --- /dev/null +++ b/Pods/Headers/Private/GoogleAPIClientForREST/GTLRUtilities.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleToolboxForMac/GTMDebugSelectorValidation.h b/Pods/Headers/Private/GoogleToolboxForMac/GTMDebugSelectorValidation.h new file mode 120000 index 0000000..521da72 --- /dev/null +++ b/Pods/Headers/Private/GoogleToolboxForMac/GTMDebugSelectorValidation.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/DebugUtils/GTMDebugSelectorValidation.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleToolboxForMac/GTMDebugThreadValidation.h b/Pods/Headers/Private/GoogleToolboxForMac/GTMDebugThreadValidation.h new file mode 120000 index 0000000..de29ea1 --- /dev/null +++ b/Pods/Headers/Private/GoogleToolboxForMac/GTMDebugThreadValidation.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/DebugUtils/GTMDebugThreadValidation.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleToolboxForMac/GTMDefines.h b/Pods/Headers/Private/GoogleToolboxForMac/GTMDefines.h new file mode 120000 index 0000000..5503110 --- /dev/null +++ b/Pods/Headers/Private/GoogleToolboxForMac/GTMDefines.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/GTMDefines.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleToolboxForMac/GTMMethodCheck.h b/Pods/Headers/Private/GoogleToolboxForMac/GTMMethodCheck.h new file mode 120000 index 0000000..56dfa7e --- /dev/null +++ b/Pods/Headers/Private/GoogleToolboxForMac/GTMMethodCheck.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/DebugUtils/GTMMethodCheck.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleToolboxForMac/GTMNSDictionary+URLArguments.h b/Pods/Headers/Private/GoogleToolboxForMac/GTMNSDictionary+URLArguments.h new file mode 120000 index 0000000..b2ff829 --- /dev/null +++ b/Pods/Headers/Private/GoogleToolboxForMac/GTMNSDictionary+URLArguments.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.h \ No newline at end of file diff --git a/Pods/Headers/Private/GoogleToolboxForMac/GTMNSString+URLArguments.h b/Pods/Headers/Private/GoogleToolboxForMac/GTMNSString+URLArguments.h new file mode 120000 index 0000000..3b9b1a2 --- /dev/null +++ b/Pods/Headers/Private/GoogleToolboxForMac/GTMNSString+URLArguments.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.h \ No newline at end of file diff --git a/Pods/Headers/Private/Harmony/Harmony/Harmony.h b/Pods/Headers/Private/Harmony/Harmony/Harmony.h new file mode 120000 index 0000000..6496a6c --- /dev/null +++ b/Pods/Headers/Private/Harmony/Harmony/Harmony.h @@ -0,0 +1 @@ +../../../../../External/Harmony/Harmony/Harmony.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/3DMath.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/3DMath.h new file mode 120000 index 0000000..bb165aa --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/3DMath.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/3DMath.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAM.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAM.h new file mode 120000 index 0000000..3f7bc7b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAM.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAM.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAMStub.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAMStub.h new file mode 120000 index 0000000..fda9800 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAMStub.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/ColorBufferToRDRAMStub.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/DepthBufferToRDRAM.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/DepthBufferToRDRAM.h new file mode 120000 index 0000000..3cc0c9b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/DepthBufferToRDRAM.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/DepthBufferToRDRAM.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/RDRAMtoColorBuffer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/RDRAMtoColorBuffer.h new file mode 120000 index 0000000..a3fa94a --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/RDRAMtoColorBuffer.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/RDRAMtoColorBuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/WriteToRDRAM.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/WriteToRDRAM.h new file mode 120000 index 0000000..393713d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/WriteToRDRAM.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/BufferCopy/WriteToRDRAM.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/CRC.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/CRC.h new file mode 120000 index 0000000..03bb006 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/CRC.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/CRC.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Combiner.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Combiner.h new file mode 120000 index 0000000..be0ff6c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Combiner.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Combiner.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/CombinerKey.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/CombinerKey.h new file mode 120000 index 0000000..2936fe7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/CombinerKey.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/CombinerKey.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Config.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Config.h new file mode 120000 index 0000000..8efa52c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Config.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Config.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DebugDump.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DebugDump.h new file mode 120000 index 0000000..6d2cdac --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DebugDump.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/DebugDump.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Debugger.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Debugger.h new file mode 120000 index 0000000..94c8e16 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Debugger.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Debugger.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBuffer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBuffer.h new file mode 120000 index 0000000..c862336 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBuffer.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/ClipPolygon.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/ClipPolygon.h new file mode 120000 index 0000000..94c5c2c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/ClipPolygon.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/ClipPolygon.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/DepthBufferRender.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/DepthBufferRender.h new file mode 120000 index 0000000..1699dd7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/DepthBufferRender.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/DepthBufferRender/DepthBufferRender.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayLoadProgress.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayLoadProgress.h new file mode 120000 index 0000000..a60ad88 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayLoadProgress.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayLoadProgress.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayWindow.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayWindow.h new file mode 120000 index 0000000..1441174 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayWindow.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/DisplayWindow.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBuffer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBuffer.h new file mode 120000 index 0000000..2254c9a --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBuffer.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfo.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfo.h new file mode 120000 index 0000000..0a59748 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfo.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfo.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfoAPI.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfoAPI.h new file mode 120000 index 0000000..d703b6c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfoAPI.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/FrameBufferInfoAPI.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GBI.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GBI.h new file mode 120000 index 0000000..3f7438d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GBI.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GBI.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideN64.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideN64.h new file mode 120000 index 0000000..141d519 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideN64.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideN64.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/Ext_TxFilter.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/Ext_TxFilter.h new file mode 120000 index 0000000..8c51b39 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/Ext_TxFilter.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/Ext_TxFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters.h new file mode 120000 index 0000000..0847102 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_2xsai.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_2xsai.h new file mode 120000 index 0000000..b9efc2d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_2xsai.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_2xsai.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq2x.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq2x.h new file mode 120000 index 0000000..c410517 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq2x.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq2x.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq4x.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq4x.h new file mode 120000 index 0000000..e2a2cd0 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq4x.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_hq4x.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_lq2x.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_lq2x.h new file mode 120000 index 0000000..b1da56c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_lq2x.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_lq2x.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_xbrz.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_xbrz.h new file mode 120000 index 0000000..36d8368 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_xbrz.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TextureFilters_xbrz.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxCache.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxCache.h new file mode 120000 index 0000000..66ec94d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxCache.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxDbg.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxDbg.h new file mode 120000 index 0000000..0def0cb --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxDbg.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxDbg.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxFilter.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxFilter.h new file mode 120000 index 0000000..152849c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxFilter.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxFilter.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxHiResCache.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxHiResCache.h new file mode 120000 index 0000000..abae1fd --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxHiResCache.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxHiResCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxImage.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxImage.h new file mode 120000 index 0000000..f1b2e0d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxImage.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxImage.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxInternal.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxInternal.h new file mode 120000 index 0000000..6602303 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxInternal.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxInternal.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxQuantize.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxQuantize.h new file mode 120000 index 0000000..6aa5e26 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxQuantize.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxQuantize.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxReSample.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxReSample.h new file mode 120000 index 0000000..7f21a5c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxReSample.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxReSample.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxTexCache.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxTexCache.h new file mode 120000 index 0000000..e0bf768 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxTexCache.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxTexCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxUtil.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxUtil.h new file mode 120000 index 0000000..87a2ef0 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxUtil.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/TxUtil.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/bldno.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/bldno.h new file mode 120000 index 0000000..5f684fd --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/bldno.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/bldno.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/png.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/png.h new file mode 120000 index 0000000..87f6488 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/png.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/png.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngconf.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngconf.h new file mode 120000 index 0000000..02286cc --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngconf.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngconf.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pnglibconf.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pnglibconf.h new file mode 120000 index 0000000..66dc201 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pnglibconf.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pnglibconf.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngstruct.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngstruct.h new file mode 120000 index 0000000..039a53d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngstruct.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/pngstruct.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zconf.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zconf.h new file mode 120000 index 0000000..5f22916 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zconf.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zconf.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zlib.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zlib.h new file mode 120000 index 0000000..81ac1d8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zlib.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/inc/zlib.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/txWidestringWrapper.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/txWidestringWrapper.h new file mode 120000 index 0000000..fad157f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/txWidestringWrapper.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNHQ/txWidestringWrapper.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/AboutDialog.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/AboutDialog.h new file mode 120000 index 0000000..02b5984 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/AboutDialog.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/AboutDialog.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/ConfigDialog.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/ConfigDialog.h new file mode 120000 index 0000000..b603e19 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/ConfigDialog.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/ConfigDialog.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/FullscreenResolutions.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/FullscreenResolutions.h new file mode 120000 index 0000000..d730166 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/FullscreenResolutions.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/FullscreenResolutions.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/GLideNUI.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/GLideNUI.h new file mode 120000 index 0000000..c153d5e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/GLideNUI.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/GLideNUI.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/Settings.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/Settings.h new file mode 120000 index 0000000..9c0f7c1 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/Settings.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GLideNUI/Settings.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ColorBufferReader.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ColorBufferReader.h new file mode 120000 index 0000000..27906a3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ColorBufferReader.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ColorBufferReader.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/CombinerProgram.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/CombinerProgram.h new file mode 120000 index 0000000..0014f96 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/CombinerProgram.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/CombinerProgram.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Context.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Context.h new file mode 120000 index 0000000..385d42c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Context.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Context.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ContextImpl.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ContextImpl.h new file mode 120000 index 0000000..d9506ec --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ContextImpl.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ContextImpl.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/FramebufferTextureFormats.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/FramebufferTextureFormats.h new file mode 120000 index 0000000..9bfb557 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/FramebufferTextureFormats.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/FramebufferTextureFormats.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ObjectHandle.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ObjectHandle.h new file mode 120000 index 0000000..55f035b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ObjectHandle.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ObjectHandle.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLFunctions.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLFunctions.h new file mode 120000 index 0000000..7ca9ea3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLFunctions.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLFunctions.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerInputs.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerInputs.h new file mode 120000 index 0000000..2e656b1 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerInputs.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerInputs.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.h new file mode 120000 index 0000000..3aedbdc --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramImpl.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramImpl.h new file mode 120000 index 0000000..648db31 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramImpl.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramImpl.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.h new file mode 120000 index 0000000..e1046a6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_FXAA.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_FXAA.h new file mode 120000 index 0000000..41fe4b3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_FXAA.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_FXAA.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderPart.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderPart.h new file mode 120000 index 0000000..e7da72c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderPart.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderPart.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.h new file mode 120000 index 0000000..b0a1481 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_SpecialShadersFactory.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_SpecialShadersFactory.h new file mode 120000 index 0000000..b2927b8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_SpecialShadersFactory.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_SpecialShadersFactory.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_Utils.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_Utils.h new file mode 120000 index 0000000..6a81e8e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_Utils.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GLSL/glsl_Utils.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/GraphicBufferWrapper.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/GraphicBufferWrapper.h new file mode 120000 index 0000000..ceca522 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/GraphicBufferWrapper.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/GraphicBufferWrapper.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/GraphicBuffer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/GraphicBuffer.h new file mode 120000 index 0000000..bb17ee7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/GraphicBuffer.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/GraphicBuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/gralloc.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/gralloc.h new file mode 120000 index 0000000..fc22b0e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/gralloc.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/gralloc.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/libhardware.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/libhardware.h new file mode 120000 index 0000000..d69c7d9 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/libhardware.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PrivateApi/libhardware.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/android_hardware_buffer_compat.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/android_hardware_buffer_compat.h new file mode 120000 index 0000000..4476601 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/android_hardware_buffer_compat.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/android_hardware_buffer_compat.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/check.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/check.h new file mode 120000 index 0000000..796dd7b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/check.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/check.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/dcheck.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/dcheck.h new file mode 120000 index 0000000..cb6ab27 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/dcheck.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/GraphicBuffer/PublicApi/dcheck.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Attributes.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Attributes.h new file mode 120000 index 0000000..e4a46a8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Attributes.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Attributes.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferManipulationObjectFactory.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferManipulationObjectFactory.h new file mode 120000 index 0000000..b1f7287 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferManipulationObjectFactory.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferManipulationObjectFactory.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferedDrawer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferedDrawer.h new file mode 120000 index 0000000..f5d2b9c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferedDrawer.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_BufferedDrawer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_CachedFunctions.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_CachedFunctions.h new file mode 120000 index 0000000..0684231 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_CachedFunctions.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_CachedFunctions.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithBufferStorage.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithBufferStorage.h new file mode 120000 index 0000000..6f085b9 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithBufferStorage.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithBufferStorage.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithEGLImage.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithEGLImage.h new file mode 120000 index 0000000..c6ebd4b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithEGLImage.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithEGLImage.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithPixelBuffer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithPixelBuffer.h new file mode 120000 index 0000000..99a6a96 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithPixelBuffer.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithPixelBuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithReadPixels.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithReadPixels.h new file mode 120000 index 0000000..5758117 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithReadPixels.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ColorBufferReaderWithReadPixels.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ContextImpl.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ContextImpl.h new file mode 120000 index 0000000..d5ec81b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ContextImpl.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_ContextImpl.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GLInfo.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GLInfo.h new file mode 120000 index 0000000..2a98613 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GLInfo.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GLInfo.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GraphicsDrawer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GraphicsDrawer.h new file mode 120000 index 0000000..1e7ae39 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GraphicsDrawer.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_GraphicsDrawer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_TextureManipulationObjectFactory.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_TextureManipulationObjectFactory.h new file mode 120000 index 0000000..61c89f8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_TextureManipulationObjectFactory.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_TextureManipulationObjectFactory.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_UnbufferedDrawer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_UnbufferedDrawer.h new file mode 120000 index 0000000..0a125b3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_UnbufferedDrawer.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_UnbufferedDrawer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Utils.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Utils.h new file mode 120000 index 0000000..a5027a6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Utils.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/OpenGLContext/opengl_Utils.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameter.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameter.h new file mode 120000 index 0000000..10b62cd --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameter.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameter.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameters.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameters.h new file mode 120000 index 0000000..6817880 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameters.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/Parameters.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/PixelBuffer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/PixelBuffer.h new file mode 120000 index 0000000..d04f71b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/PixelBuffer.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/PixelBuffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ShaderProgram.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ShaderProgram.h new file mode 120000 index 0000000..58d2eb3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ShaderProgram.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Graphics/ShaderProgram.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GraphicsDrawer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GraphicsDrawer.h new file mode 120000 index 0000000..8ce4d45 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/GraphicsDrawer.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/GraphicsDrawer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Keys.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Keys.h new file mode 120000 index 0000000..6cb12f2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Keys.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Keys.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Log.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Log.h new file mode 120000 index 0000000..634c442 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Log.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Log.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/MemoryStatus.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/MemoryStatus.h new file mode 120000 index 0000000..34b1f4b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/MemoryStatus.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/MemoryStatus.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/N64.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/N64.h new file mode 120000 index 0000000..734958f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/N64.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/N64.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/NoiseTexture.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/NoiseTexture.h new file mode 120000 index 0000000..3ba5940 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/NoiseTexture.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/NoiseTexture.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PaletteTexture.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PaletteTexture.h new file mode 120000 index 0000000..f5bb812 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PaletteTexture.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/PaletteTexture.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Performance.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Performance.h new file mode 120000 index 0000000..2864d31 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Performance.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Performance.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Platform.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Platform.h new file mode 120000 index 0000000..2ffaf04 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Platform.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Platform.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PluginAPI.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PluginAPI.h new file mode 120000 index 0000000..c96e40f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PluginAPI.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/PluginAPI.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PostProcessor.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PostProcessor.h new file mode 120000 index 0000000..6b3ea73 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/PostProcessor.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/PostProcessor.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/RDP.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/RDP.h new file mode 120000 index 0000000..84ed719 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/RDP.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/RDP.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/RSP.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/RSP.h new file mode 120000 index 0000000..51540fe --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/RSP.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/RSP.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Revision.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Revision.h new file mode 120000 index 0000000..23b511f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Revision.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Revision.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/SoftwareRender.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/SoftwareRender.h new file mode 120000 index 0000000..fd659f2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/SoftwareRender.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/SoftwareRender.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TexrectDrawer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TexrectDrawer.h new file mode 120000 index 0000000..a22a12d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TexrectDrawer.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/TexrectDrawer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TextDrawer.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TextDrawer.h new file mode 120000 index 0000000..b20dd82 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TextDrawer.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/TextDrawer.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TextureFilterHandler.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TextureFilterHandler.h new file mode 120000 index 0000000..c9c33a0 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/TextureFilterHandler.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/TextureFilterHandler.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Textures.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Textures.h new file mode 120000 index 0000000..09cfdec --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Textures.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Textures.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Types.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Types.h new file mode 120000 index 0000000..66adf5c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/Types.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/Types.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/VI.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/VI.h new file mode 120000 index 0000000..4b50e27 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/VI.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/VI.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/ZilmarGFX_1_3.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/ZilmarGFX_1_3.h new file mode 120000 index 0000000..a7e7178 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/ZilmarGFX_1_3.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/ZilmarGFX_1_3.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/ZlutTexture.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/ZlutTexture.h new file mode 120000 index 0000000..6fc36f3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/ZlutTexture.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/ZlutTexture.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/convert.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/convert.h new file mode 120000 index 0000000..72cdc1d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/convert.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/convert.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/gDP.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/gDP.h new file mode 120000 index 0000000..f5f5fcd --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/gDP.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/gDP.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/gSP.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/gSP.h new file mode 120000 index 0000000..205541d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/gSP.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/gSP.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glcorearb.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glcorearb.h new file mode 120000 index 0000000..3cb6add --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glcorearb.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glcorearb.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glext.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glext.h new file mode 120000 index 0000000..ac87348 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glext.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glext.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glxext.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glxext.h new file mode 120000 index 0000000..5c3fe0a --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glxext.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/glxext.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/wglext.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/wglext.h new file mode 120000 index 0000000..2146207 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/wglext.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/GL/wglext.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/callbacks.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/callbacks.h new file mode 120000 index 0000000..37f1506 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/callbacks.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/callbacks.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/debugger.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/debugger.h new file mode 120000 index 0000000..4fd52f4 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/debugger.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/debugger.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftconfig.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftconfig.h new file mode 120000 index 0000000..db2183d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftconfig.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftconfig.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftheader.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftheader.h new file mode 120000 index 0000000..a3b5e2e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftheader.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftheader.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftmodule.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftmodule.h new file mode 120000 index 0000000..c3d78fb --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftmodule.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftmodule.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftoption.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftoption.h new file mode 120000 index 0000000..9c5540c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftoption.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftoption.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftstdlib.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftstdlib.h new file mode 120000 index 0000000..32fe3b0 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftstdlib.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/config/ftstdlib.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/freetype.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/freetype.h new file mode 120000 index 0000000..10eaff1 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/freetype.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/freetype.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ft2build.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ft2build.h new file mode 120000 index 0000000..cd6bea5 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ft2build.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ft2build.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftadvanc.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftadvanc.h new file mode 120000 index 0000000..8cd2b82 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftadvanc.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftadvanc.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftautoh.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftautoh.h new file mode 120000 index 0000000..998184d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftautoh.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftautoh.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbbox.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbbox.h new file mode 120000 index 0000000..d8418ee --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbbox.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbbox.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbdf.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbdf.h new file mode 120000 index 0000000..63bacbe --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbdf.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbdf.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbitmap.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbitmap.h new file mode 120000 index 0000000..20024dc --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbitmap.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbitmap.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbzip2.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbzip2.h new file mode 120000 index 0000000..79af64e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbzip2.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftbzip2.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcache.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcache.h new file mode 120000 index 0000000..7542a6e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcache.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcache.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcffdrv.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcffdrv.h new file mode 120000 index 0000000..30b2588 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcffdrv.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcffdrv.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftchapters.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftchapters.h new file mode 120000 index 0000000..df549a4 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftchapters.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftchapters.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcid.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcid.h new file mode 120000 index 0000000..2f67d94 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcid.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftcid.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrdef.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrdef.h new file mode 120000 index 0000000..d413ce4 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrdef.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrdef.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrors.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrors.h new file mode 120000 index 0000000..11617b8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrors.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fterrors.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgasp.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgasp.h new file mode 120000 index 0000000..ac64305 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgasp.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgasp.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftglyph.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftglyph.h new file mode 120000 index 0000000..49ad2a9 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftglyph.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftglyph.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgxval.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgxval.h new file mode 120000 index 0000000..5e3142f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgxval.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgxval.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgzip.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgzip.h new file mode 120000 index 0000000..9dd3ea4 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgzip.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftgzip.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftimage.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftimage.h new file mode 120000 index 0000000..ae7f46b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftimage.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftimage.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftincrem.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftincrem.h new file mode 120000 index 0000000..98045a6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftincrem.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftincrem.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlcdfil.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlcdfil.h new file mode 120000 index 0000000..37f42bd --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlcdfil.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlcdfil.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlist.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlist.h new file mode 120000 index 0000000..9df95b0 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlist.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlist.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlzw.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlzw.h new file mode 120000 index 0000000..1b8bef4 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlzw.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftlzw.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmac.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmac.h new file mode 120000 index 0000000..3b5bee8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmac.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmac.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmm.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmm.h new file mode 120000 index 0000000..6717ce3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmm.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmm.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmodapi.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmodapi.h new file mode 120000 index 0000000..fa49cde --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmodapi.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmodapi.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmoderr.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmoderr.h new file mode 120000 index 0000000..da09e62 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmoderr.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftmoderr.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftotval.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftotval.h new file mode 120000 index 0000000..cea4acc --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftotval.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftotval.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftoutln.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftoutln.h new file mode 120000 index 0000000..dae390d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftoutln.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftoutln.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftpfr.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftpfr.h new file mode 120000 index 0000000..c028118 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftpfr.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftpfr.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftrender.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftrender.h new file mode 120000 index 0000000..92a8d6f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftrender.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftrender.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsizes.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsizes.h new file mode 120000 index 0000000..600fcb8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsizes.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsizes.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsnames.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsnames.h new file mode 120000 index 0000000..da608e6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsnames.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsnames.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftstroke.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftstroke.h new file mode 120000 index 0000000..e2cb921 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftstroke.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftstroke.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsynth.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsynth.h new file mode 120000 index 0000000..eaa64c7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsynth.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsynth.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsystem.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsystem.h new file mode 120000 index 0000000..5574842 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsystem.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftsystem.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttrigon.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttrigon.h new file mode 120000 index 0000000..8dbede4 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttrigon.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttrigon.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftttdrv.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftttdrv.h new file mode 120000 index 0000000..73b9809 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftttdrv.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftttdrv.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttypes.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttypes.h new file mode 120000 index 0000000..e92b695 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttypes.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/fttypes.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftwinfnt.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftwinfnt.h new file mode 120000 index 0000000..d8c61aa --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftwinfnt.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftwinfnt.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftxf86.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftxf86.h new file mode 120000 index 0000000..1aedad6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftxf86.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ftxf86.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/autohint.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/autohint.h new file mode 120000 index 0000000..50bc8d6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/autohint.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/autohint.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftcalc.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftcalc.h new file mode 120000 index 0000000..95c667e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftcalc.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftcalc.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdebug.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdebug.h new file mode 120000 index 0000000..ba90a9b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdebug.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdebug.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdriver.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdriver.h new file mode 120000 index 0000000..c336816 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdriver.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftdriver.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftgloadr.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftgloadr.h new file mode 120000 index 0000000..6e618a8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftgloadr.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftgloadr.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftmemory.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftmemory.h new file mode 120000 index 0000000..a527419 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftmemory.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftmemory.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftobjs.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftobjs.h new file mode 120000 index 0000000..c2fa455 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftobjs.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftobjs.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftpic.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftpic.h new file mode 120000 index 0000000..87e7f8d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftpic.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftpic.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftrfork.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftrfork.h new file mode 120000 index 0000000..4ed786c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftrfork.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftrfork.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftserv.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftserv.h new file mode 120000 index 0000000..2c4b786 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftserv.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftserv.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftstream.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftstream.h new file mode 120000 index 0000000..19ac7cd --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftstream.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftstream.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/fttrace.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/fttrace.h new file mode 120000 index 0000000..7850589 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/fttrace.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/fttrace.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftvalid.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftvalid.h new file mode 120000 index 0000000..0dbab9d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftvalid.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/ftvalid.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/internal.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/internal.h new file mode 120000 index 0000000..663c4e6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/internal.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/internal.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/psaux.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/psaux.h new file mode 120000 index 0000000..d2d72d2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/psaux.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/psaux.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/pshints.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/pshints.h new file mode 120000 index 0000000..6eefe48 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/pshints.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/pshints.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svbdf.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svbdf.h new file mode 120000 index 0000000..60aa2ba --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svbdf.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svbdf.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svcid.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svcid.h new file mode 120000 index 0000000..9c7d131 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svcid.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svcid.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgldict.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgldict.h new file mode 120000 index 0000000..29c49ec --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgldict.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgldict.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgxval.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgxval.h new file mode 120000 index 0000000..bf3609b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgxval.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svgxval.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svkern.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svkern.h new file mode 120000 index 0000000..3814e57 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svkern.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svkern.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svmm.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svmm.h new file mode 120000 index 0000000..87c4737 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svmm.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svmm.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svotval.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svotval.h new file mode 120000 index 0000000..13e1d56 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svotval.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svotval.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpfr.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpfr.h new file mode 120000 index 0000000..0106494 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpfr.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpfr.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpostnm.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpostnm.h new file mode 120000 index 0000000..745ffa5 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpostnm.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpostnm.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svprop.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svprop.h new file mode 120000 index 0000000..88389fa --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svprop.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svprop.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpscmap.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpscmap.h new file mode 120000 index 0000000..a3bcc30 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpscmap.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpscmap.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpsinfo.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpsinfo.h new file mode 120000 index 0000000..da40728 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpsinfo.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svpsinfo.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svsfnt.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svsfnt.h new file mode 120000 index 0000000..5956d14 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svsfnt.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svsfnt.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttcmap.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttcmap.h new file mode 120000 index 0000000..d7422df --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttcmap.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttcmap.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svtteng.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svtteng.h new file mode 120000 index 0000000..d065391 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svtteng.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svtteng.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttglyf.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttglyf.h new file mode 120000 index 0000000..f3bb48b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttglyf.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svttglyf.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svwinfnt.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svwinfnt.h new file mode 120000 index 0000000..5ec8312 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svwinfnt.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svwinfnt.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svxf86nm.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svxf86nm.h new file mode 120000 index 0000000..e4230c5 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svxf86nm.h @@ -0,0 +1 @@ +../../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/services/svxf86nm.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/sfnt.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/sfnt.h new file mode 120000 index 0000000..2851b06 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/sfnt.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/sfnt.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/t1types.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/t1types.h new file mode 120000 index 0000000..dc92494 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/t1types.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/t1types.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/tttypes.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/tttypes.h new file mode 120000 index 0000000..22d1210 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/tttypes.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/internal/tttypes.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/t1tables.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/t1tables.h new file mode 120000 index 0000000..c2f2078 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/t1tables.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/t1tables.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttnameid.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttnameid.h new file mode 120000 index 0000000..a87dc00 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttnameid.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttnameid.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttables.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttables.h new file mode 120000 index 0000000..03053b8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttables.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttables.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttags.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttags.h new file mode 120000 index 0000000..c8ccfae --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttags.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/tttags.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttunpat.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttunpat.h new file mode 120000 index 0000000..7af08b8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttunpat.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/freetype/include/ttunpat.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_common.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_common.h new file mode 120000 index 0000000..c605f7b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_common.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_common.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_config.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_config.h new file mode 120000 index 0000000..5cd638e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_config.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_config.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_debugger.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_debugger.h new file mode 120000 index 0000000..7a4531c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_debugger.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_debugger.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_frontend.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_frontend.h new file mode 120000 index 0000000..df9243e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_frontend.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_frontend.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_plugin.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_plugin.h new file mode 120000 index 0000000..9efd179 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_plugin.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_plugin.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_types.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_types.h new file mode 120000 index 0000000..ca33338 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_types.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_types.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_vidext.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_vidext.h new file mode 120000 index 0000000..31e642a --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_vidext.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/inc/m64p_vidext.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/mupenplus/GLideN64_mupenplus.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/mupenplus/GLideN64_mupenplus.h new file mode 120000 index 0000000..fcf9b8d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/mupenplus/GLideN64_mupenplus.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/mupenplus/GLideN64_mupenplus.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/osal/osal_files.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/osal/osal_files.h new file mode 120000 index 0000000..549075d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/osal/osal_files.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/osal/osal_files.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/sdl2_compat.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/sdl2_compat.h new file mode 120000 index 0000000..470809b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/sdl2_compat.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/sdl2_compat.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3D.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3D.h new file mode 120000 index 0000000..a7d7599 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3D.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3D.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DAM.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DAM.h new file mode 120000 index 0000000..9a9481e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DAM.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DAM.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DBETA.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DBETA.h new file mode 120000 index 0000000..a76fef6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DBETA.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DBETA.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DDKR.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DDKR.h new file mode 120000 index 0000000..8ad148c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DDKR.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DDKR.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX.h new file mode 120000 index 0000000..01850e5 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2.h new file mode 120000 index 0000000..f295769 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2ACCLAIM.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2ACCLAIM.h new file mode 120000 index 0000000..7119e83 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2ACCLAIM.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2ACCLAIM.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2CBFD.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2CBFD.h new file mode 120000 index 0000000..15de8d9 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2CBFD.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DEX2CBFD.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DFLX2.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DFLX2.h new file mode 120000 index 0000000..cef89e1 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DFLX2.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DFLX2.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DGOLDEN.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DGOLDEN.h new file mode 120000 index 0000000..154b16d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DGOLDEN.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DGOLDEN.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DPD.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DPD.h new file mode 120000 index 0000000..be209de --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DPD.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DPD.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DSETA.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DSETA.h new file mode 120000 index 0000000..6622b0e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DSETA.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DSETA.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DTEXA.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DTEXA.h new file mode 120000 index 0000000..d3de2b2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DTEXA.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DTEXA.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DZEX2.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DZEX2.h new file mode 120000 index 0000000..d06d5cc --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DZEX2.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F3DZEX2.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Indi_Naboo.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Indi_Naboo.h new file mode 120000 index 0000000..ee86073 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Indi_Naboo.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Indi_Naboo.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Rogue.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Rogue.h new file mode 120000 index 0000000..bfbd159 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Rogue.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/F5Rogue.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3D.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3D.h new file mode 120000 index 0000000..253a57e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3D.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3D.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX.h new file mode 120000 index 0000000..02e7126 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX2.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX2.h new file mode 120000 index 0000000..42df016 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX2.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/L3DEX2.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX.h new file mode 120000 index 0000000..4c60849 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX2.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX2.h new file mode 120000 index 0000000..7b70d6e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX2.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/S2DEX2.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/T3DUX.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/T3DUX.h new file mode 120000 index 0000000..13ece29 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/T3DUX.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/T3DUX.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/Turbo3D.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/Turbo3D.h new file mode 120000 index 0000000..2b3b4de --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/Turbo3D.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/Turbo3D.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSort.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSort.h new file mode 120000 index 0000000..5b180a9 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSort.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSort.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSortBOSS.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSortBOSS.h new file mode 120000 index 0000000..cd42a9e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSortBOSS.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/uCodes/ZSortBOSS.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/winlnxdefs.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/winlnxdefs.h new file mode 120000 index 0000000..6703fc4 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/winlnxdefs.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/winlnxdefs.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/wst.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/wst.h new file mode 120000 index 0000000..99ad646 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/wst.h @@ -0,0 +1 @@ +../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/wst.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/xxHash/xxhash.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/xxHash/xxhash.h new file mode 120000 index 0000000..a1fca91 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/xxHash/xxhash.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/GLideN64/src/xxHash/xxhash.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng.h new file mode 120000 index 0000000..f695499 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng2.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng2.h new file mode 120000 index 0000000..9b2e4fd --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng2.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/readpng2.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/writepng.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/writepng.h new file mode 120000 index 0000000..e0cf8cc --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/writepng.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/gregbook/writepng.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/libtests/pngstest-errors.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/libtests/pngstest-errors.h new file mode 120000 index 0000000..4eba306 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/libtests/pngstest-errors.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/libtests/pngstest-errors.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/decoder/pngusr.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/decoder/pngusr.h new file mode 120000 index 0000000..88013b7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/decoder/pngusr.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/decoder/pngusr.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/encoder/pngusr.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/encoder/pngusr.h new file mode 120000 index 0000000..d2ba117 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/encoder/pngusr.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/encoder/pngusr.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/preader/pngusr.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/preader/pngusr.h new file mode 120000 index 0000000..9e93fac --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/preader/pngusr.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/pngminim/preader/pngusr.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/tools/sRGB.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/tools/sRGB.h new file mode 120000 index 0000000..20a29a7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/tools/sRGB.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/tools/sRGB.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/PngFile.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/PngFile.h new file mode 120000 index 0000000..a6232c9 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/PngFile.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/PngFile.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/cexcept.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/cexcept.h new file mode 120000 index 0000000..edac7e5 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/cexcept.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/cexcept.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/resource.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/resource.h new file mode 120000 index 0000000..22caa86 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/resource.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/contrib/visupng/resource.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/png.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/png.h new file mode 120000 index 0000000..b47f113 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/png.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/png.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngconf.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngconf.h new file mode 120000 index 0000000..2a63d0f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngconf.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/pngconf.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngdebug.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngdebug.h new file mode 120000 index 0000000..8cd254d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngdebug.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/pngdebug.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pnginfo.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pnginfo.h new file mode 120000 index 0000000..6e0285f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pnginfo.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/pnginfo.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngpriv.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngpriv.h new file mode 120000 index 0000000..89fd99f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngpriv.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/pngpriv.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngstruct.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngstruct.h new file mode 120000 index 0000000..8c4d091 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/libpng/pngstruct.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/libpng/pngstruct.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/callbacks.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/callbacks.h new file mode 120000 index 0000000..f761e2c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/callbacks.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/callbacks.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/debugger.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/debugger.h new file mode 120000 index 0000000..d2ab150 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/debugger.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/debugger.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_common.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_common.h new file mode 120000 index 0000000..b4e5fbf --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_common.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_common.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_config.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_config.h new file mode 120000 index 0000000..8bc5ce8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_config.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_config.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_debugger.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_debugger.h new file mode 120000 index 0000000..6a5b268 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_debugger.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_debugger.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_frontend.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_frontend.h new file mode 120000 index 0000000..f8b3922 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_frontend.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_frontend.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_plugin.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_plugin.h new file mode 120000 index 0000000..36734f9 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_plugin.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_plugin.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_types.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_types.h new file mode 120000 index 0000000..d71abed --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_types.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_types.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_vidext.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_vidext.h new file mode 120000 index 0000000..c0b71aa --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_vidext.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/m64p_vidext.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext.h new file mode 120000 index 0000000..ae10b45 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext_sdl2_compat.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext_sdl2_compat.h new file mode 120000 index 0000000..8185636 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext_sdl2_compat.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api/vidext_sdl2_compat.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/audio_out_backend.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/audio_out_backend.h new file mode 120000 index 0000000..401f467 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/audio_out_backend.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/audio_out_backend.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/clock_backend.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/clock_backend.h new file mode 120000 index 0000000..8cc3af6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/clock_backend.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/clock_backend.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/controller_input_backend.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/controller_input_backend.h new file mode 120000 index 0000000..06e1eae --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/controller_input_backend.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/controller_input_backend.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/joybus.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/joybus.h new file mode 120000 index 0000000..e4b6a79 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/joybus.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/joybus.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/rumble_backend.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/rumble_backend.h new file mode 120000 index 0000000..08f9a77 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/rumble_backend.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/rumble_backend.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/storage_backend.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/storage_backend.h new file mode 120000 index 0000000..b754de2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/storage_backend.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/storage_backend.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/video_capture_backend.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/video_capture_backend.h new file mode 120000 index 0000000..4369c70 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/video_capture_backend.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/api/video_capture_backend.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/clock_ctime_plus_delta.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/clock_ctime_plus_delta.h new file mode 120000 index 0000000..553a834 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/clock_ctime_plus_delta.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/clock_ctime_plus_delta.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/file_storage.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/file_storage.h new file mode 120000 index 0000000..fa8a903 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/file_storage.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/file_storage.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/plugins_compat/plugins_compat.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/plugins_compat/plugins_compat.h new file mode 120000 index 0000000..8259435 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/plugins_compat/plugins_compat.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/backends/plugins_compat/plugins_compat.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/af_rtc.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/af_rtc.h new file mode 120000 index 0000000..59d8b90 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/af_rtc.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/af_rtc.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart.h new file mode 120000 index 0000000..81b9ed4 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart_rom.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart_rom.h new file mode 120000 index 0000000..f345d8f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart_rom.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/cart_rom.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/eeprom.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/eeprom.h new file mode 120000 index 0000000..3298328 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/eeprom.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/eeprom.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/flashram.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/flashram.h new file mode 120000 index 0000000..9307656 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/flashram.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/flashram.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/sram.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/sram.h new file mode 120000 index 0000000..c4d57c7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/sram.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/cart/sram.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/game_controller.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/game_controller.h new file mode 120000 index 0000000..012bc56 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/game_controller.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/game_controller.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/biopak.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/biopak.h new file mode 120000 index 0000000..63a214e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/biopak.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/biopak.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/mempak.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/mempak.h new file mode 120000 index 0000000..ff63e57 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/mempak.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/mempak.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/rumblepak.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/rumblepak.h new file mode 120000 index 0000000..c771a64 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/rumblepak.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/rumblepak.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/transferpak.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/transferpak.h new file mode 120000 index 0000000..053eb89 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/transferpak.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/controllers/paks/transferpak.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/dd/dd_controller.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/dd/dd_controller.h new file mode 120000 index 0000000..1265d30 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/dd/dd_controller.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/dd/dd_controller.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/device.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/device.h new file mode 120000 index 0000000..0c7fffc --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/device.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/device.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/gb_cart.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/gb_cart.h new file mode 120000 index 0000000..cc004d3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/gb_cart.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/gb_cart.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/m64282fp.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/m64282fp.h new file mode 120000 index 0000000..96333ab --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/m64282fp.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/m64282fp.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/mbc3_rtc.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/mbc3_rtc.h new file mode 120000 index 0000000..593ee24 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/mbc3_rtc.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/gb/mbc3_rtc.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/memory/memory.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/memory/memory.h new file mode 120000 index 0000000..3cd8905 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/memory/memory.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/memory/memory.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/bootrom_hle.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/bootrom_hle.h new file mode 120000 index 0000000..5d7d751 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/bootrom_hle.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/bootrom_hle.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/cic.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/cic.h new file mode 120000 index 0000000..05eefd2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/cic.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/cic.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/n64_cic_nus_6105.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/n64_cic_nus_6105.h new file mode 120000 index 0000000..678b4d8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/n64_cic_nus_6105.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/n64_cic_nus_6105.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/pif.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/pif.h new file mode 120000 index 0000000..4036597 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/pif.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/pif/pif.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cached_interp.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cached_interp.h new file mode 120000 index 0000000..c49ea97 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cached_interp.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cached_interp.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp0.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp0.h new file mode 120000 index 0000000..b4601b2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp0.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp0.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp1.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp1.h new file mode 120000 index 0000000..4d937b8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp1.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/cp1.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/fpu.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/fpu.h new file mode 120000 index 0000000..a8a52f2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/fpu.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/fpu.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/idec.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/idec.h new file mode 120000 index 0000000..bd7a53c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/idec.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/idec.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/instr_counters.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/instr_counters.h new file mode 120000 index 0000000..1965d12 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/instr_counters.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/instr_counters.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/interrupt.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/interrupt.h new file mode 120000 index 0000000..d41b1c3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/interrupt.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/interrupt.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/arm_cpu_features.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/arm_cpu_features.h new file mode 120000 index 0000000..9a93562 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/arm_cpu_features.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/arm_cpu_features.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/assem_arm.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/assem_arm.h new file mode 120000 index 0000000..4670ed7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/assem_arm.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm/assem_arm.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm64/assem_arm64.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm64/assem_arm64.h new file mode 120000 index 0000000..2242a3e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm64/assem_arm64.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/arm64/assem_arm64.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.h new file mode 120000 index 0000000..48e778b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/new_dynarec.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x64/assem_x64.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x64/assem_x64.h new file mode 120000 index 0000000..192e88f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x64/assem_x64.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x64/assem_x64.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x86/assem_x86.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x86/assem_x86.h new file mode 120000 index 0000000..91cde7b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x86/assem_x86.h @@ -0,0 +1 @@ +../../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/new_dynarec/x86/assem_x86.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/pure_interp.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/pure_interp.h new file mode 120000 index 0000000..b98c584 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/pure_interp.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/pure_interp.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/r4300_core.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/r4300_core.h new file mode 120000 index 0000000..f91a916 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/r4300_core.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/r4300_core.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp.h new file mode 120000 index 0000000..0ec5441 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp_types.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp_types.h new file mode 120000 index 0000000..cacc86d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp_types.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/recomp_types.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/tlb.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/tlb.h new file mode 120000 index 0000000..efd0488 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/tlb.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/tlb.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble.h new file mode 120000 index 0000000..237d7d7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble_struct.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble_struct.h new file mode 120000 index 0000000..7944730 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble_struct.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/assemble_struct.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/interpret.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/interpret.h new file mode 120000 index 0000000..4548f3e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/interpret.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/interpret.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/regcache.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/regcache.h new file mode 120000 index 0000000..acb88a3 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/regcache.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86/regcache.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble.h new file mode 120000 index 0000000..c35d2ed --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble_struct.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble_struct.h new file mode 120000 index 0000000..3c9a3d0 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble_struct.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/assemble_struct.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/interpret.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/interpret.h new file mode 120000 index 0000000..17e6167 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/interpret.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/interpret.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/regcache.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/regcache.h new file mode 120000 index 0000000..4bef9d1 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/regcache.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/r4300/x86_64/regcache.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ai/ai_controller.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ai/ai_controller.h new file mode 120000 index 0000000..b777987 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ai/ai_controller.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ai/ai_controller.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/mi/mi_controller.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/mi/mi_controller.h new file mode 120000 index 0000000..be965e8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/mi/mi_controller.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/mi/mi_controller.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/pi/pi_controller.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/pi/pi_controller.h new file mode 120000 index 0000000..9007daa --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/pi/pi_controller.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/pi/pi_controller.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/fb.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/fb.h new file mode 120000 index 0000000..e0b3b00 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/fb.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/fb.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/rdp_core.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/rdp_core.h new file mode 120000 index 0000000..1a4ad47 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/rdp_core.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rdp/rdp_core.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ri/ri_controller.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ri/ri_controller.h new file mode 120000 index 0000000..ae97982 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ri/ri_controller.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/ri/ri_controller.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rsp/rsp_core.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rsp/rsp_core.h new file mode 120000 index 0000000..af6061e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rsp/rsp_core.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/rsp/rsp_core.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/si/si_controller.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/si/si_controller.h new file mode 120000 index 0000000..c588ea2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/si/si_controller.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/si/si_controller.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/vi/vi_controller.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/vi/vi_controller.h new file mode 120000 index 0000000..1faf55f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/vi/vi_controller.h @@ -0,0 +1 @@ +../../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rcp/vi/vi_controller.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rdram/rdram.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rdram/rdram.h new file mode 120000 index 0000000..aaa30e5 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rdram/rdram.h @@ -0,0 +1 @@ +../../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/device/rdram/rdram.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/cheat.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/cheat.h new file mode 120000 index 0000000..4ba081c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/cheat.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/cheat.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/eventloop.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/eventloop.h new file mode 120000 index 0000000..e96cad7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/eventloop.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/eventloop.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/lirc.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/lirc.h new file mode 120000 index 0000000..c6e08b8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/lirc.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/lirc.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/list.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/list.h new file mode 120000 index 0000000..111b67b --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/list.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/list.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/main.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/main.h new file mode 120000 index 0000000..99bced2 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/main.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/main.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/profile.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/profile.h new file mode 120000 index 0000000..a494eda --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/profile.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/profile.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/rom.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/rom.h new file mode 120000 index 0000000..228cdb8 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/rom.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/rom.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/savestates.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/savestates.h new file mode 120000 index 0000000..d1ad5dd --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/savestates.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/savestates.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/screenshot.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/screenshot.h new file mode 120000 index 0000000..3383359 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/screenshot.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/screenshot.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/sdl_key_converter.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/sdl_key_converter.h new file mode 120000 index 0000000..424994a --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/sdl_key_converter.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/sdl_key_converter.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/util.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/util.h new file mode 120000 index 0000000..76517dd --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/util.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/util.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/version.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/version.h new file mode 120000 index 0000000..9aecfd6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/version.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/version.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/workqueue.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/workqueue.h new file mode 120000 index 0000000..9d25dee --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/workqueue.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/main/workqueue.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/dynamiclib.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/dynamiclib.h new file mode 120000 index 0000000..73d4b92 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/dynamiclib.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/dynamiclib.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/files.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/files.h new file mode 120000 index 0000000..7a25314 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/files.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/files.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/preproc.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/preproc.h new file mode 120000 index 0000000..29ddd15 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/preproc.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osal/preproc.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/oglft_c.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/oglft_c.h new file mode 120000 index 0000000..dbf052a --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/oglft_c.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/oglft_c.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/osd.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/osd.h new file mode 120000 index 0000000..059d445 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/osd.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd/osd.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_audio.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_audio.h new file mode 120000 index 0000000..b9b3926 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_audio.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_audio.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_input.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_input.h new file mode 120000 index 0000000..92b8bfb --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_input.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_input.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_rsp.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_rsp.h new file mode 120000 index 0000000..cbcbadb --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_rsp.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_rsp.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_video.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_video.h new file mode 120000 index 0000000..18f3536 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_video.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/dummy_video.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/plugin.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/plugin.h new file mode 120000 index 0000000..1a9b546 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/plugin.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/plugin/plugin.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/md5/md5.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/md5/md5.h new file mode 120000 index 0000000..f6d3159 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/md5/md5.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/md5/md5.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/crypt.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/crypt.h new file mode 120000 index 0000000..d56c5e0 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/crypt.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/crypt.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/ioapi.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/ioapi.h new file mode 120000 index 0000000..c21af5e --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/ioapi.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/ioapi.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/unzip.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/unzip.h new file mode 120000 index 0000000..b8793e6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/unzip.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/unzip.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/zip.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/zip.h new file mode 120000 index 0000000..955cb6c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/zip.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/minizip/zip.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/oglft/OGLFT.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/oglft/OGLFT.h new file mode 120000 index 0000000..55fb7b6 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/oglft/OGLFT.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/oglft/OGLFT.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/xxhash/xxhash.h b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/xxhash/xxhash.h new file mode 120000 index 0000000..851b50f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/xxhash/xxhash.h @@ -0,0 +1 @@ +../../../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/xxhash/xxhash.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h b/Pods/Headers/Private/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h new file mode 120000 index 0000000..d1cd9c0 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/N64DeltaCore/N64DeltaCore.h b/Pods/Headers/Private/N64DeltaCore/N64DeltaCore/N64DeltaCore.h new file mode 120000 index 0000000..05ec03f --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/N64DeltaCore/N64DeltaCore.h @@ -0,0 +1 @@ +../../../../../Cores/N64DeltaCore/N64DeltaCore/N64DeltaCore.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/N64DeltaCore/Types/N64Types.h b/Pods/Headers/Private/N64DeltaCore/N64DeltaCore/Types/N64Types.h new file mode 120000 index 0000000..3d771d7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/N64DeltaCore/Types/N64Types.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/N64DeltaCore/Types/N64Types.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL.h b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL.h new file mode 120000 index 0000000..98b89ed --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/libMupen64Plus/SDL/SDL.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_config.h b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_config.h new file mode 120000 index 0000000..87522a1 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_config.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/libMupen64Plus/SDL/SDL_config.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_opengl.h b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_opengl.h new file mode 120000 index 0000000..2b17d23 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_opengl.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/libMupen64Plus/SDL/SDL_opengl.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_opengles2.h b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_opengles2.h new file mode 120000 index 0000000..3bbc8d7 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_opengles2.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/libMupen64Plus/SDL/SDL_opengles2.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_thread.h b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_thread.h new file mode 120000 index 0000000..6b9639a --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/libMupen64Plus/SDL/SDL_thread.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/libMupen64Plus/SDL/SDL_thread.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/alist.h b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/alist.h new file mode 120000 index 0000000..5b158a5 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/alist.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-rsp-hle/src/alist.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/arithmetics.h b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/arithmetics.h new file mode 120000 index 0000000..e9e7b4d --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/arithmetics.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-rsp-hle/src/arithmetics.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/audio.h b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/audio.h new file mode 120000 index 0000000..09f02e4 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/audio.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-rsp-hle/src/audio.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/common.h b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/common.h new file mode 120000 index 0000000..5f55392 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/common.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-rsp-hle/src/common.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle.h b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle.h new file mode 120000 index 0000000..3c5990c --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-rsp-hle/src/hle.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle_external.h b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle_external.h new file mode 120000 index 0000000..e0f0938 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle_external.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-rsp-hle/src/hle_external.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle_internal.h b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle_internal.h new file mode 120000 index 0000000..79be119 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/hle_internal.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-rsp-hle/src/hle_internal.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/osal_dynamiclib.h b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/osal_dynamiclib.h new file mode 120000 index 0000000..0774467 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/osal_dynamiclib.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-rsp-hle/src/osal_dynamiclib.h \ No newline at end of file diff --git a/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/ucodes.h b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/ucodes.h new file mode 120000 index 0000000..c4c0e44 --- /dev/null +++ b/Pods/Headers/Private/N64DeltaCore/mupen64plus-rsp-hle/src/ucodes.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/Mupen64Plus/mupen64plus-rsp-hle/src/ucodes.h \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/NESDeltaCore/NESDeltaCore.h b/Pods/Headers/Private/NESDeltaCore/NESDeltaCore/NESDeltaCore.h new file mode 120000 index 0000000..9bda193 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/NESDeltaCore/NESDeltaCore.h @@ -0,0 +1 @@ +../../../../../Cores/NESDeltaCore/NESDeltaCore/NESDeltaCore.h \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstApu.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstApu.hpp new file mode 120000 index 0000000..8096247 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstApu.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstApu.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstAssert.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstAssert.hpp new file mode 120000 index 0000000..2e2e3a1 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstAssert.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstAssert.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstBarcodeReader.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstBarcodeReader.hpp new file mode 120000 index 0000000..73fcdb8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstBarcodeReader.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstBarcodeReader.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstBase.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstBase.hpp new file mode 120000 index 0000000..45edea4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstBase.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstBase.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridge.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridge.hpp new file mode 120000 index 0000000..39b0895 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridge.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstCartridge.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeInes.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeInes.hpp new file mode 120000 index 0000000..31003be --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeInes.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstCartridgeInes.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeRomset.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeRomset.hpp new file mode 120000 index 0000000..fb788c4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeRomset.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstCartridgeRomset.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeUnif.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeUnif.hpp new file mode 120000 index 0000000..49571b5 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCartridgeUnif.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstCartridgeUnif.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCheats.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCheats.hpp new file mode 120000 index 0000000..6660cb6 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCheats.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstCheats.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstChecksum.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstChecksum.hpp new file mode 120000 index 0000000..bda09d0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstChecksum.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstChecksum.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstChips.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstChips.hpp new file mode 120000 index 0000000..5d7c94b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstChips.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstChips.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCore.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCore.hpp new file mode 120000 index 0000000..d33dde6 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCore.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstCore.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCpu.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCpu.hpp new file mode 120000 index 0000000..b677ed5 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCpu.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstCpu.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCrc32.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCrc32.hpp new file mode 120000 index 0000000..a38ffcc --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstCrc32.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstCrc32.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstDipSwitches.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstDipSwitches.hpp new file mode 120000 index 0000000..25cd344 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstDipSwitches.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstDipSwitches.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFds.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFds.hpp new file mode 120000 index 0000000..d268322 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFds.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstFds.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFile.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFile.hpp new file mode 120000 index 0000000..d6adc34 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFile.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstFile.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFpuPrecision.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFpuPrecision.hpp new file mode 120000 index 0000000..06801ad --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstFpuPrecision.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstFpuPrecision.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstHook.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstHook.hpp new file mode 120000 index 0000000..2b573ae --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstHook.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstHook.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstImage.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstImage.hpp new file mode 120000 index 0000000..159ad03 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstImage.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstImage.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstImageDatabase.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstImageDatabase.hpp new file mode 120000 index 0000000..78722e3 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstImageDatabase.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstImageDatabase.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoAccessor.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoAccessor.hpp new file mode 120000 index 0000000..26702ff --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoAccessor.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstIoAccessor.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoLine.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoLine.hpp new file mode 120000 index 0000000..f530647 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoLine.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstIoLine.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoMap.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoMap.hpp new file mode 120000 index 0000000..0cedbf0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoMap.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstIoMap.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoPort.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoPort.hpp new file mode 120000 index 0000000..edc9f03 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstIoPort.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstIoPort.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstLog.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstLog.hpp new file mode 120000 index 0000000..37c3fea --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstLog.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstLog.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstMachine.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstMachine.hpp new file mode 120000 index 0000000..3e7a61c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstMachine.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstMachine.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstMemory.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstMemory.hpp new file mode 120000 index 0000000..c25297b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstMemory.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstMemory.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstNsf.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstNsf.hpp new file mode 120000 index 0000000..865d6b8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstNsf.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstNsf.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcher.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcher.hpp new file mode 120000 index 0000000..5452ae0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcher.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstPatcher.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcherIps.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcherIps.hpp new file mode 120000 index 0000000..ab2f6a7 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcherIps.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstPatcherIps.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcherUps.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcherUps.hpp new file mode 120000 index 0000000..ae15ac2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPatcherUps.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstPatcherUps.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPins.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPins.hpp new file mode 120000 index 0000000..70a8806 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPins.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstPins.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPpu.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPpu.hpp new file mode 120000 index 0000000..589dab3 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstPpu.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstPpu.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstProperties.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstProperties.hpp new file mode 120000 index 0000000..354354c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstProperties.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstProperties.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstRam.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstRam.hpp new file mode 120000 index 0000000..5c12417 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstRam.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstRam.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSha1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSha1.hpp new file mode 120000 index 0000000..fe4bbea --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSha1.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstSha1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundPcm.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundPcm.hpp new file mode 120000 index 0000000..61597a7 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundPcm.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstSoundPcm.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundPlayer.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundPlayer.hpp new file mode 120000 index 0000000..abb324c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundPlayer.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstSoundPlayer.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundRenderer.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundRenderer.hpp new file mode 120000 index 0000000..ba2846b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstSoundRenderer.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstSoundRenderer.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstState.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstState.hpp new file mode 120000 index 0000000..d338cf0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstState.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstState.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstStream.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstStream.hpp new file mode 120000 index 0000000..dc75e98 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstStream.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstStream.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTimer.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTimer.hpp new file mode 120000 index 0000000..5373009 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTimer.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstTimer.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTracker.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTracker.hpp new file mode 120000 index 0000000..2341854 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTracker.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstTracker.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTrackerMovie.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTrackerMovie.hpp new file mode 120000 index 0000000..5b3694a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTrackerMovie.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstTrackerMovie.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTrackerRewinder.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTrackerRewinder.hpp new file mode 120000 index 0000000..b13ec2a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstTrackerRewinder.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstTrackerRewinder.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVector.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVector.hpp new file mode 120000 index 0000000..caba6ee --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVector.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstVector.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilter2xSaI.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilter2xSaI.hpp new file mode 120000 index 0000000..80abc87 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilter2xSaI.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstVideoFilter2xSaI.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterHqX.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterHqX.hpp new file mode 120000 index 0000000..d880440 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterHqX.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstVideoFilterHqX.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterNone.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterNone.hpp new file mode 120000 index 0000000..7aec95f --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterNone.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstVideoFilterNone.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterNtsc.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterNtsc.hpp new file mode 120000 index 0000000..d911e60 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterNtsc.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstVideoFilterNtsc.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterScaleX.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterScaleX.hpp new file mode 120000 index 0000000..7c0b159 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterScaleX.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstVideoFilterScaleX.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterxBR.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterxBR.hpp new file mode 120000 index 0000000..d60d102 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoFilterxBR.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstVideoFilterxBR.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoRenderer.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoRenderer.hpp new file mode 120000 index 0000000..b04f377 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoRenderer.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstVideoRenderer.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoScreen.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoScreen.hpp new file mode 120000 index 0000000..21295d6 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstVideoScreen.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstVideoScreen.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstXml.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstXml.hpp new file mode 120000 index 0000000..3090beb --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstXml.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstXml.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstZlib.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstZlib.hpp new file mode 120000 index 0000000..a5d23e8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/NstZlib.hpp @@ -0,0 +1 @@ +../../../../../../../Cores/NESDeltaCore/nestopia/source/core/NstZlib.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApi.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApi.hpp new file mode 120000 index 0000000..3c1d768 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApi.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApi.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiBarcodeReader.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiBarcodeReader.hpp new file mode 120000 index 0000000..d608835 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiBarcodeReader.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiBarcodeReader.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiCartridge.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiCartridge.hpp new file mode 120000 index 0000000..9c8ba20 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiCartridge.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiCartridge.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiCheats.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiCheats.hpp new file mode 120000 index 0000000..88ca325 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiCheats.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiCheats.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiConfig.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiConfig.hpp new file mode 120000 index 0000000..bc5ff68 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiConfig.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiConfig.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiDipSwitches.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiDipSwitches.hpp new file mode 120000 index 0000000..2e35eaf --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiDipSwitches.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiDipSwitches.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiEmulator.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiEmulator.hpp new file mode 120000 index 0000000..f82b406 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiEmulator.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiEmulator.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiFds.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiFds.hpp new file mode 120000 index 0000000..0071921 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiFds.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiFds.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiInput.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiInput.hpp new file mode 120000 index 0000000..c9a55b6 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiInput.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiInput.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiMachine.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiMachine.hpp new file mode 120000 index 0000000..76c2125 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiMachine.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiMachine.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiMovie.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiMovie.hpp new file mode 120000 index 0000000..64504c1 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiMovie.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiMovie.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiNsf.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiNsf.hpp new file mode 120000 index 0000000..f9d85e0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiNsf.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiNsf.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiRewinder.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiRewinder.hpp new file mode 120000 index 0000000..f221965 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiRewinder.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiRewinder.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiSound.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiSound.hpp new file mode 120000 index 0000000..b3be42d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiSound.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiSound.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiTapeRecorder.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiTapeRecorder.hpp new file mode 120000 index 0000000..e4a51e9 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiTapeRecorder.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiTapeRecorder.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiUser.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiUser.hpp new file mode 120000 index 0000000..9e532a4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiUser.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiUser.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiVideo.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiVideo.hpp new file mode 120000 index 0000000..afe72a6 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/api/NstApiVideo.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/api/NstApiVideo.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoard.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoard.hpp new file mode 120000 index 0000000..a62d9c2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoard.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoard.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaim.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaim.hpp new file mode 120000 index 0000000..a5cdc39 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaim.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaim.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaimMcAcc.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaimMcAcc.hpp new file mode 120000 index 0000000..cc08e63 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaimMcAcc.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardAcclaimMcAcc.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAe.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAe.hpp new file mode 120000 index 0000000..593b240 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAe.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardAe.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAgci.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAgci.hpp new file mode 120000 index 0000000..2ac6063 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAgci.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardAgci.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAve.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAve.hpp new file mode 120000 index 0000000..5eff31d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAve.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardAve.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAveD1012.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAveD1012.hpp new file mode 120000 index 0000000..5201cdf --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAveD1012.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardAveD1012.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAveNina.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAveNina.hpp new file mode 120000 index 0000000..c6fa1eb --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAveNina.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardAveNina.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAxRom.hpp new file mode 120000 index 0000000..d0c1b61 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardAxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardAxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandai.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandai.hpp new file mode 120000 index 0000000..e81ae6a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandai.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBandai.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandai24c0x.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandai24c0x.hpp new file mode 120000 index 0000000..bca5e3a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandai24c0x.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBandai24c0x.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiAerobicsStudio.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiAerobicsStudio.hpp new file mode 120000 index 0000000..bf8a5a0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiAerobicsStudio.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiAerobicsStudio.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiDatach.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiDatach.hpp new file mode 120000 index 0000000..55767f9 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiDatach.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiDatach.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiKaraokeStudio.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiKaraokeStudio.hpp new file mode 120000 index 0000000..f1ba42b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiKaraokeStudio.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiKaraokeStudio.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50.hpp new file mode 120000 index 0000000..5ffaac8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50ex.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50ex.hpp new file mode 120000 index 0000000..81a941a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50ex.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiLz93d50ex.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiOekaKids.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiOekaKids.hpp new file mode 120000 index 0000000..7d8d77f --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiOekaKids.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBandaiOekaKids.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBenshengBs5.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBenshengBs5.hpp new file mode 120000 index 0000000..dc036ed --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBenshengBs5.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBenshengBs5.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc110in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc110in1.hpp new file mode 120000 index 0000000..6893f54 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc110in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc110in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc1200in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc1200in1.hpp new file mode 120000 index 0000000..24f6f1c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc1200in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc1200in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc150in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc150in1.hpp new file mode 120000 index 0000000..baae16c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc150in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc150in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc15in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc15in1.hpp new file mode 120000 index 0000000..2a13ebf --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc15in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc15in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc20in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc20in1.hpp new file mode 120000 index 0000000..48d2e13 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc20in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc20in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc21in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc21in1.hpp new file mode 120000 index 0000000..97a222a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc21in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc21in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc22Games.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc22Games.hpp new file mode 120000 index 0000000..56b8e16 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc22Games.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc22Games.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc31in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc31in1.hpp new file mode 120000 index 0000000..14090d5 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc31in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc31in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc35in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc35in1.hpp new file mode 120000 index 0000000..5703800 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc35in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc35in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc36in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc36in1.hpp new file mode 120000 index 0000000..2529c34 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc36in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc36in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc64in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc64in1.hpp new file mode 120000 index 0000000..7e2bc89 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc64in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc64in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc72in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc72in1.hpp new file mode 120000 index 0000000..f45848a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc72in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc72in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc76in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc76in1.hpp new file mode 120000 index 0000000..a94051f --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc76in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc76in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc800in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc800in1.hpp new file mode 120000 index 0000000..266292b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc800in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc800in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc8157.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc8157.hpp new file mode 120000 index 0000000..399de8d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc8157.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc8157.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc9999999in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc9999999in1.hpp new file mode 120000 index 0000000..9a6b6ac --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmc9999999in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmc9999999in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcA65as.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcA65as.hpp new file mode 120000 index 0000000..4d98314 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcA65as.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcA65as.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcBallgames11in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcBallgames11in1.hpp new file mode 120000 index 0000000..23bfde3 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcBallgames11in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcBallgames11in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCh001.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCh001.hpp new file mode 120000 index 0000000..1e51f1b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCh001.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCh001.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCtc65.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCtc65.hpp new file mode 120000 index 0000000..7e6f1a2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCtc65.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcCtc65.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFamily4646B.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFamily4646B.hpp new file mode 120000 index 0000000..beb7e37 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFamily4646B.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFamily4646B.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFk23c.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFk23c.hpp new file mode 120000 index 0000000..188cf0d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFk23c.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcFk23c.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarA.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarA.hpp new file mode 120000 index 0000000..2a8e556 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarA.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarA.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarB.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarB.hpp new file mode 120000 index 0000000..36e1269 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarB.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGamestarB.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGolden190in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGolden190in1.hpp new file mode 120000 index 0000000..f8c7bd4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGolden190in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGolden190in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenCard6in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenCard6in1.hpp new file mode 120000 index 0000000..9c19a78 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenCard6in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenCard6in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenGame260in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenGame260in1.hpp new file mode 120000 index 0000000..87571bb --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenGame260in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcGoldenGame260in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcHero.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcHero.hpp new file mode 120000 index 0000000..4fa30bd --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcHero.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcHero.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcMarioParty7in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcMarioParty7in1.hpp new file mode 120000 index 0000000..e09be71 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcMarioParty7in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcMarioParty7in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcNovelDiamond.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcNovelDiamond.hpp new file mode 120000 index 0000000..f448f72 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcNovelDiamond.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcNovelDiamond.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcPowerjoy84in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcPowerjoy84in1.hpp new file mode 120000 index 0000000..be8420b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcPowerjoy84in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcPowerjoy84in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcResetBased4in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcResetBased4in1.hpp new file mode 120000 index 0000000..018d92b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcResetBased4in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcResetBased4in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper22Games.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper22Games.hpp new file mode 120000 index 0000000..5f95d53 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper22Games.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper22Games.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper24in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper24in1.hpp new file mode 120000 index 0000000..e759a10 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper24in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper24in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper40in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper40in1.hpp new file mode 120000 index 0000000..88117a0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper40in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper40in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper700in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper700in1.hpp new file mode 120000 index 0000000..f0727c4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper700in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuper700in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperBig7in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperBig7in1.hpp new file mode 120000 index 0000000..80f3750 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperBig7in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperBig7in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperGun20in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperGun20in1.hpp new file mode 120000 index 0000000..7de2b24 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperGun20in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperGun20in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK300in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK300in1.hpp new file mode 120000 index 0000000..13c3a07 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK300in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK300in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK4in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK4in1.hpp new file mode 120000 index 0000000..f71c272 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK4in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperHiK4in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperVision16in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperVision16in1.hpp new file mode 120000 index 0000000..9165fe4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperVision16in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcSuperVision16in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcT262.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcT262.hpp new file mode 120000 index 0000000..723142c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcT262.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcT262.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVrc4.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVrc4.hpp new file mode 120000 index 0000000..13a4496 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVrc4.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVrc4.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVt5201.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVt5201.hpp new file mode 120000 index 0000000..3aca4d3 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVt5201.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcVt5201.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcY2k64in1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcY2k64in1.hpp new file mode 120000 index 0000000..c76dec9 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBmcY2k64in1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBmcY2k64in1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtl2708.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtl2708.hpp new file mode 120000 index 0000000..eb0c9b8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtl2708.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtl2708.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtl6035052.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtl6035052.hpp new file mode 120000 index 0000000..318e901 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtl6035052.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtl6035052.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlAx5705.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlAx5705.hpp new file mode 120000 index 0000000..2c7ceae --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlAx5705.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlAx5705.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlDragonNinja.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlDragonNinja.hpp new file mode 120000 index 0000000..2bf9489 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlDragonNinja.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlDragonNinja.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlGeniusMerioBros.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlGeniusMerioBros.hpp new file mode 120000 index 0000000..d30d55d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlGeniusMerioBros.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlGeniusMerioBros.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlMarioBaby.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlMarioBaby.hpp new file mode 120000 index 0000000..65dc515 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlMarioBaby.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlMarioBaby.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlPikachuY2k.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlPikachuY2k.hpp new file mode 120000 index 0000000..f489fd6 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlPikachuY2k.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlPikachuY2k.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlShuiGuanPipe.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlShuiGuanPipe.hpp new file mode 120000 index 0000000..d6e65e4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlShuiGuanPipe.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlShuiGuanPipe.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2a.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2a.hpp new file mode 120000 index 0000000..ada6a8d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2a.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2a.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2b.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2b.hpp new file mode 120000 index 0000000..b5503aa --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2b.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2b.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2c.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2c.hpp new file mode 120000 index 0000000..68adf2e --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2c.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb2c.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb3.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb3.hpp new file mode 120000 index 0000000..8e0a1ec --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb3.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSmb3.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSuperBros11.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSuperBros11.hpp new file mode 120000 index 0000000..2363aa0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSuperBros11.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlSuperBros11.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlT230.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlT230.hpp new file mode 120000 index 0000000..b0a053b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlT230.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlT230.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlTobidaseDaisakusen.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlTobidaseDaisakusen.hpp new file mode 120000 index 0000000..c768860 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBtlTobidaseDaisakusen.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBtlTobidaseDaisakusen.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBxRom.hpp new file mode 120000 index 0000000..251c42d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardBxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardBxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCaltron.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCaltron.hpp new file mode 120000 index 0000000..f538df1 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCaltron.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardCaltron.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCamerica.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCamerica.hpp new file mode 120000 index 0000000..3982247 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCamerica.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardCamerica.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCne.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCne.hpp new file mode 120000 index 0000000..85b7310 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCne.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardCne.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCneDecathlon.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCneDecathlon.hpp new file mode 120000 index 0000000..95de3e2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCneDecathlon.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardCneDecathlon.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCnePsb.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCnePsb.hpp new file mode 120000 index 0000000..ceeb87c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCnePsb.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardCnePsb.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCneShlz.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCneShlz.hpp new file mode 120000 index 0000000..a198858 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCneShlz.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardCneShlz.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCony.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCony.hpp new file mode 120000 index 0000000..4dd7e46 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCony.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardCony.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCxRom.hpp new file mode 120000 index 0000000..d8deb49 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardCxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardCxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDiscrete.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDiscrete.hpp new file mode 120000 index 0000000..2f084ea --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDiscrete.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardDiscrete.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDreamtech.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDreamtech.hpp new file mode 120000 index 0000000..ff06ade --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDreamtech.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardDreamtech.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDxRom.hpp new file mode 120000 index 0000000..dda3aed --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardDxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardDxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardEvent.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardEvent.hpp new file mode 120000 index 0000000..7ce5539 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardEvent.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardEvent.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardExRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardExRom.hpp new file mode 120000 index 0000000..f8c8cc6 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardExRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardExRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFb.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFb.hpp new file mode 120000 index 0000000..ecac6bd --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFb.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardFb.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFfe.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFfe.hpp new file mode 120000 index 0000000..0593c98 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFfe.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardFfe.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFujiya.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFujiya.hpp new file mode 120000 index 0000000..78132d0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFujiya.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardFujiya.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFukutake.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFukutake.hpp new file mode 120000 index 0000000..2bed732 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFukutake.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardFukutake.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFutureMedia.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFutureMedia.hpp new file mode 120000 index 0000000..086a497 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFutureMedia.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardFutureMedia.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFxRom.hpp new file mode 120000 index 0000000..d503b05 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardFxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardFxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardGouder.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardGouder.hpp new file mode 120000 index 0000000..c7b1c64 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardGouder.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardGouder.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardGxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardGxRom.hpp new file mode 120000 index 0000000..8d84a7d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardGxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardGxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHenggedianzi.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHenggedianzi.hpp new file mode 120000 index 0000000..432150c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHenggedianzi.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardHenggedianzi.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHes.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHes.hpp new file mode 120000 index 0000000..f865596 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHes.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardHes.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHosenkan.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHosenkan.hpp new file mode 120000 index 0000000..81c5e7c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHosenkan.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardHosenkan.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHxRom.hpp new file mode 120000 index 0000000..a71408d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardHxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardHxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIrem.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIrem.hpp new file mode 120000 index 0000000..1470928 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIrem.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardIrem.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremG101.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremG101.hpp new file mode 120000 index 0000000..02d3379 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremG101.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardIremG101.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremH3001.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremH3001.hpp new file mode 120000 index 0000000..54e4315 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremH3001.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardIremH3001.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremHolyDiver.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremHolyDiver.hpp new file mode 120000 index 0000000..55ed831 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremHolyDiver.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardIremHolyDiver.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremKaiketsu.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremKaiketsu.hpp new file mode 120000 index 0000000..d518a2c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremKaiketsu.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardIremKaiketsu.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremLrog017.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremLrog017.hpp new file mode 120000 index 0000000..0f60d38 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardIremLrog017.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardIremLrog017.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJaleco.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJaleco.hpp new file mode 120000 index 0000000..8b0ef8d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJaleco.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardJaleco.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf11.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf11.hpp new file mode 120000 index 0000000..7e5dfae --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf11.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf11.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf13.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf13.hpp new file mode 120000 index 0000000..e624883 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf13.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf13.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf16.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf16.hpp new file mode 120000 index 0000000..1d7ce7b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf16.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf16.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf17.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf17.hpp new file mode 120000 index 0000000..5238e31 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf17.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf17.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf19.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf19.hpp new file mode 120000 index 0000000..889dec2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf19.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoJf19.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoSs88006.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoSs88006.hpp new file mode 120000 index 0000000..60a1b69 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoSs88006.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardJalecoSs88006.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJxRom.hpp new file mode 120000 index 0000000..4bf7209 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardJxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJyCompany.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJyCompany.hpp new file mode 120000 index 0000000..8b708bc --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardJyCompany.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardJyCompany.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKaiser.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKaiser.hpp new file mode 120000 index 0000000..94da319 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKaiser.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKaiser.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKasing.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKasing.hpp new file mode 120000 index 0000000..faf87a0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKasing.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKasing.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKay.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKay.hpp new file mode 120000 index 0000000..c56abf4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKay.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKay.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKayH2288.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKayH2288.hpp new file mode 120000 index 0000000..6a2b9b7 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKayH2288.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKayH2288.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKayPandaPrince.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKayPandaPrince.hpp new file mode 120000 index 0000000..0cc15b2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKayPandaPrince.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKayPandaPrince.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonami.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonami.hpp new file mode 120000 index 0000000..a27f1f0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonami.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKonami.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc1.hpp new file mode 120000 index 0000000..a959b9d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc2.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc2.hpp new file mode 120000 index 0000000..0792a35 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc2.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc2.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc3.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc3.hpp new file mode 120000 index 0000000..b0a3593 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc3.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc3.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc4.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc4.hpp new file mode 120000 index 0000000..76f16fb --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc4.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc4.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc6.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc6.hpp new file mode 120000 index 0000000..02f1b6b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc6.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc6.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc7.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc7.hpp new file mode 120000 index 0000000..0e39778 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc7.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVrc7.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVsSystem.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVsSystem.hpp new file mode 120000 index 0000000..5dd62b9 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVsSystem.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardKonamiVsSystem.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMagicSeries.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMagicSeries.hpp new file mode 120000 index 0000000..496eb8e --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMagicSeries.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardMagicSeries.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc1.hpp new file mode 120000 index 0000000..5b830e0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardMmc1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc2.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc2.hpp new file mode 120000 index 0000000..925b697 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc2.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardMmc2.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc3.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc3.hpp new file mode 120000 index 0000000..44d837b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc3.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardMmc3.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc4.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc4.hpp new file mode 120000 index 0000000..03f24e2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc4.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardMmc4.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc5.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc5.hpp new file mode 120000 index 0000000..8b16517 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc5.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardMmc5.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc6.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc6.hpp new file mode 120000 index 0000000..e83af24 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMmc6.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardMmc6.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMxRom.hpp new file mode 120000 index 0000000..4dfb6c4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardMxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardMxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNRom.hpp new file mode 120000 index 0000000..7a555c1 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot.hpp new file mode 120000 index 0000000..dc0d643 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot163.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot163.hpp new file mode 120000 index 0000000..696b01d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot163.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot163.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot175.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot175.hpp new file mode 120000 index 0000000..d276209 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot175.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot175.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot34xx.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot34xx.hpp new file mode 120000 index 0000000..6f3a979 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot34xx.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNamcot34xx.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNanjing.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNanjing.hpp new file mode 120000 index 0000000..ccb4eb8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNanjing.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNanjing.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNihon.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNihon.hpp new file mode 120000 index 0000000..76143ec --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNihon.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNihon.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNitra.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNitra.hpp new file mode 120000 index 0000000..950ab74 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNitra.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNitra.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNtdec.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNtdec.hpp new file mode 120000 index 0000000..f5e542d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNtdec.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNtdec.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNxRom.hpp new file mode 120000 index 0000000..cebe0d7 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardNxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardNxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardOpenCorp.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardOpenCorp.hpp new file mode 120000 index 0000000..fefb9b6 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardOpenCorp.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardOpenCorp.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardPxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardPxRom.hpp new file mode 120000 index 0000000..b0df8db --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardPxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardPxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardQj.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardQj.hpp new file mode 120000 index 0000000..fb0c584 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardQj.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardQj.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRcm.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRcm.hpp new file mode 120000 index 0000000..cc045b0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRcm.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardRcm.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoft.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoft.hpp new file mode 120000 index 0000000..54211b9 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoft.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoft.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftDb5z.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftDb5z.hpp new file mode 120000 index 0000000..117b478 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftDb5z.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftDb5z.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftSl1632.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftSl1632.hpp new file mode 120000 index 0000000..fe4979a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftSl1632.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardRexSoftSl1632.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRumbleStation.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRumbleStation.hpp new file mode 120000 index 0000000..3662e48 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardRumbleStation.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardRumbleStation.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachen.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachen.hpp new file mode 120000 index 0000000..24955d1 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachen.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachen.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachen74x374.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachen74x374.hpp new file mode 120000 index 0000000..c885d49 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachen74x374.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachen74x374.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenS8259.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenS8259.hpp new file mode 120000 index 0000000..526d666 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenS8259.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachenS8259.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0036.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0036.hpp new file mode 120000 index 0000000..68cd261 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0036.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0036.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0037.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0037.hpp new file mode 120000 index 0000000..cfb8a63 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0037.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa0037.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72007.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72007.hpp new file mode 120000 index 0000000..fc1fa3b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72007.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72007.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72008.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72008.hpp new file mode 120000 index 0000000..17d4d9f --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72008.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachenSa72008.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenStreetHeroes.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenStreetHeroes.hpp new file mode 120000 index 0000000..f5d0ef7 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenStreetHeroes.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachenStreetHeroes.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTca01.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTca01.hpp new file mode 120000 index 0000000..1a2c128 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTca01.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTca01.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTcu.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTcu.hpp new file mode 120000 index 0000000..90c1b8b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTcu.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSachenTcu.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeam.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeam.hpp new file mode 120000 index 0000000..b4f3729 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeam.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeam.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeamSl12.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeamSl12.hpp new file mode 120000 index 0000000..1a69c61 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeamSl12.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSomeriTeamSl12.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSubor.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSubor.hpp new file mode 120000 index 0000000..58944fc --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSubor.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSubor.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft.hpp new file mode 120000 index 0000000..8e1b6f0 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft1.hpp new file mode 120000 index 0000000..1682170 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft2.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft2.hpp new file mode 120000 index 0000000..150a393 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft2.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft2.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft3.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft3.hpp new file mode 120000 index 0000000..91dc3ba --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft3.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft3.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft4.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft4.hpp new file mode 120000 index 0000000..4834071 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft4.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft4.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft5b.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft5b.hpp new file mode 120000 index 0000000..3e633be --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft5b.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoft5b.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftDcs.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftDcs.hpp new file mode 120000 index 0000000..b0e1a21 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftDcs.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftDcs.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftFme7.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftFme7.hpp new file mode 120000 index 0000000..6821ad8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftFme7.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSunsoftFme7.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGame.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGame.hpp new file mode 120000 index 0000000..84c5b34 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGame.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGame.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameBoogerman.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameBoogerman.hpp new file mode 120000 index 0000000..3987250 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameBoogerman.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameBoogerman.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameLionKing.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameLionKing.hpp new file mode 120000 index 0000000..b7594ec --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameLionKing.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGameLionKing.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGamePocahontas2.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGamePocahontas2.hpp new file mode 120000 index 0000000..904d4fc --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGamePocahontas2.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSuperGamePocahontas2.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSxRom.hpp new file mode 120000 index 0000000..7545534 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardSxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardSxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaito.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaito.hpp new file mode 120000 index 0000000..bf7863b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaito.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTaito.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmc.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmc.hpp new file mode 120000 index 0000000..ac65a3e --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmc.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmc.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmcPal16r4.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmcPal16r4.hpp new file mode 120000 index 0000000..7516960 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmcPal16r4.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoTc0190fmcPal16r4.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1005.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1005.hpp new file mode 120000 index 0000000..de1e60d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1005.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1005.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1017.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1017.hpp new file mode 120000 index 0000000..fa62a8b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1017.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTaitoX1017.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTengen.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTengen.hpp new file mode 120000 index 0000000..2bf6383 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTengen.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTengen.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTengenRambo1.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTengenRambo1.hpp new file mode 120000 index 0000000..5c6f110 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTengenRambo1.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTengenRambo1.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxRom.hpp new file mode 120000 index 0000000..ae7a167 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxc.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxc.hpp new file mode 120000 index 0000000..7565e7e --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxc.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTxc.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcMxmdhtwo.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcMxmdhtwo.hpp new file mode 120000 index 0000000..89ab35e --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcMxmdhtwo.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTxcMxmdhtwo.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcPoliceman.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcPoliceman.hpp new file mode 120000 index 0000000..8f2570c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcPoliceman.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTxcPoliceman.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcTw.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcTw.hpp new file mode 120000 index 0000000..6d02e24 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardTxcTw.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardTxcTw.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlA9746.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlA9746.hpp new file mode 120000 index 0000000..f94e4e8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlA9746.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlA9746.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlCc21.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlCc21.hpp new file mode 120000 index 0000000..0429fbb --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlCc21.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlCc21.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlEdu2000.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlEdu2000.hpp new file mode 120000 index 0000000..3dff9d3 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlEdu2000.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlEdu2000.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters96.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters96.hpp new file mode 120000 index 0000000..ba841ef --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters96.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters96.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters97.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters97.hpp new file mode 120000 index 0000000..dcbed75 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters97.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlKingOfFighters97.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlMortalKombat2.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlMortalKombat2.hpp new file mode 120000 index 0000000..638c4a2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlMortalKombat2.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlMortalKombat2.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlN625092.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlN625092.hpp new file mode 120000 index 0000000..8336a80 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlN625092.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlN625092.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlSuperFighter3.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlSuperFighter3.hpp new file mode 120000 index 0000000..bb30774 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlSuperFighter3.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlSuperFighter3.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlTf1201.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlTf1201.hpp new file mode 120000 index 0000000..383a766 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlTf1201.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlTf1201.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlWorldHero.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlWorldHero.hpp new file mode 120000 index 0000000..99f2de2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlWorldHero.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlWorldHero.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlXzy.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlXzy.hpp new file mode 120000 index 0000000..e8d49bc --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUnlXzy.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUnlXzy.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUxRom.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUxRom.hpp new file mode 120000 index 0000000..a19e67d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardUxRom.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardUxRom.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardVsSystem.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardVsSystem.hpp new file mode 120000 index 0000000..5e7665a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardVsSystem.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardVsSystem.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixing.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixing.hpp new file mode 120000 index 0000000..fda0fa1 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixing.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardWaixing.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingFfv.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingFfv.hpp new file mode 120000 index 0000000..5a45eca --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingFfv.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingFfv.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingPs2.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingPs2.hpp new file mode 120000 index 0000000..47ca826 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingPs2.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingPs2.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSecurity.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSecurity.hpp new file mode 120000 index 0000000..1e85775 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSecurity.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSecurity.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgz.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgz.hpp new file mode 120000 index 0000000..60ecac8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgz.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgz.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgzlz.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgzlz.hpp new file mode 120000 index 0000000..d95f40d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgzlz.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSgzlz.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSh2.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSh2.hpp new file mode 120000 index 0000000..990940e --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSh2.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingSh2.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingZs.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingZs.hpp new file mode 120000 index 0000000..b809bb8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingZs.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardWaixingZs.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWhirlwind.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWhirlwind.hpp new file mode 120000 index 0000000..d78c27b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardWhirlwind.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardWhirlwind.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardZz.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardZz.hpp new file mode 120000 index 0000000..4f66883 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/board/NstBoardZz.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/board/NstBoardZz.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpAdapter.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpAdapter.hpp new file mode 120000 index 0000000..a298029 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpAdapter.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpAdapter.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpBandaiHyperShot.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpBandaiHyperShot.hpp new file mode 120000 index 0000000..90a800c --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpBandaiHyperShot.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpBandaiHyperShot.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpBarcodeWorld.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpBarcodeWorld.hpp new file mode 120000 index 0000000..58a2df2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpBarcodeWorld.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpBarcodeWorld.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpCrazyClimber.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpCrazyClimber.hpp new file mode 120000 index 0000000..a1cd0ce --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpCrazyClimber.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpCrazyClimber.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpDevice.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpDevice.hpp new file mode 120000 index 0000000..c3f15f7 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpDevice.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpDevice.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpDoremikkoKeyboard.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpDoremikkoKeyboard.hpp new file mode 120000 index 0000000..c45a788 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpDoremikkoKeyboard.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpDoremikkoKeyboard.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpExcitingBoxing.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpExcitingBoxing.hpp new file mode 120000 index 0000000..2605d28 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpExcitingBoxing.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpExcitingBoxing.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpFamilyKeyboard.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpFamilyKeyboard.hpp new file mode 120000 index 0000000..d80a6c2 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpFamilyKeyboard.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpFamilyKeyboard.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpFamilyTrainer.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpFamilyTrainer.hpp new file mode 120000 index 0000000..8d4082e --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpFamilyTrainer.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpFamilyTrainer.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpHoriTrack.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpHoriTrack.hpp new file mode 120000 index 0000000..9b532c4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpHoriTrack.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpHoriTrack.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpKonamiHyperShot.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpKonamiHyperShot.hpp new file mode 120000 index 0000000..d928d3f --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpKonamiHyperShot.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpKonamiHyperShot.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpMahjong.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpMahjong.hpp new file mode 120000 index 0000000..c6d1ade --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpMahjong.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpMahjong.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpMouse.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpMouse.hpp new file mode 120000 index 0000000..6251a31 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpMouse.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpMouse.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpOekaKidsTablet.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpOekaKidsTablet.hpp new file mode 120000 index 0000000..60157e3 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpOekaKidsTablet.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpOekaKidsTablet.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPachinko.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPachinko.hpp new file mode 120000 index 0000000..581ec0a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPachinko.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpPachinko.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPad.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPad.hpp new file mode 120000 index 0000000..b475545 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPad.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpPad.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPaddle.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPaddle.hpp new file mode 120000 index 0000000..2fd351d --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPaddle.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpPaddle.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPartyTap.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPartyTap.hpp new file mode 120000 index 0000000..8a5b5c4 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPartyTap.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpPartyTap.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPokkunMoguraa.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPokkunMoguraa.hpp new file mode 120000 index 0000000..8ce65d7 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPokkunMoguraa.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpPokkunMoguraa.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPowerGlove.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPowerGlove.hpp new file mode 120000 index 0000000..c8d7896 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPowerGlove.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpPowerGlove.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPowerPad.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPowerPad.hpp new file mode 120000 index 0000000..424456a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpPowerPad.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpPowerPad.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpRob.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpRob.hpp new file mode 120000 index 0000000..7469051 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpRob.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpRob.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpSuborKeyboard.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpSuborKeyboard.hpp new file mode 120000 index 0000000..a7778a8 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpSuborKeyboard.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpSuborKeyboard.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpTopRider.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpTopRider.hpp new file mode 120000 index 0000000..71864ce --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpTopRider.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpTopRider.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpTurboFile.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpTurboFile.hpp new file mode 120000 index 0000000..aea061b --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpTurboFile.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpTurboFile.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpZapper.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpZapper.hpp new file mode 120000 index 0000000..a404df1 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/input/NstInpZapper.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/input/NstInpZapper.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsRbiBaseball.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsRbiBaseball.hpp new file mode 120000 index 0000000..3be4bbc --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsRbiBaseball.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/vssystem/NstVsRbiBaseball.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsSuperXevious.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsSuperXevious.hpp new file mode 120000 index 0000000..f1f22ae --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsSuperXevious.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/vssystem/NstVsSuperXevious.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsSystem.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsSystem.hpp new file mode 120000 index 0000000..a698062 --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsSystem.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/vssystem/NstVsSystem.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsTkoBoxing.hpp b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsTkoBoxing.hpp new file mode 120000 index 0000000..221f34a --- /dev/null +++ b/Pods/Headers/Private/NESDeltaCore/nestopia/source/core/vssystem/NstVsTkoBoxing.hpp @@ -0,0 +1 @@ +../../../../../../../../Cores/NESDeltaCore/nestopia/source/core/vssystem/NstVsTkoBoxing.hpp \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/NSBundle+Extensions.h b/Pods/Headers/Private/Roxas/NSBundle+Extensions.h new file mode 120000 index 0000000..58a266f --- /dev/null +++ b/Pods/Headers/Private/Roxas/NSBundle+Extensions.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSBundle+Extensions.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/NSConstraintConflict+Conveniences.h b/Pods/Headers/Private/Roxas/NSConstraintConflict+Conveniences.h new file mode 120000 index 0000000..e42b867 --- /dev/null +++ b/Pods/Headers/Private/Roxas/NSConstraintConflict+Conveniences.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSConstraintConflict+Conveniences.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/NSFileManager+URLs.h b/Pods/Headers/Private/Roxas/NSFileManager+URLs.h new file mode 120000 index 0000000..ccf4560 --- /dev/null +++ b/Pods/Headers/Private/Roxas/NSFileManager+URLs.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSFileManager+URLs.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/NSLayoutConstraint+Edges.h b/Pods/Headers/Private/Roxas/NSLayoutConstraint+Edges.h new file mode 120000 index 0000000..5960e92 --- /dev/null +++ b/Pods/Headers/Private/Roxas/NSLayoutConstraint+Edges.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSLayoutConstraint+Edges.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/NSPredicate+Search.h b/Pods/Headers/Private/Roxas/NSPredicate+Search.h new file mode 120000 index 0000000..cc24a63 --- /dev/null +++ b/Pods/Headers/Private/Roxas/NSPredicate+Search.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSPredicate+Search.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/NSString+Localization.h b/Pods/Headers/Private/Roxas/NSString+Localization.h new file mode 120000 index 0000000..60b45f5 --- /dev/null +++ b/Pods/Headers/Private/Roxas/NSString+Localization.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSString+Localization.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/NSUserDefaults+DynamicProperties.h b/Pods/Headers/Private/Roxas/NSUserDefaults+DynamicProperties.h new file mode 120000 index 0000000..7e5e4ef --- /dev/null +++ b/Pods/Headers/Private/Roxas/NSUserDefaults+DynamicProperties.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSUserDefaults+DynamicProperties.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTActivityIndicating.h b/Pods/Headers/Private/Roxas/RSTActivityIndicating.h new file mode 120000 index 0000000..c28830b --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTActivityIndicating.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTActivityIndicating.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTArrayDataSource.h b/Pods/Headers/Private/Roxas/RSTArrayDataSource.h new file mode 120000 index 0000000..23250e6 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTArrayDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTArrayDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTBlockOperation.h b/Pods/Headers/Private/Roxas/RSTBlockOperation.h new file mode 120000 index 0000000..d2a9c81 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTBlockOperation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTBlockOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCellContentCell.h b/Pods/Headers/Private/Roxas/RSTCellContentCell.h new file mode 120000 index 0000000..e6703a0 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCellContentCell.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCellContentChange.h b/Pods/Headers/Private/Roxas/RSTCellContentChange.h new file mode 120000 index 0000000..914bed1 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCellContentChange.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentChange.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCellContentChangeOperation.h b/Pods/Headers/Private/Roxas/RSTCellContentChangeOperation.h new file mode 120000 index 0000000..136a8ae --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCellContentChangeOperation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentChangeOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCellContentDataSource.h b/Pods/Headers/Private/Roxas/RSTCellContentDataSource.h new file mode 120000 index 0000000..e5f9029 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCellContentDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCellContentDataSource_Subclasses.h b/Pods/Headers/Private/Roxas/RSTCellContentDataSource_Subclasses.h new file mode 120000 index 0000000..93d5f3d --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCellContentDataSource_Subclasses.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentDataSource_Subclasses.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCellContentPrefetchingDataSource.h b/Pods/Headers/Private/Roxas/RSTCellContentPrefetchingDataSource.h new file mode 120000 index 0000000..96ce7eb --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCellContentPrefetchingDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentPrefetchingDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCellContentView.h b/Pods/Headers/Private/Roxas/RSTCellContentView.h new file mode 120000 index 0000000..abd8331 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCellContentView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentView.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCollectionViewCell.h b/Pods/Headers/Private/Roxas/RSTCollectionViewCell.h new file mode 120000 index 0000000..67af310 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCollectionViewCell.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCollectionViewCell.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCollectionViewGridLayout.h b/Pods/Headers/Private/Roxas/RSTCollectionViewGridLayout.h new file mode 120000 index 0000000..c54cdf5 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCollectionViewGridLayout.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCollectionViewGridLayout.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTCompositeDataSource.h b/Pods/Headers/Private/Roxas/RSTCompositeDataSource.h new file mode 120000 index 0000000..e0de3a9 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTCompositeDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCompositeDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTConstants.h b/Pods/Headers/Private/Roxas/RSTConstants.h new file mode 120000 index 0000000..23791a0 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTConstants.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTConstants.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTDefines.h b/Pods/Headers/Private/Roxas/RSTDefines.h new file mode 120000 index 0000000..e0f489b --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTDefines.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTDefines.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTDynamicDataSource.h b/Pods/Headers/Private/Roxas/RSTDynamicDataSource.h new file mode 120000 index 0000000..b475f68 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTDynamicDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTDynamicDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTError.h b/Pods/Headers/Private/Roxas/RSTError.h new file mode 120000 index 0000000..b83b849 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTError.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTError.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTFetchedResultsDataSource.h b/Pods/Headers/Private/Roxas/RSTFetchedResultsDataSource.h new file mode 120000 index 0000000..b530060 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTFetchedResultsDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTFetchedResultsDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTHasher.h b/Pods/Headers/Private/Roxas/RSTHasher.h new file mode 120000 index 0000000..23eeb7a --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTHasher.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTHasher.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTHelperFile.h b/Pods/Headers/Private/Roxas/RSTHelperFile.h new file mode 120000 index 0000000..1014026 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTHelperFile.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTHelperFile.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTLaunchViewController.h b/Pods/Headers/Private/Roxas/RSTLaunchViewController.h new file mode 120000 index 0000000..2580dcc --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTLaunchViewController.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTLaunchViewController.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTLoadOperation.h b/Pods/Headers/Private/Roxas/RSTLoadOperation.h new file mode 120000 index 0000000..95d44ba --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTLoadOperation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTLoadOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTNavigationController.h b/Pods/Headers/Private/Roxas/RSTNavigationController.h new file mode 120000 index 0000000..0218c39 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTNavigationController.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTNavigationController.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTNibView.h b/Pods/Headers/Private/Roxas/RSTNibView.h new file mode 120000 index 0000000..87f7645 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTNibView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTNibView.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTOperation.h b/Pods/Headers/Private/Roxas/RSTOperation.h new file mode 120000 index 0000000..0056541 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTOperation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTOperationQueue.h b/Pods/Headers/Private/Roxas/RSTOperationQueue.h new file mode 120000 index 0000000..eaeebfc --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTOperationQueue.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTOperationQueue.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTOperation_Subclasses.h b/Pods/Headers/Private/Roxas/RSTOperation_Subclasses.h new file mode 120000 index 0000000..c52aaf9 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTOperation_Subclasses.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTOperation_Subclasses.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTPersistentContainer.h b/Pods/Headers/Private/Roxas/RSTPersistentContainer.h new file mode 120000 index 0000000..05d7d14 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTPersistentContainer.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTPersistentContainer.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTPlaceholderView.h b/Pods/Headers/Private/Roxas/RSTPlaceholderView.h new file mode 120000 index 0000000..84feb0e --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTPlaceholderView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTPlaceholderView.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTRelationshipPreservingMergePolicy.h b/Pods/Headers/Private/Roxas/RSTRelationshipPreservingMergePolicy.h new file mode 120000 index 0000000..37ab80e --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTRelationshipPreservingMergePolicy.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTRelationshipPreservingMergePolicy.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTSearchController.h b/Pods/Headers/Private/Roxas/RSTSearchController.h new file mode 120000 index 0000000..dcdbb03 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTSearchController.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTSearchController.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTSeparatorView.h b/Pods/Headers/Private/Roxas/RSTSeparatorView.h new file mode 120000 index 0000000..78c955e --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTSeparatorView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTSeparatorView.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTTintedImageView.h b/Pods/Headers/Private/Roxas/RSTTintedImageView.h new file mode 120000 index 0000000..e433b42 --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTTintedImageView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTTintedImageView.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/RSTToastView.h b/Pods/Headers/Private/Roxas/RSTToastView.h new file mode 120000 index 0000000..c079a9b --- /dev/null +++ b/Pods/Headers/Private/Roxas/RSTToastView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTToastView.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/Roxas.h b/Pods/Headers/Private/Roxas/Roxas.h new file mode 120000 index 0000000..29ae3a5 --- /dev/null +++ b/Pods/Headers/Private/Roxas/Roxas.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/Roxas.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UIAlertAction+Actions.h b/Pods/Headers/Private/Roxas/UIAlertAction+Actions.h new file mode 120000 index 0000000..a4df6d2 --- /dev/null +++ b/Pods/Headers/Private/Roxas/UIAlertAction+Actions.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIAlertAction+Actions.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UICollectionView+CellContent.h b/Pods/Headers/Private/Roxas/UICollectionView+CellContent.h new file mode 120000 index 0000000..705f12e --- /dev/null +++ b/Pods/Headers/Private/Roxas/UICollectionView+CellContent.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UICollectionView+CellContent.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UICollectionViewCell+CellContent.h b/Pods/Headers/Private/Roxas/UICollectionViewCell+CellContent.h new file mode 120000 index 0000000..d578635 --- /dev/null +++ b/Pods/Headers/Private/Roxas/UICollectionViewCell+CellContent.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UICollectionViewCell+CellContent.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UICollectionViewCell+Nibs.h b/Pods/Headers/Private/Roxas/UICollectionViewCell+Nibs.h new file mode 120000 index 0000000..05fbce4 --- /dev/null +++ b/Pods/Headers/Private/Roxas/UICollectionViewCell+Nibs.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UICollectionViewCell+Nibs.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UIImage+Manipulation.h b/Pods/Headers/Private/Roxas/UIImage+Manipulation.h new file mode 120000 index 0000000..e99d96f --- /dev/null +++ b/Pods/Headers/Private/Roxas/UIImage+Manipulation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIImage+Manipulation.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UIKit+ActivityIndicating.h b/Pods/Headers/Private/Roxas/UIKit+ActivityIndicating.h new file mode 120000 index 0000000..dc7938f --- /dev/null +++ b/Pods/Headers/Private/Roxas/UIKit+ActivityIndicating.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIKit+ActivityIndicating.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UISpringTimingParameters+Conveniences.h b/Pods/Headers/Private/Roxas/UISpringTimingParameters+Conveniences.h new file mode 120000 index 0000000..0af93a6 --- /dev/null +++ b/Pods/Headers/Private/Roxas/UISpringTimingParameters+Conveniences.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UISpringTimingParameters+Conveniences.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UITableView+CellContent.h b/Pods/Headers/Private/Roxas/UITableView+CellContent.h new file mode 120000 index 0000000..db0972d --- /dev/null +++ b/Pods/Headers/Private/Roxas/UITableView+CellContent.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UITableView+CellContent.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UITableViewCell+CellContent.h b/Pods/Headers/Private/Roxas/UITableViewCell+CellContent.h new file mode 120000 index 0000000..905acfd --- /dev/null +++ b/Pods/Headers/Private/Roxas/UITableViewCell+CellContent.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UITableViewCell+CellContent.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UIView+AnimatedHide.h b/Pods/Headers/Private/Roxas/UIView+AnimatedHide.h new file mode 120000 index 0000000..5f964f6 --- /dev/null +++ b/Pods/Headers/Private/Roxas/UIView+AnimatedHide.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIView+AnimatedHide.h \ No newline at end of file diff --git a/Pods/Headers/Private/Roxas/UIViewController+TransitionState.h b/Pods/Headers/Private/Roxas/UIViewController+TransitionState.h new file mode 120000 index 0000000..84a0f71 --- /dev/null +++ b/Pods/Headers/Private/Roxas/UIViewController+TransitionState.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIViewController+TransitionState.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h b/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h new file mode 120000 index 0000000..8457498 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/NSData+ImageContentType.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/NSData+ImageContentType.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/SDImageCache.h b/Pods/Headers/Private/SDWebImage/SDImageCache.h new file mode 120000 index 0000000..0040b06 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/SDImageCache.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDImageCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h b/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h new file mode 120000 index 0000000..6ca2478 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/SDWebImageCompat.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageCompat.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h b/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h new file mode 120000 index 0000000..a2f3a68 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/SDWebImageDecoder.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageDecoder.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h b/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h new file mode 120000 index 0000000..303b03b --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/SDWebImageDownloader.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageDownloader.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h b/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h new file mode 120000 index 0000000..99441c4 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/SDWebImageDownloaderOperation.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/SDWebImageManager.h b/Pods/Headers/Private/SDWebImage/SDWebImageManager.h new file mode 120000 index 0000000..1b81848 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/SDWebImageManager.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageManager.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h b/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h new file mode 120000 index 0000000..20e5b89 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/SDWebImageOperation.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h b/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h new file mode 120000 index 0000000..50585c6 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/SDWebImagePrefetcher.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h b/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h new file mode 120000 index 0000000..19d2d8e --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/UIButton+WebCache.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIButton+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/UIImage+GIF.h b/Pods/Headers/Private/SDWebImage/UIImage+GIF.h new file mode 120000 index 0000000..14d5aad --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/UIImage+GIF.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIImage+GIF.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h b/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h new file mode 120000 index 0000000..1fb9650 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/UIImage+MultiFormat.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIImage+MultiFormat.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h b/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h new file mode 120000 index 0000000..fd4dea4 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/UIImageView+HighlightedWebCache.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h b/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h new file mode 120000 index 0000000..0c53a47 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/UIImageView+WebCache.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIImageView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h b/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h new file mode 120000 index 0000000..f9890c4 --- /dev/null +++ b/Pods/Headers/Private/SDWebImage/UIView+WebCacheOperation.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h \ No newline at end of file diff --git a/Pods/Headers/Private/SMCalloutView/SMCalloutView.h b/Pods/Headers/Private/SMCalloutView/SMCalloutView.h new file mode 120000 index 0000000..0c92d2b --- /dev/null +++ b/Pods/Headers/Private/SMCalloutView/SMCalloutView.h @@ -0,0 +1 @@ +../../../SMCalloutView/SMCalloutView.h \ No newline at end of file diff --git a/Pods/Headers/Private/SMCalloutView/SMClassicCalloutView.h b/Pods/Headers/Private/SMCalloutView/SMClassicCalloutView.h new file mode 120000 index 0000000..4745232 --- /dev/null +++ b/Pods/Headers/Private/SMCalloutView/SMClassicCalloutView.h @@ -0,0 +1 @@ +../../../SMCalloutView/SMClassicCalloutView.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h b/Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h new file mode 120000 index 0000000..57b3147 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/SNESDeltaCore.h b/Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/SNESDeltaCore.h new file mode 120000 index 0000000..9a14c0b --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/SNESDeltaCore.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/SNESDeltaCore/SNESDeltaCore.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h b/Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h new file mode 120000 index 0000000..771fc98 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h @@ -0,0 +1 @@ +../../../../../../Cores/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/65c816.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/65c816.h new file mode 120000 index 0000000..6fe3dc4 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/65c816.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/65c816.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/apu.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/apu.h new file mode 120000 index 0000000..e71bba1 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/apu.h @@ -0,0 +1 @@ +../../../../../../Cores/SNESDeltaCore/snes9x/apu/apu.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/hermite_resampler.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/hermite_resampler.h new file mode 120000 index 0000000..26c619a --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/hermite_resampler.h @@ -0,0 +1 @@ +../../../../../../Cores/SNESDeltaCore/snes9x/apu/hermite_resampler.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/resampler.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/resampler.h new file mode 120000 index 0000000..04377d8 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/resampler.h @@ -0,0 +1 @@ +../../../../../../Cores/SNESDeltaCore/snes9x/apu/resampler.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/ring_buffer.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/ring_buffer.h new file mode 120000 index 0000000..dc31099 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/apu/ring_buffer.h @@ -0,0 +1 @@ +../../../../../../Cores/SNESDeltaCore/snes9x/apu/ring_buffer.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/bsx.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/bsx.h new file mode 120000 index 0000000..a994601 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/bsx.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/bsx.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/c4.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/c4.h new file mode 120000 index 0000000..8c8116e --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/c4.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/c4.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/cheats.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/cheats.h new file mode 120000 index 0000000..a1219db --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/cheats.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/cheats.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/conffile.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/conffile.h new file mode 120000 index 0000000..dd67351 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/conffile.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/conffile.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/controls.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/controls.h new file mode 120000 index 0000000..4b905b8 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/controls.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/controls.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/cpuaddr.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/cpuaddr.h new file mode 120000 index 0000000..f080b2d --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/cpuaddr.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/cpuaddr.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/cpuexec.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/cpuexec.h new file mode 120000 index 0000000..e33cfb0 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/cpuexec.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/cpuexec.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/cpumacro.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/cpumacro.h new file mode 120000 index 0000000..dc48dca --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/cpumacro.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/cpumacro.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/cpuops.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/cpuops.h new file mode 120000 index 0000000..96c93e8 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/cpuops.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/cpuops.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/crosshairs.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/crosshairs.h new file mode 120000 index 0000000..232a00d --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/crosshairs.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/crosshairs.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/debug.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/debug.h new file mode 120000 index 0000000..dac9450 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/debug.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/debug.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/display.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/display.h new file mode 120000 index 0000000..43e227b --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/display.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/display.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/dma.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/dma.h new file mode 120000 index 0000000..e32aa05 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/dma.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/dma.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/dsp.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/dsp.h new file mode 120000 index 0000000..7052999 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/dsp.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/dsp.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/font.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/font.h new file mode 120000 index 0000000..1286935 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/font.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/font.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/fxemu.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/fxemu.h new file mode 120000 index 0000000..6ffe862 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/fxemu.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/fxemu.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/fxinst.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/fxinst.h new file mode 120000 index 0000000..aef0cc5 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/fxinst.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/fxinst.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/getset.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/getset.h new file mode 120000 index 0000000..d655de8 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/getset.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/getset.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/gfx.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/gfx.h new file mode 120000 index 0000000..4736662 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/gfx.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/gfx.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/language.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/language.h new file mode 120000 index 0000000..0b42568 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/language.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/language.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/logger.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/logger.h new file mode 120000 index 0000000..0a1c5da --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/logger.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/logger.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/memmap.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/memmap.h new file mode 120000 index 0000000..311f411 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/memmap.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/memmap.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/messages.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/messages.h new file mode 120000 index 0000000..4370083 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/messages.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/messages.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/missing.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/missing.h new file mode 120000 index 0000000..1876a50 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/missing.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/missing.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/movie.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/movie.h new file mode 120000 index 0000000..10912d3 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/movie.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/movie.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/msu1.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/msu1.h new file mode 120000 index 0000000..dc80e29 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/msu1.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/msu1.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/netplay.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/netplay.h new file mode 120000 index 0000000..7895ad6 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/netplay.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/netplay.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/obc1.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/obc1.h new file mode 120000 index 0000000..6a1e143 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/obc1.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/obc1.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/pixform.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/pixform.h new file mode 120000 index 0000000..30dd2c9 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/pixform.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/pixform.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/port.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/port.h new file mode 120000 index 0000000..123c1f9 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/port.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/port.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/ppu.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/ppu.h new file mode 120000 index 0000000..f3c8a0c --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/ppu.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/ppu.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/sa1.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/sa1.h new file mode 120000 index 0000000..1f80b64 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/sa1.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/sa1.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/sar.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/sar.h new file mode 120000 index 0000000..d9a453d --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/sar.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/sar.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/screenshot.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/screenshot.h new file mode 120000 index 0000000..9af2460 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/screenshot.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/screenshot.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/sdd1.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/sdd1.h new file mode 120000 index 0000000..c19bd6a --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/sdd1.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/sdd1.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/sdd1emu.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/sdd1emu.h new file mode 120000 index 0000000..37df0be --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/sdd1emu.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/sdd1emu.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/seta.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/seta.h new file mode 120000 index 0000000..3527588 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/seta.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/seta.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/snapshot.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/snapshot.h new file mode 120000 index 0000000..24d8fdf --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/snapshot.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/snapshot.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/snes9x.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/snes9x.h new file mode 120000 index 0000000..4f83c62 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/snes9x.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/snes9x.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110.h new file mode 120000 index 0000000..bd2113f --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/spc7110.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110dec.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110dec.h new file mode 120000 index 0000000..a054bc0 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110dec.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/spc7110dec.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110emu.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110emu.h new file mode 120000 index 0000000..a75f24e --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/spc7110emu.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/spc7110emu.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/srtc.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/srtc.h new file mode 120000 index 0000000..c60445c --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/srtc.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/srtc.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/srtcemu.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/srtcemu.h new file mode 120000 index 0000000..2919296 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/srtcemu.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/srtcemu.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/statemanager.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/statemanager.h new file mode 120000 index 0000000..5f4fd3d --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/statemanager.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/statemanager.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/stream.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/stream.h new file mode 120000 index 0000000..8e98d1e --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/stream.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/stream.h \ No newline at end of file diff --git a/Pods/Headers/Private/SNESDeltaCore/snes9x/tile.h b/Pods/Headers/Private/SNESDeltaCore/snes9x/tile.h new file mode 120000 index 0000000..fe29c96 --- /dev/null +++ b/Pods/Headers/Private/SNESDeltaCore/snes9x/tile.h @@ -0,0 +1 @@ +../../../../../Cores/SNESDeltaCore/snes9x/tile.h \ No newline at end of file diff --git a/Pods/Headers/Private/SQLite.swift/SQLite.h b/Pods/Headers/Private/SQLite.swift/SQLite.h new file mode 120000 index 0000000..827d5de --- /dev/null +++ b/Pods/Headers/Private/SQLite.swift/SQLite.h @@ -0,0 +1 @@ +../../../SQLite.swift/Sources/SQLite/SQLite.h \ No newline at end of file diff --git a/Pods/Headers/Private/SQLite.swift/SQLiteObjc.h b/Pods/Headers/Private/SQLite.swift/SQLiteObjc.h new file mode 120000 index 0000000..3f2bb55 --- /dev/null +++ b/Pods/Headers/Private/SQLite.swift/SQLiteObjc.h @@ -0,0 +1 @@ +../../../SQLite.swift/Sources/SQLiteObjc/include/SQLiteObjc.h \ No newline at end of file diff --git a/Pods/Headers/Private/SQLite.swift/fts3_tokenizer.h b/Pods/Headers/Private/SQLite.swift/fts3_tokenizer.h new file mode 120000 index 0000000..97bf9d8 --- /dev/null +++ b/Pods/Headers/Private/SQLite.swift/fts3_tokenizer.h @@ -0,0 +1 @@ +../../../SQLite.swift/Sources/SQLiteObjc/fts3_tokenizer.h \ No newline at end of file diff --git a/Pods/Headers/Private/SwiftyDropbox/DBChunkInputStream.h b/Pods/Headers/Private/SwiftyDropbox/DBChunkInputStream.h new file mode 120000 index 0000000..b1426f7 --- /dev/null +++ b/Pods/Headers/Private/SwiftyDropbox/DBChunkInputStream.h @@ -0,0 +1 @@ +../../../SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.h \ No newline at end of file diff --git a/Pods/Headers/Private/SwiftyDropbox/SwiftyDropbox.h b/Pods/Headers/Private/SwiftyDropbox/SwiftyDropbox.h new file mode 120000 index 0000000..e406e0b --- /dev/null +++ b/Pods/Headers/Private/SwiftyDropbox/SwiftyDropbox.h @@ -0,0 +1 @@ +../../../SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SwiftyDropbox.h \ No newline at end of file diff --git a/Pods/Headers/Public/Alamofire/Alamofire-umbrella.h b/Pods/Headers/Public/Alamofire/Alamofire-umbrella.h new file mode 120000 index 0000000..9e5c694 --- /dev/null +++ b/Pods/Headers/Public/Alamofire/Alamofire-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/Alamofire/Alamofire-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/Alamofire/Alamofire.modulemap b/Pods/Headers/Public/Alamofire/Alamofire.modulemap new file mode 120000 index 0000000..8c5fb09 --- /dev/null +++ b/Pods/Headers/Public/Alamofire/Alamofire.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/Alamofire/Alamofire.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DSDeltaCore/DSDeltaCore-umbrella.h b/Pods/Headers/Public/DSDeltaCore/DSDeltaCore-umbrella.h new file mode 120000 index 0000000..c797a7c --- /dev/null +++ b/Pods/Headers/Public/DSDeltaCore/DSDeltaCore-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/DSDeltaCore/DSDeltaCore-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DSDeltaCore/DSDeltaCore.modulemap b/Pods/Headers/Public/DSDeltaCore/DSDeltaCore.modulemap new file mode 120000 index 0000000..09427dd --- /dev/null +++ b/Pods/Headers/Public/DSDeltaCore/DSDeltaCore.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/DSDeltaCore/DSDeltaCore.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DSDeltaCore/DSDeltaCore/Bridge/DSEmulatorBridge.h b/Pods/Headers/Public/DSDeltaCore/DSDeltaCore/Bridge/DSEmulatorBridge.h new file mode 120000 index 0000000..82bf8f2 --- /dev/null +++ b/Pods/Headers/Public/DSDeltaCore/DSDeltaCore/Bridge/DSEmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/DSDeltaCore/DSDeltaCore/Bridge/DSEmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Public/DSDeltaCore/DSDeltaCore/Types/DSTypes.h b/Pods/Headers/Public/DSDeltaCore/DSDeltaCore/Types/DSTypes.h new file mode 120000 index 0000000..1e41193 --- /dev/null +++ b/Pods/Headers/Public/DSDeltaCore/DSDeltaCore/Types/DSTypes.h @@ -0,0 +1 @@ +../../../../../../Cores/DSDeltaCore/DSDeltaCore/Types/DSTypes.h \ No newline at end of file diff --git a/Pods/Headers/Public/DeltaCore/DeltaCore-umbrella.h b/Pods/Headers/Public/DeltaCore/DeltaCore-umbrella.h new file mode 120000 index 0000000..ec74f59 --- /dev/null +++ b/Pods/Headers/Public/DeltaCore/DeltaCore-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/DeltaCore/DeltaCore-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/DeltaCore/DeltaCore.modulemap b/Pods/Headers/Public/DeltaCore/DeltaCore.modulemap new file mode 120000 index 0000000..3cd1b08 --- /dev/null +++ b/Pods/Headers/Public/DeltaCore/DeltaCore.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/DeltaCore/DeltaCore.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/DeltaCore/DeltaTypes.h b/Pods/Headers/Public/DeltaCore/DeltaTypes.h new file mode 120000 index 0000000..e1aa22f --- /dev/null +++ b/Pods/Headers/Public/DeltaCore/DeltaTypes.h @@ -0,0 +1 @@ +../../../../Cores/DeltaCore/DeltaCore/DeltaTypes.h \ No newline at end of file diff --git a/Pods/Headers/Public/GBADeltaCore/GBADeltaCore-umbrella.h b/Pods/Headers/Public/GBADeltaCore/GBADeltaCore-umbrella.h new file mode 120000 index 0000000..8fd7cff --- /dev/null +++ b/Pods/Headers/Public/GBADeltaCore/GBADeltaCore-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/GBADeltaCore/GBADeltaCore-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/GBADeltaCore/GBADeltaCore.modulemap b/Pods/Headers/Public/GBADeltaCore/GBADeltaCore.modulemap new file mode 120000 index 0000000..8cae996 --- /dev/null +++ b/Pods/Headers/Public/GBADeltaCore/GBADeltaCore.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/GBADeltaCore/GBADeltaCore.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h b/Pods/Headers/Public/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h new file mode 120000 index 0000000..8d4c629 --- /dev/null +++ b/Pods/Headers/Public/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/GBADeltaCore/GBADeltaCore/Bridge/GBAEmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Public/GBADeltaCore/GBADeltaCore/Types/GBATypes.h b/Pods/Headers/Public/GBADeltaCore/GBADeltaCore/Types/GBATypes.h new file mode 120000 index 0000000..02bec4b --- /dev/null +++ b/Pods/Headers/Public/GBADeltaCore/GBADeltaCore/Types/GBATypes.h @@ -0,0 +1 @@ +../../../../../../Cores/GBADeltaCore/GBADeltaCore/Types/GBATypes.h \ No newline at end of file diff --git a/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore-umbrella.h b/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore-umbrella.h new file mode 120000 index 0000000..be84950 --- /dev/null +++ b/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/GBCDeltaCore/GBCDeltaCore-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore.modulemap b/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore.modulemap new file mode 120000 index 0000000..f785320 --- /dev/null +++ b/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/GBCDeltaCore/GBCDeltaCore.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h b/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h new file mode 120000 index 0000000..b382a5b --- /dev/null +++ b/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/GBCDeltaCore/Bridge/GBCEmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h b/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h new file mode 120000 index 0000000..e3b347e --- /dev/null +++ b/Pods/Headers/Public/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h @@ -0,0 +1 @@ +../../../../../../Cores/GBCDeltaCore/GBCDeltaCore/Types/GBCTypes.h \ No newline at end of file diff --git a/Pods/Headers/Public/GTMSessionFetcher/GTMGatherInputStream.h b/Pods/Headers/Public/GTMSessionFetcher/GTMGatherInputStream.h new file mode 120000 index 0000000..231c9ee --- /dev/null +++ b/Pods/Headers/Public/GTMSessionFetcher/GTMGatherInputStream.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMGatherInputStream.h \ No newline at end of file diff --git a/Pods/Headers/Public/GTMSessionFetcher/GTMMIMEDocument.h b/Pods/Headers/Public/GTMSessionFetcher/GTMMIMEDocument.h new file mode 120000 index 0000000..2d2d247 --- /dev/null +++ b/Pods/Headers/Public/GTMSessionFetcher/GTMMIMEDocument.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMMIMEDocument.h \ No newline at end of file diff --git a/Pods/Headers/Public/GTMSessionFetcher/GTMReadMonitorInputStream.h b/Pods/Headers/Public/GTMSessionFetcher/GTMReadMonitorInputStream.h new file mode 120000 index 0000000..2beacd8 --- /dev/null +++ b/Pods/Headers/Public/GTMSessionFetcher/GTMReadMonitorInputStream.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMReadMonitorInputStream.h \ No newline at end of file diff --git a/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher-umbrella.h b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher-umbrella.h new file mode 120000 index 0000000..170dd28 --- /dev/null +++ b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/GTMSessionFetcher/GTMSessionFetcher-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.h b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.h new file mode 120000 index 0000000..7ed730f --- /dev/null +++ b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMSessionFetcher.h \ No newline at end of file diff --git a/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap new file mode 120000 index 0000000..f641b98 --- /dev/null +++ b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h new file mode 120000 index 0000000..ada41e3 --- /dev/null +++ b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcherLogging.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMSessionFetcherLogging.h \ No newline at end of file diff --git a/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcherService.h b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcherService.h new file mode 120000 index 0000000..1ef9cbb --- /dev/null +++ b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionFetcherService.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMSessionFetcherService.h \ No newline at end of file diff --git a/Pods/Headers/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h new file mode 120000 index 0000000..cef7a0d --- /dev/null +++ b/Pods/Headers/Public/GTMSessionFetcher/GTMSessionUploadFetcher.h @@ -0,0 +1 @@ +../../../GTMSessionFetcher/Source/GTMSessionUploadFetcher.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRBase64.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRBase64.h new file mode 120000 index 0000000..675bb65 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRBase64.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Utilities/GTLRBase64.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRBatchQuery.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRBatchQuery.h new file mode 120000 index 0000000..d7dd887 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRBatchQuery.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRBatchQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRBatchResult.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRBatchResult.h new file mode 120000 index 0000000..4f292a1 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRBatchResult.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRBatchResult.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDateTime.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDateTime.h new file mode 120000 index 0000000..213b193 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDateTime.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRDateTime.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDefines.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDefines.h new file mode 120000 index 0000000..dd50bd9 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDefines.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GTLRDefines.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDrive.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDrive.h new file mode 120000 index 0000000..a2302b3 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDrive.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDrive.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveObjects.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveObjects.h new file mode 120000 index 0000000..7db9e87 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveObjects.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveObjects.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveQuery.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveQuery.h new file mode 120000 index 0000000..8007e12 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveQuery.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveService.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveService.h new file mode 120000 index 0000000..cc0f6c9 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDriveService.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/GeneratedServices/Drive/GTLRDriveService.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDuration.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDuration.h new file mode 120000 index 0000000..78c882f --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRDuration.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRDuration.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRErrorObject.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRErrorObject.h new file mode 120000 index 0000000..32b1224 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRErrorObject.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRErrorObject.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRFramework.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRFramework.h new file mode 120000 index 0000000..0f79b8a --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRFramework.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Utilities/GTLRFramework.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRObject.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRObject.h new file mode 120000 index 0000000..66351b9 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRObject.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRObject.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRQuery.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRQuery.h new file mode 120000 index 0000000..e843d3c --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRQuery.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRQuery.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRRuntimeCommon.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRRuntimeCommon.h new file mode 120000 index 0000000..9ae1ed7 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRRuntimeCommon.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRRuntimeCommon.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRService.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRService.h new file mode 120000 index 0000000..5403ba9 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRService.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRService.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRURITemplate.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRURITemplate.h new file mode 120000 index 0000000..5e9f0dd --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRURITemplate.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Utilities/GTLRURITemplate.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRUploadParameters.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRUploadParameters.h new file mode 120000 index 0000000..a896f4d --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRUploadParameters.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Objects/GTLRUploadParameters.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GTLRUtilities.h b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRUtilities.h new file mode 120000 index 0000000..85b5440 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GTLRUtilities.h @@ -0,0 +1 @@ +../../../GoogleAPIClientForREST/Source/Utilities/GTLRUtilities.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST-umbrella.h b/Pods/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST-umbrella.h new file mode 120000 index 0000000..7c6fc6d --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap b/Pods/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap new file mode 120000 index 0000000..ed574f2 --- /dev/null +++ b/Pods/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleToolboxForMac/GTMDebugSelectorValidation.h b/Pods/Headers/Public/GoogleToolboxForMac/GTMDebugSelectorValidation.h new file mode 120000 index 0000000..521da72 --- /dev/null +++ b/Pods/Headers/Public/GoogleToolboxForMac/GTMDebugSelectorValidation.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/DebugUtils/GTMDebugSelectorValidation.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleToolboxForMac/GTMDebugThreadValidation.h b/Pods/Headers/Public/GoogleToolboxForMac/GTMDebugThreadValidation.h new file mode 120000 index 0000000..de29ea1 --- /dev/null +++ b/Pods/Headers/Public/GoogleToolboxForMac/GTMDebugThreadValidation.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/DebugUtils/GTMDebugThreadValidation.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleToolboxForMac/GTMDefines.h b/Pods/Headers/Public/GoogleToolboxForMac/GTMDefines.h new file mode 120000 index 0000000..5503110 --- /dev/null +++ b/Pods/Headers/Public/GoogleToolboxForMac/GTMDefines.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/GTMDefines.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleToolboxForMac/GTMMethodCheck.h b/Pods/Headers/Public/GoogleToolboxForMac/GTMMethodCheck.h new file mode 120000 index 0000000..56dfa7e --- /dev/null +++ b/Pods/Headers/Public/GoogleToolboxForMac/GTMMethodCheck.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/DebugUtils/GTMMethodCheck.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleToolboxForMac/GTMNSDictionary+URLArguments.h b/Pods/Headers/Public/GoogleToolboxForMac/GTMNSDictionary+URLArguments.h new file mode 120000 index 0000000..b2ff829 --- /dev/null +++ b/Pods/Headers/Public/GoogleToolboxForMac/GTMNSDictionary+URLArguments.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/Foundation/GTMNSDictionary+URLArguments.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleToolboxForMac/GTMNSString+URLArguments.h b/Pods/Headers/Public/GoogleToolboxForMac/GTMNSString+URLArguments.h new file mode 120000 index 0000000..3b9b1a2 --- /dev/null +++ b/Pods/Headers/Public/GoogleToolboxForMac/GTMNSString+URLArguments.h @@ -0,0 +1 @@ +../../../GoogleToolboxForMac/Foundation/GTMNSString+URLArguments.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac-umbrella.h b/Pods/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac-umbrella.h new file mode 120000 index 0000000..bfa2f5b --- /dev/null +++ b/Pods/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap b/Pods/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap new file mode 120000 index 0000000..7c9b1d3 --- /dev/null +++ b/Pods/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/Harmony/Harmony-umbrella.h b/Pods/Headers/Public/Harmony/Harmony-umbrella.h new file mode 120000 index 0000000..1c12daa --- /dev/null +++ b/Pods/Headers/Public/Harmony/Harmony-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/Harmony/Harmony-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/Harmony/Harmony.modulemap b/Pods/Headers/Public/Harmony/Harmony.modulemap new file mode 120000 index 0000000..05b2b33 --- /dev/null +++ b/Pods/Headers/Public/Harmony/Harmony.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/Harmony/Harmony.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/Harmony/Harmony/Harmony.h b/Pods/Headers/Public/Harmony/Harmony/Harmony.h new file mode 120000 index 0000000..6496a6c --- /dev/null +++ b/Pods/Headers/Public/Harmony/Harmony/Harmony.h @@ -0,0 +1 @@ +../../../../../External/Harmony/Harmony/Harmony.h \ No newline at end of file diff --git a/Pods/Headers/Public/N64DeltaCore/N64DeltaCore-umbrella.h b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore-umbrella.h new file mode 120000 index 0000000..e5edfe2 --- /dev/null +++ b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/N64DeltaCore/N64DeltaCore-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/N64DeltaCore/N64DeltaCore.modulemap b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore.modulemap new file mode 120000 index 0000000..b6ff0b2 --- /dev/null +++ b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/N64DeltaCore/N64DeltaCore.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h new file mode 120000 index 0000000..d1cd9c0 --- /dev/null +++ b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/N64DeltaCore/Bridge/N64EmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Public/N64DeltaCore/N64DeltaCore/Types/N64Types.h b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore/Types/N64Types.h new file mode 120000 index 0000000..3d771d7 --- /dev/null +++ b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore/Types/N64Types.h @@ -0,0 +1 @@ +../../../../../../Cores/N64DeltaCore/N64DeltaCore/Types/N64Types.h \ No newline at end of file diff --git a/Pods/Headers/Public/NESDeltaCore/NESDeltaCore-umbrella.h b/Pods/Headers/Public/NESDeltaCore/NESDeltaCore-umbrella.h new file mode 120000 index 0000000..61c1063 --- /dev/null +++ b/Pods/Headers/Public/NESDeltaCore/NESDeltaCore-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/NESDeltaCore/NESDeltaCore-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/NESDeltaCore/NESDeltaCore.modulemap b/Pods/Headers/Public/NESDeltaCore/NESDeltaCore.modulemap new file mode 120000 index 0000000..300d54e --- /dev/null +++ b/Pods/Headers/Public/NESDeltaCore/NESDeltaCore.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/NESDeltaCore/NESDeltaCore.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/NESDeltaCore/NestopiaJS/NESEmulatorBridge.hpp b/Pods/Headers/Public/NESDeltaCore/NestopiaJS/NESEmulatorBridge.hpp new file mode 120000 index 0000000..708a323 --- /dev/null +++ b/Pods/Headers/Public/NESDeltaCore/NestopiaJS/NESEmulatorBridge.hpp @@ -0,0 +1 @@ +../../../../../Cores/NESDeltaCore/NestopiaJS/NESEmulatorBridge.hpp \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/NSBundle+Extensions.h b/Pods/Headers/Public/Roxas/NSBundle+Extensions.h new file mode 120000 index 0000000..58a266f --- /dev/null +++ b/Pods/Headers/Public/Roxas/NSBundle+Extensions.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSBundle+Extensions.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/NSConstraintConflict+Conveniences.h b/Pods/Headers/Public/Roxas/NSConstraintConflict+Conveniences.h new file mode 120000 index 0000000..e42b867 --- /dev/null +++ b/Pods/Headers/Public/Roxas/NSConstraintConflict+Conveniences.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSConstraintConflict+Conveniences.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/NSFileManager+URLs.h b/Pods/Headers/Public/Roxas/NSFileManager+URLs.h new file mode 120000 index 0000000..ccf4560 --- /dev/null +++ b/Pods/Headers/Public/Roxas/NSFileManager+URLs.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSFileManager+URLs.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/NSLayoutConstraint+Edges.h b/Pods/Headers/Public/Roxas/NSLayoutConstraint+Edges.h new file mode 120000 index 0000000..5960e92 --- /dev/null +++ b/Pods/Headers/Public/Roxas/NSLayoutConstraint+Edges.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSLayoutConstraint+Edges.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/NSPredicate+Search.h b/Pods/Headers/Public/Roxas/NSPredicate+Search.h new file mode 120000 index 0000000..cc24a63 --- /dev/null +++ b/Pods/Headers/Public/Roxas/NSPredicate+Search.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSPredicate+Search.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/NSString+Localization.h b/Pods/Headers/Public/Roxas/NSString+Localization.h new file mode 120000 index 0000000..60b45f5 --- /dev/null +++ b/Pods/Headers/Public/Roxas/NSString+Localization.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSString+Localization.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/NSUserDefaults+DynamicProperties.h b/Pods/Headers/Public/Roxas/NSUserDefaults+DynamicProperties.h new file mode 120000 index 0000000..7e5e4ef --- /dev/null +++ b/Pods/Headers/Public/Roxas/NSUserDefaults+DynamicProperties.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/NSUserDefaults+DynamicProperties.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTActivityIndicating.h b/Pods/Headers/Public/Roxas/RSTActivityIndicating.h new file mode 120000 index 0000000..c28830b --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTActivityIndicating.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTActivityIndicating.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTArrayDataSource.h b/Pods/Headers/Public/Roxas/RSTArrayDataSource.h new file mode 120000 index 0000000..23250e6 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTArrayDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTArrayDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTBlockOperation.h b/Pods/Headers/Public/Roxas/RSTBlockOperation.h new file mode 120000 index 0000000..d2a9c81 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTBlockOperation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTBlockOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTCellContentCell.h b/Pods/Headers/Public/Roxas/RSTCellContentCell.h new file mode 120000 index 0000000..e6703a0 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTCellContentCell.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTCellContentChange.h b/Pods/Headers/Public/Roxas/RSTCellContentChange.h new file mode 120000 index 0000000..914bed1 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTCellContentChange.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentChange.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTCellContentChangeOperation.h b/Pods/Headers/Public/Roxas/RSTCellContentChangeOperation.h new file mode 120000 index 0000000..136a8ae --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTCellContentChangeOperation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentChangeOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTCellContentDataSource.h b/Pods/Headers/Public/Roxas/RSTCellContentDataSource.h new file mode 120000 index 0000000..e5f9029 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTCellContentDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTCellContentPrefetchingDataSource.h b/Pods/Headers/Public/Roxas/RSTCellContentPrefetchingDataSource.h new file mode 120000 index 0000000..96ce7eb --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTCellContentPrefetchingDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentPrefetchingDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTCellContentView.h b/Pods/Headers/Public/Roxas/RSTCellContentView.h new file mode 120000 index 0000000..abd8331 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTCellContentView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCellContentView.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTCollectionViewCell.h b/Pods/Headers/Public/Roxas/RSTCollectionViewCell.h new file mode 120000 index 0000000..67af310 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTCollectionViewCell.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCollectionViewCell.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTCollectionViewGridLayout.h b/Pods/Headers/Public/Roxas/RSTCollectionViewGridLayout.h new file mode 120000 index 0000000..c54cdf5 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTCollectionViewGridLayout.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCollectionViewGridLayout.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTCompositeDataSource.h b/Pods/Headers/Public/Roxas/RSTCompositeDataSource.h new file mode 120000 index 0000000..e0de3a9 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTCompositeDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTCompositeDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTConstants.h b/Pods/Headers/Public/Roxas/RSTConstants.h new file mode 120000 index 0000000..23791a0 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTConstants.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTConstants.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTDefines.h b/Pods/Headers/Public/Roxas/RSTDefines.h new file mode 120000 index 0000000..e0f489b --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTDefines.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTDefines.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTDynamicDataSource.h b/Pods/Headers/Public/Roxas/RSTDynamicDataSource.h new file mode 120000 index 0000000..b475f68 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTDynamicDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTDynamicDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTError.h b/Pods/Headers/Public/Roxas/RSTError.h new file mode 120000 index 0000000..b83b849 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTError.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTError.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTFetchedResultsDataSource.h b/Pods/Headers/Public/Roxas/RSTFetchedResultsDataSource.h new file mode 120000 index 0000000..b530060 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTFetchedResultsDataSource.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTFetchedResultsDataSource.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTHasher.h b/Pods/Headers/Public/Roxas/RSTHasher.h new file mode 120000 index 0000000..23eeb7a --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTHasher.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTHasher.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTHelperFile.h b/Pods/Headers/Public/Roxas/RSTHelperFile.h new file mode 120000 index 0000000..1014026 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTHelperFile.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTHelperFile.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTLaunchViewController.h b/Pods/Headers/Public/Roxas/RSTLaunchViewController.h new file mode 120000 index 0000000..2580dcc --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTLaunchViewController.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTLaunchViewController.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTLoadOperation.h b/Pods/Headers/Public/Roxas/RSTLoadOperation.h new file mode 120000 index 0000000..95d44ba --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTLoadOperation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTLoadOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTNavigationController.h b/Pods/Headers/Public/Roxas/RSTNavigationController.h new file mode 120000 index 0000000..0218c39 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTNavigationController.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTNavigationController.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTNibView.h b/Pods/Headers/Public/Roxas/RSTNibView.h new file mode 120000 index 0000000..87f7645 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTNibView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTNibView.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTOperation.h b/Pods/Headers/Public/Roxas/RSTOperation.h new file mode 120000 index 0000000..0056541 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTOperation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTOperationQueue.h b/Pods/Headers/Public/Roxas/RSTOperationQueue.h new file mode 120000 index 0000000..eaeebfc --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTOperationQueue.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTOperationQueue.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTOperation_Subclasses.h b/Pods/Headers/Public/Roxas/RSTOperation_Subclasses.h new file mode 120000 index 0000000..c52aaf9 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTOperation_Subclasses.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTOperation_Subclasses.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTPersistentContainer.h b/Pods/Headers/Public/Roxas/RSTPersistentContainer.h new file mode 120000 index 0000000..05d7d14 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTPersistentContainer.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTPersistentContainer.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTPlaceholderView.h b/Pods/Headers/Public/Roxas/RSTPlaceholderView.h new file mode 120000 index 0000000..84feb0e --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTPlaceholderView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTPlaceholderView.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTRelationshipPreservingMergePolicy.h b/Pods/Headers/Public/Roxas/RSTRelationshipPreservingMergePolicy.h new file mode 120000 index 0000000..37ab80e --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTRelationshipPreservingMergePolicy.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTRelationshipPreservingMergePolicy.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTSearchController.h b/Pods/Headers/Public/Roxas/RSTSearchController.h new file mode 120000 index 0000000..dcdbb03 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTSearchController.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTSearchController.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTSeparatorView.h b/Pods/Headers/Public/Roxas/RSTSeparatorView.h new file mode 120000 index 0000000..78c955e --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTSeparatorView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTSeparatorView.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTTintedImageView.h b/Pods/Headers/Public/Roxas/RSTTintedImageView.h new file mode 120000 index 0000000..e433b42 --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTTintedImageView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTTintedImageView.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/RSTToastView.h b/Pods/Headers/Public/Roxas/RSTToastView.h new file mode 120000 index 0000000..c079a9b --- /dev/null +++ b/Pods/Headers/Public/Roxas/RSTToastView.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/RSTToastView.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/Roxas-umbrella.h b/Pods/Headers/Public/Roxas/Roxas-umbrella.h new file mode 120000 index 0000000..7f64658 --- /dev/null +++ b/Pods/Headers/Public/Roxas/Roxas-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/Roxas/Roxas-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/Roxas.h b/Pods/Headers/Public/Roxas/Roxas.h new file mode 120000 index 0000000..29ae3a5 --- /dev/null +++ b/Pods/Headers/Public/Roxas/Roxas.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/Roxas.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/Roxas.modulemap b/Pods/Headers/Public/Roxas/Roxas.modulemap new file mode 120000 index 0000000..aebfbcd --- /dev/null +++ b/Pods/Headers/Public/Roxas/Roxas.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/Roxas/Roxas.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UIAlertAction+Actions.h b/Pods/Headers/Public/Roxas/UIAlertAction+Actions.h new file mode 120000 index 0000000..a4df6d2 --- /dev/null +++ b/Pods/Headers/Public/Roxas/UIAlertAction+Actions.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIAlertAction+Actions.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UICollectionView+CellContent.h b/Pods/Headers/Public/Roxas/UICollectionView+CellContent.h new file mode 120000 index 0000000..705f12e --- /dev/null +++ b/Pods/Headers/Public/Roxas/UICollectionView+CellContent.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UICollectionView+CellContent.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UICollectionViewCell+CellContent.h b/Pods/Headers/Public/Roxas/UICollectionViewCell+CellContent.h new file mode 120000 index 0000000..d578635 --- /dev/null +++ b/Pods/Headers/Public/Roxas/UICollectionViewCell+CellContent.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UICollectionViewCell+CellContent.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UICollectionViewCell+Nibs.h b/Pods/Headers/Public/Roxas/UICollectionViewCell+Nibs.h new file mode 120000 index 0000000..05fbce4 --- /dev/null +++ b/Pods/Headers/Public/Roxas/UICollectionViewCell+Nibs.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UICollectionViewCell+Nibs.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UIImage+Manipulation.h b/Pods/Headers/Public/Roxas/UIImage+Manipulation.h new file mode 120000 index 0000000..e99d96f --- /dev/null +++ b/Pods/Headers/Public/Roxas/UIImage+Manipulation.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIImage+Manipulation.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UIKit+ActivityIndicating.h b/Pods/Headers/Public/Roxas/UIKit+ActivityIndicating.h new file mode 120000 index 0000000..dc7938f --- /dev/null +++ b/Pods/Headers/Public/Roxas/UIKit+ActivityIndicating.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIKit+ActivityIndicating.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UISpringTimingParameters+Conveniences.h b/Pods/Headers/Public/Roxas/UISpringTimingParameters+Conveniences.h new file mode 120000 index 0000000..0af93a6 --- /dev/null +++ b/Pods/Headers/Public/Roxas/UISpringTimingParameters+Conveniences.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UISpringTimingParameters+Conveniences.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UITableView+CellContent.h b/Pods/Headers/Public/Roxas/UITableView+CellContent.h new file mode 120000 index 0000000..db0972d --- /dev/null +++ b/Pods/Headers/Public/Roxas/UITableView+CellContent.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UITableView+CellContent.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UITableViewCell+CellContent.h b/Pods/Headers/Public/Roxas/UITableViewCell+CellContent.h new file mode 120000 index 0000000..905acfd --- /dev/null +++ b/Pods/Headers/Public/Roxas/UITableViewCell+CellContent.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UITableViewCell+CellContent.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UIView+AnimatedHide.h b/Pods/Headers/Public/Roxas/UIView+AnimatedHide.h new file mode 120000 index 0000000..5f964f6 --- /dev/null +++ b/Pods/Headers/Public/Roxas/UIView+AnimatedHide.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIView+AnimatedHide.h \ No newline at end of file diff --git a/Pods/Headers/Public/Roxas/UIViewController+TransitionState.h b/Pods/Headers/Public/Roxas/UIViewController+TransitionState.h new file mode 120000 index 0000000..84a0f71 --- /dev/null +++ b/Pods/Headers/Public/Roxas/UIViewController+TransitionState.h @@ -0,0 +1 @@ +../../../../External/Roxas/Roxas/UIViewController+TransitionState.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h b/Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h new file mode 120000 index 0000000..8457498 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/NSData+ImageContentType.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/NSData+ImageContentType.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDImageCache.h b/Pods/Headers/Public/SDWebImage/SDImageCache.h new file mode 120000 index 0000000..0040b06 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDImageCache.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDImageCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDWebImage-umbrella.h b/Pods/Headers/Public/SDWebImage/SDWebImage-umbrella.h new file mode 120000 index 0000000..9d58120 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDWebImage-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/SDWebImage/SDWebImage-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDWebImage.modulemap b/Pods/Headers/Public/SDWebImage/SDWebImage.modulemap new file mode 120000 index 0000000..cf14e11 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDWebImage.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/SDWebImage/SDWebImage.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDWebImageCompat.h b/Pods/Headers/Public/SDWebImage/SDWebImageCompat.h new file mode 120000 index 0000000..6ca2478 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDWebImageCompat.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageCompat.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDWebImageDecoder.h b/Pods/Headers/Public/SDWebImage/SDWebImageDecoder.h new file mode 120000 index 0000000..a2f3a68 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDWebImageDecoder.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageDecoder.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h b/Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h new file mode 120000 index 0000000..303b03b --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDWebImageDownloader.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageDownloader.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h b/Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h new file mode 120000 index 0000000..99441c4 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDWebImageDownloaderOperation.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageDownloaderOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDWebImageManager.h b/Pods/Headers/Public/SDWebImage/SDWebImageManager.h new file mode 120000 index 0000000..1b81848 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDWebImageManager.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageManager.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDWebImageOperation.h b/Pods/Headers/Public/SDWebImage/SDWebImageOperation.h new file mode 120000 index 0000000..20e5b89 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDWebImageOperation.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImageOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h b/Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h new file mode 120000 index 0000000..50585c6 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/SDWebImagePrefetcher.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/SDWebImagePrefetcher.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/UIButton+WebCache.h b/Pods/Headers/Public/SDWebImage/UIButton+WebCache.h new file mode 120000 index 0000000..19d2d8e --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/UIButton+WebCache.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIButton+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/UIImage+GIF.h b/Pods/Headers/Public/SDWebImage/UIImage+GIF.h new file mode 120000 index 0000000..14d5aad --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/UIImage+GIF.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIImage+GIF.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h b/Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h new file mode 120000 index 0000000..1fb9650 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/UIImage+MultiFormat.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIImage+MultiFormat.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h b/Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h new file mode 120000 index 0000000..fd4dea4 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/UIImageView+HighlightedWebCache.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIImageView+HighlightedWebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h b/Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h new file mode 120000 index 0000000..0c53a47 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/UIImageView+WebCache.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIImageView+WebCache.h \ No newline at end of file diff --git a/Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h b/Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h new file mode 120000 index 0000000..f9890c4 --- /dev/null +++ b/Pods/Headers/Public/SDWebImage/UIView+WebCacheOperation.h @@ -0,0 +1 @@ +../../../SDWebImage/SDWebImage/UIView+WebCacheOperation.h \ No newline at end of file diff --git a/Pods/Headers/Public/SMCalloutView/SMCalloutView-umbrella.h b/Pods/Headers/Public/SMCalloutView/SMCalloutView-umbrella.h new file mode 120000 index 0000000..0a6e06e --- /dev/null +++ b/Pods/Headers/Public/SMCalloutView/SMCalloutView-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/SMCalloutView/SMCalloutView-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/SMCalloutView/SMCalloutView.h b/Pods/Headers/Public/SMCalloutView/SMCalloutView.h new file mode 120000 index 0000000..0c92d2b --- /dev/null +++ b/Pods/Headers/Public/SMCalloutView/SMCalloutView.h @@ -0,0 +1 @@ +../../../SMCalloutView/SMCalloutView.h \ No newline at end of file diff --git a/Pods/Headers/Public/SMCalloutView/SMCalloutView.modulemap b/Pods/Headers/Public/SMCalloutView/SMCalloutView.modulemap new file mode 120000 index 0000000..e89e88f --- /dev/null +++ b/Pods/Headers/Public/SMCalloutView/SMCalloutView.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/SMCalloutView/SMCalloutView.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/SMCalloutView/SMClassicCalloutView.h b/Pods/Headers/Public/SMCalloutView/SMClassicCalloutView.h new file mode 120000 index 0000000..4745232 --- /dev/null +++ b/Pods/Headers/Public/SMCalloutView/SMClassicCalloutView.h @@ -0,0 +1 @@ +../../../SMCalloutView/SMClassicCalloutView.h \ No newline at end of file diff --git a/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore-umbrella.h b/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore-umbrella.h new file mode 120000 index 0000000..3ca6da7 --- /dev/null +++ b/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/SNESDeltaCore/SNESDeltaCore-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore.modulemap b/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore.modulemap new file mode 120000 index 0000000..5ad95c6 --- /dev/null +++ b/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/SNESDeltaCore/SNESDeltaCore.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h b/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h new file mode 120000 index 0000000..57b3147 --- /dev/null +++ b/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/SNESDeltaCore/SNESDeltaCore/Bridge/SNESEmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h b/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h new file mode 120000 index 0000000..771fc98 --- /dev/null +++ b/Pods/Headers/Public/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h @@ -0,0 +1 @@ +../../../../../../Cores/SNESDeltaCore/SNESDeltaCore/Types/SNESTypes.h \ No newline at end of file diff --git a/Pods/Headers/Public/SQLite.swift/SQLite.h b/Pods/Headers/Public/SQLite.swift/SQLite.h new file mode 120000 index 0000000..827d5de --- /dev/null +++ b/Pods/Headers/Public/SQLite.swift/SQLite.h @@ -0,0 +1 @@ +../../../SQLite.swift/Sources/SQLite/SQLite.h \ No newline at end of file diff --git a/Pods/Headers/Public/SQLite.swift/SQLiteObjc.h b/Pods/Headers/Public/SQLite.swift/SQLiteObjc.h new file mode 120000 index 0000000..3f2bb55 --- /dev/null +++ b/Pods/Headers/Public/SQLite.swift/SQLiteObjc.h @@ -0,0 +1 @@ +../../../SQLite.swift/Sources/SQLiteObjc/include/SQLiteObjc.h \ No newline at end of file diff --git a/Pods/Headers/Public/SQLite/SQLite.swift-umbrella.h b/Pods/Headers/Public/SQLite/SQLite.swift-umbrella.h new file mode 120000 index 0000000..45ccc4c --- /dev/null +++ b/Pods/Headers/Public/SQLite/SQLite.swift-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/SQLite.swift/SQLite.swift-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/SQLite/SQLite.swift.modulemap b/Pods/Headers/Public/SQLite/SQLite.swift.modulemap new file mode 120000 index 0000000..614ae76 --- /dev/null +++ b/Pods/Headers/Public/SQLite/SQLite.swift.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/SQLite.swift/SQLite.swift.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftyDropbox/DBChunkInputStream.h b/Pods/Headers/Public/SwiftyDropbox/DBChunkInputStream.h new file mode 120000 index 0000000..b1426f7 --- /dev/null +++ b/Pods/Headers/Public/SwiftyDropbox/DBChunkInputStream.h @@ -0,0 +1 @@ +../../../SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.h \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h b/Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h new file mode 120000 index 0000000..470a27f --- /dev/null +++ b/Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/SwiftyDropbox/SwiftyDropbox-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox.h b/Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox.h new file mode 120000 index 0000000..e406e0b --- /dev/null +++ b/Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox.h @@ -0,0 +1 @@ +../../../SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SwiftyDropbox.h \ No newline at end of file diff --git a/Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap b/Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap new file mode 120000 index 0000000..e01b998 --- /dev/null +++ b/Pods/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/SwiftyDropbox/SwiftyDropbox.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/ZIPFoundation/ZIPFoundation-umbrella.h b/Pods/Headers/Public/ZIPFoundation/ZIPFoundation-umbrella.h new file mode 120000 index 0000000..e30b583 --- /dev/null +++ b/Pods/Headers/Public/ZIPFoundation/ZIPFoundation-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/ZIPFoundation/ZIPFoundation-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/ZIPFoundation/ZIPFoundation.modulemap b/Pods/Headers/Public/ZIPFoundation/ZIPFoundation.modulemap new file mode 120000 index 0000000..6f5bc3d --- /dev/null +++ b/Pods/Headers/Public/ZIPFoundation/ZIPFoundation.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/ZIPFoundation/ZIPFoundation.modulemap \ No newline at end of file diff --git a/Pods/Local Podspecs/DSDeltaCore.podspec.json b/Pods/Local Podspecs/DSDeltaCore.podspec.json new file mode 100644 index 0000000..9ccb540 --- /dev/null +++ b/Pods/Local Podspecs/DSDeltaCore.podspec.json @@ -0,0 +1,48 @@ +{ + "name": "DSDeltaCore", + "version": "0.1", + "summary": "Nintendo DS plug-in for Delta emulator.", + "description": "iOS framework that wraps DeSmuME to allow playing Nintendo DS games with Delta emulator.", + "homepage": "https://github.com/rileytestut/DSDeltaCore", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "https://github.com/rileytestut/DSDeltaCore.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": [ + "DSDeltaCore/**/*.{swift}", + "DSDeltaCore/Bridge/DSEmulatorBridge.mm", + "DSDeltaCore/Types/DSTypes.{h,m}", + "desmume/desmume/src/*.{h,hpp}", + "desmume/desmume/src/libretro-common/include/*.{h,hpp}", + "desmume/desmume/src/libretro-common/include/math/*.{h,hpp}", + "desmume/desmume/src/metaspu/**/*.{h,hpp}", + "libDeSmuME/*.{h,hpp}" + ], + "public_header_files": [ + "DSDeltaCore/Types/DSTypes.h", + "DSDeltaCore/Bridge/DSEmulatorBridge.h" + ], + "header_mappings_dir": "", + "resource_bundles": { + "DSDeltaCore": [ + "DSDeltaCore/**/*.deltamapping", + "DSDeltaCore/**/*.deltaskin" + ] + }, + "dependencies": { + "DeltaCore": [ + + ] + }, + "xcconfig": { + "HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}\" \"$(PODS_ROOT)/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include\"", + "USER_HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header\"", + "OTHER_CFLAGS": "-DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm -fvisibility=hidden" + } +} diff --git a/Pods/Local Podspecs/DeltaCore.podspec.json b/Pods/Local Podspecs/DeltaCore.podspec.json new file mode 100644 index 0000000..8987f2e --- /dev/null +++ b/Pods/Local Podspecs/DeltaCore.podspec.json @@ -0,0 +1,36 @@ +{ + "name": "DeltaCore", + "version": "0.1", + "summary": "iOS Emulator Plug-in Framework", + "description": "iOS framework that powers Delta emulator.", + "homepage": "https://github.com/rileytestut/DeltaCore", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "https://github.com/rileytestut/DeltaCore.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": "DeltaCore/**/*.{h,m,swift}", + "public_header_files": "DeltaCore/DeltaTypes.h", + "resource_bundles": { + "DeltaCore": [ + "DeltaCore/**/*.deltamapping" + ] + }, + "dependencies": { + "ZIPFoundation": [ + + ] + }, + "xcconfig": { + "SWIFT_ACTIVE_COMPILATION_CONDITIONS": "STATIC_LIBRARY" + }, + "script_phases": { + "name": "Copy Swift Header", + "script": "target_dir=${BUILT_PRODUCTS_DIR}\n\nmkdir -p ${target_dir}\n\n# Copy any file that looks like a Swift generated header to the include path\ncp ${DERIVED_SOURCES_DIR}/*-Swift.h ${target_dir}\n" + } +} diff --git a/Pods/Local Podspecs/GBADeltaCore.podspec.json b/Pods/Local Podspecs/GBADeltaCore.podspec.json new file mode 100644 index 0000000..3741382 --- /dev/null +++ b/Pods/Local Podspecs/GBADeltaCore.podspec.json @@ -0,0 +1,47 @@ +{ + "name": "GBADeltaCore", + "version": "0.1", + "summary": "Game Boy Advance plug-in for Delta emulator.", + "description": "iOS framework that wraps VBA-M to allow playing Game Boy Advance games with Delta emulator.", + "homepage": "https://github.com/rileytestut/GBADeltaCore", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "https://github.com/rileytestut/GBADeltaCore.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": [ + "GBADeltaCore/**/*.{h,m,mm,swift}", + "visualboyadvance-m/src/*.h", + "visualboyadvance-m/src/common/*.h", + "visualboyadvance-m/src/sdl/*.h", + "visualboyadvance-m/src/gba/*.h", + "SFML/include/**/*.{h,hpp,inl}", + "SFML/src/SFML/System/{Err,Time,Thread,String}.cpp", + "SFML/src/SFML/System/Unix/ThreadImpl.{hpp,cpp}" + ], + "public_header_files": [ + "GBADeltaCore/Types/GBATypes.h", + "GBADeltaCore/Bridge/GBAEmulatorBridge.h" + ], + "header_mappings_dir": "", + "resource_bundles": { + "GBADeltaCore": [ + "GBADeltaCore/**/*.deltamapping", + "GBADeltaCore/**/*.deltaskin" + ] + }, + "dependencies": { + "DeltaCore": [ + + ] + }, + "xcconfig": { + "HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}\" \"$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/include\" \"$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/src\"", + "USER_HEADER_SEARCH_PATHS": "\"$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/fex\" \"$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/src\"" + } +} diff --git a/Pods/Local Podspecs/GBCDeltaCore.podspec.json b/Pods/Local Podspecs/GBCDeltaCore.podspec.json new file mode 100644 index 0000000..2c5ba21 --- /dev/null +++ b/Pods/Local Podspecs/GBCDeltaCore.podspec.json @@ -0,0 +1,44 @@ +{ + "name": "GBCDeltaCore", + "version": "0.1", + "summary": "Game Boy Color plug-in for Delta emulator.", + "description": "iOS framework that wraps Gambatte to allow playing GBC games with Delta emulator.", + "homepage": "https://github.com/rileytestut/GBCDeltaCore", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "https://github.com/rileytestut/GBCDeltaCore.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": [ + "GBCDeltaCore/**/*.{h,m,mm,cpp,swift}", + "gambatte/libgambatte/include/*.h", + "gambatte/common/*.h", + "gambatte/libgambatte/src/*.h" + ], + "public_header_files": [ + "GBCDeltaCore/Types/GBCTypes.h", + "GBCDeltaCore/Bridge/GBCEmulatorBridge.h" + ], + "header_mappings_dir": "", + "resource_bundles": { + "GBCDeltaCore": [ + "GBCDeltaCore/**/*.deltamapping", + "GBCDeltaCore/**/*.deltaskin" + ] + }, + "dependencies": { + "DeltaCore": [ + + ] + }, + "xcconfig": { + "HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}\"", + "USER_HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header\"", + "OTHER_CFLAGS": "-DHAVE_CSTDINT" + } +} diff --git a/Pods/Local Podspecs/Harmony.podspec.json b/Pods/Local Podspecs/Harmony.podspec.json new file mode 100644 index 0000000..a5456ec --- /dev/null +++ b/Pods/Local Podspecs/Harmony.podspec.json @@ -0,0 +1,49 @@ +{ + "name": "Harmony", + "version": "0.1", + "summary": "iOS Syncing Framework", + "description": "iOS framework that automatically syncs Core Data databases across different backends.", + "homepage": "https://github.com/rileytestut/Harmony", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "https://github.com/rileytestut/Harmony.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": "Harmony/**/*.{h,m,swift}", + "public_header_files": "Harmony/Harmony.h", + "header_mappings_dir": "", + "resources": "Harmony/**/*.xcdatamodeld", + "dependencies": { + "Roxas": [ + + ] + }, + "subspecs": [ + { + "name": "Harmony-Dropbox", + "source_files": "Backends/Dropbox/Harmony-Dropbox/**/*.swift", + "dependencies": { + "SwiftyDropbox": [ + "~> 5.0.0" + ] + } + }, + { + "name": "Harmony-Drive", + "source_files": "Backends/Drive/Harmony-Drive/**/*.swift", + "dependencies": { + "GoogleAPIClientForREST/Drive": [ + "~> 1.3.0" + ], + "GoogleSignIn": [ + "~> 4.4.0" + ] + } + } + ] +} diff --git a/Pods/Local Podspecs/N64DeltaCore.podspec.json b/Pods/Local Podspecs/N64DeltaCore.podspec.json new file mode 100644 index 0000000..8ddc44d --- /dev/null +++ b/Pods/Local Podspecs/N64DeltaCore.podspec.json @@ -0,0 +1,237 @@ +{ + "name": "N64DeltaCore", + "version": "0.1", + "summary": "Nintendo 64 plug-in for Delta emulator.", + "description": "iOS framework that wraps Mupen64Plus to allow playing Nintendo 64 games with Delta emulator.", + "homepage": "https://github.com/rileytestut/N64DeltaCore", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "https://github.com/rileytestut/N64DeltaCore.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": [ + "N64DeltaCore/**/*.{h,m,mm,cpp,swift}", + "Mupen64Plus/mupen64plus-core/src/backends/api/video_capture_backend.c", + "Mupen64Plus/mupen64plus-core/src/device/dd/dd_controller.c", + "Mupen64Plus/mupen64plus-core/src/device/controllers/paks/biopak.c", + "Mupen64Plus/mupen64plus-core/src/backends/dummy_video_capture.c", + "Mupen64Plus/mupen64plus-core/src/api/**/*.{h,hpp}", + "Mupen64Plus/mupen64plus-core/src/backends/**/*.{h,hpp}", + "Mupen64Plus/mupen64plus-core/src/device/**/*.{h,hpp}", + "Mupen64Plus/mupen64plus-core/src/main/**/*.{h,hpp}", + "Mupen64Plus/mupen64plus-core/src/osal/**/*.{h,hpp}", + "Mupen64Plus/mupen64plus-core/src/osd/**/*.{h,hpp}", + "Mupen64Plus/mupen64plus-core/src/plugin/**/*.{h,hpp}", + "Mupen64Plus/mupen64plus-core/subprojects/**/*.{h,hpp}", + "libMupen64Plus/SDL/*.{h,hpp}" + ], + "exclude_files": "Mupen64Plus/mupen64plus-core/src/api/config.h", + "public_header_files": [ + "N64DeltaCore/Types/N64Types.h", + "N64DeltaCore/Bridge/N64EmulatorBridge.h" + ], + "header_mappings_dir": "", + "resource_bundles": { + "N64DeltaCore": [ + "N64DeltaCore/**/*.deltamapping", + "N64DeltaCore/**/*.deltaskin", + "Mupen64Plus/**/*.ini" + ] + }, + "xcconfig": { + "HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}\" \"$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**\" \"$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL\"", + "USER_HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header\" \"$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src\" \"$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api\" \"$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd\" \"$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src\"", + "CLANG_ENABLE_MODULES": "NO", + "GCC_PREPROCESSOR_DEFINITIONS": "STATIC_LIBRARY=1" + }, + "dependencies": { + "DeltaCore": [ + + ] + }, + "subspecs": [ + { + "name": "RSP", + "source_files": [ + "Mupen64Plus/mupen64plus-rsp-hle/src/*.{h,c}", + "N64DeltaCore-RSP/plugin_delta.c" + ], + "exclude_files": [ + "Mupen64Plus/mupen64plus-rsp-hle/src/osal_dynamiclib_*.c", + "Mupen64Plus/mupen64plus-rsp-hle/src/plugin.c", + "Mupen64Plus/mupen64plus-rsp-hle/src/memory.h" + ], + "private_header_files": "**/*", + "header_mappings_dir": "Mupen64Plus", + "xcconfig": { + "OTHER_CFLAGS": "-fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math" + } + }, + { + "name": "Video", + "source_files": [ + "Mupen64Plus/GLideN64/src/**/*.{h,hpp}", + "Mupen64Plus/libpng/**/*.{h,hpp}", + "N64DeltaCore-Video/plugin_delta.cpp", + "**/3DMath.cpp", + "**/ClipPolygon.cpp", + "**/ColorBufferReader.cpp", + "**/ColorBufferToRDRAM.cpp", + "**/Combiner.cpp", + "**/CombinerKey.cpp", + "**/CombinerProgram.cpp", + "**/CommonAPIImpl_common.cpp", + "**/CommonAPIImpl_mupenplus.cpp", + "**/CommonPluginAPI.cpp", + "**/Config_mupenplus.cpp", + "**/Config.cpp", + "**/Context.cpp", + "**/convert.cpp", + "**/CRC_OPT.cpp", + "**/DebugDump.cpp", + "**/Debugger.cpp", + "**/DepthBuffer.cpp", + "**/DepthBufferRender.cpp", + "**/DepthBufferToRDRAM.cpp", + "**/DisplayLoadProgress.cpp", + "**/DisplayWindow.cpp", + "**/F3D.cpp", + "**/F3DAM.cpp", + "**/F3DBETA.cpp", + "**/F3DDKR.cpp", + "**/F3DEX.cpp", + "**/F3DEX2.cpp", + "**/F3DEX2ACCLAIM.cpp", + "**/F3DEX2CBFD.cpp", + "**/F3DFLX2.cpp", + "**/F3DGOLDEN.cpp", + "**/F3DPD.cpp", + "**/F3DSETA.cpp", + "**/F3DTEXA.cpp", + "**/F3DZEX2.cpp", + "**/F5Indi_Naboo.cpp", + "**/F5Rogue.cpp", + "**/FrameBuffer.cpp", + "**/FrameBufferInfo.cpp", + "**/GBI.cpp", + "**/gDP.cpp", + "**/GLFunctions.cpp", + "**/GLideN64.cpp", + "**/glsl_CombinerInputs.cpp", + "**/glsl_CombinerProgramBuilder.cpp", + "**/glsl_CombinerProgramImpl.cpp", + "**/glsl_CombinerProgramUniformFactory.cpp", + "**/glsl_FXAA.cpp", + "**/glsl_ShaderStorage.cpp", + "**/glsl_SpecialShadersFactory.cpp", + "**/glsl_Utils.cpp", + "**/GraphicsDrawer.cpp", + "**/gSP.cpp", + "**/Keys.cpp", + "**/L3D.cpp", + "**/L3DEX.cpp", + "**/L3DEX2.cpp", + "**/Log_ios.mm", + "**/MemoryStatus_mupenplus.cpp", + "**/mupen64plus_DisplayWindow.cpp", + "**/MupenPlusAPIImpl.cpp", + "**/MupenPlusPluginAPI.cpp", + "**/N64.cpp", + "**/NoiseTexture.cpp", + "**/ObjectHandle.cpp", + "**/opengl_Attributes.cpp", + "**/opengl_BufferedDrawer.cpp", + "**/opengl_BufferManipulationObjectFactory.cpp", + "**/opengl_CachedFunctions.cpp", + "**/opengl_ColorBufferReaderWithBufferStorage.cpp", + "**/opengl_ColorBufferReaderWithPixelBuffer.cpp", + "**/opengl_ColorBufferReaderWithReadPixels.cpp", + "**/opengl_ContextImpl.cpp", + "**/opengl_GLInfo.cpp", + "**/opengl_Parameters.cpp", + "**/opengl_TextureManipulationObjectFactory.cpp", + "**/opengl_UnbufferedDrawer.cpp", + "**/opengl_Utils.cpp", + "**/osal_files_ios.mm", + "**/PaletteTexture.cpp", + "**/Performance.cpp", + "**/png.c", + "**/pngerror.c", + "**/pngget.c", + "**/pngmem.c", + "**/pngpread.c", + "**/pngread.c", + "**/pngrio.c", + "**/pngrtran.c", + "**/pngrutil.c", + "**/pngset.c", + "**/pngtest.c", + "**/pngtrans.c", + "**/pngwio.c", + "**/pngwrite.c", + "**/pngwtran.c", + "**/pngwutil.c", + "**/PostProcessor.cpp", + "**/RDP.cpp", + "**/RDRAMtoColorBuffer.cpp", + "**/RSP_LoadMatrix.cpp", + "**/RSP.cpp", + "**/S2DEX.cpp", + "**/S2DEX2.cpp", + "**/SoftwareRender.cpp", + "**/T3DUX.cpp", + "**/TexrectDrawer.cpp", + "**/TextDrawerStub.cpp", + "**/TextureFilterHandler.cpp", + "**/TextureFilters_2xsai.cpp", + "**/TextureFilters_hq2x.cpp", + "**/TextureFilters_hq4x.cpp", + "**/TextureFilters_xbrz.cpp", + "**/TextureFilters.cpp", + "**/Textures.cpp", + "**/Turbo3D.cpp", + "**/TxCache.cpp", + "**/TxDbg_ios.mm", + "**/TxFilter.cpp", + "**/TxFilterExport.cpp", + "**/TxHiResCache.cpp", + "**/TxImage.cpp", + "**/TxQuantize.cpp", + "**/TxReSample.cpp", + "**/TxTexCache.cpp", + "**/TxUtil.cpp", + "**/txWidestringWrapper.cpp", + "**/VI.cpp", + "**/xxhash.c", + "**/ZlutTexture.cpp", + "**/ZSort.cpp", + "**/ZSortBOSS.cpp" + ], + "exclude_files": [ + "Mupen64Plus/GLideN64/src/windows/**/*", + "Mupen64Plus/GLideN64/src/inc/config.h", + "Mupen64Plus/GLideN64/src/CommonPluginAPI.cpp", + "Mupen64Plus/GLideN64/src/MupenPlusPluginAPI.cpp", + "Mupen64Plus/GLideN64/src/mupenplus/MupenPlusAPIImpl.cpp", + "Mupen64Plus/GLideN64/src/mupenplus/CommonAPIImpl_mupenplus.cpp", + "Mupen64Plus/GLideN64/src/mupenplus/Config_mupenplus.cpp" + ], + "private_header_files": "**/*", + "header_mappings_dir": "", + "xcconfig": { + "HEADER_SEARCH_PATHS": "\"$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src\" \"$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc\"", + "USER_HEADER_SEARCH_PATHS": "\"$(PODS_ROOT)/Headers/Private/N64DeltaCore/N64DeltaCore-Video/**\" \"$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src\" \"$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src\"", + "ALWAYS_SEARCH_USER_PATHS": "YES", + "OTHER_CFLAGS": "-fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -D__VEC4_OPT -fvisibility=hidden", + "OTHER_LDFLAGS": "-Wl,-exported_symbol,_Video_PluginStartup,-exported_symbol,_Video_PluginShutdown,-exported_symbol,_Video_PluginGetVersion,-exported_symbol,_Video_RomOpen,-exported_symbol,_Video_RomClosed,-exported_symbol,_ConfigGetSharedDataFilepath,-exported_symbol,_ConfigGetUserConfigPath,-exported_symbol,_ConfigGetUserCachePath,-exported_symbol,_ConfigGetUserDataPath,-exported_symbol,_ConfigOpenSection,-exported_symbol,_ConfigDeleteSection,-exported_symbol,_ConfigSaveSection,-exported_symbol,_ConfigSaveFile,-exported_symbol,_ConfigSetDefaultInt,-exported_symbol,_ConfigSetDefaultFloat,-exported_symbol,_ConfigSetDefaultBool,-exported_symbol,_ConfigSetDefaultString,-exported_symbol,_ConfigGetParamInt,-exported_symbol,_ConfigGetParamFloat,-exported_symbol,_ConfigGetParamBool,-exported_symbol,_ConfigGetParamString,-exported_symbol,_ConfigExternalGetParameter,-exported_symbol,_ConfigExternalOpen,-exported_symbol,_ConfigExternalClose,-exported_symbol,_VidExt_Init,-exported_symbol,_VidExt_Quit,-exported_symbol,_VidExt_ListFullscreenModes,-exported_symbol,_VidExt_SetVideoMode,-exported_symbol,_VidExt_SetCaption,-exported_symbol,_VidExt_ToggleFullScreen,-exported_symbol,_VidExt_ResizeWindow,-exported_symbol,_VidExt_GL_GetProcAddress,-exported_symbol,_VidExt_GL_SetAttribute,-exported_symbol,_VidExt_GL_GetAttribute,-exported_symbol,_VidExt_GL_SwapBuffers,-exported_symbol,_ChangeWindow,-exported_symbol,_InitiateGFX,-exported_symbol,_MoveScreen,-exported_symbol,_ProcessDList,-exported_symbol,_ProcessRDPList,-exported_symbol,_ShowCFB,-exported_symbol,_UpdateScreen,-exported_symbol,_ViStatusChanged,-exported_symbol,_ViWidthChanged,-exported_symbol,_ReadScreen2,-exported_symbol,_SetRenderingCallback,-exported_symbol,_FBRead,-exported_symbol,_FBWrite,-exported_symbol,_FBGetFrameBufferInfo,-exported_symbol,_ResizeVideoOutput,-exported_symbol,_RSP_PluginStartup,-exported_symbol,_RSP_PluginShutdown,-exported_symbol,_RSP_PluginGetVersion,-exported_symbol,_DoRspCycles,-exported_symbol,_InitiateRSP,-exported_symbol,_RSP_RomClosed,-exported_symbol,_CoreGetAPIVersions,-exported_symbol,_ConfigGetParameter,-exported_symbol,_ConfigSetParameter,-exported_symbol,_CoreDoCommand", + "GCC_PREPROCESSOR_DEFINITIONS": "MUPENPLUSAPI TXFILTER_LIB OS_IOS GLESX GL_ERROR_DEBUG GL_DEBUG GLESX PNG_ARM_NEON_OPT=0", + "GCC_OPTIMIZATION_LEVEL": "3" + } + } + ] +} diff --git a/Pods/Local Podspecs/NESDeltaCore.podspec.json b/Pods/Local Podspecs/NESDeltaCore.podspec.json new file mode 100644 index 0000000..194368e --- /dev/null +++ b/Pods/Local Podspecs/NESDeltaCore.podspec.json @@ -0,0 +1,40 @@ +{ + "name": "NESDeltaCore", + "version": "0.1", + "summary": "Nintendo Entertainment System plug-in for Delta emulator.", + "description": "iOS framework that wraps Nestopia to allow playing NES games with Delta emulator.", + "homepage": "https://github.com/rileytestut/NESDeltaCore", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "https://github.com/rileytestut/NESDeltaCore.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": [ + "NESDeltaCore/**/*.{h,m,mm,swift}", + "NestopiaJS/NESEmulatorBridge.cpp", + "nestopia/source/core/**/*.{hpp,h}" + ], + "public_header_files": "NestopiaJS/NESEmulatorBridge.hpp", + "header_mappings_dir": "", + "resource_bundles": { + "NESDeltaCore": [ + "NESDeltaCore/**/*.deltamapping", + "NESDeltaCore/**/*.deltaskin", + "NestopiaJS/NstDatabase.xml" + ] + }, + "dependencies": { + "DeltaCore": [ + + ] + }, + "xcconfig": { + "SWIFT_ACTIVE_COMPILATION_CONDITIONS": "FRAMEWORK NATIVE", + "USER_HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header\"" + } +} diff --git a/Pods/Local Podspecs/Roxas.podspec.json b/Pods/Local Podspecs/Roxas.podspec.json new file mode 100644 index 0000000..4697aa1 --- /dev/null +++ b/Pods/Local Podspecs/Roxas.podspec.json @@ -0,0 +1,22 @@ +{ + "name": "Roxas", + "version": "0.1", + "summary": "Private iOS Development Framework", + "description": "Private iOS Development Framework used by me in my projects.", + "homepage": "https://github.com/rileytestut/roxas", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "http://github.com/rileytestut/Roxas.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": "Roxas/*.{h,m}", + "public_header_files": "Roxas/*.h", + "private_header_files": "Roxas/RSTCellContentDataSource_Subclasses.h", + "prefix_header_file": "Roxas/Roxas-Prefix.pch", + "resources": "Roxas/*.xib" +} diff --git a/Pods/Local Podspecs/SNESDeltaCore.podspec.json b/Pods/Local Podspecs/SNESDeltaCore.podspec.json new file mode 100644 index 0000000..f08f05c --- /dev/null +++ b/Pods/Local Podspecs/SNESDeltaCore.podspec.json @@ -0,0 +1,43 @@ +{ + "name": "SNESDeltaCore", + "version": "0.1", + "summary": "Super Nintendo Entertainment System plug-in for Delta emulator.", + "description": "iOS framework that wraps Snes9x to allow playing SNES games with Delta emulator.", + "homepage": "https://github.com/rileytestut/SNESDeltaCore", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "https://github.com/rileytestut/SNESDeltaCore.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": [ + "SNESDeltaCore/**/*.{h,m,mm,swift}", + "snes9x/*.{h,hpp}", + "snes9x/apu/*.{h,hpp}" + ], + "public_header_files": [ + "SNESDeltaCore/Types/SNESTypes.h", + "SNESDeltaCore/Bridge/SNESEmulatorBridge.h" + ], + "header_mappings_dir": "", + "resource_bundles": { + "SNESDeltaCore": [ + "SNESDeltaCore/**/*.deltamapping", + "SNESDeltaCore/**/*.deltaskin" + ] + }, + "dependencies": { + "DeltaCore": [ + + ] + }, + "xcconfig": { + "HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}\"", + "USER_HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header\" \"$(PODS_ROOT)/Headers/Private/SNESDeltaCore/snes9x\"", + "OTHER_CFLAGS": "-funsigned-char -ffast-math -finline -fno-builtin -fno-common -fomit-frame-pointer -funroll-loops -fstrict-aliasing -DHAVE_STDINT_H -DARM" + } +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 9931d06..bada546 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -1,37 +1,147 @@ PODS: + - Alamofire (4.7.3) - Crashlytics (3.8.6): - Fabric (~> 1.6.3) + - DeltaCore (0.1): + - ZIPFoundation + - DSDeltaCore (0.1): + - DeltaCore - Fabric (1.6.13) + - GBADeltaCore (0.1): + - DeltaCore + - GBCDeltaCore (0.1): + - DeltaCore + - GoogleAPIClientForREST/Core (1.3.11): + - GTMSessionFetcher (>= 1.1.7) + - GoogleAPIClientForREST/Drive (1.3.11): + - GoogleAPIClientForREST/Core + - GTMSessionFetcher (>= 1.1.7) + - GoogleSignIn (4.4.0): + - "GoogleToolboxForMac/NSDictionary+URLArguments (~> 2.1)" + - "GoogleToolboxForMac/NSString+URLArguments (~> 2.1)" + - GTMSessionFetcher/Core (~> 1.1) + - GoogleToolboxForMac/DebugUtils (2.2.2): + - GoogleToolboxForMac/Defines (= 2.2.2) + - GoogleToolboxForMac/Defines (2.2.2) + - "GoogleToolboxForMac/NSDictionary+URLArguments (2.2.2)": + - GoogleToolboxForMac/DebugUtils (= 2.2.2) + - GoogleToolboxForMac/Defines (= 2.2.2) + - "GoogleToolboxForMac/NSString+URLArguments (= 2.2.2)" + - "GoogleToolboxForMac/NSString+URLArguments (2.2.2)" + - GTMSessionFetcher (1.3.1): + - GTMSessionFetcher/Full (= 1.3.1) + - GTMSessionFetcher/Core (1.3.1) + - GTMSessionFetcher/Full (1.3.1): + - GTMSessionFetcher/Core (= 1.3.1) + - Harmony (0.1): + - Harmony/Harmony-Drive (= 0.1) + - Harmony/Harmony-Dropbox (= 0.1) + - Roxas + - Harmony/Harmony-Drive (0.1): + - GoogleAPIClientForREST/Drive (~> 1.3.0) + - GoogleSignIn (~> 4.4.0) + - Roxas + - Harmony/Harmony-Dropbox (0.1): + - Roxas + - SwiftyDropbox (~> 5.0.0) + - N64DeltaCore (0.1): + - DeltaCore + - N64DeltaCore/RSP (= 0.1) + - N64DeltaCore/Video (= 0.1) + - N64DeltaCore/RSP (0.1): + - DeltaCore + - N64DeltaCore/Video (0.1): + - DeltaCore + - NESDeltaCore (0.1): + - DeltaCore + - Roxas (0.1) - SDWebImage (3.8.3): - SDWebImage/Core (= 3.8.3) - SDWebImage/Core (3.8.3) - SMCalloutView (2.1.5) - - SQLite.swift (0.11.6): - - SQLite.swift/standard (= 0.11.6) - - SQLite.swift/standard (0.11.6) + - SNESDeltaCore (0.1): + - DeltaCore + - SQLite.swift (0.12.2): + - SQLite.swift/standard (= 0.12.2) + - SQLite.swift/standard (0.12.2) + - SwiftyDropbox (5.0.0): + - Alamofire (~> 4.7.3) + - ZIPFoundation (0.9.10) DEPENDENCIES: - Crashlytics (~> 3.8.0) + - DeltaCore (from `Cores/DeltaCore`) + - DSDeltaCore (from `Cores/DSDeltaCore`) - Fabric (~> 1.6.0) + - GBADeltaCore (from `Cores/GBADeltaCore`) + - GBCDeltaCore (from `Cores/GBCDeltaCore`) + - Harmony (from `External/Harmony`) + - N64DeltaCore (from `Cores/N64DeltaCore`) + - NESDeltaCore (from `Cores/NESDeltaCore`) + - Roxas (from `External/Roxas`) - SDWebImage (~> 3.8) - SMCalloutView - - SQLite.swift (~> 0.11.0) + - SNESDeltaCore (from `Cores/SNESDeltaCore`) + - SQLite.swift (~> 0.12.0) SPEC REPOS: - https://github.com/cocoapods/specs.git: + trunk: + - Alamofire - Crashlytics - Fabric + - GoogleAPIClientForREST + - GoogleSignIn + - GoogleToolboxForMac + - GTMSessionFetcher - SDWebImage - SMCalloutView - SQLite.swift + - SwiftyDropbox + - ZIPFoundation + +EXTERNAL SOURCES: + DeltaCore: + :path: Cores/DeltaCore + DSDeltaCore: + :path: Cores/DSDeltaCore + GBADeltaCore: + :path: Cores/GBADeltaCore + GBCDeltaCore: + :path: Cores/GBCDeltaCore + Harmony: + :path: External/Harmony + N64DeltaCore: + :path: Cores/N64DeltaCore + NESDeltaCore: + :path: Cores/NESDeltaCore + Roxas: + :path: External/Roxas + SNESDeltaCore: + :path: Cores/SNESDeltaCore SPEC CHECKSUMS: + Alamofire: c7287b6e5d7da964a70935e5db17046b7fde6568 Crashlytics: 95d05f4e4c19a771250c4bd9ce344d996de32bbf + DeltaCore: 1b246a4e436c6b2b377ea84a1bc847a1c5f4b6cd + DSDeltaCore: 7dc6a18e25d8036a5022a34c1ffb4062af9eed3d Fabric: 2fb5676bc811af011a04513451f463dac6803206 + GBADeltaCore: 10ff8fde89ed95c99888a9b7102b3d3e45d7458d + GBCDeltaCore: 7468dff742927139a14f6fc909e810f253b6293c + GoogleAPIClientForREST: 0f19a8280dfe6471f76016645d26eb5dae305101 + GoogleSignIn: 7ff245e1a7b26d379099d3243a562f5747e23d39 + GoogleToolboxForMac: 800648f8b3127618c1b59c7f97684427630c5ea3 + GTMSessionFetcher: cea130bbfe5a7edc8d06d3f0d17288c32ffe9925 + Harmony: 1978345dcf69ce6cf4c94c07405ebf01b7d6fe28 + N64DeltaCore: fd4823c300feae8d93ceea8aca2024a0be13c1d5 + NESDeltaCore: 41ab438dd78d51d4636aacb7d9a7336ea3d4728c + Roxas: 1990039f843f5dc284918dc82375feb80020ef62 SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c SMCalloutView: 5c0ee363dc8e7204b2fda17dfad38c93e9e23481 - SQLite.swift: 46d890be8601964454bd3392527f863d1b802d45 + SNESDeltaCore: eb7053f45204f9a6ceb426d53649e6ee35b97684 + SQLite.swift: d2b4642190917051ce6bd1d49aab565fe794eea3 + SwiftyDropbox: 378b4425a2e8d0cb24c7b0f2e3af72bfbaaf1e73 + ZIPFoundation: 249fa8890597086cd536bb2df5c9804d84e122b0 -PODFILE CHECKSUM: 1d7f9ff69da571c7991621312e07aa4b16a0a074 +PODFILE CHECKSUM: f31937de08bbf917d8b684c542c81b49e5fb72b5 -COCOAPODS: 1.6.1 +COCOAPODS: 1.8.4 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 2765bab..f0a68d7 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -7,7 +7,16 @@ objects = { /* Begin PBXAggregateTarget section */ - ABA9A411BB5A359862E5F1AA6238278E /* Crashlytics */ = { + ABB048B191245233986A7CD75FE412A5 /* Fabric */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 13B185864087F75D556AC109B2D70BF7 /* Build configuration list for PBXAggregateTarget "Fabric" */; + buildPhases = ( + ); + dependencies = ( + ); + name = Fabric; + }; + C0E41540D6862472ED7F2FA11669BE1F /* Crashlytics */ = { isa = PBXAggregateTarget; buildConfigurationList = A084C0089544D8EEE7DA4C6D8EEEF9ED /* Build configuration list for PBXAggregateTarget "Crashlytics" */; buildPhases = ( @@ -17,670 +26,9716 @@ ); name = Crashlytics; }; - D35E9EC86D36A4C8BC1704199FDB3552 /* Fabric */ = { + CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */ = { isa = PBXAggregateTarget; - buildConfigurationList = 13B185864087F75D556AC109B2D70BF7 /* Build configuration list for PBXAggregateTarget "Fabric" */; + buildConfigurationList = CE0641E81519F94D3542E1D4F4FE19EC /* Build configuration list for PBXAggregateTarget "GoogleSignIn" */; buildPhases = ( ); dependencies = ( + AA57705443CF5E71F105FC141862A122 /* PBXTargetDependency */, + FF631AD5C73AE7F8166EE7B8C7418A62 /* PBXTargetDependency */, ); - name = Fabric; + name = GoogleSignIn; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0085B4B7B49EC2C3B7E8D442E41C6352 /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5266E6AC21119A2F6D7CBB2F0531B24B /* RTree.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0251CF8FCE9C1C91ABF4F75AF18DA482 /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = EC10E730EE8610E12ED96CCE042945F4 /* SMCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0480E005B998597CDAF4840B2C6CC21B /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 832E61F68FD6639801EFD03761EECDC8 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BC4BB8936C01AC3D3AEF6F309CCFB43 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 67D7D685D444F51160997382A18CB2F6 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 112F84060685CB3A9C75A420BBF70C02 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6022E5A2546035435A6CA0B77B4E913C /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 184E6A0A237A89E33427F4896778BFB0 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DF20E040393CF0169E55AA7BEF796CC /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1F7A9FB785C854EBCB778C6786082946 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA868F2BDF1D4CEF8EEBE745EA282788 /* Errors.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 25A2FCD6B5A7E73A006EA1ED15D25CE9 /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 28E53C4E2B859FB0F3AB41F90491442F /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2B0626ABC52CB360ED779C13293D8B25 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 78712328292CDF1D74FAE866EC09998F /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2E52D7D4B89256F06929395CFC03871B /* SMClassicCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 989354F9119F028A77D53BE02742B159 /* SMClassicCalloutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 337C6A4ADF3F69EB0172FA1E585F400F /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = FD0DB17A8883C364E5F6167B2E7CD49B /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37CF4910BDFEF20A550249B7EB9E444E /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 126591F57D0CB50EC78CF33F2CA8BB94 /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3E54D875BEF34E1F741C1F72ACB66A63 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 0042FABF23BCC8AE231804A1B58905D7 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 448B22FD9431017177D4961A4D9D7D58 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A90710E9C9E2359B7A1AD689E8B574E /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 459EEF15B88FD633844AA76AC51EFA1D /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E589067F42825289B49470E6D03705C /* CoreFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4994361C923A5B9F90D18D6E2C7FCDEF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D9C2B1592E09AFC6D5395899C4EE4D /* Foundation.framework */; }; - 4C9446D9CF826EDEE8F3D8D5E5365380 /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 80BB2EF0C80BBC568430946BC608BE98 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F8EDAE8E97D3E491882F0BAF88363F3 /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6AA374D927B81DEA0F30AA86930BDC /* Pods-Delta-dummy.m */; }; - 5574087481C1B8E436A1E9AD7B4927DB /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BB0462F6701B4A3E0EC06EC6E6DDACE /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5C9A7DCDB08294CB236AD26F1F9159A0 /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7335CDCFC53B999B267FD34E74550BFB /* SQLite.swift-dummy.m */; }; - 5F90E8A1BB53CB8873E1962EC30D624A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D9C2B1592E09AFC6D5395899C4EE4D /* Foundation.framework */; }; - 641778FE12F97857A50BE261B15B2F5C /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BDD945ABD27497EE0A5D6058440CC256 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66144773F60E9140636ECF0D3128B405 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27F58EC380D65ED2D91C2B3FBB4796A1 /* Setter.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 661471DFE46A1A15CF59D850025021E6 /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE4E762B2B33A6CD2A03BBA3187CA346 /* FTS4.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 67EAB3B13FC85B894F7AEBDFF9C349D6 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = A79CFD14B8EC38A60D9A612DBC0AA0A1 /* Helpers.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6BF73843D9A21BDD1D8E427F5826758E /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A4A3514D6C98C4440E6DC5A7534FF3BA /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6D270F42FF3DFD894835B63B6C36C4B8 /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABDF820CF7701781C0725766B21B05C1 /* Coding.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6FE1ED95ABA95F6A1E457FCE35D5EBA6 /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0A4E828FF9A9324654F24314C51196B /* Query.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 724B79E991BDA4C491F7022F49A05012 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 23CCE08242B847BF937E45411C0C8BC2 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 73252DD309D55520ACBEAAE0DF29F69B /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 72BB337B59A2CEA23D4961C3F3C0E97A /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E778E8164ABD251CFC1C85C0C1EC36 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 36F8B3FFE11DF0BA01F89DDC41EB0FC4 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 766B26DF95710ABF416DB1B1C3307C86 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 445CD4935C10B23DF4EA5B3D48921AA9 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 771F4D81EA9ABC58A0B27D97441D093D /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D80B5E10130514F611C2DAC7DBCBF10 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78EB149D706A3E9564BC79DC1E171698 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C32D273940AA5A97C91B8501CE9F723 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 79D32ADF1C61C37E59CA2953C98306D2 /* SMCalloutView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D417D1C8F981BDBD3BCD1129B317885 /* SMCalloutView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A2302CF922FB5D929E0604476008441 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = ADD80AE795FC81A782FE8DF14BEE1006 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7EF08521E1A1CDDE45021F58D0AE0548 /* SMClassicCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EBFC4EB67413742CB79FCC7FC8D5257 /* SMClassicCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8A8BAF65CD7800A51C4F2E80C5DFB002 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CD9C57AA430063838E3038BED77BD91 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 90321E5DFA902711AB0DE7C7C5517E87 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D7EC9A83D14FFF23FFBF2ADBF3F52BB8 /* SDWebImage-dummy.m */; }; - 9265358612C2E1DA94177D7B439824C5 /* SMCalloutView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E317305046E9C38872BF4020ECF951BB /* SMCalloutView-dummy.m */; }; - 931AC92E1957B3DA80862DE257F4A92C /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F86FAA009AC5B2EAF9CD2080A94DE323 /* ImageIO.framework */; }; - 937DEADE0FE1F015638CCDE952F121CB /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 804D470AF6CF5C32B21B6115DB39EB9E /* Blob.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9EA2BBE738E2CA915692C35E53AC9829 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C2131CE481E7D30B9606151BBF1D729 /* Expression.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9EF3DF4DAC916E0E1443AC1FC542837C /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = D60558A06CA44255E97475B59032ACB7 /* SQLite.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A083E583EB3A2B64DB85903BB55F5F63 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = F32ED0D241931ED9237B765DF1C4D156 /* Statement.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A3790C17AA9381C88D83A87186F67579 /* DateAndTimeFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBDE7009E9C907B8005E9EDB941FA865 /* DateAndTimeFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A7D5BF0AD6C422824AEA2A748CD6F630 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B4F3B733E1F34DA5AE98B7AE0A5C0CA /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AAD26ED719763FC1F182B785749399B4 /* SQLite-Bridging.m in Sources */ = {isa = PBXBuildFile; fileRef = D5FB096E1CFB10C892CF7AFB0376E4C1 /* SQLite-Bridging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ABAC28890D419685AF29BED46FAF1B11 /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B0C7318DD9E2481D970A30CF7F288C2 /* FTS5.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B342D8162C250CA9504C20A671B38DA6 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F24049036184F6C48F249A5B6253492 /* Operators.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B7C116BE149EBE5862D07FB23239E28B /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7DE364C1370A88BF43DED80F65EDA9B /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA66D1C5E69F91AFADCFA26A2D1366BA /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44A31645E74B67C3870D27DCBAB4B4A /* Connection.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BC62290696E2EEFF9620F658B7DEFC3E /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B707C4F015D1CBD343F58FD461D31A9F /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C33120AB7F162F6A36C69CAD79D75A29 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = AAE2B2A62478F0A6165ED3BD869757E4 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C6F70C9B175363719E12355B5D442B62 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 25C681FF70FBDB38BE4E9985932A2DDB /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7E472D859F3C3CC7A4ADE5968DFAEE0 /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63387FA3C046A9A94BFDCB460BD4DAA1 /* Foundation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CFF129D29AA80B99EC3060F664B212C4 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 45A5DD932B003E8A3E43F79488A1713B /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D0B89D88FE76BA633C9118D27743655B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D9C2B1592E09AFC6D5395899C4EE4D /* Foundation.framework */; }; - D0C126C60AAA119E8D053AC995262101 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A6F80F92D848D13B284F46B6AE9E161 /* CustomFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D71584E905D5B647948B61730E000FC3 /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 404106DFFE34F8AC16769E44E010CD98 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA4B92DB27143411B6CDEDE6364963C8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D9C2B1592E09AFC6D5395899C4EE4D /* Foundation.framework */; }; - DF25F30F7BCEFE412DB78BA91E356B86 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BAA1FFF25683E18EB2DB3BC2E1B1E2D8 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0407BF2EF01A322231ACD0378CAD87B /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = E3CC277ADB47A258CD123C81061A3F82 /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E07ED38277DC7DCC89B495C82CC3AFF0 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = E99F1A4CBC84AEAADC101C82C85F5C3C /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E0DC7401667C6D33A388294C6402FFC9 /* SQLite-Bridging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D184FAE58B12834B5A6C93F074DE049 /* SQLite-Bridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E2AFB19D856618677D24ECD5616CC16C /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F0CD725AAC41904CB8013BBA975A5F /* Value.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E2B866A9EAACD842FB99919AAE9E4906 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 16AD8BE137CF5134F1F9CAECAB092D0F /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E48E04BF619A2F920A85942A201CE8E2 /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E36131A7B28A4CDC5D30E54C4A98340C /* AggregateFunctions.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ED6A37F4C2782BC30CFB9BB176546D57 /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45BCEA050A2002A5A1DE97CA813E551C /* Schema.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F7CA8BEC0BFFEAEB7788928B14BED98B /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32C8ABFC4E4EFE14DB669561D16037A7 /* Collation.swift */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FA2F8C81A1DA5F9810C8A9742D0C1CA1 /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 285643C4919E4B805509E2B8BEF5468C /* SMCalloutView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 001067059F900FD4F276F98ABA47822C /* ColorBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBA1A4FC53D2DE892DE2B5AB5226E8B /* ColorBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0023451255D0B6A96551C6491BE4CB73 /* ConfigDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 09764ED9B10646101C0CA4C1EC479B47 /* ConfigDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 005390FF8907FBAF4496EC51AA641D1F /* ftttdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = 1340B180649533E638F85761755DDEFC /* ftttdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 007BBAFEFCEE96B7DDF8EFA8934DEC0C /* ftbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = DCA611BC3AFEC2780F5ED5167FEFBACF /* ftbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 00808122820CCB7D640A23AF2F851D96 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6C874D560C2ECE9A78595318F449292 /* Notifications.swift */; }; + 00CD0FD425B91AE7BB08048D06C70828 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55404E8B2117F5FA8444F1ADD1A5039 /* GameViewController.swift */; }; + 00D6A91F2372896AFCBADBB569CB61B2 /* GTLRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 9209A157558D6C7A57364B029B93BF01 /* GTLRUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 011A7D5944D78BBDB6D70E337DF496B9 /* UITableViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = D5918BE30019D1A9AFEAA94298952245 /* UITableViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 011C0272A367FAF487C0387072D80C35 /* sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B55E01B937143BE70ADC92C259EA847 /* sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 01A810DA28D4CD0190DB127527310019 /* Context.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2A2F8E82B85B6C622F315EBC51F857CC /* Context.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 01B175F9FA772FCB44596F79F8D00880 /* pure_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = 85384C51860DF6A3AB223E1B8439C471 /* pure_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 01BA691B21BFCA4E9DD73F0D1DE67D2B /* SwiftyDropbox-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AE215D47AD4C3E4C2C354C0C591C34C /* SwiftyDropbox-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 01D25C020EDD6D8936111118CDB7CFA3 /* VertexArray.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 784FA935740E152532499A73DA5AA3DB /* VertexArray.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 02088785CF10C92191BD4C2A65A4A4EE /* gb_cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E61C75D78DD7A729364010BDBB106 /* gb_cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 02619B61469E1C06E2A30FF166068583 /* Combiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9FF916A03FC9114DF6807EC4AE2F131C /* Combiner.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0268FE03E18EFF693689E074F11B96C1 /* opengl_Attributes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 092D5916BAD725E2BD181241814AD72A /* opengl_Attributes.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 02727D92764378FFAED7FA05551AB810 /* UsersCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F53A98CDF1BC90A1B45D603F7DC3BC7F /* UsersCommon.swift */; }; + 02D9C3D0F0992ED6738D080A0E1CC9E1 /* GTLRFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = 947D4308D4F2D06F37BC4881F1637F48 /* GTLRFramework.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 033870A05FAC3AAD229C5B42B6664AB5 /* readwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = BC60B5824BD4DA2AB25BA85A4C586886 /* readwrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 03537729FA84F09053DE494116B627D6 /* NstBoardJalecoSs88006.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2446BE6FAF88E2295DA4D857C1DC7C16 /* NstBoardJalecoSs88006.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 03798D6E6E597C6AFF6054A3EB904E8B /* NstBoardBmc15in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F81D2A992DCD611FF9C080137C990E31 /* NstBoardBmc15in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0413BC0701D41DE3070F47C36421EF7F /* NstBoardBmcSuper700in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D18007DF21DF9CDE2EA3A14D00C050DA /* NstBoardBmcSuper700in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0418874BC3FB8854951251864FB63C4E /* NstBoardIremH3001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 456C9F03B0C75358971F5599710FB4AC /* NstBoardIremH3001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0479E96052F30333A5AE51A1A5DD22C3 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 222369BCAE458E6A21F1C9AEE03983ED /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04FA93674AA0B4947CA3DC85196D9EAC /* NstBoardBandai24c0x.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 316C97172E998626A782DC7AB8C5416C /* NstBoardBandai24c0x.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 05013F5C3F8897B02CAC065EF3189E58 /* RSTRelationshipPreservingMergePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DEB79CC55673435872F4AC4127BD0B0 /* RSTRelationshipPreservingMergePolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0514955DC0F673DF12A1317127CA45B3 /* Sound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2BCCA563115C1ABD0F6BE0FC0B3CE00B /* Sound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 052787144BE4266A8166E4B0DF4ACCA3 /* dummy_input.h in Headers */ = {isa = PBXBuildFile; fileRef = 83189ADFB9F73F46FCE23B3CE9012A77 /* dummy_input.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 053DB492720A3409C50E148E4AE4E0F1 /* cart_rom.h in Headers */ = {isa = PBXBuildFile; fileRef = BA46D0D247C2A97E0EBAEF9B67F430BF /* cart_rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 05D3406A9CDB6F3CA3BA42733AD9B486 /* Sleep.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 33B4914FDB89C5B28445FE64AA86085E /* Sleep.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 05E346049D925B2F24BFD812BB16EACE /* TextureFilters_hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 619F66C6C65A42C014C9700FAB9316F8 /* TextureFilters_hq4x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 064F0446DD0F453314D4002599D238F5 /* RSTCellContentPrefetchingDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EDEFED9C09EB37D2B09A2EE84A2BA70 /* RSTCellContentPrefetchingDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 066C91AF87F745BB782958FD99EB410B /* writepng.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3466A9256511834DC5E817CC21AE91 /* writepng.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 067C84CE3338DB36FF1EC1A0D0D1A63F /* initstate.h in Headers */ = {isa = PBXBuildFile; fileRef = 173C3BCDE823B84D23477806EC2CF1EB /* initstate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 069E1D48DD81FE5B6A827810AD64B3F3 /* MFiGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6794551744F79F117DF19850F503283 /* MFiGameController.swift */; }; + 06DC2503AAF54FB4B5D3B4606EC66F81 /* UploadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6768756BD63AFB81ABEB6934A427CA39 /* UploadRecordsOperation.swift */; }; + 06E4B39B70500AB74C837D9F65505FE2 /* WavFile.h in Headers */ = {isa = PBXBuildFile; fileRef = D8E275522B55AF9B007FC628DA27411C /* WavFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 06F04214E1DFA5C3662A6901F65DD3F6 /* inputgetter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FD0F2986CF92C82ADF825EBEADF3727 /* inputgetter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07061CB34749ECA222E5A23CC2437521 /* GTLRBatchQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = B06418EA2C5657C3621FE94DE245B06B /* GTLRBatchQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 07498127BC05CF69795D53A3D8EB9340 /* Thread.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 90E20CF10E66ADE35B580C23C72D76A4 /* Thread.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 07B07C5C1845808BAC8BA53FA149C192 /* L3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 83DAD8759111F18B4EDD79709EA9C168 /* L3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07BB377F31975D34EB8CCC8C3E05597F /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 792056404E543D00399F5986E8B3812F /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07DF414393A0265559B74FF88238011A /* opengl_GLInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2DA2D2C771F4634211A5B88321499576 /* opengl_GLInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 08686CCC2A05E5818FECBD202DD69628 /* dummy_rsp.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0B0C7FCCE7AFC841BEE7048A093B70 /* dummy_rsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 088166778CBF92A59C6AEA8158CB7B56 /* ObjectHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = A37542A2D1F6B0496F72D1B87245F461 /* ObjectHandle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 08CBBE506F5F9C4F6B5FBA173182B627 /* NstBoardBtlDragonNinja.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9D7F4E7EB78574E9BE5E912032A3DFF /* NstBoardBtlDragonNinja.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 08DB3EE7795392A4AD6CDA6911C4ADE8 /* NstBoardTaitoTc0190fmcPal16r4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DB916A39387B7212EE06E2DA467A8D51 /* NstBoardTaitoTc0190fmcPal16r4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0930988FAA51B3BFEFDDE01D83611CFE /* cheat.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A32492091FA65B2E25F38BDB5EE070 /* cheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 09317AE820EE6AC27E5564E6830A6B2B /* glsl_CombinerInputs.h in Headers */ = {isa = PBXBuildFile; fileRef = F2257CE5C9B676C063600BAA94CA562D /* glsl_CombinerInputs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 093A5EF57A260B6E4066AA6FEFA72B0B /* freetype.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DD54C4B2A034B3E5694E1C6C3916D18 /* freetype.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 095ECDF5BCBCCC825E489471C3556732 /* RSTLoadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 453A43AE3933FBE73C478E25DB5E476A /* RSTLoadOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 09712513CDD56B9AD1082FD253B210B0 /* TxFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 320B83F85351687CBC80A3C6FC74440B /* TxFilter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 09A56050F738852C24E48CAB1A12327F /* NstBoardKonamiVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D98EC38E106371722A01A73B3CD4D54B /* NstBoardKonamiVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 09F83B8522313DF122E91C5E908CC256 /* dummy_video.h in Headers */ = {isa = PBXBuildFile; fileRef = 17AE63368464F283CA60EB477B2EAC1B /* dummy_video.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 09FC171FD71744C6F47D4CC3341BF102 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 926DE74AEC8B4A89CE303E7D15837382 /* xxhash.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0A3FA8250DCAA57E611E6433F084CE11 /* NstBoardFujiya.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5233AE6CB42C097DA937081AB4814A39 /* NstBoardFujiya.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0A7F43CFFA49DD8651630CD5B766D2A3 /* NstImage.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E79FC4B64B0151C5D97016FE705608F2 /* NstImage.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0A82B6C9EC4EA09A0C213ABAE1E08E9B /* FrameBufferInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D654A5B901E387BCEA877A4F4B1FC31 /* FrameBufferInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0AA09DE9241869ECCCC26D4E11F357FF /* GBCEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AE7C6AEDB1B177BEA97EAFF75DCDAF4 /* GBCEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AE2AA9CFBAB73BA390B8AB2BD339DCC /* SoundFileReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95B34037E8B652335969759E49B0F3B4 /* SoundFileReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AE68C487359922B30E80D82CD556435 /* NstBoardBmcSuperVision16in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B139C8BFA41616549DEEAA545317F7F /* NstBoardBmcSuperVision16in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AE7EA1277618FFEC475AF5B709DE97C /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = 3940CE8EE2A18C0E5B6BE8394499EEB9 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0B12EDB39B8EDFD03B311F9733108E6D /* opengl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E80A2591A2367572B4E5468FB72C0B0 /* opengl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0B8D0DF76E87D68894A0DC0C4DEF1911 /* KeyboardGameController.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 8DC46E7D667B05E526897085BDA6A68F /* KeyboardGameController.deltamapping */; }; + 0B984B28675905FE99D500B13967A582 /* SNESEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 146B44A557A13EB3BBE8A5C53D94BC9E /* SNESEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0BC29A4D141721CED777951AFB6285DC /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE8DDA1C621BC7547ED906A580F98278 /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C85C17E4ABD29F912F85A3579F2C13F /* n64_cic_nus_6105.h in Headers */ = {isa = PBXBuildFile; fileRef = 485C8F569695892A8BF25E965F61DDE1 /* n64_cic_nus_6105.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C8CEB39DBD171C39AD70F1D22B0D8F2 /* NstBoardMmc5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 231C3B1815030738C172F8C3A61AB598 /* NstBoardMmc5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0CC4033E6747ED10E9BC142192F6AD39 /* NSString+Localization.m in Sources */ = {isa = PBXBuildFile; fileRef = 21A038DB12C94476C404398950A88C8D /* NSString+Localization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D0CDD2D121FB16DD8061998BE122543 /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE608D60C05AB0625906E8A6493CB1 /* pngget.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D0DD77BB2692454B0600C393C56B3A8 /* rom.h in Headers */ = {isa = PBXBuildFile; fileRef = 798A8C02C208746867C1899AE83B7EF3 /* rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0D3A7FEA753047DE31A6F81799F3190C /* TxDbg_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9DFC0EF480A5361B80E075558EEDEDEE /* TxDbg_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D4B0761D98B1D32B5B34C414181316E /* DeltaCoreProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A201B11504778569D1F2D7EB83668E6 /* DeltaCoreProtocol.swift */; }; + 0D6BF9F58172028164D17C031B1FCFF6 /* GTMNSString+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = BBE10799564D3547139EFF5CE894CF5A /* GTMNSString+URLArguments.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0D97BC11BC4E1636F550EF6D331031AF /* DepthBufferRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 38670547E681F154E5A9A09F39390D14 /* DepthBufferRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0DAA2A9EA3C7BE275C199CE4FC0F8660 /* RSTHasher.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E8CC2CC4A372DB06C3A4DDF7BD00C2 /* RSTHasher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0DBB61B8C2133BA49617D71CB72C59DC /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A9086E824EFB7B7B14B240188DF62CE /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DD2B79568FD5D7753E4220B0A700C96 /* svgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = D64D70EE0AECCCED6FF32F99E14D58BF /* svgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DE37FB9E50E1562BF60D5BFA8252BA7 /* RSTArrayDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 33A331134BE85F727CC5CCD89769383E /* RSTArrayDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E1533213CE06AD25D7A467D0F3AC3F7 /* scoped_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 416A8E69A7929028B4EDF36F7813BCDA /* scoped_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E434E17E33AA0A6B8BB202C4684EDD8 /* osd_element.h in Headers */ = {isa = PBXBuildFile; fileRef = 00DDAF44FCEF1DAE01680CB1290E8DA6 /* osd_element.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E62C30ACBFB8DC392E5CE59DDAA64A2 /* DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 636BCAA16AC311A2A310C344BD9FBCB8 /* DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0EC9CB34CA3F574AE5B715EB1DD9DF8C /* DropboxTransportClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E2C328E034800C2CB26F5B94B12DDF6 /* DropboxTransportClient.swift */; }; + 0ECA6110DA3B0588B02D33C1E337CDF1 /* Result+Success.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECDCC3E94D5101F61796B3E89290013D /* Result+Success.swift */; }; + 0EDDADFF86CE8E23349B8C17EAB86C98 /* SeenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0CD3AC5CF344D777C591A59C269664 /* SeenState.swift */; }; + 0EF4F8570AB47B8BDEF7F3B3FDFE3457 /* boolean.h in Headers */ = {isa = PBXBuildFile; fileRef = 025953BB492B1D55BDA573CAC6CE9000 /* boolean.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F1030089F00486F17ED78F7651056AE /* SNESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFB410CFC7528D974AC5C39C85ED086 /* SNESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F2AAC05FC0C90D1437629B2DD879D83 /* NstCartridgeUnif.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E11C4236342FA8398AE626DB3274772D /* NstCartridgeUnif.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F35EC2E4E3C5B5025464323CDA17109 /* NstBoardNtdec.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EE3F927B7F58D93B1C98460B28559AE7 /* NstBoardNtdec.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F6AD4EB188F8A35D985C14ED56521F5 /* ftmoderr.h in Headers */ = {isa = PBXBuildFile; fileRef = A1054468B8504A0284F550663CC44349 /* ftmoderr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0FCCD4B109AB22FC20A743AB750B95EC /* glsl_SpecialShadersFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 538F7789F2608728E516881281A64037 /* glsl_SpecialShadersFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0FCDAB60E00061A616936D080A17A72D /* FrameBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D29EE04287C192700BAA7D8E7068B20 /* FrameBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 100055E823D8664CA3967CA7223DE414 /* 65c816.h in Headers */ = {isa = PBXBuildFile; fileRef = 816D92F12BC3698BEE8F45620FB157CC /* 65c816.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 10558603C3F6732FEF6B1882CC605395 /* ftstroke.h in Headers */ = {isa = PBXBuildFile; fileRef = F14AE82C6F3F1E53A7B148B891178E59 /* ftstroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 106923F11FA63A0A83DDFF28E6D682E6 /* TxTexCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DCA41822F3659F65C03D6B0D418F612B /* TxTexCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 106D77956F70BC0E0A55EDAFE9264B53 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = E474FB45FC3DD9C8E04C72D076AC8DFC /* Data+Serialization.swift */; }; + 109639DF3F0EF7199D502AE257551180 /* Harmony-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D42075157F824B1040606B316473092 /* Harmony-dummy.m */; }; + 10963C0B1643A34DF49E5FF651AEF1D8 /* main.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F39CB2B6042785A3E5F2C40320DD2C /* main.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1096C2B586E2EA8769B5E346F337BD89 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 9A6B0D2942B8BAF98B09DC10EDD20618 /* Standard.deltaskin */; }; + 10B25A3E89F2BC948F600F93DFD2AEEE /* pngerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 4875A5F2894B64D59ABA846310074DDD /* pngerror.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 113A3ADEA158094373E44C01E1443F61 /* CombinerProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D8C6B600EB0F6E81ED97BC1F30272D4 /* CombinerProgram.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 11536204ECDF7D9DB75EC2A0D9FE46A5 /* ftsnames.h in Headers */ = {isa = PBXBuildFile; fileRef = 08B8560CC6F18BF32453AAB35DA2A0FE /* ftsnames.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 11654A14DAFB94587890A4B673D7B7C9 /* SoundRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3791E485D89113AC4B25ADE046DEE5D1 /* SoundRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 11999A3107D95813D7DE36E802941DF9 /* alist.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FA26C4FB0D6E27B0C9E9607D02D8E25 /* alist.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 119EB4FFA02590EA2498963ECEC6707B /* RenderTexture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5FCE00327D6825CD6F2088A345690DCC /* RenderTexture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 11B1E455943227B7FDE64E7910BE6D76 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB7F32ED8575A87699DF593661DBD4B /* Data+Compression.swift */; }; + 121447EDCD87D030260B53FA7E426098 /* ConfigManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E132A030504CB91FC153F9A62C74870 /* ConfigManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 122A53C6A8CE37059A0CF1D111472CDD /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D110BCE90D1CF941FD0145CBB7DD6C /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 124DCEE18B5406C095B74C9B178BD647 /* NstBoardTxcMxmdhtwo.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FE45DB19ABFD58A4D2DCCB58292ABED4 /* NstBoardTxcMxmdhtwo.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 12642C40ECD4772D8E3C16F32834E565 /* GraphicsDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0553C664A9287732CFEA939623E83E70 /* GraphicsDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 12AEC0B4C35E8BDE4366D57CE6805481 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20BCD689A6CAE5B82E9CC42375BA7AE7 /* Blob.swift */; }; + 12D7AFC87809B7DB47930F38ACBCF03E /* TeamLogRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEBCE82463719FE6476D577E1F4423FD /* TeamLogRoutes.swift */; }; + 12EB6F66719644A22679C7B30EA4F9DA /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AB3CC30BCD19485A7A87DB2D78E2BA1 /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12FD0A784B96093568057FFB24752931 /* ftsystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 35465BE12D8260B15CC6BD3C5FEF813C /* ftsystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1320CB37F0E2606479AD7BAB5C56E7D3 /* RemoteFile+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9688C4994A8E7E8C3EFC291E37D8B050 /* RemoteFile+File.swift */; }; + 132DE130DC8D504D3672FE0A8438E82F /* GBCTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 81A8FD9E119F896E60B2564D9D8761CD /* GBCTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 134D8E34601F861AC001CCDF57026CE4 /* NstBoardCxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34A215FA298A479379277FF73C2A596C /* NstBoardCxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1399567CFA56F981E650715560737DE4 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC1909CF0C525687C49B17CBAC1003E /* text.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 13A70EB0D59A7AC78B914E7961428A3D /* NstBoardQj.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 58F426BB1C791A20225DADEEE031718A /* NstBoardQj.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 13DDDEE8E9A5F0E7D4767A7E2438F61E /* NSManagedObject+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7BCCABE84D92A4A7AB4A427BB8558AE /* NSManagedObject+Conveniences.swift */; }; + 14275531D4F7CDD462D18A3DE8962F9D /* instructions.h in Headers */ = {isa = PBXBuildFile; fileRef = 916788F0642B21A136DE8950DB47B018 /* instructions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 145D41EBB9C9985DBB3C476165DC7974 /* fpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FD1CD254FC9810DC969445799C4AC02 /* fpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14814E514A0815D4CF25874DBA95BC79 /* NstBoardFxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7CF779051F3316DCCCAAB71AF25F906C /* NstBoardFxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 14890F4A609A98F54A7AE2FAA7A769BA /* dummy_video_capture.c in Sources */ = {isa = PBXBuildFile; fileRef = 894545843DCDE3856F3A5F4BA90A2227 /* dummy_video_capture.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14A6A31A437EF94D756BC7E48CA08C0A /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = BD629D406305184DD39F018AC48C58E7 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14C40CB2C689C2CEFFEEBC5D170379B1 /* Window.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5AC3A6B0034D34F9209BBD58348B9047 /* Window.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 14D191D837FD7D431194C98BC575E356 /* GBCInputGetter.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B84B3955DE3CC74FD9418BE74C2896 /* GBCInputGetter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14D448DCE42024011A61818D6536731E /* dd_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = D8D7F2571154753B11327E7B624A795A /* dd_controller.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14E4FB185F30A8C5DC3F1D4B9E0DE716 /* video_capture_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ED8DCB8CB080AFAA17D199C268096E6 /* video_capture_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1505FB7B20F25998D75A83A2147DF2F0 /* pngrio.c in Sources */ = {isa = PBXBuildFile; fileRef = AB9A44C4015E688182AFC5CE81179187 /* pngrio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 153188A806D2A1F337D4F09283D8C8FD /* NstBoardBmcSuperGun20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD40FB9904EBC64F4CB21A6062A4FFC8 /* NstBoardBmcSuperGun20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1541CD75ED87DD98D3FB227978648F92 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B8AF793D67661D01A11B1A56931BA03 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 15631406F1349925694F775193DCE3B8 /* DropboxService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB9C709F559518962C652F5BBA13E865 /* DropboxService+Versions.swift */; }; + 159AEB925F329623B682DF445F17309B /* SoundTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = 9300FDAE5D36EBEB31F93D3C7215E806 /* SoundTouch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 161DC98CB6404CA6989C81EAB0E1C3EE /* CombinerKey.h in Headers */ = {isa = PBXBuildFile; fileRef = D344F505862E745C78F15C36F91D7325 /* CombinerKey.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 165DA1CB4491C51A5BC65A8F519D53DD /* F3DGOLDEN.h in Headers */ = {isa = PBXBuildFile; fileRef = 475A94434453EF6E1D44C3894F12A473 /* F3DGOLDEN.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1673BDEF58AAD91E8E8136D14A6D92CC /* tttables.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C9D65BEDC2366AB15142DA01309E46 /* tttables.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 16BA02E314DD1557E7856374C52DA346 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D71AD94F1DE85C71287112E838A7581 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 174F4F23259306B5ECEB19D6FAE4FE93 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFD59116F5FC54AE4428271A6BB1CAA /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 175C9AE704D01C600031D567C80BB91A /* NstLog.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E94066EEBFDC68DAC8ABD344BE20C393 /* NstLog.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1763806549E7B189A1B7D629CD271BDC /* NstVideoFilterNone.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3E9A8C85F702C4A1468F58BB906D4ED1 /* NstVideoFilterNone.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 188C27A5024641883B67EC17C1AA6995 /* FetchRemoteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E83FB8FE257D431296C57164DBCE71 /* FetchRemoteRecordsOperation.swift */; }; + 18A170DDE02E7B4C59A58B5C333487D5 /* NstApiCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = ED768209E20E3298713767938BD05B35 /* NstApiCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 18E5D24C8847A14DE25CC9E73B28CBD5 /* Globals.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C829F5E801FB46F0C66DA77EB247349 /* Globals.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 18FF637458B07675EF16BAECCF6AFDD7 /* ftotval.h in Headers */ = {isa = PBXBuildFile; fileRef = A57B57432BC4D00AD43EB6687F06197C /* ftotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 192D121D3A8C6AE6BA5A7AF2D0CDC952 /* SoundStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 288D4255C025E9AE120B756ED3D79848 /* SoundStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 193424E7818DE3CC415F1ABA7BDA5044 /* OGLRender_3_2.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B02B3B5A0036A6726FBD9167A2946A9 /* OGLRender_3_2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 195CAEC55D7B3D6D31D6DF39B4123E29 /* NstBoardAveNina.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5901F945E4B7BD8E993A572C8320D4E8 /* NstBoardAveNina.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 196B46FD2B40CE0CF8D6F681C1A9307B /* ftbzip2.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A01843AE7F8A9690F749CE033E441E4 /* ftbzip2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1980201958ED3367F3828BC226C5506A /* RSTTintedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = F76E3967E1E2834EA49B2FFB6117AEEB /* RSTTintedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1989138BFE55C51C2E1C1D1D3921CD01 /* libretro_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7FE2BBE843B46F88B62F9D98574BCC /* libretro_vulkan.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19A2BFBA669411936E7BDFC0D05C4701 /* rateest.h in Headers */ = {isa = PBXBuildFile; fileRef = B009C33CC7DA7BB144CBFC37BB96FADA /* rateest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19AE6DE6691A392520AF008719995124 /* armcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 6249457A28CDE33CCE657105EDBF5C7C /* armcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19C03E95F42417EF92D0D3EA03AE1E93 /* retro_stat.h in Headers */ = {isa = PBXBuildFile; fileRef = 1631DF20959AF33BB911DE604C526934 /* retro_stat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A320DC3BB4F411FF18589AC2EF1C65D /* NstBoardKayH2288.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4A32B8F42EA9A1885D2B08250359F9FC /* NstBoardKayH2288.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A511E47EF74155034C3FD58A291B1CD /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7449C167D753EB017EF503CF6D7DBF5 /* array.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A740EB1DC7E96D415A582212D8BD190 /* GTLRBatchResult.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D42A4393C5EA5D2C2E7F5B2D175FE0 /* GTLRBatchResult.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1A9E0A5933F001BD9AC823B4EEF7415A /* RTC.h in Headers */ = {isa = PBXBuildFile; fileRef = 838D80A959C5C766EFB33104D72194AF /* RTC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1AAB4E66BB2F67D75ED31A969FB90445 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E17A40A5122F984FE431D21753C8CF06 /* Alamofire-dummy.m */; }; + 1AF87E34A2309B096AE662A3F0A54538 /* SocketHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1649F44ED2BD21529BA16B7B2A429793 /* SocketHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B03CF4D7E9A0CF1B1A5C0DFAB8B0DD9 /* ButtonsInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE05B7A52F5A35ED15F9580C4144EC6 /* ButtonsInputView.swift */; }; + 1B09EC58FBD912A974C56A3F2BFE36D0 /* Keyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DFD8974B1F72F3E8D3FB1FC240A1ABD1 /* Keyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B0E862A80891D08A0C6F2E43AE8B356 /* TexrectDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9FB554080990194873F4A54006A5E02 /* TexrectDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1B2B4C5155210EBDD0892BE184220A44 /* instruction_attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8B22C2F3B453B4853E09852C790FFB /* instruction_attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B2BB2FEF328AF927516BB5185869A9E /* CheatProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67AB883A36469191BFD529D65D8810A1 /* CheatProtocol.swift */; }; + 1B8E1324EF162AD35B1923FE3BC32753 /* NstBoardJalecoJf11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6C87A284686A358CFAC958B264749422 /* NstBoardJalecoJf11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1BA51CA49FF3BF6647ECEB45F30364BA /* NstBoardBtlT230.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74A1A47D0674A91258AD7D9DAB661740 /* NstBoardBtlT230.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1BD64B8159B5CAE972498CA344F46490 /* readpng2.h in Headers */ = {isa = PBXBuildFile; fileRef = 205369CAD1E4D0EB34E3DAA176117F19 /* readpng2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1BF72388F9052C123EADC996D4D33C47 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = DBAA90C42D53B3B86801C3ADD7C2CC2A /* stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C570DFFEE1F86736CC9E98C382D99B5 /* NstFds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6D9291C6142C075D49A0EDDA11CC4A78 /* NstFds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D3D48B74FB7DC35F5A27D2E4F8EF530 /* NstInpPartyTap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 22D727FF73EDD7D66A073041A47B0DE6 /* NstInpPartyTap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D50F4D79058E4B1B5D465253CE3E893 /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D11622874CFF7D4685E506F182E85B /* convert.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1DB6F3BD942AB6C506FA3D02C3569721 /* RSTNibView.h in Headers */ = {isa = PBXBuildFile; fileRef = 814013939A450B54B81B83B1EDB7A650 /* RSTNibView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1DC7AB00CF86DEB9192BBD6BF1F049CB /* GTLRDuration.h in Headers */ = {isa = PBXBuildFile; fileRef = A73E1E700670A66A2AE2A03B799E23EF /* GTLRDuration.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1DC9D83D5C3C27C865626FDC47FFA727 /* NstBoardHes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DA87C06EA55D40BF0BACCC63B7F0FA76 /* NstBoardHes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E1F3E6F985575475CEC5C5627B10979 /* video.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ED12F95712B43803C58FF2D53075392 /* video.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EE8CE815DB7AB1FE9B3284530CDE68B /* MemoryInputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 173F53675D53F79BED6F8E8D2FB1D09C /* MemoryInputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F1CCD14892B307D3C349F9C4117740C /* glsl_CombinerProgramUniformFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ED141EBC657EC07C8D65BCD12249B41 /* glsl_CombinerProgramUniformFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F30DD02CA191CAE3D0B657F89B4F11F /* RSTHelperFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1A093309BA94F1AB20657C257070E2 /* RSTHelperFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F5C43C6770674DE9AF51FC93CA86659 /* NstBoardBtlPikachuY2k.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D282E9AC180F6200BA4B724CC7918B06 /* NstBoardBtlPikachuY2k.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F8209A656C45B0F07C3C1BF8E02279E /* MergePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C09575AF57FFD4D7C7A04FC133E63156 /* MergePolicy.swift */; }; + 1FB0A954FA7AF8FE8D99D959DE9965B9 /* mupen64plus_DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3DDC9D77AA62AA058CD07A50BE2E396 /* mupen64plus_DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1FEE8B5284DC3C2F7D3F0E28E62961C1 /* Version+Revision.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECAA6C5363B0FC690064E077812D9EF0 /* Version+Revision.swift */; }; + 20456037EE6A29D63087BCDEABE7A543 /* cicx105.c in Sources */ = {isa = PBXBuildFile; fileRef = A999E4DD49AD8CA4E0FB85985E53D97E /* cicx105.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2095A394F1DB498633048FA6F4CF5B6B /* GLideN64.custom.ini in Resources */ = {isa = PBXBuildFile; fileRef = 23AFAE86E4F0EDD062DB46895DAF5251 /* GLideN64.custom.ini */; }; + 20963639D29C2627884D0C2039FA09D7 /* NstBoardUnlXzy.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6878BE119742EC0C21A2CB0F923D256C /* NstBoardUnlXzy.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 20983A4E2B0967B542119114AB073BB7 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 74853BDEC32A6CFF7D0D323E406FE7A9 /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 20F9B744BEFD8D7B6A31CAD347DA905B /* alist_naudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 51F387B6A186310DE8AB25011DB2D480 /* alist_naudio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 20FA839518ED4413C10C26D0729B844E /* NstBoardMmc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 24DCB8F3924D4B8E723EDE7D9E36EE1C /* NstBoardMmc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 211F41E155C9801313A5A9B60E42B528 /* GLFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = CBECAF1300D5AE6D87DDEBE18A8D1C3C /* GLFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21939F9BD51F63E11D098AD04138814E /* NstBoardSachenSa0037.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA6F6DCD09DADEC4F87458FB70013D1B /* NstBoardSachenSa0037.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 219D418E6FEE74ABE4998946887B23F2 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 6630BB30C19291FAB71F19904132A2FB /* Standard.deltaskin */; }; + 21D164D1A6501C153372290BE9A11509 /* android_hardware_buffer_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7AAD31402E31872C9054EB4185634A /* android_hardware_buffer_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21E502D6891B860C977E695E0DC485BD /* ftheader.h in Headers */ = {isa = PBXBuildFile; fileRef = 77D3B3A913E0D9BC6F044C9D89CB8D96 /* ftheader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22004865065093B59F7DF41EAA0DEA79 /* RDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3FC4C12AAEC24F5791DDF9CF0F417BA0 /* RDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2230CED7C3633C3F5F473DF2EC5E50A7 /* ClipPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 9524C7CAEA9B69DE45AEF5526465F6C0 /* ClipPolygon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22612E795DA2B4185DAEAB3DD73A2267 /* GLideN64.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E65D162B8D927702A508BF68B07EF7D /* GLideN64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 227EA8867B83F2F2978D06671A0A10CF /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 37221D699E77B16EA4FE6C376B827730 /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22A782478094510168B16DDC00EAD35B /* ColorBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 254168DB44BEBEB68F731713E971B912 /* ColorBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 233D66440766BCC248853A39EDDFB1C5 /* ri_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CDD7B173B5F39A57867ED110A1FCA3A /* ri_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 23522007F1E5D00C56884454695C1C4D /* NstBoardCaltron.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 44F1BD582E0D3BBA64326BDB9B1D6DDD /* NstBoardCaltron.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2365E217AA5534FC880E18EF3CE9CA69 /* transfer_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 26CE0005068BFE608A1C540A882BA5FB /* transfer_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2383152D6C4F84FD2EE8A437B924C1A5 /* NstBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3F67DC9F98BC9365BCA0C5FBE0E14C93 /* NstBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 239B54D42D526085B60108A60B9A4787 /* TeamLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCBE6B3F37DD42BA03F9A43F4FBE4F4D /* TeamLog.swift */; }; + 23BF54CE4938EDB1F46BFB0E71C0C87B /* Roxas-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A031E1BD1EAC694520C66D56F10F34E /* Roxas-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 242DC7B7B8092DC35B88FD61DEE5EE36 /* ftgasp.h in Headers */ = {isa = PBXBuildFile; fileRef = B87260587307761413DE023873BF047A /* ftgasp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 243487548FDE3E663997187437CAA558 /* storage_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 3993143AF65CD570A58EFF32C95A56FD /* storage_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 245707596236331BCA745BDF2CCD3A79 /* NstBoardUnlEdu2000.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAABB4AF34B608AA851191DA7195AC03 /* NstBoardUnlEdu2000.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 24681274F8D57A98446AD3E532DEFA17 /* NstBoardMmc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C2C58B3E3B8C36120F560F859D6D98F7 /* NstBoardMmc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 24BAED760BC6B605CA667DBDA91632C2 /* NstBoardUnlWorldHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E33793CEFFD0F60ECF7785770DBCE9F3 /* NstBoardUnlWorldHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2518C27E9C6CDC038A72544E1448E6A8 /* rumblepak.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC19450998BD4D56C3C2C86AE5687C6 /* rumblepak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25254659998C756A3F648127FA733177 /* GTLRErrorObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D5738F79EFF74666BE041EC76ACDFA /* GTLRErrorObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2531408651F267E3005C180FC7BBCA68 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 9C8507D47BD97C259CB67E95B0055BCC /* Standard.deltamapping */; }; + 25323339A8211142EC7CBCF8BB9C62EE /* Color.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 01B378B099C14E4E827FCBA843C08674 /* Color.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 256AB7604288ED1751C5EF0B1E7A789A /* NstVsSuperXevious.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B58A269231B9317967B84F433CD1F14 /* NstVsSuperXevious.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 256D95458D9F853F472BD6467FF15C4B /* NDSSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F2AB56328583FAAF95D7D3FFD81FEB33 /* NDSSystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 258EC8380EB18D73BE4A95E0F6E76F6E /* GoogleToolboxForMac-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B8494C070246CC8BED190E092A370B3C /* GoogleToolboxForMac-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25A38C9929C9AA2BF9B4C5EC01EB5100 /* NstBoardBmcNovelDiamond.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5B3906E0F867AD7DBE110BED3C71FCD8 /* NstBoardBmcNovelDiamond.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 25DA4338D845BE0E74C55BE243C7ED93 /* assemble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACB84EDA396FC32A38EF2E80F2E78D5 /* assemble.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25DC15B3C97C02EAC7A4363265E8FFC5 /* NstCartridgeRomset.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1FF86939139DCD92059F8AFE38FCB116 /* NstCartridgeRomset.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 25EDEFE8AA7FFB5C69FED296344DAEFE /* assem_x64.h in Headers */ = {isa = PBXBuildFile; fileRef = C7361C449C785F93C554BF35D3475E03 /* assem_x64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25F9D19D9F8A5BA67FF2B729D05E1F2E /* hle.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BF79F8CEE5F58CD7F29CAF0AED592D /* hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 26067F53DD0AAA69124AF2F234C2B412 /* SocketSelector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6207EF118B9280CEDE13421C4CF64C8B /* SocketSelector.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 264031FA160F74BD32D8EF9F30514C16 /* NstBoardSachen74x374.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73427BAA44C8216F08EDAC6A0CAD0190 /* NstBoardSachen74x374.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 269A8F0EF89DD3F63151C8785ABE7A51 /* GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = F779EEE5715D3C32E844758058351CE8 /* GameControllerInputMapping.swift */; }; + 26D84D2836C13B2D939D5A5E2B1BD47B /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD2701346D82207B53CC9EC541F8AB0 /* Schema.swift */; }; + 26EA8FC2F1D23AB23AE750AF18221843 /* pngtest.c in Sources */ = {isa = PBXBuildFile; fileRef = A5D27BA453130BFB47F360AB69AE7A74 /* pngtest.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2759C2F52CCBBBA9F7A243D31EC1D042 /* language.h in Headers */ = {isa = PBXBuildFile; fileRef = EE4444EAFD33EB8BAB4FCBCD65A8446A /* language.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27A3816D5997640C9C2977E66280EBE6 /* TextureFilterHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF9DBD50FF109AB529096538EAC3BE3 /* TextureFilterHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27ABACC6A4783C9079079AD0599DB017 /* NstBoardSunsoft3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9FDC34A806C43FEC8AEFDE037CBB3624 /* NstBoardSunsoft3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 27E12C031E1F193F89D7607F22242B8B /* NstBoardRexSoft.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CDE5597A73178118289A5342B56A5EFB /* NstBoardRexSoft.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 27E6E896B473FB2C6E22657C01C3F5C3 /* NstBoardBmcFk23c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52468FE08B22885CDC155AF176219E41 /* NstBoardBmcFk23c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 27E9618AB807EFBA9F6F713F8A3F9E38 /* TeamPolicies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A4B7B6EB4DB8A673532771B4AA8B264 /* TeamPolicies.swift */; }; + 27EA6C0692558952AA8164A66E618824 /* rdram.h in Headers */ = {isa = PBXBuildFile; fileRef = 2545337131DCB550937E1BA985A7CFB7 /* rdram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 28010A4E02AFF7CA653853E5B0F63621 /* encrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 7362D3AF48B22723885E66B0D25420E5 /* encrypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2819DC98C607DE278124727BA384A637 /* NstBoardMmc3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 455C3A1951DCCE758C8B38B0D96D1745 /* NstBoardMmc3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 28AEB1D89C9F02C00B767D2D95D68FB4 /* NstBoardSunsoftFme7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1B60BE30FA309328A9F8DEECADF5B276 /* NstBoardSunsoftFme7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 28B10CF2C882DC18EF20B1AA8E23AFE2 /* NstXml.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9AD6579FF3326133D973B8178ED12CEB /* NstXml.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 28ED02C88B90C1B230F0D20D597ED49B /* NstBoardSunsoft4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EDCD39BFA98723F034DF29BDED0067EC /* NstBoardSunsoft4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2951A6A8F093CE2733377394E60F8575 /* cached_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = A3B60534D5E0521E52D17D41457801B7 /* cached_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 295238CB026C2D0DE66098E71D0CC261 /* Version+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B9808132CF6702DDD5DA9C2F9A0C253 /* Version+Dropbox.swift */; }; + 296C11D713DA694BC95126E931781FAA /* ftrfork.h in Headers */ = {isa = PBXBuildFile; fileRef = E009A78A05503277A11995657704C090 /* ftrfork.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29962679E9012751AD784D26C64074A6 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B56F8A99B549137872A3667B98CBAB /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 299A3DFFDCF10D83F769BE40B7F8730F /* DSTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CD89764ACCFBF65BFF14776DAB37EA9 /* DSTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29F809E6C4D11C55843F619D51A88F05 /* SNESDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E7CFE992FA2A4ABDEAADC452BA0C39D5 /* SNESDeltaCore-dummy.m */; }; + 29FCAF85FC12577CD5CFF57453594C65 /* GTLRDriveService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A2CACDB9FCC4BFBF7C2F672657367FF /* GTLRDriveService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A7DA941742FE42A2432F2776BBB4821 /* registers.h in Headers */ = {isa = PBXBuildFile; fileRef = D159D83AA74847EB95659739517DA8FE /* registers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AA72C64A1A864A039D5E3F085526F29 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2DB53EA9D410D595711ED5EE029CAC60 /* Config.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2ABF63D583A05522FC0E68E2A51246B3 /* gfx.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E53CDEE3FB0C997231AFF0EA62A9F4 /* gfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2ACBB459B58101305C15B9E93221B2D8 /* NSPersistentStore+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FB473C586C6C3957FB7196F5D749297 /* NSPersistentStore+Configuration.swift */; }; + 2AE4D610E02551D8EC4D51E4FED51ACD /* pngstest-errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B8B19BAF3A73578C62F6DA00164A175 /* pngstest-errors.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AE7A62010F0BD02BBED36CFF53BBF91 /* TDStretch.h in Headers */ = {isa = PBXBuildFile; fileRef = CFE10B16B0C4C7D24E899A604244116E /* TDStretch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AFC27492C6A1CBD4483B8FF6F94B1DF /* ftgloadr.h in Headers */ = {isa = PBXBuildFile; fileRef = B61327FFC19D6334ACBC6C66C2BC2BF5 /* ftgloadr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B4595B164B23A199766D1E6F5F27072 /* svkern.h in Headers */ = {isa = PBXBuildFile; fileRef = BB711F8EFE31B0F681D314A46FEA8398 /* svkern.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B533915FBFC58A9851E3F92E296A5C4 /* F3DFLX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A9E10651AAF13257794A36D1EE6B48B /* F3DFLX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2BB5DA0DB6B389E75E5ABD816506A72B /* ControllerDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2472287C41451AFFEC020183BD042A3 /* ControllerDebugView.swift */; }; + 2C5240B6436593A65C2120F7BABBE34B /* Keys.h in Headers */ = {isa = PBXBuildFile; fileRef = 133A1237CF59770626D5E03A5FDF58FB /* Keys.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C54BA2379A2C403F7B8D0C49FAACC25 /* InputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B525F9D23FEA3BE925293A80FEC7DCC /* InputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C793E39108FE340FC5BFCF448F6AC2F /* GTLRDateTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 01082497DDFB3641F47D167E3C3EB389 /* GTLRDateTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C86F96F2A98EB8553F83501FAB77D58 /* NstBoardKonamiVrc2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3F3421F39C5B3686D06A4A47CFC049B7 /* NstBoardKonamiVrc2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2CC0B722492849CF64841AE7884A8948 /* RemoteRecord+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70E06F935BCC172832EAFB66DF8A22AF /* RemoteRecord+Dropbox.swift */; }; + 2CCC882A4E5D781FCB474D22071FDB82 /* ZSortBOSS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 071BA5C258DCD29E5B2DDCC021A6B4F7 /* ZSortBOSS.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2CEEF7D75DDAFBAAF8E4106F54BDE731 /* opengl_CachedFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE06F95AF0928716E10E432596BE6C68 /* opengl_CachedFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2CFB7E4AB44C35953034CE00C927B1F8 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FC76FBFEFEF12E5FDF51209753949E3 /* Response.swift */; }; + 2D1470711C87547A80BB9C982EB6B149 /* PACKED.h in Headers */ = {isa = PBXBuildFile; fileRef = 24C0E7C293EBDFEBA516E17AD1564246 /* PACKED.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D5FA06414DA007392294E443A9FA75B /* CombinerProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CC4973A6BF6AFF9D8562E7A4E9AE4D8 /* CombinerProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D6BF11580E1CC47CF8280E5C4971155 /* clock_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BACFFAA0E0BD975E90FF29D6B33B0B3 /* clock_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D87E1AEC45003E3C2203D5A623DB6E1 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB8D4802A5F80BBA2E31C377A7C9689F /* Expression.swift */; }; + 2DB19BEF17C3D5BE1E0C85B25C931C43 /* Debugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 82C27E6DA6F13A8BFDE148AF1AEB92CD /* Debugger.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2DC9C43A21C6350E567B14C11DDE7542 /* NstInpKonamiHyperShot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 35AD6B07396F00A51E9FE9F7F393FAE0 /* NstInpKonamiHyperShot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2DE185B952A67810F78722837354F3EF /* RSTPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 37F6886809E07DA8D8DA791B7D5E700D /* RSTPlaceholderView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E17100758232DC76432B02A12EFAEC1 /* NstBoardDxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB023C27C2E7EBAB1EBA4B6CE2CB82B8 /* NstBoardDxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E1CE99F9F3BACCEBB2EE44E78B4D3F3 /* DeleteRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF6E047B23D9FBAF2DB48EC4B655B82B /* DeleteRecordOperation.swift */; }; + 2E4CB07EBF0D9A446F74DC8A81CA4EDE /* opengl_BufferManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1841A00CFBD8BE33D1C7736E94E929AE /* opengl_BufferManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E62C0D774A841E9ED7F5CE4E5B70E09 /* AutoBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C33E4A59D390AF25D605A289B4F902E /* AutoBuild.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E682F38F1F25EFF84F90ABADA51DB89 /* sram.h in Headers */ = {isa = PBXBuildFile; fileRef = A19E4DF8BAF4F0082185FA6315D2B6B7 /* sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2EF4938D66CE6DBAB9CA5E87DC5DA1D9 /* rsp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = F203A19460529D13E8FCE2A540485658 /* rsp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2EF7C84C951F326A18407145FF81F584 /* armdis.h in Headers */ = {isa = PBXBuildFile; fileRef = A1E8AC977ABBC00002A2FD5C18CF395A /* armdis.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2F010DC7BBE382CA0729F3EBD313D9B9 /* NstDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B7F7B276E6C1803265F573539F0A3704 /* NstDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2F47AFFD0CEB31CEC05058726214B60A /* RSTCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCDA1FB74E4C4092E5F8A5BC8289630 /* RSTCollectionViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2FBA2E9BACD4FFD2BEAC5CAB997FBC99 /* NstApiMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94C8A461D47DE4DDB1AEE7830B56ADAC /* NstApiMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 30360304FB3B07CC67CE7E12DDCD6AD8 /* NSPredicate+Search.m in Sources */ = {isa = PBXBuildFile; fileRef = BFD0CAB74C45D6B1CA49B94505E8E762 /* NSPredicate+Search.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 304A6957CBA97867455427624312350B /* ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = F17010739364C5C3A5C00A7849EDF47C /* ring_buffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 305114B6580952D1693DD539DEA79A62 /* NstBoardSachenTca01.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1BC03A069A547EB736D558AC237B614A /* NstBoardSachenTca01.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 30A0140597B79FDE8AE504A40DDE901F /* ftchapters.h in Headers */ = {isa = PBXBuildFile; fileRef = A71446C1AC97FB34D26841347BA3E583 /* ftchapters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30C13B34A3BE33BA757F87123E879893 /* NstBoardBmcPowerjoy84in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F11F1CCE5B53125548AF2C84DC90CF96 /* NstBoardBmcPowerjoy84in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 30C7890A54FA46DF6071A8DF2496A9E0 /* opengl_UnbufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CD4252EE7412B7E97A7FA9F6EB9095D /* opengl_UnbufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30E3FF5DE72D56612993D499EBED8C9B /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDA9A78863460869F150386B089AF8F /* AggregateFunctions.swift */; }; + 3118030C5A979F122AACB2CBD58C4E56 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4476D277BAC65A966CF97717AC7EC945 /* Archive+Writing.swift */; }; + 312AD7DE1453F9AD4A92963F384CF46C /* RSTCellContentChange.m in Sources */ = {isa = PBXBuildFile; fileRef = AB4067DCD2A73B47C583FB56E3239688 /* RSTCellContentChange.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 313A7C9034C26D9940E7B65EFB88F57E /* CRC.h in Headers */ = {isa = PBXBuildFile; fileRef = 7637F69AFE4440D79912C03BC0E864AE /* CRC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31697585FCCAF83D2BF44D087DA75CB8 /* StoneSerializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDEA401B77A227622E55445028991383 /* StoneSerializers.swift */; }; + 319D7327C17D7254FF4FBC0F1522DD04 /* svpsinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C269A9412FC718CE8C8E996630F5873 /* svpsinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31C3355B5C3F3DBA2AE027298397ABFC /* svprop.h in Headers */ = {isa = PBXBuildFile; fileRef = F33297D97FD3A5157D3125AA0D30D1CC /* svprop.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31DF008DDC244721324E3AB3AEEBDB22 /* vidext_sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = EDC16124014E8BE9A723398676F8E95D /* vidext_sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 326048AB59E512995FA92BFB0D4005C9 /* Roxas.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A32869D90E7BAC47B25D2F8E75F7856 /* Roxas.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 328973836A67F6C5B5D59A4EEC49C810 /* GLFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D08BCF7193B533EB2AF5071C88F1E40 /* GLFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 32B5C2CBFA681959F551BF129BD8DC00 /* NstApiBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4060028836FDB7AAC525DB0819187A0C /* NstApiBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 32B869763DE524407E4EC13B5405C6CA /* NstBoardBmc20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6653BEF078E8146300FE0A11A7E562B9 /* NstBoardBmc20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 32B8B962EEB709DEC0F2BAEB037A21B1 /* dd_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = B83F5B2E3006BD12D60CA06E677E7EE6 /* dd_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32C5649F56A9F2DE34AC6EF9FCA33323 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F9F5190AC3B7EA2777CF3CE3A3E7986B /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32D70D7BB7F2A17F9C78F7AE99B2F7CC /* FileProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12EC1D77781095125E901DEFF622F36 /* FileProperties.swift */; }; + 32F7E2ACCA4602AE9DE680A9D70EE36F /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D3DBD12BF6940FC1A2BE76A08E5471 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33005D6A6E94208A97F963B03EB5768F /* savestates.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A3C6439C7D592FA721C9BF78D5CF6BC /* savestates.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 332024B9AF30A07CE496CC11D9591023 /* SaveState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00EA19D2D4A64B523C65C5C29699ADC6 /* SaveState.swift */; }; + 3323FFE5A1367960FDB731C2D8B45870 /* SNESDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CD3F5DB69B6C64C0A6692B58AFD0B17 /* SNESDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 334648F3BE0F3EB894ED97C63BABFEA7 /* NstBoardUnlN625092.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F76EE1EB3D0BD20599E9210AA395F4F5 /* NstBoardUnlN625092.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 337E5275965EC77007B11EADB625B015 /* FIFOSampleBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = AB065A0FEDAFF486E7DA04E1936E82A1 /* FIFOSampleBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33869554EDBB14406B7BB9E8647E35A0 /* hle.c in Sources */ = {isa = PBXBuildFile; fileRef = 74F470E8DD823ED4FE7D10FB84B4ABD8 /* hle.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 338A23437E12CC5C72BBB54B8189E707 /* ftpic.h in Headers */ = {isa = PBXBuildFile; fileRef = D9191356F40229DDA60488AC64805339 /* ftpic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3399E40819B47FC57D44FDBE3182620E /* fxinst.h in Headers */ = {isa = PBXBuildFile; fileRef = F92CC3DB4FB3E1C8CB02FF550968E5DD /* fxinst.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33D52FD746A6F4535B78B95B1949D628 /* ftoutln.h in Headers */ = {isa = PBXBuildFile; fileRef = D69B8F7EC4A4B64E7B7E790A6DCF62C4 /* ftoutln.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33F513674BEFADB6CB760D6A81C2AA7B /* F3DPD.h in Headers */ = {isa = PBXBuildFile; fileRef = A6652070A07FC48369CD2D2D93B812AB /* F3DPD.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 342FFC207143FFD0D02C8E58FD8765D9 /* ThreadImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6ECAD64E54D551CAC63388B1E3FBB33 /* ThreadImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3440F2E7C7091E968DCC8219C505A657 /* Config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4B51F40AD66946C956A3C40AF6E4E5E6 /* Config.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 34AA63D390F044C33722CC2D9CC9B3D6 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 49A05F402834F289E25A1D2D8D31ADA5 /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 34AE8851640DC6E16132178B877A21E0 /* RemoteFile+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69ABB3390625B7C34F4619CCD4F218E2 /* RemoteFile+Dropbox.swift */; }; + 34B57DA227F4B2C65BB287D38D80ED9D /* opengl_ColorBufferReaderWithEGLImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 464088003409FF077A690AF31D685656 /* opengl_ColorBufferReaderWithEGLImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 34FBC7619CC07453CA4485178D84925C /* NstBoardKaiser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 72248A001C60C8B9DD1CCDC9D78DAE0B /* NstBoardKaiser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3522984A23D0983D50F2F60CD2B9F2C9 /* SMCalloutView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B70989044B91229B1C51B5758D9F96E5 /* SMCalloutView-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 35383CB99EAA9537E5158062A5DBC3DF /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A3C2A5341545B46CCEF6C7DCCC3D12 /* callbacks.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 35722184127DCAE56E998143DD4FFE37 /* NstFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 81ACB985C1F71D0FC6DF2A0CBEC3C3D6 /* NstFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 357A8FB1CC3FD998F2F68DFDBD72ADB2 /* NstBoardBmcGamestarA.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 46068669BC91126FFFEA59576128CCDD /* NstBoardBmcGamestarA.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 35AF870E1B3A0DB7D735F735FA422C6F /* NstMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A03F65FB47279C40083D17F181821336 /* NstMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 35D2385FCC093615C3BA7B260E3E6CF0 /* TxQuantize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5D68576CC0EE04A78AE791897AFD780 /* TxQuantize.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 35EC8B4BFB120C69E99A260D786EAB16 /* NstBoardUnlTf1201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B227CD071A5B88861CA260BED0FBE3D8 /* NstBoardUnlTf1201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 362273378B1432EA72CB535B566D301C /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4649DC9403189EF7D8B5F740147BCBF /* opengl_ColorBufferReaderWithBufferStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 362D9AD5872E377FFDA39BFED5E02BA3 /* gralloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B2C2ADF3521E6B7DFB9C17A4247A3B /* gralloc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 365E7E156C92209524A265BE63A05992 /* TransportConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BFB44B9B839260D03128AA298313F4 /* TransportConfig.swift */; }; + 36F12C2BEFEC26AF3FB64AE840F145B6 /* audio_out_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CA88B3A2BBE2EA0112C360B061B10B9 /* audio_out_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37021E54EAB76D5B8FD8730232C11C87 /* NstBoardBmcCh001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 35CFBA425AB64788F59985DF4294DCD2 /* NstBoardBmcCh001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 375E255B89D6FC678440579E28CCB3F8 /* inputSDL.h in Headers */ = {isa = PBXBuildFile; fileRef = 933F52FD6D2B1895EB6774DAEDF6A159 /* inputSDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37759BA8A77F128E6D2AF1A74F89F7B0 /* retro_inline.h in Headers */ = {isa = PBXBuildFile; fileRef = 185D80DA8DB94398379D2CBC6CB4E814 /* retro_inline.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37C6EC1C6E2FD686EDD84A12A42235C1 /* NstBoardRumbleStation.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 215635C653FC2F3689E27136178F6166 /* NstBoardRumbleStation.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 37FF7BAE099FE3FA458DF38E809F974B /* RateTransposer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AFAB5260C27DEE351813C7122CD4AF4 /* RateTransposer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 38140579D6698DB3EC5D4D8348A639CE /* ttnameid.h in Headers */ = {isa = PBXBuildFile; fileRef = 8715DB110EE34E0C96E7C74313A7A89A /* ttnameid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3826FDB208BDA2324262CC8F09622DA4 /* NstBoardKasing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A5E4840045EBB8FE5E794C6DAEFF0CE7 /* NstBoardKasing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 384996ED15655B92633B49BE2D2F508B /* 3DMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 3283EF596434B1D254E4719AEDDF2B9F /* 3DMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 38645348CC5C592425C533EC8030013D /* F3DDKR.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C35DC64C3A93740937D3C3964F9200 /* F3DDKR.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3867303ED090C22C7B91F80D0D34877C /* NstBoardJaleco.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 05E18E206FE5E3ECC0A0F7DE2BFF3CB9 /* NstBoardJaleco.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 38C976A8DEE43222DFA6C54E16E79FFA /* jpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = A9749B925BF718E50CBCEE6B82F21925 /* jpeg.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 38F6582226CA2808DF945CDE63DC5158 /* DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D8EB194138EAB03A1BAF77804381385D /* DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3914A75BEE189973A204BF332FFCEFA8 /* VideoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BDCD6B6C9579E41B46804763B13582 /* VideoManager.swift */; }; + 3926A56C74A6C3AE66EF1745844B04BE /* NstBoardJalecoJf17.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D8D32EAB45D5BEE636521CB06DB71FF9 /* NstBoardJalecoJf17.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 394E947ED5AECB6E6C373FCB5BC01756 /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = 451269EF812651EDABF4A20D0D0EC707 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39A8A5F1AC09F24DF124FA568B4BA9DE /* interpret.h in Headers */ = {isa = PBXBuildFile; fileRef = 7745EBDA352FAAAD04827718AFC2DDD0 /* interpret.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39E36E16FF2FAB77065F3E24D90D594B /* GTMGatherInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D9CA1BA4B1C7EB05BD412CB7895C1658 /* GTMGatherInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39F169D40F3D2217C030DF5C4AB9AEEA /* NstBoardBtlShuiGuanPipe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D31F9464D26C84F4303F9214852E0259 /* NstBoardBtlShuiGuanPipe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 39F6310C0E2893433591C1FB861126CB /* fterrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 24ADD77C9E459763B52BB8DD8BA8DE7C /* fterrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A2C36BE4037A177800397DEBC20D3CB /* DebugDump.h in Headers */ = {isa = PBXBuildFile; fileRef = 485C835BCAC9FE9D2D7A0723CC28AE49 /* DebugDump.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A3EF780EA0DC5DAB4B04EEE425125F1 /* CircleShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F96385E0EAB3EFE69A0C198645BE3F02 /* CircleShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A629AE2A7756937510D8E4BF71DE816 /* NstBoardExRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FC1E9CD449F2D3C5D045DFEBF6BBE3C2 /* NstBoardExRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A76CD8381C61DF00848DA207E173AE6 /* CommonAPIImpl_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 337E3DE6F767B4B0E0E8615F5A236955 /* CommonAPIImpl_common.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3AB819E705859C4B41819930E8681142 /* musyx.c in Sources */ = {isa = PBXBuildFile; fileRef = B6DF6A81ED3CF21DF9B51DF914D08077 /* musyx.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B1BDA44ECDDE86E5A508EF8FA5CB3AB /* metaspu.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ACF8573E12E7CE6FC8382B1C7A28827 /* metaspu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B2297CC939F6D0B7512A5D0F8E91436 /* GLideN64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0482ED34CE1A01F70FEB8B861E2E8E09 /* GLideN64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B46BB318BD31DA44FF7F2A0625EDD1B /* ftserv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A0B7AABE64CE3CFD6CBD4F335F9FBE1 /* ftserv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B7DFAE0D5614D45A623F2BA17A8884D /* NstInpPaddle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2F60B797411C7BEEEE57114981D1D5CE /* NstInpPaddle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3BD8EFFCB0910051586FBF46AC5C55C8 /* NSBundle+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B22B42E3A2ED5293029A56068CA8061 /* NSBundle+Extensions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C0BD562ED5EA4DBCCE3A2FB7D940FF6 /* gfx3d.h in Headers */ = {isa = PBXBuildFile; fileRef = AB93D8ED4B2543F199979AA5F4CDF7EE /* gfx3d.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C0C34B66F4DE1573FAD3F67797849EC /* retro_dirent.h in Headers */ = {isa = PBXBuildFile; fileRef = F43AF02D4A3D45AB4C91449083C04623 /* retro_dirent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C1277C9879849275BD4412E63547A9A /* PngFile.h in Headers */ = {isa = PBXBuildFile; fileRef = EF96AD8DFCE6CD9FF8E28E8AED9E829B /* PngFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C36E674426756F060D9479A78E5CB38 /* RSTCompositeDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D76ED9F3E5D01C1E48424DA204220B /* RSTCompositeDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C42E2DF170FEEC1FEDCF257FBC59691 /* NstVideoFilter2xSaI.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E66CD7AF3945F7CDD842E817ACEA39E8 /* NstVideoFilter2xSaI.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C5A26E2B06FF1324498A5DAA75F2AFD /* texcache.h in Headers */ = {isa = PBXBuildFile; fileRef = AD3187200380A3FB25170D5B9EE0F5DF /* texcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C75D97752958BB6E1068A79BBB78763 /* opengl_TextureManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2008405A1930372A338506F2E4FA20BA /* opengl_TextureManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C78E4348B065F6A1F2E070E9C9AEA1F /* GBCTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = A0E180FFBDDF6AD6D35795FD64A7222B /* GBCTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C832BE3E684CFF4E7D7C7D1104C63C7 /* UITableView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = D6BFD334CCCF9EBCBC3A6ABCF03BF295 /* UITableView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3CCFF040F69A447BCC79C844C6E30412 /* DeleteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CE5B0A31ACD87513F0942D9E71F9BD6 /* DeleteRecordsOperation.swift */; }; + 3D28FECC438A6FCA1A5C16275198B7A5 /* NstIoPort.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A48812FF7D0B803D29C9CE12B0F74926 /* NstIoPort.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3D38D3143F60F22FF8148BA31C508E73 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8760D486359333F01A58D9A3E6965D9E /* Operators.swift */; }; + 3D66A31C8103A03FDF1F0E57C640C042 /* NSConstraintConflict+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EA5F7D97C9AB37E20A715D3398E9330 /* NSConstraintConflict+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3D82BB8BB2ECF360078CE90C99E218A3 /* DSDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D8CFE89245F633014BBDF6E8AF4985D1 /* DSDeltaCore-dummy.m */; }; + 3D8B6797F5BE3B29DE5D0560B6E485C5 /* glsl_CombinerProgramBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DA85D3012B6718655D78006E60A7A61 /* glsl_CombinerProgramBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DA0789B294D0A4B0337D4849E79FFBC /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 93B1E65A642EA1EAA4D3043EE455F0DA /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DF05EBCA922A228ADAA6EF81BF2E18D /* AboutDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 02871D18AA28905E1FE181B4AEDAE388 /* AboutDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DF3BF1A81EF709BFA95298AC8F1FEB0 /* NstBoardSomeriTeamSl12.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6270AB27CBF8BA6CBBAF402530B111BF /* NstBoardSomeriTeamSl12.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E03AD02DEC735901C06DBB467257AB5 /* Font.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7DE820C181248C292881B0298B0F1F90 /* Font.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E1730D55849A497D872A47300530E33 /* VideoMode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = ADC9542E96F656BB89C5311EEBDA9E2F /* VideoMode.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E1960795F1CDD5DA3D5234B649D9A64 /* GBA.swift in Sources */ = {isa = PBXBuildFile; fileRef = 069FDF1510D1EE57999D9EEFA42DCFAC /* GBA.swift */; }; + 3E5EA4F51A82281DFE44955D6791C12D /* GTLRObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 50BD32E959F332B2734900E76DAB58D2 /* GTLRObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3E82C4D5935E02D385D773C59D424ADD /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D300A5B7805C13ACEEB33CFECE9235DD /* Validation.swift */; }; + 3EC2C605E7291B1BEC99AD3F06D54379 /* svpostnm.h in Headers */ = {isa = PBXBuildFile; fileRef = 89A7A6CB88FF9F00BD89DB332B5BDA1D /* svpostnm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3EEB2162999CE5EC7F850E4B1FAAF5A6 /* Port.h in Headers */ = {isa = PBXBuildFile; fileRef = C37DA4AD186CBA7132359E75E98431E8 /* Port.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F029746684D344355091865BDDE4121 /* NstBoardBmc9999999in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3F52E4EF9D56259B6359336A7D98C0A /* NstBoardBmc9999999in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F0EBD18ACD97785A90A6D0B4E723D03 /* NstInpExcitingBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 020829DABC4B34F0B103CB44A86B1E02 /* NstInpExcitingBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F29506C9C2F36B576E3C109F24238AD /* StoneBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FE893CBC159403181F3126C6C7917D /* StoneBase.swift */; }; + 3F4312485CA4E0E988DC0DEEBB2EA306 /* FramebufferTextureFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C86335713D20D759954CBB00EC6AEC3 /* FramebufferTextureFormats.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3FFE1AC1F70ED63623326CD9EB4732E7 /* DisplayLoadProgress.h in Headers */ = {isa = PBXBuildFile; fileRef = 165095C0F2AC162D9A03CCCE15E06D7A /* DisplayLoadProgress.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 405BFB74E64E523A84040C173A88A574 /* opengl_CachedFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = F8D137604EE39A80F050CC3248514E8F /* opengl_CachedFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 407B667E5FEB14F591611B01EFD52340 /* assem_arm64.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CEF1CF6322D0D33545A1E86B80C6505 /* assem_arm64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 407EC03D3DFF08A04296FC36CD38AF4D /* NstIoLine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EAD0D53A51B076CD685814AD012D9855 /* NstIoLine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 408C9467A440ACF40ED221AF38A11CAB /* SaveStateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E5950F1D94686CF45BF978347B71AA5 /* SaveStateProtocol.swift */; }; + 40C0A2EC77F246C6770B772E8130A8C5 /* gDP.h in Headers */ = {isa = PBXBuildFile; fileRef = 34B58BB2F0C3289A22FE5DD2CA130C8D /* gDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 40D29AB1C0B1AE9D5A16D8A00CC5EC8A /* NstVsRbiBaseball.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 024F3CDD3E74EDB4AB9DEC89AC1A8D5E /* NstVsRbiBaseball.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4117A58F736F3993A5D14CF4CC2D8924 /* NstBoardTxcTw.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 27CAFC4023101EB518BF390FBCBDAC6C /* NstBoardTxcTw.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 415C3AD46D4C5EF9970EC2575E98EDA0 /* Database.h in Headers */ = {isa = PBXBuildFile; fileRef = A2E8E678B7D4B407202D422C8CE42DA0 /* Database.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 417CB1E153B4D573A3F86BC063262EBF /* UsersRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5A8C2D0C4FF79FF4A82A7C02704490 /* UsersRoutes.swift */; }; + 41A7B51821FA9F73512BF747599C4C47 /* GTLRURITemplate.m in Sources */ = {isa = PBXBuildFile; fileRef = 35A46DA9D7B9942345456BEF6DF7E8D1 /* GTLRURITemplate.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41AED5AF1633147BF20119FE09B88FD0 /* DeltaTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = FEA0ACC910F13E9D6B8C51CFE1B8EDA4 /* DeltaTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41F232CB3D23E3A6A1C5E4A4628FB79D /* T3DUX.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F992EC4AD08ED4806E1B360451E1861 /* T3DUX.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42486E8EA746BEC5D598F95DA726529D /* GlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E936FF10A7FD12B81B6130E8D750F73A /* GlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 42607AF15A2E89DD92B0930C561F736F /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = B3475FAD5B489B5292E3D459A64A3417 /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42B300BEBAFE6EE9B77570DA9F09BE1C /* ftoption.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A0298053CF49C68092396B42DD55D37 /* ftoption.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42CE6348D210BC1705B97E3E33A03756 /* recomp.h in Headers */ = {isa = PBXBuildFile; fileRef = 02F79C936D7C91B742192824860F638C /* recomp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42D3004B9FAA6E6FC7F5C1FF64FC642E /* Image.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BB40DF340E3D23ACCF742C2B72217324 /* Image.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 430806697BCF27E39D1755EBD50C2AD8 /* NstBoardBmc36in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83C196FE4CF60A03565B95B1C9C0217C /* NstBoardBmc36in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4350BC2A7ED052D1A8C7322572F983FE /* Shader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CB3301D4A5FED38AEE41ED07A6C502BE /* Shader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 43A6F36EC82583DFC3F1B2EB25F87C7E /* GTMSessionFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C490BE7A4301170F339101D64A47136 /* GTMSessionFetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 43B5E0E98AAF560F0241FC12684F8441 /* xxhash.h in Headers */ = {isa = PBXBuildFile; fileRef = D761EA5C2004DE520EE6E3DA7CD4F6C3 /* xxhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 43E9744B08213A6C8BEFAF6B70F435E4 /* NstPins.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 69CFD44724961B202086D65543370D05 /* NstPins.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 43F876E1F40CE874937E046A6E211731 /* convert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 580B1B5358971578E8D067CD87CCA4EE /* convert.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4404B6CEB79B295BDC094339D07BAAAF /* joybus.h in Headers */ = {isa = PBXBuildFile; fileRef = 19CC725F77A1590AFC450371B084F35C /* joybus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 444053C71CF9C418328ABDA8B2528AFC /* plugins_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B2D3B45DE97EE84171CC1A90FD17872 /* plugins_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44574ABD35CB7C8E7308A753B541D666 /* RSTNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = CAE0F839C3C1E4DB9E2519345C397A21 /* RSTNavigationController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4483660753264FD8120A2067CD6A13CF /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 763AE2EACA7FF8898176F552273EFF1C /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44CEC7EA6296BDF52E6847748021D0F5 /* emufile.h in Headers */ = {isa = PBXBuildFile; fileRef = 237B84F01B49BFC3E63C9FE3F3D458FC /* emufile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44CF59CDE936F5CFD762DA0BCB0E94F0 /* RSP.h in Headers */ = {isa = PBXBuildFile; fileRef = C2480C7048FB3B86DEDC127B883F6323 /* RSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44DFF6AD46F4B1073CBE3E11FABF2CA4 /* NstBoardBmcBallgames11in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C91AB35D0843E8B6D4267700DA3291F0 /* NstBoardBmcBallgames11in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 453C841E0DDCE5508E5FD4DE0737E6ED /* ftlcdfil.h in Headers */ = {isa = PBXBuildFile; fileRef = 13766CCFB7D97DABE91EFE46F07D098C /* ftlcdfil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 454435BAA1232B5BB55B7FA9E7B97C0D /* FileRequestsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1393F6F0A0F928C49105FCA78288193B /* FileRequestsRoutes.swift */; }; + 4545BB25DC4B965622D16CF4D6506135 /* Mouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1EE7F9057B40115EF146A96035510405 /* Mouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 459005C8FDA84ADF202550615D20DE98 /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 153DE0DE16595A04ED8966B393EF2468 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 459A931CCF39B8FB19164EFE3CF2D863 /* NstInpMahjong.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7A8C9A3E803EF09830C30971C4D0333D /* NstInpMahjong.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 45AD333FE1F9589DE61E55A1F9F12CF6 /* glsl_ShaderPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D2215E3C485C95C307BE07BC62D0E65 /* glsl_ShaderPart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 45F9C2BE3D3D88B7333F8CCFB32B5442 /* glsl_CombinerInputs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABDD0D043967D1CF64FE87292AD3328B /* glsl_CombinerInputs.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4619C7C20249E0D46A2D68E292D09BF4 /* alist_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 215F41B527253A671A97637E35BDC2EA /* alist_audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4621F1AF007DEF733981FDC8CCE566E0 /* N64DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0236ACAAE07BD9A1FA670BDBDADC0D30 /* N64DeltaCore-dummy.m */; }; + 462EC951E880EBF477C63C7C878DD3C3 /* NstBoardGxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A5EB56E07F663B5DB04E4B9B6C85C4B6 /* NstBoardGxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 46306BFF5D233EBDB4F8F1FEC8E1CE86 /* font.h in Headers */ = {isa = PBXBuildFile; fileRef = 60655F2593406B5777F801C875F02F75 /* font.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 469306CB7368CE64157615FF08A064DC /* ftobjs.h in Headers */ = {isa = PBXBuildFile; fileRef = A6A34D0C07503E7FFFE1FC9EE96553BB /* ftobjs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46D2FA65C1F7514FB5AF1B3AB540BD7A /* NstBoardUnlKingOfFighters97.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0E992CA8B2DD446EF5D166F52EB6ED50 /* NstBoardUnlKingOfFighters97.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4712883E9233CBF125D350671054463F /* ServiceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412DB502B74306CF8DF0466A42864A4E /* ServiceOperation.swift */; }; + 4714EA370675DABB8EB39DFCC754B958 /* pnglibconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 40BF1C58E8788FDF52E4550CE38FFF13 /* pnglibconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 471A75A7D62F9B14EB4441C630F660BF /* Util.h in Headers */ = {isa = PBXBuildFile; fileRef = 555DB2B83943DAFAC8FBDB0E065CCC16 /* Util.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4727DC7D681E19904DFFAB1C46B76FE1 /* retro_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 57F1FC93C4F0049F6CC1DE462EAD9871 /* retro_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47594914E8EA112593EFC6661444193C /* dummy_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = 770FB112F840EA62E9A6C88008B7C1D7 /* dummy_audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4793DB607E09DF311154B2909787E3C4 /* m64p_debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 08B17046C01595A0433E18CDE7B926A2 /* m64p_debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4799F1F6F4A15F207732F60601F39CB3 /* NstBoardBmcGoldenCard6in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 27D3E954F1B9259AA8BFF0453108844D /* NstBoardBmcGoldenCard6in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 480FB68E1413AE0DC7B8CE67383BF00F /* RDRAMtoColorBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12060A6DBBD12A6E816E1B753273DD7A /* RDRAMtoColorBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 481FDC02D816C4D6984B333CDD130B3D /* TextureFilters_hq4x.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ECDC95F1D25F3D0FDE01C632C5EEE7F /* TextureFilters_hq4x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4826CCCFC9FEA358F0FC255ABB00B2E0 /* NstBoardBmc8157.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92F06EFCC636BAAC527CE6543D3ABA5E /* NstBoardBmc8157.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 488875F3618617406AB771502A10BE59 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = F88BB2DC2D2059BC24702E5033B1FA18 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 489FD286E54A8CF00552B82CBE154B85 /* glsl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2FFD68EF928DFACE9371D8AAC65F52 /* glsl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 48C37CCF88449880D62A12DCE1B313AB /* MemoryStatus_mupenplus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24F185C35417DF1B6626AAC2D1E5E538 /* MemoryStatus_mupenplus.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 48DD34EC238804715558E42A981112BB /* PACKED_END.h in Headers */ = {isa = PBXBuildFile; fileRef = 9750F2298895C6CB0021A8776937EC4B /* PACKED_END.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48FE3ADC3F482FB1896BB017B2A60B4C /* RSTDynamicDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EA024415809AA543311AA9FE4454F1E /* RSTDynamicDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 493D2606DF4B76687CCD0F48B2E76904 /* NstBoardBmcCtc65.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 695EC8428ABF7B3AF98FDB33DD69DB98 /* NstBoardBmcCtc65.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4948EB328DD7614DF746912086A18D65 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 578F350CDE9D940384DFB5636F635219 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 494BF218C4F917D55808751F21518F3F /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 432A5751918B766667F9CD8866666085 /* ResponseSerialization.swift */; }; + 49518AAC1F6826215684B5499BF1E6BE /* NstBoardBmcFamily4646B.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52373DA4A745FB2484B38C3DBF6F4512 /* NstBoardBmcFamily4646B.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4995851CA04E15BE62A4905F6212BB68 /* DriveService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8110229A2612B6ADEB790CF3A880D7F8 /* DriveService.swift */; }; + 499BFF148188191A810DEC5F4E739AB0 /* seta.h in Headers */ = {isa = PBXBuildFile; fileRef = 94228059341CBA18109047D570DAEA1A /* seta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A1F273145AC8A73006C32CCD1DCBECC /* RSTOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D5F7B6EF99FCD4BF1F3869F8D73FE95B /* RSTOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A235B8A8EB5A067D71258818BE0595D /* NstBoardNamcot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 71E464E228C2FFB740BCB0AF049E4332 /* NstBoardNamcot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A53F0A16D88C817005A54BAE4A6F449 /* KeyedContainers+ManagedValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684FBE5FB16F9A9B0FC3DD78F607C946 /* KeyedContainers+ManagedValues.swift */; }; + 4A83924C5F211B90E03A8A227F460210 /* NstInpPokkunMoguraa.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 06D710973353A358D86E72C355EAB4A5 /* NstInpPokkunMoguraa.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4B7AC54FDF87859ED298ABADF7043037 /* SoftwareRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A833E7EBCC4497CD94712AAEB129AFEF /* SoftwareRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4BB66E23280EEDDAB33FD3849235715C /* F3DTEXA.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C0286BB0302AD778CF29EECE712709B /* F3DTEXA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BE34CEBCADA7E00993E48F365D76C6F /* NstBoardNitra.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 68753DE722C0980098E0081FA7664AD1 /* NstBoardNitra.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C2525168A2CC6EC7625B8AC550C92AB /* commandline.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CC9F125F98839707615EC7F6D62E31F /* commandline.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C2666CEA93DF12E808B0748AA6C1F87 /* TxHiResCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BE3BB976C21C71194C0B3D42717A0917 /* TxHiResCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C44ECF64FB6C4EDEF4ACD2236BA1545 /* UICollectionViewCell+Nibs.m in Sources */ = {isa = PBXBuildFile; fileRef = 2312F596695044513C4F58CD3E2960D0 /* UICollectionViewCell+Nibs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C4A649C2F5E44BC6753A9AF4066B5CD /* controls.h in Headers */ = {isa = PBXBuildFile; fileRef = DF75CDA06A2F599F32A8F0E05EEF39FA /* controls.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C5A26ACD5B7FB918191313A9F178EC8 /* 3DMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF84BC955CB33F2AF3685A48B39D12AC /* 3DMath.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C8972B658D801A7F3D8AC1ECE935C1F /* NstCrc32.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B442E052E2E964ADC9111C8C691F1F49 /* NstCrc32.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C8EDFDEB5BE1B8740F01A75D78CC82F /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 634114A0217955A80057DD03929C6053 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CEADE56BB2EF761D27E112FE7616D6E /* pngdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C369537653C1D3D646427D235DA8800 /* pngdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D0BA6DDAECF3625D9D4F8884C396135 /* RSTToastView.h in Headers */ = {isa = PBXBuildFile; fileRef = 11CDF3492A5E59C765F2232102DA540C /* RSTToastView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D18844FC53DBD634580E3013793C936 /* ZSortBOSS.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C1C055B90B4594009DB00C4694AD0E8 /* ZSortBOSS.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D596A13AB85FB2666F860BA7D172A91 /* SNES.swift in Sources */ = {isa = PBXBuildFile; fileRef = C718FF2F26B50069B14C6107F86F877B /* SNES.swift */; }; + 4DC192EDBBB019B891988F7845182F51 /* RSTCellContentDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C0C395FEF300FE2DAB4AB70FDFBE9A0F /* RSTCellContentDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4DC1F5A681A0675066595FBC8231B4B2 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E6BE100ACC34617987896C070068D72 /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DC3CE0782BBAC382A857CFEBFDE94BC /* Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB060E9B70D07FF358DD8F33001FD5C6 /* Custom.swift */; }; + 4DC932B5F4D7AA22146806DD1090F1DF /* RSTDynamicDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BBA8B55E8468DDF3F3DCACBEC6CC1E2 /* RSTDynamicDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DCBFFA1B95BE1BD4BFE5C963C7C81AA /* NstState.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 40106E58B0E94346FDE0DC29003A577B /* NstState.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DDC8A1EF3EA4BE02FF0B695D582EF17 /* Settings.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE9A850D36C7373D36DB707F1F2FD8D /* Settings.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4E2240017E2AF72AD8910D16B4ADBA96 /* SyncProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0307F4D94070F2E4674AD03B8CE79D58 /* SyncProgress.swift */; }; + 4E404863CC3B40582879E711E4216354 /* driver.h in Headers */ = {isa = PBXBuildFile; fileRef = F76D8AFD80E7A4DAACF521163CC4B26C /* driver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4EB3ECBAB9FB0B1B2067EF0E1DC27E47 /* GTMNSDictionary+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = F2087F209824BFEA65167BC5408CF95A /* GTMNSDictionary+URLArguments.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F413DC26068AB7502D2ADE1EED949AA /* PaletteTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 000CEE30E84D661F89DA9650593A2099 /* PaletteTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F483ADE9F4639BF875D6E84D02AEB80 /* opengl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DC0155465127BC9B36185F96DDCAB75 /* opengl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F79FE245CDFD8041C639E51AD66DE39 /* cpumacro.h in Headers */ = {isa = PBXBuildFile; fileRef = CA99918A66499B3FD57B4BE6A2985044 /* cpumacro.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F8113B8B99AD98CDD9E3B137185F836 /* ftcalc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7853737E5530C7A19E57F3534054E328 /* ftcalc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F8D23620463D8FF135DC582B2B54D41 /* GTLRUploadParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = D686BB86CE4E75B4F320164A9EC1B404 /* GTLRUploadParameters.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F9DEF5AB8980F5F6CBD545C902C6963 /* RSTPersistentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0098D6E2E55E4CB590673ABF30CBCFF6 /* RSTPersistentContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4FE9D949CE1EA4D7AC2C0DC75BDC7D09 /* counterdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA5B2EC8B8F0A5D59CC97B40A380CA8 /* counterdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5028F30132D3D726A5BFEB6A45CE08F6 /* ManagedAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D799A06F3A84C7D777C9A3BD9BE511 /* ManagedAccount.swift */; }; + 505AF6CFE7AF897C939CE3F4893D79C7 /* NstBoardSunsoft2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3A6EC0B470AAD78C4D5550BBDA4A73E /* NstBoardSunsoft2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 505EA34BB63D4DA3E07D0BEAEA9CBBFE /* RenderTarget.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0ECF374B07795E7E2A151E2B4D8D2A29 /* RenderTarget.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 506700D55CD43C1F9D14D10C36B2E4EA /* NstBoardAve.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B686582878B4BC8A27AD99BE25411842 /* NstBoardAve.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5073BE55602733E1D570CBFAF7444F9C /* FIFOSamplePipe.h in Headers */ = {isa = PBXBuildFile; fileRef = EF6779B78D5B9B6019F29579F2C1C894 /* FIFOSamplePipe.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 508F79BAF68E3B5A238FE6A3953A1D4D /* GBAGfx.h in Headers */ = {isa = PBXBuildFile; fileRef = F0220951E1C5853626F63AA3472A9F71 /* GBAGfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50FED56DA840079A313570E00101A9E0 /* Syncable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437F2293962BC32124208AB59C25F268 /* Syncable.swift */; }; + 5158E74402D7498E84B1E75998347C9D /* UICollectionView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 678B4D33461C1C6B1A1DAD8189F4BEB2 /* UICollectionView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 516599687587135EAF7497B4869D18AE /* NstBoardJyCompany.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BC6023BC6F5B2433CF51C57DEE9E331A /* NstBoardJyCompany.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 51882AB1BF2D64307CB26E25DB7A43C2 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B222E309AC91E1D67F520A0BF59B834 /* ServerTrustPolicy.swift */; }; + 51918AE90F48400669540D82E6FE3864 /* RDRAMtoColorBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C3B7DA45835B08897BC091AEF1EEB6 /* RDRAMtoColorBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 51BDAAC3AA2EF11A4E0777A032576AFA /* NstInpOekaKidsTablet.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F506F9CB88905A0006F9CBDBB8EBCA31 /* NstInpOekaKidsTablet.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 51CB2AF004A303202AC4E2E08B6DD4E4 /* SoundSDL.h in Headers */ = {isa = PBXBuildFile; fileRef = 949120606BFB2FD67DC4240028FEB398 /* SoundSDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52323B8DDC717EBF29016585E2D8C524 /* GBASockClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 27CF12F82D7FC895B714C5F31C07E905 /* GBASockClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 523CB85DD9D51432DCC507568B4D3905 /* RSTLaunchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F6D552EFD0D0F0A9F5EEC068432F589 /* RSTLaunchViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 524F9BFEF89FF358697E09E935BB0B98 /* Utf.inl in Headers */ = {isa = PBXBuildFile; fileRef = 8DDA3FCC5B59298F8FF38E7914D03FB0 /* Utf.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 52722B0030C7E925E9C8304457491FFB /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BA5332776FCBF3B75CDD7168F2B8E2C4 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52B893DB672E18029FA04807F0771F85 /* Vector2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DBB26A9F3AD2F7159A0C7E893521DBCA /* Vector2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 52D74F7ECCC1DBF6E16DE1F12141B276 /* WriteToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C7C0BB4E1D92107DD8D623F8F45E5 /* WriteToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52E4F3DFED11D9653AEC0B37BFCA708E /* RemoteFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE12392094B01C972B9C0018E1869E29 /* RemoteFile.swift */; }; + 5312806A7BA82453F7A3E5C233835D29 /* GTMDebugSelectorValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C85069E5F2ED830B22D7D1AB4A529C /* GTMDebugSelectorValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53D1203F37189E1B0B8854659A9345AE /* ftconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 413E31D8C1624AEAC8EE7570F0551194 /* ftconfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53ECC6163FB5AF3BBA2F3FAE6A8F1BEF /* DS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64B255C31BCB0FDD8AB113CF71D128C3 /* DS.swift */; }; + 54035E7677B71E7D130E4E693B211B71 /* ImmediatePanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB1DC75CE747381BA8AA66BC31541BCF /* ImmediatePanGestureRecognizer.swift */; }; + 5410DE9CCCA5B27BF32F53F10277BF94 /* TeamRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A222C0427237AEDD558FEFA410B5E021 /* TeamRoutes.swift */; }; + 5433266A44831DC01F4FEF584030D6DA /* NstBoardBmc35in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 179CA20387AC394361693DD1CD2E4572 /* NstBoardBmc35in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 54B0F9C41BE6A78067881BEB750C1AF6 /* ThreadImpl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48A397662316360402E0600E571AD262 /* ThreadImpl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 54B7FB35A2EDEB196FE50FF306656B62 /* NstBoardWaixing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 54EB6E02433DBB4599FF9FECA6F74BEC /* NstBoardWaixing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 556FF16A662F3C2DEBA50B9693599DE1 /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 086ADF754FD807B796DAED4D2797BAA7 /* pngtrans.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 558A233C324EBAE74D567FDC751D1EB5 /* retro_endianness.h in Headers */ = {isa = PBXBuildFile; fileRef = 1848F23A934DCF2922E385DA2CFEDB81 /* retro_endianness.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55BA63757D1E64C1BD4D132210364BBA /* biopak.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD623E462036E417A6C1BF38166141C /* biopak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55BACBFD0A8A8EBD6EC8AA2002E6046D /* GraphicBufferWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3443718CF69897A14D49B9C400E80C50 /* GraphicBufferWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55C3D30D20E39AA463F637012FA6E15D /* ColorBufferToRDRAMStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 35485E76FD48D810C5D7C95E2FD90D64 /* ColorBufferToRDRAMStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55C4AA463699B788B9F18C0103D41C85 /* ftmodule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3451D46815FC1E9C8DD13CA49D2186AF /* ftmodule.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55E38E50C72F3898CD13D71706F1BBC4 /* NSManagedObjectContext+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = F27A0FAE014100246C0E1DAC5E1E38DF /* NSManagedObjectContext+Harmony.swift */; }; + 56096E16210F97AF0E03EB7509C67B7E /* NSManagedObject+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46A81EB457DC21D9C21932C473EB359A /* NSManagedObject+Harmony.swift */; }; + 56192DB51F2A50C90569FF1BD1985C88 /* glsl_FXAA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B99B417F7B87ED84AC94DA16A254477 /* glsl_FXAA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5619A5DFD12F6FC67F5596883382EAA3 /* rasterize.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4CCC593653835948DE2077F515DDF3 /* rasterize.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 56487F87D42D4ABC274B99A23E38ED51 /* DSEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C4B8A5D7D056FB02966F159AFC5E9F4 /* DSEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 566B02F81167FAAB363014E42ED15BFF /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D113E482EBF7C096302CD382067ECB51 /* Foundation.swift */; }; + 5678ED8E60F31109D707A9CD20001EB6 /* Rect.inl in Headers */ = {isa = PBXBuildFile; fileRef = 635101CB7845320BEBBEE9E499DCF372 /* Rect.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 56CC143D8E35F7C9A786111F8469E4AE /* L3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CA005FCDCBF549105B1691D698AFFE18 /* L3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 56D815C1383B97B622D2C8A50156BBC4 /* ColorBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B75443503A9FFE2C23D1ACE270C81B1 /* ColorBufferReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 56F2FD6BBD1FEDD660C763B74D0367B8 /* SNESEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 40018788A7B82BE36F7A4762218942C4 /* SNESEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 574897C776D4A75F06D108C90308A36E /* UIKit+ActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = 22925124C257896E19766BEE921A074A /* UIKit+ActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5788CF6580789EB32B111C2CEBE2FA98 /* NstProperties.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AF55BE85D1766A85D542E06F8CB64DAA /* NstProperties.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 57934F805FBD53511D97E2A813CCA304 /* GLideNUI.h in Headers */ = {isa = PBXBuildFile; fileRef = CB608FA02B2FC02737ED821505210FEC /* GLideNUI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57B0E2E5E730BB045DF85BD06E05F717 /* NstDatabase.xml in Resources */ = {isa = PBXBuildFile; fileRef = D9445B158497F7C69D8E9D2443A33739 /* NstDatabase.xml */; }; + 57D216129FDA337F9E3D3C3FA2B064AA /* pi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = AC44908E2E42851E70850DD854945391 /* pi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58502D5F6100ACE79187371096DD70CA /* mic.h in Headers */ = {isa = PBXBuildFile; fileRef = 414ABC5418ACBADFD1E0682648431076 /* mic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5858556236C0AD004276850A211BBBB2 /* Turbo3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF16DF495D40774F62F549F44383A37B /* Turbo3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 58670BDA59BC1476ECD1AE42A65DEDB4 /* SQLiteObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1AC80F9908EC458F2880C5D2B25C33 /* SQLiteObjc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5872138AFC456A4EFAF08719BB37464C /* opengl_UnbufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C43B2C1E1A9F88A7EEAE044E22A0CDC6 /* opengl_UnbufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 58766C2ABA1EA78EBFDA6358071598A6 /* NstVideoFilterScaleX.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B6CDC4DC2E9754CD3DA34C6A091F6E53 /* NstVideoFilterScaleX.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 58A8D33FD84F62BA37B6B53109F22783 /* ROMReader.h in Headers */ = {isa = PBXBuildFile; fileRef = AB3A5F6A3985C524CE62D3D188B41912 /* ROMReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58B5EB01C16F961316330E4D251E7648 /* UploadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8697A847DE43FFACD393D2A7A9B84E /* UploadRecordOperation.swift */; }; + 58BE7AF2705F2F19B2DBD0077245F46C /* Flash.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A8950AA257A8E57DB3C9539DBCCC980 /* Flash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58EA70D5ACB9CC2718AEC1AEBADFB157 /* SndOut.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E6B9B56EA3BE92F4A8798B0D43526B2 /* SndOut.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 592095BB4B63DA9A913D330FFA26905F /* SyncRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EFA3B9D1B35DA0B89C71DA1D01B3B45 /* SyncRecordsOperation.swift */; }; + 59337EDB4628FDAC6C07792E35AE0FFE /* PixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CE468B2DBAC6E3109B9A6E529ADACA1 /* PixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59462C1E4E16ACC6FD20C786FE5D2A1A /* DownloadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0EF51BD6A873328F443F48E06B74BF8 /* DownloadRecordsOperation.swift */; }; + 5949B7253E6E1DB1793B5F8D17F6F095 /* PluginAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D28BE3E5AFE58F245865607BE7171E8 /* PluginAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59580416DDB44B3A787BC982BC72F768 /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 56521BBB435C7A22CFF991B7B01066DE /* zlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5964FD1B899EE5FDD4F98F594BC29971 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E0ECBB02BB69E04F4F0E29EDA00B847 /* Errors.swift */; }; + 599D552BADBF132BAA36F06CCCD06913 /* NstBoardBtlSmb2c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9E493AB01A18F0DA9F384ACB5CBD5C5A /* NstBoardBtlSmb2c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 59C9DFBC77F345B4C89ECEDC869567AE /* sfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA8D788852783316C1BE135C3ADC92B /* sfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59E880502F8D50F9EE5D608A579F9BC0 /* wst.h in Headers */ = {isa = PBXBuildFile; fileRef = FB78D889B9AEF0455BFA9A0731B00CE4 /* wst.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59F9463AE8F8A4C77B2B7FE0E646026B /* F5Rogue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33CC18E757DD735D6437685485DADD01 /* F5Rogue.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5A09E36B97C75FB76C579219F68AEEB9 /* NstVector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7DE608CD51BCBB2191371758B7C8E134 /* NstVector.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A0BF65D720FB2B9FADC78A474E6A81B /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783A65AE17A33F0C1C242F5B30F01680 /* Archive+Reading.swift */; }; + 5A79C28FC58E9C640DFD7AAF04AF8827 /* NstBoardBmcA65as.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B56303B13A0444FFC586E198F58DAFAB /* NstBoardBmcA65as.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5AA3255686819EB4DD24A1FE23CC6F28 /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23C9343FC4FB0FD507A750B3EF697747 /* Contacts.swift */; }; + 5ABA51E69DCE967FCBED1A337D04F0A7 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 6DF6C3B7940689905856C5444F2A0E35 /* Standard.deltaskin */; }; + 5ACC5FA32C77A54CBFEC08C34ACEACCB /* NstMemory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 610583D92AD551F88F44D66D964F1334 /* NstMemory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5AFA9AD616A22E16547326EF1CDA4C83 /* file_storage.h in Headers */ = {isa = PBXBuildFile; fileRef = 92B94EAC848FCE04BDC76F2D0CC75878 /* file_storage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B025E037D2C37021CA068050A2CA3B8 /* ftbitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 782EAF069DEB44E112D5056BEF8C3DE2 /* ftbitmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B444B54168E8EDD6542DE7127EEF823 /* Debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E118D0678F9057E5942E1C06792221 /* Debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B523F0E6CC4D851035C0FF668B53075 /* TcpListener.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43B52186D0ADE3F0F74317B7F542BF3E /* TcpListener.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B5FC4B8005630CE21B998A96C73D770 /* F3DGOLDEN.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D1E6C0B74E1FAEE75DA38BD38CEBDCE /* F3DGOLDEN.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5BD8D84D6C59417A4EFF51A407BA04A5 /* NstBoardSomeriTeam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 62CFF0059E7E0AE9B9B20A8DBAE51D16 /* NstBoardSomeriTeam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5BDF97784CBEA46C26B454F806233B2C /* F3DZEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = C1651CF80D05D97DB390C5D66D51F25C /* F3DZEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5BE7D6FBE9EB93D43C99935C48A966B7 /* GLideN64.ini in Resources */ = {isa = PBXBuildFile; fileRef = 20E6DC27E3CD5270C16AC4F9F2E0D3B5 /* GLideN64.ini */; }; + 5BEFEF83E88746F60EE96520C83CF8B1 /* RSTPersistentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = FFEC014D2C956093FFE28CD534E23741 /* RSTPersistentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C1E3DA8CF07041B9499F603C66261DE /* fttrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 232E1FD2069448A4B7FA73B378A48EDC /* fttrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C28996B1131EFFAB4E75493D9F16B65 /* ftmac.h in Headers */ = {isa = PBXBuildFile; fileRef = E82E5BAA08ADC037E1F7765FE77042C5 /* ftmac.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C2C50048DF9D8C1D128711187453A8D /* GTLRBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ABF32DB7C03DC858879C758E39AAD27 /* GTLRBase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C3F628CF00E3CD05F3055BC14650779 /* String.inl in Headers */ = {isa = PBXBuildFile; fileRef = C77DD7055BE2E940CB49A8B0F10A472F /* String.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C5F387309EC920C1D2F76769CE76897 /* Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F04014B383F64E12DE6C9129A85A7C5 /* Delta.swift */; }; + 5CE430BB46B6B4C1B3051011D523753D /* DepthBufferRender.h in Headers */ = {isa = PBXBuildFile; fileRef = A1817B7D536070DB0693E3627DEE3C0E /* DepthBufferRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5CEA0B264A2AC9222A69B62A1F0C7AF5 /* sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = C5AA082D0701AB3A2B49F4AA865B5021 /* sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D11ABFFC6008AB58F5E115BC314596B /* NstBoardGouder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4DDA965CE8714B275AFFEDDF6DC053CB /* NstBoardGouder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DBB580BC90D0C0893FC692F012A0B28 /* NstBoardCneDecathlon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04F25CB32F102ED6A7598D66E7BC9443 /* NstBoardCneDecathlon.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DE22207D1B1CD7A583F52895E942007 /* CustomRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF02F520CDA87AF4813D4764ECD43F5 /* CustomRoutes.swift */; }; + 5DF0A3CA62FCFD5CB7345A9B97F10049 /* NstBoardSuperGamePocahontas2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7537CE11495993BB05FE9EAA5BFED976 /* NstBoardSuperGamePocahontas2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DFA7B4B653B42D7A547C3A60EFD77CA /* Joystick.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4EFC0CB26048698A849DD6BD85E55424 /* Joystick.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E39903C4C3C854D8A8F52D82FF51ED2 /* bitmap_font.h in Headers */ = {isa = PBXBuildFile; fileRef = A4BC2C14AAA86B73D6B28FED8975C3F4 /* bitmap_font.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E8C4F8137E41A59A3EE4DE28307BB64 /* DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = FB4B3A1CE88E9FF6475854D98A52A5DD /* DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5ED3D70CB705D6F29363340A8E1B314E /* ftxf86.h in Headers */ = {isa = PBXBuildFile; fileRef = C26FEA9C82A62549EEEB21A953C0F6DF /* ftxf86.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F3811A8B4109BA4B752316B90429F4C /* OAuthMobile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A552ADFE847FA0B9435F038FD25C6AB /* OAuthMobile.swift */; }; + 5F45A12D5CFF64756E09AD77EF5081E1 /* Transform.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCD06FDE6C4BF266F270034784E23776 /* Transform.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F89935F0D9FA301409E399D2B40B501 /* pakinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C71AA7A6480E27C964B8F797CDFC89B /* pakinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FBC206C59F0020EFCEC4718EE86DF8A /* bldno.h in Headers */ = {isa = PBXBuildFile; fileRef = 5974CDB2492B4BFA5566A1D118F12B98 /* bldno.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FD5F0CF6C721D19713FF7C5E82F1829 /* NstBoardSachenS8259.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3555155F2CD8E368BB6A27A9517ADC29 /* NstBoardSachenS8259.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FF9738199FD4275E4CEF17EB2FD0E14 /* NstBoardBmcMarioParty7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3AF4B7019142B0E02BDE3089ED853C72 /* NstBoardBmcMarioParty7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FFED05405EB077DD3158D0203FEEF2E /* NstBoardDreamtech.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4AAA4EBFA294D12114F5AAAB4941BFC2 /* NstBoardDreamtech.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 601B04A377C214C532FD3284085C6C4A /* Vector3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 40C9A47942EB199AC851986CB149BF7F /* Vector3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 60253526607A110A8D0EE8069B3D101D /* NstBoardBmcSuper40in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04FA9510648C9DD5A3436B2139DA560F /* NstBoardBmcSuper40in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6109531B72E4E232C02329870717C7EF /* NESEmulatorBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 631827F8F7F53171DBE8CFA596562B76 /* NESEmulatorBridge.swift */; }; + 612626E2EEFEF0B280A30622DFCB55C7 /* NstApiUser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1227B98A9F28F7732433A1CA68F8F875 /* NstApiUser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 61637EE91267F265A7F4EB3CECCFFA1F /* NstBoardBtl2708.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB24131FB6C69C2CA2374DF4C6A91A71 /* NstBoardBtl2708.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 61978EBDA8F0BEDE69E4CE4034FC960C /* m64p_common.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE3998515C1E572211C2A5EEE7EF068 /* m64p_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61A0F8234682825C2206D9B58BE241DD /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D8592309610FD7BF2ECC3EF7A2F045F /* pngstruct.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61A36B8525B5D1CA38CFC4C2564DA2C3 /* ftgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F66324134D7EB7894E23D64D5D292B /* ftgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61B583689DD2CFBD46FA3712A184E2E5 /* CheatFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBAEA04DA00E792104BDE8F6F66BBE09 /* CheatFormat.swift */; }; + 61D1C0178CE6181A4877AD63422267AE /* VI.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EEBB60E43F6C3B0B541EE72A7C426F9 /* VI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61EBB111287EDF6AE4ABF04DA5A396CF /* NstBoardIremG101.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8FA72104E6FCAFAAAE36DA0189E9CB62 /* NstBoardIremG101.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6212289ABD96C811DCD8B09B9BCC1E9B /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBEB0C887336CD9006A57A0852F915DA /* Operation.swift */; }; + 6212EBD634EBA7AC7214545989DC7AE0 /* dma.h in Headers */ = {isa = PBXBuildFile; fileRef = CBE1D5062813EDF33B5FBD108CA1A88C /* dma.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6252AC3C230BC83234C9D7D7F17455E5 /* GTMSessionFetcherLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E4A6FA078E5D38752214D65807E3B87 /* GTMSessionFetcherLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 626863FBB1F3C943ACB548FFB7A85E8C /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3871D54EF3B7DA9555828F18A50129A9 /* Timeline.swift */; }; + 6281A81C693739FBEEB99068ADE81F94 /* cpu_detect.h in Headers */ = {isa = PBXBuildFile; fileRef = E21A90A7C4C571865F8859DE15FB6A94 /* cpu_detect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62949FF9C1CBB808257B793D91067BD3 /* NstNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F67940E7C50D7A614B939AD60E078097 /* NstNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 62A34A388C71F471F3585E7D042A16AC /* AlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4EDFE6FDF5489F61CF533AAB848DEC32 /* AlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6322A14CBDF57EF29695F820A403EDE2 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C0BA17B21F19930A3F7215B702D7372 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 63306BB36B1EE0257031B7113C64569F /* F3DPD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DCDE4D17E50CB5CCFB03F65E6287BF0 /* F3DPD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 63427690A77B2B5436666DAF5706611B /* Err.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62F06888B27D96F21A3D53797DD35725 /* Err.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 634773B1E340AACEAF3FE0D1F31F51D5 /* gbafilter.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A2C9E40FB41F12D2820E3BC07998FC /* gbafilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6348E28B60143E90AC1BE0E53C58DC48 /* opengl_BufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B2829EE8FD1B61E4880C2DDA961706 /* opengl_BufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 636BA008A6D26E9CDAC0E0358AF55866 /* SoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 887068F06A80B516F5DE95AE14158D3F /* SoundDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6373AC1BC02916DA7A4727231D4E72E6 /* ControllerInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399024492430E7258571697FBE41E931 /* ControllerInputView.swift */; }; + 6419BCC57C3D947320987D210C349675 /* instr_counters.h in Headers */ = {isa = PBXBuildFile; fileRef = EC16A6C9E22D1924AE516F38A6DBFE58 /* instr_counters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 642FFA142ED6C17EF6E07F09CCB95DE2 /* ThreadLocalPtr.inl in Headers */ = {isa = PBXBuildFile; fileRef = B57DE6F8DC52A0DF6FA63026114732E6 /* ThreadLocalPtr.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 6446ABE3984EC295A073DDF259A3968B /* tile.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E62A12C767331BC621336E59054040F /* tile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 644B2EA9FB3436835DEE0BA7DA47DAE1 /* t1tables.h in Headers */ = {isa = PBXBuildFile; fileRef = C1E54260AFD798B02F4283ECF16E444F /* t1tables.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 64C9989CD9A4F9A39D9599A0881F5655 /* GBALink.h in Headers */ = {isa = PBXBuildFile; fileRef = 64F5E353543E813AE8499F0415496364 /* GBALink.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6502705CE8C9907BF33AEC009AAE49A6 /* NstBoardIrem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E64DA6F38CE5BF6A1B8B85644BF421A8 /* NstBoardIrem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 652A1D1BC29758EF8C914998DFAB0F96 /* Mutex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9F97A82B4B62F88A9ABDCB471BD4E255 /* Mutex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6535B1B6AC3FBC20B9D1C2B6255A3708 /* fttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = DACC10FFB04DCEFEA489925006B8311D /* fttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 653EFAF65992560FB2370C51780DB91C /* SoundBufferRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0C27F2E27F1106463E57DFEED760FFA8 /* SoundBufferRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 657244809950CE301AD70BDD7C2D4DE8 /* NstBoardFfe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7FA6F5EFA3E03E39BBF032A32482DBE /* NstBoardFfe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6572D4AD2CDA7C344092B902AE5E375D /* svpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = 339EF64DD9F7A5E35B3CA9B6E200C168 /* svpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 65AB36D595CB07090A2AB42CFA4C4F96 /* L3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B06D5EC0A84D413A97D791A09DD4C0 /* L3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 65CBBDBDF701FB51569473462CF38DF8 /* svsfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DA02F00ADA726E3CE0F82AA955FFB71 /* svsfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6604303E9728F99EAFA8B202C3B06AAF /* apu.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EC7300212B3C57CD396DDC7242519F3 /* apu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 66AE47CDE09E8A95A29BB75F046C2B03 /* ftcffdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F9A4CA2154481A63B5E58F37EBDA908 /* ftcffdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 66D90649D3F20F5DA87EC0A5FD2168D3 /* NstBoardBmcHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F712A25B70E2BECE91A60F3F2CDBC6D6 /* NstBoardBmcHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 66E68D161A3E4F2F8CF51848F5E11C60 /* STTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2013712F504FC10A75B32DB78638B56B /* STTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 670B1515AB23AB6EF7AA6DE75DCD4BFA /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F0727F553BF04882765DDB5CDA7D864 /* internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6728DD595016A88D0BE42E03C7F8FFCC /* GBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458848778BD2CA388B2DC820968AECB /* GBC.swift */; }; + 6731CC4CED928FD83F4CEA695B5D6A78 /* CombinerKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9863A0F82AE9292BB81384ECFD45AABF /* CombinerKey.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 675105628714D68862DC480B2632FFC7 /* MMU.h in Headers */ = {isa = PBXBuildFile; fileRef = 81699BBB7E4A8A98AF2985A53BE0E791 /* MMU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 679942ACF8264152448A2861144849F9 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C24EA8E380769E668B40D2C5025505CB /* opengl_ColorBufferReaderWithPixelBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 67ECCA37061F91867BC2AEA13B836BDB /* SNESTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F571DFD58990674E824384F544CF9CD1 /* SNESTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6853624E43A5EB0CA069A0F55C3C315C /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC397E433E2CCBB38824AB04FAAC26C /* NetworkReachabilityManager.swift */; }; + 687F1F311F418FE895B2D96BF3617B14 /* mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DB43450886939FC8E10313F46E479D1 /* mem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 68F7071AB87ED8CB4B8CF11F7BF9A78E /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C8D94F40BF63E8927B70BB024B0F136 /* Connection.swift */; }; + 68F955348FE9A8B6BCE3113CE94A7DE3 /* remote.h in Headers */ = {isa = PBXBuildFile; fileRef = B0720305184D6498023330012901935C /* remote.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 693CE9D53961CFDE9E0763B45047AA96 /* wifi.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A7738B63C4EF018D66094588BB33F2 /* wifi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 695099FE2655BBE346F93075ABE6CF75 /* psaux.h in Headers */ = {isa = PBXBuildFile; fileRef = 7502471AA27312AF107E971A67EC58C6 /* psaux.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A07D0503F964D4BA74E6F726D679DF7 /* NESEmulatorBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 16493B09A57A9904E0843D5268271785 /* NESEmulatorBridge.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6A245DCAC5A1FD3F8943F4FD3E1473EE /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 71FF835F27DBABBE447A40E51AF4AC68 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A386F883B6F86FCA792C8C1134057CA /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6365C9968A510968784A08051605D583 /* Result.swift */; }; + 6A86407036458ED2BBE900F4A74A49A4 /* resource.h in Headers */ = {isa = PBXBuildFile; fileRef = 582940D574BD4B0474117DA6BE586566 /* resource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A90DB9252F5F4A3ECBB6AD4F22A1352 /* GTLRRuntimeCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = F97E0802AC94B24B1FB03E55CD9A2FAC /* GTLRRuntimeCommon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6ACAD89B30AD04EE41D0ABDD3FB3A546 /* slot1.h in Headers */ = {isa = PBXBuildFile; fileRef = BB534F82994E35C0556962CEB04EAF6E /* slot1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6AE5D505AB46EAC8A4CA2ACBE1EF0FC3 /* TxReSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 205D59098479C96A36856ACF72D6AF7C /* TxReSample.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6AE6261249D9E4BD068CD7091A136070 /* osal_dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = 67464BB3B17BCC0986DEB6DD52C604A5 /* osal_dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6AF4C6E585CFF93B76EC9C45FE0F7CB1 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039A7DC666394A7FCDA8D0587DD80EAD /* Files.swift */; }; + 6B16C85148A68CC975DA7929304DF1B7 /* PostProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C9E1AF02B3EAB5EEF41A090B1D93CA6 /* PostProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6B63836AD6E6BC9D03FB3AD4A534B6AC /* gSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0E9121D9B12531DC426945BA216F72E0 /* gSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6B6B1242D265B7C549A4D6A341A1EEB0 /* dcheck.h in Headers */ = {isa = PBXBuildFile; fileRef = 133FFF074C7375B30FD28DFF38BE260D /* dcheck.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BABA54BBEBA347D766C48087A4F87D0 /* Patch.h in Headers */ = {isa = PBXBuildFile; fileRef = E269D644BF08F4B053F036687791157F /* Patch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BBCF5E1AC45FC48B7C6E6AA2A19E03D /* DeltaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD2694A63AA0B70E91DAF193E7B4425 /* DeltaTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BC128BCDCE5AC608EA415377CCC78B8 /* libhardware.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DD967DC3CDB801FA186F97CA836B2E5 /* libhardware.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C01BBF8A1A21C9696500E148349BC14 /* AnyInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294C23E97C15AE68F25128C115C99270 /* AnyInput.swift */; }; + 6C138F122959D82C0E672FA0ACE8F007 /* ppu.h in Headers */ = {isa = PBXBuildFile; fileRef = D9ED4C71C3016ED3FC4BA58AD0F23387 /* ppu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C6915CA122E8B4630061446128E2BCC /* Paper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F9C1E6A3EFB7439D016876D6537610 /* Paper.swift */; }; + 6C87671F7C948E465D76853474A7F27E /* DropboxService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9140DC01C356F980A0A4E04F1CCC3636 /* DropboxService+Records.swift */; }; + 6C98F3F29A1ACE6C91C20CE35EDA0261 /* NstBoardNamcot163.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5385CA919BFDAA02107CE76AD241472B /* NstBoardNamcot163.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CCACC2383F5ADD7F92D95FF4C6CDD56 /* GBA.h in Headers */ = {isa = PBXBuildFile; fileRef = 325F0C3218801422F4A41352BE209C49 /* GBA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CD1DD53A424B153F6267EE63AFE1CDC /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C0CA4A2A069453672147E331C600848 /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CE7F4046BA417D2DF53E0C69D47B473 /* DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B270BDDBFC6E00BB3C7D20C485D51558 /* DeltaCore-dummy.m */; }; + 6D1CB98C0BB063D06CF4A3B13B4D21F3 /* OAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 542213FAAE95E6EA5E3E9392D8DD3B49 /* OAuth.swift */; }; + 6D4FDCA328DD8D76500CEE55AA8663B6 /* adaptivesleep.h in Headers */ = {isa = PBXBuildFile; fileRef = C1F9B4F1AC4BEBB6F3B839EDBD9E5F8C /* adaptivesleep.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D5F88F8EE3492C0AD55D6CD854681EA /* LocalRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CC6EBCEC394DA0E803BBA27F7D98C0 /* LocalRecord.swift */; }; + 6D611D7DCB3F3FB551F06D363B0F6BC9 /* Parameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B314596089C9694EA48772E604953E9 /* Parameter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D72C6C57A885CD6E28DEA598592E6AB /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 1708CC47B44B29F11E1399CFC0321DC7 /* Standard.deltamapping */; }; + 6DE7BBDFA34C2573298F7441BBF3AB4A /* CRC_OPT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75F57C00E99D0261142E905420B1FDA7 /* CRC_OPT.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E50F30E4BECE7A6C3531020D1E5C59F /* msu1.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B254FADF7513993D3F7353F6B8F1395 /* msu1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E5A067CD4797D3ABC2BC001B7005A84 /* ZSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 600582314CC9166CC637A8451ADB1310 /* ZSort.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E64571D846DA6B46DEF71405A2C71F7 /* GTLRService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1B35A10293013EB1FF554F7BEB76DC /* GTLRService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E775AD30672E29EEE6CC70D23A833C9 /* opengl_ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F09391CC528737E038858DA43278244 /* opengl_ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E77A5D834F1A5B81DFB7C1955085F93 /* RSTToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A435B10C22B22C7734A3E5913E53474 /* RSTToastView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6EA0A6FE9CCD2699B6BEF34376E9649F /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC1B770F09F0C669234396A39BFF6BB9 /* SDWebImage-dummy.m */; }; + 6EAC3C9446063F09611B9BE55D8D34C1 /* SQLiteObjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 89132F0647F462DF7B2532346D3447EE /* SQLiteObjc.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6EC906D378EF8ADEC5D7C2B04BE6C36B /* AudioRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E81E563B519CB275A216BD3E5414DAA /* AudioRendering.swift */; }; + 6EDBE3E2C2021F2A4DC6A5D4258AAB9A /* hle_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 58B5E7D372F81123297C2A52505FD923 /* hle_internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6EE9ACB0AB0E0CB81A490F499EBEFF29 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 040EDE19207F90BFBF015280544EC415 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6F2BC09D000622A367F66D88714B1C38 /* NstBoardUnlA9746.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7F657EAC00204AF30C7E4EA0B4518AC5 /* NstBoardUnlA9746.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6F7B7F6E4DF7B31AC33A3A62461A2127 /* NstBoardHxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A3F6E644CFB6C961D9227F005A276743 /* NstBoardHxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 700240FA8626FBCB8DD1E6A528883AEC /* GBAEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD71FA05AF33D2016379AB441E9DA7FD /* GBAEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 70035AF1D8DA93A9B0572D1D91051A47 /* gdbstub.h in Headers */ = {isa = PBXBuildFile; fileRef = D2787BB38A3A6EE118F7DC347429E78F /* gdbstub.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 705E7B04E1FE3269939CC5C40D83CACE /* DBChunkInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F2AC6B33D1F207C23351293A0A281146 /* DBChunkInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7064D5DF4976B7F5D00D0B07734180B0 /* fterrdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 435368F303983E9CA139C506A1FEDEDB /* fterrdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 70AFFCAC4CE322C09CE2DC0E3E7EA378 /* NstInpAdapter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3B72CA5846B888FBC7CF69D1C40C9AE7 /* NstInpAdapter.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 70B5E10C6A4B9C465AC2BE6C2767396C /* Transformable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3786BF5CD7F52FDF2EC2229D9387B2A8 /* Transformable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 70E25FC6BCB677FCACF3974715396E5D /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BE2E896D06C7357E3D03BBCFA7DAC96 /* Platform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 70F8274ED7EAC15159077EA63E371A20 /* ftvalid.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E8F9415B50C5BE88ACC481C92800E41 /* ftvalid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71090B7AF02512A3B3624247E31E7431 /* NstBoardBtlSuperBros11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2D3BDC0A83B15DB6FCC56F319C1AD6E8 /* NstBoardBtlSuperBros11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 71818CFECCB549FFE9A56EFC73229B2B /* NstBoardKonamiVrc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9C6F3AAA06C293FC9A91CD7A5FE7D65A /* NstBoardKonamiVrc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 71A5939665A6E80DDE1C1A3AE2CEBA27 /* F3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A79E77382CDD0991EC1FF3A9416D1E8 /* F3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71F6A8B4B3856EB5415745A312B82590 /* NstBoardJalecoJf13.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E042969907A8F89D42D0992DE8D4804B /* NstBoardJalecoJf13.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7264B6C7620512CB91DD5A6E09E01DED /* TxUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E57F66FFEB81B1218E882DC67DDCD97 /* TxUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 72B1945C2E80532FCF4F8003F26CCC0A /* NstCpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 13AB3B953E50263BB51D1FB9AE869E8E /* NstCpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 72DD532BE9D0102D2688E11ACACFF362 /* libco.h in Headers */ = {isa = PBXBuildFile; fileRef = F31355AD8ECDC7A336C4AC45A5CD2FDE /* libco.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7324ED114581AE7281851FCD2DFE2220 /* audio.h in Headers */ = {isa = PBXBuildFile; fileRef = 00E1CE975F5DF9EF52286A091470CE4D /* audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 73292E5A2AC3196B5409A496BB5C5541 /* PrimitiveType.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 406077526A3C40A99FE96076975E23CA /* PrimitiveType.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 732F3A5D226D0D463C9027476C9F5E60 /* T3DUX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59F17550D814845B484B295BDDA7E52E /* T3DUX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 732FD811EC8A5BA0B28708137D0A45D2 /* logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4016B959B9C2B70E21D27AA4439760 /* logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 73386D5E90D47431798B1A5A736601B7 /* glsl_ShaderStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E988413B416CBB252A2093E604B1CBEA /* glsl_ShaderStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7372BF9BC203CFB23F3EF1A9742FAC93 /* NstBoardBandaiLz93d50.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C55A28A051F1189A5E169C1AE35F08E6 /* NstBoardBandaiLz93d50.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 73884246E8506A0D452A96718B443133 /* vi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 115E4BA52EDB4A7B8117F27B828EF3DC /* vi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74206933424C0DC3CB8FAE979E98F7E1 /* NstPatcherUps.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04432A140C95AD3E4476D54108D6800F /* NstPatcherUps.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7436F86B9A9CD831006948764C9DFB72 /* MFiGameController.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 2E8023826B8975C217D59F5E61A8DCEA /* MFiGameController.deltamapping */; }; + 74B438724E9EA3B46DED43330AFF691C /* sdd1emu.h in Headers */ = {isa = PBXBuildFile; fileRef = ED04A2B8DBDC30DD89B8DB99DD186974 /* sdd1emu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74BD141762B0C89C185D3ABE65E58448 /* NstBoardHosenkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 64F52923D2670C65E03D742EF710218A /* NstBoardHosenkan.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 74C1EC2D9E5FAFAE8A89018C1B79FD90 /* NstBoardBmc1200in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 301D690D8387625CECE00F7DFC975BD1 /* NstBoardBmc1200in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 74C7BF54656C67DEB87098CB74EBFED4 /* UpdateRecordMetadataOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D564037F9192979A0BA63A5F9545CDE /* UpdateRecordMetadataOperation.swift */; }; + 74CF4098668D8E59F2F415F232C54506 /* NstVideoScreen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E525D21EBF75A723E18A33533D504F6B /* NstVideoScreen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 74D859213990282C35C19B6D2313E0E8 /* RSTOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F1420029FD3C40F200795462E463C362 /* RSTOperationQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 753C7E6021A90C69A401D819AA4460D5 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F6E550519668062C1B78FCF1BBCEA0 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75909BCE4368ECAC28AACD2C2CBB5682 /* idec.h in Headers */ = {isa = PBXBuildFile; fileRef = 89C8E96993FFE0F04D42EF2FC57593F3 /* idec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75B06D656B71606BD4C8995494313BDE /* PropertyGroup+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = D98981D944CEC9F56A1D909EFAB4FB16 /* PropertyGroup+Harmony.swift */; }; + 75B85A307530462BEDD1925293E1B335 /* ffmpeg.h in Headers */ = {isa = PBXBuildFile; fileRef = 490A6AF86E771A7376AA1B58EDEAE7EC /* ffmpeg.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75C08B83D5F3E9E679CE2F1619FEF158 /* NstVsTkoBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 955407B1C8467036B4E43CAD531EECB3 /* NstVsTkoBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 75F7A8F8126A9FE9B693F50E46A15BDE /* NstBoardKay.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 323BA7B73E9CB19F2E6792B339B711E1 /* NstBoardKay.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 760970F7137AE6D811FF1CDB6CC2D871 /* F5Indi_Naboo.h in Headers */ = {isa = PBXBuildFile; fileRef = 888803D1EF43D58657C5732AFAC576BC /* F5Indi_Naboo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7676FAAA46D6F17DD9B7DD349475C457 /* Packet.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 30DCADC540C43841BB69ADBF07E2D033 /* Packet.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7694BBD406736AE9B3A9A54680E1BE83 /* iniparser.h in Headers */ = {isa = PBXBuildFile; fileRef = 042D259A0DE7C5C64344E6F6C921F2F4 /* iniparser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 769EEA7F82C3927B9C262C740EF80DC1 /* GTLRDuration.m in Sources */ = {isa = PBXBuildFile; fileRef = CD370B63C73F83203B239D65A10BF44A /* GTLRDuration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 76A404D815A496FF472714B9493FB2E8 /* NstApiFds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF8FF38768C4E80A0EA1F613D38541E5 /* NstApiFds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 76AA012877710AB1F164AE7B49DD098D /* NstInpPowerPad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D41C7731EC1A1866FC9B20D1EFC8D2ED /* NstInpPowerPad.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 76D132D024B6A52E4DFDD31827EBE0FC /* VideoRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3D974A96D201E7E1B93CC578D3AC323 /* VideoRendering.swift */; }; + 77338E935B4CB0FA16154F8F845B9F74 /* NstPpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6C7AA36ACFE2AD062803B5CC90965154 /* NstPpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7736A8964115F20A8A6F09230ED8814D /* Time.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5F4BA7A7D97044CD5A2BE415D287BEC1 /* Time.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 77708024733DF3B64F127AB9D0E5C5EA /* RSTPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 03792829FDEFEBCD237AD95762EF484D /* RSTPlaceholderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7793407AABB80F7FF59D7C5516D14FD9 /* ExtensibleEnums.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD01747A1D135D8C97DBC34B3BADEEA8 /* ExtensibleEnums.swift */; }; + 77A85C92FFB254C86D986447BE4A3853 /* glsl_CombinerProgramBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD521670C6D7CBA41733C054C293541C /* glsl_CombinerProgramBuilder.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7818851D20DA2D669A8C12B16316D10E /* NstBoardBmcVt5201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 62945616EBEA8F7DB40A59C37964637B /* NstBoardBmcVt5201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7836A137F2D211F1D9314D9FE4EA0D66 /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C24A38D0B2D424939FBE8FE393A00C /* FrameBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 784A5769DDE6CB551D21EE19FDBE91B9 /* GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F843099C865EF969075D9084E1EE49 /* GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 78560D7AC30CADA128CED2F38DB0C367 /* NstPatcherIps.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0F88A26F6B6CF0CB98D87C013543A190 /* NstPatcherIps.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7868B35569F0B0197EF1FFD2D25B1BA6 /* m64282fp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8326EAB88C81EB3273CE84BFBE30C290 /* m64282fp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7876D3F7521DB44C406A743CF81BEB47 /* NativeActivity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48A852C211E587038DA4AA46F7C9B164 /* NativeActivity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 788B83D78AB9E0EFF886B1FEB9295554 /* obc1.h in Headers */ = {isa = PBXBuildFile; fileRef = D6CAAD3D41D505A55D4926BAF41AF958 /* obc1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 788E19683756F921D267319C0BC8D9D4 /* EEprom.h in Headers */ = {isa = PBXBuildFile; fileRef = 63BABDED98CDB1DC811FC1832968CE5D /* EEprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 78E24F2CE9FB7845AE6DEEC34E9D9366 /* opengl_GLInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E464A7D70176B62BFF57B34C448A9023 /* opengl_GLInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79168BEC654655F20E8D99687F8B42CD /* NstBoardBtlSmb2a.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 32C312AFD3D5355E34E5264A0D924E24 /* NstBoardBtlSmb2a.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 791ECC26E09854BE01A5356B8FB4FBFF /* skipsched.h in Headers */ = {isa = PBXBuildFile; fileRef = F590A4FDC0A63C530D1734FD50B7078E /* skipsched.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79213C390062FF156D05A120E12D7F28 /* MemoryStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = EB9627220FFF83CC1F4AAE5DCC667ADD /* MemoryStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79CB4C69D5B62C1F128632103768629D /* Listener.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 416AB7C47B6BD20BDB570AFCF32DA07F /* Listener.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 79D1DBF8A2B975AA6502E3E0E19627B4 /* NstBoardBmc110in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C4DEF759B31F98EC3A0C7C1538495611 /* NstBoardBmc110in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A05BDF6F0EF1F8EF35BD85D32DA9A84 /* RSTLaunchViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BFEAD74D75F957AC8D29DA74DAD189C /* RSTLaunchViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A2438E3C2548E6C6B9046875E06F5DF /* TxCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11C5EB86C8B5D063931113BD696A449D /* TxCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A4B501942CA119ADB0CC7E54FC735B5 /* RSTCellContentCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 45E7411B04ED1D693EAE8865EB4AB4A8 /* RSTCellContentCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A4F11E768C0C86EA95B2AB424A4377B /* OGLRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 2470D300240FF936891A6DA2EBE0164B /* OGLRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A7260BF99BC683C9C43C76B8D20DE57 /* NstBoardBmc21in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA1B820118906800A592F7AEC27C0DFF /* NstBoardBmc21in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AA70F0483FB790115C42CE9CF815B99 /* game_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 66403032D229EFE419B1F624D8E3A6AE /* game_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AABDCDC1FB95E91C935F89E00FA89DC /* arm_jit.h in Headers */ = {isa = PBXBuildFile; fileRef = 0798506C053FB81EBDF4F4EF5E7C226A /* arm_jit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AB3BF79F79BAFF5769C3A3CCC19AD47 /* Shape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAE71BC8FD40F93BEB90C2ED42088A99 /* Shape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AC069D617A084BEDA70B1D9B89F6470 /* NstVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95CD1D48C38E182BA0C36253C2422B8A /* NstVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AEC6E1A5BB3B489183A23AD3AB8D7AE /* FilterChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3919DEC2EE937226ECE6A9846B2DA0D4 /* FilterChain.swift */; }; + 7AED12329BC4A94E43D7FA7FFFA4A8A2 /* Ext_TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = FC1899B3A2064A321C87961972F926A9 /* Ext_TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AFA40D6E7662FCB31023984FC8A5540 /* NstBoardUnlKingOfFighters96.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0DEC322B85B93540CD7F53F2185164D6 /* NstBoardUnlKingOfFighters96.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B291FDF52E0F7FB64A9FA0C4A88E848 /* TextureFilters_lq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = F832E6227B7F9677B7AF38BFB58A5A09 /* TextureFilters_lq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B594E7B42D038F5C9EAB636CDDCAEBE /* NstBoardRcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5F38047E1651287DC3AA705DF9C06C72 /* NstBoardRcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B7E2677824409DA731B3FAD16DF422A /* TxHiResCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 98429553652599A6220233E3F8D224FD /* TxHiResCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7BD0C0DD3F3DB5369846E07F7FA5B186 /* NstBoardBandaiLz93d50ex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C44BBA15DF8CEE92A417577E4C1D5D9 /* NstBoardBandaiLz93d50ex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C127E067D6F3B7F1C96AB3813393B8B /* assem_arm.h in Headers */ = {isa = PBXBuildFile; fileRef = BF609625DC6D6DCA4E18292A7309D441 /* assem_arm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C223CCCA8FDA2AFC24233CF2C80D507 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 61922816ADB3E7C4600DF77D3B382727 /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C3B24BE5F539E4C169AD6B54E548B18 /* ftadvanc.h in Headers */ = {isa = PBXBuildFile; fileRef = EBCC2D85473B037A5DD49F1E35B5D218 /* ftadvanc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C44081096D7BD7EC16DEF322D7DC5E4 /* DropboxService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E644A28566DC640498573CF1E665C045 /* DropboxService.swift */; }; + 7C6C12C8C35F1D6A2B00AF837C71404C /* readpng.h in Headers */ = {isa = PBXBuildFile; fileRef = 04E947092A258CFB57EB84AFAB619A18 /* readpng.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C81CF6208DCFD04CA626E3E81DBD14F /* UISpringTimingParameters+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E669C711147F6173C46040444135A2D /* UISpringTimingParameters+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C85EFFC4862D5DD572D67FB0D67A8DE /* NstTracker.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DCBEFF02673A4D0CD9185C6100D7E963 /* NstTracker.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C8F536BB5772737F608061B0FE4C7B3 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = A5549F772937B547424E53A87C4959B4 /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CC39EEEBA01397C44CD70FF1D855E9B /* svpscmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 6871DA21F2195F33706882F64D12E1D8 /* svpscmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CC91E5E71DC76D48A82BC591ABA6C87 /* NstBoardBmc31in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73006DC6C1509BB82F83AC8D88F0481E /* NstBoardBmc31in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D13C492B14BA0EB2DC0783DB4150ED4 /* L3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 29ABF3EFA4F58F7434261260A0FCC2A5 /* L3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D3F6F6AF8ED6A7D7EC99CD1C094A779 /* TxQuantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E413CD260AC5D4938501D07A19728DF /* TxQuantize.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D42DA555697670FC84BBAB5492696FA /* pcap.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E0F32F5D4B36915598F0AD7BB83F6A3 /* pcap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D6640DB587F29263DFD54F344B9AE8B /* NstCartridgeInes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16EC811CB549CE7395A41A2FD9C4BE80 /* NstCartridgeInes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D9D60386306B439551BB071CA066817 /* DropboxTeamClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8364432B8E72D0344D921A2164F73693 /* DropboxTeamClient.swift */; }; + 7D9FFE5C38B92C9509830FA62BDCF8E8 /* cp0.h in Headers */ = {isa = PBXBuildFile; fileRef = D4AAED9CBF41BDAFF1EE1D4E400FDF87 /* cp0.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7DB35723D0CC13AE137CAE668924723F /* BitmapProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7AB9F8A6F41A6BF238E1816BF6ADAE9 /* BitmapProcessor.swift */; }; + 7DE7708815D0EA629D5716B9F1A6809E /* Thread.inl in Headers */ = {isa = PBXBuildFile; fileRef = AF9B8513D3E4438D5136203FCF9D99E5 /* Thread.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 7DFAE2171F7DF71CBFDAAB36126503A5 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9E8347629FB94F0A3A23F8ACE7DF87 /* Team.swift */; }; + 7E22B821DD9D7D2D539E9F0C66C15013 /* ftlzw.h in Headers */ = {isa = PBXBuildFile; fileRef = 89308C156B65EB233E0F8E7B01291775 /* ftlzw.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E2636950C8A8517A78941A3FC7A214B /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = B2535F7B0EEFF2878AFFC407BE7821EC /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E27C0AA8C72EE528649523D6A240305 /* NstRam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DFFBD37FBE84B1A972546ABBEE2067BF /* NstRam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E5EB7A39652E32E3CA0F3D93856E2EC /* ConflictRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73B5114410208E3603B7C257E4448663 /* ConflictRecordsOperation.swift */; }; + 7F01651585FCAE415EBDFC808DDFB5F7 /* TextureFilters_2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32CD48452BE99C82FE043939384E2531 /* TextureFilters_2xsai.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7F184462B0587A9FA3F4976A6E306DBD /* Parameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 1968B2F2911EF5F0444088854F57F746 /* Parameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F3CDB6BD153FE92FC5A758E12830D3B /* NstIoMap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E2A4BC7BE1DB4773E50DD8B7E967C51D /* NstIoMap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F6E6984730D00B2BAB26E09C2B6F51E /* GTLRFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ABB33F6C316C0D9CF3E24882D926C51 /* GTLRFramework.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F6EF2CA1770F1DE0026ECAA0E521101 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D467F2C39B4E1301A6A2824147175DE /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F8FA5EECEFA49B54B06466750976AF8 /* NstBoardBmcGolden190in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9CBFEF3D09E24FAC21E3A14CCC923AF /* NstBoardBmcGolden190in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FAE093FA0A7715EE8D0C26E07586588 /* NstTrackerRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 09BF210597386722D5D7051B20C7BE0A /* NstTrackerRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FBC6E3BDC4800C426640309DF2CBEE2 /* UICollectionView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 790495A40D459F66C420A40CFAFB042D /* UICollectionView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7FBEC1C86E145CE63217FB4A282FCF85 /* svxf86nm.h in Headers */ = {isa = PBXBuildFile; fileRef = 25FCB0ABC4939495F4D8023884606D3C /* svxf86nm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FD577E22B1E9D0B660E3F5F0945EC97 /* GoogleAPIClientForREST-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C943FB0B36A40A6ED1622A947B642B5 /* GoogleAPIClientForREST-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8041BC3728BD95C119B6B152758FF890 /* NstApi.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCE1167568421B515DDBA963CC2FD777 /* NstApi.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8043A7E0B334D03CF18AF57B63B8B407 /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848F3AD32B7A8F7F08945CA3643BE446 /* CoreFunctions.swift */; }; + 80490FACDFDD5058FE342448A90F6124 /* F3DBETA.h in Headers */ = {isa = PBXBuildFile; fileRef = A471F1FD870B327EA215A186F1B4B401 /* F3DBETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80531DF27FAEB5E6120BDDD6681434C2 /* NstBoardTengen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B770765D40D57151EF4C7C13D2101E87 /* NstBoardTengen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 80569522185880531BB8F1FD08C52940 /* rumble_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CAA385DC1EC815011FECBC1CD5ADF32 /* rumble_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 805A1E28389AF5FB29FC09BE6C8B1F0A /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD9C5507CE8EEB9255EC26821F186A30 /* Account.swift */; }; + 80857C1D971EB5C3A2DEB08EBB6A26A9 /* flashram.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BFECFA92DE1F1B2ECD7449CA0DE9389 /* flashram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 809CC541557F42747F35E56C4A8BA2E2 /* NstBoardNxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 27DF122CB5EB6951E6B147BC0F24D64E /* NstBoardNxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 80C3AE20C10237C9D0BEE1E040703645 /* FIFO.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CCF50735B54E7E32704485AE919ABB5 /* FIFO.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80CD4343EDC4946D43FB62BCE1E7D8FC /* tima.h in Headers */ = {isa = PBXBuildFile; fileRef = 60925EDCF9318CAB1FA3938859111AE0 /* tima.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80D63236D264DBFE454A62486C2EF1DF /* Glsl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3BBF510C2B0603EAC41E2079FEFC6A95 /* Glsl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 80E2A90DF2C7F5D8D36F4A37F0F6CE03 /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = 31C2319F7A8D58BEC41843BD13637729 /* pngread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 813791FFAE99F2EA31D525DCF0B0DACC /* Performance.h in Headers */ = {isa = PBXBuildFile; fileRef = AF84C91D866F235841A37FBDD3F32FDC /* Performance.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 815861D1FCD25665B078C7ED9E6D2A6A /* NstBoardBenshengBs5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 355A8C024A46DB2BE1763B0F3971FFEB /* NstBoardBenshengBs5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8171418ED78BE2744E4E374105338AEF /* NstBoardTxc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CB811B30D58FF4024455D5E5CC17947B /* NstBoardTxc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 81C902564DEED03987D81EB5EC4E2C21 /* F3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C26E214699339AAE80215F482F9BF /* F3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8229184EC4951470007A0AF03871F122 /* pngmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 06B3B77EA189E0778856F0A800AD3B73 /* pngmem.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 822C8AF6FE4E429A7E3DDE28BF009AAB /* NstBoardTaitoX1005.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B71756B40C4BB780F974D844D1D446CB /* NstBoardTaitoX1005.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8245550C4876E05DB7BB650B1FB1A8B0 /* TextureFilters_xbrz.h in Headers */ = {isa = PBXBuildFile; fileRef = 452F83D3A133C01B2A14268F26D6EB29 /* TextureFilters_xbrz.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82665248F8E77B7253C5F018E0B1DC5F /* NstStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 21B08C108927AB621B0EB7F908CDC81C /* NstStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 826BE1A486465868CED022ED981B0BEC /* UIAlertAction+Actions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DDDB2DB5582729DFD3B142A0841B180 /* UIAlertAction+Actions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82BA8911072FAC8A89CE76596ECECAED /* pif.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C032B7F3EF8BBC968A5EB242CD96FDF /* pif.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82BD5D188A75988826E7379FEB58DCDE /* NstBoardIremLrog017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0760F68BF4270075015FF0EF76C307A4 /* NstBoardIremLrog017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 82E1A8D140FD2E1A30BC5F8F4B19F8BF /* SwiftyDropbox-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1549464F3E4C6E80951115BA80C87C /* SwiftyDropbox-dummy.m */; }; + 8306FBE58766AD3DB7FC24A48C822C5E /* ftmodapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A63610BE12A6654FC18CCA215237F733 /* ftmodapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 830F5B7567E178151EC0E882FA0ECB5A /* hermite_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = E303B73D343B4496C9C1319F3E187317 /* hermite_resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8310901E730FB822677EDAAF25893BE6 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D49431EEA4AD3FC2E04F7F24D666EA6 /* DispatchQueue+Alamofire.swift */; }; + 83241BC0C8359ABCBDE971CD11FFE9DD /* mupen64plus.ini in Resources */ = {isa = PBXBuildFile; fileRef = DFD30F6DE5762FE7D5CEA0AFE95ACACB /* mupen64plus.ini */; }; + 83569BB6A8281FBF8632670B28C33C98 /* mbc3_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = 89AD69668AA33B36799179839B4578DB /* mbc3_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8386BA8A923E2E72C8229BF7CF7C20FA /* cheats.h in Headers */ = {isa = PBXBuildFile; fileRef = 17878ECFAC417AC4ABE2928837CDE2B3 /* cheats.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8396AC5DE2BB1D261F147086BBBEE743 /* GBI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 482F462D88C4B5F90023E215B10AD635 /* GBI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 83A09D122123E6C2815459DADEF9729F /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = 883B872956FB7C28FDBB574888357A62 /* GTMNSString+URLArguments.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 840C6DD7629F231D0F45DD20C031A6FC /* glcorearb.h in Headers */ = {isa = PBXBuildFile; fileRef = 9678A9FCA9931D354FE7CC755CB6541F /* glcorearb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 840DC676DBE4407A3E68353CEF3B3BCB /* NstBoardWaixingZs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 303639D060EE4ABC8F9B28FD68B7F98C /* NstBoardWaixingZs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 842560FEB95F73A3E10F716061E361A6 /* ftsynth.h in Headers */ = {isa = PBXBuildFile; fileRef = DE2D5223B53CBDDEEFCC21BFCF9AB205 /* ftsynth.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8433AA2398A8DBAAF7B367AEF3C636C0 /* UserDefaults+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65B9EE37937D4417CCF0576098C38148 /* UserDefaults+Harmony.swift */; }; + 8434E5B141D1791B363651A182CA1B5E /* RSTCellContentDataSource_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 10F4B87C9C8B821D0D8D4EF510CA04D7 /* RSTCellContentDataSource_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 845473EEBCE88EFF348390D4C70EDA4E /* NstBoardBandaiKaraokeStudio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 55D03E3855F24EC46248235CA4AB84AE /* NstBoardBandaiKaraokeStudio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8457755D991B9AC856F2AD154BCF4A34 /* TeamCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 244DCF4A8FC46E79A6101C49202C0DBD /* TeamCommon.swift */; }; + 846C1F6DB0F553F276ECB598E7A84AF8 /* RSTSearchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 03655DDFBA2609D8DEA72FDDF988AD58 /* RSTSearchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8477A8F693A9336DD44C78F069BAC322 /* RSTNibView.m in Sources */ = {isa = PBXBuildFile; fileRef = B02A3AF52CA1E696B30BDE9A844D4D97 /* RSTNibView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8486CE333AF98530F574C3B55DC565D8 /* TouchInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D2FEA2156756F729E3BD6869EBAA42E /* TouchInputView.swift */; }; + 85168B84D1BC8AC3215522F298FB08B9 /* opengl_GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 50FBE486AFEBB34A067A593F41720663 /* opengl_GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 85290514199956D820FB90C92DBD0002 /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B7A2F207266496310F9415852A1EBD7 /* Collation.swift */; }; + 853712F7ADE0542EB49AB2971C13F4EF /* RSTArrayDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 50CB5AEC945198AAFCB4B3596F9CC624 /* RSTArrayDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 853B3CB7F2FCF1BEC65857D83C521D64 /* m64p_vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CCF7001F83E60B5C530A3D02B918FE9 /* m64p_vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 857B3B04B9AB4B94CC5BB714EACC9290 /* RSTCellContentChangeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF77E5F8A0CCA93C17ABAB60C658334 /* RSTCellContentChangeOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 85CCCE40DF1323C9A271D20D29AD279F /* ClipPolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B549F21788F17AE386F9C9F83BACC06 /* ClipPolygon.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 85D1D258236F9752FEFC767F65EEB5EC /* statemanager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E9E01B822B1A73A97B8C2E46EDEF08A /* statemanager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 860AC74038BF3ED5C0549CBE407D8710 /* snes9x.h in Headers */ = {isa = PBXBuildFile; fileRef = AF827FC48147DE18B9FB7A80EA33C3FD /* snes9x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86248453B902ACEF5B80A6573B49E002 /* spc7110emu.h in Headers */ = {isa = PBXBuildFile; fileRef = 2773A5A159F5DFA0A928E49F68CC6E2D /* spc7110emu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 863BE8D5FDEE2E01FB3BEEE491392492 /* NstVideoFilterNtsc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B7229404AFA84F6E9DB4337E6CCCFD47 /* NstVideoFilterNtsc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 86518CFE08809DFF384BF8C39CD7D1F1 /* Main.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83D5EF55975A2BFBB9FF14D9389BFBB6 /* Main.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 867358F09BCD4400D1CA1EE0BA100FB8 /* NstBoardKayPandaPrince.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0BE607429888D1CA21C1751ECA041494 /* NstBoardKayPandaPrince.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8680F8EF0BBCDBEEE5A53366BB0E471A /* svmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 22E35E02382F4B1E5D0995608B8BCCB7 /* svmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8681FBFF0D1EDDB882F392AE4E41A6F1 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA7EC2EE415DCFBE44F9DBD4F92DB34E /* Archive.swift */; }; + 86B1481F42CED72563EF3D695ED06174 /* NstCore.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AE5CA9C3251B37CB412B002F2B18CD26 /* NstCore.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 86C51CEFFE9BBEB96F4AB6BFE68CF66F /* NstPatcher.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4F5BF7EF7AAE901FB3EF08FEB9603AEE /* NstPatcher.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 86CD84B7CB8FEBF8D8D1A612608F9A59 /* Roxas-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7112AF9DF88E284F7F0D82E3379A2B7D /* Roxas-dummy.m */; }; + 86F7500498987E83E102E0A54716CFDE /* opengl_Attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 469D6302B5E25E6593C1E213ED0B446A /* opengl_Attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8715A171D63746B26EFEB4E6A617D39D /* WindowHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 593CF251B99826ECC39AE11BE6568BFF /* WindowHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8734FEEFA6AB0AADF18FC751440B6BB0 /* SoundFileFactory.inl in Headers */ = {isa = PBXBuildFile; fileRef = 8A624FFF16B311D8F1A19BE7C8EC0DAE /* SoundFileFactory.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 877E7F8058EB4C948ACEBBD1A9285067 /* sa1.h in Headers */ = {isa = PBXBuildFile; fileRef = B0652246947AE2743F7B21B7464BAB5E /* sa1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8794B9E7B8EB7EC0B49CE452CF778FC1 /* re2.c in Sources */ = {isa = PBXBuildFile; fileRef = 2A7484DF86BAC6712F444A8FFBF23277 /* re2.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 87B6A15FF7D44269D8790FCF8C5CF865 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = E43D760A416FD46145902A92E018E58F /* SDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 87FA058DD97C42DA27925CAD2E938C2C /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5246923E4069138B8F38B3EF8C4EE4D /* Users.swift */; }; + 87FFB6022D77762DFF612FCA46DADA4A /* NstBoardBmcSuperBig7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 241D65B94A34B15AB354A6901D592045 /* NstBoardBmcSuperBig7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 880A3366BA936A92BBD568462B09612F /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76762292E978FDAACA63D856A9CD4F5F /* Async.swift */; }; + 8822BE90BB2456E06F40F8E1A71F45C1 /* NstBoardCne.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1C0F31C6E082D6432390150C57691513 /* NstBoardCne.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 882DCF4B991615D8A07BC2EF7E84A5FC /* TxFilterExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A0CC765A71526F79EBBC52C4FF79559D /* TxFilterExport.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7DB030D93B94677288CC4FB4807455C3 /* Export.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 886A18799553A19E810D2F7D688A4126 /* N64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D30A1BC3FBD53F3033F0C28438BE7BD0 /* N64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 886D71BD1595A610E2D69A83AE6A70AE /* Input.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D27110A6DD067C15FC032BAF9BEE99E /* Input.swift */; }; + 8876A72AAE903A9038ECE97EB584FF67 /* dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = 76098B9B168291C93114F349AF883D6F /* dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 88BABCA3D1E4F2390E0378A2B5228631 /* NstBoardDiscrete.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B2CBDD74EE4025870C9ACEC038645C28 /* NstBoardDiscrete.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 88D0FB6855DF889BF0C5BE417F016C3E /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 0402C21751DF9B30592DAA2E4DEAB0A6 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8902DF0908579FE08E35AD6DD47CBC77 /* NstBoardBmcVrc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 77369FE791F1E575CF67D2E88660AB54 /* NstBoardBmcVrc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8912B1F9BD9142C96BE6E0B401AC9C40 /* NstBoardNRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E70A7D8AB9B5D506BDFCB3A14DE9ACD8 /* NstBoardNRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 89163481E7F96A33F9E183759BD7D51D /* DebugDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46026D348B650E6C7D5C37EC52B80A8F /* DebugDump.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 892EF00353110A3E726F1D521FE0F452 /* WindowStyle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FEF7570E80D78FE6F43CCD5722434683 /* WindowStyle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8957E0BA7E9FF05452AE65211EFCD859 /* NstApiConfig.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B9A1298C2392965F68B9AE60DBE0B247 /* NstApiConfig.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 897E17C6F6C366137126E12E5EDC926A /* NSBundle+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = BB54FA85A4EFEF73DED9795E55139B78 /* NSBundle+Extensions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89BAB96483B0B0EEDE12680A875F57A7 /* Time.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6339330C707D1D8177B1FCDB213946EB /* Time.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 89C3FEC2C51AC7DFCCAB05615111CD6D /* NstCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9D3400B3B03C1E9DC1A3F7B5E3EB7B4A /* NstCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 89F637B6A72C84461E7E5E6395896B4B /* GTMReadMonitorInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D501AB9335B46D77142394E47A29319A /* GTMReadMonitorInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89FEB422E33FEDC7C1C20B9D953193F4 /* conffile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD922BCE2DF46F11E7202475E037EF6 /* conffile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89FF6BA500EA4247A328E6A82D4B4065 /* N64EmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0C4019F40D94124274D599DD260980 /* N64EmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A2C15A083A63FC24761FE568CD44915 /* insertion_sort.h in Headers */ = {isa = PBXBuildFile; fileRef = 26DDDA2E6D5D939969B8FDD448F57499 /* insertion_sort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A5CB6F7F72B063E995EC0B2C2AF52E5 /* opengl_BufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E7C1D17194F0A8C85CD8A755AC2B8670 /* opengl_BufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8A6D9CDABBDF499C01CC1189E80A9D9F /* NstBoardUnlMortalKombat2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 770AA55D81A4A9A0174FC18A4DB7DC41 /* NstBoardUnlMortalKombat2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AAC1B35CF4637F59F66E00C58F04177 /* ftmm.h in Headers */ = {isa = PBXBuildFile; fileRef = F94939473F3DAB308B9B66A4722AEA61 /* ftmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AD3B7AB59719794E86F41BA43AA9BB7 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C71C064E0F8E2D6A2B6E0CB4849BFC5B /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AD7ED3262070702EA2D7772A7576F70 /* RSTCollectionViewGridLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 337EA8CD424B4FAA1210613EA7BEE5FF /* RSTCollectionViewGridLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8AF999E503CB06FBD4EEA0903D672F5A /* Textures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99EC0BF92D7121A56829D9702EB42CAE /* Textures.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8B3242772776AB021A4F1971280E29A3 /* NstInpDevice.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3082C32F34B1C6E7F0F4DC785F328B7E /* NstInpDevice.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8B66EA933E91DB3C1A2F60A1E6839556 /* Graphics.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EDF739733FCF6284240B795ECD2EFFB3 /* Graphics.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8B9F702DA0D9696A233593D88691564B /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 696FB5C2FDDB6402D85459020872DE22 /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BC24B9D0B902A90526475618DFEB023 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92238392EDEE95FD2FBE52D9471C5264 /* Version.swift */; }; + 8BD82471835BF88ECAF163D6FCA9A762 /* RSTCellContentChange.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C98EC2B9B01038DDBDF79833E8FA12 /* RSTCellContentChange.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BE90823E820E693FF7804C8FF1F62E1 /* TextureFilters.h in Headers */ = {isa = PBXBuildFile; fileRef = F01F27F2E59C49CFECBCF50045F0021C /* TextureFilters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C24EE5BC4C18A93BCC1C9AE6FAC8F7F /* ftcache.h in Headers */ = {isa = PBXBuildFile; fileRef = C8A78AF718D2553FAE9A19AC2F865BA3 /* ftcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C3F0D16D8ECCB7869ABCC3F8F3969B3 /* NstInpBandaiHyperShot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C6513BE3B8C4EE62832D30F3B73EE32 /* NstInpBandaiHyperShot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C6E70C9C229A2E14969674B13510C6C /* rhash.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7206B56B9ED9A2B4822DC503DF31D7 /* rhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CD64FD841EA7CD073DB1D91F67E5F83 /* NstBoardCony.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 60E307E020BBFAC21769EFBA79153CCD /* NstBoardCony.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D16050EF95747AAFACD9E5B43C71181 /* N64Types.h in Headers */ = {isa = PBXBuildFile; fileRef = B47C40F3651700B51A70D5B9000D2FD3 /* N64Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D2017BE0B60704C8CB8E34DE6093D3A /* NstBoardSunsoftDcs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 90DE8F7A964963C67D9A493018E6E24C /* NstBoardSunsoftDcs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D7002BA4BF48E276D34405B85D636DC /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D72CEA77A8089188A57FDD92DB3E21 /* AFError.swift */; }; + 8D83B5DF22CE26FF06D3084540F77E1B /* cp15.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BF45B3F1647C84F90A4C140F217F89D /* cp15.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8DA6413B75C737288165A6B7CAD2820A /* NstBoardSunsoft.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F774B85B1C91BBD1B28A7FDAEE5812F6 /* NstBoardSunsoft.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8DB3CACE9224D13C1BD3C176BC5427D1 /* NstSha1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 03724046BA5C3704C4607F3025370078 /* NstSha1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8DD51BE5C43C2B1D3E7A605D95C974C6 /* L3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9ABF020B63EDEC52E2B78074AFB454B1 /* L3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8E8094562D01EDB93C41846A50926BD5 /* OutputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6E03BC1605808403D83828FBCFBE7F28 /* OutputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8EA421026DD522744405C37C9DFD1AC2 /* NstApiNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DBE05472ED5AAEBB0CA13B43E5496F2F /* NstApiNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8ECBE7000B4A9F6E088C74D397024BA2 /* BlendMode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AF38F08C7B6C05C9E6E483C522CB166A /* BlendMode.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F682A984C8CB6F8AF671756445C613B /* memgzio.h in Headers */ = {isa = PBXBuildFile; fileRef = 867A52819D0036A2C45DFD094D11F381 /* memgzio.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F6BB90B38CCD6C919AB656FB5EC04C3 /* Performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB2E42B839949FC64A2002C5BF39CD4D /* Performance.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8F9E3145DED94EC48DF53CBDD6F6D9D2 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED22F3BA7E83E1DC36113EFA2D24588C /* FileManager+ZIP.swift */; }; + 8FBE42C6E7A4A5028537D4734CCCEB5E /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E72A33A7110D63CBC89C70E51F608C9 /* SDL_thread.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8FBEAF2C349397639534DA6996F1794A /* ZilmarGFX_1_3.h in Headers */ = {isa = PBXBuildFile; fileRef = C1D6EFEC4C64645B1CD5E8A6C7E9C97F /* ZilmarGFX_1_3.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 90217BC322211710F6A8909DC9CB2E59 /* NstBoardBtlSmb2b.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EC65A0F4796E627B80569AAB463DCD61 /* NstBoardBtlSmb2b.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 903A61727B196C0BF6AD7D55E406829E /* View.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B8982524E4ACBEBF47DD97748097DE96 /* View.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 90761841E15818195AE0E6F9C6B1F2A3 /* GTLRDriveQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 5117CC789D8C47E9B0F2888AB14F3E74 /* GTLRDriveQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 90A332D78357408A4893241BAA3FCEF7 /* NstApiTapeRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E2407FBC4681D02CEDB01BEEC0AC171 /* NstApiTapeRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 90C74CB62F0300013754489565EA44ED /* NstInpTurboFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CA84B8D0950FD10163E23797CEABFE2C /* NstInpTurboFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 90D2435B8A05AD9EA89B333FD06A470E /* NstBoardTaito.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 51A794B9A074BF2025C358E236D42F05 /* NstBoardTaito.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 912EEA493E0A08FC711CF6864C3DB36F /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DC45D7DB5CFA98660E39905809A298A /* Auth.swift */; }; + 9169B8668918831122A0CD580F6972E3 /* NstBoardSunsoft1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 02C1BEECEC397F5E91934D66DFFF7686 /* NstBoardSunsoft1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9174937A3251A2ACDEEB1E350B983F7F /* NstBoardBmc150in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4277D9CD49D8F32314F512361BE4B690 /* NstBoardBmc150in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 920D6388A019BAE183B76F28E00899AB /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 72224C07100B6D8A8371BBAC83840304 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 921C1F239586B4E7118399375F45BAB5 /* DateAndTimeFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736E24DAB59401834EC1B3DBAEF4EEF6 /* DateAndTimeFunctions.swift */; }; + 922B6EFC5C130149705BC82D0BB9D57D /* GTLRBatchResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B555E9059530B6964B3908B22140C42 /* GTLRBatchResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9247277F4A5BF7A33FD393DED9BF677E /* svotval.h in Headers */ = {isa = PBXBuildFile; fileRef = F97F1DFA4F57F5E203007254CF9BE0A9 /* svotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 926C22B256A40C76B6C8FBDCC7D1900E /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = 6A36744D626ECD3743CA4F297A98EA19 /* memory.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 928393A965417058371B8D82CF1F8173 /* txWidestringWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = DC46D472713AEC4054D4A5794AAC802C /* txWidestringWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92A4B9F5C0254706401940A8171D746A /* NstBoardTxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0558C6E8EE1D9B61043E335254B75955 /* NstBoardTxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 92A942CE7F29E460BB7E6C1564923F70 /* path.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C685CAEC8DE104E2770BA81F4B87316 /* path.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92F8229DBD6462B1D86671903966D443 /* libretro.h in Headers */ = {isa = PBXBuildFile; fileRef = 91D82360E170EAD9A1C2BFF9FB3ACF33 /* libretro.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93049C2EA7F1F12ECE2A989EC457904D /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = 75BC588551AB21D7B8D2F7CEC5387DE8 /* png.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9306DF595EB74F925D40BC8F70C11F7E /* statesaver.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD3541718061A90921DC7BAA43765B2 /* statesaver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93180A48A4201719F7F9CFDBB8B86D4F /* arm_cpu_features.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FD22484CAFD9D6D7EDB3732DE4A047D /* arm_cpu_features.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 931A0C0A7D091176AFB87B18C0F7B40B /* TextureFilters_hq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B0ECFFCE6A9F6387533730061A1A7A /* TextureFilters_hq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 932FE517D424EB24ECA60FCF308A7F5E /* expr.cpp.h in Headers */ = {isa = PBXBuildFile; fileRef = B7D405FFFFAD99E717267886418DECCE /* expr.cpp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93353F0A21F136C22AD7F0B6183B5952 /* Bundle+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = E296E015D17F062AF04EB6010FF3D61E /* Bundle+Resources.swift */; }; + 93A9497637F202D29E0EC51208B725A8 /* RectangleShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 398E01AED7FF75385A50FDC67155A9A0 /* RectangleShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 93AB3DCEF6FAB25507A0D57EB46F15D6 /* Utf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 187D4D612762D2AF1FECAFF87EFEA7CA /* Utf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 93E2A69BE77D64F60D12257FF81954F4 /* RSP_LoadMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB26B910FF9586D0BBEEF8B7B3FCC55A /* RSP_LoadMatrix.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 93E4A8D744F5FA2F32485D5992491BA5 /* m64p_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 260430D1061CEEA26EE73673BC86F350 /* m64p_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93ECEC40EB5571AC01CDB1C56EE6AFBA /* pixform.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D90CE2D6B95B2AA99812247EC3691B /* pixform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 940ECFA7ED45FC491E7E3BA8526B7C2B /* ftglyph.h in Headers */ = {isa = PBXBuildFile; fileRef = 75CC5A3EB0061070CE3340A72D9B1240 /* ftglyph.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 94209528F5A3C88236DE5DC50BAD5D7F /* ThreadLocal.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F586E6135CA6E3F0C67A2EAE0344D88F /* ThreadLocal.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 943577E181B1B6706D2107ECD728B015 /* DownloadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDC4E9BA921F71C2DE81D711D002178 /* DownloadRecordOperation.swift */; }; + 943A7FEF7443174C9AC78E67A5868A92 /* NstBoardFukutake.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 72EF249EE7E9290384CEF4D02C6444B0 /* NstBoardFukutake.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9463C53B6DDD72C64400E314D9AAB04A /* plugin_delta.c in Sources */ = {isa = PBXBuildFile; fileRef = FA255603CDB62A95F35F477E2F0D208F /* plugin_delta.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 94868DBC2F7CB341ECBBDC311392ABC9 /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = FE62BC22E0353D209B86497B9841EB46 /* System.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 94BCC7749EDC3ADB6EB5811CA50D58F7 /* FileRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA07C9DEC9FD13724174A7D6794AD7B /* FileRequests.swift */; }; + 94CDC16CABC912819C497850CE4F1489 /* NstBoardKonamiVrc7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3E46BEA7461AFEDDCEC478DB8D3425C3 /* NstBoardKonamiVrc7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 94D28595353D013C0530A91A7AA81FCF /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C998AB9300BCC4AD6368CB1FA675F29 /* Query.swift */; }; + 94D28819338E33AFF9EDDFB94DE0E526 /* NstVideoRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3B6CCD65AA48EE2EC4FE44F3D0C21376 /* NstVideoRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 95023508CFDE2C9943D4E510526A14A3 /* S2DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C581DB34643779E6E697D493C316D48 /* S2DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 953B0BA08374FEB6F8BA47C9EE30878C /* SMClassicCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B5A75174DE7C7B4A535B3A42D6239C /* SMClassicCalloutView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9543AAF856988A714C41706FF2A5AEAC /* svttglyf.h in Headers */ = {isa = PBXBuildFile; fileRef = 440D7ACB57B622DFF74C66B788D3B238 /* svttglyf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 95927DE3B446FB2A897EEE03A3B0E292 /* ObjectHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C1AEA30A7ED0128954BF3C163D0526F /* ObjectHandle.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 95BD2BAD38E37D6E2B67EDF5344BA723 /* NstInpHoriTrack.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6259A047C58B19EAEDC1BA8DC19B918E /* NstInpHoriTrack.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 95C86E907FED4E215620A31FA5CAFD42 /* DropboxClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5456371B4D7DC880854562F4F53807C1 /* DropboxClient.swift */; }; + 95EF975803B95C02EE458E32DB43C1D2 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = D26E750E5A5772E0667870225E0F7C1B /* port.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96009988E1AD37AD3F245D803DC0ACE7 /* CharacterSet+Hexadecimals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D0235C98A504B6ACCDF616BA0368556 /* CharacterSet+Hexadecimals.swift */; }; + 9603A4274C8A74E47EDE5C96E6F3A289 /* NstBoardMxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 627617EFA316732258422811C97719BF /* NstBoardMxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9614CDE379DB3C8A330397F9BE0AEE69 /* Sprite.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C90C25C12E9E9489A474A496C47B38AF /* Sprite.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9631EB3716707DF75A79D5497DF4392C /* dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = FF46137EDAAC9DD905A8E9D0602099DB /* dsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 964DD3973B1820BDFFCA6F92B9C9705B /* NstSoundRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8B0132D8F45B4B5666CBF5652A345F0F /* NstSoundRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 967B79C9BBE288D04AE77C7D95A294F1 /* ftbbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D93A1FA4EBA67EA2A7C3149D8776FF0 /* ftbbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 968CD734D31C79FB896F2B5840E81816 /* sRGB.h in Headers */ = {isa = PBXBuildFile; fileRef = CF6CFBF5D3D08E7081D6FE7FC32A40AE /* sRGB.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96A155D5BB7094AC0D4DB6C7CBDEA3DB /* NstInpSuborKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B2B24BB63436EBA04A7F12707D9B8161 /* NstInpSuborKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 96C74431D5A2F68C56AB62BBF1A75D35 /* NstBoardBmcSuper24in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FDD8C2628C20169F27F847F6618B2626 /* NstBoardBmcSuper24in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 96D4E9BF589FAEAAE225B88A6CC68214 /* DepthBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4983F070F9A339A50561C5253106964 /* DepthBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 96E84431E12BB8ADA8E145AAC1ADFB66 /* fxp.h in Headers */ = {isa = PBXBuildFile; fileRef = 9264D4DA6A66BA54A811C0AC60576BC4 /* fxp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96EDAB5DAB64B77966807FAA4FBEA19E /* NstBoardAgci.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A031F15C9AA6495C554D8421DDCD6B2E /* NstBoardAgci.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 96F221FEFB1BDFEEDF3D78ECBD3693BB /* NSPredicate+Search.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E418A7738B016688EC222EB837069D0 /* NSPredicate+Search.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96F4B4E72231C96CA0010A82E8459431 /* m64p_frontend.h in Headers */ = {isa = PBXBuildFile; fileRef = ADD476D53B05AEB62DBF869AA71DBE2E /* m64p_frontend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9719913DBA52DDA7B45760943EB9BEEC /* RSTOperation_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = BBB89BF0F048332F70DF3BCD3A833DA2 /* RSTOperation_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 972A37B03DCA40E3914A116E31179F3F /* GTLRBatchQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = C88860D669B74A0154AA887269E28475 /* GTLRBatchQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 979368E44B8B7C8615822815141CD054 /* GameControllerStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2898E99C918654A8574FBA694F5AA190 /* GameControllerStateManager.swift */; }; + 97ACB19F84123FA36372CAEFB3F69700 /* RSTHelperFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 142A476F4B29FD9BEA6D18199D4AD340 /* RSTHelperFile.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 97BC1C5E6F8786531212D326F22B5A0F /* cstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = E5AD860D37EB94791316D63AD7049D43 /* cstdint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 97C65359994F792189FCBC1C79079A96 /* gambatte.h in Headers */ = {isa = PBXBuildFile; fileRef = F77EA33E6AF316AA6F7640C7E3F3D1D4 /* gambatte.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 985B7DDD2DD31218D8E7367F76FD2D69 /* gbint.h in Headers */ = {isa = PBXBuildFile; fileRef = 14DA14245966E2AC6FF59548E765006C /* gbint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9866CCB407CB626700130C62BCE45A29 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 587FE8C376C86B170BA2C85960B06B3F /* Sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 98D31D2DCD90B13AF37086E4750BA838 /* mi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 914481AFB63938A5A293F3B322F5FD91 /* mi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 98D8951889A284316C8473C141B05BF5 /* F3DEX2CBFD.h in Headers */ = {isa = PBXBuildFile; fileRef = 0413511727F62ED4EE7013A2B65E6D60 /* F3DEX2CBFD.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 98E164F9F904A6584A61420EE9FD1A7E /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = E411C55BF728DAE87580EC144C599C2A /* pngwutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 990D025FACA7671D88A13F092F6A87C5 /* GBCDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = DA034BCB2E1E7F757B0973F79CA6BD70 /* GBCDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 991670A9BE0E2AD87F211F289998813D /* af_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = 82B290FA3AD7AE40209494B966FF4B3B /* af_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 997BE94A31FB10C25F97750D5D0C73E1 /* pshints.h in Headers */ = {isa = PBXBuildFile; fileRef = 367BD3702DCBBD382022788A89524217 /* pshints.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 99834BC27CF8939DCA6DB984DB44F44D /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = EF589F6EBD2EE6D830CD99CA788543A7 /* Standard.deltaskin */; }; + 99B6F8CEDEB6DB72964EFBD31E1EDD8A /* NstChecksum.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 88DE70070F082BF2437581BD7BB91BDB /* NstChecksum.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 99DE9961F6F88EA4545A05AD359747C6 /* UIView+AnimatedHide.m in Sources */ = {isa = PBXBuildFile; fileRef = ECD06B0653616CEE4A2EAB78B71D5A06 /* UIView+AnimatedHide.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9A1BE2EF2BF2B41278CFF95856596E4C /* Log.h in Headers */ = {isa = PBXBuildFile; fileRef = B36363E6798FB6B3F40354BBE7374A01 /* Log.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A2C2E1BFEC2A7F8FE2BF3C40365472A /* tttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F2C2DADC78B40086474AB8DAA997C070 /* tttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A453C07C6CB23BBC0923625A37ED39C /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = B4621F5E2074F440324D7C9E0D8C9D88 /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A4C2D5C397861A9572A20C1F8A36028 /* ManagedRecord+Predicates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A684FB9EF326DE42BC2EDF06D0D6126 /* ManagedRecord+Predicates.swift */; }; + 9AC1AB764E31934D162F26C8484C21E6 /* gDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE5E01263F3833C2C56EBB4B61F7CA32 /* gDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9AC1C1C11717294A0BC92C368F6A3C43 /* GBI.h in Headers */ = {isa = PBXBuildFile; fileRef = F14770DFA2F0FBE712A351494EC459C7 /* GBI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9AC5F54FB242288D0C0BEE5FE51BE7F6 /* AuthRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E2C78A8799FD3F430CD405874430028 /* AuthRoutes.swift */; }; + 9ACECB5B9423B032EFEF6184E7E6112E /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 2007B1419082E90090305FCD84393B06 /* SDL_opengl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9ADC5E80C66896CD28992B319DBAAFDA /* glext.h in Headers */ = {isa = PBXBuildFile; fileRef = 801A6C2440FD328341E6550569C3A232 /* glext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9AF689676F4557DB4290ABA38A21BECA /* MMU_timing.h in Headers */ = {isa = PBXBuildFile; fileRef = FC781DAF311B76B2BBAA2DDD268A94CD /* MMU_timing.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B00930BE1823F676F5035796C25C2E0 /* GraphicBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 442216A823D794BB8E292F6B3A6BB793 /* GraphicBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B3E47CAB17EEAEEA7252FDAD1228FED /* svtteng.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D07B62C2930860C9FC0DB9D497C72D7 /* svtteng.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B40F6B2B7F12F1A13A367E599764867 /* TxImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B05FC42F83ADA41DEED532540CD7174 /* TxImage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B434AD18DC064B8C04942252F58E534 /* regcache.h in Headers */ = {isa = PBXBuildFile; fileRef = 94AAA4870A47F9FA1AE9463A83E81CB5 /* regcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B46DF6F7D385A76CC7419F2CA029080 /* NstBoardCneShlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BFF96050C458E84686F588B9793FEC9C /* NstBoardCneShlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B6DAACFBF34F39F85BDE66C85C41FF3 /* UISpringTimingParameters+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 46A7952AAD31367ED9BE353AA63C8C99 /* UISpringTimingParameters+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B704453F791C3CAA8F55E7BA3D0C581 /* Vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB8457DAFF531CDDEB4D1854B8B8BDD0 /* Vertex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B75C40E8889FD932BCFF196C4F35E57 /* ColorBufferReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5FBF0DA69F6371EE6C6D63D8001D8D95 /* ColorBufferReader.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B785841DB7BEA68999C1CA3F487ECF1 /* DisplayLoadProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0DCFE89D247EB41DF04E4B210CD083F3 /* DisplayLoadProgress.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B89D3260B3CBDF8B3A37E4C79BE88B5 /* NstBoardNamcot34xx.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F35BDFB9D3E727256E9CD866CDA4B105 /* NstBoardNamcot34xx.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9BDB8F38002847FBD5C1F1C023A5F8D3 /* eventloop.h in Headers */ = {isa = PBXBuildFile; fileRef = FA12B422FB3250E2E3FF60847D9714BB /* eventloop.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C4DE97E009F6FD9F96D47382A323F8D /* Sensor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D116902F224A7C6DCFCD3121EA7E0745 /* Sensor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C56D975902024C142C35CBA998C6E8D /* cpuexec.h in Headers */ = {isa = PBXBuildFile; fileRef = 1427093FF23F46B310155A7F63393171 /* cpuexec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C7C23E76D82621C265FFC52430EC02C /* Ftp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EE47B1882C5096303AD365307905B712 /* Ftp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C8A0C2204C091124D6C64F86A690F9F /* SMCalloutView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 014989F31F4E364C9128F07C0637CA70 /* SMCalloutView-dummy.m */; }; + 9CEA93893B050B53483834892692E40B /* ftautoh.h in Headers */ = {isa = PBXBuildFile; fileRef = 4673DE422676A6A6E7634A30B5B9E722 /* ftautoh.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CEE21D31B9461DB729129E357679163 /* F3DEX2ACCLAIM.h in Headers */ = {isa = PBXBuildFile; fileRef = 73D96244D69D5586A7CEBA91D3674E96 /* F3DEX2ACCLAIM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CF692BD464C27BA082BE1DCA7A9D45C /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E6736AEAB28DFE73C9BD1605B0863D /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D0FD356D97CD52D34960911A8298298 /* NstBoardCamerica.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D6D2B3F2E952A338D1128CD5D724862D /* NstBoardCamerica.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D37E2CB2398BE97697FE7719B77FFB2 /* NstBoardJalecoJf16.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0E3FADE2512B784AFCE2DFE09B9ECE6D /* NstBoardJalecoJf16.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D7F1DA302776DB06BB6428657036442 /* NstBase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 116918731DA7188F3EA9C2361B3A4FE5 /* NstBase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9DCA03AF7E63F208B7C61C8EE8B41AF4 /* RecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 638C5EE8459794EA00003C69343C4289 /* RecordOperation.swift */; }; + 9DE53B2F87039E798D26BE8696AEA4CF /* GBCCheat.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B149C977427CB869997B3FA4DF71F80 /* GBCCheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E31B03247471F3BD90655550384FDA2 /* SoundFileWriter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D9BE76A56BCD866A71FD891640A0940C /* SoundFileWriter.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E35E296D32157150508356B61DBFC67 /* ttunpat.h in Headers */ = {isa = PBXBuildFile; fileRef = F7DA08D829FA42A2C69604D3B70D3967 /* ttunpat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E37FB7914BDFC8D3294D18B7942AC8C /* NstBoardBmc72in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 612BF149D2E48CC9950BEEB2FC03B60F /* NstBoardBmc72in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E565B2CEB1389604BE252478801A1E5 /* defined_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 85DD22654F689D365C8835281CEB8F13 /* defined_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E94A3F6B300F60BE8D7C36F49EADC25 /* NstBoardBandaiAerobicsStudio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 524FD8CB9B96FEC42DEBFF4F6485E0C0 /* NstBoardBandaiAerobicsStudio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EB8EFEEEEE29B8A08B90A5968DD254D /* Rect.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8837E67069B10F42A5536F61DD3DD225 /* Rect.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EBD2981D2C95F47A2CC47ABE9DF341E /* S2DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 190E396AF2951D7E331A9B5B8276EAF4 /* S2DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EE2A24548BFD782A76FA331067BA3FC /* svcid.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C7AE6607FC679EA4767E48ADD80B0C /* svcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EF9EFE4000A70AE76A75376E6E95870 /* ftlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A2F89C405DCAF9349F68843D8672A87 /* ftlist.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9F133B0D521E411CDF94B9631A73D275 /* NstBoardTxcPoliceman.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B24B02D04D4F08EFCBE0B8D8503C30E8 /* NstBoardTxcPoliceman.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9FCADB0CF0AFBD4F3F0ABFED93FB82A1 /* SyncCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A542F20E7647EA7B36CB7C0565E279A /* SyncCoordinator.swift */; }; + 9FE64AB67B279FBE1047117752075A4E /* UIResponder+FirstResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C912B946BDF259EF135410F6A5237EA /* UIResponder+FirstResponder.swift */; }; + 9FEFB36A938CC33AAA28777285A2D6D3 /* VI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C46940B6EC0F54D23A4A771525673E4 /* VI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A0120835F1172F64AFA98DDB669167CE /* scmrev.h in Headers */ = {isa = PBXBuildFile; fileRef = 04B1ECC7EA8EA09AD63D4DE11E338332 /* scmrev.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A086B96EE66A0AF59654CB9D50DAABD7 /* NstBoardKonamiVrc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 261762E049C9653D1341EB811E42E338 /* NstBoardKonamiVrc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A10612911C9EA6DD14FB853233F82007 /* files.h in Headers */ = {isa = PBXBuildFile; fileRef = 269F29EF8D9E4E7D9A20913AFBB84BA9 /* files.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A131157FDDCA174BD8C7F663486E890A /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = 931FABEC117CE8C4B00CF9281008FAC6 /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A152CC24E7DF395160707521223E96F6 /* agbprint.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CBD60FC0FF5C423C847C962880F76C /* agbprint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1544544E0BC9AB6958029C77298E2D9 /* GBASoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = B4344D31A95675A878EB6C78C263B86A /* GBASoundDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1AE18411CA8A80C75D039119DED8CFE /* NstBoardMmc2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 23EDB5113AECD1DF0B90F3E16139D1D6 /* NstBoardMmc2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A1C4AE3CF237BFD611EBF5E86DD2C09E /* FIRFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 77934694A34ABBAE5B4157E7F028F45C /* FIRFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1FDFF2AD1EBC97A47F35961A2C71109 /* F3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3522EC7585D646CAA3673DB9D55FB21 /* F3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A211E6013CB96A83529583B085B6B370 /* NstBoardUnlCc21.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EC91456BE16B5A70B8034583667C1DB2 /* NstBoardUnlCc21.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A212566BC13F73E1F56D4584670E0D22 /* GTLRUploadParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = AE757EB203915A0BFBB4F3FA8E8F9A77 /* GTLRUploadParameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A22D9092E39C894919D1BAB027CDF0D5 /* GBASoundDriver.mm in Sources */ = {isa = PBXBuildFile; fileRef = FB0C2D29320490068714E3A307C890F3 /* GBASoundDriver.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A26E82669EC4D325656E6B8EA01E2D01 /* Drawable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A51106A45BF114A687DB7DB755B0D25D /* Drawable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A275BEEC646144350744D504FBFEA961 /* ControllerSkinTraits.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EEB210C3F983E3F97BA5C90AEAE80C /* ControllerSkinTraits.swift */; }; + A2A854D06578D5120F0B8474EA0073C4 /* NstInpFamilyTrainer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 76A9709715FDD329C46A920FFC9D9209 /* NstInpFamilyTrainer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A2ADFBA34707939EDDDA8DDFCBAF4500 /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = B178CE5FC4BC30D17B77BB64F1C9D912 /* GTMNSDictionary+URLArguments.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A2CF5336CF94746DA1F92A04941AF2C4 /* NSFileManager+URLs.m in Sources */ = {isa = PBXBuildFile; fileRef = 707293F0FD9EBD1A0C126D2597D63C1E /* NSFileManager+URLs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A2E5ECADA6FD38BB0829678577875EC3 /* OpenGLESProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E80277EFECC528835574F12FD313326 /* OpenGLESProcessor.swift */; }; + A2FBF339AF1E1FDD65B6EF4158DE51AF /* workqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC8A38B9BE9E17E5E15E98583898082 /* workqueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A3057CCA3036D83546A8CD03B63F433D /* NstInpCrazyClimber.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EE739F4111402555B8330C94DC934B22 /* NstInpCrazyClimber.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A32EDE9B3422EEA2F7F3C931A32A8AD7 /* NstBoardBmcSuperHiK4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83DEFE6EC2B2AF94239CCEA8D9F36C59 /* NstBoardBmcSuperHiK4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A34924ED816441F1DFC1ECEDFFE962DC /* RSTNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B430FF2043C1D359980E0C002B66913 /* RSTNavigationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A35CEA97C5A89CA2AD61EA4049407002 /* NonCopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56359FB46FDD3587DC048FBE0BC7E9E1 /* NonCopyable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A369A8888AA50BDBB82B59E1D48134D4 /* NstBoardBmcT262.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9106F296AA7B0EA373050E2222387718 /* NstBoardBmcT262.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A432DBBFA6CF4F59033CEE3B63EFE557 /* m64p_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A02908B90AD54C8C621F1E9A36CB18 /* m64p_plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A45581F3A08C2C1C52E7988FF7BDE252 /* osal_files.h in Headers */ = {isa = PBXBuildFile; fileRef = 6487DFB243D65653DF7438DCBA67EB91 /* osal_files.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A45F47289CB2ED953F6CD191275DB3F2 /* TextureFilters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6AA8B9D838C07E38061D4BB84F3D8B62 /* TextureFilters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A48911932ED356D95D7CB9A9A8000E40 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = D0869A5AC273020F28A83BEFF3F355D3 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A493B150D94171B74C1FF5E7933FA3F1 /* elf.h in Headers */ = {isa = PBXBuildFile; fileRef = 86059796C87D909C7319742A6AD185D9 /* elf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A495BA6FF010BD3CC899768E09C49CDC /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = 7BBB06A85B5F1D7854ECDB59E80B5B70 /* pngpread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A4AE6BE50FE7D09FA862A51966B680C7 /* NstZlib.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 72EC1BB681A1EE53852B18D9C14B635B /* NstZlib.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A4CDAB56ED7EA775F1A4AF9BC6C5E712 /* GTMReadMonitorInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D575B29FCC81FA8F72EC3CC12A581A5 /* GTMReadMonitorInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A4E7AF6547FDAE1BCA941C5C55972386 /* NstBoardBtlTobidaseDaisakusen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA1E7066C788AF166D3819EA304B9C30 /* NstBoardBtlTobidaseDaisakusen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A4FFC4C6F5F2FBF2A4714D4E98634935 /* opengl_ColorBufferReaderWithReadPixels.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A679691AAA47A28EF1E1E5A6BA88E4 /* opengl_ColorBufferReaderWithReadPixels.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A5037807FB7A1D0D4B693C55BF20B762 /* GBCCheat.m in Sources */ = {isa = PBXBuildFile; fileRef = 03B446FCDA488875B28D8F29A5A054B5 /* GBCCheat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A5651EF221F23607DCC7F0AFEEC5CA8E /* SharingRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8888D8043BC735B8831AE2FB72C5DCE4 /* SharingRoutes.swift */; }; + A5726C481C20F8D8E40DCC9AF9D0CF34 /* fttrigon.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DF7E6D80CBC58876AC10154A9D6A141 /* fttrigon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A5A600842203DF1E3A7A326C8C22C683 /* ConvexShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3676C1EE5D5DE26D9C445B36939E922C /* ConvexShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A5A84A4DD8A5E89E5AB0C7733B613CE4 /* NstAssert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 380AB1A1F7D98ACA91271E7BD163EEB5 /* NstAssert.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A5F30E43D79777F683DA8086E856314C /* osal_files_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 66814AC3B3C466A4870833B7CC41BE34 /* osal_files_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A6173C5A991255ED8E9DF5B7A8B26CA7 /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA1F428AFD84BF440CD3E1D14DE8168 /* GTMSessionFetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A6257B7E52832880771B2BB200A4C1D8 /* interrupter.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D57715B2185B75E5396245FFBAE48E /* interrupter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A670352ECAEE4E7A1DF6A8D8A9BD2220 /* Combiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D32B6BBDAE1D1E3EAA27A408B03C8A6 /* Combiner.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A69AA86EDA31C24B28D06718893F218C /* winlnxdefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 719867C7F45388063CEC3252848F288D /* winlnxdefs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A6B315E94A6CEF669095A376A8B78BF0 /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 74F7F494A747DB09275C9A959DC103CC /* pngwrite.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A6DF3C1F361F1F1CE700FA15AE09FE32 /* F5Rogue.h in Headers */ = {isa = PBXBuildFile; fileRef = F4FF030A171DC28CB5454BA2D75DDCDA /* F5Rogue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A70E823723F2AE05B1BAFE430143EE81 /* ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = B7B0EC3A43195D2E933C1849423260A4 /* ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A71F672BACBEE53FD4851582F9A71450 /* RecordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FFF2C8BA989A2993AF7181B8C71DCEA /* RecordController.swift */; }; + A72CE00953BEAC5C78106460D334E3F6 /* CheatSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AEA4696FF630389674F9A479B343F8E /* CheatSearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A72E4695B60D35E8D8BFAA0FF9051520 /* OpenGL.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 112CF20D5FD3FC49E46B68E39C3831B1 /* OpenGL.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A7367943BD56320D9A2A6192A8A3D770 /* N64.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAF3FD6676FB908497318168CA250E29 /* N64.swift */; }; + A7610ADD4D3B95C8ECDCF6ED0324632C /* RSTDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 15D53B5540090674367F2034C42E0C1C /* RSTDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A78C159B2F3CA3444E738F57CCB464A5 /* Dialogs.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EE59BD5CCE08A1257054978F5F52E22 /* Dialogs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7B6493DBC037E2F8C5BCDDE7EF3121A /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = E07E6F8E20C9B8DBDB6086A2080574B0 /* Standard.deltaskin */; }; + A7EB0D099CBAA6C310A263AC395DEEF4 /* GBADeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 31C592DC38E9487D52E30F0FFC654460 /* GBADeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7EF2BC7C091E4282D581EBF80E9EFEC /* RSTFetchedResultsDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E69FA508FAFD1015760B7C3395B4805 /* RSTFetchedResultsDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A7F0206CCDED3DF4FC1C456649013B1F /* RenderStates.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A922DEE8CDD64405F21CFA9916068DA8 /* RenderStates.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A8551A96FDD516BD37037B818AE7BC7C /* GBCDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 26D67EB75107A8E731DFD2A5B2EC86F0 /* GBCDeltaCore-dummy.m */; }; + A87DA7AA81BB75957343DA7D33B3D148 /* NstBoardBmc22Games.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DDDBA9705C6D9A716771C1B745289787 /* NstBoardBmc22Games.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A8AA31971602F635B0B2F46C6BB1F07C /* spc7110.h in Headers */ = {isa = PBXBuildFile; fileRef = A05A1526F5B055B18305FA115EF3E9A1 /* spc7110.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A8F08EEE11D3748876598813DF8BDA17 /* NstBoardSuperGameBoogerman.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2A9BAD126F66B1D6249DC44FE38555BB /* NstBoardSuperGameBoogerman.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A902E94BC79F6FA99E9BB0300EA305B3 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2B5384F92FD40CB28071138A07D6BBC /* CustomFunctions.swift */; }; + A960256FE7F887C3B4128D1F696E2D90 /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = C46B41859C836F92F71776FC13FD640A /* pngrtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A978E1A561722F15D4C545AEA3FB3001 /* Clock.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52CF632514D6A787809AE4E842F41C5E /* Clock.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A9AEDDC1D58C38A7CC8DC9F486965D56 /* Sram.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F4F491B0BC25A23355012F46D89DAF /* Sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9B698FBFC78110FB1851447D93A2CD9 /* F3DAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 026AA711C2DD33D8830708741F80F0D5 /* F3DAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9F981EDC073C433341A5F4025D46216 /* DriveService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00982E0E1F8B1E95963CDA563EA3D799 /* DriveService+Records.swift */; }; + AA3241DCAEBD138A49F1A1B79CFE3F40 /* BaseTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFADC4424D377B458AE08BE73A8876B0 /* BaseTeam.swift */; }; + AA3339D66B1B8D9E4FDA3A7B1DD4EE4E /* RSTOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = E194EEE9A16263CD0FDB5BFF52765777 /* RSTOperationQueue.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AA5B1AEF7BFFC092A1A177F7B83F5EF5 /* recomp_types.h in Headers */ = {isa = PBXBuildFile; fileRef = B95AF3A3928659911B5866BCB18F168F /* recomp_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA615360C6D1A302957FBF37E2684533 /* F3DAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E2E93BB84159ECED9476CD991992C8 /* F3DAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB123914A6198728826EAF5A6AB03906 /* lirc.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E38F730D5EC5C9EF41311D289592151 /* lirc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AB1E3DEF678EB7000A95D5337728318D /* SNESTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 087E76CC675F0056172F689E3EB38F3D /* SNESTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB558010971A1205D40B5288EA916AF8 /* NstBoardWaixingSh2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B595CA4CE436B20EE775744443119153 /* NstBoardWaixingSh2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ABA544F4FB1E7074FD3DC41616D225E0 /* TexrectDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FD06664B1E05662499252D81EE4BDD5 /* TexrectDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABCF35B61F0EAC2A3D2328B942D32BD8 /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F22453696F4302900B9871992F9215 /* util.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABDDB6C221DFAE4AAA785817F3446E6B /* NstBoardBmcY2k64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 739C9A35C56A321A5F6DEC9276C9A451 /* NstBoardBmcY2k64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AC4C2943071E6F4EFE6F3CDED9F75289 /* CustomTasks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37497E9D4A4AD3D7DBDCBD661F3B23B8 /* CustomTasks.swift */; }; + AC5786BFBB7B51AF3B5D003E3F943335 /* lua-engine.h in Headers */ = {isa = PBXBuildFile; fileRef = 41BA2F4E4D2870FCE74225CB5BAA4CE5 /* lua-engine.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC5C7C37725492D17220C640C6B10B47 /* minkeeper.h in Headers */ = {isa = PBXBuildFile; fileRef = BDBC8749B7239FFE93E87463C75D3321 /* minkeeper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC7F07736D60C170ADF5347103C06706 /* NstApiMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D600C41025FD98A039F6974280BC9059 /* NstApiMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AC809FC49956C0CEF8D81ECB57D34E1E /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = AA827D717ECF37F1C8268040AAFBAE46 /* pngrutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AC88AE5A5EF6C2D974226145DF29720B /* NstBoardSachenTcu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8E110C092AEF72EDB7C33791CA0BCBEF /* NstBoardSachenTcu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ACA04F1A522EC18A1D9CF1A1A0ECE722 /* interruptrequester.h in Headers */ = {isa = PBXBuildFile; fileRef = 0017998E6980B0ABDB2A24D94074549C /* interruptrequester.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACB848453661249CFEDE957E0BC5AFCF /* RSTBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 866D05F9B3FED97151B776FED3394283 /* RSTBlockOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ACE261F0845AE7032EE10EED8352D14A /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = D4E18A027874D0E4F2D09A1492E7FC02 /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACEE8B31B20BE08B7468DB090AC3A159 /* GTLRDriveObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B22551CE150F70C85739F2994DE4F75 /* GTLRDriveObjects.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACFDB59EFB14D11FDAA6C885CF2ADB9E /* dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = D425AE3E5ED390C5A8846F791DD166FE /* dictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD6656B872B98CDE4BAC39B6E10CF595 /* GTMMIMEDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 0753A2F2127F76F50CD3A7E3FCDF1F60 /* GTMMIMEDocument.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD77BEE717454B68BF56D30CBAAEB761 /* spc7110dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 539542F40794BD9C9D5856536A7CA2EC /* spc7110dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD7D53389EE6FBD882ED47A69EA528BC /* retro_common_api.h in Headers */ = {isa = PBXBuildFile; fileRef = EE4ED05DEFBED1E0F613E2EEE0E8500C /* retro_common_api.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD95435739025FAAFEF2B5911CCAA4B7 /* StoneValidators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E4A59F776B62FE5D7D647BF19F07F8E /* StoneValidators.swift */; }; + AD9ED143C77CB1599C53004811B576C6 /* ucodes.h in Headers */ = {isa = PBXBuildFile; fileRef = D1AF2289C82F924BD674E01C203E7B6F /* ucodes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ADBA2EA8F4CF15587337BCDC2F645BB0 /* retro_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = A14800DC259C96954AE16116EC0E310D /* retro_assert.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE1A359FB304361E950FBAFB413D972B /* ZSort.h in Headers */ = {isa = PBXBuildFile; fileRef = D2CD9D7750784D7D9E924E0E0357EC76 /* ZSort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE2B65C3F228FA7D15103DAB814EC3BE /* exprNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 521E061C02DD904E7838383DE2E1B0CF /* exprNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE769713E049B84B57453032779D836E /* ftdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 8127AEC9343CDF5FA184EEAB2A4E598F /* ftdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AEAF60DA9CCFF57F8FBCEDFFFC09436E /* ConflictRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D47FC12A026C951220B49A834F51276 /* ConflictRecordOperation.swift */; }; + AEBBDC54DB66E473CA4D2CA762AD90A1 /* svwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = BAB2153E188978ED7096999E36B0E1D7 /* svwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AECB1619CFCEF7A7234852F00CB0C5C0 /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = D9E62A3E87A152D8A5A4747A0E88F317 /* SMCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF02EA0DAD3FAC51CB5E859F81786EC6 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD38673C0296A73B42D147E647C1937 /* SessionDelegate.swift */; }; + AF0DCE9655B9FD35BC9D0A18E30C0A57 /* alist_nead.c in Sources */ = {isa = PBXBuildFile; fileRef = 5844DE373A9FE031984BEA797C1C7A39 /* alist_nead.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF384C3F516776514598AB608BF28CEA /* RSTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 43449379BD1A98A6E5C5169A5F74E9AA /* RSTError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF57DF3FC4B0368E92B51C386ADE38CB /* NstInpZapper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C906D0B80F5FF86C1D338A347708D05 /* NstInpZapper.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AF71438F7AEA2FDF0A4B8132FC6ADB97 /* NstBoardWaixingSgz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3BFF77F72AE6211AD9D42FD2E18375EF /* NstBoardWaixingSgz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AF75C6505DD091382DDF3792EB91B958 /* GLideN64_mupenplus.h in Headers */ = {isa = PBXBuildFile; fileRef = C704B47C4D3D001EC83BB8F7C1E8D2E5 /* GLideN64_mupenplus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AFD5F72E1203590BAF3FF051AC1D4A1B /* GTLRDriveService.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EB7FA5DB62956C49A473DF02AE5456 /* GTLRDriveService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AFD96D371E8D60B2143D73E312E24BD9 /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA67DD1AC07C6365F72FCAE6272760D2 /* Entry.swift */; }; + B011E9394F81876D07949F6C4247ECA0 /* SoundFileFactory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A03596855FA5527E9DFD553107E7283A /* SoundFileFactory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B02E655D31D677E01F8A4E796936311C /* NstInpTopRider.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BC670362843998DA1AF5EB24E32647D3 /* NstInpTopRider.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B047CED3CE820B6D442A496BFE713A34 /* IpAddress.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34E1D0D9185BAD35EFFEE1914BE57762 /* IpAddress.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B09052B271013EFD3E592D4E87ADC3D7 /* UIImage+Manipulation.h in Headers */ = {isa = PBXBuildFile; fileRef = D52092A71CADBC93153EE571AB2672B0 /* UIImage+Manipulation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B0B08B97A524F8D48FDDA2249AEAD6ED /* Harmony.h in Headers */ = {isa = PBXBuildFile; fileRef = C2A44DFFD1971B44F0D03A3B9D7CEC57 /* Harmony.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B0B1C045C677C89BF5B9C28280948EFF /* TextDrawerStub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 087B0A1E2A0C286B3F21988E2886E415 /* TextDrawerStub.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B0CB31DCAFF38374A10B45E212587713 /* NstInpDoremikkoKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1B7C97918240DAD198A118B7B00B0E24 /* NstInpDoremikkoKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B128E8E439A9E5BDD9CE64F4EEDA1AEE /* audio.c in Sources */ = {isa = PBXBuildFile; fileRef = F7095B17BD490C5C3C946BF5CE387A22 /* audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B158F6C6F5B890AF5A00D8492705CB38 /* matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 810C174C92F9D6B39CFFD8CDEA0902A6 /* matrix.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1766B3E76519CAB435EBB97EEF315DD /* GameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15D24BE6CA6E45ECB6DCBA6B450424E6 /* GameController.swift */; }; + B17C1766C96792D8E4702F83155E438A /* NstSoundPlayer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 657EC94D6685264E5B97804EFAAB8145 /* NstSoundPlayer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B18BDE9F23964986DC1C252B20A2B80F /* RSTCollectionViewGridLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A046E883CFCEC84A20788D73991DD42 /* RSTCollectionViewGridLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1B404D70676CCCFE3325E089DDCAD9D /* loadres.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C5B370D97DA31DD1B20EE2895770F31 /* loadres.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1FA10A1E7A8D914849E2F9982C44D07 /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54254E0189355E5C8E760E6CEB171480 /* Record.swift */; }; + B219C7FCFC30F49A2B96B301127F71A7 /* NSError+LocalizedFailureDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = F62AC62ED831B8389E68C8BC69676157 /* NSError+LocalizedFailureDescription.swift */; }; + B23FB033A07C66C2629201D7878FA1FF /* SoftwareRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6C6859EF93F3A711C5AA163C55425 /* SoftwareRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B2413D48BE65FF8FD294A53D5C5B760D /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C17445D591C8EC78950717FD3D5F77B1 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B272AC71D7ACB699920703161A1752AC /* RSTSeparatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BEE4619527C9F9B1FE35C99D23CC654 /* RSTSeparatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B30D82E85429187E9C74F971CECAFD0F /* RecordRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988D4B1A89D40408B7ABF72F05B65950 /* RecordRepresentation.swift */; }; + B3279DD4DDA04F5DCA2F5B03E29B9A6D /* NSUserDefaults+DynamicProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 44B96F7B857F663A80AED6CFBCED2EE1 /* NSUserDefaults+DynamicProperties.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B34FFF478B816C21FA1425DAB52AD1BA /* NstBoardBmcGoldenGame260in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BA6C6054CE8555D1822133E74F7E920F /* NstBoardBmcGoldenGame260in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B3B0CAB964F5C903A859882947D5A72E /* NstBoardZz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E79FA977AAA30AD5B0ACFC45BB5967B /* NstBoardZz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B3C63A4395449B36D761122AC4A51AAF /* NstBoardSubor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1F028EDFAB102669AF0739608CE6CC3F /* NstBoardSubor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B3D38E5D11BC50709CA52D6FFC2B9864 /* NstBoardBmc76in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 31FCE4C32E3EF5DE398B4E770A89EBF5 /* NstBoardBmc76in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B3E4E3424C67ED018CA0EF4B73795A17 /* ftcid.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1D49FEC1690DC33D84B0AF284CE88B /* ftcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B422DCB989FF675D287C579D280F8253 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ECC57680ECCFDA6CFA7FED355B4F3AD /* TaskDelegate.swift */; }; + B425DF73F64609FA542BBFB0BE9EDF03 /* PostProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07F929AA3ED898A910A9BC1A1D86B9EA /* PostProcessor.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B435171F5FA2EBAC3C23A866769BE557 /* r4300_core.h in Headers */ = {isa = PBXBuildFile; fileRef = C65A2F325C6EA118286DBBC4484E5404 /* r4300_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B435EECA15AF195F0828E24958F90C6F /* SoundBuffer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6A6E6BA6F73F029637AC87BB994DE38D /* SoundBuffer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B43FA418644B4522331BB3C00F854B24 /* si_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A9548EBDD461D42A4F3BBAEA839E3DA /* si_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B445DE84FFD95F74DE320679C420C280 /* F3DEX2ACCLAIM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 06A10A0C91C261CE6EB6C49882F13804 /* F3DEX2ACCLAIM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B47F87DC8093788C4F7F5FAA80E88648 /* S2DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B115DAD8B8CBC0649AA6BCCBDDF47E7F /* S2DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B4B9606F74B2AE01213BCB4FBAEE6F6B /* RecordEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C7CDBA93C7797D9E83FBA84FAE7FD2 /* RecordEntry.swift */; }; + B4EB521CC2E0002F09E6D89D72C05EF4 /* RSTHasher.h in Headers */ = {isa = PBXBuildFile; fileRef = FCED81571811A98DF752E236C102EB15 /* RSTHasher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B51466218A72A889E8E988A7DB33701F /* NstTrackerMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C20B18CFE6A85C50A5E43ECF4C69D309 /* NstTrackerMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B53E55152ACF5185856AA85EFFC3B4B8 /* NstBoardCnePsb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DCB3B443E61EDD2CC071DAE04B2C1F0C /* NstBoardCnePsb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B560A089A1D47EC1F0B26533258C7317 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18B035B874A3872AE52466285EDB74ED /* SessionManager.swift */; }; + B56D331A25A771CAD8AAA58BCCF4FEC5 /* DisplayWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = E07FCD55ADD3EACB05945CD2DAA45704 /* DisplayWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B56E07AC98E8D928C9E900BEAB1E5D9E /* GoogleAPIClientForREST-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5217968080F1594E30A54230FEEE2E88 /* GoogleAPIClientForREST-dummy.m */; }; + B589CDAD880DE2B506BB8EF95CA2CBD2 /* autohint.h in Headers */ = {isa = PBXBuildFile; fileRef = A82BEA8F12430E795A88BB379EFE3536 /* autohint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B592BEA6F00B6CB2A68FF21EE18DCCE5 /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399303C061E83D38C607412717024931 /* FTS4.swift */; }; + B5C71F73361EF8A4F64FD74A6E1F9560 /* BPMDetect.h in Headers */ = {isa = PBXBuildFile; fileRef = 912A34EEAB2393779814319C7BDDC198 /* BPMDetect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B5E129441B9A582B280D6CB490CC9B18 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7EE0A3C63E9181CA23F2A4EE2C188E /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B5E9F103B89A4D65F3C103264D8F0075 /* F3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1A18FFCFB5674E197BFC4BFA0584F6E /* F3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B607C73513457E83CDF3A4552A8819C2 /* FileInputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FCC13C918B0DF97D6202A60A3DC17CF5 /* FileInputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B624009110AE452CBA01D50AD9CF2E24 /* snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = F1B217B4E1DE3906B3076571296DFF09 /* snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B642F97A1B4740DADB75F4DF9357776B /* NstBoardSachen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4935C2E2603C529A316EE9E50C953CA3 /* NstBoardSachen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B6758D43CD69D4728C2DEE14394F151C /* GTLRDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B98EACC45CEADA2FC73EB069E37FC7 /* GTLRDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6D3A3FFEE078C60C5964AFC10A2BA8F /* assemble_struct.h in Headers */ = {isa = PBXBuildFile; fileRef = 7680621D7EA37B25BD6FAFEB184DD97B /* assemble_struct.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6EBE57D0E21E77897AE81B558932730 /* TxImage.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC79183F81C91B3272AAD8FC4B608B5 /* TxImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B70168F7C469666BF680C64C641ED1AA /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 99AFB601E975D6655D2A52B959891047 /* opengl_ColorBufferReaderWithPixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B72829BC0D61AF2E97C134A12BB5387C /* GTLRQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E64591CCE82CAC6775DAB365A75A8BC /* GTLRQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B73AB37F8B742739EDA3C074F536FBC5 /* DropboxService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 142B2CFFAF6692BC41348D5B5B30FDA1 /* DropboxService+Files.swift */; }; + B769CDC513B5AC715C708F8414DE98BE /* SPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C0FCDFCC71457C2596AFCEC1DE6839A /* SPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B843BC65B5755CDFCC2133CAB6614090 /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F8D603EBE941AC871B0A2F47AD5B6D5 /* Pods-Delta-dummy.m */; }; + B848793866F0C67ED92B0308CCB9D6F2 /* NstBoardAveD1012.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E480CACA0E81501CCBB98149C48584AD /* NstBoardAveD1012.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B8955C9472B44FCEE652CFFAB57AA5A8 /* Http.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6FBD67C48E00871A2582075478C8DA5B /* Http.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B89DFCAD50363CFBDC53931F4F370234 /* Result+Drive.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC23CE2DB6C5AA34154506F2401B1F8B /* Result+Drive.swift */; }; + B8C2E560CCEB5C574511691807B9D8EA /* glsl_FXAA.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ACA4CA8AE2D83BA8AB58439FC360D38 /* glsl_FXAA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B8EED4F04562CE0F560AE123C1F737E1 /* UIViewController+TransitionState.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BFDD39FA42BC2644FD2FC2A33412FFD /* UIViewController+TransitionState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B94304C605E21C38958D8B2399F806E4 /* ManagedRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10788548DAFD98FFF15969586412798C /* ManagedRecord.swift */; }; + B951E2150D8C56060DDD22AACC1F0A12 /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 47DCB70C7A85BDDF58BAF31BC42404A1 /* md5.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B97F1A94FF1030E195B110D8EEBCAA83 /* NstBoardSuperGame.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CFF26FC15D5CF0C1D2FDC8A0DF023F02 /* NstBoardSuperGame.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B9805A1656378AAA93AADAA09D5122C1 /* NstBoardAxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C3EC67AFC76D160DAF406F83FB32F372 /* NstBoardAxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B9D617B5B5EAF1315D131DBCE295ACD2 /* TextureFilterHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9B3F61B1E686EE8232FF7D4423DA7AE5 /* TextureFilterHandler.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B9E14DD387C8FE6CD9A8A29DF12A8ADD /* getset.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D713472AF6AAB8E1D9ABC6D7A61B49B /* getset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B9F145E126048938862BB1034A7EA013 /* ai_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = CFB8F56FBC758AE2588C1DD814A5F9D6 /* ai_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BA2D57760A3C386F7C1C547729E1A472 /* NstBoardFutureMedia.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C0BCFCB348564B9EB1473238677BB354 /* NstBoardFutureMedia.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BA530F1422205725B02895445DDF0F3E /* alist.c in Sources */ = {isa = PBXBuildFile; fileRef = 4903CFCCF14E60B4FC1C1EFCB86ECE55 /* alist.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BA5700A31EB47A427F8C75099C99FD06 /* rdp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = E5E0E7F22F5068FCBB7C8E4EE92F086F /* rdp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BA6F2DEA63EEA27BFAEDA2A35BB85F6A /* GBADeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A43F1D8E9F0EE020CB6D17932CE6292 /* GBADeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BA8DAE2B382564F0C1EAFA4E759CADAD /* NSConstraintConflict+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = 480AE324EBF43D4B5582909423B482B4 /* NSConstraintConflict+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BAA4E74335AA7B36F2454711A5B55698 /* Audio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F30187F95C53F4957E71ED8DDDC23CC3 /* Audio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BAA7B0396C8963E3E7324FE70900B64E /* Cheat.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF58C9A94CDE343BACE56F4E13E201C8 /* Cheat.swift */; }; + BAAAB1B9FEE1E71EB834788C59B174C4 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B412A3E753F75718995BBB767197FD /* File.swift */; }; + BB0BB79A9140C13066DC7B7C8B203B78 /* Network.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92B20D8D80FF2DF35DE5BB67277F01FB /* Network.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BB191EC60D3AC3D5EB56CB411B128BEE /* Touch.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9900B0D2CD9872165A1705598445975C /* Touch.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BB43B32DD16801C9214E36739BD6D080 /* GPU.h in Headers */ = {isa = PBXBuildFile; fileRef = BECCB76E1F55FC84F3E9C1EBD272E746 /* GPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB62119EA148C79F62F0ACBD9EB0C565 /* interrupt.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0028E9A2FCB06AF3C4FF32FF90DA06 /* interrupt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB961476561437CC41E703E25E767FD7 /* GBCInputGetter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8A840F202469E60C39538CC467177CA /* GBCInputGetter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BBC683E778EBD7924866C7857B19D11A /* NSString+Localization.h in Headers */ = {isa = PBXBuildFile; fileRef = 620CBB9D49ED951D7497FDB4C115660B /* NSString+Localization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BBE93C6E95E356BE54C337E86C774BED /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14057D1AEA66E65BED2117946518BB10 /* Common.swift */; }; + BBF6C4CF1FF711166B74A992339230EE /* NstBoardBmc64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7F66CA249330A41FAC70007D5C650CD6 /* NstBoardBmc64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BC4EB746D2E13352424A93FDC7A52F78 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEC812792FD886E7BB2776C793B6BEEB /* Errors.swift */; }; + BCBDF12AD11385D21AD3AA103D8B4EB6 /* RSTCellContentDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DC3FCFF553A82968D13B5EB86CA60675 /* RSTCellContentDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BCC3B83B11F726387F8C0A3568E470D1 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = DE7BED3E5E48EB3660BE48EE00FA7AFB /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BCCF0B9F15A1651547EADC31A6CEB5C2 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = C87526B5C0AF75FA4CE41AA42D172B0B /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BCEFBAE2DC02775E49A13027909408F2 /* TxReSample.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AA904F6B4EABFBD175084421003EB09 /* TxReSample.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BD016C62B0056C15B63A5A9396AB93F4 /* KeyboardResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCA09C91A2EF02A01FA5D74C5F06804 /* KeyboardResponder.swift */; }; + BD0CC9162B585EAC4F9D324068AC0A14 /* firmware.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C7AF11CE5076877102C9C295769C622 /* firmware.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BD0D6665CD9A3B3C0AEDC4347A0BEBA6 /* NstInpBarcodeWorld.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92004DFFAF89F721D5477783E22161B9 /* NstInpBarcodeWorld.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BD21247A32EF0C2EACBF439E6C4B9209 /* NSFileManager+URLs.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A1F04C9D66439C073E518F9C2519E1 /* NSFileManager+URLs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BD76AF44C34DBCA99DBC73D5ED61FE7F /* GTLRDriveObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = 650B17EB11403844F72B9E0117949D63 /* GTLRDriveObjects.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BD98350191E37E34886D92370CDB8174 /* NstBoardBtlGeniusMerioBros.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2FB72B0C0BDEEEA75B2233F8A0F9C0CB /* NstBoardBtlGeniusMerioBros.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BDE0EF415A3093440376B4D04914BBAF /* UITableView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C752AF5BCDF4EC788FBE60B79732508 /* UITableView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE4BD4C475FD682FA5F5A75F1CCB4940 /* GTLRBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = C977FFA5FDFB893A5DAB65AE680DA461 /* GTLRBase64.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE73142C363020BAD22706DDB199D35A /* NstFpuPrecision.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9039BACE3570843851BBD1B1CD4E8944 /* NstFpuPrecision.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BE75DD1EED6E0D0B3AADC2A777C7D9CA /* NstBoardSuperGameLionKing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 33F61CAFA96E0983ACC82B25ADD6DA19 /* NstBoardSuperGameLionKing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BE7A4ED43FCAC3814C10C9D5B3A68D18 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FA995B71ECEE202B9688EBD65B7788A /* opengl_ColorBufferReaderWithReadPixels.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE8930A97F9D476C9A93D870A62B3D11 /* NstBoardRexSoftDb5z.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B21034826F7C6098BB4DBFE00B2498C /* NstBoardRexSoftDb5z.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BEA3DB63075DE883B2C9506C483877DF /* UIDevice+Vibration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78323C76AFE569F46E583A2E3461F6E8 /* UIDevice+Vibration.swift */; }; + BED24F03394D6879BAFB6D521219899C /* RSTCellContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = B2549B66FD3CB3110FA065042ED1999F /* RSTCellContentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BED6D68A786DBE5B331C32D88E209282 /* NstBoardPxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 041DD83CE8B7122C23DB4EA6557E0B8D /* NstBoardPxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BF2705ACCDBE29A8E3C665CBB877B64E /* NstBoardWaixingSgzlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75CBA626F95FBBAD154F3774DF8F9152 /* NstBoardWaixingSgzlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BF3835EC0C608435A5068BD7DA290723 /* NstBoardUxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FE0B56AC8DF03F3940CB2C0117DF20DA /* NstBoardUxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BF68218EA9CB72C37A86A7DC97330040 /* retro_miscellaneous.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FA46629ADE6C1B6415FE547479F78E9 /* retro_miscellaneous.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFAE59F52F18BE2C9796FA97184A813D /* TcpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 396CAC416CA887F60CA5BB303E7782BE /* TcpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BFCB75257F3782795D068C01593C193C /* FullscreenResolutions.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B2D8F8859A064B41E83B36809CD1EE /* FullscreenResolutions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFEDB3C71543B01C462D3562B179DA30 /* SDKConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95CCDA31768B63EA9440181D3FB6DD17 /* SDKConstants.swift */; }; + BFF00FA2CA9BCB91036CC7F37B8878C8 /* gSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 72E7904615D88779CADD558D3456DD5F /* gSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFF536B78DC4850A4A285C1D03F56057 /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 007B238BA4CBDD19AB8422150260B200 /* SQLite.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C094CBCC986DF1C6C0A3379FCA09D462 /* biopak.c in Sources */ = {isa = PBXBuildFile; fileRef = 715964B79C52F9A32AC5669D6D1A75E9 /* biopak.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C09ACD857947A188924A57EB95E3A3EC /* glsl_CombinerProgramImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 747E5693480F6B6F20690DB12E236F86 /* glsl_CombinerProgramImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0D9BA8FBC5E1F537EBE6CC92AB31AEA /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3F0FDFBE86AC5763C0A89166EFC859 /* Game.swift */; }; + C0E0B72CFF04ABCCDBC10213DE784979 /* Cheats.h in Headers */ = {isa = PBXBuildFile; fileRef = CA2F2C7F1257D8E558E768DAD7B2D74B /* Cheats.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C101B03ACD6D46D16A8FAEFB5BB281CF /* NstBoardBandai.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2DB986F9C1D693A55F7B3373502F3EA2 /* NstBoardBandai.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C1BC2E5368700E239EF29C36CE3B9839 /* GameProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C70E38FCA082D826611BFD1F0EC58613 /* GameProtocol.swift */; }; + C1BF92EE9B78C154547D891F8156FD79 /* uncopyable.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA41F9CCF4B088FD860DE0A9D8B8D17 /* uncopyable.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1C5E0B49268CB4DB6B4B7CF63412FF5 /* F3DDKR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B93D7E35A62A2F50B4C38BF9A76E4C4 /* F3DDKR.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C21855C2E5D6487AC2B921AD79922E14 /* ExternalGameControllerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93910D17E45B6F0DD31F72703A5A2651 /* ExternalGameControllerManager.swift */; }; + C2A7BEF4712B927F676D5521BA4CDE03 /* Vector2.inl in Headers */ = {isa = PBXBuildFile; fileRef = 32498379B364CA72F850FD7D3200CF6B /* Vector2.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + C2BE25EB20537FCA2EE93FC27875B382 /* RSTTintedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = F3AAD7F4A60C4A7E5B5877476953BA04 /* RSTTintedImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C2C42639F8B8C99AE470FFC772F27320 /* NstBoardNanjing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D24B8100E3100D72F4874FB079F78F54 /* NstBoardNanjing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C2CDA8FD21D4EABCF46E596D822C87D5 /* GameControllerInputMappingProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F09C29C5169EDE2BFAE9F9E6B95F48 /* GameControllerInputMappingProtocol.swift */; }; + C2CE2BF3BF9FE6464EFA9299139418C1 /* fb.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B2001812085959BA9C558864721110A /* fb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C2CF08E68D39B2B25982B6AD4BE22708 /* FinishDownloadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9078D2E6A526B27EFAB78F4949C2039E /* FinishDownloadingRecordsOperation.swift */; }; + C2D45C2E6F31EA9735644BA45EDC472C /* GTLRObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A171E0701260ECA35983A32816DB522 /* GTLRObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C2EB4CB575EA9821E30A317574865D17 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC73A05080E7163BE6F8E9426032C82 /* MultipartFormData.swift */; }; + C34D51CEB4E00C5A195C5FF17A900866 /* glsl_CombinerProgramImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F40644EDA82AEFA7C2C89C6CBC2D581C /* glsl_CombinerProgramImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C36CC682F07B3FEA5A1B00C139CCB3EC /* NESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = DF48B54B85EDEF813D05CDF5146FBCF7 /* NESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C38E914D8F66B0BD258C83D7C35C2726 /* opengl_TextureManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C8F960573035AFFC3CDC1DEBA1E6BD4 /* opengl_TextureManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C394492C7C415D251CED3A19FC797560 /* ftgzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 63E5FFFBD052DA0F226FA6C644365420 /* ftgzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3ADA5023FC1C283152E2C1813982117 /* TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AA718DD7968CE1C58CD34313E5FA869 /* TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3B11E4AA028617D0B3134BF96B451DF /* usec.h in Headers */ = {isa = PBXBuildFile; fileRef = AE0C7BFBF72D47F44B5150F9AD1D5E20 /* usec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3CB14A07161497CA6FAA6858EFF4F4F /* Thread+RealTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3B202DC9824A439BA7432E3C5B9DB8 /* Thread+RealTime.swift */; }; + C40257B054B827F15814443893FE2D5C /* GTMDebugThreadValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 026273C8CD9BD9384803DD59CB45DF96 /* GTMDebugThreadValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C455219A8550223E4C8003DD899834B7 /* TxInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0A321F5CF3FAD29047B4FF624618004 /* TxInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C4552D4F06F08287FB112E8B10CFC47C /* Revision.h in Headers */ = {isa = PBXBuildFile; fileRef = CEC07F295EF65A94DD75B4B6F79D0A83 /* Revision.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C45537121E620342F23894864D721C8D /* GBATypes.h in Headers */ = {isa = PBXBuildFile; fileRef = E1E783A2C239C16F0FB68CDC920FB0A8 /* GBATypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C4561DB72CCEBA4FF6445D4738B7C7DE /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39CE46E8947CA82B26FFDA66DEED2417 /* opengl_ContextImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C4AFBF63C66D464CB5BF0FEE936B0A14 /* bootrom_hle.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D3835A82BC331577B14F9F444CD9367 /* bootrom_hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C4CD30F775B2D8F7ADB0CDAF05C03983 /* Glyph.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 920F6CCBFE16A29B89A155E099306B56 /* Glyph.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C4D651A1DA5790D9EB95954015D606B3 /* NstBoardKonamiVrc3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5221F56A802033E50A6CA3492E382A3C /* NstBoardKonamiVrc3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C51A52DF29F0F1A14A3C4A2435A027DB /* NstBoardTaitoTc0190fmc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F6A4D024EFBD821E10B8C4249832F774 /* NstBoardTaitoTc0190fmc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C564BC767458B4CC26E9A5D4DA650B4A /* FrameBufferInfoAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B93E54A61BB91C9C1DB668CB22B8E22 /* FrameBufferInfoAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C57FA8AFDD52EE6417A2E0C1274059E3 /* NstBoardHenggedianzi.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 32810DC0220801D0627369038B90903F /* NstBoardHenggedianzi.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C593D8CC9F1A9B223285B2E986CD444C /* NstBoardWaixingFfv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4E0870820E6458DC946E91A74E0DB8E /* NstBoardWaixingFfv.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C5A1264CC2E10DC15FD86C842D770914 /* PaletteTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 359183005A45F4DEB5018AB89576E560 /* PaletteTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5AB49D57E3EF7CD32C4E07A1A2DC017 /* ThumbstickInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC9DD621FC3DC24A24E27BD8B1C292AE /* ThumbstickInputView.swift */; }; + C5ADB3E8439A575CB85F2DC37DD3ADE2 /* NstVideoFilterxBR.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 39DE70D20BB766FDECB1A17965101839 /* NstVideoFilterxBR.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C5BDCB21A3BAADFBD6ECC0E1BF2B15F5 /* Context.h in Headers */ = {isa = PBXBuildFile; fileRef = A0F5D17654F47036B94A567F870E2CFF /* Context.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5F1C4A446D8769AF9535D1036A3E0E3 /* memalign.h in Headers */ = {isa = PBXBuildFile; fileRef = 63E04C5EE8B5C9B04E756F888630E85E /* memalign.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */ = {isa = PBXBuildFile; fileRef = 2446C10AA94654AF8E1C4ADEB9142AD5 /* pngusr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C64C503EB6132EC922D43AB0B27FD21A /* DepthBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = E2BAB81C3D77DEA7A2AE15BE082DFA95 /* DepthBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C669D2A2AEB5C8351795BD1BD61EC908 /* UIImage+Manipulation.m in Sources */ = {isa = PBXBuildFile; fileRef = CDA1A181F550D672CE3A7A747A0DCB7E /* UIImage+Manipulation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C67F326A6AF0E3C1047D6DC2008B71AE /* Event.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 19C0D312CBF5347DB0447CBF56BF1D75 /* Event.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C6B8C839FA0BF0A1AE168CC27EC12FB7 /* ftpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C52587C427298A7375DC3C3DADBC541 /* ftpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C6E4FBCFEF73B36D1A8501B5939B6484 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B121A5474D97495A9D2594CBE9B2C38 /* profile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C72087EDCF1BAE223A1BB8C94BA87329 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BB44A4386C6A18D5BEA9F5AF2E1EF0 /* Statement.swift */; }; + C794D4B738B15C7F096A903C21D39FC2 /* pngset.c in Sources */ = {isa = PBXBuildFile; fileRef = DD7C52A8979058368290D45755488F97 /* pngset.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C7CB102CC0A1B62D7A956BD46BC0C8FF /* GTLRDateTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BA56585EDD13E71C58B7B7C64DDB53C /* GTLRDateTime.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C7D9222C5D58945DF45292909C3A16B0 /* glsl_SpecialShadersFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = BEEFBD2A07C30B4B56078B86605B2E66 /* glsl_SpecialShadersFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7D9C03D29D663952B0B97466F107D12 /* GBADeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BB04C06267FD84AED09F6E677B3B3BF /* GBADeltaCore-dummy.m */; }; + C7DD70EC49EC3FC47CF6D741BF54B670 /* NstApiCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B02EEBF1E035A24BDB6410BAA13782B /* NstApiCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C8065BE8E7EE0A002B995608EA590F05 /* getopt.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BB52CE6A9BF6A1CFA75A61E1AFEDA7B /* getopt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C82B4ECAC9F24ABC6EFAB56B0CDEDBDC /* GTLRUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2119D6748E380E5815A3831CA3977A /* GTLRUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C87DC4532FB4EDA639952BE7DB5EA0A4 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 0011F0531529E83F54AAEB2C8A2969F1 /* Standard.deltamapping */; }; + C8938F662C069F5F0A31F1853DC14D2E /* GTLRDrive.h in Headers */ = {isa = PBXBuildFile; fileRef = 3144D27552079845BF5B0637FC88D62B /* GTLRDrive.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C8963BB26817BCC33E40F9AE8652DE31 /* NstBoardMagicSeries.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 62948F129BEF321213BDE3AC38E0CBDC /* NstBoardMagicSeries.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C96524CDB423028248FE52A069C84B94 /* RSTFetchedResultsDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 27AFE501DA9EA6202B3EE72F7468987C /* RSTFetchedResultsDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C9898D393FDF7E17C404424E76078E76 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51271E29C0A54F7A1326245A7BE21051 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C98B4D02BC0E57B4BCBF55318C7991CE /* RSTSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = D6619CB5190C33CD4AF481F84D29F75F /* RSTSearchController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CA52FE953A256B3FA7D63719284CDD4B /* Dictionary+Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1045871F90D4D454EDB4A2C75FE2404F /* Dictionary+Sequence.swift */; }; + CA76BE843896592E98D70D4C9937477E /* transferpak.h in Headers */ = {isa = PBXBuildFile; fileRef = 706DA94E13FDA915B64893FE9918C85F /* transferpak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CAA19D846835105188A3CCC602CFF800 /* InputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FC1CF3E36F8504F4DCC758CF61B97CAE /* InputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CAB565C736064CE66F49FC2F9939F653 /* oglft_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 58ADB3F7E23F3C6F3AEB1D5017488FDC /* oglft_c.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB0762ECE40307553CD674252738DE2C /* glsl_CombinerProgramUniformFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CC140E1F857FD727024B376FACB6D15 /* glsl_CombinerProgramUniformFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CB4D7CCAB208A3DB446872AD7C63A241 /* NstBoardIremKaiketsu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AAA8DF67E8C538AF865BB2D983391817 /* NstBoardIremKaiketsu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CB7A5FD2D111FB945D4C60F8F9CEB90A /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60E75825D0C5BBF73C1EE33565BACBF /* RTree.swift */; }; + CBD00AD2D050E606B432EF764F0443EF /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E672A1C13EE353B0AC39DE0F84A4323 /* FTS5.swift */; }; + CBFE788323DBFFF81708B579E642C550 /* plugin_delta.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7174246F378A58D37BD4927CEE3799A4 /* plugin_delta.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CC0725ACB5A40F203229C0A25D761B23 /* NstBoardSunsoft5b.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B5FF87A66DB9785A1AFFD395C49E2A88 /* NstBoardSunsoft5b.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CC26D87FA28610D70B4991837FDCAE5D /* NstBoardMmc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 87F4B88C0892C297B31AE94A0E93539C /* NstBoardMmc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CC71B7C78DFBA5A59F4A9F1260B6AD64 /* System.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1E5AC9B7C27792EF938FCB5C74BC658F /* System.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CC99BBC4FFD7CDDC2649600E0FA37564 /* check.h in Headers */ = {isa = PBXBuildFile; fileRef = 7887B596C85B88D5126C1D115B8C9582 /* check.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CCB42259A3740417E34809B42683CC18 /* ZlutTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 469D72AF2CB4C2BC1AEBC6D96997F695 /* ZlutTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD26AC8863B99B1389D09F13D85DC363 /* NstBoardSachenSa72008.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D58C0FE9AF63F39A0E7990E8ABEAA707 /* NstBoardSachenSa72008.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD34FCE9FB88953FDCD13328912591F0 /* GBAinline.h in Headers */ = {isa = PBXBuildFile; fileRef = C32EC4E1163CB30B4250829CC8FCC1BA /* GBAinline.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD43E632D8B976AAF6B22A9A83594BD8 /* NstBoardBmc800in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E350E01066A73585D9DE99D4C11B7C7A /* NstBoardBmc800in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD4EB69FB76C000ACAC265440D164A30 /* ThreadLocalPtr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F1ED211A27FC73A088DC43D3FF931A16 /* ThreadLocalPtr.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD80F55F2EB0D1ED46CA0003EF8683F3 /* NstInpPowerGlove.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D10088E315F5123F3D327A06066E206B /* NstInpPowerGlove.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD819361F1900AD6FB43579B9DCAA9BF /* NstBoardTaitoX1017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34347E5F18F11A1CEF5D0D59279705D2 /* NstBoardTaitoX1017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD821C3D00A559E41113DAF03124B0FF /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = B3703612D238CE733DA02FE1314443CB /* array.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CDD28AC1BB0F07E4991F10641F3B3ACD /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 73BCCFACB97ADF9811932D4767D83953 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CDF6E0B6206AF9A35A78A3C6D7E50BCE /* ftstdlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 70CFA30438DAE2DBE32611495D872EB6 /* ftstdlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE10DDDAE7EAF229186F72415E877A1F /* RSTLoadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 850505914251942B1C511C89AAFFF578 /* RSTLoadOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE77541D89641C7165E9A0A56ACC5B13 /* NoiseTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDEEF3EE5DBC5E579DE48E15CE14565 /* NoiseTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE8D08D29BB0A4769D2C276605AFB50F /* Harmony-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B551B63369A33A731AE3B25B4C7E772 /* Harmony-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CEAD3645EFC4389694E75CF1068CC91F /* HarmonyMetadataKey+Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBE3A12499742BD09D9EBD2B293371C /* HarmonyMetadataKey+Keys.swift */; }; + CED63E1AB568688A1C00CA58D790243D /* DSTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D61A2E3D2CCD4FD36DF6278A7CFE46A /* DSTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF14CB07724E28C9AA37889A92FFD645 /* GTLRURITemplate.h in Headers */ = {isa = PBXBuildFile; fileRef = D27C9AEA920B8065DC8FB0F6F92A6E26 /* GTLRURITemplate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF15A4FD0438274D29A83992C4D7A186 /* Result+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 707D301E564B6E14192946179A6F87F5 /* Result+Dropbox.swift */; }; + CF250F8607C7E5B37247613578134177 /* DriveService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3C156BDEC9D98DB4C0821812B71351 /* DriveService+Files.swift */; }; + CF31DD15B783DC030C99042424B72681 /* NstBoardBtlAx5705.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8FE991842BF4F0D0508BF1CDC5290400 /* NstBoardBtlAx5705.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CF652780A826660EF98D71D7CBD05BC2 /* GameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6DD6DB7B47787A5A8EA1D3325598F6 /* GameView.swift */; }; + CF85240AFAAECCEC4EED6E2AE3F565B9 /* F3DTEXA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF0DF7AF00BD39B06D1EDE5AD5FAF7AB /* F3DTEXA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CFB692A4993E0C91F447057DF39648E0 /* NstImageDatabase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1BCB1BC674B34EBE5044A5F4AC65BA67 /* NstImageDatabase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D0025BF44968B8EBA153B16DF6A7783B /* assem_x86.h in Headers */ = {isa = PBXBuildFile; fileRef = ADDD949ACAFD888D4958D62325464FC2 /* assem_x86.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D027F8D4E880D7092DB8AA5A02D7AAC9 /* CGGeometry+Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB52AEE6F8BD7BDA6E88E263AE184CC3 /* CGGeometry+Dictionary.swift */; }; + D0C55D7F18D9A49A467F0E0B8669B0B8 /* srtc.h in Headers */ = {isa = PBXBuildFile; fileRef = C790529DABD6E54A2BA3E56B1C845F12 /* srtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D10C97C4AB425B976ACAAE1D9CF6D55E /* NstBoardBandaiOekaKids.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 13CF8AB5A64D04015282404D80256EA0 /* NstBoardBandaiOekaKids.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D181DC3438FCD7E645A072E81889876A /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 882DA4CFDB38488363DB6FA79E5CF3BE /* ZIPFoundation-dummy.m */; }; + D1872BEC18A09543B94BFE0EAD273D61 /* GTLRDriveQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = A0A504E08A6B298395CDE7E0BC7FBA95 /* GTLRDriveQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D1D87A24D37112C4AE2EB188C51C053F /* OGLFT.h in Headers */ = {isa = PBXBuildFile; fileRef = C27BB3E37D9E25626486536CA6D1890B /* OGLFT.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1FDBA676483451ED77786AFE5AF47EA /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 618949190C9EE4497D8F00EDA7A856E7 /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D27C34B3B39EBA92E9B725D3797B698A /* cheatSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 79B10B2722F1132312871D229953F2DA /* cheatSystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D27F755D124E238008EB400F04D2E040 /* fxemu.h in Headers */ = {isa = PBXBuildFile; fileRef = 24E1A25642D89F5B30A1BB2FB864AFA7 /* fxemu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D27F8F70A73867B450D3D9CEF4B923E8 /* GBAEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B46E429745DDFCAA08E329F0BBAD9911 /* GBAEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D298FA6F6D28DD13D771BC71411D5851 /* NstBoardJalecoJf19.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 994237033CE941B5B49F4E0EC30ADD01 /* NstBoardJalecoJf19.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D299CCB9A5A6574C3B9776B6B7065208 /* NstBoardAcclaim.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6ADD780B3EFDC84E892E216A11E12B84 /* NstBoardAcclaim.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D2A37DEFD55B0BA864F27119BE974CB0 /* BatchRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0883789E4810C71ABF67BD6770636C52 /* BatchRecordOperation.swift */; }; + D2A71E3AD54E049A5C1DDBF12C93A2AD /* hle_external.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7D780A13B2915F46EF4226090CBCC5 /* hle_external.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2E7A94DA4EB51A3145F965B880B6F2F /* ContextSettings.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E10172E8D8CCCF9773BF6EA4BEBC7E05 /* ContextSettings.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D2F1CDE15B2375C94A421A1564AF13D4 /* eeprom.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E9F261B8796880679ECD1AF1FDC584 /* eeprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D31C73EFFED048D38F9F383BD0098DA3 /* DepthBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = DBCF759085E40951D39485BB214BB25C /* DepthBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D324B3C6609ABF310B5E1436F17C2BF3 /* GTMDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = FC141D48A65D77B26B9922807BD281CC /* GTMDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D386CE84965DC46DB052B5BE658BEB2A /* ControllerSkinProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DADD8386C8821177B764FB59ACB6859 /* ControllerSkinProtocol.swift */; }; + D3A01F05B185083B517E4626FDF3C57D /* RSTCellContentChangeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E57A55642D58F21D06BBD64DEA5CA1DC /* RSTCellContentChangeOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D3ABAE47C410AFEFE62EFF0A4B01988B /* NstBoardUnlSuperFighter3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4BD0DDE5441618EF592651345A1BB212 /* NstBoardUnlSuperFighter3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D3DEAD4C77A168D67D3EC458661D424E /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = F10F7750064142DE73F6F7454CC2983E /* GTMSessionFetcherLogging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D3E635DF7C5A3F831C0ED826B7EF3045 /* ftincrem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A5D80F4652B7C7C71549D654A6F22B0 /* ftincrem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3FF3FDEA482BBCE33A46B4F848933D8 /* TextureFilters_2xsai.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F714F0736F9866EDD6871679177CF33 /* TextureFilters_2xsai.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D409C376103600BCF90AEA2463CCEF6D /* m64p_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 38ADDB2045DD7DB1E4811DC4854871C1 /* m64p_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D409FD1F1DD00E6994F0308A8E0C0D3D /* svttcmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD4D6B9E5A8C737F812D9FE05776374 /* svttcmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D453E0EF8D2BCC7A9FADF4856AB23D42 /* glsl_ShaderStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 90696DCC98EAADB42AE7018A27D415F5 /* glsl_ShaderStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D47799D2FEF7EBAF1EEC0D02D279AE11 /* SoundSource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D17E68802F2F252D95693D1AA5ADC144 /* SoundSource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D4BBFE50425065DFEBA634F40C1E480E /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA62E018BD55A8B1DBF638C1BDE2C3B /* types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4E54F8583E6BD0B7E8D5C37D0268831 /* TextDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F8EFA2C77C87A2217F6683EB75926B9 /* TextDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4F4CED77BC0C96F563776174E66E619 /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = A0FED83361E402BB0547DB052277ECCD /* cpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D52D782E8B77295F31DAAEF79BFBABD0 /* NoiseTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6C840F168CC0216273566943F214F5 /* NoiseTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D5AAE75D370FC24FD284ADBB1EEC5445 /* sar.h in Headers */ = {isa = PBXBuildFile; fileRef = 15EAE2283516A3200D537010AA0BBCF9 /* sar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6501B43E8C5A97BD005573C1BF291EE /* UIApplication+AppExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D529199D3F461EACEE4D0D45FA961BF4 /* UIApplication+AppExtension.swift */; }; + D6A44C024915094BD0A87D4DFC412F6A /* cpuops.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DBAD979C7A7D60BB2463567CEF807D0 /* cpuops.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6AB41F528E0CBE33F26C2ECABEB070B /* NstInpPad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EBB1A01E856D7D91BD846C278311FFB7 /* NstInpPad.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D6B9F611C6D9C0C8CD854D4E488E6AB5 /* GTLRQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 4607BD69102AF97F0A85D6512B3409CD /* GTLRQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6E2B0F609F10E48830213BA053DB040 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 31C90C17DE46AAD6D2786B0098B71196 /* Standard.deltamapping */; }; + D721B239753D7F7FDDE916AFE3FCB235 /* opengl_Parameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EC841F694F3A53D5F5B027513353CD6 /* opengl_Parameters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D7374BAD47CD61AA924220F7A5043F63 /* cpuaddr.h in Headers */ = {isa = PBXBuildFile; fileRef = BABB271F3BD66B98A48FF2230E57E168 /* cpuaddr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D753580473283FA203738466F2939B6A /* AnyKeyPath+StringValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FF38B518700B0B715F71F0BA0F88F21 /* AnyKeyPath+StringValue.swift */; }; + D79A7F006A37B1D450F1B4520E3145D0 /* TxTexCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FB4CA94B76B2411E5EE78414D82B20E /* TxTexCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D808972D53AC615EC3DBB96E9B7517C7 /* TxDbg.h in Headers */ = {isa = PBXBuildFile; fileRef = EA340C7B4D3388A8450F9A24994AB881 /* TxDbg.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D808ED025C15643A9FD4FD11530825C7 /* missing.h in Headers */ = {isa = PBXBuildFile; fileRef = C8A210C3B60C6D8D12F6F8820EF28589 /* missing.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D81057F2081420DC4B25CDA39DBC3B96 /* GTLRRuntimeCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DEDD6511A23A74FFB52233C54AB8E03 /* GTLRRuntimeCommon.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D840CD895C00C5B1FF24F78ED7A72681 /* DSDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 712761EE4481E36BC7DD29218D12A6CF /* DSDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8524A5C842C0580F42718FE94C8F791 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42A9F4072A21C2D6095C0971EEC3FC1A /* Alamofire.swift */; }; + D853F1F532071DE2D4AED3E6608F2ED8 /* cic.h in Headers */ = {isa = PBXBuildFile; fileRef = C2ED97BD0F13C57ECCE6851D581326EB /* cic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8889A6910820C522D9EC5AE0F105B7B /* UICollectionViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = A706F5A8614DC9AF3A7BAF5EE08D7A37 /* UICollectionViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D896BE2637D4D0EE60FE67FB5B01F686 /* RemoteRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F994DCAAF05A0E4ADF9D352FAB0A16E /* RemoteRecord.swift */; }; + D8BEDCF49E6864FFFCE6F10F633F3500 /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = C73137BF8F38B56D677038CAFECF2A56 /* pngwtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D8CCD6B044F74A8D1C4DC7569527A1C8 /* F3DSETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 362727B8448D5ACBAA6199388904E6EE /* F3DSETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8E9FCCA464240BD9F53DE1BA3C90BB1 /* messages.h in Headers */ = {isa = PBXBuildFile; fileRef = CE46BF9BB2E03B58F53E69C87B3A1564 /* messages.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8F09E6FFEAEFBFFA69546C6F36EF74F /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998BCE1BFCDA316A894F5BE77EF92AD4 /* Coding.swift */; }; + D90EC0383E3C3CC3B40EFEA3EDD6169C /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = CD4250629F8C1D5652E021E52A3F196C /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9D4A8CFD5AEC9CB6CD5E416F08C8B65 /* svbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CE7BCBDFB3A9A4EBEA78CB70BFFB3E /* svbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9D678A3261AB86A7637EB79F73B0D27 /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1089BC73E36C74AEF372EEED122EFC /* GTMSessionFetcher-dummy.m */; }; + D9EEECDA4CC74FEDE82B29E37FF2C225 /* pnginfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8844375C652ED43B6CF8305EA32D5488 /* pnginfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA2B760E4D6E2D31F977E72C22441865 /* JSONDecoder+ManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9A3509FC2D34122712EB62CE66B6845 /* JSONDecoder+ManagedObjectContext.swift */; }; + DA2DA6C00C0EB1612EEEF2C30A494919 /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B69ECEA6865A9F1815D0B371F50D01E /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA9EC56A8CABDE13F39C9D32BC8F37F5 /* N64DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F84345A499EAE58FE864424329CC0465 /* N64DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB02626D12C516C4CD6A9EA98D20A50A /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F298C5D309EDC6DEBD36255472EF52C /* SQLite.swift-dummy.m */; }; + DB271162188B9FCB78E0150B0D2B6917 /* NstBoardWaixingSecurity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 61C1E3F8AE5D758C9D04B1A80F1A6C85 /* NstBoardWaixingSecurity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DB37D974F8E6FB9101F45E79F9AC3858 /* FinishUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 276E27532E9C2ADF0C058B16208B439C /* FinishUploadingRecordsOperation.swift */; }; + DB41B47B5BEAA2503BCEF6C2AAD2ED01 /* NstInpMouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6EC6A1A3D10181EB3D7A3F51FFA233C6 /* NstInpMouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DB4B31BA9A8CC6D815BB4F31E455EBA3 /* NstBoardSachenSa0036.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A4100365716D2689894AEB6AEEE7DDE0 /* NstBoardSachenSa0036.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DB5891014AF5583F4CE70D67063FEBF4 /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BED699E7391C1CA0477C2735B758007E /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB663E8C81B503B69E519340CFD0C66B /* NES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 963237A63667F4DD10B901754C2F8AB2 /* NES.swift */; }; + DBB21494E4A3EA8A6FF8B3085A328E46 /* render3D.h in Headers */ = {isa = PBXBuildFile; fileRef = BD2858200C2A47FC9A917133A7D25353 /* render3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DBF0A6C0BE990638F43CB71209C4E731 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 83433F387FADB6F93585B15C45F26C41 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC2B5FAE55CCDB0BAF6EC9CC3F2F95EC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5A838589A5289E842980290C10BFF17 /* RingBuffer.swift */; }; + DC55F0600EEC5E8DDFB1E3A6E633E92C /* device.h in Headers */ = {isa = PBXBuildFile; fileRef = 687441E742910C0DF7081813BECD4638 /* device.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC6D980DA6070C8E0E652312C90A57D0 /* svgldict.h in Headers */ = {isa = PBXBuildFile; fileRef = 77E4E93A1AA6AEE3A862BF83964C18B4 /* svgldict.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD439A1182CBF12FE98F8D4FB2B1F65D /* ftstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 821E332423194BD75B70F229D0992A67 /* ftstream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD4937FAD87A66D3E6AF7320226ADDB6 /* NstBoardSachenSa72007.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92E86921655A3432DD8E836D484C63DB /* NstBoardSachenSa72007.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DD620D1ACC965F9F33B8EE775A1C2929 /* NstInpRob.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52EF51E3091C9D586B56E01C7A9F0C53 /* NstInpRob.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DD965F38F3926F23D15FF807E4486928 /* RSTCompositeDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CD631F0A847D6AFABB4216480B7556 /* RSTCompositeDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DDCED74F45A4D745CCD7F319429DAD10 /* c4.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B7FEA4E81066CF6432FBD99B31C13B8 /* c4.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DDCFF8BD823EB8F9837DF1B4034FF1E8 /* F3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22E13ACA822EB61BEEF5DF35BDB4B13E /* F3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE128C6384EFDCB0627D9980E76E9E20 /* N64EmulatorBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FA41CF9BC943DB28A21577ABD2D7C6E /* N64EmulatorBridge.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DEA2456E9F8C9B4F29D544BFCF3E332F /* NstBoardTengenRambo1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 25F7A6B233074D6DD97705181306F479 /* NstBoardTengenRambo1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DF266745A6B1E11185D36EF99E10B829 /* F5Indi_Naboo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBF793539672A386F6C337B8667AE813 /* F5Indi_Naboo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DF7E34A9447E1503AAD895111E3BCBF3 /* bsx.h in Headers */ = {isa = PBXBuildFile; fileRef = 23C48688B8A512FFB646E121E3FD49DF /* bsx.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF99C4FED01516A806E69CEFC02A63B3 /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B33477F335E1B6177EC8672F22289C /* pngconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFAE2CDC207F2309CBB7EB0926066FDC /* TxCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C0B76FEDF3385F8F3AF9A682EC0E276 /* TxCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFBC1B62E183576C5A9FB35846F46CAB /* cp1.h in Headers */ = {isa = PBXBuildFile; fileRef = 254CC3AD77C6322C8CA4B65F52B9F198 /* cp1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFDD4A619790FBB12996A1A6A144E116 /* netplay.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E7E27D5ACEAA8A8DA1B1BD200ED75A2 /* netplay.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFE47A6A5129454BBE6488DA6493348A /* NstBoardAcclaimMcAcc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B137B57F8091633EB513C60304ED2C7C /* NstBoardAcclaimMcAcc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E028E6BB5BF11783165428AFB4371D2D /* ereader.h in Headers */ = {isa = PBXBuildFile; fileRef = BE88F0656454261D53E5BE768654A774 /* ereader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E045AEFAFAB999408460996561247AFF /* ftimage.h in Headers */ = {isa = PBXBuildFile; fileRef = 043B3C37DAA8DA3F93EF9856913625DF /* ftimage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0584F089FB27ABA38D5D355721DE37C /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EEADA9A5C4C5EF8A88BBC09B95C5F62 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0B3B5EFD0E958737E6D09B5135C5ED9 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E51C90A9B7B35AEE09669310AB15BED0 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E0C7D4449AA8C5D15535E79C43CAAA19 /* NstBoardBmcSuper22Games.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0A0F6D5E39D8F599381FA5E8BB34178E /* NstBoardBmcSuper22Games.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E0CD89ED735B076967D48760C0A1BFE1 /* sdd1.h in Headers */ = {isa = PBXBuildFile; fileRef = 99EB232B4913EA46C51277C86DF16B8D /* sdd1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E100B6C29C8EC1E8BFAE2435884A3FC0 /* tttags.h in Headers */ = {isa = PBXBuildFile; fileRef = 61596E997AFE32646B435FCBF43BA32F /* tttags.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E10B2C2CC334BEF5895DC4C950250177 /* Texture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 44D209BABFBAEF92A3A476D1046B160F /* Texture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E11B7AAF1933D8FF81EC1A4AA3B01862 /* L3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AA9AC2951C819D3D589F82FAD7F5A65 /* L3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E12B8F200ECEFDDF5544EFCFD880324B /* retro_environment.h in Headers */ = {isa = PBXBuildFile; fileRef = D1212ABF80224A615FAA8D5EA7127F55 /* retro_environment.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E19486EB42DE44DE94BA6D8BA26ADCD5 /* RSTRelationshipPreservingMergePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DF27D7E65CA1A9DC28C57F4FE6BD1B3 /* RSTRelationshipPreservingMergePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E1A2DFE668E3513F0D9B7761FEACB3A3 /* NstIoAccessor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0C9A66906E90E69652DE559EF77F4E9C /* NstIoAccessor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E21F9E3675CE2A5C2910F409DB690497 /* DBChunkInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A52DF3CA0011FA99AF644362B09A598 /* DBChunkInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E240D32BDB49F8E26000117E1792DA24 /* NstApiDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8C20A4261AAB5D4731891122D5059BB1 /* NstApiDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E24C77E406D608D65CF44CC758D79AA2 /* SwiftyDropbox.h in Headers */ = {isa = PBXBuildFile; fileRef = E248CA8F99CCB2FEEDCE6967354F7FB4 /* SwiftyDropbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E255C62B0C6D845C74DF1CFD04F0E7F6 /* F3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = DBC2FE16691E41109D7168B4B47BC729 /* F3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E25E5FB3CA97B41662F326DC6DFFFC0B /* DriveService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BA47FDD506E39A2EC6B9965BF416961 /* DriveService+Versions.swift */; }; + E30AE4CE714FCC551A4A3B0516BBC707 /* GTMMethodCheck.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C47011115A00E9556AC311099987E7 /* GTMMethodCheck.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E31D2295622D14AFDD069E14F5195C13 /* AudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62653D6633FD230F25923698824EFA8E /* AudioManager.swift */; }; + E35B0A7D23FC7611AAEEED1AF19073BE /* NstInpPachinko.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5A73FCE0E18FBE8EBCCEB74397FEC76A /* NstInpPachinko.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E36C54619AD747C9D5825D0F555BB156 /* N64Types.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ECDF285F3E093B02D0B6A530686B0BF /* N64Types.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E393EE012D54F6BB208480E720AE5752 /* GBCDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C838A28075396ED66AEF6F512BA0446 /* GBCDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E3C4CC0E44B8054138477E9731B4E454 /* ContactsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77CE0C99378A2FDADC3F70471D336C79 /* ContactsRoutes.swift */; }; + E46D10AADB66A01A9490A813CA496DCE /* NstBoardBmcResetBased4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 18EC95A3A3E3430E185F60F3BA643D4B /* NstBoardBmcResetBased4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E473810AFA4985FDC030B75DAB7E86A9 /* new_dynarec.h in Headers */ = {isa = PBXBuildFile; fileRef = 252CCD4194A312D6A647E0B27A002330 /* new_dynarec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E47A977F4840A1287E1A8645E6E560B7 /* ShaderProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = 74FAEBE92C3B0B35D90248D577885466 /* ShaderProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E4D06B0BA213CA79BD97BB9B611A2EB5 /* N64.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E9673A8687B4C246AFECBFC5FA4C2C2 /* N64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E512749AF7921ECA10C99B7DDADA916F /* NstBoardSxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E0B30CE96C7B045BFDBA33EE166DBFFB /* NstBoardSxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E5CE54C441C27992BB36CBA9A435245E /* KeyboardGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4185D8E6FDFC3750E4E3DCF897B9D2F /* KeyboardGameController.swift */; }; + E614C5D1F40EC77DAF23006BCBA8523B /* txWidestringWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E721311C13AE68B2699A1D4C03214451 /* txWidestringWrapper.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E64D998EAED81F2EA7850A2CDF71929A /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 972EE27803ACA015B384716D967BB02E /* Thread.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E6529D9E72DE5E7B788DDC6C3E148468 /* UIKit+ActivityIndicating.m in Sources */ = {isa = PBXBuildFile; fileRef = 136E40DAC7C29CAC860561C37A54FE9C /* UIKit+ActivityIndicating.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E66700479EBBBA79432AE1635603F5BB /* Socket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 14F79C2A5CD47627B9F83711162D50E0 /* Socket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E699C3C45914E11FE8A12647B4835CD7 /* saves.h in Headers */ = {isa = PBXBuildFile; fileRef = DD5EE72E5D4DEF927BEEE94D86725DC0 /* saves.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E6A4553281DA2987F949740F277ACA3D /* DepthBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D6B56FEC107675FBE484E18FB0578E5F /* DepthBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E6C3A0FCAFD428E5CFAA722D3F6190DE /* Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E38834C7999CFB2670ABDAE5FC71FEB /* Sharing.swift */; }; + E705953BCBCD13E17C23B588C4FD0457 /* FilesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2799783940A21EC2EE44D1A48F5758 /* FilesRoutes.swift */; }; + E73A1CF4FDEAF251CF9E242867E9E0FB /* state_osd_elements.h in Headers */ = {isa = PBXBuildFile; fileRef = 57934C5612E8312E8D46FB26A52FE946 /* state_osd_elements.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E73B665DFEE5B1EF941B915C2DB4D1EA /* savestate.h in Headers */ = {isa = PBXBuildFile; fileRef = D1BA7EA1AD9736CD11003C39C000C9C9 /* savestate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E75071EFE211B5377D34AB8A5893DCD7 /* NstCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 911F72B30958B16B6FC132BEFBD9544B /* NstCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E75F2EA53D0EE6628D5361A907AE8CEA /* UIAlertAction+Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = A7351AF200A2FE4130E42D7A321DA075 /* UIAlertAction+Actions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7637A711A78C8610C039170BE3A235E /* ftrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A9509066B63C4D1361D0CA4EA29B954B /* ftrender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E76913D63F4D790D0D10268C80819BC9 /* NstBoardBtlSmb3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7B7537D8181FB7C0E5B50CB7680E9967 /* NstBoardBtlSmb3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E7713FF7D1DDD0B5457A3DDC07D7CB64 /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DE84C1C459F13BAD44A6B87EDA3189E /* zconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E78529FBA5C035888371AE6EE12276A8 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4E004174F5A12104EA6702A90AC6D9 /* Helpers.swift */; }; + E7BADFB958A5706854C044DDFEE718DD /* RSTOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A51C15D398D2803874EB7297A0340BE /* RSTOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7DAB97FF4BB02EB9E4D2D45AD1CA9E4 /* arithmetics.h in Headers */ = {isa = PBXBuildFile; fileRef = C88191C64D7E8CE0EE4B4033CCB6D0FA /* arithmetics.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E7EC3140EF159F74774806784FFF92BC /* NstBoardWhirlwind.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 27B1FE69B14E33A7E6603FF648B30DFB /* NstBoardWhirlwind.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E7F970F940518CACBA50E29DA4566EE5 /* TextureFilters_xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48CCDAD2D88669095B44ED625F56D7D0 /* TextureFilters_xbrz.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E805858A4CBFC1A168C9A8320D1E4EF8 /* NstBoardIremHolyDiver.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0E65B447ACD8C0AD8B9540F69DD78D01 /* NstBoardIremHolyDiver.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E88A86B85AFFB8A723243AE866FDCFC1 /* NstBoardWaixingPs2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AB7866FC433C97398B3963C2270D52D4 /* NstBoardWaixingPs2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E8AD899B2BF52E2A3E657CD7A3A055E2 /* NstTimer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 315FF0E989ED5094C01E5CC2AA1F9C5A /* NstTimer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E8C165293B36E2F95AD7CBF511CDEA47 /* GBCEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9AF937DC01474311A2109AFB0EDA7D8B /* GBCEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E91BE4D2EB8ED606C86AEF158A993193 /* NstBoardOpenCorp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 160DE59B03218F24C3937D38923481FF /* NstBoardOpenCorp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E96D00DC7B3AE3762117697EF950BF00 /* mempak.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ED7DC207EA838F7ED17B7E0373391E2 /* mempak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9A4231EDE43DDF753AA878AFE8078EB /* complex.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D72B8F3909167EBE56E1BF0E3108516 /* complex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9B012F6B7FFEF993DEC81040FF08B81 /* TextureFilters_hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C95F862EEE33E2358C6B0273BBF456D1 /* TextureFilters_hq2x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E9D90305973DEDEC0F4BFB33B4281876 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 285001A3E16D55354667EDFD2BF69729 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EA259B2E1D0BB10750FC2236B155EAB2 /* Context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D95AA79C2C5088E9B27BAAA9444850C2 /* Context.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA3590DCCB30731B77907052E26D846C /* cexcept.h in Headers */ = {isa = PBXBuildFile; fileRef = 36E1F6E94EA1CBCCBD240A2819F591AD /* cexcept.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EA4B8C2B008C444AA0A6467EE33FDEE8 /* NstVideoFilterHqX.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FC91AA5FEFEE911BEE1FE8CBF90DC619 /* NstVideoFilterHqX.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + EA4BF15425C5527848AAD727B8E2A587 /* EmulatorCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE235836DD079740208A4AF1D7DB9F35 /* EmulatorCore.swift */; }; + EA7C86A456431D6BFDA337EBDA60E97E /* preproc.h in Headers */ = {isa = PBXBuildFile; fileRef = 72FFB39A7A98F30C88D79B8E0A8EAEE5 /* preproc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EAC867D60DB729E55A1ED540BD330F09 /* video_capture_backend.c in Sources */ = {isa = PBXBuildFile; fileRef = CF70FBCB7AE2CE5D532C4D3DDF618D72 /* video_capture_backend.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EAFAB542A9C64CFCE6CE22241E05F94A /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E793979C109E7302877C7903D7ED408 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EB3650269076DC4FC7CA23EF31B4A160 /* Glsl.inl in Headers */ = {isa = PBXBuildFile; fileRef = 3BCF0A222961A427CD39D1C78BD6A993 /* Glsl.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + EB57719B60503ADE6D81243AA7B99301 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 4805F8BC438B0132B2F50C26602B8DFA /* Standard.deltamapping */; }; + EBC516586457D8BA8B838FF0A74F6192 /* SMClassicCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = A6490A0F3B24176875D7C923ED9E0958 /* SMClassicCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EBE9D4C81C76E7547598DAB991A21C34 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = C9015E1D86DF0B2A7A1D22814920641A /* Standard.deltaskin */; }; + EBEBA0DA070991E8C4CA134F9FBFE535 /* UIImage+PDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00CE3BB55A661517FBF455927EB5D945 /* UIImage+PDF.swift */; }; + EBF46D8060558FA58B2E5CAE42467A6E /* ft2build.h in Headers */ = {isa = PBXBuildFile; fileRef = DB3A0F2D56E5C2399EC70F3417641DDA /* ft2build.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC0E44AC75CBA610CFBDB23601E6772B /* NstBoardSachenStreetHeroes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8F52AAB71856AE2D876485F77504BCE5 /* NstBoardSachenStreetHeroes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + EC22AD88F08651F1E9F9D07F1C6CDEE0 /* display.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1C41ECAFCB4B62AC6DB322A26DDBCB /* display.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC28DAD95829E5C9E6307A77F8F517FF /* NSLayoutConstraint+Edges.h in Headers */ = {isa = PBXBuildFile; fileRef = CF7ECEAEDCF30C5FD13208AF855EEF47 /* NSLayoutConstraint+Edges.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC4892F521D296F8A687A076AA68F1AB /* VideoFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6C6046F5260896D182C1590701A4C2 /* VideoFormat.swift */; }; + ECAB49B60B49C63B1566F162F02177CA /* NstApiInput.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9EF3AB85099AAD5C4A46D49D93BB46D8 /* NstApiInput.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ECCC47B233216A74153F147DE44615C7 /* NstBoardRexSoftSl1632.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D4E854B6ACFFE4EA1EDD318476D024D0 /* NstBoardRexSoftSl1632.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ECD62CC37167C9C1675F6D68D64E05C6 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EDC9128CC8CDBCC9CCCD7AA3E759AA2 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ECE457DD05BEBE57CFEB9DD0D6A9B21D /* FilePropertiesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40E721AC96D7B1BD5F1609F94C46FB1 /* FilePropertiesRoutes.swift */; }; + ECE94BF77F79C48917F76CFABFF51D4E /* F3DZEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36962E0BFCDEF7E1ED3272745C0620BB /* F3DZEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ED000A6A2C0F27F589D2F9F3F0454387 /* rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = 40FF365F801C636BEE21293A877B902E /* rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED1EED4992202FB7CF07EFE464320E04 /* NstBoardAe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CFA8EEA9986267DD4C9222F8013EB169 /* NstBoardAe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ED41FDC898B11C9B4481ECA58EBE978F /* wglext.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F83AE270F6F4A14D5507A9E883EFA01 /* wglext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED60DEB3E6681250967195F1EE82081D /* NstBoardFb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 504F1B8F7739C07C121A17267D9DC80F /* NstBoardFb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ED62B5E63342691AD8CA0BE9B1BF09B0 /* RenderWindow.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EACB3541C7C31D9C894C73A0F43BCD38 /* RenderWindow.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + EDC281DAD5A8204DB2E18A3FB2B5D725 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4871776B4C704E222EB93D062575DC5A /* Base.swift */; }; + EDE37315A04F24B57508A4D6EE128BE6 /* controller_input_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = F88461BA4787937B3DB690FE3C4F6561 /* controller_input_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EDEA3AD87DDC71ECD0952ABD1368A95D /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = 496FED89B31EF5869368A5EC4A3DE18E /* Service.swift */; }; + EDECCD20635BC41EB02BEF704D740AF4 /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AA3FD3271A56236EDAF6E49599021BA /* pngwio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE15E85924677183CEF51B41FA195E3B /* ftsizes.h in Headers */ = {isa = PBXBuildFile; fileRef = D04DC78D5A74516CF2BAD79E947302B5 /* ftsizes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE2019BF5CB64FFF4F1A0E423383637C /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = C538C31B2DE4BC6BA5C964106E5E3F6B /* GTMSessionUploadFetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE3023766DCA56C999E1855124ED9B49 /* GBAcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = C48EADCAA3A0151BF5347F5EE447CBD1 /* GBAcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE33CD64FEAC466A7824C75D33623961 /* mp3.c in Sources */ = {isa = PBXBuildFile; fileRef = D79C4564600E16C5D3087362DA9FB91E /* mp3.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE4994A811223017B6C5EE3AC8A4FDAF /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = 39319E8C5681BB472007926F7AAC4580 /* GTMSessionFetcherService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE4B56A8FD2098F2F49C84B564BDD404 /* PrepareUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61B9452797C7F91FF8966E5CB4C041E0 /* PrepareUploadingRecordsOperation.swift */; }; + EE6944AB9BC075F13C9B3948E6280260 /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 603DD39C57569C32BD836469768B346F /* String.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EEB84D1AB735724A00357534155CBAD1 /* EmulatorBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78B946BC5D71400B19D26F799662F808 /* EmulatorBridging.swift */; }; + EEEAE72A65DE128B59CA501731003600 /* crosshairs.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD2DEDB678D75D5ACAAB02F7DA550CA /* crosshairs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EEFFD918B4E699ED2974C0B2F35E9932 /* UICollectionViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = FBB4322FF7B456423D12A82C9A36F624 /* UICollectionViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF255A27386D9491CC62288BD9B6CCFB /* ftmemory.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B7E1EDF3E36A1AE901C6599B744E37 /* ftmemory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF5F3C860891664625225F32C4399ADF /* UIView+AnimatedHide.h in Headers */ = {isa = PBXBuildFile; fileRef = 276B3F3CC31F539687CB5B6AD102438A /* UIView+AnimatedHide.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF9C7D853BDDA0BCC0F895D47AA7437C /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 0DB5686AC4A3B7C73DBEBCB221B94109 /* png.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EFA0DC841E9880CDA5B1507E29E2E545 /* NstApiEmulator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 06F9614E94FCE209A55C8C7298C28ACF /* NstApiEmulator.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + EFA81C37AB1F59EE3DC9500238D24A10 /* Turbo3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 3745BEDDA1C724568FBE3D2E2D7E1A45 /* Turbo3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFD770F15B52B41E2DBEEEECAD735D98 /* RSTBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 75AB94233F995F253DFE0C50EE6C02A2 /* RSTBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFDB58D53DCA43CA1A9A175952CC0AFB /* RDP.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ED616369FCB01DA566D1197932686D0 /* RDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFEDD19659E080B7972B6EC2113D02A1 /* TxUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50A10752DB4054391124647027696A55 /* TxUtil.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F00226D59B11A277EA50376813104098 /* tlb.h in Headers */ = {isa = PBXBuildFile; fileRef = C9F883F7F8E0CC8223971F5D3F4E6D89 /* tlb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F007EE3D67A49DC33FE2A74392FEEE44 /* NESDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 75EA00FDDC420CBEEF57749EB105D75B /* NESDeltaCore-dummy.m */; }; + F01AD38461447D0079DFD168C66DB6C6 /* AAFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = F57889A91C00957E173557D366708F01 /* AAFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F03A441C530590BF7C1DF4B3D4BD675C /* NstApiRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6D3563437D8960176CEF09AD9B1291B0 /* NstApiRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F03CF428C71FCFA033C24776E54BA798 /* UIViewController+TransitionState.m in Sources */ = {isa = PBXBuildFile; fileRef = 400B965700434B3B4E0F9FAC08AD895A /* UIViewController+TransitionState.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F059D06F724A8A8C7BBDE111D491A11D /* t1types.h in Headers */ = {isa = PBXBuildFile; fileRef = B417E49B5B743092F1356B5AB9E555E0 /* t1types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F08F5F4EDAD9842D1AB41C448FD7ED97 /* NstApiSound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 447F33D4AC9DCC18BA8E7C821EB936A8 /* NstApiSound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F0C15DA7F5002FC0639540515DB2A332 /* NstApiVideo.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C7561F25DF5A13A37A67CFD89590E68A /* NstApiVideo.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F0C6CE8A84BFC2F818EA2389B0E54944 /* S2DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D2F36F994B2A734DE7746BB61880D92 /* S2DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0D1F35D36D80879500D7BC755F861C0 /* F3DBETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E42A2A695A512EFB1CAFA94A99A0F8A /* F3DBETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0E5B9CCB6926463DE3B74D3085F7A39 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 850B3AEB1917875997484AA3953B926F /* Standard.deltamapping */; }; + F1089B4808327FEC6230C3D66D26E64A /* NstBoardEvent.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C64FD116A93B9A66533D1BA551BF885 /* NstBoardEvent.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F12B7D9CA9CB9FB6C292DAB35BC315E7 /* StandardGameControllerInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DA0672F627BE87C2B50295FDE1FE14F /* StandardGameControllerInput.swift */; }; + F12C21D84E31915404415E94619EC735 /* BreakpointStructures.h in Headers */ = {isa = PBXBuildFile; fileRef = 37EAE6D3D608C9A5504D237AEFF46B37 /* BreakpointStructures.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F167CCE2838CD4DF3161F75877A2858C /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FC26E46646A054862FD9FA6A118709 /* Value.swift */; }; + F1A9E20B5E2A3EDA6E681DE782F1334D /* ControllerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE17B4BADFE9DF6A6CCAF0CF0BE25D9F /* ControllerView.swift */; }; + F1DCBDDEE6EC2B1512E4A288D7ADF679 /* GTMSessionFetcherService.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC5310CC574B1695D106EA4A1306618 /* GTMSessionFetcherService.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F22E08070AFC46B32347B32B2504F0AE /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 525B2A3CC0AB6E54AFD0C4CAE7B17B9D /* SDL_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F264D06A3A46BD2D13A1B902FF3D4B82 /* NstSoundPcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CDC648448D2BD63C7FA72EBB05BD53BD /* NstSoundPcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F28DDFAB4A2E61C4361B1F25F9FC031C /* RSTError.h in Headers */ = {isa = PBXBuildFile; fileRef = E5B960D0D3388F94E7D3FB7BA36C85C3 /* RSTError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F28EC2465A217A0417AE60E418AA1C70 /* RSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FFC7F34F90AC81DD006C798B7C5936F /* RSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F297900BE7AA8C84345754611015F8D1 /* NstBoardBmcSuperHiK300in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4DDEBD072685DD4E5D03FC470004711B /* NstBoardBmcSuperHiK300in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F298E311AEDA130784E1ED9899B35D3E /* GTLRErrorObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 68263C62DDF9F51529551BECBBD26620 /* GTLRErrorObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F2C3D5F056E937891CBDC532EAEE1987 /* NstBoardKonami.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 86A843DB560CD6D81B7EF3A9F6D8F5FB /* NstBoardKonami.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F33586928CCCB162321E60496A3DCA3B /* NSUserDefaults+DynamicProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = CABA30017D9761CD2D49BCA9F53E923B /* NSUserDefaults+DynamicProperties.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F35E35BAE2395E393B54B5F41F61F31E /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = ED84FF00BB1C75891DB73E5EC2DC19CC /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3C54A16E279E2FDD60FBA58FBB2B4AB /* F3DSETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DB5EBAC052F23A23935BC01F0F3BD13 /* F3DSETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F3EB20A92D49B9ED4E75EC8DBCD5AE92 /* FrameBufferInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 906947FD8A5D4B956AF6B2AB2C50E677 /* FrameBufferInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3F92D728EEA58B31C1366A8C3D2592F /* opengl_BufferManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E755BD7B9E84110CD165AA817987A71 /* opengl_BufferManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F461C36F53ED47D40DC15FB88FB3ADB5 /* ftdriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 546B78B239F8467F1682E4319F7B44FB /* ftdriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F473DE6E2DF0BA57A56F780ACA3D9E94 /* NstBoardNamcot175.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA04D2400A0F699B8568525360B9DF75 /* NstBoardNamcot175.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F47DE4860ED00EA4CDC661D662F1681B /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F77D5D789D6454A73C3D19E2727B786 /* SMCalloutView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F4808FD70D3BA8559604594D5674A324 /* ManagedRecord+Uploading.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1F489088240F6C610B83E8F77CB5B7C /* ManagedRecord+Uploading.swift */; }; + F4EF7512EED07AE5D1BAD5341F1F119B /* Lock.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A0C45B1398394AA1FEB5A3FCD517E92D /* Lock.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F54EE04CAD7C3199596833B62C4C5955 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DD00852D37B01767D028ED9AA2DDAD /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F565CC28410967B9FC16083B01E52FA8 /* NstBoardNihon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 96AF49FA9F387DAB2B33D0FB432E8FC7 /* NstBoardNihon.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F5872A78E0CA44A471473CFF9123D560 /* GBATypes.m in Sources */ = {isa = PBXBuildFile; fileRef = FD58112E62968E573B43DA1A9C5C1212 /* GBATypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F5A1CC355CA69B7DB624218176781D44 /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ECC067B82E66713A45C44F973FA04EA /* list.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5A792629C2A69A6ACE4916D514C5A1D /* clock_ctime_plus_delta.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D88D4AF63AF5783792687FAE3AD2BCB /* clock_ctime_plus_delta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5B0959C767055FB7465D5703EC70D68 /* NstBoardVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16A5B2FF145529F1248A848F882C8403 /* NstBoardVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F5D6D35D7781479FB2D95F3856A26F31 /* NstBoardBtlMarioBaby.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 89D77AD643D660EF8D5D89B0A70F143B /* NstBoardBtlMarioBaby.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F5D9DCDC448615EEC0C90DAF2C5C7E76 /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C79D85ABB10589F765DD64715EEEAD3 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5EB7545B62578D96DD78196C4A4261D /* mc.h in Headers */ = {isa = PBXBuildFile; fileRef = A495E80F9829E07964438D8A564E126A /* mc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F6022F4248018E1F466DE6310CC41E2C /* NstBoardBtl6035052.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 044F71625A7716601EAADFE8C6D579CA /* NstBoardBtl6035052.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F73B09692A1D8FBD4A33D1322CB8C4F8 /* UITableViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4659690ED156FCE3705F0C2B0C5811A4 /* UITableViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7594B37B464285DF07D893F8BB3F61C /* NstApu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 18341B6F300F8B0BA009FD1B1F7945DD /* NstApu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F7702D2569122119783ECBECBF0893F7 /* Textures.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AE64FC0F8676B00CF470337F5C202A9 /* Textures.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7AF82D1660F78BE791EF27F2F3D2938 /* PaperRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D72BB4EABA02D0C40C9847B11342161 /* PaperRoutes.swift */; }; + F7DFC08D8BF3B75E5D6DDE750D641962 /* resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 75A920E2918B272736AC688F14B6F096 /* resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F88F53D89C8D0B6EB6512F6FAE96128A /* pngpriv.h in Headers */ = {isa = PBXBuildFile; fileRef = A882E5AEFB5708D397E1EA06B9F5964C /* pngpriv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F8A64A92EC039B20A16655B109BBF437 /* ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B442DF315B83F5A22C5AC0D52DC6F788 /* ControllerSkin.swift */; }; + F8B9B69D4EE4EB38FF98385CD92BD358 /* Music.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 412BAE19C4FAEF8D92FCDC3FF9A59FED /* Music.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F984AA7029A105CBC169C0E24725E036 /* RSTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C7BC48F551C51325F8E971D1377D2A8B /* RSTConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F98FA998AC2986864A31A3383D9F6757 /* NLS.h in Headers */ = {isa = PBXBuildFile; fileRef = 035FBCDBD0BE435F0A0EB32A2C22FAD3 /* NLS.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9F08CA61836853CAE7455D76939D98B /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6A19232BD176F1842FA9413EF58EAFB /* ParameterEncoding.swift */; }; + F9FF13C1512AE6877E9661CF438EC88F /* ftwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ECA7AB7A3076AA6E4705CB0523A2472 /* ftwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FA05D0CC05B23D7027D8C3FEE24C690D /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = D91579E22C2EC7BD86DF031990A153A9 /* opengl_ColorBufferReaderWithBufferStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FA577995260851815A34580C95A493FE /* GTMMIMEDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 013B228892127D085A9A12736D33F540 /* GTMMIMEDocument.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FA7E71D6ABC8350D6902714609D30179 /* N64DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EA3DF2BEE5BA3A560AB2D24010A1910 /* N64DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FA9B5DF268C458C80AA79A7FBD2A08BD /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 930C6159C2738B8427010914FE6F8715 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FAC36F11FCA18D96655C0EC43BA109EC /* UICollectionViewCell+Nibs.h in Headers */ = {isa = PBXBuildFile; fileRef = 57D0C008F4F6ABB93A720C171837F7EA /* UICollectionViewCell+Nibs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FAEE64ADE6B20CAADC50E71E09808DD4 /* slot2.h in Headers */ = {isa = PBXBuildFile; fileRef = A17100E42D3DFDAD4EC4195E2444448D /* slot2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB429DE7183465EA3908DC0EFC0E55B8 /* NstChips.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 703D2463A2508D59FAA3694C995EBC4E /* NstChips.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FB431B0FE84CE918B28A6CEC02DF7FEA /* RSTActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E75AFF4F05B942A1BEDA96CDD1D5F6E /* RSTActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB52AF561DF1EA42175BB097A4ACC4CE /* F3DEX2CBFD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49EA3FD213D039FCC91628BD8DD260CA /* F3DEX2CBFD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB53448735C698828655BAC4D9CD8EEB /* NstHook.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E4DF6912B7B427759D8C33E248753DBD /* NstHook.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FB7693DF35B3F75D556BADB4277A204D /* NESDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 46306F32408FC6EFC5F89D8105542A30 /* NESDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBB46230897F3CE417083A50F260DC62 /* NstBoardBandaiDatach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2FE159CB1A275ED4531A3B1AEA807772 /* NstBoardBandaiDatach.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FBDC8F8F17CA21DD799A231ED4C63221 /* glsl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F9D3C122510252E5BCC49CBC78D15C1 /* glsl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBE89F87882A3EF8E629A5FF5CA465AD /* Vector3.inl in Headers */ = {isa = PBXBuildFile; fileRef = BF94EC77DBC5DFAC5751843F5F04C129 /* Vector3.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + FC17266254EDD27F76B52F2DFAE02BEB /* NstBoardKonamiVrc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 14D21BDF50EDC8CCA4B82562FA4EC1E1 /* NstBoardKonamiVrc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FC4AFADABFECA8B929C84039869A806B /* NSLayoutConstraint+Edges.m in Sources */ = {isa = PBXBuildFile; fileRef = 80D87DDEE1CB809E00A47151D677F57F /* NSLayoutConstraint+Edges.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FC7830E121F5F72FCCBB725FFB1955EF /* clamping.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EEE51D19958A4CD2ECFD5DA1245966E /* clamping.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FC88917194482589C32FDDE107659F9B /* DropboxClientsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4CE4627B8A26D8EBCF531C808BA677F /* DropboxClientsManager.swift */; }; + FC88DE967A3DA743DC5161E747CDC20C /* GTLRService.m in Sources */ = {isa = PBXBuildFile; fileRef = D1221EDCBBEDA9035D0C95CAE7F9D52A /* GTLRService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FC901AE65E0FBF69936AE0909DE7C2FB /* glxext.h in Headers */ = {isa = PBXBuildFile; fileRef = A270C7CB63DDB996D27A472D7B07D460 /* glxext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FCCF2FA5A8D8593F791CD74984F915F5 /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = C5E44048879A0504939654F65166654C /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FCFB664196AEF0AB4F9D49044093DACA /* Text.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9995950583E5F1398CF81E042701C6E9 /* Text.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FD2F6B87B0C2E2B0F286279E623668D9 /* NstBoardJxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FE1983B3232B47585D4F61AB506D3B3A /* NstBoardJxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FD6339A963EAC26477FD04D0BFAD9996 /* srtcemu.h in Headers */ = {isa = PBXBuildFile; fileRef = BF56520AA924EF4F971217A9D8F49143 /* srtcemu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD8858F32C89A15506CDE5FEEED204A6 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = D77D2A132FCC17A3824D7EE83B27B431 /* plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD9074443C03E8B90BBED9A42541D442 /* UdpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C2A0EC04B2612AA6AB035B6AB1B3FAE8 /* UdpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FDAED0747D841ECFEF580516B968E938 /* F3DFLX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3928A50878B4620930E776643F68B21 /* F3DFLX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FDEE9F98E235CE8E3A2A29186FD3901A /* NstInpFamilyKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8CC8FD6332B53E6AEADA551A3042A681 /* NstInpFamilyKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FDF30A650ADF0FF5E6748D29AA81A2BE /* sdl_key_converter.h in Headers */ = {isa = PBXBuildFile; fileRef = 595E9C1882A362C695C4D22B2193663E /* sdl_key_converter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FDFC423A4243CFA179481946B523C999 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6822483789D6B6BB133ABB5446BCFF2D /* Setter.swift */; }; + FDFEFE7BFC83D62ECBF5728AA1F5CD7F /* osd.h in Headers */ = {isa = PBXBuildFile; fileRef = 114C1CE8166C1D5EE54BAA6E9086C965 /* osd.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FE0FA27784515E14FED461B1ACB0D5AB /* ZlutTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B61F4F596E3EE98C9853A96F05AFA5BD /* ZlutTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FE66ACE5CA4F217211189D67E353E0E3 /* Err.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FDCE262FF472DECC637657F3849A293C /* Err.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FE6E40D309F0B3DD2EC97258D2B80C79 /* Keys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 372F8BF3EFD0B4F1ADF3AB6EDDFDEB86 /* Keys.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FEA640DE0115214A9C6F9F674F56194E /* RemoteRecord+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F2667D8C1F3EC7F5E7989CBAD0B8281 /* RemoteRecord+File.swift */; }; + FEAB30060313E7D45EDA78B37A4A860C /* Log_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = E8F9CE0B18CCD8E71B4B5EDEB0D0C864 /* Log_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FECF1DF017DE2F169EBA719FD4D6AC21 /* cart.h in Headers */ = {isa = PBXBuildFile; fileRef = E0F23910DDA9040638B4A63EABA0CE82 /* cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF31B5BBE13193F204040DE66FF15F02 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = F48A69F12EAD2BE3BAAF57DC1FBC2F40 /* Request.swift */; }; + FF3F43F568A4324F4CFCA6034F0EFE72 /* vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E1BF418C0437A40B1C3B3582AB50F3E /* vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF47124336E697A518CE2C93B8E88C2C /* GTMGatherInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = E0987B780D382225AE82D80ECA8C0641 /* GTMGatherInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FF52A333ED5E1B6EBA938D3B010BCB0B /* UIScreen+ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 422BF12649973F5EF2DBFD89FD150DC9 /* UIScreen+ControllerSkin.swift */; }; + FF60E30A8C317F1FB539F1A815BBF38F /* NstBoardBmcGamestarB.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C8B1D8C461900C12369DB3E2AA13C08E /* NstBoardBmcGamestarB.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FF64C067DBF8F76E97824763C8259B99 /* RSTCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D0054F15C9016C2A58C9AD3B1E55E4 /* RSTCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF971B9F9F993B9F74611546EF606135 /* NstBoardBxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 12D394DD2EB99C510D854AD5F7D8D01B /* NstBoardBxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FFA9968DD49CF535DFA48AC9E948F1AE /* NstBoard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 82DC27EAD4860B5C690A7972067D9F11 /* NstBoard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FFB1135FEFD4153A7DB3BC2BDD598710 /* String.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4DC0729F6C80B77D9248BFEFE0B0F039 /* String.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FFB60CE26BC4B7CC1FB0A8E9DA386F70 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 85CA254539B604E12B65C0315AD84D21 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FFC60D90E8A926004701D722087AB6F1 /* RSTSeparatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 163295C6CCD961D42E5E5F2EED6E2FD0 /* RSTSeparatorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FFE3DB6ABAAAF0F990D802469CE319C5 /* GoogleToolboxForMac-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E60A18A1E9B1D77A5D5CAA1444A18D /* GoogleToolboxForMac-dummy.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 6C6C6C97F64E04C488883D41F3B8ACAE /* PBXContainerItemProxy */ = { + 08E49A14C0B820DC65E9EBEDC8FD26D2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 8255DC44888E72385E107E69A662CE38; - remoteInfo = SMCalloutView; + remoteGlobalIDString = 141E2D29C29A1BC1ABA3483321DF3C88; + remoteInfo = SNESDeltaCore; }; - 8E7698B52D2059768B1D3164B1C50201 /* PBXContainerItemProxy */ = { + 19192073D8CD75A03CE029974259BDE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = ABA9A411BB5A359862E5F1AA6238278E; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; + }; + 208F89A2FB20B32BE8EFC4DCFB94C0F4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C0E41540D6862472ED7F2FA11669BE1F; remoteInfo = Crashlytics; }; - A0EEE75B0AC8B823DF4CFF5850DDDC57 /* PBXContainerItemProxy */ = { + 298D76CD321EB0D6C48A27C84D848723 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 498BC38C077C48A416BCF96644AC3CA1; + remoteGlobalIDString = D7958E869B6C0073DB3025514393D7A3; + remoteInfo = GoogleAPIClientForREST; + }; + 34B215C21519BEE50F2B57C914617CDD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; + }; + 392DBE454CBCA00260718AED61FE380D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = FF39B7A1D9F00620D9F56635ABBB2C03; + remoteInfo = SwiftyDropbox; + }; + 3B8363B7FD833F1636CD3973BC69E237 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0FAC8C4777DBD31221FE57848CB5F759; + remoteInfo = NESDeltaCore; + }; + 4385B12AA0B20D01F6C776AB3FDDF01A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; + }; + 5C8E1AC123E1190B28C3D74EC312A900 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D676E21115185671D7258A56944ABE98; + remoteInfo = GTMSessionFetcher; + }; + 607EED20C10A262BEE57DA6EAA244FAA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; + remoteInfo = ZIPFoundation; + }; + 659353ED4A7AB491D7F388255FDB55AD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B5D1BA64AC676FF46408FCDE19A05767; + remoteInfo = Roxas; + }; + 66BE2C6B403019BF36ABAD1493446E37 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D47C581D39D227080F83B16A22A56664; + remoteInfo = GoogleToolboxForMac; + }; + 69A8B982C834715530BA23F9E542717F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = ABB048B191245233986A7CD75FE412A5; + remoteInfo = Fabric; + }; + 6F0190E1AA86749B64954DAE1DF61FD8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5CB4163F0A6D4BDE0A490758A78BA43D; + remoteInfo = Harmony; + }; + 7BFA61EA67CFFA199F2E37A65BA0FFFD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; + remoteInfo = GoogleSignIn; + }; + 7E6CB180472EA40C403421180C2A18B7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E5449403CBE67599315B4D26019FA175; + remoteInfo = "DSDeltaCore-DSDeltaCore"; + }; + 85A4548E1EA8661D090B8346F0C0C747 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DCBC8D45C727B1472F26E79661AF11B0; + remoteInfo = DSDeltaCore; + }; + 916694214CC7D40B5C688E8E1B8BD383 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3F2C1776D90B62B156DB52C41A5C419C; remoteInfo = SQLite.swift; }; - A13D9932D0BA78F5A2C7EE2F0A0361A1 /* PBXContainerItemProxy */ = { + 917C63D909EFB5E156F1D8438E1DBF3E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 59CEC038954929A6B36EDBE49EE01791; - remoteInfo = SDWebImage; + remoteGlobalIDString = 6538136F848A07F507372CCFB40CEB88; + remoteInfo = "SNESDeltaCore-SNESDeltaCore"; }; - A8594898CAC294C1CF9878F1909D5A39 /* PBXContainerItemProxy */ = { + 91865C2EEFB2A47CB3B4902798E4771F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = D35E9EC86D36A4C8BC1704199FDB3552; - remoteInfo = Fabric; + remoteGlobalIDString = D47C581D39D227080F83B16A22A56664; + remoteInfo = GoogleToolboxForMac; + }; + 918A60A2153F498B0B255F27E3B94F69 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB59C68809324297BEDAF0CC3F931B27; + remoteInfo = GBCDeltaCore; + }; + 955F4B2D4BC59033DF863D57B227851C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; + }; + 96E675967EBB0C7F8B3627784533133A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D20492B6476142DCA0C455340876BB98; + remoteInfo = SMCalloutView; + }; + A3FED02D30B0F4EBB6DC19236150B5C3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; + }; + A86E9AE4C08786BEAA77EF17CD90CB3B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 890229DC8DCC9C43917568A0C4502FCA; + remoteInfo = "GBADeltaCore-GBADeltaCore"; + }; + B0BF40D28D6E234E553A0ED8A549FD38 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; + }; + BA76C622BDB4235F75B294BF13275ABE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; + }; + BE77B86928874033E4E09D8C9ADD66A9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 126073BF5D2BF3A4BDD22FE9062C9D20; + remoteInfo = N64DeltaCore; + }; + C253B6663FD70B1548A43C630EFBD147 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 1B47E46598F87113B00B3B25BBF51B32; + remoteInfo = "DeltaCore-DeltaCore"; + }; + C362C591F7ECCE9A372B69F1B110636E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7F839870ECBE0065B4BCC02E5F98F48A; + remoteInfo = "NESDeltaCore-NESDeltaCore"; + }; + C6636E070B3DEB95C17EA6632E29A801 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; + remoteInfo = ZIPFoundation; + }; + C8E5EBBA48A65677D814EA8555DD214D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = FF39B7A1D9F00620D9F56635ABBB2C03; + remoteInfo = SwiftyDropbox; + }; + CD579FC09454B036337FF5A32B4DBB2E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; + }; + CD68A8251278E73BF058DE4CAF902C13 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7056A67459B0B8B62FACACCE167546B8; + remoteInfo = GBADeltaCore; }; D465047540D12FD9D95291AE82A76DB9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = D35E9EC86D36A4C8BC1704199FDB3552; + remoteGlobalIDString = ABB048B191245233986A7CD75FE412A5; remoteInfo = Fabric; }; + D9246DA49C6124866A85E13C049C425F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; + remoteInfo = GoogleSignIn; + }; + DF19AABA87BA7620652F0602A1A445EC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D676E21115185671D7258A56944ABE98; + remoteInfo = GTMSessionFetcher; + }; + E00034F4E269D670A3F53FB95161556D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; + }; + E055DEA7C7938B0F8B215158723BCFAC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D7958E869B6C0073DB3025514393D7A3; + remoteInfo = GoogleAPIClientForREST; + }; + EF595E5FB07F405B2D9F4C94D4560005 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 38A3E6A4A13E8C4E975336840145C119; + remoteInfo = "N64DeltaCore-N64DeltaCore"; + }; + F67700E89740C8E29D211A0AB1F167FB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D676E21115185671D7258A56944ABE98; + remoteInfo = GTMSessionFetcher; + }; + FACAEB8C576AA15FABFC8222548EEC2A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; + }; + FC9F6032803826BC09AF6A35BD043AF6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B5D1BA64AC676FF46408FCDE19A05767; + remoteInfo = Roxas; + }; + FE3183C8BBCDB1BDB2299370415670AE /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5C36E65AEF44273E4AF0CBFADD00C090; + remoteInfo = "GBCDeltaCore-GBCDeltaCore"; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0042FABF23BCC8AE231804A1B58905D7 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - 0D184FAE58B12834B5A6C93F074DE049 /* SQLite-Bridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SQLite-Bridging.h"; path = "Sources/SQLiteObjc/include/SQLite-Bridging.h"; sourceTree = ""; }; - 0F228AA98BE5866CFAE0F0D30EB37C40 /* Pods-Delta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.debug.xcconfig"; sourceTree = ""; }; - 126591F57D0CB50EC78CF33F2CA8BB94 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - 16AD8BE137CF5134F1F9CAECAB092D0F /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; - 1D417D1C8F981BDBD3BCD1129B317885 /* SMCalloutView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-umbrella.h"; sourceTree = ""; }; - 213FDF57FB610B0D58B20D5B862589FC /* SMCalloutView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SMCalloutView-Info.plist"; sourceTree = ""; }; - 23CCE08242B847BF937E45411C0C8BC2 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - 25C681FF70FBDB38BE4E9985932A2DDB /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 27481C6D357244C4612075512CD4E5D9 /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; - 27F58EC380D65ED2D91C2B3FBB4796A1 /* Setter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Setter.swift; path = Sources/SQLite/Typed/Setter.swift; sourceTree = ""; }; - 28356B989708A3595DFB32F0319FDA52 /* Fabric.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Fabric.xcconfig; sourceTree = ""; }; - 285643C4919E4B805509E2B8BEF5468C /* SMCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMCalloutView.h; sourceTree = ""; }; - 28E53C4E2B859FB0F3AB41F90491442F /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - 2A534C5732905AB6F2146BA7370D2B00 /* SQLite.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SQLite.framework; path = SQLite.swift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2B0C7318DD9E2481D970A30CF7F288C2 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; }; - 2EDA333D943E4E0EB5047909F6CAAB4A /* Pods-Delta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Delta.modulemap"; sourceTree = ""; }; - 32C8ABFC4E4EFE14DB669561D16037A7 /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; - 36F8B3FFE11DF0BA01F89DDC41EB0FC4 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; - 3C2131CE481E7D30B9606151BBF1D729 /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; }; - 3C32D273940AA5A97C91B8501CE9F723 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - 3C50EF6865D44DC9803F1FBBDF61EF95 /* SMCalloutView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SMCalloutView.modulemap; sourceTree = ""; }; - 3CD9C57AA430063838E3038BED77BD91 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - 3EBFC4EB67413742CB79FCC7FC8D5257 /* SMClassicCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMClassicCalloutView.m; sourceTree = ""; }; - 404106DFFE34F8AC16769E44E010CD98 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - 40D249D35FEC446C77F6087257E44AA3 /* Pods_Delta.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Delta.framework; path = "Pods-Delta.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 445CD4935C10B23DF4EA5B3D48921AA9 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - 45A5DD932B003E8A3E43F79488A1713B /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - 45BCEA050A2002A5A1DE97CA813E551C /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = Sources/SQLite/Typed/Schema.swift; sourceTree = ""; }; - 4A667F7211D199491C264ED965473751 /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; - 4E100C1072C98BBDD556C71D3A44F1AC /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; - 5266E6AC21119A2F6D7CBB2F0531B24B /* RTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RTree.swift; path = Sources/SQLite/Extensions/RTree.swift; sourceTree = ""; }; - 55DB860DEB304E65F48A399F9CA9E6C8 /* Pods-Delta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.release.xcconfig"; sourceTree = ""; }; - 5B6AA374D927B81DEA0F30AA86930BDC /* Pods-Delta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Delta-dummy.m"; sourceTree = ""; }; - 5FFC5C409EC4A4E1513C0BB87A38EAF1 /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; - 6022E5A2546035435A6CA0B77B4E913C /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - 63387FA3C046A9A94BFDCB460BD4DAA1 /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; }; - 67D7D685D444F51160997382A18CB2F6 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; - 6D95D06B03F1236A75C4B3438D6A261A /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; - 6D9722B6572656EDD99F3885FF2CD57B /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; - 6DF20E040393CF0169E55AA7BEF796CC /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - 6E589067F42825289B49470E6D03705C /* CoreFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreFunctions.swift; path = Sources/SQLite/Typed/CoreFunctions.swift; sourceTree = ""; }; - 6F24049036184F6C48F249A5B6253492 /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; }; - 72BB337B59A2CEA23D4961C3F3C0E97A /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 7335CDCFC53B999B267FD34E74550BFB /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; }; - 73A946CFE9CEE3C8B7F693B79355FF25 /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; - 747DF5036D5B1AF4BB24A0295D65E8C8 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - 750348F790A5ACFE008C6E466AB7533E /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; - 75585559E7EF12E47AE046D6D662D5AC /* Pods-Delta-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Delta-Info.plist"; sourceTree = ""; }; - 758C49353241043B25CA2DA067D54181 /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SQLite.swift.modulemap; sourceTree = ""; }; - 78712328292CDF1D74FAE866EC09998F /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; }; - 7873DC018C1572363B53D537E83113CB /* Pods-Delta-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Delta-acknowledgements.plist"; sourceTree = ""; }; - 7A6F80F92D848D13B284F46B6AE9E161 /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; }; - 7A90710E9C9E2359B7A1AD689E8B574E /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - 7D120D250C6A4E9255D95AE39889C0AF /* SQLite.swift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SQLite.swift-Info.plist"; sourceTree = ""; }; - 7D80B5E10130514F611C2DAC7DBCBF10 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 804D470AF6CF5C32B21B6115DB39EB9E /* Blob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blob.swift; path = Sources/SQLite/Core/Blob.swift; sourceTree = ""; }; - 80BB2EF0C80BBC568430946BC608BE98 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; - 8287279FDBC1F39F1997993078F4BDE6 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; - 832E61F68FD6639801EFD03761EECDC8 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; - 8CF2A82A6BE421825EA3849F3AF92208 /* Crashlytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.xcconfig; sourceTree = ""; }; - 8E4CFA769DF2C67035D7112B1EB6A2FB /* SDWebImage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage.framework; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 92205B459C5D65077E421E8C347923B1 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; - 92B8A15FF702EA833607E1FC956DA373 /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; - 96915379C814B2C0DFB3A4D10F393265 /* SMCalloutView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SMCalloutView.xcconfig; sourceTree = ""; }; - 989354F9119F028A77D53BE02742B159 /* SMClassicCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMClassicCalloutView.h; sourceTree = ""; }; - 9B4F3B733E1F34DA5AE98B7AE0A5C0CA /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - 9BB0462F6701B4A3E0EC06EC6E6DDACE /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - 9C6511427F0BDDF36A014B01678E1E83 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; + 000CEE30E84D661F89DA9650593A2099 /* PaletteTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PaletteTexture.cpp; sourceTree = ""; }; + 0011F0531529E83F54AAEB2C8A2969F1 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = GBCDeltaCore/Standard.deltamapping; sourceTree = ""; }; + 0017998E6980B0ABDB2A24D94074549C /* interruptrequester.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interruptrequester.h; sourceTree = ""; }; + 003176C08AC98F4C379054630CCC40FD /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; + 007B238BA4CBDD19AB8422150260B200 /* SQLite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLite.h; path = Sources/SQLite/SQLite.h; sourceTree = ""; }; + 00982E0E1F8B1E95963CDA563EA3D799 /* DriveService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Records.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Records.swift"; sourceTree = ""; }; + 0098D6E2E55E4CB590673ABF30CBCFF6 /* RSTPersistentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTPersistentContainer.m; path = Roxas/RSTPersistentContainer.m; sourceTree = ""; }; + 00CE3BB55A661517FBF455927EB5D945 /* UIImage+PDF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIImage+PDF.swift"; sourceTree = ""; }; + 00DDAF44FCEF1DAE01680CB1290E8DA6 /* osd_element.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osd_element.h; sourceTree = ""; }; + 00E1CE975F5DF9EF52286A091470CE4D /* audio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = audio.h; sourceTree = ""; }; + 00E83FB8FE257D431296C57164DBCE71 /* FetchRemoteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FetchRemoteRecordsOperation.swift; sourceTree = ""; }; + 00EA19D2D4A64B523C65C5C29699ADC6 /* SaveState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SaveState.swift; sourceTree = ""; }; + 01082497DDFB3641F47D167E3C3EB389 /* GTLRDateTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDateTime.h; path = Source/Objects/GTLRDateTime.h; sourceTree = ""; }; + 013B228892127D085A9A12736D33F540 /* GTMMIMEDocument.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMMIMEDocument.m; path = Source/GTMMIMEDocument.m; sourceTree = ""; }; + 014989F31F4E364C9128F07C0637CA70 /* SMCalloutView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SMCalloutView-dummy.m"; sourceTree = ""; }; + 01B378B099C14E4E827FCBA843C08674 /* Color.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Color.hpp; sourceTree = ""; }; + 020829DABC4B34F0B103CB44A86B1E02 /* NstInpExcitingBoxing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpExcitingBoxing.hpp; sourceTree = ""; }; + 021152EF65B7FECE3238545205BFBB9F /* ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist"; sourceTree = ""; }; + 0236ACAAE07BD9A1FA670BDBDADC0D30 /* N64DeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "N64DeltaCore-dummy.m"; sourceTree = ""; }; + 024F3CDD3E74EDB4AB9DEC89AC1A8D5E /* NstVsRbiBaseball.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsRbiBaseball.hpp; sourceTree = ""; }; + 025953BB492B1D55BDA573CAC6CE9000 /* boolean.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = boolean.h; sourceTree = ""; }; + 026273C8CD9BD9384803DD59CB45DF96 /* GTMDebugThreadValidation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMDebugThreadValidation.h; path = DebugUtils/GTMDebugThreadValidation.h; sourceTree = ""; }; + 026AA711C2DD33D8830708741F80F0D5 /* F3DAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DAM.h; sourceTree = ""; }; + 02871D18AA28905E1FE181B4AEDAE388 /* AboutDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AboutDialog.h; sourceTree = ""; }; + 02C1BEECEC397F5E91934D66DFFF7686 /* NstBoardSunsoft1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft1.hpp; sourceTree = ""; }; + 02F79C936D7C91B742192824860F638C /* recomp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = recomp.h; sourceTree = ""; }; + 0307F4D94070F2E4674AD03B8CE79D58 /* SyncProgress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncProgress.swift; sourceTree = ""; }; + 035FBCDBD0BE435F0A0EB32A2C22FAD3 /* NLS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NLS.h; sourceTree = ""; }; + 03655DDFBA2609D8DEA72FDDF988AD58 /* RSTSearchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTSearchController.h; path = Roxas/RSTSearchController.h; sourceTree = ""; }; + 03724046BA5C3704C4607F3025370078 /* NstSha1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSha1.hpp; sourceTree = ""; }; + 03792829FDEFEBCD237AD95762EF484D /* RSTPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTPlaceholderView.h; path = Roxas/RSTPlaceholderView.h; sourceTree = ""; }; + 039A7DC666394A7FCDA8D0587DD80EAD /* Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Files.swift; path = Source/SwiftyDropbox/Shared/Generated/Files.swift; sourceTree = ""; }; + 03B0FDD916BDF1DA5F04BD8928F42F24 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + 03B446FCDA488875B28D8F29A5A054B5 /* GBCCheat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBCCheat.m; sourceTree = ""; }; + 0402C21751DF9B30592DAA2E4DEAB0A6 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; + 040EDE19207F90BFBF015280544EC415 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; + 0413511727F62ED4EE7013A2B65E6D60 /* F3DEX2CBFD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2CBFD.h; sourceTree = ""; }; + 041DD83CE8B7122C23DB4EA6557E0B8D /* NstBoardPxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardPxRom.hpp; sourceTree = ""; }; + 042D259A0DE7C5C64344E6F6C921F2F4 /* iniparser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = iniparser.h; sourceTree = ""; }; + 043B3C37DAA8DA3F93EF9856913625DF /* ftimage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftimage.h; sourceTree = ""; }; + 04432A140C95AD3E4476D54108D6800F /* NstPatcherUps.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcherUps.hpp; sourceTree = ""; }; + 044F71625A7716601EAADFE8C6D579CA /* NstBoardBtl6035052.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtl6035052.hpp; sourceTree = ""; }; + 0482ED34CE1A01F70FEB8B861E2E8E09 /* GLideN64.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GLideN64.cpp; sourceTree = ""; }; + 04B1ECC7EA8EA09AD63D4DE11E338332 /* scmrev.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = scmrev.h; sourceTree = ""; }; + 04CB77BB25701FFB2038A7D45251EC20 /* ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist"; sourceTree = ""; }; + 04CC6EBCEC394DA0E803BBA27F7D98C0 /* LocalRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocalRecord.swift; sourceTree = ""; }; + 04E947092A258CFB57EB84AFAB619A18 /* readpng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = readpng.h; sourceTree = ""; }; + 04F25CB32F102ED6A7598D66E7BC9443 /* NstBoardCneDecathlon.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCneDecathlon.hpp; sourceTree = ""; }; + 04FA9510648C9DD5A3436B2139DA560F /* NstBoardBmcSuper40in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper40in1.hpp; sourceTree = ""; }; + 050EF16DAA3290D00AA4795AD24E1921 /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + 0553C664A9287732CFEA939623E83E70 /* GraphicsDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GraphicsDrawer.cpp; sourceTree = ""; }; + 0558C6E8EE1D9B61043E335254B75955 /* NstBoardTxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxRom.hpp; sourceTree = ""; }; + 05E18E206FE5E3ECC0A0F7DE2BFF3CB9 /* NstBoardJaleco.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJaleco.hpp; sourceTree = ""; }; + 069FDF1510D1EE57999D9EEFA42DCFAC /* GBA.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GBA.swift; sourceTree = ""; }; + 06A10A0C91C261CE6EB6C49882F13804 /* F3DEX2ACCLAIM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2ACCLAIM.cpp; sourceTree = ""; }; + 06B3B77EA189E0778856F0A800AD3B73 /* pngmem.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngmem.c; sourceTree = ""; }; + 06D710973353A358D86E72C355EAB4A5 /* NstInpPokkunMoguraa.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPokkunMoguraa.hpp; sourceTree = ""; }; + 06E118D0678F9057E5942E1C06792221 /* Debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Debugger.h; sourceTree = ""; }; + 06F9614E94FCE209A55C8C7298C28ACF /* NstApiEmulator.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiEmulator.hpp; sourceTree = ""; }; + 071BA5C258DCD29E5B2DDCC021A6B4F7 /* ZSortBOSS.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZSortBOSS.cpp; sourceTree = ""; }; + 0753A2F2127F76F50CD3A7E3FCDF1F60 /* GTMMIMEDocument.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMMIMEDocument.h; path = Source/GTMMIMEDocument.h; sourceTree = ""; }; + 0760F68BF4270075015FF0EF76C307A4 /* NstBoardIremLrog017.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremLrog017.hpp; sourceTree = ""; }; + 0798506C053FB81EBDF4F4EF5E7C226A /* arm_jit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = arm_jit.h; sourceTree = ""; }; + 07BDCD6B6C9579E41B46804763B13582 /* VideoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoManager.swift; sourceTree = ""; }; + 07F929AA3ED898A910A9BC1A1D86B9EA /* PostProcessor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PostProcessor.cpp; sourceTree = ""; }; + 086ADF754FD807B796DAED4D2797BAA7 /* pngtrans.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngtrans.c; sourceTree = ""; }; + 087B0A1E2A0C286B3F21988E2886E415 /* TextDrawerStub.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextDrawerStub.cpp; sourceTree = ""; }; + 087E76CC675F0056172F689E3EB38F3D /* SNESTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SNESTypes.m; sourceTree = ""; }; + 0883789E4810C71ABF67BD6770636C52 /* BatchRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BatchRecordOperation.swift; sourceTree = ""; }; + 089558003E4B67B701B403001320A7EC /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; + 08A7738B63C4EF018D66094588BB33F2 /* wifi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wifi.h; sourceTree = ""; }; + 08B17046C01595A0433E18CDE7B926A2 /* m64p_debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_debugger.h; sourceTree = ""; }; + 08B8560CC6F18BF32453AAB35DA2A0FE /* ftsnames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsnames.h; sourceTree = ""; }; + 092D5916BAD725E2BD181241814AD72A /* opengl_Attributes.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Attributes.cpp; sourceTree = ""; }; + 09764ED9B10646101C0CA4C1EC479B47 /* ConfigDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ConfigDialog.h; sourceTree = ""; }; + 09BF210597386722D5D7051B20C7BE0A /* NstTrackerRewinder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTrackerRewinder.hpp; sourceTree = ""; }; + 0A031E1BD1EAC694520C66D56F10F34E /* Roxas-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Roxas-umbrella.h"; sourceTree = ""; }; + 0A0F6D5E39D8F599381FA5E8BB34178E /* NstBoardBmcSuper22Games.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper22Games.hpp; sourceTree = ""; }; + 0A552ADFE847FA0B9435F038FD25C6AB /* OAuthMobile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthMobile.swift; path = Source/SwiftyDropbox/Platform/SwiftyDropbox_iOS/OAuthMobile.swift; sourceTree = ""; }; + 0ABB33F6C316C0D9CF3E24882D926C51 /* GTLRFramework.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRFramework.h; path = Source/Utilities/GTLRFramework.h; sourceTree = ""; }; + 0ACF8573E12E7CE6FC8382B1C7A28827 /* metaspu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = metaspu.h; sourceTree = ""; }; + 0AEA4696FF630389674F9A479B343F8E /* CheatSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CheatSearch.h; sourceTree = ""; }; + 0B149C977427CB869997B3FA4DF71F80 /* GBCCheat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCCheat.h; sourceTree = ""; }; + 0B7FEA4E81066CF6432FBD99B31C13B8 /* c4.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = c4.h; sourceTree = ""; }; + 0BB04C06267FD84AED09F6E677B3B3BF /* GBADeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GBADeltaCore-dummy.m"; sourceTree = ""; }; + 0BE607429888D1CA21C1751ECA041494 /* NstBoardKayPandaPrince.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKayPandaPrince.hpp; sourceTree = ""; }; + 0BE9A850D36C7373D36DB707F1F2FD8D /* Settings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = ""; }; + 0BFECFA92DE1F1B2ECD7449CA0DE9389 /* flashram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = flashram.h; sourceTree = ""; }; + 0C27F2E27F1106463E57DFEED760FFA8 /* SoundBufferRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundBufferRecorder.hpp; sourceTree = ""; }; + 0C369537653C1D3D646427D235DA8800 /* pngdebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngdebug.h; sourceTree = ""; }; + 0C46940B6EC0F54D23A4A771525673E4 /* VI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = VI.cpp; sourceTree = ""; }; + 0C752AF5BCDF4EC788FBE60B79732508 /* UITableView+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+CellContent.m"; path = "Roxas/UITableView+CellContent.m"; sourceTree = ""; }; + 0C8F960573035AFFC3CDC1DEBA1E6BD4 /* opengl_TextureManipulationObjectFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_TextureManipulationObjectFactory.cpp; sourceTree = ""; }; + 0C9A66906E90E69652DE559EF77F4E9C /* NstIoAccessor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoAccessor.hpp; sourceTree = ""; }; + 0CD4D6B9E5A8C737F812D9FE05776374 /* svttcmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svttcmap.h; sourceTree = ""; }; + 0CDD7B173B5F39A57867ED110A1FCA3A /* ri_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ri_controller.h; sourceTree = ""; }; + 0D2FEA2156756F729E3BD6869EBAA42E /* TouchInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TouchInputView.swift; sourceTree = ""; }; + 0D3974A0FEF480847BBD90477C1A1D10 /* GoogleAPIClientForREST-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleAPIClientForREST-prefix.pch"; sourceTree = ""; }; + 0D713472AF6AAB8E1D9ABC6D7A61B49B /* getset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = getset.h; sourceTree = ""; }; + 0DB5686AC4A3B7C73DBEBCB221B94109 /* png.c */ = {isa = PBXFileReference; includeInIndex = 1; path = png.c; sourceTree = ""; }; + 0DC45D7DB5CFA98660E39905809A298A /* Auth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Auth.swift; path = Source/SwiftyDropbox/Shared/Generated/Auth.swift; sourceTree = ""; }; + 0DCFE89D247EB41DF04E4B210CD083F3 /* DisplayLoadProgress.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DisplayLoadProgress.cpp; sourceTree = ""; }; + 0DEC322B85B93540CD7F53F2185164D6 /* NstBoardUnlKingOfFighters96.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlKingOfFighters96.hpp; sourceTree = ""; }; + 0E2C78A8799FD3F430CD405874430028 /* AuthRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/AuthRoutes.swift; sourceTree = ""; }; + 0E38834C7999CFB2670ABDAE5FC71FEB /* Sharing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sharing.swift; path = Source/SwiftyDropbox/Shared/Generated/Sharing.swift; sourceTree = ""; }; + 0E3FADE2512B784AFCE2DFE09B9ECE6D /* NstBoardJalecoJf16.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf16.hpp; sourceTree = ""; }; + 0E65B447ACD8C0AD8B9540F69DD78D01 /* NstBoardIremHolyDiver.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremHolyDiver.hpp; sourceTree = ""; }; + 0E80277EFECC528835574F12FD313326 /* OpenGLESProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OpenGLESProcessor.swift; sourceTree = ""; }; + 0E9121D9B12531DC426945BA216F72E0 /* gSP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = gSP.cpp; sourceTree = ""; }; + 0E992CA8B2DD446EF5D166F52EB6ED50 /* NstBoardUnlKingOfFighters97.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlKingOfFighters97.hpp; sourceTree = ""; }; + 0ECE608D60C05AB0625906E8A6493CB1 /* pngget.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngget.c; sourceTree = ""; }; + 0ECF374B07795E7E2A151E2B4D8D2A29 /* RenderTarget.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderTarget.hpp; sourceTree = ""; }; + 0ED12F95712B43803C58FF2D53075392 /* video.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = video.h; sourceTree = ""; }; + 0EEE51D19958A4CD2ECFD5DA1245966E /* clamping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clamping.h; sourceTree = ""; }; + 0F09391CC528737E038858DA43278244 /* opengl_ContextImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ContextImpl.h; sourceTree = ""; }; + 0F88A26F6B6CF0CB98D87C013543A190 /* NstPatcherIps.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcherIps.hpp; sourceTree = ""; }; + 0FA995B71ECEE202B9688EBD65B7788A /* opengl_ColorBufferReaderWithReadPixels.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithReadPixels.cpp; sourceTree = ""; }; + 0FFC7F34F90AC81DD006C798B7C5936F /* RSP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RSP.cpp; sourceTree = ""; }; + 0FFF2C8BA989A2993AF7181B8C71DCEA /* RecordController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordController.swift; sourceTree = ""; }; + 100C0377584270DDE41906A45ED3FE84 /* ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist"; sourceTree = ""; }; + 1045871F90D4D454EDB4A2C75FE2404F /* Dictionary+Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Dictionary+Sequence.swift"; sourceTree = ""; }; + 10788548DAFD98FFF15969586412798C /* ManagedRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedRecord.swift; sourceTree = ""; }; + 10F4B87C9C8B821D0D8D4EF510CA04D7 /* RSTCellContentDataSource_Subclasses.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentDataSource_Subclasses.h; path = Roxas/RSTCellContentDataSource_Subclasses.h; sourceTree = ""; }; + 112CF20D5FD3FC49E46B68E39C3831B1 /* OpenGL.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = OpenGL.hpp; sourceTree = ""; }; + 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = N64DeltaCore.bundle; path = "N64DeltaCore-N64DeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 114C1CE8166C1D5EE54BAA6E9086C965 /* osd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osd.h; sourceTree = ""; }; + 115E4BA52EDB4A7B8117F27B828EF3DC /* vi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vi_controller.h; sourceTree = ""; }; + 116918731DA7188F3EA9C2361B3A4FE5 /* NstBase.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBase.hpp; sourceTree = ""; }; + 11C5EB86C8B5D063931113BD696A449D /* TxCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxCache.cpp; sourceTree = ""; }; + 11CDF3492A5E59C765F2232102DA540C /* RSTToastView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTToastView.h; path = Roxas/RSTToastView.h; sourceTree = ""; }; + 12060A6DBBD12A6E816E1B753273DD7A /* RDRAMtoColorBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RDRAMtoColorBuffer.cpp; sourceTree = ""; }; + 1227B98A9F28F7732433A1CA68F8F875 /* NstApiUser.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiUser.hpp; sourceTree = ""; }; + 12D394DD2EB99C510D854AD5F7D8D01B /* NstBoardBxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBxRom.hpp; sourceTree = ""; }; + 133A1237CF59770626D5E03A5FDF58FB /* Keys.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Keys.h; sourceTree = ""; }; + 133FFF074C7375B30FD28DFF38BE260D /* dcheck.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dcheck.h; sourceTree = ""; }; + 1340B180649533E638F85761755DDEFC /* ftttdrv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftttdrv.h; sourceTree = ""; }; + 136E40DAC7C29CAC860561C37A54FE9C /* UIKit+ActivityIndicating.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIKit+ActivityIndicating.m"; path = "Roxas/UIKit+ActivityIndicating.m"; sourceTree = ""; }; + 13766CCFB7D97DABE91EFE46F07D098C /* ftlcdfil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlcdfil.h; sourceTree = ""; }; + 1393F6F0A0F928C49105FCA78288193B /* FileRequestsRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileRequestsRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/FileRequestsRoutes.swift; sourceTree = ""; }; + 13AB3B953E50263BB51D1FB9AE869E8E /* NstCpu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCpu.hpp; sourceTree = ""; }; + 13CF8AB5A64D04015282404D80256EA0 /* NstBoardBandaiOekaKids.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiOekaKids.hpp; sourceTree = ""; }; + 13D0054F15C9016C2A58C9AD3B1E55E4 /* RSTCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCollectionViewCell.h; path = Roxas/RSTCollectionViewCell.h; sourceTree = ""; }; + 14057D1AEA66E65BED2117946518BB10 /* Common.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Common.swift; path = Source/SwiftyDropbox/Shared/Generated/Common.swift; sourceTree = ""; }; + 1427093FF23F46B310155A7F63393171 /* cpuexec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuexec.h; sourceTree = ""; }; + 142A476F4B29FD9BEA6D18199D4AD340 /* RSTHelperFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTHelperFile.m; path = Roxas/RSTHelperFile.m; sourceTree = ""; }; + 142B2CFFAF6692BC41348D5B5B30FDA1 /* DropboxService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Files.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Files.swift"; sourceTree = ""; }; + 146B44A557A13EB3BBE8A5C53D94BC9E /* SNESEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = SNESEmulatorBridge.mm; sourceTree = ""; }; + 14D21BDF50EDC8CCA4B82562FA4EC1E1 /* NstBoardKonamiVrc1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc1.hpp; sourceTree = ""; }; + 14DA14245966E2AC6FF59548E765006C /* gbint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gbint.h; sourceTree = ""; }; + 14F79C2A5CD47627B9F83711162D50E0 /* Socket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Socket.hpp; sourceTree = ""; }; + 153DE0DE16595A04ED8966B393EF2468 /* screenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = screenshot.h; sourceTree = ""; }; + 15B06D5EC0A84D413A97D791A09DD4C0 /* L3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3D.h; sourceTree = ""; }; + 15D24BE6CA6E45ECB6DCBA6B450424E6 /* GameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameController.swift; sourceTree = ""; }; + 15D53B5540090674367F2034C42E0C1C /* RSTDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTDefines.h; path = Roxas/RSTDefines.h; sourceTree = ""; }; + 15EAE2283516A3200D537010AA0BBCF9 /* sar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sar.h; sourceTree = ""; }; + 160DE59B03218F24C3937D38923481FF /* NstBoardOpenCorp.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardOpenCorp.hpp; sourceTree = ""; }; + 1631DF20959AF33BB911DE604C526934 /* retro_stat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_stat.h; sourceTree = ""; }; + 163295C6CCD961D42E5E5F2EED6E2FD0 /* RSTSeparatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTSeparatorView.m; path = Roxas/RSTSeparatorView.m; sourceTree = ""; }; + 16344678459C378BCDF429E32F898CC2 /* GoogleSignIn.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = GoogleSignIn.bundle; path = Resources/GoogleSignIn.bundle; sourceTree = ""; }; + 16493B09A57A9904E0843D5268271785 /* NESEmulatorBridge.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NESEmulatorBridge.cpp; sourceTree = ""; }; + 1649F44ED2BD21529BA16B7B2A429793 /* SocketHandle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SocketHandle.hpp; sourceTree = ""; }; + 165095C0F2AC162D9A03CCCE15E06D7A /* DisplayLoadProgress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DisplayLoadProgress.h; sourceTree = ""; }; + 16A5B2FF145529F1248A848F882C8403 /* NstBoardVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardVsSystem.hpp; sourceTree = ""; }; + 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GBADeltaCore.xcconfig; sourceTree = ""; }; + 16EC811CB549CE7395A41A2FD9C4BE80 /* NstCartridgeInes.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeInes.hpp; sourceTree = ""; }; + 1708CC47B44B29F11E1399CFC0321DC7 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = GBADeltaCore/Standard.deltamapping; sourceTree = ""; }; + 173C3BCDE823B84D23477806EC2CF1EB /* initstate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = initstate.h; sourceTree = ""; }; + 173F53675D53F79BED6F8E8D2FB1D09C /* MemoryInputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = MemoryInputStream.hpp; sourceTree = ""; }; + 17878ECFAC417AC4ABE2928837CDE2B3 /* cheats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheats.h; sourceTree = ""; }; + 179CA20387AC394361693DD1CD2E4572 /* NstBoardBmc35in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc35in1.hpp; sourceTree = ""; }; + 17AE63368464F283CA60EB477B2EAC1B /* dummy_video.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_video.h; sourceTree = ""; }; + 17D76ED9F3E5D01C1E48424DA204220B /* RSTCompositeDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCompositeDataSource.m; path = Roxas/RSTCompositeDataSource.m; sourceTree = ""; }; + 18341B6F300F8B0BA009FD1B1F7945DD /* NstApu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApu.hpp; sourceTree = ""; }; + 1841A00CFBD8BE33D1C7736E94E929AE /* opengl_BufferManipulationObjectFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_BufferManipulationObjectFactory.h; sourceTree = ""; }; + 1848F23A934DCF2922E385DA2CFEDB81 /* retro_endianness.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_endianness.h; sourceTree = ""; }; + 185D80DA8DB94398379D2CBC6CB4E814 /* retro_inline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_inline.h; sourceTree = ""; }; + 187D4D612762D2AF1FECAFF87EFEA7CA /* Utf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Utf.hpp; sourceTree = ""; }; + 18B035B874A3872AE52466285EDB74ED /* SessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionManager.swift; path = Source/SessionManager.swift; sourceTree = ""; }; + 18EC95A3A3E3430E185F60F3BA643D4B /* NstBoardBmcResetBased4in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcResetBased4in1.hpp; sourceTree = ""; }; + 190E396AF2951D7E331A9B5B8276EAF4 /* S2DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = S2DEX.h; sourceTree = ""; }; + 1968B2F2911EF5F0444088854F57F746 /* Parameters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Parameters.h; sourceTree = ""; }; + 19C0D312CBF5347DB0447CBF56BF1D75 /* Event.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Event.hpp; sourceTree = ""; }; + 19CC725F77A1590AFC450371B084F35C /* joybus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = joybus.h; sourceTree = ""; }; + 1A79E77382CDD0991EC1FF3A9416D1E8 /* F3DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2.h; sourceTree = ""; }; + 1A9086E824EFB7B7B14B240188DF62CE /* Types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = ""; }; + 1AC5310CC574B1695D106EA4A1306618 /* GTMSessionFetcherService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherService.h; path = Source/GTMSessionFetcherService.h; sourceTree = ""; }; + 1ACB84EDA396FC32A38EF2E80F2E78D5 /* assemble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble.h; sourceTree = ""; }; + 1AE7C6AEDB1B177BEA97EAFF75DCDAF4 /* GBCEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCEmulatorBridge.h; sourceTree = ""; }; + 1B222E309AC91E1D67F520A0BF59B834 /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; }; + 1B22B42E3A2ED5293029A56068CA8061 /* NSBundle+Extensions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+Extensions.m"; path = "Roxas/NSBundle+Extensions.m"; sourceTree = ""; }; + 1B60BE30FA309328A9F8DEECADF5B276 /* NstBoardSunsoftFme7.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoftFme7.hpp; sourceTree = ""; }; + 1B69ECEA6865A9F1815D0B371F50D01E /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; + 1B7C97918240DAD198A118B7B00B0E24 /* NstInpDoremikkoKeyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpDoremikkoKeyboard.hpp; sourceTree = ""; }; + 1B8AF793D67661D01A11B1A56931BA03 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; + 1BC03A069A547EB736D558AC237B614A /* NstBoardSachenTca01.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenTca01.hpp; sourceTree = ""; }; + 1BCB1BC674B34EBE5044A5F4AC65BA67 /* NstImageDatabase.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstImageDatabase.hpp; sourceTree = ""; }; + 1C0F31C6E082D6432390150C57691513 /* NstBoardCne.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCne.hpp; sourceTree = ""; }; + 1C0FCDFCC71457C2596AFCEC1DE6839A /* SPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPU.h; sourceTree = ""; }; + 1C490BE7A4301170F339101D64A47136 /* GTMSessionFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcher.h; path = Source/GTMSessionFetcher.h; sourceTree = ""; }; + 1C5B370D97DA31DD1B20EE2895770F31 /* loadres.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = loadres.h; sourceTree = ""; }; + 1C829F5E801FB46F0C66DA77EB247349 /* Globals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Globals.h; sourceTree = ""; }; + 1CA66F879B24C5B420988EA67B2A3FB0 /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; + 1CA6BD5A93F759A947F93E294905013E /* DeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DeltaCore.modulemap; sourceTree = ""; }; + 1CBA76EDD27FA2D20B1EA0F0BF7F082C /* libSwiftyDropbox.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSwiftyDropbox.a; path = libSwiftyDropbox.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 1CC140E1F857FD727024B376FACB6D15 /* glsl_CombinerProgramUniformFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramUniformFactory.cpp; sourceTree = ""; }; + 1CDF0C8D349B858C9D5F6C48C36605C4 /* pngusr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngusr.h; sourceTree = ""; }; + 1D1E6C0B74E1FAEE75DA38BD38CEBDCE /* F3DGOLDEN.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DGOLDEN.cpp; sourceTree = ""; }; + 1D2F36F994B2A734DE7746BB61880D92 /* S2DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = S2DEX2.cpp; sourceTree = ""; }; + 1D88D4AF63AF5783792687FAE3AD2BCB /* clock_ctime_plus_delta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clock_ctime_plus_delta.h; sourceTree = ""; }; + 1DA0672F627BE87C2B50295FDE1FE14F /* StandardGameControllerInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StandardGameControllerInput.swift; sourceTree = ""; }; + 1DA85D3012B6718655D78006E60A7A61 /* glsl_CombinerProgramBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramBuilder.h; sourceTree = ""; }; + 1DD967DC3CDB801FA186F97CA836B2E5 /* libhardware.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libhardware.h; sourceTree = ""; }; + 1DDB6A675F59026DAB0306340D41A1BE /* xxhash.c */ = {isa = PBXFileReference; includeInIndex = 1; path = xxhash.c; sourceTree = ""; }; + 1DF27D7E65CA1A9DC28C57F4FE6BD1B3 /* RSTRelationshipPreservingMergePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTRelationshipPreservingMergePolicy.h; path = Roxas/RSTRelationshipPreservingMergePolicy.h; sourceTree = ""; }; + 1E0332A877FA8632655267F892A4868D /* SNESDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SNESDeltaCore.modulemap; sourceTree = ""; }; + 1E2FFD68EF928DFACE9371D8AAC65F52 /* glsl_Utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_Utils.cpp; sourceTree = ""; }; + 1E5356E04E92615CFF0666E5987CE594 /* libNESDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libNESDeltaCore.a; path = libNESDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 1E5AC9B7C27792EF938FCB5C74BC658F /* System.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = System.hpp; sourceTree = ""; }; + 1E62A12C767331BC621336E59054040F /* tile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tile.h; sourceTree = ""; }; + 1E6A8F6B9B3B7B25C7C87F8B3C7CDE37 /* Roxas.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Roxas.xcconfig; sourceTree = ""; }; + 1E9673A8687B4C246AFECBFC5FA4C2C2 /* N64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64.h; sourceTree = ""; }; + 1EA3DF2BEE5BA3A560AB2D24010A1910 /* N64DeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64DeltaCore.h; sourceTree = ""; }; + 1EA5F7D97C9AB37E20A715D3398E9330 /* NSConstraintConflict+Conveniences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSConstraintConflict+Conveniences.m"; path = "Roxas/NSConstraintConflict+Conveniences.m"; sourceTree = ""; }; + 1EDEFED9C09EB37D2B09A2EE84A2BA70 /* RSTCellContentPrefetchingDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentPrefetchingDataSource.h; path = Roxas/RSTCellContentPrefetchingDataSource.h; sourceTree = ""; }; + 1EE7F9057B40115EF146A96035510405 /* Mouse.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Mouse.hpp; sourceTree = ""; }; + 1EEADA9A5C4C5EF8A88BBC09B95C5F62 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; + 1F028EDFAB102669AF0739608CE6CC3F /* NstBoardSubor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSubor.hpp; sourceTree = ""; }; + 1F23DBC67505E77BE77552D6D84A3DAA /* GBCDeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = GBCDeltaCore.bundle; path = "GBCDeltaCore-GBCDeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1F77D5D789D6454A73C3D19E2727B786 /* SMCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMCalloutView.h; sourceTree = ""; }; + 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DeltaCore.xcconfig; sourceTree = ""; }; + 1F83AE270F6F4A14D5507A9E883EFA01 /* wglext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wglext.h; sourceTree = ""; }; + 1F9D3C122510252E5BCC49CBC78D15C1 /* glsl_Utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_Utils.h; sourceTree = ""; }; + 1FA26C4FB0D6E27B0C9E9607D02D8E25 /* alist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = alist.h; sourceTree = ""; }; + 1FA41CF9BC943DB28A21577ABD2D7C6E /* N64EmulatorBridge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = N64EmulatorBridge.m; sourceTree = ""; }; + 1FCDA1FB74E4C4092E5F8A5BC8289630 /* RSTCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCollectionViewCell.m; path = Roxas/RSTCollectionViewCell.m; sourceTree = ""; }; + 1FF86939139DCD92059F8AFE38FCB116 /* NstCartridgeRomset.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeRomset.hpp; sourceTree = ""; }; + 2007B1419082E90090305FCD84393B06 /* SDL_opengl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_opengl.h; sourceTree = ""; }; + 2008405A1930372A338506F2E4FA20BA /* opengl_TextureManipulationObjectFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_TextureManipulationObjectFactory.h; sourceTree = ""; }; + 2013712F504FC10A75B32DB78638B56B /* STTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = STTypes.h; sourceTree = ""; }; + 205369CAD1E4D0EB34E3DAA176117F19 /* readpng2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = readpng2.h; sourceTree = ""; }; + 205D59098479C96A36856ACF72D6AF7C /* TxReSample.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxReSample.cpp; sourceTree = ""; }; + 20738B0979F88177809FB593F753139B /* NESDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = NESDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 20BCD689A6CAE5B82E9CC42375BA7AE7 /* Blob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blob.swift; path = Sources/SQLite/Core/Blob.swift; sourceTree = ""; }; + 20E6DC27E3CD5270C16AC4F9F2E0D3B5 /* GLideN64.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = GLideN64.ini; sourceTree = ""; }; + 215635C653FC2F3689E27136178F6166 /* NstBoardRumbleStation.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRumbleStation.hpp; sourceTree = ""; }; + 215F41B527253A671A97637E35BDC2EA /* alist_audio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_audio.c; sourceTree = ""; }; + 21697728431980C8C5C6925AA9856DFA /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; + 21A038DB12C94476C404398950A88C8D /* NSString+Localization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Localization.m"; path = "Roxas/NSString+Localization.m"; sourceTree = ""; }; + 21B08C108927AB621B0EB7F908CDC81C /* NstStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstStream.hpp; sourceTree = ""; }; + 21D6D1EB35E3D74EDEA3C2CD85A05F52 /* Pods-Delta-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Delta-acknowledgements.markdown"; sourceTree = ""; }; + 222369BCAE458E6A21F1C9AEE03983ED /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = ""; }; + 22925124C257896E19766BEE921A074A /* UIKit+ActivityIndicating.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+ActivityIndicating.h"; path = "Roxas/UIKit+ActivityIndicating.h"; sourceTree = ""; }; + 22D727FF73EDD7D66A073041A47B0DE6 /* NstInpPartyTap.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPartyTap.hpp; sourceTree = ""; }; + 22E13ACA822EB61BEEF5DF35BDB4B13E /* F3DEX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX.cpp; sourceTree = ""; }; + 22E35E02382F4B1E5D0995608B8BCCB7 /* svmm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svmm.h; sourceTree = ""; }; + 22F22453696F4302900B9871992F9215 /* util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; + 2312F596695044513C4F58CD3E2960D0 /* UICollectionViewCell+Nibs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewCell+Nibs.m"; path = "Roxas/UICollectionViewCell+Nibs.m"; sourceTree = ""; }; + 231C3B1815030738C172F8C3A61AB598 /* NstBoardMmc5.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc5.hpp; sourceTree = ""; }; + 232E1FD2069448A4B7FA73B378A48EDC /* fttrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fttrace.h; sourceTree = ""; }; + 237B84F01B49BFC3E63C9FE3F3D458FC /* emufile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = emufile.h; sourceTree = ""; }; + 23AFAE86E4F0EDD062DB46895DAF5251 /* GLideN64.custom.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = GLideN64.custom.ini; sourceTree = ""; }; + 23B2C2ADF3521E6B7DFB9C17A4247A3B /* gralloc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gralloc.h; sourceTree = ""; }; + 23B56F8A99B549137872A3667B98CBAB /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; + 23C48688B8A512FFB646E121E3FD49DF /* bsx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bsx.h; sourceTree = ""; }; + 23C9343FC4FB0FD507A750B3EF697747 /* Contacts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contacts.swift; path = Source/SwiftyDropbox/Shared/Generated/Contacts.swift; sourceTree = ""; }; + 23EDB5113AECD1DF0B90F3E16139D1D6 /* NstBoardMmc2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc2.hpp; sourceTree = ""; }; + 241D65B94A34B15AB354A6901D592045 /* NstBoardBmcSuperBig7in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperBig7in1.hpp; sourceTree = ""; }; + 2446BE6FAF88E2295DA4D857C1DC7C16 /* NstBoardJalecoSs88006.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoSs88006.hpp; sourceTree = ""; }; + 2446C10AA94654AF8E1C4ADEB9142AD5 /* pngusr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngusr.h; sourceTree = ""; }; + 244DCF4A8FC46E79A6101C49202C0DBD /* TeamCommon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamCommon.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamCommon.swift; sourceTree = ""; }; + 2470D300240FF936891A6DA2EBE0164B /* OGLRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLRender.h; sourceTree = ""; }; + 24A1F04C9D66439C073E518F9C2519E1 /* NSFileManager+URLs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileManager+URLs.h"; path = "Roxas/NSFileManager+URLs.h"; sourceTree = ""; }; + 24ADD77C9E459763B52BB8DD8BA8DE7C /* fterrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fterrors.h; sourceTree = ""; }; + 24C0E7C293EBDFEBA516E17AD1564246 /* PACKED.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PACKED.h; sourceTree = ""; }; + 24DCB8F3924D4B8E723EDE7D9E36EE1C /* NstBoardMmc6.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc6.hpp; sourceTree = ""; }; + 24E1A25642D89F5B30A1BB2FB864AFA7 /* fxemu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxemu.h; sourceTree = ""; }; + 24F185C35417DF1B6626AAC2D1E5E538 /* MemoryStatus_mupenplus.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = MemoryStatus_mupenplus.cpp; sourceTree = ""; }; + 251C6319AD50CB50F18D50CBF727F8B2 /* libGoogleToolboxForMac.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGoogleToolboxForMac.a; path = libGoogleToolboxForMac.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 252CCD4194A312D6A647E0B27A002330 /* new_dynarec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = new_dynarec.h; sourceTree = ""; }; + 254168DB44BEBEB68F731713E971B912 /* ColorBufferToRDRAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ColorBufferToRDRAM.cpp; sourceTree = ""; }; + 2545337131DCB550937E1BA985A7CFB7 /* rdram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rdram.h; sourceTree = ""; }; + 254CC3AD77C6322C8CA4B65F52B9F198 /* cp1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp1.h; sourceTree = ""; }; + 25F7A6B233074D6DD97705181306F479 /* NstBoardTengenRambo1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTengenRambo1.hpp; sourceTree = ""; }; + 25FCB0ABC4939495F4D8023884606D3C /* svxf86nm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svxf86nm.h; sourceTree = ""; }; + 260430D1061CEEA26EE73673BC86F350 /* m64p_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_types.h; sourceTree = ""; }; + 261762E049C9653D1341EB811E42E338 /* NstBoardKonamiVrc6.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc6.hpp; sourceTree = ""; }; + 269F29EF8D9E4E7D9A20913AFBB84BA9 /* files.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = files.h; sourceTree = ""; }; + 26CE0005068BFE608A1C540A882BA5FB /* transfer_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = transfer_ptr.h; sourceTree = ""; }; + 26D67EB75107A8E731DFD2A5B2EC86F0 /* GBCDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GBCDeltaCore-dummy.m"; sourceTree = ""; }; + 26DDDA2E6D5D939969B8FDD448F57499 /* insertion_sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = insertion_sort.h; sourceTree = ""; }; + 276B3F3CC31F539687CB5B6AD102438A /* UIView+AnimatedHide.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+AnimatedHide.h"; path = "Roxas/UIView+AnimatedHide.h"; sourceTree = ""; }; + 276E27532E9C2ADF0C058B16208B439C /* FinishUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishUploadingRecordsOperation.swift; sourceTree = ""; }; + 2773A5A159F5DFA0A928E49F68CC6E2D /* spc7110emu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110emu.h; sourceTree = ""; }; + 27A2677C576835F3B4E792D1223B0C84 /* GBADeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBADeltaCore-prefix.pch"; sourceTree = ""; }; + 27AFE501DA9EA6202B3EE72F7468987C /* RSTFetchedResultsDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTFetchedResultsDataSource.h; path = Roxas/RSTFetchedResultsDataSource.h; sourceTree = ""; }; + 27B1FE69B14E33A7E6603FF648B30DFB /* NstBoardWhirlwind.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWhirlwind.hpp; sourceTree = ""; }; + 27CAFC4023101EB518BF390FBCBDAC6C /* NstBoardTxcTw.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcTw.hpp; sourceTree = ""; }; + 27CF12F82D7FC895B714C5F31C07E905 /* GBASockClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBASockClient.h; sourceTree = ""; }; + 27D3E954F1B9259AA8BFF0453108844D /* NstBoardBmcGoldenCard6in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGoldenCard6in1.hpp; sourceTree = ""; }; + 27DF122CB5EB6951E6B147BC0F24D64E /* NstBoardNxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNxRom.hpp; sourceTree = ""; }; + 285001A3E16D55354667EDFD2BF69729 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; + 288D4255C025E9AE120B756ED3D79848 /* SoundStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundStream.hpp; sourceTree = ""; }; + 2898E99C918654A8574FBA694F5AA190 /* GameControllerStateManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerStateManager.swift; sourceTree = ""; }; + 28A32492091FA65B2E25F38BDB5EE070 /* cheat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheat.h; sourceTree = ""; }; + 292C26E214699339AAE80215F482F9BF /* F3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3D.h; sourceTree = ""; }; + 294C23E97C15AE68F25128C115C99270 /* AnyInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnyInput.swift; sourceTree = ""; }; + 29ABF3EFA4F58F7434261260A0FCC2A5 /* L3DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3DEX.h; sourceTree = ""; }; + 2A0298053CF49C68092396B42DD55D37 /* ftoption.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftoption.h; sourceTree = ""; }; + 2A046E883CFCEC84A20788D73991DD42 /* RSTCollectionViewGridLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCollectionViewGridLayout.h; path = Roxas/RSTCollectionViewGridLayout.h; sourceTree = ""; }; + 2A2F8E82B85B6C622F315EBC51F857CC /* Context.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Context.hpp; sourceTree = ""; }; + 2A3C156BDEC9D98DB4C0821812B71351 /* DriveService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Files.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Files.swift"; sourceTree = ""; }; + 2A5D80F4652B7C7C71549D654A6F22B0 /* ftincrem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftincrem.h; sourceTree = ""; }; + 2A7484DF86BAC6712F444A8FFBF23277 /* re2.c */ = {isa = PBXFileReference; includeInIndex = 1; path = re2.c; sourceTree = ""; }; + 2A9BAD126F66B1D6249DC44FE38555BB /* NstBoardSuperGameBoogerman.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGameBoogerman.hpp; sourceTree = ""; }; + 2AA34CF8A01A306ECCE09A801585167F /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + 2ABF32DB7C03DC858879C758E39AAD27 /* GTLRBase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRBase64.h; path = Source/Utilities/GTLRBase64.h; sourceTree = ""; }; + 2B02EEBF1E035A24BDB6410BAA13782B /* NstApiCartridge.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiCartridge.hpp; sourceTree = ""; }; + 2B8B19BAF3A73578C62F6DA00164A175 /* pngstest-errors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pngstest-errors.h"; sourceTree = ""; }; + 2B93D7E35A62A2F50B4C38BF9A76E4C4 /* F3DDKR.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DDKR.cpp; sourceTree = ""; }; + 2BC6C6859EF93F3A711C5AA163C55425 /* SoftwareRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoftwareRender.h; sourceTree = ""; }; + 2BCCA563115C1ABD0F6BE0FC0B3CE00B /* Sound.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sound.hpp; sourceTree = ""; }; + 2BFEAD74D75F957AC8D29DA74DAD189C /* RSTLaunchViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTLaunchViewController.h; path = Roxas/RSTLaunchViewController.h; sourceTree = ""; }; + 2C0286BB0302AD778CF29EECE712709B /* F3DTEXA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DTEXA.h; sourceTree = ""; }; + 2C0CA4A2A069453672147E331C600848 /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; + 2C685CAEC8DE104E2770BA81F4B87316 /* path.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = path.h; sourceTree = ""; }; + 2C998AB9300BCC4AD6368CB1FA675F29 /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; }; + 2C9E8347629FB94F0A3A23F8ACE7DF87 /* Team.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Team.swift; path = Source/SwiftyDropbox/Shared/Generated/Team.swift; sourceTree = ""; }; + 2CC9F125F98839707615EC7F6D62E31F /* commandline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = commandline.h; sourceTree = ""; }; + 2CCF0C455FDED16D55973E6A3073BB8D /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; + 2CCF7001F83E60B5C530A3D02B918FE9 /* m64p_vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_vidext.h; sourceTree = ""; }; + 2CE8C779DBC210E95B624C15A6AEB6CA /* ZIPFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZIPFoundation.modulemap; sourceTree = ""; }; + 2D32B6BBDAE1D1E3EAA27A408B03C8A6 /* Combiner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Combiner.h; sourceTree = ""; }; + 2D3BDC0A83B15DB6FCC56F319C1AD6E8 /* NstBoardBtlSuperBros11.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSuperBros11.hpp; sourceTree = ""; }; + 2D61A2E3D2CCD4FD36DF6278A7CFE46A /* DSTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = DSTypes.m; sourceTree = ""; }; + 2DA2D2C771F4634211A5B88321499576 /* opengl_GLInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_GLInfo.cpp; sourceTree = ""; }; + 2DB53EA9D410D595711ED5EE029CAC60 /* Config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Config.cpp; sourceTree = ""; }; + 2DB986F9C1D693A55F7B3373502F3EA2 /* NstBoardBandai.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandai.hpp; sourceTree = ""; }; + 2E2407FBC4681D02CEDB01BEEC0AC171 /* NstApiTapeRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiTapeRecorder.hpp; sourceTree = ""; }; + 2E2D966C0A00ADF6CBAED222AD054CA8 /* Crashlytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.xcconfig; sourceTree = ""; }; + 2E42A2A695A512EFB1CAFA94A99A0F8A /* F3DBETA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DBETA.cpp; sourceTree = ""; }; + 2E57F66FFEB81B1218E882DC67DDCD97 /* TxUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxUtil.h; sourceTree = ""; }; + 2E6BE100ACC34617987896C070068D72 /* filters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = ""; }; + 2E79FA977AAA30AD5B0ACFC45BB5967B /* NstBoardZz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardZz.hpp; sourceTree = ""; }; + 2E8023826B8975C217D59F5E61A8DCEA /* MFiGameController.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = MFiGameController.deltamapping; path = "DeltaCore/Supporting Files/MFiGameController.deltamapping"; sourceTree = ""; }; + 2EC1909CF0C525687C49B17CBAC1003E /* text.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = ""; }; + 2ECDC95F1D25F3D0FDE01C632C5EEE7F /* TextureFilters_hq4x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_hq4x.h; sourceTree = ""; }; + 2ED8DCB8CB080AFAA17D199C268096E6 /* video_capture_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = video_capture_backend.h; sourceTree = ""; }; + 2F0727F553BF04882765DDB5CDA7D864 /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = internal.h; sourceTree = ""; }; + 2F298C5D309EDC6DEBD36255472EF52C /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; }; + 2F60B797411C7BEEEE57114981D1D5CE /* NstInpPaddle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPaddle.hpp; sourceTree = ""; }; + 2F6D552EFD0D0F0A9F5EEC068432F589 /* RSTLaunchViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTLaunchViewController.m; path = Roxas/RSTLaunchViewController.m; sourceTree = ""; }; + 2FB72B0C0BDEEEA75B2233F8A0F9C0CB /* NstBoardBtlGeniusMerioBros.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlGeniusMerioBros.hpp; sourceTree = ""; }; + 2FD0F2986CF92C82ADF825EBEADF3727 /* inputgetter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = inputgetter.h; sourceTree = ""; }; + 2FE159CB1A275ED4531A3B1AEA807772 /* NstBoardBandaiDatach.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiDatach.hpp; sourceTree = ""; }; + 30131336E11D11700AC99D314BDC275C /* GBADeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = GBADeltaCore.bundle; path = "GBADeltaCore-GBADeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 301D690D8387625CECE00F7DFC975BD1 /* NstBoardBmc1200in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc1200in1.hpp; sourceTree = ""; }; + 303639D060EE4ABC8F9B28FD68B7F98C /* NstBoardWaixingZs.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingZs.hpp; sourceTree = ""; }; + 3082C32F34B1C6E7F0F4DC785F328B7E /* NstInpDevice.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpDevice.hpp; sourceTree = ""; }; + 30DCADC540C43841BB69ADBF07E2D033 /* Packet.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Packet.hpp; sourceTree = ""; }; + 3144D27552079845BF5B0637FC88D62B /* GTLRDrive.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDrive.h; path = Source/GeneratedServices/Drive/GTLRDrive.h; sourceTree = ""; }; + 315FF0E989ED5094C01E5CC2AA1F9C5A /* NstTimer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTimer.hpp; sourceTree = ""; }; + 316C97172E998626A782DC7AB8C5416C /* NstBoardBandai24c0x.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandai24c0x.hpp; sourceTree = ""; }; + 31BFB44B9B839260D03128AA298313F4 /* TransportConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransportConfig.swift; path = Source/SwiftyDropbox/Shared/Handwritten/TransportConfig.swift; sourceTree = ""; }; + 31C2319F7A8D58BEC41843BD13637729 /* pngread.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngread.c; sourceTree = ""; }; + 31C592DC38E9487D52E30F0FFC654460 /* GBADeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBADeltaCore-umbrella.h"; sourceTree = ""; }; + 31C90C17DE46AAD6D2786B0098B71196 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; + 31FCE4C32E3EF5DE398B4E770A89EBF5 /* NstBoardBmc76in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc76in1.hpp; sourceTree = ""; }; + 320B83F85351687CBC80A3C6FC74440B /* TxFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxFilter.cpp; sourceTree = ""; }; + 323BA7B73E9CB19F2E6792B339B711E1 /* NstBoardKay.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKay.hpp; sourceTree = ""; }; + 32498379B364CA72F850FD7D3200CF6B /* Vector2.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector2.inl; sourceTree = ""; }; + 325F0C3218801422F4A41352BE209C49 /* GBA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBA.h; sourceTree = ""; }; + 32810DC0220801D0627369038B90903F /* NstBoardHenggedianzi.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHenggedianzi.hpp; sourceTree = ""; }; + 3283EF596434B1D254E4719AEDDF2B9F /* 3DMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = 3DMath.h; sourceTree = ""; }; + 32C312AFD3D5355E34E5264A0D924E24 /* NstBoardBtlSmb2a.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2a.hpp; sourceTree = ""; }; + 32CD48452BE99C82FE043939384E2531 /* TextureFilters_2xsai.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_2xsai.cpp; sourceTree = ""; }; + 337E3DE6F767B4B0E0E8615F5A236955 /* CommonAPIImpl_common.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CommonAPIImpl_common.cpp; sourceTree = ""; }; + 337EA8CD424B4FAA1210613EA7BEE5FF /* RSTCollectionViewGridLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCollectionViewGridLayout.m; path = Roxas/RSTCollectionViewGridLayout.m; sourceTree = ""; }; + 339EF64DD9F7A5E35B3CA9B6E200C168 /* svpfr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpfr.h; sourceTree = ""; }; + 33A331134BE85F727CC5CCD89769383E /* RSTArrayDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTArrayDataSource.h; path = Roxas/RSTArrayDataSource.h; sourceTree = ""; }; + 33B4914FDB89C5B28445FE64AA86085E /* Sleep.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sleep.hpp; sourceTree = ""; }; + 33CC18E757DD735D6437685485DADD01 /* F5Rogue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F5Rogue.cpp; sourceTree = ""; }; + 33F61CAFA96E0983ACC82B25ADD6DA19 /* NstBoardSuperGameLionKing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGameLionKing.hpp; sourceTree = ""; }; + 34347E5F18F11A1CEF5D0D59279705D2 /* NstBoardTaitoX1017.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoX1017.hpp; sourceTree = ""; }; + 3443718CF69897A14D49B9C400E80C50 /* GraphicBufferWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicBufferWrapper.h; sourceTree = ""; }; + 3451D46815FC1E9C8DD13CA49D2186AF /* ftmodule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmodule.h; sourceTree = ""; }; + 34A215FA298A479379277FF73C2A596C /* NstBoardCxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCxRom.hpp; sourceTree = ""; }; + 34B58BB2F0C3289A22FE5DD2CA130C8D /* gDP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gDP.h; sourceTree = ""; }; + 34E1D0D9185BAD35EFFEE1914BE57762 /* IpAddress.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = IpAddress.hpp; sourceTree = ""; }; + 35465BE12D8260B15CC6BD3C5FEF813C /* ftsystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsystem.h; sourceTree = ""; }; + 35485E76FD48D810C5D7C95E2FD90D64 /* ColorBufferToRDRAMStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferToRDRAMStub.h; sourceTree = ""; }; + 3555155F2CD8E368BB6A27A9517ADC29 /* NstBoardSachenS8259.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenS8259.hpp; sourceTree = ""; }; + 355A8C024A46DB2BE1763B0F3971FFEB /* NstBoardBenshengBs5.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBenshengBs5.hpp; sourceTree = ""; }; + 359183005A45F4DEB5018AB89576E560 /* PaletteTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PaletteTexture.h; sourceTree = ""; }; + 35A46DA9D7B9942345456BEF6DF7E8D1 /* GTLRURITemplate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRURITemplate.m; path = Source/Utilities/GTLRURITemplate.m; sourceTree = ""; }; + 35AD6B07396F00A51E9FE9F7F393FAE0 /* NstInpKonamiHyperShot.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpKonamiHyperShot.hpp; sourceTree = ""; }; + 35CFBA425AB64788F59985DF4294DCD2 /* NstBoardBmcCh001.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcCh001.hpp; sourceTree = ""; }; + 362727B8448D5ACBAA6199388904E6EE /* F3DSETA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DSETA.h; sourceTree = ""; }; + 3676C1EE5D5DE26D9C445B36939E922C /* ConvexShape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ConvexShape.hpp; sourceTree = ""; }; + 367BD3702DCBBD382022788A89524217 /* pshints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pshints.h; sourceTree = ""; }; + 36962E0BFCDEF7E1ED3272745C0620BB /* F3DZEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DZEX2.cpp; sourceTree = ""; }; + 36CB3E3F01D050A62BBD3A2DB25F6116 /* Roxas-Prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Roxas-Prefix.pch"; path = "Roxas/Roxas-Prefix.pch"; sourceTree = ""; }; + 36E1F6E94EA1CBCCBD240A2819F591AD /* cexcept.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cexcept.h; sourceTree = ""; }; + 37221D699E77B16EA4FE6C376B827730 /* Pods-Delta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Delta-umbrella.h"; sourceTree = ""; }; + 372F8BF3EFD0B4F1ADF3AB6EDDFDEB86 /* Keys.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Keys.cpp; sourceTree = ""; }; + 3745BEDDA1C724568FBE3D2E2D7E1A45 /* Turbo3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Turbo3D.h; sourceTree = ""; }; + 37497E9D4A4AD3D7DBDCBD661F3B23B8 /* CustomTasks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomTasks.swift; path = Source/SwiftyDropbox/Shared/Handwritten/CustomTasks.swift; sourceTree = ""; }; + 3786BF5CD7F52FDF2EC2229D9387B2A8 /* Transformable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Transformable.hpp; sourceTree = ""; }; + 3791E485D89113AC4B25ADE046DEE5D1 /* SoundRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundRecorder.hpp; sourceTree = ""; }; + 37B8F5240077E10AD926217E581D56A6 /* xxhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; + 37EAE6D3D608C9A5504D237AEFF46B37 /* BreakpointStructures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BreakpointStructures.h; sourceTree = ""; }; + 37F6886809E07DA8D8DA791B7D5E700D /* RSTPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTPlaceholderView.m; path = Roxas/RSTPlaceholderView.m; sourceTree = ""; }; + 380AB1A1F7D98ACA91271E7BD163EEB5 /* NstAssert.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstAssert.hpp; sourceTree = ""; }; + 38670547E681F154E5A9A09F39390D14 /* DepthBufferRender.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBufferRender.cpp; sourceTree = ""; }; + 3871D54EF3B7DA9555828F18A50129A9 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; }; + 3897ACD3EC356862F1521A3004290DFF /* m64p_frontend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_frontend.h; sourceTree = ""; }; + 38ADDB2045DD7DB1E4811DC4854871C1 /* m64p_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_config.h; sourceTree = ""; }; + 3919DEC2EE937226ECE6A9846B2DA0D4 /* FilterChain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FilterChain.swift; sourceTree = ""; }; + 39319E8C5681BB472007926F7AAC4580 /* GTMSessionFetcherService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherService.m; path = Source/GTMSessionFetcherService.m; sourceTree = ""; }; + 3940CE8EE2A18C0E5B6BE8394499EEB9 /* bios.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bios.h; sourceTree = ""; }; + 396CAC416CA887F60CA5BB303E7782BE /* TcpSocket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TcpSocket.hpp; sourceTree = ""; }; + 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NESDeltaCore.xcconfig; sourceTree = ""; }; + 398E01AED7FF75385A50FDC67155A9A0 /* RectangleShape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RectangleShape.hpp; sourceTree = ""; }; + 399024492430E7258571697FBE41E931 /* ControllerInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerInputView.swift; sourceTree = ""; }; + 399303C061E83D38C607412717024931 /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = Sources/SQLite/Extensions/FTS4.swift; sourceTree = ""; }; + 3993143AF65CD570A58EFF32C95A56FD /* storage_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = storage_backend.h; sourceTree = ""; }; + 39CE46E8947CA82B26FFDA66DEED2417 /* opengl_ContextImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ContextImpl.cpp; sourceTree = ""; }; + 39DE70D20BB766FDECB1A17965101839 /* NstVideoFilterxBR.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterxBR.hpp; sourceTree = ""; }; + 3A3B202DC9824A439BA7432E3C5B9DB8 /* Thread+RealTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Thread+RealTime.swift"; sourceTree = ""; }; + 3A4016B959B9C2B70E21D27AA4439760 /* logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = logger.h; sourceTree = ""; }; + 3A8697A847DE43FFACD393D2A7A9B84E /* UploadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordOperation.swift; sourceTree = ""; }; + 3A9E10651AAF13257794A36D1EE6B48B /* F3DFLX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DFLX2.h; sourceTree = ""; }; + 3AE64FC0F8676B00CF470337F5C202A9 /* Textures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Textures.h; sourceTree = ""; }; + 3AF4B7019142B0E02BDE3089ED853C72 /* NstBoardBmcMarioParty7in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcMarioParty7in1.hpp; sourceTree = ""; }; + 3B05FC42F83ADA41DEED532540CD7174 /* TxImage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxImage.cpp; sourceTree = ""; }; + 3B22551CE150F70C85739F2994DE4F75 /* GTLRDriveObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDriveObjects.h; path = Source/GeneratedServices/Drive/GTLRDriveObjects.h; sourceTree = ""; }; + 3B254FADF7513993D3F7353F6B8F1395 /* msu1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = msu1.h; sourceTree = ""; }; + 3B430FF2043C1D359980E0C002B66913 /* RSTNavigationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTNavigationController.h; path = Roxas/RSTNavigationController.h; sourceTree = ""; }; + 3B6CCD65AA48EE2EC4FE44F3D0C21376 /* NstVideoRenderer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoRenderer.hpp; sourceTree = ""; }; + 3B72CA5846B888FBC7CF69D1C40C9AE7 /* NstInpAdapter.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpAdapter.hpp; sourceTree = ""; }; + 3B9808132CF6702DDD5DA9C2F9A0C253 /* Version+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Dropbox.swift"; sourceTree = ""; }; + 3BA56585EDD13E71C58B7B7C64DDB53C /* GTLRDateTime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDateTime.m; path = Source/Objects/GTLRDateTime.m; sourceTree = ""; }; + 3BBA1A4FC53D2DE892DE2B5AB5226E8B /* ColorBufferToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferToRDRAM.h; sourceTree = ""; }; + 3BBF510C2B0603EAC41E2079FEFC6A95 /* Glsl.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Glsl.hpp; sourceTree = ""; }; + 3BCF0A222961A427CD39D1C78BD6A993 /* Glsl.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Glsl.inl; sourceTree = ""; }; + 3BFF77F72AE6211AD9D42FD2E18375EF /* NstBoardWaixingSgz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSgz.hpp; sourceTree = ""; }; + 3C33E4A59D390AF25D605A289B4F902E /* AutoBuild.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AutoBuild.h; sourceTree = ""; }; + 3C4B8A5D7D056FB02966F159AFC5E9F4 /* DSEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = DSEmulatorBridge.mm; sourceTree = ""; }; + 3C581DB34643779E6E697D493C316D48 /* S2DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = S2DEX2.h; sourceTree = ""; }; + 3CE468B2DBAC6E3109B9A6E529ADACA1 /* PixelBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PixelBuffer.h; sourceTree = ""; }; + 3D0E61C75D78DD7A729364010BDBB106 /* gb_cart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gb_cart.h; sourceTree = ""; }; + 3D1A093309BA94F1AB20657C257070E2 /* RSTHelperFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTHelperFile.h; path = Roxas/RSTHelperFile.h; sourceTree = ""; }; + 3D27110A6DD067C15FC032BAF9BEE99E /* Input.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Input.swift; sourceTree = ""; }; + 3D3835A82BC331577B14F9F444CD9367 /* bootrom_hle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bootrom_hle.h; sourceTree = ""; }; + 3D5A8C2D0C4FF79FF4A82A7C02704490 /* UsersRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UsersRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/UsersRoutes.swift; sourceTree = ""; }; + 3D72B8F3909167EBE56E1BF0E3108516 /* complex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = complex.h; sourceTree = ""; }; + 3DA02F00ADA726E3CE0F82AA955FFB71 /* svsfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svsfnt.h; sourceTree = ""; }; + 3DADD8386C8821177B764FB59ACB6859 /* ControllerSkinProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkinProtocol.swift; sourceTree = ""; }; + 3DB4038AF1D67C948BF0ABB96BB0986E /* Harmony.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Harmony.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 3DEDD6511A23A74FFB52233C54AB8E03 /* GTLRRuntimeCommon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRRuntimeCommon.m; path = Source/Objects/GTLRRuntimeCommon.m; sourceTree = ""; }; + 3E46BEA7461AFEDDCEC478DB8D3425C3 /* NstBoardKonamiVrc7.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc7.hpp; sourceTree = ""; }; + 3E5950F1D94686CF45BF978347B71AA5 /* SaveStateProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SaveStateProtocol.swift; sourceTree = ""; }; + 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyDropbox.xcconfig; sourceTree = ""; }; + 3E8F9415B50C5BE88ACC481C92800E41 /* ftvalid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftvalid.h; sourceTree = ""; }; + 3E9A8C85F702C4A1468F58BB906D4ED1 /* NstVideoFilterNone.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterNone.hpp; sourceTree = ""; }; + 3ECC067B82E66713A45C44F973FA04EA /* list.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; + 3ED7DC207EA838F7ED17B7E0373391E2 /* mempak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mempak.h; sourceTree = ""; }; + 3EE0D71EAED7DDA51049859FE1209132 /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; + 3EEBB60E43F6C3B0B541EE72A7C426F9 /* VI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = VI.h; sourceTree = ""; }; + 3F3421F39C5B3686D06A4A47CFC049B7 /* NstBoardKonamiVrc2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc2.hpp; sourceTree = ""; }; + 3F67DC9F98BC9365BCA0C5FBE0E14C93 /* NstBarcodeReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBarcodeReader.hpp; sourceTree = ""; }; + 3F714F0736F9866EDD6871679177CF33 /* TextureFilters_2xsai.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_2xsai.h; sourceTree = ""; }; + 3FC4C12AAEC24F5791DDF9CF0F417BA0 /* RDP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RDP.cpp; sourceTree = ""; }; + 3FD22484CAFD9D6D7EDB3732DE4A047D /* arm_cpu_features.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = arm_cpu_features.h; sourceTree = ""; }; + 3FF38B518700B0B715F71F0BA0F88F21 /* AnyKeyPath+StringValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "AnyKeyPath+StringValue.swift"; sourceTree = ""; }; + 40018788A7B82BE36F7A4762218942C4 /* SNESEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESEmulatorBridge.h; sourceTree = ""; }; + 400B965700434B3B4E0F9FAC08AD895A /* UIViewController+TransitionState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+TransitionState.m"; path = "Roxas/UIViewController+TransitionState.m"; sourceTree = ""; }; + 40106E58B0E94346FDE0DC29003A577B /* NstState.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstState.hpp; sourceTree = ""; }; + 4060028836FDB7AAC525DB0819187A0C /* NstApiBarcodeReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiBarcodeReader.hpp; sourceTree = ""; }; + 406077526A3C40A99FE96076975E23CA /* PrimitiveType.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PrimitiveType.hpp; sourceTree = ""; }; + 409F0AD5337C7D82401596430BE50AB0 /* Pods-Delta-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Delta-resources.sh"; sourceTree = ""; }; + 40BF1C58E8788FDF52E4550CE38FFF13 /* pnglibconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pnglibconf.h; sourceTree = ""; }; + 40C24A38D0B2D424939FBE8FE393A00C /* FrameBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FrameBuffer.cpp; sourceTree = ""; }; + 40C9A47942EB199AC851986CB149BF7F /* Vector3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector3.hpp; sourceTree = ""; }; + 40D3DBD12BF6940FC1A2BE76A08E5471 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; + 40FF365F801C636BEE21293A877B902E /* rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rtc.h; sourceTree = ""; }; + 411D37B4E9D47D9CD8974A08B548DE8C /* Roxas.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Roxas.modulemap; sourceTree = ""; }; + 412BAE19C4FAEF8D92FCDC3FF9A59FED /* Music.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Music.hpp; sourceTree = ""; }; + 412DB502B74306CF8DF0466A42864A4E /* ServiceOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ServiceOperation.swift; sourceTree = ""; }; + 413E31D8C1624AEAC8EE7570F0551194 /* ftconfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftconfig.h; sourceTree = ""; }; + 414ABC5418ACBADFD1E0682648431076 /* mic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mic.h; sourceTree = ""; }; + 416A8E69A7929028B4EDF36F7813BCDA /* scoped_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = scoped_ptr.h; sourceTree = ""; }; + 416AB7C47B6BD20BDB570AFCF32DA07F /* Listener.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Listener.hpp; sourceTree = ""; }; + 41BA2F4E4D2870FCE74225CB5BAA4CE5 /* lua-engine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lua-engine.h"; sourceTree = ""; }; + 41D95E73EB648CA0896C3360092052A9 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; + 422BF12649973F5EF2DBFD89FD150DC9 /* UIScreen+ControllerSkin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIScreen+ControllerSkin.swift"; sourceTree = ""; }; + 4277D9CD49D8F32314F512361BE4B690 /* NstBoardBmc150in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc150in1.hpp; sourceTree = ""; }; + 42A9F4072A21C2D6095C0971EEC3FC1A /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + 43006531368CEA05883D7AB4553B591A /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; + 432A5751918B766667F9CD8866666085 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; + 43449379BD1A98A6E5C5169A5F74E9AA /* RSTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTError.m; path = Roxas/RSTError.m; sourceTree = ""; }; + 435368F303983E9CA139C506A1FEDEDB /* fterrdef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fterrdef.h; sourceTree = ""; }; + 437F2293962BC32124208AB59C25F268 /* Syncable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Syncable.swift; sourceTree = ""; }; + 43B52186D0ADE3F0F74317B7F542BF3E /* TcpListener.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TcpListener.hpp; sourceTree = ""; }; + 4405793D5AF1EFD9D2BDA30AA0D2E514 /* libRoxas.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRoxas.a; path = libRoxas.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 440D7ACB57B622DFF74C66B788D3B238 /* svttglyf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svttglyf.h; sourceTree = ""; }; + 442216A823D794BB8E292F6B3A6BB793 /* GraphicBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicBuffer.h; sourceTree = ""; }; + 4476D277BAC65A966CF97717AC7EC945 /* Archive+Writing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Writing.swift"; path = "Sources/ZIPFoundation/Archive+Writing.swift"; sourceTree = ""; }; + 447F33D4AC9DCC18BA8E7C821EB936A8 /* NstApiSound.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiSound.hpp; sourceTree = ""; }; + 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GBCDeltaCore.xcconfig; sourceTree = ""; }; + 44B96F7B857F663A80AED6CFBCED2EE1 /* NSUserDefaults+DynamicProperties.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSUserDefaults+DynamicProperties.h"; path = "Roxas/NSUserDefaults+DynamicProperties.h"; sourceTree = ""; }; + 44D209BABFBAEF92A3A476D1046B160F /* Texture.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Texture.hpp; sourceTree = ""; }; + 44F1BD582E0D3BBA64326BDB9B1D6DDD /* NstBoardCaltron.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCaltron.hpp; sourceTree = ""; }; + 451269EF812651EDABF4A20D0D0EC707 /* bios.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bios.h; sourceTree = ""; }; + 452F83D3A133C01B2A14268F26D6EB29 /* TextureFilters_xbrz.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_xbrz.h; sourceTree = ""; }; + 453A43AE3933FBE73C478E25DB5E476A /* RSTLoadOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTLoadOperation.m; path = Roxas/RSTLoadOperation.m; sourceTree = ""; }; + 455C3A1951DCCE758C8B38B0D96D1745 /* NstBoardMmc3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc3.hpp; sourceTree = ""; }; + 456C9F03B0C75358971F5599710FB4AC /* NstBoardIremH3001.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremH3001.hpp; sourceTree = ""; }; + 45E7411B04ED1D693EAE8865EB4AB4A8 /* RSTCellContentCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentCell.h; path = Roxas/RSTCellContentCell.h; sourceTree = ""; }; + 46026D348B650E6C7D5C37EC52B80A8F /* DebugDump.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DebugDump.cpp; sourceTree = ""; }; + 46068669BC91126FFFEA59576128CCDD /* NstBoardBmcGamestarA.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGamestarA.hpp; sourceTree = ""; }; + 4607BD69102AF97F0A85D6512B3409CD /* GTLRQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRQuery.h; path = Source/Objects/GTLRQuery.h; sourceTree = ""; }; + 46306F32408FC6EFC5F89D8105542A30 /* NESDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NESDeltaCore-umbrella.h"; sourceTree = ""; }; + 464088003409FF077A690AF31D685656 /* opengl_ColorBufferReaderWithEGLImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithEGLImage.h; sourceTree = ""; }; + 4659690ED156FCE3705F0C2B0C5811A4 /* UITableViewCell+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+CellContent.h"; path = "Roxas/UITableViewCell+CellContent.h"; sourceTree = ""; }; + 4673DE422676A6A6E7634A30B5B9E722 /* ftautoh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftautoh.h; sourceTree = ""; }; + 469D6302B5E25E6593C1E213ED0B446A /* opengl_Attributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_Attributes.h; sourceTree = ""; }; + 469D72AF2CB4C2BC1AEBC6D96997F695 /* ZlutTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZlutTexture.h; sourceTree = ""; }; + 46A7952AAD31367ED9BE353AA63C8C99 /* UISpringTimingParameters+Conveniences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISpringTimingParameters+Conveniences.m"; path = "Roxas/UISpringTimingParameters+Conveniences.m"; sourceTree = ""; }; + 46A81EB457DC21D9C21932C473EB359A /* NSManagedObject+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Harmony.swift"; sourceTree = ""; }; + 475A94434453EF6E1D44C3894F12A473 /* F3DGOLDEN.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DGOLDEN.h; sourceTree = ""; }; + 47DCB70C7A85BDDF58BAF31BC42404A1 /* md5.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; + 47EEB210C3F983E3F97BA5C90AEAE80C /* ControllerSkinTraits.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkinTraits.swift; sourceTree = ""; }; + 4805F8BC438B0132B2F50C26602B8DFA /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; + 480AE324EBF43D4B5582909423B482B4 /* NSConstraintConflict+Conveniences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSConstraintConflict+Conveniences.h"; path = "Roxas/NSConstraintConflict+Conveniences.h"; sourceTree = ""; }; + 482F462D88C4B5F90023E215B10AD635 /* GBI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GBI.cpp; sourceTree = ""; }; + 485C835BCAC9FE9D2D7A0723CC28AE49 /* DebugDump.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DebugDump.h; sourceTree = ""; }; + 485C8F569695892A8BF25E965F61DDE1 /* n64_cic_nus_6105.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = n64_cic_nus_6105.h; sourceTree = ""; }; + 4871776B4C704E222EB93D062575DC5A /* Base.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Base.swift; path = Source/SwiftyDropbox/Shared/Generated/Base.swift; sourceTree = ""; }; + 4873713B2974A1B7D8CB492B8921D329 /* Fabric.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Fabric.xcconfig; sourceTree = ""; }; + 4875A5F2894B64D59ABA846310074DDD /* pngerror.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngerror.c; sourceTree = ""; }; + 487C7DB0A7257F16983BEF8324BEF561 /* NESDeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = NESDeltaCore.bundle; path = "NESDeltaCore-NESDeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 48A397662316360402E0600E571AD262 /* ThreadImpl.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadImpl.hpp; sourceTree = ""; }; + 48A4A6EDC08C8AC933D0DCD507E9D173 /* libZIPFoundation.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libZIPFoundation.a; path = libZIPFoundation.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 48A852C211E587038DA4AA46F7C9B164 /* NativeActivity.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NativeActivity.hpp; sourceTree = ""; }; + 48CCDAD2D88669095B44ED625F56D7D0 /* TextureFilters_xbrz.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_xbrz.cpp; sourceTree = ""; }; + 4903CFCCF14E60B4FC1C1EFCB86ECE55 /* alist.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist.c; sourceTree = ""; }; + 490A6AF86E771A7376AA1B58EDEAE7EC /* ffmpeg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ffmpeg.h; sourceTree = ""; }; + 4935C2E2603C529A316EE9E50C953CA3 /* NstBoardSachen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachen.hpp; sourceTree = ""; }; + 496FED89B31EF5869368A5EC4A3DE18E /* Service.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = ""; }; + 49A05F402834F289E25A1D2D8D31ADA5 /* memory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = ""; }; + 49E2E93BB84159ECED9476CD991992C8 /* F3DAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DAM.cpp; sourceTree = ""; }; + 49EA3FD213D039FCC91628BD8DD260CA /* F3DEX2CBFD.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2CBFD.cpp; sourceTree = ""; }; + 49F843099C865EF969075D9084E1EE49 /* GraphicsDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicsDrawer.h; sourceTree = ""; }; + 4A32B8F42EA9A1885D2B08250359F9FC /* NstBoardKayH2288.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKayH2288.hpp; sourceTree = ""; }; + 4A571DDF52B0DE6907D9648064F9C203 /* Roxas-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Roxas-prefix.pch"; sourceTree = ""; }; + 4A684FB9EF326DE42BC2EDF06D0D6126 /* ManagedRecord+Predicates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Predicates.swift"; sourceTree = ""; }; + 4A6CEB53419EF6042E06B56676D1DAF8 /* DSDeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = DSDeltaCore.bundle; path = "DSDeltaCore-DSDeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 4AA3FD3271A56236EDAF6E49599021BA /* pngwio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwio.c; sourceTree = ""; }; + 4AAA4EBFA294D12114F5AAAB4941BFC2 /* NstBoardDreamtech.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDreamtech.hpp; sourceTree = ""; }; + 4B02B3B5A0036A6726FBD9167A2946A9 /* OGLRender_3_2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLRender_3_2.h; sourceTree = ""; }; + 4B0CD3AC5CF344D777C591A59C269664 /* SeenState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SeenState.swift; path = Source/SwiftyDropbox/Shared/Generated/SeenState.swift; sourceTree = ""; }; + 4B51F40AD66946C956A3C40AF6E4E5E6 /* Config.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Config.hpp; sourceTree = ""; }; + 4BBE3A12499742BD09D9EBD2B293371C /* HarmonyMetadataKey+Keys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "HarmonyMetadataKey+Keys.swift"; sourceTree = ""; }; + 4BD0DDE5441618EF592651345A1BB212 /* NstBoardUnlSuperFighter3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlSuperFighter3.hpp; sourceTree = ""; }; + 4BD2DEDB678D75D5ACAAB02F7DA550CA /* crosshairs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = crosshairs.h; sourceTree = ""; }; + 4BE2E896D06C7357E3D03BBCFA7DAC96 /* Platform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Platform.h; sourceTree = ""; }; + 4C032B7F3EF8BBC968A5EB242CD96FDF /* pif.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pif.h; sourceTree = ""; }; + 4C0BA17B21F19930A3F7215B702D7372 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; + 4C1AEA30A7ED0128954BF3C163D0526F /* ObjectHandle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ObjectHandle.cpp; sourceTree = ""; }; + 4C269A9412FC718CE8C8E996630F5873 /* svpsinfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpsinfo.h; sourceTree = ""; }; + 4C7AF11CE5076877102C9C295769C622 /* firmware.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = firmware.h; sourceTree = ""; }; + 4CCF50735B54E7E32704485AE919ABB5 /* FIFO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFO.h; sourceTree = ""; }; + 4CEF1CF6322D0D33545A1E86B80C6505 /* assem_arm64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_arm64.h; sourceTree = ""; }; + 4D0235C98A504B6ACCDF616BA0368556 /* CharacterSet+Hexadecimals.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "CharacterSet+Hexadecimals.swift"; sourceTree = ""; }; + 4D42075157F824B1040606B316473092 /* Harmony-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Harmony-dummy.m"; sourceTree = ""; }; + 4D625C34AD086F4A90C4372F2BED7491 /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; + 4DB5EBAC052F23A23935BC01F0F3BD13 /* F3DSETA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DSETA.cpp; sourceTree = ""; }; + 4DB7F32ED8575A87699DF593661DBD4B /* Data+Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Compression.swift"; path = "Sources/ZIPFoundation/Data+Compression.swift"; sourceTree = ""; }; + 4DC0729F6C80B77D9248BFEFE0B0F039 /* String.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = String.hpp; sourceTree = ""; }; + 4DDA965CE8714B275AFFEDDF6DC053CB /* NstBoardGouder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardGouder.hpp; sourceTree = ""; }; + 4DDEBD072685DD4E5D03FC470004711B /* NstBoardBmcSuperHiK300in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperHiK300in1.hpp; sourceTree = ""; }; + 4DEB79CC55673435872F4AC4127BD0B0 /* RSTRelationshipPreservingMergePolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTRelationshipPreservingMergePolicy.m; path = Roxas/RSTRelationshipPreservingMergePolicy.m; sourceTree = ""; }; + 4E413CD260AC5D4938501D07A19728DF /* TxQuantize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxQuantize.h; sourceTree = ""; }; + 4E4A59F776B62FE5D7D647BF19F07F8E /* StoneValidators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoneValidators.swift; path = Source/SwiftyDropbox/Shared/Generated/StoneValidators.swift; sourceTree = ""; }; + 4E4A6FA078E5D38752214D65807E3B87 /* GTMSessionFetcherLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherLogging.h; path = Source/GTMSessionFetcherLogging.h; sourceTree = ""; }; + 4E669C711147F6173C46040444135A2D /* UISpringTimingParameters+Conveniences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISpringTimingParameters+Conveniences.h"; path = "Roxas/UISpringTimingParameters+Conveniences.h"; sourceTree = ""; }; + 4E7E27D5ACEAA8A8DA1B1BD200ED75A2 /* netplay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = netplay.h; sourceTree = ""; }; + 4E9E01B822B1A73A97B8C2E46EDEF08A /* statemanager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = statemanager.h; sourceTree = ""; }; + 4EC7300212B3C57CD396DDC7242519F3 /* apu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = apu.h; sourceTree = ""; }; + 4ED141EBC657EC07C8D65BCD12249B41 /* glsl_CombinerProgramUniformFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramUniformFactory.h; sourceTree = ""; }; + 4EDFE6FDF5489F61CF533AAB848DEC32 /* AlResource.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = AlResource.hpp; sourceTree = ""; }; + 4EFC0CB26048698A849DD6BD85E55424 /* Joystick.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Joystick.hpp; sourceTree = ""; }; + 4F5BF7EF7AAE901FB3EF08FEB9603AEE /* NstPatcher.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcher.hpp; sourceTree = ""; }; + 4F751BB6AC156EB594F059E95D44A853 /* GoogleToolboxForMac.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleToolboxForMac.modulemap; sourceTree = ""; }; + 4F8D603EBE941AC871B0A2F47AD5B6D5 /* Pods-Delta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Delta-dummy.m"; sourceTree = ""; }; + 4FCA09C91A2EF02A01FA5D74C5F06804 /* KeyboardResponder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardResponder.swift; sourceTree = ""; }; + 504F1B8F7739C07C121A17267D9DC80F /* NstBoardFb.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFb.hpp; sourceTree = ""; }; + 5067F54BACFB55351717D53F24D5E781 /* pngstruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; + 50A10752DB4054391124647027696A55 /* TxUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxUtil.cpp; sourceTree = ""; }; + 50B2D8F8859A064B41E83B36809CD1EE /* FullscreenResolutions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FullscreenResolutions.h; sourceTree = ""; }; + 50BD32E959F332B2734900E76DAB58D2 /* GTLRObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRObject.m; path = Source/Objects/GTLRObject.m; sourceTree = ""; }; + 50CB5AEC945198AAFCB4B3596F9CC624 /* RSTArrayDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTArrayDataSource.m; path = Roxas/RSTArrayDataSource.m; sourceTree = ""; }; + 50FBE486AFEBB34A067A593F41720663 /* opengl_GraphicsDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_GraphicsDrawer.h; sourceTree = ""; }; + 5117CC789D8C47E9B0F2888AB14F3E74 /* GTLRDriveQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDriveQuery.h; path = Source/GeneratedServices/Drive/GTLRDriveQuery.h; sourceTree = ""; }; + 51196ADA4CCEDC1501A36E7771844D40 /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; + 51271E29C0A54F7A1326245A7BE21051 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; + 517688C527284043BBF5D64716B79E5E /* Roxas.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Roxas.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 51A794B9A074BF2025C358E236D42F05 /* NstBoardTaito.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaito.hpp; sourceTree = ""; }; + 51F387B6A186310DE8AB25011DB2D480 /* alist_naudio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_naudio.c; sourceTree = ""; }; + 5217968080F1594E30A54230FEEE2E88 /* GoogleAPIClientForREST-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleAPIClientForREST-dummy.m"; sourceTree = ""; }; + 521E061C02DD904E7838383DE2E1B0CF /* exprNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = exprNode.h; sourceTree = ""; }; + 5221F56A802033E50A6CA3492E382A3C /* NstBoardKonamiVrc3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc3.hpp; sourceTree = ""; }; + 5233AE6CB42C097DA937081AB4814A39 /* NstBoardFujiya.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFujiya.hpp; sourceTree = ""; }; + 52373DA4A745FB2484B38C3DBF6F4512 /* NstBoardBmcFamily4646B.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcFamily4646B.hpp; sourceTree = ""; }; + 52468FE08B22885CDC155AF176219E41 /* NstBoardBmcFk23c.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcFk23c.hpp; sourceTree = ""; }; + 524FD8CB9B96FEC42DEBFF4F6485E0C0 /* NstBoardBandaiAerobicsStudio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiAerobicsStudio.hpp; sourceTree = ""; }; + 525B2A3CC0AB6E54AFD0C4CAE7B17B9D /* SDL_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_config.h; sourceTree = ""; }; + 5291FC66BF51E30DA83DE18DA93737CB /* SwiftyDropbox.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyDropbox.modulemap; sourceTree = ""; }; + 5294532669D6FD1AE4D2A9F8C4A86C90 /* GoogleToolboxForMac.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleToolboxForMac.xcconfig; sourceTree = ""; }; + 52CF632514D6A787809AE4E842F41C5E /* Clock.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Clock.hpp; sourceTree = ""; }; + 52EF51E3091C9D586B56E01C7A9F0C53 /* NstInpRob.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpRob.hpp; sourceTree = ""; }; + 5385CA919BFDAA02107CE76AD241472B /* NstBoardNamcot163.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot163.hpp; sourceTree = ""; }; + 538F7789F2608728E516881281A64037 /* glsl_SpecialShadersFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_SpecialShadersFactory.cpp; sourceTree = ""; }; + 539542F40794BD9C9D5856536A7CA2EC /* spc7110dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110dec.h; sourceTree = ""; }; + 53A3C2A5341545B46CCEF6C7DCCC3D12 /* callbacks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; + 53A730F4F4248E7E3F38F8409A2DE97C /* libSMCalloutView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSMCalloutView.a; path = libSMCalloutView.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 542213FAAE95E6EA5E3E9392D8DD3B49 /* OAuth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuth.swift; path = Source/SwiftyDropbox/Shared/Handwritten/OAuth.swift; sourceTree = ""; }; + 54254E0189355E5C8E760E6CEB171480 /* Record.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Record.swift; sourceTree = ""; }; + 5456371B4D7DC880854562F4F53807C1 /* DropboxClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxClient.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxClient.swift; sourceTree = ""; }; + 5466366B9F12E1CFE3A59B79884E3E1D /* GoogleToolboxForMac-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleToolboxForMac-prefix.pch"; sourceTree = ""; }; + 546B78B239F8467F1682E4319F7B44FB /* ftdriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftdriver.h; sourceTree = ""; }; + 54D7EAAB9EB13A07D24F1B8561B5C617 /* SQLite.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-prefix.pch"; sourceTree = ""; }; + 54EB6E02433DBB4599FF9FECA6F74BEC /* NstBoardWaixing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixing.hpp; sourceTree = ""; }; + 54ECA01A22C32DC89AB39DF9BFFD5FB6 /* DeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = DeltaCore.bundle; path = "DeltaCore-DeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 555DB2B83943DAFAC8FBDB0E065CCC16 /* Util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Util.h; sourceTree = ""; }; + 55B412A3E753F75718995BBB767197FD /* File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = ""; }; + 55D03E3855F24EC46248235CA4AB84AE /* NstBoardBandaiKaraokeStudio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiKaraokeStudio.hpp; sourceTree = ""; }; + 55E6130B2C30062EF18AFC05336D16E6 /* ZIPFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-prefix.pch"; sourceTree = ""; }; + 56359FB46FDD3587DC048FBE0BC7E9E1 /* NonCopyable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NonCopyable.hpp; sourceTree = ""; }; + 56521BBB435C7A22CFF991B7B01066DE /* zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = zlib.h; sourceTree = ""; }; + 578F350CDE9D940384DFB5636F635219 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; + 57934C5612E8312E8D46FB26A52FE946 /* state_osd_elements.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = state_osd_elements.h; sourceTree = ""; }; + 57D0C008F4F6ABB93A720C171837F7EA /* UICollectionViewCell+Nibs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+Nibs.h"; path = "Roxas/UICollectionViewCell+Nibs.h"; sourceTree = ""; }; + 57F1FC93C4F0049F6CC1DE462EAD9871 /* retro_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_common.h; sourceTree = ""; }; + 580B1B5358971578E8D067CD87CCA4EE /* convert.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = convert.cpp; sourceTree = ""; }; + 582940D574BD4B0474117DA6BE586566 /* resource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = ""; }; + 5844DE373A9FE031984BEA797C1C7A39 /* alist_nead.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_nead.c; sourceTree = ""; }; + 587FE8C376C86B170BA2C85960B06B3F /* Sound.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; }; + 58ADB3F7E23F3C6F3AEB1D5017488FDC /* oglft_c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = oglft_c.h; sourceTree = ""; }; + 58B5E7D372F81123297C2A52505FD923 /* hle_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle_internal.h; sourceTree = ""; }; + 58E928D560BC439381C0BD2BAE388083 /* m64p_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_types.h; sourceTree = ""; }; + 58F426BB1C791A20225DADEEE031718A /* NstBoardQj.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardQj.hpp; sourceTree = ""; }; + 5901F945E4B7BD8E993A572C8320D4E8 /* NstBoardAveNina.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAveNina.hpp; sourceTree = ""; }; + 593CF251B99826ECC39AE11BE6568BFF /* WindowHandle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = WindowHandle.hpp; sourceTree = ""; }; + 595E9C1882A362C695C4D22B2193663E /* sdl_key_converter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdl_key_converter.h; sourceTree = ""; }; + 5974CDB2492B4BFA5566A1D118F12B98 /* bldno.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bldno.h; sourceTree = ""; }; + 59F17550D814845B484B295BDDA7E52E /* T3DUX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = T3DUX.cpp; sourceTree = ""; }; + 5A01843AE7F8A9690F749CE033E441E4 /* ftbzip2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbzip2.h; sourceTree = ""; }; + 5A0B7AABE64CE3CFD6CBD4F335F9FBE1 /* ftserv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftserv.h; sourceTree = ""; }; + 5A201B11504778569D1F2D7EB83668E6 /* DeltaCoreProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeltaCoreProtocol.swift; sourceTree = ""; }; + 5A43F1D8E9F0EE020CB6D17932CE6292 /* GBADeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBADeltaCore.h; sourceTree = ""; }; + 5A52DF3CA0011FA99AF644362B09A598 /* DBChunkInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBChunkInputStream.h; path = Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.h; sourceTree = ""; }; + 5A73FCE0E18FBE8EBCCEB74397FEC76A /* NstInpPachinko.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPachinko.hpp; sourceTree = ""; }; + 5AB3CC30BCD19485A7A87DB2D78E2BA1 /* GTMSessionUploadFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionUploadFetcher.h; path = Source/GTMSessionUploadFetcher.h; sourceTree = ""; }; + 5AC3A6B0034D34F9209BBD58348B9047 /* Window.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Window.hpp; sourceTree = ""; }; + 5B314596089C9694EA48772E604953E9 /* Parameter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Parameter.h; sourceTree = ""; }; + 5B3906E0F867AD7DBE110BED3C71FCD8 /* NstBoardBmcNovelDiamond.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcNovelDiamond.hpp; sourceTree = ""; }; + 5B549F21788F17AE386F9C9F83BACC06 /* ClipPolygon.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ClipPolygon.cpp; sourceTree = ""; }; + 5B818731B433680AC0669D4C8ECB8E13 /* ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist"; sourceTree = ""; }; + 5BACFFAA0E0BD975E90FF29D6B33B0B3 /* clock_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clock_backend.h; sourceTree = ""; }; + 5C1B35A10293013EB1FF554F7BEB76DC /* GTLRService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRService.h; path = Source/Objects/GTLRService.h; sourceTree = ""; }; + 5C44BBA15DF8CEE92A417577E4C1D5D9 /* NstBoardBandaiLz93d50ex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiLz93d50ex.hpp; sourceTree = ""; }; + 5C52587C427298A7375DC3C3DADBC541 /* ftpfr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftpfr.h; sourceTree = ""; }; + 5C64FD116A93B9A66533D1BA551BF885 /* NstBoardEvent.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardEvent.hpp; sourceTree = ""; }; + 5C6513BE3B8C4EE62832D30F3B73EE32 /* NstInpBandaiHyperShot.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpBandaiHyperShot.hpp; sourceTree = ""; }; + 5C8D94F40BF63E8927B70BB024B0F136 /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/SQLite/Core/Connection.swift; sourceTree = ""; }; + 5C906D0B80F5FF86C1D338A347708D05 /* NstInpZapper.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpZapper.hpp; sourceTree = ""; }; + 5C912B946BDF259EF135410F6A5237EA /* UIResponder+FirstResponder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIResponder+FirstResponder.swift"; sourceTree = ""; }; + 5CD922BCE2DF46F11E7202475E037EF6 /* conffile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = conffile.h; sourceTree = ""; }; + 5D08BCF7193B533EB2AF5071C88F1E40 /* GLFunctions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GLFunctions.cpp; sourceTree = ""; }; + 5D2215E3C485C95C307BE07BC62D0E65 /* glsl_ShaderPart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_ShaderPart.h; sourceTree = ""; }; + 5D28BE3E5AFE58F245865607BE7171E8 /* PluginAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PluginAPI.h; sourceTree = ""; }; + 5D654A5B901E387BCEA877A4F4B1FC31 /* FrameBufferInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FrameBufferInfo.cpp; sourceTree = ""; }; + 5D72BB4EABA02D0C40C9847B11342161 /* PaperRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PaperRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/PaperRoutes.swift; sourceTree = ""; }; + 5D797E9A5C5782CE845840781FA1CC81 /* libAlamofire.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libAlamofire.a; path = libAlamofire.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 5DBAD979C7A7D60BB2463567CEF807D0 /* cpuops.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuops.h; sourceTree = ""; }; + 5DC0155465127BC9B36185F96DDCAB75 /* opengl_Utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Utils.cpp; sourceTree = ""; }; + 5DCDE4D17E50CB5CCFB03F65E6287BF0 /* F3DPD.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DPD.cpp; sourceTree = ""; }; + 5DE84C1C459F13BAD44A6B87EDA3189E /* zconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = zconf.h; sourceTree = ""; }; + 5E64591CCE82CAC6775DAB365A75A8BC /* GTLRQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRQuery.m; path = Source/Objects/GTLRQuery.m; sourceTree = ""; }; + 5E75AFF4F05B942A1BEDA96CDD1D5F6E /* RSTActivityIndicating.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTActivityIndicating.h; path = Roxas/RSTActivityIndicating.h; sourceTree = ""; }; + 5E81E563B519CB275A216BD3E5414DAA /* AudioRendering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioRendering.swift; sourceTree = ""; }; + 5EAB88E1F1D57B7D17D40ED0872DB766 /* GoogleSignIn.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleSignIn.xcconfig; sourceTree = ""; }; + 5EC841F694F3A53D5F5B027513353CD6 /* opengl_Parameters.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Parameters.cpp; sourceTree = ""; }; + 5EE59BD5CCE08A1257054978F5F52E22 /* Dialogs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Dialogs.h; sourceTree = ""; }; + 5F04014B383F64E12DE6C9129A85A7C5 /* Delta.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delta.swift; path = DeltaCore/Delta.swift; sourceTree = ""; }; + 5F38047E1651287DC3AA705DF9C06C72 /* NstBoardRcm.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRcm.hpp; sourceTree = ""; }; + 5F4BA7A7D97044CD5A2BE415D287BEC1 /* Time.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Time.hpp; sourceTree = ""; }; + 5F5D1223821815A7C2C130C5144F0006 /* N64DeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = N64DeltaCore.modulemap; sourceTree = ""; }; + 5F992EC4AD08ED4806E1B360451E1861 /* T3DUX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = T3DUX.h; sourceTree = ""; }; + 5F9A4CA2154481A63B5E58F37EBDA908 /* ftcffdrv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcffdrv.h; sourceTree = ""; }; + 5FBF0DA69F6371EE6C6D63D8001D8D95 /* ColorBufferReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ColorBufferReader.cpp; sourceTree = ""; }; + 5FCE00327D6825CD6F2088A345690DCC /* RenderTexture.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderTexture.hpp; sourceTree = ""; }; + 600582314CC9166CC637A8451ADB1310 /* ZSort.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZSort.cpp; sourceTree = ""; }; + 603DD39C57569C32BD836469768B346F /* String.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = String.cpp; sourceTree = ""; }; + 60639E02A2579DF3195EEC16A0556CF6 /* SNESDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SNESDeltaCore-prefix.pch"; sourceTree = ""; }; + 60655F2593406B5777F801C875F02F75 /* font.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = ""; }; + 60925EDCF9318CAB1FA3938859111AE0 /* tima.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tima.h; sourceTree = ""; }; + 60C7CDBA93C7797D9E83FBA84FAE7FD2 /* RecordEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordEntry.swift; sourceTree = ""; }; + 60E307E020BBFAC21769EFBA79153CCD /* NstBoardCony.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCony.hpp; sourceTree = ""; }; + 610583D92AD551F88F44D66D964F1334 /* NstMemory.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstMemory.hpp; sourceTree = ""; }; + 612BF149D2E48CC9950BEEB2FC03B60F /* NstBoardBmc72in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc72in1.hpp; sourceTree = ""; }; + 61596E997AFE32646B435FCBF43BA32F /* tttags.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tttags.h; sourceTree = ""; }; + 618949190C9EE4497D8F00EDA7A856E7 /* Config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; + 61922816ADB3E7C4600DF77D3B382727 /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; }; + 619F66C6C65A42C014C9700FAB9316F8 /* TextureFilters_hq4x.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_hq4x.cpp; sourceTree = ""; }; + 61B9452797C7F91FF8966E5CB4C041E0 /* PrepareUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrepareUploadingRecordsOperation.swift; sourceTree = ""; }; + 61C1E3F8AE5D758C9D04B1A80F1A6C85 /* NstBoardWaixingSecurity.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSecurity.hpp; sourceTree = ""; }; + 6207EF118B9280CEDE13421C4CF64C8B /* SocketSelector.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SocketSelector.hpp; sourceTree = ""; }; + 620CBB9D49ED951D7497FDB4C115660B /* NSString+Localization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Localization.h"; path = "Roxas/NSString+Localization.h"; sourceTree = ""; }; + 6249457A28CDE33CCE657105EDBF5C7C /* armcpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = armcpu.h; sourceTree = ""; }; + 624F9323E74C2F61AB1277993C89EBD7 /* DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DeltaCore-prefix.pch"; sourceTree = ""; }; + 6259A047C58B19EAEDC1BA8DC19B918E /* NstInpHoriTrack.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpHoriTrack.hpp; sourceTree = ""; }; + 62653D6633FD230F25923698824EFA8E /* AudioManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioManager.swift; sourceTree = ""; }; + 6270AB27CBF8BA6CBBAF402530B111BF /* NstBoardSomeriTeamSl12.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSomeriTeamSl12.hpp; sourceTree = ""; }; + 627617EFA316732258422811C97719BF /* NstBoardMxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMxRom.hpp; sourceTree = ""; }; + 62945616EBEA8F7DB40A59C37964637B /* NstBoardBmcVt5201.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcVt5201.hpp; sourceTree = ""; }; + 62948F129BEF321213BDE3AC38E0CBDC /* NstBoardMagicSeries.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMagicSeries.hpp; sourceTree = ""; }; + 62CFF0059E7E0AE9B9B20A8DBAE51D16 /* NstBoardSomeriTeam.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSomeriTeam.hpp; sourceTree = ""; }; + 62F06888B27D96F21A3D53797DD35725 /* Err.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Err.cpp; sourceTree = ""; }; + 631827F8F7F53171DBE8CFA596562B76 /* NESEmulatorBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NESEmulatorBridge.swift; sourceTree = ""; }; + 6339330C707D1D8177B1FCDB213946EB /* Time.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Time.cpp; sourceTree = ""; }; + 634114A0217955A80057DD03929C6053 /* screenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = screenshot.h; sourceTree = ""; }; + 635101CB7845320BEBBEE9E499DCF372 /* Rect.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Rect.inl; sourceTree = ""; }; + 6365C9968A510968784A08051605D583 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; + 636BCAA16AC311A2A310C344BD9FBCB8 /* DisplayWindow.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DisplayWindow.cpp; sourceTree = ""; }; + 638C5EE8459794EA00003C69343C4289 /* RecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordOperation.swift; sourceTree = ""; }; + 63BABDED98CDB1DC811FC1832968CE5D /* EEprom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = EEprom.h; sourceTree = ""; }; + 63E04C5EE8B5C9B04E756F888630E85E /* memalign.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memalign.h; sourceTree = ""; }; + 63E486C49EB5CD189D8E3D136D388F32 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; + 63E5FFFBD052DA0F226FA6C644365420 /* ftgzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgzip.h; sourceTree = ""; }; + 6487DFB243D65653DF7438DCBA67EB91 /* osal_files.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osal_files.h; sourceTree = ""; }; + 64B255C31BCB0FDD8AB113CF71D128C3 /* DS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DS.swift; sourceTree = ""; }; + 64F52923D2670C65E03D742EF710218A /* NstBoardHosenkan.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHosenkan.hpp; sourceTree = ""; }; + 64F5E353543E813AE8499F0415496364 /* GBALink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBALink.h; sourceTree = ""; }; + 650B17EB11403844F72B9E0117949D63 /* GTLRDriveObjects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDriveObjects.m; path = Source/GeneratedServices/Drive/GTLRDriveObjects.m; sourceTree = ""; }; + 657EC94D6685264E5B97804EFAAB8145 /* NstSoundPlayer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundPlayer.hpp; sourceTree = ""; }; + 65B9EE37937D4417CCF0576098C38148 /* UserDefaults+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UserDefaults+Harmony.swift"; sourceTree = ""; }; + 6630BB30C19291FAB71F19904132A2FB /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + 66403032D229EFE419B1F624D8E3A6AE /* game_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = game_controller.h; sourceTree = ""; }; + 6653BEF078E8146300FE0A11A7E562B9 /* NstBoardBmc20in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc20in1.hpp; sourceTree = ""; }; + 66814AC3B3C466A4870833B7CC41BE34 /* osal_files_ios.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = osal_files_ios.mm; sourceTree = ""; }; + 67464BB3B17BCC0986DEB6DD52C604A5 /* osal_dynamiclib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osal_dynamiclib.h; sourceTree = ""; }; + 6768756BD63AFB81ABEB6934A427CA39 /* UploadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordsOperation.swift; sourceTree = ""; }; + 678B4D33461C1C6B1A1DAD8189F4BEB2 /* UICollectionView+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionView+CellContent.h"; path = "Roxas/UICollectionView+CellContent.h"; sourceTree = ""; }; + 67AB883A36469191BFD529D65D8810A1 /* CheatProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CheatProtocol.swift; sourceTree = ""; }; + 6822483789D6B6BB133ABB5446BCFF2D /* Setter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Setter.swift; path = Sources/SQLite/Typed/Setter.swift; sourceTree = ""; }; + 68263C62DDF9F51529551BECBBD26620 /* GTLRErrorObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRErrorObject.m; path = Source/Objects/GTLRErrorObject.m; sourceTree = ""; }; + 684FBE5FB16F9A9B0FC3DD78F607C946 /* KeyedContainers+ManagedValues.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "KeyedContainers+ManagedValues.swift"; sourceTree = ""; }; + 6871DA21F2195F33706882F64D12E1D8 /* svpscmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpscmap.h; sourceTree = ""; }; + 687441E742910C0DF7081813BECD4638 /* device.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = device.h; sourceTree = ""; }; + 68753DE722C0980098E0081FA7664AD1 /* NstBoardNitra.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNitra.hpp; sourceTree = ""; }; + 6878BE119742EC0C21A2CB0F923D256C /* NstBoardUnlXzy.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlXzy.hpp; sourceTree = ""; }; + 695EC8428ABF7B3AF98FDB33DD69DB98 /* NstBoardBmcCtc65.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcCtc65.hpp; sourceTree = ""; }; + 696FB5C2FDDB6402D85459020872DE22 /* common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; + 69ABB3390625B7C34F4619CCD4F218E2 /* RemoteFile+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+Dropbox.swift"; sourceTree = ""; }; + 69C6B83D4542C5716F38FE2C2C2E343E /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; + 69CFD44724961B202086D65543370D05 /* NstPins.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPins.hpp; sourceTree = ""; }; + 6A2CACDB9FCC4BFBF7C2F672657367FF /* GTLRDriveService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDriveService.h; path = Source/GeneratedServices/Drive/GTLRDriveService.h; sourceTree = ""; }; + 6A32869D90E7BAC47B25D2F8E75F7856 /* Roxas.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Roxas.h; path = Roxas/Roxas.h; sourceTree = ""; }; + 6A36744D626ECD3743CA4F297A98EA19 /* memory.c */ = {isa = PBXFileReference; includeInIndex = 1; path = memory.c; sourceTree = ""; }; + 6A3C6439C7D592FA721C9BF78D5CF6BC /* savestates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = savestates.h; sourceTree = ""; }; + 6A4B7B6EB4DB8A673532771B4AA8B264 /* TeamPolicies.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamPolicies.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamPolicies.swift; sourceTree = ""; }; + 6A6E6BA6F73F029637AC87BB994DE38D /* SoundBuffer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundBuffer.hpp; sourceTree = ""; }; + 6A8950AA257A8E57DB3C9539DBCCC980 /* Flash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Flash.h; sourceTree = ""; }; + 6AA8B9D838C07E38061D4BB84F3D8B62 /* TextureFilters.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters.cpp; sourceTree = ""; }; + 6AA904F6B4EABFBD175084421003EB09 /* TxReSample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxReSample.h; sourceTree = ""; }; + 6ADD780B3EFDC84E892E216A11E12B84 /* NstBoardAcclaim.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAcclaim.hpp; sourceTree = ""; }; + 6AF623F3493038D6261BFE6D75F9E9D3 /* m64p_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_common.h; sourceTree = ""; }; + 6B121A5474D97495A9D2594CBE9B2C38 /* profile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = profile.h; sourceTree = ""; }; + 6B139C8BFA41616549DEEAA545317F7F /* NstBoardBmcSuperVision16in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperVision16in1.hpp; sourceTree = ""; }; + 6B21034826F7C6098BB4DBFE00B2498C /* NstBoardRexSoftDb5z.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRexSoftDb5z.hpp; sourceTree = ""; }; + 6B2D3B45DE97EE84171CC1A90FD17872 /* plugins_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = plugins_compat.h; sourceTree = ""; }; + 6B525F9D23FEA3BE925293A80FEC7DCC /* InputSoundFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = InputSoundFile.hpp; sourceTree = ""; }; + 6B551B63369A33A731AE3B25B4C7E772 /* Harmony-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-umbrella.h"; sourceTree = ""; }; + 6B555E9059530B6964B3908B22140C42 /* GTLRBatchResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRBatchResult.h; path = Source/Objects/GTLRBatchResult.h; sourceTree = ""; }; + 6B58A269231B9317967B84F433CD1F14 /* NstVsSuperXevious.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsSuperXevious.hpp; sourceTree = ""; }; + 6C79D85ABB10589F765DD64715EEEAD3 /* ZIPFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-umbrella.h"; sourceTree = ""; }; + 6C7AA36ACFE2AD062803B5CC90965154 /* NstPpu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPpu.hpp; sourceTree = ""; }; + 6C86335713D20D759954CBB00EC6AEC3 /* FramebufferTextureFormats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FramebufferTextureFormats.h; sourceTree = ""; }; + 6C87A284686A358CFAC958B264749422 /* NstBoardJalecoJf11.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf11.hpp; sourceTree = ""; }; + 6CD2701346D82207B53CC9EC541F8AB0 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = Sources/SQLite/Typed/Schema.swift; sourceTree = ""; }; + 6CDA9A78863460869F150386B089AF8F /* AggregateFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AggregateFunctions.swift; path = Sources/SQLite/Typed/AggregateFunctions.swift; sourceTree = ""; }; + 6D3563437D8960176CEF09AD9B1291B0 /* NstApiRewinder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiRewinder.hpp; sourceTree = ""; }; + 6D9291C6142C075D49A0EDDA11CC4A78 /* NstFds.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFds.hpp; sourceTree = ""; }; + 6D98E76BA27C3752F885C66312189CB2 /* SMCalloutView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SMCalloutView.modulemap; sourceTree = ""; }; + 6DDEEF3EE5DBC5E579DE48E15CE14565 /* NoiseTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NoiseTexture.h; sourceTree = ""; }; + 6DF0969A7AD1D99F4FACAB29DD35412A /* m64p_debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_debugger.h; sourceTree = ""; }; + 6DF6C3B7940689905856C5444F2A0E35 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + 6E03BC1605808403D83828FBCFBE7F28 /* OutputSoundFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = OutputSoundFile.hpp; sourceTree = ""; }; + 6E2C328E034800C2CB26F5B94B12DDF6 /* DropboxTransportClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxTransportClient.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxTransportClient.swift; sourceTree = ""; }; + 6E65D162B8D927702A508BF68B07EF7D /* GLideN64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideN64.h; sourceTree = ""; }; + 6E6ABC72122793A5F3381924CC2D9BE8 /* Harmony.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Harmony.xcconfig; sourceTree = ""; }; + 6E7206B56B9ED9A2B4822DC503DF31D7 /* rhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rhash.h; sourceTree = ""; }; + 6E755BD7B9E84110CD165AA817987A71 /* opengl_BufferManipulationObjectFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_BufferManipulationObjectFactory.cpp; sourceTree = ""; }; + 6E7AAD31402E31872C9054EB4185634A /* android_hardware_buffer_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = android_hardware_buffer_compat.h; sourceTree = ""; }; + 6E7D780A13B2915F46EF4226090CBCC5 /* hle_external.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle_external.h; sourceTree = ""; }; + 6EC397E433E2CCBB38824AB04FAAC26C /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; + 6EC6A1A3D10181EB3D7A3F51FFA233C6 /* NstInpMouse.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpMouse.hpp; sourceTree = ""; }; + 6F2799783940A21EC2EE44D1A48F5758 /* FilesRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilesRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift; sourceTree = ""; }; + 6F994DCAAF05A0E4ADF9D352FAB0A16E /* RemoteRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteRecord.swift; sourceTree = ""; }; + 6FBD67C48E00871A2582075478C8DA5B /* Http.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Http.hpp; sourceTree = ""; }; + 6FD06664B1E05662499252D81EE4BDD5 /* TexrectDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TexrectDrawer.h; sourceTree = ""; }; + 6FD1CD254FC9810DC969445799C4AC02 /* fpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fpu.h; sourceTree = ""; }; + 6FE77E68F4303153680AF10EC9A30266 /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; + 703D2463A2508D59FAA3694C995EBC4E /* NstChips.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstChips.hpp; sourceTree = ""; }; + 706DA94E13FDA915B64893FE9918C85F /* transferpak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = transferpak.h; sourceTree = ""; }; + 707293F0FD9EBD1A0C126D2597D63C1E /* NSFileManager+URLs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileManager+URLs.m"; path = "Roxas/NSFileManager+URLs.m"; sourceTree = ""; }; + 707D301E564B6E14192946179A6F87F5 /* Result+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Dropbox.swift"; sourceTree = ""; }; + 70CFA30438DAE2DBE32611495D872EB6 /* ftstdlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftstdlib.h; sourceTree = ""; }; + 70DD00852D37B01767D028ED9AA2DDAD /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 70E06F935BCC172832EAFB66DF8A22AF /* RemoteRecord+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+Dropbox.swift"; sourceTree = ""; }; + 7112AF9DF88E284F7F0D82E3379A2B7D /* Roxas-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Roxas-dummy.m"; sourceTree = ""; }; + 712761EE4481E36BC7DD29218D12A6CF /* DSDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DSDeltaCore-umbrella.h"; sourceTree = ""; }; + 715964B79C52F9A32AC5669D6D1A75E9 /* biopak.c */ = {isa = PBXFileReference; includeInIndex = 1; path = biopak.c; sourceTree = ""; }; + 7174246F378A58D37BD4927CEE3799A4 /* plugin_delta.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = plugin_delta.cpp; sourceTree = ""; }; + 719867C7F45388063CEC3252848F288D /* winlnxdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = winlnxdefs.h; sourceTree = ""; }; + 71BB6834A4E68AEDDD4B95D4E80B0672 /* GTMSessionFetcher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-prefix.pch"; sourceTree = ""; }; + 71E464E228C2FFB740BCB0AF049E4332 /* NstBoardNamcot.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot.hpp; sourceTree = ""; }; + 71F6E550519668062C1B78FCF1BBCEA0 /* debug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; + 71FBFADC850B449A9B9A5C0D9F8BFD67 /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + 71FF835F27DBABBE447A40E51AF4AC68 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + 72224C07100B6D8A8371BBAC83840304 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; + 72248A001C60C8B9DD1CCDC9D78DAE0B /* NstBoardKaiser.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKaiser.hpp; sourceTree = ""; }; + 72E7904615D88779CADD558D3456DD5F /* gSP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gSP.h; sourceTree = ""; }; + 72EC1BB681A1EE53852B18D9C14B635B /* NstZlib.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstZlib.hpp; sourceTree = ""; }; + 72EF249EE7E9290384CEF4D02C6444B0 /* NstBoardFukutake.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFukutake.hpp; sourceTree = ""; }; + 72FFB39A7A98F30C88D79B8E0A8EAEE5 /* preproc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = preproc.h; sourceTree = ""; }; + 73006DC6C1509BB82F83AC8D88F0481E /* NstBoardBmc31in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc31in1.hpp; sourceTree = ""; }; + 73427BAA44C8216F08EDAC6A0CAD0190 /* NstBoardSachen74x374.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachen74x374.hpp; sourceTree = ""; }; + 7362D3AF48B22723885E66B0D25420E5 /* encrypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = encrypt.h; sourceTree = ""; }; + 736E24DAB59401834EC1B3DBAEF4EEF6 /* DateAndTimeFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateAndTimeFunctions.swift; path = Sources/SQLite/Typed/DateAndTimeFunctions.swift; sourceTree = ""; }; + 739C9A35C56A321A5F6DEC9276C9A451 /* NstBoardBmcY2k64in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcY2k64in1.hpp; sourceTree = ""; }; + 73B5114410208E3603B7C257E4448663 /* ConflictRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordsOperation.swift; sourceTree = ""; }; + 73BCCFACB97ADF9811932D4767D83953 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; + 73D96244D69D5586A7CEBA91D3674E96 /* F3DEX2ACCLAIM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2ACCLAIM.h; sourceTree = ""; }; + 747E5693480F6B6F20690DB12E236F86 /* glsl_CombinerProgramImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramImpl.h; sourceTree = ""; }; + 74853BDEC32A6CFF7D0D323E406FE7A9 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; + 74A1A47D0674A91258AD7D9DAB661740 /* NstBoardBtlT230.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlT230.hpp; sourceTree = ""; }; + 74B33477F335E1B6177EC8672F22289C /* pngconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngconf.h; sourceTree = ""; }; + 74F470E8DD823ED4FE7D10FB84B4ABD8 /* hle.c */ = {isa = PBXFileReference; includeInIndex = 1; path = hle.c; sourceTree = ""; }; + 74F4788A316A4AEC8FB746C3AF3DE933 /* m64p_vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_vidext.h; sourceTree = ""; }; + 74F7F494A747DB09275C9A959DC103CC /* pngwrite.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwrite.c; sourceTree = ""; }; + 74FAEBE92C3B0B35D90248D577885466 /* ShaderProgram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ShaderProgram.h; sourceTree = ""; }; + 7502471AA27312AF107E971A67EC58C6 /* psaux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = psaux.h; sourceTree = ""; }; + 7537CE11495993BB05FE9EAA5BFED976 /* NstBoardSuperGamePocahontas2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGamePocahontas2.hpp; sourceTree = ""; }; + 75A920E2918B272736AC688F14B6F096 /* resampler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = resampler.h; sourceTree = ""; }; + 75AB94233F995F253DFE0C50EE6C02A2 /* RSTBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTBlockOperation.h; path = Roxas/RSTBlockOperation.h; sourceTree = ""; }; + 75BC588551AB21D7B8D2F7CEC5387DE8 /* png.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = ""; }; + 75CBA626F95FBBAD154F3774DF8F9152 /* NstBoardWaixingSgzlz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSgzlz.hpp; sourceTree = ""; }; + 75CC5A3EB0061070CE3340A72D9B1240 /* ftglyph.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftglyph.h; sourceTree = ""; }; + 75EA00FDDC420CBEEF57749EB105D75B /* NESDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NESDeltaCore-dummy.m"; sourceTree = ""; }; + 75F57C00E99D0261142E905420B1FDA7 /* CRC_OPT.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CRC_OPT.cpp; sourceTree = ""; }; + 75F9C1E6A3EFB7439D016876D6537610 /* Paper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Paper.swift; path = Source/SwiftyDropbox/Shared/Generated/Paper.swift; sourceTree = ""; }; + 76098B9B168291C93114F349AF883D6F /* dynamiclib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dynamiclib.h; sourceTree = ""; }; + 7637F69AFE4440D79912C03BC0E864AE /* CRC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CRC.h; sourceTree = ""; }; + 763AE2EACA7FF8898176F552273EFF1C /* version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + 76762292E978FDAACA63D856A9CD4F5F /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Source/SwiftyDropbox/Shared/Generated/Async.swift; sourceTree = ""; }; + 7680621D7EA37B25BD6FAFEB184DD97B /* assemble_struct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble_struct.h; sourceTree = ""; }; + 76A9709715FDD329C46A920FFC9D9209 /* NstInpFamilyTrainer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpFamilyTrainer.hpp; sourceTree = ""; }; + 76C85069E5F2ED830B22D7D1AB4A529C /* GTMDebugSelectorValidation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMDebugSelectorValidation.h; path = DebugUtils/GTMDebugSelectorValidation.h; sourceTree = ""; }; + 770AA55D81A4A9A0174FC18A4DB7DC41 /* NstBoardUnlMortalKombat2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlMortalKombat2.hpp; sourceTree = ""; }; + 770FB112F840EA62E9A6C88008B7C1D7 /* dummy_audio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_audio.h; sourceTree = ""; }; + 77369FE791F1E575CF67D2E88660AB54 /* NstBoardBmcVrc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcVrc4.hpp; sourceTree = ""; }; + 7745EBDA352FAAAD04827718AFC2DDD0 /* interpret.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interpret.h; sourceTree = ""; }; + 77934694A34ABBAE5B4157E7F028F45C /* FIRFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIRFilter.h; sourceTree = ""; }; + 77CE0C99378A2FDADC3F70471D336C79 /* ContactsRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContactsRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/ContactsRoutes.swift; sourceTree = ""; }; + 77D3B3A913E0D9BC6F044C9D89CB8D96 /* ftheader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftheader.h; sourceTree = ""; }; + 77E4E93A1AA6AEE3A862BF83964C18B4 /* svgldict.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svgldict.h; sourceTree = ""; }; + 782EAF069DEB44E112D5056BEF8C3DE2 /* ftbitmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbitmap.h; sourceTree = ""; }; + 78323C76AFE569F46E583A2E3461F6E8 /* UIDevice+Vibration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIDevice+Vibration.swift"; sourceTree = ""; }; + 783A65AE17A33F0C1C242F5B30F01680 /* Archive+Reading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Reading.swift"; path = "Sources/ZIPFoundation/Archive+Reading.swift"; sourceTree = ""; }; + 784FA935740E152532499A73DA5AA3DB /* VertexArray.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = VertexArray.hpp; sourceTree = ""; }; + 7853737E5530C7A19E57F3534054E328 /* ftcalc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcalc.h; sourceTree = ""; }; + 7887B596C85B88D5126C1D115B8C9582 /* check.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = check.h; sourceTree = ""; }; + 78B946BC5D71400B19D26F799662F808 /* EmulatorBridging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EmulatorBridging.swift; sourceTree = ""; }; + 790495A40D459F66C420A40CFAFB042D /* UICollectionView+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionView+CellContent.m"; path = "Roxas/UICollectionView+CellContent.m"; sourceTree = ""; }; + 792056404E543D00399F5986E8B3812F /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = N64DeltaCore.xcconfig; sourceTree = ""; }; + 798A8C02C208746867C1899AE83B7EF3 /* rom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rom.h; sourceTree = ""; }; + 79B10B2722F1132312871D229953F2DA /* cheatSystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheatSystem.h; sourceTree = ""; }; + 79F9B2D9EDAEB550A921B5D3884D6D19 /* m64p_plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_plugin.h; sourceTree = ""; }; + 7A51C15D398D2803874EB7297A0340BE /* RSTOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTOperation.m; path = Roxas/RSTOperation.m; sourceTree = ""; }; + 7A65C5E1DB73B52B64C8509098509B77 /* pngusr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngusr.h; sourceTree = ""; }; + 7A8C9A3E803EF09830C30971C4D0333D /* NstInpMahjong.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpMahjong.hpp; sourceTree = ""; }; + 7A9548EBDD461D42A4F3BBAEA839E3DA /* si_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = si_controller.h; sourceTree = ""; }; + 7B2001812085959BA9C558864721110A /* fb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fb.h; sourceTree = ""; }; + 7B4E004174F5A12104EA6702A90AC6D9 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Sources/SQLite/Helpers.swift; sourceTree = ""; }; + 7B55E01B937143BE70ADC92C259EA847 /* sound.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sound.h; sourceTree = ""; }; + 7B7537D8181FB7C0E5B50CB7680E9967 /* NstBoardBtlSmb3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb3.hpp; sourceTree = ""; }; + 7B99B417F7B87ED84AC94DA16A254477 /* glsl_FXAA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_FXAA.cpp; sourceTree = ""; }; + 7BBA8B55E8468DDF3F3DCACBEC6CC1E2 /* RSTDynamicDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTDynamicDataSource.h; path = Roxas/RSTDynamicDataSource.h; sourceTree = ""; }; + 7BBB06A85B5F1D7854ECDB59E80B5B70 /* pngpread.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngpread.c; sourceTree = ""; }; + 7BFDD39FA42BC2644FD2FC2A33412FFD /* UIViewController+TransitionState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+TransitionState.h"; path = "Roxas/UIViewController+TransitionState.h"; sourceTree = ""; }; + 7C1089BC73E36C74AEF372EEED122EFC /* GTMSessionFetcher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GTMSessionFetcher-dummy.m"; sourceTree = ""; }; + 7C71AA7A6480E27C964B8F797CDFC89B /* pakinfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pakinfo.h; sourceTree = ""; }; + 7CD4252EE7412B7E97A7FA9F6EB9095D /* opengl_UnbufferedDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_UnbufferedDrawer.h; sourceTree = ""; }; + 7CF779051F3316DCCCAAB71AF25F906C /* NstBoardFxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFxRom.hpp; sourceTree = ""; }; + 7D29EE04287C192700BAA7D8E7068B20 /* FrameBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FrameBuffer.h; sourceTree = ""; }; + 7D467F2C39B4E1301A6A2824147175DE /* memory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = ""; }; + 7D49431EEA4AD3FC2E04F7F24D666EA6 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; + 7D751206A951D9727B38F71A2BB990AA /* SNESDeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = SNESDeltaCore.bundle; path = "SNESDeltaCore-SNESDeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7D8592309610FD7BF2ECC3EF7A2F045F /* pngstruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; + 7D93A1FA4EBA67EA2A7C3149D8776FF0 /* ftbbox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbbox.h; sourceTree = ""; }; + 7DB030D93B94677288CC4FB4807455C3 /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + 7DB43450886939FC8E10313F46E479D1 /* mem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; }; + 7DD54C4B2A034B3E5694E1C6C3916D18 /* freetype.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = freetype.h; sourceTree = ""; }; + 7DE608CD51BCBB2191371758B7C8E134 /* NstVector.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVector.hpp; sourceTree = ""; }; + 7DE820C181248C292881B0298B0F1F90 /* Font.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Font.hpp; sourceTree = ""; }; + 7E0F32F5D4B36915598F0AD7BB83F6A3 /* pcap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pcap.h; sourceTree = ""; }; + 7E6B9B56EA3BE92F4A8798B0D43526B2 /* SndOut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SndOut.h; sourceTree = ""; }; + 7E793979C109E7302877C7903D7ED408 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 7ECC57680ECCFDA6CFA7FED355B4F3AD /* TaskDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskDelegate.swift; path = Source/TaskDelegate.swift; sourceTree = ""; }; + 7F2667D8C1F3EC7F5E7989CBAD0B8281 /* RemoteRecord+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+File.swift"; sourceTree = ""; }; + 7F657EAC00204AF30C7E4EA0B4518AC5 /* NstBoardUnlA9746.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlA9746.hpp; sourceTree = ""; }; + 7F66CA249330A41FAC70007D5C650CD6 /* NstBoardBmc64in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc64in1.hpp; sourceTree = ""; }; + 7FC76FBFEFEF12E5FDF51209753949E3 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; + 801A6C2440FD328341E6550569C3A232 /* glext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glext.h; sourceTree = ""; }; + 80D87DDEE1CB809E00A47151D677F57F /* NSLayoutConstraint+Edges.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+Edges.m"; path = "Roxas/NSLayoutConstraint+Edges.m"; sourceTree = ""; }; + 810C174C92F9D6B39CFFD8CDEA0902A6 /* matrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = matrix.h; sourceTree = ""; }; + 8110229A2612B6ADEB790CF3A880D7F8 /* DriveService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DriveService.swift; path = "Backends/Drive/Harmony-Drive/DriveService.swift"; sourceTree = ""; }; + 8127AEC9343CDF5FA184EEAB2A4E598F /* ftdebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftdebug.h; sourceTree = ""; }; + 814013939A450B54B81B83B1EDB7A650 /* RSTNibView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTNibView.h; path = Roxas/RSTNibView.h; sourceTree = ""; }; + 81699BBB7E4A8A98AF2985A53BE0E791 /* MMU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MMU.h; sourceTree = ""; }; + 816D92F12BC3698BEE8F45620FB157CC /* 65c816.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = 65c816.h; sourceTree = ""; }; + 81A8FD9E119F896E60B2564D9D8761CD /* GBCTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCTypes.h; sourceTree = ""; }; + 81ACB985C1F71D0FC6DF2A0CBEC3C3D6 /* NstFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFile.hpp; sourceTree = ""; }; + 81FFA4A03112CF74DC8BA775C6B4E3AC /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SQLite.swift.modulemap; sourceTree = ""; }; + 821E332423194BD75B70F229D0992A67 /* ftstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftstream.h; sourceTree = ""; }; + 82B290FA3AD7AE40209494B966FF4B3B /* af_rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = af_rtc.h; sourceTree = ""; }; + 82C27E6DA6F13A8BFDE148AF1AEB92CD /* Debugger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Debugger.cpp; sourceTree = ""; }; + 82DC27EAD4860B5C690A7972067D9F11 /* NstBoard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoard.hpp; sourceTree = ""; }; + 83189ADFB9F73F46FCE23B3CE9012A77 /* dummy_input.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_input.h; sourceTree = ""; }; + 8326EAB88C81EB3273CE84BFBE30C290 /* m64282fp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64282fp.h; sourceTree = ""; }; + 83433F387FADB6F93585B15C45F26C41 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; + 8364432B8E72D0344D921A2164F73693 /* DropboxTeamClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxTeamClient.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxTeamClient.swift; sourceTree = ""; }; + 838D80A959C5C766EFB33104D72194AF /* RTC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RTC.h; sourceTree = ""; }; + 83C196FE4CF60A03565B95B1C9C0217C /* NstBoardBmc36in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc36in1.hpp; sourceTree = ""; }; + 83C98EC2B9B01038DDBDF79833E8FA12 /* RSTCellContentChange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentChange.h; path = Roxas/RSTCellContentChange.h; sourceTree = ""; }; + 83D5738F79EFF74666BE041EC76ACDFA /* GTLRErrorObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRErrorObject.h; path = Source/Objects/GTLRErrorObject.h; sourceTree = ""; }; + 83D5EF55975A2BFBB9FF14D9389BFBB6 /* Main.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Main.hpp; sourceTree = ""; }; + 83DAD8759111F18B4EDD79709EA9C168 /* L3DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3DEX2.h; sourceTree = ""; }; + 83DEFE6EC2B2AF94239CCEA8D9F36C59 /* NstBoardBmcSuperHiK4in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperHiK4in1.hpp; sourceTree = ""; }; + 848F3AD32B7A8F7F08945CA3643BE446 /* CoreFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreFunctions.swift; path = Sources/SQLite/Typed/CoreFunctions.swift; sourceTree = ""; }; + 84E73D7D5D1F2FA41BD8181D33BA65D2 /* ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist"; sourceTree = ""; }; + 850505914251942B1C511C89AAFFF578 /* RSTLoadOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTLoadOperation.h; path = Roxas/RSTLoadOperation.h; sourceTree = ""; }; + 850B3AEB1917875997484AA3953B926F /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = SNESDeltaCore/Standard.deltamapping; sourceTree = ""; }; + 85384C51860DF6A3AB223E1B8439C471 /* pure_interp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pure_interp.h; sourceTree = ""; }; + 85A4BD81985AEDB6D9BA5E50804225D0 /* libGBADeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGBADeltaCore.a; path = libGBADeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 85B0ECFFCE6A9F6387533730061A1A7A /* TextureFilters_hq2x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_hq2x.h; sourceTree = ""; }; + 85B98EACC45CEADA2FC73EB069E37FC7 /* GTLRDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDefines.h; path = Source/GTLRDefines.h; sourceTree = ""; }; + 85CA254539B604E12B65C0315AD84D21 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; + 85D72CEA77A8089188A57FDD92DB3E21 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; + 85DD22654F689D365C8835281CEB8F13 /* defined_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = defined_ptr.h; sourceTree = ""; }; + 86059796C87D909C7319742A6AD185D9 /* elf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = elf.h; sourceTree = ""; }; + 866D05F9B3FED97151B776FED3394283 /* RSTBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTBlockOperation.m; path = Roxas/RSTBlockOperation.m; sourceTree = ""; }; + 867A52819D0036A2C45DFD094D11F381 /* memgzio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memgzio.h; sourceTree = ""; }; + 86A843DB560CD6D81B7EF3A9F6D8F5FB /* NstBoardKonami.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonami.hpp; sourceTree = ""; }; + 86D90CE2D6B95B2AA99812247EC3691B /* pixform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pixform.h; sourceTree = ""; }; + 8715DB110EE34E0C96E7C74313A7A89A /* ttnameid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ttnameid.h; sourceTree = ""; }; + 8760D486359333F01A58D9A3E6965D9E /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; }; + 87F4B88C0892C297B31AE94A0E93539C /* NstBoardMmc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc4.hpp; sourceTree = ""; }; + 882DA4CFDB38488363DB6FA79E5CF3BE /* ZIPFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZIPFoundation-dummy.m"; sourceTree = ""; }; + 8837E67069B10F42A5536F61DD3DD225 /* Rect.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Rect.hpp; sourceTree = ""; }; + 883B872956FB7C28FDBB574888357A62 /* GTMNSString+URLArguments.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMNSString+URLArguments.m"; path = "Foundation/GTMNSString+URLArguments.m"; sourceTree = ""; }; + 8844375C652ED43B6CF8305EA32D5488 /* pnginfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pnginfo.h; sourceTree = ""; }; + 887068F06A80B516F5DE95AE14158D3F /* SoundDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundDriver.h; sourceTree = ""; }; + 888803D1EF43D58657C5732AFAC576BC /* F5Indi_Naboo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F5Indi_Naboo.h; sourceTree = ""; }; + 8888D8043BC735B8831AE2FB72C5DCE4 /* SharingRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SharingRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift; sourceTree = ""; }; + 88DE70070F082BF2437581BD7BB91BDB /* NstChecksum.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstChecksum.hpp; sourceTree = ""; }; + 89132F0647F462DF7B2532346D3447EE /* SQLiteObjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SQLiteObjc.m; path = Sources/SQLiteObjc/SQLiteObjc.m; sourceTree = ""; }; + 89308C156B65EB233E0F8E7B01291775 /* ftlzw.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlzw.h; sourceTree = ""; }; + 894545843DCDE3856F3A5F4BA90A2227 /* dummy_video_capture.c */ = {isa = PBXFileReference; includeInIndex = 1; path = dummy_video_capture.c; sourceTree = ""; }; + 89A7A6CB88FF9F00BD89DB332B5BDA1D /* svpostnm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpostnm.h; sourceTree = ""; }; + 89AD69668AA33B36799179839B4578DB /* mbc3_rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mbc3_rtc.h; sourceTree = ""; }; + 89C8E96993FFE0F04D42EF2FC57593F3 /* idec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = idec.h; sourceTree = ""; }; + 89D77AD643D660EF8D5D89B0A70F143B /* NstBoardBtlMarioBaby.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlMarioBaby.hpp; sourceTree = ""; }; + 8A171E0701260ECA35983A32816DB522 /* GTLRObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRObject.h; path = Source/Objects/GTLRObject.h; sourceTree = ""; }; + 8A2F89C405DCAF9349F68843D8672A87 /* ftlist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlist.h; sourceTree = ""; }; + 8A3F0FDFBE86AC5763C0A89166EFC859 /* Game.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Game.swift; sourceTree = ""; }; + 8A542F20E7647EA7B36CB7C0565E279A /* SyncCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SyncCoordinator.swift; path = Harmony/SyncCoordinator.swift; sourceTree = ""; }; + 8A624FFF16B311D8F1A19BE7C8EC0DAE /* SoundFileFactory.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileFactory.inl; sourceTree = ""; }; + 8AA718DD7968CE1C58CD34313E5FA869 /* TxFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxFilter.h; sourceTree = ""; }; + 8AA9AC2951C819D3D589F82FAD7F5A65 /* L3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3D.cpp; sourceTree = ""; }; + 8B0132D8F45B4B5666CBF5652A345F0F /* NstSoundRenderer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundRenderer.hpp; sourceTree = ""; }; + 8B7A2F207266496310F9415852A1EBD7 /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; + 8B8B22C2F3B453B4853E09852C790FFB /* instruction_attributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instruction_attributes.h; sourceTree = ""; }; + 8BA47FDD506E39A2EC6B9965BF416961 /* DriveService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Versions.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Versions.swift"; sourceTree = ""; }; + 8BA5B2EC8B8F0A5D59CC97B40A380CA8 /* counterdef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = counterdef.h; sourceTree = ""; }; + 8BA8D788852783316C1BE135C3ADC92B /* sfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sfnt.h; sourceTree = ""; }; + 8BD3541718061A90921DC7BAA43765B2 /* statesaver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = statesaver.h; sourceTree = ""; }; + 8C0B76FEDF3385F8F3AF9A682EC0E276 /* TxCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxCache.h; sourceTree = ""; }; + 8C1C055B90B4594009DB00C4694AD0E8 /* ZSortBOSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZSortBOSS.h; sourceTree = ""; }; + 8C20A4261AAB5D4731891122D5059BB1 /* NstApiDipSwitches.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiDipSwitches.hpp; sourceTree = ""; }; + 8C943FB0B36A40A6ED1622A947B642B5 /* GoogleAPIClientForREST-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleAPIClientForREST-umbrella.h"; sourceTree = ""; }; + 8CC4973A6BF6AFF9D8562E7A4E9AE4D8 /* CombinerProgram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CombinerProgram.h; sourceTree = ""; }; + 8CC8FD6332B53E6AEADA551A3042A681 /* NstInpFamilyKeyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpFamilyKeyboard.hpp; sourceTree = ""; }; + 8CD89764ACCFBF65BFF14776DAB37EA9 /* DSTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DSTypes.h; sourceTree = ""; }; + 8CE5B0A31ACD87513F0942D9E71F9BD6 /* DeleteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordsOperation.swift; sourceTree = ""; }; + 8D296A26945CFBCEEA746096B5AFC66D /* png.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = ""; }; + 8D564037F9192979A0BA63A5F9545CDE /* UpdateRecordMetadataOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UpdateRecordMetadataOperation.swift; sourceTree = ""; }; + 8DB91BFF06E8641AEB9DAF85B4EAEF79 /* GBCDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GBCDeltaCore.modulemap; sourceTree = ""; }; + 8DC46E7D667B05E526897085BDA6A68F /* KeyboardGameController.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = KeyboardGameController.deltamapping; path = "DeltaCore/Supporting Files/KeyboardGameController.deltamapping"; sourceTree = ""; }; + 8DDA3FCC5B59298F8FF38E7914D03FB0 /* Utf.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Utf.inl; sourceTree = ""; }; + 8DDDB2DB5582729DFD3B142A0841B180 /* UIAlertAction+Actions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertAction+Actions.h"; path = "Roxas/UIAlertAction+Actions.h"; sourceTree = ""; }; + 8DF503EB5BF2CD824792BFD2BBC0992F /* libDSDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libDSDeltaCore.a; path = libDSDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 8DF7E6D80CBC58876AC10154A9D6A141 /* fttrigon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fttrigon.h; sourceTree = ""; }; + 8E0EF6B3B03ADAA45342D1E3EC169D8E /* GBCDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GBCDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 8E110C092AEF72EDB7C33791CA0BCBEF /* NstBoardSachenTcu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenTcu.hpp; sourceTree = ""; }; + 8E38F730D5EC5C9EF41311D289592151 /* lirc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = lirc.h; sourceTree = ""; }; + 8E80A2591A2367572B4E5468FB72C0B0 /* opengl_Utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_Utils.h; sourceTree = ""; }; + 8ECA7AB7A3076AA6E4705CB0523A2472 /* ftwinfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftwinfnt.h; sourceTree = ""; }; + 8ECDF285F3E093B02D0B6A530686B0BF /* N64Types.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = N64Types.m; sourceTree = ""; }; + 8ED616369FCB01DA566D1197932686D0 /* RDP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RDP.h; sourceTree = ""; }; + 8EE05B7A52F5A35ED15F9580C4144EC6 /* ButtonsInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ButtonsInputView.swift; sourceTree = ""; }; + 8EF02F520CDA87AF4813D4764ECD43F5 /* CustomRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomRoutes.swift; path = Source/SwiftyDropbox/Shared/Handwritten/CustomRoutes.swift; sourceTree = ""; }; + 8F44D6F54A29F5DC917F8C94CFA28050 /* Harmony.xcdatamodel */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.xcdatamodel; path = Harmony.xcdatamodel; sourceTree = ""; }; + 8F52AAB71856AE2D876485F77504BCE5 /* NstBoardSachenStreetHeroes.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenStreetHeroes.hpp; sourceTree = ""; }; + 8F8EFA2C77C87A2217F6683EB75926B9 /* TextDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextDrawer.h; sourceTree = ""; }; + 8FA72104E6FCAFAAAE36DA0189E9CB62 /* NstBoardIremG101.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremG101.hpp; sourceTree = ""; }; + 8FB4CA94B76B2411E5EE78414D82B20E /* TxTexCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxTexCache.h; sourceTree = ""; }; + 8FE991842BF4F0D0508BF1CDC5290400 /* NstBoardBtlAx5705.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlAx5705.hpp; sourceTree = ""; }; + 9039BACE3570843851BBD1B1CD4E8944 /* NstFpuPrecision.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFpuPrecision.hpp; sourceTree = ""; }; + 906947FD8A5D4B956AF6B2AB2C50E677 /* FrameBufferInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FrameBufferInfo.h; sourceTree = ""; }; + 90696DCC98EAADB42AE7018A27D415F5 /* glsl_ShaderStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_ShaderStorage.h; sourceTree = ""; }; + 9078D2E6A526B27EFAB78F4949C2039E /* FinishDownloadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishDownloadingRecordsOperation.swift; sourceTree = ""; }; + 90DE8F7A964963C67D9A493018E6E24C /* NstBoardSunsoftDcs.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoftDcs.hpp; sourceTree = ""; }; + 90E20CF10E66ADE35B580C23C72D76A4 /* Thread.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.hpp; sourceTree = ""; }; + 9106F296AA7B0EA373050E2222387718 /* NstBoardBmcT262.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcT262.hpp; sourceTree = ""; }; + 911F72B30958B16B6FC132BEFBD9544B /* NstCartridge.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridge.hpp; sourceTree = ""; }; + 912A34EEAB2393779814319C7BDDC198 /* BPMDetect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BPMDetect.h; sourceTree = ""; }; + 9140DC01C356F980A0A4E04F1CCC3636 /* DropboxService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Records.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Records.swift"; sourceTree = ""; }; + 914481AFB63938A5A293F3B322F5FD91 /* mi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mi_controller.h; sourceTree = ""; }; + 916788F0642B21A136DE8950DB47B018 /* instructions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instructions.h; sourceTree = ""; }; + 91D82360E170EAD9A1C2BFF9FB3ACF33 /* libretro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libretro.h; sourceTree = ""; }; + 92004DFFAF89F721D5477783E22161B9 /* NstInpBarcodeWorld.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpBarcodeWorld.hpp; sourceTree = ""; }; + 9209A157558D6C7A57364B029B93BF01 /* GTLRUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRUtilities.m; path = Source/Utilities/GTLRUtilities.m; sourceTree = ""; }; + 920F6CCBFE16A29B89A155E099306B56 /* Glyph.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Glyph.hpp; sourceTree = ""; }; + 92238392EDEE95FD2FBE52D9471C5264 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; }; + 9264D4DA6A66BA54A811C0AC60576BC4 /* fxp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxp.h; sourceTree = ""; }; + 926DE74AEC8B4A89CE303E7D15837382 /* xxhash.c */ = {isa = PBXFileReference; includeInIndex = 1; path = xxhash.c; sourceTree = ""; }; + 92B20D8D80FF2DF35DE5BB67277F01FB /* Network.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Network.hpp; sourceTree = ""; }; + 92B94EAC848FCE04BDC76F2D0CC75878 /* file_storage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = file_storage.h; sourceTree = ""; }; + 92BF79F8CEE5F58CD7F29CAF0AED592D /* hle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle.h; sourceTree = ""; }; + 92D57715B2185B75E5396245FFBAE48E /* interrupter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interrupter.h; sourceTree = ""; }; + 92E86921655A3432DD8E836D484C63DB /* NstBoardSachenSa72007.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa72007.hpp; sourceTree = ""; }; + 92F06EFCC636BAAC527CE6543D3ABA5E /* NstBoardBmc8157.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc8157.hpp; sourceTree = ""; }; + 9300FDAE5D36EBEB31F93D3C7215E806 /* SoundTouch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundTouch.h; sourceTree = ""; }; + 930C6159C2738B8427010914FE6F8715 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; + 931FABEC117CE8C4B00CF9281008FAC6 /* movie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = movie.h; sourceTree = ""; }; + 93307F759AE55916EE4F5A828F7C4E89 /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; + 933F52FD6D2B1895EB6774DAEDF6A159 /* inputSDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = inputSDL.h; sourceTree = ""; }; + 93910D17E45B6F0DD31F72703A5A2651 /* ExternalGameControllerManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExternalGameControllerManager.swift; sourceTree = ""; }; + 93B1E65A642EA1EAA4D3043EE455F0DA /* version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + 93D8D16485DDCB1B9E14A3ECABF683B8 /* GBCDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBCDeltaCore-prefix.pch"; sourceTree = ""; }; + 94228059341CBA18109047D570DAEA1A /* seta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = seta.h; sourceTree = ""; }; + 947D4308D4F2D06F37BC4881F1637F48 /* GTLRFramework.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRFramework.m; path = Source/Utilities/GTLRFramework.m; sourceTree = ""; }; + 949120606BFB2FD67DC4240028FEB398 /* SoundSDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundSDL.h; sourceTree = ""; }; + 94AAA4870A47F9FA1AE9463A83E81CB5 /* regcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = regcache.h; sourceTree = ""; }; + 94C8A461D47DE4DDB1AEE7830B56ADAC /* NstApiMovie.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiMovie.hpp; sourceTree = ""; }; + 94D11622874CFF7D4685E506F182E85B /* convert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = convert.h; sourceTree = ""; }; + 94D367DD0D99FF2FCAE661017295657C /* GoogleAPIClientForREST.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleAPIClientForREST.xcconfig; sourceTree = ""; }; + 9524C7CAEA9B69DE45AEF5526465F6C0 /* ClipPolygon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ClipPolygon.h; sourceTree = ""; }; + 955407B1C8467036B4E43CAD531EECB3 /* NstVsTkoBoxing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsTkoBoxing.hpp; sourceTree = ""; }; + 95B34037E8B652335969759E49B0F3B4 /* SoundFileReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileReader.hpp; sourceTree = ""; }; + 95CCDA31768B63EA9440181D3FB6DD17 /* SDKConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SDKConstants.swift; path = Source/SwiftyDropbox/Shared/Handwritten/SDKConstants.swift; sourceTree = ""; }; + 95CD1D48C38E182BA0C36253C2422B8A /* NstVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsSystem.hpp; sourceTree = ""; }; + 963237A63667F4DD10B901754C2F8AB2 /* NES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NES.swift; sourceTree = ""; }; + 9678A9FCA9931D354FE7CC755CB6541F /* glcorearb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glcorearb.h; sourceTree = ""; }; + 9688C4994A8E7E8C3EFC291E37D8B050 /* RemoteFile+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+File.swift"; sourceTree = ""; }; + 96AF49FA9F387DAB2B33D0FB432E8FC7 /* NstBoardNihon.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNihon.hpp; sourceTree = ""; }; + 96BB44A4386C6A18D5BEA9F5AF2E1EF0 /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = Sources/SQLite/Core/Statement.swift; sourceTree = ""; }; + 972EE27803ACA015B384716D967BB02E /* Thread.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.cpp; sourceTree = ""; }; + 9750F2298895C6CB0021A8776937EC4B /* PACKED_END.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PACKED_END.h; sourceTree = ""; }; + 98429553652599A6220233E3F8D224FD /* TxHiResCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxHiResCache.cpp; sourceTree = ""; }; + 9863A0F82AE9292BB81384ECFD45AABF /* CombinerKey.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CombinerKey.cpp; sourceTree = ""; }; + 988D4B1A89D40408B7ABF72F05B65950 /* RecordRepresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordRepresentation.swift; sourceTree = ""; }; + 9900B0D2CD9872165A1705598445975C /* Touch.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Touch.hpp; sourceTree = ""; }; + 994237033CE941B5B49F4E0EC30ADD01 /* NstBoardJalecoJf19.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf19.hpp; sourceTree = ""; }; + 998BCE1BFCDA316A894F5BE77EF92AD4 /* Coding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Coding.swift; path = Sources/SQLite/Typed/Coding.swift; sourceTree = ""; }; + 998F169B2153317C97A738B28A48F66C /* Window.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Window.hpp; sourceTree = ""; }; + 9995950583E5F1398CF81E042701C6E9 /* Text.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Text.hpp; sourceTree = ""; }; + 99AFB601E975D6655D2A52B959891047 /* opengl_ColorBufferReaderWithPixelBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithPixelBuffer.h; sourceTree = ""; }; + 99D799A06F3A84C7D777C9A3BD9BE511 /* ManagedAccount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedAccount.swift; sourceTree = ""; }; + 99EB232B4913EA46C51277C86DF16B8D /* sdd1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdd1.h; sourceTree = ""; }; + 99EC0BF92D7121A56829D9702EB42CAE /* Textures.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Textures.cpp; sourceTree = ""; }; + 9A2119D6748E380E5815A3831CA3977A /* GTLRUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRUtilities.h; path = Source/Utilities/GTLRUtilities.h; sourceTree = ""; }; + 9A435B10C22B22C7734A3E5913E53474 /* RSTToastView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTToastView.m; path = Roxas/RSTToastView.m; sourceTree = ""; }; + 9A6B0D2942B8BAF98B09DC10EDD20618 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + 9ABF020B63EDEC52E2B78074AFB454B1 /* L3DEX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3DEX.cpp; sourceTree = ""; }; + 9ACA4CA8AE2D83BA8AB58439FC360D38 /* glsl_FXAA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_FXAA.h; sourceTree = ""; }; + 9AD6579FF3326133D973B8178ED12CEB /* NstXml.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstXml.hpp; sourceTree = ""; }; + 9AE215D47AD4C3E4C2C354C0C591C34C /* SwiftyDropbox-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyDropbox-umbrella.h"; sourceTree = ""; }; + 9AF937DC01474311A2109AFB0EDA7D8B /* GBCEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBCEmulatorBridge.mm; sourceTree = ""; }; + 9AFAB5260C27DEE351813C7122CD4AF4 /* RateTransposer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RateTransposer.h; sourceTree = ""; }; + 9B3F61B1E686EE8232FF7D4423DA7AE5 /* TextureFilterHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilterHandler.cpp; sourceTree = ""; }; + 9B75443503A9FFE2C23D1ACE270C81B1 /* ColorBufferReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferReader.h; sourceTree = ""; }; + 9B93E54A61BB91C9C1DB668CB22B8E22 /* FrameBufferInfoAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FrameBufferInfoAPI.h; sourceTree = ""; }; + 9BB52CE6A9BF6A1CFA75A61E1AFEDA7B /* getopt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = getopt.h; sourceTree = ""; }; + 9BEE4619527C9F9B1FE35C99D23CC654 /* RSTSeparatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTSeparatorView.h; path = Roxas/RSTSeparatorView.h; sourceTree = ""; }; + 9BF45B3F1647C84F90A4C140F217F89D /* cp15.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp15.h; sourceTree = ""; }; + 9C3466A9256511834DC5E817CC21AE91 /* writepng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = writepng.h; sourceTree = ""; }; + 9C6F3AAA06C293FC9A91CD7A5FE7D65A /* NstBoardKonamiVrc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc4.hpp; sourceTree = ""; }; + 9C838A28075396ED66AEF6F512BA0446 /* GBCDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBCDeltaCore-umbrella.h"; sourceTree = ""; }; + 9C8507D47BD97C259CB67E95B0055BCC /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = DSDeltaCore/Standard.deltamapping; sourceTree = ""; }; + 9C9E1AF02B3EAB5EEF41A090B1D93CA6 /* PostProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PostProcessor.h; sourceTree = ""; }; + 9CA80A61ABF26FA89F4E22A30284B0DD /* libPods-Delta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-Delta.a"; path = "libPods-Delta.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 9CA88B3A2BBE2EA0112C360B061B10B9 /* audio_out_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = audio_out_backend.h; sourceTree = ""; }; + 9CAA385DC1EC815011FECBC1CD5ADF32 /* rumble_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rumble_backend.h; sourceTree = ""; }; + 9CD3F5DB69B6C64C0A6692B58AFD0B17 /* SNESDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SNESDeltaCore-umbrella.h"; sourceTree = ""; }; + 9CDC4E9BA921F71C2DE81D711D002178 /* DownloadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordOperation.swift; sourceTree = ""; }; + 9D07B62C2930860C9FC0DB9D497C72D7 /* svtteng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svtteng.h; sourceTree = ""; }; + 9D3400B3B03C1E9DC1A3F7B5E3EB7B4A /* NstCheats.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCheats.hpp; sourceTree = ""; }; + 9D47FC12A026C951220B49A834F51276 /* ConflictRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordOperation.swift; sourceTree = ""; }; + 9D575B29FCC81FA8F72EC3CC12A581A5 /* GTMReadMonitorInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMReadMonitorInputStream.m; path = Source/GTMReadMonitorInputStream.m; sourceTree = ""; }; + 9D71AD94F1DE85C71287112E838A7581 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; + 9D7EE0A3C63E9181CA23F2A4EE2C188E /* SDL_opengles2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2.h; sourceTree = ""; }; + 9D85665615A489DF6583D7E19CC9D2B4 /* Harmony-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-prefix.pch"; sourceTree = ""; }; + 9D8C6B600EB0F6E81ED97BC1F30272D4 /* CombinerProgram.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CombinerProgram.cpp; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - A3A4320848DE8A3F914C59057575B06B /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; - A4A3514D6C98C4440E6DC5A7534FF3BA /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - A79CFD14B8EC38A60D9A612DBC0AA0A1 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Sources/SQLite/Helpers.swift; sourceTree = ""; }; - A87D46A616B9992C73055FB45F4414D8 /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; - AAE2B2A62478F0A6165ED3BD869757E4 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - ABD7234F4A3CE6A297E30F73069CBE81 /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; - ABDF820CF7701781C0725766B21B05C1 /* Coding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Coding.swift; path = Sources/SQLite/Typed/Coding.swift; sourceTree = ""; }; - ADD80AE795FC81A782FE8DF14BEE1006 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - B0A4E828FF9A9324654F24314C51196B /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; }; - B707C4F015D1CBD343F58FD461D31A9F /* SQLite.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-umbrella.h"; sourceTree = ""; }; - B9F0CD725AAC41904CB8013BBA975A5F /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Sources/SQLite/Core/Value.swift; sourceTree = ""; }; - BAA1FFF25683E18EB2DB3BC2E1B1E2D8 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - BBDE7009E9C907B8005E9EDB941FA865 /* DateAndTimeFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateAndTimeFunctions.swift; path = Sources/SQLite/Typed/DateAndTimeFunctions.swift; sourceTree = ""; }; - BDD945ABD27497EE0A5D6058440CC256 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - C44A31645E74B67C3870D27DCBAB4B4A /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/SQLite/Core/Connection.swift; sourceTree = ""; }; - C9D9C2B1592E09AFC6D5395899C4EE4D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - CA868F2BDF1D4CEF8EEBE745EA282788 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/SQLite/Core/Errors.swift; sourceTree = ""; }; - D43DC26599095B79DA3D2798E5BDB349 /* SMCalloutView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SMCalloutView.framework; path = SMCalloutView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D5FB096E1CFB10C892CF7AFB0376E4C1 /* SQLite-Bridging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SQLite-Bridging.m"; path = "Sources/SQLiteObjc/SQLite-Bridging.m"; sourceTree = ""; }; - D60558A06CA44255E97475B59032ACB7 /* SQLite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLite.h; path = Sources/SQLite/SQLite.h; sourceTree = ""; }; - D7EC9A83D14FFF23FFBF2ADBF3F52BB8 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - D9490080045108BE28632224CBF95A85 /* SQLite.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-prefix.pch"; sourceTree = ""; }; - DE4E762B2B33A6CD2A03BBA3187CA346 /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = Sources/SQLite/Extensions/FTS4.swift; sourceTree = ""; }; - E0FFD0D2B0EC1A45DD6D788B8678AFB8 /* SMCalloutView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-prefix.pch"; sourceTree = ""; }; - E317305046E9C38872BF4020ECF951BB /* SMCalloutView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SMCalloutView-dummy.m"; sourceTree = ""; }; - E36131A7B28A4CDC5D30E54C4A98340C /* AggregateFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AggregateFunctions.swift; path = Sources/SQLite/Typed/AggregateFunctions.swift; sourceTree = ""; }; - E3CC277ADB47A258CD123C81061A3F82 /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - E45735AA32F181042BFB2D785A40244C /* Pods-Delta-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Delta-frameworks.sh"; sourceTree = ""; }; - E64D9057F7D105E0C1B42683231534C9 /* Pods-Delta-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Delta-acknowledgements.markdown"; sourceTree = ""; }; - E99F1A4CBC84AEAADC101C82C85F5C3C /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; - EC10E730EE8610E12ED96CCE042945F4 /* SMCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMCalloutView.m; sourceTree = ""; }; - F32ED0D241931ED9237B765DF1C4D156 /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = Sources/SQLite/Core/Statement.swift; sourceTree = ""; }; - F7DE364C1370A88BF43DED80F65EDA9B /* Pods-Delta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Delta-umbrella.h"; sourceTree = ""; }; - F86FAA009AC5B2EAF9CD2080A94DE323 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - FD0DB17A8883C364E5F6167B2E7CD49B /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; + 9DD38673C0296A73B42D147E647C1937 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; + 9DD623E462036E417A6C1BF38166141C /* biopak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = biopak.h; sourceTree = ""; }; + 9DFC0EF480A5361B80E075558EEDEDEE /* TxDbg_ios.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = TxDbg_ios.mm; sourceTree = ""; }; + 9E0ECBB02BB69E04F4F0E29EDA00B847 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; + 9E132A030504CB91FC153F9A62C74870 /* ConfigManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ConfigManager.h; sourceTree = ""; }; + 9E1BF418C0437A40B1C3B3582AB50F3E /* vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vidext.h; sourceTree = ""; }; + 9E418A7738B016688EC222EB837069D0 /* NSPredicate+Search.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSPredicate+Search.h"; path = "Roxas/NSPredicate+Search.h"; sourceTree = ""; }; + 9E493AB01A18F0DA9F384ACB5CBD5C5A /* NstBoardBtlSmb2c.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2c.hpp; sourceTree = ""; }; + 9E672A1C13EE353B0AC39DE0F84A4323 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; }; + 9E69FA508FAFD1015760B7C3395B4805 /* RSTFetchedResultsDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTFetchedResultsDataSource.m; path = Roxas/RSTFetchedResultsDataSource.m; sourceTree = ""; }; + 9E72A33A7110D63CBC89C70E51F608C9 /* SDL_thread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_thread.h; sourceTree = ""; }; + 9EA024415809AA543311AA9FE4454F1E /* RSTDynamicDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTDynamicDataSource.m; path = Roxas/RSTDynamicDataSource.m; sourceTree = ""; }; + 9EA41F9CCF4B088FD860DE0A9D8B8D17 /* uncopyable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = uncopyable.h; sourceTree = ""; }; + 9EDC9128CC8CDBCC9CCCD7AA3E759AA2 /* debug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; + 9EF3AB85099AAD5C4A46D49D93BB46D8 /* NstApiInput.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiInput.hpp; sourceTree = ""; }; + 9EFA3B9D1B35DA0B89C71DA1D01B3B45 /* SyncRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncRecordsOperation.swift; sourceTree = ""; }; + 9F97A82B4B62F88A9ABDCB471BD4E255 /* Mutex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Mutex.hpp; sourceTree = ""; }; + 9FA46629ADE6C1B6415FE547479F78E9 /* retro_miscellaneous.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_miscellaneous.h; sourceTree = ""; }; + 9FB473C586C6C3957FB7196F5D749297 /* NSPersistentStore+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSPersistentStore+Configuration.swift"; sourceTree = ""; }; + 9FDC34A806C43FEC8AEFDE037CBB3624 /* NstBoardSunsoft3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft3.hpp; sourceTree = ""; }; + 9FEB67420285B4BA71A2144A190F4A60 /* DSDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DSDeltaCore-prefix.pch"; sourceTree = ""; }; + 9FF916A03FC9114DF6807EC4AE2F131C /* Combiner.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Combiner.cpp; sourceTree = ""; }; + A031F15C9AA6495C554D8421DDCD6B2E /* NstBoardAgci.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAgci.hpp; sourceTree = ""; }; + A03596855FA5527E9DFD553107E7283A /* SoundFileFactory.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileFactory.hpp; sourceTree = ""; }; + A03F65FB47279C40083D17F181821336 /* NstMachine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstMachine.hpp; sourceTree = ""; }; + A05A1526F5B055B18305FA115EF3E9A1 /* spc7110.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110.h; sourceTree = ""; }; + A0879BEED84AB0514D697AD37CCE88A3 /* GBADeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GBADeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + A0A504E08A6B298395CDE7E0BC7FBA95 /* GTLRDriveQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDriveQuery.m; path = Source/GeneratedServices/Drive/GTLRDriveQuery.m; sourceTree = ""; }; + A0C45B1398394AA1FEB5A3FCD517E92D /* Lock.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Lock.hpp; sourceTree = ""; }; + A0CC765A71526F79EBBC52C4FF79559D /* TxFilterExport.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxFilterExport.cpp; sourceTree = ""; }; + A0E180FFBDDF6AD6D35795FD64A7222B /* GBCTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBCTypes.m; sourceTree = ""; }; + A0F5D17654F47036B94A567F870E2CFF /* Context.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Context.h; sourceTree = ""; }; + A0FED83361E402BB0547DB052277ECCD /* cpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; + A1054468B8504A0284F550663CC44349 /* ftmoderr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmoderr.h; sourceTree = ""; }; + A14800DC259C96954AE16116EC0E310D /* retro_assert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_assert.h; sourceTree = ""; }; + A17100E42D3DFDAD4EC4195E2444448D /* slot2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = slot2.h; sourceTree = ""; }; + A1817B7D536070DB0693E3627DEE3C0E /* DepthBufferRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBufferRender.h; sourceTree = ""; }; + A19E4DF8BAF4F0082185FA6315D2B6B7 /* sram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sram.h; sourceTree = ""; }; + A1B735B269B158DE4B7075B7EB181EAF /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; + A1C9D65BEDC2366AB15142DA01309E46 /* tttables.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tttables.h; sourceTree = ""; }; + A1E8AC977ABBC00002A2FD5C18CF395A /* armdis.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = armdis.h; sourceTree = ""; }; + A1F4F491B0BC25A23355012F46D89DAF /* Sram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Sram.h; sourceTree = ""; }; + A222C0427237AEDD558FEFA410B5E021 /* TeamRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamRoutes.swift; sourceTree = ""; }; + A2319DE32527E564C37C8B426E810445 /* GTMSessionFetcher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GTMSessionFetcher.modulemap; sourceTree = ""; }; + A270C7CB63DDB996D27A472D7B07D460 /* glxext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glxext.h; sourceTree = ""; }; + A2B5384F92FD40CB28071138A07D6BBC /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; }; + A2E8E678B7D4B407202D422C8CE42DA0 /* Database.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Database.h; sourceTree = ""; }; + A3131038BAA6204AECC770BDD176F81C /* ZIPFoundation.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.xcconfig; sourceTree = ""; }; + A34489EBF25913D7D0197EFF7FA146A3 /* Pods-Delta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.debug.xcconfig"; sourceTree = ""; }; + A37542A2D1F6B0496F72D1B87245F461 /* ObjectHandle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ObjectHandle.h; sourceTree = ""; }; + A3B60534D5E0521E52D17D41457801B7 /* cached_interp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cached_interp.h; sourceTree = ""; }; + A3DDC9D77AA62AA058CD07A50BE2E396 /* mupen64plus_DisplayWindow.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = mupen64plus_DisplayWindow.cpp; sourceTree = ""; }; + A3F6E644CFB6C961D9227F005A276743 /* NstBoardHxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHxRom.hpp; sourceTree = ""; }; + A4100365716D2689894AEB6AEEE7DDE0 /* NstBoardSachenSa0036.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa0036.hpp; sourceTree = ""; }; + A471F1FD870B327EA215A186F1B4B401 /* F3DBETA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DBETA.h; sourceTree = ""; }; + A4813A1A35350AA88E9F2BDD45AF68E1 /* N64DeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = N64DeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + A48812FF7D0B803D29C9CE12B0F74926 /* NstIoPort.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoPort.hpp; sourceTree = ""; }; + A495E80F9829E07964438D8A564E126A /* mc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mc.h; sourceTree = ""; }; + A4BC2C14AAA86B73D6B28FED8975C3F4 /* bitmap_font.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bitmap_font.h; sourceTree = ""; }; + A51106A45BF114A687DB7DB755B0D25D /* Drawable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Drawable.hpp; sourceTree = ""; }; + A5549F772937B547424E53A87C4959B4 /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; }; + A57B57432BC4D00AD43EB6687F06197C /* ftotval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftotval.h; sourceTree = ""; }; + A5D27BA453130BFB47F360AB69AE7A74 /* pngtest.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngtest.c; sourceTree = ""; }; + A5E4840045EBB8FE5E794C6DAEFF0CE7 /* NstBoardKasing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKasing.hpp; sourceTree = ""; }; + A5EB56E07F663B5DB04E4B9B6C85C4B6 /* NstBoardGxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardGxRom.hpp; sourceTree = ""; }; + A63610BE12A6654FC18CCA215237F733 /* ftmodapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmodapi.h; sourceTree = ""; }; + A6490A0F3B24176875D7C923ED9E0958 /* SMClassicCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMClassicCalloutView.m; sourceTree = ""; }; + A6652070A07FC48369CD2D2D93B812AB /* F3DPD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DPD.h; sourceTree = ""; }; + A6A34D0C07503E7FFFE1FC9EE96553BB /* ftobjs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftobjs.h; sourceTree = ""; }; + A6FC26E46646A054862FD9FA6A118709 /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Sources/SQLite/Core/Value.swift; sourceTree = ""; }; + A706F5A8614DC9AF3A7BAF5EE08D7A37 /* UICollectionViewCell+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewCell+CellContent.m"; path = "Roxas/UICollectionViewCell+CellContent.m"; sourceTree = ""; }; + A71446C1AC97FB34D26841347BA3E583 /* ftchapters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftchapters.h; sourceTree = ""; }; + A7351AF200A2FE4130E42D7A321DA075 /* UIAlertAction+Actions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertAction+Actions.m"; path = "Roxas/UIAlertAction+Actions.m"; sourceTree = ""; }; + A73E1E700670A66A2AE2A03B799E23EF /* GTLRDuration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDuration.h; path = Source/Objects/GTLRDuration.h; sourceTree = ""; }; + A7449C167D753EB017EF503CF6D7DBF5 /* array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = ""; }; + A7FA6F5EFA3E03E39BBF032A32482DBE /* NstBoardFfe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFfe.hpp; sourceTree = ""; }; + A82BEA8F12430E795A88BB379EFE3536 /* autohint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = autohint.h; sourceTree = ""; }; + A833E7EBCC4497CD94712AAEB129AFEF /* SoftwareRender.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoftwareRender.cpp; sourceTree = ""; }; + A882E5AEFB5708D397E1EA06B9F5964C /* pngpriv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngpriv.h; sourceTree = ""; }; + A922DEE8CDD64405F21CFA9916068DA8 /* RenderStates.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderStates.hpp; sourceTree = ""; }; + A9509066B63C4D1361D0CA4EA29B954B /* ftrender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftrender.h; sourceTree = ""; }; + A9749B925BF718E50CBCEE6B82F21925 /* jpeg.c */ = {isa = PBXFileReference; includeInIndex = 1; path = jpeg.c; sourceTree = ""; }; + A999E4DD49AD8CA4E0FB85985E53D97E /* cicx105.c */ = {isa = PBXFileReference; includeInIndex = 1; path = cicx105.c; sourceTree = ""; }; + AA0028E9A2FCB06AF3C4FF32FF90DA06 /* interrupt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interrupt.h; sourceTree = ""; }; + AA04D2400A0F699B8568525360B9DF75 /* NstBoardNamcot175.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot175.hpp; sourceTree = ""; }; + AA0B0C7FCCE7AFC841BEE7048A093B70 /* dummy_rsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_rsp.h; sourceTree = ""; }; + AA1D49FEC1690DC33D84B0AF284CE88B /* ftcid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcid.h; sourceTree = ""; }; + AA1E7066C788AF166D3819EA304B9C30 /* NstBoardBtlTobidaseDaisakusen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlTobidaseDaisakusen.hpp; sourceTree = ""; }; + AA827D717ECF37F1C8268040AAFBAE46 /* pngrutil.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrutil.c; sourceTree = ""; }; + AAA8DF67E8C538AF865BB2D983391817 /* NstBoardIremKaiketsu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremKaiketsu.hpp; sourceTree = ""; }; + AAF3FD6676FB908497318168CA250E29 /* N64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = N64.swift; sourceTree = ""; }; + AB065A0FEDAFF486E7DA04E1936E82A1 /* FIFOSampleBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFOSampleBuffer.h; sourceTree = ""; }; + AB2E42B839949FC64A2002C5BF39CD4D /* Performance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Performance.cpp; sourceTree = ""; }; + AB3A5F6A3985C524CE62D3D188B41912 /* ROMReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ROMReader.h; sourceTree = ""; }; + AB4067DCD2A73B47C583FB56E3239688 /* RSTCellContentChange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCellContentChange.m; path = Roxas/RSTCellContentChange.m; sourceTree = ""; }; + AB7866FC433C97398B3963C2270D52D4 /* NstBoardWaixingPs2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingPs2.hpp; sourceTree = ""; }; + AB93D8ED4B2543F199979AA5F4CDF7EE /* gfx3d.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gfx3d.h; sourceTree = ""; }; + AB9A44C4015E688182AFC5CE81179187 /* pngrio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrio.c; sourceTree = ""; }; + ABDD0D043967D1CF64FE87292AD3328B /* glsl_CombinerInputs.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerInputs.cpp; sourceTree = ""; }; + AC1B770F09F0C669234396A39BFF6BB9 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + AC44908E2E42851E70850DD854945391 /* pi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pi_controller.h; sourceTree = ""; }; + ACD2694A63AA0B70E91DAF193E7B4425 /* DeltaTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DeltaTypes.h; path = DeltaCore/DeltaTypes.h; sourceTree = ""; }; + AD3187200380A3FB25170D5B9EE0F5DF /* texcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = texcache.h; sourceTree = ""; }; + AD521670C6D7CBA41733C054C293541C /* glsl_CombinerProgramBuilder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramBuilder.cpp; sourceTree = ""; }; + ADC9542E96F656BB89C5311EEBDA9E2F /* VideoMode.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = VideoMode.hpp; sourceTree = ""; }; + ADD476D53B05AEB62DBF869AA71DBE2E /* m64p_frontend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_frontend.h; sourceTree = ""; }; + ADDD949ACAFD888D4958D62325464FC2 /* assem_x86.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_x86.h; sourceTree = ""; }; + AE06F95AF0928716E10E432596BE6C68 /* opengl_CachedFunctions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_CachedFunctions.cpp; sourceTree = ""; }; + AE0C7BFBF72D47F44B5150F9AD1D5E20 /* usec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = usec.h; sourceTree = ""; }; + AE1179D5EA23BDBED2AEC4F50068090B /* Pods-Delta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Delta.modulemap"; sourceTree = ""; }; + AE5CA9C3251B37CB412B002F2B18CD26 /* NstCore.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCore.hpp; sourceTree = ""; }; + AE757EB203915A0BFBB4F3FA8E8F9A77 /* GTLRUploadParameters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRUploadParameters.h; path = Source/Objects/GTLRUploadParameters.h; sourceTree = ""; }; + AE8DDA1C621BC7547ED906A580F98278 /* GTMSessionFetcher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-umbrella.h"; sourceTree = ""; }; + AF16DF495D40774F62F549F44383A37B /* Turbo3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Turbo3D.cpp; sourceTree = ""; }; + AF38F08C7B6C05C9E6E483C522CB166A /* BlendMode.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = BlendMode.hpp; sourceTree = ""; }; + AF55BE85D1766A85D542E06F8CB64DAA /* NstProperties.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstProperties.hpp; sourceTree = ""; }; + AF58C9A94CDE343BACE56F4E13E201C8 /* Cheat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Cheat.swift; sourceTree = ""; }; + AF827FC48147DE18B9FB7A80EA33C3FD /* snes9x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = snes9x.h; sourceTree = ""; }; + AF84C91D866F235841A37FBDD3F32FDC /* Performance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Performance.h; sourceTree = ""; }; + AF9B8513D3E4438D5136203FCF9D99E5 /* Thread.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.inl; sourceTree = ""; }; + AFADC4424D377B458AE08BE73A8876B0 /* BaseTeam.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseTeam.swift; path = Source/SwiftyDropbox/Shared/Generated/BaseTeam.swift; sourceTree = ""; }; + B009C33CC7DA7BB144CBFC37BB96FADA /* rateest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rateest.h; sourceTree = ""; }; + B02A3AF52CA1E696B30BDE9A844D4D97 /* RSTNibView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTNibView.m; path = Roxas/RSTNibView.m; sourceTree = ""; }; + B06418EA2C5657C3621FE94DE245B06B /* GTLRBatchQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRBatchQuery.m; path = Source/Objects/GTLRBatchQuery.m; sourceTree = ""; }; + B0652246947AE2743F7B21B7464BAB5E /* sa1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sa1.h; sourceTree = ""; }; + B0720305184D6498023330012901935C /* remote.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = remote.h; sourceTree = ""; }; + B0A321F5CF3FAD29047B4FF624618004 /* TxInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxInternal.h; sourceTree = ""; }; + B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSDWebImage.a; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; }; + B115DAD8B8CBC0649AA6BCCBDDF47E7F /* S2DEX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = S2DEX.cpp; sourceTree = ""; }; + B137B57F8091633EB513C60304ED2C7C /* NstBoardAcclaimMcAcc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAcclaimMcAcc.hpp; sourceTree = ""; }; + B178CE5FC4BC30D17B77BB64F1C9D912 /* GTMNSDictionary+URLArguments.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMNSDictionary+URLArguments.m"; path = "Foundation/GTMNSDictionary+URLArguments.m"; sourceTree = ""; }; + B1F489088240F6C610B83E8F77CB5B7C /* ManagedRecord+Uploading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Uploading.swift"; sourceTree = ""; }; + B227CD071A5B88861CA260BED0FBE3D8 /* NstBoardUnlTf1201.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlTf1201.hpp; sourceTree = ""; }; + B24B02D04D4F08EFCBE0B8D8503C30E8 /* NstBoardTxcPoliceman.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcPoliceman.hpp; sourceTree = ""; }; + B2535F7B0EEFF2878AFFC407BE7821EC /* ringbuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = ""; }; + B2549B66FD3CB3110FA065042ED1999F /* RSTCellContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentView.h; path = Roxas/RSTCellContentView.h; sourceTree = ""; }; + B270BDDBFC6E00BB3C7D20C485D51558 /* DeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DeltaCore-dummy.m"; sourceTree = ""; }; + B2A2C9E40FB41F12D2820E3BC07998FC /* gbafilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gbafilter.h; sourceTree = ""; }; + B2B24BB63436EBA04A7F12707D9B8161 /* NstInpSuborKeyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpSuborKeyboard.hpp; sourceTree = ""; }; + B2C7AE6607FC679EA4767E48ADD80B0C /* svcid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svcid.h; sourceTree = ""; }; + B2CBDD74EE4025870C9ACEC038645C28 /* NstBoardDiscrete.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDiscrete.hpp; sourceTree = ""; }; + B3010613943E28048D5313FE665F01EE /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + B3475FAD5B489B5292E3D459A64A3417 /* Types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = ""; }; + B36363E6798FB6B3F40354BBE7374A01 /* Log.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Log.h; sourceTree = ""; }; + B3701068412FCD905D962E33387C2680 /* RSTPlaceholderView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = RSTPlaceholderView.xib; path = Roxas/RSTPlaceholderView.xib; sourceTree = ""; }; + B3703612D238CE733DA02FE1314443CB /* array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = ""; }; + B3D974A96D201E7E1B93CC578D3AC323 /* VideoRendering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoRendering.swift; sourceTree = ""; }; + B417E49B5B743092F1356B5AB9E555E0 /* t1types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = t1types.h; sourceTree = ""; }; + B4344D31A95675A878EB6C78C263B86A /* GBASoundDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBASoundDriver.h; sourceTree = ""; }; + B442DF315B83F5A22C5AC0D52DC6F788 /* ControllerSkin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkin.swift; sourceTree = ""; }; + B442E052E2E964ADC9111C8C691F1F49 /* NstCrc32.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCrc32.hpp; sourceTree = ""; }; + B4621F5E2074F440324D7C9E0D8C9D88 /* movie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = movie.h; sourceTree = ""; }; + B4649DC9403189EF7D8B5F740147BCBF /* opengl_ColorBufferReaderWithBufferStorage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithBufferStorage.cpp; sourceTree = ""; }; + B46E429745DDFCAA08E329F0BBAD9911 /* GBAEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAEmulatorBridge.h; sourceTree = ""; }; + B47C40F3651700B51A70D5B9000D2FD3 /* N64Types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64Types.h; sourceTree = ""; }; + B4983F070F9A339A50561C5253106964 /* DepthBufferToRDRAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBufferToRDRAM.cpp; sourceTree = ""; }; + B5246923E4069138B8F38B3EF8C4EE4D /* Users.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Users.swift; path = Source/SwiftyDropbox/Shared/Generated/Users.swift; sourceTree = ""; }; + B55404E8B2117F5FA8444F1ADD1A5039 /* GameViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = ""; }; + B56303B13A0444FFC586E198F58DAFAB /* NstBoardBmcA65as.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcA65as.hpp; sourceTree = ""; }; + B57DE6F8DC52A0DF6FA63026114732E6 /* ThreadLocalPtr.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocalPtr.inl; sourceTree = ""; }; + B595CA4CE436B20EE775744443119153 /* NstBoardWaixingSh2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSh2.hpp; sourceTree = ""; }; + B5E6736AEAB28DFE73C9BD1605B0863D /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + B5E9F261B8796880679ECD1AF1FDC584 /* eeprom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = eeprom.h; sourceTree = ""; }; + B5EB7FA5DB62956C49A473DF02AE5456 /* GTLRDriveService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDriveService.m; path = Source/GeneratedServices/Drive/GTLRDriveService.m; sourceTree = ""; }; + B5FF87A66DB9785A1AFFD395C49E2A88 /* NstBoardSunsoft5b.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft5b.hpp; sourceTree = ""; }; + B61327FFC19D6334ACBC6C66C2BC2BF5 /* ftgloadr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgloadr.h; sourceTree = ""; }; + B61F4F596E3EE98C9853A96F05AFA5BD /* ZlutTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZlutTexture.cpp; sourceTree = ""; }; + B686582878B4BC8A27AD99BE25411842 /* NstBoardAve.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAve.hpp; sourceTree = ""; }; + B6CDC4DC2E9754CD3DA34C6A091F6E53 /* NstVideoFilterScaleX.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterScaleX.hpp; sourceTree = ""; }; + B6DF6A81ED3CF21DF9B51DF914D08077 /* musyx.c */ = {isa = PBXFileReference; includeInIndex = 1; path = musyx.c; sourceTree = ""; }; + B70989044B91229B1C51B5758D9F96E5 /* SMCalloutView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-umbrella.h"; sourceTree = ""; }; + B71756B40C4BB780F974D844D1D446CB /* NstBoardTaitoX1005.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoX1005.hpp; sourceTree = ""; }; + B7229404AFA84F6E9DB4337E6CCCFD47 /* NstVideoFilterNtsc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterNtsc.hpp; sourceTree = ""; }; + B770765D40D57151EF4C7C13D2101E87 /* NstBoardTengen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTengen.hpp; sourceTree = ""; }; + B7B0EC3A43195D2E933C1849423260A4 /* ContextImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ContextImpl.h; sourceTree = ""; }; + B7D405FFFFAD99E717267886418DECCE /* expr.cpp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = expr.cpp.h; sourceTree = ""; }; + B7F7B276E6C1803265F573539F0A3704 /* NstDipSwitches.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstDipSwitches.hpp; sourceTree = ""; }; + B83F5B2E3006BD12D60CA06E677E7EE6 /* dd_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dd_controller.h; sourceTree = ""; }; + B8494C070246CC8BED190E092A370B3C /* GoogleToolboxForMac-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleToolboxForMac-umbrella.h"; sourceTree = ""; }; + B87260587307761413DE023873BF047A /* ftgasp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgasp.h; sourceTree = ""; }; + B8982524E4ACBEBF47DD97748097DE96 /* View.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = View.hpp; sourceTree = ""; }; + B8A840F202469E60C39538CC467177CA /* GBCInputGetter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GBCInputGetter.cpp; sourceTree = ""; }; + B8B3A29AED934B0B3AC6171E49F11E8D /* ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist"; sourceTree = ""; }; + B95AF3A3928659911B5866BCB18F168F /* recomp_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = recomp_types.h; sourceTree = ""; }; + B98E48490885483AD070534BE31BBED4 /* regcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = regcache.h; sourceTree = ""; }; + B9A1298C2392965F68B9AE60DBE0B247 /* NstApiConfig.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiConfig.hpp; sourceTree = ""; }; + B9FB554080990194873F4A54006A5E02 /* TexrectDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TexrectDrawer.cpp; sourceTree = ""; }; + BA46D0D247C2A97E0EBAEF9B67F430BF /* cart_rom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cart_rom.h; sourceTree = ""; }; + BA5332776FCBF3B75CDD7168F2B8E2C4 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; + BA6C6054CE8555D1822133E74F7E920F /* NstBoardBmcGoldenGame260in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGoldenGame260in1.hpp; sourceTree = ""; }; + BAB2153E188978ED7096999E36B0E1D7 /* svwinfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svwinfnt.h; sourceTree = ""; }; + BABB271F3BD66B98A48FF2230E57E168 /* cpuaddr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuaddr.h; sourceTree = ""; }; + BAC79183F81C91B3272AAD8FC4B608B5 /* TxImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxImage.h; sourceTree = ""; }; + BB060E9B70D07FF358DD8F33001FD5C6 /* Custom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Custom.swift; path = Source/SwiftyDropbox/Shared/Handwritten/Custom.swift; sourceTree = ""; }; + BB26B910FF9586D0BBEEF8B7B3FCC55A /* RSP_LoadMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RSP_LoadMatrix.cpp; sourceTree = ""; }; + BB40DF340E3D23ACCF742C2B72217324 /* Image.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Image.hpp; sourceTree = ""; }; + BB52AEE6F8BD7BDA6E88E263AE184CC3 /* CGGeometry+Dictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "CGGeometry+Dictionary.swift"; sourceTree = ""; }; + BB534F82994E35C0556962CEB04EAF6E /* slot1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = slot1.h; sourceTree = ""; }; + BB54FA85A4EFEF73DED9795E55139B78 /* NSBundle+Extensions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+Extensions.h"; path = "Roxas/NSBundle+Extensions.h"; sourceTree = ""; }; + BB711F8EFE31B0F681D314A46FEA8398 /* svkern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svkern.h; sourceTree = ""; }; + BB995585BB8CD0FC8EA0EC91CA17BBC4 /* ResourceBundle-DeltaCore-DeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-DeltaCore-DeltaCore-Info.plist"; sourceTree = ""; }; + BBAEA04DA00E792104BDE8F6F66BBE09 /* CheatFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CheatFormat.swift; sourceTree = ""; }; + BBB89BF0F048332F70DF3BCD3A833DA2 /* RSTOperation_Subclasses.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperation_Subclasses.h; path = Roxas/RSTOperation_Subclasses.h; sourceTree = ""; }; + BBE10799564D3547139EFF5CE894CF5A /* GTMNSString+URLArguments.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMNSString+URLArguments.h"; path = "Foundation/GTMNSString+URLArguments.h"; sourceTree = ""; }; + BC6023BC6F5B2433CF51C57DEE9E331A /* NstBoardJyCompany.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJyCompany.hpp; sourceTree = ""; }; + BC60B5824BD4DA2AB25BA85A4C586886 /* readwrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = readwrite.h; sourceTree = ""; }; + BC670362843998DA1AF5EB24E32647D3 /* NstInpTopRider.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpTopRider.hpp; sourceTree = ""; }; + BC93DB5E5A61F3C883D37793C77CDF2A /* GBADeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GBADeltaCore.modulemap; sourceTree = ""; }; + BCA1F428AFD84BF440CD3E1D14DE8168 /* GTMSessionFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcher.m; path = Source/GTMSessionFetcher.m; sourceTree = ""; }; + BCBE6B3F37DD42BA03F9A43F4FBE4F4D /* TeamLog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamLog.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamLog.swift; sourceTree = ""; }; + BCD06FDE6C4BF266F270034784E23776 /* Transform.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Transform.hpp; sourceTree = ""; }; + BCE1167568421B515DDBA963CC2FD777 /* NstApi.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApi.hpp; sourceTree = ""; }; + BD1D6B58318EF86DA5951706280EB3DC /* interpret.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interpret.h; sourceTree = ""; }; + BD2858200C2A47FC9A917133A7D25353 /* render3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = render3D.h; sourceTree = ""; }; + BD629D406305184DD39F018AC48C58E7 /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; }; + BD71FA05AF33D2016379AB441E9DA7FD /* GBAEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBAEmulatorBridge.mm; sourceTree = ""; }; + BDBC8749B7239FFE93E87463C75D3321 /* minkeeper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = minkeeper.h; sourceTree = ""; }; + BE12392094B01C972B9C0018E1869E29 /* RemoteFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteFile.swift; sourceTree = ""; }; + BE235836DD079740208A4AF1D7DB9F35 /* EmulatorCore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EmulatorCore.swift; sourceTree = ""; }; + BE3BB976C21C71194C0B3D42717A0917 /* TxHiResCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxHiResCache.h; sourceTree = ""; }; + BE5E01263F3833C2C56EBB4B61F7CA32 /* gDP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = gDP.cpp; sourceTree = ""; }; + BE88F0656454261D53E5BE768654A774 /* ereader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ereader.h; sourceTree = ""; }; + BEC812792FD886E7BB2776C793B6BEEB /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/SQLite/Core/Errors.swift; sourceTree = ""; }; + BECCB76E1F55FC84F3E9C1EBD272E746 /* GPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GPU.h; sourceTree = ""; }; + BED699E7391C1CA0477C2735B758007E /* SQLite.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-umbrella.h"; sourceTree = ""; }; + BEEFBD2A07C30B4B56078B86605B2E66 /* glsl_SpecialShadersFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_SpecialShadersFactory.h; sourceTree = ""; }; + BF4CCC593653835948DE2077F515DDF3 /* rasterize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rasterize.h; sourceTree = ""; }; + BF56520AA924EF4F971217A9D8F49143 /* srtcemu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = srtcemu.h; sourceTree = ""; }; + BF609625DC6D6DCA4E18292A7309D441 /* assem_arm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_arm.h; sourceTree = ""; }; + BF84BC955CB33F2AF3685A48B39D12AC /* 3DMath.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = 3DMath.cpp; sourceTree = ""; }; + BF8FF38768C4E80A0EA1F613D38541E5 /* NstApiFds.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiFds.hpp; sourceTree = ""; }; + BF94EC77DBC5DFAC5751843F5F04C129 /* Vector3.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector3.inl; sourceTree = ""; }; + BFD0CAB74C45D6B1CA49B94505E8E762 /* NSPredicate+Search.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSPredicate+Search.m"; path = "Roxas/NSPredicate+Search.m"; sourceTree = ""; }; + BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DSDeltaCore.xcconfig; sourceTree = ""; }; + BFF96050C458E84686F588B9793FEC9C /* NstBoardCneShlz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCneShlz.hpp; sourceTree = ""; }; + C09575AF57FFD4D7C7A04FC133E63156 /* MergePolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MergePolicy.swift; sourceTree = ""; }; + C0BCFCB348564B9EB1473238677BB354 /* NstBoardFutureMedia.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFutureMedia.hpp; sourceTree = ""; }; + C0C395FEF300FE2DAB4AB70FDFBE9A0F /* RSTCellContentDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCellContentDataSource.m; path = Roxas/RSTCellContentDataSource.m; sourceTree = ""; }; + C12493BE66E89A1BAFEC4C49A5D0F399 /* DSDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DSDeltaCore.modulemap; sourceTree = ""; }; + C1651CF80D05D97DB390C5D66D51F25C /* F3DZEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DZEX2.h; sourceTree = ""; }; + C17445D591C8EC78950717FD3D5F77B1 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; + C1998E0D8085221AD87F89B614C10E52 /* libGTMSessionFetcher.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGTMSessionFetcher.a; path = libGTMSessionFetcher.a; sourceTree = BUILT_PRODUCTS_DIR; }; + C1CD631F0A847D6AFABB4216480B7556 /* RSTCompositeDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCompositeDataSource.h; path = Roxas/RSTCompositeDataSource.h; sourceTree = ""; }; + C1D6EFEC4C64645B1CD5E8A6C7E9C97F /* ZilmarGFX_1_3.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZilmarGFX_1_3.h; sourceTree = ""; }; + C1E54260AFD798B02F4283ECF16E444F /* t1tables.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = t1tables.h; sourceTree = ""; }; + C1F9B4F1AC4BEBB6F3B839EDBD9E5F8C /* adaptivesleep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = adaptivesleep.h; sourceTree = ""; }; + C20B18CFE6A85C50A5E43ECF4C69D309 /* NstTrackerMovie.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTrackerMovie.hpp; sourceTree = ""; }; + C2472287C41451AFFEC020183BD042A3 /* ControllerDebugView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerDebugView.swift; sourceTree = ""; }; + C2480C7048FB3B86DEDC127B883F6323 /* RSP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RSP.h; sourceTree = ""; }; + C24EA8E380769E668B40D2C5025505CB /* opengl_ColorBufferReaderWithPixelBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithPixelBuffer.cpp; sourceTree = ""; }; + C268076A13ECC0F130B5A406C2A1E22A /* GTMSessionFetcher.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMSessionFetcher.xcconfig; sourceTree = ""; }; + C26FEA9C82A62549EEEB21A953C0F6DF /* ftxf86.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftxf86.h; sourceTree = ""; }; + C27BB3E37D9E25626486536CA6D1890B /* OGLFT.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLFT.h; sourceTree = ""; }; + C2A0EC04B2612AA6AB035B6AB1B3FAE8 /* UdpSocket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = UdpSocket.hpp; sourceTree = ""; }; + C2A44DFFD1971B44F0D03A3B9D7CEC57 /* Harmony.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Harmony.h; path = Harmony/Harmony.h; sourceTree = ""; }; + C2B84B3955DE3CC74FD9418BE74C2896 /* GBCInputGetter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCInputGetter.h; sourceTree = ""; }; + C2C58B3E3B8C36120F560F859D6D98F7 /* NstBoardMmc1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc1.hpp; sourceTree = ""; }; + C2ED97BD0F13C57ECCE6851D581326EB /* cic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cic.h; sourceTree = ""; }; + C2FE893CBC159403181F3126C6C7917D /* StoneBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoneBase.swift; path = Source/SwiftyDropbox/Shared/Generated/StoneBase.swift; sourceTree = ""; }; + C32EC4E1163CB30B4250829CC8FCC1BA /* GBAinline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAinline.h; sourceTree = ""; }; + C3522EC7585D646CAA3673DB9D55FB21 /* F3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3D.cpp; sourceTree = ""; }; + C37DA4AD186CBA7132359E75E98431E8 /* Port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Port.h; sourceTree = ""; }; + C3928A50878B4620930E776643F68B21 /* F3DFLX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DFLX2.cpp; sourceTree = ""; }; + C3EC67AFC76D160DAF406F83FB32F372 /* NstBoardAxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAxRom.hpp; sourceTree = ""; }; + C41D62EAA75E3627EE9D9B3527E8DFFB /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; + C43B2C1E1A9F88A7EEAE044E22A0CDC6 /* opengl_UnbufferedDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_UnbufferedDrawer.cpp; sourceTree = ""; }; + C46B41859C836F92F71776FC13FD640A /* pngrtran.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrtran.c; sourceTree = ""; }; + C48EADCAA3A0151BF5347F5EE447CBD1 /* GBAcpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAcpu.h; sourceTree = ""; }; + C4DEF759B31F98EC3A0C7C1538495611 /* NstBoardBmc110in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc110in1.hpp; sourceTree = ""; }; + C4F09C29C5169EDE2BFAE9F9E6B95F48 /* GameControllerInputMappingProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerInputMappingProtocol.swift; sourceTree = ""; }; + C538C31B2DE4BC6BA5C964106E5E3F6B /* GTMSessionUploadFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionUploadFetcher.m; path = Source/GTMSessionUploadFetcher.m; sourceTree = ""; }; + C55A28A051F1189A5E169C1AE35F08E6 /* NstBoardBandaiLz93d50.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiLz93d50.hpp; sourceTree = ""; }; + C5A02908B90AD54C8C621F1E9A36CB18 /* m64p_plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_plugin.h; sourceTree = ""; }; + C5A679691AAA47A28EF1E1E5A6BA88E4 /* opengl_ColorBufferReaderWithReadPixels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithReadPixels.h; sourceTree = ""; }; + C5AA082D0701AB3A2B49F4AA865B5021 /* sdl2_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdl2_compat.h; sourceTree = ""; }; + C5D68576CC0EE04A78AE791897AFD780 /* TxQuantize.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxQuantize.cpp; sourceTree = ""; }; + C5E44048879A0504939654F65166654C /* memmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memmap.h; sourceTree = ""; }; + C65A2F325C6EA118286DBBC4484E5404 /* r4300_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = r4300_core.h; sourceTree = ""; }; + C6794551744F79F117DF19850F503283 /* MFiGameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MFiGameController.swift; sourceTree = ""; }; + C704B47C4D3D001EC83BB8F7C1E8D2E5 /* GLideN64_mupenplus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideN64_mupenplus.h; sourceTree = ""; }; + C70E38FCA082D826611BFD1F0EC58613 /* GameProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameProtocol.swift; sourceTree = ""; }; + C718FF2F26B50069B14C6107F86F877B /* SNES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SNES.swift; sourceTree = ""; }; + C71C064E0F8E2D6A2B6E0CB4849BFC5B /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; + C73137BF8F38B56D677038CAFECF2A56 /* pngwtran.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwtran.c; sourceTree = ""; }; + C7361C449C785F93C554BF35D3475E03 /* assem_x64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_x64.h; sourceTree = ""; }; + C7561F25DF5A13A37A67CFD89590E68A /* NstApiVideo.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiVideo.hpp; sourceTree = ""; }; + C77DD7055BE2E940CB49A8B0F10A472F /* String.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = String.inl; sourceTree = ""; }; + C790529DABD6E54A2BA3E56B1C845F12 /* srtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = srtc.h; sourceTree = ""; }; + C7AB9F8A6F41A6BF238E1816BF6ADAE9 /* BitmapProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BitmapProcessor.swift; sourceTree = ""; }; + C7BC48F551C51325F8E971D1377D2A8B /* RSTConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTConstants.h; path = Roxas/RSTConstants.h; sourceTree = ""; }; + C7E40DB865F641E4AB32B64D3F93E22C /* GoogleAPIClientForREST.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleAPIClientForREST.modulemap; sourceTree = ""; }; + C87526B5C0AF75FA4CE41AA42D172B0B /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; + C88191C64D7E8CE0EE4B4033CCB6D0FA /* arithmetics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = arithmetics.h; sourceTree = ""; }; + C88860D669B74A0154AA887269E28475 /* GTLRBatchQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRBatchQuery.h; path = Source/Objects/GTLRBatchQuery.h; sourceTree = ""; }; + C8A210C3B60C6D8D12F6F8820EF28589 /* missing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = missing.h; sourceTree = ""; }; + C8A78AF718D2553FAE9A19AC2F865BA3 /* ftcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcache.h; sourceTree = ""; }; + C8B1D8C461900C12369DB3E2AA13C08E /* NstBoardBmcGamestarB.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGamestarB.hpp; sourceTree = ""; }; + C8D6AC695498645EEE4A66FCEF97D848 /* libN64DeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libN64DeltaCore.a; path = libN64DeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; + C9015E1D86DF0B2A7A1D22814920641A /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + C90C25C12E9E9489A474A496C47B38AF /* Sprite.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sprite.hpp; sourceTree = ""; }; + C91AB35D0843E8B6D4267700DA3291F0 /* NstBoardBmcBallgames11in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcBallgames11in1.hpp; sourceTree = ""; }; + C95F862EEE33E2358C6B0273BBF456D1 /* TextureFilters_hq2x.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_hq2x.cpp; sourceTree = ""; }; + C977FFA5FDFB893A5DAB65AE680DA461 /* GTLRBase64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRBase64.m; path = Source/Utilities/GTLRBase64.m; sourceTree = ""; }; + C9B5A75174DE7C7B4A535B3A42D6239C /* SMClassicCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMClassicCalloutView.h; sourceTree = ""; }; + C9C35DC64C3A93740937D3C3964F9200 /* F3DDKR.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DDKR.h; sourceTree = ""; }; + C9C3B7DA45835B08897BC091AEF1EEB6 /* RDRAMtoColorBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RDRAMtoColorBuffer.h; sourceTree = ""; }; + C9D7F4E7EB78574E9BE5E912032A3DFF /* NstBoardBtlDragonNinja.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlDragonNinja.hpp; sourceTree = ""; }; + C9E53CDEE3FB0C997231AFF0EA62A9F4 /* gfx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gfx.h; sourceTree = ""; }; + C9F883F7F8E0CC8223971F5D3F4E6D89 /* tlb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tlb.h; sourceTree = ""; }; + CA005FCDCBF549105B1691D698AFFE18 /* L3DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3DEX2.cpp; sourceTree = ""; }; + CA2F2C7F1257D8E558E768DAD7B2D74B /* Cheats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Cheats.h; sourceTree = ""; }; + CA84B8D0950FD10163E23797CEABFE2C /* NstInpTurboFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpTurboFile.hpp; sourceTree = ""; }; + CA99918A66499B3FD57B4BE6A2985044 /* cpumacro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpumacro.h; sourceTree = ""; }; + CABA30017D9761CD2D49BCA9F53E923B /* NSUserDefaults+DynamicProperties.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSUserDefaults+DynamicProperties.m"; path = "Roxas/NSUserDefaults+DynamicProperties.m"; sourceTree = ""; }; + CAE0F839C3C1E4DB9E2519345C397A21 /* RSTNavigationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTNavigationController.m; path = Roxas/RSTNavigationController.m; sourceTree = ""; }; + CB3301D4A5FED38AEE41ED07A6C502BE /* Shader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Shader.hpp; sourceTree = ""; }; + CB608FA02B2FC02737ED821505210FEC /* GLideNUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideNUI.h; sourceTree = ""; }; + CB69BAB4143D6BB19DEF090F3256A990 /* SNESDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SNESDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + CB7525C73F421F5A18034AF27880A67F /* callbacks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; + CB811B30D58FF4024455D5E5CC17947B /* NstBoardTxc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxc.hpp; sourceTree = ""; }; + CB8D4802A5F80BBA2E31C377A7C9689F /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; }; + CBC8A38B9BE9E17E5E15E98583898082 /* workqueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = workqueue.h; sourceTree = ""; }; + CBE1D5062813EDF33B5FBD108CA1A88C /* dma.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dma.h; sourceTree = ""; }; + CBECAF1300D5AE6D87DDEBE18A8D1C3C /* GLFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLFunctions.h; sourceTree = ""; }; + CD01747A1D135D8C97DBC34B3BADEEA8 /* ExtensibleEnums.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExtensibleEnums.swift; sourceTree = ""; }; + CD370B63C73F83203B239D65A10BF44A /* GTLRDuration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDuration.m; path = Source/Objects/GTLRDuration.m; sourceTree = ""; }; + CD40FB9904EBC64F4CB21A6062A4FFC8 /* NstBoardBmcSuperGun20in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperGun20in1.hpp; sourceTree = ""; }; + CD4250629F8C1D5652E021E52A3F196C /* common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; + CDA07C9DEC9FD13724174A7D6794AD7B /* FileRequests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileRequests.swift; path = Source/SwiftyDropbox/Shared/Generated/FileRequests.swift; sourceTree = ""; }; + CDA1A181F550D672CE3A7A747A0DCB7E /* UIImage+Manipulation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Manipulation.m"; path = "Roxas/UIImage+Manipulation.m"; sourceTree = ""; }; + CDC648448D2BD63C7FA72EBB05BD53BD /* NstSoundPcm.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundPcm.hpp; sourceTree = ""; }; + CDE5597A73178118289A5342B56A5EFB /* NstBoardRexSoft.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRexSoft.hpp; sourceTree = ""; }; + CE46BF9BB2E03B58F53E69C87B3A1564 /* messages.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = messages.h; sourceTree = ""; }; + CE6C7C0BB4E1D92107DD8D623F8F45E5 /* WriteToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WriteToRDRAM.h; sourceTree = ""; }; + CEC07F295EF65A94DD75B4B6F79D0A83 /* Revision.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Revision.h; sourceTree = ""; }; + CF0DF7AF00BD39B06D1EDE5AD5FAF7AB /* F3DTEXA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DTEXA.cpp; sourceTree = ""; }; + CF6CFBF5D3D08E7081D6FE7FC32A40AE /* sRGB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sRGB.h; sourceTree = ""; }; + CF70FBCB7AE2CE5D532C4D3DDF618D72 /* video_capture_backend.c */ = {isa = PBXFileReference; includeInIndex = 1; path = video_capture_backend.c; sourceTree = ""; }; + CF7ECEAEDCF30C5FD13208AF855EEF47 /* NSLayoutConstraint+Edges.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+Edges.h"; path = "Roxas/NSLayoutConstraint+Edges.h"; sourceTree = ""; }; + CFA8EEA9986267DD4C9222F8013EB169 /* NstBoardAe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAe.hpp; sourceTree = ""; }; + CFB8F56FBC758AE2588C1DD814A5F9D6 /* ai_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ai_controller.h; sourceTree = ""; }; + CFE10B16B0C4C7D24E899A604244116E /* TDStretch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TDStretch.h; sourceTree = ""; }; + CFF26FC15D5CF0C1D2FDC8A0DF023F02 /* NstBoardSuperGame.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGame.hpp; sourceTree = ""; }; + CFF9DBD50FF109AB529096538EAC3BE3 /* TextureFilterHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilterHandler.h; sourceTree = ""; }; + D04DC78D5A74516CF2BAD79E947302B5 /* ftsizes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsizes.h; sourceTree = ""; }; + D0869A5AC273020F28A83BEFF3F355D3 /* crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; }; + D0CE7BCBDFB3A9A4EBEA78CB70BFFB3E /* svbdf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svbdf.h; sourceTree = ""; }; + D10088E315F5123F3D327A06066E206B /* NstInpPowerGlove.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPowerGlove.hpp; sourceTree = ""; }; + D113E482EBF7C096302CD382067ECB51 /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; }; + D116902F224A7C6DCFCD3121EA7E0745 /* Sensor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sensor.hpp; sourceTree = ""; }; + D1212ABF80224A615FAA8D5EA7127F55 /* retro_environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_environment.h; sourceTree = ""; }; + D1221EDCBBEDA9035D0C95CAE7F9D52A /* GTLRService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRService.m; path = Source/Objects/GTLRService.m; sourceTree = ""; }; + D159D83AA74847EB95659739517DA8FE /* registers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = registers.h; sourceTree = ""; }; + D16849E97B5D5B6449F8627DD2DCBAF2 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; + D17E68802F2F252D95693D1AA5ADC144 /* SoundSource.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundSource.hpp; sourceTree = ""; }; + D18007DF21DF9CDE2EA3A14D00C050DA /* NstBoardBmcSuper700in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper700in1.hpp; sourceTree = ""; }; + D1A18FFCFB5674E197BFC4BFA0584F6E /* F3DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2.cpp; sourceTree = ""; }; + D1AF2289C82F924BD674E01C203E7B6F /* ucodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ucodes.h; sourceTree = ""; }; + D1BA7EA1AD9736CD11003C39C000C9C9 /* savestate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = savestate.h; sourceTree = ""; }; + D1E6CF2256BF01CFCB8C7C6BB1D101FE /* RSTCollectionViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = RSTCollectionViewCell.xib; path = Roxas/RSTCollectionViewCell.xib; sourceTree = ""; }; + D24B8100E3100D72F4874FB079F78F54 /* NstBoardNanjing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNanjing.hpp; sourceTree = ""; }; + D25FEE0C7F00C1F35CA79D7416F11407 /* DSDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = DSDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + D26E750E5A5772E0667870225E0F7C1B /* port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = port.h; sourceTree = ""; }; + D2787BB38A3A6EE118F7DC347429E78F /* gdbstub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gdbstub.h; sourceTree = ""; }; + D27C9AEA920B8065DC8FB0F6F92A6E26 /* GTLRURITemplate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRURITemplate.h; path = Source/Utilities/GTLRURITemplate.h; sourceTree = ""; }; + D282E9AC180F6200BA4B724CC7918B06 /* NstBoardBtlPikachuY2k.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlPikachuY2k.hpp; sourceTree = ""; }; + D2CD9D7750784D7D9E924E0E0357EC76 /* ZSort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZSort.h; sourceTree = ""; }; + D2F39CB2B6042785A3E5F2C40320DD2C /* main.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = main.h; sourceTree = ""; }; + D2F66324134D7EB7894E23D64D5D292B /* ftgxval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgxval.h; sourceTree = ""; }; + D300A5B7805C13ACEEB33CFECE9235DD /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; + D30A1BC3FBD53F3033F0C28438BE7BD0 /* N64.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = N64.cpp; sourceTree = ""; }; + D31F9464D26C84F4303F9214852E0259 /* NstBoardBtlShuiGuanPipe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlShuiGuanPipe.hpp; sourceTree = ""; }; + D344F505862E745C78F15C36F91D7325 /* CombinerKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CombinerKey.h; sourceTree = ""; }; + D39C48316E5E36755CF1BA3B4E16F5DA /* DeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = DeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + D41C7731EC1A1866FC9B20D1EFC8D2ED /* NstInpPowerPad.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPowerPad.hpp; sourceTree = ""; }; + D425AE3E5ED390C5A8846F791DD166FE /* dictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dictionary.h; sourceTree = ""; }; + D4AAED9CBF41BDAFF1EE1D4E400FDF87 /* cp0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp0.h; sourceTree = ""; }; + D4C010E8572FAE8B51DFDBF2300ECF30 /* libGBCDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGBCDeltaCore.a; path = libGBCDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; + D4E18A027874D0E4F2D09A1492E7FC02 /* memmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memmap.h; sourceTree = ""; }; + D4E854B6ACFFE4EA1EDD318476D024D0 /* NstBoardRexSoftSl1632.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRexSoftSl1632.hpp; sourceTree = ""; }; + D501AB9335B46D77142394E47A29319A /* GTMReadMonitorInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMReadMonitorInputStream.h; path = Source/GTMReadMonitorInputStream.h; sourceTree = ""; }; + D52092A71CADBC93153EE571AB2672B0 /* UIImage+Manipulation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Manipulation.h"; path = "Roxas/UIImage+Manipulation.h"; sourceTree = ""; }; + D529199D3F461EACEE4D0D45FA961BF4 /* UIApplication+AppExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIApplication+AppExtension.swift"; sourceTree = ""; }; + D587573F39534790FBF56E7EEC8232B0 /* assemble_struct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble_struct.h; sourceTree = ""; }; + D58C0FE9AF63F39A0E7990E8ABEAA707 /* NstBoardSachenSa72008.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa72008.hpp; sourceTree = ""; }; + D5918BE30019D1A9AFEAA94298952245 /* UITableViewCell+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+CellContent.m"; path = "Roxas/UITableViewCell+CellContent.m"; sourceTree = ""; }; + D5F7B6EF99FCD4BF1F3869F8D73FE95B /* RSTOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperation.h; path = Roxas/RSTOperation.h; sourceTree = ""; }; + D600C41025FD98A039F6974280BC9059 /* NstApiMachine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiMachine.hpp; sourceTree = ""; }; + D64D70EE0AECCCED6FF32F99E14D58BF /* svgxval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svgxval.h; sourceTree = ""; }; + D6619CB5190C33CD4AF481F84D29F75F /* RSTSearchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTSearchController.m; path = Roxas/RSTSearchController.m; sourceTree = ""; }; + D686BB86CE4E75B4F320164A9EC1B404 /* GTLRUploadParameters.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRUploadParameters.m; path = Source/Objects/GTLRUploadParameters.m; sourceTree = ""; }; + D69B8F7EC4A4B64E7B7E790A6DCF62C4 /* ftoutln.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftoutln.h; sourceTree = ""; }; + D6B56FEC107675FBE484E18FB0578E5F /* DepthBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBuffer.cpp; sourceTree = ""; }; + D6BFD334CCCF9EBCBC3A6ABCF03BF295 /* UITableView+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+CellContent.h"; path = "Roxas/UITableView+CellContent.h"; sourceTree = ""; }; + D6CAAD3D41D505A55D4926BAF41AF958 /* obc1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = obc1.h; sourceTree = ""; }; + D6D2B3F2E952A338D1128CD5D724862D /* NstBoardCamerica.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCamerica.hpp; sourceTree = ""; }; + D73DBD374EA8AF257C963ADA5CED3C29 /* m64p_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_config.h; sourceTree = ""; }; + D761EA5C2004DE520EE6E3DA7CD4F6C3 /* xxhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; + D77D2A132FCC17A3824D7EE83B27B431 /* plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = plugin.h; sourceTree = ""; }; + D79C4564600E16C5D3087362DA9FB91E /* mp3.c */ = {isa = PBXFileReference; includeInIndex = 1; path = mp3.c; sourceTree = ""; }; + D8CFE89245F633014BBDF6E8AF4985D1 /* DSDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DSDeltaCore-dummy.m"; sourceTree = ""; }; + D8D32EAB45D5BEE636521CB06DB71FF9 /* NstBoardJalecoJf17.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf17.hpp; sourceTree = ""; }; + D8D7F2571154753B11327E7B624A795A /* dd_controller.c */ = {isa = PBXFileReference; includeInIndex = 1; path = dd_controller.c; sourceTree = ""; }; + D8E275522B55AF9B007FC628DA27411C /* WavFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WavFile.h; sourceTree = ""; }; + D8EB194138EAB03A1BAF77804381385D /* DeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DeltaCore-umbrella.h"; sourceTree = ""; }; + D91579E22C2EC7BD86DF031990A153A9 /* opengl_ColorBufferReaderWithBufferStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithBufferStorage.h; sourceTree = ""; }; + D9191356F40229DDA60488AC64805339 /* ftpic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftpic.h; sourceTree = ""; }; + D9445B158497F7C69D8E9D2443A33739 /* NstDatabase.xml */ = {isa = PBXFileReference; includeInIndex = 1; path = NstDatabase.xml; sourceTree = ""; }; + D95AA79C2C5088E9B27BAAA9444850C2 /* Context.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Context.cpp; sourceTree = ""; }; + D98981D944CEC9F56A1D909EFAB4FB16 /* PropertyGroup+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "PropertyGroup+Harmony.swift"; sourceTree = ""; }; + D98EC38E106371722A01A73B3CD4D54B /* NstBoardKonamiVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVsSystem.hpp; sourceTree = ""; }; + D9BE76A56BCD866A71FD891640A0940C /* SoundFileWriter.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileWriter.hpp; sourceTree = ""; }; + D9CA1BA4B1C7EB05BD412CB7895C1658 /* GTMGatherInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMGatherInputStream.h; path = Source/GTMGatherInputStream.h; sourceTree = ""; }; + D9E62A3E87A152D8A5A4747A0E88F317 /* SMCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMCalloutView.m; sourceTree = ""; }; + D9ED4C71C3016ED3FC4BA58AD0F23387 /* ppu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ppu.h; sourceTree = ""; }; + DA034BCB2E1E7F757B0973F79CA6BD70 /* GBCDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCDeltaCore.h; sourceTree = ""; }; + DA67DD1AC07C6365F72FCAE6272760D2 /* Entry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entry.swift; path = Sources/ZIPFoundation/Entry.swift; sourceTree = ""; }; + DA78D0D081686B5372F0FFAABDF5733A /* Pods-Delta-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Delta-acknowledgements.plist"; sourceTree = ""; }; + DA87C06EA55D40BF0BACCC63B7F0FA76 /* NstBoardHes.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHes.hpp; sourceTree = ""; }; + DAC19450998BD4D56C3C2C86AE5687C6 /* rumblepak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rumblepak.h; sourceTree = ""; }; + DACC10FFB04DCEFEA489925006B8311D /* fttypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fttypes.h; sourceTree = ""; }; + DB3A0F2D56E5C2399EC70F3417641DDA /* ft2build.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ft2build.h; sourceTree = ""; }; + DB6C6046F5260896D182C1590701A4C2 /* VideoFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoFormat.swift; sourceTree = ""; }; + DB6DD6DB7B47787A5A8EA1D3325598F6 /* GameView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = ""; }; + DB916A39387B7212EE06E2DA467A8D51 /* NstBoardTaitoTc0190fmcPal16r4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoTc0190fmcPal16r4.hpp; sourceTree = ""; }; + DBAA90C42D53B3B86801C3ADD7C2CC2A /* stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = stream.h; sourceTree = ""; }; + DBB26A9F3AD2F7159A0C7E893521DBCA /* Vector2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector2.hpp; sourceTree = ""; }; + DBBA083D62798DCA02FE935019980CCF /* GoogleSignIn.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleSignIn.framework; path = Frameworks/GoogleSignIn.framework; sourceTree = ""; }; + DBC0113CF73BE24525E670D024A85BE7 /* libHarmony.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libHarmony.a; path = libHarmony.a; sourceTree = BUILT_PRODUCTS_DIR; }; + DBC2FE16691E41109D7168B4B47BC729 /* F3DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX.h; sourceTree = ""; }; + DBCF759085E40951D39485BB214BB25C /* DepthBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBuffer.h; sourceTree = ""; }; + DBE05472ED5AAEBB0CA13B43E5496F2F /* NstApiNsf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiNsf.hpp; sourceTree = ""; }; + DBFD59116F5FC54AE4428271A6BB1CAA /* filters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = ""; }; + DC3FCFF553A82968D13B5EB86CA60675 /* RSTCellContentDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentDataSource.h; path = Roxas/RSTCellContentDataSource.h; sourceTree = ""; }; + DC46D472713AEC4054D4A5794AAC802C /* txWidestringWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = txWidestringWrapper.h; sourceTree = ""; }; + DCA41822F3659F65C03D6B0D418F612B /* TxTexCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxTexCache.cpp; sourceTree = ""; }; + DCA611BC3AFEC2780F5ED5167FEFBACF /* ftbdf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbdf.h; sourceTree = ""; }; + DCB3B443E61EDD2CC071DAE04B2C1F0C /* NstBoardCnePsb.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCnePsb.hpp; sourceTree = ""; }; + DCBEFF02673A4D0CD9185C6100D7E963 /* NstTracker.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTracker.hpp; sourceTree = ""; }; + DD5EE72E5D4DEF927BEEE94D86725DC0 /* saves.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = saves.h; sourceTree = ""; }; + DD6C840F168CC0216273566943F214F5 /* NoiseTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NoiseTexture.cpp; sourceTree = ""; }; + DD7C52A8979058368290D45755488F97 /* pngset.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngset.c; sourceTree = ""; }; + DDDBA9705C6D9A716771C1B745289787 /* NstBoardBmc22Games.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc22Games.hpp; sourceTree = ""; }; + DDE3998515C1E572211C2A5EEE7EF068 /* m64p_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_common.h; sourceTree = ""; }; + DE2D5223B53CBDDEEFCC21BFCF9AB205 /* ftsynth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsynth.h; sourceTree = ""; }; + DE7BED3E5E48EB3660BE48EE00FA7AFB /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + DEBCE82463719FE6476D577E1F4423FD /* TeamLogRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamLogRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamLogRoutes.swift; sourceTree = ""; }; + DF48B54B85EDEF813D05CDF5146FBCF7 /* NESDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NESDeltaCore.h; sourceTree = ""; }; + DF6E047B23D9FBAF2DB48EC4B655B82B /* DeleteRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordOperation.swift; sourceTree = ""; }; + DF75CDA06A2F599F32A8F0E05EEF39FA /* controls.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = controls.h; sourceTree = ""; }; + DFD30F6DE5762FE7D5CEA0AFE95ACACB /* mupen64plus.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = mupen64plus.ini; sourceTree = ""; }; + DFD8974B1F72F3E8D3FB1FC240A1ABD1 /* Keyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Keyboard.hpp; sourceTree = ""; }; + DFFBD37FBE84B1A972546ABBEE2067BF /* NstRam.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstRam.hpp; sourceTree = ""; }; + E009A78A05503277A11995657704C090 /* ftrfork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftrfork.h; sourceTree = ""; }; + E042969907A8F89D42D0992DE8D4804B /* NstBoardJalecoJf13.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf13.hpp; sourceTree = ""; }; + E07E6F8E20C9B8DBDB6086A2080574B0 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + E07FCD55ADD3EACB05945CD2DAA45704 /* DisplayWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DisplayWindow.h; sourceTree = ""; }; + E0987B780D382225AE82D80ECA8C0641 /* GTMGatherInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMGatherInputStream.m; path = Source/GTMGatherInputStream.m; sourceTree = ""; }; + E0B30CE96C7B045BFDBA33EE166DBFFB /* NstBoardSxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSxRom.hpp; sourceTree = ""; }; + E0F1902545FB22A0EF0B1A987A6C9D43 /* SMCalloutView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-prefix.pch"; sourceTree = ""; }; + E0F23910DDA9040638B4A63EABA0CE82 /* cart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cart.h; sourceTree = ""; }; + E10172E8D8CCCF9773BF6EA4BEBC7E05 /* ContextSettings.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ContextSettings.hpp; sourceTree = ""; }; + E11C4236342FA8398AE626DB3274772D /* NstCartridgeUnif.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeUnif.hpp; sourceTree = ""; }; + E17A40A5122F984FE431D21753C8CF06 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + E194EEE9A16263CD0FDB5BFF52765777 /* RSTOperationQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTOperationQueue.m; path = Roxas/RSTOperationQueue.m; sourceTree = ""; }; + E1E783A2C239C16F0FB68CDC920FB0A8 /* GBATypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBATypes.h; sourceTree = ""; }; + E21A90A7C4C571865F8859DE15FB6A94 /* cpu_detect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpu_detect.h; sourceTree = ""; }; + E248CA8F99CCB2FEEDCE6967354F7FB4 /* SwiftyDropbox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SwiftyDropbox.h; path = Source/SwiftyDropbox/Shared/Handwritten/SwiftyDropbox.h; sourceTree = ""; }; + E269D644BF08F4B053F036687791157F /* Patch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Patch.h; sourceTree = ""; }; + E296E015D17F062AF04EB6010FF3D61E /* Bundle+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Bundle+Resources.swift"; sourceTree = ""; }; + E2A4BC7BE1DB4773E50DD8B7E967C51D /* NstIoMap.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoMap.hpp; sourceTree = ""; }; + E2BAB81C3D77DEA7A2AE15BE082DFA95 /* DepthBufferToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBufferToRDRAM.h; sourceTree = ""; }; + E303B73D343B4496C9C1319F3E187317 /* hermite_resampler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hermite_resampler.h; sourceTree = ""; }; + E33793CEFFD0F60ECF7785770DBCE9F3 /* NstBoardUnlWorldHero.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlWorldHero.hpp; sourceTree = ""; }; + E350E01066A73585D9DE99D4C11B7C7A /* NstBoardBmc800in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc800in1.hpp; sourceTree = ""; }; + E3A6EC0B470AAD78C4D5550BBDA4A73E /* NstBoardSunsoft2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft2.hpp; sourceTree = ""; }; + E3F52E4EF9D56259B6359336A7D98C0A /* NstBoardBmc9999999in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc9999999in1.hpp; sourceTree = ""; }; + E411C55BF728DAE87580EC144C599C2A /* pngwutil.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwutil.c; sourceTree = ""; }; + E4185D8E6FDFC3750E4E3DCF897B9D2F /* KeyboardGameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardGameController.swift; sourceTree = ""; }; + E43D760A416FD46145902A92E018E58F /* SDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL.h; sourceTree = ""; }; + E44669EDF7D46C5AEA1F287C0BCB9E65 /* Harmony.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Harmony.modulemap; sourceTree = ""; }; + E464A7D70176B62BFF57B34C448A9023 /* opengl_GLInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_GLInfo.h; sourceTree = ""; }; + E474FB45FC3DD9C8E04C72D076AC8DFC /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/ZIPFoundation/Data+Serialization.swift"; sourceTree = ""; }; + E480CACA0E81501CCBB98149C48584AD /* NstBoardAveD1012.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAveD1012.hpp; sourceTree = ""; }; + E4DF6912B7B427759D8C33E248753DBD /* NstHook.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstHook.hpp; sourceTree = ""; }; + E51C90A9B7B35AEE09669310AB15BED0 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + E525D21EBF75A723E18A33533D504F6B /* NstVideoScreen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoScreen.hpp; sourceTree = ""; }; + E57A55642D58F21D06BBD64DEA5CA1DC /* RSTCellContentChangeOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCellContentChangeOperation.m; path = Roxas/RSTCellContentChangeOperation.m; sourceTree = ""; }; + E5A838589A5289E842980290C10BFF17 /* RingBuffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RingBuffer.swift; sourceTree = ""; }; + E5AD860D37EB94791316D63AD7049D43 /* cstdint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cstdint.h; sourceTree = ""; }; + E5B960D0D3388F94E7D3FB7BA36C85C3 /* RSTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTError.h; path = Roxas/RSTError.h; sourceTree = ""; }; + E5E0E7F22F5068FCBB7C8E4EE92F086F /* rdp_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rdp_core.h; sourceTree = ""; }; + E60E75825D0C5BBF73C1EE33565BACBF /* RTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RTree.swift; path = Sources/SQLite/Extensions/RTree.swift; sourceTree = ""; }; + E61D432E6DBF6C5A037F5AD976FAD93C /* SwiftyDropbox-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyDropbox-prefix.pch"; sourceTree = ""; }; + E644A28566DC640498573CF1E665C045 /* DropboxService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxService.swift; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService.swift"; sourceTree = ""; }; + E64DA6F38CE5BF6A1B8B85644BF421A8 /* NstBoardIrem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIrem.hpp; sourceTree = ""; }; + E66CD7AF3945F7CDD842E817ACEA39E8 /* NstVideoFilter2xSaI.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilter2xSaI.hpp; sourceTree = ""; }; + E6A19232BD176F1842FA9413EF58EAFB /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; + E6ECAD64E54D551CAC63388B1E3FBB33 /* ThreadImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadImpl.cpp; sourceTree = ""; }; + E70A7D8AB9B5D506BDFCB3A14DE9ACD8 /* NstBoardNRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNRom.hpp; sourceTree = ""; }; + E721311C13AE68B2699A1D4C03214451 /* txWidestringWrapper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = txWidestringWrapper.cpp; sourceTree = ""; }; + E7774915A9F77830DE8F037188D1A4F7 /* SMCalloutView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SMCalloutView.xcconfig; sourceTree = ""; }; + E79FC4B64B0151C5D97016FE705608F2 /* NstImage.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstImage.hpp; sourceTree = ""; }; + E7BCCABE84D92A4A7AB4A427BB8558AE /* NSManagedObject+Conveniences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Conveniences.swift"; sourceTree = ""; }; + E7C1D17194F0A8C85CD8A755AC2B8670 /* opengl_BufferedDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_BufferedDrawer.cpp; sourceTree = ""; }; + E7CFE992FA2A4ABDEAADC452BA0C39D5 /* SNESDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SNESDeltaCore-dummy.m"; sourceTree = ""; }; + E82E5BAA08ADC037E1F7765FE77042C5 /* ftmac.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmac.h; sourceTree = ""; }; + E8E60A18A1E9B1D77A5D5CAA1444A18D /* GoogleToolboxForMac-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleToolboxForMac-dummy.m"; sourceTree = ""; }; + E8F9CE0B18CCD8E71B4B5EDEB0D0C864 /* Log_ios.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = Log_ios.mm; sourceTree = ""; }; + E936FF10A7FD12B81B6130E8D750F73A /* GlResource.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GlResource.hpp; sourceTree = ""; }; + E94066EEBFDC68DAC8ABD344BE20C393 /* NstLog.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstLog.hpp; sourceTree = ""; }; + E988413B416CBB252A2093E604B1CBEA /* glsl_ShaderStorage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_ShaderStorage.cpp; sourceTree = ""; }; + E9B2829EE8FD1B61E4880C2DDA961706 /* opengl_BufferedDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_BufferedDrawer.h; sourceTree = ""; }; + E9B7E1EDF3E36A1AE901C6599B744E37 /* ftmemory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmemory.h; sourceTree = ""; }; + EA340C7B4D3388A8450F9A24994AB881 /* TxDbg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxDbg.h; sourceTree = ""; }; + EA7EC2EE415DCFBE44F9DBD4F92DB34E /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/ZIPFoundation/Archive.swift; sourceTree = ""; }; + EACB3541C7C31D9C894C73A0F43BCD38 /* RenderWindow.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderWindow.hpp; sourceTree = ""; }; + EAD0D53A51B076CD685814AD012D9855 /* NstIoLine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoLine.hpp; sourceTree = ""; }; + EB023C27C2E7EBAB1EBA4B6CE2CB82B8 /* NstBoardDxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDxRom.hpp; sourceTree = ""; }; + EB1C41ECAFCB4B62AC6DB322A26DDBCB /* display.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = display.h; sourceTree = ""; }; + EB1DC75CE747381BA8AA66BC31541BCF /* ImmediatePanGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ImmediatePanGestureRecognizer.swift; sourceTree = ""; }; + EB24131FB6C69C2CA2374DF4C6A91A71 /* NstBoardBtl2708.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtl2708.hpp; sourceTree = ""; }; + EB8457DAFF531CDDEB4D1854B8B8BDD0 /* Vertex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Vertex.hpp; sourceTree = ""; }; + EB9627220FFF83CC1F4AAE5DCC667ADD /* MemoryStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MemoryStatus.h; sourceTree = ""; }; + EBA62E018BD55A8B1DBF638C1BDE2C3B /* types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; + EBB1A01E856D7D91BD846C278311FFB7 /* NstInpPad.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPad.hpp; sourceTree = ""; }; + EBCC2D85473B037A5DD49F1E35B5D218 /* ftadvanc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftadvanc.h; sourceTree = ""; }; + EBF793539672A386F6C337B8667AE813 /* F5Indi_Naboo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F5Indi_Naboo.cpp; sourceTree = ""; }; + EBFB410CFC7528D974AC5C39C85ED086 /* SNESDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESDeltaCore.h; sourceTree = ""; }; + EC16A6C9E22D1924AE516F38A6DBFE58 /* instr_counters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instr_counters.h; sourceTree = ""; }; + EC23CE2DB6C5AA34154506F2401B1F8B /* Result+Drive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Drive.swift"; sourceTree = ""; }; + EC65A0F4796E627B80569AAB463DCD61 /* NstBoardBtlSmb2b.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2b.hpp; sourceTree = ""; }; + EC91456BE16B5A70B8034583667C1DB2 /* NstBoardUnlCc21.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlCc21.hpp; sourceTree = ""; }; + EC9DD621FC3DC24A24E27BD8B1C292AE /* ThumbstickInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ThumbstickInputView.swift; sourceTree = ""; }; + ECAA6C5363B0FC690064E077812D9EF0 /* Version+Revision.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Revision.swift"; sourceTree = ""; }; + ECD06B0653616CEE4A2EAB78B71D5A06 /* UIView+AnimatedHide.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+AnimatedHide.m"; path = "Roxas/UIView+AnimatedHide.m"; sourceTree = ""; }; + ECDCC3E94D5101F61796B3E89290013D /* Result+Success.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Success.swift"; sourceTree = ""; }; + ED04A2B8DBDC30DD89B8DB99DD186974 /* sdd1emu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdd1emu.h; sourceTree = ""; }; + ED22F3BA7E83E1DC36113EFA2D24588C /* FileManager+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIP.swift"; path = "Sources/ZIPFoundation/FileManager+ZIP.swift"; sourceTree = ""; }; + ED768209E20E3298713767938BD05B35 /* NstApiCheats.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiCheats.hpp; sourceTree = ""; }; + ED84FF00BB1C75891DB73E5EC2DC19CC /* ringbuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = ""; }; + EDC16124014E8BE9A723398676F8E95D /* vidext_sdl2_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vidext_sdl2_compat.h; sourceTree = ""; }; + EDCD39BFA98723F034DF29BDED0067EC /* NstBoardSunsoft4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft4.hpp; sourceTree = ""; }; + EDF739733FCF6284240B795ECD2EFFB3 /* Graphics.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Graphics.hpp; sourceTree = ""; }; + EE3F927B7F58D93B1C98460B28559AE7 /* NstBoardNtdec.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNtdec.hpp; sourceTree = ""; }; + EE4444EAFD33EB8BAB4FCBCD65A8446A /* language.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = language.h; sourceTree = ""; }; + EE47B1882C5096303AD365307905B712 /* Ftp.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Ftp.hpp; sourceTree = ""; }; + EE4ED05DEFBED1E0F613E2EEE0E8500C /* retro_common_api.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_common_api.h; sourceTree = ""; }; + EE739F4111402555B8330C94DC934B22 /* NstInpCrazyClimber.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpCrazyClimber.hpp; sourceTree = ""; }; + EF589F6EBD2EE6D830CD99CA788543A7 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + EF6779B78D5B9B6019F29579F2C1C894 /* FIFOSamplePipe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFOSamplePipe.h; sourceTree = ""; }; + EF96AD8DFCE6CD9FF8E28E8AED9E829B /* PngFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PngFile.h; sourceTree = ""; }; + F01F27F2E59C49CFECBCF50045F0021C /* TextureFilters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters.h; sourceTree = ""; }; + F0220951E1C5853626F63AA3472A9F71 /* GBAGfx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAGfx.h; sourceTree = ""; }; + F0EF51BD6A873328F443F48E06B74BF8 /* DownloadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordsOperation.swift; sourceTree = ""; }; + F10F7750064142DE73F6F7454CC2983E /* GTMSessionFetcherLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherLogging.m; path = Source/GTMSessionFetcherLogging.m; sourceTree = ""; }; + F11F1CCE5B53125548AF2C84DC90CF96 /* NstBoardBmcPowerjoy84in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcPowerjoy84in1.hpp; sourceTree = ""; }; + F12EC1D77781095125E901DEFF622F36 /* FileProperties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileProperties.swift; path = Source/SwiftyDropbox/Shared/Generated/FileProperties.swift; sourceTree = ""; }; + F1313708F536AEEAB3F8FE444AACB097 /* NESDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NESDeltaCore-prefix.pch"; sourceTree = ""; }; + F1420029FD3C40F200795462E463C362 /* RSTOperationQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperationQueue.h; path = Roxas/RSTOperationQueue.h; sourceTree = ""; }; + F14770DFA2F0FBE712A351494EC459C7 /* GBI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBI.h; sourceTree = ""; }; + F14AE82C6F3F1E53A7B148B891178E59 /* ftstroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftstroke.h; sourceTree = ""; }; + F17010739364C5C3A5C00A7849EDF47C /* ring_buffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ring_buffer.h; sourceTree = ""; }; + F1B217B4E1DE3906B3076571296DFF09 /* snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = snapshot.h; sourceTree = ""; }; + F1ED211A27FC73A088DC43D3FF931A16 /* ThreadLocalPtr.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocalPtr.hpp; sourceTree = ""; }; + F203A19460529D13E8FCE2A540485658 /* rsp_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rsp_core.h; sourceTree = ""; }; + F2087F209824BFEA65167BC5408CF95A /* GTMNSDictionary+URLArguments.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMNSDictionary+URLArguments.h"; path = "Foundation/GTMNSDictionary+URLArguments.h"; sourceTree = ""; }; + F2257CE5C9B676C063600BAA94CA562D /* glsl_CombinerInputs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerInputs.h; sourceTree = ""; }; + F27A0FAE014100246C0E1DAC5E1E38DF /* NSManagedObjectContext+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Harmony.swift"; sourceTree = ""; }; + F2AB56328583FAAF95D7D3FFD81FEB33 /* NDSSystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NDSSystem.h; sourceTree = ""; }; + F2AC6B33D1F207C23351293A0A281146 /* DBChunkInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBChunkInputStream.m; path = Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.m; sourceTree = ""; }; + F2C2DADC78B40086474AB8DAA997C070 /* tttypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tttypes.h; sourceTree = ""; }; + F30187F95C53F4957E71ED8DDDC23CC3 /* Audio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Audio.hpp; sourceTree = ""; }; + F31355AD8ECDC7A336C4AC45A5CD2FDE /* libco.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libco.h; sourceTree = ""; }; + F33297D97FD3A5157D3125AA0D30D1CC /* svprop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svprop.h; sourceTree = ""; }; + F35BDFB9D3E727256E9CD866CDA4B105 /* NstBoardNamcot34xx.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot34xx.hpp; sourceTree = ""; }; + F381603DE2011262E9A2C37926028861 /* Pods-Delta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.release.xcconfig"; sourceTree = ""; }; + F3AAD7F4A60C4A7E5B5877476953BA04 /* RSTTintedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTTintedImageView.h; path = Roxas/RSTTintedImageView.h; sourceTree = ""; }; + F40644EDA82AEFA7C2C89C6CBC2D581C /* glsl_CombinerProgramImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramImpl.cpp; sourceTree = ""; }; + F40E721AC96D7B1BD5F1609F94C46FB1 /* FilePropertiesRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilePropertiesRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/FilePropertiesRoutes.swift; sourceTree = ""; }; + F43AF02D4A3D45AB4C91449083C04623 /* retro_dirent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_dirent.h; sourceTree = ""; }; + F458848778BD2CA388B2DC820968AECB /* GBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GBC.swift; sourceTree = ""; }; + F48A69F12EAD2BE3BAAF57DC1FBC2F40 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + F4CE4627B8A26D8EBCF531C808BA677F /* DropboxClientsManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxClientsManager.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxClientsManager.swift; sourceTree = ""; }; + F4E0870820E6458DC946E91A74E0DB8E /* NstBoardWaixingFfv.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingFfv.hpp; sourceTree = ""; }; + F4FF030A171DC28CB5454BA2D75DDCDA /* F5Rogue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F5Rogue.h; sourceTree = ""; }; + F506F9CB88905A0006F9CBDBB8EBCA31 /* NstInpOekaKidsTablet.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpOekaKidsTablet.hpp; sourceTree = ""; }; + F53A98CDF1BC90A1B45D603F7DC3BC7F /* UsersCommon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UsersCommon.swift; path = Source/SwiftyDropbox/Shared/Generated/UsersCommon.swift; sourceTree = ""; }; + F571DFD58990674E824384F544CF9CD1 /* SNESTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESTypes.h; sourceTree = ""; }; + F57889A91C00957E173557D366708F01 /* AAFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AAFilter.h; sourceTree = ""; }; + F586E6135CA6E3F0C67A2EAE0344D88F /* ThreadLocal.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocal.hpp; sourceTree = ""; }; + F590A4FDC0A63C530D1734FD50B7078E /* skipsched.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = skipsched.h; sourceTree = ""; }; + F5CBD60FC0FF5C423C847C962880F76C /* agbprint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = agbprint.h; sourceTree = ""; }; + F5FA45A44C42CC2CA3A324A3E914CE19 /* libSQLite.swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSQLite.swift.a; path = libSQLite.swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; + F62AC62ED831B8389E68C8BC69676157 /* NSError+LocalizedFailureDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSError+LocalizedFailureDescription.swift"; sourceTree = ""; }; + F67940E7C50D7A614B939AD60E078097 /* NstNsf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstNsf.hpp; sourceTree = ""; }; + F6A4D024EFBD821E10B8C4249832F774 /* NstBoardTaitoTc0190fmc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoTc0190fmc.hpp; sourceTree = ""; }; + F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SNESDeltaCore.xcconfig; sourceTree = ""; }; + F6C874D560C2ECE9A78595318F449292 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; + F6D110BCE90D1CF941FD0145CBB7DD6C /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; + F7095B17BD490C5C3C946BF5CE387A22 /* audio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = audio.c; sourceTree = ""; }; + F712A25B70E2BECE91A60F3F2CDBC6D6 /* NstBoardBmcHero.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcHero.hpp; sourceTree = ""; }; + F714A4D1AA8175D9A02FDB1EB0AC9E0B /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + F76D8AFD80E7A4DAACF521163CC4B26C /* driver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = driver.h; sourceTree = ""; }; + F76E3967E1E2834EA49B2FFB6117AEEB /* RSTTintedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTTintedImageView.m; path = Roxas/RSTTintedImageView.m; sourceTree = ""; }; + F76EE1EB3D0BD20599E9210AA395F4F5 /* NstBoardUnlN625092.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlN625092.hpp; sourceTree = ""; }; + F774B85B1C91BBD1B28A7FDAEE5812F6 /* NstBoardSunsoft.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft.hpp; sourceTree = ""; }; + F779EEE5715D3C32E844758058351CE8 /* GameControllerInputMapping.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerInputMapping.swift; sourceTree = ""; }; + F77EA33E6AF316AA6F7640C7E3F3D1D4 /* gambatte.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gambatte.h; sourceTree = ""; }; + F7C47011115A00E9556AC311099987E7 /* GTMMethodCheck.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMMethodCheck.h; path = DebugUtils/GTMMethodCheck.h; sourceTree = ""; }; + F7DA08D829FA42A2C69604D3B70D3967 /* ttunpat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ttunpat.h; sourceTree = ""; }; + F7E8CC2CC4A372DB06C3A4DDF7BD00C2 /* RSTHasher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTHasher.m; path = Roxas/RSTHasher.m; sourceTree = ""; }; + F81D2A992DCD611FF9C080137C990E31 /* NstBoardBmc15in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc15in1.hpp; sourceTree = ""; }; + F832E6227B7F9677B7AF38BFB58A5A09 /* TextureFilters_lq2x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_lq2x.h; sourceTree = ""; }; + F84345A499EAE58FE864424329CC0465 /* N64DeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-umbrella.h"; sourceTree = ""; }; + F88461BA4787937B3DB690FE3C4F6561 /* controller_input_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = controller_input_backend.h; sourceTree = ""; }; + F88BB2DC2D2059BC24702E5033B1FA18 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; + F8D137604EE39A80F050CC3248514E8F /* opengl_CachedFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_CachedFunctions.h; sourceTree = ""; }; + F92CC3DB4FB3E1C8CB02FF550968E5DD /* fxinst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxinst.h; sourceTree = ""; }; + F93477FBF1E4488E506F9BB79AF57D38 /* libDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libDeltaCore.a; path = libDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; + F94939473F3DAB308B9B66A4722AEA61 /* ftmm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmm.h; sourceTree = ""; }; + F96385E0EAB3EFE69A0C198645BE3F02 /* CircleShape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CircleShape.hpp; sourceTree = ""; }; + F97E0802AC94B24B1FB03E55CD9A2FAC /* GTLRRuntimeCommon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRRuntimeCommon.h; path = Source/Objects/GTLRRuntimeCommon.h; sourceTree = ""; }; + F97F1DFA4F57F5E203007254CF9BE0A9 /* svotval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svotval.h; sourceTree = ""; }; + F9A3509FC2D34122712EB62CE66B6845 /* JSONDecoder+ManagedObjectContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoder+ManagedObjectContext.swift"; sourceTree = ""; }; + F9CBFEF3D09E24FAC21E3A14CCC923AF /* NstBoardBmcGolden190in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGolden190in1.hpp; sourceTree = ""; }; + F9D42A4393C5EA5D2C2E7F5B2D175FE0 /* GTLRBatchResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRBatchResult.m; path = Source/Objects/GTLRBatchResult.m; sourceTree = ""; }; + F9F5190AC3B7EA2777CF3CE3A3E7986B /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + FA12B422FB3250E2E3FF60847D9714BB /* eventloop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = eventloop.h; sourceTree = ""; }; + FA1B820118906800A592F7AEC27C0DFF /* NstBoardBmc21in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc21in1.hpp; sourceTree = ""; }; + FA255603CDB62A95F35F477E2F0D208F /* plugin_delta.c */ = {isa = PBXFileReference; includeInIndex = 1; path = plugin_delta.c; sourceTree = ""; }; + FA400832D3E46B39D5EC83D09A7572FC /* libSNESDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSNESDeltaCore.a; path = libSNESDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FA6F6DCD09DADEC4F87458FB70013D1B /* NstBoardSachenSa0037.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa0037.hpp; sourceTree = ""; }; + FA7FE2BBE843B46F88B62F9D98574BCC /* libretro_vulkan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libretro_vulkan.h; sourceTree = ""; }; + FAABB4AF34B608AA851191DA7195AC03 /* NstBoardUnlEdu2000.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlEdu2000.hpp; sourceTree = ""; }; + FAC73A05080E7163BE6F8E9426032C82 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; + FAE71BC8FD40F93BEB90C2ED42088A99 /* Shape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Shape.hpp; sourceTree = ""; }; + FB0C2D29320490068714E3A307C890F3 /* GBASoundDriver.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBASoundDriver.mm; sourceTree = ""; }; + FB1549464F3E4C6E80951115BA80C87C /* SwiftyDropbox-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyDropbox-dummy.m"; sourceTree = ""; }; + FB1AC80F9908EC458F2880C5D2B25C33 /* SQLiteObjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLiteObjc.h; path = Sources/SQLiteObjc/include/SQLiteObjc.h; sourceTree = ""; }; + FB49300C86877DD38ED8922A53CA96E1 /* pngconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngconf.h; sourceTree = ""; }; + FB4B3A1CE88E9FF6475854D98A52A5DD /* DeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DeltaCore.h; path = DeltaCore/DeltaCore.h; sourceTree = ""; }; + FB78D889B9AEF0455BFA9A0731B00CE4 /* wst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wst.h; sourceTree = ""; }; + FB9C709F559518962C652F5BBA13E865 /* DropboxService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Versions.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Versions.swift"; sourceTree = ""; }; + FBB4322FF7B456423D12A82C9A36F624 /* UICollectionViewCell+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+CellContent.h"; path = "Roxas/UICollectionViewCell+CellContent.h"; sourceTree = ""; }; + FBEB0C887336CD9006A57A0852F915DA /* Operation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Operation.swift; sourceTree = ""; }; + FC141D48A65D77B26B9922807BD281CC /* GTMDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = ""; }; + FC1899B3A2064A321C87961972F926A9 /* Ext_TxFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Ext_TxFilter.h; sourceTree = ""; }; + FC1CF3E36F8504F4DCC758CF61B97CAE /* InputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = InputStream.hpp; sourceTree = ""; }; + FC1E9CD449F2D3C5D045DFEBF6BBE3C2 /* NstBoardExRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardExRom.hpp; sourceTree = ""; }; + FC781DAF311B76B2BBAA2DDD268A94CD /* MMU_timing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MMU_timing.h; sourceTree = ""; }; + FC91AA5FEFEE911BEE1FE8CBF90DC619 /* NstVideoFilterHqX.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterHqX.hpp; sourceTree = ""; }; + FCC13C918B0DF97D6202A60A3DC17CF5 /* FileInputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FileInputStream.hpp; sourceTree = ""; }; + FCED81571811A98DF752E236C102EB15 /* RSTHasher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTHasher.h; path = Roxas/RSTHasher.h; sourceTree = ""; }; + FD519882861480B93B563B477CE1FA29 /* libGoogleAPIClientForREST.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGoogleAPIClientForREST.a; path = libGoogleAPIClientForREST.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FD58112E62968E573B43DA1A9C5C1212 /* GBATypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBATypes.m; sourceTree = ""; }; + FD9C5507CE8EEB9255EC26821F186A30 /* Account.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; + FDCE262FF472DECC637657F3849A293C /* Err.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Err.hpp; sourceTree = ""; }; + FDD8C2628C20169F27F847F6618B2626 /* NstBoardBmcSuper24in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper24in1.hpp; sourceTree = ""; }; + FDDAF9CF6EC0B13BC80E76560EA70449 /* N64DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-prefix.pch"; sourceTree = ""; }; + FDEA401B77A227622E55445028991383 /* StoneSerializers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoneSerializers.swift; path = Source/SwiftyDropbox/Shared/Generated/StoneSerializers.swift; sourceTree = ""; }; + FDF77E5F8A0CCA93C17ABAB60C658334 /* RSTCellContentChangeOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentChangeOperation.h; path = Roxas/RSTCellContentChangeOperation.h; sourceTree = ""; }; + FE0B56AC8DF03F3940CB2C0117DF20DA /* NstBoardUxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUxRom.hpp; sourceTree = ""; }; + FE0C4019F40D94124274D599DD260980 /* N64EmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64EmulatorBridge.h; sourceTree = ""; }; + FE17B4BADFE9DF6A6CCAF0CF0BE25D9F /* ControllerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerView.swift; sourceTree = ""; }; + FE1983B3232B47585D4F61AB506D3B3A /* NstBoardJxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJxRom.hpp; sourceTree = ""; }; + FE29186D1D3230A6DE7D814702F201F5 /* NESDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NESDeltaCore.modulemap; sourceTree = ""; }; + FE45DB19ABFD58A4D2DCCB58292ABED4 /* NstBoardTxcMxmdhtwo.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcMxmdhtwo.hpp; sourceTree = ""; }; + FE62BC22E0353D209B86497B9841EB46 /* System.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = ""; }; + FEA0ACC910F13E9D6B8C51CFE1B8EDA4 /* DeltaTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DeltaTypes.m; path = DeltaCore/DeltaTypes.m; sourceTree = ""; }; + FEF7570E80D78FE6F43CCD5722434683 /* WindowStyle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = WindowStyle.hpp; sourceTree = ""; }; + FF46137EDAAC9DD905A8E9D0602099DB /* dsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dsp.h; sourceTree = ""; }; + FF74B4BEF4D07BBAE9D9AEC6720AA7C7 /* assemble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble.h; sourceTree = ""; }; + FFEC014D2C956093FFE28CD534E23741 /* RSTPersistentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTPersistentContainer.h; path = Roxas/RSTPersistentContainer.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 419D9D681198F68F96BB6F6F8FD0D0F7 /* Frameworks */ = { + 07C7603FFA3CB8DF7695C09A4C85DE4B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4994361C923A5B9F90D18D6E2C7FCDEF /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 739E50E70B623A4D6E9A497F0C01D7F1 /* Frameworks */ = { + 0D403F6F212C3D655B9A70C9D2551C79 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5F90E8A1BB53CB8873E1962EC30D624A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 9A28C74DB547A24288CB7244DA4FEC52 /* Frameworks */ = { + 146604F1821D76536A3CC1FC7D040951 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D0B89D88FE76BA633C9118D27743655B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F8A6F15E21820129A073629CC50E7BE4 /* Frameworks */ = { + 1DCD7F8F7581F31788ECAD25138905A4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 22B7FCDD48BED28401E2F89A4A67D4CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 22F413AD72240277D7C1F3120BEB443B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 23BFD53FB74C2D9008C7D74FD0FF2D74 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2652C9DCA5C838F589EFE0FAE3D29D52 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 373FAF5E443D6679532ACC75D39A2A05 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 42396456A9083658104D12DBC34770AB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 48D215C02B17AE962C42A70069BFED0A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 55CD572E462904EA6C9905761349C14C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 596D3A8F72E091C80C6C4F87844EE108 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5FB72F5600AF73B0454B5151D88A68DB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7493E42190EBEAA740FD633B30B8DE50 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7977E736686E6BD8D5950FF88E59C5CC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 83E6F56551D35482FE1861B7C021F61A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 872C104A3266050144437694E83876B9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9CAF962C35143C3C448834A59B6C38DC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B749125D00AA53AC590C457612F02E05 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C1608A30FBDD138D56002A758CDFCD18 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CF750F951B5921983AC422A1B8D08E64 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D17DE93F464412385D2ACD2C66FC3364 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EAFD4026EEE499F65B857E3120928703 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EE601DCB1D3B73273138E8A5D7829FF7 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EF237E39B08E32D0B2093CBC24805524 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DA4B92DB27143411B6CDEDE6364963C8 /* Foundation.framework in Frameworks */, - 931AC92E1957B3DA80862DE257F4A92C /* ImageIO.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0C2CFC3340D7FDC0159FF3AB77950FEF /* Frameworks */ = { + 025C8C08D530FF619B68E7567ECAB514 /* x64 */ = { isa = PBXGroup; children = ( - 9C6511427F0BDDF36A014B01678E1E83 /* Fabric.framework */, + C7361C449C785F93C554BF35D3475E03 /* assem_x64.h */, ); - name = Frameworks; + name = x64; + path = x64; sourceTree = ""; }; - 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { + 03156EC920E6D8F5346B5F3F354FAFAB /* api */ = { isa = PBXGroup; children = ( - 567592256E5D890B6D06F03FEACB36BB /* iOS */, + 9CA88B3A2BBE2EA0112C360B061B10B9 /* audio_out_backend.h */, + 5BACFFAA0E0BD975E90FF29D6B33B0B3 /* clock_backend.h */, + F88461BA4787937B3DB690FE3C4F6561 /* controller_input_backend.h */, + 19CC725F77A1590AFC450371B084F35C /* joybus.h */, + 9CAA385DC1EC815011FECBC1CD5ADF32 /* rumble_backend.h */, + 3993143AF65CD570A58EFF32C95A56FD /* storage_backend.h */, + CF70FBCB7AE2CE5D532C4D3DDF618D72 /* video_capture_backend.c */, + 2ED8DCB8CB080AFAA17D199C268096E6 /* video_capture_backend.h */, ); - name = Frameworks; + name = api; + path = api; sourceTree = ""; }; - 230BB4EC888C7A07E914CA448C4893E1 /* Products */ = { + 0396E6F488E454AEA132CC2941CD243F /* libtests */ = { isa = PBXGroup; children = ( - 40D249D35FEC446C77F6087257E44AA3 /* Pods_Delta.framework */, - 8E4CFA769DF2C67035D7112B1EB6A2FB /* SDWebImage.framework */, - D43DC26599095B79DA3D2798E5BDB349 /* SMCalloutView.framework */, - 2A534C5732905AB6F2146BA7370D2B00 /* SQLite.framework */, + 2B8B19BAF3A73578C62F6DA00164A175 /* pngstest-errors.h */, ); - name = Products; + name = libtests; + path = libtests; sourceTree = ""; }; - 2D4929B07637C41A607B5026C51BFB9A /* standard */ = { + 0440A98D7604CC8535F9CEA5EDA8CF08 /* Support Files */ = { isa = PBXGroup; children = ( - E36131A7B28A4CDC5D30E54C4A98340C /* AggregateFunctions.swift */, - 804D470AF6CF5C32B21B6115DB39EB9E /* Blob.swift */, - ABDF820CF7701781C0725766B21B05C1 /* Coding.swift */, - 32C8ABFC4E4EFE14DB669561D16037A7 /* Collation.swift */, - C44A31645E74B67C3870D27DCBAB4B4A /* Connection.swift */, - 6E589067F42825289B49470E6D03705C /* CoreFunctions.swift */, - 7A6F80F92D848D13B284F46B6AE9E161 /* CustomFunctions.swift */, - BBDE7009E9C907B8005E9EDB941FA865 /* DateAndTimeFunctions.swift */, - CA868F2BDF1D4CEF8EEBE745EA282788 /* Errors.swift */, - 3C2131CE481E7D30B9606151BBF1D729 /* Expression.swift */, - 63387FA3C046A9A94BFDCB460BD4DAA1 /* Foundation.swift */, - 78712328292CDF1D74FAE866EC09998F /* fts3_tokenizer.h */, - DE4E762B2B33A6CD2A03BBA3187CA346 /* FTS4.swift */, - 2B0C7318DD9E2481D970A30CF7F288C2 /* FTS5.swift */, - A79CFD14B8EC38A60D9A612DBC0AA0A1 /* Helpers.swift */, - 6F24049036184F6C48F249A5B6253492 /* Operators.swift */, - B0A4E828FF9A9324654F24314C51196B /* Query.swift */, - 5266E6AC21119A2F6D7CBB2F0531B24B /* RTree.swift */, - 45BCEA050A2002A5A1DE97CA813E551C /* Schema.swift */, - 27F58EC380D65ED2D91C2B3FBB4796A1 /* Setter.swift */, - D60558A06CA44255E97475B59032ACB7 /* SQLite.h */, - 0D184FAE58B12834B5A6C93F074DE049 /* SQLite-Bridging.h */, - D5FB096E1CFB10C892CF7AFB0376E4C1 /* SQLite-Bridging.m */, - F32ED0D241931ED9237B765DF1C4D156 /* Statement.swift */, - B9F0CD725AAC41904CB8013BBA975A5F /* Value.swift */, - ); - name = standard; - sourceTree = ""; - }; - 2DA472C0029A6809A7EA8C1771165F90 /* Fabric */ = { - isa = PBXGroup; - children = ( - 4E100C1072C98BBDD556C71D3A44F1AC /* FABAttributes.h */, - 750348F790A5ACFE008C6E466AB7533E /* Fabric.h */, - 0C2CFC3340D7FDC0159FF3AB77950FEF /* Frameworks */, - 8F6C99C93C05A5C1F1001ABE5C6B137F /* Support Files */, - ); - name = Fabric; - path = Fabric; - sourceTree = ""; - }; - 3B042773D2D8DFA01A0A5A6E9337DB67 /* Crashlytics */ = { - isa = PBXGroup; - children = ( - 6D9722B6572656EDD99F3885FF2CD57B /* ANSCompatibility.h */, - 73A946CFE9CEE3C8B7F693B79355FF25 /* Answers.h */, - 4A667F7211D199491C264ED965473751 /* CLSAttributes.h */, - 5FFC5C409EC4A4E1513C0BB87A38EAF1 /* CLSLogging.h */, - 92B8A15FF702EA833607E1FC956DA373 /* CLSReport.h */, - A3A4320848DE8A3F914C59057575B06B /* CLSStackFrame.h */, - A87D46A616B9992C73055FB45F4414D8 /* Crashlytics.h */, - 94FDB616FC775F022B04414B5B14B5CF /* Frameworks */, - 9C3ED3A91BA870CE556C07AD209E997F /* Support Files */, - ); - name = Crashlytics; - path = Crashlytics; - sourceTree = ""; - }; - 48D3FD1827A4C4F2B9C8FFA216FFF9C8 /* Pods */ = { - isa = PBXGroup; - children = ( - 3B042773D2D8DFA01A0A5A6E9337DB67 /* Crashlytics */, - 2DA472C0029A6809A7EA8C1771165F90 /* Fabric */, - 848165112A1034451BF007B9F688591E /* SDWebImage */, - D5CA256C4E2D61D7F906DC33F4113994 /* SMCalloutView */, - A9629B79CC2703CA0F368EB6BC2E25E8 /* SQLite.swift */, - ); - name = Pods; - sourceTree = ""; - }; - 4E01B6DAD2FD09D65D0614CAB2B0E91C /* Support Files */ = { - isa = PBXGroup; - children = ( - 3C50EF6865D44DC9803F1FBBDF61EF95 /* SMCalloutView.modulemap */, - 96915379C814B2C0DFB3A4D10F393265 /* SMCalloutView.xcconfig */, - E317305046E9C38872BF4020ECF951BB /* SMCalloutView-dummy.m */, - 213FDF57FB610B0D58B20D5B862589FC /* SMCalloutView-Info.plist */, - E0FFD0D2B0EC1A45DD6D788B8678AFB8 /* SMCalloutView-prefix.pch */, - 1D417D1C8F981BDBD3BCD1129B317885 /* SMCalloutView-umbrella.h */, + A2319DE32527E564C37C8B426E810445 /* GTMSessionFetcher.modulemap */, + C268076A13ECC0F130B5A406C2A1E22A /* GTMSessionFetcher.xcconfig */, + 7C1089BC73E36C74AEF372EEED122EFC /* GTMSessionFetcher-dummy.m */, + 71BB6834A4E68AEDDD4B95D4E80B0672 /* GTMSessionFetcher-prefix.pch */, + AE8DDA1C621BC7547ED906A580F98278 /* GTMSessionFetcher-umbrella.h */, ); name = "Support Files"; - path = "../Target Support Files/SMCalloutView"; + path = "../Target Support Files/GTMSessionFetcher"; sourceTree = ""; }; - 54D6B9E52CEBD2148C1CD6D54F362DAE /* Core */ = { + 047498B4224A2C3DF5E40D05044F721F /* mupen64plus-rsp-hle */ = { isa = PBXGroup; children = ( - AAE2B2A62478F0A6165ED3BD869757E4 /* NSData+ImageContentType.h */, - 0042FABF23BCC8AE231804A1B58905D7 /* NSData+ImageContentType.m */, - 16AD8BE137CF5134F1F9CAECAB092D0F /* SDImageCache.h */, - E3CC277ADB47A258CD123C81061A3F82 /* SDImageCache.m */, - 9B4F3B733E1F34DA5AE98B7AE0A5C0CA /* SDWebImageCompat.h */, - 67D7D685D444F51160997382A18CB2F6 /* SDWebImageCompat.m */, - 832E61F68FD6639801EFD03761EECDC8 /* SDWebImageDecoder.h */, - 80BB2EF0C80BBC568430946BC608BE98 /* SDWebImageDecoder.m */, - 7A90710E9C9E2359B7A1AD689E8B574E /* SDWebImageDownloader.h */, - 28E53C4E2B859FB0F3AB41F90491442F /* SDWebImageDownloader.m */, - 25C681FF70FBDB38BE4E9985932A2DDB /* SDWebImageDownloaderOperation.h */, - ADD80AE795FC81A782FE8DF14BEE1006 /* SDWebImageDownloaderOperation.m */, - 404106DFFE34F8AC16769E44E010CD98 /* SDWebImageManager.h */, - 6022E5A2546035435A6CA0B77B4E913C /* SDWebImageManager.m */, - BAA1FFF25683E18EB2DB3BC2E1B1E2D8 /* SDWebImageOperation.h */, - 23CCE08242B847BF937E45411C0C8BC2 /* SDWebImagePrefetcher.h */, - 9BB0462F6701B4A3E0EC06EC6E6DDACE /* SDWebImagePrefetcher.m */, - 7D80B5E10130514F611C2DAC7DBCBF10 /* UIButton+WebCache.h */, - 45A5DD932B003E8A3E43F79488A1713B /* UIButton+WebCache.m */, - FD0DB17A8883C364E5F6167B2E7CD49B /* UIImage+GIF.h */, - E99F1A4CBC84AEAADC101C82C85F5C3C /* UIImage+GIF.m */, - 445CD4935C10B23DF4EA5B3D48921AA9 /* UIImage+MultiFormat.h */, - 3CD9C57AA430063838E3038BED77BD91 /* UIImage+MultiFormat.m */, - 72BB337B59A2CEA23D4961C3F3C0E97A /* UIImageView+HighlightedWebCache.h */, - 6DF20E040393CF0169E55AA7BEF796CC /* UIImageView+HighlightedWebCache.m */, - A4A3514D6C98C4440E6DC5A7534FF3BA /* UIImageView+WebCache.h */, - 36F8B3FFE11DF0BA01F89DDC41EB0FC4 /* UIImageView+WebCache.m */, - 3C32D273940AA5A97C91B8501CE9F723 /* UIView+WebCacheOperation.h */, - 126591F57D0CB50EC78CF33F2CA8BB94 /* UIView+WebCacheOperation.m */, + DF3B22F60265FDA8A0BDFE0524F0C13D /* src */, ); - name = Core; + name = "mupen64plus-rsp-hle"; + path = "mupen64plus-rsp-hle"; sourceTree = ""; }; - 567592256E5D890B6D06F03FEACB36BB /* iOS */ = { + 050D00D7D27F91B40E00BE7757B5529C /* NSDictionary+URLArguments */ = { isa = PBXGroup; children = ( - C9D9C2B1592E09AFC6D5395899C4EE4D /* Foundation.framework */, - F86FAA009AC5B2EAF9CD2080A94DE323 /* ImageIO.framework */, + F2087F209824BFEA65167BC5408CF95A /* GTMNSDictionary+URLArguments.h */, + B178CE5FC4BC30D17B77BB64F1C9D912 /* GTMNSDictionary+URLArguments.m */, ); - name = iOS; + name = "NSDictionary+URLArguments"; sourceTree = ""; }; - 5A3080622DC9D33FB5AB83DE10D88843 /* Support Files */ = { + 05E5AFDEEBC0414DCD46B75C1E7B13F1 /* Rendering */ = { isa = PBXGroup; children = ( - 8287279FDBC1F39F1997993078F4BDE6 /* SDWebImage.modulemap */, - 92205B459C5D65077E421E8C347923B1 /* SDWebImage.xcconfig */, - D7EC9A83D14FFF23FFBF2ADBF3F52BB8 /* SDWebImage-dummy.m */, - 27481C6D357244C4612075512CD4E5D9 /* SDWebImage-Info.plist */, - 747DF5036D5B1AF4BB24A0295D65E8C8 /* SDWebImage-prefix.pch */, - BDD945ABD27497EE0A5D6058440CC256 /* SDWebImage-umbrella.h */, + 5E81E563B519CB275A216BD3E5414DAA /* AudioRendering.swift */, + B3D974A96D201E7E1B93CC578D3AC323 /* VideoRendering.swift */, ); - name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + name = Rendering; + path = Rendering; sourceTree = ""; }; - 5F125C53D247922DCB2E07A2127D1ECC /* Pods-Delta */ = { + 085C87B06F454385CDE8CA11CD18D9EF /* Controller Skin */ = { isa = PBXGroup; children = ( - 2EDA333D943E4E0EB5047909F6CAAB4A /* Pods-Delta.modulemap */, - E64D9057F7D105E0C1B42683231534C9 /* Pods-Delta-acknowledgements.markdown */, - 7873DC018C1572363B53D537E83113CB /* Pods-Delta-acknowledgements.plist */, - 5B6AA374D927B81DEA0F30AA86930BDC /* Pods-Delta-dummy.m */, - E45735AA32F181042BFB2D785A40244C /* Pods-Delta-frameworks.sh */, - 75585559E7EF12E47AE046D6D662D5AC /* Pods-Delta-Info.plist */, - F7DE364C1370A88BF43DED80F65EDA9B /* Pods-Delta-umbrella.h */, - 0F228AA98BE5866CFAE0F0D30EB37C40 /* Pods-Delta.debug.xcconfig */, - 55DB860DEB304E65F48A399F9CA9E6C8 /* Pods-Delta.release.xcconfig */, + EF589F6EBD2EE6D830CD99CA788543A7 /* Standard.deltaskin */, + ); + name = "Controller Skin"; + path = "GBCDeltaCore/Controller Skin"; + sourceTree = ""; + }; + 08C58CF73AB8BFBF56E0EB8B4D727EE1 /* Pods-Delta */ = { + isa = PBXGroup; + children = ( + AE1179D5EA23BDBED2AEC4F50068090B /* Pods-Delta.modulemap */, + 21D6D1EB35E3D74EDEA3C2CD85A05F52 /* Pods-Delta-acknowledgements.markdown */, + DA78D0D081686B5372F0FFAABDF5733A /* Pods-Delta-acknowledgements.plist */, + 4F8D603EBE941AC871B0A2F47AD5B6D5 /* Pods-Delta-dummy.m */, + 409F0AD5337C7D82401596430BE50AB0 /* Pods-Delta-resources.sh */, + 37221D699E77B16EA4FE6C376B827730 /* Pods-Delta-umbrella.h */, + A34489EBF25913D7D0197EFF7FA146A3 /* Pods-Delta.debug.xcconfig */, + F381603DE2011262E9A2C37926028861 /* Pods-Delta.release.xcconfig */, ); name = "Pods-Delta"; path = "Target Support Files/Pods-Delta"; sourceTree = ""; }; - 7BF43339B951E4F1890BA72593179550 /* Targets Support Files */ = { + 09AD5B7BEEC9BEC81F8C4EC1A23A9BBB /* Support Files */ = { isa = PBXGroup; children = ( - 5F125C53D247922DCB2E07A2127D1ECC /* Pods-Delta */, + 5F5D1223821815A7C2C130C5144F0006 /* N64DeltaCore.modulemap */, + 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */, + 0236ACAAE07BD9A1FA670BDBDADC0D30 /* N64DeltaCore-dummy.m */, + FDDAF9CF6EC0B13BC80E76560EA70449 /* N64DeltaCore-prefix.pch */, + F84345A499EAE58FE864424329CC0465 /* N64DeltaCore-umbrella.h */, + 100C0377584270DDE41906A45ED3FE84 /* ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist */, ); - name = "Targets Support Files"; + name = "Support Files"; + path = "../../Pods/Target Support Files/N64DeltaCore"; sourceTree = ""; }; - 848165112A1034451BF007B9F688591E /* SDWebImage */ = { + 0A5C4548757D4029BFE66F8F2912470E /* Unix */ = { isa = PBXGroup; children = ( - 54D6B9E52CEBD2148C1CD6D54F362DAE /* Core */, - 5A3080622DC9D33FB5AB83DE10D88843 /* Support Files */, + E6ECAD64E54D551CAC63388B1E3FBB33 /* ThreadImpl.cpp */, + 48A397662316360402E0600E571AD262 /* ThreadImpl.hpp */, ); - name = SDWebImage; - path = SDWebImage; + name = Unix; + path = Unix; sourceTree = ""; }; - 8F6C99C93C05A5C1F1001ABE5C6B137F /* Support Files */ = { + 0AA3EE06807AD3A1C73AC30588796437 /* config */ = { isa = PBXGroup; children = ( - 28356B989708A3595DFB32F0319FDA52 /* Fabric.xcconfig */, + 413E31D8C1624AEAC8EE7570F0551194 /* ftconfig.h */, + 77D3B3A913E0D9BC6F044C9D89CB8D96 /* ftheader.h */, + 3451D46815FC1E9C8DD13CA49D2186AF /* ftmodule.h */, + 2A0298053CF49C68092396B42DD55D37 /* ftoption.h */, + 70CFA30438DAE2DBE32611495D872EB6 /* ftstdlib.h */, + ); + name = config; + path = config; + sourceTree = ""; + }; + 0AB0646DD833AD6334AF13552DF365D2 /* plugins_compat */ = { + isa = PBXGroup; + children = ( + 6B2D3B45DE97EE84171CC1A90FD17872 /* plugins_compat.h */, + ); + name = plugins_compat; + path = plugins_compat; + sourceTree = ""; + }; + 0ADE917FC3C2CDD395AFC7E009EF576B /* Core */ = { + isa = PBXGroup; + children = ( + 2ABF32DB7C03DC858879C758E39AAD27 /* GTLRBase64.h */, + C977FFA5FDFB893A5DAB65AE680DA461 /* GTLRBase64.m */, + C88860D669B74A0154AA887269E28475 /* GTLRBatchQuery.h */, + B06418EA2C5657C3621FE94DE245B06B /* GTLRBatchQuery.m */, + 6B555E9059530B6964B3908B22140C42 /* GTLRBatchResult.h */, + F9D42A4393C5EA5D2C2E7F5B2D175FE0 /* GTLRBatchResult.m */, + 01082497DDFB3641F47D167E3C3EB389 /* GTLRDateTime.h */, + 3BA56585EDD13E71C58B7B7C64DDB53C /* GTLRDateTime.m */, + 85B98EACC45CEADA2FC73EB069E37FC7 /* GTLRDefines.h */, + A73E1E700670A66A2AE2A03B799E23EF /* GTLRDuration.h */, + CD370B63C73F83203B239D65A10BF44A /* GTLRDuration.m */, + 83D5738F79EFF74666BE041EC76ACDFA /* GTLRErrorObject.h */, + 68263C62DDF9F51529551BECBBD26620 /* GTLRErrorObject.m */, + 0ABB33F6C316C0D9CF3E24882D926C51 /* GTLRFramework.h */, + 947D4308D4F2D06F37BC4881F1637F48 /* GTLRFramework.m */, + 8A171E0701260ECA35983A32816DB522 /* GTLRObject.h */, + 50BD32E959F332B2734900E76DAB58D2 /* GTLRObject.m */, + 4607BD69102AF97F0A85D6512B3409CD /* GTLRQuery.h */, + 5E64591CCE82CAC6775DAB365A75A8BC /* GTLRQuery.m */, + F97E0802AC94B24B1FB03E55CD9A2FAC /* GTLRRuntimeCommon.h */, + 3DEDD6511A23A74FFB52233C54AB8E03 /* GTLRRuntimeCommon.m */, + 5C1B35A10293013EB1FF554F7BEB76DC /* GTLRService.h */, + D1221EDCBBEDA9035D0C95CAE7F9D52A /* GTLRService.m */, + AE757EB203915A0BFBB4F3FA8E8F9A77 /* GTLRUploadParameters.h */, + D686BB86CE4E75B4F320164A9EC1B404 /* GTLRUploadParameters.m */, + D27C9AEA920B8065DC8FB0F6F92A6E26 /* GTLRURITemplate.h */, + 35A46DA9D7B9942345456BEF6DF7E8D1 /* GTLRURITemplate.m */, + 9A2119D6748E380E5815A3831CA3977A /* GTLRUtilities.h */, + 9209A157558D6C7A57364B029B93BF01 /* GTLRUtilities.m */, + ); + name = Core; + sourceTree = ""; + }; + 0B3144581B79B95A58BB0A6AE3D4DC9F /* Support Files */ = { + isa = PBXGroup; + children = ( + 5EAB88E1F1D57B7D17D40ED0872DB766 /* GoogleSignIn.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/GoogleSignIn"; + sourceTree = ""; + }; + 0BE2BAA0FC86CCF09B884AC5526B1B85 /* Roxas */ = { + isa = PBXGroup; + children = ( + BB54FA85A4EFEF73DED9795E55139B78 /* NSBundle+Extensions.h */, + 1B22B42E3A2ED5293029A56068CA8061 /* NSBundle+Extensions.m */, + 480AE324EBF43D4B5582909423B482B4 /* NSConstraintConflict+Conveniences.h */, + 1EA5F7D97C9AB37E20A715D3398E9330 /* NSConstraintConflict+Conveniences.m */, + 24A1F04C9D66439C073E518F9C2519E1 /* NSFileManager+URLs.h */, + 707293F0FD9EBD1A0C126D2597D63C1E /* NSFileManager+URLs.m */, + CF7ECEAEDCF30C5FD13208AF855EEF47 /* NSLayoutConstraint+Edges.h */, + 80D87DDEE1CB809E00A47151D677F57F /* NSLayoutConstraint+Edges.m */, + 9E418A7738B016688EC222EB837069D0 /* NSPredicate+Search.h */, + BFD0CAB74C45D6B1CA49B94505E8E762 /* NSPredicate+Search.m */, + 620CBB9D49ED951D7497FDB4C115660B /* NSString+Localization.h */, + 21A038DB12C94476C404398950A88C8D /* NSString+Localization.m */, + 44B96F7B857F663A80AED6CFBCED2EE1 /* NSUserDefaults+DynamicProperties.h */, + CABA30017D9761CD2D49BCA9F53E923B /* NSUserDefaults+DynamicProperties.m */, + 6A32869D90E7BAC47B25D2F8E75F7856 /* Roxas.h */, + 5E75AFF4F05B942A1BEDA96CDD1D5F6E /* RSTActivityIndicating.h */, + 33A331134BE85F727CC5CCD89769383E /* RSTArrayDataSource.h */, + 50CB5AEC945198AAFCB4B3596F9CC624 /* RSTArrayDataSource.m */, + 75AB94233F995F253DFE0C50EE6C02A2 /* RSTBlockOperation.h */, + 866D05F9B3FED97151B776FED3394283 /* RSTBlockOperation.m */, + 45E7411B04ED1D693EAE8865EB4AB4A8 /* RSTCellContentCell.h */, + 83C98EC2B9B01038DDBDF79833E8FA12 /* RSTCellContentChange.h */, + AB4067DCD2A73B47C583FB56E3239688 /* RSTCellContentChange.m */, + FDF77E5F8A0CCA93C17ABAB60C658334 /* RSTCellContentChangeOperation.h */, + E57A55642D58F21D06BBD64DEA5CA1DC /* RSTCellContentChangeOperation.m */, + DC3FCFF553A82968D13B5EB86CA60675 /* RSTCellContentDataSource.h */, + C0C395FEF300FE2DAB4AB70FDFBE9A0F /* RSTCellContentDataSource.m */, + 10F4B87C9C8B821D0D8D4EF510CA04D7 /* RSTCellContentDataSource_Subclasses.h */, + 1EDEFED9C09EB37D2B09A2EE84A2BA70 /* RSTCellContentPrefetchingDataSource.h */, + B2549B66FD3CB3110FA065042ED1999F /* RSTCellContentView.h */, + 13D0054F15C9016C2A58C9AD3B1E55E4 /* RSTCollectionViewCell.h */, + 1FCDA1FB74E4C4092E5F8A5BC8289630 /* RSTCollectionViewCell.m */, + 2A046E883CFCEC84A20788D73991DD42 /* RSTCollectionViewGridLayout.h */, + 337EA8CD424B4FAA1210613EA7BEE5FF /* RSTCollectionViewGridLayout.m */, + C1CD631F0A847D6AFABB4216480B7556 /* RSTCompositeDataSource.h */, + 17D76ED9F3E5D01C1E48424DA204220B /* RSTCompositeDataSource.m */, + C7BC48F551C51325F8E971D1377D2A8B /* RSTConstants.h */, + 15D53B5540090674367F2034C42E0C1C /* RSTDefines.h */, + 7BBA8B55E8468DDF3F3DCACBEC6CC1E2 /* RSTDynamicDataSource.h */, + 9EA024415809AA543311AA9FE4454F1E /* RSTDynamicDataSource.m */, + E5B960D0D3388F94E7D3FB7BA36C85C3 /* RSTError.h */, + 43449379BD1A98A6E5C5169A5F74E9AA /* RSTError.m */, + 27AFE501DA9EA6202B3EE72F7468987C /* RSTFetchedResultsDataSource.h */, + 9E69FA508FAFD1015760B7C3395B4805 /* RSTFetchedResultsDataSource.m */, + FCED81571811A98DF752E236C102EB15 /* RSTHasher.h */, + F7E8CC2CC4A372DB06C3A4DDF7BD00C2 /* RSTHasher.m */, + 3D1A093309BA94F1AB20657C257070E2 /* RSTHelperFile.h */, + 142A476F4B29FD9BEA6D18199D4AD340 /* RSTHelperFile.m */, + 2BFEAD74D75F957AC8D29DA74DAD189C /* RSTLaunchViewController.h */, + 2F6D552EFD0D0F0A9F5EEC068432F589 /* RSTLaunchViewController.m */, + 850505914251942B1C511C89AAFFF578 /* RSTLoadOperation.h */, + 453A43AE3933FBE73C478E25DB5E476A /* RSTLoadOperation.m */, + 3B430FF2043C1D359980E0C002B66913 /* RSTNavigationController.h */, + CAE0F839C3C1E4DB9E2519345C397A21 /* RSTNavigationController.m */, + 814013939A450B54B81B83B1EDB7A650 /* RSTNibView.h */, + B02A3AF52CA1E696B30BDE9A844D4D97 /* RSTNibView.m */, + D5F7B6EF99FCD4BF1F3869F8D73FE95B /* RSTOperation.h */, + 7A51C15D398D2803874EB7297A0340BE /* RSTOperation.m */, + BBB89BF0F048332F70DF3BCD3A833DA2 /* RSTOperation_Subclasses.h */, + F1420029FD3C40F200795462E463C362 /* RSTOperationQueue.h */, + E194EEE9A16263CD0FDB5BFF52765777 /* RSTOperationQueue.m */, + FFEC014D2C956093FFE28CD534E23741 /* RSTPersistentContainer.h */, + 0098D6E2E55E4CB590673ABF30CBCFF6 /* RSTPersistentContainer.m */, + 03792829FDEFEBCD237AD95762EF484D /* RSTPlaceholderView.h */, + 37F6886809E07DA8D8DA791B7D5E700D /* RSTPlaceholderView.m */, + 1DF27D7E65CA1A9DC28C57F4FE6BD1B3 /* RSTRelationshipPreservingMergePolicy.h */, + 4DEB79CC55673435872F4AC4127BD0B0 /* RSTRelationshipPreservingMergePolicy.m */, + 03655DDFBA2609D8DEA72FDDF988AD58 /* RSTSearchController.h */, + D6619CB5190C33CD4AF481F84D29F75F /* RSTSearchController.m */, + 9BEE4619527C9F9B1FE35C99D23CC654 /* RSTSeparatorView.h */, + 163295C6CCD961D42E5E5F2EED6E2FD0 /* RSTSeparatorView.m */, + F3AAD7F4A60C4A7E5B5877476953BA04 /* RSTTintedImageView.h */, + F76E3967E1E2834EA49B2FFB6117AEEB /* RSTTintedImageView.m */, + 11CDF3492A5E59C765F2232102DA540C /* RSTToastView.h */, + 9A435B10C22B22C7734A3E5913E53474 /* RSTToastView.m */, + 8DDDB2DB5582729DFD3B142A0841B180 /* UIAlertAction+Actions.h */, + A7351AF200A2FE4130E42D7A321DA075 /* UIAlertAction+Actions.m */, + 678B4D33461C1C6B1A1DAD8189F4BEB2 /* UICollectionView+CellContent.h */, + 790495A40D459F66C420A40CFAFB042D /* UICollectionView+CellContent.m */, + FBB4322FF7B456423D12A82C9A36F624 /* UICollectionViewCell+CellContent.h */, + A706F5A8614DC9AF3A7BAF5EE08D7A37 /* UICollectionViewCell+CellContent.m */, + 57D0C008F4F6ABB93A720C171837F7EA /* UICollectionViewCell+Nibs.h */, + 2312F596695044513C4F58CD3E2960D0 /* UICollectionViewCell+Nibs.m */, + D52092A71CADBC93153EE571AB2672B0 /* UIImage+Manipulation.h */, + CDA1A181F550D672CE3A7A747A0DCB7E /* UIImage+Manipulation.m */, + 22925124C257896E19766BEE921A074A /* UIKit+ActivityIndicating.h */, + 136E40DAC7C29CAC860561C37A54FE9C /* UIKit+ActivityIndicating.m */, + 4E669C711147F6173C46040444135A2D /* UISpringTimingParameters+Conveniences.h */, + 46A7952AAD31367ED9BE353AA63C8C99 /* UISpringTimingParameters+Conveniences.m */, + D6BFD334CCCF9EBCBC3A6ABCF03BF295 /* UITableView+CellContent.h */, + 0C752AF5BCDF4EC788FBE60B79732508 /* UITableView+CellContent.m */, + 4659690ED156FCE3705F0C2B0C5811A4 /* UITableViewCell+CellContent.h */, + D5918BE30019D1A9AFEAA94298952245 /* UITableViewCell+CellContent.m */, + 276B3F3CC31F539687CB5B6AD102438A /* UIView+AnimatedHide.h */, + ECD06B0653616CEE4A2EAB78B71D5A06 /* UIView+AnimatedHide.m */, + 7BFDD39FA42BC2644FD2FC2A33412FFD /* UIViewController+TransitionState.h */, + 400B965700434B3B4E0F9FAC08AD895A /* UIViewController+TransitionState.m */, + E4AE1D2B784C4526230863F51855AD4D /* Pod */, + 7312C81CEF3F2AB59009C8D0DBCA6307 /* Resources */, + 1BD366D5C9BFE407F1BAF1DD14DF14DD /* Support Files */, + ); + name = Roxas; + path = ../External/Roxas; + sourceTree = ""; + }; + 0E57A818B9F9286B7451FBD334254A8E /* Types */ = { + isa = PBXGroup; + children = ( + B47C40F3651700B51A70D5B9000D2FD3 /* N64Types.h */, + 8ECDF285F3E093B02D0B6A530686B0BF /* N64Types.m */, + ); + name = Types; + path = Types; + sourceTree = ""; + }; + 0EFECB3C25EF213B3AF98FD9EDEFAA66 /* mupen64plus-core */ = { + isa = PBXGroup; + children = ( + A32A21E8F7145DAE99E82C2886356FC1 /* subprojects */, + ); + name = "mupen64plus-core"; + path = "mupen64plus-core"; + sourceTree = ""; + }; + 0F893A73178BB4F682C866738A74BFBF /* plugin */ = { + isa = PBXGroup; + children = ( + 770FB112F840EA62E9A6C88008B7C1D7 /* dummy_audio.h */, + 83189ADFB9F73F46FCE23B3CE9012A77 /* dummy_input.h */, + AA0B0C7FCCE7AFC841BEE7048A093B70 /* dummy_rsp.h */, + 17AE63368464F283CA60EB477B2EAC1B /* dummy_video.h */, + D77D2A132FCC17A3824D7EE83B27B431 /* plugin.h */, + ); + name = plugin; + path = plugin; + sourceTree = ""; + }; + 0FE2CA473270D4D1205B3EEFC9ECD797 /* main */ = { + isa = PBXGroup; + children = ( + 28A32492091FA65B2E25F38BDB5EE070 /* cheat.h */, + FA12B422FB3250E2E3FF60847D9714BB /* eventloop.h */, + 8E38F730D5EC5C9EF41311D289592151 /* lirc.h */, + 3ECC067B82E66713A45C44F973FA04EA /* list.h */, + D2F39CB2B6042785A3E5F2C40320DD2C /* main.h */, + 6B121A5474D97495A9D2594CBE9B2C38 /* profile.h */, + 798A8C02C208746867C1899AE83B7EF3 /* rom.h */, + 6A3C6439C7D592FA721C9BF78D5CF6BC /* savestates.h */, + 153DE0DE16595A04ED8966B393EF2468 /* screenshot.h */, + 595E9C1882A362C695C4D22B2193663E /* sdl_key_converter.h */, + 22F22453696F4302900B9871992F9215 /* util.h */, + 763AE2EACA7FF8898176F552273EFF1C /* version.h */, + CBC8A38B9BE9E17E5E15E98583898082 /* workqueue.h */, + ); + name = main; + path = main; + sourceTree = ""; + }; + 104401E321E18AD99134ED58CE50DFAA /* visupng */ = { + isa = PBXGroup; + children = ( + 36E1F6E94EA1CBCCBD240A2819F591AD /* cexcept.h */, + EF96AD8DFCE6CD9FF8E28E8AED9E829B /* PngFile.h */, + 582940D574BD4B0474117DA6BE586566 /* resource.h */, + ); + name = visupng; + path = visupng; + sourceTree = ""; + }; + 10C2CD51180AFA21BD554BBADFAC9630 /* metaspu */ = { + isa = PBXGroup; + children = ( + 0ACF8573E12E7CE6FC8382B1C7A28827 /* metaspu.h */, + 7E6B9B56EA3BE92F4A8798B0D43526B2 /* SndOut.h */, + 78D34056D179147F7BC9585C1F1EF02A /* SoundTouch */, + 764CBED5851C0D2B20C8C32A1379B406 /* win32 */, + ); + name = metaspu; + path = metaspu; + sourceTree = ""; + }; + 10C5A63DFF5B6476CE409931492CA3D0 /* Pods */ = { + isa = PBXGroup; + children = ( + CD560E543AC5643E5375BCCCDA698D91 /* Alamofire */, + CB68C9A1776173E92905B5A26E966B48 /* Crashlytics */, + 2D451E944AAC47528C47C0687234DE60 /* Fabric */, + 87679170C148493B95764D8305DB2180 /* GoogleAPIClientForREST */, + 82A9E1362EC484F9CE92176528B57B01 /* GoogleSignIn */, + DBCCD21D40533FA56554588F209F10D5 /* GoogleToolboxForMac */, + 5E17B37210FA8ADA5462EB3753473933 /* GTMSessionFetcher */, + A1183D7B11EDCF67C21F9C57E6950E26 /* SDWebImage */, + 6F0B83131829471EC8237B841FD21515 /* SMCalloutView */, + 511C6B6CD7CABDDA64B217FB5587D474 /* SQLite.swift */, + EFF9703FCB71789ACC30CF54E93AFA5B /* SwiftyDropbox */, + FACBD0B298A0ABD02B047E1D35541236 /* ZIPFoundation */, + ); + name = Pods; + sourceTree = ""; + }; + 1190BD6F5A77F0F9E5AF42E5A07B4366 /* visualboyadvance-m */ = { + isa = PBXGroup; + children = ( + 37C8E97EA413DC80A7D0F4C499EC79CF /* src */, + ); + name = "visualboyadvance-m"; + path = "visualboyadvance-m"; + sourceTree = ""; + }; + 11AE318CBF1950592491D3ACDEC304CE /* Parent Operations */ = { + isa = PBXGroup; + children = ( + 0883789E4810C71ABF67BD6770636C52 /* BatchRecordOperation.swift */, + 638C5EE8459794EA00003C69343C4289 /* RecordOperation.swift */, + ); + name = "Parent Operations"; + path = "Parent Operations"; + sourceTree = ""; + }; + 13F4C791B31AB8ED0AEC8F876A024121 /* decoder */ = { + isa = PBXGroup; + children = ( + 1CDF0C8D349B858C9D5F6C48C36605C4 /* pngusr.h */, + ); + name = decoder; + path = decoder; + sourceTree = ""; + }; + 143C0F8B6FB554B8F3D7C2A274CC8DE0 /* src */ = { + isa = PBXGroup; + children = ( + BF84BC955CB33F2AF3685A48B39D12AC /* 3DMath.cpp */, + 3283EF596434B1D254E4719AEDDF2B9F /* 3DMath.h */, + 9FF916A03FC9114DF6807EC4AE2F131C /* Combiner.cpp */, + 2D32B6BBDAE1D1E3EAA27A408B03C8A6 /* Combiner.h */, + 9863A0F82AE9292BB81384ECFD45AABF /* CombinerKey.cpp */, + D344F505862E745C78F15C36F91D7325 /* CombinerKey.h */, + 2DB53EA9D410D595711ED5EE029CAC60 /* Config.cpp */, + 618949190C9EE4497D8F00EDA7A856E7 /* Config.h */, + 580B1B5358971578E8D067CD87CCA4EE /* convert.cpp */, + 94D11622874CFF7D4685E506F182E85B /* convert.h */, + 7637F69AFE4440D79912C03BC0E864AE /* CRC.h */, + 75F57C00E99D0261142E905420B1FDA7 /* CRC_OPT.cpp */, + 46026D348B650E6C7D5C37EC52B80A8F /* DebugDump.cpp */, + 485C835BCAC9FE9D2D7A0723CC28AE49 /* DebugDump.h */, + 82C27E6DA6F13A8BFDE148AF1AEB92CD /* Debugger.cpp */, + 06E118D0678F9057E5942E1C06792221 /* Debugger.h */, + D6B56FEC107675FBE484E18FB0578E5F /* DepthBuffer.cpp */, + DBCF759085E40951D39485BB214BB25C /* DepthBuffer.h */, + 0DCFE89D247EB41DF04E4B210CD083F3 /* DisplayLoadProgress.cpp */, + 165095C0F2AC162D9A03CCCE15E06D7A /* DisplayLoadProgress.h */, + 636BCAA16AC311A2A310C344BD9FBCB8 /* DisplayWindow.cpp */, + E07FCD55ADD3EACB05945CD2DAA45704 /* DisplayWindow.h */, + 40C24A38D0B2D424939FBE8FE393A00C /* FrameBuffer.cpp */, + 7D29EE04287C192700BAA7D8E7068B20 /* FrameBuffer.h */, + 5D654A5B901E387BCEA877A4F4B1FC31 /* FrameBufferInfo.cpp */, + 906947FD8A5D4B956AF6B2AB2C50E677 /* FrameBufferInfo.h */, + 9B93E54A61BB91C9C1DB668CB22B8E22 /* FrameBufferInfoAPI.h */, + 482F462D88C4B5F90023E215B10AD635 /* GBI.cpp */, + F14770DFA2F0FBE712A351494EC459C7 /* GBI.h */, + BE5E01263F3833C2C56EBB4B61F7CA32 /* gDP.cpp */, + 34B58BB2F0C3289A22FE5DD2CA130C8D /* gDP.h */, + 0482ED34CE1A01F70FEB8B861E2E8E09 /* GLideN64.cpp */, + 6E65D162B8D927702A508BF68B07EF7D /* GLideN64.h */, + 0553C664A9287732CFEA939623E83E70 /* GraphicsDrawer.cpp */, + 49F843099C865EF969075D9084E1EE49 /* GraphicsDrawer.h */, + 0E9121D9B12531DC426945BA216F72E0 /* gSP.cpp */, + 72E7904615D88779CADD558D3456DD5F /* gSP.h */, + 372F8BF3EFD0B4F1ADF3AB6EDDFDEB86 /* Keys.cpp */, + 133A1237CF59770626D5E03A5FDF58FB /* Keys.h */, + B36363E6798FB6B3F40354BBE7374A01 /* Log.h */, + E8F9CE0B18CCD8E71B4B5EDEB0D0C864 /* Log_ios.mm */, + EB9627220FFF83CC1F4AAE5DCC667ADD /* MemoryStatus.h */, + D30A1BC3FBD53F3033F0C28438BE7BD0 /* N64.cpp */, + 1E9673A8687B4C246AFECBFC5FA4C2C2 /* N64.h */, + DD6C840F168CC0216273566943F214F5 /* NoiseTexture.cpp */, + 6DDEEF3EE5DBC5E579DE48E15CE14565 /* NoiseTexture.h */, + 000CEE30E84D661F89DA9650593A2099 /* PaletteTexture.cpp */, + 359183005A45F4DEB5018AB89576E560 /* PaletteTexture.h */, + AB2E42B839949FC64A2002C5BF39CD4D /* Performance.cpp */, + AF84C91D866F235841A37FBDD3F32FDC /* Performance.h */, + 4BE2E896D06C7357E3D03BBCFA7DAC96 /* Platform.h */, + 5D28BE3E5AFE58F245865607BE7171E8 /* PluginAPI.h */, + 07F929AA3ED898A910A9BC1A1D86B9EA /* PostProcessor.cpp */, + 9C9E1AF02B3EAB5EEF41A090B1D93CA6 /* PostProcessor.h */, + 3FC4C12AAEC24F5791DDF9CF0F417BA0 /* RDP.cpp */, + 8ED616369FCB01DA566D1197932686D0 /* RDP.h */, + CEC07F295EF65A94DD75B4B6F79D0A83 /* Revision.h */, + 0FFC7F34F90AC81DD006C798B7C5936F /* RSP.cpp */, + C2480C7048FB3B86DEDC127B883F6323 /* RSP.h */, + BB26B910FF9586D0BBEEF8B7B3FCC55A /* RSP_LoadMatrix.cpp */, + C5AA082D0701AB3A2B49F4AA865B5021 /* sdl2_compat.h */, + A833E7EBCC4497CD94712AAEB129AFEF /* SoftwareRender.cpp */, + 2BC6C6859EF93F3A711C5AA163C55425 /* SoftwareRender.h */, + B9FB554080990194873F4A54006A5E02 /* TexrectDrawer.cpp */, + 6FD06664B1E05662499252D81EE4BDD5 /* TexrectDrawer.h */, + 8F8EFA2C77C87A2217F6683EB75926B9 /* TextDrawer.h */, + 087B0A1E2A0C286B3F21988E2886E415 /* TextDrawerStub.cpp */, + 9B3F61B1E686EE8232FF7D4423DA7AE5 /* TextureFilterHandler.cpp */, + CFF9DBD50FF109AB529096538EAC3BE3 /* TextureFilterHandler.h */, + 99EC0BF92D7121A56829D9702EB42CAE /* Textures.cpp */, + 3AE64FC0F8676B00CF470337F5C202A9 /* Textures.h */, + B3475FAD5B489B5292E3D459A64A3417 /* Types.h */, + 0C46940B6EC0F54D23A4A771525673E4 /* VI.cpp */, + 3EEBB60E43F6C3B0B541EE72A7C426F9 /* VI.h */, + 719867C7F45388063CEC3252848F288D /* winlnxdefs.h */, + FB78D889B9AEF0455BFA9A0731B00CE4 /* wst.h */, + C1D6EFEC4C64645B1CD5E8A6C7E9C97F /* ZilmarGFX_1_3.h */, + B61F4F596E3EE98C9853A96F05AFA5BD /* ZlutTexture.cpp */, + 469D72AF2CB4C2BC1AEBC6D96997F695 /* ZlutTexture.h */, + 2237D71C322E58F02AED5FF6EC817972 /* BufferCopy */, + 377224A4013DE56D58B13CD8F5DCB672 /* common */, + E9008238CB64036A4BE0ADA65490F1AA /* DepthBufferRender */, + 5B48C5A139E2AF535B4363EC8D3369C2 /* GLideNHQ */, + 3AEBAEFF2CF8E49D6B051634DB4A599D /* GLideNUI */, + 84DF79C3FE14B70A40597DED4FFC8BFB /* Graphics */, + 59F4B66B2826CD0DDB1EB45197BD17E0 /* inc */, + 3ABF8C52D1D6470681859867551BF5CB /* mupenplus */, + 580EBE0D599F965BCD5FEA6B94CC9EB1 /* osal */, + CCF8ECCA8A47403B9790B2173996E8DD /* uCodes */, + CE2B8EBCA8AAE11803FB13F94633A7E6 /* xxHash */, + ); + name = src; + path = src; + sourceTree = ""; + }; + 145E8C7A14549DB8E770BFCD75153494 /* memory */ = { + isa = PBXGroup; + children = ( + 7D467F2C39B4E1301A6A2824147175DE /* memory.h */, + ); + name = memory; + path = memory; + sourceTree = ""; + }; + 17640D3E9C581A1DA4B2DFB2666646C9 /* libpng */ = { + isa = PBXGroup; + children = ( + 0DB5686AC4A3B7C73DBEBCB221B94109 /* png.c */, + 75BC588551AB21D7B8D2F7CEC5387DE8 /* png.h */, + 74B33477F335E1B6177EC8672F22289C /* pngconf.h */, + 0C369537653C1D3D646427D235DA8800 /* pngdebug.h */, + 4875A5F2894B64D59ABA846310074DDD /* pngerror.c */, + 0ECE608D60C05AB0625906E8A6493CB1 /* pngget.c */, + 8844375C652ED43B6CF8305EA32D5488 /* pnginfo.h */, + 06B3B77EA189E0778856F0A800AD3B73 /* pngmem.c */, + 7BBB06A85B5F1D7854ECDB59E80B5B70 /* pngpread.c */, + A882E5AEFB5708D397E1EA06B9F5964C /* pngpriv.h */, + 31C2319F7A8D58BEC41843BD13637729 /* pngread.c */, + AB9A44C4015E688182AFC5CE81179187 /* pngrio.c */, + C46B41859C836F92F71776FC13FD640A /* pngrtran.c */, + AA827D717ECF37F1C8268040AAFBAE46 /* pngrutil.c */, + DD7C52A8979058368290D45755488F97 /* pngset.c */, + 7D8592309610FD7BF2ECC3EF7A2F045F /* pngstruct.h */, + A5D27BA453130BFB47F360AB69AE7A74 /* pngtest.c */, + 086ADF754FD807B796DAED4D2797BAA7 /* pngtrans.c */, + 4AA3FD3271A56236EDAF6E49599021BA /* pngwio.c */, + 74F7F494A747DB09275C9A959DC103CC /* pngwrite.c */, + C73137BF8F38B56D677038CAFECF2A56 /* pngwtran.c */, + E411C55BF728DAE87580EC144C599C2A /* pngwutil.c */, + BEE053A077D5B0152B87C64B9E854C3D /* contrib */, + ); + name = libpng; + path = libpng; + sourceTree = ""; + }; + 18D40F06BD28A8C162D5C5ADE9315294 /* osd */ = { + isa = PBXGroup; + children = ( + 58ADB3F7E23F3C6F3AEB1D5017488FDC /* oglft_c.h */, + 114C1CE8166C1D5EE54BAA6E9086C965 /* osd.h */, + ); + name = osd; + path = osd; + sourceTree = ""; + }; + 195200B355430B200AB0DBC8B4ABC0FE /* Harmony-Drive */ = { + isa = PBXGroup; + children = ( + 8110229A2612B6ADEB790CF3A880D7F8 /* DriveService.swift */, + 2A3C156BDEC9D98DB4C0821812B71351 /* DriveService+Files.swift */, + 00982E0E1F8B1E95963CDA563EA3D799 /* DriveService+Records.swift */, + 8BA47FDD506E39A2EC6B9965BF416961 /* DriveService+Versions.swift */, + D7565F65FCF097E9EA040326E27D0210 /* Extensions */, + ); + name = "Harmony-Drive"; + sourceTree = ""; + }; + 1BCC1AB3348B9592350C28DB2607FA04 /* include */ = { + isa = PBXGroup; + children = ( + F77EA33E6AF316AA6F7640C7E3F3D1D4 /* gambatte.h */, + 14DA14245966E2AC6FF59548E765006C /* gbint.h */, + 2FD0F2986CF92C82ADF825EBEADF3727 /* inputgetter.h */, + 1C5B370D97DA31DD1B20EE2895770F31 /* loadres.h */, + 7C71AA7A6480E27C964B8F797CDFC89B /* pakinfo.h */, + ); + name = include; + path = include; + sourceTree = ""; + }; + 1BD366D5C9BFE407F1BAF1DD14DF14DD /* Support Files */ = { + isa = PBXGroup; + children = ( + 411D37B4E9D47D9CD8974A08B548DE8C /* Roxas.modulemap */, + 1E6A8F6B9B3B7B25C7C87F8B3C7CDE37 /* Roxas.xcconfig */, + 7112AF9DF88E284F7F0D82E3379A2B7D /* Roxas-dummy.m */, + 4A571DDF52B0DE6907D9648064F9C203 /* Roxas-prefix.pch */, + 0A031E1BD1EAC694520C66D56F10F34E /* Roxas-umbrella.h */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/Roxas"; + sourceTree = ""; + }; + 1F87499C4FD451910C5CFDFD3AAA47D7 /* RSP */ = { + isa = PBXGroup; + children = ( + C9CF25A97B140A7A408C88D4E580E637 /* Mupen64Plus */, + 7F5D6DC3FB853BF3A979D7FD9ABC1979 /* N64DeltaCore-RSP */, + ); + name = RSP; + sourceTree = ""; + }; + 20866A2BE0BCA7D1C914AC07CD1C0CE5 /* mupen64plus-core */ = { + isa = PBXGroup; + children = ( + 25071E100A8F997199865EF0AA220F49 /* src */, + 7A56E1DB35E017BCAE6D16398994B424 /* subprojects */, + ); + name = "mupen64plus-core"; + path = "mupen64plus-core"; + sourceTree = ""; + }; + 2237D71C322E58F02AED5FF6EC817972 /* BufferCopy */ = { + isa = PBXGroup; + children = ( + 254168DB44BEBEB68F731713E971B912 /* ColorBufferToRDRAM.cpp */, + 3BBA1A4FC53D2DE892DE2B5AB5226E8B /* ColorBufferToRDRAM.h */, + 35485E76FD48D810C5D7C95E2FD90D64 /* ColorBufferToRDRAMStub.h */, + B4983F070F9A339A50561C5253106964 /* DepthBufferToRDRAM.cpp */, + E2BAB81C3D77DEA7A2AE15BE082DFA95 /* DepthBufferToRDRAM.h */, + 12060A6DBBD12A6E816E1B753273DD7A /* RDRAMtoColorBuffer.cpp */, + C9C3B7DA45835B08897BC091AEF1EEB6 /* RDRAMtoColorBuffer.h */, + CE6C7C0BB4E1D92107DD8D623F8F45E5 /* WriteToRDRAM.h */, + ); + name = BufferCopy; + path = BufferCopy; + sourceTree = ""; + }; + 23D8FA654377883445CD0B0B1A2468DD /* Model */ = { + isa = PBXGroup; + children = ( + 0B149C977427CB869997B3FA4DF71F80 /* GBCCheat.h */, + 03B446FCDA488875B28D8F29A5A054B5 /* GBCCheat.m */, + ); + name = Model; + path = Model; + sourceTree = ""; + }; + 25071E100A8F997199865EF0AA220F49 /* src */ = { + isa = PBXGroup; + children = ( + 464BDB10421F8F548E3FE464860697C4 /* api */, + C78FC44C8B7F1A8AEB30433AD0440A12 /* backends */, + 8DF6E9EDB238B7AEA4F57F5DE0790D80 /* device */, + 0FE2CA473270D4D1205B3EEFC9ECD797 /* main */, + 27B3E72596EE3E0B615CEA5ABD16DBD4 /* osal */, + 18D40F06BD28A8C162D5C5ADE9315294 /* osd */, + 0F893A73178BB4F682C866738A74BFBF /* plugin */, + ); + name = src; + path = src; + sourceTree = ""; + }; + 255F9E88E31CB0CC2B35AAE7E87F8203 /* SNESDeltaCore */ = { + isa = PBXGroup; + children = ( + C718FF2F26B50069B14C6107F86F877B /* SNES.swift */, + EBFB410CFC7528D974AC5C39C85ED086 /* SNESDeltaCore.h */, + B7AF17E48E146E0297BD756594390881 /* Bridge */, + F250106D2FB2610EB9843ED15080AA12 /* Types */, + ); + name = SNESDeltaCore; + path = SNESDeltaCore; + sourceTree = ""; + }; + 27404E771822F8CE1A70EDB526C8D2C8 /* MFi */ = { + isa = PBXGroup; + children = ( + C6794551744F79F117DF19850F503283 /* MFiGameController.swift */, + ); + name = MFi; + path = MFi; + sourceTree = ""; + }; + 2758670028842E564ADF1466623CA744 /* DSDeltaCore */ = { + isa = PBXGroup; + children = ( + 64B255C31BCB0FDD8AB113CF71D128C3 /* DS.swift */, + 8450BA83ACAB8B4A0AF901068ECB6A39 /* Bridge */, + 4C0FD18A12989B7A4F6A75FA2EFE414F /* Types */, + ); + name = DSDeltaCore; + path = DSDeltaCore; + sourceTree = ""; + }; + 27B3E72596EE3E0B615CEA5ABD16DBD4 /* osal */ = { + isa = PBXGroup; + children = ( + 76098B9B168291C93114F349AF883D6F /* dynamiclib.h */, + 269F29EF8D9E4E7D9A20913AFBB84BA9 /* files.h */, + 72FFB39A7A98F30C88D79B8E0A8EAEE5 /* preproc.h */, + ); + name = osal; + path = osal; + sourceTree = ""; + }; + 2AC083D17ED5739B5B211543714C6C2D /* xxhash */ = { + isa = PBXGroup; + children = ( + 926DE74AEC8B4A89CE303E7D15837382 /* xxhash.c */, + ); + name = xxhash; + path = xxhash; + sourceTree = ""; + }; + 2AE3D62272543AE755E38D66B0FE1577 /* Inputs */ = { + isa = PBXGroup; + children = ( + 15D24BE6CA6E45ECB6DCBA6B450424E6 /* GameController.swift */, + 3D27110A6DD067C15FC032BAF9BEE99E /* Input.swift */, + ); + name = Inputs; + path = Inputs; + sourceTree = ""; + }; + 2C5DC4F17D3440F8CFAFB9138AE99311 /* include */ = { + isa = PBXGroup; + children = ( + 7DD54C4B2A034B3E5694E1C6C3916D18 /* freetype.h */, + DB3A0F2D56E5C2399EC70F3417641DDA /* ft2build.h */, + EBCC2D85473B037A5DD49F1E35B5D218 /* ftadvanc.h */, + 4673DE422676A6A6E7634A30B5B9E722 /* ftautoh.h */, + 7D93A1FA4EBA67EA2A7C3149D8776FF0 /* ftbbox.h */, + DCA611BC3AFEC2780F5ED5167FEFBACF /* ftbdf.h */, + 782EAF069DEB44E112D5056BEF8C3DE2 /* ftbitmap.h */, + 5A01843AE7F8A9690F749CE033E441E4 /* ftbzip2.h */, + C8A78AF718D2553FAE9A19AC2F865BA3 /* ftcache.h */, + 5F9A4CA2154481A63B5E58F37EBDA908 /* ftcffdrv.h */, + A71446C1AC97FB34D26841347BA3E583 /* ftchapters.h */, + AA1D49FEC1690DC33D84B0AF284CE88B /* ftcid.h */, + 435368F303983E9CA139C506A1FEDEDB /* fterrdef.h */, + 24ADD77C9E459763B52BB8DD8BA8DE7C /* fterrors.h */, + B87260587307761413DE023873BF047A /* ftgasp.h */, + 75CC5A3EB0061070CE3340A72D9B1240 /* ftglyph.h */, + D2F66324134D7EB7894E23D64D5D292B /* ftgxval.h */, + 63E5FFFBD052DA0F226FA6C644365420 /* ftgzip.h */, + 043B3C37DAA8DA3F93EF9856913625DF /* ftimage.h */, + 2A5D80F4652B7C7C71549D654A6F22B0 /* ftincrem.h */, + 13766CCFB7D97DABE91EFE46F07D098C /* ftlcdfil.h */, + 8A2F89C405DCAF9349F68843D8672A87 /* ftlist.h */, + 89308C156B65EB233E0F8E7B01291775 /* ftlzw.h */, + E82E5BAA08ADC037E1F7765FE77042C5 /* ftmac.h */, + F94939473F3DAB308B9B66A4722AEA61 /* ftmm.h */, + A63610BE12A6654FC18CCA215237F733 /* ftmodapi.h */, + A1054468B8504A0284F550663CC44349 /* ftmoderr.h */, + A57B57432BC4D00AD43EB6687F06197C /* ftotval.h */, + D69B8F7EC4A4B64E7B7E790A6DCF62C4 /* ftoutln.h */, + 5C52587C427298A7375DC3C3DADBC541 /* ftpfr.h */, + A9509066B63C4D1361D0CA4EA29B954B /* ftrender.h */, + D04DC78D5A74516CF2BAD79E947302B5 /* ftsizes.h */, + 08B8560CC6F18BF32453AAB35DA2A0FE /* ftsnames.h */, + F14AE82C6F3F1E53A7B148B891178E59 /* ftstroke.h */, + DE2D5223B53CBDDEEFCC21BFCF9AB205 /* ftsynth.h */, + 35465BE12D8260B15CC6BD3C5FEF813C /* ftsystem.h */, + 8DF7E6D80CBC58876AC10154A9D6A141 /* fttrigon.h */, + 1340B180649533E638F85761755DDEFC /* ftttdrv.h */, + DACC10FFB04DCEFEA489925006B8311D /* fttypes.h */, + 8ECA7AB7A3076AA6E4705CB0523A2472 /* ftwinfnt.h */, + C26FEA9C82A62549EEEB21A953C0F6DF /* ftxf86.h */, + C1E54260AFD798B02F4283ECF16E444F /* t1tables.h */, + 8715DB110EE34E0C96E7C74313A7A89A /* ttnameid.h */, + A1C9D65BEDC2366AB15142DA01309E46 /* tttables.h */, + 61596E997AFE32646B435FCBF43BA32F /* tttags.h */, + F7DA08D829FA42A2C69604D3B70D3967 /* ttunpat.h */, + 0AA3EE06807AD3A1C73AC30588796437 /* config */, + D58652A0F8AA7A68433AC33F2767D21A /* internal */, + ); + name = include; + path = include; + sourceTree = ""; + }; + 2C9B9652A353883F8A6CF2689D99A328 /* new_dynarec */ = { + isa = PBXGroup; + children = ( + 252CCD4194A312D6A647E0B27A002330 /* new_dynarec.h */, + B35BFC446ACA2A3AC49953F7912C8D74 /* arm */, + 89B06523494BD8523F81518C3886BFD2 /* arm64 */, + 025C8C08D530FF619B68E7567ECAB514 /* x64 */, + 9BEEEA655826D740F8EBC247A333EB7F /* x86 */, + ); + name = new_dynarec; + path = new_dynarec; + sourceTree = ""; + }; + 2D451E944AAC47528C47C0687234DE60 /* Fabric */ = { + isa = PBXGroup; + children = ( + 6FE77E68F4303153680AF10EC9A30266 /* FABAttributes.h */, + 2CCF0C455FDED16D55973E6A3073BB8D /* Fabric.h */, + EA6454E318650211EB884DFD5405079F /* Frameworks */, + 3E2CD961D608FA6BBFFBF004C33C5E21 /* Support Files */, + ); + name = Fabric; + path = Fabric; + sourceTree = ""; + }; + 304255FE83E88222A8624B2298155DDB /* ri */ = { + isa = PBXGroup; + children = ( + 0CDD7B173B5F39A57867ED110A1FCA3A /* ri_controller.h */, + ); + name = ri; + path = ri; + sourceTree = ""; + }; + 3075365372BC210E9C1E4F40E26C5BFC /* Audio */ = { + isa = PBXGroup; + children = ( + 62653D6633FD230F25923698824EFA8E /* AudioManager.swift */, + E5A838589A5289E842980290C10BFF17 /* RingBuffer.swift */, + ); + name = Audio; + path = Audio; + sourceTree = ""; + }; + 32A3234E75ED687D7B90A6A982CC126A /* GBADeltaCore */ = { + isa = PBXGroup; + children = ( + CC1EEA402511AA159D872BBCB22E1C61 /* GBADeltaCore */, + 5311A1683EA053E58F93ED80896A38DD /* Pod */, + 756FE505CC37B6C3C2393B16D9FB6318 /* Resources */, + 379EDBEE1FDEF89DA0644E2AB949F551 /* SFML */, + BF15A943982DF0036D7E9AB6A541BB5B /* Support Files */, + 1190BD6F5A77F0F9E5AF42E5A07B4366 /* visualboyadvance-m */, + ); + name = GBADeltaCore; + path = ../Cores/GBADeltaCore; + sourceTree = ""; + }; + 3343777CA6E0AF2C9DF08C3AB68705DE /* Resources */ = { + isa = PBXGroup; + children = ( + C2D181987F7A462D06051D6F298B60FD /* NESDeltaCore */, + 9E1B908F1DB3ECDD4CA5B911E7C85B08 /* NestopiaJS */, + ); + name = Resources; + sourceTree = ""; + }; + 377224A4013DE56D58B13CD8F5DCB672 /* common */ = { + isa = PBXGroup; + children = ( + 337E3DE6F767B4B0E0E8615F5A236955 /* CommonAPIImpl_common.cpp */, + ); + name = common; + path = common; + sourceTree = ""; + }; + 379EDBEE1FDEF89DA0644E2AB949F551 /* SFML */ = { + isa = PBXGroup; + children = ( + 5AFAA8FA90B64741C5F3169D7938790B /* include */, + DE17DF46EF74082FE7270E1C29484DB8 /* src */, + ); + name = SFML; + path = SFML; + sourceTree = ""; + }; + 37C8E97EA413DC80A7D0F4C499EC79CF /* src */ = { + isa = PBXGroup; + children = ( + 3C33E4A59D390AF25D605A289B4F902E /* AutoBuild.h */, + 035FBCDBD0BE435F0A0EB32A2C22FAD3 /* NLS.h */, + FE62BC22E0353D209B86497B9841EB46 /* System.h */, + 555DB2B83943DAFAC8FBDB0E065CCC16 /* Util.h */, + 981655FB7820A023EE5286842289AB18 /* common */, + EC2170727E87969CEE48058554CEE957 /* gba */, + F8BFD89AC7030A2275F68E37537F7FBC /* sdl */, + ); + name = src; + path = src; + sourceTree = ""; + }; + 37F897955AA49811B78966F0084F182B /* Support Files */ = { + isa = PBXGroup; + children = ( + E44669EDF7D46C5AEA1F287C0BCB9E65 /* Harmony.modulemap */, + 6E6ABC72122793A5F3381924CC2D9BE8 /* Harmony.xcconfig */, + 4D42075157F824B1040606B316473092 /* Harmony-dummy.m */, + 9D85665615A489DF6583D7E19CC9D2B4 /* Harmony-prefix.pch */, + 6B551B63369A33A731AE3B25B4C7E772 /* Harmony-umbrella.h */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/Harmony"; + sourceTree = ""; + }; + 3940BB7F493B1F4452B0290020CCEB56 /* Protocols */ = { + isa = PBXGroup; + children = ( + 60C7CDBA93C7797D9E83FBA84FAE7FD2 /* RecordEntry.swift */, + 496FED89B31EF5869368A5EC4A3DE18E /* Service.swift */, + 437F2293962BC32124208AB59C25F268 /* Syncable.swift */, + ); + name = Protocols; + path = Harmony/Protocols; + sourceTree = ""; + }; + 3947B40AEF7771B4A4C8CB9580BFE4B9 /* src */ = { + isa = PBXGroup; + children = ( + 0798506C053FB81EBDF4F4EF5E7C226A /* arm_jit.h */, + 6249457A28CDE33CCE657105EDBF5C7C /* armcpu.h */, + 451269EF812651EDABF4A20D0D0EC707 /* bios.h */, + 79B10B2722F1132312871D229953F2DA /* cheatSystem.h */, + 2CC9F125F98839707615EC7F6D62E31F /* commandline.h */, + 696FB5C2FDDB6402D85459020872DE22 /* common.h */, + 9BF45B3F1647C84F90A4C140F217F89D /* cp15.h */, + A2E8E678B7D4B407202D422C8CE42DA0 /* Database.h */, + 9EDC9128CC8CDBCC9CCCD7AA3E759AA2 /* debug.h */, + F76D8AFD80E7A4DAACF521163CC4B26C /* driver.h */, + 237B84F01B49BFC3E63C9FE3F3D458FC /* emufile.h */, + 7362D3AF48B22723885E66B0D25420E5 /* encrypt.h */, + 4CCF50735B54E7E32704485AE919ABB5 /* FIFO.h */, + 4C7AF11CE5076877102C9C295769C622 /* firmware.h */, + D2787BB38A3A6EE118F7DC347429E78F /* gdbstub.h */, + AB93D8ED4B2543F199979AA5F4CDF7EE /* gfx3d.h */, + BECCB76E1F55FC84F3E9C1EBD272E746 /* GPU.h */, + 8B8B22C2F3B453B4853E09852C790FFB /* instruction_attributes.h */, + 916788F0642B21A136DE8950DB47B018 /* instructions.h */, + 41BA2F4E4D2870FCE74225CB5BAA4CE5 /* lua-engine.h */, + 810C174C92F9D6B39CFFD8CDEA0902A6 /* matrix.h */, + A495E80F9829E07964438D8A564E126A /* mc.h */, + 7DB43450886939FC8E10313F46E479D1 /* mem.h */, + 414ABC5418ACBADFD1E0682648431076 /* mic.h */, + 81699BBB7E4A8A98AF2985A53BE0E791 /* MMU.h */, + FC781DAF311B76B2BBAA2DDD268A94CD /* MMU_timing.h */, + B4621F5E2074F440324D7C9E0D8C9D88 /* movie.h */, + F2AB56328583FAAF95D7D3FFD81FEB33 /* NDSSystem.h */, + 2470D300240FF936891A6DA2EBE0164B /* OGLRender.h */, + 4B02B3B5A0036A6726FBD9167A2946A9 /* OGLRender_3_2.h */, + 24C0E7C293EBDFEBA516E17AD1564246 /* PACKED.h */, + 9750F2298895C6CB0021A8776937EC4B /* PACKED_END.h */, + 2C685CAEC8DE104E2770BA81F4B87316 /* path.h */, + BF4CCC593653835948DE2077F515DDF3 /* rasterize.h */, + BC60B5824BD4DA2AB25BA85A4C586886 /* readwrite.h */, + D159D83AA74847EB95659739517DA8FE /* registers.h */, + BD2858200C2A47FC9A917133A7D25353 /* render3D.h */, + AB3A5F6A3985C524CE62D3D188B41912 /* ROMReader.h */, + 40FF365F801C636BEE21293A877B902E /* rtc.h */, + DD5EE72E5D4DEF927BEEE94D86725DC0 /* saves.h */, + 04B1ECC7EA8EA09AD63D4DE11E338332 /* scmrev.h */, + BB534F82994E35C0556962CEB04EAF6E /* slot1.h */, + A17100E42D3DFDAD4EC4195E2444448D /* slot2.h */, + 1C0FCDFCC71457C2596AFCEC1DE6839A /* SPU.h */, + AD3187200380A3FB25170D5B9EE0F5DF /* texcache.h */, + EBA62E018BD55A8B1DBF638C1BDE2C3B /* types.h */, + 93B1E65A642EA1EAA4D3043EE455F0DA /* version.h */, + 08A7738B63C4EF018D66094588BB33F2 /* wifi.h */, + CF847D0CDB6821E22995CD53B6D9B9A8 /* libretro-common */, + 10C2CD51180AFA21BD554BBADFAC9630 /* metaspu */, + ); + name = src; + path = src; + sourceTree = ""; + }; + 3958CCBE1C4FE437EB8762E6E7E7CBB4 /* apu */ = { + isa = PBXGroup; + children = ( + 4EC7300212B3C57CD396DDC7242519F3 /* apu.h */, + E303B73D343B4496C9C1319F3E187317 /* hermite_resampler.h */, + 75A920E2918B272736AC688F14B6F096 /* resampler.h */, + F17010739364C5C3A5C00A7849EDF47C /* ring_buffer.h */, + ); + name = apu; + path = apu; + sourceTree = ""; + }; + 39DFDC165F70938594DE6987643A453E /* r4300 */ = { + isa = PBXGroup; + children = ( + A3B60534D5E0521E52D17D41457801B7 /* cached_interp.h */, + D4AAED9CBF41BDAFF1EE1D4E400FDF87 /* cp0.h */, + 254CC3AD77C6322C8CA4B65F52B9F198 /* cp1.h */, + 6FD1CD254FC9810DC969445799C4AC02 /* fpu.h */, + 89C8E96993FFE0F04D42EF2FC57593F3 /* idec.h */, + EC16A6C9E22D1924AE516F38A6DBFE58 /* instr_counters.h */, + AA0028E9A2FCB06AF3C4FF32FF90DA06 /* interrupt.h */, + 85384C51860DF6A3AB223E1B8439C471 /* pure_interp.h */, + C65A2F325C6EA118286DBBC4484E5404 /* r4300_core.h */, + 02F79C936D7C91B742192824860F638C /* recomp.h */, + B95AF3A3928659911B5866BCB18F168F /* recomp_types.h */, + C9F883F7F8E0CC8223971F5D3F4E6D89 /* tlb.h */, + 2C9B9652A353883F8A6CF2689D99A328 /* new_dynarec */, + EBB17EA90FE6634062678776E354459E /* x86 */, + C62148EE2C694AD9CB1B5035900C5E8E /* x86_64 */, + ); + name = r4300; + path = r4300; + sourceTree = ""; + }; + 3A48D7D6AC876F97FF54F36FA99BED65 /* Extensions */ = { + isa = PBXGroup; + children = ( + D98981D944CEC9F56A1D909EFAB4FB16 /* PropertyGroup+Harmony.swift */, + 69ABB3390625B7C34F4619CCD4F218E2 /* RemoteFile+Dropbox.swift */, + 70E06F935BCC172832EAFB66DF8A22AF /* RemoteRecord+Dropbox.swift */, + 707D301E564B6E14192946179A6F87F5 /* Result+Dropbox.swift */, + 3B9808132CF6702DDD5DA9C2F9A0C253 /* Version+Dropbox.swift */, + ); + name = Extensions; + path = "Backends/Dropbox/Harmony-Dropbox/Extensions"; + sourceTree = ""; + }; + 3A728C123D2F42FBF533AE80BAFA1C11 /* vssystem */ = { + isa = PBXGroup; + children = ( + 024F3CDD3E74EDB4AB9DEC89AC1A8D5E /* NstVsRbiBaseball.hpp */, + 6B58A269231B9317967B84F433CD1F14 /* NstVsSuperXevious.hpp */, + 95CD1D48C38E182BA0C36253C2422B8A /* NstVsSystem.hpp */, + 955407B1C8467036B4E43CAD531EECB3 /* NstVsTkoBoxing.hpp */, + ); + name = vssystem; + path = vssystem; + sourceTree = ""; + }; + 3ABF8C52D1D6470681859867551BF5CB /* mupenplus */ = { + isa = PBXGroup; + children = ( + C704B47C4D3D001EC83BB8F7C1E8D2E5 /* GLideN64_mupenplus.h */, + 24F185C35417DF1B6626AAC2D1E5E538 /* MemoryStatus_mupenplus.cpp */, + ); + name = mupenplus; + path = mupenplus; + sourceTree = ""; + }; + 3AEBAEFF2CF8E49D6B051634DB4A599D /* GLideNUI */ = { + isa = PBXGroup; + children = ( + 02871D18AA28905E1FE181B4AEDAE388 /* AboutDialog.h */, + 09764ED9B10646101C0CA4C1EC479B47 /* ConfigDialog.h */, + 50B2D8F8859A064B41E83B36809CD1EE /* FullscreenResolutions.h */, + CB608FA02B2FC02737ED821505210FEC /* GLideNUI.h */, + 0BE9A850D36C7373D36DB707F1F2FD8D /* Settings.h */, + ); + name = GLideNUI; + path = GLideNUI; + sourceTree = ""; + }; + 3BADEEAFA5175C6FB1ACB5685B74FCEF /* Window */ = { + isa = PBXGroup; + children = ( + 2A2F8E82B85B6C622F315EBC51F857CC /* Context.hpp */, + E10172E8D8CCCF9773BF6EA4BEBC7E05 /* ContextSettings.hpp */, + 19C0D312CBF5347DB0447CBF56BF1D75 /* Event.hpp */, + 7DB030D93B94677288CC4FB4807455C3 /* Export.hpp */, + E936FF10A7FD12B81B6130E8D750F73A /* GlResource.hpp */, + 4EFC0CB26048698A849DD6BD85E55424 /* Joystick.hpp */, + DFD8974B1F72F3E8D3FB1FC240A1ABD1 /* Keyboard.hpp */, + 1EE7F9057B40115EF146A96035510405 /* Mouse.hpp */, + D116902F224A7C6DCFCD3121EA7E0745 /* Sensor.hpp */, + 9900B0D2CD9872165A1705598445975C /* Touch.hpp */, + ADC9542E96F656BB89C5311EEBDA9E2F /* VideoMode.hpp */, + 5AC3A6B0034D34F9209BBD58348B9047 /* Window.hpp */, + 593CF251B99826ECC39AE11BE6568BFF /* WindowHandle.hpp */, + FEF7570E80D78FE6F43CCD5722434683 /* WindowStyle.hpp */, + ); + name = Window; + path = Window; + sourceTree = ""; + }; + 3E2CD961D608FA6BBFFBF004C33C5E21 /* Support Files */ = { + isa = PBXGroup; + children = ( + 4873713B2974A1B7D8CB492B8921D329 /* Fabric.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/Fabric"; sourceTree = ""; }; - 94FDB616FC775F022B04414B5B14B5CF /* Frameworks */ = { + 3EAFDF2E9706DE038061C9E5CBE261F1 /* md5 */ = { isa = PBXGroup; children = ( - 6D95D06B03F1236A75C4B3438D6A261A /* Crashlytics.framework */, + 47DCB70C7A85BDDF58BAF31BC42404A1 /* md5.h */, ); - name = Frameworks; + name = md5; + path = md5; sourceTree = ""; }; - 990F2974B835D8D5BDEDA100EC8319F1 /* Support Files */ = { + 41041585F53BA6BD480438989A571EDC /* include */ = { isa = PBXGroup; children = ( - 758C49353241043B25CA2DA067D54181 /* SQLite.swift.modulemap */, - ABD7234F4A3CE6A297E30F73069CBE81 /* SQLite.swift.xcconfig */, - 7335CDCFC53B999B267FD34E74550BFB /* SQLite.swift-dummy.m */, - 7D120D250C6A4E9255D95AE39889C0AF /* SQLite.swift-Info.plist */, - D9490080045108BE28632224CBF95A85 /* SQLite.swift-prefix.pch */, - B707C4F015D1CBD343F58FD461D31A9F /* SQLite.swift-umbrella.h */, + 025953BB492B1D55BDA573CAC6CE9000 /* boolean.h */, + 0EEE51D19958A4CD2ECFD5DA1245966E /* clamping.h */, + 2E6BE100ACC34617987896C070068D72 /* filters.h */, + F31355AD8ECDC7A336C4AC45A5CD2FDE /* libco.h */, + 91D82360E170EAD9A1C2BFF9FB3ACF33 /* libretro.h */, + FA7FE2BBE843B46F88B62F9D98574BCC /* libretro_vulkan.h */, + 63E04C5EE8B5C9B04E756F888630E85E /* memalign.h */, + D4E18A027874D0E4F2D09A1492E7FC02 /* memmap.h */, + A14800DC259C96954AE16116EC0E310D /* retro_assert.h */, + 57F1FC93C4F0049F6CC1DE462EAD9871 /* retro_common.h */, + EE4ED05DEFBED1E0F613E2EEE0E8500C /* retro_common_api.h */, + F43AF02D4A3D45AB4C91449083C04623 /* retro_dirent.h */, + 1848F23A934DCF2922E385DA2CFEDB81 /* retro_endianness.h */, + D1212ABF80224A615FAA8D5EA7127F55 /* retro_environment.h */, + 185D80DA8DB94398379D2CBC6CB4E814 /* retro_inline.h */, + 9FA46629ADE6C1B6415FE547479F78E9 /* retro_miscellaneous.h */, + 1631DF20959AF33BB911DE604C526934 /* retro_stat.h */, + 6E7206B56B9ED9A2B4822DC503DF31D7 /* rhash.h */, + C37DDFC457F0FC0A072B645839965E55 /* math */, + ); + name = include; + path = include; + sourceTree = ""; + }; + 424C8989A47713EDE517CF1CDBCE2747 /* SFML */ = { + isa = PBXGroup; + children = ( + F30187F95C53F4957E71ED8DDDC23CC3 /* Audio.hpp */, + 4B51F40AD66946C956A3C40AF6E4E5E6 /* Config.hpp */, + EDF739733FCF6284240B795ECD2EFFB3 /* Graphics.hpp */, + 83D5EF55975A2BFBB9FF14D9389BFBB6 /* Main.hpp */, + 92B20D8D80FF2DF35DE5BB67277F01FB /* Network.hpp */, + 112CF20D5FD3FC49E46B68E39C3831B1 /* OpenGL.hpp */, + 1E5AC9B7C27792EF938FCB5C74BC658F /* System.hpp */, + 998F169B2153317C97A738B28A48F66C /* Window.hpp */, + 84741B209E5F78CDFCE6328319563A75 /* Audio */, + 47357310CF707F619DEB3861008BF828 /* Graphics */, + 449B04AFDA3AF31AAFBA50F5B1031F64 /* Network */, + 6FEE718F6FFE5384C3777E89C1A2F82E /* System */, + 3BADEEAFA5175C6FB1ACB5685B74FCEF /* Window */, + ); + name = SFML; + path = SFML; + sourceTree = ""; + }; + 42BA3372D0FA1F2A0881C0A15BB3C68B /* mupen64plus-core */ = { + isa = PBXGroup; + children = ( + 5A1EC0892B1F779E42BA265C6547D2BD /* data */, + ); + name = "mupen64plus-core"; + path = "mupen64plus-core"; + sourceTree = ""; + }; + 43B8C16CA1C717105AD67D3449A6EA38 /* GL */ = { + isa = PBXGroup; + children = ( + 9678A9FCA9931D354FE7CC755CB6541F /* glcorearb.h */, + 801A6C2440FD328341E6550569C3A232 /* glext.h */, + A270C7CB63DDB996D27A472D7B07D460 /* glxext.h */, + 1F83AE270F6F4A14D5507A9E883EFA01 /* wglext.h */, + ); + name = GL; + path = GL; + sourceTree = ""; + }; + 43FBF70E4A21562133E286C7860ACCE8 /* Pod */ = { + isa = PBXGroup; + children = ( + 8E0EF6B3B03ADAA45342D1E3EC169D8E /* GBCDeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 44774FEADB9DBAB7FA8987857610D470 /* si */ = { + isa = PBXGroup; + children = ( + 7A9548EBDD461D42A4F3BBAEA839E3DA /* si_controller.h */, + ); + name = si; + path = si; + sourceTree = ""; + }; + 449B04AFDA3AF31AAFBA50F5B1031F64 /* Network */ = { + isa = PBXGroup; + children = ( + 71FBFADC850B449A9B9A5C0D9F8BFD67 /* Export.hpp */, + EE47B1882C5096303AD365307905B712 /* Ftp.hpp */, + 6FBD67C48E00871A2582075478C8DA5B /* Http.hpp */, + 34E1D0D9185BAD35EFFEE1914BE57762 /* IpAddress.hpp */, + 30DCADC540C43841BB69ADBF07E2D033 /* Packet.hpp */, + 14F79C2A5CD47627B9F83711162D50E0 /* Socket.hpp */, + 1649F44ED2BD21529BA16B7B2A429793 /* SocketHandle.hpp */, + 6207EF118B9280CEDE13421C4CF64C8B /* SocketSelector.hpp */, + 43B52186D0ADE3F0F74317B7F542BF3E /* TcpListener.hpp */, + 396CAC416CA887F60CA5BB303E7782BE /* TcpSocket.hpp */, + C2A0EC04B2612AA6AB035B6AB1B3FAE8 /* UdpSocket.hpp */, + ); + name = Network; + path = Network; + sourceTree = ""; + }; + 458060462E570AF0419D767088046F1D /* inc */ = { + isa = PBXGroup; + children = ( + 8D296A26945CFBCEEA746096B5AFC66D /* png.h */, + FB49300C86877DD38ED8922A53CA96E1 /* pngconf.h */, + 40BF1C58E8788FDF52E4550CE38FFF13 /* pnglibconf.h */, + 5067F54BACFB55351717D53F24D5E781 /* pngstruct.h */, + 5DE84C1C459F13BAD44A6B87EDA3189E /* zconf.h */, + 56521BBB435C7A22CFF991B7B01066DE /* zlib.h */, + ); + name = inc; + path = inc; + sourceTree = ""; + }; + 4609DF28CCB5E8E7ABB759BA44F2CF64 /* Support Files */ = { + isa = PBXGroup; + children = ( + 81FFA4A03112CF74DC8BA775C6B4E3AC /* SQLite.swift.modulemap */, + 69C6B83D4542C5716F38FE2C2C2E343E /* SQLite.swift.xcconfig */, + 2F298C5D309EDC6DEBD36255472EF52C /* SQLite.swift-dummy.m */, + 54D7EAAB9EB13A07D24F1B8561B5C617 /* SQLite.swift-prefix.pch */, + BED699E7391C1CA0477C2735B758007E /* SQLite.swift-umbrella.h */, ); name = "Support Files"; path = "../Target Support Files/SQLite.swift"; sourceTree = ""; }; - 9C3ED3A91BA870CE556C07AD209E997F /* Support Files */ = { + 464BDB10421F8F548E3FE464860697C4 /* api */ = { isa = PBXGroup; children = ( - 8CF2A82A6BE421825EA3849F3AF92208 /* Crashlytics.xcconfig */, + CB7525C73F421F5A18034AF27880A67F /* callbacks.h */, + 93307F759AE55916EE4F5A828F7C4E89 /* debugger.h */, + 6AF623F3493038D6261BFE6D75F9E9D3 /* m64p_common.h */, + D73DBD374EA8AF257C963ADA5CED3C29 /* m64p_config.h */, + 6DF0969A7AD1D99F4FACAB29DD35412A /* m64p_debugger.h */, + 3897ACD3EC356862F1521A3004290DFF /* m64p_frontend.h */, + 79F9B2D9EDAEB550A921B5D3884D6D19 /* m64p_plugin.h */, + 58E928D560BC439381C0BD2BAE388083 /* m64p_types.h */, + 74F4788A316A4AEC8FB746C3AF3DE933 /* m64p_vidext.h */, + 9E1BF418C0437A40B1C3B3582AB50F3E /* vidext.h */, + EDC16124014E8BE9A723398676F8E95D /* vidext_sdl2_compat.h */, + ); + name = api; + path = api; + sourceTree = ""; + }; + 464E81739567397094C991C4ECB4AF83 /* Support Files */ = { + isa = PBXGroup; + children = ( + C12493BE66E89A1BAFEC4C49A5D0F399 /* DSDeltaCore.modulemap */, + BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */, + D8CFE89245F633014BBDF6E8AF4985D1 /* DSDeltaCore-dummy.m */, + 9FEB67420285B4BA71A2144A190F4A60 /* DSDeltaCore-prefix.pch */, + 712761EE4481E36BC7DD29218D12A6CF /* DSDeltaCore-umbrella.h */, + 84E73D7D5D1F2FA41BD8181D33BA65D2 /* ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/DSDeltaCore"; + sourceTree = ""; + }; + 47357310CF707F619DEB3861008BF828 /* Graphics */ = { + isa = PBXGroup; + children = ( + AF38F08C7B6C05C9E6E483C522CB166A /* BlendMode.hpp */, + F96385E0EAB3EFE69A0C198645BE3F02 /* CircleShape.hpp */, + 01B378B099C14E4E827FCBA843C08674 /* Color.hpp */, + 3676C1EE5D5DE26D9C445B36939E922C /* ConvexShape.hpp */, + A51106A45BF114A687DB7DB755B0D25D /* Drawable.hpp */, + B3010613943E28048D5313FE665F01EE /* Export.hpp */, + 7DE820C181248C292881B0298B0F1F90 /* Font.hpp */, + 3BBF510C2B0603EAC41E2079FEFC6A95 /* Glsl.hpp */, + 3BCF0A222961A427CD39D1C78BD6A993 /* Glsl.inl */, + 920F6CCBFE16A29B89A155E099306B56 /* Glyph.hpp */, + BB40DF340E3D23ACCF742C2B72217324 /* Image.hpp */, + 406077526A3C40A99FE96076975E23CA /* PrimitiveType.hpp */, + 8837E67069B10F42A5536F61DD3DD225 /* Rect.hpp */, + 635101CB7845320BEBBEE9E499DCF372 /* Rect.inl */, + 398E01AED7FF75385A50FDC67155A9A0 /* RectangleShape.hpp */, + A922DEE8CDD64405F21CFA9916068DA8 /* RenderStates.hpp */, + 0ECF374B07795E7E2A151E2B4D8D2A29 /* RenderTarget.hpp */, + 5FCE00327D6825CD6F2088A345690DCC /* RenderTexture.hpp */, + EACB3541C7C31D9C894C73A0F43BCD38 /* RenderWindow.hpp */, + CB3301D4A5FED38AEE41ED07A6C502BE /* Shader.hpp */, + FAE71BC8FD40F93BEB90C2ED42088A99 /* Shape.hpp */, + C90C25C12E9E9489A474A496C47B38AF /* Sprite.hpp */, + 9995950583E5F1398CF81E042701C6E9 /* Text.hpp */, + 44D209BABFBAEF92A3A476D1046B160F /* Texture.hpp */, + BCD06FDE6C4BF266F270034784E23776 /* Transform.hpp */, + 3786BF5CD7F52FDF2EC2229D9387B2A8 /* Transformable.hpp */, + EB8457DAFF531CDDEB4D1854B8B8BDD0 /* Vertex.hpp */, + 784FA935740E152532499A73DA5AA3DB /* VertexArray.hpp */, + B8982524E4ACBEBF47DD97748097DE96 /* View.hpp */, + ); + name = Graphics; + path = Graphics; + sourceTree = ""; + }; + 480A93CB7AB6C50FA045238E2B79FAC6 /* Resources */ = { + isa = PBXGroup; + children = ( + DD765E8C1F357163F0D20B44FC57054C /* Mupen64Plus */, + D2BED9DA807FAFF2162C70598CC64A97 /* N64DeltaCore */, + ); + name = Resources; + sourceTree = ""; + }; + 48108D7847251652893F854B19A7370F /* Support Files */ = { + isa = PBXGroup; + children = ( + 5291FC66BF51E30DA83DE18DA93737CB /* SwiftyDropbox.modulemap */, + 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */, + FB1549464F3E4C6E80951115BA80C87C /* SwiftyDropbox-dummy.m */, + E61D432E6DBF6C5A037F5AD976FAD93C /* SwiftyDropbox-prefix.pch */, + 9AE215D47AD4C3E4C2C354C0C591C34C /* SwiftyDropbox-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SwiftyDropbox"; + sourceTree = ""; + }; + 48DBBE06D8F38B54497656B8430DBB43 /* UI */ = { + isa = PBXGroup; + children = ( + 5EDFFBA74A4D2E7501881A25047D5BD8 /* Controller */, + AE5BDACDA27265C8C5B46C0ABE431F76 /* Game */, + ); + name = UI; + path = DeltaCore/UI; + sourceTree = ""; + }; + 4B7694700DA51621474EAD99AC285175 /* Cores */ = { + isa = PBXGroup; + children = ( + 5A201B11504778569D1F2D7EB83668E6 /* DeltaCoreProtocol.swift */, + 78B946BC5D71400B19D26F799662F808 /* EmulatorBridging.swift */, + ); + name = Cores; + path = DeltaCore/Cores; + sourceTree = ""; + }; + 4C0FD18A12989B7A4F6A75FA2EFE414F /* Types */ = { + isa = PBXGroup; + children = ( + 8CD89764ACCFBF65BFF14776DAB37EA9 /* DSTypes.h */, + 2D61A2E3D2CCD4FD36DF6278A7CFE46A /* DSTypes.m */, + ); + name = Types; + path = Types; + sourceTree = ""; + }; + 4CB096438D1D6504B19EF054D622999B /* Support Files */ = { + isa = PBXGroup; + children = ( + C7E40DB865F641E4AB32B64D3F93E22C /* GoogleAPIClientForREST.modulemap */, + 94D367DD0D99FF2FCAE661017295657C /* GoogleAPIClientForREST.xcconfig */, + 5217968080F1594E30A54230FEEE2E88 /* GoogleAPIClientForREST-dummy.m */, + 0D3974A0FEF480847BBD90477C1A1D10 /* GoogleAPIClientForREST-prefix.pch */, + 8C943FB0B36A40A6ED1622A947B642B5 /* GoogleAPIClientForREST-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/GoogleAPIClientForREST"; + sourceTree = ""; + }; + 4D05B91E3529B56406824FF9DA8149F2 /* Pod */ = { + isa = PBXGroup; + children = ( + 3DB4038AF1D67C948BF0ABB96BB0986E /* Harmony.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 4D9195AC400DB755A053EE8F3AF59DAA /* Controller Skin */ = { + isa = PBXGroup; + children = ( + 9A6B0D2942B8BAF98B09DC10EDD20618 /* Standard.deltaskin */, + ); + name = "Controller Skin"; + path = "GBADeltaCore/Controller Skin"; + sourceTree = ""; + }; + 4D99497467047689EE0E51F25AD9B33F /* Controller Skin */ = { + isa = PBXGroup; + children = ( + C9015E1D86DF0B2A7A1D22814920641A /* Standard.deltaskin */, + ); + name = "Controller Skin"; + path = "SNESDeltaCore/Controller Skin"; + sourceTree = ""; + }; + 4EB8E4515524B728C4520D910822C6D5 /* Protocols */ = { + isa = PBXGroup; + children = ( + 2AE3D62272543AE755E38D66B0FE1577 /* Inputs */, + CE7DAA8BB95D149C5B6CB0226DAED1B6 /* Model */, + 05E5AFDEEBC0414DCD46B75C1E7B13F1 /* Rendering */, + ); + name = Protocols; + path = DeltaCore/Protocols; + sourceTree = ""; + }; + 502549B50925C18CAE6574440F514477 /* board */ = { + isa = PBXGroup; + children = ( + 82DC27EAD4860B5C690A7972067D9F11 /* NstBoard.hpp */, + 6ADD780B3EFDC84E892E216A11E12B84 /* NstBoardAcclaim.hpp */, + B137B57F8091633EB513C60304ED2C7C /* NstBoardAcclaimMcAcc.hpp */, + CFA8EEA9986267DD4C9222F8013EB169 /* NstBoardAe.hpp */, + A031F15C9AA6495C554D8421DDCD6B2E /* NstBoardAgci.hpp */, + B686582878B4BC8A27AD99BE25411842 /* NstBoardAve.hpp */, + E480CACA0E81501CCBB98149C48584AD /* NstBoardAveD1012.hpp */, + 5901F945E4B7BD8E993A572C8320D4E8 /* NstBoardAveNina.hpp */, + C3EC67AFC76D160DAF406F83FB32F372 /* NstBoardAxRom.hpp */, + 2DB986F9C1D693A55F7B3373502F3EA2 /* NstBoardBandai.hpp */, + 316C97172E998626A782DC7AB8C5416C /* NstBoardBandai24c0x.hpp */, + 524FD8CB9B96FEC42DEBFF4F6485E0C0 /* NstBoardBandaiAerobicsStudio.hpp */, + 2FE159CB1A275ED4531A3B1AEA807772 /* NstBoardBandaiDatach.hpp */, + 55D03E3855F24EC46248235CA4AB84AE /* NstBoardBandaiKaraokeStudio.hpp */, + C55A28A051F1189A5E169C1AE35F08E6 /* NstBoardBandaiLz93d50.hpp */, + 5C44BBA15DF8CEE92A417577E4C1D5D9 /* NstBoardBandaiLz93d50ex.hpp */, + 13CF8AB5A64D04015282404D80256EA0 /* NstBoardBandaiOekaKids.hpp */, + 355A8C024A46DB2BE1763B0F3971FFEB /* NstBoardBenshengBs5.hpp */, + C4DEF759B31F98EC3A0C7C1538495611 /* NstBoardBmc110in1.hpp */, + 301D690D8387625CECE00F7DFC975BD1 /* NstBoardBmc1200in1.hpp */, + 4277D9CD49D8F32314F512361BE4B690 /* NstBoardBmc150in1.hpp */, + F81D2A992DCD611FF9C080137C990E31 /* NstBoardBmc15in1.hpp */, + 6653BEF078E8146300FE0A11A7E562B9 /* NstBoardBmc20in1.hpp */, + FA1B820118906800A592F7AEC27C0DFF /* NstBoardBmc21in1.hpp */, + DDDBA9705C6D9A716771C1B745289787 /* NstBoardBmc22Games.hpp */, + 73006DC6C1509BB82F83AC8D88F0481E /* NstBoardBmc31in1.hpp */, + 179CA20387AC394361693DD1CD2E4572 /* NstBoardBmc35in1.hpp */, + 83C196FE4CF60A03565B95B1C9C0217C /* NstBoardBmc36in1.hpp */, + 7F66CA249330A41FAC70007D5C650CD6 /* NstBoardBmc64in1.hpp */, + 612BF149D2E48CC9950BEEB2FC03B60F /* NstBoardBmc72in1.hpp */, + 31FCE4C32E3EF5DE398B4E770A89EBF5 /* NstBoardBmc76in1.hpp */, + E350E01066A73585D9DE99D4C11B7C7A /* NstBoardBmc800in1.hpp */, + 92F06EFCC636BAAC527CE6543D3ABA5E /* NstBoardBmc8157.hpp */, + E3F52E4EF9D56259B6359336A7D98C0A /* NstBoardBmc9999999in1.hpp */, + B56303B13A0444FFC586E198F58DAFAB /* NstBoardBmcA65as.hpp */, + C91AB35D0843E8B6D4267700DA3291F0 /* NstBoardBmcBallgames11in1.hpp */, + 35CFBA425AB64788F59985DF4294DCD2 /* NstBoardBmcCh001.hpp */, + 695EC8428ABF7B3AF98FDB33DD69DB98 /* NstBoardBmcCtc65.hpp */, + 52373DA4A745FB2484B38C3DBF6F4512 /* NstBoardBmcFamily4646B.hpp */, + 52468FE08B22885CDC155AF176219E41 /* NstBoardBmcFk23c.hpp */, + 46068669BC91126FFFEA59576128CCDD /* NstBoardBmcGamestarA.hpp */, + C8B1D8C461900C12369DB3E2AA13C08E /* NstBoardBmcGamestarB.hpp */, + F9CBFEF3D09E24FAC21E3A14CCC923AF /* NstBoardBmcGolden190in1.hpp */, + 27D3E954F1B9259AA8BFF0453108844D /* NstBoardBmcGoldenCard6in1.hpp */, + BA6C6054CE8555D1822133E74F7E920F /* NstBoardBmcGoldenGame260in1.hpp */, + F712A25B70E2BECE91A60F3F2CDBC6D6 /* NstBoardBmcHero.hpp */, + 3AF4B7019142B0E02BDE3089ED853C72 /* NstBoardBmcMarioParty7in1.hpp */, + 5B3906E0F867AD7DBE110BED3C71FCD8 /* NstBoardBmcNovelDiamond.hpp */, + F11F1CCE5B53125548AF2C84DC90CF96 /* NstBoardBmcPowerjoy84in1.hpp */, + 18EC95A3A3E3430E185F60F3BA643D4B /* NstBoardBmcResetBased4in1.hpp */, + 0A0F6D5E39D8F599381FA5E8BB34178E /* NstBoardBmcSuper22Games.hpp */, + FDD8C2628C20169F27F847F6618B2626 /* NstBoardBmcSuper24in1.hpp */, + 04FA9510648C9DD5A3436B2139DA560F /* NstBoardBmcSuper40in1.hpp */, + D18007DF21DF9CDE2EA3A14D00C050DA /* NstBoardBmcSuper700in1.hpp */, + 241D65B94A34B15AB354A6901D592045 /* NstBoardBmcSuperBig7in1.hpp */, + CD40FB9904EBC64F4CB21A6062A4FFC8 /* NstBoardBmcSuperGun20in1.hpp */, + 4DDEBD072685DD4E5D03FC470004711B /* NstBoardBmcSuperHiK300in1.hpp */, + 83DEFE6EC2B2AF94239CCEA8D9F36C59 /* NstBoardBmcSuperHiK4in1.hpp */, + 6B139C8BFA41616549DEEAA545317F7F /* NstBoardBmcSuperVision16in1.hpp */, + 9106F296AA7B0EA373050E2222387718 /* NstBoardBmcT262.hpp */, + 77369FE791F1E575CF67D2E88660AB54 /* NstBoardBmcVrc4.hpp */, + 62945616EBEA8F7DB40A59C37964637B /* NstBoardBmcVt5201.hpp */, + 739C9A35C56A321A5F6DEC9276C9A451 /* NstBoardBmcY2k64in1.hpp */, + EB24131FB6C69C2CA2374DF4C6A91A71 /* NstBoardBtl2708.hpp */, + 044F71625A7716601EAADFE8C6D579CA /* NstBoardBtl6035052.hpp */, + 8FE991842BF4F0D0508BF1CDC5290400 /* NstBoardBtlAx5705.hpp */, + C9D7F4E7EB78574E9BE5E912032A3DFF /* NstBoardBtlDragonNinja.hpp */, + 2FB72B0C0BDEEEA75B2233F8A0F9C0CB /* NstBoardBtlGeniusMerioBros.hpp */, + 89D77AD643D660EF8D5D89B0A70F143B /* NstBoardBtlMarioBaby.hpp */, + D282E9AC180F6200BA4B724CC7918B06 /* NstBoardBtlPikachuY2k.hpp */, + D31F9464D26C84F4303F9214852E0259 /* NstBoardBtlShuiGuanPipe.hpp */, + 32C312AFD3D5355E34E5264A0D924E24 /* NstBoardBtlSmb2a.hpp */, + EC65A0F4796E627B80569AAB463DCD61 /* NstBoardBtlSmb2b.hpp */, + 9E493AB01A18F0DA9F384ACB5CBD5C5A /* NstBoardBtlSmb2c.hpp */, + 7B7537D8181FB7C0E5B50CB7680E9967 /* NstBoardBtlSmb3.hpp */, + 2D3BDC0A83B15DB6FCC56F319C1AD6E8 /* NstBoardBtlSuperBros11.hpp */, + 74A1A47D0674A91258AD7D9DAB661740 /* NstBoardBtlT230.hpp */, + AA1E7066C788AF166D3819EA304B9C30 /* NstBoardBtlTobidaseDaisakusen.hpp */, + 12D394DD2EB99C510D854AD5F7D8D01B /* NstBoardBxRom.hpp */, + 44F1BD582E0D3BBA64326BDB9B1D6DDD /* NstBoardCaltron.hpp */, + D6D2B3F2E952A338D1128CD5D724862D /* NstBoardCamerica.hpp */, + 1C0F31C6E082D6432390150C57691513 /* NstBoardCne.hpp */, + 04F25CB32F102ED6A7598D66E7BC9443 /* NstBoardCneDecathlon.hpp */, + DCB3B443E61EDD2CC071DAE04B2C1F0C /* NstBoardCnePsb.hpp */, + BFF96050C458E84686F588B9793FEC9C /* NstBoardCneShlz.hpp */, + 60E307E020BBFAC21769EFBA79153CCD /* NstBoardCony.hpp */, + 34A215FA298A479379277FF73C2A596C /* NstBoardCxRom.hpp */, + B2CBDD74EE4025870C9ACEC038645C28 /* NstBoardDiscrete.hpp */, + 4AAA4EBFA294D12114F5AAAB4941BFC2 /* NstBoardDreamtech.hpp */, + EB023C27C2E7EBAB1EBA4B6CE2CB82B8 /* NstBoardDxRom.hpp */, + 5C64FD116A93B9A66533D1BA551BF885 /* NstBoardEvent.hpp */, + FC1E9CD449F2D3C5D045DFEBF6BBE3C2 /* NstBoardExRom.hpp */, + 504F1B8F7739C07C121A17267D9DC80F /* NstBoardFb.hpp */, + A7FA6F5EFA3E03E39BBF032A32482DBE /* NstBoardFfe.hpp */, + 5233AE6CB42C097DA937081AB4814A39 /* NstBoardFujiya.hpp */, + 72EF249EE7E9290384CEF4D02C6444B0 /* NstBoardFukutake.hpp */, + C0BCFCB348564B9EB1473238677BB354 /* NstBoardFutureMedia.hpp */, + 7CF779051F3316DCCCAAB71AF25F906C /* NstBoardFxRom.hpp */, + 4DDA965CE8714B275AFFEDDF6DC053CB /* NstBoardGouder.hpp */, + A5EB56E07F663B5DB04E4B9B6C85C4B6 /* NstBoardGxRom.hpp */, + 32810DC0220801D0627369038B90903F /* NstBoardHenggedianzi.hpp */, + DA87C06EA55D40BF0BACCC63B7F0FA76 /* NstBoardHes.hpp */, + 64F52923D2670C65E03D742EF710218A /* NstBoardHosenkan.hpp */, + A3F6E644CFB6C961D9227F005A276743 /* NstBoardHxRom.hpp */, + E64DA6F38CE5BF6A1B8B85644BF421A8 /* NstBoardIrem.hpp */, + 8FA72104E6FCAFAAAE36DA0189E9CB62 /* NstBoardIremG101.hpp */, + 456C9F03B0C75358971F5599710FB4AC /* NstBoardIremH3001.hpp */, + 0E65B447ACD8C0AD8B9540F69DD78D01 /* NstBoardIremHolyDiver.hpp */, + AAA8DF67E8C538AF865BB2D983391817 /* NstBoardIremKaiketsu.hpp */, + 0760F68BF4270075015FF0EF76C307A4 /* NstBoardIremLrog017.hpp */, + 05E18E206FE5E3ECC0A0F7DE2BFF3CB9 /* NstBoardJaleco.hpp */, + 6C87A284686A358CFAC958B264749422 /* NstBoardJalecoJf11.hpp */, + E042969907A8F89D42D0992DE8D4804B /* NstBoardJalecoJf13.hpp */, + 0E3FADE2512B784AFCE2DFE09B9ECE6D /* NstBoardJalecoJf16.hpp */, + D8D32EAB45D5BEE636521CB06DB71FF9 /* NstBoardJalecoJf17.hpp */, + 994237033CE941B5B49F4E0EC30ADD01 /* NstBoardJalecoJf19.hpp */, + 2446BE6FAF88E2295DA4D857C1DC7C16 /* NstBoardJalecoSs88006.hpp */, + FE1983B3232B47585D4F61AB506D3B3A /* NstBoardJxRom.hpp */, + BC6023BC6F5B2433CF51C57DEE9E331A /* NstBoardJyCompany.hpp */, + 72248A001C60C8B9DD1CCDC9D78DAE0B /* NstBoardKaiser.hpp */, + A5E4840045EBB8FE5E794C6DAEFF0CE7 /* NstBoardKasing.hpp */, + 323BA7B73E9CB19F2E6792B339B711E1 /* NstBoardKay.hpp */, + 4A32B8F42EA9A1885D2B08250359F9FC /* NstBoardKayH2288.hpp */, + 0BE607429888D1CA21C1751ECA041494 /* NstBoardKayPandaPrince.hpp */, + 86A843DB560CD6D81B7EF3A9F6D8F5FB /* NstBoardKonami.hpp */, + 14D21BDF50EDC8CCA4B82562FA4EC1E1 /* NstBoardKonamiVrc1.hpp */, + 3F3421F39C5B3686D06A4A47CFC049B7 /* NstBoardKonamiVrc2.hpp */, + 5221F56A802033E50A6CA3492E382A3C /* NstBoardKonamiVrc3.hpp */, + 9C6F3AAA06C293FC9A91CD7A5FE7D65A /* NstBoardKonamiVrc4.hpp */, + 261762E049C9653D1341EB811E42E338 /* NstBoardKonamiVrc6.hpp */, + 3E46BEA7461AFEDDCEC478DB8D3425C3 /* NstBoardKonamiVrc7.hpp */, + D98EC38E106371722A01A73B3CD4D54B /* NstBoardKonamiVsSystem.hpp */, + 62948F129BEF321213BDE3AC38E0CBDC /* NstBoardMagicSeries.hpp */, + C2C58B3E3B8C36120F560F859D6D98F7 /* NstBoardMmc1.hpp */, + 23EDB5113AECD1DF0B90F3E16139D1D6 /* NstBoardMmc2.hpp */, + 455C3A1951DCCE758C8B38B0D96D1745 /* NstBoardMmc3.hpp */, + 87F4B88C0892C297B31AE94A0E93539C /* NstBoardMmc4.hpp */, + 231C3B1815030738C172F8C3A61AB598 /* NstBoardMmc5.hpp */, + 24DCB8F3924D4B8E723EDE7D9E36EE1C /* NstBoardMmc6.hpp */, + 627617EFA316732258422811C97719BF /* NstBoardMxRom.hpp */, + 71E464E228C2FFB740BCB0AF049E4332 /* NstBoardNamcot.hpp */, + 5385CA919BFDAA02107CE76AD241472B /* NstBoardNamcot163.hpp */, + AA04D2400A0F699B8568525360B9DF75 /* NstBoardNamcot175.hpp */, + F35BDFB9D3E727256E9CD866CDA4B105 /* NstBoardNamcot34xx.hpp */, + D24B8100E3100D72F4874FB079F78F54 /* NstBoardNanjing.hpp */, + 96AF49FA9F387DAB2B33D0FB432E8FC7 /* NstBoardNihon.hpp */, + 68753DE722C0980098E0081FA7664AD1 /* NstBoardNitra.hpp */, + E70A7D8AB9B5D506BDFCB3A14DE9ACD8 /* NstBoardNRom.hpp */, + EE3F927B7F58D93B1C98460B28559AE7 /* NstBoardNtdec.hpp */, + 27DF122CB5EB6951E6B147BC0F24D64E /* NstBoardNxRom.hpp */, + 160DE59B03218F24C3937D38923481FF /* NstBoardOpenCorp.hpp */, + 041DD83CE8B7122C23DB4EA6557E0B8D /* NstBoardPxRom.hpp */, + 58F426BB1C791A20225DADEEE031718A /* NstBoardQj.hpp */, + 5F38047E1651287DC3AA705DF9C06C72 /* NstBoardRcm.hpp */, + CDE5597A73178118289A5342B56A5EFB /* NstBoardRexSoft.hpp */, + 6B21034826F7C6098BB4DBFE00B2498C /* NstBoardRexSoftDb5z.hpp */, + D4E854B6ACFFE4EA1EDD318476D024D0 /* NstBoardRexSoftSl1632.hpp */, + 215635C653FC2F3689E27136178F6166 /* NstBoardRumbleStation.hpp */, + 4935C2E2603C529A316EE9E50C953CA3 /* NstBoardSachen.hpp */, + 73427BAA44C8216F08EDAC6A0CAD0190 /* NstBoardSachen74x374.hpp */, + 3555155F2CD8E368BB6A27A9517ADC29 /* NstBoardSachenS8259.hpp */, + A4100365716D2689894AEB6AEEE7DDE0 /* NstBoardSachenSa0036.hpp */, + FA6F6DCD09DADEC4F87458FB70013D1B /* NstBoardSachenSa0037.hpp */, + 92E86921655A3432DD8E836D484C63DB /* NstBoardSachenSa72007.hpp */, + D58C0FE9AF63F39A0E7990E8ABEAA707 /* NstBoardSachenSa72008.hpp */, + 8F52AAB71856AE2D876485F77504BCE5 /* NstBoardSachenStreetHeroes.hpp */, + 1BC03A069A547EB736D558AC237B614A /* NstBoardSachenTca01.hpp */, + 8E110C092AEF72EDB7C33791CA0BCBEF /* NstBoardSachenTcu.hpp */, + 62CFF0059E7E0AE9B9B20A8DBAE51D16 /* NstBoardSomeriTeam.hpp */, + 6270AB27CBF8BA6CBBAF402530B111BF /* NstBoardSomeriTeamSl12.hpp */, + 1F028EDFAB102669AF0739608CE6CC3F /* NstBoardSubor.hpp */, + F774B85B1C91BBD1B28A7FDAEE5812F6 /* NstBoardSunsoft.hpp */, + 02C1BEECEC397F5E91934D66DFFF7686 /* NstBoardSunsoft1.hpp */, + E3A6EC0B470AAD78C4D5550BBDA4A73E /* NstBoardSunsoft2.hpp */, + 9FDC34A806C43FEC8AEFDE037CBB3624 /* NstBoardSunsoft3.hpp */, + EDCD39BFA98723F034DF29BDED0067EC /* NstBoardSunsoft4.hpp */, + B5FF87A66DB9785A1AFFD395C49E2A88 /* NstBoardSunsoft5b.hpp */, + 90DE8F7A964963C67D9A493018E6E24C /* NstBoardSunsoftDcs.hpp */, + 1B60BE30FA309328A9F8DEECADF5B276 /* NstBoardSunsoftFme7.hpp */, + CFF26FC15D5CF0C1D2FDC8A0DF023F02 /* NstBoardSuperGame.hpp */, + 2A9BAD126F66B1D6249DC44FE38555BB /* NstBoardSuperGameBoogerman.hpp */, + 33F61CAFA96E0983ACC82B25ADD6DA19 /* NstBoardSuperGameLionKing.hpp */, + 7537CE11495993BB05FE9EAA5BFED976 /* NstBoardSuperGamePocahontas2.hpp */, + E0B30CE96C7B045BFDBA33EE166DBFFB /* NstBoardSxRom.hpp */, + 51A794B9A074BF2025C358E236D42F05 /* NstBoardTaito.hpp */, + F6A4D024EFBD821E10B8C4249832F774 /* NstBoardTaitoTc0190fmc.hpp */, + DB916A39387B7212EE06E2DA467A8D51 /* NstBoardTaitoTc0190fmcPal16r4.hpp */, + B71756B40C4BB780F974D844D1D446CB /* NstBoardTaitoX1005.hpp */, + 34347E5F18F11A1CEF5D0D59279705D2 /* NstBoardTaitoX1017.hpp */, + B770765D40D57151EF4C7C13D2101E87 /* NstBoardTengen.hpp */, + 25F7A6B233074D6DD97705181306F479 /* NstBoardTengenRambo1.hpp */, + CB811B30D58FF4024455D5E5CC17947B /* NstBoardTxc.hpp */, + FE45DB19ABFD58A4D2DCCB58292ABED4 /* NstBoardTxcMxmdhtwo.hpp */, + B24B02D04D4F08EFCBE0B8D8503C30E8 /* NstBoardTxcPoliceman.hpp */, + 27CAFC4023101EB518BF390FBCBDAC6C /* NstBoardTxcTw.hpp */, + 0558C6E8EE1D9B61043E335254B75955 /* NstBoardTxRom.hpp */, + 7F657EAC00204AF30C7E4EA0B4518AC5 /* NstBoardUnlA9746.hpp */, + EC91456BE16B5A70B8034583667C1DB2 /* NstBoardUnlCc21.hpp */, + FAABB4AF34B608AA851191DA7195AC03 /* NstBoardUnlEdu2000.hpp */, + 0DEC322B85B93540CD7F53F2185164D6 /* NstBoardUnlKingOfFighters96.hpp */, + 0E992CA8B2DD446EF5D166F52EB6ED50 /* NstBoardUnlKingOfFighters97.hpp */, + 770AA55D81A4A9A0174FC18A4DB7DC41 /* NstBoardUnlMortalKombat2.hpp */, + F76EE1EB3D0BD20599E9210AA395F4F5 /* NstBoardUnlN625092.hpp */, + 4BD0DDE5441618EF592651345A1BB212 /* NstBoardUnlSuperFighter3.hpp */, + B227CD071A5B88861CA260BED0FBE3D8 /* NstBoardUnlTf1201.hpp */, + E33793CEFFD0F60ECF7785770DBCE9F3 /* NstBoardUnlWorldHero.hpp */, + 6878BE119742EC0C21A2CB0F923D256C /* NstBoardUnlXzy.hpp */, + FE0B56AC8DF03F3940CB2C0117DF20DA /* NstBoardUxRom.hpp */, + 16A5B2FF145529F1248A848F882C8403 /* NstBoardVsSystem.hpp */, + 54EB6E02433DBB4599FF9FECA6F74BEC /* NstBoardWaixing.hpp */, + F4E0870820E6458DC946E91A74E0DB8E /* NstBoardWaixingFfv.hpp */, + AB7866FC433C97398B3963C2270D52D4 /* NstBoardWaixingPs2.hpp */, + 61C1E3F8AE5D758C9D04B1A80F1A6C85 /* NstBoardWaixingSecurity.hpp */, + 3BFF77F72AE6211AD9D42FD2E18375EF /* NstBoardWaixingSgz.hpp */, + 75CBA626F95FBBAD154F3774DF8F9152 /* NstBoardWaixingSgzlz.hpp */, + B595CA4CE436B20EE775744443119153 /* NstBoardWaixingSh2.hpp */, + 303639D060EE4ABC8F9B28FD68B7F98C /* NstBoardWaixingZs.hpp */, + 27B1FE69B14E33A7E6603FF648B30DFB /* NstBoardWhirlwind.hpp */, + 2E79FA977AAA30AD5B0ACFC45BB5967B /* NstBoardZz.hpp */, + ); + name = board; + path = board; + sourceTree = ""; + }; + 511C6B6CD7CABDDA64B217FB5587D474 /* SQLite.swift */ = { + isa = PBXGroup; + children = ( + EB6C0793656914F1AF54EE46FD06020E /* standard */, + 4609DF28CCB5E8E7ABB759BA44F2CF64 /* Support Files */, + ); + name = SQLite.swift; + path = SQLite.swift; + sourceTree = ""; + }; + 52BA5412DADDFC606DA2615E62036938 /* DeltaCore */ = { + isa = PBXGroup; + children = ( + 5F04014B383F64E12DE6C9129A85A7C5 /* Delta.swift */, + FB4B3A1CE88E9FF6475854D98A52A5DD /* DeltaCore.h */, + ACD2694A63AA0B70E91DAF193E7B4425 /* DeltaTypes.h */, + FEA0ACC910F13E9D6B8C51CFE1B8EDA4 /* DeltaTypes.m */, + 4B7694700DA51621474EAD99AC285175 /* Cores */, + 6E3F94BFF62C194BE0258DBEB0D157F5 /* Emulator Core */, + 5A73536B2E3D5A586084E6316E2725FA /* Extensions */, + 7A0257A6FA12DDD23AEAE728454C6E89 /* Filters */, + 77DE8B3A59B3AEA94EA1936289EFD550 /* Game Controllers */, + C4D47ABBEA4B5A7F4CCBD4E0828F752B /* Model */, + 8DCC2B9382D5AFC79EE9929AC6B93E5D /* Pod */, + 4EB8E4515524B728C4520D910822C6D5 /* Protocols */, + 82D8A69FF325F605A136ADB6BAE9A4D2 /* Resources */, + E2620C3C1877C7DED9743652F9692A17 /* Support Files */, + 6E3B1B87720B12D224BBA827A8147857 /* Types */, + 48DBBE06D8F38B54497656B8430DBB43 /* UI */, + ); + name = DeltaCore; + path = ../Cores/DeltaCore; + sourceTree = ""; + }; + 5311A1683EA053E58F93ED80896A38DD /* Pod */ = { + isa = PBXGroup; + children = ( + A0879BEED84AB0514D697AD37CCE88A3 /* GBADeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 577B01C70A6A38E4A14D8E2184A0A446 /* Bridge */ = { + isa = PBXGroup; + children = ( + B46E429745DDFCAA08E329F0BBAD9911 /* GBAEmulatorBridge.h */, + BD71FA05AF33D2016379AB441E9DA7FD /* GBAEmulatorBridge.mm */, + B4344D31A95675A878EB6C78C263B86A /* GBASoundDriver.h */, + FB0C2D29320490068714E3A307C890F3 /* GBASoundDriver.mm */, + ); + name = Bridge; + path = Bridge; + sourceTree = ""; + }; + 57BA860878D3D42DD09ED8AD2C301234 /* GLideN64 */ = { + isa = PBXGroup; + children = ( + 143C0F8B6FB554B8F3D7C2A274CC8DE0 /* src */, + ); + name = GLideN64; + path = GLideN64; + sourceTree = ""; + }; + 580EBE0D599F965BCD5FEA6B94CC9EB1 /* osal */ = { + isa = PBXGroup; + children = ( + 6487DFB243D65653DF7438DCBA67EB91 /* osal_files.h */, + 66814AC3B3C466A4870833B7CC41BE34 /* osal_files_ios.mm */, + ); + name = osal; + path = osal; + sourceTree = ""; + }; + 58F07D61FDE0834ED66502D65AC7EE55 /* Conflict */ = { + isa = PBXGroup; + children = ( + 9D47FC12A026C951220B49A834F51276 /* ConflictRecordOperation.swift */, + 73B5114410208E3603B7C257E4448663 /* ConflictRecordsOperation.swift */, + ); + name = Conflict; + path = Conflict; + sourceTree = ""; + }; + 596535202E734026974895E0637AE168 /* Support Files */ = { + isa = PBXGroup; + children = ( + 6D98E76BA27C3752F885C66312189CB2 /* SMCalloutView.modulemap */, + E7774915A9F77830DE8F037188D1A4F7 /* SMCalloutView.xcconfig */, + 014989F31F4E364C9128F07C0637CA70 /* SMCalloutView-dummy.m */, + E0F1902545FB22A0EF0B1A987A6C9D43 /* SMCalloutView-prefix.pch */, + B70989044B91229B1C51B5758D9F96E5 /* SMCalloutView-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SMCalloutView"; + sourceTree = ""; + }; + 59F4B66B2826CD0DDB1EB45197BD17E0 /* inc */ = { + isa = PBXGroup; + children = ( + 53A3C2A5341545B46CCEF6C7DCCC3D12 /* callbacks.h */, + 2C0CA4A2A069453672147E331C600848 /* debugger.h */, + DDE3998515C1E572211C2A5EEE7EF068 /* m64p_common.h */, + 38ADDB2045DD7DB1E4811DC4854871C1 /* m64p_config.h */, + 08B17046C01595A0433E18CDE7B926A2 /* m64p_debugger.h */, + ADD476D53B05AEB62DBF869AA71DBE2E /* m64p_frontend.h */, + C5A02908B90AD54C8C621F1E9A36CB18 /* m64p_plugin.h */, + 260430D1061CEEA26EE73673BC86F350 /* m64p_types.h */, + 2CCF7001F83E60B5C530A3D02B918FE9 /* m64p_vidext.h */, + F92F2C5B0F87637AD604C89BF6D32190 /* freetype */, + 43B8C16CA1C717105AD67D3449A6EA38 /* GL */, + ); + name = inc; + path = inc; + sourceTree = ""; + }; + 5A1EC0892B1F779E42BA265C6547D2BD /* data */ = { + isa = PBXGroup; + children = ( + DFD30F6DE5762FE7D5CEA0AFE95ACACB /* mupen64plus.ini */, + ); + name = data; + path = data; + sourceTree = ""; + }; + 5A73536B2E3D5A586084E6316E2725FA /* Extensions */ = { + isa = PBXGroup; + children = ( + E296E015D17F062AF04EB6010FF3D61E /* Bundle+Resources.swift */, + BB52AEE6F8BD7BDA6E88E263AE184CC3 /* CGGeometry+Dictionary.swift */, + 4D0235C98A504B6ACCDF616BA0368556 /* CharacterSet+Hexadecimals.swift */, + 3A3B202DC9824A439BA7432E3C5B9DB8 /* Thread+RealTime.swift */, + D529199D3F461EACEE4D0D45FA961BF4 /* UIApplication+AppExtension.swift */, + 78323C76AFE569F46E583A2E3461F6E8 /* UIDevice+Vibration.swift */, + 00CE3BB55A661517FBF455927EB5D945 /* UIImage+PDF.swift */, + 5C912B946BDF259EF135410F6A5237EA /* UIResponder+FirstResponder.swift */, + 422BF12649973F5EF2DBFD89FD150DC9 /* UIScreen+ControllerSkin.swift */, + ); + name = Extensions; + path = DeltaCore/Extensions; + sourceTree = ""; + }; + 5AFAA8FA90B64741C5F3169D7938790B /* include */ = { + isa = PBXGroup; + children = ( + 424C8989A47713EDE517CF1CDBCE2747 /* SFML */, + ); + name = include; + path = include; + sourceTree = ""; + }; + 5B48C5A139E2AF535B4363EC8D3369C2 /* GLideNHQ */ = { + isa = PBXGroup; + children = ( + 5974CDB2492B4BFA5566A1D118F12B98 /* bldno.h */, + FC1899B3A2064A321C87961972F926A9 /* Ext_TxFilter.h */, + 6AA8B9D838C07E38061D4BB84F3D8B62 /* TextureFilters.cpp */, + F01F27F2E59C49CFECBCF50045F0021C /* TextureFilters.h */, + 32CD48452BE99C82FE043939384E2531 /* TextureFilters_2xsai.cpp */, + 3F714F0736F9866EDD6871679177CF33 /* TextureFilters_2xsai.h */, + C95F862EEE33E2358C6B0273BBF456D1 /* TextureFilters_hq2x.cpp */, + 85B0ECFFCE6A9F6387533730061A1A7A /* TextureFilters_hq2x.h */, + 619F66C6C65A42C014C9700FAB9316F8 /* TextureFilters_hq4x.cpp */, + 2ECDC95F1D25F3D0FDE01C632C5EEE7F /* TextureFilters_hq4x.h */, + F832E6227B7F9677B7AF38BFB58A5A09 /* TextureFilters_lq2x.h */, + 48CCDAD2D88669095B44ED625F56D7D0 /* TextureFilters_xbrz.cpp */, + 452F83D3A133C01B2A14268F26D6EB29 /* TextureFilters_xbrz.h */, + 11C5EB86C8B5D063931113BD696A449D /* TxCache.cpp */, + 8C0B76FEDF3385F8F3AF9A682EC0E276 /* TxCache.h */, + EA340C7B4D3388A8450F9A24994AB881 /* TxDbg.h */, + 320B83F85351687CBC80A3C6FC74440B /* TxFilter.cpp */, + 8AA718DD7968CE1C58CD34313E5FA869 /* TxFilter.h */, + A0CC765A71526F79EBBC52C4FF79559D /* TxFilterExport.cpp */, + 98429553652599A6220233E3F8D224FD /* TxHiResCache.cpp */, + BE3BB976C21C71194C0B3D42717A0917 /* TxHiResCache.h */, + 3B05FC42F83ADA41DEED532540CD7174 /* TxImage.cpp */, + BAC79183F81C91B3272AAD8FC4B608B5 /* TxImage.h */, + B0A321F5CF3FAD29047B4FF624618004 /* TxInternal.h */, + C5D68576CC0EE04A78AE791897AFD780 /* TxQuantize.cpp */, + 4E413CD260AC5D4938501D07A19728DF /* TxQuantize.h */, + 205D59098479C96A36856ACF72D6AF7C /* TxReSample.cpp */, + 6AA904F6B4EABFBD175084421003EB09 /* TxReSample.h */, + DCA41822F3659F65C03D6B0D418F612B /* TxTexCache.cpp */, + 8FB4CA94B76B2411E5EE78414D82B20E /* TxTexCache.h */, + 50A10752DB4054391124647027696A55 /* TxUtil.cpp */, + 2E57F66FFEB81B1218E882DC67DDCD97 /* TxUtil.h */, + E721311C13AE68B2699A1D4C03214451 /* txWidestringWrapper.cpp */, + DC46D472713AEC4054D4A5794AAC802C /* txWidestringWrapper.h */, + 458060462E570AF0419D767088046F1D /* inc */, + ); + name = GLideNHQ; + path = GLideNHQ; + sourceTree = ""; + }; + 5E17B37210FA8ADA5462EB3753473933 /* GTMSessionFetcher */ = { + isa = PBXGroup; + children = ( + F6A9098AC3B032DB857E0C78F0204F56 /* Core */, + DA240A8FD97B3ED8577A771641432A34 /* Full */, + 0440A98D7604CC8535F9CEA5EDA8CF08 /* Support Files */, + ); + name = GTMSessionFetcher; + path = GTMSessionFetcher; + sourceTree = ""; + }; + 5EDFFBA74A4D2E7501881A25047D5BD8 /* Controller */ = { + isa = PBXGroup; + children = ( + 8EE05B7A52F5A35ED15F9580C4144EC6 /* ButtonsInputView.swift */, + C2472287C41451AFFEC020183BD042A3 /* ControllerDebugView.swift */, + 399024492430E7258571697FBE41E931 /* ControllerInputView.swift */, + FE17B4BADFE9DF6A6CCAF0CF0BE25D9F /* ControllerView.swift */, + EB1DC75CE747381BA8AA66BC31541BCF /* ImmediatePanGestureRecognizer.swift */, + EC9DD621FC3DC24A24E27BD8B1C292AE /* ThumbstickInputView.swift */, + 0D2FEA2156756F729E3BD6869EBAA42E /* TouchInputView.swift */, + ); + name = Controller; + path = Controller; + sourceTree = ""; + }; + 5FC73EAD32863F7C79A708AF761CF3BD /* Types */ = { + isa = PBXGroup; + children = ( + 81A8FD9E119F896E60B2564D9D8761CD /* GBCTypes.h */, + A0E180FFBDDF6AD6D35795FD64A7222B /* GBCTypes.m */, + ); + name = Types; + path = Types; + sourceTree = ""; + }; + 61E723CAF793205951264CB8D0EFB28E /* tools */ = { + isa = PBXGroup; + children = ( + CF6CFBF5D3D08E7081D6FE7FC32A40AE /* sRGB.h */, + ); + name = tools; + path = tools; + sourceTree = ""; + }; + 654415BCD38185588B5CEFEC6E03DA33 /* controllers */ = { + isa = PBXGroup; + children = ( + 66403032D229EFE419B1F624D8E3A6AE /* game_controller.h */, + 918A4DE28AA523D70FEF2E295C999644 /* paks */, + ); + name = controllers; + path = controllers; + sourceTree = ""; + }; + 67729C4B61A9E5087982AA63B6CE8345 /* PublicApi */ = { + isa = PBXGroup; + children = ( + 6E7AAD31402E31872C9054EB4185634A /* android_hardware_buffer_compat.h */, + 7887B596C85B88D5126C1D115B8C9582 /* check.h */, + 133FFF074C7375B30FD28DFF38BE260D /* dcheck.h */, + ); + name = PublicApi; + path = PublicApi; + sourceTree = ""; + }; + 6A9FECAC90D84DC9C2E44FC9199B87EB /* preader */ = { + isa = PBXGroup; + children = ( + 2446C10AA94654AF8E1C4ADEB9142AD5 /* pngusr.h */, + ); + name = preader; + path = preader; + sourceTree = ""; + }; + 6AAF9BCA07572C16100992B0162BB1E3 /* Operations */ = { + isa = PBXGroup; + children = ( + FBEB0C887336CD9006A57A0852F915DA /* Operation.swift */, + 412DB502B74306CF8DF0466A42864A4E /* ServiceOperation.swift */, + 9EFA3B9D1B35DA0B89C71DA1D01B3B45 /* SyncRecordsOperation.swift */, + 58F07D61FDE0834ED66502D65AC7EE55 /* Conflict */, + A3EA455CA1E4E1F9431E9263CF4851D4 /* Delete */, + A53A8976966BE4B7422DB18F3103BEA2 /* Download */, + B7610810046C36DD994B73E0DE4BBCD6 /* Misc. */, + 11AE318CBF1950592491D3ACDEC304CE /* Parent Operations */, + 7B4E56E8923910A3E4CEBB5E99DE0541 /* Upload */, + ); + name = Operations; + path = Harmony/Operations; + sourceTree = ""; + }; + 6BF38915B447FF940372C7FC2ED1EA2B /* Harmony */ = { + isa = PBXGroup; + children = ( + C2A44DFFD1971B44F0D03A3B9D7CEC57 /* Harmony.h */, + 8A542F20E7647EA7B36CB7C0565E279A /* SyncCoordinator.swift */, + DB8A6C1671C08CF27B21D36E389F1DE9 /* Core Data */, + CB7244FAF13430D229B19F209370E22A /* Extensions */, + 195200B355430B200AB0DBC8B4ABC0FE /* Harmony-Drive */, + F91F7362204553708071F1921C34C1F1 /* Harmony-Dropbox */, + B5BCA0B7CD47A78DA5B1697D5B40975B /* Model */, + 6AAF9BCA07572C16100992B0162BB1E3 /* Operations */, + 4D05B91E3529B56406824FF9DA8149F2 /* Pod */, + 3940BB7F493B1F4452B0290020CCEB56 /* Protocols */, + FBC6B86C478D8F97A3E884A748B232F0 /* Resources */, + 37F897955AA49811B78966F0084F182B /* Support Files */, + 994080062D06BE26E947CF4A4A776626 /* Types */, + ); + name = Harmony; + path = ../External/Harmony; + sourceTree = ""; + }; + 6DC616D796514D50D411256803FA009E /* minizip */ = { + isa = PBXGroup; + children = ( + D0869A5AC273020F28A83BEFF3F355D3 /* crypt.h */, + BD629D406305184DD39F018AC48C58E7 /* ioapi.h */, + A5549F772937B547424E53A87C4959B4 /* unzip.h */, + 222369BCAE458E6A21F1C9AEE03983ED /* zip.h */, + ); + name = minizip; + path = minizip; + sourceTree = ""; + }; + 6E3B1B87720B12D224BBA827A8147857 /* Types */ = { + isa = PBXGroup; + children = ( + CD01747A1D135D8C97DBC34B3BADEEA8 /* ExtensibleEnums.swift */, + ); + name = Types; + path = DeltaCore/Types; + sourceTree = ""; + }; + 6E3F94BFF62C194BE0258DBEB0D157F5 /* Emulator Core */ = { + isa = PBXGroup; + children = ( + BE235836DD079740208A4AF1D7DB9F35 /* EmulatorCore.swift */, + 3075365372BC210E9C1E4F40E26C5BFC /* Audio */, + DC3020A2448B8055BB5E80F16F525BE6 /* Video */, + ); + name = "Emulator Core"; + path = "DeltaCore/Emulator Core"; + sourceTree = ""; + }; + 6E412BAEDBF8A6DDC4DF29F84D4A7289 /* Controller Skin */ = { + isa = PBXGroup; + children = ( + 6630BB30C19291FAB71F19904132A2FB /* Standard.deltaskin */, + ); + name = "Controller Skin"; + path = "Controller Skin"; + sourceTree = ""; + }; + 6F0B83131829471EC8237B841FD21515 /* SMCalloutView */ = { + isa = PBXGroup; + children = ( + 1F77D5D789D6454A73C3D19E2727B786 /* SMCalloutView.h */, + D9E62A3E87A152D8A5A4747A0E88F317 /* SMCalloutView.m */, + C9B5A75174DE7C7B4A535B3A42D6239C /* SMClassicCalloutView.h */, + A6490A0F3B24176875D7C923ED9E0958 /* SMClassicCalloutView.m */, + 596535202E734026974895E0637AE168 /* Support Files */, + ); + name = SMCalloutView; + path = SMCalloutView; + sourceTree = ""; + }; + 6F1AA42E253D4B3FE8E609EEB5631BBD /* snes9x */ = { + isa = PBXGroup; + children = ( + 816D92F12BC3698BEE8F45620FB157CC /* 65c816.h */, + 23C48688B8A512FFB646E121E3FD49DF /* bsx.h */, + 0B7FEA4E81066CF6432FBD99B31C13B8 /* c4.h */, + 17878ECFAC417AC4ABE2928837CDE2B3 /* cheats.h */, + 5CD922BCE2DF46F11E7202475E037EF6 /* conffile.h */, + DF75CDA06A2F599F32A8F0E05EEF39FA /* controls.h */, + BABB271F3BD66B98A48FF2230E57E168 /* cpuaddr.h */, + 1427093FF23F46B310155A7F63393171 /* cpuexec.h */, + CA99918A66499B3FD57B4BE6A2985044 /* cpumacro.h */, + 5DBAD979C7A7D60BB2463567CEF807D0 /* cpuops.h */, + 4BD2DEDB678D75D5ACAAB02F7DA550CA /* crosshairs.h */, + 71F6E550519668062C1B78FCF1BBCEA0 /* debug.h */, + EB1C41ECAFCB4B62AC6DB322A26DDBCB /* display.h */, + CBE1D5062813EDF33B5FBD108CA1A88C /* dma.h */, + FF46137EDAAC9DD905A8E9D0602099DB /* dsp.h */, + 60655F2593406B5777F801C875F02F75 /* font.h */, + 24E1A25642D89F5B30A1BB2FB864AFA7 /* fxemu.h */, + F92CC3DB4FB3E1C8CB02FF550968E5DD /* fxinst.h */, + 0D713472AF6AAB8E1D9ABC6D7A61B49B /* getset.h */, + C9E53CDEE3FB0C997231AFF0EA62A9F4 /* gfx.h */, + EE4444EAFD33EB8BAB4FCBCD65A8446A /* language.h */, + 3A4016B959B9C2B70E21D27AA4439760 /* logger.h */, + C5E44048879A0504939654F65166654C /* memmap.h */, + CE46BF9BB2E03B58F53E69C87B3A1564 /* messages.h */, + C8A210C3B60C6D8D12F6F8820EF28589 /* missing.h */, + 931FABEC117CE8C4B00CF9281008FAC6 /* movie.h */, + 3B254FADF7513993D3F7353F6B8F1395 /* msu1.h */, + 4E7E27D5ACEAA8A8DA1B1BD200ED75A2 /* netplay.h */, + D6CAAD3D41D505A55D4926BAF41AF958 /* obc1.h */, + 86D90CE2D6B95B2AA99812247EC3691B /* pixform.h */, + D26E750E5A5772E0667870225E0F7C1B /* port.h */, + D9ED4C71C3016ED3FC4BA58AD0F23387 /* ppu.h */, + B0652246947AE2743F7B21B7464BAB5E /* sa1.h */, + 15EAE2283516A3200D537010AA0BBCF9 /* sar.h */, + 634114A0217955A80057DD03929C6053 /* screenshot.h */, + 99EB232B4913EA46C51277C86DF16B8D /* sdd1.h */, + ED04A2B8DBDC30DD89B8DB99DD186974 /* sdd1emu.h */, + 94228059341CBA18109047D570DAEA1A /* seta.h */, + F1B217B4E1DE3906B3076571296DFF09 /* snapshot.h */, + AF827FC48147DE18B9FB7A80EA33C3FD /* snes9x.h */, + A05A1526F5B055B18305FA115EF3E9A1 /* spc7110.h */, + 539542F40794BD9C9D5856536A7CA2EC /* spc7110dec.h */, + 2773A5A159F5DFA0A928E49F68CC6E2D /* spc7110emu.h */, + C790529DABD6E54A2BA3E56B1C845F12 /* srtc.h */, + BF56520AA924EF4F971217A9D8F49143 /* srtcemu.h */, + 4E9E01B822B1A73A97B8C2E46EDEF08A /* statemanager.h */, + DBAA90C42D53B3B86801C3ADD7C2CC2A /* stream.h */, + 1E62A12C767331BC621336E59054040F /* tile.h */, + 3958CCBE1C4FE437EB8762E6E7E7CBB4 /* apu */, + ); + name = snes9x; + path = snes9x; + sourceTree = ""; + }; + 6FA6999353DEF6348ACBC4CE9C584F58 /* mi */ = { + isa = PBXGroup; + children = ( + 914481AFB63938A5A293F3B322F5FD91 /* mi_controller.h */, + ); + name = mi; + path = mi; + sourceTree = ""; + }; + 6FBA49B1C6CAD3E9EDC15F4663849FC0 /* Support Files */ = { + isa = PBXGroup; + children = ( + 2E2D966C0A00ADF6CBAED222AD054CA8 /* Crashlytics.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/Crashlytics"; sourceTree = ""; }; - A9629B79CC2703CA0F368EB6BC2E25E8 /* SQLite.swift */ = { + 6FE57C2C800C9D78F2ED2F067BDED53E /* ai */ = { isa = PBXGroup; children = ( - 2D4929B07637C41A607B5026C51BFB9A /* standard */, - 990F2974B835D8D5BDEDA100EC8319F1 /* Support Files */, + CFB8F56FBC758AE2588C1DD814A5F9D6 /* ai_controller.h */, ); - name = SQLite.swift; - path = SQLite.swift; + name = ai; + path = ai; + sourceTree = ""; + }; + 6FEE718F6FFE5384C3777E89C1A2F82E /* System */ = { + isa = PBXGroup; + children = ( + 52CF632514D6A787809AE4E842F41C5E /* Clock.hpp */, + FDCE262FF472DECC637657F3849A293C /* Err.hpp */, + 050EF16DAA3290D00AA4795AD24E1921 /* Export.hpp */, + FCC13C918B0DF97D6202A60A3DC17CF5 /* FileInputStream.hpp */, + FC1CF3E36F8504F4DCC758CF61B97CAE /* InputStream.hpp */, + A0C45B1398394AA1FEB5A3FCD517E92D /* Lock.hpp */, + 173F53675D53F79BED6F8E8D2FB1D09C /* MemoryInputStream.hpp */, + 9F97A82B4B62F88A9ABDCB471BD4E255 /* Mutex.hpp */, + 48A852C211E587038DA4AA46F7C9B164 /* NativeActivity.hpp */, + 56359FB46FDD3587DC048FBE0BC7E9E1 /* NonCopyable.hpp */, + 33B4914FDB89C5B28445FE64AA86085E /* Sleep.hpp */, + 4DC0729F6C80B77D9248BFEFE0B0F039 /* String.hpp */, + C77DD7055BE2E940CB49A8B0F10A472F /* String.inl */, + 90E20CF10E66ADE35B580C23C72D76A4 /* Thread.hpp */, + AF9B8513D3E4438D5136203FCF9D99E5 /* Thread.inl */, + F586E6135CA6E3F0C67A2EAE0344D88F /* ThreadLocal.hpp */, + F1ED211A27FC73A088DC43D3FF931A16 /* ThreadLocalPtr.hpp */, + B57DE6F8DC52A0DF6FA63026114732E6 /* ThreadLocalPtr.inl */, + 5F4BA7A7D97044CD5A2BE415D287BEC1 /* Time.hpp */, + 187D4D612762D2AF1FECAFF87EFEA7CA /* Utf.hpp */, + 8DDA3FCC5B59298F8FF38E7914D03FB0 /* Utf.inl */, + DBB26A9F3AD2F7159A0C7E893521DBCA /* Vector2.hpp */, + 32498379B364CA72F850FD7D3200CF6B /* Vector2.inl */, + 40C9A47942EB199AC851986CB149BF7F /* Vector3.hpp */, + BF94EC77DBC5DFAC5751843F5F04C129 /* Vector3.inl */, + ); + name = System; + path = System; + sourceTree = ""; + }; + 7209A91034D3EFAFB68287C9E0860F8B /* desmume */ = { + isa = PBXGroup; + children = ( + 3947B40AEF7771B4A4C8CB9580BFE4B9 /* src */, + ); + name = desmume; + path = desmume; + sourceTree = ""; + }; + 7312C81CEF3F2AB59009C8D0DBCA6307 /* Resources */ = { + isa = PBXGroup; + children = ( + D1E6CF2256BF01CFCB8C7C6BB1D101FE /* RSTCollectionViewCell.xib */, + B3701068412FCD905D962E33387C2680 /* RSTPlaceholderView.xib */, + ); + name = Resources; + sourceTree = ""; + }; + 756FE505CC37B6C3C2393B16D9FB6318 /* Resources */ = { + isa = PBXGroup; + children = ( + 1708CC47B44B29F11E1399CFC0321DC7 /* Standard.deltamapping */, + 4D9195AC400DB755A053EE8F3AF59DAA /* Controller Skin */, + ); + name = Resources; + sourceTree = ""; + }; + 7575F2E08696B62C99622BDEFC7F139E /* NestopiaJS */ = { + isa = PBXGroup; + children = ( + 16493B09A57A9904E0843D5268271785 /* NESEmulatorBridge.cpp */, + ); + name = NestopiaJS; + path = NestopiaJS; + sourceTree = ""; + }; + 76188A77CA519378F94C4A102F002622 /* N64DeltaCore-Video */ = { + isa = PBXGroup; + children = ( + 7174246F378A58D37BD4927CEE3799A4 /* plugin_delta.cpp */, + 9DFC0EF480A5361B80E075558EEDEDEE /* TxDbg_ios.mm */, + ); + name = "N64DeltaCore-Video"; + path = "N64DeltaCore-Video"; + sourceTree = ""; + }; + 764CBED5851C0D2B20C8C32A1379B406 /* win32 */ = { + isa = PBXGroup; + children = ( + 5EE59BD5CCE08A1257054978F5F52E22 /* Dialogs.h */, + ); + name = win32; + path = win32; + sourceTree = ""; + }; + 77DE8B3A59B3AEA94EA1936289EFD550 /* Game Controllers */ = { + isa = PBXGroup; + children = ( + 93910D17E45B6F0DD31F72703A5A2651 /* ExternalGameControllerManager.swift */, + B7C961F0CF8CC2E98500C8E3DA3C6F56 /* Keyboard */, + 27404E771822F8CE1A70EDB526C8D2C8 /* MFi */, + ); + name = "Game Controllers"; + path = "DeltaCore/Game Controllers"; + sourceTree = ""; + }; + 77EC95F113FE3910D426C200FE0A8515 /* Mupen64Plus */ = { + isa = PBXGroup; + children = ( + 20866A2BE0BCA7D1C914AC07CD1C0CE5 /* mupen64plus-core */, + ); + name = Mupen64Plus; + path = Mupen64Plus; + sourceTree = ""; + }; + 78D34056D179147F7BC9585C1F1EF02A /* SoundTouch */ = { + isa = PBXGroup; + children = ( + F57889A91C00957E173557D366708F01 /* AAFilter.h */, + 912A34EEAB2393779814319C7BDDC198 /* BPMDetect.h */, + E21A90A7C4C571865F8859DE15FB6A94 /* cpu_detect.h */, + AB065A0FEDAFF486E7DA04E1936E82A1 /* FIFOSampleBuffer.h */, + EF6779B78D5B9B6019F29579F2C1C894 /* FIFOSamplePipe.h */, + 77934694A34ABBAE5B4157E7F028F45C /* FIRFilter.h */, + 9AFAB5260C27DEE351813C7122CD4AF4 /* RateTransposer.h */, + 9300FDAE5D36EBEB31F93D3C7215E806 /* SoundTouch.h */, + 2013712F504FC10A75B32DB78638B56B /* STTypes.h */, + CFE10B16B0C4C7D24E899A604244116E /* TDStretch.h */, + D8E275522B55AF9B007FC628DA27411C /* WavFile.h */, + ); + name = SoundTouch; + path = SoundTouch; + sourceTree = ""; + }; + 7926FD059B798BB1F06B8F20B9E7E4C0 /* vi */ = { + isa = PBXGroup; + children = ( + 115E4BA52EDB4A7B8117F27B828EF3DC /* vi_controller.h */, + ); + name = vi; + path = vi; + sourceTree = ""; + }; + 79E87841C009AFEB7C6BD7F59E5A607D /* Resources */ = { + isa = PBXGroup; + children = ( + 9C8507D47BD97C259CB67E95B0055BCC /* Standard.deltamapping */, + CC9B157823AAED29576D5EE732798383 /* Controller Skin */, + ); + name = Resources; + sourceTree = ""; + }; + 7A0257A6FA12DDD23AEAE728454C6E89 /* Filters */ = { + isa = PBXGroup; + children = ( + 3919DEC2EE937226ECE6A9846B2DA0D4 /* FilterChain.swift */, + ); + name = Filters; + path = DeltaCore/Filters; + sourceTree = ""; + }; + 7A56E1DB35E017BCAE6D16398994B424 /* subprojects */ = { + isa = PBXGroup; + children = ( + 3EAFDF2E9706DE038061C9E5CBE261F1 /* md5 */, + 6DC616D796514D50D411256803FA009E /* minizip */, + A27A1F5197BC2DC2E555618CFCF821AE /* oglft */, + C31EFB83C698738C5AE9C0BF6CC3B679 /* xxhash */, + ); + name = subprojects; + path = subprojects; + sourceTree = ""; + }; + 7B4E56E8923910A3E4CEBB5E99DE0541 /* Upload */ = { + isa = PBXGroup; + children = ( + 276E27532E9C2ADF0C058B16208B439C /* FinishUploadingRecordsOperation.swift */, + 61B9452797C7F91FF8966E5CB4C041E0 /* PrepareUploadingRecordsOperation.swift */, + 3A8697A847DE43FFACD393D2A7A9B84E /* UploadRecordOperation.swift */, + 6768756BD63AFB81ABEB6934A427CA39 /* UploadRecordsOperation.swift */, + ); + name = Upload; + path = Upload; + sourceTree = ""; + }; + 7D0D072173D1C15941C0153AB542E28D /* Controller Skin */ = { + isa = PBXGroup; + children = ( + 6DF6C3B7940689905856C5444F2A0E35 /* Standard.deltaskin */, + ); + name = "Controller Skin"; + path = "Controller Skin"; + sourceTree = ""; + }; + 7D413C8203E7C6174958FB2BE5ECF546 /* libDeSmuME */ = { + isa = PBXGroup; + children = ( + 7E0F32F5D4B36915598F0AD7BB83F6A3 /* pcap.h */, + ); + name = libDeSmuME; + path = libDeSmuME; + sourceTree = ""; + }; + 7F5D6DC3FB853BF3A979D7FD9ABC1979 /* N64DeltaCore-RSP */ = { + isa = PBXGroup; + children = ( + FA255603CDB62A95F35F477E2F0D208F /* plugin_delta.c */, + ); + name = "N64DeltaCore-RSP"; + path = "N64DeltaCore-RSP"; + sourceTree = ""; + }; + 80AEC6AD356F82726370FFA4422B0E6A /* rcp */ = { + isa = PBXGroup; + children = ( + 6FE57C2C800C9D78F2ED2F067BDED53E /* ai */, + 6FA6999353DEF6348ACBC4CE9C584F58 /* mi */, + D5418A693FAB0FDDC317EB3D01B003EC /* pi */, + F9061D0E4A60F9CAA6C2BAA0D3980F65 /* rdp */, + 304255FE83E88222A8624B2298155DDB /* ri */, + 90233FB8AF2436EC459CF5C8E6D51F94 /* rsp */, + 44774FEADB9DBAB7FA8987857610D470 /* si */, + 7926FD059B798BB1F06B8F20B9E7E4C0 /* vi */, + ); + name = rcp; + path = rcp; + sourceTree = ""; + }; + 82A9E1362EC484F9CE92176528B57B01 /* GoogleSignIn */ = { + isa = PBXGroup; + children = ( + B281BE06734FFC663D472DB785580878 /* Frameworks */, + C6F858C615D55996D75807A9981F1A5D /* Resources */, + 0B3144581B79B95A58BB0A6AE3D4DC9F /* Support Files */, + ); + name = GoogleSignIn; + path = GoogleSignIn; + sourceTree = ""; + }; + 82D8A69FF325F605A136ADB6BAE9A4D2 /* Resources */ = { + isa = PBXGroup; + children = ( + 8DC46E7D667B05E526897085BDA6A68F /* KeyboardGameController.deltamapping */, + 2E8023826B8975C217D59F5E61A8DCEA /* MFiGameController.deltamapping */, + ); + name = Resources; + sourceTree = ""; + }; + 82FBA2B67465A45C1675F8BEE3D6FAFB /* SFML */ = { + isa = PBXGroup; + children = ( + B0D3B6EE16BA2B820E0866B0FE4C20D1 /* System */, + ); + name = SFML; + path = SFML; + sourceTree = ""; + }; + 8450BA83ACAB8B4A0AF901068ECB6A39 /* Bridge */ = { + isa = PBXGroup; + children = ( + 3C4B8A5D7D056FB02966F159AFC5E9F4 /* DSEmulatorBridge.mm */, + ); + name = Bridge; + path = Bridge; + sourceTree = ""; + }; + 84741B209E5F78CDFCE6328319563A75 /* Audio */ = { + isa = PBXGroup; + children = ( + 4EDFE6FDF5489F61CF533AAB848DEC32 /* AlResource.hpp */, + F714A4D1AA8175D9A02FDB1EB0AC9E0B /* Export.hpp */, + 6B525F9D23FEA3BE925293A80FEC7DCC /* InputSoundFile.hpp */, + 416AB7C47B6BD20BDB570AFCF32DA07F /* Listener.hpp */, + 412BAE19C4FAEF8D92FCDC3FF9A59FED /* Music.hpp */, + 6E03BC1605808403D83828FBCFBE7F28 /* OutputSoundFile.hpp */, + 2BCCA563115C1ABD0F6BE0FC0B3CE00B /* Sound.hpp */, + 6A6E6BA6F73F029637AC87BB994DE38D /* SoundBuffer.hpp */, + 0C27F2E27F1106463E57DFEED760FFA8 /* SoundBufferRecorder.hpp */, + A03596855FA5527E9DFD553107E7283A /* SoundFileFactory.hpp */, + 8A624FFF16B311D8F1A19BE7C8EC0DAE /* SoundFileFactory.inl */, + 95B34037E8B652335969759E49B0F3B4 /* SoundFileReader.hpp */, + D9BE76A56BCD866A71FD891640A0940C /* SoundFileWriter.hpp */, + 3791E485D89113AC4B25ADE046DEE5D1 /* SoundRecorder.hpp */, + D17E68802F2F252D95693D1AA5ADC144 /* SoundSource.hpp */, + 288D4255C025E9AE120B756ED3D79848 /* SoundStream.hpp */, + ); + name = Audio; + path = Audio; + sourceTree = ""; + }; + 84DF79C3FE14B70A40597DED4FFC8BFB /* Graphics */ = { + isa = PBXGroup; + children = ( + 5FBF0DA69F6371EE6C6D63D8001D8D95 /* ColorBufferReader.cpp */, + 9B75443503A9FFE2C23D1ACE270C81B1 /* ColorBufferReader.h */, + 9D8C6B600EB0F6E81ED97BC1F30272D4 /* CombinerProgram.cpp */, + 8CC4973A6BF6AFF9D8562E7A4E9AE4D8 /* CombinerProgram.h */, + D95AA79C2C5088E9B27BAAA9444850C2 /* Context.cpp */, + A0F5D17654F47036B94A567F870E2CFF /* Context.h */, + B7B0EC3A43195D2E933C1849423260A4 /* ContextImpl.h */, + 6C86335713D20D759954CBB00EC6AEC3 /* FramebufferTextureFormats.h */, + 4C1AEA30A7ED0128954BF3C163D0526F /* ObjectHandle.cpp */, + A37542A2D1F6B0496F72D1B87245F461 /* ObjectHandle.h */, + 5B314596089C9694EA48772E604953E9 /* Parameter.h */, + 1968B2F2911EF5F0444088854F57F746 /* Parameters.h */, + 3CE468B2DBAC6E3109B9A6E529ADACA1 /* PixelBuffer.h */, + 74FAEBE92C3B0B35D90248D577885466 /* ShaderProgram.h */, + 9430AEFB4802252C34C1DB6B1C6A8C9E /* OpenGLContext */, + ); + name = Graphics; + path = Graphics; + sourceTree = ""; + }; + 852E660B5C556492569CAB8892FB9629 /* Products */ = { + isa = PBXGroup; + children = ( + 54ECA01A22C32DC89AB39DF9BFFD5FB6 /* DeltaCore.bundle */, + 4A6CEB53419EF6042E06B56676D1DAF8 /* DSDeltaCore.bundle */, + 30131336E11D11700AC99D314BDC275C /* GBADeltaCore.bundle */, + 1F23DBC67505E77BE77552D6D84A3DAA /* GBCDeltaCore.bundle */, + 5D797E9A5C5782CE845840781FA1CC81 /* libAlamofire.a */, + F93477FBF1E4488E506F9BB79AF57D38 /* libDeltaCore.a */, + 8DF503EB5BF2CD824792BFD2BBC0992F /* libDSDeltaCore.a */, + 85A4BD81985AEDB6D9BA5E50804225D0 /* libGBADeltaCore.a */, + D4C010E8572FAE8B51DFDBF2300ECF30 /* libGBCDeltaCore.a */, + FD519882861480B93B563B477CE1FA29 /* libGoogleAPIClientForREST.a */, + 251C6319AD50CB50F18D50CBF727F8B2 /* libGoogleToolboxForMac.a */, + C1998E0D8085221AD87F89B614C10E52 /* libGTMSessionFetcher.a */, + DBC0113CF73BE24525E670D024A85BE7 /* libHarmony.a */, + C8D6AC695498645EEE4A66FCEF97D848 /* libN64DeltaCore.a */, + 1E5356E04E92615CFF0666E5987CE594 /* libNESDeltaCore.a */, + 9CA80A61ABF26FA89F4E22A30284B0DD /* libPods-Delta.a */, + 4405793D5AF1EFD9D2BDA30AA0D2E514 /* libRoxas.a */, + B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */, + 53A730F4F4248E7E3F38F8409A2DE97C /* libSMCalloutView.a */, + FA400832D3E46B39D5EC83D09A7572FC /* libSNESDeltaCore.a */, + F5FA45A44C42CC2CA3A324A3E914CE19 /* libSQLite.swift.a */, + 1CBA76EDD27FA2D20B1EA0F0BF7F082C /* libSwiftyDropbox.a */, + 48A4A6EDC08C8AC933D0DCD507E9D173 /* libZIPFoundation.a */, + 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */, + 487C7DB0A7257F16983BEF8324BEF561 /* NESDeltaCore.bundle */, + 7D751206A951D9727B38F71A2BB990AA /* SNESDeltaCore.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 854984175C84061DD74B5A244FB3F9F0 /* Defines */ = { + isa = PBXGroup; + children = ( + FC141D48A65D77B26B9922807BD281CC /* GTMDefines.h */, + ); + name = Defines; + sourceTree = ""; + }; + 864B75D4D6EE78F454DD5FB1109B02CB /* GBCDeltaCore */ = { + isa = PBXGroup; + children = ( + F458848778BD2CA388B2DC820968AECB /* GBC.swift */, + DA034BCB2E1E7F757B0973F79CA6BD70 /* GBCDeltaCore.h */, + BB06181522252080746B32370099C5F0 /* Bridge */, + 23D8FA654377883445CD0B0B1A2468DD /* Model */, + 5FC73EAD32863F7C79A708AF761CF3BD /* Types */, + ); + name = GBCDeltaCore; + path = GBCDeltaCore; + sourceTree = ""; + }; + 87679170C148493B95764D8305DB2180 /* GoogleAPIClientForREST */ = { + isa = PBXGroup; + children = ( + 0ADE917FC3C2CDD395AFC7E009EF576B /* Core */, + AFDC797217CD201CEA4BA73665645D2F /* Drive */, + 4CB096438D1D6504B19EF054D622999B /* Support Files */, + ); + name = GoogleAPIClientForREST; + path = GoogleAPIClientForREST; + sourceTree = ""; + }; + 885211DC3EA164964F3FBE436401DA5D /* Support Files */ = { + isa = PBXGroup; + children = ( + 089558003E4B67B701B403001320A7EC /* SDWebImage.modulemap */, + 41D95E73EB648CA0896C3360092052A9 /* SDWebImage.xcconfig */, + AC1B770F09F0C669234396A39BFF6BB9 /* SDWebImage-dummy.m */, + 03B0FDD916BDF1DA5F04BD8928F42F24 /* SDWebImage-prefix.pch */, + F9F5190AC3B7EA2777CF3CE3A3E7986B /* SDWebImage-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/SDWebImage"; + sourceTree = ""; + }; + 89B06523494BD8523F81518C3886BFD2 /* arm64 */ = { + isa = PBXGroup; + children = ( + 4CEF1CF6322D0D33545A1E86B80C6505 /* assem_arm64.h */, + ); + name = arm64; + path = arm64; + sourceTree = ""; + }; + 8DCC2B9382D5AFC79EE9929AC6B93E5D /* Pod */ = { + isa = PBXGroup; + children = ( + D39C48316E5E36755CF1BA3B4E16F5DA /* DeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 8DF6E9EDB238B7AEA4F57F5DE0790D80 /* device */ = { + isa = PBXGroup; + children = ( + 687441E742910C0DF7081813BECD4638 /* device.h */, + A45F7436BA1CFE801B1BCCEACBAC408C /* cart */, + 654415BCD38185588B5CEFEC6E03DA33 /* controllers */, + DE7D2CCFEE7555D473C60E1D9F28C57B /* dd */, + AB203E7AE9030A99FA4528182839FA95 /* gb */, + 145E8C7A14549DB8E770BFCD75153494 /* memory */, + D283EBBE834BDDBA4A87381477086CD4 /* pif */, + 39DFDC165F70938594DE6987643A453E /* r4300 */, + 80AEC6AD356F82726370FFA4422B0E6A /* rcp */, + F5390EEB6BEF003CADB12460CB4B2A7A /* rdram */, + ); + name = device; + path = device; + sourceTree = ""; + }; + 90233FB8AF2436EC459CF5C8E6D51F94 /* rsp */ = { + isa = PBXGroup; + children = ( + F203A19460529D13E8FCE2A540485658 /* rsp_core.h */, + ); + name = rsp; + path = rsp; + sourceTree = ""; + }; + 918A4DE28AA523D70FEF2E295C999644 /* paks */ = { + isa = PBXGroup; + children = ( + 715964B79C52F9A32AC5669D6D1A75E9 /* biopak.c */, + 9DD623E462036E417A6C1BF38166141C /* biopak.h */, + 3ED7DC207EA838F7ED17B7E0373391E2 /* mempak.h */, + DAC19450998BD4D56C3C2C86AE5687C6 /* rumblepak.h */, + 706DA94E13FDA915B64893FE9918C85F /* transferpak.h */, + ); + name = paks; + path = paks; + sourceTree = ""; + }; + 9430AEFB4802252C34C1DB6B1C6A8C9E /* OpenGLContext */ = { + isa = PBXGroup; + children = ( + 5D08BCF7193B533EB2AF5071C88F1E40 /* GLFunctions.cpp */, + CBECAF1300D5AE6D87DDEBE18A8D1C3C /* GLFunctions.h */, + 092D5916BAD725E2BD181241814AD72A /* opengl_Attributes.cpp */, + 469D6302B5E25E6593C1E213ED0B446A /* opengl_Attributes.h */, + E7C1D17194F0A8C85CD8A755AC2B8670 /* opengl_BufferedDrawer.cpp */, + E9B2829EE8FD1B61E4880C2DDA961706 /* opengl_BufferedDrawer.h */, + 6E755BD7B9E84110CD165AA817987A71 /* opengl_BufferManipulationObjectFactory.cpp */, + 1841A00CFBD8BE33D1C7736E94E929AE /* opengl_BufferManipulationObjectFactory.h */, + AE06F95AF0928716E10E432596BE6C68 /* opengl_CachedFunctions.cpp */, + F8D137604EE39A80F050CC3248514E8F /* opengl_CachedFunctions.h */, + B4649DC9403189EF7D8B5F740147BCBF /* opengl_ColorBufferReaderWithBufferStorage.cpp */, + D91579E22C2EC7BD86DF031990A153A9 /* opengl_ColorBufferReaderWithBufferStorage.h */, + 464088003409FF077A690AF31D685656 /* opengl_ColorBufferReaderWithEGLImage.h */, + C24EA8E380769E668B40D2C5025505CB /* opengl_ColorBufferReaderWithPixelBuffer.cpp */, + 99AFB601E975D6655D2A52B959891047 /* opengl_ColorBufferReaderWithPixelBuffer.h */, + 0FA995B71ECEE202B9688EBD65B7788A /* opengl_ColorBufferReaderWithReadPixels.cpp */, + C5A679691AAA47A28EF1E1E5A6BA88E4 /* opengl_ColorBufferReaderWithReadPixels.h */, + 39CE46E8947CA82B26FFDA66DEED2417 /* opengl_ContextImpl.cpp */, + 0F09391CC528737E038858DA43278244 /* opengl_ContextImpl.h */, + 2DA2D2C771F4634211A5B88321499576 /* opengl_GLInfo.cpp */, + E464A7D70176B62BFF57B34C448A9023 /* opengl_GLInfo.h */, + 50FBE486AFEBB34A067A593F41720663 /* opengl_GraphicsDrawer.h */, + 5EC841F694F3A53D5F5B027513353CD6 /* opengl_Parameters.cpp */, + 0C8F960573035AFFC3CDC1DEBA1E6BD4 /* opengl_TextureManipulationObjectFactory.cpp */, + 2008405A1930372A338506F2E4FA20BA /* opengl_TextureManipulationObjectFactory.h */, + C43B2C1E1A9F88A7EEAE044E22A0CDC6 /* opengl_UnbufferedDrawer.cpp */, + 7CD4252EE7412B7E97A7FA9F6EB9095D /* opengl_UnbufferedDrawer.h */, + 5DC0155465127BC9B36185F96DDCAB75 /* opengl_Utils.cpp */, + 8E80A2591A2367572B4E5468FB72C0B0 /* opengl_Utils.h */, + CABE3D3138D99EF54CB4A98493F1950F /* GLSL */, + F8D98830EC41E3146B6BDD235AC0C269 /* GraphicBuffer */, + AE7115B65FD4A97A7870999E024B6356 /* mupen64plus */, + ); + name = OpenGLContext; + path = OpenGLContext; + sourceTree = ""; + }; + 97F09188D881AF9DF1B358DA6D957823 /* Types */ = { + isa = PBXGroup; + children = ( + E1E783A2C239C16F0FB68CDC920FB0A8 /* GBATypes.h */, + FD58112E62968E573B43DA1A9C5C1212 /* GBATypes.m */, + ); + name = Types; + path = Types; + sourceTree = ""; + }; + 981655FB7820A023EE5286842289AB18 /* common */ = { + isa = PBXGroup; + children = ( + B3703612D238CE733DA02FE1314443CB /* array.h */, + 9E132A030504CB91FC153F9A62C74870 /* ConfigManager.h */, + E5AD860D37EB94791316D63AD7049D43 /* cstdint.h */, + D425AE3E5ED390C5A8846F791DD166FE /* dictionary.h */, + 490A6AF86E771A7376AA1B58EDEAE7EC /* ffmpeg.h */, + 042D259A0DE7C5C64344E6F6C921F2F4 /* iniparser.h */, + 867A52819D0036A2C45DFD094D11F381 /* memgzio.h */, + E269D644BF08F4B053F036687791157F /* Patch.h */, + C37DA4AD186CBA7132359E75E98431E8 /* Port.h */, + B2535F7B0EEFF2878AFFC407BE7821EC /* ringbuffer.h */, + 887068F06A80B516F5DE95AE14158D3F /* SoundDriver.h */, + 949120606BFB2FD67DC4240028FEB398 /* SoundSDL.h */, + 1A9086E824EFB7B7B14B240188DF62CE /* Types.h */, + ); + name = common; + path = common; + sourceTree = ""; + }; + 9854CC5EAF3E4AAD4FA0B621ADF41826 /* input */ = { + isa = PBXGroup; + children = ( + 3B72CA5846B888FBC7CF69D1C40C9AE7 /* NstInpAdapter.hpp */, + 5C6513BE3B8C4EE62832D30F3B73EE32 /* NstInpBandaiHyperShot.hpp */, + 92004DFFAF89F721D5477783E22161B9 /* NstInpBarcodeWorld.hpp */, + EE739F4111402555B8330C94DC934B22 /* NstInpCrazyClimber.hpp */, + 3082C32F34B1C6E7F0F4DC785F328B7E /* NstInpDevice.hpp */, + 1B7C97918240DAD198A118B7B00B0E24 /* NstInpDoremikkoKeyboard.hpp */, + 020829DABC4B34F0B103CB44A86B1E02 /* NstInpExcitingBoxing.hpp */, + 8CC8FD6332B53E6AEADA551A3042A681 /* NstInpFamilyKeyboard.hpp */, + 76A9709715FDD329C46A920FFC9D9209 /* NstInpFamilyTrainer.hpp */, + 6259A047C58B19EAEDC1BA8DC19B918E /* NstInpHoriTrack.hpp */, + 35AD6B07396F00A51E9FE9F7F393FAE0 /* NstInpKonamiHyperShot.hpp */, + 7A8C9A3E803EF09830C30971C4D0333D /* NstInpMahjong.hpp */, + 6EC6A1A3D10181EB3D7A3F51FFA233C6 /* NstInpMouse.hpp */, + F506F9CB88905A0006F9CBDBB8EBCA31 /* NstInpOekaKidsTablet.hpp */, + 5A73FCE0E18FBE8EBCCEB74397FEC76A /* NstInpPachinko.hpp */, + EBB1A01E856D7D91BD846C278311FFB7 /* NstInpPad.hpp */, + 2F60B797411C7BEEEE57114981D1D5CE /* NstInpPaddle.hpp */, + 22D727FF73EDD7D66A073041A47B0DE6 /* NstInpPartyTap.hpp */, + 06D710973353A358D86E72C355EAB4A5 /* NstInpPokkunMoguraa.hpp */, + D10088E315F5123F3D327A06066E206B /* NstInpPowerGlove.hpp */, + D41C7731EC1A1866FC9B20D1EFC8D2ED /* NstInpPowerPad.hpp */, + 52EF51E3091C9D586B56E01C7A9F0C53 /* NstInpRob.hpp */, + B2B24BB63436EBA04A7F12707D9B8161 /* NstInpSuborKeyboard.hpp */, + BC670362843998DA1AF5EB24E32647D3 /* NstInpTopRider.hpp */, + CA84B8D0950FD10163E23797CEABFE2C /* NstInpTurboFile.hpp */, + 5C906D0B80F5FF86C1D338A347708D05 /* NstInpZapper.hpp */, + ); + name = input; + path = input; + sourceTree = ""; + }; + 994080062D06BE26E947CF4A4A776626 /* Types */ = { + isa = PBXGroup; + children = ( + 9E0ECBB02BB69E04F4F0E29EDA00B847 /* Errors.swift */, + 0307F4D94070F2E4674AD03B8CE79D58 /* SyncProgress.swift */, + ); + name = Types; + path = Harmony/Types; + sourceTree = ""; + }; + 9BEEEA655826D740F8EBC247A333EB7F /* x86 */ = { + isa = PBXGroup; + children = ( + ADDD949ACAFD888D4958D62325464FC2 /* assem_x86.h */, + ); + name = x86; + path = x86; + sourceTree = ""; + }; + 9BFEEE19ABD216833F8B7D5AAAB8E2F5 /* Development Pods */ = { + isa = PBXGroup; + children = ( + 52BA5412DADDFC606DA2615E62036938 /* DeltaCore */, + D699477F5BE68BF5AAA4EDE6169B0EE6 /* DSDeltaCore */, + 32A3234E75ED687D7B90A6A982CC126A /* GBADeltaCore */, + CFD9F489FE6F503D6C7F477239AD510E /* GBCDeltaCore */, + 6BF38915B447FF940372C7FC2ED1EA2B /* Harmony */, + A12479D80125772EAD14AC721A36F918 /* N64DeltaCore */, + 9CB6DAB8420B18C2A094CFE587C4F664 /* NESDeltaCore */, + 0BE2BAA0FC86CCF09B884AC5526B1B85 /* Roxas */, + DCECEB869B40FCFDA86A7ED95CD7DF6C /* SNESDeltaCore */, + ); + name = "Development Pods"; + sourceTree = ""; + }; + 9C74D698A05E7D758A311F2789115472 /* Video */ = { + isa = PBXGroup; + children = ( + A890AA73740FA33E0E2982CE873A83D6 /* Mupen64Plus */, + 76188A77CA519378F94C4A102F002622 /* N64DeltaCore-Video */, + ); + name = Video; + sourceTree = ""; + }; + 9CB6DAB8420B18C2A094CFE587C4F664 /* NESDeltaCore */ = { + isa = PBXGroup; + children = ( + FE63F8A52B96C1DBCBB2424EBC2DA3B9 /* NESDeltaCore */, + B3FE9E9CE6C1523AD6E4CB22CFEE0D64 /* nestopia */, + 7575F2E08696B62C99622BDEFC7F139E /* NestopiaJS */, + CFD93EF9E254BEBADC970D58902DE4EE /* Pod */, + 3343777CA6E0AF2C9DF08C3AB68705DE /* Resources */, + A3AF37A422008C2DE009C6D1EA22B77E /* Support Files */, + ); + name = NESDeltaCore; + path = ../Cores/NESDeltaCore; + sourceTree = ""; + }; + 9E1B908F1DB3ECDD4CA5B911E7C85B08 /* NestopiaJS */ = { + isa = PBXGroup; + children = ( + D9445B158497F7C69D8E9D2443A33739 /* NstDatabase.xml */, + ); + name = NestopiaJS; + path = NestopiaJS; + sourceTree = ""; + }; + 9F77AF9A3FC86D1CC84393B74FE050A0 /* desmume */ = { + isa = PBXGroup; + children = ( + 7209A91034D3EFAFB68287C9E0860F8B /* desmume */, + ); + name = desmume; + path = desmume; + sourceTree = ""; + }; + A1183D7B11EDCF67C21F9C57E6950E26 /* SDWebImage */ = { + isa = PBXGroup; + children = ( + F9A6B2694D547CAC69F1722310556B77 /* Core */, + 885211DC3EA164964F3FBE436401DA5D /* Support Files */, + ); + name = SDWebImage; + path = SDWebImage; + sourceTree = ""; + }; + A12479D80125772EAD14AC721A36F918 /* N64DeltaCore */ = { + isa = PBXGroup; + children = ( + D201432F7BDC32037726CC405DABB56F /* libMupen64Plus */, + 77EC95F113FE3910D426C200FE0A8515 /* Mupen64Plus */, + E5AA6D816EF0CBE0828B2F5F2B9F3759 /* N64DeltaCore */, + A62F467592F1879676456773D47376B7 /* Pod */, + 480A93CB7AB6C50FA045238E2B79FAC6 /* Resources */, + 1F87499C4FD451910C5CFDFD3AAA47D7 /* RSP */, + 09AD5B7BEEC9BEC81F8C4EC1A23A9BBB /* Support Files */, + 9C74D698A05E7D758A311F2789115472 /* Video */, + ); + name = N64DeltaCore; + path = ../Cores/N64DeltaCore; + sourceTree = ""; + }; + A27A1F5197BC2DC2E555618CFCF821AE /* oglft */ = { + isa = PBXGroup; + children = ( + C27BB3E37D9E25626486536CA6D1890B /* OGLFT.h */, + ); + name = oglft; + path = oglft; + sourceTree = ""; + }; + A32A21E8F7145DAE99E82C2886356FC1 /* subprojects */ = { + isa = PBXGroup; + children = ( + 2AC083D17ED5739B5B211543714C6C2D /* xxhash */, + ); + name = subprojects; + path = subprojects; + sourceTree = ""; + }; + A3AF37A422008C2DE009C6D1EA22B77E /* Support Files */ = { + isa = PBXGroup; + children = ( + FE29186D1D3230A6DE7D814702F201F5 /* NESDeltaCore.modulemap */, + 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */, + 75EA00FDDC420CBEEF57749EB105D75B /* NESDeltaCore-dummy.m */, + F1313708F536AEEAB3F8FE444AACB097 /* NESDeltaCore-prefix.pch */, + 46306F32408FC6EFC5F89D8105542A30 /* NESDeltaCore-umbrella.h */, + 04CB77BB25701FFB2038A7D45251EC20 /* ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/NESDeltaCore"; + sourceTree = ""; + }; + A3EA455CA1E4E1F9431E9263CF4851D4 /* Delete */ = { + isa = PBXGroup; + children = ( + DF6E047B23D9FBAF2DB48EC4B655B82B /* DeleteRecordOperation.swift */, + 8CE5B0A31ACD87513F0942D9E71F9BD6 /* DeleteRecordsOperation.swift */, + ); + name = Delete; + path = Delete; + sourceTree = ""; + }; + A45F7436BA1CFE801B1BCCEACBAC408C /* cart */ = { + isa = PBXGroup; + children = ( + 82B290FA3AD7AE40209494B966FF4B3B /* af_rtc.h */, + E0F23910DDA9040638B4A63EABA0CE82 /* cart.h */, + BA46D0D247C2A97E0EBAEF9B67F430BF /* cart_rom.h */, + B5E9F261B8796880679ECD1AF1FDC584 /* eeprom.h */, + 0BFECFA92DE1F1B2ECD7449CA0DE9389 /* flashram.h */, + A19E4DF8BAF4F0082185FA6315D2B6B7 /* sram.h */, + ); + name = cart; + path = cart; + sourceTree = ""; + }; + A53A8976966BE4B7422DB18F3103BEA2 /* Download */ = { + isa = PBXGroup; + children = ( + 9CDC4E9BA921F71C2DE81D711D002178 /* DownloadRecordOperation.swift */, + F0EF51BD6A873328F443F48E06B74BF8 /* DownloadRecordsOperation.swift */, + 9078D2E6A526B27EFAB78F4949C2039E /* FinishDownloadingRecordsOperation.swift */, + ); + name = Download; + path = Download; + sourceTree = ""; + }; + A62F467592F1879676456773D47376B7 /* Pod */ = { + isa = PBXGroup; + children = ( + A4813A1A35350AA88E9F2BDD45AF68E1 /* N64DeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + A890AA73740FA33E0E2982CE873A83D6 /* Mupen64Plus */ = { + isa = PBXGroup; + children = ( + 57BA860878D3D42DD09ED8AD2C301234 /* GLideN64 */, + 17640D3E9C581A1DA4B2DFB2666646C9 /* libpng */, + 0EFECB3C25EF213B3AF98FD9EDEFAA66 /* mupen64plus-core */, + ); + name = Mupen64Plus; + path = Mupen64Plus; + sourceTree = ""; + }; + AB203E7AE9030A99FA4528182839FA95 /* gb */ = { + isa = PBXGroup; + children = ( + 3D0E61C75D78DD7A729364010BDBB106 /* gb_cart.h */, + 8326EAB88C81EB3273CE84BFBE30C290 /* m64282fp.h */, + 89AD69668AA33B36799179839B4578DB /* mbc3_rtc.h */, + ); + name = gb; + path = gb; + sourceTree = ""; + }; + AC4003DE81173BA37C3C2F94F058FEC9 /* Support Files */ = { + isa = PBXGroup; + children = ( + 8DB91BFF06E8641AEB9DAF85B4EAEF79 /* GBCDeltaCore.modulemap */, + 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */, + 26D67EB75107A8E731DFD2A5B2EC86F0 /* GBCDeltaCore-dummy.m */, + 93D8D16485DDCB1B9E14A3ECABF683B8 /* GBCDeltaCore-prefix.pch */, + 9C838A28075396ED66AEF6F512BA0446 /* GBCDeltaCore-umbrella.h */, + 5B818731B433680AC0669D4C8ECB8E13 /* ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/GBCDeltaCore"; + sourceTree = ""; + }; + ADEE4E317A718E12907787A717B015D5 /* DebugUtils */ = { + isa = PBXGroup; + children = ( + 76C85069E5F2ED830B22D7D1AB4A529C /* GTMDebugSelectorValidation.h */, + 026273C8CD9BD9384803DD59CB45DF96 /* GTMDebugThreadValidation.h */, + F7C47011115A00E9556AC311099987E7 /* GTMMethodCheck.h */, + ); + name = DebugUtils; + sourceTree = ""; + }; + AE354EB66CE6C885A5ADD3E361C6268F /* Support Files */ = { + isa = PBXGroup; + children = ( + 2CE8C779DBC210E95B624C15A6AEB6CA /* ZIPFoundation.modulemap */, + A3131038BAA6204AECC770BDD176F81C /* ZIPFoundation.xcconfig */, + 882DA4CFDB38488363DB6FA79E5CF3BE /* ZIPFoundation-dummy.m */, + 55E6130B2C30062EF18AFC05336D16E6 /* ZIPFoundation-prefix.pch */, + 6C79D85ABB10589F765DD64715EEEAD3 /* ZIPFoundation-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/ZIPFoundation"; + sourceTree = ""; + }; + AE5BDACDA27265C8C5B46C0ABE431F76 /* Game */ = { + isa = PBXGroup; + children = ( + DB6DD6DB7B47787A5A8EA1D3325598F6 /* GameView.swift */, + B55404E8B2117F5FA8444F1ADD1A5039 /* GameViewController.swift */, + ); + name = Game; + path = Game; + sourceTree = ""; + }; + AE7115B65FD4A97A7870999E024B6356 /* mupen64plus */ = { + isa = PBXGroup; + children = ( + A3DDC9D77AA62AA058CD07A50BE2E396 /* mupen64plus_DisplayWindow.cpp */, + ); + name = mupen64plus; + path = mupen64plus; + sourceTree = ""; + }; + AFDC797217CD201CEA4BA73665645D2F /* Drive */ = { + isa = PBXGroup; + children = ( + 3144D27552079845BF5B0637FC88D62B /* GTLRDrive.h */, + 3B22551CE150F70C85739F2994DE4F75 /* GTLRDriveObjects.h */, + 650B17EB11403844F72B9E0117949D63 /* GTLRDriveObjects.m */, + 5117CC789D8C47E9B0F2888AB14F3E74 /* GTLRDriveQuery.h */, + A0A504E08A6B298395CDE7E0BC7FBA95 /* GTLRDriveQuery.m */, + 6A2CACDB9FCC4BFBF7C2F672657367FF /* GTLRDriveService.h */, + B5EB7FA5DB62956C49A473DF02AE5456 /* GTLRDriveService.m */, + ); + name = Drive; + sourceTree = ""; + }; + B0586A3F5DC5B637ADF9921EBB25472D /* Support Files */ = { + isa = PBXGroup; + children = ( + B8B3A29AED934B0B3AC6171E49F11E8D /* ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist */, + 1E0332A877FA8632655267F892A4868D /* SNESDeltaCore.modulemap */, + F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */, + E7CFE992FA2A4ABDEAADC452BA0C39D5 /* SNESDeltaCore-dummy.m */, + 60639E02A2579DF3195EEC16A0556CF6 /* SNESDeltaCore-prefix.pch */, + 9CD3F5DB69B6C64C0A6692B58AFD0B17 /* SNESDeltaCore-umbrella.h */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/SNESDeltaCore"; + sourceTree = ""; + }; + B0D3B6EE16BA2B820E0866B0FE4C20D1 /* System */ = { + isa = PBXGroup; + children = ( + 62F06888B27D96F21A3D53797DD35725 /* Err.cpp */, + 603DD39C57569C32BD836469768B346F /* String.cpp */, + 972EE27803ACA015B384716D967BB02E /* Thread.cpp */, + 6339330C707D1D8177B1FCDB213946EB /* Time.cpp */, + 0A5C4548757D4029BFE66F8F2912470E /* Unix */, + ); + name = System; + path = System; + sourceTree = ""; + }; + B281BE06734FFC663D472DB785580878 /* Frameworks */ = { + isa = PBXGroup; + children = ( + DBBA083D62798DCA02FE935019980CCF /* GoogleSignIn.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + B35BFC446ACA2A3AC49953F7912C8D74 /* arm */ = { + isa = PBXGroup; + children = ( + 3FD22484CAFD9D6D7EDB3732DE4A047D /* arm_cpu_features.h */, + BF609625DC6D6DCA4E18292A7309D441 /* assem_arm.h */, + ); + name = arm; + path = arm; + sourceTree = ""; + }; + B3FE9E9CE6C1523AD6E4CB22CFEE0D64 /* nestopia */ = { + isa = PBXGroup; + children = ( + FAE3180D34498BCD31E17216B8C80BFE /* source */, + ); + name = nestopia; + path = nestopia; + sourceTree = ""; + }; + B5BCA0B7CD47A78DA5B1697D5B40975B /* Model */ = { + isa = PBXGroup; + children = ( + FD9C5507CE8EEB9255EC26821F186A30 /* Account.swift */, + 55B412A3E753F75718995BBB767197FD /* File.swift */, + 54254E0189355E5C8E760E6CEB171480 /* Record.swift */, + 92238392EDEE95FD2FBE52D9471C5264 /* Version.swift */, + F417425CB2FA1D05BAD4C5F1DF071FED /* Core Data */, + ); + name = Model; + path = Harmony/Model; + sourceTree = ""; + }; + B7610810046C36DD994B73E0DE4BBCD6 /* Misc. */ = { + isa = PBXGroup; + children = ( + 00E83FB8FE257D431296C57164DBCE71 /* FetchRemoteRecordsOperation.swift */, + 8D564037F9192979A0BA63A5F9545CDE /* UpdateRecordMetadataOperation.swift */, + ); + name = Misc.; + path = Misc.; + sourceTree = ""; + }; + B7AF17E48E146E0297BD756594390881 /* Bridge */ = { + isa = PBXGroup; + children = ( + 40018788A7B82BE36F7A4762218942C4 /* SNESEmulatorBridge.h */, + 146B44A557A13EB3BBE8A5C53D94BC9E /* SNESEmulatorBridge.mm */, + ); + name = Bridge; + path = Bridge; + sourceTree = ""; + }; + B7C961F0CF8CC2E98500C8E3DA3C6F56 /* Keyboard */ = { + isa = PBXGroup; + children = ( + E4185D8E6FDFC3750E4E3DCF897B9D2F /* KeyboardGameController.swift */, + 4FCA09C91A2EF02A01FA5D74C5F06804 /* KeyboardResponder.swift */, + ); + name = Keyboard; + path = Keyboard; + sourceTree = ""; + }; + B8846FB6AA67A85C0B966F024F149350 /* SDL */ = { + isa = PBXGroup; + children = ( + E43D760A416FD46145902A92E018E58F /* SDL.h */, + 525B2A3CC0AB6E54AFD0C4CAE7B17B9D /* SDL_config.h */, + 2007B1419082E90090305FCD84393B06 /* SDL_opengl.h */, + 9D7EE0A3C63E9181CA23F2A4EE2C188E /* SDL_opengles2.h */, + 9E72A33A7110D63CBC89C70E51F608C9 /* SDL_thread.h */, + ); + name = SDL; + path = SDL; + sourceTree = ""; + }; + BB06181522252080746B32370099C5F0 /* Bridge */ = { + isa = PBXGroup; + children = ( + 1AE7C6AEDB1B177BEA97EAFF75DCDAF4 /* GBCEmulatorBridge.h */, + 9AF937DC01474311A2109AFB0EDA7D8B /* GBCEmulatorBridge.mm */, + B8A840F202469E60C39538CC467177CA /* GBCInputGetter.cpp */, + C2B84B3955DE3CC74FD9418BE74C2896 /* GBCInputGetter.h */, + ); + name = Bridge; + path = Bridge; + sourceTree = ""; + }; + BDDCAA316B6C4E2A467D14C79E23372C /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 08C58CF73AB8BFBF56E0EB8B4D727EE1 /* Pods-Delta */, + ); + name = "Targets Support Files"; + sourceTree = ""; + }; + BEA4783459FBDB405F91C34373955400 /* Bridge */ = { + isa = PBXGroup; + children = ( + FE0C4019F40D94124274D599DD260980 /* N64EmulatorBridge.h */, + 1FA41CF9BC943DB28A21577ABD2D7C6E /* N64EmulatorBridge.m */, + ); + name = Bridge; + path = Bridge; + sourceTree = ""; + }; + BEE053A077D5B0152B87C64B9E854C3D /* contrib */ = { + isa = PBXGroup; + children = ( + FB9B4CF7C92056F8465C3BC5744BEA23 /* gregbook */, + 0396E6F488E454AEA132CC2941CD243F /* libtests */, + E31275459F62FCFE7326250B9826CA9D /* pngminim */, + 61E723CAF793205951264CB8D0EFB28E /* tools */, + 104401E321E18AD99134ED58CE50DFAA /* visupng */, + ); + name = contrib; + path = contrib; + sourceTree = ""; + }; + BF15A943982DF0036D7E9AB6A541BB5B /* Support Files */ = { + isa = PBXGroup; + children = ( + BC93DB5E5A61F3C883D37793C77CDF2A /* GBADeltaCore.modulemap */, + 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */, + 0BB04C06267FD84AED09F6E677B3B3BF /* GBADeltaCore-dummy.m */, + 27A2677C576835F3B4E792D1223B0C84 /* GBADeltaCore-prefix.pch */, + 31C592DC38E9487D52E30F0FFC654460 /* GBADeltaCore-umbrella.h */, + 021152EF65B7FECE3238545205BFBB9F /* ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/GBADeltaCore"; + sourceTree = ""; + }; + C0D343A3DF1A1ED3CBBC9AB812DAEEE8 /* Support Files */ = { + isa = PBXGroup; + children = ( + 4F751BB6AC156EB594F059E95D44A853 /* GoogleToolboxForMac.modulemap */, + 5294532669D6FD1AE4D2A9F8C4A86C90 /* GoogleToolboxForMac.xcconfig */, + E8E60A18A1E9B1D77A5D5CAA1444A18D /* GoogleToolboxForMac-dummy.m */, + 5466366B9F12E1CFE3A59B79884E3E1D /* GoogleToolboxForMac-prefix.pch */, + B8494C070246CC8BED190E092A370B3C /* GoogleToolboxForMac-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/GoogleToolboxForMac"; + sourceTree = ""; + }; + C1388159F8FE278CABBF3ACBFA6D39A8 /* Support Files */ = { + isa = PBXGroup; + children = ( + D16849E97B5D5B6449F8627DD2DCBAF2 /* Alamofire.modulemap */, + C41D62EAA75E3627EE9D9B3527E8DFFB /* Alamofire.xcconfig */, + E17A40A5122F984FE431D21753C8CF06 /* Alamofire-dummy.m */, + 2AA34CF8A01A306ECCE09A801585167F /* Alamofire-prefix.pch */, + B5E6736AEAB28DFE73C9BD1605B0863D /* Alamofire-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/Alamofire"; + sourceTree = ""; + }; + C2D181987F7A462D06051D6F298B60FD /* NESDeltaCore */ = { + isa = PBXGroup; + children = ( + 31C90C17DE46AAD6D2786B0098B71196 /* Standard.deltamapping */, + 7D0D072173D1C15941C0153AB542E28D /* Controller Skin */, + ); + name = NESDeltaCore; + path = NESDeltaCore; + sourceTree = ""; + }; + C31EFB83C698738C5AE9C0BF6CC3B679 /* xxhash */ = { + isa = PBXGroup; + children = ( + 37B8F5240077E10AD926217E581D56A6 /* xxhash.h */, + ); + name = xxhash; + path = xxhash; + sourceTree = ""; + }; + C37DDFC457F0FC0A072B645839965E55 /* math */ = { + isa = PBXGroup; + children = ( + 3D72B8F3909167EBE56E1BF0E3108516 /* complex.h */, + 9264D4DA6A66BA54A811C0AC60576BC4 /* fxp.h */, + ); + name = math; + path = math; + sourceTree = ""; + }; + C3EF978A151AE28C04A2AE18B57B9AA8 /* libgambatte */ = { + isa = PBXGroup; + children = ( + 1BCC1AB3348B9592350C28DB2607FA04 /* include */, + E1AD09726E2CA3D30FD42BB13C9E60F8 /* src */, + ); + name = libgambatte; + path = libgambatte; + sourceTree = ""; + }; + C4D47ABBEA4B5A7F4CCBD4E0828F752B /* Model */ = { + isa = PBXGroup; + children = ( + AF58C9A94CDE343BACE56F4E13E201C8 /* Cheat.swift */, + BBAEA04DA00E792104BDE8F6F66BBE09 /* CheatFormat.swift */, + B442DF315B83F5A22C5AC0D52DC6F788 /* ControllerSkin.swift */, + 47EEB210C3F983E3F97BA5C90AEAE80C /* ControllerSkinTraits.swift */, + 8A3F0FDFBE86AC5763C0A89166EFC859 /* Game.swift */, + F779EEE5715D3C32E844758058351CE8 /* GameControllerInputMapping.swift */, + 2898E99C918654A8574FBA694F5AA190 /* GameControllerStateManager.swift */, + 00EA19D2D4A64B523C65C5C29699ADC6 /* SaveState.swift */, + CBECC9F3DB04E6A5DEF0079A685A3E70 /* Inputs */, + ); + name = Model; + path = DeltaCore/Model; + sourceTree = ""; + }; + C62148EE2C694AD9CB1B5035900C5E8E /* x86_64 */ = { + isa = PBXGroup; + children = ( + 1ACB84EDA396FC32A38EF2E80F2E78D5 /* assemble.h */, + 7680621D7EA37B25BD6FAFEB184DD97B /* assemble_struct.h */, + 7745EBDA352FAAAD04827718AFC2DDD0 /* interpret.h */, + 94AAA4870A47F9FA1AE9463A83E81CB5 /* regcache.h */, + ); + name = x86_64; + path = x86_64; + sourceTree = ""; + }; + C64CB76ADEFD16E30906C74F992B3CCA /* NSString+URLArguments */ = { + isa = PBXGroup; + children = ( + BBE10799564D3547139EFF5CE894CF5A /* GTMNSString+URLArguments.h */, + 883B872956FB7C28FDBB574888357A62 /* GTMNSString+URLArguments.m */, + ); + name = "NSString+URLArguments"; + sourceTree = ""; + }; + C6F858C615D55996D75807A9981F1A5D /* Resources */ = { + isa = PBXGroup; + children = ( + 16344678459C378BCDF429E32F898CC2 /* GoogleSignIn.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + C78FC44C8B7F1A8AEB30433AD0440A12 /* backends */ = { + isa = PBXGroup; + children = ( + 1D88D4AF63AF5783792687FAE3AD2BCB /* clock_ctime_plus_delta.h */, + 894545843DCDE3856F3A5F4BA90A2227 /* dummy_video_capture.c */, + 92B94EAC848FCE04BDC76F2D0CC75878 /* file_storage.h */, + 03156EC920E6D8F5346B5F3F354FAFAB /* api */, + 0AB0646DD833AD6334AF13552DF365D2 /* plugins_compat */, + ); + name = backends; + path = backends; + sourceTree = ""; + }; + C9CF25A97B140A7A408C88D4E580E637 /* Mupen64Plus */ = { + isa = PBXGroup; + children = ( + 047498B4224A2C3DF5E40D05044F721F /* mupen64plus-rsp-hle */, + ); + name = Mupen64Plus; + path = Mupen64Plus; + sourceTree = ""; + }; + CABE3D3138D99EF54CB4A98493F1950F /* GLSL */ = { + isa = PBXGroup; + children = ( + ABDD0D043967D1CF64FE87292AD3328B /* glsl_CombinerInputs.cpp */, + F2257CE5C9B676C063600BAA94CA562D /* glsl_CombinerInputs.h */, + AD521670C6D7CBA41733C054C293541C /* glsl_CombinerProgramBuilder.cpp */, + 1DA85D3012B6718655D78006E60A7A61 /* glsl_CombinerProgramBuilder.h */, + F40644EDA82AEFA7C2C89C6CBC2D581C /* glsl_CombinerProgramImpl.cpp */, + 747E5693480F6B6F20690DB12E236F86 /* glsl_CombinerProgramImpl.h */, + 1CC140E1F857FD727024B376FACB6D15 /* glsl_CombinerProgramUniformFactory.cpp */, + 4ED141EBC657EC07C8D65BCD12249B41 /* glsl_CombinerProgramUniformFactory.h */, + 7B99B417F7B87ED84AC94DA16A254477 /* glsl_FXAA.cpp */, + 9ACA4CA8AE2D83BA8AB58439FC360D38 /* glsl_FXAA.h */, + 5D2215E3C485C95C307BE07BC62D0E65 /* glsl_ShaderPart.h */, + E988413B416CBB252A2093E604B1CBEA /* glsl_ShaderStorage.cpp */, + 90696DCC98EAADB42AE7018A27D415F5 /* glsl_ShaderStorage.h */, + 538F7789F2608728E516881281A64037 /* glsl_SpecialShadersFactory.cpp */, + BEEFBD2A07C30B4B56078B86605B2E66 /* glsl_SpecialShadersFactory.h */, + 1E2FFD68EF928DFACE9371D8AAC65F52 /* glsl_Utils.cpp */, + 1F9D3C122510252E5BCC49CBC78D15C1 /* glsl_Utils.h */, + ); + name = GLSL; + path = GLSL; + sourceTree = ""; + }; + CB4D937EB1CD8D9527E9DC1C2C3D8E87 /* Resources */ = { + isa = PBXGroup; + children = ( + 850B3AEB1917875997484AA3953B926F /* Standard.deltamapping */, + 4D99497467047689EE0E51F25AD9B33F /* Controller Skin */, + ); + name = Resources; + sourceTree = ""; + }; + CB68C9A1776173E92905B5A26E966B48 /* Crashlytics */ = { + isa = PBXGroup; + children = ( + 1CA66F879B24C5B420988EA67B2A3FB0 /* ANSCompatibility.h */, + 43006531368CEA05883D7AB4553B591A /* Answers.h */, + 4D625C34AD086F4A90C4372F2BED7491 /* CLSAttributes.h */, + 21697728431980C8C5C6925AA9856DFA /* CLSLogging.h */, + 3EE0D71EAED7DDA51049859FE1209132 /* CLSReport.h */, + 51196ADA4CCEDC1501A36E7771844D40 /* CLSStackFrame.h */, + 003176C08AC98F4C379054630CCC40FD /* Crashlytics.h */, + EDC59E6E374D3BBB0CB71D83DFF7341C /* Frameworks */, + 6FBA49B1C6CAD3E9EDC15F4663849FC0 /* Support Files */, + ); + name = Crashlytics; + path = Crashlytics; + sourceTree = ""; + }; + CB7244FAF13430D229B19F209370E22A /* Extensions */ = { + isa = PBXGroup; + children = ( + 3FF38B518700B0B715F71F0BA0F88F21 /* AnyKeyPath+StringValue.swift */, + 1045871F90D4D454EDB4A2C75FE2404F /* Dictionary+Sequence.swift */, + 4BBE3A12499742BD09D9EBD2B293371C /* HarmonyMetadataKey+Keys.swift */, + F9A3509FC2D34122712EB62CE66B6845 /* JSONDecoder+ManagedObjectContext.swift */, + 684FBE5FB16F9A9B0FC3DD78F607C946 /* KeyedContainers+ManagedValues.swift */, + 4A684FB9EF326DE42BC2EDF06D0D6126 /* ManagedRecord+Predicates.swift */, + B1F489088240F6C610B83E8F77CB5B7C /* ManagedRecord+Uploading.swift */, + F62AC62ED831B8389E68C8BC69676157 /* NSError+LocalizedFailureDescription.swift */, + E7BCCABE84D92A4A7AB4A427BB8558AE /* NSManagedObject+Conveniences.swift */, + 46A81EB457DC21D9C21932C473EB359A /* NSManagedObject+Harmony.swift */, + F27A0FAE014100246C0E1DAC5E1E38DF /* NSManagedObjectContext+Harmony.swift */, + 9FB473C586C6C3957FB7196F5D749297 /* NSPersistentStore+Configuration.swift */, + ECDCC3E94D5101F61796B3E89290013D /* Result+Success.swift */, + 65B9EE37937D4417CCF0576098C38148 /* UserDefaults+Harmony.swift */, + ); + name = Extensions; + path = Harmony/Extensions; + sourceTree = ""; + }; + CBECC9F3DB04E6A5DEF0079A685A3E70 /* Inputs */ = { + isa = PBXGroup; + children = ( + 294C23E97C15AE68F25128C115C99270 /* AnyInput.swift */, + 1DA0672F627BE87C2B50295FDE1FE14F /* StandardGameControllerInput.swift */, + ); + name = Inputs; + path = Inputs; + sourceTree = ""; + }; + CC07376AABD939BDEBA79D5F2CBA2522 /* Pod */ = { + isa = PBXGroup; + children = ( + CB69BAB4143D6BB19DEF090F3256A990 /* SNESDeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + CC1EEA402511AA159D872BBCB22E1C61 /* GBADeltaCore */ = { + isa = PBXGroup; + children = ( + 069FDF1510D1EE57999D9EEFA42DCFAC /* GBA.swift */, + 5A43F1D8E9F0EE020CB6D17932CE6292 /* GBADeltaCore.h */, + 577B01C70A6A38E4A14D8E2184A0A446 /* Bridge */, + 97F09188D881AF9DF1B358DA6D957823 /* Types */, + ); + name = GBADeltaCore; + path = GBADeltaCore; + sourceTree = ""; + }; + CC4735CB3C09953ECC85CB3CC2A74DCB /* common */ = { + isa = PBXGroup; + children = ( + C1F9B4F1AC4BEBB6F3B839EDBD9E5F8C /* adaptivesleep.h */, + A7449C167D753EB017EF503CF6D7DBF5 /* array.h */, + 85DD22654F689D365C8835281CEB8F13 /* defined_ptr.h */, + B009C33CC7DA7BB144CBFC37BB96FADA /* rateest.h */, + ED84FF00BB1C75891DB73E5EC2DC19CC /* ringbuffer.h */, + 416A8E69A7929028B4EDF36F7813BCDA /* scoped_ptr.h */, + F590A4FDC0A63C530D1734FD50B7078E /* skipsched.h */, + 26CE0005068BFE608A1C540A882BA5FB /* transfer_ptr.h */, + 9EA41F9CCF4B088FD860DE0A9D8B8D17 /* uncopyable.h */, + AE0C7BFBF72D47F44B5150F9AD1D5E20 /* usec.h */, + ); + name = common; + path = common; + sourceTree = ""; + }; + CC7D68D1132C8D6ABCDC4CBDEA4D1DB5 /* PrivateApi */ = { + isa = PBXGroup; + children = ( + 23B2C2ADF3521E6B7DFB9C17A4247A3B /* gralloc.h */, + 442216A823D794BB8E292F6B3A6BB793 /* GraphicBuffer.h */, + 1DD967DC3CDB801FA186F97CA836B2E5 /* libhardware.h */, + ); + name = PrivateApi; + path = PrivateApi; + sourceTree = ""; + }; + CC9B157823AAED29576D5EE732798383 /* Controller Skin */ = { + isa = PBXGroup; + children = ( + E07E6F8E20C9B8DBDB6086A2080574B0 /* Standard.deltaskin */, + ); + name = "Controller Skin"; + path = "DSDeltaCore/Controller Skin"; + sourceTree = ""; + }; + CCAF359173F70036DDACE0B434B9FEC2 /* Pod */ = { + isa = PBXGroup; + children = ( + D25FEE0C7F00C1F35CA79D7416F11407 /* DSDeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + CCF8ECCA8A47403B9790B2173996E8DD /* uCodes */ = { + isa = PBXGroup; + children = ( + C3522EC7585D646CAA3673DB9D55FB21 /* F3D.cpp */, + 292C26E214699339AAE80215F482F9BF /* F3D.h */, + 49E2E93BB84159ECED9476CD991992C8 /* F3DAM.cpp */, + 026AA711C2DD33D8830708741F80F0D5 /* F3DAM.h */, + 2E42A2A695A512EFB1CAFA94A99A0F8A /* F3DBETA.cpp */, + A471F1FD870B327EA215A186F1B4B401 /* F3DBETA.h */, + 2B93D7E35A62A2F50B4C38BF9A76E4C4 /* F3DDKR.cpp */, + C9C35DC64C3A93740937D3C3964F9200 /* F3DDKR.h */, + 22E13ACA822EB61BEEF5DF35BDB4B13E /* F3DEX.cpp */, + DBC2FE16691E41109D7168B4B47BC729 /* F3DEX.h */, + D1A18FFCFB5674E197BFC4BFA0584F6E /* F3DEX2.cpp */, + 1A79E77382CDD0991EC1FF3A9416D1E8 /* F3DEX2.h */, + 06A10A0C91C261CE6EB6C49882F13804 /* F3DEX2ACCLAIM.cpp */, + 73D96244D69D5586A7CEBA91D3674E96 /* F3DEX2ACCLAIM.h */, + 49EA3FD213D039FCC91628BD8DD260CA /* F3DEX2CBFD.cpp */, + 0413511727F62ED4EE7013A2B65E6D60 /* F3DEX2CBFD.h */, + C3928A50878B4620930E776643F68B21 /* F3DFLX2.cpp */, + 3A9E10651AAF13257794A36D1EE6B48B /* F3DFLX2.h */, + 1D1E6C0B74E1FAEE75DA38BD38CEBDCE /* F3DGOLDEN.cpp */, + 475A94434453EF6E1D44C3894F12A473 /* F3DGOLDEN.h */, + 5DCDE4D17E50CB5CCFB03F65E6287BF0 /* F3DPD.cpp */, + A6652070A07FC48369CD2D2D93B812AB /* F3DPD.h */, + 4DB5EBAC052F23A23935BC01F0F3BD13 /* F3DSETA.cpp */, + 362727B8448D5ACBAA6199388904E6EE /* F3DSETA.h */, + CF0DF7AF00BD39B06D1EDE5AD5FAF7AB /* F3DTEXA.cpp */, + 2C0286BB0302AD778CF29EECE712709B /* F3DTEXA.h */, + 36962E0BFCDEF7E1ED3272745C0620BB /* F3DZEX2.cpp */, + C1651CF80D05D97DB390C5D66D51F25C /* F3DZEX2.h */, + EBF793539672A386F6C337B8667AE813 /* F5Indi_Naboo.cpp */, + 888803D1EF43D58657C5732AFAC576BC /* F5Indi_Naboo.h */, + 33CC18E757DD735D6437685485DADD01 /* F5Rogue.cpp */, + F4FF030A171DC28CB5454BA2D75DDCDA /* F5Rogue.h */, + 8AA9AC2951C819D3D589F82FAD7F5A65 /* L3D.cpp */, + 15B06D5EC0A84D413A97D791A09DD4C0 /* L3D.h */, + 9ABF020B63EDEC52E2B78074AFB454B1 /* L3DEX.cpp */, + 29ABF3EFA4F58F7434261260A0FCC2A5 /* L3DEX.h */, + CA005FCDCBF549105B1691D698AFFE18 /* L3DEX2.cpp */, + 83DAD8759111F18B4EDD79709EA9C168 /* L3DEX2.h */, + B115DAD8B8CBC0649AA6BCCBDDF47E7F /* S2DEX.cpp */, + 190E396AF2951D7E331A9B5B8276EAF4 /* S2DEX.h */, + 1D2F36F994B2A734DE7746BB61880D92 /* S2DEX2.cpp */, + 3C581DB34643779E6E697D493C316D48 /* S2DEX2.h */, + 59F17550D814845B484B295BDDA7E52E /* T3DUX.cpp */, + 5F992EC4AD08ED4806E1B360451E1861 /* T3DUX.h */, + AF16DF495D40774F62F549F44383A37B /* Turbo3D.cpp */, + 3745BEDDA1C724568FBE3D2E2D7E1A45 /* Turbo3D.h */, + 600582314CC9166CC637A8451ADB1310 /* ZSort.cpp */, + D2CD9D7750784D7D9E924E0E0357EC76 /* ZSort.h */, + 071BA5C258DCD29E5B2DDCC021A6B4F7 /* ZSortBOSS.cpp */, + 8C1C055B90B4594009DB00C4694AD0E8 /* ZSortBOSS.h */, + ); + name = uCodes; + path = uCodes; + sourceTree = ""; + }; + CD560E543AC5643E5375BCCCDA698D91 /* Alamofire */ = { + isa = PBXGroup; + children = ( + 85D72CEA77A8089188A57FDD92DB3E21 /* AFError.swift */, + 42A9F4072A21C2D6095C0971EEC3FC1A /* Alamofire.swift */, + 7D49431EEA4AD3FC2E04F7F24D666EA6 /* DispatchQueue+Alamofire.swift */, + FAC73A05080E7163BE6F8E9426032C82 /* MultipartFormData.swift */, + 6EC397E433E2CCBB38824AB04FAAC26C /* NetworkReachabilityManager.swift */, + F6C874D560C2ECE9A78595318F449292 /* Notifications.swift */, + E6A19232BD176F1842FA9413EF58EAFB /* ParameterEncoding.swift */, + F48A69F12EAD2BE3BAAF57DC1FBC2F40 /* Request.swift */, + 7FC76FBFEFEF12E5FDF51209753949E3 /* Response.swift */, + 432A5751918B766667F9CD8866666085 /* ResponseSerialization.swift */, + 6365C9968A510968784A08051605D583 /* Result.swift */, + 1B222E309AC91E1D67F520A0BF59B834 /* ServerTrustPolicy.swift */, + 9DD38673C0296A73B42D147E647C1937 /* SessionDelegate.swift */, + 18B035B874A3872AE52466285EDB74ED /* SessionManager.swift */, + 7ECC57680ECCFDA6CFA7FED355B4F3AD /* TaskDelegate.swift */, + 3871D54EF3B7DA9555828F18A50129A9 /* Timeline.swift */, + D300A5B7805C13ACEEB33CFECE9235DD /* Validation.swift */, + C1388159F8FE278CABBF3ACBFA6D39A8 /* Support Files */, + ); + name = Alamofire; + path = Alamofire; + sourceTree = ""; + }; + CE2B8EBCA8AAE11803FB13F94633A7E6 /* xxHash */ = { + isa = PBXGroup; + children = ( + 1DDB6A675F59026DAB0306340D41A1BE /* xxhash.c */, + D761EA5C2004DE520EE6E3DA7CD4F6C3 /* xxhash.h */, + ); + name = xxHash; + path = xxHash; + sourceTree = ""; + }; + CE7DAA8BB95D149C5B6CB0226DAED1B6 /* Model */ = { + isa = PBXGroup; + children = ( + 67AB883A36469191BFD529D65D8810A1 /* CheatProtocol.swift */, + 3DADD8386C8821177B764FB59ACB6859 /* ControllerSkinProtocol.swift */, + C4F09C29C5169EDE2BFAE9F9E6B95F48 /* GameControllerInputMappingProtocol.swift */, + C70E38FCA082D826611BFD1F0EC58613 /* GameProtocol.swift */, + 3E5950F1D94686CF45BF978347B71AA5 /* SaveStateProtocol.swift */, + ); + name = Model; + path = Model; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, - 48D3FD1827A4C4F2B9C8FFA216FFF9C8 /* Pods */, - 230BB4EC888C7A07E914CA448C4893E1 /* Products */, - 7BF43339B951E4F1890BA72593179550 /* Targets Support Files */, + 9BFEEE19ABD216833F8B7D5AAAB8E2F5 /* Development Pods */, + D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, + 10C5A63DFF5B6476CE409931492CA3D0 /* Pods */, + 852E660B5C556492569CAB8892FB9629 /* Products */, + BDDCAA316B6C4E2A467D14C79E23372C /* Targets Support Files */, ); sourceTree = ""; }; - D5CA256C4E2D61D7F906DC33F4113994 /* SMCalloutView */ = { + CF847D0CDB6821E22995CD53B6D9B9A8 /* libretro-common */ = { isa = PBXGroup; children = ( - 285643C4919E4B805509E2B8BEF5468C /* SMCalloutView.h */, - EC10E730EE8610E12ED96CCE042945F4 /* SMCalloutView.m */, - 989354F9119F028A77D53BE02742B159 /* SMClassicCalloutView.h */, - 3EBFC4EB67413742CB79FCC7FC8D5257 /* SMClassicCalloutView.m */, - 4E01B6DAD2FD09D65D0614CAB2B0E91C /* Support Files */, + 41041585F53BA6BD480438989A571EDC /* include */, ); - name = SMCalloutView; - path = SMCalloutView; + name = "libretro-common"; + path = "libretro-common"; + sourceTree = ""; + }; + CFD93EF9E254BEBADC970D58902DE4EE /* Pod */ = { + isa = PBXGroup; + children = ( + 20738B0979F88177809FB593F753139B /* NESDeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + CFD9F489FE6F503D6C7F477239AD510E /* GBCDeltaCore */ = { + isa = PBXGroup; + children = ( + ED91CE637F37121B420FEF20D0FBB875 /* gambatte */, + 864B75D4D6EE78F454DD5FB1109B02CB /* GBCDeltaCore */, + 43FBF70E4A21562133E286C7860ACCE8 /* Pod */, + F4403F4F7271CB18FFDA1C94D9E6D79B /* Resources */, + AC4003DE81173BA37C3C2F94F058FEC9 /* Support Files */, + ); + name = GBCDeltaCore; + path = ../Cores/GBCDeltaCore; + sourceTree = ""; + }; + D0D398A9A595E744E5D60CE80391D74A /* Bridge */ = { + isa = PBXGroup; + children = ( + 631827F8F7F53171DBE8CFA596562B76 /* NESEmulatorBridge.swift */, + ); + name = Bridge; + path = Bridge; + sourceTree = ""; + }; + D201432F7BDC32037726CC405DABB56F /* libMupen64Plus */ = { + isa = PBXGroup; + children = ( + B8846FB6AA67A85C0B966F024F149350 /* SDL */, + ); + name = libMupen64Plus; + path = libMupen64Plus; + sourceTree = ""; + }; + D283EBBE834BDDBA4A87381477086CD4 /* pif */ = { + isa = PBXGroup; + children = ( + 3D3835A82BC331577B14F9F444CD9367 /* bootrom_hle.h */, + C2ED97BD0F13C57ECCE6851D581326EB /* cic.h */, + 485C8F569695892A8BF25E965F61DDE1 /* n64_cic_nus_6105.h */, + 4C032B7F3EF8BBC968A5EB242CD96FDF /* pif.h */, + ); + name = pif; + path = pif; + sourceTree = ""; + }; + D2BED9DA807FAFF2162C70598CC64A97 /* N64DeltaCore */ = { + isa = PBXGroup; + children = ( + 4805F8BC438B0132B2F50C26602B8DFA /* Standard.deltamapping */, + 6E412BAEDBF8A6DDC4DF29F84D4A7289 /* Controller Skin */, + ); + name = N64DeltaCore; + path = N64DeltaCore; + sourceTree = ""; + }; + D5418A693FAB0FDDC317EB3D01B003EC /* pi */ = { + isa = PBXGroup; + children = ( + AC44908E2E42851E70850DD854945391 /* pi_controller.h */, + ); + name = pi; + path = pi; + sourceTree = ""; + }; + D58652A0F8AA7A68433AC33F2767D21A /* internal */ = { + isa = PBXGroup; + children = ( + A82BEA8F12430E795A88BB379EFE3536 /* autohint.h */, + 7853737E5530C7A19E57F3534054E328 /* ftcalc.h */, + 8127AEC9343CDF5FA184EEAB2A4E598F /* ftdebug.h */, + 546B78B239F8467F1682E4319F7B44FB /* ftdriver.h */, + B61327FFC19D6334ACBC6C66C2BC2BF5 /* ftgloadr.h */, + E9B7E1EDF3E36A1AE901C6599B744E37 /* ftmemory.h */, + A6A34D0C07503E7FFFE1FC9EE96553BB /* ftobjs.h */, + D9191356F40229DDA60488AC64805339 /* ftpic.h */, + E009A78A05503277A11995657704C090 /* ftrfork.h */, + 5A0B7AABE64CE3CFD6CBD4F335F9FBE1 /* ftserv.h */, + 821E332423194BD75B70F229D0992A67 /* ftstream.h */, + 232E1FD2069448A4B7FA73B378A48EDC /* fttrace.h */, + 3E8F9415B50C5BE88ACC481C92800E41 /* ftvalid.h */, + 2F0727F553BF04882765DDB5CDA7D864 /* internal.h */, + 7502471AA27312AF107E971A67EC58C6 /* psaux.h */, + 367BD3702DCBBD382022788A89524217 /* pshints.h */, + 8BA8D788852783316C1BE135C3ADC92B /* sfnt.h */, + B417E49B5B743092F1356B5AB9E555E0 /* t1types.h */, + F2C2DADC78B40086474AB8DAA997C070 /* tttypes.h */, + E878750482CECD30C0B696DEC99BC4F5 /* services */, + ); + name = internal; + path = internal; + sourceTree = ""; + }; + D699477F5BE68BF5AAA4EDE6169B0EE6 /* DSDeltaCore */ = { + isa = PBXGroup; + children = ( + 9F77AF9A3FC86D1CC84393B74FE050A0 /* desmume */, + 2758670028842E564ADF1466623CA744 /* DSDeltaCore */, + 7D413C8203E7C6174958FB2BE5ECF546 /* libDeSmuME */, + CCAF359173F70036DDACE0B434B9FEC2 /* Pod */, + 79E87841C009AFEB7C6BD7F59E5A607D /* Resources */, + 464E81739567397094C991C4ECB4AF83 /* Support Files */, + ); + name = DSDeltaCore; + path = ../Cores/DSDeltaCore; + sourceTree = ""; + }; + D7195EC7FAC0A0F89F4AD142DB2823C5 /* core */ = { + isa = PBXGroup; + children = ( + 18341B6F300F8B0BA009FD1B1F7945DD /* NstApu.hpp */, + 380AB1A1F7D98ACA91271E7BD163EEB5 /* NstAssert.hpp */, + 3F67DC9F98BC9365BCA0C5FBE0E14C93 /* NstBarcodeReader.hpp */, + 116918731DA7188F3EA9C2361B3A4FE5 /* NstBase.hpp */, + 911F72B30958B16B6FC132BEFBD9544B /* NstCartridge.hpp */, + 16EC811CB549CE7395A41A2FD9C4BE80 /* NstCartridgeInes.hpp */, + 1FF86939139DCD92059F8AFE38FCB116 /* NstCartridgeRomset.hpp */, + E11C4236342FA8398AE626DB3274772D /* NstCartridgeUnif.hpp */, + 9D3400B3B03C1E9DC1A3F7B5E3EB7B4A /* NstCheats.hpp */, + 88DE70070F082BF2437581BD7BB91BDB /* NstChecksum.hpp */, + 703D2463A2508D59FAA3694C995EBC4E /* NstChips.hpp */, + AE5CA9C3251B37CB412B002F2B18CD26 /* NstCore.hpp */, + 13AB3B953E50263BB51D1FB9AE869E8E /* NstCpu.hpp */, + B442E052E2E964ADC9111C8C691F1F49 /* NstCrc32.hpp */, + B7F7B276E6C1803265F573539F0A3704 /* NstDipSwitches.hpp */, + 6D9291C6142C075D49A0EDDA11CC4A78 /* NstFds.hpp */, + 81ACB985C1F71D0FC6DF2A0CBEC3C3D6 /* NstFile.hpp */, + 9039BACE3570843851BBD1B1CD4E8944 /* NstFpuPrecision.hpp */, + E4DF6912B7B427759D8C33E248753DBD /* NstHook.hpp */, + E79FC4B64B0151C5D97016FE705608F2 /* NstImage.hpp */, + 1BCB1BC674B34EBE5044A5F4AC65BA67 /* NstImageDatabase.hpp */, + 0C9A66906E90E69652DE559EF77F4E9C /* NstIoAccessor.hpp */, + EAD0D53A51B076CD685814AD012D9855 /* NstIoLine.hpp */, + E2A4BC7BE1DB4773E50DD8B7E967C51D /* NstIoMap.hpp */, + A48812FF7D0B803D29C9CE12B0F74926 /* NstIoPort.hpp */, + E94066EEBFDC68DAC8ABD344BE20C393 /* NstLog.hpp */, + A03F65FB47279C40083D17F181821336 /* NstMachine.hpp */, + 610583D92AD551F88F44D66D964F1334 /* NstMemory.hpp */, + F67940E7C50D7A614B939AD60E078097 /* NstNsf.hpp */, + 4F5BF7EF7AAE901FB3EF08FEB9603AEE /* NstPatcher.hpp */, + 0F88A26F6B6CF0CB98D87C013543A190 /* NstPatcherIps.hpp */, + 04432A140C95AD3E4476D54108D6800F /* NstPatcherUps.hpp */, + 69CFD44724961B202086D65543370D05 /* NstPins.hpp */, + 6C7AA36ACFE2AD062803B5CC90965154 /* NstPpu.hpp */, + AF55BE85D1766A85D542E06F8CB64DAA /* NstProperties.hpp */, + DFFBD37FBE84B1A972546ABBEE2067BF /* NstRam.hpp */, + 03724046BA5C3704C4607F3025370078 /* NstSha1.hpp */, + CDC648448D2BD63C7FA72EBB05BD53BD /* NstSoundPcm.hpp */, + 657EC94D6685264E5B97804EFAAB8145 /* NstSoundPlayer.hpp */, + 8B0132D8F45B4B5666CBF5652A345F0F /* NstSoundRenderer.hpp */, + 40106E58B0E94346FDE0DC29003A577B /* NstState.hpp */, + 21B08C108927AB621B0EB7F908CDC81C /* NstStream.hpp */, + 315FF0E989ED5094C01E5CC2AA1F9C5A /* NstTimer.hpp */, + DCBEFF02673A4D0CD9185C6100D7E963 /* NstTracker.hpp */, + C20B18CFE6A85C50A5E43ECF4C69D309 /* NstTrackerMovie.hpp */, + 09BF210597386722D5D7051B20C7BE0A /* NstTrackerRewinder.hpp */, + 7DE608CD51BCBB2191371758B7C8E134 /* NstVector.hpp */, + E66CD7AF3945F7CDD842E817ACEA39E8 /* NstVideoFilter2xSaI.hpp */, + FC91AA5FEFEE911BEE1FE8CBF90DC619 /* NstVideoFilterHqX.hpp */, + 3E9A8C85F702C4A1468F58BB906D4ED1 /* NstVideoFilterNone.hpp */, + B7229404AFA84F6E9DB4337E6CCCFD47 /* NstVideoFilterNtsc.hpp */, + B6CDC4DC2E9754CD3DA34C6A091F6E53 /* NstVideoFilterScaleX.hpp */, + 39DE70D20BB766FDECB1A17965101839 /* NstVideoFilterxBR.hpp */, + 3B6CCD65AA48EE2EC4FE44F3D0C21376 /* NstVideoRenderer.hpp */, + E525D21EBF75A723E18A33533D504F6B /* NstVideoScreen.hpp */, + 9AD6579FF3326133D973B8178ED12CEB /* NstXml.hpp */, + 72EC1BB681A1EE53852B18D9C14B635B /* NstZlib.hpp */, + DA33963059370640E46736D22ED76029 /* api */, + 502549B50925C18CAE6574440F514477 /* board */, + 9854CC5EAF3E4AAD4FA0B621ADF41826 /* input */, + 3A728C123D2F42FBF533AE80BAFA1C11 /* vssystem */, + ); + name = core; + path = core; + sourceTree = ""; + }; + D7565F65FCF097E9EA040326E27D0210 /* Extensions */ = { + isa = PBXGroup; + children = ( + 9688C4994A8E7E8C3EFC291E37D8B050 /* RemoteFile+File.swift */, + 7F2667D8C1F3EC7F5E7989CBAD0B8281 /* RemoteRecord+File.swift */, + EC23CE2DB6C5AA34154506F2401B1F8B /* Result+Drive.swift */, + ECAA6C5363B0FC690064E077812D9EF0 /* Version+Revision.swift */, + ); + name = Extensions; + path = "Backends/Drive/Harmony-Drive/Extensions"; + sourceTree = ""; + }; + D89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; + DA240A8FD97B3ED8577A771641432A34 /* Full */ = { + isa = PBXGroup; + children = ( + D9CA1BA4B1C7EB05BD412CB7895C1658 /* GTMGatherInputStream.h */, + E0987B780D382225AE82D80ECA8C0641 /* GTMGatherInputStream.m */, + 0753A2F2127F76F50CD3A7E3FCDF1F60 /* GTMMIMEDocument.h */, + 013B228892127D085A9A12736D33F540 /* GTMMIMEDocument.m */, + D501AB9335B46D77142394E47A29319A /* GTMReadMonitorInputStream.h */, + 9D575B29FCC81FA8F72EC3CC12A581A5 /* GTMReadMonitorInputStream.m */, + ); + name = Full; + sourceTree = ""; + }; + DA33963059370640E46736D22ED76029 /* api */ = { + isa = PBXGroup; + children = ( + BCE1167568421B515DDBA963CC2FD777 /* NstApi.hpp */, + 4060028836FDB7AAC525DB0819187A0C /* NstApiBarcodeReader.hpp */, + 2B02EEBF1E035A24BDB6410BAA13782B /* NstApiCartridge.hpp */, + ED768209E20E3298713767938BD05B35 /* NstApiCheats.hpp */, + B9A1298C2392965F68B9AE60DBE0B247 /* NstApiConfig.hpp */, + 8C20A4261AAB5D4731891122D5059BB1 /* NstApiDipSwitches.hpp */, + 06F9614E94FCE209A55C8C7298C28ACF /* NstApiEmulator.hpp */, + BF8FF38768C4E80A0EA1F613D38541E5 /* NstApiFds.hpp */, + 9EF3AB85099AAD5C4A46D49D93BB46D8 /* NstApiInput.hpp */, + D600C41025FD98A039F6974280BC9059 /* NstApiMachine.hpp */, + 94C8A461D47DE4DDB1AEE7830B56ADAC /* NstApiMovie.hpp */, + DBE05472ED5AAEBB0CA13B43E5496F2F /* NstApiNsf.hpp */, + 6D3563437D8960176CEF09AD9B1291B0 /* NstApiRewinder.hpp */, + 447F33D4AC9DCC18BA8E7C821EB936A8 /* NstApiSound.hpp */, + 2E2407FBC4681D02CEDB01BEEC0AC171 /* NstApiTapeRecorder.hpp */, + 1227B98A9F28F7732433A1CA68F8F875 /* NstApiUser.hpp */, + C7561F25DF5A13A37A67CFD89590E68A /* NstApiVideo.hpp */, + ); + name = api; + path = api; + sourceTree = ""; + }; + DB8A6C1671C08CF27B21D36E389F1DE9 /* Core Data */ = { + isa = PBXGroup; + children = ( + C09575AF57FFD4D7C7A04FC133E63156 /* MergePolicy.swift */, + 0FFF2C8BA989A2993AF7181B8C71DCEA /* RecordController.swift */, + ); + name = "Core Data"; + path = "Harmony/Core Data"; + sourceTree = ""; + }; + DBCCD21D40533FA56554588F209F10D5 /* GoogleToolboxForMac */ = { + isa = PBXGroup; + children = ( + ADEE4E317A718E12907787A717B015D5 /* DebugUtils */, + 854984175C84061DD74B5A244FB3F9F0 /* Defines */, + 050D00D7D27F91B40E00BE7757B5529C /* NSDictionary+URLArguments */, + C64CB76ADEFD16E30906C74F992B3CCA /* NSString+URLArguments */, + C0D343A3DF1A1ED3CBBC9AB812DAEEE8 /* Support Files */, + ); + name = GoogleToolboxForMac; + path = GoogleToolboxForMac; + sourceTree = ""; + }; + DC3020A2448B8055BB5E80F16F525BE6 /* Video */ = { + isa = PBXGroup; + children = ( + C7AB9F8A6F41A6BF238E1816BF6ADAE9 /* BitmapProcessor.swift */, + 0E80277EFECC528835574F12FD313326 /* OpenGLESProcessor.swift */, + DB6C6046F5260896D182C1590701A4C2 /* VideoFormat.swift */, + 07BDCD6B6C9579E41B46804763B13582 /* VideoManager.swift */, + ); + name = Video; + path = Video; + sourceTree = ""; + }; + DCECEB869B40FCFDA86A7ED95CD7DF6C /* SNESDeltaCore */ = { + isa = PBXGroup; + children = ( + CC07376AABD939BDEBA79D5F2CBA2522 /* Pod */, + CB4D937EB1CD8D9527E9DC1C2C3D8E87 /* Resources */, + 6F1AA42E253D4B3FE8E609EEB5631BBD /* snes9x */, + 255F9E88E31CB0CC2B35AAE7E87F8203 /* SNESDeltaCore */, + B0586A3F5DC5B637ADF9921EBB25472D /* Support Files */, + ); + name = SNESDeltaCore; + path = ../Cores/SNESDeltaCore; + sourceTree = ""; + }; + DD765E8C1F357163F0D20B44FC57054C /* Mupen64Plus */ = { + isa = PBXGroup; + children = ( + E8722061C33778AE1F97FC49F3085673 /* GLideN64 */, + 42BA3372D0FA1F2A0881C0A15BB3C68B /* mupen64plus-core */, + ); + name = Mupen64Plus; + path = Mupen64Plus; + sourceTree = ""; + }; + DE17DF46EF74082FE7270E1C29484DB8 /* src */ = { + isa = PBXGroup; + children = ( + 82FBA2B67465A45C1675F8BEE3D6FAFB /* SFML */, + ); + name = src; + path = src; + sourceTree = ""; + }; + DE7D2CCFEE7555D473C60E1D9F28C57B /* dd */ = { + isa = PBXGroup; + children = ( + D8D7F2571154753B11327E7B624A795A /* dd_controller.c */, + B83F5B2E3006BD12D60CA06E677E7EE6 /* dd_controller.h */, + ); + name = dd; + path = dd; + sourceTree = ""; + }; + DF3B22F60265FDA8A0BDFE0524F0C13D /* src */ = { + isa = PBXGroup; + children = ( + 4903CFCCF14E60B4FC1C1EFCB86ECE55 /* alist.c */, + 1FA26C4FB0D6E27B0C9E9607D02D8E25 /* alist.h */, + 215F41B527253A671A97637E35BDC2EA /* alist_audio.c */, + 51F387B6A186310DE8AB25011DB2D480 /* alist_naudio.c */, + 5844DE373A9FE031984BEA797C1C7A39 /* alist_nead.c */, + C88191C64D7E8CE0EE4B4033CCB6D0FA /* arithmetics.h */, + F7095B17BD490C5C3C946BF5CE387A22 /* audio.c */, + 00E1CE975F5DF9EF52286A091470CE4D /* audio.h */, + A999E4DD49AD8CA4E0FB85985E53D97E /* cicx105.c */, + CD4250629F8C1D5652E021E52A3F196C /* common.h */, + 74F470E8DD823ED4FE7D10FB84B4ABD8 /* hle.c */, + 92BF79F8CEE5F58CD7F29CAF0AED592D /* hle.h */, + 6E7D780A13B2915F46EF4226090CBCC5 /* hle_external.h */, + 58B5E7D372F81123297C2A52505FD923 /* hle_internal.h */, + A9749B925BF718E50CBCEE6B82F21925 /* jpeg.c */, + 6A36744D626ECD3743CA4F297A98EA19 /* memory.c */, + D79C4564600E16C5D3087362DA9FB91E /* mp3.c */, + B6DF6A81ED3CF21DF9B51DF914D08077 /* musyx.c */, + 67464BB3B17BCC0986DEB6DD52C604A5 /* osal_dynamiclib.h */, + 2A7484DF86BAC6712F444A8FFBF23277 /* re2.c */, + D1AF2289C82F924BD674E01C203E7B6F /* ucodes.h */, + ); + name = src; + path = src; + sourceTree = ""; + }; + E1AD09726E2CA3D30FD42BB13C9E60F8 /* src */ = { + isa = PBXGroup; + children = ( + A4BC2C14AAA86B73D6B28FED8975C3F4 /* bitmap_font.h */, + 8BA5B2EC8B8F0A5D59CC97B40A380CA8 /* counterdef.h */, + A0FED83361E402BB0547DB052277ECCD /* cpu.h */, + 173C3BCDE823B84D23477806EC2CF1EB /* initstate.h */, + 26DDDA2E6D5D939969B8FDD448F57499 /* insertion_sort.h */, + 92D57715B2185B75E5396245FFBAE48E /* interrupter.h */, + 0017998E6980B0ABDB2A24D94074549C /* interruptrequester.h */, + 49A05F402834F289E25A1D2D8D31ADA5 /* memory.h */, + BDBC8749B7239FFE93E87463C75D3321 /* minkeeper.h */, + 00DDAF44FCEF1DAE01680CB1290E8DA6 /* osd_element.h */, + D1BA7EA1AD9736CD11003C39C000C9C9 /* savestate.h */, + 7B55E01B937143BE70ADC92C259EA847 /* sound.h */, + 57934C5612E8312E8D46FB26A52FE946 /* state_osd_elements.h */, + 8BD3541718061A90921DC7BAA43765B2 /* statesaver.h */, + 60925EDCF9318CAB1FA3938859111AE0 /* tima.h */, + 0ED12F95712B43803C58FF2D53075392 /* video.h */, + ); + name = src; + path = src; + sourceTree = ""; + }; + E2620C3C1877C7DED9743652F9692A17 /* Support Files */ = { + isa = PBXGroup; + children = ( + 1CA6BD5A93F759A947F93E294905013E /* DeltaCore.modulemap */, + 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */, + B270BDDBFC6E00BB3C7D20C485D51558 /* DeltaCore-dummy.m */, + 624F9323E74C2F61AB1277993C89EBD7 /* DeltaCore-prefix.pch */, + D8EB194138EAB03A1BAF77804381385D /* DeltaCore-umbrella.h */, + BB995585BB8CD0FC8EA0EC91CA17BBC4 /* ResourceBundle-DeltaCore-DeltaCore-Info.plist */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/DeltaCore"; + sourceTree = ""; + }; + E31275459F62FCFE7326250B9826CA9D /* pngminim */ = { + isa = PBXGroup; + children = ( + 13F4C791B31AB8ED0AEC8F876A024121 /* decoder */, + EFC7DDE06F914B061EFA081392745B7A /* encoder */, + 6A9FECAC90D84DC9C2E44FC9199B87EB /* preader */, + ); + name = pngminim; + path = pngminim; + sourceTree = ""; + }; + E4AE1D2B784C4526230863F51855AD4D /* Pod */ = { + isa = PBXGroup; + children = ( + 517688C527284043BBF5D64716B79E5E /* Roxas.podspec */, + 36CB3E3F01D050A62BBD3A2DB25F6116 /* Roxas-Prefix.pch */, + ); + name = Pod; + sourceTree = ""; + }; + E5AA6D816EF0CBE0828B2F5F2B9F3759 /* N64DeltaCore */ = { + isa = PBXGroup; + children = ( + AAF3FD6676FB908497318168CA250E29 /* N64.swift */, + 1EA3DF2BEE5BA3A560AB2D24010A1910 /* N64DeltaCore.h */, + BEA4783459FBDB405F91C34373955400 /* Bridge */, + 0E57A818B9F9286B7451FBD334254A8E /* Types */, + ); + name = N64DeltaCore; + path = N64DeltaCore; + sourceTree = ""; + }; + E8722061C33778AE1F97FC49F3085673 /* GLideN64 */ = { + isa = PBXGroup; + children = ( + F8BC2DCA1F1031108D65E5DDE5D31B95 /* ini */, + ); + name = GLideN64; + path = GLideN64; + sourceTree = ""; + }; + E878750482CECD30C0B696DEC99BC4F5 /* services */ = { + isa = PBXGroup; + children = ( + D0CE7BCBDFB3A9A4EBEA78CB70BFFB3E /* svbdf.h */, + B2C7AE6607FC679EA4767E48ADD80B0C /* svcid.h */, + 77E4E93A1AA6AEE3A862BF83964C18B4 /* svgldict.h */, + D64D70EE0AECCCED6FF32F99E14D58BF /* svgxval.h */, + BB711F8EFE31B0F681D314A46FEA8398 /* svkern.h */, + 22E35E02382F4B1E5D0995608B8BCCB7 /* svmm.h */, + F97F1DFA4F57F5E203007254CF9BE0A9 /* svotval.h */, + 339EF64DD9F7A5E35B3CA9B6E200C168 /* svpfr.h */, + 89A7A6CB88FF9F00BD89DB332B5BDA1D /* svpostnm.h */, + F33297D97FD3A5157D3125AA0D30D1CC /* svprop.h */, + 6871DA21F2195F33706882F64D12E1D8 /* svpscmap.h */, + 4C269A9412FC718CE8C8E996630F5873 /* svpsinfo.h */, + 3DA02F00ADA726E3CE0F82AA955FFB71 /* svsfnt.h */, + 0CD4D6B9E5A8C737F812D9FE05776374 /* svttcmap.h */, + 9D07B62C2930860C9FC0DB9D497C72D7 /* svtteng.h */, + 440D7ACB57B622DFF74C66B788D3B238 /* svttglyf.h */, + BAB2153E188978ED7096999E36B0E1D7 /* svwinfnt.h */, + 25FCB0ABC4939495F4D8023884606D3C /* svxf86nm.h */, + ); + name = services; + path = services; + sourceTree = ""; + }; + E9008238CB64036A4BE0ADA65490F1AA /* DepthBufferRender */ = { + isa = PBXGroup; + children = ( + 5B549F21788F17AE386F9C9F83BACC06 /* ClipPolygon.cpp */, + 9524C7CAEA9B69DE45AEF5526465F6C0 /* ClipPolygon.h */, + 38670547E681F154E5A9A09F39390D14 /* DepthBufferRender.cpp */, + A1817B7D536070DB0693E3627DEE3C0E /* DepthBufferRender.h */, + ); + name = DepthBufferRender; + path = DepthBufferRender; + sourceTree = ""; + }; + EA6454E318650211EB884DFD5405079F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 63E486C49EB5CD189D8E3D136D388F32 /* Fabric.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + EB6C0793656914F1AF54EE46FD06020E /* standard */ = { + isa = PBXGroup; + children = ( + 6CDA9A78863460869F150386B089AF8F /* AggregateFunctions.swift */, + 20BCD689A6CAE5B82E9CC42375BA7AE7 /* Blob.swift */, + 998BCE1BFCDA316A894F5BE77EF92AD4 /* Coding.swift */, + 8B7A2F207266496310F9415852A1EBD7 /* Collation.swift */, + 5C8D94F40BF63E8927B70BB024B0F136 /* Connection.swift */, + 848F3AD32B7A8F7F08945CA3643BE446 /* CoreFunctions.swift */, + A2B5384F92FD40CB28071138A07D6BBC /* CustomFunctions.swift */, + 736E24DAB59401834EC1B3DBAEF4EEF6 /* DateAndTimeFunctions.swift */, + BEC812792FD886E7BB2776C793B6BEEB /* Errors.swift */, + CB8D4802A5F80BBA2E31C377A7C9689F /* Expression.swift */, + D113E482EBF7C096302CD382067ECB51 /* Foundation.swift */, + 61922816ADB3E7C4600DF77D3B382727 /* fts3_tokenizer.h */, + 399303C061E83D38C607412717024931 /* FTS4.swift */, + 9E672A1C13EE353B0AC39DE0F84A4323 /* FTS5.swift */, + 7B4E004174F5A12104EA6702A90AC6D9 /* Helpers.swift */, + 8760D486359333F01A58D9A3E6965D9E /* Operators.swift */, + 2C998AB9300BCC4AD6368CB1FA675F29 /* Query.swift */, + E60E75825D0C5BBF73C1EE33565BACBF /* RTree.swift */, + 6CD2701346D82207B53CC9EC541F8AB0 /* Schema.swift */, + 6822483789D6B6BB133ABB5446BCFF2D /* Setter.swift */, + 007B238BA4CBDD19AB8422150260B200 /* SQLite.h */, + FB1AC80F9908EC458F2880C5D2B25C33 /* SQLiteObjc.h */, + 89132F0647F462DF7B2532346D3447EE /* SQLiteObjc.m */, + 96BB44A4386C6A18D5BEA9F5AF2E1EF0 /* Statement.swift */, + A6FC26E46646A054862FD9FA6A118709 /* Value.swift */, + ); + name = standard; + sourceTree = ""; + }; + EBB17EA90FE6634062678776E354459E /* x86 */ = { + isa = PBXGroup; + children = ( + FF74B4BEF4D07BBAE9D9AEC6720AA7C7 /* assemble.h */, + D587573F39534790FBF56E7EEC8232B0 /* assemble_struct.h */, + BD1D6B58318EF86DA5951706280EB3DC /* interpret.h */, + B98E48490885483AD070534BE31BBED4 /* regcache.h */, + ); + name = x86; + path = x86; + sourceTree = ""; + }; + EC2170727E87969CEE48058554CEE957 /* gba */ = { + isa = PBXGroup; + children = ( + F5CBD60FC0FF5C423C847C962880F76C /* agbprint.h */, + A1E8AC977ABBC00002A2FD5C18CF395A /* armdis.h */, + 3940CE8EE2A18C0E5B6BE8394499EEB9 /* bios.h */, + 37EAE6D3D608C9A5504D237AEFF46B37 /* BreakpointStructures.h */, + CA2F2C7F1257D8E558E768DAD7B2D74B /* Cheats.h */, + 0AEA4696FF630389674F9A479B343F8E /* CheatSearch.h */, + 63BABDED98CDB1DC811FC1832968CE5D /* EEprom.h */, + 86059796C87D909C7319742A6AD185D9 /* elf.h */, + BE88F0656454261D53E5BE768654A774 /* ereader.h */, + 6A8950AA257A8E57DB3C9539DBCCC980 /* Flash.h */, + 325F0C3218801422F4A41352BE209C49 /* GBA.h */, + C48EADCAA3A0151BF5347F5EE447CBD1 /* GBAcpu.h */, + B2A2C9E40FB41F12D2820E3BC07998FC /* gbafilter.h */, + F0220951E1C5853626F63AA3472A9F71 /* GBAGfx.h */, + C32EC4E1163CB30B4250829CC8FCC1BA /* GBAinline.h */, + 64F5E353543E813AE8499F0415496364 /* GBALink.h */, + 27CF12F82D7FC895B714C5F31C07E905 /* GBASockClient.h */, + 1C829F5E801FB46F0C66DA77EB247349 /* Globals.h */, + B0720305184D6498023330012901935C /* remote.h */, + 838D80A959C5C766EFB33104D72194AF /* RTC.h */, + 587FE8C376C86B170BA2C85960B06B3F /* Sound.h */, + A1F4F491B0BC25A23355012F46D89DAF /* Sram.h */, + ); + name = gba; + path = gba; + sourceTree = ""; + }; + ED91CE637F37121B420FEF20D0FBB875 /* gambatte */ = { + isa = PBXGroup; + children = ( + CC4735CB3C09953ECC85CB3CC2A74DCB /* common */, + C3EF978A151AE28C04A2AE18B57B9AA8 /* libgambatte */, + ); + name = gambatte; + path = gambatte; + sourceTree = ""; + }; + EDC59E6E374D3BBB0CB71D83DFF7341C /* Frameworks */ = { + isa = PBXGroup; + children = ( + A1B735B269B158DE4B7075B7EB181EAF /* Crashlytics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + EFC7DDE06F914B061EFA081392745B7A /* encoder */ = { + isa = PBXGroup; + children = ( + 7A65C5E1DB73B52B64C8509098509B77 /* pngusr.h */, + ); + name = encoder; + path = encoder; + sourceTree = ""; + }; + EFF9703FCB71789ACC30CF54E93AFA5B /* SwiftyDropbox */ = { + isa = PBXGroup; + children = ( + 76762292E978FDAACA63D856A9CD4F5F /* Async.swift */, + 0DC45D7DB5CFA98660E39905809A298A /* Auth.swift */, + 0E2C78A8799FD3F430CD405874430028 /* AuthRoutes.swift */, + 4871776B4C704E222EB93D062575DC5A /* Base.swift */, + AFADC4424D377B458AE08BE73A8876B0 /* BaseTeam.swift */, + 14057D1AEA66E65BED2117946518BB10 /* Common.swift */, + 23C9343FC4FB0FD507A750B3EF697747 /* Contacts.swift */, + 77CE0C99378A2FDADC3F70471D336C79 /* ContactsRoutes.swift */, + BB060E9B70D07FF358DD8F33001FD5C6 /* Custom.swift */, + 8EF02F520CDA87AF4813D4764ECD43F5 /* CustomRoutes.swift */, + 37497E9D4A4AD3D7DBDCBD661F3B23B8 /* CustomTasks.swift */, + 5A52DF3CA0011FA99AF644362B09A598 /* DBChunkInputStream.h */, + F2AC6B33D1F207C23351293A0A281146 /* DBChunkInputStream.m */, + 5456371B4D7DC880854562F4F53807C1 /* DropboxClient.swift */, + F4CE4627B8A26D8EBCF531C808BA677F /* DropboxClientsManager.swift */, + 8364432B8E72D0344D921A2164F73693 /* DropboxTeamClient.swift */, + 6E2C328E034800C2CB26F5B94B12DDF6 /* DropboxTransportClient.swift */, + F12EC1D77781095125E901DEFF622F36 /* FileProperties.swift */, + F40E721AC96D7B1BD5F1609F94C46FB1 /* FilePropertiesRoutes.swift */, + CDA07C9DEC9FD13724174A7D6794AD7B /* FileRequests.swift */, + 1393F6F0A0F928C49105FCA78288193B /* FileRequestsRoutes.swift */, + 039A7DC666394A7FCDA8D0587DD80EAD /* Files.swift */, + 6F2799783940A21EC2EE44D1A48F5758 /* FilesRoutes.swift */, + 542213FAAE95E6EA5E3E9392D8DD3B49 /* OAuth.swift */, + 0A552ADFE847FA0B9435F038FD25C6AB /* OAuthMobile.swift */, + 75F9C1E6A3EFB7439D016876D6537610 /* Paper.swift */, + 5D72BB4EABA02D0C40C9847B11342161 /* PaperRoutes.swift */, + 95CCDA31768B63EA9440181D3FB6DD17 /* SDKConstants.swift */, + 4B0CD3AC5CF344D777C591A59C269664 /* SeenState.swift */, + 0E38834C7999CFB2670ABDAE5FC71FEB /* Sharing.swift */, + 8888D8043BC735B8831AE2FB72C5DCE4 /* SharingRoutes.swift */, + C2FE893CBC159403181F3126C6C7917D /* StoneBase.swift */, + FDEA401B77A227622E55445028991383 /* StoneSerializers.swift */, + 4E4A59F776B62FE5D7D647BF19F07F8E /* StoneValidators.swift */, + E248CA8F99CCB2FEEDCE6967354F7FB4 /* SwiftyDropbox.h */, + 2C9E8347629FB94F0A3A23F8ACE7DF87 /* Team.swift */, + 244DCF4A8FC46E79A6101C49202C0DBD /* TeamCommon.swift */, + BCBE6B3F37DD42BA03F9A43F4FBE4F4D /* TeamLog.swift */, + DEBCE82463719FE6476D577E1F4423FD /* TeamLogRoutes.swift */, + 6A4B7B6EB4DB8A673532771B4AA8B264 /* TeamPolicies.swift */, + A222C0427237AEDD558FEFA410B5E021 /* TeamRoutes.swift */, + 31BFB44B9B839260D03128AA298313F4 /* TransportConfig.swift */, + B5246923E4069138B8F38B3EF8C4EE4D /* Users.swift */, + F53A98CDF1BC90A1B45D603F7DC3BC7F /* UsersCommon.swift */, + 3D5A8C2D0C4FF79FF4A82A7C02704490 /* UsersRoutes.swift */, + 48108D7847251652893F854B19A7370F /* Support Files */, + ); + name = SwiftyDropbox; + path = SwiftyDropbox; + sourceTree = ""; + }; + F250106D2FB2610EB9843ED15080AA12 /* Types */ = { + isa = PBXGroup; + children = ( + F571DFD58990674E824384F544CF9CD1 /* SNESTypes.h */, + 087E76CC675F0056172F689E3EB38F3D /* SNESTypes.m */, + ); + name = Types; + path = Types; + sourceTree = ""; + }; + F417425CB2FA1D05BAD4C5F1DF071FED /* Core Data */ = { + isa = PBXGroup; + children = ( + 04CC6EBCEC394DA0E803BBA27F7D98C0 /* LocalRecord.swift */, + 99D799A06F3A84C7D777C9A3BD9BE511 /* ManagedAccount.swift */, + 10788548DAFD98FFF15969586412798C /* ManagedRecord.swift */, + 988D4B1A89D40408B7ABF72F05B65950 /* RecordRepresentation.swift */, + BE12392094B01C972B9C0018E1869E29 /* RemoteFile.swift */, + 6F994DCAAF05A0E4ADF9D352FAB0A16E /* RemoteRecord.swift */, + ); + name = "Core Data"; + path = "Core Data"; + sourceTree = ""; + }; + F4403F4F7271CB18FFDA1C94D9E6D79B /* Resources */ = { + isa = PBXGroup; + children = ( + 0011F0531529E83F54AAEB2C8A2969F1 /* Standard.deltamapping */, + 085C87B06F454385CDE8CA11CD18D9EF /* Controller Skin */, + ); + name = Resources; + sourceTree = ""; + }; + F5390EEB6BEF003CADB12460CB4B2A7A /* rdram */ = { + isa = PBXGroup; + children = ( + 2545337131DCB550937E1BA985A7CFB7 /* rdram.h */, + ); + name = rdram; + path = rdram; + sourceTree = ""; + }; + F6A9098AC3B032DB857E0C78F0204F56 /* Core */ = { + isa = PBXGroup; + children = ( + 1C490BE7A4301170F339101D64A47136 /* GTMSessionFetcher.h */, + BCA1F428AFD84BF440CD3E1D14DE8168 /* GTMSessionFetcher.m */, + 4E4A6FA078E5D38752214D65807E3B87 /* GTMSessionFetcherLogging.h */, + F10F7750064142DE73F6F7454CC2983E /* GTMSessionFetcherLogging.m */, + 1AC5310CC574B1695D106EA4A1306618 /* GTMSessionFetcherService.h */, + 39319E8C5681BB472007926F7AAC4580 /* GTMSessionFetcherService.m */, + 5AB3CC30BCD19485A7A87DB2D78E2BA1 /* GTMSessionUploadFetcher.h */, + C538C31B2DE4BC6BA5C964106E5E3F6B /* GTMSessionUploadFetcher.m */, + ); + name = Core; + sourceTree = ""; + }; + F8BC2DCA1F1031108D65E5DDE5D31B95 /* ini */ = { + isa = PBXGroup; + children = ( + 20E6DC27E3CD5270C16AC4F9F2E0D3B5 /* GLideN64.ini */, + 23AFAE86E4F0EDD062DB46895DAF5251 /* GLideN64.custom.ini */, + ); + name = ini; + path = ini; + sourceTree = ""; + }; + F8BFD89AC7030A2275F68E37537F7FBC /* sdl */ = { + isa = PBXGroup; + children = ( + 1B69ECEA6865A9F1815D0B371F50D01E /* debugger.h */, + B7D405FFFFAD99E717267886418DECCE /* expr.cpp.h */, + 521E061C02DD904E7838383DE2E1B0CF /* exprNode.h */, + DBFD59116F5FC54AE4428271A6BB1CAA /* filters.h */, + 9BB52CE6A9BF6A1CFA75A61E1AFEDA7B /* getopt.h */, + 933F52FD6D2B1895EB6774DAEDF6A159 /* inputSDL.h */, + 2EC1909CF0C525687C49B17CBAC1003E /* text.h */, + ); + name = sdl; + path = sdl; + sourceTree = ""; + }; + F8D98830EC41E3146B6BDD235AC0C269 /* GraphicBuffer */ = { + isa = PBXGroup; + children = ( + 3443718CF69897A14D49B9C400E80C50 /* GraphicBufferWrapper.h */, + CC7D68D1132C8D6ABCDC4CBDEA4D1DB5 /* PrivateApi */, + 67729C4B61A9E5087982AA63B6CE8345 /* PublicApi */, + ); + name = GraphicBuffer; + path = GraphicBuffer; + sourceTree = ""; + }; + F9061D0E4A60F9CAA6C2BAA0D3980F65 /* rdp */ = { + isa = PBXGroup; + children = ( + 7B2001812085959BA9C558864721110A /* fb.h */, + E5E0E7F22F5068FCBB7C8E4EE92F086F /* rdp_core.h */, + ); + name = rdp; + path = rdp; + sourceTree = ""; + }; + F91F7362204553708071F1921C34C1F1 /* Harmony-Dropbox */ = { + isa = PBXGroup; + children = ( + E644A28566DC640498573CF1E665C045 /* DropboxService.swift */, + 142B2CFFAF6692BC41348D5B5B30FDA1 /* DropboxService+Files.swift */, + 9140DC01C356F980A0A4E04F1CCC3636 /* DropboxService+Records.swift */, + FB9C709F559518962C652F5BBA13E865 /* DropboxService+Versions.swift */, + 3A48D7D6AC876F97FF54F36FA99BED65 /* Extensions */, + ); + name = "Harmony-Dropbox"; + sourceTree = ""; + }; + F92F2C5B0F87637AD604C89BF6D32190 /* freetype */ = { + isa = PBXGroup; + children = ( + 2C5DC4F17D3440F8CFAFB9138AE99311 /* include */, + ); + name = freetype; + path = freetype; + sourceTree = ""; + }; + F9A6B2694D547CAC69F1722310556B77 /* Core */ = { + isa = PBXGroup; + children = ( + 51271E29C0A54F7A1326245A7BE21051 /* NSData+ImageContentType.h */, + 1B8AF793D67661D01A11B1A56931BA03 /* NSData+ImageContentType.m */, + 74853BDEC32A6CFF7D0D323E406FE7A9 /* SDImageCache.h */, + F6D110BCE90D1CF941FD0145CBB7DD6C /* SDImageCache.m */, + C87526B5C0AF75FA4CE41AA42D172B0B /* SDWebImageCompat.h */, + 0402C21751DF9B30592DAA2E4DEAB0A6 /* SDWebImageCompat.m */, + 83433F387FADB6F93585B15C45F26C41 /* SDWebImageDecoder.h */, + 930C6159C2738B8427010914FE6F8715 /* SDWebImageDecoder.m */, + F88BB2DC2D2059BC24702E5033B1FA18 /* SDWebImageDownloader.h */, + 72224C07100B6D8A8371BBAC83840304 /* SDWebImageDownloader.m */, + 792056404E543D00399F5986E8B3812F /* SDWebImageDownloaderOperation.h */, + E51C90A9B7B35AEE09669310AB15BED0 /* SDWebImageDownloaderOperation.m */, + 40D3DBD12BF6940FC1A2BE76A08E5471 /* SDWebImageManager.h */, + 4C0BA17B21F19930A3F7215B702D7372 /* SDWebImageManager.m */, + BA5332776FCBF3B75CDD7168F2B8E2C4 /* SDWebImageOperation.h */, + 1EEADA9A5C4C5EF8A88BBC09B95C5F62 /* SDWebImagePrefetcher.h */, + 73BCCFACB97ADF9811932D4767D83953 /* SDWebImagePrefetcher.m */, + 9D71AD94F1DE85C71287112E838A7581 /* UIButton+WebCache.h */, + 578F350CDE9D940384DFB5636F635219 /* UIButton+WebCache.m */, + 71FF835F27DBABBE447A40E51AF4AC68 /* UIImage+GIF.h */, + 7E793979C109E7302877C7903D7ED408 /* UIImage+GIF.m */, + C17445D591C8EC78950717FD3D5F77B1 /* UIImage+MultiFormat.h */, + 040EDE19207F90BFBF015280544EC415 /* UIImage+MultiFormat.m */, + DE7BED3E5E48EB3660BE48EE00FA7AFB /* UIImageView+HighlightedWebCache.h */, + 70DD00852D37B01767D028ED9AA2DDAD /* UIImageView+HighlightedWebCache.m */, + 285001A3E16D55354667EDFD2BF69729 /* UIImageView+WebCache.h */, + 85CA254539B604E12B65C0315AD84D21 /* UIImageView+WebCache.m */, + C71C064E0F8E2D6A2B6E0CB4849BFC5B /* UIView+WebCacheOperation.h */, + 23B56F8A99B549137872A3667B98CBAB /* UIView+WebCacheOperation.m */, + ); + name = Core; + sourceTree = ""; + }; + FACBD0B298A0ABD02B047E1D35541236 /* ZIPFoundation */ = { + isa = PBXGroup; + children = ( + EA7EC2EE415DCFBE44F9DBD4F92DB34E /* Archive.swift */, + 783A65AE17A33F0C1C242F5B30F01680 /* Archive+Reading.swift */, + 4476D277BAC65A966CF97717AC7EC945 /* Archive+Writing.swift */, + 4DB7F32ED8575A87699DF593661DBD4B /* Data+Compression.swift */, + E474FB45FC3DD9C8E04C72D076AC8DFC /* Data+Serialization.swift */, + DA67DD1AC07C6365F72FCAE6272760D2 /* Entry.swift */, + ED22F3BA7E83E1DC36113EFA2D24588C /* FileManager+ZIP.swift */, + AE354EB66CE6C885A5ADD3E361C6268F /* Support Files */, + ); + name = ZIPFoundation; + path = ZIPFoundation; + sourceTree = ""; + }; + FAE3180D34498BCD31E17216B8C80BFE /* source */ = { + isa = PBXGroup; + children = ( + D7195EC7FAC0A0F89F4AD142DB2823C5 /* core */, + ); + name = source; + path = source; + sourceTree = ""; + }; + FB9B4CF7C92056F8465C3BC5744BEA23 /* gregbook */ = { + isa = PBXGroup; + children = ( + 04E947092A258CFB57EB84AFAB619A18 /* readpng.h */, + 205369CAD1E4D0EB34E3DAA176117F19 /* readpng2.h */, + 9C3466A9256511834DC5E817CC21AE91 /* writepng.h */, + ); + name = gregbook; + path = gregbook; + sourceTree = ""; + }; + FBC6B86C478D8F97A3E884A748B232F0 /* Resources */ = { + isa = PBXGroup; + children = ( + 5A95E2EE00E8BE996B0FFEBE598A34B7 /* Harmony.xcdatamodeld */, + ); + name = Resources; + sourceTree = ""; + }; + FE63F8A52B96C1DBCBB2424EBC2DA3B9 /* NESDeltaCore */ = { + isa = PBXGroup; + children = ( + 963237A63667F4DD10B901754C2F8AB2 /* NES.swift */, + DF48B54B85EDEF813D05CDF5146FBCF7 /* NESDeltaCore.h */, + D0D398A9A595E744E5D60CE80391D74A /* Bridge */, + ); + name = NESDeltaCore; + path = NESDeltaCore; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 1B72DA39E2C4509DFBC84B68F006C7E5 /* Headers */ = { + 08E54C760FF35045FDC8574E38EA5E6A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 79D32ADF1C61C37E59CA2953C98306D2 /* SMCalloutView-umbrella.h in Headers */, - FA2F8C81A1DA5F9810C8A9742D0C1CA1 /* SMCalloutView.h in Headers */, - 2E52D7D4B89256F06929395CFC03871B /* SMClassicCalloutView.h in Headers */, + 100055E823D8664CA3967CA7223DE414 /* 65c816.h in Headers */, + 6604303E9728F99EAFA8B202C3B06AAF /* apu.h in Headers */, + DF7E34A9447E1503AAD895111E3BCBF3 /* bsx.h in Headers */, + DDCED74F45A4D745CCD7F319429DAD10 /* c4.h in Headers */, + 8386BA8A923E2E72C8229BF7CF7C20FA /* cheats.h in Headers */, + 89FEB422E33FEDC7C1C20B9D953193F4 /* conffile.h in Headers */, + 4C4A649C2F5E44BC6753A9AF4066B5CD /* controls.h in Headers */, + D7374BAD47CD61AA924220F7A5043F63 /* cpuaddr.h in Headers */, + 9C56D975902024C142C35CBA998C6E8D /* cpuexec.h in Headers */, + 4F79FE245CDFD8041C639E51AD66DE39 /* cpumacro.h in Headers */, + D6A44C024915094BD0A87D4DFC412F6A /* cpuops.h in Headers */, + EEEAE72A65DE128B59CA501731003600 /* crosshairs.h in Headers */, + 753C7E6021A90C69A401D819AA4460D5 /* debug.h in Headers */, + EC22AD88F08651F1E9F9D07F1C6CDEE0 /* display.h in Headers */, + 6212EBD634EBA7AC7214545989DC7AE0 /* dma.h in Headers */, + 9631EB3716707DF75A79D5497DF4392C /* dsp.h in Headers */, + 46306BFF5D233EBDB4F8F1FEC8E1CE86 /* font.h in Headers */, + D27F755D124E238008EB400F04D2E040 /* fxemu.h in Headers */, + 3399E40819B47FC57D44FDBE3182620E /* fxinst.h in Headers */, + B9E14DD387C8FE6CD9A8A29DF12A8ADD /* getset.h in Headers */, + 2ABF63D583A05522FC0E68E2A51246B3 /* gfx.h in Headers */, + 830F5B7567E178151EC0E882FA0ECB5A /* hermite_resampler.h in Headers */, + 2759C2F52CCBBBA9F7A243D31EC1D042 /* language.h in Headers */, + 732FD811EC8A5BA0B28708137D0A45D2 /* logger.h in Headers */, + FCCF2FA5A8D8593F791CD74984F915F5 /* memmap.h in Headers */, + D8E9FCCA464240BD9F53DE1BA3C90BB1 /* messages.h in Headers */, + D808ED025C15643A9FD4FD11530825C7 /* missing.h in Headers */, + A131157FDDCA174BD8C7F663486E890A /* movie.h in Headers */, + 6E50F30E4BECE7A6C3531020D1E5C59F /* msu1.h in Headers */, + DFDD4A619790FBB12996A1A6A144E116 /* netplay.h in Headers */, + 788B83D78AB9E0EFF886B1FEB9295554 /* obc1.h in Headers */, + 93ECEC40EB5571AC01CDB1C56EE6AFBA /* pixform.h in Headers */, + 95EF975803B95C02EE458E32DB43C1D2 /* port.h in Headers */, + 6C138F122959D82C0E672FA0ACE8F007 /* ppu.h in Headers */, + F7DFC08D8BF3B75E5D6DDE750D641962 /* resampler.h in Headers */, + 304A6957CBA97867455427624312350B /* ring_buffer.h in Headers */, + 877E7F8058EB4C948ACEBBD1A9285067 /* sa1.h in Headers */, + D5AAE75D370FC24FD284ADBB1EEC5445 /* sar.h in Headers */, + 4C8EDFDEB5BE1B8740F01A75D78CC82F /* screenshot.h in Headers */, + E0CD89ED735B076967D48760C0A1BFE1 /* sdd1.h in Headers */, + 74B438724E9EA3B46DED43330AFF691C /* sdd1emu.h in Headers */, + 499BFF148188191A810DEC5F4E739AB0 /* seta.h in Headers */, + B624009110AE452CBA01D50AD9CF2E24 /* snapshot.h in Headers */, + 860AC74038BF3ED5C0549CBE407D8710 /* snes9x.h in Headers */, + 3323FFE5A1367960FDB731C2D8B45870 /* SNESDeltaCore-umbrella.h in Headers */, + 0F1030089F00486F17ED78F7651056AE /* SNESDeltaCore.h in Headers */, + 56F2FD6BBD1FEDD660C763B74D0367B8 /* SNESEmulatorBridge.h in Headers */, + 67ECCA37061F91867BC2AEA13B836BDB /* SNESTypes.h in Headers */, + A8AA31971602F635B0B2F46C6BB1F07C /* spc7110.h in Headers */, + AD77BEE717454B68BF56D30CBAAEB761 /* spc7110dec.h in Headers */, + 86248453B902ACEF5B80A6573B49E002 /* spc7110emu.h in Headers */, + D0C55D7F18D9A49A467F0E0B8669B0B8 /* srtc.h in Headers */, + FD6339A963EAC26477FD04D0BFAD9996 /* srtcemu.h in Headers */, + 85D1D258236F9752FEFC767F65EEB5EC /* statemanager.h in Headers */, + 1BF72388F9052C123EADC996D4D33C47 /* stream.h in Headers */, + 6446ABE3984EC295A073DDF259A3968B /* tile.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 1F30A2ED6CB965170C57B083170E51CB /* Headers */ = { + 1720941E471683DB933EABFBF20395A1 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C33120AB7F162F6A36C69CAD79D75A29 /* NSData+ImageContentType.h in Headers */, - E2B866A9EAACD842FB99919AAE9E4906 /* SDImageCache.h in Headers */, - 641778FE12F97857A50BE261B15B2F5C /* SDWebImage-umbrella.h in Headers */, - A7D5BF0AD6C422824AEA2A748CD6F630 /* SDWebImageCompat.h in Headers */, - 0480E005B998597CDAF4840B2C6CC21B /* SDWebImageDecoder.h in Headers */, - 448B22FD9431017177D4961A4D9D7D58 /* SDWebImageDownloader.h in Headers */, - C6F70C9B175363719E12355B5D442B62 /* SDWebImageDownloaderOperation.h in Headers */, - D71584E905D5B647948B61730E000FC3 /* SDWebImageManager.h in Headers */, - DF25F30F7BCEFE412DB78BA91E356B86 /* SDWebImageOperation.h in Headers */, - 724B79E991BDA4C491F7022F49A05012 /* SDWebImagePrefetcher.h in Headers */, - 771F4D81EA9ABC58A0B27D97441D093D /* UIButton+WebCache.h in Headers */, - 337C6A4ADF3F69EB0172FA1E585F400F /* UIImage+GIF.h in Headers */, - 766B26DF95710ABF416DB1B1C3307C86 /* UIImage+MultiFormat.h in Headers */, - 73252DD309D55520ACBEAAE0DF29F69B /* UIImageView+HighlightedWebCache.h in Headers */, - 6BF73843D9A21BDD1D8E427F5826758E /* UIImageView+WebCache.h in Headers */, - 78EB149D706A3E9564BC79DC1E171698 /* UIView+WebCacheOperation.h in Headers */, + CE8D08D29BB0A4769D2C276605AFB50F /* Harmony-umbrella.h in Headers */, + B0B08B97A524F8D48FDDA2249AEAD6ED /* Harmony.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - B8BCBBDAC0F94B216837A537C3245066 /* Headers */ = { + 26CD12A0A8FED394729931D851C1BDFE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B7C116BE149EBE5862D07FB23239E28B /* Pods-Delta-umbrella.h in Headers */, + C9898D393FDF7E17C404424E76078E76 /* NSData+ImageContentType.h in Headers */, + 20983A4E2B0967B542119114AB073BB7 /* SDImageCache.h in Headers */, + 32C5649F56A9F2DE34AC6EF9FCA33323 /* SDWebImage-umbrella.h in Headers */, + BCCF0B9F15A1651547EADC31A6CEB5C2 /* SDWebImageCompat.h in Headers */, + DBF0A6C0BE990638F43CB71209C4E731 /* SDWebImageDecoder.h in Headers */, + 488875F3618617406AB771502A10BE59 /* SDWebImageDownloader.h in Headers */, + 07BB377F31975D34EB8CCC8C3E05597F /* SDWebImageDownloaderOperation.h in Headers */, + 32F7E2ACCA4602AE9DE680A9D70EE36F /* SDWebImageManager.h in Headers */, + 52722B0030C7E925E9C8304457491FFB /* SDWebImageOperation.h in Headers */, + E0584F089FB27ABA38D5D355721DE37C /* SDWebImagePrefetcher.h in Headers */, + 16BA02E314DD1557E7856374C52DA346 /* UIButton+WebCache.h in Headers */, + 6A245DCAC5A1FD3F8943F4FD3E1473EE /* UIImage+GIF.h in Headers */, + B2413D48BE65FF8FD294A53D5C5B760D /* UIImage+MultiFormat.h in Headers */, + BCC3B83B11F726387F8C0A3568E470D1 /* UIImageView+HighlightedWebCache.h in Headers */, + E9D90305973DEDEC0F4BFB33B4281876 /* UIImageView+WebCache.h in Headers */, + 8AD3B7AB59719794E86F41BA43AA9BB7 /* UIView+WebCacheOperation.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - C7450CED21D7E482FF9C8CE92158C4E3 /* Headers */ = { + 39DFD9067157BA76AC201E27C879DFBF /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 2B0626ABC52CB360ED779C13293D8B25 /* fts3_tokenizer.h in Headers */, - E0DC7401667C6D33A388294C6402FFC9 /* SQLite-Bridging.h in Headers */, - 9EF3DF4DAC916E0E1443AC1FC542837C /* SQLite.h in Headers */, - BC62290696E2EEFF9620F658B7DEFC3E /* SQLite.swift-umbrella.h in Headers */, + 6D4FDCA328DD8D76500CEE55AA8663B6 /* adaptivesleep.h in Headers */, + 1A511E47EF74155034C3FD58A291B1CD /* array.h in Headers */, + 5E39903C4C3C854D8A8F52D82FF51ED2 /* bitmap_font.h in Headers */, + 4FE9D949CE1EA4D7AC2C0DC75BDC7D09 /* counterdef.h in Headers */, + D4F4CED77BC0C96F563776174E66E619 /* cpu.h in Headers */, + 9E565B2CEB1389604BE252478801A1E5 /* defined_ptr.h in Headers */, + 97C65359994F792189FCBC1C79079A96 /* gambatte.h in Headers */, + 9DE53B2F87039E798D26BE8696AEA4CF /* GBCCheat.h in Headers */, + E393EE012D54F6BB208480E720AE5752 /* GBCDeltaCore-umbrella.h in Headers */, + 990D025FACA7671D88A13F092F6A87C5 /* GBCDeltaCore.h in Headers */, + 0AA09DE9241869ECCCC26D4E11F357FF /* GBCEmulatorBridge.h in Headers */, + 14D191D837FD7D431194C98BC575E356 /* GBCInputGetter.h in Headers */, + 132DE130DC8D504D3672FE0A8438E82F /* GBCTypes.h in Headers */, + 985B7DDD2DD31218D8E7367F76FD2D69 /* gbint.h in Headers */, + 067C84CE3338DB36FF1EC1A0D0D1A63F /* initstate.h in Headers */, + 06F04214E1DFA5C3662A6901F65DD3F6 /* inputgetter.h in Headers */, + 8A2C15A083A63FC24761FE568CD44915 /* insertion_sort.h in Headers */, + A6257B7E52832880771B2BB200A4C1D8 /* interrupter.h in Headers */, + ACA04F1A522EC18A1D9CF1A1A0ECE722 /* interruptrequester.h in Headers */, + B1B404D70676CCCFE3325E089DDCAD9D /* loadres.h in Headers */, + 34AA63D390F044C33722CC2D9CC9B3D6 /* memory.h in Headers */, + AC5C7C37725492D17220C640C6B10B47 /* minkeeper.h in Headers */, + 0E434E17E33AA0A6B8BB202C4684EDD8 /* osd_element.h in Headers */, + 5F89935F0D9FA301409E399D2B40B501 /* pakinfo.h in Headers */, + 19A2BFBA669411936E7BDFC0D05C4701 /* rateest.h in Headers */, + F35E35BAE2395E393B54B5F41F61F31E /* ringbuffer.h in Headers */, + E73B665DFEE5B1EF941B915C2DB4D1EA /* savestate.h in Headers */, + 0E1533213CE06AD25D7A467D0F3AC3F7 /* scoped_ptr.h in Headers */, + 791ECC26E09854BE01A5356B8FB4FBFF /* skipsched.h in Headers */, + 011C0272A367FAF487C0387072D80C35 /* sound.h in Headers */, + E73A1CF4FDEAF251CF9E242867E9E0FB /* state_osd_elements.h in Headers */, + 9306DF595EB74F925D40BC8F70C11F7E /* statesaver.h in Headers */, + 80CD4343EDC4946D43FB62BCE1E7D8FC /* tima.h in Headers */, + 2365E217AA5534FC880E18EF3CE9CA69 /* transfer_ptr.h in Headers */, + C1BF92EE9B78C154547D891F8156FD79 /* uncopyable.h in Headers */, + C3B11E4AA028617D0B3134BF96B451DF /* usec.h in Headers */, + 1E1F3E6F985575475CEC5C5627B10979 /* video.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4479B666E2E570B74D5DBED43917BB9E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + FB7693DF35B3F75D556BADB4277A204D /* NESDeltaCore-umbrella.h in Headers */, + C36CC682F07B3FEA5A1B00C139CCB3EC /* NESDeltaCore.h in Headers */, + 8041BC3728BD95C119B6B152758FF890 /* NstApi.hpp in Headers */, + 32B5C2CBFA681959F551BF129BD8DC00 /* NstApiBarcodeReader.hpp in Headers */, + C7DD70EC49EC3FC47CF6D741BF54B670 /* NstApiCartridge.hpp in Headers */, + 18A170DDE02E7B4C59A58B5C333487D5 /* NstApiCheats.hpp in Headers */, + 8957E0BA7E9FF05452AE65211EFCD859 /* NstApiConfig.hpp in Headers */, + E240D32BDB49F8E26000117E1792DA24 /* NstApiDipSwitches.hpp in Headers */, + EFA0DC841E9880CDA5B1507E29E2E545 /* NstApiEmulator.hpp in Headers */, + 76A404D815A496FF472714B9493FB2E8 /* NstApiFds.hpp in Headers */, + ECAB49B60B49C63B1566F162F02177CA /* NstApiInput.hpp in Headers */, + AC7F07736D60C170ADF5347103C06706 /* NstApiMachine.hpp in Headers */, + 2FBA2E9BACD4FFD2BEAC5CAB997FBC99 /* NstApiMovie.hpp in Headers */, + 8EA421026DD522744405C37C9DFD1AC2 /* NstApiNsf.hpp in Headers */, + F03A441C530590BF7C1DF4B3D4BD675C /* NstApiRewinder.hpp in Headers */, + F08F5F4EDAD9842D1AB41C448FD7ED97 /* NstApiSound.hpp in Headers */, + 90A332D78357408A4893241BAA3FCEF7 /* NstApiTapeRecorder.hpp in Headers */, + 612626E2EEFEF0B280A30622DFCB55C7 /* NstApiUser.hpp in Headers */, + F0C15DA7F5002FC0639540515DB2A332 /* NstApiVideo.hpp in Headers */, + F7594B37B464285DF07D893F8BB3F61C /* NstApu.hpp in Headers */, + A5A84A4DD8A5E89E5AB0C7733B613CE4 /* NstAssert.hpp in Headers */, + 2383152D6C4F84FD2EE8A437B924C1A5 /* NstBarcodeReader.hpp in Headers */, + 9D7F1DA302776DB06BB6428657036442 /* NstBase.hpp in Headers */, + FFA9968DD49CF535DFA48AC9E948F1AE /* NstBoard.hpp in Headers */, + D299CCB9A5A6574C3B9776B6B7065208 /* NstBoardAcclaim.hpp in Headers */, + DFE47A6A5129454BBE6488DA6493348A /* NstBoardAcclaimMcAcc.hpp in Headers */, + ED1EED4992202FB7CF07EFE464320E04 /* NstBoardAe.hpp in Headers */, + 96EDAB5DAB64B77966807FAA4FBEA19E /* NstBoardAgci.hpp in Headers */, + 506700D55CD43C1F9D14D10C36B2E4EA /* NstBoardAve.hpp in Headers */, + B848793866F0C67ED92B0308CCB9D6F2 /* NstBoardAveD1012.hpp in Headers */, + 195CAEC55D7B3D6D31D6DF39B4123E29 /* NstBoardAveNina.hpp in Headers */, + B9805A1656378AAA93AADAA09D5122C1 /* NstBoardAxRom.hpp in Headers */, + C101B03ACD6D46D16A8FAEFB5BB281CF /* NstBoardBandai.hpp in Headers */, + 04FA93674AA0B4947CA3DC85196D9EAC /* NstBoardBandai24c0x.hpp in Headers */, + 9E94A3F6B300F60BE8D7C36F49EADC25 /* NstBoardBandaiAerobicsStudio.hpp in Headers */, + FBB46230897F3CE417083A50F260DC62 /* NstBoardBandaiDatach.hpp in Headers */, + 845473EEBCE88EFF348390D4C70EDA4E /* NstBoardBandaiKaraokeStudio.hpp in Headers */, + 7372BF9BC203CFB23F3EF1A9742FAC93 /* NstBoardBandaiLz93d50.hpp in Headers */, + 7BD0C0DD3F3DB5369846E07F7FA5B186 /* NstBoardBandaiLz93d50ex.hpp in Headers */, + D10C97C4AB425B976ACAAE1D9CF6D55E /* NstBoardBandaiOekaKids.hpp in Headers */, + 815861D1FCD25665B078C7ED9E6D2A6A /* NstBoardBenshengBs5.hpp in Headers */, + 79D1DBF8A2B975AA6502E3E0E19627B4 /* NstBoardBmc110in1.hpp in Headers */, + 74C1EC2D9E5FAFAE8A89018C1B79FD90 /* NstBoardBmc1200in1.hpp in Headers */, + 9174937A3251A2ACDEEB1E350B983F7F /* NstBoardBmc150in1.hpp in Headers */, + 03798D6E6E597C6AFF6054A3EB904E8B /* NstBoardBmc15in1.hpp in Headers */, + 32B869763DE524407E4EC13B5405C6CA /* NstBoardBmc20in1.hpp in Headers */, + 7A7260BF99BC683C9C43C76B8D20DE57 /* NstBoardBmc21in1.hpp in Headers */, + A87DA7AA81BB75957343DA7D33B3D148 /* NstBoardBmc22Games.hpp in Headers */, + 7CC91E5E71DC76D48A82BC591ABA6C87 /* NstBoardBmc31in1.hpp in Headers */, + 5433266A44831DC01F4FEF584030D6DA /* NstBoardBmc35in1.hpp in Headers */, + 430806697BCF27E39D1755EBD50C2AD8 /* NstBoardBmc36in1.hpp in Headers */, + BBF6C4CF1FF711166B74A992339230EE /* NstBoardBmc64in1.hpp in Headers */, + 9E37FB7914BDFC8D3294D18B7942AC8C /* NstBoardBmc72in1.hpp in Headers */, + B3D38E5D11BC50709CA52D6FFC2B9864 /* NstBoardBmc76in1.hpp in Headers */, + CD43E632D8B976AAF6B22A9A83594BD8 /* NstBoardBmc800in1.hpp in Headers */, + 4826CCCFC9FEA358F0FC255ABB00B2E0 /* NstBoardBmc8157.hpp in Headers */, + 3F029746684D344355091865BDDE4121 /* NstBoardBmc9999999in1.hpp in Headers */, + 5A79C28FC58E9C640DFD7AAF04AF8827 /* NstBoardBmcA65as.hpp in Headers */, + 44DFF6AD46F4B1073CBE3E11FABF2CA4 /* NstBoardBmcBallgames11in1.hpp in Headers */, + 37021E54EAB76D5B8FD8730232C11C87 /* NstBoardBmcCh001.hpp in Headers */, + 493D2606DF4B76687CCD0F48B2E76904 /* NstBoardBmcCtc65.hpp in Headers */, + 49518AAC1F6826215684B5499BF1E6BE /* NstBoardBmcFamily4646B.hpp in Headers */, + 27E6E896B473FB2C6E22657C01C3F5C3 /* NstBoardBmcFk23c.hpp in Headers */, + 357A8FB1CC3FD998F2F68DFDBD72ADB2 /* NstBoardBmcGamestarA.hpp in Headers */, + FF60E30A8C317F1FB539F1A815BBF38F /* NstBoardBmcGamestarB.hpp in Headers */, + 7F8FA5EECEFA49B54B06466750976AF8 /* NstBoardBmcGolden190in1.hpp in Headers */, + 4799F1F6F4A15F207732F60601F39CB3 /* NstBoardBmcGoldenCard6in1.hpp in Headers */, + B34FFF478B816C21FA1425DAB52AD1BA /* NstBoardBmcGoldenGame260in1.hpp in Headers */, + 66D90649D3F20F5DA87EC0A5FD2168D3 /* NstBoardBmcHero.hpp in Headers */, + 5FF9738199FD4275E4CEF17EB2FD0E14 /* NstBoardBmcMarioParty7in1.hpp in Headers */, + 25A38C9929C9AA2BF9B4C5EC01EB5100 /* NstBoardBmcNovelDiamond.hpp in Headers */, + 30C13B34A3BE33BA757F87123E879893 /* NstBoardBmcPowerjoy84in1.hpp in Headers */, + E46D10AADB66A01A9490A813CA496DCE /* NstBoardBmcResetBased4in1.hpp in Headers */, + E0C7D4449AA8C5D15535E79C43CAAA19 /* NstBoardBmcSuper22Games.hpp in Headers */, + 96C74431D5A2F68C56AB62BBF1A75D35 /* NstBoardBmcSuper24in1.hpp in Headers */, + 60253526607A110A8D0EE8069B3D101D /* NstBoardBmcSuper40in1.hpp in Headers */, + 0413BC0701D41DE3070F47C36421EF7F /* NstBoardBmcSuper700in1.hpp in Headers */, + 87FFB6022D77762DFF612FCA46DADA4A /* NstBoardBmcSuperBig7in1.hpp in Headers */, + 153188A806D2A1F337D4F09283D8C8FD /* NstBoardBmcSuperGun20in1.hpp in Headers */, + F297900BE7AA8C84345754611015F8D1 /* NstBoardBmcSuperHiK300in1.hpp in Headers */, + A32EDE9B3422EEA2F7F3C931A32A8AD7 /* NstBoardBmcSuperHiK4in1.hpp in Headers */, + 0AE68C487359922B30E80D82CD556435 /* NstBoardBmcSuperVision16in1.hpp in Headers */, + A369A8888AA50BDBB82B59E1D48134D4 /* NstBoardBmcT262.hpp in Headers */, + 8902DF0908579FE08E35AD6DD47CBC77 /* NstBoardBmcVrc4.hpp in Headers */, + 7818851D20DA2D669A8C12B16316D10E /* NstBoardBmcVt5201.hpp in Headers */, + ABDDB6C221DFAE4AAA785817F3446E6B /* NstBoardBmcY2k64in1.hpp in Headers */, + 61637EE91267F265A7F4EB3CECCFFA1F /* NstBoardBtl2708.hpp in Headers */, + F6022F4248018E1F466DE6310CC41E2C /* NstBoardBtl6035052.hpp in Headers */, + CF31DD15B783DC030C99042424B72681 /* NstBoardBtlAx5705.hpp in Headers */, + 08CBBE506F5F9C4F6B5FBA173182B627 /* NstBoardBtlDragonNinja.hpp in Headers */, + BD98350191E37E34886D92370CDB8174 /* NstBoardBtlGeniusMerioBros.hpp in Headers */, + F5D6D35D7781479FB2D95F3856A26F31 /* NstBoardBtlMarioBaby.hpp in Headers */, + 1F5C43C6770674DE9AF51FC93CA86659 /* NstBoardBtlPikachuY2k.hpp in Headers */, + 39F169D40F3D2217C030DF5C4AB9AEEA /* NstBoardBtlShuiGuanPipe.hpp in Headers */, + 79168BEC654655F20E8D99687F8B42CD /* NstBoardBtlSmb2a.hpp in Headers */, + 90217BC322211710F6A8909DC9CB2E59 /* NstBoardBtlSmb2b.hpp in Headers */, + 599D552BADBF132BAA36F06CCCD06913 /* NstBoardBtlSmb2c.hpp in Headers */, + E76913D63F4D790D0D10268C80819BC9 /* NstBoardBtlSmb3.hpp in Headers */, + 71090B7AF02512A3B3624247E31E7431 /* NstBoardBtlSuperBros11.hpp in Headers */, + 1BA51CA49FF3BF6647ECEB45F30364BA /* NstBoardBtlT230.hpp in Headers */, + A4E7AF6547FDAE1BCA941C5C55972386 /* NstBoardBtlTobidaseDaisakusen.hpp in Headers */, + FF971B9F9F993B9F74611546EF606135 /* NstBoardBxRom.hpp in Headers */, + 23522007F1E5D00C56884454695C1C4D /* NstBoardCaltron.hpp in Headers */, + 9D0FD356D97CD52D34960911A8298298 /* NstBoardCamerica.hpp in Headers */, + 8822BE90BB2456E06F40F8E1A71F45C1 /* NstBoardCne.hpp in Headers */, + 5DBB580BC90D0C0893FC692F012A0B28 /* NstBoardCneDecathlon.hpp in Headers */, + B53E55152ACF5185856AA85EFFC3B4B8 /* NstBoardCnePsb.hpp in Headers */, + 9B46DF6F7D385A76CC7419F2CA029080 /* NstBoardCneShlz.hpp in Headers */, + 8CD64FD841EA7CD073DB1D91F67E5F83 /* NstBoardCony.hpp in Headers */, + 134D8E34601F861AC001CCDF57026CE4 /* NstBoardCxRom.hpp in Headers */, + 88BABCA3D1E4F2390E0378A2B5228631 /* NstBoardDiscrete.hpp in Headers */, + 5FFED05405EB077DD3158D0203FEEF2E /* NstBoardDreamtech.hpp in Headers */, + 2E17100758232DC76432B02A12EFAEC1 /* NstBoardDxRom.hpp in Headers */, + F1089B4808327FEC6230C3D66D26E64A /* NstBoardEvent.hpp in Headers */, + 3A629AE2A7756937510D8E4BF71DE816 /* NstBoardExRom.hpp in Headers */, + ED60DEB3E6681250967195F1EE82081D /* NstBoardFb.hpp in Headers */, + 657244809950CE301AD70BDD7C2D4DE8 /* NstBoardFfe.hpp in Headers */, + 0A3FA8250DCAA57E611E6433F084CE11 /* NstBoardFujiya.hpp in Headers */, + 943A7FEF7443174C9AC78E67A5868A92 /* NstBoardFukutake.hpp in Headers */, + BA2D57760A3C386F7C1C547729E1A472 /* NstBoardFutureMedia.hpp in Headers */, + 14814E514A0815D4CF25874DBA95BC79 /* NstBoardFxRom.hpp in Headers */, + 5D11ABFFC6008AB58F5E115BC314596B /* NstBoardGouder.hpp in Headers */, + 462EC951E880EBF477C63C7C878DD3C3 /* NstBoardGxRom.hpp in Headers */, + C57FA8AFDD52EE6417A2E0C1274059E3 /* NstBoardHenggedianzi.hpp in Headers */, + 1DC9D83D5C3C27C865626FDC47FFA727 /* NstBoardHes.hpp in Headers */, + 74BD141762B0C89C185D3ABE65E58448 /* NstBoardHosenkan.hpp in Headers */, + 6F7B7F6E4DF7B31AC33A3A62461A2127 /* NstBoardHxRom.hpp in Headers */, + 6502705CE8C9907BF33AEC009AAE49A6 /* NstBoardIrem.hpp in Headers */, + 61EBB111287EDF6AE4ABF04DA5A396CF /* NstBoardIremG101.hpp in Headers */, + 0418874BC3FB8854951251864FB63C4E /* NstBoardIremH3001.hpp in Headers */, + E805858A4CBFC1A168C9A8320D1E4EF8 /* NstBoardIremHolyDiver.hpp in Headers */, + CB4D7CCAB208A3DB446872AD7C63A241 /* NstBoardIremKaiketsu.hpp in Headers */, + 82BD5D188A75988826E7379FEB58DCDE /* NstBoardIremLrog017.hpp in Headers */, + 3867303ED090C22C7B91F80D0D34877C /* NstBoardJaleco.hpp in Headers */, + 1B8E1324EF162AD35B1923FE3BC32753 /* NstBoardJalecoJf11.hpp in Headers */, + 71F6A8B4B3856EB5415745A312B82590 /* NstBoardJalecoJf13.hpp in Headers */, + 9D37E2CB2398BE97697FE7719B77FFB2 /* NstBoardJalecoJf16.hpp in Headers */, + 3926A56C74A6C3AE66EF1745844B04BE /* NstBoardJalecoJf17.hpp in Headers */, + D298FA6F6D28DD13D771BC71411D5851 /* NstBoardJalecoJf19.hpp in Headers */, + 03537729FA84F09053DE494116B627D6 /* NstBoardJalecoSs88006.hpp in Headers */, + FD2F6B87B0C2E2B0F286279E623668D9 /* NstBoardJxRom.hpp in Headers */, + 516599687587135EAF7497B4869D18AE /* NstBoardJyCompany.hpp in Headers */, + 34FBC7619CC07453CA4485178D84925C /* NstBoardKaiser.hpp in Headers */, + 3826FDB208BDA2324262CC8F09622DA4 /* NstBoardKasing.hpp in Headers */, + 75F7A8F8126A9FE9B693F50E46A15BDE /* NstBoardKay.hpp in Headers */, + 1A320DC3BB4F411FF18589AC2EF1C65D /* NstBoardKayH2288.hpp in Headers */, + 867358F09BCD4400D1CA1EE0BA100FB8 /* NstBoardKayPandaPrince.hpp in Headers */, + F2C3D5F056E937891CBDC532EAEE1987 /* NstBoardKonami.hpp in Headers */, + FC17266254EDD27F76B52F2DFAE02BEB /* NstBoardKonamiVrc1.hpp in Headers */, + 2C86F96F2A98EB8553F83501FAB77D58 /* NstBoardKonamiVrc2.hpp in Headers */, + C4D651A1DA5790D9EB95954015D606B3 /* NstBoardKonamiVrc3.hpp in Headers */, + 71818CFECCB549FFE9A56EFC73229B2B /* NstBoardKonamiVrc4.hpp in Headers */, + A086B96EE66A0AF59654CB9D50DAABD7 /* NstBoardKonamiVrc6.hpp in Headers */, + 94CDC16CABC912819C497850CE4F1489 /* NstBoardKonamiVrc7.hpp in Headers */, + 09A56050F738852C24E48CAB1A12327F /* NstBoardKonamiVsSystem.hpp in Headers */, + C8963BB26817BCC33E40F9AE8652DE31 /* NstBoardMagicSeries.hpp in Headers */, + 24681274F8D57A98446AD3E532DEFA17 /* NstBoardMmc1.hpp in Headers */, + A1AE18411CA8A80C75D039119DED8CFE /* NstBoardMmc2.hpp in Headers */, + 2819DC98C607DE278124727BA384A637 /* NstBoardMmc3.hpp in Headers */, + CC26D87FA28610D70B4991837FDCAE5D /* NstBoardMmc4.hpp in Headers */, + 0C8CEB39DBD171C39AD70F1D22B0D8F2 /* NstBoardMmc5.hpp in Headers */, + 20FA839518ED4413C10C26D0729B844E /* NstBoardMmc6.hpp in Headers */, + 9603A4274C8A74E47EDE5C96E6F3A289 /* NstBoardMxRom.hpp in Headers */, + 4A235B8A8EB5A067D71258818BE0595D /* NstBoardNamcot.hpp in Headers */, + 6C98F3F29A1ACE6C91C20CE35EDA0261 /* NstBoardNamcot163.hpp in Headers */, + F473DE6E2DF0BA57A56F780ACA3D9E94 /* NstBoardNamcot175.hpp in Headers */, + 9B89D3260B3CBDF8B3A37E4C79BE88B5 /* NstBoardNamcot34xx.hpp in Headers */, + C2C42639F8B8C99AE470FFC772F27320 /* NstBoardNanjing.hpp in Headers */, + F565CC28410967B9FC16083B01E52FA8 /* NstBoardNihon.hpp in Headers */, + 4BE34CEBCADA7E00993E48F365D76C6F /* NstBoardNitra.hpp in Headers */, + 8912B1F9BD9142C96BE6E0B401AC9C40 /* NstBoardNRom.hpp in Headers */, + 0F35EC2E4E3C5B5025464323CDA17109 /* NstBoardNtdec.hpp in Headers */, + 809CC541557F42747F35E56C4A8BA2E2 /* NstBoardNxRom.hpp in Headers */, + E91BE4D2EB8ED606C86AEF158A993193 /* NstBoardOpenCorp.hpp in Headers */, + BED6D68A786DBE5B331C32D88E209282 /* NstBoardPxRom.hpp in Headers */, + 13A70EB0D59A7AC78B914E7961428A3D /* NstBoardQj.hpp in Headers */, + 7B594E7B42D038F5C9EAB636CDDCAEBE /* NstBoardRcm.hpp in Headers */, + 27E12C031E1F193F89D7607F22242B8B /* NstBoardRexSoft.hpp in Headers */, + BE8930A97F9D476C9A93D870A62B3D11 /* NstBoardRexSoftDb5z.hpp in Headers */, + ECCC47B233216A74153F147DE44615C7 /* NstBoardRexSoftSl1632.hpp in Headers */, + 37C6EC1C6E2FD686EDD84A12A42235C1 /* NstBoardRumbleStation.hpp in Headers */, + B642F97A1B4740DADB75F4DF9357776B /* NstBoardSachen.hpp in Headers */, + 264031FA160F74BD32D8EF9F30514C16 /* NstBoardSachen74x374.hpp in Headers */, + 5FD5F0CF6C721D19713FF7C5E82F1829 /* NstBoardSachenS8259.hpp in Headers */, + DB4B31BA9A8CC6D815BB4F31E455EBA3 /* NstBoardSachenSa0036.hpp in Headers */, + 21939F9BD51F63E11D098AD04138814E /* NstBoardSachenSa0037.hpp in Headers */, + DD4937FAD87A66D3E6AF7320226ADDB6 /* NstBoardSachenSa72007.hpp in Headers */, + CD26AC8863B99B1389D09F13D85DC363 /* NstBoardSachenSa72008.hpp in Headers */, + EC0E44AC75CBA610CFBDB23601E6772B /* NstBoardSachenStreetHeroes.hpp in Headers */, + 305114B6580952D1693DD539DEA79A62 /* NstBoardSachenTca01.hpp in Headers */, + AC88AE5A5EF6C2D974226145DF29720B /* NstBoardSachenTcu.hpp in Headers */, + 5BD8D84D6C59417A4EFF51A407BA04A5 /* NstBoardSomeriTeam.hpp in Headers */, + 3DF3BF1A81EF709BFA95298AC8F1FEB0 /* NstBoardSomeriTeamSl12.hpp in Headers */, + B3C63A4395449B36D761122AC4A51AAF /* NstBoardSubor.hpp in Headers */, + 8DA6413B75C737288165A6B7CAD2820A /* NstBoardSunsoft.hpp in Headers */, + 9169B8668918831122A0CD580F6972E3 /* NstBoardSunsoft1.hpp in Headers */, + 505AF6CFE7AF897C939CE3F4893D79C7 /* NstBoardSunsoft2.hpp in Headers */, + 27ABACC6A4783C9079079AD0599DB017 /* NstBoardSunsoft3.hpp in Headers */, + 28ED02C88B90C1B230F0D20D597ED49B /* NstBoardSunsoft4.hpp in Headers */, + CC0725ACB5A40F203229C0A25D761B23 /* NstBoardSunsoft5b.hpp in Headers */, + 8D2017BE0B60704C8CB8E34DE6093D3A /* NstBoardSunsoftDcs.hpp in Headers */, + 28AEB1D89C9F02C00B767D2D95D68FB4 /* NstBoardSunsoftFme7.hpp in Headers */, + B97F1A94FF1030E195B110D8EEBCAA83 /* NstBoardSuperGame.hpp in Headers */, + A8F08EEE11D3748876598813DF8BDA17 /* NstBoardSuperGameBoogerman.hpp in Headers */, + BE75DD1EED6E0D0B3AADC2A777C7D9CA /* NstBoardSuperGameLionKing.hpp in Headers */, + 5DF0A3CA62FCFD5CB7345A9B97F10049 /* NstBoardSuperGamePocahontas2.hpp in Headers */, + E512749AF7921ECA10C99B7DDADA916F /* NstBoardSxRom.hpp in Headers */, + 90D2435B8A05AD9EA89B333FD06A470E /* NstBoardTaito.hpp in Headers */, + C51A52DF29F0F1A14A3C4A2435A027DB /* NstBoardTaitoTc0190fmc.hpp in Headers */, + 08DB3EE7795392A4AD6CDA6911C4ADE8 /* NstBoardTaitoTc0190fmcPal16r4.hpp in Headers */, + 822C8AF6FE4E429A7E3DDE28BF009AAB /* NstBoardTaitoX1005.hpp in Headers */, + CD819361F1900AD6FB43579B9DCAA9BF /* NstBoardTaitoX1017.hpp in Headers */, + 80531DF27FAEB5E6120BDDD6681434C2 /* NstBoardTengen.hpp in Headers */, + DEA2456E9F8C9B4F29D544BFCF3E332F /* NstBoardTengenRambo1.hpp in Headers */, + 8171418ED78BE2744E4E374105338AEF /* NstBoardTxc.hpp in Headers */, + 124DCEE18B5406C095B74C9B178BD647 /* NstBoardTxcMxmdhtwo.hpp in Headers */, + 9F133B0D521E411CDF94B9631A73D275 /* NstBoardTxcPoliceman.hpp in Headers */, + 4117A58F736F3993A5D14CF4CC2D8924 /* NstBoardTxcTw.hpp in Headers */, + 92A4B9F5C0254706401940A8171D746A /* NstBoardTxRom.hpp in Headers */, + 6F2BC09D000622A367F66D88714B1C38 /* NstBoardUnlA9746.hpp in Headers */, + A211E6013CB96A83529583B085B6B370 /* NstBoardUnlCc21.hpp in Headers */, + 245707596236331BCA745BDF2CCD3A79 /* NstBoardUnlEdu2000.hpp in Headers */, + 7AFA40D6E7662FCB31023984FC8A5540 /* NstBoardUnlKingOfFighters96.hpp in Headers */, + 46D2FA65C1F7514FB5AF1B3AB540BD7A /* NstBoardUnlKingOfFighters97.hpp in Headers */, + 8A6D9CDABBDF499C01CC1189E80A9D9F /* NstBoardUnlMortalKombat2.hpp in Headers */, + 334648F3BE0F3EB894ED97C63BABFEA7 /* NstBoardUnlN625092.hpp in Headers */, + D3ABAE47C410AFEFE62EFF0A4B01988B /* NstBoardUnlSuperFighter3.hpp in Headers */, + 35EC8B4BFB120C69E99A260D786EAB16 /* NstBoardUnlTf1201.hpp in Headers */, + 24BAED760BC6B605CA667DBDA91632C2 /* NstBoardUnlWorldHero.hpp in Headers */, + 20963639D29C2627884D0C2039FA09D7 /* NstBoardUnlXzy.hpp in Headers */, + BF3835EC0C608435A5068BD7DA290723 /* NstBoardUxRom.hpp in Headers */, + F5B0959C767055FB7465D5703EC70D68 /* NstBoardVsSystem.hpp in Headers */, + 54B7FB35A2EDEB196FE50FF306656B62 /* NstBoardWaixing.hpp in Headers */, + C593D8CC9F1A9B223285B2E986CD444C /* NstBoardWaixingFfv.hpp in Headers */, + E88A86B85AFFB8A723243AE866FDCFC1 /* NstBoardWaixingPs2.hpp in Headers */, + DB271162188B9FCB78E0150B0D2B6917 /* NstBoardWaixingSecurity.hpp in Headers */, + AF71438F7AEA2FDF0A4B8132FC6ADB97 /* NstBoardWaixingSgz.hpp in Headers */, + BF2705ACCDBE29A8E3C665CBB877B64E /* NstBoardWaixingSgzlz.hpp in Headers */, + AB558010971A1205D40B5288EA916AF8 /* NstBoardWaixingSh2.hpp in Headers */, + 840DC676DBE4407A3E68353CEF3B3BCB /* NstBoardWaixingZs.hpp in Headers */, + E7EC3140EF159F74774806784FFF92BC /* NstBoardWhirlwind.hpp in Headers */, + B3B0CAB964F5C903A859882947D5A72E /* NstBoardZz.hpp in Headers */, + E75071EFE211B5377D34AB8A5893DCD7 /* NstCartridge.hpp in Headers */, + 7D6640DB587F29263DFD54F344B9AE8B /* NstCartridgeInes.hpp in Headers */, + 25DC15B3C97C02EAC7A4363265E8FFC5 /* NstCartridgeRomset.hpp in Headers */, + 0F2AAC05FC0C90D1437629B2DD879D83 /* NstCartridgeUnif.hpp in Headers */, + 89C3FEC2C51AC7DFCCAB05615111CD6D /* NstCheats.hpp in Headers */, + 99B6F8CEDEB6DB72964EFBD31E1EDD8A /* NstChecksum.hpp in Headers */, + FB429DE7183465EA3908DC0EFC0E55B8 /* NstChips.hpp in Headers */, + 86B1481F42CED72563EF3D695ED06174 /* NstCore.hpp in Headers */, + 72B1945C2E80532FCF4F8003F26CCC0A /* NstCpu.hpp in Headers */, + 4C8972B658D801A7F3D8AC1ECE935C1F /* NstCrc32.hpp in Headers */, + 2F010DC7BBE382CA0729F3EBD313D9B9 /* NstDipSwitches.hpp in Headers */, + 1C570DFFEE1F86736CC9E98C382D99B5 /* NstFds.hpp in Headers */, + 35722184127DCAE56E998143DD4FFE37 /* NstFile.hpp in Headers */, + BE73142C363020BAD22706DDB199D35A /* NstFpuPrecision.hpp in Headers */, + FB53448735C698828655BAC4D9CD8EEB /* NstHook.hpp in Headers */, + 0A7F43CFFA49DD8651630CD5B766D2A3 /* NstImage.hpp in Headers */, + CFB692A4993E0C91F447057DF39648E0 /* NstImageDatabase.hpp in Headers */, + 70AFFCAC4CE322C09CE2DC0E3E7EA378 /* NstInpAdapter.hpp in Headers */, + 8C3F0D16D8ECCB7869ABCC3F8F3969B3 /* NstInpBandaiHyperShot.hpp in Headers */, + BD0D6665CD9A3B3C0AEDC4347A0BEBA6 /* NstInpBarcodeWorld.hpp in Headers */, + A3057CCA3036D83546A8CD03B63F433D /* NstInpCrazyClimber.hpp in Headers */, + 8B3242772776AB021A4F1971280E29A3 /* NstInpDevice.hpp in Headers */, + B0CB31DCAFF38374A10B45E212587713 /* NstInpDoremikkoKeyboard.hpp in Headers */, + 3F0EBD18ACD97785A90A6D0B4E723D03 /* NstInpExcitingBoxing.hpp in Headers */, + FDEE9F98E235CE8E3A2A29186FD3901A /* NstInpFamilyKeyboard.hpp in Headers */, + A2A854D06578D5120F0B8474EA0073C4 /* NstInpFamilyTrainer.hpp in Headers */, + 95BD2BAD38E37D6E2B67EDF5344BA723 /* NstInpHoriTrack.hpp in Headers */, + 2DC9C43A21C6350E567B14C11DDE7542 /* NstInpKonamiHyperShot.hpp in Headers */, + 459A931CCF39B8FB19164EFE3CF2D863 /* NstInpMahjong.hpp in Headers */, + DB41B47B5BEAA2503BCEF6C2AAD2ED01 /* NstInpMouse.hpp in Headers */, + 51BDAAC3AA2EF11A4E0777A032576AFA /* NstInpOekaKidsTablet.hpp in Headers */, + E35B0A7D23FC7611AAEEED1AF19073BE /* NstInpPachinko.hpp in Headers */, + D6AB41F528E0CBE33F26C2ECABEB070B /* NstInpPad.hpp in Headers */, + 3B7DFAE0D5614D45A623F2BA17A8884D /* NstInpPaddle.hpp in Headers */, + 1D3D48B74FB7DC35F5A27D2E4F8EF530 /* NstInpPartyTap.hpp in Headers */, + 4A83924C5F211B90E03A8A227F460210 /* NstInpPokkunMoguraa.hpp in Headers */, + CD80F55F2EB0D1ED46CA0003EF8683F3 /* NstInpPowerGlove.hpp in Headers */, + 76AA012877710AB1F164AE7B49DD098D /* NstInpPowerPad.hpp in Headers */, + DD620D1ACC965F9F33B8EE775A1C2929 /* NstInpRob.hpp in Headers */, + 96A155D5BB7094AC0D4DB6C7CBDEA3DB /* NstInpSuborKeyboard.hpp in Headers */, + B02E655D31D677E01F8A4E796936311C /* NstInpTopRider.hpp in Headers */, + 90C74CB62F0300013754489565EA44ED /* NstInpTurboFile.hpp in Headers */, + AF57DF3FC4B0368E92B51C386ADE38CB /* NstInpZapper.hpp in Headers */, + E1A2DFE668E3513F0D9B7761FEACB3A3 /* NstIoAccessor.hpp in Headers */, + 407EC03D3DFF08A04296FC36CD38AF4D /* NstIoLine.hpp in Headers */, + 7F3CDB6BD153FE92FC5A758E12830D3B /* NstIoMap.hpp in Headers */, + 3D28FECC438A6FCA1A5C16275198B7A5 /* NstIoPort.hpp in Headers */, + 175C9AE704D01C600031D567C80BB91A /* NstLog.hpp in Headers */, + 35AF870E1B3A0DB7D735F735FA422C6F /* NstMachine.hpp in Headers */, + 5ACC5FA32C77A54CBFEC08C34ACEACCB /* NstMemory.hpp in Headers */, + 62949FF9C1CBB808257B793D91067BD3 /* NstNsf.hpp in Headers */, + 86C51CEFFE9BBEB96F4AB6BFE68CF66F /* NstPatcher.hpp in Headers */, + 78560D7AC30CADA128CED2F38DB0C367 /* NstPatcherIps.hpp in Headers */, + 74206933424C0DC3CB8FAE979E98F7E1 /* NstPatcherUps.hpp in Headers */, + 43E9744B08213A6C8BEFAF6B70F435E4 /* NstPins.hpp in Headers */, + 77338E935B4CB0FA16154F8F845B9F74 /* NstPpu.hpp in Headers */, + 5788CF6580789EB32B111C2CEBE2FA98 /* NstProperties.hpp in Headers */, + 7E27C0AA8C72EE528649523D6A240305 /* NstRam.hpp in Headers */, + 8DB3CACE9224D13C1BD3C176BC5427D1 /* NstSha1.hpp in Headers */, + F264D06A3A46BD2D13A1B902FF3D4B82 /* NstSoundPcm.hpp in Headers */, + B17C1766C96792D8E4702F83155E438A /* NstSoundPlayer.hpp in Headers */, + 964DD3973B1820BDFFCA6F92B9C9705B /* NstSoundRenderer.hpp in Headers */, + 4DCBFFA1B95BE1BD4BFE5C963C7C81AA /* NstState.hpp in Headers */, + 82665248F8E77B7253C5F018E0B1DC5F /* NstStream.hpp in Headers */, + E8AD899B2BF52E2A3E657CD7A3A055E2 /* NstTimer.hpp in Headers */, + 7C85EFFC4862D5DD572D67FB0D67A8DE /* NstTracker.hpp in Headers */, + B51466218A72A889E8E988A7DB33701F /* NstTrackerMovie.hpp in Headers */, + 7FAE093FA0A7715EE8D0C26E07586588 /* NstTrackerRewinder.hpp in Headers */, + 5A09E36B97C75FB76C579219F68AEEB9 /* NstVector.hpp in Headers */, + 3C42E2DF170FEEC1FEDCF257FBC59691 /* NstVideoFilter2xSaI.hpp in Headers */, + EA4B8C2B008C444AA0A6467EE33FDEE8 /* NstVideoFilterHqX.hpp in Headers */, + 1763806549E7B189A1B7D629CD271BDC /* NstVideoFilterNone.hpp in Headers */, + 863BE8D5FDEE2E01FB3BEEE491392492 /* NstVideoFilterNtsc.hpp in Headers */, + 58766C2ABA1EA78EBFDA6358071598A6 /* NstVideoFilterScaleX.hpp in Headers */, + C5ADB3E8439A575CB85F2DC37DD3ADE2 /* NstVideoFilterxBR.hpp in Headers */, + 94D28819338E33AFF9EDDFB94DE0E526 /* NstVideoRenderer.hpp in Headers */, + 74CF4098668D8E59F2F415F232C54506 /* NstVideoScreen.hpp in Headers */, + 40D29AB1C0B1AE9D5A16D8A00CC5EC8A /* NstVsRbiBaseball.hpp in Headers */, + 256AB7604288ED1751C5EF0B1E7A789A /* NstVsSuperXevious.hpp in Headers */, + 7AC069D617A084BEDA70B1D9B89F6470 /* NstVsSystem.hpp in Headers */, + 75C08B83D5F3E9E679CE2F1619FEF158 /* NstVsTkoBoxing.hpp in Headers */, + 28B10CF2C882DC18EF20B1AA8E23AFE2 /* NstXml.hpp in Headers */, + A4AE6BE50FE7D09FA862A51966B680C7 /* NstZlib.hpp in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 45596E3D2E556CF82FA41122C0AA9183 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 384996ED15655B92633B49BE2D2F508B /* 3DMath.h in Headers */, + 3DF05EBCA922A228ADAA6EF81BF2E18D /* AboutDialog.h in Headers */, + 991670A9BE0E2AD87F211F289998813D /* af_rtc.h in Headers */, + B9F145E126048938862BB1034A7EA013 /* ai_controller.h in Headers */, + 11999A3107D95813D7DE36E802941DF9 /* alist.h in Headers */, + 21D164D1A6501C153372290BE9A11509 /* android_hardware_buffer_compat.h in Headers */, + E7DAB97FF4BB02EB9E4D2D45AD1CA9E4 /* arithmetics.h in Headers */, + 93180A48A4201719F7F9CFDBB8B86D4F /* arm_cpu_features.h in Headers */, + 7C127E067D6F3B7F1C96AB3813393B8B /* assem_arm.h in Headers */, + 407B667E5FEB14F591611B01EFD52340 /* assem_arm64.h in Headers */, + 25EDEFE8AA7FFB5C69FED296344DAEFE /* assem_x64.h in Headers */, + D0025BF44968B8EBA153B16DF6A7783B /* assem_x86.h in Headers */, + 25DA4338D845BE0E74C55BE243C7ED93 /* assemble.h in Headers */, + 25DA4338D845BE0E74C55BE243C7ED93 /* assemble.h in Headers */, + B6D3A3FFEE078C60C5964AFC10A2BA8F /* assemble_struct.h in Headers */, + B6D3A3FFEE078C60C5964AFC10A2BA8F /* assemble_struct.h in Headers */, + 7324ED114581AE7281851FCD2DFE2220 /* audio.h in Headers */, + 36F12C2BEFEC26AF3FB64AE840F145B6 /* audio_out_backend.h in Headers */, + B589CDAD880DE2B506BB8EF95CA2CBD2 /* autohint.h in Headers */, + 55BA63757D1E64C1BD4D132210364BBA /* biopak.h in Headers */, + 5FBC206C59F0020EFCEC4718EE86DF8A /* bldno.h in Headers */, + C4AFBF63C66D464CB5BF0FEE936B0A14 /* bootrom_hle.h in Headers */, + 2951A6A8F093CE2733377394E60F8575 /* cached_interp.h in Headers */, + 35383CB99EAA9537E5158062A5DBC3DF /* callbacks.h in Headers */, + 35383CB99EAA9537E5158062A5DBC3DF /* callbacks.h in Headers */, + FECF1DF017DE2F169EBA719FD4D6AC21 /* cart.h in Headers */, + 053DB492720A3409C50E148E4AE4E0F1 /* cart_rom.h in Headers */, + EA3590DCCB30731B77907052E26D846C /* cexcept.h in Headers */, + 0930988FAA51B3BFEFDDE01D83611CFE /* cheat.h in Headers */, + CC99BBC4FFD7CDDC2649600E0FA37564 /* check.h in Headers */, + D853F1F532071DE2D4AED3E6608F2ED8 /* cic.h in Headers */, + 2230CED7C3633C3F5F473DF2EC5E50A7 /* ClipPolygon.h in Headers */, + 2D6BF11580E1CC47CF8280E5C4971155 /* clock_backend.h in Headers */, + F5A792629C2A69A6ACE4916D514C5A1D /* clock_ctime_plus_delta.h in Headers */, + 56D815C1383B97B622D2C8A50156BBC4 /* ColorBufferReader.h in Headers */, + 001067059F900FD4F276F98ABA47822C /* ColorBufferToRDRAM.h in Headers */, + 55C3D30D20E39AA463F637012FA6E15D /* ColorBufferToRDRAMStub.h in Headers */, + A670352ECAEE4E7A1DF6A8D8A9BD2220 /* Combiner.h in Headers */, + 161DC98CB6404CA6989C81EAB0E1C3EE /* CombinerKey.h in Headers */, + 2D5FA06414DA007392294E443A9FA75B /* CombinerProgram.h in Headers */, + D90EC0383E3C3CC3B40EFEA3EDD6169C /* common.h in Headers */, + D1FDBA676483451ED77786AFE5AF47EA /* Config.h in Headers */, + 0023451255D0B6A96551C6491BE4CB73 /* ConfigDialog.h in Headers */, + C5BDCB21A3BAADFBD6ECC0E1BF2B15F5 /* Context.h in Headers */, + A70E823723F2AE05B1BAFE430143EE81 /* ContextImpl.h in Headers */, + EDE37315A04F24B57508A4D6EE128BE6 /* controller_input_backend.h in Headers */, + 1D50F4D79058E4B1B5D465253CE3E893 /* convert.h in Headers */, + 7D9FFE5C38B92C9509830FA62BDCF8E8 /* cp0.h in Headers */, + DFBC1B62E183576C5A9FB35846F46CAB /* cp1.h in Headers */, + 313A7C9034C26D9940E7B65EFB88F57E /* CRC.h in Headers */, + A48911932ED356D95D7CB9A9A8000E40 /* crypt.h in Headers */, + 6B6B1242D265B7C549A4D6A341A1EEB0 /* dcheck.h in Headers */, + 32B8B962EEB709DEC0F2BAEB037A21B1 /* dd_controller.h in Headers */, + 3A2C36BE4037A177800397DEBC20D3CB /* DebugDump.h in Headers */, + 6CD1DD53A424B153F6267EE63AFE1CDC /* debugger.h in Headers */, + 5B444B54168E8EDD6542DE7127EEF823 /* Debugger.h in Headers */, + 6CD1DD53A424B153F6267EE63AFE1CDC /* debugger.h in Headers */, + D31C73EFFED048D38F9F383BD0098DA3 /* DepthBuffer.h in Headers */, + 5CE430BB46B6B4C1B3051011D523753D /* DepthBufferRender.h in Headers */, + C64C503EB6132EC922D43AB0B27FD21A /* DepthBufferToRDRAM.h in Headers */, + DC55F0600EEC5E8DDFB1E3A6E633E92C /* device.h in Headers */, + 3FFE1AC1F70ED63623326CD9EB4732E7 /* DisplayLoadProgress.h in Headers */, + B56D331A25A771CAD8AAA58BCCF4FEC5 /* DisplayWindow.h in Headers */, + 47594914E8EA112593EFC6661444193C /* dummy_audio.h in Headers */, + 052787144BE4266A8166E4B0DF4ACCA3 /* dummy_input.h in Headers */, + 08686CCC2A05E5818FECBD202DD69628 /* dummy_rsp.h in Headers */, + 09F83B8522313DF122E91C5E908CC256 /* dummy_video.h in Headers */, + 8876A72AAE903A9038ECE97EB584FF67 /* dynamiclib.h in Headers */, + D2F1CDE15B2375C94A421A1564AF13D4 /* eeprom.h in Headers */, + 9BDB8F38002847FBD5C1F1C023A5F8D3 /* eventloop.h in Headers */, + 7AED12329BC4A94E43D7FA7FFFA4A8A2 /* Ext_TxFilter.h in Headers */, + 81C902564DEED03987D81EB5EC4E2C21 /* F3D.h in Headers */, + A9B698FBFC78110FB1851447D93A2CD9 /* F3DAM.h in Headers */, + 80490FACDFDD5058FE342448A90F6124 /* F3DBETA.h in Headers */, + 38645348CC5C592425C533EC8030013D /* F3DDKR.h in Headers */, + E255C62B0C6D845C74DF1CFD04F0E7F6 /* F3DEX.h in Headers */, + 71A5939665A6E80DDE1C1A3AE2CEBA27 /* F3DEX2.h in Headers */, + 9CEE21D31B9461DB729129E357679163 /* F3DEX2ACCLAIM.h in Headers */, + 98D8951889A284316C8473C141B05BF5 /* F3DEX2CBFD.h in Headers */, + 2B533915FBFC58A9851E3F92E296A5C4 /* F3DFLX2.h in Headers */, + 165DA1CB4491C51A5BC65A8F519D53DD /* F3DGOLDEN.h in Headers */, + 33F513674BEFADB6CB760D6A81C2AA7B /* F3DPD.h in Headers */, + D8CCD6B044F74A8D1C4DC7569527A1C8 /* F3DSETA.h in Headers */, + 4BB66E23280EEDDAB33FD3849235715C /* F3DTEXA.h in Headers */, + 5BDF97784CBEA46C26B454F806233B2C /* F3DZEX2.h in Headers */, + 760970F7137AE6D811FF1CDB6CC2D871 /* F5Indi_Naboo.h in Headers */, + A6DF3C1F361F1F1CE700FA15AE09FE32 /* F5Rogue.h in Headers */, + C2CE2BF3BF9FE6464EFA9299139418C1 /* fb.h in Headers */, + 5AFA9AD616A22E16547326EF1CDA4C83 /* file_storage.h in Headers */, + A10612911C9EA6DD14FB853233F82007 /* files.h in Headers */, + 80857C1D971EB5C3A2DEB08EBB6A26A9 /* flashram.h in Headers */, + 145D41EBB9C9985DBB3C476165DC7974 /* fpu.h in Headers */, + 0FCDAB60E00061A616936D080A17A72D /* FrameBuffer.h in Headers */, + F3EB20A92D49B9ED4E75EC8DBCD5AE92 /* FrameBufferInfo.h in Headers */, + C564BC767458B4CC26E9A5D4DA650B4A /* FrameBufferInfoAPI.h in Headers */, + 3F4312485CA4E0E988DC0DEEBB2EA306 /* FramebufferTextureFormats.h in Headers */, + 093A5EF57A260B6E4066AA6FEFA72B0B /* freetype.h in Headers */, + EBF46D8060558FA58B2E5CAE42467A6E /* ft2build.h in Headers */, + 7C3B24BE5F539E4C169AD6B54E548B18 /* ftadvanc.h in Headers */, + 9CEA93893B050B53483834892692E40B /* ftautoh.h in Headers */, + 967B79C9BBE288D04AE77C7D95A294F1 /* ftbbox.h in Headers */, + 007BBAFEFCEE96B7DDF8EFA8934DEC0C /* ftbdf.h in Headers */, + 5B025E037D2C37021CA068050A2CA3B8 /* ftbitmap.h in Headers */, + 196B46FD2B40CE0CF8D6F681C1A9307B /* ftbzip2.h in Headers */, + 8C24EE5BC4C18A93BCC1C9AE6FAC8F7F /* ftcache.h in Headers */, + 4F8113B8B99AD98CDD9E3B137185F836 /* ftcalc.h in Headers */, + 66AE47CDE09E8A95A29BB75F046C2B03 /* ftcffdrv.h in Headers */, + 30A0140597B79FDE8AE504A40DDE901F /* ftchapters.h in Headers */, + B3E4E3424C67ED018CA0EF4B73795A17 /* ftcid.h in Headers */, + 53D1203F37189E1B0B8854659A9345AE /* ftconfig.h in Headers */, + AE769713E049B84B57453032779D836E /* ftdebug.h in Headers */, + F461C36F53ED47D40DC15FB88FB3ADB5 /* ftdriver.h in Headers */, + 7064D5DF4976B7F5D00D0B07734180B0 /* fterrdef.h in Headers */, + 39F6310C0E2893433591C1FB861126CB /* fterrors.h in Headers */, + 242DC7B7B8092DC35B88FD61DEE5EE36 /* ftgasp.h in Headers */, + 2AFC27492C6A1CBD4483B8FF6F94B1DF /* ftgloadr.h in Headers */, + 940ECFA7ED45FC491E7E3BA8526B7C2B /* ftglyph.h in Headers */, + 61A36B8525B5D1CA38CFC4C2564DA2C3 /* ftgxval.h in Headers */, + C394492C7C415D251CED3A19FC797560 /* ftgzip.h in Headers */, + 21E502D6891B860C977E695E0DC485BD /* ftheader.h in Headers */, + E045AEFAFAB999408460996561247AFF /* ftimage.h in Headers */, + D3E635DF7C5A3F831C0ED826B7EF3045 /* ftincrem.h in Headers */, + 453C841E0DDCE5508E5FD4DE0737E6ED /* ftlcdfil.h in Headers */, + 9EF9EFE4000A70AE76A75376E6E95870 /* ftlist.h in Headers */, + 7E22B821DD9D7D2D539E9F0C66C15013 /* ftlzw.h in Headers */, + 5C28996B1131EFFAB4E75493D9F16B65 /* ftmac.h in Headers */, + EF255A27386D9491CC62288BD9B6CCFB /* ftmemory.h in Headers */, + 8AAC1B35CF4637F59F66E00C58F04177 /* ftmm.h in Headers */, + 8306FBE58766AD3DB7FC24A48C822C5E /* ftmodapi.h in Headers */, + 0F6AD4EB188F8A35D985C14ED56521F5 /* ftmoderr.h in Headers */, + 55C4AA463699B788B9F18C0103D41C85 /* ftmodule.h in Headers */, + 469306CB7368CE64157615FF08A064DC /* ftobjs.h in Headers */, + 42B300BEBAFE6EE9B77570DA9F09BE1C /* ftoption.h in Headers */, + 18FF637458B07675EF16BAECCF6AFDD7 /* ftotval.h in Headers */, + 33D52FD746A6F4535B78B95B1949D628 /* ftoutln.h in Headers */, + C6B8C839FA0BF0A1AE168CC27EC12FB7 /* ftpfr.h in Headers */, + 338A23437E12CC5C72BBB54B8189E707 /* ftpic.h in Headers */, + E7637A711A78C8610C039170BE3A235E /* ftrender.h in Headers */, + 296C11D713DA694BC95126E931781FAA /* ftrfork.h in Headers */, + 3B46BB318BD31DA44FF7F2A0625EDD1B /* ftserv.h in Headers */, + EE15E85924677183CEF51B41FA195E3B /* ftsizes.h in Headers */, + 11536204ECDF7D9DB75EC2A0D9FE46A5 /* ftsnames.h in Headers */, + CDF6E0B6206AF9A35A78A3C6D7E50BCE /* ftstdlib.h in Headers */, + DD439A1182CBF12FE98F8D4FB2B1F65D /* ftstream.h in Headers */, + 10558603C3F6732FEF6B1882CC605395 /* ftstroke.h in Headers */, + 842560FEB95F73A3E10F716061E361A6 /* ftsynth.h in Headers */, + 12FD0A784B96093568057FFB24752931 /* ftsystem.h in Headers */, + 5C1E3DA8CF07041B9499F603C66261DE /* fttrace.h in Headers */, + A5726C481C20F8D8E40DCC9AF9D0CF34 /* fttrigon.h in Headers */, + 005390FF8907FBAF4496EC51AA641D1F /* ftttdrv.h in Headers */, + 6535B1B6AC3FBC20B9D1C2B6255A3708 /* fttypes.h in Headers */, + 70F8274ED7EAC15159077EA63E371A20 /* ftvalid.h in Headers */, + F9FF13C1512AE6877E9661CF438EC88F /* ftwinfnt.h in Headers */, + 5ED3D70CB705D6F29363340A8E1B314E /* ftxf86.h in Headers */, + BFCB75257F3782795D068C01593C193C /* FullscreenResolutions.h in Headers */, + 7AA70F0483FB790115C42CE9CF815B99 /* game_controller.h in Headers */, + 02088785CF10C92191BD4C2A65A4A4EE /* gb_cart.h in Headers */, + 9AC1C1C11717294A0BC92C368F6A3C43 /* GBI.h in Headers */, + 40C0A2EC77F246C6770B772E8130A8C5 /* gDP.h in Headers */, + 840C6DD7629F231D0F45DD20C031A6FC /* glcorearb.h in Headers */, + 9ADC5E80C66896CD28992B319DBAAFDA /* glext.h in Headers */, + 211F41E155C9801313A5A9B60E42B528 /* GLFunctions.h in Headers */, + 22612E795DA2B4185DAEAB3DD73A2267 /* GLideN64.h in Headers */, + AF75C6505DD091382DDF3792EB91B958 /* GLideN64_mupenplus.h in Headers */, + 57934F805FBD53511D97E2A813CCA304 /* GLideNUI.h in Headers */, + 09317AE820EE6AC27E5564E6830A6B2B /* glsl_CombinerInputs.h in Headers */, + 3D8B6797F5BE3B29DE5D0560B6E485C5 /* glsl_CombinerProgramBuilder.h in Headers */, + C09ACD857947A188924A57EB95E3A3EC /* glsl_CombinerProgramImpl.h in Headers */, + 1F1CCD14892B307D3C349F9C4117740C /* glsl_CombinerProgramUniformFactory.h in Headers */, + B8C2E560CCEB5C574511691807B9D8EA /* glsl_FXAA.h in Headers */, + 45AD333FE1F9589DE61E55A1F9F12CF6 /* glsl_ShaderPart.h in Headers */, + D453E0EF8D2BCC7A9FADF4856AB23D42 /* glsl_ShaderStorage.h in Headers */, + C7D9222C5D58945DF45292909C3A16B0 /* glsl_SpecialShadersFactory.h in Headers */, + FBDC8F8F17CA21DD799A231ED4C63221 /* glsl_Utils.h in Headers */, + FC901AE65E0FBF69936AE0909DE7C2FB /* glxext.h in Headers */, + 362D9AD5872E377FFDA39BFED5E02BA3 /* gralloc.h in Headers */, + 9B00930BE1823F676F5035796C25C2E0 /* GraphicBuffer.h in Headers */, + 55BACBFD0A8A8EBD6EC8AA2002E6046D /* GraphicBufferWrapper.h in Headers */, + 784A5769DDE6CB551D21EE19FDBE91B9 /* GraphicsDrawer.h in Headers */, + BFF00FA2CA9BCB91036CC7F37B8878C8 /* gSP.h in Headers */, + 25F9D19D9F8A5BA67FF2B729D05E1F2E /* hle.h in Headers */, + D2A71E3AD54E049A5C1DDBF12C93A2AD /* hle_external.h in Headers */, + 6EDBE3E2C2021F2A4DC6A5D4258AAB9A /* hle_internal.h in Headers */, + 75909BCE4368ECAC28AACD2C2CBB5682 /* idec.h in Headers */, + 6419BCC57C3D947320987D210C349675 /* instr_counters.h in Headers */, + 670B1515AB23AB6EF7AA6DE75DCD4BFA /* internal.h in Headers */, + 39A8A5F1AC09F24DF124FA568B4BA9DE /* interpret.h in Headers */, + 39A8A5F1AC09F24DF124FA568B4BA9DE /* interpret.h in Headers */, + BB62119EA148C79F62F0ACBD9EB0C565 /* interrupt.h in Headers */, + 14A6A31A437EF94D756BC7E48CA08C0A /* ioapi.h in Headers */, + 4404B6CEB79B295BDC094339D07BAAAF /* joybus.h in Headers */, + 2C5240B6436593A65C2120F7BABBE34B /* Keys.h in Headers */, + 65AB36D595CB07090A2AB42CFA4C4F96 /* L3D.h in Headers */, + 7D13C492B14BA0EB2DC0783DB4150ED4 /* L3DEX.h in Headers */, + 07B07C5C1845808BAC8BA53FA149C192 /* L3DEX2.h in Headers */, + 6BC128BCDCE5AC608EA415377CCC78B8 /* libhardware.h in Headers */, + AB123914A6198728826EAF5A6AB03906 /* lirc.h in Headers */, + F5A1CC355CA69B7DB624218176781D44 /* list.h in Headers */, + 9A1BE2EF2BF2B41278CFF95856596E4C /* Log.h in Headers */, + 7868B35569F0B0197EF1FFD2D25B1BA6 /* m64282fp.h in Headers */, + 61978EBDA8F0BEDE69E4CE4034FC960C /* m64p_common.h in Headers */, + 61978EBDA8F0BEDE69E4CE4034FC960C /* m64p_common.h in Headers */, + D409C376103600BCF90AEA2463CCEF6D /* m64p_config.h in Headers */, + D409C376103600BCF90AEA2463CCEF6D /* m64p_config.h in Headers */, + 4793DB607E09DF311154B2909787E3C4 /* m64p_debugger.h in Headers */, + 4793DB607E09DF311154B2909787E3C4 /* m64p_debugger.h in Headers */, + 96F4B4E72231C96CA0010A82E8459431 /* m64p_frontend.h in Headers */, + 96F4B4E72231C96CA0010A82E8459431 /* m64p_frontend.h in Headers */, + A432DBBFA6CF4F59033CEE3B63EFE557 /* m64p_plugin.h in Headers */, + A432DBBFA6CF4F59033CEE3B63EFE557 /* m64p_plugin.h in Headers */, + 93E4A8D744F5FA2F32485D5992491BA5 /* m64p_types.h in Headers */, + 93E4A8D744F5FA2F32485D5992491BA5 /* m64p_types.h in Headers */, + 853B3CB7F2FCF1BEC65857D83C521D64 /* m64p_vidext.h in Headers */, + 853B3CB7F2FCF1BEC65857D83C521D64 /* m64p_vidext.h in Headers */, + 10963C0B1643A34DF49E5FF651AEF1D8 /* main.h in Headers */, + 83569BB6A8281FBF8632670B28C33C98 /* mbc3_rtc.h in Headers */, + B951E2150D8C56060DDD22AACC1F0A12 /* md5.h in Headers */, + 7F6EF2CA1770F1DE0026ECAA0E521101 /* memory.h in Headers */, + 79213C390062FF156D05A120E12D7F28 /* MemoryStatus.h in Headers */, + E96D00DC7B3AE3762117697EF950BF00 /* mempak.h in Headers */, + 98D31D2DCD90B13AF37086E4750BA838 /* mi_controller.h in Headers */, + E4D06B0BA213CA79BD97BB9B611A2EB5 /* N64.h in Headers */, + 0C85C17E4ABD29F912F85A3579F2C13F /* n64_cic_nus_6105.h in Headers */, + DA9EC56A8CABDE13F39C9D32BC8F37F5 /* N64DeltaCore-umbrella.h in Headers */, + FA7E71D6ABC8350D6902714609D30179 /* N64DeltaCore.h in Headers */, + 89FF6BA500EA4247A328E6A82D4B4065 /* N64EmulatorBridge.h in Headers */, + 8D16050EF95747AAFACD9E5B43C71181 /* N64Types.h in Headers */, + E473810AFA4985FDC030B75DAB7E86A9 /* new_dynarec.h in Headers */, + CE77541D89641C7165E9A0A56ACC5B13 /* NoiseTexture.h in Headers */, + 088166778CBF92A59C6AEA8158CB7B56 /* ObjectHandle.h in Headers */, + D1D87A24D37112C4AE2EB188C51C053F /* OGLFT.h in Headers */, + CAB565C736064CE66F49FC2F9939F653 /* oglft_c.h in Headers */, + 86F7500498987E83E102E0A54716CFDE /* opengl_Attributes.h in Headers */, + 6348E28B60143E90AC1BE0E53C58DC48 /* opengl_BufferedDrawer.h in Headers */, + 2E4CB07EBF0D9A446F74DC8A81CA4EDE /* opengl_BufferManipulationObjectFactory.h in Headers */, + 405BFB74E64E523A84040C173A88A574 /* opengl_CachedFunctions.h in Headers */, + FA05D0CC05B23D7027D8C3FEE24C690D /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */, + 34B57DA227F4B2C65BB287D38D80ED9D /* opengl_ColorBufferReaderWithEGLImage.h in Headers */, + B70168F7C469666BF680C64C641ED1AA /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */, + A4FFC4C6F5F2FBF2A4714D4E98634935 /* opengl_ColorBufferReaderWithReadPixels.h in Headers */, + 6E775AD30672E29EEE6CC70D23A833C9 /* opengl_ContextImpl.h in Headers */, + 78E24F2CE9FB7845AE6DEEC34E9D9366 /* opengl_GLInfo.h in Headers */, + 85168B84D1BC8AC3215522F298FB08B9 /* opengl_GraphicsDrawer.h in Headers */, + 3C75D97752958BB6E1068A79BBB78763 /* opengl_TextureManipulationObjectFactory.h in Headers */, + 30C7890A54FA46DF6071A8DF2496A9E0 /* opengl_UnbufferedDrawer.h in Headers */, + 0B12EDB39B8EDFD03B311F9733108E6D /* opengl_Utils.h in Headers */, + 6AE6261249D9E4BD068CD7091A136070 /* osal_dynamiclib.h in Headers */, + A45581F3A08C2C1C52E7988FF7BDE252 /* osal_files.h in Headers */, + FDFEFE7BFC83D62ECBF5728AA1F5CD7F /* osd.h in Headers */, + C5A1264CC2E10DC15FD86C842D770914 /* PaletteTexture.h in Headers */, + 6D611D7DCB3F3FB551F06D363B0F6BC9 /* Parameter.h in Headers */, + 7F184462B0587A9FA3F4976A6E306DBD /* Parameters.h in Headers */, + 813791FFAE99F2EA31D525DCF0B0DACC /* Performance.h in Headers */, + 57D216129FDA337F9E3D3C3FA2B064AA /* pi_controller.h in Headers */, + 82BA8911072FAC8A89CE76596ECECAED /* pif.h in Headers */, + 59337EDB4628FDAC6C07792E35AE0FFE /* PixelBuffer.h in Headers */, + 70E25FC6BCB677FCACF3974715396E5D /* Platform.h in Headers */, + FD8858F32C89A15506CDE5FEEED204A6 /* plugin.h in Headers */, + 5949B7253E6E1DB1793B5F8D17F6F095 /* PluginAPI.h in Headers */, + 444053C71CF9C418328ABDA8B2528AFC /* plugins_compat.h in Headers */, + 93049C2EA7F1F12ECE2A989EC457904D /* png.h in Headers */, + 93049C2EA7F1F12ECE2A989EC457904D /* png.h in Headers */, + DF99C4FED01516A806E69CEFC02A63B3 /* pngconf.h in Headers */, + DF99C4FED01516A806E69CEFC02A63B3 /* pngconf.h in Headers */, + 4CEADE56BB2EF761D27E112FE7616D6E /* pngdebug.h in Headers */, + 3C1277C9879849275BD4412E63547A9A /* PngFile.h in Headers */, + D9EEECDA4CC74FEDE82B29E37FF2C225 /* pnginfo.h in Headers */, + 4714EA370675DABB8EB39DFCC754B958 /* pnglibconf.h in Headers */, + F88F53D89C8D0B6EB6512F6FAE96128A /* pngpriv.h in Headers */, + 2AE4D610E02551D8EC4D51E4FED51ACD /* pngstest-errors.h in Headers */, + 61A0F8234682825C2206D9B58BE241DD /* pngstruct.h in Headers */, + 61A0F8234682825C2206D9B58BE241DD /* pngstruct.h in Headers */, + C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */, + C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */, + C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */, + 6B16C85148A68CC975DA7929304DF1B7 /* PostProcessor.h in Headers */, + EA7C86A456431D6BFDA337EBDA60E97E /* preproc.h in Headers */, + C6E4FBCFEF73B36D1A8501B5939B6484 /* profile.h in Headers */, + 695099FE2655BBE346F93075ABE6CF75 /* psaux.h in Headers */, + 997BE94A31FB10C25F97750D5D0C73E1 /* pshints.h in Headers */, + 01B175F9FA772FCB44596F79F8D00880 /* pure_interp.h in Headers */, + B435171F5FA2EBAC3C23A866769BE557 /* r4300_core.h in Headers */, + EFDB58D53DCA43CA1A9A175952CC0AFB /* RDP.h in Headers */, + BA5700A31EB47A427F8C75099C99FD06 /* rdp_core.h in Headers */, + 27EA6C0692558952AA8164A66E618824 /* rdram.h in Headers */, + 51918AE90F48400669540D82E6FE3864 /* RDRAMtoColorBuffer.h in Headers */, + 7C6C12C8C35F1D6A2B00AF837C71404C /* readpng.h in Headers */, + 1BD64B8159B5CAE972498CA344F46490 /* readpng2.h in Headers */, + 42CE6348D210BC1705B97E3E33A03756 /* recomp.h in Headers */, + AA5B1AEF7BFFC092A1A177F7B83F5EF5 /* recomp_types.h in Headers */, + 9B434AD18DC064B8C04942252F58E534 /* regcache.h in Headers */, + 9B434AD18DC064B8C04942252F58E534 /* regcache.h in Headers */, + 6A86407036458ED2BBE900F4A74A49A4 /* resource.h in Headers */, + C4552D4F06F08287FB112E8B10CFC47C /* Revision.h in Headers */, + 233D66440766BCC248853A39EDDFB1C5 /* ri_controller.h in Headers */, + 0D0DD77BB2692454B0600C393C56B3A8 /* rom.h in Headers */, + 44CF59CDE936F5CFD762DA0BCB0E94F0 /* RSP.h in Headers */, + 2EF4938D66CE6DBAB9CA5E87DC5DA1D9 /* rsp_core.h in Headers */, + 80569522185880531BB8F1FD08C52940 /* rumble_backend.h in Headers */, + 2518C27E9C6CDC038A72544E1448E6A8 /* rumblepak.h in Headers */, + 9EBD2981D2C95F47A2CC47ABE9DF341E /* S2DEX.h in Headers */, + 95023508CFDE2C9943D4E510526A14A3 /* S2DEX2.h in Headers */, + 33005D6A6E94208A97F963B03EB5768F /* savestates.h in Headers */, + 459005C8FDA84ADF202550615D20DE98 /* screenshot.h in Headers */, + 87B6A15FF7D44269D8790FCF8C5CF865 /* SDL.h in Headers */, + 5CEA0B264A2AC9222A69B62A1F0C7AF5 /* sdl2_compat.h in Headers */, + F22E08070AFC46B32347B32B2504F0AE /* SDL_config.h in Headers */, + FDF30A650ADF0FF5E6748D29AA81A2BE /* sdl_key_converter.h in Headers */, + 9ACECB5B9423B032EFEF6184E7E6112E /* SDL_opengl.h in Headers */, + B5E129441B9A582B280D6CB490CC9B18 /* SDL_opengles2.h in Headers */, + 8FBE42C6E7A4A5028537D4734CCCEB5E /* SDL_thread.h in Headers */, + 4DDC8A1EF3EA4BE02FF0B695D582EF17 /* Settings.h in Headers */, + 59C9DFBC77F345B4C89ECEDC869567AE /* sfnt.h in Headers */, + E47A977F4840A1287E1A8645E6E560B7 /* ShaderProgram.h in Headers */, + B43FA418644B4522331BB3C00F854B24 /* si_controller.h in Headers */, + B23FB033A07C66C2629201D7878FA1FF /* SoftwareRender.h in Headers */, + 2E682F38F1F25EFF84F90ABADA51DB89 /* sram.h in Headers */, + 968CD734D31C79FB896F2B5840E81816 /* sRGB.h in Headers */, + 243487548FDE3E663997187437CAA558 /* storage_backend.h in Headers */, + D9D4A8CFD5AEC9CB6CD5E416F08C8B65 /* svbdf.h in Headers */, + 9EE2A24548BFD782A76FA331067BA3FC /* svcid.h in Headers */, + DC6D980DA6070C8E0E652312C90A57D0 /* svgldict.h in Headers */, + 0DD2B79568FD5D7753E4220B0A700C96 /* svgxval.h in Headers */, + 2B4595B164B23A199766D1E6F5F27072 /* svkern.h in Headers */, + 8680F8EF0BBCDBEEE5A53366BB0E471A /* svmm.h in Headers */, + 9247277F4A5BF7A33FD393DED9BF677E /* svotval.h in Headers */, + 6572D4AD2CDA7C344092B902AE5E375D /* svpfr.h in Headers */, + 3EC2C605E7291B1BEC99AD3F06D54379 /* svpostnm.h in Headers */, + 31C3355B5C3F3DBA2AE027298397ABFC /* svprop.h in Headers */, + 7CC39EEEBA01397C44CD70FF1D855E9B /* svpscmap.h in Headers */, + 319D7327C17D7254FF4FBC0F1522DD04 /* svpsinfo.h in Headers */, + 65CBBDBDF701FB51569473462CF38DF8 /* svsfnt.h in Headers */, + D409FD1F1DD00E6994F0308A8E0C0D3D /* svttcmap.h in Headers */, + 9B3E47CAB17EEAEEA7252FDAD1228FED /* svtteng.h in Headers */, + 9543AAF856988A714C41706FF2A5AEAC /* svttglyf.h in Headers */, + AEBBDC54DB66E473CA4D2CA762AD90A1 /* svwinfnt.h in Headers */, + 7FBEC1C86E145CE63217FB4A282FCF85 /* svxf86nm.h in Headers */, + 644B2EA9FB3436835DEE0BA7DA47DAE1 /* t1tables.h in Headers */, + F059D06F724A8A8C7BBDE111D491A11D /* t1types.h in Headers */, + 41F232CB3D23E3A6A1C5E4A4628FB79D /* T3DUX.h in Headers */, + ABA544F4FB1E7074FD3DC41616D225E0 /* TexrectDrawer.h in Headers */, + D4E54F8583E6BD0B7E8D5C37D0268831 /* TextDrawer.h in Headers */, + 27A3816D5997640C9C2977E66280EBE6 /* TextureFilterHandler.h in Headers */, + 8BE90823E820E693FF7804C8FF1F62E1 /* TextureFilters.h in Headers */, + D3FF3FDEA482BBCE33A46B4F848933D8 /* TextureFilters_2xsai.h in Headers */, + 931A0C0A7D091176AFB87B18C0F7B40B /* TextureFilters_hq2x.h in Headers */, + 481FDC02D816C4D6984B333CDD130B3D /* TextureFilters_hq4x.h in Headers */, + 7B291FDF52E0F7FB64A9FA0C4A88E848 /* TextureFilters_lq2x.h in Headers */, + 8245550C4876E05DB7BB650B1FB1A8B0 /* TextureFilters_xbrz.h in Headers */, + F7702D2569122119783ECBECBF0893F7 /* Textures.h in Headers */, + F00226D59B11A277EA50376813104098 /* tlb.h in Headers */, + CA76BE843896592E98D70D4C9937477E /* transferpak.h in Headers */, + 38140579D6698DB3EC5D4D8348A639CE /* ttnameid.h in Headers */, + 1673BDEF58AAD91E8E8136D14A6D92CC /* tttables.h in Headers */, + E100B6C29C8EC1E8BFAE2435884A3FC0 /* tttags.h in Headers */, + 9A2C2E1BFEC2A7F8FE2BF3C40365472A /* tttypes.h in Headers */, + 9E35E296D32157150508356B61DBFC67 /* ttunpat.h in Headers */, + EFA81C37AB1F59EE3DC9500238D24A10 /* Turbo3D.h in Headers */, + DFAE2CDC207F2309CBB7EB0926066FDC /* TxCache.h in Headers */, + D808972D53AC615EC3DBB96E9B7517C7 /* TxDbg.h in Headers */, + C3ADA5023FC1C283152E2C1813982117 /* TxFilter.h in Headers */, + 4C2666CEA93DF12E808B0748AA6C1F87 /* TxHiResCache.h in Headers */, + B6EBE57D0E21E77897AE81B558932730 /* TxImage.h in Headers */, + C455219A8550223E4C8003DD899834B7 /* TxInternal.h in Headers */, + 7D3F6F6AF8ED6A7D7EC99CD1C094A779 /* TxQuantize.h in Headers */, + BCEFBAE2DC02775E49A13027909408F2 /* TxReSample.h in Headers */, + D79A7F006A37B1D450F1B4520E3145D0 /* TxTexCache.h in Headers */, + 7264B6C7620512CB91DD5A6E09E01DED /* TxUtil.h in Headers */, + 928393A965417058371B8D82CF1F8173 /* txWidestringWrapper.h in Headers */, + 42607AF15A2E89DD92B0930C561F736F /* Types.h in Headers */, + AD9ED143C77CB1599C53004811B576C6 /* ucodes.h in Headers */, + 7C8F536BB5772737F608061B0FE4C7B3 /* unzip.h in Headers */, + ABCF35B61F0EAC2A3D2328B942D32BD8 /* util.h in Headers */, + 4483660753264FD8120A2067CD6A13CF /* version.h in Headers */, + 61D1C0178CE6181A4877AD63422267AE /* VI.h in Headers */, + 73884246E8506A0D452A96718B443133 /* vi_controller.h in Headers */, + 14E4FB185F30A8C5DC3F1D4B9E0DE716 /* video_capture_backend.h in Headers */, + FF3F43F568A4324F4CFCA6034F0EFE72 /* vidext.h in Headers */, + 31DF008DDC244721324E3AB3AEEBDB22 /* vidext_sdl2_compat.h in Headers */, + ED41FDC898B11C9B4481ECA58EBE978F /* wglext.h in Headers */, + A69AA86EDA31C24B28D06718893F218C /* winlnxdefs.h in Headers */, + A2FBF339AF1E1FDD65B6EF4158DE51AF /* workqueue.h in Headers */, + 066C91AF87F745BB782958FD99EB410B /* writepng.h in Headers */, + 52D74F7ECCC1DBF6E16DE1F12141B276 /* WriteToRDRAM.h in Headers */, + 59E880502F8D50F9EE5D608A579F9BC0 /* wst.h in Headers */, + 43B5E0E98AAF560F0241FC12684F8441 /* xxhash.h in Headers */, + 43B5E0E98AAF560F0241FC12684F8441 /* xxhash.h in Headers */, + E7713FF7D1DDD0B5457A3DDC07D7CB64 /* zconf.h in Headers */, + 8FBEAF2C349397639534DA6996F1794A /* ZilmarGFX_1_3.h in Headers */, + 0479E96052F30333A5AE51A1A5DD22C3 /* zip.h in Headers */, + 59580416DDB44B3A787BC982BC72F768 /* zlib.h in Headers */, + CCB42259A3740417E34809B42683CC18 /* ZlutTexture.h in Headers */, + AE1A359FB304361E950FBAFB413D972B /* ZSort.h in Headers */, + 4D18844FC53DBD634580E3013793C936 /* ZSortBOSS.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5D86C535A6720DBCCAADB572CB6ED975 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F01AD38461447D0079DFD168C66DB6C6 /* AAFilter.h in Headers */, + 7AABDCDC1FB95E91C935F89E00FA89DC /* arm_jit.h in Headers */, + 19AE6DE6691A392520AF008719995124 /* armcpu.h in Headers */, + 394E947ED5AECB6E6C373FCB5BC01756 /* bios.h in Headers */, + 0EF4F8570AB47B8BDEF7F3B3FDFE3457 /* boolean.h in Headers */, + B5C71F73361EF8A4F64FD74A6E1F9560 /* BPMDetect.h in Headers */, + D27C34B3B39EBA92E9B725D3797B698A /* cheatSystem.h in Headers */, + FC7830E121F5F72FCCBB725FFB1955EF /* clamping.h in Headers */, + 4C2525168A2CC6EC7625B8AC550C92AB /* commandline.h in Headers */, + 8B9F702DA0D9696A233593D88691564B /* common.h in Headers */, + E9A4231EDE43DDF753AA878AFE8078EB /* complex.h in Headers */, + 8D83B5DF22CE26FF06D3084540F77E1B /* cp15.h in Headers */, + 6281A81C693739FBEEB99068ADE81F94 /* cpu_detect.h in Headers */, + 415C3AD46D4C5EF9970EC2575E98EDA0 /* Database.h in Headers */, + ECD62CC37167C9C1675F6D68D64E05C6 /* debug.h in Headers */, + A78C159B2F3CA3444E738F57CCB464A5 /* Dialogs.h in Headers */, + 4E404863CC3B40582879E711E4216354 /* driver.h in Headers */, + D840CD895C00C5B1FF24F78ED7A72681 /* DSDeltaCore-umbrella.h in Headers */, + 299A3DFFDCF10D83F769BE40B7F8730F /* DSTypes.h in Headers */, + 44CEC7EA6296BDF52E6847748021D0F5 /* emufile.h in Headers */, + 28010A4E02AFF7CA653853E5B0F63621 /* encrypt.h in Headers */, + 80C3AE20C10237C9D0BEE1E040703645 /* FIFO.h in Headers */, + 337E5275965EC77007B11EADB625B015 /* FIFOSampleBuffer.h in Headers */, + 5073BE55602733E1D570CBFAF7444F9C /* FIFOSamplePipe.h in Headers */, + 4DC1F5A681A0675066595FBC8231B4B2 /* filters.h in Headers */, + A1C4AE3CF237BFD611EBF5E86DD2C09E /* FIRFilter.h in Headers */, + BD0CC9162B585EAC4F9D324068AC0A14 /* firmware.h in Headers */, + 96E84431E12BB8ADA8E145AAC1ADFB66 /* fxp.h in Headers */, + 70035AF1D8DA93A9B0572D1D91051A47 /* gdbstub.h in Headers */, + 3C0BD562ED5EA4DBCCE3A2FB7D940FF6 /* gfx3d.h in Headers */, + BB43B32DD16801C9214E36739BD6D080 /* GPU.h in Headers */, + 1B2B4C5155210EBDD0892BE184220A44 /* instruction_attributes.h in Headers */, + 14275531D4F7CDD462D18A3DE8962F9D /* instructions.h in Headers */, + 72DD532BE9D0102D2688E11ACACFF362 /* libco.h in Headers */, + 92F8229DBD6462B1D86671903966D443 /* libretro.h in Headers */, + 1989138BFE55C51C2E1C1D1D3921CD01 /* libretro_vulkan.h in Headers */, + AC5786BFBB7B51AF3B5D003E3F943335 /* lua-engine.h in Headers */, + B158F6C6F5B890AF5A00D8492705CB38 /* matrix.h in Headers */, + F5EB7545B62578D96DD78196C4A4261D /* mc.h in Headers */, + 687F1F311F418FE895B2D96BF3617B14 /* mem.h in Headers */, + C5F1C4A446D8769AF9535D1036A3E0E3 /* memalign.h in Headers */, + ACE261F0845AE7032EE10EED8352D14A /* memmap.h in Headers */, + 3B1BDA44ECDDE86E5A508EF8FA5CB3AB /* metaspu.h in Headers */, + 58502D5F6100ACE79187371096DD70CA /* mic.h in Headers */, + 675105628714D68862DC480B2632FFC7 /* MMU.h in Headers */, + 9AF689676F4557DB4290ABA38A21BECA /* MMU_timing.h in Headers */, + 9A453C07C6CB23BBC0923625A37ED39C /* movie.h in Headers */, + 256D95458D9F853F472BD6467FF15C4B /* NDSSystem.h in Headers */, + 7A4F11E768C0C86EA95B2AB424A4377B /* OGLRender.h in Headers */, + 193424E7818DE3CC415F1ABA7BDA5044 /* OGLRender_3_2.h in Headers */, + 2D1470711C87547A80BB9C982EB6B149 /* PACKED.h in Headers */, + 48DD34EC238804715558E42A981112BB /* PACKED_END.h in Headers */, + 92A942CE7F29E460BB7E6C1564923F70 /* path.h in Headers */, + 7D42DA555697670FC84BBAB5492696FA /* pcap.h in Headers */, + 5619A5DFD12F6FC67F5596883382EAA3 /* rasterize.h in Headers */, + 37FF7BAE099FE3FA458DF38E809F974B /* RateTransposer.h in Headers */, + 033870A05FAC3AAD229C5B42B6664AB5 /* readwrite.h in Headers */, + 2A7DA941742FE42A2432F2776BBB4821 /* registers.h in Headers */, + DBB21494E4A3EA8A6FF8B3085A328E46 /* render3D.h in Headers */, + ADBA2EA8F4CF15587337BCDC2F645BB0 /* retro_assert.h in Headers */, + 4727DC7D681E19904DFFAB1C46B76FE1 /* retro_common.h in Headers */, + AD7D53389EE6FBD882ED47A69EA528BC /* retro_common_api.h in Headers */, + 3C0C34B66F4DE1573FAD3F67797849EC /* retro_dirent.h in Headers */, + 558A233C324EBAE74D567FDC751D1EB5 /* retro_endianness.h in Headers */, + E12B8F200ECEFDDF5544EFCFD880324B /* retro_environment.h in Headers */, + 37759BA8A77F128E6D2AF1A74F89F7B0 /* retro_inline.h in Headers */, + BF68218EA9CB72C37A86A7DC97330040 /* retro_miscellaneous.h in Headers */, + 19C03E95F42417EF92D0D3EA03AE1E93 /* retro_stat.h in Headers */, + 8C6E70C9C229A2E14969674B13510C6C /* rhash.h in Headers */, + 58A8D33FD84F62BA37B6B53109F22783 /* ROMReader.h in Headers */, + ED000A6A2C0F27F589D2F9F3F0454387 /* rtc.h in Headers */, + E699C3C45914E11FE8A12647B4835CD7 /* saves.h in Headers */, + A0120835F1172F64AFA98DDB669167CE /* scmrev.h in Headers */, + 6ACAD89B30AD04EE41D0ABDD3FB3A546 /* slot1.h in Headers */, + FAEE64ADE6B20CAADC50E71E09808DD4 /* slot2.h in Headers */, + 58EA70D5ACB9CC2718AEC1AEBADFB157 /* SndOut.h in Headers */, + 159AEB925F329623B682DF445F17309B /* SoundTouch.h in Headers */, + B769CDC513B5AC715C708F8414DE98BE /* SPU.h in Headers */, + 66E68D161A3E4F2F8CF51848F5E11C60 /* STTypes.h in Headers */, + 2AE7A62010F0BD02BBED36CFF53BBF91 /* TDStretch.h in Headers */, + 3C5A26E2B06FF1324498A5DAA75F2AFD /* texcache.h in Headers */, + D4BBFE50425065DFEBA634F40C1E480E /* types.h in Headers */, + 3DA0789B294D0A4B0337D4849E79FFBC /* version.h in Headers */, + 06E4B39B70500AB74C837D9F65505FE2 /* WavFile.h in Headers */, + 693CE9D53961CFDE9E0763B45047AA96 /* wifi.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 71BF9639FD4C3C6D27F8A45E925359E3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 38F6582226CA2808DF945CDE63DC5158 /* DeltaCore-umbrella.h in Headers */, + 5E8C4F8137E41A59A3EE4DE28307BB64 /* DeltaCore.h in Headers */, + 6BBCF5E1AC45FC48B7C6E6AA2A19E03D /* DeltaTypes.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 72AAD4A115E9E4D0F1A20685B4A2C0A2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 258EC8380EB18D73BE4A95E0F6E76F6E /* GoogleToolboxForMac-umbrella.h in Headers */, + 5312806A7BA82453F7A3E5C233835D29 /* GTMDebugSelectorValidation.h in Headers */, + C40257B054B827F15814443893FE2D5C /* GTMDebugThreadValidation.h in Headers */, + D324B3C6609ABF310B5E1436F17C2BF3 /* GTMDefines.h in Headers */, + E30AE4CE714FCC551A4A3B0516BBC707 /* GTMMethodCheck.h in Headers */, + 4EB3ECBAB9FB0B1B2067EF0E1DC27E47 /* GTMNSDictionary+URLArguments.h in Headers */, + 0D6BF9F58172028164D17C031B1FCFF6 /* GTMNSString+URLArguments.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8BC7094B94232EDB7F4C22F043B8E6A9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A152CC24E7DF395160707521223E96F6 /* agbprint.h in Headers */, + 62A34A388C71F471F3585E7D042A16AC /* AlResource.hpp in Headers */, + 2EF7C84C951F326A18407145FF81F584 /* armdis.h in Headers */, + CD821C3D00A559E41113DAF03124B0FF /* array.h in Headers */, + BAA4E74335AA7B36F2454711A5B55698 /* Audio.hpp in Headers */, + 2E62C0D774A841E9ED7F5CE4E5B70E09 /* AutoBuild.h in Headers */, + 0AE7EA1277618FFEC475AF5B709DE97C /* bios.h in Headers */, + 8ECBE7000B4A9F6E088C74D397024BA2 /* BlendMode.hpp in Headers */, + F12C21D84E31915404415E94619EC735 /* BreakpointStructures.h in Headers */, + C0E0B72CFF04ABCCDBC10213DE784979 /* Cheats.h in Headers */, + A72CE00953BEAC5C78106460D334E3F6 /* CheatSearch.h in Headers */, + 3A3EF780EA0DC5DAB4B04EEE425125F1 /* CircleShape.hpp in Headers */, + A978E1A561722F15D4C545AEA3FB3001 /* Clock.hpp in Headers */, + 25323339A8211142EC7CBCF8BB9C62EE /* Color.hpp in Headers */, + 3440F2E7C7091E968DCC8219C505A657 /* Config.hpp in Headers */, + 121447EDCD87D030260B53FA7E426098 /* ConfigManager.h in Headers */, + 01A810DA28D4CD0190DB127527310019 /* Context.hpp in Headers */, + D2E7A94DA4EB51A3145F965B880B6F2F /* ContextSettings.hpp in Headers */, + A5A600842203DF1E3A7A326C8C22C683 /* ConvexShape.hpp in Headers */, + 97BC1C5E6F8786531212D326F22B5A0F /* cstdint.h in Headers */, + DA2DA6C00C0EB1612EEEF2C30A494919 /* debugger.h in Headers */, + ACFDB59EFB14D11FDAA6C885CF2ADB9E /* dictionary.h in Headers */, + A26E82669EC4D325656E6B8EA01E2D01 /* Drawable.hpp in Headers */, + 788E19683756F921D267319C0BC8D9D4 /* EEprom.h in Headers */, + A493B150D94171B74C1FF5E7933FA3F1 /* elf.h in Headers */, + E028E6BB5BF11783165428AFB4371D2D /* ereader.h in Headers */, + FE66ACE5CA4F217211189D67E353E0E3 /* Err.hpp in Headers */, + C67F326A6AF0E3C1047D6DC2008B71AE /* Event.hpp in Headers */, + 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */, + 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */, + 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */, + 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */, + 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */, + 932FE517D424EB24ECA60FCF308A7F5E /* expr.cpp.h in Headers */, + AE2B65C3F228FA7D15103DAB814EC3BE /* exprNode.h in Headers */, + 75B85A307530462BEDD1925293E1B335 /* ffmpeg.h in Headers */, + B607C73513457E83CDF3A4552A8819C2 /* FileInputStream.hpp in Headers */, + 174F4F23259306B5ECEB19D6FAE4FE93 /* filters.h in Headers */, + 58BE7AF2705F2F19B2DBD0077245F46C /* Flash.h in Headers */, + 3E03AD02DEC735901C06DBB467257AB5 /* Font.hpp in Headers */, + 9C7C23E76D82621C265FFC52430EC02C /* Ftp.hpp in Headers */, + 6CCACC2383F5ADD7F92D95FF4C6CDD56 /* GBA.h in Headers */, + EE3023766DCA56C999E1855124ED9B49 /* GBAcpu.h in Headers */, + A7EB0D099CBAA6C310A263AC395DEEF4 /* GBADeltaCore-umbrella.h in Headers */, + BA6F2DEA63EEA27BFAEDA2A35BB85F6A /* GBADeltaCore.h in Headers */, + D27F8F70A73867B450D3D9CEF4B923E8 /* GBAEmulatorBridge.h in Headers */, + 634773B1E340AACEAF3FE0D1F31F51D5 /* gbafilter.h in Headers */, + 508F79BAF68E3B5A238FE6A3953A1D4D /* GBAGfx.h in Headers */, + CD34FCE9FB88953FDCD13328912591F0 /* GBAinline.h in Headers */, + 64C9989CD9A4F9A39D9599A0881F5655 /* GBALink.h in Headers */, + 52323B8DDC717EBF29016585E2D8C524 /* GBASockClient.h in Headers */, + A1544544E0BC9AB6958029C77298E2D9 /* GBASoundDriver.h in Headers */, + C45537121E620342F23894864D721C8D /* GBATypes.h in Headers */, + C8065BE8E7EE0A002B995608EA590F05 /* getopt.h in Headers */, + 18E5D24C8847A14DE25CC9E73B28CBD5 /* Globals.h in Headers */, + 42486E8EA746BEC5D598F95DA726529D /* GlResource.hpp in Headers */, + 80D63236D264DBFE454A62486C2EF1DF /* Glsl.hpp in Headers */, + EB3650269076DC4FC7CA23EF31B4A160 /* Glsl.inl in Headers */, + C4CD30F775B2D8F7ADB0CDAF05C03983 /* Glyph.hpp in Headers */, + 8B66EA933E91DB3C1A2F60A1E6839556 /* Graphics.hpp in Headers */, + B8955C9472B44FCEE652CFFAB57AA5A8 /* Http.hpp in Headers */, + 42D3004B9FAA6E6FC7F5C1FF64FC642E /* Image.hpp in Headers */, + 7694BBD406736AE9B3A9A54680E1BE83 /* iniparser.h in Headers */, + 375E255B89D6FC678440579E28CCB3F8 /* inputSDL.h in Headers */, + 2C54BA2379A2C403F7B8D0C49FAACC25 /* InputSoundFile.hpp in Headers */, + CAA19D846835105188A3CCC602CFF800 /* InputStream.hpp in Headers */, + B047CED3CE820B6D442A496BFE713A34 /* IpAddress.hpp in Headers */, + 5DFA7B4B653B42D7A547C3A60EFD77CA /* Joystick.hpp in Headers */, + 1B09EC58FBD912A974C56A3F2BFE36D0 /* Keyboard.hpp in Headers */, + 79CB4C69D5B62C1F128632103768629D /* Listener.hpp in Headers */, + F4EF7512EED07AE5D1BAD5341F1F119B /* Lock.hpp in Headers */, + 86518CFE08809DFF384BF8C39CD7D1F1 /* Main.hpp in Headers */, + 8F682A984C8CB6F8AF671756445C613B /* memgzio.h in Headers */, + 1EE8CE815DB7AB1FE9B3284530CDE68B /* MemoryInputStream.hpp in Headers */, + 4545BB25DC4B965622D16CF4D6506135 /* Mouse.hpp in Headers */, + F8B9B69D4EE4EB38FF98385CD92BD358 /* Music.hpp in Headers */, + 652A1D1BC29758EF8C914998DFAB0F96 /* Mutex.hpp in Headers */, + 7876D3F7521DB44C406A743CF81BEB47 /* NativeActivity.hpp in Headers */, + BB0BB79A9140C13066DC7B7C8B203B78 /* Network.hpp in Headers */, + F98FA998AC2986864A31A3383D9F6757 /* NLS.h in Headers */, + A35CEA97C5A89CA2AD61EA4049407002 /* NonCopyable.hpp in Headers */, + A72E4695B60D35E8D8BFAA0FF9051520 /* OpenGL.hpp in Headers */, + 8E8094562D01EDB93C41846A50926BD5 /* OutputSoundFile.hpp in Headers */, + 7676FAAA46D6F17DD9B7DD349475C457 /* Packet.hpp in Headers */, + 6BABA54BBEBA347D766C48087A4F87D0 /* Patch.h in Headers */, + 3EEB2162999CE5EC7F850E4B1FAAF5A6 /* Port.h in Headers */, + 73292E5A2AC3196B5409A496BB5C5541 /* PrimitiveType.hpp in Headers */, + 9EB8EFEEEEE29B8A08B90A5968DD254D /* Rect.hpp in Headers */, + 5678ED8E60F31109D707A9CD20001EB6 /* Rect.inl in Headers */, + 93A9497637F202D29E0EC51208B725A8 /* RectangleShape.hpp in Headers */, + 68F955348FE9A8B6BCE3113CE94A7DE3 /* remote.h in Headers */, + A7F0206CCDED3DF4FC1C456649013B1F /* RenderStates.hpp in Headers */, + 505EA34BB63D4DA3E07D0BEAEA9CBBFE /* RenderTarget.hpp in Headers */, + 119EB4FFA02590EA2498963ECEC6707B /* RenderTexture.hpp in Headers */, + ED62B5E63342691AD8CA0BE9B1BF09B0 /* RenderWindow.hpp in Headers */, + 7E2636950C8A8517A78941A3FC7A214B /* ringbuffer.h in Headers */, + 1A9E0A5933F001BD9AC823B4EEF7415A /* RTC.h in Headers */, + 9C4DE97E009F6FD9F96D47382A323F8D /* Sensor.hpp in Headers */, + 4350BC2A7ED052D1A8C7322572F983FE /* Shader.hpp in Headers */, + 7AB3BF79F79BAFF5769C3A3CCC19AD47 /* Shape.hpp in Headers */, + 05D3406A9CDB6F3CA3BA42733AD9B486 /* Sleep.hpp in Headers */, + E66700479EBBBA79432AE1635603F5BB /* Socket.hpp in Headers */, + 1AF87E34A2309B096AE662A3F0A54538 /* SocketHandle.hpp in Headers */, + 26067F53DD0AAA69124AF2F234C2B412 /* SocketSelector.hpp in Headers */, + 9866CCB407CB626700130C62BCE45A29 /* Sound.h in Headers */, + 0514955DC0F673DF12A1317127CA45B3 /* Sound.hpp in Headers */, + B435EECA15AF195F0828E24958F90C6F /* SoundBuffer.hpp in Headers */, + 653EFAF65992560FB2370C51780DB91C /* SoundBufferRecorder.hpp in Headers */, + 636BA008A6D26E9CDAC0E0358AF55866 /* SoundDriver.h in Headers */, + B011E9394F81876D07949F6C4247ECA0 /* SoundFileFactory.hpp in Headers */, + 8734FEEFA6AB0AADF18FC751440B6BB0 /* SoundFileFactory.inl in Headers */, + 0AE2AA9CFBAB73BA390B8AB2BD339DCC /* SoundFileReader.hpp in Headers */, + 9E31B03247471F3BD90655550384FDA2 /* SoundFileWriter.hpp in Headers */, + 11654A14DAFB94587890A4B673D7B7C9 /* SoundRecorder.hpp in Headers */, + 51CB2AF004A303202AC4E2E08B6DD4E4 /* SoundSDL.h in Headers */, + D47799D2FEF7EBAF1EEC0D02D279AE11 /* SoundSource.hpp in Headers */, + 192D121D3A8C6AE6BA5A7AF2D0CDC952 /* SoundStream.hpp in Headers */, + 9614CDE379DB3C8A330397F9BE0AEE69 /* Sprite.hpp in Headers */, + A9AEDDC1D58C38A7CC8DC9F486965D56 /* Sram.h in Headers */, + FFB1135FEFD4153A7DB3BC2BDD598710 /* String.hpp in Headers */, + 5C3F628CF00E3CD05F3055BC14650779 /* String.inl in Headers */, + 94868DBC2F7CB341ECBBDC311392ABC9 /* System.h in Headers */, + CC71B7C78DFBA5A59F4A9F1260B6AD64 /* System.hpp in Headers */, + 5B523F0E6CC4D851035C0FF668B53075 /* TcpListener.hpp in Headers */, + BFAE59F52F18BE2C9796FA97184A813D /* TcpSocket.hpp in Headers */, + 1399567CFA56F981E650715560737DE4 /* text.h in Headers */, + FCFB664196AEF0AB4F9D49044093DACA /* Text.hpp in Headers */, + E10B2C2CC334BEF5895DC4C950250177 /* Texture.hpp in Headers */, + 07498127BC05CF69795D53A3D8EB9340 /* Thread.hpp in Headers */, + 7DE7708815D0EA629D5716B9F1A6809E /* Thread.inl in Headers */, + 54B0F9C41BE6A78067881BEB750C1AF6 /* ThreadImpl.hpp in Headers */, + 94209528F5A3C88236DE5DC50BAD5D7F /* ThreadLocal.hpp in Headers */, + CD4EB69FB76C000ACAC265440D164A30 /* ThreadLocalPtr.hpp in Headers */, + 642FFA142ED6C17EF6E07F09CCB95DE2 /* ThreadLocalPtr.inl in Headers */, + 7736A8964115F20A8A6F09230ED8814D /* Time.hpp in Headers */, + BB191EC60D3AC3D5EB56CB411B128BEE /* Touch.hpp in Headers */, + 5F45A12D5CFF64756E09AD77EF5081E1 /* Transform.hpp in Headers */, + 70B5E10C6A4B9C465AC2BE6C2767396C /* Transformable.hpp in Headers */, + 0DBB61B8C2133BA49617D71CB72C59DC /* Types.h in Headers */, + FD9074443C03E8B90BBED9A42541D442 /* UdpSocket.hpp in Headers */, + 93AB3DCEF6FAB25507A0D57EB46F15D6 /* Utf.hpp in Headers */, + 524F9BFEF89FF358697E09E935BB0B98 /* Utf.inl in Headers */, + 471A75A7D62F9B14EB4441C630F660BF /* Util.h in Headers */, + 52B893DB672E18029FA04807F0771F85 /* Vector2.hpp in Headers */, + C2A7BEF4712B927F676D5521BA4CDE03 /* Vector2.inl in Headers */, + 601B04A377C214C532FD3284085C6C4A /* Vector3.hpp in Headers */, + FBE89F87882A3EF8E629A5FF5CA465AD /* Vector3.inl in Headers */, + 9B704453F791C3CAA8F55E7BA3D0C581 /* Vertex.hpp in Headers */, + 01D25C020EDD6D8936111118CDB7CFA3 /* VertexArray.hpp in Headers */, + 3E1730D55849A497D872A47300530E33 /* VideoMode.hpp in Headers */, + 903A61727B196C0BF6AD7D55E406829E /* View.hpp in Headers */, + 14C40CB2C689C2CEFFEEBC5D170379B1 /* Window.hpp in Headers */, + 14C40CB2C689C2CEFFEEBC5D170379B1 /* Window.hpp in Headers */, + 8715A171D63746B26EFEB4E6A617D39D /* WindowHandle.hpp in Headers */, + 892EF00353110A3E726F1D521FE0F452 /* WindowStyle.hpp in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B52063D31A47694C5832DB0144982ED5 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3522984A23D0983D50F2F60CD2B9F2C9 /* SMCalloutView-umbrella.h in Headers */, + F47DE4860ED00EA4CDC661D662F1681B /* SMCalloutView.h in Headers */, + 953B0BA08374FEB6F8BA47C9EE30878C /* SMClassicCalloutView.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B715D763CE3F7AD2FFB3E12167F759CF /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 39E36E16FF2FAB77065F3E24D90D594B /* GTMGatherInputStream.h in Headers */, + AD6656B872B98CDE4BAC39B6E10CF595 /* GTMMIMEDocument.h in Headers */, + 89F637B6A72C84461E7E5E6395896B4B /* GTMReadMonitorInputStream.h in Headers */, + 0BC29A4D141721CED777951AFB6285DC /* GTMSessionFetcher-umbrella.h in Headers */, + 43A6F36EC82583DFC3F1B2EB25F87C7E /* GTMSessionFetcher.h in Headers */, + 6252AC3C230BC83234C9D7D7F17455E5 /* GTMSessionFetcherLogging.h in Headers */, + F1DCBDDEE6EC2B1512E4A288D7ADF679 /* GTMSessionFetcherService.h in Headers */, + 12EB6F66719644A22679C7B30EA4F9DA /* GTMSessionUploadFetcher.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BCB5C5830BB67506C98CF01A73E1615E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7FD577E22B1E9D0B660E3F5F0945EC97 /* GoogleAPIClientForREST-umbrella.h in Headers */, + 5C2C50048DF9D8C1D128711187453A8D /* GTLRBase64.h in Headers */, + 972A37B03DCA40E3914A116E31179F3F /* GTLRBatchQuery.h in Headers */, + 922B6EFC5C130149705BC82D0BB9D57D /* GTLRBatchResult.h in Headers */, + 2C793E39108FE340FC5BFCF448F6AC2F /* GTLRDateTime.h in Headers */, + B6758D43CD69D4728C2DEE14394F151C /* GTLRDefines.h in Headers */, + C8938F662C069F5F0A31F1853DC14D2E /* GTLRDrive.h in Headers */, + ACEE8B31B20BE08B7468DB090AC3A159 /* GTLRDriveObjects.h in Headers */, + 90761841E15818195AE0E6F9C6B1F2A3 /* GTLRDriveQuery.h in Headers */, + 29FCAF85FC12577CD5CFF57453594C65 /* GTLRDriveService.h in Headers */, + 1DC7AB00CF86DEB9192BBD6BF1F049CB /* GTLRDuration.h in Headers */, + 25254659998C756A3F648127FA733177 /* GTLRErrorObject.h in Headers */, + 7F6E6984730D00B2BAB26E09C2B6F51E /* GTLRFramework.h in Headers */, + C2D45C2E6F31EA9735644BA45EDC472C /* GTLRObject.h in Headers */, + D6B9F611C6D9C0C8CD854D4E488E6AB5 /* GTLRQuery.h in Headers */, + 6A90DB9252F5F4A3ECBB6AD4F22A1352 /* GTLRRuntimeCommon.h in Headers */, + 6E64571D846DA6B46DEF71405A2C71F7 /* GTLRService.h in Headers */, + A212566BC13F73E1F56D4584670E0D22 /* GTLRUploadParameters.h in Headers */, + CF14CB07724E28C9AA37889A92FFD645 /* GTLRURITemplate.h in Headers */, + C82B4ECAC9F24ABC6EFAB56B0CDEDBDC /* GTLRUtilities.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C93889FA7331EDB51173479E3F8F7C58 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 897E17C6F6C366137126E12E5EDC926A /* NSBundle+Extensions.h in Headers */, + BA8DAE2B382564F0C1EAFA4E759CADAD /* NSConstraintConflict+Conveniences.h in Headers */, + BD21247A32EF0C2EACBF439E6C4B9209 /* NSFileManager+URLs.h in Headers */, + EC28DAD95829E5C9E6307A77F8F517FF /* NSLayoutConstraint+Edges.h in Headers */, + 96F221FEFB1BDFEEDF3D78ECBD3693BB /* NSPredicate+Search.h in Headers */, + BBC683E778EBD7924866C7857B19D11A /* NSString+Localization.h in Headers */, + B3279DD4DDA04F5DCA2F5B03E29B9A6D /* NSUserDefaults+DynamicProperties.h in Headers */, + 23BF54CE4938EDB1F46BFB0E71C0C87B /* Roxas-umbrella.h in Headers */, + 326048AB59E512995FA92BFB0D4005C9 /* Roxas.h in Headers */, + FB431B0FE84CE918B28A6CEC02DF7FEA /* RSTActivityIndicating.h in Headers */, + 0DE37FB9E50E1562BF60D5BFA8252BA7 /* RSTArrayDataSource.h in Headers */, + EFD770F15B52B41E2DBEEEECAD735D98 /* RSTBlockOperation.h in Headers */, + 7A4B501942CA119ADB0CC7E54FC735B5 /* RSTCellContentCell.h in Headers */, + 8BD82471835BF88ECAF163D6FCA9A762 /* RSTCellContentChange.h in Headers */, + 857B3B04B9AB4B94CC5BB714EACC9290 /* RSTCellContentChangeOperation.h in Headers */, + BCBDF12AD11385D21AD3AA103D8B4EB6 /* RSTCellContentDataSource.h in Headers */, + 8434E5B141D1791B363651A182CA1B5E /* RSTCellContentDataSource_Subclasses.h in Headers */, + 064F0446DD0F453314D4002599D238F5 /* RSTCellContentPrefetchingDataSource.h in Headers */, + BED24F03394D6879BAFB6D521219899C /* RSTCellContentView.h in Headers */, + FF64C067DBF8F76E97824763C8259B99 /* RSTCollectionViewCell.h in Headers */, + B18BDE9F23964986DC1C252B20A2B80F /* RSTCollectionViewGridLayout.h in Headers */, + DD965F38F3926F23D15FF807E4486928 /* RSTCompositeDataSource.h in Headers */, + F984AA7029A105CBC169C0E24725E036 /* RSTConstants.h in Headers */, + A7610ADD4D3B95C8ECDCF6ED0324632C /* RSTDefines.h in Headers */, + 4DC932B5F4D7AA22146806DD1090F1DF /* RSTDynamicDataSource.h in Headers */, + F28DDFAB4A2E61C4361B1F25F9FC031C /* RSTError.h in Headers */, + C96524CDB423028248FE52A069C84B94 /* RSTFetchedResultsDataSource.h in Headers */, + B4EB521CC2E0002F09E6D89D72C05EF4 /* RSTHasher.h in Headers */, + 1F30DD02CA191CAE3D0B657F89B4F11F /* RSTHelperFile.h in Headers */, + 7A05BDF6F0EF1F8EF35BD85D32DA9A84 /* RSTLaunchViewController.h in Headers */, + CE10DDDAE7EAF229186F72415E877A1F /* RSTLoadOperation.h in Headers */, + A34924ED816441F1DFC1ECEDFFE962DC /* RSTNavigationController.h in Headers */, + 1DB6F3BD942AB6C506FA3D02C3569721 /* RSTNibView.h in Headers */, + 4A1F273145AC8A73006C32CCD1DCBECC /* RSTOperation.h in Headers */, + 9719913DBA52DDA7B45760943EB9BEEC /* RSTOperation_Subclasses.h in Headers */, + 74D859213990282C35C19B6D2313E0E8 /* RSTOperationQueue.h in Headers */, + 5BEFEF83E88746F60EE96520C83CF8B1 /* RSTPersistentContainer.h in Headers */, + 77708024733DF3B64F127AB9D0E5C5EA /* RSTPlaceholderView.h in Headers */, + E19486EB42DE44DE94BA6D8BA26ADCD5 /* RSTRelationshipPreservingMergePolicy.h in Headers */, + 846C1F6DB0F553F276ECB598E7A84AF8 /* RSTSearchController.h in Headers */, + B272AC71D7ACB699920703161A1752AC /* RSTSeparatorView.h in Headers */, + C2BE25EB20537FCA2EE93FC27875B382 /* RSTTintedImageView.h in Headers */, + 4D0BA6DDAECF3625D9D4F8884C396135 /* RSTToastView.h in Headers */, + 826BE1A486465868CED022ED981B0BEC /* UIAlertAction+Actions.h in Headers */, + 5158E74402D7498E84B1E75998347C9D /* UICollectionView+CellContent.h in Headers */, + EEFFD918B4E699ED2974C0B2F35E9932 /* UICollectionViewCell+CellContent.h in Headers */, + FAC36F11FCA18D96655C0EC43BA109EC /* UICollectionViewCell+Nibs.h in Headers */, + B09052B271013EFD3E592D4E87ADC3D7 /* UIImage+Manipulation.h in Headers */, + 574897C776D4A75F06D108C90308A36E /* UIKit+ActivityIndicating.h in Headers */, + 7C81CF6208DCFD04CA626E3E81DBD14F /* UISpringTimingParameters+Conveniences.h in Headers */, + 3C832BE3E684CFF4E7D7C7D1104C63C7 /* UITableView+CellContent.h in Headers */, + F73B09692A1D8FBD4A33D1322CB8C4F8 /* UITableViewCell+CellContent.h in Headers */, + EF5F3C860891664625225F32C4399ADF /* UIView+AnimatedHide.h in Headers */, + B8EED4F04562CE0F560AE123C1F737E1 /* UIViewController+TransitionState.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D669AC0978F2286484818C5FA2A1D22E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E21F9E3675CE2A5C2910F409DB690497 /* DBChunkInputStream.h in Headers */, + 01BA691B21BFCA4E9DD73F0D1DE67D2B /* SwiftyDropbox-umbrella.h in Headers */, + E24C77E406D608D65CF44CC758D79AA2 /* SwiftyDropbox.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D89663E2DB8D7DD0634E5C6BF3CD44A2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7C223CCCA8FDA2AFC24233CF2C80D507 /* fts3_tokenizer.h in Headers */, + BFF536B78DC4850A4A285C1D03F56057 /* SQLite.h in Headers */, + DB5891014AF5583F4CE70D67063FEBF4 /* SQLite.swift-umbrella.h in Headers */, + 58670BDA59BC1476ECD1AE42A65DEDB4 /* SQLiteObjc.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DA327FA8288BD9E808AD950153D6638C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 9CF692BD464C27BA082BE1DCA7A9D45C /* Alamofire-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EBA0441DBF93B807A82B5D9A4A39DC14 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F5D9DCDC448615EEC0C90DAF2C5C7E76 /* ZIPFoundation-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FD37510B091CEA1C8736943F45E2B6D7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 227EA8867B83F2F2978D06671A0A10CF /* Pods-Delta-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 1FA9B463D7545DEE19FBE853AC3BFD31 /* Pods-Delta */ = { + 0FAC8C4777DBD31221FE57848CB5F759 /* NESDeltaCore */ = { isa = PBXNativeTarget; - buildConfigurationList = 701ED0CF739C2D94D6FF13061BF31BBE /* Build configuration list for PBXNativeTarget "Pods-Delta" */; + buildConfigurationList = 20F3E4E2418350AC682AAD392B4BED39 /* Build configuration list for PBXNativeTarget "NESDeltaCore" */; buildPhases = ( - B8BCBBDAC0F94B216837A537C3245066 /* Headers */, - 411821C62D8568051B3E7516070BC5C5 /* Sources */, - 9A28C74DB547A24288CB7244DA4FEC52 /* Frameworks */, - 53A8CA86A88C474983BA0D0292118310 /* Resources */, + 4479B666E2E570B74D5DBED43917BB9E /* Headers */, + B3B158F34FB17F0078922BF7A3994D44 /* Sources */, + 9CAF962C35143C3C448834A59B6C38DC /* Frameworks */, + C39FB08F8EAA3D3BE3FCA734AB5A134B /* Copy generated compatibility header */, ); buildRules = ( ); dependencies = ( - 589B5E1BBCDE707E74E4B59FAEE9968A /* PBXTargetDependency */, - 3931D9616FFCA4D7FB7CE99CDCFDC536 /* PBXTargetDependency */, - 54B507930C9E8696188979A8A6E1BA5E /* PBXTargetDependency */, - 2EBC80DF482B67B3FB80BEF4DB4C02DB /* PBXTargetDependency */, - 211ADEC23589562D9F890E7D85DB730D /* PBXTargetDependency */, + 85D6ACF2CBBCECECBBABA09B2EA5D168 /* PBXTargetDependency */, + B5FEC1EBE509FEB4C2E760EF1DC6A7BF /* PBXTargetDependency */, + ); + name = NESDeltaCore; + productName = NESDeltaCore; + productReference = 1E5356E04E92615CFF0666E5987CE594 /* libNESDeltaCore.a */; + productType = "com.apple.product-type.library.static"; + }; + 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 847E2631BC51B82439DF3F4721BDF1DD /* Build configuration list for PBXNativeTarget "N64DeltaCore" */; + buildPhases = ( + 45596E3D2E556CF82FA41122C0AA9183 /* Headers */, + 5B0F6D0BAED01A7A219A798DB9F8BEED /* Sources */, + 22F413AD72240277D7C1F3120BEB443B /* Frameworks */, + B47C91E971844BF723AD4C1AF31ED003 /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + 05B9A9148F0AA84DDE4A79DD841BAC5A /* PBXTargetDependency */, + 6DE0745286D33113EC54EBA586F7ACB4 /* PBXTargetDependency */, + ); + name = N64DeltaCore; + productName = N64DeltaCore; + productReference = C8D6AC695498645EEE4A66FCEF97D848 /* libN64DeltaCore.a */; + productType = "com.apple.product-type.library.static"; + }; + 141E2D29C29A1BC1ABA3483321DF3C88 /* SNESDeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = E65E16C31A3D7DE2EDF0B51FACC87789 /* Build configuration list for PBXNativeTarget "SNESDeltaCore" */; + buildPhases = ( + 08E54C760FF35045FDC8574E38EA5E6A /* Headers */, + 95B1D949CBD75B2788DC28647769C517 /* Sources */, + D17DE93F464412385D2ACD2C66FC3364 /* Frameworks */, + 6722B5185265E81DCF59DC82DCB0CF12 /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + 6A06A23778F35BD29819315F84EA7618 /* PBXTargetDependency */, + 460FB3819A6A637FCD17AE2E8D48C7F1 /* PBXTargetDependency */, + ); + name = SNESDeltaCore; + productName = SNESDeltaCore; + productReference = FA400832D3E46B39D5EC83D09A7572FC /* libSNESDeltaCore.a */; + productType = "com.apple.product-type.library.static"; + }; + 1B47E46598F87113B00B3B25BBF51B32 /* DeltaCore-DeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4F029155AB836938BA450316882B8FBA /* Build configuration list for PBXNativeTarget "DeltaCore-DeltaCore" */; + buildPhases = ( + E593ADB87F658CC0E2BF41020C4F16FC /* Sources */, + 22B7FCDD48BED28401E2F89A4A67D4CC /* Frameworks */, + F95DF989D9DECEDD3C70F08369BAC34D /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "DeltaCore-DeltaCore"; + productName = "DeltaCore-DeltaCore"; + productReference = 54ECA01A22C32DC89AB39DF9BFFD5FB6 /* DeltaCore.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 33C94426DAF58519DC6806AF4C44C9E7 /* Pods-Delta */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5E1FD0C2F1EE47BB4375104C033855F1 /* Build configuration list for PBXNativeTarget "Pods-Delta" */; + buildPhases = ( + FD37510B091CEA1C8736943F45E2B6D7 /* Headers */, + 05BC7ED38F0128CA453934D8D78F19AD /* Sources */, + 48D215C02B17AE962C42A70069BFED0A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + EE6ABB82B8B97BD3E25ABA2C3DEB3128 /* PBXTargetDependency */, + 42193324C4D006B18C2B76243EED095D /* PBXTargetDependency */, + 9F5478313CF5775EC625C84D2D5D399F /* PBXTargetDependency */, + 94C1058A9AAA61AB7FD11B5FBCE6DFF8 /* PBXTargetDependency */, + C4FAAF75F43EE0D12E71D3E32AF204A2 /* PBXTargetDependency */, + 8AAE57B63A7B4C11709251F4EE10FB88 /* PBXTargetDependency */, + E4D87F7F65F696B017EA781E30A39A5B /* PBXTargetDependency */, + 27F1EA33C127149DA030B906F0F28448 /* PBXTargetDependency */, + 2B11DB4B71ED02E5B9B9788D1D26A53E /* PBXTargetDependency */, + A6A5A2CFDBD10C7F2D09F3F53B8F5FD7 /* PBXTargetDependency */, + 5D04385CC7E6917783C3F4F8EF9DDDB0 /* PBXTargetDependency */, + 99FDE882695E00A0F390EE607B268B52 /* PBXTargetDependency */, + BFAF65DA7D034599D4E5CFB20EFF5290 /* PBXTargetDependency */, + ABCD70BFE64CBAA49543AFA61813436A /* PBXTargetDependency */, + 5036207F0D0A8DEE49EC859CB26A3BE2 /* PBXTargetDependency */, + D31863FC462A085FA121105AC436D6DB /* PBXTargetDependency */, + 52FAFD51C4754410BE945A4088A5365B /* PBXTargetDependency */, + 2E13E041ACAB72B0D20161D1C91014D8 /* PBXTargetDependency */, + CB2DF911EC096412E04767CA494113A6 /* PBXTargetDependency */, + 0BE9490C890610C7DD3138962A6A97B2 /* PBXTargetDependency */, + 2470E0637AB079C1EA36776A56133D54 /* PBXTargetDependency */, ); name = "Pods-Delta"; productName = "Pods-Delta"; - productReference = 40D249D35FEC446C77F6087257E44AA3 /* Pods_Delta.framework */; - productType = "com.apple.product-type.framework"; + productReference = 9CA80A61ABF26FA89F4E22A30284B0DD /* libPods-Delta.a */; + productType = "com.apple.product-type.library.static"; }; - 498BC38C077C48A416BCF96644AC3CA1 /* SQLite.swift */ = { + 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = { isa = PBXNativeTarget; - buildConfigurationList = 3A96250D5CEC7CDC67BB5B13E452729A /* Build configuration list for PBXNativeTarget "SQLite.swift" */; + buildConfigurationList = 30A0CB7B1940C25C2F4F333351C10E42 /* Build configuration list for PBXNativeTarget "SDWebImage" */; buildPhases = ( - C7450CED21D7E482FF9C8CE92158C4E3 /* Headers */, - 74F5D6BA6C186DFC69B0F41F9A78C0CD /* Sources */, - 739E50E70B623A4D6E9A497F0C01D7F1 /* Frameworks */, - BC1C9B6FF3DBE8D3D8AE821864A7EA31 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SQLite.swift; - productName = SQLite.swift; - productReference = 2A534C5732905AB6F2146BA7370D2B00 /* SQLite.framework */; - productType = "com.apple.product-type.framework"; - }; - 59CEC038954929A6B36EDBE49EE01791 /* SDWebImage */ = { - isa = PBXNativeTarget; - buildConfigurationList = 86341A08D5225B874296B1DDB702DE1F /* Build configuration list for PBXNativeTarget "SDWebImage" */; - buildPhases = ( - 1F30A2ED6CB965170C57B083170E51CB /* Headers */, - 8F564664C9DAEF7B5A85F15B51854C55 /* Sources */, - F8A6F15E21820129A073629CC50E7BE4 /* Frameworks */, - 302354C654A4D0471877F4274CFA7074 /* Resources */, + 26CD12A0A8FED394729931D851C1BDFE /* Headers */, + BEB1EE0820D4CC88754367FD7B075D1A /* Sources */, + 373FAF5E443D6679532ACC75D39A2A05 /* Frameworks */, ); buildRules = ( ); @@ -688,17 +9743,217 @@ ); name = SDWebImage; productName = SDWebImage; - productReference = 8E4CFA769DF2C67035D7112B1EB6A2FB /* SDWebImage.framework */; - productType = "com.apple.product-type.framework"; + productReference = B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */; + productType = "com.apple.product-type.library.static"; }; - 8255DC44888E72385E107E69A662CE38 /* SMCalloutView */ = { + 38A3E6A4A13E8C4E975336840145C119 /* N64DeltaCore-N64DeltaCore */ = { isa = PBXNativeTarget; - buildConfigurationList = 9422886FB9500BB2ECF8953BF8BDAF09 /* Build configuration list for PBXNativeTarget "SMCalloutView" */; + buildConfigurationList = FCCF65418A0EFC8C339903B6DEBF0FF2 /* Build configuration list for PBXNativeTarget "N64DeltaCore-N64DeltaCore" */; buildPhases = ( - 1B72DA39E2C4509DFBC84B68F006C7E5 /* Headers */, - 546536C8DF4FD2B5B545B2FAE82DF09B /* Sources */, - 419D9D681198F68F96BB6F6F8FD0D0F7 /* Frameworks */, - BFC338855ACF10D9EF6981BE1D4B10D7 /* Resources */, + BBA26EA97E33B109D9542E4D8659423E /* Sources */, + 2652C9DCA5C838F589EFE0FAE3D29D52 /* Frameworks */, + A06B5CF2D3EF8320EFFE1AE6DB23FF53 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "N64DeltaCore-N64DeltaCore"; + productName = "N64DeltaCore-N64DeltaCore"; + productReference = 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 3F2C1776D90B62B156DB52C41A5C419C /* SQLite.swift */ = { + isa = PBXNativeTarget; + buildConfigurationList = 4831832D716DE9C50FF96385B6482F4A /* Build configuration list for PBXNativeTarget "SQLite.swift" */; + buildPhases = ( + D89663E2DB8D7DD0634E5C6BF3CD44A2 /* Headers */, + 5EE6B8A56A8A13C9228CFEE7FC036FA2 /* Sources */, + 83E6F56551D35482FE1861B7C021F61A /* Frameworks */, + FBDBDFFAD990AD9508B3EFA011AEFC86 /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = SQLite.swift; + productName = SQLite.swift; + productReference = F5FA45A44C42CC2CA3A324A3E914CE19 /* libSQLite.swift.a */; + productType = "com.apple.product-type.library.static"; + }; + 530F469AED058B94728C278CCA514500 /* DeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1A0C0C4736B816F9CB799A7DF3AAF54B /* Build configuration list for PBXNativeTarget "DeltaCore" */; + buildPhases = ( + 71BF9639FD4C3C6D27F8A45E925359E3 /* Headers */, + BF2745C9C2804F1F3D9373E7BF5FD2F5 /* Sources */, + 5FB72F5600AF73B0454B5151D88A68DB /* Frameworks */, + F7BE234CBA2A214465171737981B36F2 /* Copy generated compatibility header */, + 0B6FC99CE0E5E72E43A0A4F7AD944ACA /* [CP-User] Copy Swift Header */, + ); + buildRules = ( + ); + dependencies = ( + FD085AE31E6041915F925532ECB3134A /* PBXTargetDependency */, + 8D70B4086B79508F6199FF434AF5A42E /* PBXTargetDependency */, + ); + name = DeltaCore; + productName = DeltaCore; + productReference = F93477FBF1E4488E506F9BB79AF57D38 /* libDeltaCore.a */; + productType = "com.apple.product-type.library.static"; + }; + 5C36E65AEF44273E4AF0CBFADD00C090 /* GBCDeltaCore-GBCDeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 41ADB7A6BF6874F8E5EB48DF7A168301 /* Build configuration list for PBXNativeTarget "GBCDeltaCore-GBCDeltaCore" */; + buildPhases = ( + DB5C35E3B9516C9D04A7DA02CC64A1FD /* Sources */, + EF237E39B08E32D0B2093CBC24805524 /* Frameworks */, + DD221E47A1152CAD9C2622AF131CBAE4 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "GBCDeltaCore-GBCDeltaCore"; + productName = "GBCDeltaCore-GBCDeltaCore"; + productReference = 1F23DBC67505E77BE77552D6D84A3DAA /* GBCDeltaCore.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 5CB4163F0A6D4BDE0A490758A78BA43D /* Harmony */ = { + isa = PBXNativeTarget; + buildConfigurationList = BD525096CA556B77DB7833CC422D4968 /* Build configuration list for PBXNativeTarget "Harmony" */; + buildPhases = ( + 1720941E471683DB933EABFBF20395A1 /* Headers */, + 69B367E1585682AB66F97B335F9D03A8 /* Sources */, + CF750F951B5921983AC422A1B8D08E64 /* Frameworks */, + 966ED76FE9108AC8FE6BF2B10DADB274 /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + DF50B746EF7C6DC9302CBF83E64A502C /* PBXTargetDependency */, + E56CE409A3455CD89DA5BA6DDDC40D3B /* PBXTargetDependency */, + 111AB56CAE156240A449E5192B1D037B /* PBXTargetDependency */, + 3F1CB87EC87C55D1211C3D729391F3B6 /* PBXTargetDependency */, + ); + name = Harmony; + productName = Harmony; + productReference = DBC0113CF73BE24525E670D024A85BE7 /* libHarmony.a */; + productType = "com.apple.product-type.library.static"; + }; + 6538136F848A07F507372CCFB40CEB88 /* SNESDeltaCore-SNESDeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = FD9752023347B2D0CD6EE673AA7F64BD /* Build configuration list for PBXNativeTarget "SNESDeltaCore-SNESDeltaCore" */; + buildPhases = ( + F5CBB068589BD1880745ADA0CA06BE7D /* Sources */, + EAFD4026EEE499F65B857E3120928703 /* Frameworks */, + 43A99E43078899FB53911AD66E1038DC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "SNESDeltaCore-SNESDeltaCore"; + productName = "SNESDeltaCore-SNESDeltaCore"; + productReference = 7D751206A951D9727B38F71A2BB990AA /* SNESDeltaCore.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 7056A67459B0B8B62FACACCE167546B8 /* GBADeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = AB63F15FC5E4A4749A01300C3940712B /* Build configuration list for PBXNativeTarget "GBADeltaCore" */; + buildPhases = ( + 8BC7094B94232EDB7F4C22F043B8E6A9 /* Headers */, + F5F7844F767CCD98C6DB4FA7989E2B32 /* Sources */, + 1DCD7F8F7581F31788ECAD25138905A4 /* Frameworks */, + 38EF4CF93070086FEC0872CF084E8F60 /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + 0F92DEB6B0EBCBC5C0F5B0BC9BE93B14 /* PBXTargetDependency */, + 99877DBD7CEAFBE1DCD6450538B2DB20 /* PBXTargetDependency */, + ); + name = GBADeltaCore; + productName = GBADeltaCore; + productReference = 85A4BD81985AEDB6D9BA5E50804225D0 /* libGBADeltaCore.a */; + productType = "com.apple.product-type.library.static"; + }; + 7F839870ECBE0065B4BCC02E5F98F48A /* NESDeltaCore-NESDeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8EBE86FCEB6B920023606B463F40D6F2 /* Build configuration list for PBXNativeTarget "NESDeltaCore-NESDeltaCore" */; + buildPhases = ( + D938418F705C63738C73E888FE18C08C /* Sources */, + 23BFD53FB74C2D9008C7D74FD0FF2D74 /* Frameworks */, + F22E4489798570BB57DCFD715E819BE7 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "NESDeltaCore-NESDeltaCore"; + productName = "NESDeltaCore-NESDeltaCore"; + productReference = 487C7DB0A7257F16983BEF8324BEF561 /* NESDeltaCore.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 890229DC8DCC9C43917568A0C4502FCA /* GBADeltaCore-GBADeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 107602BE559A9EE79D732D818C67C2CC /* Build configuration list for PBXNativeTarget "GBADeltaCore-GBADeltaCore" */; + buildPhases = ( + 12DE409A27F23DF6814E99A3BC6F99B8 /* Sources */, + 146604F1821D76536A3CC1FC7D040951 /* Frameworks */, + D6F1826D8FBE2174C0C05B2F2C54918A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "GBADeltaCore-GBADeltaCore"; + productName = "GBADeltaCore-GBADeltaCore"; + productReference = 30131336E11D11700AC99D314BDC275C /* GBADeltaCore.bundle */; + productType = "com.apple.product-type.bundle"; + }; + AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */ = { + isa = PBXNativeTarget; + buildConfigurationList = B3AA5DEA9EAAC571EE1E1B4E25715EBA /* Build configuration list for PBXNativeTarget "ZIPFoundation" */; + buildPhases = ( + EBA0441DBF93B807A82B5D9A4A39DC14 /* Headers */, + CF1A829706EB7D4651A9AFCC52E7475D /* Sources */, + 7977E736686E6BD8D5950FF88E59C5CC /* Frameworks */, + 6C5EC75A128ADA780823E5483FF6312E /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZIPFoundation; + productName = ZIPFoundation; + productReference = 48A4A6EDC08C8AC933D0DCD507E9D173 /* libZIPFoundation.a */; + productType = "com.apple.product-type.library.static"; + }; + B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8DFB3C54138FF6F6A012B2B665C76ACF /* Build configuration list for PBXNativeTarget "Roxas" */; + buildPhases = ( + C93889FA7331EDB51173479E3F8F7C58 /* Headers */, + DDEB83EA63F277EF37B7ECEFF321F84B /* Sources */, + 596D3A8F72E091C80C6C4F87844EE108 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Roxas; + productName = Roxas; + productReference = 4405793D5AF1EFD9D2BDA30AA0D2E514 /* libRoxas.a */; + productType = "com.apple.product-type.library.static"; + }; + D20492B6476142DCA0C455340876BB98 /* SMCalloutView */ = { + isa = PBXNativeTarget; + buildConfigurationList = BB07493EBFDFDB75360BF9DF17195333 /* Build configuration list for PBXNativeTarget "SMCalloutView" */; + buildPhases = ( + B52063D31A47694C5832DB0144982ED5 /* Headers */, + 811F13FE55E873CE6C1956757840D7C7 /* Sources */, + 7493E42190EBEAA740FD633B30B8DE50 /* Frameworks */, ); buildRules = ( ); @@ -706,8 +9961,154 @@ ); name = SMCalloutView; productName = SMCalloutView; - productReference = D43DC26599095B79DA3D2798E5BDB349 /* SMCalloutView.framework */; - productType = "com.apple.product-type.framework"; + productReference = 53A730F4F4248E7E3F38F8409A2DE97C /* libSMCalloutView.a */; + productType = "com.apple.product-type.library.static"; + }; + D47C581D39D227080F83B16A22A56664 /* GoogleToolboxForMac */ = { + isa = PBXNativeTarget; + buildConfigurationList = C2E255D649731CD4DCFF2E658C062078 /* Build configuration list for PBXNativeTarget "GoogleToolboxForMac" */; + buildPhases = ( + 72AAD4A115E9E4D0F1A20685B4A2C0A2 /* Headers */, + 3DC4139B1C0EA206BEB29EE8CA06ED7A /* Sources */, + B749125D00AA53AC590C457612F02E05 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = GoogleToolboxForMac; + productName = GoogleToolboxForMac; + productReference = 251C6319AD50CB50F18D50CBF727F8B2 /* libGoogleToolboxForMac.a */; + productType = "com.apple.product-type.library.static"; + }; + D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */ = { + isa = PBXNativeTarget; + buildConfigurationList = D2C52F7C31F8F18B3E7649A2B825768D /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */; + buildPhases = ( + B715D763CE3F7AD2FFB3E12167F759CF /* Headers */, + 0F356666BA38C004ACD3218C473661FF /* Sources */, + 872C104A3266050144437694E83876B9 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = GTMSessionFetcher; + productName = GTMSessionFetcher; + productReference = C1998E0D8085221AD87F89B614C10E52 /* libGTMSessionFetcher.a */; + productType = "com.apple.product-type.library.static"; + }; + D7958E869B6C0073DB3025514393D7A3 /* GoogleAPIClientForREST */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1BF5836DF81B99AC010F1AAF4A715C38 /* Build configuration list for PBXNativeTarget "GoogleAPIClientForREST" */; + buildPhases = ( + BCB5C5830BB67506C98CF01A73E1615E /* Headers */, + 5FD9EA2163F118D199159555369097A5 /* Sources */, + EE601DCB1D3B73273138E8A5D7829FF7 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 881CFD1802642CF2190E153E20340D93 /* PBXTargetDependency */, + ); + name = GoogleAPIClientForREST; + productName = GoogleAPIClientForREST; + productReference = FD519882861480B93B563B477CE1FA29 /* libGoogleAPIClientForREST.a */; + productType = "com.apple.product-type.library.static"; + }; + DB59C68809324297BEDAF0CC3F931B27 /* GBCDeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = A5D65C61ABC34AD5AF4B6F63BC7C5B58 /* Build configuration list for PBXNativeTarget "GBCDeltaCore" */; + buildPhases = ( + 39DFD9067157BA76AC201E27C879DFBF /* Headers */, + 2A91D3B6EF4FF912D9692A13CFBFB02A /* Sources */, + 0D403F6F212C3D655B9A70C9D2551C79 /* Frameworks */, + A3D6710365DAB2CCA647EE186555369E /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + 8005293D86303BC2B82C3A79C1FBB6D1 /* PBXTargetDependency */, + 577A987593409C33649C46C3581BE270 /* PBXTargetDependency */, + ); + name = GBCDeltaCore; + productName = GBCDeltaCore; + productReference = D4C010E8572FAE8B51DFDBF2300ECF30 /* libGBCDeltaCore.a */; + productType = "com.apple.product-type.library.static"; + }; + DCBC8D45C727B1472F26E79661AF11B0 /* DSDeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = AE9415C8BECFA0B9FCD84405814330AB /* Build configuration list for PBXNativeTarget "DSDeltaCore" */; + buildPhases = ( + 5D86C535A6720DBCCAADB572CB6ED975 /* Headers */, + 40E9ED7D7C8F5D863BB2967890D4AF80 /* Sources */, + C1608A30FBDD138D56002A758CDFCD18 /* Frameworks */, + DDD4A7AD247A86C8E3CEEF843D4A6F8D /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + D37E815A435C967BECD1C4ED135E56DF /* PBXTargetDependency */, + A7BA55FF6A51B067A5810C18839C07D2 /* PBXTargetDependency */, + ); + name = DSDeltaCore; + productName = DSDeltaCore; + productReference = 8DF503EB5BF2CD824792BFD2BBC0992F /* libDSDeltaCore.a */; + productType = "com.apple.product-type.library.static"; + }; + E5449403CBE67599315B4D26019FA175 /* DSDeltaCore-DSDeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1B3BCF15DDEF04BD3859CE2400DE7A43 /* Build configuration list for PBXNativeTarget "DSDeltaCore-DSDeltaCore" */; + buildPhases = ( + 27E9971E616992A3F765D51DAE846624 /* Sources */, + 55CD572E462904EA6C9905761349C14C /* Frameworks */, + 7675B29FA996D468DBF9D22009C489F5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "DSDeltaCore-DSDeltaCore"; + productName = "DSDeltaCore-DSDeltaCore"; + productReference = 4A6CEB53419EF6042E06B56676D1DAF8 /* DSDeltaCore.bundle */; + productType = "com.apple.product-type.bundle"; + }; + EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */ = { + isa = PBXNativeTarget; + buildConfigurationList = 20F50134A7EBE5BBF644BED665FB3400 /* Build configuration list for PBXNativeTarget "Alamofire" */; + buildPhases = ( + DA327FA8288BD9E808AD950153D6638C /* Headers */, + ADA8A824FC0DF194C0EEA41A4A09871D /* Sources */, + 07C7603FFA3CB8DF7695C09A4C85DE4B /* Frameworks */, + 4F61BF6CCE774E66CD281745D52A182D /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Alamofire; + productName = Alamofire; + productReference = 5D797E9A5C5782CE845840781FA1CC81 /* libAlamofire.a */; + productType = "com.apple.product-type.library.static"; + }; + FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */ = { + isa = PBXNativeTarget; + buildConfigurationList = 46CBD761C24B946C6B86A6E9FAE5B75A /* Build configuration list for PBXNativeTarget "SwiftyDropbox" */; + buildPhases = ( + D669AC0978F2286484818C5FA2A1D22E /* Headers */, + A3D9F76474F59FAEE9C81F69C860BC04 /* Sources */, + 42396456A9083658104D12DBC34770AB /* Frameworks */, + 1BBE8FC626D1B66FC359714E8E9DF84C /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + 6EAE17DEE57C07FFAA5EC882A076663C /* PBXTargetDependency */, + ); + name = SwiftyDropbox; + productName = SwiftyDropbox; + productReference = 1CBA76EDD27FA2D20B1EA0F0BF7F082C /* libSwiftyDropbox.a */; + productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -715,331 +10116,1463 @@ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 0930; + LastSwiftUpdateCheck = 1100; + LastUpgradeCheck = 1100; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 230BB4EC888C7A07E914CA448C4893E1 /* Products */; + productRefGroup = 852E660B5C556492569CAB8892FB9629 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - ABA9A411BB5A359862E5F1AA6238278E /* Crashlytics */, - D35E9EC86D36A4C8BC1704199FDB3552 /* Fabric */, - 1FA9B463D7545DEE19FBE853AC3BFD31 /* Pods-Delta */, - 59CEC038954929A6B36EDBE49EE01791 /* SDWebImage */, - 8255DC44888E72385E107E69A662CE38 /* SMCalloutView */, - 498BC38C077C48A416BCF96644AC3CA1 /* SQLite.swift */, + EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */, + C0E41540D6862472ED7F2FA11669BE1F /* Crashlytics */, + 530F469AED058B94728C278CCA514500 /* DeltaCore */, + 1B47E46598F87113B00B3B25BBF51B32 /* DeltaCore-DeltaCore */, + DCBC8D45C727B1472F26E79661AF11B0 /* DSDeltaCore */, + E5449403CBE67599315B4D26019FA175 /* DSDeltaCore-DSDeltaCore */, + ABB048B191245233986A7CD75FE412A5 /* Fabric */, + 7056A67459B0B8B62FACACCE167546B8 /* GBADeltaCore */, + 890229DC8DCC9C43917568A0C4502FCA /* GBADeltaCore-GBADeltaCore */, + DB59C68809324297BEDAF0CC3F931B27 /* GBCDeltaCore */, + 5C36E65AEF44273E4AF0CBFADD00C090 /* GBCDeltaCore-GBCDeltaCore */, + D7958E869B6C0073DB3025514393D7A3 /* GoogleAPIClientForREST */, + CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */, + D47C581D39D227080F83B16A22A56664 /* GoogleToolboxForMac */, + D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */, + 5CB4163F0A6D4BDE0A490758A78BA43D /* Harmony */, + 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */, + 38A3E6A4A13E8C4E975336840145C119 /* N64DeltaCore-N64DeltaCore */, + 0FAC8C4777DBD31221FE57848CB5F759 /* NESDeltaCore */, + 7F839870ECBE0065B4BCC02E5F98F48A /* NESDeltaCore-NESDeltaCore */, + 33C94426DAF58519DC6806AF4C44C9E7 /* Pods-Delta */, + B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */, + 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */, + D20492B6476142DCA0C455340876BB98 /* SMCalloutView */, + 141E2D29C29A1BC1ABA3483321DF3C88 /* SNESDeltaCore */, + 6538136F848A07F507372CCFB40CEB88 /* SNESDeltaCore-SNESDeltaCore */, + 3F2C1776D90B62B156DB52C41A5C419C /* SQLite.swift */, + FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */, + AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 302354C654A4D0471877F4274CFA7074 /* Resources */ = { + 43A99E43078899FB53911AD66E1038DC /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + F0E5B9CCB6926463DE3B74D3085F7A39 /* Standard.deltamapping in Resources */, + EBE9D4C81C76E7547598DAB991A21C34 /* Standard.deltaskin in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 53A8CA86A88C474983BA0D0292118310 /* Resources */ = { + 7675B29FA996D468DBF9D22009C489F5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 2531408651F267E3005C180FC7BBCA68 /* Standard.deltamapping in Resources */, + A7B6493DBC037E2F8C5BCDDE7EF3121A /* Standard.deltaskin in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - BC1C9B6FF3DBE8D3D8AE821864A7EA31 /* Resources */ = { + A06B5CF2D3EF8320EFFE1AE6DB23FF53 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 2095A394F1DB498633048FA6F4CF5B6B /* GLideN64.custom.ini in Resources */, + 5BE7D6FBE9EB93D43C99935C48A966B7 /* GLideN64.ini in Resources */, + 83241BC0C8359ABCBDE971CD11FFE9DD /* mupen64plus.ini in Resources */, + EB57719B60503ADE6D81243AA7B99301 /* Standard.deltamapping in Resources */, + 219D418E6FEE74ABE4998946887B23F2 /* Standard.deltaskin in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - BFC338855ACF10D9EF6981BE1D4B10D7 /* Resources */ = { + D6F1826D8FBE2174C0C05B2F2C54918A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6D72C6C57A885CD6E28DEA598592E6AB /* Standard.deltamapping in Resources */, + 1096C2B586E2EA8769B5E346F337BD89 /* Standard.deltaskin in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DD221E47A1152CAD9C2622AF131CBAE4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C87DC4532FB4EDA639952BE7DB5EA0A4 /* Standard.deltamapping in Resources */, + 99834BC27CF8939DCA6DB984DB44F44D /* Standard.deltaskin in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F22E4489798570BB57DCFD715E819BE7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 57B0E2E5E730BB045DF85BD06E05F717 /* NstDatabase.xml in Resources */, + D6E2B0F609F10E48830213BA053DB040 /* Standard.deltamapping in Resources */, + 5ABA51E69DCE967FCBED1A337D04F0A7 /* Standard.deltaskin in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F95DF989D9DECEDD3C70F08369BAC34D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0B8D0DF76E87D68894A0DC0C4DEF1911 /* KeyboardGameController.deltamapping in Resources */, + 7436F86B9A9CD831006948764C9DFB72 /* MFiGameController.deltamapping in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ +/* Begin PBXShellScriptBuildPhase section */ + 0B6FC99CE0E5E72E43A0A4F7AD944ACA /* [CP-User] Copy Swift Header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "[CP-User] Copy Swift Header"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "target_dir=${BUILT_PRODUCTS_DIR}\n\nmkdir -p ${target_dir}\n\n# Copy any file that looks like a Swift generated header to the include path\ncp ${DERIVED_SOURCES_DIR}/*-Swift.h ${target_dir}\n"; + }; + 1BBE8FC626D1B66FC359714E8E9DF84C /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap", + "${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/SwiftyDropbox-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + 38EF4CF93070086FEC0872CF084E8F60 /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/GBADeltaCore/GBADeltaCore.modulemap", + "${PODS_ROOT}/Headers/Public/GBADeltaCore/GBADeltaCore-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/GBADeltaCore-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/GBADeltaCore/GBADeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/GBADeltaCore/GBADeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + 4F61BF6CCE774E66CD281745D52A182D /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/Alamofire/Alamofire.modulemap", + "${PODS_ROOT}/Headers/Public/Alamofire/Alamofire-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/Alamofire-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Alamofire/Alamofire.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Alamofire/Alamofire-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + 6722B5185265E81DCF59DC82DCB0CF12 /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/SNESDeltaCore/SNESDeltaCore.modulemap", + "${PODS_ROOT}/Headers/Public/SNESDeltaCore/SNESDeltaCore-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/SNESDeltaCore-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SNESDeltaCore/SNESDeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SNESDeltaCore/SNESDeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + 6C5EC75A128ADA780823E5483FF6312E /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/ZIPFoundation/ZIPFoundation.modulemap", + "${PODS_ROOT}/Headers/Public/ZIPFoundation/ZIPFoundation-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/ZIPFoundation-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/ZIPFoundation/ZIPFoundation.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/ZIPFoundation/ZIPFoundation-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + 966ED76FE9108AC8FE6BF2B10DADB274 /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/Harmony/Harmony.modulemap", + "${PODS_ROOT}/Headers/Public/Harmony/Harmony-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/Harmony-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Harmony/Harmony.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Harmony/Harmony-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + A3D6710365DAB2CCA647EE186555369E /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/GBCDeltaCore/GBCDeltaCore.modulemap", + "${PODS_ROOT}/Headers/Public/GBCDeltaCore/GBCDeltaCore-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/GBCDeltaCore-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/GBCDeltaCore/GBCDeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/GBCDeltaCore/GBCDeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + B47C91E971844BF723AD4C1AF31ED003 /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/N64DeltaCore/N64DeltaCore.modulemap", + "${PODS_ROOT}/Headers/Public/N64DeltaCore/N64DeltaCore-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/N64DeltaCore-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/N64DeltaCore/N64DeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/N64DeltaCore/N64DeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + C39FB08F8EAA3D3BE3FCA734AB5A134B /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/NESDeltaCore/NESDeltaCore.modulemap", + "${PODS_ROOT}/Headers/Public/NESDeltaCore/NESDeltaCore-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/NESDeltaCore-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/NESDeltaCore/NESDeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/NESDeltaCore/NESDeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + DDD4A7AD247A86C8E3CEEF843D4A6F8D /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/DSDeltaCore/DSDeltaCore.modulemap", + "${PODS_ROOT}/Headers/Public/DSDeltaCore/DSDeltaCore-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/DSDeltaCore-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DSDeltaCore/DSDeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DSDeltaCore/DSDeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + F7BE234CBA2A214465171737981B36F2 /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/DeltaCore/DeltaCore.modulemap", + "${PODS_ROOT}/Headers/Public/DeltaCore/DeltaCore-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/DeltaCore-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DeltaCore/DeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DeltaCore/DeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; + FBDBDFFAD990AD9508B3EFA011AEFC86 /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/SQLite/SQLite.swift.modulemap", + "${PODS_ROOT}/Headers/Public/SQLite/SQLite.swift-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/SQLite.swift-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SQLite/SQLite.swift.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SQLite/SQLite.swift-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ - 411821C62D8568051B3E7516070BC5C5 /* Sources */ = { + 05BC7ED38F0128CA453934D8D78F19AD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4F8EDAE8E97D3E491882F0BAF88363F3 /* Pods-Delta-dummy.m in Sources */, + B843BC65B5755CDFCC2133CAB6614090 /* Pods-Delta-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 546536C8DF4FD2B5B545B2FAE82DF09B /* Sources */ = { + 0F356666BA38C004ACD3218C473661FF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9265358612C2E1DA94177D7B439824C5 /* SMCalloutView-dummy.m in Sources */, - 0251CF8FCE9C1C91ABF4F75AF18DA482 /* SMCalloutView.m in Sources */, - 7EF08521E1A1CDDE45021F58D0AE0548 /* SMClassicCalloutView.m in Sources */, + FF47124336E697A518CE2C93B8E88C2C /* GTMGatherInputStream.m in Sources */, + FA577995260851815A34580C95A493FE /* GTMMIMEDocument.m in Sources */, + A4CDAB56ED7EA775F1A4AF9BC6C5E712 /* GTMReadMonitorInputStream.m in Sources */, + D9D678A3261AB86A7637EB79F73B0D27 /* GTMSessionFetcher-dummy.m in Sources */, + A6173C5A991255ED8E9DF5B7A8B26CA7 /* GTMSessionFetcher.m in Sources */, + D3DEAD4C77A168D67D3EC458661D424E /* GTMSessionFetcherLogging.m in Sources */, + EE4994A811223017B6C5EE3AC8A4FDAF /* GTMSessionFetcherService.m in Sources */, + EE2019BF5CB64FFF4F1A0E423383637C /* GTMSessionUploadFetcher.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 74F5D6BA6C186DFC69B0F41F9A78C0CD /* Sources */ = { + 12DE409A27F23DF6814E99A3BC6F99B8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E48E04BF619A2F920A85942A201CE8E2 /* AggregateFunctions.swift in Sources */, - 937DEADE0FE1F015638CCDE952F121CB /* Blob.swift in Sources */, - 6D270F42FF3DFD894835B63B6C36C4B8 /* Coding.swift in Sources */, - F7CA8BEC0BFFEAEB7788928B14BED98B /* Collation.swift in Sources */, - BA66D1C5E69F91AFADCFA26A2D1366BA /* Connection.swift in Sources */, - 459EEF15B88FD633844AA76AC51EFA1D /* CoreFunctions.swift in Sources */, - D0C126C60AAA119E8D053AC995262101 /* CustomFunctions.swift in Sources */, - A3790C17AA9381C88D83A87186F67579 /* DateAndTimeFunctions.swift in Sources */, - 1F7A9FB785C854EBCB778C6786082946 /* Errors.swift in Sources */, - 9EA2BBE738E2CA915692C35E53AC9829 /* Expression.swift in Sources */, - C7E472D859F3C3CC7A4ADE5968DFAEE0 /* Foundation.swift in Sources */, - 661471DFE46A1A15CF59D850025021E6 /* FTS4.swift in Sources */, - ABAC28890D419685AF29BED46FAF1B11 /* FTS5.swift in Sources */, - 67EAB3B13FC85B894F7AEBDFF9C349D6 /* Helpers.swift in Sources */, - B342D8162C250CA9504C20A671B38DA6 /* Operators.swift in Sources */, - 6FE1ED95ABA95F6A1E457FCE35D5EBA6 /* Query.swift in Sources */, - 0085B4B7B49EC2C3B7E8D442E41C6352 /* RTree.swift in Sources */, - ED6A37F4C2782BC30CFB9BB176546D57 /* Schema.swift in Sources */, - 66144773F60E9140636ECF0D3128B405 /* Setter.swift in Sources */, - AAD26ED719763FC1F182B785749399B4 /* SQLite-Bridging.m in Sources */, - 5C9A7DCDB08294CB236AD26F1F9159A0 /* SQLite.swift-dummy.m in Sources */, - A083E583EB3A2B64DB85903BB55F5F63 /* Statement.swift in Sources */, - E2AFB19D856618677D24ECD5616CC16C /* Value.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8F564664C9DAEF7B5A85F15B51854C55 /* Sources */ = { + 27E9971E616992A3F765D51DAE846624 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3E54D875BEF34E1F741C1F72ACB66A63 /* NSData+ImageContentType.m in Sources */, - E0407BF2EF01A322231ACD0378CAD87B /* SDImageCache.m in Sources */, - 90321E5DFA902711AB0DE7C7C5517E87 /* SDWebImage-dummy.m in Sources */, - 0BC4BB8936C01AC3D3AEF6F309CCFB43 /* SDWebImageCompat.m in Sources */, - 4C9446D9CF826EDEE8F3D8D5E5365380 /* SDWebImageDecoder.m in Sources */, - 25A2FCD6B5A7E73A006EA1ED15D25CE9 /* SDWebImageDownloader.m in Sources */, - 7A2302CF922FB5D929E0604476008441 /* SDWebImageDownloaderOperation.m in Sources */, - 112F84060685CB3A9C75A420BBF70C02 /* SDWebImageManager.m in Sources */, - 5574087481C1B8E436A1E9AD7B4927DB /* SDWebImagePrefetcher.m in Sources */, - CFF129D29AA80B99EC3060F664B212C4 /* UIButton+WebCache.m in Sources */, - E07ED38277DC7DCC89B495C82CC3AFF0 /* UIImage+GIF.m in Sources */, - 8A8BAF65CD7800A51C4F2E80C5DFB002 /* UIImage+MultiFormat.m in Sources */, - 184E6A0A237A89E33427F4896778BFB0 /* UIImageView+HighlightedWebCache.m in Sources */, - 74E778E8164ABD251CFC1C85C0C1EC36 /* UIImageView+WebCache.m in Sources */, - 37CF4910BDFEF20A550249B7EB9E444E /* UIView+WebCacheOperation.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2A91D3B6EF4FF912D9692A13CFBFB02A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6728DD595016A88D0BE42E03C7F8FFCC /* GBC.swift in Sources */, + A5037807FB7A1D0D4B693C55BF20B762 /* GBCCheat.m in Sources */, + A8551A96FDD516BD37037B818AE7BC7C /* GBCDeltaCore-dummy.m in Sources */, + E8C165293B36E2F95AD7CBF511CDEA47 /* GBCEmulatorBridge.mm in Sources */, + BB961476561437CC41E703E25E767FD7 /* GBCInputGetter.cpp in Sources */, + 3C78E4348B065F6A1F2E070E9C9AEA1F /* GBCTypes.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3DC4139B1C0EA206BEB29EE8CA06ED7A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FFE3DB6ABAAAF0F990D802469CE319C5 /* GoogleToolboxForMac-dummy.m in Sources */, + A2ADFBA34707939EDDDA8DDFCBAF4500 /* GTMNSDictionary+URLArguments.m in Sources */, + 83A09D122123E6C2815459DADEF9729F /* GTMNSString+URLArguments.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40E9ED7D7C8F5D863BB2967890D4AF80 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 53ECC6163FB5AF3BBA2F3FAE6A8F1BEF /* DS.swift in Sources */, + 3D82BB8BB2ECF360078CE90C99E218A3 /* DSDeltaCore-dummy.m in Sources */, + 56487F87D42D4ABC274B99A23E38ED51 /* DSEmulatorBridge.mm in Sources */, + CED63E1AB568688A1C00CA58D790243D /* DSTypes.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5B0F6D0BAED01A7A219A798DB9F8BEED /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4C5A26ACD5B7FB918191313A9F178EC8 /* 3DMath.cpp in Sources */, + BA530F1422205725B02895445DDF0F3E /* alist.c in Sources */, + 4619C7C20249E0D46A2D68E292D09BF4 /* alist_audio.c in Sources */, + 20F9B744BEFD8D7B6A31CAD347DA905B /* alist_naudio.c in Sources */, + AF0DCE9655B9FD35BC9D0A18E30C0A57 /* alist_nead.c in Sources */, + B128E8E439A9E5BDD9CE64F4EEDA1AEE /* audio.c in Sources */, + C094CBCC986DF1C6C0A3379FCA09D462 /* biopak.c in Sources */, + 20456037EE6A29D63087BCDEABE7A543 /* cicx105.c in Sources */, + 85CCCE40DF1323C9A271D20D29AD279F /* ClipPolygon.cpp in Sources */, + 9B75C40E8889FD932BCFF196C4F35E57 /* ColorBufferReader.cpp in Sources */, + 22A782478094510168B16DDC00EAD35B /* ColorBufferToRDRAM.cpp in Sources */, + 02619B61469E1C06E2A30FF166068583 /* Combiner.cpp in Sources */, + 6731CC4CED928FD83F4CEA695B5D6A78 /* CombinerKey.cpp in Sources */, + 113A3ADEA158094373E44C01E1443F61 /* CombinerProgram.cpp in Sources */, + 3A76CD8381C61DF00848DA207E173AE6 /* CommonAPIImpl_common.cpp in Sources */, + 2AA72C64A1A864A039D5E3F085526F29 /* Config.cpp in Sources */, + EA259B2E1D0BB10750FC2236B155EAB2 /* Context.cpp in Sources */, + 43F876E1F40CE874937E046A6E211731 /* convert.cpp in Sources */, + 6DE7BBDFA34C2573298F7441BBF3AB4A /* CRC_OPT.cpp in Sources */, + 14D448DCE42024011A61818D6536731E /* dd_controller.c in Sources */, + 89163481E7F96A33F9E183759BD7D51D /* DebugDump.cpp in Sources */, + 2DB19BEF17C3D5BE1E0C85B25C931C43 /* Debugger.cpp in Sources */, + E6A4553281DA2987F949740F277ACA3D /* DepthBuffer.cpp in Sources */, + 0D97BC11BC4E1636F550EF6D331031AF /* DepthBufferRender.cpp in Sources */, + 96D4E9BF589FAEAAE225B88A6CC68214 /* DepthBufferToRDRAM.cpp in Sources */, + 9B785841DB7BEA68999C1CA3F487ECF1 /* DisplayLoadProgress.cpp in Sources */, + 0E62C30ACBFB8DC392E5CE59DDAA64A2 /* DisplayWindow.cpp in Sources */, + 14890F4A609A98F54A7AE2FAA7A769BA /* dummy_video_capture.c in Sources */, + A1FDFF2AD1EBC97A47F35961A2C71109 /* F3D.cpp in Sources */, + AA615360C6D1A302957FBF37E2684533 /* F3DAM.cpp in Sources */, + F0D1F35D36D80879500D7BC755F861C0 /* F3DBETA.cpp in Sources */, + C1C5E0B49268CB4DB6B4B7CF63412FF5 /* F3DDKR.cpp in Sources */, + DDCFF8BD823EB8F9837DF1B4034FF1E8 /* F3DEX.cpp in Sources */, + B5E9F103B89A4D65F3C103264D8F0075 /* F3DEX2.cpp in Sources */, + B445DE84FFD95F74DE320679C420C280 /* F3DEX2ACCLAIM.cpp in Sources */, + FB52AF561DF1EA42175BB097A4ACC4CE /* F3DEX2CBFD.cpp in Sources */, + FDAED0747D841ECFEF580516B968E938 /* F3DFLX2.cpp in Sources */, + 5B5FC4B8005630CE21B998A96C73D770 /* F3DGOLDEN.cpp in Sources */, + 63306BB36B1EE0257031B7113C64569F /* F3DPD.cpp in Sources */, + F3C54A16E279E2FDD60FBA58FBB2B4AB /* F3DSETA.cpp in Sources */, + CF85240AFAAECCEC4EED6E2AE3F565B9 /* F3DTEXA.cpp in Sources */, + ECE94BF77F79C48917F76CFABFF51D4E /* F3DZEX2.cpp in Sources */, + DF266745A6B1E11185D36EF99E10B829 /* F5Indi_Naboo.cpp in Sources */, + 59F9463AE8F8A4C77B2B7FE0E646026B /* F5Rogue.cpp in Sources */, + 7836A137F2D211F1D9314D9FE4EA0D66 /* FrameBuffer.cpp in Sources */, + 0A82B6C9EC4EA09A0C213ABAE1E08E9B /* FrameBufferInfo.cpp in Sources */, + 8396AC5DE2BB1D261F147086BBBEE743 /* GBI.cpp in Sources */, + 9AC1AB764E31934D162F26C8484C21E6 /* gDP.cpp in Sources */, + 328973836A67F6C5B5D59A4EEC49C810 /* GLFunctions.cpp in Sources */, + 3B2297CC939F6D0B7512A5D0F8E91436 /* GLideN64.cpp in Sources */, + 45F9C2BE3D3D88B7333F8CCFB32B5442 /* glsl_CombinerInputs.cpp in Sources */, + 77A85C92FFB254C86D986447BE4A3853 /* glsl_CombinerProgramBuilder.cpp in Sources */, + C34D51CEB4E00C5A195C5FF17A900866 /* glsl_CombinerProgramImpl.cpp in Sources */, + CB0762ECE40307553CD674252738DE2C /* glsl_CombinerProgramUniformFactory.cpp in Sources */, + 56192DB51F2A50C90569FF1BD1985C88 /* glsl_FXAA.cpp in Sources */, + 73386D5E90D47431798B1A5A736601B7 /* glsl_ShaderStorage.cpp in Sources */, + 0FCCD4B109AB22FC20A743AB750B95EC /* glsl_SpecialShadersFactory.cpp in Sources */, + 489FD286E54A8CF00552B82CBE154B85 /* glsl_Utils.cpp in Sources */, + 12642C40ECD4772D8E3C16F32834E565 /* GraphicsDrawer.cpp in Sources */, + 6B63836AD6E6BC9D03FB3AD4A534B6AC /* gSP.cpp in Sources */, + 33869554EDBB14406B7BB9E8647E35A0 /* hle.c in Sources */, + 38C976A8DEE43222DFA6C54E16E79FFA /* jpeg.c in Sources */, + FE6E40D309F0B3DD2EC97258D2B80C79 /* Keys.cpp in Sources */, + E11B7AAF1933D8FF81EC1A4AA3B01862 /* L3D.cpp in Sources */, + 8DD51BE5C43C2B1D3E7A605D95C974C6 /* L3DEX.cpp in Sources */, + 56CC143D8E35F7C9A786111F8469E4AE /* L3DEX2.cpp in Sources */, + FEAB30060313E7D45EDA78B37A4A860C /* Log_ios.mm in Sources */, + 926C22B256A40C76B6C8FBDCC7D1900E /* memory.c in Sources */, + 48C37CCF88449880D62A12DCE1B313AB /* MemoryStatus_mupenplus.cpp in Sources */, + EE33CD64FEAC466A7824C75D33623961 /* mp3.c in Sources */, + 1FB0A954FA7AF8FE8D99D959DE9965B9 /* mupen64plus_DisplayWindow.cpp in Sources */, + 3AB819E705859C4B41819930E8681142 /* musyx.c in Sources */, + 886A18799553A19E810D2F7D688A4126 /* N64.cpp in Sources */, + A7367943BD56320D9A2A6192A8A3D770 /* N64.swift in Sources */, + 4621F1AF007DEF733981FDC8CCE566E0 /* N64DeltaCore-dummy.m in Sources */, + DE128C6384EFDCB0627D9980E76E9E20 /* N64EmulatorBridge.m in Sources */, + E36C54619AD747C9D5825D0F555BB156 /* N64Types.m in Sources */, + D52D782E8B77295F31DAAEF79BFBABD0 /* NoiseTexture.cpp in Sources */, + 95927DE3B446FB2A897EEE03A3B0E292 /* ObjectHandle.cpp in Sources */, + 0268FE03E18EFF693689E074F11B96C1 /* opengl_Attributes.cpp in Sources */, + 8A5CB6F7F72B063E995EC0B2C2AF52E5 /* opengl_BufferedDrawer.cpp in Sources */, + F3F92D728EEA58B31C1366A8C3D2592F /* opengl_BufferManipulationObjectFactory.cpp in Sources */, + 2CEEF7D75DDAFBAAF8E4106F54BDE731 /* opengl_CachedFunctions.cpp in Sources */, + 362273378B1432EA72CB535B566D301C /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */, + 679942ACF8264152448A2861144849F9 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */, + BE7A4ED43FCAC3814C10C9D5B3A68D18 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */, + C4561DB72CCEBA4FF6445D4738B7C7DE /* opengl_ContextImpl.cpp in Sources */, + 07DF414393A0265559B74FF88238011A /* opengl_GLInfo.cpp in Sources */, + D721B239753D7F7FDDE916AFE3FCB235 /* opengl_Parameters.cpp in Sources */, + C38E914D8F66B0BD258C83D7C35C2726 /* opengl_TextureManipulationObjectFactory.cpp in Sources */, + 5872138AFC456A4EFAF08719BB37464C /* opengl_UnbufferedDrawer.cpp in Sources */, + 4F483ADE9F4639BF875D6E84D02AEB80 /* opengl_Utils.cpp in Sources */, + A5F30E43D79777F683DA8086E856314C /* osal_files_ios.mm in Sources */, + 4F413DC26068AB7502D2ADE1EED949AA /* PaletteTexture.cpp in Sources */, + 8F6BB90B38CCD6C919AB656FB5EC04C3 /* Performance.cpp in Sources */, + 9463C53B6DDD72C64400E314D9AAB04A /* plugin_delta.c in Sources */, + CBFE788323DBFFF81708B579E642C550 /* plugin_delta.cpp in Sources */, + EF9C7D853BDDA0BCC0F895D47AA7437C /* png.c in Sources */, + 10B25A3E89F2BC948F600F93DFD2AEEE /* pngerror.c in Sources */, + 0D0CDD2D121FB16DD8061998BE122543 /* pngget.c in Sources */, + 8229184EC4951470007A0AF03871F122 /* pngmem.c in Sources */, + A495BA6FF010BD3CC899768E09C49CDC /* pngpread.c in Sources */, + 80E2A90DF2C7F5D8D36F4A37F0F6CE03 /* pngread.c in Sources */, + 1505FB7B20F25998D75A83A2147DF2F0 /* pngrio.c in Sources */, + A960256FE7F887C3B4128D1F696E2D90 /* pngrtran.c in Sources */, + AC809FC49956C0CEF8D81ECB57D34E1E /* pngrutil.c in Sources */, + C794D4B738B15C7F096A903C21D39FC2 /* pngset.c in Sources */, + 26EA8FC2F1D23AB23AE750AF18221843 /* pngtest.c in Sources */, + 556FF16A662F3C2DEBA50B9693599DE1 /* pngtrans.c in Sources */, + EDECCD20635BC41EB02BEF704D740AF4 /* pngwio.c in Sources */, + A6B315E94A6CEF669095A376A8B78BF0 /* pngwrite.c in Sources */, + D8BEDCF49E6864FFFCE6F10F633F3500 /* pngwtran.c in Sources */, + 98E164F9F904A6584A61420EE9FD1A7E /* pngwutil.c in Sources */, + B425DF73F64609FA542BBFB0BE9EDF03 /* PostProcessor.cpp in Sources */, + 22004865065093B59F7DF41EAA0DEA79 /* RDP.cpp in Sources */, + 480FB68E1413AE0DC7B8CE67383BF00F /* RDRAMtoColorBuffer.cpp in Sources */, + 8794B9E7B8EB7EC0B49CE452CF778FC1 /* re2.c in Sources */, + F28EC2465A217A0417AE60E418AA1C70 /* RSP.cpp in Sources */, + 93E2A69BE77D64F60D12257FF81954F4 /* RSP_LoadMatrix.cpp in Sources */, + B47F87DC8093788C4F7F5FAA80E88648 /* S2DEX.cpp in Sources */, + F0C6CE8A84BFC2F818EA2389B0E54944 /* S2DEX2.cpp in Sources */, + 4B7AC54FDF87859ED298ABADF7043037 /* SoftwareRender.cpp in Sources */, + 732F3A5D226D0D463C9027476C9F5E60 /* T3DUX.cpp in Sources */, + 1B0E862A80891D08A0C6F2E43AE8B356 /* TexrectDrawer.cpp in Sources */, + B0B1C045C677C89BF5B9C28280948EFF /* TextDrawerStub.cpp in Sources */, + B9D617B5B5EAF1315D131DBCE295ACD2 /* TextureFilterHandler.cpp in Sources */, + A45F47289CB2ED953F6CD191275DB3F2 /* TextureFilters.cpp in Sources */, + 7F01651585FCAE415EBDFC808DDFB5F7 /* TextureFilters_2xsai.cpp in Sources */, + E9B012F6B7FFEF993DEC81040FF08B81 /* TextureFilters_hq2x.cpp in Sources */, + 05E346049D925B2F24BFD812BB16EACE /* TextureFilters_hq4x.cpp in Sources */, + E7F970F940518CACBA50E29DA4566EE5 /* TextureFilters_xbrz.cpp in Sources */, + 8AF999E503CB06FBD4EEA0903D672F5A /* Textures.cpp in Sources */, + 5858556236C0AD004276850A211BBBB2 /* Turbo3D.cpp in Sources */, + 7A2438E3C2548E6C6B9046875E06F5DF /* TxCache.cpp in Sources */, + 0D3A7FEA753047DE31A6F81799F3190C /* TxDbg_ios.mm in Sources */, + 09712513CDD56B9AD1082FD253B210B0 /* TxFilter.cpp in Sources */, + 882DCF4B991615D8A07BC2EF7E84A5FC /* TxFilterExport.cpp in Sources */, + 7B7E2677824409DA731B3FAD16DF422A /* TxHiResCache.cpp in Sources */, + 9B40F6B2B7F12F1A13A367E599764867 /* TxImage.cpp in Sources */, + 35D2385FCC093615C3BA7B260E3E6CF0 /* TxQuantize.cpp in Sources */, + 6AE5D505AB46EAC8A4CA2ACBE1EF0FC3 /* TxReSample.cpp in Sources */, + 106923F11FA63A0A83DDFF28E6D682E6 /* TxTexCache.cpp in Sources */, + EFEDD19659E080B7972B6EC2113D02A1 /* TxUtil.cpp in Sources */, + E614C5D1F40EC77DAF23006BCBA8523B /* txWidestringWrapper.cpp in Sources */, + 9FEFB36A938CC33AAA28777285A2D6D3 /* VI.cpp in Sources */, + EAC867D60DB729E55A1ED540BD330F09 /* video_capture_backend.c in Sources */, + 09FC171FD71744C6F47D4CC3341BF102 /* xxhash.c in Sources */, + 09FC171FD71744C6F47D4CC3341BF102 /* xxhash.c in Sources */, + FE0FA27784515E14FED461B1ACB0D5AB /* ZlutTexture.cpp in Sources */, + 6E5A067CD4797D3ABC2BC001B7005A84 /* ZSort.cpp in Sources */, + 2CCC882A4E5D781FCB474D22071FDB82 /* ZSortBOSS.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5EE6B8A56A8A13C9228CFEE7FC036FA2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 30E3FF5DE72D56612993D499EBED8C9B /* AggregateFunctions.swift in Sources */, + 12AEC0B4C35E8BDE4366D57CE6805481 /* Blob.swift in Sources */, + D8F09E6FFEAEFBFFA69546C6F36EF74F /* Coding.swift in Sources */, + 85290514199956D820FB90C92DBD0002 /* Collation.swift in Sources */, + 68F7071AB87ED8CB4B8CF11F7BF9A78E /* Connection.swift in Sources */, + 8043A7E0B334D03CF18AF57B63B8B407 /* CoreFunctions.swift in Sources */, + A902E94BC79F6FA99E9BB0300EA305B3 /* CustomFunctions.swift in Sources */, + 921C1F239586B4E7118399375F45BAB5 /* DateAndTimeFunctions.swift in Sources */, + BC4EB746D2E13352424A93FDC7A52F78 /* Errors.swift in Sources */, + 2D87E1AEC45003E3C2203D5A623DB6E1 /* Expression.swift in Sources */, + 566B02F81167FAAB363014E42ED15BFF /* Foundation.swift in Sources */, + B592BEA6F00B6CB2A68FF21EE18DCCE5 /* FTS4.swift in Sources */, + CBD00AD2D050E606B432EF764F0443EF /* FTS5.swift in Sources */, + E78529FBA5C035888371AE6EE12276A8 /* Helpers.swift in Sources */, + 3D38D3143F60F22FF8148BA31C508E73 /* Operators.swift in Sources */, + 94D28595353D013C0530A91A7AA81FCF /* Query.swift in Sources */, + CB7A5FD2D111FB945D4C60F8F9CEB90A /* RTree.swift in Sources */, + 26D84D2836C13B2D939D5A5E2B1BD47B /* Schema.swift in Sources */, + FDFC423A4243CFA179481946B523C999 /* Setter.swift in Sources */, + DB02626D12C516C4CD6A9EA98D20A50A /* SQLite.swift-dummy.m in Sources */, + 6EAC3C9446063F09611B9BE55D8D34C1 /* SQLiteObjc.m in Sources */, + C72087EDCF1BAE223A1BB8C94BA87329 /* Statement.swift in Sources */, + F167CCE2838CD4DF3161F75877A2858C /* Value.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5FD9EA2163F118D199159555369097A5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B56E07AC98E8D928C9E900BEAB1E5D9E /* GoogleAPIClientForREST-dummy.m in Sources */, + BE4BD4C475FD682FA5F5A75F1CCB4940 /* GTLRBase64.m in Sources */, + 07061CB34749ECA222E5A23CC2437521 /* GTLRBatchQuery.m in Sources */, + 1A740EB1DC7E96D415A582212D8BD190 /* GTLRBatchResult.m in Sources */, + C7CB102CC0A1B62D7A956BD46BC0C8FF /* GTLRDateTime.m in Sources */, + BD76AF44C34DBCA99DBC73D5ED61FE7F /* GTLRDriveObjects.m in Sources */, + D1872BEC18A09543B94BFE0EAD273D61 /* GTLRDriveQuery.m in Sources */, + AFD5F72E1203590BAF3FF051AC1D4A1B /* GTLRDriveService.m in Sources */, + 769EEA7F82C3927B9C262C740EF80DC1 /* GTLRDuration.m in Sources */, + F298E311AEDA130784E1ED9899B35D3E /* GTLRErrorObject.m in Sources */, + 02D9C3D0F0992ED6738D080A0E1CC9E1 /* GTLRFramework.m in Sources */, + 3E5EA4F51A82281DFE44955D6791C12D /* GTLRObject.m in Sources */, + B72829BC0D61AF2E97C134A12BB5387C /* GTLRQuery.m in Sources */, + D81057F2081420DC4B25CDA39DBC3B96 /* GTLRRuntimeCommon.m in Sources */, + FC88DE967A3DA743DC5161E747CDC20C /* GTLRService.m in Sources */, + 4F8D23620463D8FF135DC582B2B54D41 /* GTLRUploadParameters.m in Sources */, + 41A7B51821FA9F73512BF747599C4C47 /* GTLRURITemplate.m in Sources */, + 00D6A91F2372896AFCBADBB569CB61B2 /* GTLRUtilities.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 69B367E1585682AB66F97B335F9D03A8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 805A1E28389AF5FB29FC09BE6C8B1F0A /* Account.swift in Sources */, + D753580473283FA203738466F2939B6A /* AnyKeyPath+StringValue.swift in Sources */, + D2A37DEFD55B0BA864F27119BE974CB0 /* BatchRecordOperation.swift in Sources */, + AEAF60DA9CCFF57F8FBCEDFFFC09436E /* ConflictRecordOperation.swift in Sources */, + 7E5EB7A39652E32E3CA0F3D93856E2EC /* ConflictRecordsOperation.swift in Sources */, + 2E1CE99F9F3BACCEBB2EE44E78B4D3F3 /* DeleteRecordOperation.swift in Sources */, + 3CCFF040F69A447BCC79C844C6E30412 /* DeleteRecordsOperation.swift in Sources */, + CA52FE953A256B3FA7D63719284CDD4B /* Dictionary+Sequence.swift in Sources */, + 943577E181B1B6706D2107ECD728B015 /* DownloadRecordOperation.swift in Sources */, + 59462C1E4E16ACC6FD20C786FE5D2A1A /* DownloadRecordsOperation.swift in Sources */, + CF250F8607C7E5B37247613578134177 /* DriveService+Files.swift in Sources */, + A9F981EDC073C433341A5F4025D46216 /* DriveService+Records.swift in Sources */, + E25E5FB3CA97B41662F326DC6DFFFC0B /* DriveService+Versions.swift in Sources */, + 4995851CA04E15BE62A4905F6212BB68 /* DriveService.swift in Sources */, + B73AB37F8B742739EDA3C074F536FBC5 /* DropboxService+Files.swift in Sources */, + 6C87671F7C948E465D76853474A7F27E /* DropboxService+Records.swift in Sources */, + 15631406F1349925694F775193DCE3B8 /* DropboxService+Versions.swift in Sources */, + 7C44081096D7BD7EC16DEF322D7DC5E4 /* DropboxService.swift in Sources */, + 5964FD1B899EE5FDD4F98F594BC29971 /* Errors.swift in Sources */, + 188C27A5024641883B67EC17C1AA6995 /* FetchRemoteRecordsOperation.swift in Sources */, + BAAAB1B9FEE1E71EB834788C59B174C4 /* File.swift in Sources */, + C2CF08E68D39B2B25982B6AD4BE22708 /* FinishDownloadingRecordsOperation.swift in Sources */, + DB37D974F8E6FB9101F45E79F9AC3858 /* FinishUploadingRecordsOperation.swift in Sources */, + 109639DF3F0EF7199D502AE257551180 /* Harmony-dummy.m in Sources */, + CEAD3645EFC4389694E75CF1068CC91F /* HarmonyMetadataKey+Keys.swift in Sources */, + DA2B760E4D6E2D31F977E72C22441865 /* JSONDecoder+ManagedObjectContext.swift in Sources */, + 4A53F0A16D88C817005A54BAE4A6F449 /* KeyedContainers+ManagedValues.swift in Sources */, + 6D5F88F8EE3492C0AD55D6CD854681EA /* LocalRecord.swift in Sources */, + 5028F30132D3D726A5BFEB6A45CE08F6 /* ManagedAccount.swift in Sources */, + 9A4C2D5C397861A9572A20C1F8A36028 /* ManagedRecord+Predicates.swift in Sources */, + F4808FD70D3BA8559604594D5674A324 /* ManagedRecord+Uploading.swift in Sources */, + B94304C605E21C38958D8B2399F806E4 /* ManagedRecord.swift in Sources */, + 1F8209A656C45B0F07C3C1BF8E02279E /* MergePolicy.swift in Sources */, + B219C7FCFC30F49A2B96B301127F71A7 /* NSError+LocalizedFailureDescription.swift in Sources */, + 13DDDEE8E9A5F0E7D4767A7E2438F61E /* NSManagedObject+Conveniences.swift in Sources */, + 56096E16210F97AF0E03EB7509C67B7E /* NSManagedObject+Harmony.swift in Sources */, + 55E38E50C72F3898CD13D71706F1BBC4 /* NSManagedObjectContext+Harmony.swift in Sources */, + 2ACBB459B58101305C15B9E93221B2D8 /* NSPersistentStore+Configuration.swift in Sources */, + 6212289ABD96C811DCD8B09B9BCC1E9B /* Operation.swift in Sources */, + EE4B56A8FD2098F2F49C84B564BDD404 /* PrepareUploadingRecordsOperation.swift in Sources */, + 75B06D656B71606BD4C8995494313BDE /* PropertyGroup+Harmony.swift in Sources */, + B1FA10A1E7A8D914849E2F9982C44D07 /* Record.swift in Sources */, + A71F672BACBEE53FD4851582F9A71450 /* RecordController.swift in Sources */, + B4B9606F74B2AE01213BCB4FBAEE6F6B /* RecordEntry.swift in Sources */, + 9DCA03AF7E63F208B7C61C8EE8B41AF4 /* RecordOperation.swift in Sources */, + B30D82E85429187E9C74F971CECAFD0F /* RecordRepresentation.swift in Sources */, + 34AE8851640DC6E16132178B877A21E0 /* RemoteFile+Dropbox.swift in Sources */, + 1320CB37F0E2606479AD7BAB5C56E7D3 /* RemoteFile+File.swift in Sources */, + 52E4F3DFED11D9653AEC0B37BFCA708E /* RemoteFile.swift in Sources */, + 2CC0B722492849CF64841AE7884A8948 /* RemoteRecord+Dropbox.swift in Sources */, + FEA640DE0115214A9C6F9F674F56194E /* RemoteRecord+File.swift in Sources */, + D896BE2637D4D0EE60FE67FB5B01F686 /* RemoteRecord.swift in Sources */, + B89DFCAD50363CFBDC53931F4F370234 /* Result+Drive.swift in Sources */, + CF15A4FD0438274D29A83992C4D7A186 /* Result+Dropbox.swift in Sources */, + 0ECA6110DA3B0588B02D33C1E337CDF1 /* Result+Success.swift in Sources */, + EDEA3AD87DDC71ECD0952ABD1368A95D /* Service.swift in Sources */, + 4712883E9233CBF125D350671054463F /* ServiceOperation.swift in Sources */, + 50FED56DA840079A313570E00101A9E0 /* Syncable.swift in Sources */, + 9FCADB0CF0AFBD4F3F0ABFED93FB82A1 /* SyncCoordinator.swift in Sources */, + 4E2240017E2AF72AD8910D16B4ADBA96 /* SyncProgress.swift in Sources */, + 592095BB4B63DA9A913D330FFA26905F /* SyncRecordsOperation.swift in Sources */, + 74C7BF54656C67DEB87098CB74EBFED4 /* UpdateRecordMetadataOperation.swift in Sources */, + 58B5EB01C16F961316330E4D251E7648 /* UploadRecordOperation.swift in Sources */, + 06DC2503AAF54FB4B5D3B4606EC66F81 /* UploadRecordsOperation.swift in Sources */, + 8433AA2398A8DBAAF7B367AEF3C636C0 /* UserDefaults+Harmony.swift in Sources */, + 295238CB026C2D0DE66098E71D0CC261 /* Version+Dropbox.swift in Sources */, + 1FEE8B5284DC3C2F7D3F0E28E62961C1 /* Version+Revision.swift in Sources */, + 8BC24B9D0B902A90526475618DFEB023 /* Version.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 811F13FE55E873CE6C1956757840D7C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9C8A0C2204C091124D6C64F86A690F9F /* SMCalloutView-dummy.m in Sources */, + AECB1619CFCEF7A7234852F00CB0C5C0 /* SMCalloutView.m in Sources */, + EBC516586457D8BA8B838FF0A74F6192 /* SMClassicCalloutView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 95B1D949CBD75B2788DC28647769C517 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4D596A13AB85FB2666F860BA7D172A91 /* SNES.swift in Sources */, + 29F809E6C4D11C55843F619D51A88F05 /* SNESDeltaCore-dummy.m in Sources */, + 0B984B28675905FE99D500B13967A582 /* SNESEmulatorBridge.mm in Sources */, + AB1E3DEF678EB7000A95D5337728318D /* SNESTypes.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A3D9F76474F59FAEE9C81F69C860BC04 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 880A3366BA936A92BBD568462B09612F /* Async.swift in Sources */, + 912EEA493E0A08FC711CF6864C3DB36F /* Auth.swift in Sources */, + 9AC5F54FB242288D0C0BEE5FE51BE7F6 /* AuthRoutes.swift in Sources */, + EDC281DAD5A8204DB2E18A3FB2B5D725 /* Base.swift in Sources */, + AA3241DCAEBD138A49F1A1B79CFE3F40 /* BaseTeam.swift in Sources */, + BBE93C6E95E356BE54C337E86C774BED /* Common.swift in Sources */, + 5AA3255686819EB4DD24A1FE23CC6F28 /* Contacts.swift in Sources */, + E3C4CC0E44B8054138477E9731B4E454 /* ContactsRoutes.swift in Sources */, + 4DC3CE0782BBAC382A857CFEBFDE94BC /* Custom.swift in Sources */, + 5DE22207D1B1CD7A583F52895E942007 /* CustomRoutes.swift in Sources */, + AC4C2943071E6F4EFE6F3CDED9F75289 /* CustomTasks.swift in Sources */, + 705E7B04E1FE3269939CC5C40D83CACE /* DBChunkInputStream.m in Sources */, + 95C86E907FED4E215620A31FA5CAFD42 /* DropboxClient.swift in Sources */, + FC88917194482589C32FDDE107659F9B /* DropboxClientsManager.swift in Sources */, + 7D9D60386306B439551BB071CA066817 /* DropboxTeamClient.swift in Sources */, + 0EC9CB34CA3F574AE5B715EB1DD9DF8C /* DropboxTransportClient.swift in Sources */, + 32D70D7BB7F2A17F9C78F7AE99B2F7CC /* FileProperties.swift in Sources */, + ECE457DD05BEBE57CFEB9DD0D6A9B21D /* FilePropertiesRoutes.swift in Sources */, + 94BCC7749EDC3ADB6EB5811CA50D58F7 /* FileRequests.swift in Sources */, + 454435BAA1232B5BB55B7FA9E7B97C0D /* FileRequestsRoutes.swift in Sources */, + 6AF4C6E585CFF93B76EC9C45FE0F7CB1 /* Files.swift in Sources */, + E705953BCBCD13E17C23B588C4FD0457 /* FilesRoutes.swift in Sources */, + 6D1CB98C0BB063D06CF4A3B13B4D21F3 /* OAuth.swift in Sources */, + 5F3811A8B4109BA4B752316B90429F4C /* OAuthMobile.swift in Sources */, + 6C6915CA122E8B4630061446128E2BCC /* Paper.swift in Sources */, + F7AF82D1660F78BE791EF27F2F3D2938 /* PaperRoutes.swift in Sources */, + BFEDB3C71543B01C462D3562B179DA30 /* SDKConstants.swift in Sources */, + 0EDDADFF86CE8E23349B8C17EAB86C98 /* SeenState.swift in Sources */, + E6C3A0FCAFD428E5CFAA722D3F6190DE /* Sharing.swift in Sources */, + A5651EF221F23607DCC7F0AFEEC5CA8E /* SharingRoutes.swift in Sources */, + 3F29506C9C2F36B576E3C109F24238AD /* StoneBase.swift in Sources */, + 31697585FCCAF83D2BF44D087DA75CB8 /* StoneSerializers.swift in Sources */, + AD95435739025FAAFEF2B5911CCAA4B7 /* StoneValidators.swift in Sources */, + 82E1A8D140FD2E1A30BC5F8F4B19F8BF /* SwiftyDropbox-dummy.m in Sources */, + 7DFAE2171F7DF71CBFDAAB36126503A5 /* Team.swift in Sources */, + 8457755D991B9AC856F2AD154BCF4A34 /* TeamCommon.swift in Sources */, + 239B54D42D526085B60108A60B9A4787 /* TeamLog.swift in Sources */, + 12D7AFC87809B7DB47930F38ACBCF03E /* TeamLogRoutes.swift in Sources */, + 27E9618AB807EFBA9F6F713F8A3F9E38 /* TeamPolicies.swift in Sources */, + 5410DE9CCCA5B27BF32F53F10277BF94 /* TeamRoutes.swift in Sources */, + 365E7E156C92209524A265BE63A05992 /* TransportConfig.swift in Sources */, + 87FA058DD97C42DA27925CAD2E938C2C /* Users.swift in Sources */, + 02727D92764378FFAED7FA05551AB810 /* UsersCommon.swift in Sources */, + 417CB1E153B4D573A3F86BC063262EBF /* UsersRoutes.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + ADA8A824FC0DF194C0EEA41A4A09871D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D7002BA4BF48E276D34405B85D636DC /* AFError.swift in Sources */, + 1AAB4E66BB2F67D75ED31A969FB90445 /* Alamofire-dummy.m in Sources */, + D8524A5C842C0580F42718FE94C8F791 /* Alamofire.swift in Sources */, + 8310901E730FB822677EDAAF25893BE6 /* DispatchQueue+Alamofire.swift in Sources */, + C2EB4CB575EA9821E30A317574865D17 /* MultipartFormData.swift in Sources */, + 6853624E43A5EB0CA069A0F55C3C315C /* NetworkReachabilityManager.swift in Sources */, + 00808122820CCB7D640A23AF2F851D96 /* Notifications.swift in Sources */, + F9F08CA61836853CAE7455D76939D98B /* ParameterEncoding.swift in Sources */, + FF31B5BBE13193F204040DE66FF15F02 /* Request.swift in Sources */, + 2CFB7E4AB44C35953034CE00C927B1F8 /* Response.swift in Sources */, + 494BF218C4F917D55808751F21518F3F /* ResponseSerialization.swift in Sources */, + 6A386F883B6F86FCA792C8C1134057CA /* Result.swift in Sources */, + 51882AB1BF2D64307CB26E25DB7A43C2 /* ServerTrustPolicy.swift in Sources */, + AF02EA0DAD3FAC51CB5E859F81786EC6 /* SessionDelegate.swift in Sources */, + B560A089A1D47EC1F0B26533258C7317 /* SessionManager.swift in Sources */, + B422DCB989FF675D287C579D280F8253 /* TaskDelegate.swift in Sources */, + 626863FBB1F3C943ACB548FFB7A85E8C /* Timeline.swift in Sources */, + 3E82C4D5935E02D385D773C59D424ADD /* Validation.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B3B158F34FB17F0078922BF7A3994D44 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB663E8C81B503B69E519340CFD0C66B /* NES.swift in Sources */, + F007EE3D67A49DC33FE2A74392FEEE44 /* NESDeltaCore-dummy.m in Sources */, + 6A07D0503F964D4BA74E6F726D679DF7 /* NESEmulatorBridge.cpp in Sources */, + 6109531B72E4E232C02329870717C7EF /* NESEmulatorBridge.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BBA26EA97E33B109D9542E4D8659423E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEB1EE0820D4CC88754367FD7B075D1A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1541CD75ED87DD98D3FB227978648F92 /* NSData+ImageContentType.m in Sources */, + 122A53C6A8CE37059A0CF1D111472CDD /* SDImageCache.m in Sources */, + 6EA0A6FE9CCD2699B6BEF34376E9649F /* SDWebImage-dummy.m in Sources */, + 88D0FB6855DF889BF0C5BE417F016C3E /* SDWebImageCompat.m in Sources */, + FA9B5DF268C458C80AA79A7FBD2A08BD /* SDWebImageDecoder.m in Sources */, + 920D6388A019BAE183B76F28E00899AB /* SDWebImageDownloader.m in Sources */, + E0B3B5EFD0E958737E6D09B5135C5ED9 /* SDWebImageDownloaderOperation.m in Sources */, + 6322A14CBDF57EF29695F820A403EDE2 /* SDWebImageManager.m in Sources */, + CDD28AC1BB0F07E4991F10641F3B3ACD /* SDWebImagePrefetcher.m in Sources */, + 4948EB328DD7614DF746912086A18D65 /* UIButton+WebCache.m in Sources */, + EAFAB542A9C64CFCE6CE22241E05F94A /* UIImage+GIF.m in Sources */, + 6EE9ACB0AB0E0CB81A490F499EBEFF29 /* UIImage+MultiFormat.m in Sources */, + F54EE04CAD7C3199596833B62C4C5955 /* UIImageView+HighlightedWebCache.m in Sources */, + FFB60CE26BC4B7CC1FB0A8E9DA386F70 /* UIImageView+WebCache.m in Sources */, + 29962679E9012751AD784D26C64074A6 /* UIView+WebCacheOperation.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BF2745C9C2804F1F3D9373E7BF5FD2F5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C01BBF8A1A21C9696500E148349BC14 /* AnyInput.swift in Sources */, + E31D2295622D14AFDD069E14F5195C13 /* AudioManager.swift in Sources */, + 6EC906D378EF8ADEC5D7C2B04BE6C36B /* AudioRendering.swift in Sources */, + 7DB35723D0CC13AE137CAE668924723F /* BitmapProcessor.swift in Sources */, + 93353F0A21F136C22AD7F0B6183B5952 /* Bundle+Resources.swift in Sources */, + 1B03CF4D7E9A0CF1B1A5C0DFAB8B0DD9 /* ButtonsInputView.swift in Sources */, + D027F8D4E880D7092DB8AA5A02D7AAC9 /* CGGeometry+Dictionary.swift in Sources */, + 96009988E1AD37AD3F245D803DC0ACE7 /* CharacterSet+Hexadecimals.swift in Sources */, + BAA7B0396C8963E3E7324FE70900B64E /* Cheat.swift in Sources */, + 61B583689DD2CFBD46FA3712A184E2E5 /* CheatFormat.swift in Sources */, + 1B2BB2FEF328AF927516BB5185869A9E /* CheatProtocol.swift in Sources */, + 2BB5DA0DB6B389E75E5ABD816506A72B /* ControllerDebugView.swift in Sources */, + 6373AC1BC02916DA7A4727231D4E72E6 /* ControllerInputView.swift in Sources */, + F8A64A92EC039B20A16655B109BBF437 /* ControllerSkin.swift in Sources */, + D386CE84965DC46DB052B5BE658BEB2A /* ControllerSkinProtocol.swift in Sources */, + A275BEEC646144350744D504FBFEA961 /* ControllerSkinTraits.swift in Sources */, + F1A9E20B5E2A3EDA6E681DE782F1334D /* ControllerView.swift in Sources */, + 5C5F387309EC920C1D2F76769CE76897 /* Delta.swift in Sources */, + 6CE7F4046BA417D2DF53E0C69D47B473 /* DeltaCore-dummy.m in Sources */, + 0D4B0761D98B1D32B5B34C414181316E /* DeltaCoreProtocol.swift in Sources */, + 41AED5AF1633147BF20119FE09B88FD0 /* DeltaTypes.m in Sources */, + EEB84D1AB735724A00357534155CBAD1 /* EmulatorBridging.swift in Sources */, + EA4BF15425C5527848AAD727B8E2A587 /* EmulatorCore.swift in Sources */, + 7793407AABB80F7FF59D7C5516D14FD9 /* ExtensibleEnums.swift in Sources */, + C21855C2E5D6487AC2B921AD79922E14 /* ExternalGameControllerManager.swift in Sources */, + 7AEC6E1A5BB3B489183A23AD3AB8D7AE /* FilterChain.swift in Sources */, + C0D9BA8FBC5E1F537EBE6CC92AB31AEA /* Game.swift in Sources */, + B1766B3E76519CAB435EBB97EEF315DD /* GameController.swift in Sources */, + 269A8F0EF89DD3F63151C8785ABE7A51 /* GameControllerInputMapping.swift in Sources */, + C2CDA8FD21D4EABCF46E596D822C87D5 /* GameControllerInputMappingProtocol.swift in Sources */, + 979368E44B8B7C8615822815141CD054 /* GameControllerStateManager.swift in Sources */, + C1BC2E5368700E239EF29C36CE3B9839 /* GameProtocol.swift in Sources */, + CF652780A826660EF98D71D7CBD05BC2 /* GameView.swift in Sources */, + 00CD0FD425B91AE7BB08048D06C70828 /* GameViewController.swift in Sources */, + 54035E7677B71E7D130E4E693B211B71 /* ImmediatePanGestureRecognizer.swift in Sources */, + 886D71BD1595A610E2D69A83AE6A70AE /* Input.swift in Sources */, + E5CE54C441C27992BB36CBA9A435245E /* KeyboardGameController.swift in Sources */, + BD016C62B0056C15B63A5A9396AB93F4 /* KeyboardResponder.swift in Sources */, + 069E1D48DD81FE5B6A827810AD64B3F3 /* MFiGameController.swift in Sources */, + A2E5ECADA6FD38BB0829678577875EC3 /* OpenGLESProcessor.swift in Sources */, + DC2B5FAE55CCDB0BAF6EC9CC3F2F95EC /* RingBuffer.swift in Sources */, + 332024B9AF30A07CE496CC11D9591023 /* SaveState.swift in Sources */, + 408C9467A440ACF40ED221AF38A11CAB /* SaveStateProtocol.swift in Sources */, + F12B7D9CA9CB9FB6C292DAB35BC315E7 /* StandardGameControllerInput.swift in Sources */, + C3CB14A07161497CA6FAA6858EFF4F4F /* Thread+RealTime.swift in Sources */, + C5AB49D57E3EF7CD32C4E07A1A2DC017 /* ThumbstickInputView.swift in Sources */, + 8486CE333AF98530F574C3B55DC565D8 /* TouchInputView.swift in Sources */, + D6501B43E8C5A97BD005573C1BF291EE /* UIApplication+AppExtension.swift in Sources */, + BEA3DB63075DE883B2C9506C483877DF /* UIDevice+Vibration.swift in Sources */, + EBEBA0DA070991E8C4CA134F9FBFE535 /* UIImage+PDF.swift in Sources */, + 9FE64AB67B279FBE1047117752075A4E /* UIResponder+FirstResponder.swift in Sources */, + FF52A333ED5E1B6EBA938D3B010BCB0B /* UIScreen+ControllerSkin.swift in Sources */, + EC4892F521D296F8A687A076AA68F1AB /* VideoFormat.swift in Sources */, + 3914A75BEE189973A204BF332FFCEFA8 /* VideoManager.swift in Sources */, + 76D132D024B6A52E4DFDD31827EBE0FC /* VideoRendering.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CF1A829706EB7D4651A9AFCC52E7475D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5A0BF65D720FB2B9FADC78A474E6A81B /* Archive+Reading.swift in Sources */, + 3118030C5A979F122AACB2CBD58C4E56 /* Archive+Writing.swift in Sources */, + 8681FBFF0D1EDDB882F392AE4E41A6F1 /* Archive.swift in Sources */, + 11B1E455943227B7FDE64E7910BE6D76 /* Data+Compression.swift in Sources */, + 106D77956F70BC0E0A55EDAFE9264B53 /* Data+Serialization.swift in Sources */, + AFD96D371E8D60B2143D73E312E24BD9 /* Entry.swift in Sources */, + 8F9E3145DED94EC48DF53CBDD6F6D9D2 /* FileManager+ZIP.swift in Sources */, + D181DC3438FCD7E645A072E81889876A /* ZIPFoundation-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D938418F705C63738C73E888FE18C08C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DB5C35E3B9516C9D04A7DA02CC64A1FD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DDEB83EA63F277EF37B7ECEFF321F84B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3BD8EFFCB0910051586FBF46AC5C55C8 /* NSBundle+Extensions.m in Sources */, + 3D66A31C8103A03FDF1F0E57C640C042 /* NSConstraintConflict+Conveniences.m in Sources */, + A2CF5336CF94746DA1F92A04941AF2C4 /* NSFileManager+URLs.m in Sources */, + FC4AFADABFECA8B929C84039869A806B /* NSLayoutConstraint+Edges.m in Sources */, + 30360304FB3B07CC67CE7E12DDCD6AD8 /* NSPredicate+Search.m in Sources */, + 0CC4033E6747ED10E9BC142192F6AD39 /* NSString+Localization.m in Sources */, + F33586928CCCB162321E60496A3DCA3B /* NSUserDefaults+DynamicProperties.m in Sources */, + 86CD84B7CB8FEBF8D8D1A612608F9A59 /* Roxas-dummy.m in Sources */, + 853712F7ADE0542EB49AB2971C13F4EF /* RSTArrayDataSource.m in Sources */, + ACB848453661249CFEDE957E0BC5AFCF /* RSTBlockOperation.m in Sources */, + 312AD7DE1453F9AD4A92963F384CF46C /* RSTCellContentChange.m in Sources */, + D3A01F05B185083B517E4626FDF3C57D /* RSTCellContentChangeOperation.m in Sources */, + 4DC192EDBBB019B891988F7845182F51 /* RSTCellContentDataSource.m in Sources */, + 2F47AFFD0CEB31CEC05058726214B60A /* RSTCollectionViewCell.m in Sources */, + 8AD7ED3262070702EA2D7772A7576F70 /* RSTCollectionViewGridLayout.m in Sources */, + 3C36E674426756F060D9479A78E5CB38 /* RSTCompositeDataSource.m in Sources */, + 48FE3ADC3F482FB1896BB017B2A60B4C /* RSTDynamicDataSource.m in Sources */, + AF384C3F516776514598AB608BF28CEA /* RSTError.m in Sources */, + A7EF2BC7C091E4282D581EBF80E9EFEC /* RSTFetchedResultsDataSource.m in Sources */, + 0DAA2A9EA3C7BE275C199CE4FC0F8660 /* RSTHasher.m in Sources */, + 97ACB19F84123FA36372CAEFB3F69700 /* RSTHelperFile.m in Sources */, + 523CB85DD9D51432DCC507568B4D3905 /* RSTLaunchViewController.m in Sources */, + 095ECDF5BCBCCC825E489471C3556732 /* RSTLoadOperation.m in Sources */, + 44574ABD35CB7C8E7308A753B541D666 /* RSTNavigationController.m in Sources */, + 8477A8F693A9336DD44C78F069BAC322 /* RSTNibView.m in Sources */, + E7BADFB958A5706854C044DDFEE718DD /* RSTOperation.m in Sources */, + AA3339D66B1B8D9E4FDA3A7B1DD4EE4E /* RSTOperationQueue.m in Sources */, + 4F9DEF5AB8980F5F6CBD545C902C6963 /* RSTPersistentContainer.m in Sources */, + 2DE185B952A67810F78722837354F3EF /* RSTPlaceholderView.m in Sources */, + 05013F5C3F8897B02CAC065EF3189E58 /* RSTRelationshipPreservingMergePolicy.m in Sources */, + C98B4D02BC0E57B4BCBF55318C7991CE /* RSTSearchController.m in Sources */, + FFC60D90E8A926004701D722087AB6F1 /* RSTSeparatorView.m in Sources */, + 1980201958ED3367F3828BC226C5506A /* RSTTintedImageView.m in Sources */, + 6E77A5D834F1A5B81DFB7C1955085F93 /* RSTToastView.m in Sources */, + E75F2EA53D0EE6628D5361A907AE8CEA /* UIAlertAction+Actions.m in Sources */, + 7FBC6E3BDC4800C426640309DF2CBEE2 /* UICollectionView+CellContent.m in Sources */, + D8889A6910820C522D9EC5AE0F105B7B /* UICollectionViewCell+CellContent.m in Sources */, + 4C44ECF64FB6C4EDEF4ACD2236BA1545 /* UICollectionViewCell+Nibs.m in Sources */, + C669D2A2AEB5C8351795BD1BD61EC908 /* UIImage+Manipulation.m in Sources */, + E6529D9E72DE5E7B788DDC6C3E148468 /* UIKit+ActivityIndicating.m in Sources */, + 9B6DAACFBF34F39F85BDE66C85C41FF3 /* UISpringTimingParameters+Conveniences.m in Sources */, + BDE0EF415A3093440376B4D04914BBAF /* UITableView+CellContent.m in Sources */, + 011A7D5944D78BBDB6D70E337DF496B9 /* UITableViewCell+CellContent.m in Sources */, + 99DE9961F6F88EA4545A05AD359747C6 /* UIView+AnimatedHide.m in Sources */, + F03CF428C71FCFA033C24776E54BA798 /* UIViewController+TransitionState.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E593ADB87F658CC0E2BF41020C4F16FC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F5CBB068589BD1880745ADA0CA06BE7D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F5F7844F767CCD98C6DB4FA7989E2B32 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 63427690A77B2B5436666DAF5706611B /* Err.cpp in Sources */, + 3E1960795F1CDD5DA3D5234B649D9A64 /* GBA.swift in Sources */, + C7D9C03D29D663952B0B97466F107D12 /* GBADeltaCore-dummy.m in Sources */, + 700240FA8626FBCB8DD1E6A528883AEC /* GBAEmulatorBridge.mm in Sources */, + A22D9092E39C894919D1BAB027CDF0D5 /* GBASoundDriver.mm in Sources */, + F5872A78E0CA44A471473CFF9123D560 /* GBATypes.m in Sources */, + EE6944AB9BC075F13C9B3948E6280260 /* String.cpp in Sources */, + E64D998EAED81F2EA7850A2CDF71929A /* Thread.cpp in Sources */, + 342FFC207143FFD0D02C8E58FD8765D9 /* ThreadImpl.cpp in Sources */, + 89BAB96483B0B0EEDE12680A875F57A7 /* Time.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 211ADEC23589562D9F890E7D85DB730D /* PBXTargetDependency */ = { + 05B9A9148F0AA84DDE4A79DD841BAC5A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SQLite.swift; - target = 498BC38C077C48A416BCF96644AC3CA1 /* SQLite.swift */; - targetProxy = A0EEE75B0AC8B823DF4CFF5850DDDC57 /* PBXContainerItemProxy */; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = 34B215C21519BEE50F2B57C914617CDD /* PBXContainerItemProxy */; }; - 2EBC80DF482B67B3FB80BEF4DB4C02DB /* PBXTargetDependency */ = { + 0BE9490C890610C7DD3138962A6A97B2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SMCalloutView; - target = 8255DC44888E72385E107E69A662CE38 /* SMCalloutView */; - targetProxy = 6C6C6C97F64E04C488883D41F3B8ACAE /* PBXContainerItemProxy */; + name = SwiftyDropbox; + target = FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */; + targetProxy = 392DBE454CBCA00260718AED61FE380D /* PBXContainerItemProxy */; }; - 3931D9616FFCA4D7FB7CE99CDCFDC536 /* PBXTargetDependency */ = { + 0F92DEB6B0EBCBC5C0F5B0BC9BE93B14 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Fabric; - target = D35E9EC86D36A4C8BC1704199FDB3552 /* Fabric */; - targetProxy = A8594898CAC294C1CF9878F1909D5A39 /* PBXContainerItemProxy */; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = 19192073D8CD75A03CE029974259BDE9 /* PBXContainerItemProxy */; }; - 54B507930C9E8696188979A8A6E1BA5E /* PBXTargetDependency */ = { + 111AB56CAE156240A449E5192B1D037B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SDWebImage; - target = 59CEC038954929A6B36EDBE49EE01791 /* SDWebImage */; - targetProxy = A13D9932D0BA78F5A2C7EE2F0A0361A1 /* PBXContainerItemProxy */; + name = Roxas; + target = B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */; + targetProxy = FC9F6032803826BC09AF6A35BD043AF6 /* PBXContainerItemProxy */; }; - 589B5E1BBCDE707E74E4B59FAEE9968A /* PBXTargetDependency */ = { + 2470E0637AB079C1EA36776A56133D54 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZIPFoundation; + target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; + targetProxy = C6636E070B3DEB95C17EA6632E29A801 /* PBXContainerItemProxy */; + }; + 27F1EA33C127149DA030B906F0F28448 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GTMSessionFetcher; + target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; + targetProxy = DF19AABA87BA7620652F0602A1A445EC /* PBXContainerItemProxy */; + }; + 2B11DB4B71ED02E5B9B9788D1D26A53E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleAPIClientForREST; + target = D7958E869B6C0073DB3025514393D7A3 /* GoogleAPIClientForREST */; + targetProxy = E055DEA7C7938B0F8B215158723BCFAC /* PBXContainerItemProxy */; + }; + 2E13E041ACAB72B0D20161D1C91014D8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SNESDeltaCore; + target = 141E2D29C29A1BC1ABA3483321DF3C88 /* SNESDeltaCore */; + targetProxy = 08E49A14C0B820DC65E9EBEDC8FD26D2 /* PBXContainerItemProxy */; + }; + 3F1CB87EC87C55D1211C3D729391F3B6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SwiftyDropbox; + target = FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */; + targetProxy = C8E5EBBA48A65677D814EA8555DD214D /* PBXContainerItemProxy */; + }; + 42193324C4D006B18C2B76243EED095D /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Crashlytics; - target = ABA9A411BB5A359862E5F1AA6238278E /* Crashlytics */; - targetProxy = 8E7698B52D2059768B1D3164B1C50201 /* PBXContainerItemProxy */; + target = C0E41540D6862472ED7F2FA11669BE1F /* Crashlytics */; + targetProxy = 208F89A2FB20B32BE8EFC4DCFB94C0F4 /* PBXContainerItemProxy */; + }; + 460FB3819A6A637FCD17AE2E8D48C7F1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SNESDeltaCore-SNESDeltaCore"; + target = 6538136F848A07F507372CCFB40CEB88 /* SNESDeltaCore-SNESDeltaCore */; + targetProxy = 917C63D909EFB5E156F1D8438E1DBF3E /* PBXContainerItemProxy */; + }; + 5036207F0D0A8DEE49EC859CB26A3BE2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Roxas; + target = B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */; + targetProxy = 659353ED4A7AB491D7F388255FDB55AD /* PBXContainerItemProxy */; + }; + 52FAFD51C4754410BE945A4088A5365B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SMCalloutView; + target = D20492B6476142DCA0C455340876BB98 /* SMCalloutView */; + targetProxy = 96E675967EBB0C7F8B3627784533133A /* PBXContainerItemProxy */; + }; + 577A987593409C33649C46C3581BE270 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "GBCDeltaCore-GBCDeltaCore"; + target = 5C36E65AEF44273E4AF0CBFADD00C090 /* GBCDeltaCore-GBCDeltaCore */; + targetProxy = FE3183C8BBCDB1BDB2299370415670AE /* PBXContainerItemProxy */; + }; + 5D04385CC7E6917783C3F4F8EF9DDDB0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleToolboxForMac; + target = D47C581D39D227080F83B16A22A56664 /* GoogleToolboxForMac */; + targetProxy = 91865C2EEFB2A47CB3B4902798E4771F /* PBXContainerItemProxy */; + }; + 6A06A23778F35BD29819315F84EA7618 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = BA76C622BDB4235F75B294BF13275ABE /* PBXContainerItemProxy */; + }; + 6DE0745286D33113EC54EBA586F7ACB4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "N64DeltaCore-N64DeltaCore"; + target = 38A3E6A4A13E8C4E975336840145C119 /* N64DeltaCore-N64DeltaCore */; + targetProxy = EF595E5FB07F405B2D9F4C94D4560005 /* PBXContainerItemProxy */; + }; + 6EAE17DEE57C07FFAA5EC882A076663C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = CD579FC09454B036337FF5A32B4DBB2E /* PBXContainerItemProxy */; + }; + 8005293D86303BC2B82C3A79C1FBB6D1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = 4385B12AA0B20D01F6C776AB3FDDF01A /* PBXContainerItemProxy */; + }; + 85D6ACF2CBBCECECBBABA09B2EA5D168 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = B0BF40D28D6E234E553A0ED8A549FD38 /* PBXContainerItemProxy */; + }; + 881CFD1802642CF2190E153E20340D93 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GTMSessionFetcher; + target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; + targetProxy = 5C8E1AC123E1190B28C3D74EC312A900 /* PBXContainerItemProxy */; + }; + 8AAE57B63A7B4C11709251F4EE10FB88 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GBADeltaCore; + target = 7056A67459B0B8B62FACACCE167546B8 /* GBADeltaCore */; + targetProxy = CD68A8251278E73BF058DE4CAF902C13 /* PBXContainerItemProxy */; + }; + 8D70B4086B79508F6199FF434AF5A42E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZIPFoundation; + target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; + targetProxy = 607EED20C10A262BEE57DA6EAA244FAA /* PBXContainerItemProxy */; + }; + 94C1058A9AAA61AB7FD11B5FBCE6DFF8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = 955F4B2D4BC59033DF863D57B227851C /* PBXContainerItemProxy */; + }; + 99877DBD7CEAFBE1DCD6450538B2DB20 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "GBADeltaCore-GBADeltaCore"; + target = 890229DC8DCC9C43917568A0C4502FCA /* GBADeltaCore-GBADeltaCore */; + targetProxy = A86E9AE4C08786BEAA77EF17CD90CB3B /* PBXContainerItemProxy */; + }; + 99FDE882695E00A0F390EE607B268B52 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Harmony; + target = 5CB4163F0A6D4BDE0A490758A78BA43D /* Harmony */; + targetProxy = 6F0190E1AA86749B64954DAE1DF61FD8 /* PBXContainerItemProxy */; + }; + 9F5478313CF5775EC625C84D2D5D399F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DSDeltaCore; + target = DCBC8D45C727B1472F26E79661AF11B0 /* DSDeltaCore */; + targetProxy = 85A4548E1EA8661D090B8346F0C0C747 /* PBXContainerItemProxy */; + }; + A6A5A2CFDBD10C7F2D09F3F53B8F5FD7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleSignIn; + target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; + targetProxy = D9246DA49C6124866A85E13C049C425F /* PBXContainerItemProxy */; + }; + A7BA55FF6A51B067A5810C18839C07D2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = A3FED02D30B0F4EBB6DC19236150B5C3 /* PBXContainerItemProxy */; + }; + AA57705443CF5E71F105FC141862A122 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleToolboxForMac; + target = D47C581D39D227080F83B16A22A56664 /* GoogleToolboxForMac */; + targetProxy = 66BE2C6B403019BF36ABAD1493446E37 /* PBXContainerItemProxy */; + }; + ABCD70BFE64CBAA49543AFA61813436A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = NESDeltaCore; + target = 0FAC8C4777DBD31221FE57848CB5F759 /* NESDeltaCore */; + targetProxy = 3B8363B7FD833F1636CD3973BC69E237 /* PBXContainerItemProxy */; + }; + B5FEC1EBE509FEB4C2E760EF1DC6A7BF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "NESDeltaCore-NESDeltaCore"; + target = 7F839870ECBE0065B4BCC02E5F98F48A /* NESDeltaCore-NESDeltaCore */; + targetProxy = C362C591F7ECCE9A372B69F1B110636E /* PBXContainerItemProxy */; + }; + BFAF65DA7D034599D4E5CFB20EFF5290 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = N64DeltaCore; + target = 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */; + targetProxy = BE77B86928874033E4E09D8C9ADD66A9 /* PBXContainerItemProxy */; + }; + C4FAAF75F43EE0D12E71D3E32AF204A2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Fabric; + target = ABB048B191245233986A7CD75FE412A5 /* Fabric */; + targetProxy = 69A8B982C834715530BA23F9E542717F /* PBXContainerItemProxy */; }; C9CEFEFAAAEDB8CD947737FA56C849D4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Fabric; - target = D35E9EC86D36A4C8BC1704199FDB3552 /* Fabric */; + target = ABB048B191245233986A7CD75FE412A5 /* Fabric */; targetProxy = D465047540D12FD9D95291AE82A76DB9 /* PBXContainerItemProxy */; }; + CB2DF911EC096412E04767CA494113A6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SQLite.swift; + target = 3F2C1776D90B62B156DB52C41A5C419C /* SQLite.swift */; + targetProxy = 916694214CC7D40B5C688E8E1B8BD383 /* PBXContainerItemProxy */; + }; + D31863FC462A085FA121105AC436D6DB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = E00034F4E269D670A3F53FB95161556D /* PBXContainerItemProxy */; + }; + D37E815A435C967BECD1C4ED135E56DF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "DSDeltaCore-DSDeltaCore"; + target = E5449403CBE67599315B4D26019FA175 /* DSDeltaCore-DSDeltaCore */; + targetProxy = 7E6CB180472EA40C403421180C2A18B7 /* PBXContainerItemProxy */; + }; + DF50B746EF7C6DC9302CBF83E64A502C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleAPIClientForREST; + target = D7958E869B6C0073DB3025514393D7A3 /* GoogleAPIClientForREST */; + targetProxy = 298D76CD321EB0D6C48A27C84D848723 /* PBXContainerItemProxy */; + }; + E4D87F7F65F696B017EA781E30A39A5B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GBCDeltaCore; + target = DB59C68809324297BEDAF0CC3F931B27 /* GBCDeltaCore */; + targetProxy = 918A60A2153F498B0B255F27E3B94F69 /* PBXContainerItemProxy */; + }; + E56CE409A3455CD89DA5BA6DDDC40D3B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleSignIn; + target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; + targetProxy = 7BFA61EA67CFFA199F2E37A65BA0FFFD /* PBXContainerItemProxy */; + }; + EE6ABB82B8B97BD3E25ABA2C3DEB3128 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = FACAEB8C576AA15FABFC8222548EEC2A /* PBXContainerItemProxy */; + }; + FD085AE31E6041915F925532ECB3134A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "DeltaCore-DeltaCore"; + target = 1B47E46598F87113B00B3B25BBF51B32 /* DeltaCore-DeltaCore */; + targetProxy = C253B6663FD70B1548A43C630EFBD147 /* PBXContainerItemProxy */; + }; + FF631AD5C73AE7F8166EE7B8C7418A62 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GTMSessionFetcher; + target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; + targetProxy = F67700E89740C8E29D211A0AB1F167FB /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0695D21FD459018ADCEA81CA41C77E8E /* Release */ = { + 07A8420FD39320EE33750A5A08B49B0C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ABD7234F4A3CE6A297E30F73069CBE81 /* SQLite.swift.xcconfig */; + baseConfigurationReference = 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SQLite.swift/SQLite.swift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; - PRODUCT_MODULE_NAME = SQLite; - PRODUCT_NAME = SQLite; + GCC_PREFIX_HEADER = "Target Support Files/GBADeltaCore/GBADeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/GBADeltaCore/GBADeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GBADeltaCore; + PRODUCT_NAME = GBADeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 16BD3047AFB7EADAF01766EAC9DB8A97 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = ABD7234F4A3CE6A297E30F73069CBE81 /* SQLite.swift.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SQLite.swift/SQLite.swift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SQLite.swift/SQLite.swift.modulemap"; - PRODUCT_MODULE_NAME = SQLite; - PRODUCT_NAME = SQLite; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 3048B0C5C704DFFF688DA57F5380ED58 /* Release */ = { + 0862528A404CA576B3A25AED3AB3D765 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 4.2; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 51539972E78C33F5DFAAD5CA941CE207 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 92205B459C5D65077E421E8C347923B1 /* SDWebImage.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; + GCC_PREFIX_HEADER = "Target Support Files/DSDeltaCore/DSDeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/DSDeltaCore/DSDeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = DSDeltaCore; + PRODUCT_NAME = DSDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Release; }; - 5B0C8287D755FD95091CF35D87FB8B2D /* Debug */ = { + 09712D8A9766D66306A2B75D92CD9DF1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5EAB88E1F1D57B7D17D40ED0872DB766 /* GoogleSignIn.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 0BE14D019FD7C0260FF901334E80614A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C41D62EAA75E3627EE9D9B3527E8DFFB /* Alamofire.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MODULEMAP_FILE = Headers/Public/Alamofire/Alamofire.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Alamofire; + PRODUCT_NAME = Alamofire; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 131356BE54884448CA49C07BEDF4BB2A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -1090,7 +11623,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -1098,245 +11631,1405 @@ STRIP_INSTALLED_PRODUCT = NO; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 4.2; + SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; name = Debug; }; - 75CF1D31A81720B0C4E0B44EFBDD1D6B /* Debug */ = { + 157E49C46E51B2A4B3A0A92FF290CB97 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F228AA98BE5866CFAE0F0D30EB37C40 /* Pods-Delta.debug.xcconfig */; + baseConfigurationReference = 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Delta/Pods-Delta-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/N64DeltaCore"; + IBSC_MODULE = N64DeltaCore; + INFOPLIST_FILE = "Target Support Files/N64DeltaCore/ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = N64DeltaCore; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + WRAPPER_EXTENSION = bundle; }; name = Debug; }; - 8548AC522B2EFC8F87C010366841E234 /* Debug */ = { + 19CA107CA126D0EAFCB2699D867C871D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 28356B989708A3595DFB32F0319FDA52 /* Fabric.xcconfig */; + baseConfigurationReference = F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 8EB70F1C92C8BD07DE5AC0C940967784 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 96915379C814B2C0DFB3A4D10F393265 /* SMCalloutView.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SMCalloutView/SMCalloutView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SMCalloutView/SMCalloutView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SMCalloutView/SMCalloutView.modulemap"; - PRODUCT_MODULE_NAME = SMCalloutView; - PRODUCT_NAME = SMCalloutView; + GCC_PREFIX_HEADER = "Target Support Files/SNESDeltaCore/SNESDeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/SNESDeltaCore/SNESDeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SNESDeltaCore; + PRODUCT_NAME = SNESDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - B7F7A85B24DC616822B2FE021F2637F2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 55DB860DEB304E65F48A399F9CA9E6C8 /* Pods-Delta.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Delta/Pods-Delta-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 10.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Release; }; - C790092A866DEFEFF75E27E504A67D80 /* Debug */ = { + 1F9386BD13F5C08F8DB9A896A3D62E77 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 92205B459C5D65077E421E8C347923B1 /* SDWebImage.xcconfig */; + baseConfigurationReference = 94D367DD0D99FF2FCAE661017295657C /* GoogleAPIClientForREST.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MODULEMAP_FILE = Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GoogleAPIClientForREST; + PRODUCT_NAME = GoogleAPIClientForREST; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 203BC5F42B1F167F4E03D9C3611084AB /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A3131038BAA6204AECC770BDD176F81C /* ZIPFoundation.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MODULEMAP_FILE = Headers/Public/ZIPFoundation/ZIPFoundation.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = ZIPFoundation; + PRODUCT_NAME = ZIPFoundation; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2BD0A85462EDA6A1A4E5868EB78C2E02 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C268076A13ECC0F130B5A406C2A1E22A /* GTMSessionFetcher.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MODULEMAP_FILE = Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GTMSessionFetcher; + PRODUCT_NAME = GTMSessionFetcher; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2D84D617B7857F3275843F18B59616C6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/N64DeltaCore/N64DeltaCore.modulemap; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = N64DeltaCore; + PRODUCT_NAME = N64DeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 2E1376B8AF89FDDFF88A17202398E3C5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2E2D966C0A00ADF6CBAED222AD054CA8 /* Crashlytics.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2FDBCEC2FB6639C343014F7BAC7C584D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1E6A8F6B9B3B7B25C7C87F8B3C7CDE37 /* Roxas.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Roxas/Roxas-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/Roxas/Roxas.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Roxas; + PRODUCT_NAME = Roxas; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 32DC95F7A92B1F3BAD2E0B2C88BA201C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DeltaCore"; + IBSC_MODULE = DeltaCore; + INFOPLIST_FILE = "Target Support Files/DeltaCore/ResourceBundle-DeltaCore-DeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = DeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 3B97993E0A8F56B27B319CB9A05E4D47 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MODULEMAP_FILE = Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SwiftyDropbox; + PRODUCT_NAME = SwiftyDropbox; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 3C1C001B24B8773870F421D8BCA42D35 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 41D95E73EB648CA0896C3360092052A9 /* SDWebImage.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MODULEMAP_FILE = Headers/Public/SDWebImage/SDWebImage.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; PRODUCT_MODULE_NAME = SDWebImage; PRODUCT_NAME = SDWebImage; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Debug; }; - CDFCF98E7F9FB4406E116ED6500B19DD /* Release */ = { + 42AF8BA49D658326FC4E087EB60994D2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8CF2A82A6BE421825EA3849F3AF92208 /* Crashlytics.xcconfig */; + baseConfigurationReference = 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - CE6F1011AE3E3CA432D5EB7085D197E9 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 28356B989708A3595DFB32F0319FDA52 /* Fabric.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - D43B3DDF5D3BF6757ED79FD2D914D7C7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8CF2A82A6BE421825EA3849F3AF92208 /* Crashlytics.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GBCDeltaCore"; + IBSC_MODULE = GBCDeltaCore; + INFOPLIST_FILE = "Target Support Files/GBCDeltaCore/ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = GBCDeltaCore; SDKROOT = iphoneos; + SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; }; name = Debug; }; - D60A255D261A3397FB06911DF4010C40 /* Release */ = { + 43C7691D5E1F39EE39DA69D6A2E6F066 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 96915379C814B2C0DFB3A4D10F393265 /* SMCalloutView.xcconfig */; + baseConfigurationReference = 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/SMCalloutView/SMCalloutView-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SMCalloutView/SMCalloutView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/SMCalloutView/SMCalloutView.modulemap"; - PRODUCT_MODULE_NAME = SMCalloutView; - PRODUCT_NAME = SMCalloutView; + GCC_PREFIX_HEADER = "Target Support Files/NESDeltaCore/NESDeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/NESDeltaCore/NESDeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = NESDeltaCore; + PRODUCT_NAME = NESDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 46E59AEA8F9BBFC46341D0AB0A41EEED /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/N64DeltaCore"; + IBSC_MODULE = N64DeltaCore; + INFOPLIST_FILE = "Target Support Files/N64DeltaCore/ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = N64DeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 4ADE45E1DE4E87A43AFD7A55ED34225C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/GBCDeltaCore/GBCDeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/GBCDeltaCore/GBCDeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GBCDeltaCore; + PRODUCT_NAME = GBCDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 4ED1704C80CD850BA829196ADED39B24 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4873713B2974A1B7D8CB492B8921D329 /* Fabric.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 574691B854BD0460CABF1D1F3DE8D074 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SNESDeltaCore"; + IBSC_MODULE = SNESDeltaCore; + INFOPLIST_FILE = "Target Support Files/SNESDeltaCore/ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = SNESDeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 5E2B746830A1712B92EA62ADE50A75C8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1E6A8F6B9B3B7B25C7C87F8B3C7CDE37 /* Roxas.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Roxas/Roxas-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/Roxas/Roxas.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Roxas; + PRODUCT_NAME = Roxas; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Release; }; + 692C1D9591DC249D0B1E5A07F4E6A57D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/DeltaCore/DeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/DeltaCore/DeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = DeltaCore; + PRODUCT_NAME = DeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6DC9962F282232BCF1774E8E16D0513A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5294532669D6FD1AE4D2A9F8C4A86C90 /* GoogleToolboxForMac.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MODULEMAP_FILE = Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GoogleToolboxForMac; + PRODUCT_NAME = GoogleToolboxForMac; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6F9014351920DC6BAB20194744781348 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5294532669D6FD1AE4D2A9F8C4A86C90 /* GoogleToolboxForMac.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MODULEMAP_FILE = Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GoogleToolboxForMac; + PRODUCT_NAME = GoogleToolboxForMac; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 75AF01A3841A4F4C80438520A8E7E4C3 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 69C6B83D4542C5716F38FE2C2C2E343E /* SQLite.swift.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MODULEMAP_FILE = Headers/Public/SQLite/SQLite.swift.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SQLite; + PRODUCT_NAME = SQLite.swift; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7865E6AC330368CA0E04D798F322E9E7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GBADeltaCore"; + IBSC_MODULE = GBADeltaCore; + INFOPLIST_FILE = "Target Support Files/GBADeltaCore/ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = GBADeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 84FAA2C3CD643AE5190D21FE40BE4687 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/NESDeltaCore/NESDeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/NESDeltaCore/NESDeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = NESDeltaCore; + PRODUCT_NAME = NESDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 85870B0E8D79070709CAB8624E932E3D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MODULEMAP_FILE = Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SwiftyDropbox; + PRODUCT_NAME = SwiftyDropbox; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 8BAC33A429758DA9ECFD01D0D582F876 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/GBCDeltaCore/GBCDeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/GBCDeltaCore/GBCDeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GBCDeltaCore; + PRODUCT_NAME = GBCDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 8D6E449A1CA49D9D78EBEF3F1AEBC0C6 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6E6ABC72122793A5F3381924CC2D9BE8 /* Harmony.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Harmony/Harmony-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/Harmony/Harmony.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Harmony; + PRODUCT_NAME = Harmony; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 940F0F7414B6817B24692D5D2F1986E5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DSDeltaCore"; + IBSC_MODULE = DSDeltaCore; + INFOPLIST_FILE = "Target Support Files/DSDeltaCore/ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = DSDeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 96FF12B9E1DD6E73F2E1D339E930D241 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/GBADeltaCore/GBADeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/GBADeltaCore/GBADeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GBADeltaCore; + PRODUCT_NAME = GBADeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 998C488F1BB7DEA095C04687D5325483 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/NESDeltaCore"; + IBSC_MODULE = NESDeltaCore; + INFOPLIST_FILE = "Target Support Files/NESDeltaCore/ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = NESDeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 9BD113CC2E24538977EF1E7B61CDCC3B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E7774915A9F77830DE8F037188D1A4F7 /* SMCalloutView.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SMCalloutView/SMCalloutView-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MODULEMAP_FILE = Headers/Public/SMCalloutView/SMCalloutView.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SMCalloutView; + PRODUCT_NAME = SMCalloutView; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 9F2AE22C275BF4F36C29E153F2ABEF3A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DeltaCore"; + IBSC_MODULE = DeltaCore; + INFOPLIST_FILE = "Target Support Files/DeltaCore/ResourceBundle-DeltaCore-DeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = DeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + A685D56CBFCCBFF365407F2285B61DE6 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C41D62EAA75E3627EE9D9B3527E8DFFB /* Alamofire.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MODULEMAP_FILE = Headers/Public/Alamofire/Alamofire.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Alamofire; + PRODUCT_NAME = Alamofire; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A7F42E6E5FAB6C926FD548237FA721D2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2E2D966C0A00ADF6CBAED222AD054CA8 /* Crashlytics.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + A821AD9B9BD0E109A69C66B99C1EDA61 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SNESDeltaCore/SNESDeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/SNESDeltaCore/SNESDeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SNESDeltaCore; + PRODUCT_NAME = SNESDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B26A6042F5303D35FED8E303406D03AC /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E7774915A9F77830DE8F037188D1A4F7 /* SMCalloutView.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SMCalloutView/SMCalloutView-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MODULEMAP_FILE = Headers/Public/SMCalloutView/SMCalloutView.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SMCalloutView; + PRODUCT_NAME = SMCalloutView; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + B299BF7B12C2919F00A5E3B6C1D21752 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 94D367DD0D99FF2FCAE661017295657C /* GoogleAPIClientForREST.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MODULEMAP_FILE = Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GoogleAPIClientForREST; + PRODUCT_NAME = GoogleAPIClientForREST; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B3C9B7BC9A2AE9348D76B4FF142B3504 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DSDeltaCore"; + IBSC_MODULE = DSDeltaCore; + INFOPLIST_FILE = "Target Support Files/DSDeltaCore/ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = DSDeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + BDBAEEC10CD7FAF7547D33C2BF58EE75 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GBCDeltaCore"; + IBSC_MODULE = GBCDeltaCore; + INFOPLIST_FILE = "Target Support Files/GBCDeltaCore/ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = GBCDeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + C1FC5E35D6431EFC11C75BFBF7D877BC /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 69C6B83D4542C5716F38FE2C2C2E343E /* SQLite.swift.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SQLite.swift/SQLite.swift-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MODULEMAP_FILE = Headers/Public/SQLite/SQLite.swift.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SQLite; + PRODUCT_NAME = SQLite.swift; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + C8AD5D5C06EFC156475CECAFBA176513 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/DSDeltaCore/DSDeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/DSDeltaCore/DSDeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = DSDeltaCore; + PRODUCT_NAME = DSDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + CADF80636C01458D87773C2229F2F1CE /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SNESDeltaCore"; + IBSC_MODULE = SNESDeltaCore; + INFOPLIST_FILE = "Target Support Files/SNESDeltaCore/ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = SNESDeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + CDA51C2B578ABB6EA13634C8B038FAC4 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A34489EBF25913D7D0197EFF7FA146A3 /* Pods-Delta.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + D0EF404FB24A776F9ABE044132237C74 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/N64DeltaCore/N64DeltaCore.modulemap; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = N64DeltaCore; + PRODUCT_NAME = N64DeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + D4B58A57B698D65C42A0D7DB237EC54C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4873713B2974A1B7D8CB492B8921D329 /* Fabric.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + D6BE1EDC212DD96249456F867B962C39 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/DeltaCore/DeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/DeltaCore/DeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = DeltaCore; + PRODUCT_NAME = DeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + DEE0DD3C9744C1FEB926B87B36D12561 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/NESDeltaCore"; + IBSC_MODULE = NESDeltaCore; + INFOPLIST_FILE = "Target Support Files/NESDeltaCore/ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = NESDeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + DF1B89122FC8E3DB9D76D86FC23BDC9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 41D95E73EB648CA0896C3360092052A9 /* SDWebImage.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MODULEMAP_FILE = Headers/Public/SDWebImage/SDWebImage.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EC31D7B382E9F9A12A33BE594E85016B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F381603DE2011262E9A2C37926028861 /* Pods-Delta.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + ECDC98D70317977164B589FC41F247B4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5EAB88E1F1D57B7D17D40ED0872DB766 /* GoogleSignIn.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + F090CD07A80273D5A73C8EA19224ADDB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + SYMROOT = "${SRCROOT}/../build"; + }; + name = Release; + }; + F4DCB064B536143E1CCFE897D92FB98C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6E6ABC72122793A5F3381924CC2D9BE8 /* Harmony.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Harmony/Harmony-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/Harmony/Harmony.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Harmony; + PRODUCT_NAME = Harmony; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + FA1FDCD137958F38F10A417381546E06 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C268076A13ECC0F130B5A406C2A1E22A /* GTMSessionFetcher.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/GTMSessionFetcher/GTMSessionFetcher-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MODULEMAP_FILE = Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = GTMSessionFetcher; + PRODUCT_NAME = GTMSessionFetcher; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + FA2F81A3908AAC4FFAFFA55616BE32F7 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GBADeltaCore"; + IBSC_MODULE = GBADeltaCore; + INFOPLIST_FILE = "Target Support Files/GBADeltaCore/ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = GBADeltaCore; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + FD4D2BF3F9CF4F7BD4834A980131B3B1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A3131038BAA6204AECC770BDD176F81C /* ZIPFoundation.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MODULEMAP_FILE = Headers/Public/ZIPFoundation/ZIPFoundation.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = ZIPFoundation; + PRODUCT_NAME = ZIPFoundation; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 13B185864087F75D556AC109B2D70BF7 /* Build configuration list for PBXAggregateTarget "Fabric" */ = { + 107602BE559A9EE79D732D818C67C2CC /* Build configuration list for PBXNativeTarget "GBADeltaCore-GBADeltaCore" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8548AC522B2EFC8F87C010366841E234 /* Debug */, - CE6F1011AE3E3CA432D5EB7085D197E9 /* Release */, + 7865E6AC330368CA0E04D798F322E9E7 /* Debug */, + FA2F81A3908AAC4FFAFFA55616BE32F7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3A96250D5CEC7CDC67BB5B13E452729A /* Build configuration list for PBXNativeTarget "SQLite.swift" */ = { + 13B185864087F75D556AC109B2D70BF7 /* Build configuration list for PBXAggregateTarget "Fabric" */ = { isa = XCConfigurationList; buildConfigurations = ( - 16BD3047AFB7EADAF01766EAC9DB8A97 /* Debug */, - 0695D21FD459018ADCEA81CA41C77E8E /* Release */, + 4ED1704C80CD850BA829196ADED39B24 /* Debug */, + D4B58A57B698D65C42A0D7DB237EC54C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1A0C0C4736B816F9CB799A7DF3AAF54B /* Build configuration list for PBXNativeTarget "DeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D6BE1EDC212DD96249456F867B962C39 /* Debug */, + 692C1D9591DC249D0B1E5A07F4E6A57D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1B3BCF15DDEF04BD3859CE2400DE7A43 /* Build configuration list for PBXNativeTarget "DSDeltaCore-DSDeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B3C9B7BC9A2AE9348D76B4FF142B3504 /* Debug */, + 940F0F7414B6817B24692D5D2F1986E5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 1BF5836DF81B99AC010F1AAF4A715C38 /* Build configuration list for PBXNativeTarget "GoogleAPIClientForREST" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B299BF7B12C2919F00A5E3B6C1D21752 /* Debug */, + 1F9386BD13F5C08F8DB9A896A3D62E77 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 20F3E4E2418350AC682AAD392B4BED39 /* Build configuration list for PBXNativeTarget "NESDeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 43C7691D5E1F39EE39DA69D6A2E6F066 /* Debug */, + 84FAA2C3CD643AE5190D21FE40BE4687 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 20F50134A7EBE5BBF644BED665FB3400 /* Build configuration list for PBXNativeTarget "Alamofire" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0BE14D019FD7C0260FF901334E80614A /* Debug */, + A685D56CBFCCBFF365407F2285B61DE6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 30A0CB7B1940C25C2F4F333351C10E42 /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3C1C001B24B8773870F421D8BCA42D35 /* Debug */, + DF1B89122FC8E3DB9D76D86FC23BDC9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 41ADB7A6BF6874F8E5EB48DF7A168301 /* Build configuration list for PBXNativeTarget "GBCDeltaCore-GBCDeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 42AF8BA49D658326FC4E087EB60994D2 /* Debug */, + BDBAEEC10CD7FAF7547D33C2BF58EE75 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 46CBD761C24B946C6B86A6E9FAE5B75A /* Build configuration list for PBXNativeTarget "SwiftyDropbox" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3B97993E0A8F56B27B319CB9A05E4D47 /* Debug */, + 85870B0E8D79070709CAB8624E932E3D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1344,35 +13037,62 @@ 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5B0C8287D755FD95091CF35D87FB8B2D /* Debug */, - 3048B0C5C704DFFF688DA57F5380ED58 /* Release */, + 131356BE54884448CA49C07BEDF4BB2A /* Debug */, + F090CD07A80273D5A73C8EA19224ADDB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 701ED0CF739C2D94D6FF13061BF31BBE /* Build configuration list for PBXNativeTarget "Pods-Delta" */ = { + 4831832D716DE9C50FF96385B6482F4A /* Build configuration list for PBXNativeTarget "SQLite.swift" */ = { isa = XCConfigurationList; buildConfigurations = ( - 75CF1D31A81720B0C4E0B44EFBDD1D6B /* Debug */, - B7F7A85B24DC616822B2FE021F2637F2 /* Release */, + 75AF01A3841A4F4C80438520A8E7E4C3 /* Debug */, + C1FC5E35D6431EFC11C75BFBF7D877BC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 86341A08D5225B874296B1DDB702DE1F /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { + 4F029155AB836938BA450316882B8FBA /* Build configuration list for PBXNativeTarget "DeltaCore-DeltaCore" */ = { isa = XCConfigurationList; buildConfigurations = ( - C790092A866DEFEFF75E27E504A67D80 /* Debug */, - 51539972E78C33F5DFAAD5CA941CE207 /* Release */, + 9F2AE22C275BF4F36C29E153F2ABEF3A /* Debug */, + 32DC95F7A92B1F3BAD2E0B2C88BA201C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9422886FB9500BB2ECF8953BF8BDAF09 /* Build configuration list for PBXNativeTarget "SMCalloutView" */ = { + 5E1FD0C2F1EE47BB4375104C033855F1 /* Build configuration list for PBXNativeTarget "Pods-Delta" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8EB70F1C92C8BD07DE5AC0C940967784 /* Debug */, - D60A255D261A3397FB06911DF4010C40 /* Release */, + CDA51C2B578ABB6EA13634C8B038FAC4 /* Debug */, + EC31D7B382E9F9A12A33BE594E85016B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 847E2631BC51B82439DF3F4721BDF1DD /* Build configuration list for PBXNativeTarget "N64DeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2D84D617B7857F3275843F18B59616C6 /* Debug */, + D0EF404FB24A776F9ABE044132237C74 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8DFB3C54138FF6F6A012B2B665C76ACF /* Build configuration list for PBXNativeTarget "Roxas" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2FDBCEC2FB6639C343014F7BAC7C584D /* Debug */, + 5E2B746830A1712B92EA62ADE50A75C8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 8EBE86FCEB6B920023606B463F40D6F2 /* Build configuration list for PBXNativeTarget "NESDeltaCore-NESDeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 998C488F1BB7DEA095C04687D5325483 /* Debug */, + DEE0DD3C9744C1FEB926B87B36D12561 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -1380,13 +13100,134 @@ A084C0089544D8EEE7DA4C6D8EEEF9ED /* Build configuration list for PBXAggregateTarget "Crashlytics" */ = { isa = XCConfigurationList; buildConfigurations = ( - D43B3DDF5D3BF6757ED79FD2D914D7C7 /* Debug */, - CDFCF98E7F9FB4406E116ED6500B19DD /* Release */, + A7F42E6E5FAB6C926FD548237FA721D2 /* Debug */, + 2E1376B8AF89FDDFF88A17202398E3C5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A5D65C61ABC34AD5AF4B6F63BC7C5B58 /* Build configuration list for PBXNativeTarget "GBCDeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4ADE45E1DE4E87A43AFD7A55ED34225C /* Debug */, + 8BAC33A429758DA9ECFD01D0D582F876 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AB63F15FC5E4A4749A01300C3940712B /* Build configuration list for PBXNativeTarget "GBADeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 07A8420FD39320EE33750A5A08B49B0C /* Debug */, + 96FF12B9E1DD6E73F2E1D339E930D241 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AE9415C8BECFA0B9FCD84405814330AB /* Build configuration list for PBXNativeTarget "DSDeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C8AD5D5C06EFC156475CECAFBA176513 /* Debug */, + 0862528A404CA576B3A25AED3AB3D765 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B3AA5DEA9EAAC571EE1E1B4E25715EBA /* Build configuration list for PBXNativeTarget "ZIPFoundation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FD4D2BF3F9CF4F7BD4834A980131B3B1 /* Debug */, + 203BC5F42B1F167F4E03D9C3611084AB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BB07493EBFDFDB75360BF9DF17195333 /* Build configuration list for PBXNativeTarget "SMCalloutView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9BD113CC2E24538977EF1E7B61CDCC3B /* Debug */, + B26A6042F5303D35FED8E303406D03AC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BD525096CA556B77DB7833CC422D4968 /* Build configuration list for PBXNativeTarget "Harmony" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F4DCB064B536143E1CCFE897D92FB98C /* Debug */, + 8D6E449A1CA49D9D78EBEF3F1AEBC0C6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C2E255D649731CD4DCFF2E658C062078 /* Build configuration list for PBXNativeTarget "GoogleToolboxForMac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6F9014351920DC6BAB20194744781348 /* Debug */, + 6DC9962F282232BCF1774E8E16D0513A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CE0641E81519F94D3542E1D4F4FE19EC /* Build configuration list for PBXAggregateTarget "GoogleSignIn" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 09712D8A9766D66306A2B75D92CD9DF1 /* Debug */, + ECDC98D70317977164B589FC41F247B4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D2C52F7C31F8F18B3E7649A2B825768D /* Build configuration list for PBXNativeTarget "GTMSessionFetcher" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FA1FDCD137958F38F10A417381546E06 /* Debug */, + 2BD0A85462EDA6A1A4E5868EB78C2E02 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E65E16C31A3D7DE2EDF0B51FACC87789 /* Build configuration list for PBXNativeTarget "SNESDeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A821AD9B9BD0E109A69C66B99C1EDA61 /* Debug */, + 19CA107CA126D0EAFCB2699D867C871D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FCCF65418A0EFC8C339903B6DEBF0FF2 /* Build configuration list for PBXNativeTarget "N64DeltaCore-N64DeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 157E49C46E51B2A4B3A0A92FF290CB97 /* Debug */, + 46E59AEA8F9BBFC46341D0AB0A41EEED /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FD9752023347B2D0CD6EE673AA7F64BD /* Build configuration list for PBXNativeTarget "SNESDeltaCore-SNESDeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CADF80636C01458D87773C2229F2F1CE /* Debug */, + 574691B854BD0460CABF1D1F3DE8D074 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + 5A95E2EE00E8BE996B0FFEBE598A34B7 /* Harmony.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + 8F44D6F54A29F5DC917F8C94CFA28050 /* Harmony.xcdatamodel */, + ); + name = Harmony.xcdatamodeld; + path = "Harmony/Model/Core Data/Harmony.xcdatamodeld"; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ }; rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; } diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/DSDeltaCore.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/DSDeltaCore.xcscheme new file mode 100644 index 0000000..b634a4d --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/DSDeltaCore.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/DeltaCore.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/DeltaCore.xcscheme new file mode 100644 index 0000000..b3c0215 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/DeltaCore.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GBADeltaCore.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GBADeltaCore.xcscheme new file mode 100644 index 0000000..fc93630 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GBADeltaCore.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GBCDeltaCore.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GBCDeltaCore.xcscheme new file mode 100644 index 0000000..25a2341 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/GBCDeltaCore.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/N64DeltaCore.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/N64DeltaCore.xcscheme new file mode 100644 index 0000000..26e8d6e --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/N64DeltaCore.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/NESDeltaCore.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/NESDeltaCore.xcscheme new file mode 100644 index 0000000..37d6192 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/NESDeltaCore.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-Delta.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-Delta.xcscheme new file mode 100644 index 0000000..d86a935 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Pods-Delta.xcscheme @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SNESDeltaCore.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SNESDeltaCore.xcscheme new file mode 100644 index 0000000..a33bf6a --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/SNESDeltaCore.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/SQLite.swift/README.md b/Pods/SQLite.swift/README.md index a2f090e..b7a18e0 100644 --- a/Pods/SQLite.swift/README.md +++ b/Pods/SQLite.swift/README.md @@ -1,6 +1,6 @@ # SQLite.swift -[![Build Status][TravisBadge]][TravisLink] [![CocoaPods Version][CocoaPodsVersionBadge]][CocoaPodsVersionLink] [![Swift4 compatible][Swift4Badge]][Swift4Link] [![Platform][PlatformBadge]][PlatformLink] [![Carthage compatible][CartagheBadge]][CarthageLink] [![Join the chat at https://gitter.im/stephencelis/SQLite.swift][GitterBadge]][GitterLink] +[![Build Status][TravisBadge]][TravisLink] [![CocoaPods Version][CocoaPodsVersionBadge]][CocoaPodsVersionLink] [![Swift5 compatible][Swift5Badge]][Swift5Link] [![Platform][PlatformBadge]][PlatformLink] [![Carthage compatible][CartagheBadge]][CarthageLink] [![Join the chat at https://gitter.im/stephencelis/SQLite.swift][GitterBadge]][GitterLink] A type-safe, [Swift][]-language layer over [SQLite3][]. @@ -112,7 +112,7 @@ and the [companion repository][SQLiteDataAccessLayer2]. ## Installation -> _Note:_ SQLite.swift requires Swift 4.2 (and [Xcode][] 10.2). +> _Note:_ Version 0.12 requires Swift 5 (and [Xcode](https://developer.apple.com/xcode/downloads/) 10.2) or greater. Version 0.11.6 requires Swift 4.2 (and [Xcode](https://developer.apple.com/xcode/downloads/) 10.1) or greater. ### Carthage @@ -124,7 +124,7 @@ install SQLite.swift with Carthage: 2. Update your Cartfile to include the following: ```ruby - github "stephencelis/SQLite.swift" ~> 0.11.6 + github "stephencelis/SQLite.swift" ~> 0.12.0 ``` 3. Run `carthage update` and @@ -142,7 +142,7 @@ install SQLite.swift with Carthage: SQLite.swift with CocoaPods: 1. Make sure CocoaPods is [installed][CocoaPods Installation]. (SQLite.swift - requires version 1.0.0 or greater.) + requires version 1.6.1 or greater.) ```sh # Using the default Ruby install will require you to use sudo when @@ -156,7 +156,7 @@ SQLite.swift with CocoaPods: use_frameworks! target 'YourAppTargetName' do - pod 'SQLite.swift', '~> 0.11.6' + pod 'SQLite.swift', '~> 0.12.0' end ``` @@ -174,7 +174,7 @@ Swift code. ```swift dependencies: [ - .package(url: "https://github.com/stephencelis/SQLite.swift.git", from: "0.11.6") + .package(url: "https://github.com/stephencelis/SQLite.swift.git", from: "0.12.0") ] ``` @@ -285,8 +285,8 @@ Looking for something else? Try another Swift wrapper (or [FMDB][]): [GitterBadge]: https://badges.gitter.im/stephencelis/SQLite.swift.svg [GitterLink]: https://gitter.im/stephencelis/SQLite.swift -[Swift4Badge]: https://img.shields.io/badge/swift-4.2-orange.svg?style=flat -[Swift4Link]: https://developer.apple.com/swift/ +[Swift5Badge]: https://img.shields.io/badge/swift-5-orange.svg?style=flat +[Swift5Link]: https://developer.apple.com/swift/ [SQLiteMigrationManager.swift]: https://github.com/garriguv/SQLiteMigrationManager.swift [FMDB]: https://github.com/ccgus/fmdb diff --git a/Pods/SQLite.swift/Sources/SQLite/SQLite.h b/Pods/SQLite.swift/Sources/SQLite/SQLite.h index 693ce32..fe1e3df 100644 --- a/Pods/SQLite.swift/Sources/SQLite/SQLite.h +++ b/Pods/SQLite.swift/Sources/SQLite/SQLite.h @@ -3,4 +3,4 @@ FOUNDATION_EXPORT double SQLiteVersionNumber; FOUNDATION_EXPORT const unsigned char SQLiteVersionString[]; -#import +#import "SQLiteObjc.h" diff --git a/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift b/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift index d89ee6c..76ba04c 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Typed/Expression.swift @@ -73,7 +73,7 @@ public protocol Expressible { extension Expressible { // naïve compiler for statements that can’t be bound, e.g., CREATE TABLE - // FIXME: make internal (0.12.0) + // FIXME: make internal (0.13.0) public func asSQL() -> String { let expressed = expression var idx = 0 diff --git a/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift b/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift index 62c9070..febfe68 100644 --- a/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift +++ b/Pods/SQLite.swift/Sources/SQLite/Typed/Schema.swift @@ -341,6 +341,10 @@ public final class TableBuilder { primaryKey([compositeA, b, c]) } + public func primaryKey(_ compositeA: Expression, _ b: Expression, _ c: Expression, _ d: Expression) { + primaryKey([compositeA, b, c, d]) + } + fileprivate func primaryKey(_ composite: [Expressible]) { definitions.append("PRIMARY KEY".prefix(composite)) } diff --git a/Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m b/Pods/SQLite.swift/Sources/SQLiteObjc/SQLiteObjc.m similarity index 99% rename from Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m rename to Pods/SQLite.swift/Sources/SQLiteObjc/SQLiteObjc.m index e00a731..9f2be0b 100644 --- a/Pods/SQLite.swift/Sources/SQLiteObjc/SQLite-Bridging.m +++ b/Pods/SQLite.swift/Sources/SQLiteObjc/SQLiteObjc.m @@ -22,7 +22,7 @@ // THE SOFTWARE. // -#import "SQLite-Bridging.h" +#import "SQLiteObjc.h" #import "fts3_tokenizer.h" #pragma mark - FTS diff --git a/Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLite-Bridging.h b/Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLiteObjc.h similarity index 100% rename from Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLite-Bridging.h rename to Pods/SQLite.swift/Sources/SQLiteObjc/include/SQLiteObjc.h diff --git a/Pods/SwiftyDropbox/LICENSE b/Pods/SwiftyDropbox/LICENSE new file mode 100644 index 0000000..c5b32c9 --- /dev/null +++ b/Pods/SwiftyDropbox/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2015 Dropbox Inc., http://www.dropbox.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Pods/SwiftyDropbox/README.md b/Pods/SwiftyDropbox/README.md new file mode 100644 index 0000000..532488c --- /dev/null +++ b/Pods/SwiftyDropbox/README.md @@ -0,0 +1,818 @@ +# Dropbox for Swift + +The Official Dropbox Swift SDK for integrating with Dropbox [API v2](https://www.dropbox.com/developers/documentation/http/documentation) on iOS or macOS. + +Full documentation [here](http://dropbox.github.io/SwiftyDropbox/api-docs/latest/). + +--- + +## Table of Contents + +* [System requirements](#system-requirements) +* [Get started](#get-started) + * [Register your application](#register-your-application) + * [Obtain an OAuth 2.0 token](#obtain-an-oauth-20-token) +* [SDK distribution](#sdk-distribution) + * [CocoaPods](#cocoapods) + * [Carthage](#carthage) + * [Manually add subproject](#manually-add-subproject) +* [Configure your project](#configure-your-project) + * [Application `.plist` file](#application-plist-file) + * [Handling the authorization flow](#handling-the-authorization-flow) + * [Initialize a `DropboxClient` instance](#initialize-a-dropboxclient-instance) + * [Begin the authorization flow](#begin-the-authorization-flow) + * [Handle redirect back into SDK](#handle-redirect-back-into-sdk) +* [Try some API requests](#try-some-api-requests) + * [Dropbox client instance](#dropbox-client-instance) + * [Handle the API response](#handle-the-api-response) + * [Request types](#request-types) + * [RPC-style request](#rpc-style-request) + * [Upload-style request](#upload-style-request) + * [Download-style request](#download-style-request) + * [Handling responses and errors](#handling-responses-and-errors) + * [Route-specific errors](#route-specific-errors) + * [Generic network request errors](#generic-network-request-errors) + * [Response handling edge cases](#response-handling-edge-cases) + * [Customizing network calls](#customizing-network-calls) + * [Configure network client](#configure-network-client) + * [Specify API call response queue](#specify-api-call-response-queue) + * [`DropboxClientsManager` class](#dropboxclientsmanager-class) + * [Single Dropbox user case](#single-dropbox-user-case) + * [Multiple Dropbox user case](#multiple-dropbox-user-case) +* [Examples](#examples) +* [Documentation](#documentation) +* [Stone](#stone) +* [Modifications](#modifications) +* [Bugs](#bugs) + +--- + +## System requirements + +- iOS 9.0+ +- macOS 10.11+ +- Xcode 10.0+ +- Swift 4.2+ + +## Get Started + +### Register your application + +Before using this SDK, you should register your application in the [Dropbox App Console](https://dropbox.com/developers/apps). This creates a record of your app with Dropbox that will be associated with the API calls you make. + +### Obtain an OAuth 2.0 token + +All requests need to be made with an OAuth 2.0 access token. An OAuth token represents an authenticated link between a Dropbox app and +a Dropbox user account or team. + +Once you've created an app, you can go to the App Console and manually generate an access token to authorize your app to access your own Dropbox account. +Otherwise, you can obtain an OAuth token programmatically using the SDK's pre-defined auth flow. For more information, [see below](https://github.com/dropbox/SwiftyDropbox#handling-the-authorization-flow). + +--- + +## SDK distribution + +You can integrate the Dropbox Swift SDK into your project using one of several methods. + +### CocoaPods + +To use [CocoaPods](http://cocoapods.org), a dependency manager for Cocoa projects, you should first install it using the following command: + +```bash +$ gem install cocoapods +``` + +Then navigate to the directory that contains your project and create a new file called `Podfile`. You can do this either with `pod init`, or open an existing Podfile, and then add `pod 'SwiftyDropbox'` to the main loop. Your Podfile should look something like this: + +```ruby +use_frameworks! + +target '' do + pod 'SwiftyDropbox' +end +``` + +Then, run the following command to install the dependency: + +```bash +$ pod install +``` + +Once your project is integrated with the Dropbox Swift SDK, you can pull SDK updates using the following command: + +```bash +$ pod update +``` + +**Note**: SwiftyDropbox requires CocoaPods 1.0.0+ when using Alamofire 4.0.0+. Because of this requirement, the CocoaPods App (which uses CocoaPods 1.0.0) cannot be used. + +--- + +### Carthage + +You can also integrate the Dropbox Swift SDK into your project using [Carthage](https://github.com/Carthage/Carthage), a decentralized dependency manager for Cocoa. Carthage offers more flexibility than CocoaPods, but requires some additional work. You can install Carthage (with Xcode 7+) via [Homebrew](http://brew.sh/): + +```bash +brew update +brew install carthage +``` + +To install the Dropbox Swift SDK via Carthage, you need to create a `Cartfile` in your project with the following contents: + +``` +# SwiftyDropbox +github "https://github.com/dropbox/SwiftyDropbox" ~> 5.0.0 +``` + +Then, run the following command to install the dependency to checkout and build the Dropbox Swift SDK repository: + +##### iOS + +```bash +carthage update --platform iOS +``` + +In the Project Navigator in Xcode, select your project, and then navigate to **General** > **Linked Frameworks and Libraries**, then drag and drop `SwiftyDropbox.framework` (from `Carthage/Build/iOS`). Then to add SwiftyDropbox's Alamofire dependency, drag and drop `Alamofire.framework` (from `Carthage/Build/iOS`) to **Linked Frameworks and Libraries**, as well. + +Then, navigate to **Build Phases** > **+** > **New Run Script Phase**. In the newly-created **Run Script** section, add the following code to the script body area (beneath the "Shell" box): + +``` +/usr/local/bin/carthage copy-frameworks +``` + +Then, navigate to the **Input Files** section and add the following path: + +``` +$(SRCROOT)/Carthage/Build/iOS/SwiftyDropbox.framework +$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework +``` + +##### macOS +```bash +carthage update --platform Mac +``` + +In the Project Navigator in Xcode, select your project, and then navigate to **General** > **Embedded Binaries**, then drag and drop `SwiftyDropbox.framework` (from `Carthage/Build/Mac`). Then to add SwiftyDropbox's Alamofire dependency, drag and drop `Alamofire.framework` (from `Carthage/Build/Mac`) to **Linked Frameworks and Libraries**, as well. + +Then navigate to **Build Phases** > **+** > **New Copy Files Phase**. In the newly-created **Copy Files** section, click the **Destination** drop-down menu and select **Products Directory**, then drag and drop `SwiftyDropbox.framework.dSYM` (from `Carthage/Build/Mac`). + +--- + +### Manually add subproject + +Finally, you can also integrate the Dropbox Swift SDK into your project manually with the help of Carthage. Please take the following steps: + +Create a `Cartfile` in your project with the same contents as the Cartfile listed in the [Carthage](#carthage) section of the README. + +Then, run the following command to checkout and build the Dropbox Swift SDK repository: + +##### iOS + +```bash +carthage update --platform iOS +``` + +Once you have checked-out out all the necessary code via Carthage, drag the `Carthage/Checkouts/SwiftyDropbox/Source/SwiftyDropbox/SwiftyDropbox.xcodeproj` file into your project as a subproject. + +Then, in the Project Navigator in Xcode, select your project, and then navigate to your project's build target > **General** > **Embedded Binaries** > **+** and then add the `SwiftyDropbox.framework` file for the iOS platform. + +Finally, to retrieve SwiftyDropbox's Alamofire dependency, drag the `Carthage/Checkouts/Alamofire/Alamofire.xcodeproj` project into your project (as you did with `SwiftyDropbox.xcodeproj`). Then, in the Project Navigator in Xcode, select your project, and then navigate to your project's build target > **General** > **Linked Frameworks and Libraries** > **+** and then add the `Alamofire.framework` file for the iOS platform. + +##### macOS +```bash +carthage update --platform Mac +``` + +Once you have checked-out out all the necessary code via Carthage, drag the `Carthage/Checkouts/SwiftyDropbox/Source/SwiftyDropbox/SwiftyDropbox.xcodeproj` file into your project as a subproject. + +Then, in the Project Navigator in Xcode, select your project, and then navigate to your project's build target > **General** > **Embedded Binaries** > **+** and then add the `SwiftyDropbox.framework` file for the macOS platform. + +Finally, to retrieve SwiftyDropbox's Alamofire dependency, drag the `Carthage/Checkouts/Alamofire/Alamofire.xcodeproj` project into your project (as you did with `SwiftyDropbox.xcodeproj`). Then, in the Project Navigator in Xcode, select your project, and then navigate to your project's build target > **General** > **Linked Frameworks and Libraries** > **+** and then add the `Alamofire.framework` file for the macOS platform. + +--- + +## Configure your project + +Once you have integrated the Dropbox Swift SDK into your project, there are a few additional steps to take before you can begin making API calls. + +### Application `.plist` file + +If you are compiling on iOS SDK 9.0, you will need to modify your application's `.plist` to handle Apple's [new security changes](https://developer.apple.com/videos/wwdc/2015/?id=703) to the `canOpenURL` function. You should +add the following code to your application's `.plist` file: + +``` +LSApplicationQueriesSchemes + + dbapi-8-emm + dbapi-2 + +``` +This allows the Swift SDK to determine if the official Dropbox iOS app is installed on the current device. If it is installed, then the official Dropbox iOS app can be used to programmatically obtain an OAuth 2.0 access token. + +Additionally, your application needs to register to handle a unique Dropbox URL scheme for redirect following completion of the OAuth 2.0 authorization flow. This URL scheme should have the format `db-`, where `` is your +Dropbox app's app key, which can be found in the [App Console](https://dropbox.com/developers/apps). + +You should add the following code to your `.plist` file (but be sure to replace `` with your app's app key): + +``` +CFBundleURLTypes + + + CFBundleURLSchemes + + db- + + CFBundleURLName + + + +``` + +After you've made the above changes, your application's `.plist` file should look something like this: + +

      + Info .plist Example +

      + +--- + +### Handling the authorization flow + +There are three methods to programmatically retrieve an OAuth 2.0 access token: + +* **Direct auth** (iOS only): This launches the official Dropbox iOS app (if installed), authenticates via the official app, then redirects back into the SDK +* **Safari view controller auth** (iOS only): This launches a `SFSafariViewController` to facillitate the auth flow. This is desirable because it is safer for the end-user, and pre-existing session data can be used to avoid requiring the user to re-enter their Dropbox credentials. +* **Redirect to external browser** (macOS only): This launches the user's default browser to facillitate the auth flow. This is also desirable because it is safer for the end-user, and pre-existing session data can be used to avoid requiring the user to re-enter their Dropbox credentials. + +To facilitate the above authorization flows, you should take the following steps: + +--- + +#### Initialize a `DropboxClient` instance + +From your application delegate: + +##### iOS + +```Swift +import SwiftyDropbox + +func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + DropboxClientsManager.setupWithAppKey("") + return true +} +``` + +##### macOS + +```Swift +import SwiftyDropbox + +func applicationDidFinishLaunching(_ aNotification: Notification) { + DropboxClientsManager.setupWithAppKeyDesktop("") +} +``` + +--- + +#### Begin the authorization flow + +You can commence the auth flow by calling `authorizeFromController:controller:openURL` method in your application's +view controller. + +From your view controller: + +##### iOS + +```Swift +import SwiftyDropbox + +func myButtonInControllerPressed() { + DropboxClientsManager.authorizeFromController(UIApplication.shared, + controller: self, + openURL: { (url: URL) -> Void in + UIApplication.shared.openURL(url) + }) +} + +``` + +##### macOS + +```Swift +import SwiftyDropbox + +func myButtonInControllerPressed() { + DropboxClientsManager.authorizeFromController(sharedWorkspace: NSWorkspace.shared, + controller: self, + openURL: { (url: URL) -> Void in + NSWorkspace.shared.open(url) + }) +} +``` + +Beginning the authentication flow via in-app webview will launch a window like this: + + +

      + Auth Flow Init Example +

      + +--- + +#### Handle redirect back into SDK + +To handle the redirection back into the Swift SDK once the authentication flow is complete, you should add the following code in your application's delegate: + +##### iOS + +```Swift +import SwiftyDropbox + +func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { + if let authResult = DropboxClientsManager.handleRedirectURL(url) { + switch authResult { + case .success: + print("Success! User is logged into Dropbox.") + case .cancel: + print("Authorization flow was manually canceled by user!") + case .error(_, let description): + print("Error: \(description)") + } + } + return true +} + +``` + +##### macOS + +```Swift +import SwiftyDropbox + +func applicationDidFinishLaunching(_ aNotification: Notification) { + ...... // code outlined above goes here + + NSAppleEventManager.shared().setEventHandler(self, + andSelector: #selector(handleGetURLEvent), + forEventClass: AEEventClass(kInternetEventClass), + andEventID: AEEventID(kAEGetURL)) +} + +func handleGetURLEvent(_ event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) { + if let aeEventDescriptor = event?.paramDescriptor(forKeyword: AEKeyword(keyDirectObject)) { + if let urlStr = aeEventDescriptor.stringValue { + let url = URL(string: urlStr)! + if let authResult = DropboxClientsManager.handleRedirectURL(url) { + switch authResult { + case .success: + print("Success! User is logged into Dropbox.") + case .cancel: + print("Authorization flow was manually canceled by user!") + case .error(_, let description): + print("Error: \(description)") + } + } + // this brings your application back the foreground on redirect + NSApp.activate(ignoringOtherApps: true) + } + } +} +``` + +After the end user signs in with their Dropbox login credentials via the in-app webview, they will see a window like this: + + +

      + Auth Flow Approval Example +

      + +If they press **Allow** or **Cancel**, the `db-` redirect URL will be launched from the webview, and will be handled in your application +delegate's `application:handleOpenURL` method, from which the result of the authorization can be parsed. + +Now you're ready to begin making API requests! + +--- + +## Try some API requests + +Once you have obtained an OAuth 2.0 token, you can try some API v2 calls using the Swift SDK. + +### Dropbox client instance + +Start by creating a reference to the `DropboxClient` or `DropboxTeamClient` instance that you will use to make your API calls. + +```Swift +import SwiftyDropbox + +// Reference after programmatic auth flow +let client = DropboxClientsManager.authorizedClient +``` + +or + +```Swift +import SwiftyDropbox + +// Initialize with manually retrieved auth token +let client = DropboxClient(accessToken: "") +``` + +--- + +### Handle the API response + +The Dropbox [User API](https://www.dropbox.com/developers/documentation/http/documentation) and [Business API](https://www.dropbox.com/developers/documentation/http/teams) have three types of requests: RPC, Upload and Download. + +The response handlers for each request type are similar to one another. The arguments for the handler blocks are as follows: +* **route result type** (`Void` if the route does not have a return type) +* **network error** (either a route-specific error or generic network error) +* **output content** (`URL` / `Data` reference to downloaded output for Download-style endpoints only) + +Note: Response handlers are required for all endpoints. Progress handlers, on the other hand, are optional for all endpoints. + +--- + +### Request types + +#### RPC-style request +```Swift +client.files.createFolder(path: "/test/path/in/Dropbox/account").response { response, error in + if let response = response { + print(response) + } else if let error = error { + print(error) + } +} +``` + +--- + +#### Upload-style request +```Swift +let fileData = "testing data example".data(using: String.Encoding.utf8, allowLossyConversion: false)! + +let request = client.files.upload(path: "/test/path/in/Dropbox/account", input: TestData.fileData) + .response { response, error in + if let response = response { + print(response) + } else if let error = error { + print(error) + } + } + .progress { progressData in + print(progressData) + } + +// in case you want to cancel the request +if someConditionIsSatisfied { + request.cancel() +} +``` + +--- + +#### Download-style request +```Swift +// Download to URL +let fileManager = FileManager.default +let directoryURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0] +let destURL = directoryURL.appendingPathComponent("myTestFile") +let destination: (URL, HTTPURLResponse) -> URL = { temporaryURL, response in + return destURL +} +client.files.download(path: "/test/path/in/Dropbox/account", overwrite: true, destination: destination) + .response { response, error in + if let response = response { + print(response) + } else if let error = error { + print(error) + } + } + .progress { progressData in + print(progressData) + } + + +// Download to Data +client.files.download(path: "/test/path/in/Dropbox/account") + .response { response, error in + if let response = response { + let responseMetadata = response.0 + print(responseMetadata) + let fileContents = response.1 + print(fileContents) + } else if let error = error { + print(error) + } + } + .progress { progressData in + print(progressData) + } +``` + +--- + +### Handling responses and errors + +Dropbox API v2 deals largely with two data types: **structs** and **unions**. Broadly speaking, most route **arguments** are struct types and most route **errors** are union types. + +**NOTE:** In this context, "structs" and "unions" are terms specific to the Dropbox API, and not to any of the languages that are used to query the API, so you should avoid thinking of them in terms of their Swift definitions. + +**Struct types** are "traditional" object types, that is, composite types made up of a collection of one or more instance fields. All public instance fields are accessible at runtime, regardless of runtime state. + +**Union types**, on the other hand, represent a single value that can take on multiple value types, depending on state. We capture all of these different type scenarios under one "union object", but that object will exist only as one type at runtime. Each union state type, or **tag**, may have an associated value (if it doesn't, the union state type is said to be **void**). Associated value types can either be primitives, structs or unions. Although the Swift SDK represents union types as objects with multiple instance fields, at most one instance field is accessible at runtime, depending on the tag state of the union. + +For example, the [/delete](https://www.dropbox.com/developers/documentation/http/documentation#files-delete) endpoint returns an error, `Files.DeleteError`, which is a union type. The `Files.DeleteError` union can take on two different tag states: `path_lookup` +(if there is a problem looking up the path) or `path_write` (if there is a problem writing -- or in this case deleting -- to the path). Here, both tag states have non-void associated values (of types `Files.LookupError` and `Files.WriteError`, respectively). + +In this way, one union object is able to capture a multitude of scenarios, each of which has their own value type. + +To properly handle union types, you should pass each union through a switch statement, and check each possible tag state associated with the union. Once you have determined the current tag state of the union, you can then access the value associated with that tag state (provided there exists an associated value type, i.e., it's not **void**). + +--- + +#### Route-specific errors +```Swift +client.files.deleteV2(path: "/test/path/in/Dropbox/account").response { response, error in + if let response = response { + print(response) + } else if let error = error { + switch error as CallError { + case .routeError(let boxed, let userMessage, let errorSummary, let requestId): + print("RouteError[\(requestId)]:") + + switch boxed.unboxed as Files.DeleteError { + case .pathLookup(let lookupError): + switch lookupError { + case .notFound: + print("There is nothing at the given path.") + case .notFile: + print("We were expecting a file, but the given path refers to something that isn't a file.") + case .notFolder: + print("We were expecting a folder, but the given path refers to something that isn't a folder.") + case .restrictedContent: + print("The file cannot be transferred because the content is restricted...") + case .malformedPath(let malformedPath): + print("Malformed path: \(malformedPath)") + case .other: + print("Unknown") + } + case .pathWrite(let writeError): + print("WriteError: \(writeError)") + // you can handle each `WriteError` case like the `DeleteError` cases above + case .tooManyWriteOperations: + print("Another write operation occurring at the same time prevented this from succeeding.") + case .tooManyFiles: + print("There are too many files to delete.") + case .other: + print("Unknown") + } + case .internalServerError(let code, let message, let requestId): + .... + .... + // a not route-specific error occurred + .... + .... + .... + } + } +} +``` + +--- + +#### Generic network request errors + +In the case of a network error, errors are either specific to the endpoint (as shown above) or more generic errors. + +To determine if an error is route-specific or not, the error object should be cast as a `CallError`, and depending on the type of error, handled in the appropriate switch statement. + +```Swift +client.files.deleteV2(path: "/test/path/in/Dropbox/account").response { response, error in + if let response = response { + print(response) + } else if let error = error { + switch error as CallError { + case .routeError(let boxed, let userMessage, let errorSummary, let requestId): + // a route-specific error occurred + // see handling above + .... + .... + .... + case .internalServerError(let code, let message, let requestId): + print("InternalServerError[\(requestId)]: \(code): \(message)") + case .badInputError(let message, let requestId): + print("BadInputError[\(requestId)]: \(message)") + case .authError(let authError, let userMessage, let errorSummary, let requestId): + print("AuthError[\(requestId)]: \(userMessage) \(errorSummary) \(authError)") + case .accessError(let accessError, let userMessage, let errorSummary, let requestId): + print("AccessError[\(requestId)]: \(userMessage) \(errorSummary) \(accessError)") + case .rateLimitError(let rateLimitError, let userMessage, let errorSummary, let requestId): + print("RateLimitError[\(requestId)]: \(userMessage) \(errorSummary) \(rateLimitError)") + case .httpError(let code, let message, let requestId): + print("HTTPError[\(requestId)]: \(code): \(message)") + case .clientError(let error): + print("ClientError: \(error)") + } + } +} +``` + +--- + +#### Response handling edge cases + +Some routes return union types as result types, so you should be prepared to handle these results in the same way that you handle union route errors. Please consult the [documentation](https://www.dropbox.com/developers/documentation/http/documentation) +for each endpoint that you use to ensure you are properly handling the route's response type. + +A few routes return result types that are **datatypes with subtypes**, that is, structs that can take on multiple state types like unions. + +For example, the [/delete](https://www.dropbox.com/developers/documentation/http/documentation#files-delete) endpoint returns a generic `Metadata` type, which can exist either as a `FileMetadata` struct, a `FolderMetadata` struct, or a `DeletedMetadata` struct. +To determine at runtime which subtype the `Metadata` type exists as, pass the object through a switch statement, and check for each possible class, with the result casted accordingly. See below: + +```Swift +client.files.deleteV2(path: "/test/path/in/Dropbox/account").response { response, error in + if let response = response { + switch response { + case let fileMetadata as Files.FileMetadata: + print("File metadata: \(fileMetadata)") + case let folderMetadata as Files.FolderMetadata: + print("Folder metadata: \(folderMetadata)") + case let deletedMetadata as Files.DeletedMetadata: + print("Deleted entity's metadata: \(deletedMetadata)") + } + } else if let error = error { + switch error as CallError { + case .routeError(let boxed, let userMessage, let errorSummary, let requestId): + // a route-specific error occurred + // see handling above + case .internalServerError(let code, let message, let requestId): + .... + .... + // a not route-specific error occurred + // see handling above + .... + .... + .... + } + } +} +``` + +This `Metadata` object is known as a **datatype with subtypes** in our API v2 documentation. + +Datatypes with subtypes are a way combining structs and unions. Datatypes with subtypes are struct objects that contain a tag, which specifies which subtype the object exists as at runtime. The reason we have this construct, as with unions, is so we can capture a multitude of scenarios with one object. + +In the above example, the `Metadata` type can exists as `FileMetadata`, `FolderMetadata` or `DeleteMetadata`. Each of these types have common instances fields like "name" (the name for the file, folder or deleted type), but also instance fields that are specific to the particular subtype. In order to leverage inheritance, we set a common supertype called `Metadata` which captures all of the common instance fields, but also has a tag instance field, which specifies which subtype the object currently exists as. + +In this way, datatypes with subtypes are a hybrid of structs and unions. Only a few routes return result types like this. + +--- + +### Customizing network calls + +#### Configure network client + +It is possible to configure the networking client used by the SDK to make API requests. You can supply custom fields like a custom user agent or custom delegates to manage response handler code, or a custom server trust policy. See below: + +##### iOS +```Swift +import SwiftyDropbox + +let transportClient = DropboxTransportClient(accessToken: "", + baseHosts: nil, + userAgent: "CustomUserAgent", + selectUser: nil, + sessionDelegate: mySessionDelegate, + backgroundSessionDelegate: myBackgroundSessionDelegate, + serverTrustPolicyManager: myServerTrustPolicyManager) + +DropboxClientsManager.setupWithAppKey("", transportClient: transportClient) +``` + +##### macOS +```Swift +import SwiftyDropbox + +let transportClient = DropboxTransportClient(accessToken: "", + baseHosts: nil, + userAgent: "CustomUserAgent", + selectUser: nil, + sessionDelegate: mySessionDelegate, + backgroundSessionDelegate: myBackgroundSessionDelegate, + serverTrustPolicyManager: myServerTrustPolicyManager) + +DropboxClientsManager.setupWithAppKeyDesktop("", transportClient: transportClient) +``` + +#### Specify API call response queue + +By default, response/progress handler code runs on the main thread. You can set a custom response queue for each API call that you make via the `response` method, in the event want your response/progress handler code to run on a different thread: + +```Swift +let client = DropboxClientsManager.authorizedClient! + +client.files.listFolder(path: "").response(queue: DispatchQueue(label: "MyCustomSerialQueue")) { response, error in + if let result = response { + print(Thread.current) // Output: {number = 4, name = (null)} + print(Thread.main) // Output: {number = 1, name = (null)} + print(result) + } +} +``` + +--- + +### `DropboxClientsManager` class + +The Swift SDK includes a convenience class, `DropboxClientsManager`, for integrating the different functions of the SDK into one class. + +#### Single Dropbox user case + +For most apps, it is reasonable to assume that only one Dropbox account (and access token) needs to be managed at a time. In this case, the `DropboxClientsManager` flow looks like this: + +* call `setupWithAppKey`/`setupWithAppKeyDesktop` (or `setupWithTeamAppKey`/`setupWithTeamAppKeyDesktop`) in integrating app's app delegate +* client manager determines whether any access tokens are stored -- if any exist, one token is arbitrarily chosen to use +* if no token is found, call `authorizeFromController`/`authorizeFromControllerDesktop` to initiate the OAuth flow +* if auth flow is initiated, call `handleRedirectURL` (or `handleRedirectURLTeam`) in integrating app's app delegate to handle auth redirect back into the app and store the retrieved access token (using a `DropboxOAuthManager` instance) +* client manager instantiates a `DropboxTransportClient` (if not supplied by the user) +* client manager instantiates a `DropboxClient` (or `DropboxTeamClient`) with the transport client as a field + +The `DropboxClient` (or `DropboxTeamClient`) is then used to make all of the desired API calls. + +* call `unlinkClients` to logout Dropbox user and clear all access tokens + +#### Multiple Dropbox user case + +For some apps, it is necessary to manage more than one Dropbox account (and access token) at a time. In this case, the `DropboxClientsManager` flow looks like this: + +* access token uids are managed by the app that is integrating with the SDK for later lookup +* call `setupWithAppKeyMultiUser`/`setupWithAppKeyMultiUserDesktop` (or `setupWithTeamAppKeyMultiUser`/`setupWithTeamAppKeyMultiUserDesktop`) in integrating app's app delegate +* client manager determines whether an access token is stored with the`tokenUid` as a key -- if one exists, this token is chosen to use +* if no token is found, call `authorizeFromController`/`authorizeFromControllerDesktop` to initiate the OAuth flow +* if auth flow is initiated, call `handleRedirectURL` (or `handleRedirectURLTeam`) in integrating app's app delegate to handle auth redirect back into the app and store the retrieved access token (using a `DropboxOAuthManager` instance) +* at this point, the app that is integrating with the SDK should persistently save the `tokenUid` from the `DropboxAccessToken` field of the `DropboxOAuthResult` object returned from the `handleRedirectURL` (or `handleRedirectURLTeam`) method +* `tokenUid` can be reused either to authorize a new user mid-way through an app's lifecycle via `reauthorizeClient` (or `reauthorizeTeamClient`) or when the app initially launches via `setupWithAppKeyMultiUser`/`setupWithAppKeyMultiUserDesktop` (or `setupWithTeamAppKeyMultiUser`/`setupWithTeamAppKeyMultiUserDesktop`) +* client manager instantiates a `DropboxTransportClient` (if not supplied by the user) +* client manager instantiates a `DropboxClient` (or `DropboxTeamClient`) with the transport client as a field + +The `DropboxClient` (or `DropboxTeamClient`) is then used to make all of the desired API calls. + +* call `resetClients` to logout Dropbox user but not clear any access tokens +* if specific access tokens need to be removed, use the `clearStoredAccessToken` method in `DropboxOAuthManager` + +--- + +## Examples + +* [PhotoWatch](https://github.com/dropbox/PhotoWatch) - View photos from your Dropbox. Supports Apple Watch. + +--- + +## Documentation + +* [Dropbox API v2 Swift SDK](http://dropbox.github.io/SwiftyDropbox/api-docs/latest/) +* [Dropbox API v2](https://www.dropbox.com/developers/documentation/http/documentation) + +--- + +## Stone + +All of our routes and data types are auto-generated using a framework called [Stone](https://github.com/dropbox/stone). + +The `stone` repo contains all of the Swift specific generation logic, and the `spec` repo contains the language-neutral API endpoint specifications which serve +as input to the language-specific generators. + +--- + +## Modifications + +If you're interested in modifying the SDK codebase, you should take the following steps: + +* clone this GitHub repository to your local filesystem +* run `git submodule init` and then `git submodule update` +* navigate to `TestSwifty_[iOS|macOS]` +* check the CocoaPods version installed (via `pod --version`) is same as "locked" in `TestSwifty_[iOS|macOS]/Podfile.lock` +* run `pod install` +* open `TestSwifty_[iOS|macOS]/TestSwifty_[iOS|macOS].xcworkspace` in Xcode +* implement your changes to the SDK source code. + +To ensure your changes have not broken any existing functionality, you can run a series of integration tests: +* create a new app on https://www.dropbox.com/developers/apps/, with "Full Dropbox" access. Note the App key +* open Info.plist and configure the "URL types > Item 0 (Editor) > URL Schemes > Item 0" key to db-"App key" +* open AppDelegate.swift and replace "FULL_DROPBOX_APP_KEY" with the App key as well +* run the test app on your device and follow the on-screen instructions + +--- + +## Bugs + +Please post any bugs to the [issue tracker](https://github.com/dropbox/SwiftyDropbox/issues) found on the project's GitHub page. + +Please include the following with your issue: + - a description of what is not working right + - sample code to help replicate the issue + +Thank you! + diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Platform/SwiftyDropbox_iOS/OAuthMobile.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Platform/SwiftyDropbox_iOS/OAuthMobile.swift new file mode 100644 index 0000000..23df0f2 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Platform/SwiftyDropbox_iOS/OAuthMobile.swift @@ -0,0 +1,249 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation +import SafariServices +import UIKit +import WebKit + +extension DropboxClientsManager { + public static func authorizeFromController(_ sharedApplication: UIApplication, controller: UIViewController?, openURL: @escaping ((URL) -> Void)) { + precondition(DropboxOAuthManager.sharedOAuthManager != nil, "Call `DropboxClientsManager.setupWithAppKey` or `DropboxClientsManager.setupWithTeamAppKey` before calling this method") + let sharedMobileApplication = MobileSharedApplication(sharedApplication: sharedApplication, controller: controller, openURL: openURL) + MobileSharedApplication.sharedMobileApplication = sharedMobileApplication + DropboxOAuthManager.sharedOAuthManager.authorizeFromSharedApplication(sharedMobileApplication) + } + + public static func setupWithAppKey(_ appKey: String, transportClient: DropboxTransportClient? = nil) { + setupWithOAuthManager(appKey, oAuthManager: DropboxMobileOAuthManager(appKey: appKey), transportClient: transportClient) + } + + public static func setupWithAppKeyMultiUser(_ appKey: String, transportClient: DropboxTransportClient? = nil, tokenUid: String?) { + setupWithOAuthManagerMultiUser(appKey, oAuthManager: DropboxMobileOAuthManager(appKey: appKey), transportClient: transportClient, tokenUid: tokenUid) + } + + public static func setupWithTeamAppKey(_ appKey: String, transportClient: DropboxTransportClient? = nil) { + setupWithOAuthManagerTeam(appKey, oAuthManager: DropboxMobileOAuthManager(appKey: appKey), transportClient: transportClient) + } + + public static func setupWithTeamAppKeyMultiUser(_ appKey: String, transportClient: DropboxTransportClient? = nil, tokenUid: String?) { + setupWithOAuthManagerMultiUserTeam(appKey, oAuthManager: DropboxMobileOAuthManager(appKey: appKey), transportClient: transportClient, tokenUid: tokenUid) + } +} + +open class DropboxMobileOAuthManager: DropboxOAuthManager { + var dauthRedirectURL: URL + + public override init(appKey: String, host: String) { + self.dauthRedirectURL = URL(string: "db-\(appKey)://1/connect")! + super.init(appKey: appKey, host:host) + self.urls.append(self.dauthRedirectURL) + } + + internal override func extractFromUrl(_ url: URL) -> DropboxOAuthResult { + let result: DropboxOAuthResult + if url.host == "1" { // dauth + result = extractfromDAuthURL(url) + } else { + result = extractFromRedirectURL(url) + } + return result + } + + internal override func checkAndPresentPlatformSpecificAuth(_ sharedApplication: SharedApplication) -> Bool { + if !self.hasApplicationQueriesSchemes() { + let message = "DropboxSDK: unable to link; app isn't registered to query for URL schemes dbapi-2 and dbapi-8-emm. Add a dbapi-2 entry and a dbapi-8-emm entry to LSApplicationQueriesSchemes" + let title = "SwiftyDropbox Error" + sharedApplication.presentErrorMessage(message, title: title) + return true + } + + if let scheme = dAuthScheme(sharedApplication) { + let nonce = UUID().uuidString + UserDefaults.standard.set(nonce, forKey: kDBLinkNonce) + UserDefaults.standard.synchronize() + sharedApplication.presentExternalApp(dAuthURL(scheme, nonce: nonce)) + return true + } + return false + } + + open override func handleRedirectURL(_ url: URL) -> DropboxOAuthResult? { + if let sharedMobileApplication = MobileSharedApplication.sharedMobileApplication { + sharedMobileApplication.dismissAuthController() + } + let result = super.handleRedirectURL(url) + return result + } + + fileprivate func dAuthURL(_ scheme: String, nonce: String?) -> URL { + var components = URLComponents() + components.scheme = scheme + components.host = "1" + components.path = "/connect" + + if let n = nonce { + let state = "oauth2:\(n)" + components.queryItems = [ + URLQueryItem(name: "k", value: self.appKey), + URLQueryItem(name: "s", value: ""), + URLQueryItem(name: "state", value: state), + ] + } + return components.url! + } + + fileprivate func dAuthScheme(_ sharedApplication: SharedApplication) -> String? { + if sharedApplication.canPresentExternalApp(dAuthURL("dbapi-2", nonce: nil)) { + return "dbapi-2" + } else if sharedApplication.canPresentExternalApp(dAuthURL("dbapi-8-emm", nonce: nil)) { + return "dbapi-8-emm" + } else { + return nil + } + } + + func extractfromDAuthURL(_ url: URL) -> DropboxOAuthResult { + switch url.path { + case "/connect": + var results = [String: String]() + let pairs = url.query?.components(separatedBy: "&") ?? [] + + for pair in pairs { + let kv = pair.components(separatedBy: "=") + results.updateValue(kv[1], forKey: kv[0]) + } + let state = results["state"]?.components(separatedBy: "%3A") ?? [] + + let nonce = UserDefaults.standard.object(forKey: kDBLinkNonce) as? String + if state.count == 2 && state[0] == "oauth2" && state[1] == nonce! { + let accessToken = results["oauth_token_secret"]! + let uid = results["uid"]! + return .success(DropboxAccessToken(accessToken: accessToken, uid: uid)) + } else { + return .error(.unknown, "Unable to verify link request") + } + default: + return .error(.accessDenied, "User cancelled Dropbox link") + } + } + + fileprivate func hasApplicationQueriesSchemes() -> Bool { + let queriesSchemes = Bundle.main.object(forInfoDictionaryKey: "LSApplicationQueriesSchemes") as? [String] ?? [] + + var foundApi2 = false + var foundApi8Emm = false + for scheme in queriesSchemes { + if scheme == "dbapi-2" { + foundApi2 = true + } else if scheme == "dbapi-8-emm" { + foundApi8Emm = true + } + if foundApi2 && foundApi8Emm { + return true + } + } + return false + } +} + +open class MobileSharedApplication: SharedApplication { + public static var sharedMobileApplication: MobileSharedApplication? + + let sharedApplication: UIApplication + let controller: UIViewController? + let openURL: ((URL) -> Void) + + public init(sharedApplication: UIApplication, controller: UIViewController?, openURL: @escaping ((URL) -> Void)) { + // fields saved for app-extension safety + self.sharedApplication = sharedApplication + self.controller = controller + self.openURL = openURL + } + + open func presentErrorMessage(_ message: String, title: String) { + let alertController = UIAlertController( + title: title, + message: message, + preferredStyle: UIAlertController.Style.alert) + if let controller = controller { + controller.present(alertController, animated: true, completion: { fatalError(message) }) + } + } + + open func presentErrorMessageWithHandlers(_ message: String, title: String, buttonHandlers: Dictionary Void>) { + let alertController = UIAlertController( + title: title, + message: message, + preferredStyle: UIAlertController.Style.alert) + + alertController.addAction(UIAlertAction(title: "Cancel", style: .cancel) { (_) in + if let handler = buttonHandlers["Cancel"] { + handler() + } + }) + + alertController.addAction(UIAlertAction(title: "Retry", style: .default) { (_) in + if let handler = buttonHandlers["Retry"] { + handler() + } + }) + + if let controller = controller { + controller.present(alertController, animated: true, completion: {}) + } + } + + open func presentPlatformSpecificAuth(_ authURL: URL) -> Bool { + presentExternalApp(authURL) + return true + } + + open func presentAuthChannel(_ authURL: URL, tryIntercept: @escaping ((URL) -> Bool), cancelHandler: @escaping (() -> Void)) { + if let controller = self.controller { + let safariViewController = MobileSafariViewController(url: authURL, cancelHandler: cancelHandler) + controller.present(safariViewController, animated: true, completion: nil) + } + } + + open func presentExternalApp(_ url: URL) { + self.openURL(url) + } + + open func canPresentExternalApp(_ url: URL) -> Bool { + return self.sharedApplication.canOpenURL(url) + } + + open func dismissAuthController() { + if let controller = self.controller { + if let presentedViewController = controller.presentedViewController { + if presentedViewController.isBeingDismissed == false && presentedViewController is MobileSafariViewController { + controller.dismiss(animated: true, completion: nil) + } + } + } + } +} + +open class MobileSafariViewController: SFSafariViewController, SFSafariViewControllerDelegate { + var cancelHandler: (() -> Void) = {} + + public init(url: URL, cancelHandler: @escaping (() -> Void)) { + super.init(url: url, entersReaderIfAvailable: false) + self.cancelHandler = cancelHandler + self.delegate = self; + } + + public func safariViewController(_ controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) { + if (!didLoadSuccessfully) { + controller.dismiss(animated: true, completion: nil) + } + } + + public func safariViewControllerDidFinish(_ controller: SFSafariViewController) { + self.cancelHandler() + } + +} + diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Async.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Async.swift new file mode 100644 index 0000000..f823ce6 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Async.swift @@ -0,0 +1,260 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the async namespace +open class Async { + /// Result returned by methods that launch an asynchronous job. A method who may either launch an asynchronous job, + /// or complete the request synchronously, can use this union by extending it, and adding a 'complete' field with + /// the type of the synchronous response. See LaunchEmptyResult for an example. + public enum LaunchResultBase: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LaunchResultBaseSerializer().serialize(self)))" + } + } + open class LaunchResultBaseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LaunchResultBase) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LaunchResultBase { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return LaunchResultBase.asyncJobId(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result returned by methods that may either launch an asynchronous job or complete synchronously. Upon + /// synchronous completion of the job, no additional information is returned. + public enum LaunchEmptyResult: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// The job finished synchronously and successfully. + case complete + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LaunchEmptyResultSerializer().serialize(self)))" + } + } + open class LaunchEmptyResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LaunchEmptyResult) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete: + var d = [String: JSON]() + d[".tag"] = .str("complete") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LaunchEmptyResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return LaunchEmptyResult.asyncJobId(v) + case "complete": + return LaunchEmptyResult.complete + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Arguments for methods that poll the status of an asynchronous job. + open class PollArg: CustomStringConvertible { + /// Id of the asynchronous job. This is the value of a response returned from the method that launched the job. + public let asyncJobId: String + public init(asyncJobId: String) { + stringValidator(minLength: 1)(asyncJobId) + self.asyncJobId = asyncJobId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PollArgSerializer().serialize(self)))" + } + } + open class PollArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PollArg) -> JSON { + let output = [ + "async_job_id": Serialization._StringSerializer.serialize(value.asyncJobId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PollArg { + switch json { + case .dictionary(let dict): + let asyncJobId = Serialization._StringSerializer.deserialize(dict["async_job_id"] ?? .null) + return PollArg(asyncJobId: asyncJobId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Result returned by methods that poll for the status of an asynchronous job. Unions that extend this union should + /// add a 'complete' field with a type of the information returned upon job completion. See PollEmptyResult for an + /// example. + public enum PollResultBase: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PollResultBaseSerializer().serialize(self)))" + } + } + open class PollResultBaseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PollResultBase) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PollResultBase { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return PollResultBase.inProgress + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result returned by methods that poll for the status of an asynchronous job. Upon completion of the job, no + /// additional information is returned. + public enum PollEmptyResult: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The asynchronous job has completed successfully. + case complete + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PollEmptyResultSerializer().serialize(self)))" + } + } + open class PollEmptyResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PollEmptyResult) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete: + var d = [String: JSON]() + d[".tag"] = .str("complete") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PollEmptyResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return PollEmptyResult.inProgress + case "complete": + return PollEmptyResult.complete + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Error returned by methods for polling the status of asynchronous job. + public enum PollError: CustomStringConvertible { + /// The job ID is invalid. + case invalidAsyncJobId + /// Something went wrong with the job on Dropbox's end. You'll need to verify that the action you were taking + /// succeeded, and if not, try again. This should happen very rarely. + case internalError + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PollErrorSerializer().serialize(self)))" + } + } + open class PollErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PollError) -> JSON { + switch value { + case .invalidAsyncJobId: + var d = [String: JSON]() + d[".tag"] = .str("invalid_async_job_id") + return .dictionary(d) + case .internalError: + var d = [String: JSON]() + d[".tag"] = .str("internal_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PollError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_async_job_id": + return PollError.invalidAsyncJobId + case "internal_error": + return PollError.internalError + case "other": + return PollError.other + default: + return PollError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Auth.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Auth.swift new file mode 100644 index 0000000..62ea8fd --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Auth.swift @@ -0,0 +1,472 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the auth namespace +open class Auth { + /// Error occurred because the account doesn't have permission to access the resource. + public enum AccessError: CustomStringConvertible { + /// Current account type cannot access the resource. + case invalidAccountType(Auth.InvalidAccountTypeError) + /// Current account cannot access Paper. + case paperAccessDenied(Auth.PaperAccessError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccessErrorSerializer().serialize(self)))" + } + } + open class AccessErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccessError) -> JSON { + switch value { + case .invalidAccountType(let arg): + var d = ["invalid_account_type": Auth.InvalidAccountTypeErrorSerializer().serialize(arg)] + d[".tag"] = .str("invalid_account_type") + return .dictionary(d) + case .paperAccessDenied(let arg): + var d = ["paper_access_denied": Auth.PaperAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("paper_access_denied") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AccessError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_account_type": + let v = Auth.InvalidAccountTypeErrorSerializer().deserialize(d["invalid_account_type"] ?? .null) + return AccessError.invalidAccountType(v) + case "paper_access_denied": + let v = Auth.PaperAccessErrorSerializer().deserialize(d["paper_access_denied"] ?? .null) + return AccessError.paperAccessDenied(v) + case "other": + return AccessError.other + default: + return AccessError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Errors occurred during authentication. + public enum AuthError: CustomStringConvertible { + /// The access token is invalid. + case invalidAccessToken + /// The user specified in 'Dropbox-API-Select-User' is no longer on the team. + case invalidSelectUser + /// The user specified in 'Dropbox-API-Select-Admin' is not a Dropbox Business team admin. + case invalidSelectAdmin + /// The user has been suspended. + case userSuspended + /// The access token has expired. + case expiredAccessToken + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AuthErrorSerializer().serialize(self)))" + } + } + open class AuthErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AuthError) -> JSON { + switch value { + case .invalidAccessToken: + var d = [String: JSON]() + d[".tag"] = .str("invalid_access_token") + return .dictionary(d) + case .invalidSelectUser: + var d = [String: JSON]() + d[".tag"] = .str("invalid_select_user") + return .dictionary(d) + case .invalidSelectAdmin: + var d = [String: JSON]() + d[".tag"] = .str("invalid_select_admin") + return .dictionary(d) + case .userSuspended: + var d = [String: JSON]() + d[".tag"] = .str("user_suspended") + return .dictionary(d) + case .expiredAccessToken: + var d = [String: JSON]() + d[".tag"] = .str("expired_access_token") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AuthError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_access_token": + return AuthError.invalidAccessToken + case "invalid_select_user": + return AuthError.invalidSelectUser + case "invalid_select_admin": + return AuthError.invalidSelectAdmin + case "user_suspended": + return AuthError.userSuspended + case "expired_access_token": + return AuthError.expiredAccessToken + case "other": + return AuthError.other + default: + return AuthError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The InvalidAccountTypeError union + public enum InvalidAccountTypeError: CustomStringConvertible { + /// Current account type doesn't have permission to access this route endpoint. + case endpoint + /// Current account type doesn't have permission to access this feature. + case feature + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(InvalidAccountTypeErrorSerializer().serialize(self)))" + } + } + open class InvalidAccountTypeErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: InvalidAccountTypeError) -> JSON { + switch value { + case .endpoint: + var d = [String: JSON]() + d[".tag"] = .str("endpoint") + return .dictionary(d) + case .feature: + var d = [String: JSON]() + d[".tag"] = .str("feature") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> InvalidAccountTypeError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "endpoint": + return InvalidAccountTypeError.endpoint + case "feature": + return InvalidAccountTypeError.feature + case "other": + return InvalidAccountTypeError.other + default: + return InvalidAccountTypeError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PaperAccessError union + public enum PaperAccessError: CustomStringConvertible { + /// Paper is disabled. + case paperDisabled + /// The provided user has not used Paper yet. + case notPaperUser + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperAccessErrorSerializer().serialize(self)))" + } + } + open class PaperAccessErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperAccessError) -> JSON { + switch value { + case .paperDisabled: + var d = [String: JSON]() + d[".tag"] = .str("paper_disabled") + return .dictionary(d) + case .notPaperUser: + var d = [String: JSON]() + d[".tag"] = .str("not_paper_user") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperAccessError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "paper_disabled": + return PaperAccessError.paperDisabled + case "not_paper_user": + return PaperAccessError.notPaperUser + case "other": + return PaperAccessError.other + default: + return PaperAccessError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Error occurred because the app is being rate limited. + open class RateLimitError: CustomStringConvertible { + /// The reason why the app is being rate limited. + public let reason: Auth.RateLimitReason + /// The number of seconds that the app should wait before making another request. + public let retryAfter: UInt64 + public init(reason: Auth.RateLimitReason, retryAfter: UInt64 = 1) { + self.reason = reason + comparableValidator()(retryAfter) + self.retryAfter = retryAfter + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RateLimitErrorSerializer().serialize(self)))" + } + } + open class RateLimitErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RateLimitError) -> JSON { + let output = [ + "reason": Auth.RateLimitReasonSerializer().serialize(value.reason), + "retry_after": Serialization._UInt64Serializer.serialize(value.retryAfter), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RateLimitError { + switch json { + case .dictionary(let dict): + let reason = Auth.RateLimitReasonSerializer().deserialize(dict["reason"] ?? .null) + let retryAfter = Serialization._UInt64Serializer.deserialize(dict["retry_after"] ?? .number(1)) + return RateLimitError(reason: reason, retryAfter: retryAfter) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RateLimitReason union + public enum RateLimitReason: CustomStringConvertible { + /// You are making too many requests in the past few minutes. + case tooManyRequests + /// There are currently too many write operations happening in the user's Dropbox. + case tooManyWriteOperations + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RateLimitReasonSerializer().serialize(self)))" + } + } + open class RateLimitReasonSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RateLimitReason) -> JSON { + switch value { + case .tooManyRequests: + var d = [String: JSON]() + d[".tag"] = .str("too_many_requests") + return .dictionary(d) + case .tooManyWriteOperations: + var d = [String: JSON]() + d[".tag"] = .str("too_many_write_operations") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RateLimitReason { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "too_many_requests": + return RateLimitReason.tooManyRequests + case "too_many_write_operations": + return RateLimitReason.tooManyWriteOperations + case "other": + return RateLimitReason.other + default: + return RateLimitReason.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TokenFromOAuth1Arg struct + open class TokenFromOAuth1Arg: CustomStringConvertible { + /// The supplied OAuth 1.0 access token. + public let oauth1Token: String + /// The token secret associated with the supplied access token. + public let oauth1TokenSecret: String + public init(oauth1Token: String, oauth1TokenSecret: String) { + stringValidator(minLength: 1)(oauth1Token) + self.oauth1Token = oauth1Token + stringValidator(minLength: 1)(oauth1TokenSecret) + self.oauth1TokenSecret = oauth1TokenSecret + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TokenFromOAuth1ArgSerializer().serialize(self)))" + } + } + open class TokenFromOAuth1ArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TokenFromOAuth1Arg) -> JSON { + let output = [ + "oauth1_token": Serialization._StringSerializer.serialize(value.oauth1Token), + "oauth1_token_secret": Serialization._StringSerializer.serialize(value.oauth1TokenSecret), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TokenFromOAuth1Arg { + switch json { + case .dictionary(let dict): + let oauth1Token = Serialization._StringSerializer.deserialize(dict["oauth1_token"] ?? .null) + let oauth1TokenSecret = Serialization._StringSerializer.deserialize(dict["oauth1_token_secret"] ?? .null) + return TokenFromOAuth1Arg(oauth1Token: oauth1Token, oauth1TokenSecret: oauth1TokenSecret) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TokenFromOAuth1Error union + public enum TokenFromOAuth1Error: CustomStringConvertible { + /// Part or all of the OAuth 1.0 access token info is invalid. + case invalidOauth1TokenInfo + /// The authorized app does not match the app associated with the supplied access token. + case appIdMismatch + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TokenFromOAuth1ErrorSerializer().serialize(self)))" + } + } + open class TokenFromOAuth1ErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TokenFromOAuth1Error) -> JSON { + switch value { + case .invalidOauth1TokenInfo: + var d = [String: JSON]() + d[".tag"] = .str("invalid_oauth1_token_info") + return .dictionary(d) + case .appIdMismatch: + var d = [String: JSON]() + d[".tag"] = .str("app_id_mismatch") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TokenFromOAuth1Error { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_oauth1_token_info": + return TokenFromOAuth1Error.invalidOauth1TokenInfo + case "app_id_mismatch": + return TokenFromOAuth1Error.appIdMismatch + case "other": + return TokenFromOAuth1Error.other + default: + return TokenFromOAuth1Error.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TokenFromOAuth1Result struct + open class TokenFromOAuth1Result: CustomStringConvertible { + /// The OAuth 2.0 token generated from the supplied OAuth 1.0 token. + public let oauth2Token: String + public init(oauth2Token: String) { + stringValidator(minLength: 1)(oauth2Token) + self.oauth2Token = oauth2Token + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TokenFromOAuth1ResultSerializer().serialize(self)))" + } + } + open class TokenFromOAuth1ResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TokenFromOAuth1Result) -> JSON { + let output = [ + "oauth2_token": Serialization._StringSerializer.serialize(value.oauth2Token), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TokenFromOAuth1Result { + switch json { + case .dictionary(let dict): + let oauth2Token = Serialization._StringSerializer.deserialize(dict["oauth2_token"] ?? .null) + return TokenFromOAuth1Result(oauth2Token: oauth2Token) + default: + fatalError("Type error deserializing") + } + } + } + + + /// Stone Route Objects + + static let tokenFromOauth1 = Route( + name: "token/from_oauth1", + version: 1, + namespace: "auth", + deprecated: false, + argSerializer: Auth.TokenFromOAuth1ArgSerializer(), + responseSerializer: Auth.TokenFromOAuth1ResultSerializer(), + errorSerializer: Auth.TokenFromOAuth1ErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let tokenRevoke = Route( + name: "token/revoke", + version: 1, + namespace: "auth", + deprecated: false, + argSerializer: Serialization._VoidSerializer, + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/AuthRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/AuthRoutes.swift new file mode 100644 index 0000000..3f63cc3 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/AuthRoutes.swift @@ -0,0 +1,37 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the auth namespace +open class AuthRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// Creates an OAuth 2.0 access token from the supplied OAuth 1.0 access token. + /// + /// - parameter oauth1Token: The supplied OAuth 1.0 access token. + /// - parameter oauth1TokenSecret: The token secret associated with the supplied access token. + /// + /// - returns: Through the response callback, the caller will receive a `Auth.TokenFromOAuth1Result` object on + /// success or a `Auth.TokenFromOAuth1Error` object on failure. + @discardableResult open func tokenFromOauth1(oauth1Token: String, oauth1TokenSecret: String) -> RpcRequest { + let route = Auth.tokenFromOauth1 + let serverArgs = Auth.TokenFromOAuth1Arg(oauth1Token: oauth1Token, oauth1TokenSecret: oauth1TokenSecret) + return client.request(route, serverArgs: serverArgs) + } + + /// Disables the access token used to authenticate the call. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a `Void` object + /// on failure. + @discardableResult open func tokenRevoke() -> RpcRequest { + let route = Auth.tokenRevoke + return client.request(route) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Base.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Base.swift new file mode 100644 index 0000000..8f2cc85 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Base.swift @@ -0,0 +1,42 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +import Alamofire + +open class DropboxBase { + /// Routes within the auth namespace. See AuthRoutes for details. + open var auth: AuthRoutes! + /// Routes within the contacts namespace. See ContactsRoutes for details. + open var contacts: ContactsRoutes! + /// Routes within the file_properties namespace. See FilePropertiesRoutes for details. + open var file_properties: FilePropertiesRoutes! + /// Routes within the file_requests namespace. See FileRequestsRoutes for details. + open var file_requests: FileRequestsRoutes! + /// Routes within the files namespace. See FilesRoutes for details. + open var files: FilesRoutes! + /// Routes within the paper namespace. See PaperRoutes for details. + open var paper: PaperRoutes! + /// Routes within the sharing namespace. See SharingRoutes for details. + open var sharing: SharingRoutes! + /// Routes within the team_log namespace. See TeamLogRoutes for details. + open var team_log: TeamLogRoutes! + /// Routes within the users namespace. See UsersRoutes for details. + open var users: UsersRoutes! + + public init(client: DropboxTransportClient) { + self.auth = AuthRoutes(client: client) + self.contacts = ContactsRoutes(client: client) + self.file_properties = FilePropertiesRoutes(client: client) + self.file_requests = FileRequestsRoutes(client: client) + self.files = FilesRoutes(client: client) + self.paper = PaperRoutes(client: client) + self.sharing = SharingRoutes(client: client) + self.team_log = TeamLogRoutes(client: client) + self.users = UsersRoutes(client: client) + } +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/BaseTeam.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/BaseTeam.swift new file mode 100644 index 0000000..78bbcfd --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/BaseTeam.swift @@ -0,0 +1,18 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +import Alamofire + +open class DropboxTeamBase { + /// Routes within the team namespace. See TeamRoutes for details. + open var team: TeamRoutes! + + public init(client: DropboxTransportClient) { + self.team = TeamRoutes(client: client) + } +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Common.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Common.swift new file mode 100644 index 0000000..7c26698 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Common.swift @@ -0,0 +1,250 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the common namespace +open class Common { + /// The PathRoot union + public enum PathRoot: CustomStringConvertible { + /// Paths are relative to the authenticating user's home namespace, whether or not that user belongs to a team. + case home + /// Paths are relative to the authenticating user's root namespace (This results in invalidRoot in PathRootError + /// if the user's root namespace has changed.). + case root(String) + /// Paths are relative to given namespace id (This results in noPermission in PathRootError if you don't have + /// access to this namespace.). + case namespaceId(String) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PathRootSerializer().serialize(self)))" + } + } + open class PathRootSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PathRoot) -> JSON { + switch value { + case .home: + var d = [String: JSON]() + d[".tag"] = .str("home") + return .dictionary(d) + case .root(let arg): + var d = ["root": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("root") + return .dictionary(d) + case .namespaceId(let arg): + var d = ["namespace_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("namespace_id") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PathRoot { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "home": + return PathRoot.home + case "root": + let v = Serialization._StringSerializer.deserialize(d["root"] ?? .null) + return PathRoot.root(v) + case "namespace_id": + let v = Serialization._StringSerializer.deserialize(d["namespace_id"] ?? .null) + return PathRoot.namespaceId(v) + case "other": + return PathRoot.other + default: + return PathRoot.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PathRootError union + public enum PathRootError: CustomStringConvertible { + /// The root namespace id in Dropbox-API-Path-Root header is not valid. The value of this error is use's latest + /// root info. + case invalidRoot(Common.RootInfo) + /// You don't have permission to access the namespace id in Dropbox-API-Path-Root header. + case noPermission + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PathRootErrorSerializer().serialize(self)))" + } + } + open class PathRootErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PathRootError) -> JSON { + switch value { + case .invalidRoot(let arg): + var d = ["invalid_root": Common.RootInfoSerializer().serialize(arg)] + d[".tag"] = .str("invalid_root") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PathRootError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_root": + let v = Common.RootInfoSerializer().deserialize(d["invalid_root"] ?? .null) + return PathRootError.invalidRoot(v) + case "no_permission": + return PathRootError.noPermission + case "other": + return PathRootError.other + default: + return PathRootError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information about current user's root. + open class RootInfo: CustomStringConvertible { + /// The namespace ID for user's root namespace. It will be the namespace ID of the shared team root if the user + /// is member of a team with a separate team root. Otherwise it will be same as homeNamespaceId in RootInfo. + public let rootNamespaceId: String + /// The namespace ID for user's home namespace. + public let homeNamespaceId: String + public init(rootNamespaceId: String, homeNamespaceId: String) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(rootNamespaceId) + self.rootNamespaceId = rootNamespaceId + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(homeNamespaceId) + self.homeNamespaceId = homeNamespaceId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RootInfoSerializer().serialize(self)))" + } + } + open class RootInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RootInfo) -> JSON { + var output = [ + "root_namespace_id": Serialization._StringSerializer.serialize(value.rootNamespaceId), + "home_namespace_id": Serialization._StringSerializer.serialize(value.homeNamespaceId), + ] + switch value { + case let team as Common.TeamRootInfo: + for (k, v) in Serialization.getFields(Common.TeamRootInfoSerializer().serialize(team)) { + output[k] = v + } + output[".tag"] = .str("team") + case let user as Common.UserRootInfo: + for (k, v) in Serialization.getFields(Common.UserRootInfoSerializer().serialize(user)) { + output[k] = v + } + output[".tag"] = .str("user") + default: fatalError("Tried to serialize unexpected subtype") + } + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RootInfo { + switch json { + case .dictionary(let dict): + let tag = Serialization.getTag(dict) + switch tag { + case "team": + return Common.TeamRootInfoSerializer().deserialize(json) + case "user": + return Common.UserRootInfoSerializer().deserialize(json) + default: + let rootNamespaceId = Serialization._StringSerializer.deserialize(dict["root_namespace_id"] ?? .null) + let homeNamespaceId = Serialization._StringSerializer.deserialize(dict["home_namespace_id"] ?? .null) + return RootInfo(rootNamespaceId: rootNamespaceId, homeNamespaceId: homeNamespaceId) + } + default: + fatalError("Type error deserializing") + } + } + } + + /// Root info when user is member of a team with a separate root namespace ID. + open class TeamRootInfo: Common.RootInfo { + /// The path for user's home directory under the shared team root. + public let homePath: String + public init(rootNamespaceId: String, homeNamespaceId: String, homePath: String) { + stringValidator()(homePath) + self.homePath = homePath + super.init(rootNamespaceId: rootNamespaceId, homeNamespaceId: homeNamespaceId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamRootInfoSerializer().serialize(self)))" + } + } + open class TeamRootInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamRootInfo) -> JSON { + let output = [ + "root_namespace_id": Serialization._StringSerializer.serialize(value.rootNamespaceId), + "home_namespace_id": Serialization._StringSerializer.serialize(value.homeNamespaceId), + "home_path": Serialization._StringSerializer.serialize(value.homePath), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamRootInfo { + switch json { + case .dictionary(let dict): + let rootNamespaceId = Serialization._StringSerializer.deserialize(dict["root_namespace_id"] ?? .null) + let homeNamespaceId = Serialization._StringSerializer.deserialize(dict["home_namespace_id"] ?? .null) + let homePath = Serialization._StringSerializer.deserialize(dict["home_path"] ?? .null) + return TeamRootInfo(rootNamespaceId: rootNamespaceId, homeNamespaceId: homeNamespaceId, homePath: homePath) + default: + fatalError("Type error deserializing") + } + } + } + + /// Root info when user is not member of a team or the user is a member of a team and the team does not have a + /// separate root namespace. + open class UserRootInfo: Common.RootInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserRootInfoSerializer().serialize(self)))" + } + } + open class UserRootInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserRootInfo) -> JSON { + let output = [ + "root_namespace_id": Serialization._StringSerializer.serialize(value.rootNamespaceId), + "home_namespace_id": Serialization._StringSerializer.serialize(value.homeNamespaceId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserRootInfo { + switch json { + case .dictionary(let dict): + let rootNamespaceId = Serialization._StringSerializer.deserialize(dict["root_namespace_id"] ?? .null) + let homeNamespaceId = Serialization._StringSerializer.deserialize(dict["home_namespace_id"] ?? .null) + return UserRootInfo(rootNamespaceId: rootNamespaceId, homeNamespaceId: homeNamespaceId) + default: + fatalError("Type error deserializing") + } + } + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Contacts.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Contacts.swift new file mode 100644 index 0000000..a767a14 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Contacts.swift @@ -0,0 +1,112 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the contacts namespace +open class Contacts { + /// The DeleteManualContactsArg struct + open class DeleteManualContactsArg: CustomStringConvertible { + /// List of manually added contacts to be deleted. + public let emailAddresses: Array + public init(emailAddresses: Array) { + arrayValidator(itemValidator: stringValidator(maxLength: 255, pattern: "^['&A-Za-z0-9._%+-]+@[A-Za-z0-9-][A-Za-z0-9.-]*\\.[A-Za-z]{2,15}$"))(emailAddresses) + self.emailAddresses = emailAddresses + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteManualContactsArgSerializer().serialize(self)))" + } + } + open class DeleteManualContactsArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteManualContactsArg) -> JSON { + let output = [ + "email_addresses": ArraySerializer(Serialization._StringSerializer).serialize(value.emailAddresses), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeleteManualContactsArg { + switch json { + case .dictionary(let dict): + let emailAddresses = ArraySerializer(Serialization._StringSerializer).deserialize(dict["email_addresses"] ?? .null) + return DeleteManualContactsArg(emailAddresses: emailAddresses) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeleteManualContactsError union + public enum DeleteManualContactsError: CustomStringConvertible { + /// Can't delete contacts from this list. Make sure the list only has manually added contacts. The deletion was + /// cancelled. + case contactsNotFound(Array) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteManualContactsErrorSerializer().serialize(self)))" + } + } + open class DeleteManualContactsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteManualContactsError) -> JSON { + switch value { + case .contactsNotFound(let arg): + var d = ["contacts_not_found": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("contacts_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DeleteManualContactsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "contacts_not_found": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["contacts_not_found"] ?? .null) + return DeleteManualContactsError.contactsNotFound(v) + case "other": + return DeleteManualContactsError.other + default: + return DeleteManualContactsError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + + /// Stone Route Objects + + static let deleteManualContacts = Route( + name: "delete_manual_contacts", + version: 1, + namespace: "contacts", + deprecated: false, + argSerializer: Serialization._VoidSerializer, + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let deleteManualContactsBatch = Route( + name: "delete_manual_contacts_batch", + version: 1, + namespace: "contacts", + deprecated: false, + argSerializer: Contacts.DeleteManualContactsArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Contacts.DeleteManualContactsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/ContactsRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/ContactsRoutes.swift new file mode 100644 index 0000000..c0818fc --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/ContactsRoutes.swift @@ -0,0 +1,37 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the contacts namespace +open class ContactsRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// Removes all manually added contacts. You'll still keep contacts who are on your team or who you imported. New + /// contacts will be added when you share. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a `Void` object + /// on failure. + @discardableResult open func deleteManualContacts() -> RpcRequest { + let route = Contacts.deleteManualContacts + return client.request(route) + } + + /// Removes manually added contacts from the given list. + /// + /// - parameter emailAddresses: List of manually added contacts to be deleted. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Contacts.DeleteManualContactsError` object on failure. + @discardableResult open func deleteManualContactsBatch(emailAddresses: Array) -> RpcRequest { + let route = Contacts.deleteManualContactsBatch + let serverArgs = Contacts.DeleteManualContactsArg(emailAddresses: emailAddresses) + return client.request(route, serverArgs: serverArgs) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileProperties.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileProperties.swift new file mode 100644 index 0000000..e34add7 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileProperties.swift @@ -0,0 +1,2032 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the file_properties namespace +open class FileProperties { + /// The AddPropertiesArg struct + open class AddPropertiesArg: CustomStringConvertible { + /// A unique identifier for the file or folder. + public let path: String + /// The property groups which are to be added to a Dropbox file. + public let propertyGroups: Array + public init(path: String, propertyGroups: Array) { + stringValidator(pattern: "/(.|[\\r\\n])*|id:.*|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.propertyGroups = propertyGroups + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddPropertiesArgSerializer().serialize(self)))" + } + } + open class AddPropertiesArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddPropertiesArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "property_groups": ArraySerializer(FileProperties.PropertyGroupSerializer()).serialize(value.propertyGroups), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AddPropertiesArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let propertyGroups = ArraySerializer(FileProperties.PropertyGroupSerializer()).deserialize(dict["property_groups"] ?? .null) + return AddPropertiesArg(path: path, propertyGroups: propertyGroups) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TemplateError union + public enum TemplateError: CustomStringConvertible { + /// Template does not exist for the given identifier. + case templateNotFound(String) + /// You do not have permission to modify this template. + case restrictedContent + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TemplateErrorSerializer().serialize(self)))" + } + } + open class TemplateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TemplateError) -> JSON { + switch value { + case .templateNotFound(let arg): + var d = ["template_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("template_not_found") + return .dictionary(d) + case .restrictedContent: + var d = [String: JSON]() + d[".tag"] = .str("restricted_content") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TemplateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "template_not_found": + let v = Serialization._StringSerializer.deserialize(d["template_not_found"] ?? .null) + return TemplateError.templateNotFound(v) + case "restricted_content": + return TemplateError.restrictedContent + case "other": + return TemplateError.other + default: + return TemplateError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PropertiesError union + public enum PropertiesError: CustomStringConvertible { + /// Template does not exist for the given identifier. + case templateNotFound(String) + /// You do not have permission to modify this template. + case restrictedContent + /// An unspecified error. + case other + /// An unspecified error. + case path(FileProperties.LookupError) + /// This folder cannot be tagged. Tagging folders is not supported for team-owned templates. + case unsupportedFolder + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertiesErrorSerializer().serialize(self)))" + } + } + open class PropertiesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertiesError) -> JSON { + switch value { + case .templateNotFound(let arg): + var d = ["template_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("template_not_found") + return .dictionary(d) + case .restrictedContent: + var d = [String: JSON]() + d[".tag"] = .str("restricted_content") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .path(let arg): + var d = ["path": FileProperties.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .unsupportedFolder: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_folder") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PropertiesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "template_not_found": + let v = Serialization._StringSerializer.deserialize(d["template_not_found"] ?? .null) + return PropertiesError.templateNotFound(v) + case "restricted_content": + return PropertiesError.restrictedContent + case "other": + return PropertiesError.other + case "path": + let v = FileProperties.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return PropertiesError.path(v) + case "unsupported_folder": + return PropertiesError.unsupportedFolder + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The InvalidPropertyGroupError union + public enum InvalidPropertyGroupError: CustomStringConvertible { + /// Template does not exist for the given identifier. + case templateNotFound(String) + /// You do not have permission to modify this template. + case restrictedContent + /// An unspecified error. + case other + /// An unspecified error. + case path(FileProperties.LookupError) + /// This folder cannot be tagged. Tagging folders is not supported for team-owned templates. + case unsupportedFolder + /// One or more of the supplied property field values is too large. + case propertyFieldTooLarge + /// One or more of the supplied property fields does not conform to the template specifications. + case doesNotFitTemplate + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(InvalidPropertyGroupErrorSerializer().serialize(self)))" + } + } + open class InvalidPropertyGroupErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: InvalidPropertyGroupError) -> JSON { + switch value { + case .templateNotFound(let arg): + var d = ["template_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("template_not_found") + return .dictionary(d) + case .restrictedContent: + var d = [String: JSON]() + d[".tag"] = .str("restricted_content") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .path(let arg): + var d = ["path": FileProperties.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .unsupportedFolder: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_folder") + return .dictionary(d) + case .propertyFieldTooLarge: + var d = [String: JSON]() + d[".tag"] = .str("property_field_too_large") + return .dictionary(d) + case .doesNotFitTemplate: + var d = [String: JSON]() + d[".tag"] = .str("does_not_fit_template") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> InvalidPropertyGroupError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "template_not_found": + let v = Serialization._StringSerializer.deserialize(d["template_not_found"] ?? .null) + return InvalidPropertyGroupError.templateNotFound(v) + case "restricted_content": + return InvalidPropertyGroupError.restrictedContent + case "other": + return InvalidPropertyGroupError.other + case "path": + let v = FileProperties.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return InvalidPropertyGroupError.path(v) + case "unsupported_folder": + return InvalidPropertyGroupError.unsupportedFolder + case "property_field_too_large": + return InvalidPropertyGroupError.propertyFieldTooLarge + case "does_not_fit_template": + return InvalidPropertyGroupError.doesNotFitTemplate + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The AddPropertiesError union + public enum AddPropertiesError: CustomStringConvertible { + /// Template does not exist for the given identifier. + case templateNotFound(String) + /// You do not have permission to modify this template. + case restrictedContent + /// An unspecified error. + case other + /// An unspecified error. + case path(FileProperties.LookupError) + /// This folder cannot be tagged. Tagging folders is not supported for team-owned templates. + case unsupportedFolder + /// One or more of the supplied property field values is too large. + case propertyFieldTooLarge + /// One or more of the supplied property fields does not conform to the template specifications. + case doesNotFitTemplate + /// A property group associated with this template and file already exists. + case propertyGroupAlreadyExists + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddPropertiesErrorSerializer().serialize(self)))" + } + } + open class AddPropertiesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddPropertiesError) -> JSON { + switch value { + case .templateNotFound(let arg): + var d = ["template_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("template_not_found") + return .dictionary(d) + case .restrictedContent: + var d = [String: JSON]() + d[".tag"] = .str("restricted_content") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .path(let arg): + var d = ["path": FileProperties.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .unsupportedFolder: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_folder") + return .dictionary(d) + case .propertyFieldTooLarge: + var d = [String: JSON]() + d[".tag"] = .str("property_field_too_large") + return .dictionary(d) + case .doesNotFitTemplate: + var d = [String: JSON]() + d[".tag"] = .str("does_not_fit_template") + return .dictionary(d) + case .propertyGroupAlreadyExists: + var d = [String: JSON]() + d[".tag"] = .str("property_group_already_exists") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AddPropertiesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "template_not_found": + let v = Serialization._StringSerializer.deserialize(d["template_not_found"] ?? .null) + return AddPropertiesError.templateNotFound(v) + case "restricted_content": + return AddPropertiesError.restrictedContent + case "other": + return AddPropertiesError.other + case "path": + let v = FileProperties.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return AddPropertiesError.path(v) + case "unsupported_folder": + return AddPropertiesError.unsupportedFolder + case "property_field_too_large": + return AddPropertiesError.propertyFieldTooLarge + case "does_not_fit_template": + return AddPropertiesError.doesNotFitTemplate + case "property_group_already_exists": + return AddPropertiesError.propertyGroupAlreadyExists + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Defines how a property group may be structured. + open class PropertyGroupTemplate: CustomStringConvertible { + /// Display name for the template. Template names can be up to 256 bytes. + public let name: String + /// Description for the template. Template descriptions can be up to 1024 bytes. + public let description_: String + /// Definitions of the property fields associated with this template. There can be up to 32 properties in a + /// single template. + public let fields: Array + public init(name: String, description_: String, fields: Array) { + stringValidator()(name) + self.name = name + stringValidator()(description_) + self.description_ = description_ + self.fields = fields + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertyGroupTemplateSerializer().serialize(self)))" + } + } + open class PropertyGroupTemplateSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertyGroupTemplate) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "description": Serialization._StringSerializer.serialize(value.description_), + "fields": ArraySerializer(FileProperties.PropertyFieldTemplateSerializer()).serialize(value.fields), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertyGroupTemplate { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + let fields = ArraySerializer(FileProperties.PropertyFieldTemplateSerializer()).deserialize(dict["fields"] ?? .null) + return PropertyGroupTemplate(name: name, description_: description_, fields: fields) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AddTemplateArg struct + open class AddTemplateArg: FileProperties.PropertyGroupTemplate { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddTemplateArgSerializer().serialize(self)))" + } + } + open class AddTemplateArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddTemplateArg) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "description": Serialization._StringSerializer.serialize(value.description_), + "fields": ArraySerializer(FileProperties.PropertyFieldTemplateSerializer()).serialize(value.fields), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AddTemplateArg { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + let fields = ArraySerializer(FileProperties.PropertyFieldTemplateSerializer()).deserialize(dict["fields"] ?? .null) + return AddTemplateArg(name: name, description_: description_, fields: fields) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AddTemplateResult struct + open class AddTemplateResult: CustomStringConvertible { + /// An identifier for template added by See templatesAddForUser or templatesAddForTeam. + public let templateId: String + public init(templateId: String) { + stringValidator(minLength: 1, pattern: "(/|ptid:).*")(templateId) + self.templateId = templateId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddTemplateResultSerializer().serialize(self)))" + } + } + open class AddTemplateResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddTemplateResult) -> JSON { + let output = [ + "template_id": Serialization._StringSerializer.serialize(value.templateId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AddTemplateResult { + switch json { + case .dictionary(let dict): + let templateId = Serialization._StringSerializer.deserialize(dict["template_id"] ?? .null) + return AddTemplateResult(templateId: templateId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetTemplateArg struct + open class GetTemplateArg: CustomStringConvertible { + /// An identifier for template added by route See templatesAddForUser or templatesAddForTeam. + public let templateId: String + public init(templateId: String) { + stringValidator(minLength: 1, pattern: "(/|ptid:).*")(templateId) + self.templateId = templateId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTemplateArgSerializer().serialize(self)))" + } + } + open class GetTemplateArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTemplateArg) -> JSON { + let output = [ + "template_id": Serialization._StringSerializer.serialize(value.templateId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetTemplateArg { + switch json { + case .dictionary(let dict): + let templateId = Serialization._StringSerializer.deserialize(dict["template_id"] ?? .null) + return GetTemplateArg(templateId: templateId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetTemplateResult struct + open class GetTemplateResult: FileProperties.PropertyGroupTemplate { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTemplateResultSerializer().serialize(self)))" + } + } + open class GetTemplateResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTemplateResult) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "description": Serialization._StringSerializer.serialize(value.description_), + "fields": ArraySerializer(FileProperties.PropertyFieldTemplateSerializer()).serialize(value.fields), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetTemplateResult { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + let fields = ArraySerializer(FileProperties.PropertyFieldTemplateSerializer()).deserialize(dict["fields"] ?? .null) + return GetTemplateResult(name: name, description_: description_, fields: fields) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListTemplateResult struct + open class ListTemplateResult: CustomStringConvertible { + /// List of identifiers for templates added by See templatesAddForUser or templatesAddForTeam. + public let templateIds: Array + public init(templateIds: Array) { + arrayValidator(itemValidator: stringValidator(minLength: 1, pattern: "(/|ptid:).*"))(templateIds) + self.templateIds = templateIds + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListTemplateResultSerializer().serialize(self)))" + } + } + open class ListTemplateResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListTemplateResult) -> JSON { + let output = [ + "template_ids": ArraySerializer(Serialization._StringSerializer).serialize(value.templateIds), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListTemplateResult { + switch json { + case .dictionary(let dict): + let templateIds = ArraySerializer(Serialization._StringSerializer).deserialize(dict["template_ids"] ?? .null) + return ListTemplateResult(templateIds: templateIds) + default: + fatalError("Type error deserializing") + } + } + } + + /// Logical operator to join search queries together. + public enum LogicalOperator: CustomStringConvertible { + /// Append a query with an "or" operator. + case orOperator + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LogicalOperatorSerializer().serialize(self)))" + } + } + open class LogicalOperatorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LogicalOperator) -> JSON { + switch value { + case .orOperator: + var d = [String: JSON]() + d[".tag"] = .str("or_operator") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LogicalOperator { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "or_operator": + return LogicalOperator.orOperator + case "other": + return LogicalOperator.other + default: + return LogicalOperator.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The LookUpPropertiesError union + public enum LookUpPropertiesError: CustomStringConvertible { + /// No property group was found. + case propertyGroupNotFound + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LookUpPropertiesErrorSerializer().serialize(self)))" + } + } + open class LookUpPropertiesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LookUpPropertiesError) -> JSON { + switch value { + case .propertyGroupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("property_group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LookUpPropertiesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "property_group_not_found": + return LookUpPropertiesError.propertyGroupNotFound + case "other": + return LookUpPropertiesError.other + default: + return LookUpPropertiesError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The LookupError union + public enum LookupError: CustomStringConvertible { + /// An unspecified error. + case malformedPath(String) + /// There is nothing at the given path. + case notFound + /// We were expecting a file, but the given path refers to something that isn't a file. + case notFile + /// We were expecting a folder, but the given path refers to something that isn't a folder. + case notFolder + /// The file cannot be transferred because the content is restricted. For example, sometimes there are legal + /// restrictions due to copyright claims. + case restrictedContent + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LookupErrorSerializer().serialize(self)))" + } + } + open class LookupErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LookupError) -> JSON { + switch value { + case .malformedPath(let arg): + var d = ["malformed_path": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("malformed_path") + return .dictionary(d) + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .notFile: + var d = [String: JSON]() + d[".tag"] = .str("not_file") + return .dictionary(d) + case .notFolder: + var d = [String: JSON]() + d[".tag"] = .str("not_folder") + return .dictionary(d) + case .restrictedContent: + var d = [String: JSON]() + d[".tag"] = .str("restricted_content") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LookupError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "malformed_path": + let v = Serialization._StringSerializer.deserialize(d["malformed_path"] ?? .null) + return LookupError.malformedPath(v) + case "not_found": + return LookupError.notFound + case "not_file": + return LookupError.notFile + case "not_folder": + return LookupError.notFolder + case "restricted_content": + return LookupError.restrictedContent + case "other": + return LookupError.other + default: + return LookupError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ModifyTemplateError union + public enum ModifyTemplateError: CustomStringConvertible { + /// Template does not exist for the given identifier. + case templateNotFound(String) + /// You do not have permission to modify this template. + case restrictedContent + /// An unspecified error. + case other + /// A property field key with that name already exists in the template. + case conflictingPropertyNames + /// There are too many properties in the changed template. The maximum number of properties per template is 32. + case tooManyProperties + /// There are too many templates for the team. + case tooManyTemplates + /// The template name, description or one or more of the property field keys is too large. + case templateAttributeTooLarge + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ModifyTemplateErrorSerializer().serialize(self)))" + } + } + open class ModifyTemplateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ModifyTemplateError) -> JSON { + switch value { + case .templateNotFound(let arg): + var d = ["template_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("template_not_found") + return .dictionary(d) + case .restrictedContent: + var d = [String: JSON]() + d[".tag"] = .str("restricted_content") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .conflictingPropertyNames: + var d = [String: JSON]() + d[".tag"] = .str("conflicting_property_names") + return .dictionary(d) + case .tooManyProperties: + var d = [String: JSON]() + d[".tag"] = .str("too_many_properties") + return .dictionary(d) + case .tooManyTemplates: + var d = [String: JSON]() + d[".tag"] = .str("too_many_templates") + return .dictionary(d) + case .templateAttributeTooLarge: + var d = [String: JSON]() + d[".tag"] = .str("template_attribute_too_large") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ModifyTemplateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "template_not_found": + let v = Serialization._StringSerializer.deserialize(d["template_not_found"] ?? .null) + return ModifyTemplateError.templateNotFound(v) + case "restricted_content": + return ModifyTemplateError.restrictedContent + case "other": + return ModifyTemplateError.other + case "conflicting_property_names": + return ModifyTemplateError.conflictingPropertyNames + case "too_many_properties": + return ModifyTemplateError.tooManyProperties + case "too_many_templates": + return ModifyTemplateError.tooManyTemplates + case "template_attribute_too_large": + return ModifyTemplateError.templateAttributeTooLarge + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The OverwritePropertyGroupArg struct + open class OverwritePropertyGroupArg: CustomStringConvertible { + /// A unique identifier for the file or folder. + public let path: String + /// The property groups "snapshot" updates to force apply. + public let propertyGroups: Array + public init(path: String, propertyGroups: Array) { + stringValidator(pattern: "/(.|[\\r\\n])*|id:.*|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.propertyGroups = propertyGroups + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(OverwritePropertyGroupArgSerializer().serialize(self)))" + } + } + open class OverwritePropertyGroupArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: OverwritePropertyGroupArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "property_groups": ArraySerializer(FileProperties.PropertyGroupSerializer()).serialize(value.propertyGroups), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> OverwritePropertyGroupArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let propertyGroups = ArraySerializer(FileProperties.PropertyGroupSerializer()).deserialize(dict["property_groups"] ?? .null) + return OverwritePropertyGroupArg(path: path, propertyGroups: propertyGroups) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PropertiesSearchArg struct + open class PropertiesSearchArg: CustomStringConvertible { + /// Queries to search. + public let queries: Array + /// Filter results to contain only properties associated with these template IDs. + public let templateFilter: FileProperties.TemplateFilter + public init(queries: Array, templateFilter: FileProperties.TemplateFilter = .filterNone) { + self.queries = queries + self.templateFilter = templateFilter + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertiesSearchArgSerializer().serialize(self)))" + } + } + open class PropertiesSearchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertiesSearchArg) -> JSON { + let output = [ + "queries": ArraySerializer(FileProperties.PropertiesSearchQuerySerializer()).serialize(value.queries), + "template_filter": FileProperties.TemplateFilterSerializer().serialize(value.templateFilter), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertiesSearchArg { + switch json { + case .dictionary(let dict): + let queries = ArraySerializer(FileProperties.PropertiesSearchQuerySerializer()).deserialize(dict["queries"] ?? .null) + let templateFilter = FileProperties.TemplateFilterSerializer().deserialize(dict["template_filter"] ?? FileProperties.TemplateFilterSerializer().serialize(.filterNone)) + return PropertiesSearchArg(queries: queries, templateFilter: templateFilter) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PropertiesSearchContinueArg struct + open class PropertiesSearchContinueArg: CustomStringConvertible { + /// The cursor returned by your last call to propertiesSearch or propertiesSearchContinue. + public let cursor: String + public init(cursor: String) { + stringValidator(minLength: 1)(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertiesSearchContinueArgSerializer().serialize(self)))" + } + } + open class PropertiesSearchContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertiesSearchContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertiesSearchContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return PropertiesSearchContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PropertiesSearchContinueError union + public enum PropertiesSearchContinueError: CustomStringConvertible { + /// Indicates that the cursor has been invalidated. Call propertiesSearch to obtain a new cursor. + case reset + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertiesSearchContinueErrorSerializer().serialize(self)))" + } + } + open class PropertiesSearchContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertiesSearchContinueError) -> JSON { + switch value { + case .reset: + var d = [String: JSON]() + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PropertiesSearchContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "reset": + return PropertiesSearchContinueError.reset + case "other": + return PropertiesSearchContinueError.other + default: + return PropertiesSearchContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PropertiesSearchError union + public enum PropertiesSearchError: CustomStringConvertible { + /// An unspecified error. + case propertyGroupLookup(FileProperties.LookUpPropertiesError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertiesSearchErrorSerializer().serialize(self)))" + } + } + open class PropertiesSearchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertiesSearchError) -> JSON { + switch value { + case .propertyGroupLookup(let arg): + var d = ["property_group_lookup": FileProperties.LookUpPropertiesErrorSerializer().serialize(arg)] + d[".tag"] = .str("property_group_lookup") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PropertiesSearchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "property_group_lookup": + let v = FileProperties.LookUpPropertiesErrorSerializer().deserialize(d["property_group_lookup"] ?? .null) + return PropertiesSearchError.propertyGroupLookup(v) + case "other": + return PropertiesSearchError.other + default: + return PropertiesSearchError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PropertiesSearchMatch struct + open class PropertiesSearchMatch: CustomStringConvertible { + /// The ID for the matched file or folder. + public let id: String + /// The path for the matched file or folder. + public let path: String + /// Whether the file or folder is deleted. + public let isDeleted: Bool + /// List of custom property groups associated with the file. + public let propertyGroups: Array + public init(id: String, path: String, isDeleted: Bool, propertyGroups: Array) { + stringValidator(minLength: 1)(id) + self.id = id + stringValidator()(path) + self.path = path + self.isDeleted = isDeleted + self.propertyGroups = propertyGroups + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertiesSearchMatchSerializer().serialize(self)))" + } + } + open class PropertiesSearchMatchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertiesSearchMatch) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + "path": Serialization._StringSerializer.serialize(value.path), + "is_deleted": Serialization._BoolSerializer.serialize(value.isDeleted), + "property_groups": ArraySerializer(FileProperties.PropertyGroupSerializer()).serialize(value.propertyGroups), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertiesSearchMatch { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let isDeleted = Serialization._BoolSerializer.deserialize(dict["is_deleted"] ?? .null) + let propertyGroups = ArraySerializer(FileProperties.PropertyGroupSerializer()).deserialize(dict["property_groups"] ?? .null) + return PropertiesSearchMatch(id: id, path: path, isDeleted: isDeleted, propertyGroups: propertyGroups) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PropertiesSearchMode union + public enum PropertiesSearchMode: CustomStringConvertible { + /// Search for a value associated with this field name. + case fieldName(String) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertiesSearchModeSerializer().serialize(self)))" + } + } + open class PropertiesSearchModeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertiesSearchMode) -> JSON { + switch value { + case .fieldName(let arg): + var d = ["field_name": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("field_name") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PropertiesSearchMode { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "field_name": + let v = Serialization._StringSerializer.deserialize(d["field_name"] ?? .null) + return PropertiesSearchMode.fieldName(v) + case "other": + return PropertiesSearchMode.other + default: + return PropertiesSearchMode.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PropertiesSearchQuery struct + open class PropertiesSearchQuery: CustomStringConvertible { + /// The property field value for which to search across templates. + public let query: String + /// The mode with which to perform the search. + public let mode: FileProperties.PropertiesSearchMode + /// The logical operator with which to append the query. + public let logicalOperator: FileProperties.LogicalOperator + public init(query: String, mode: FileProperties.PropertiesSearchMode, logicalOperator: FileProperties.LogicalOperator = .orOperator) { + stringValidator()(query) + self.query = query + self.mode = mode + self.logicalOperator = logicalOperator + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertiesSearchQuerySerializer().serialize(self)))" + } + } + open class PropertiesSearchQuerySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertiesSearchQuery) -> JSON { + let output = [ + "query": Serialization._StringSerializer.serialize(value.query), + "mode": FileProperties.PropertiesSearchModeSerializer().serialize(value.mode), + "logical_operator": FileProperties.LogicalOperatorSerializer().serialize(value.logicalOperator), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertiesSearchQuery { + switch json { + case .dictionary(let dict): + let query = Serialization._StringSerializer.deserialize(dict["query"] ?? .null) + let mode = FileProperties.PropertiesSearchModeSerializer().deserialize(dict["mode"] ?? .null) + let logicalOperator = FileProperties.LogicalOperatorSerializer().deserialize(dict["logical_operator"] ?? FileProperties.LogicalOperatorSerializer().serialize(.orOperator)) + return PropertiesSearchQuery(query: query, mode: mode, logicalOperator: logicalOperator) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PropertiesSearchResult struct + open class PropertiesSearchResult: CustomStringConvertible { + /// A list (possibly empty) of matches for the query. + public let matches: Array + /// Pass the cursor into propertiesSearchContinue to continue to receive search results. Cursor will be null + /// when there are no more results. + public let cursor: String? + public init(matches: Array, cursor: String? = nil) { + self.matches = matches + nullableValidator(stringValidator(minLength: 1))(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertiesSearchResultSerializer().serialize(self)))" + } + } + open class PropertiesSearchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertiesSearchResult) -> JSON { + let output = [ + "matches": ArraySerializer(FileProperties.PropertiesSearchMatchSerializer()).serialize(value.matches), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertiesSearchResult { + switch json { + case .dictionary(let dict): + let matches = ArraySerializer(FileProperties.PropertiesSearchMatchSerializer()).deserialize(dict["matches"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return PropertiesSearchResult(matches: matches, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Raw key/value data to be associated with a Dropbox file. Property fields are added to Dropbox files as a + /// PropertyGroup. + open class PropertyField: CustomStringConvertible { + /// Key of the property field associated with a file and template. Keys can be up to 256 bytes. + public let name: String + /// Value of the property field associated with a file and template. Values can be up to 1024 bytes. + public let value: String + public init(name: String, value: String) { + stringValidator()(name) + self.name = name + stringValidator()(value) + self.value = value + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertyFieldSerializer().serialize(self)))" + } + } + open class PropertyFieldSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertyField) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "value": Serialization._StringSerializer.serialize(value.value), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertyField { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let value = Serialization._StringSerializer.deserialize(dict["value"] ?? .null) + return PropertyField(name: name, value: value) + default: + fatalError("Type error deserializing") + } + } + } + + /// Defines how a single property field may be structured. Used exclusively by PropertyGroupTemplate. + open class PropertyFieldTemplate: CustomStringConvertible { + /// Key of the property field being described. Property field keys can be up to 256 bytes. + public let name: String + /// Description of the property field. Property field descriptions can be up to 1024 bytes. + public let description_: String + /// Data type of the value of this property field. This type will be enforced upon property creation and + /// modifications. + public let type: FileProperties.PropertyType + public init(name: String, description_: String, type: FileProperties.PropertyType) { + stringValidator()(name) + self.name = name + stringValidator()(description_) + self.description_ = description_ + self.type = type + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertyFieldTemplateSerializer().serialize(self)))" + } + } + open class PropertyFieldTemplateSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertyFieldTemplate) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "description": Serialization._StringSerializer.serialize(value.description_), + "type": FileProperties.PropertyTypeSerializer().serialize(value.type), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertyFieldTemplate { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + let type = FileProperties.PropertyTypeSerializer().deserialize(dict["type"] ?? .null) + return PropertyFieldTemplate(name: name, description_: description_, type: type) + default: + fatalError("Type error deserializing") + } + } + } + + /// A subset of the property fields described by the corresponding PropertyGroupTemplate. Properties are always + /// added to a Dropbox file as a PropertyGroup. The possible key names and value types in this group are defined by + /// the corresponding PropertyGroupTemplate. + open class PropertyGroup: CustomStringConvertible { + /// A unique identifier for the associated template. + public let templateId: String + /// The actual properties associated with the template. There can be up to 32 property types per template. + public let fields: Array + public init(templateId: String, fields: Array) { + stringValidator(minLength: 1, pattern: "(/|ptid:).*")(templateId) + self.templateId = templateId + self.fields = fields + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertyGroupSerializer().serialize(self)))" + } + } + open class PropertyGroupSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertyGroup) -> JSON { + let output = [ + "template_id": Serialization._StringSerializer.serialize(value.templateId), + "fields": ArraySerializer(FileProperties.PropertyFieldSerializer()).serialize(value.fields), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertyGroup { + switch json { + case .dictionary(let dict): + let templateId = Serialization._StringSerializer.deserialize(dict["template_id"] ?? .null) + let fields = ArraySerializer(FileProperties.PropertyFieldSerializer()).deserialize(dict["fields"] ?? .null) + return PropertyGroup(templateId: templateId, fields: fields) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PropertyGroupUpdate struct + open class PropertyGroupUpdate: CustomStringConvertible { + /// A unique identifier for a property template. + public let templateId: String + /// Property fields to update. If the property field already exists, it is updated. If the property field + /// doesn't exist, the property group is added. + public let addOrUpdateFields: Array? + /// Property fields to remove (by name), provided they exist. + public let removeFields: Array? + public init(templateId: String, addOrUpdateFields: Array? = nil, removeFields: Array? = nil) { + stringValidator(minLength: 1, pattern: "(/|ptid:).*")(templateId) + self.templateId = templateId + self.addOrUpdateFields = addOrUpdateFields + nullableValidator(arrayValidator(itemValidator: stringValidator()))(removeFields) + self.removeFields = removeFields + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertyGroupUpdateSerializer().serialize(self)))" + } + } + open class PropertyGroupUpdateSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertyGroupUpdate) -> JSON { + let output = [ + "template_id": Serialization._StringSerializer.serialize(value.templateId), + "add_or_update_fields": NullableSerializer(ArraySerializer(FileProperties.PropertyFieldSerializer())).serialize(value.addOrUpdateFields), + "remove_fields": NullableSerializer(ArraySerializer(Serialization._StringSerializer)).serialize(value.removeFields), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PropertyGroupUpdate { + switch json { + case .dictionary(let dict): + let templateId = Serialization._StringSerializer.deserialize(dict["template_id"] ?? .null) + let addOrUpdateFields = NullableSerializer(ArraySerializer(FileProperties.PropertyFieldSerializer())).deserialize(dict["add_or_update_fields"] ?? .null) + let removeFields = NullableSerializer(ArraySerializer(Serialization._StringSerializer)).deserialize(dict["remove_fields"] ?? .null) + return PropertyGroupUpdate(templateId: templateId, addOrUpdateFields: addOrUpdateFields, removeFields: removeFields) + default: + fatalError("Type error deserializing") + } + } + } + + /// Data type of the given property field added. + public enum PropertyType: CustomStringConvertible { + /// The associated property field will be of type string. Unicode is supported. + case string_ + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PropertyTypeSerializer().serialize(self)))" + } + } + open class PropertyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PropertyType) -> JSON { + switch value { + case .string_: + var d = [String: JSON]() + d[".tag"] = .str("string") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PropertyType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "string": + return PropertyType.string_ + case "other": + return PropertyType.other + default: + return PropertyType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RemovePropertiesArg struct + open class RemovePropertiesArg: CustomStringConvertible { + /// A unique identifier for the file or folder. + public let path: String + /// A list of identifiers for a template created by templatesAddForUser or templatesAddForTeam. + public let propertyTemplateIds: Array + public init(path: String, propertyTemplateIds: Array) { + stringValidator(pattern: "/(.|[\\r\\n])*|id:.*|(ns:[0-9]+(/.*)?)")(path) + self.path = path + arrayValidator(itemValidator: stringValidator(minLength: 1, pattern: "(/|ptid:).*"))(propertyTemplateIds) + self.propertyTemplateIds = propertyTemplateIds + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemovePropertiesArgSerializer().serialize(self)))" + } + } + open class RemovePropertiesArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemovePropertiesArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "property_template_ids": ArraySerializer(Serialization._StringSerializer).serialize(value.propertyTemplateIds), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RemovePropertiesArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let propertyTemplateIds = ArraySerializer(Serialization._StringSerializer).deserialize(dict["property_template_ids"] ?? .null) + return RemovePropertiesArg(path: path, propertyTemplateIds: propertyTemplateIds) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RemovePropertiesError union + public enum RemovePropertiesError: CustomStringConvertible { + /// Template does not exist for the given identifier. + case templateNotFound(String) + /// You do not have permission to modify this template. + case restrictedContent + /// An unspecified error. + case other + /// An unspecified error. + case path(FileProperties.LookupError) + /// This folder cannot be tagged. Tagging folders is not supported for team-owned templates. + case unsupportedFolder + /// An unspecified error. + case propertyGroupLookup(FileProperties.LookUpPropertiesError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemovePropertiesErrorSerializer().serialize(self)))" + } + } + open class RemovePropertiesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemovePropertiesError) -> JSON { + switch value { + case .templateNotFound(let arg): + var d = ["template_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("template_not_found") + return .dictionary(d) + case .restrictedContent: + var d = [String: JSON]() + d[".tag"] = .str("restricted_content") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .path(let arg): + var d = ["path": FileProperties.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .unsupportedFolder: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_folder") + return .dictionary(d) + case .propertyGroupLookup(let arg): + var d = ["property_group_lookup": FileProperties.LookUpPropertiesErrorSerializer().serialize(arg)] + d[".tag"] = .str("property_group_lookup") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RemovePropertiesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "template_not_found": + let v = Serialization._StringSerializer.deserialize(d["template_not_found"] ?? .null) + return RemovePropertiesError.templateNotFound(v) + case "restricted_content": + return RemovePropertiesError.restrictedContent + case "other": + return RemovePropertiesError.other + case "path": + let v = FileProperties.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return RemovePropertiesError.path(v) + case "unsupported_folder": + return RemovePropertiesError.unsupportedFolder + case "property_group_lookup": + let v = FileProperties.LookUpPropertiesErrorSerializer().deserialize(d["property_group_lookup"] ?? .null) + return RemovePropertiesError.propertyGroupLookup(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RemoveTemplateArg struct + open class RemoveTemplateArg: CustomStringConvertible { + /// An identifier for a template created by templatesAddForUser or templatesAddForTeam. + public let templateId: String + public init(templateId: String) { + stringValidator(minLength: 1, pattern: "(/|ptid:).*")(templateId) + self.templateId = templateId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemoveTemplateArgSerializer().serialize(self)))" + } + } + open class RemoveTemplateArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemoveTemplateArg) -> JSON { + let output = [ + "template_id": Serialization._StringSerializer.serialize(value.templateId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RemoveTemplateArg { + switch json { + case .dictionary(let dict): + let templateId = Serialization._StringSerializer.deserialize(dict["template_id"] ?? .null) + return RemoveTemplateArg(templateId: templateId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TemplateFilterBase union + public enum TemplateFilterBase: CustomStringConvertible { + /// Only templates with an ID in the supplied list will be returned (a subset of templates will be returned). + case filterSome(Array) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TemplateFilterBaseSerializer().serialize(self)))" + } + } + open class TemplateFilterBaseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TemplateFilterBase) -> JSON { + switch value { + case .filterSome(let arg): + var d = ["filter_some": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("filter_some") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TemplateFilterBase { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "filter_some": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["filter_some"] ?? .null) + return TemplateFilterBase.filterSome(v) + case "other": + return TemplateFilterBase.other + default: + return TemplateFilterBase.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TemplateFilter union + public enum TemplateFilter: CustomStringConvertible { + /// Only templates with an ID in the supplied list will be returned (a subset of templates will be returned). + case filterSome(Array) + /// An unspecified error. + case other + /// No templates will be filtered from the result (all templates will be returned). + case filterNone + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TemplateFilterSerializer().serialize(self)))" + } + } + open class TemplateFilterSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TemplateFilter) -> JSON { + switch value { + case .filterSome(let arg): + var d = ["filter_some": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("filter_some") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .filterNone: + var d = [String: JSON]() + d[".tag"] = .str("filter_none") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TemplateFilter { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "filter_some": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["filter_some"] ?? .null) + return TemplateFilter.filterSome(v) + case "other": + return TemplateFilter.other + case "filter_none": + return TemplateFilter.filterNone + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TemplateOwnerType union + public enum TemplateOwnerType: CustomStringConvertible { + /// Template will be associated with a user. + case user + /// Template will be associated with a team. + case team + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TemplateOwnerTypeSerializer().serialize(self)))" + } + } + open class TemplateOwnerTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TemplateOwnerType) -> JSON { + switch value { + case .user: + var d = [String: JSON]() + d[".tag"] = .str("user") + return .dictionary(d) + case .team: + var d = [String: JSON]() + d[".tag"] = .str("team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TemplateOwnerType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user": + return TemplateOwnerType.user + case "team": + return TemplateOwnerType.team + case "other": + return TemplateOwnerType.other + default: + return TemplateOwnerType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UpdatePropertiesArg struct + open class UpdatePropertiesArg: CustomStringConvertible { + /// A unique identifier for the file or folder. + public let path: String + /// The property groups "delta" updates to apply. + public let updatePropertyGroups: Array + public init(path: String, updatePropertyGroups: Array) { + stringValidator(pattern: "/(.|[\\r\\n])*|id:.*|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.updatePropertyGroups = updatePropertyGroups + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdatePropertiesArgSerializer().serialize(self)))" + } + } + open class UpdatePropertiesArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdatePropertiesArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "update_property_groups": ArraySerializer(FileProperties.PropertyGroupUpdateSerializer()).serialize(value.updatePropertyGroups), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UpdatePropertiesArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let updatePropertyGroups = ArraySerializer(FileProperties.PropertyGroupUpdateSerializer()).deserialize(dict["update_property_groups"] ?? .null) + return UpdatePropertiesArg(path: path, updatePropertyGroups: updatePropertyGroups) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UpdatePropertiesError union + public enum UpdatePropertiesError: CustomStringConvertible { + /// Template does not exist for the given identifier. + case templateNotFound(String) + /// You do not have permission to modify this template. + case restrictedContent + /// An unspecified error. + case other + /// An unspecified error. + case path(FileProperties.LookupError) + /// This folder cannot be tagged. Tagging folders is not supported for team-owned templates. + case unsupportedFolder + /// One or more of the supplied property field values is too large. + case propertyFieldTooLarge + /// One or more of the supplied property fields does not conform to the template specifications. + case doesNotFitTemplate + /// An unspecified error. + case propertyGroupLookup(FileProperties.LookUpPropertiesError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdatePropertiesErrorSerializer().serialize(self)))" + } + } + open class UpdatePropertiesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdatePropertiesError) -> JSON { + switch value { + case .templateNotFound(let arg): + var d = ["template_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("template_not_found") + return .dictionary(d) + case .restrictedContent: + var d = [String: JSON]() + d[".tag"] = .str("restricted_content") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .path(let arg): + var d = ["path": FileProperties.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .unsupportedFolder: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_folder") + return .dictionary(d) + case .propertyFieldTooLarge: + var d = [String: JSON]() + d[".tag"] = .str("property_field_too_large") + return .dictionary(d) + case .doesNotFitTemplate: + var d = [String: JSON]() + d[".tag"] = .str("does_not_fit_template") + return .dictionary(d) + case .propertyGroupLookup(let arg): + var d = ["property_group_lookup": FileProperties.LookUpPropertiesErrorSerializer().serialize(arg)] + d[".tag"] = .str("property_group_lookup") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UpdatePropertiesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "template_not_found": + let v = Serialization._StringSerializer.deserialize(d["template_not_found"] ?? .null) + return UpdatePropertiesError.templateNotFound(v) + case "restricted_content": + return UpdatePropertiesError.restrictedContent + case "other": + return UpdatePropertiesError.other + case "path": + let v = FileProperties.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return UpdatePropertiesError.path(v) + case "unsupported_folder": + return UpdatePropertiesError.unsupportedFolder + case "property_field_too_large": + return UpdatePropertiesError.propertyFieldTooLarge + case "does_not_fit_template": + return UpdatePropertiesError.doesNotFitTemplate + case "property_group_lookup": + let v = FileProperties.LookUpPropertiesErrorSerializer().deserialize(d["property_group_lookup"] ?? .null) + return UpdatePropertiesError.propertyGroupLookup(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UpdateTemplateArg struct + open class UpdateTemplateArg: CustomStringConvertible { + /// An identifier for template added by See templatesAddForUser or templatesAddForTeam. + public let templateId: String + /// A display name for the template. template names can be up to 256 bytes. + public let name: String? + /// Description for the new template. Template descriptions can be up to 1024 bytes. + public let description_: String? + /// Property field templates to be added to the group template. There can be up to 32 properties in a single + /// template. + public let addFields: Array? + public init(templateId: String, name: String? = nil, description_: String? = nil, addFields: Array? = nil) { + stringValidator(minLength: 1, pattern: "(/|ptid:).*")(templateId) + self.templateId = templateId + nullableValidator(stringValidator())(name) + self.name = name + nullableValidator(stringValidator())(description_) + self.description_ = description_ + self.addFields = addFields + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateTemplateArgSerializer().serialize(self)))" + } + } + open class UpdateTemplateArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateTemplateArg) -> JSON { + let output = [ + "template_id": Serialization._StringSerializer.serialize(value.templateId), + "name": NullableSerializer(Serialization._StringSerializer).serialize(value.name), + "description": NullableSerializer(Serialization._StringSerializer).serialize(value.description_), + "add_fields": NullableSerializer(ArraySerializer(FileProperties.PropertyFieldTemplateSerializer())).serialize(value.addFields), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UpdateTemplateArg { + switch json { + case .dictionary(let dict): + let templateId = Serialization._StringSerializer.deserialize(dict["template_id"] ?? .null) + let name = NullableSerializer(Serialization._StringSerializer).deserialize(dict["name"] ?? .null) + let description_ = NullableSerializer(Serialization._StringSerializer).deserialize(dict["description"] ?? .null) + let addFields = NullableSerializer(ArraySerializer(FileProperties.PropertyFieldTemplateSerializer())).deserialize(dict["add_fields"] ?? .null) + return UpdateTemplateArg(templateId: templateId, name: name, description_: description_, addFields: addFields) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UpdateTemplateResult struct + open class UpdateTemplateResult: CustomStringConvertible { + /// An identifier for template added by route See templatesAddForUser or templatesAddForTeam. + public let templateId: String + public init(templateId: String) { + stringValidator(minLength: 1, pattern: "(/|ptid:).*")(templateId) + self.templateId = templateId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateTemplateResultSerializer().serialize(self)))" + } + } + open class UpdateTemplateResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateTemplateResult) -> JSON { + let output = [ + "template_id": Serialization._StringSerializer.serialize(value.templateId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UpdateTemplateResult { + switch json { + case .dictionary(let dict): + let templateId = Serialization._StringSerializer.deserialize(dict["template_id"] ?? .null) + return UpdateTemplateResult(templateId: templateId) + default: + fatalError("Type error deserializing") + } + } + } + + + /// Stone Route Objects + + static let propertiesAdd = Route( + name: "properties/add", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.AddPropertiesArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.AddPropertiesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesOverwrite = Route( + name: "properties/overwrite", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.OverwritePropertyGroupArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.InvalidPropertyGroupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesRemove = Route( + name: "properties/remove", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.RemovePropertiesArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.RemovePropertiesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesSearch = Route( + name: "properties/search", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.PropertiesSearchArgSerializer(), + responseSerializer: FileProperties.PropertiesSearchResultSerializer(), + errorSerializer: FileProperties.PropertiesSearchErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesSearchContinue = Route( + name: "properties/search/continue", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.PropertiesSearchContinueArgSerializer(), + responseSerializer: FileProperties.PropertiesSearchResultSerializer(), + errorSerializer: FileProperties.PropertiesSearchContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesUpdate = Route( + name: "properties/update", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.UpdatePropertiesArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.UpdatePropertiesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesAddForTeam = Route( + name: "templates/add_for_team", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.AddTemplateArgSerializer(), + responseSerializer: FileProperties.AddTemplateResultSerializer(), + errorSerializer: FileProperties.ModifyTemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesAddForUser = Route( + name: "templates/add_for_user", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.AddTemplateArgSerializer(), + responseSerializer: FileProperties.AddTemplateResultSerializer(), + errorSerializer: FileProperties.ModifyTemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesGetForTeam = Route( + name: "templates/get_for_team", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.GetTemplateArgSerializer(), + responseSerializer: FileProperties.GetTemplateResultSerializer(), + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesGetForUser = Route( + name: "templates/get_for_user", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.GetTemplateArgSerializer(), + responseSerializer: FileProperties.GetTemplateResultSerializer(), + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesListForTeam = Route( + name: "templates/list_for_team", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: Serialization._VoidSerializer, + responseSerializer: FileProperties.ListTemplateResultSerializer(), + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesListForUser = Route( + name: "templates/list_for_user", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: Serialization._VoidSerializer, + responseSerializer: FileProperties.ListTemplateResultSerializer(), + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesRemoveForTeam = Route( + name: "templates/remove_for_team", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.RemoveTemplateArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesRemoveForUser = Route( + name: "templates/remove_for_user", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.RemoveTemplateArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesUpdateForTeam = Route( + name: "templates/update_for_team", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.UpdateTemplateArgSerializer(), + responseSerializer: FileProperties.UpdateTemplateResultSerializer(), + errorSerializer: FileProperties.ModifyTemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let templatesUpdateForUser = Route( + name: "templates/update_for_user", + version: 1, + namespace: "file_properties", + deprecated: false, + argSerializer: FileProperties.UpdateTemplateArgSerializer(), + responseSerializer: FileProperties.UpdateTemplateResultSerializer(), + errorSerializer: FileProperties.ModifyTemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FilePropertiesRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FilePropertiesRoutes.swift new file mode 100644 index 0000000..782cf1b --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FilePropertiesRoutes.swift @@ -0,0 +1,231 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the file_properties namespace +open class FilePropertiesRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// Add property groups to a Dropbox file. See templatesAddForUser or templatesAddForTeam to create new templates. + /// + /// - parameter path: A unique identifier for the file or folder. + /// - parameter propertyGroups: The property groups which are to be added to a Dropbox file. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.AddPropertiesError` object on failure. + @discardableResult open func propertiesAdd(path: String, propertyGroups: Array) -> RpcRequest { + let route = FileProperties.propertiesAdd + let serverArgs = FileProperties.AddPropertiesArg(path: path, propertyGroups: propertyGroups) + return client.request(route, serverArgs: serverArgs) + } + + /// Overwrite property groups associated with a file. This endpoint should be used instead of propertiesUpdate when + /// property groups are being updated via a "snapshot" instead of via a "delta". In other words, this endpoint will + /// delete all omitted fields from a property group, whereas propertiesUpdate will only delete fields that are + /// explicitly marked for deletion. + /// + /// - parameter path: A unique identifier for the file or folder. + /// - parameter propertyGroups: The property groups "snapshot" updates to force apply. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.InvalidPropertyGroupError` object on failure. + @discardableResult open func propertiesOverwrite(path: String, propertyGroups: Array) -> RpcRequest { + let route = FileProperties.propertiesOverwrite + let serverArgs = FileProperties.OverwritePropertyGroupArg(path: path, propertyGroups: propertyGroups) + return client.request(route, serverArgs: serverArgs) + } + + /// Permanently removes the specified property group from the file. To remove specific property field key value + /// pairs, see propertiesUpdate. To update a template, see templatesUpdateForUser or templatesUpdateForTeam. To + /// remove a template, see templatesRemoveForUser or templatesRemoveForTeam. + /// + /// - parameter path: A unique identifier for the file or folder. + /// - parameter propertyTemplateIds: A list of identifiers for a template created by templatesAddForUser or + /// templatesAddForTeam. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.RemovePropertiesError` object on failure. + @discardableResult open func propertiesRemove(path: String, propertyTemplateIds: Array) -> RpcRequest { + let route = FileProperties.propertiesRemove + let serverArgs = FileProperties.RemovePropertiesArg(path: path, propertyTemplateIds: propertyTemplateIds) + return client.request(route, serverArgs: serverArgs) + } + + /// Search across property templates for particular property field values. + /// + /// - parameter queries: Queries to search. + /// - parameter templateFilter: Filter results to contain only properties associated with these template IDs. + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.PropertiesSearchResult` + /// object on success or a `FileProperties.PropertiesSearchError` object on failure. + @discardableResult open func propertiesSearch(queries: Array, templateFilter: FileProperties.TemplateFilter = .filterNone) -> RpcRequest { + let route = FileProperties.propertiesSearch + let serverArgs = FileProperties.PropertiesSearchArg(queries: queries, templateFilter: templateFilter) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from propertiesSearch, use this to paginate through all search results. + /// + /// - parameter cursor: The cursor returned by your last call to propertiesSearch or propertiesSearchContinue. + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.PropertiesSearchResult` + /// object on success or a `FileProperties.PropertiesSearchContinueError` object on failure. + @discardableResult open func propertiesSearchContinue(cursor: String) -> RpcRequest { + let route = FileProperties.propertiesSearchContinue + let serverArgs = FileProperties.PropertiesSearchContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Add, update or remove properties associated with the supplied file and templates. This endpoint should be used + /// instead of propertiesOverwrite when property groups are being updated via a "delta" instead of via a "snapshot" + /// . In other words, this endpoint will not delete any omitted fields from a property group, whereas + /// propertiesOverwrite will delete any fields that are omitted from a property group. + /// + /// - parameter path: A unique identifier for the file or folder. + /// - parameter updatePropertyGroups: The property groups "delta" updates to apply. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.UpdatePropertiesError` object on failure. + @discardableResult open func propertiesUpdate(path: String, updatePropertyGroups: Array) -> RpcRequest { + let route = FileProperties.propertiesUpdate + let serverArgs = FileProperties.UpdatePropertiesArg(path: path, updatePropertyGroups: updatePropertyGroups) + return client.request(route, serverArgs: serverArgs) + } + + /// Add a template associated with a team. See propertiesAdd to add properties to a file or folder. Note: this + /// endpoint will create team-owned templates. + /// + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.AddTemplateResult` object + /// on success or a `FileProperties.ModifyTemplateError` object on failure. + @discardableResult open func templatesAddForTeam(name: String, description_: String, fields: Array) -> RpcRequest { + let route = FileProperties.templatesAddForTeam + let serverArgs = FileProperties.AddTemplateArg(name: name, description_: description_, fields: fields) + return client.request(route, serverArgs: serverArgs) + } + + /// Add a template associated with a user. See propertiesAdd to add properties to a file. This endpoint can't be + /// called on a team member or admin's behalf. + /// + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.AddTemplateResult` object + /// on success or a `FileProperties.ModifyTemplateError` object on failure. + @discardableResult open func templatesAddForUser(name: String, description_: String, fields: Array) -> RpcRequest { + let route = FileProperties.templatesAddForUser + let serverArgs = FileProperties.AddTemplateArg(name: name, description_: description_, fields: fields) + return client.request(route, serverArgs: serverArgs) + } + + /// Get the schema for a specified template. + /// + /// - parameter templateId: An identifier for template added by route See templatesAddForUser or + /// templatesAddForTeam. + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.GetTemplateResult` object + /// on success or a `FileProperties.TemplateError` object on failure. + @discardableResult open func templatesGetForTeam(templateId: String) -> RpcRequest { + let route = FileProperties.templatesGetForTeam + let serverArgs = FileProperties.GetTemplateArg(templateId: templateId) + return client.request(route, serverArgs: serverArgs) + } + + /// Get the schema for a specified template. This endpoint can't be called on a team member or admin's behalf. + /// + /// - parameter templateId: An identifier for template added by route See templatesAddForUser or + /// templatesAddForTeam. + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.GetTemplateResult` object + /// on success or a `FileProperties.TemplateError` object on failure. + @discardableResult open func templatesGetForUser(templateId: String) -> RpcRequest { + let route = FileProperties.templatesGetForUser + let serverArgs = FileProperties.GetTemplateArg(templateId: templateId) + return client.request(route, serverArgs: serverArgs) + } + + /// Get the template identifiers for a team. To get the schema of each template use templatesGetForTeam. + /// + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.ListTemplateResult` object + /// on success or a `FileProperties.TemplateError` object on failure. + @discardableResult open func templatesListForTeam() -> RpcRequest { + let route = FileProperties.templatesListForTeam + return client.request(route) + } + + /// Get the template identifiers for a team. To get the schema of each template use templatesGetForUser. This + /// endpoint can't be called on a team member or admin's behalf. + /// + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.ListTemplateResult` object + /// on success or a `FileProperties.TemplateError` object on failure. + @discardableResult open func templatesListForUser() -> RpcRequest { + let route = FileProperties.templatesListForUser + return client.request(route) + } + + /// Permanently removes the specified template created from templatesAddForUser. All properties associated with the + /// template will also be removed. This action cannot be undone. + /// + /// - parameter templateId: An identifier for a template created by templatesAddForUser or templatesAddForTeam. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.TemplateError` object on failure. + @discardableResult open func templatesRemoveForTeam(templateId: String) -> RpcRequest { + let route = FileProperties.templatesRemoveForTeam + let serverArgs = FileProperties.RemoveTemplateArg(templateId: templateId) + return client.request(route, serverArgs: serverArgs) + } + + /// Permanently removes the specified template created from templatesAddForUser. All properties associated with the + /// template will also be removed. This action cannot be undone. + /// + /// - parameter templateId: An identifier for a template created by templatesAddForUser or templatesAddForTeam. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.TemplateError` object on failure. + @discardableResult open func templatesRemoveForUser(templateId: String) -> RpcRequest { + let route = FileProperties.templatesRemoveForUser + let serverArgs = FileProperties.RemoveTemplateArg(templateId: templateId) + return client.request(route, serverArgs: serverArgs) + } + + /// Update a template associated with a team. This route can update the template name, the template description and + /// add optional properties to templates. + /// + /// - parameter templateId: An identifier for template added by See templatesAddForUser or templatesAddForTeam. + /// - parameter name: A display name for the template. template names can be up to 256 bytes. + /// - parameter description_: Description for the new template. Template descriptions can be up to 1024 bytes. + /// - parameter addFields: Property field templates to be added to the group template. There can be up to 32 + /// properties in a single template. + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.UpdateTemplateResult` + /// object on success or a `FileProperties.ModifyTemplateError` object on failure. + @discardableResult open func templatesUpdateForTeam(templateId: String, name: String? = nil, description_: String? = nil, addFields: Array? = nil) -> RpcRequest { + let route = FileProperties.templatesUpdateForTeam + let serverArgs = FileProperties.UpdateTemplateArg(templateId: templateId, name: name, description_: description_, addFields: addFields) + return client.request(route, serverArgs: serverArgs) + } + + /// Update a template associated with a user. This route can update the template name, the template description and + /// add optional properties to templates. This endpoint can't be called on a team member or admin's behalf. + /// + /// - parameter templateId: An identifier for template added by See templatesAddForUser or templatesAddForTeam. + /// - parameter name: A display name for the template. template names can be up to 256 bytes. + /// - parameter description_: Description for the new template. Template descriptions can be up to 1024 bytes. + /// - parameter addFields: Property field templates to be added to the group template. There can be up to 32 + /// properties in a single template. + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.UpdateTemplateResult` + /// object on success or a `FileProperties.ModifyTemplateError` object on failure. + @discardableResult open func templatesUpdateForUser(templateId: String, name: String? = nil, description_: String? = nil, addFields: Array? = nil) -> RpcRequest { + let route = FileProperties.templatesUpdateForUser + let serverArgs = FileProperties.UpdateTemplateArg(templateId: templateId, name: name, description_: description_, addFields: addFields) + return client.request(route, serverArgs: serverArgs) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileRequests.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileRequests.swift new file mode 100644 index 0000000..46430d3 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileRequests.swift @@ -0,0 +1,936 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the file_requests namespace +open class FileRequests { + /// Arguments for create. + open class CreateFileRequestArgs: CustomStringConvertible { + /// The title of the file request. Must not be empty. + public let title: String + /// The path of the folder in the Dropbox where uploaded files will be sent. For apps with the app folder + /// permission, this will be relative to the app folder. + public let destination: String + /// The deadline for the file request. Deadlines can only be set by Professional and Business accounts. + public let deadline: FileRequests.FileRequestDeadline? + /// Whether or not the file request should be open. If the file request is closed, it will not accept any file + /// submissions, but it can be opened later. + public let open: Bool + public init(title: String, destination: String, deadline: FileRequests.FileRequestDeadline? = nil, open: Bool = true) { + stringValidator(minLength: 1)(title) + self.title = title + stringValidator(pattern: "/(.|[\\r\\n])*")(destination) + self.destination = destination + self.deadline = deadline + self.open = open + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFileRequestArgsSerializer().serialize(self)))" + } + } + open class CreateFileRequestArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFileRequestArgs) -> JSON { + let output = [ + "title": Serialization._StringSerializer.serialize(value.title), + "destination": Serialization._StringSerializer.serialize(value.destination), + "deadline": NullableSerializer(FileRequests.FileRequestDeadlineSerializer()).serialize(value.deadline), + "open": Serialization._BoolSerializer.serialize(value.open), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateFileRequestArgs { + switch json { + case .dictionary(let dict): + let title = Serialization._StringSerializer.deserialize(dict["title"] ?? .null) + let destination = Serialization._StringSerializer.deserialize(dict["destination"] ?? .null) + let deadline = NullableSerializer(FileRequests.FileRequestDeadlineSerializer()).deserialize(dict["deadline"] ?? .null) + let open = Serialization._BoolSerializer.deserialize(dict["open"] ?? .number(1)) + return CreateFileRequestArgs(title: title, destination: destination, deadline: deadline, open: open) + default: + fatalError("Type error deserializing") + } + } + } + + /// There is an error accessing the file requests functionality. + public enum GeneralFileRequestsError: CustomStringConvertible { + /// This user's Dropbox Business team doesn't allow file requests. + case disabledForTeam + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GeneralFileRequestsErrorSerializer().serialize(self)))" + } + } + open class GeneralFileRequestsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GeneralFileRequestsError) -> JSON { + switch value { + case .disabledForTeam: + var d = [String: JSON]() + d[".tag"] = .str("disabled_for_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GeneralFileRequestsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled_for_team": + return GeneralFileRequestsError.disabledForTeam + case "other": + return GeneralFileRequestsError.other + default: + return GeneralFileRequestsError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// There is an error with the file request. + public enum FileRequestError: CustomStringConvertible { + /// This user's Dropbox Business team doesn't allow file requests. + case disabledForTeam + /// An unspecified error. + case other + /// This file request ID was not found. + case notFound + /// The specified path is not a folder. + case notAFolder + /// This file request is not accessible to this app. Apps with the app folder permission can only access file + /// requests in their app folder. + case appLacksAccess + /// This user doesn't have permission to access or modify this file request. + case noPermission + /// This user's email address is not verified. File requests are only available on accounts with a verified + /// email address. Users can verify their email address here https://www.dropbox.com/help/317. + case emailUnverified + /// There was an error validating the request. For example, the title was invalid, or there were disallowed + /// characters in the destination path. + case validationError + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestErrorSerializer().serialize(self)))" + } + } + open class FileRequestErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestError) -> JSON { + switch value { + case .disabledForTeam: + var d = [String: JSON]() + d[".tag"] = .str("disabled_for_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .notAFolder: + var d = [String: JSON]() + d[".tag"] = .str("not_a_folder") + return .dictionary(d) + case .appLacksAccess: + var d = [String: JSON]() + d[".tag"] = .str("app_lacks_access") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .emailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("email_unverified") + return .dictionary(d) + case .validationError: + var d = [String: JSON]() + d[".tag"] = .str("validation_error") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FileRequestError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled_for_team": + return FileRequestError.disabledForTeam + case "other": + return FileRequestError.other + case "not_found": + return FileRequestError.notFound + case "not_a_folder": + return FileRequestError.notAFolder + case "app_lacks_access": + return FileRequestError.appLacksAccess + case "no_permission": + return FileRequestError.noPermission + case "email_unverified": + return FileRequestError.emailUnverified + case "validation_error": + return FileRequestError.validationError + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// There was an error creating the file request. + public enum CreateFileRequestError: CustomStringConvertible { + /// This user's Dropbox Business team doesn't allow file requests. + case disabledForTeam + /// An unspecified error. + case other + /// This file request ID was not found. + case notFound + /// The specified path is not a folder. + case notAFolder + /// This file request is not accessible to this app. Apps with the app folder permission can only access file + /// requests in their app folder. + case appLacksAccess + /// This user doesn't have permission to access or modify this file request. + case noPermission + /// This user's email address is not verified. File requests are only available on accounts with a verified + /// email address. Users can verify their email address here https://www.dropbox.com/help/317. + case emailUnverified + /// There was an error validating the request. For example, the title was invalid, or there were disallowed + /// characters in the destination path. + case validationError + /// File requests are not available on the specified folder. + case invalidLocation + /// The user has reached the rate limit for creating file requests. The limit is currently 100 file requests per + /// day. + case rateLimit + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFileRequestErrorSerializer().serialize(self)))" + } + } + open class CreateFileRequestErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFileRequestError) -> JSON { + switch value { + case .disabledForTeam: + var d = [String: JSON]() + d[".tag"] = .str("disabled_for_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .notAFolder: + var d = [String: JSON]() + d[".tag"] = .str("not_a_folder") + return .dictionary(d) + case .appLacksAccess: + var d = [String: JSON]() + d[".tag"] = .str("app_lacks_access") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .emailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("email_unverified") + return .dictionary(d) + case .validationError: + var d = [String: JSON]() + d[".tag"] = .str("validation_error") + return .dictionary(d) + case .invalidLocation: + var d = [String: JSON]() + d[".tag"] = .str("invalid_location") + return .dictionary(d) + case .rateLimit: + var d = [String: JSON]() + d[".tag"] = .str("rate_limit") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CreateFileRequestError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled_for_team": + return CreateFileRequestError.disabledForTeam + case "other": + return CreateFileRequestError.other + case "not_found": + return CreateFileRequestError.notFound + case "not_a_folder": + return CreateFileRequestError.notAFolder + case "app_lacks_access": + return CreateFileRequestError.appLacksAccess + case "no_permission": + return CreateFileRequestError.noPermission + case "email_unverified": + return CreateFileRequestError.emailUnverified + case "validation_error": + return CreateFileRequestError.validationError + case "invalid_location": + return CreateFileRequestError.invalidLocation + case "rate_limit": + return CreateFileRequestError.rateLimit + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// A file request https://www.dropbox.com/help/9090 for receiving files into the user's Dropbox account. + open class FileRequest: CustomStringConvertible { + /// The ID of the file request. + public let id: String + /// The URL of the file request. + public let url: String + /// The title of the file request. + public let title: String + /// The path of the folder in the Dropbox where uploaded files will be sent. This can be null if the destination + /// was removed. For apps with the app folder permission, this will be relative to the app folder. + public let destination: String? + /// When this file request was created. + public let created: Date + /// The deadline for this file request. Only set if the request has a deadline. + public let deadline: FileRequests.FileRequestDeadline? + /// Whether or not the file request is open. If the file request is closed, it will not accept any more file + /// submissions. + public let isOpen: Bool + /// The number of files this file request has received. + public let fileCount: Int64 + public init(id: String, url: String, title: String, created: Date, isOpen: Bool, fileCount: Int64, destination: String? = nil, deadline: FileRequests.FileRequestDeadline? = nil) { + stringValidator(minLength: 1, pattern: "[-_0-9a-zA-Z]+")(id) + self.id = id + stringValidator(minLength: 1)(url) + self.url = url + stringValidator(minLength: 1)(title) + self.title = title + nullableValidator(stringValidator(pattern: "/(.|[\\r\\n])*"))(destination) + self.destination = destination + self.created = created + self.deadline = deadline + self.isOpen = isOpen + comparableValidator()(fileCount) + self.fileCount = fileCount + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestSerializer().serialize(self)))" + } + } + open class FileRequestSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequest) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + "url": Serialization._StringSerializer.serialize(value.url), + "title": Serialization._StringSerializer.serialize(value.title), + "created": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.created), + "is_open": Serialization._BoolSerializer.serialize(value.isOpen), + "file_count": Serialization._Int64Serializer.serialize(value.fileCount), + "destination": NullableSerializer(Serialization._StringSerializer).serialize(value.destination), + "deadline": NullableSerializer(FileRequests.FileRequestDeadlineSerializer()).serialize(value.deadline), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequest { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let title = Serialization._StringSerializer.deserialize(dict["title"] ?? .null) + let created = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["created"] ?? .null) + let isOpen = Serialization._BoolSerializer.deserialize(dict["is_open"] ?? .null) + let fileCount = Serialization._Int64Serializer.deserialize(dict["file_count"] ?? .null) + let destination = NullableSerializer(Serialization._StringSerializer).deserialize(dict["destination"] ?? .null) + let deadline = NullableSerializer(FileRequests.FileRequestDeadlineSerializer()).deserialize(dict["deadline"] ?? .null) + return FileRequest(id: id, url: url, title: title, created: created, isOpen: isOpen, fileCount: fileCount, destination: destination, deadline: deadline) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRequestDeadline struct + open class FileRequestDeadline: CustomStringConvertible { + /// The deadline for this file request. + public let deadline: Date + /// If set, allow uploads after the deadline has passed. These uploads will be marked overdue. + public let allowLateUploads: FileRequests.GracePeriod? + public init(deadline: Date, allowLateUploads: FileRequests.GracePeriod? = nil) { + self.deadline = deadline + self.allowLateUploads = allowLateUploads + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestDeadlineSerializer().serialize(self)))" + } + } + open class FileRequestDeadlineSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestDeadline) -> JSON { + let output = [ + "deadline": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.deadline), + "allow_late_uploads": NullableSerializer(FileRequests.GracePeriodSerializer()).serialize(value.allowLateUploads), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestDeadline { + switch json { + case .dictionary(let dict): + let deadline = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["deadline"] ?? .null) + let allowLateUploads = NullableSerializer(FileRequests.GracePeriodSerializer()).deserialize(dict["allow_late_uploads"] ?? .null) + return FileRequestDeadline(deadline: deadline, allowLateUploads: allowLateUploads) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for get. + open class GetFileRequestArgs: CustomStringConvertible { + /// The ID of the file request to retrieve. + public let id: String + public init(id: String) { + stringValidator(minLength: 1, pattern: "[-_0-9a-zA-Z]+")(id) + self.id = id + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetFileRequestArgsSerializer().serialize(self)))" + } + } + open class GetFileRequestArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetFileRequestArgs) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetFileRequestArgs { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + return GetFileRequestArgs(id: id) + default: + fatalError("Type error deserializing") + } + } + } + + /// There was an error retrieving the specified file request. + public enum GetFileRequestError: CustomStringConvertible { + /// This user's Dropbox Business team doesn't allow file requests. + case disabledForTeam + /// An unspecified error. + case other + /// This file request ID was not found. + case notFound + /// The specified path is not a folder. + case notAFolder + /// This file request is not accessible to this app. Apps with the app folder permission can only access file + /// requests in their app folder. + case appLacksAccess + /// This user doesn't have permission to access or modify this file request. + case noPermission + /// This user's email address is not verified. File requests are only available on accounts with a verified + /// email address. Users can verify their email address here https://www.dropbox.com/help/317. + case emailUnverified + /// There was an error validating the request. For example, the title was invalid, or there were disallowed + /// characters in the destination path. + case validationError + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetFileRequestErrorSerializer().serialize(self)))" + } + } + open class GetFileRequestErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetFileRequestError) -> JSON { + switch value { + case .disabledForTeam: + var d = [String: JSON]() + d[".tag"] = .str("disabled_for_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .notAFolder: + var d = [String: JSON]() + d[".tag"] = .str("not_a_folder") + return .dictionary(d) + case .appLacksAccess: + var d = [String: JSON]() + d[".tag"] = .str("app_lacks_access") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .emailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("email_unverified") + return .dictionary(d) + case .validationError: + var d = [String: JSON]() + d[".tag"] = .str("validation_error") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetFileRequestError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled_for_team": + return GetFileRequestError.disabledForTeam + case "other": + return GetFileRequestError.other + case "not_found": + return GetFileRequestError.notFound + case "not_a_folder": + return GetFileRequestError.notAFolder + case "app_lacks_access": + return GetFileRequestError.appLacksAccess + case "no_permission": + return GetFileRequestError.noPermission + case "email_unverified": + return GetFileRequestError.emailUnverified + case "validation_error": + return GetFileRequestError.validationError + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GracePeriod union + public enum GracePeriod: CustomStringConvertible { + /// An unspecified error. + case oneDay + /// An unspecified error. + case twoDays + /// An unspecified error. + case sevenDays + /// An unspecified error. + case thirtyDays + /// An unspecified error. + case always + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GracePeriodSerializer().serialize(self)))" + } + } + open class GracePeriodSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GracePeriod) -> JSON { + switch value { + case .oneDay: + var d = [String: JSON]() + d[".tag"] = .str("one_day") + return .dictionary(d) + case .twoDays: + var d = [String: JSON]() + d[".tag"] = .str("two_days") + return .dictionary(d) + case .sevenDays: + var d = [String: JSON]() + d[".tag"] = .str("seven_days") + return .dictionary(d) + case .thirtyDays: + var d = [String: JSON]() + d[".tag"] = .str("thirty_days") + return .dictionary(d) + case .always: + var d = [String: JSON]() + d[".tag"] = .str("always") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GracePeriod { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "one_day": + return GracePeriod.oneDay + case "two_days": + return GracePeriod.twoDays + case "seven_days": + return GracePeriod.sevenDays + case "thirty_days": + return GracePeriod.thirtyDays + case "always": + return GracePeriod.always + case "other": + return GracePeriod.other + default: + return GracePeriod.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// There was an error retrieving the file requests. + public enum ListFileRequestsError: CustomStringConvertible { + /// This user's Dropbox Business team doesn't allow file requests. + case disabledForTeam + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileRequestsErrorSerializer().serialize(self)))" + } + } + open class ListFileRequestsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileRequestsError) -> JSON { + switch value { + case .disabledForTeam: + var d = [String: JSON]() + d[".tag"] = .str("disabled_for_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFileRequestsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled_for_team": + return ListFileRequestsError.disabledForTeam + case "other": + return ListFileRequestsError.other + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result for list_. + open class ListFileRequestsResult: CustomStringConvertible { + /// The file requests owned by this user. Apps with the app folder permission will only see file requests in + /// their app folder. + public let fileRequests: Array + public init(fileRequests: Array) { + self.fileRequests = fileRequests + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileRequestsResultSerializer().serialize(self)))" + } + } + open class ListFileRequestsResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileRequestsResult) -> JSON { + let output = [ + "file_requests": ArraySerializer(FileRequests.FileRequestSerializer()).serialize(value.fileRequests), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFileRequestsResult { + switch json { + case .dictionary(let dict): + let fileRequests = ArraySerializer(FileRequests.FileRequestSerializer()).deserialize(dict["file_requests"] ?? .null) + return ListFileRequestsResult(fileRequests: fileRequests) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for update. + open class UpdateFileRequestArgs: CustomStringConvertible { + /// The ID of the file request to update. + public let id: String + /// The new title of the file request. Must not be empty. + public let title: String? + /// The new path of the folder in the Dropbox where uploaded files will be sent. For apps with the app folder + /// permission, this will be relative to the app folder. + public let destination: String? + /// The new deadline for the file request. Deadlines can only be set by Professional and Business accounts. + public let deadline: FileRequests.UpdateFileRequestDeadline + /// Whether to set this file request as open or closed. + public let open: Bool? + public init(id: String, title: String? = nil, destination: String? = nil, deadline: FileRequests.UpdateFileRequestDeadline = .noUpdate, open: Bool? = nil) { + stringValidator(minLength: 1, pattern: "[-_0-9a-zA-Z]+")(id) + self.id = id + nullableValidator(stringValidator(minLength: 1))(title) + self.title = title + nullableValidator(stringValidator(pattern: "/(.|[\\r\\n])*"))(destination) + self.destination = destination + self.deadline = deadline + self.open = open + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateFileRequestArgsSerializer().serialize(self)))" + } + } + open class UpdateFileRequestArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateFileRequestArgs) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + "title": NullableSerializer(Serialization._StringSerializer).serialize(value.title), + "destination": NullableSerializer(Serialization._StringSerializer).serialize(value.destination), + "deadline": FileRequests.UpdateFileRequestDeadlineSerializer().serialize(value.deadline), + "open": NullableSerializer(Serialization._BoolSerializer).serialize(value.open), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UpdateFileRequestArgs { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let title = NullableSerializer(Serialization._StringSerializer).deserialize(dict["title"] ?? .null) + let destination = NullableSerializer(Serialization._StringSerializer).deserialize(dict["destination"] ?? .null) + let deadline = FileRequests.UpdateFileRequestDeadlineSerializer().deserialize(dict["deadline"] ?? FileRequests.UpdateFileRequestDeadlineSerializer().serialize(.noUpdate)) + let open = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["open"] ?? .null) + return UpdateFileRequestArgs(id: id, title: title, destination: destination, deadline: deadline, open: open) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UpdateFileRequestDeadline union + public enum UpdateFileRequestDeadline: CustomStringConvertible { + /// Do not change the file request's deadline. + case noUpdate + /// If null, the file request's deadline is cleared. + case update(FileRequests.FileRequestDeadline?) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateFileRequestDeadlineSerializer().serialize(self)))" + } + } + open class UpdateFileRequestDeadlineSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateFileRequestDeadline) -> JSON { + switch value { + case .noUpdate: + var d = [String: JSON]() + d[".tag"] = .str("no_update") + return .dictionary(d) + case .update(let arg): + var d = ["update": NullableSerializer(FileRequests.FileRequestDeadlineSerializer()).serialize(arg)] + d[".tag"] = .str("update") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UpdateFileRequestDeadline { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "no_update": + return UpdateFileRequestDeadline.noUpdate + case "update": + let v = NullableSerializer(FileRequests.FileRequestDeadlineSerializer()).deserialize(d["update"] ?? .null) + return UpdateFileRequestDeadline.update(v) + case "other": + return UpdateFileRequestDeadline.other + default: + return UpdateFileRequestDeadline.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// There is an error updating the file request. + public enum UpdateFileRequestError: CustomStringConvertible { + /// This user's Dropbox Business team doesn't allow file requests. + case disabledForTeam + /// An unspecified error. + case other + /// This file request ID was not found. + case notFound + /// The specified path is not a folder. + case notAFolder + /// This file request is not accessible to this app. Apps with the app folder permission can only access file + /// requests in their app folder. + case appLacksAccess + /// This user doesn't have permission to access or modify this file request. + case noPermission + /// This user's email address is not verified. File requests are only available on accounts with a verified + /// email address. Users can verify their email address here https://www.dropbox.com/help/317. + case emailUnverified + /// There was an error validating the request. For example, the title was invalid, or there were disallowed + /// characters in the destination path. + case validationError + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateFileRequestErrorSerializer().serialize(self)))" + } + } + open class UpdateFileRequestErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateFileRequestError) -> JSON { + switch value { + case .disabledForTeam: + var d = [String: JSON]() + d[".tag"] = .str("disabled_for_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .notAFolder: + var d = [String: JSON]() + d[".tag"] = .str("not_a_folder") + return .dictionary(d) + case .appLacksAccess: + var d = [String: JSON]() + d[".tag"] = .str("app_lacks_access") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .emailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("email_unverified") + return .dictionary(d) + case .validationError: + var d = [String: JSON]() + d[".tag"] = .str("validation_error") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UpdateFileRequestError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled_for_team": + return UpdateFileRequestError.disabledForTeam + case "other": + return UpdateFileRequestError.other + case "not_found": + return UpdateFileRequestError.notFound + case "not_a_folder": + return UpdateFileRequestError.notAFolder + case "app_lacks_access": + return UpdateFileRequestError.appLacksAccess + case "no_permission": + return UpdateFileRequestError.noPermission + case "email_unverified": + return UpdateFileRequestError.emailUnverified + case "validation_error": + return UpdateFileRequestError.validationError + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + + /// Stone Route Objects + + static let create = Route( + name: "create", + version: 1, + namespace: "file_requests", + deprecated: false, + argSerializer: FileRequests.CreateFileRequestArgsSerializer(), + responseSerializer: FileRequests.FileRequestSerializer(), + errorSerializer: FileRequests.CreateFileRequestErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let get = Route( + name: "get", + version: 1, + namespace: "file_requests", + deprecated: false, + argSerializer: FileRequests.GetFileRequestArgsSerializer(), + responseSerializer: FileRequests.FileRequestSerializer(), + errorSerializer: FileRequests.GetFileRequestErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let list_ = Route( + name: "list", + version: 1, + namespace: "file_requests", + deprecated: false, + argSerializer: Serialization._VoidSerializer, + responseSerializer: FileRequests.ListFileRequestsResultSerializer(), + errorSerializer: FileRequests.ListFileRequestsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let update = Route( + name: "update", + version: 1, + namespace: "file_requests", + deprecated: false, + argSerializer: FileRequests.UpdateFileRequestArgsSerializer(), + responseSerializer: FileRequests.FileRequestSerializer(), + errorSerializer: FileRequests.UpdateFileRequestErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileRequestsRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileRequestsRoutes.swift new file mode 100644 index 0000000..572cdea --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FileRequestsRoutes.swift @@ -0,0 +1,73 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the file_requests namespace +open class FileRequestsRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// Creates a file request for this user. + /// + /// - parameter title: The title of the file request. Must not be empty. + /// - parameter destination: The path of the folder in the Dropbox where uploaded files will be sent. For apps with + /// the app folder permission, this will be relative to the app folder. + /// - parameter deadline: The deadline for the file request. Deadlines can only be set by Professional and Business + /// accounts. + /// - parameter open: Whether or not the file request should be open. If the file request is closed, it will not + /// accept any file submissions, but it can be opened later. + /// + /// - returns: Through the response callback, the caller will receive a `FileRequests.FileRequest` object on + /// success or a `FileRequests.CreateFileRequestError` object on failure. + @discardableResult open func create(title: String, destination: String, deadline: FileRequests.FileRequestDeadline? = nil, open: Bool = true) -> RpcRequest { + let route = FileRequests.create + let serverArgs = FileRequests.CreateFileRequestArgs(title: title, destination: destination, deadline: deadline, open: open) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the specified file request. + /// + /// - parameter id: The ID of the file request to retrieve. + /// + /// - returns: Through the response callback, the caller will receive a `FileRequests.FileRequest` object on + /// success or a `FileRequests.GetFileRequestError` object on failure. + @discardableResult open func get(id: String) -> RpcRequest { + let route = FileRequests.get + let serverArgs = FileRequests.GetFileRequestArgs(id: id) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns a list of file requests owned by this user. For apps with the app folder permission, this will only + /// return file requests with destinations in the app folder. + /// + /// + /// - returns: Through the response callback, the caller will receive a `FileRequests.ListFileRequestsResult` + /// object on success or a `FileRequests.ListFileRequestsError` object on failure. + @discardableResult open func list_() -> RpcRequest { + let route = FileRequests.list_ + return client.request(route) + } + + /// Update a file request. + /// + /// - parameter id: The ID of the file request to update. + /// - parameter title: The new title of the file request. Must not be empty. + /// - parameter destination: The new path of the folder in the Dropbox where uploaded files will be sent. For apps + /// with the app folder permission, this will be relative to the app folder. + /// - parameter deadline: The new deadline for the file request. Deadlines can only be set by Professional and + /// Business accounts. + /// - parameter open: Whether to set this file request as open or closed. + /// + /// - returns: Through the response callback, the caller will receive a `FileRequests.FileRequest` object on + /// success or a `FileRequests.UpdateFileRequestError` object on failure. + @discardableResult open func update(id: String, title: String? = nil, destination: String? = nil, deadline: FileRequests.UpdateFileRequestDeadline = .noUpdate, open: Bool? = nil) -> RpcRequest { + let route = FileRequests.update + let serverArgs = FileRequests.UpdateFileRequestArgs(id: id, title: title, destination: destination, deadline: deadline, open: open) + return client.request(route, serverArgs: serverArgs) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Files.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Files.swift new file mode 100644 index 0000000..46d3936 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Files.swift @@ -0,0 +1,7047 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the files namespace +open class Files { + /// The GetMetadataArg struct + open class GetMetadataArg: CustomStringConvertible { + /// The path of a file or folder on Dropbox. + public let path: String + /// If true, mediaInfo in FileMetadata is set for photo and video. + public let includeMediaInfo: Bool + /// If true, DeletedMetadata will be returned for deleted file or folder, otherwise notFound in LookupError will + /// be returned. + public let includeDeleted: Bool + /// If true, the results will include a flag for each file indicating whether or not that file has any explicit + /// members. + public let includeHasExplicitSharedMembers: Bool + /// If set to a valid list of template IDs, propertyGroups in FileMetadata is set if there exists property data + /// associated with the file and each of the listed templates. + public let includePropertyGroups: FileProperties.TemplateFilterBase? + public init(path: String, includeMediaInfo: Bool = false, includeDeleted: Bool = false, includeHasExplicitSharedMembers: Bool = false, includePropertyGroups: FileProperties.TemplateFilterBase? = nil) { + stringValidator(pattern: "(/(.|[\\r\\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.includeMediaInfo = includeMediaInfo + self.includeDeleted = includeDeleted + self.includeHasExplicitSharedMembers = includeHasExplicitSharedMembers + self.includePropertyGroups = includePropertyGroups + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetMetadataArgSerializer().serialize(self)))" + } + } + open class GetMetadataArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetMetadataArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "include_media_info": Serialization._BoolSerializer.serialize(value.includeMediaInfo), + "include_deleted": Serialization._BoolSerializer.serialize(value.includeDeleted), + "include_has_explicit_shared_members": Serialization._BoolSerializer.serialize(value.includeHasExplicitSharedMembers), + "include_property_groups": NullableSerializer(FileProperties.TemplateFilterBaseSerializer()).serialize(value.includePropertyGroups), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetMetadataArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let includeMediaInfo = Serialization._BoolSerializer.deserialize(dict["include_media_info"] ?? .number(0)) + let includeDeleted = Serialization._BoolSerializer.deserialize(dict["include_deleted"] ?? .number(0)) + let includeHasExplicitSharedMembers = Serialization._BoolSerializer.deserialize(dict["include_has_explicit_shared_members"] ?? .number(0)) + let includePropertyGroups = NullableSerializer(FileProperties.TemplateFilterBaseSerializer()).deserialize(dict["include_property_groups"] ?? .null) + return GetMetadataArg(path: path, includeMediaInfo: includeMediaInfo, includeDeleted: includeDeleted, includeHasExplicitSharedMembers: includeHasExplicitSharedMembers, includePropertyGroups: includePropertyGroups) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AlphaGetMetadataArg struct + open class AlphaGetMetadataArg: Files.GetMetadataArg { + /// If set to a valid list of template IDs, propertyGroups in FileMetadata is set for files with custom + /// properties. + public let includePropertyTemplates: Array? + public init(path: String, includeMediaInfo: Bool = false, includeDeleted: Bool = false, includeHasExplicitSharedMembers: Bool = false, includePropertyGroups: FileProperties.TemplateFilterBase? = nil, includePropertyTemplates: Array? = nil) { + nullableValidator(arrayValidator(itemValidator: stringValidator(minLength: 1, pattern: "(/|ptid:).*")))(includePropertyTemplates) + self.includePropertyTemplates = includePropertyTemplates + super.init(path: path, includeMediaInfo: includeMediaInfo, includeDeleted: includeDeleted, includeHasExplicitSharedMembers: includeHasExplicitSharedMembers, includePropertyGroups: includePropertyGroups) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AlphaGetMetadataArgSerializer().serialize(self)))" + } + } + open class AlphaGetMetadataArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AlphaGetMetadataArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "include_media_info": Serialization._BoolSerializer.serialize(value.includeMediaInfo), + "include_deleted": Serialization._BoolSerializer.serialize(value.includeDeleted), + "include_has_explicit_shared_members": Serialization._BoolSerializer.serialize(value.includeHasExplicitSharedMembers), + "include_property_groups": NullableSerializer(FileProperties.TemplateFilterBaseSerializer()).serialize(value.includePropertyGroups), + "include_property_templates": NullableSerializer(ArraySerializer(Serialization._StringSerializer)).serialize(value.includePropertyTemplates), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AlphaGetMetadataArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let includeMediaInfo = Serialization._BoolSerializer.deserialize(dict["include_media_info"] ?? .number(0)) + let includeDeleted = Serialization._BoolSerializer.deserialize(dict["include_deleted"] ?? .number(0)) + let includeHasExplicitSharedMembers = Serialization._BoolSerializer.deserialize(dict["include_has_explicit_shared_members"] ?? .number(0)) + let includePropertyGroups = NullableSerializer(FileProperties.TemplateFilterBaseSerializer()).deserialize(dict["include_property_groups"] ?? .null) + let includePropertyTemplates = NullableSerializer(ArraySerializer(Serialization._StringSerializer)).deserialize(dict["include_property_templates"] ?? .null) + return AlphaGetMetadataArg(path: path, includeMediaInfo: includeMediaInfo, includeDeleted: includeDeleted, includeHasExplicitSharedMembers: includeHasExplicitSharedMembers, includePropertyGroups: includePropertyGroups, includePropertyTemplates: includePropertyTemplates) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetMetadataError union + public enum GetMetadataError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetMetadataErrorSerializer().serialize(self)))" + } + } + open class GetMetadataErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetMetadataError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetMetadataError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return GetMetadataError.path(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The AlphaGetMetadataError union + public enum AlphaGetMetadataError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// An unspecified error. + case propertiesError(FileProperties.LookUpPropertiesError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AlphaGetMetadataErrorSerializer().serialize(self)))" + } + } + open class AlphaGetMetadataErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AlphaGetMetadataError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .propertiesError(let arg): + var d = ["properties_error": FileProperties.LookUpPropertiesErrorSerializer().serialize(arg)] + d[".tag"] = .str("properties_error") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AlphaGetMetadataError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return AlphaGetMetadataError.path(v) + case "properties_error": + let v = FileProperties.LookUpPropertiesErrorSerializer().deserialize(d["properties_error"] ?? .null) + return AlphaGetMetadataError.propertiesError(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The CommitInfo struct + open class CommitInfo: CustomStringConvertible { + /// Path in the user's Dropbox to save the file. + public let path: String + /// Selects what to do if the file already exists. + public let mode: Files.WriteMode + /// If there's a conflict, as determined by mode, have the Dropbox server try to autorename the file to avoid + /// conflict. + public let autorename: Bool + /// The value to store as the clientModified timestamp. Dropbox automatically records the time at which the file + /// was written to the Dropbox servers. It can also record an additional timestamp, provided by Dropbox desktop + /// clients, mobile clients, and API apps of when the file was actually created or modified. + public let clientModified: Date? + /// Normally, users are made aware of any file modifications in their Dropbox account via notifications in the + /// client software. If true, this tells the clients that this modification shouldn't result in a user + /// notification. + public let mute: Bool + /// List of custom properties to add to file. + public let propertyGroups: Array? + /// Be more strict about how each WriteMode detects conflict. For example, always return a conflict error when + /// mode = update in WriteMode and the given "rev" doesn't match the existing file's "rev", even if the existing + /// file has been deleted. + public let strictConflict: Bool + public init(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false) { + stringValidator(pattern: "(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)|(id:.*)")(path) + self.path = path + self.mode = mode + self.autorename = autorename + self.clientModified = clientModified + self.mute = mute + self.propertyGroups = propertyGroups + self.strictConflict = strictConflict + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CommitInfoSerializer().serialize(self)))" + } + } + open class CommitInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CommitInfo) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "mode": Files.WriteModeSerializer().serialize(value.mode), + "autorename": Serialization._BoolSerializer.serialize(value.autorename), + "client_modified": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.clientModified), + "mute": Serialization._BoolSerializer.serialize(value.mute), + "property_groups": NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).serialize(value.propertyGroups), + "strict_conflict": Serialization._BoolSerializer.serialize(value.strictConflict), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CommitInfo { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let mode = Files.WriteModeSerializer().deserialize(dict["mode"] ?? Files.WriteModeSerializer().serialize(.add)) + let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) + let clientModified = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["client_modified"] ?? .null) + let mute = Serialization._BoolSerializer.deserialize(dict["mute"] ?? .number(0)) + let propertyGroups = NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).deserialize(dict["property_groups"] ?? .null) + let strictConflict = Serialization._BoolSerializer.deserialize(dict["strict_conflict"] ?? .number(0)) + return CommitInfo(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CommitInfoWithProperties struct + open class CommitInfoWithProperties: Files.CommitInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CommitInfoWithPropertiesSerializer().serialize(self)))" + } + } + open class CommitInfoWithPropertiesSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CommitInfoWithProperties) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "mode": Files.WriteModeSerializer().serialize(value.mode), + "autorename": Serialization._BoolSerializer.serialize(value.autorename), + "client_modified": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.clientModified), + "mute": Serialization._BoolSerializer.serialize(value.mute), + "property_groups": NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).serialize(value.propertyGroups), + "strict_conflict": Serialization._BoolSerializer.serialize(value.strictConflict), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CommitInfoWithProperties { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let mode = Files.WriteModeSerializer().deserialize(dict["mode"] ?? Files.WriteModeSerializer().serialize(.add)) + let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) + let clientModified = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["client_modified"] ?? .null) + let mute = Serialization._BoolSerializer.deserialize(dict["mute"] ?? .number(0)) + let propertyGroups = NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).deserialize(dict["property_groups"] ?? .null) + let strictConflict = Serialization._BoolSerializer.deserialize(dict["strict_conflict"] ?? .number(0)) + return CommitInfoWithProperties(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ContentSyncSetting struct + open class ContentSyncSetting: CustomStringConvertible { + /// Id of the item this setting is applied to. + public let id: String + /// Setting for this item. + public let syncSetting: Files.SyncSetting + public init(id: String, syncSetting: Files.SyncSetting) { + stringValidator(minLength: 4, pattern: "id:.+")(id) + self.id = id + self.syncSetting = syncSetting + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ContentSyncSettingSerializer().serialize(self)))" + } + } + open class ContentSyncSettingSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ContentSyncSetting) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + "sync_setting": Files.SyncSettingSerializer().serialize(value.syncSetting), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ContentSyncSetting { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let syncSetting = Files.SyncSettingSerializer().deserialize(dict["sync_setting"] ?? .null) + return ContentSyncSetting(id: id, syncSetting: syncSetting) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ContentSyncSettingArg struct + open class ContentSyncSettingArg: CustomStringConvertible { + /// Id of the item this setting is applied to. + public let id: String + /// Setting for this item. + public let syncSetting: Files.SyncSettingArg + public init(id: String, syncSetting: Files.SyncSettingArg) { + stringValidator(minLength: 4, pattern: "id:.+")(id) + self.id = id + self.syncSetting = syncSetting + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ContentSyncSettingArgSerializer().serialize(self)))" + } + } + open class ContentSyncSettingArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ContentSyncSettingArg) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + "sync_setting": Files.SyncSettingArgSerializer().serialize(value.syncSetting), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ContentSyncSettingArg { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let syncSetting = Files.SyncSettingArgSerializer().deserialize(dict["sync_setting"] ?? .null) + return ContentSyncSettingArg(id: id, syncSetting: syncSetting) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateFolderArg struct + open class CreateFolderArg: CustomStringConvertible { + /// Path in the user's Dropbox to create. + public let path: String + /// If there's a conflict, have the Dropbox server try to autorename the folder to avoid the conflict. + public let autorename: Bool + public init(path: String, autorename: Bool = false) { + stringValidator(pattern: "(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.autorename = autorename + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderArgSerializer().serialize(self)))" + } + } + open class CreateFolderArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "autorename": Serialization._BoolSerializer.serialize(value.autorename), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateFolderArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) + return CreateFolderArg(path: path, autorename: autorename) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateFolderBatchArg struct + open class CreateFolderBatchArg: CustomStringConvertible { + /// List of paths to be created in the user's Dropbox. Duplicate path arguments in the batch are considered only + /// once. + public let paths: Array + /// If there's a conflict, have the Dropbox server try to autorename the folder to avoid the conflict. + public let autorename: Bool + /// Whether to force the create to happen asynchronously. + public let forceAsync: Bool + public init(paths: Array, autorename: Bool = false, forceAsync: Bool = false) { + arrayValidator(itemValidator: stringValidator(pattern: "(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)"))(paths) + self.paths = paths + self.autorename = autorename + self.forceAsync = forceAsync + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderBatchArgSerializer().serialize(self)))" + } + } + open class CreateFolderBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderBatchArg) -> JSON { + let output = [ + "paths": ArraySerializer(Serialization._StringSerializer).serialize(value.paths), + "autorename": Serialization._BoolSerializer.serialize(value.autorename), + "force_async": Serialization._BoolSerializer.serialize(value.forceAsync), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateFolderBatchArg { + switch json { + case .dictionary(let dict): + let paths = ArraySerializer(Serialization._StringSerializer).deserialize(dict["paths"] ?? .null) + let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) + let forceAsync = Serialization._BoolSerializer.deserialize(dict["force_async"] ?? .number(0)) + return CreateFolderBatchArg(paths: paths, autorename: autorename, forceAsync: forceAsync) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateFolderBatchError union + public enum CreateFolderBatchError: CustomStringConvertible { + /// The operation would involve too many files or folders. + case tooManyFiles + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderBatchErrorSerializer().serialize(self)))" + } + } + open class CreateFolderBatchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderBatchError) -> JSON { + switch value { + case .tooManyFiles: + var d = [String: JSON]() + d[".tag"] = .str("too_many_files") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CreateFolderBatchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "too_many_files": + return CreateFolderBatchError.tooManyFiles + case "other": + return CreateFolderBatchError.other + default: + return CreateFolderBatchError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The CreateFolderBatchJobStatus union + public enum CreateFolderBatchJobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The batch create folder has finished. + case complete(Files.CreateFolderBatchResult) + /// The batch create folder has failed. + case failed(Files.CreateFolderBatchError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderBatchJobStatusSerializer().serialize(self)))" + } + } + open class CreateFolderBatchJobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderBatchJobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.CreateFolderBatchResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .failed(let arg): + var d = ["failed": Files.CreateFolderBatchErrorSerializer().serialize(arg)] + d[".tag"] = .str("failed") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CreateFolderBatchJobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return CreateFolderBatchJobStatus.inProgress + case "complete": + let v = Files.CreateFolderBatchResultSerializer().deserialize(json) + return CreateFolderBatchJobStatus.complete(v) + case "failed": + let v = Files.CreateFolderBatchErrorSerializer().deserialize(d["failed"] ?? .null) + return CreateFolderBatchJobStatus.failed(v) + case "other": + return CreateFolderBatchJobStatus.other + default: + return CreateFolderBatchJobStatus.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result returned by createFolderBatch that may either launch an asynchronous job or complete synchronously. + public enum CreateFolderBatchLaunch: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// An unspecified error. + case complete(Files.CreateFolderBatchResult) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderBatchLaunchSerializer().serialize(self)))" + } + } + open class CreateFolderBatchLaunchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderBatchLaunch) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.CreateFolderBatchResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CreateFolderBatchLaunch { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return CreateFolderBatchLaunch.asyncJobId(v) + case "complete": + let v = Files.CreateFolderBatchResultSerializer().deserialize(json) + return CreateFolderBatchLaunch.complete(v) + case "other": + return CreateFolderBatchLaunch.other + default: + return CreateFolderBatchLaunch.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The FileOpsResult struct + open class FileOpsResult: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileOpsResultSerializer().serialize(self)))" + } + } + open class FileOpsResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileOpsResult) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileOpsResult { + switch json { + case .dictionary(_): + return FileOpsResult() + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateFolderBatchResult struct + open class CreateFolderBatchResult: Files.FileOpsResult { + /// Each entry in paths in CreateFolderBatchArg will appear at the same position inside entries in + /// CreateFolderBatchResult. + public let entries: Array + public init(entries: Array) { + self.entries = entries + super.init() + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderBatchResultSerializer().serialize(self)))" + } + } + open class CreateFolderBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderBatchResult) -> JSON { + let output = [ + "entries": ArraySerializer(Files.CreateFolderBatchResultEntrySerializer()).serialize(value.entries), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateFolderBatchResult { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.CreateFolderBatchResultEntrySerializer()).deserialize(dict["entries"] ?? .null) + return CreateFolderBatchResult(entries: entries) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateFolderBatchResultEntry union + public enum CreateFolderBatchResultEntry: CustomStringConvertible { + /// An unspecified error. + case success(Files.CreateFolderEntryResult) + /// An unspecified error. + case failure(Files.CreateFolderEntryError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderBatchResultEntrySerializer().serialize(self)))" + } + } + open class CreateFolderBatchResultEntrySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderBatchResultEntry) -> JSON { + switch value { + case .success(let arg): + var d = Serialization.getFields(Files.CreateFolderEntryResultSerializer().serialize(arg)) + d[".tag"] = .str("success") + return .dictionary(d) + case .failure(let arg): + var d = ["failure": Files.CreateFolderEntryErrorSerializer().serialize(arg)] + d[".tag"] = .str("failure") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CreateFolderBatchResultEntry { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = Files.CreateFolderEntryResultSerializer().deserialize(json) + return CreateFolderBatchResultEntry.success(v) + case "failure": + let v = Files.CreateFolderEntryErrorSerializer().deserialize(d["failure"] ?? .null) + return CreateFolderBatchResultEntry.failure(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The CreateFolderEntryError union + public enum CreateFolderEntryError: CustomStringConvertible { + /// An unspecified error. + case path(Files.WriteError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderEntryErrorSerializer().serialize(self)))" + } + } + open class CreateFolderEntryErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderEntryError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CreateFolderEntryError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.WriteErrorSerializer().deserialize(d["path"] ?? .null) + return CreateFolderEntryError.path(v) + case "other": + return CreateFolderEntryError.other + default: + return CreateFolderEntryError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The CreateFolderEntryResult struct + open class CreateFolderEntryResult: CustomStringConvertible { + /// Metadata of the created folder. + public let metadata: Files.FolderMetadata + public init(metadata: Files.FolderMetadata) { + self.metadata = metadata + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderEntryResultSerializer().serialize(self)))" + } + } + open class CreateFolderEntryResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderEntryResult) -> JSON { + let output = [ + "metadata": Files.FolderMetadataSerializer().serialize(value.metadata), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateFolderEntryResult { + switch json { + case .dictionary(let dict): + let metadata = Files.FolderMetadataSerializer().deserialize(dict["metadata"] ?? .null) + return CreateFolderEntryResult(metadata: metadata) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateFolderError union + public enum CreateFolderError: CustomStringConvertible { + /// An unspecified error. + case path(Files.WriteError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderErrorSerializer().serialize(self)))" + } + } + open class CreateFolderErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CreateFolderError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.WriteErrorSerializer().deserialize(d["path"] ?? .null) + return CreateFolderError.path(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The CreateFolderResult struct + open class CreateFolderResult: Files.FileOpsResult { + /// Metadata of the created folder. + public let metadata: Files.FolderMetadata + public init(metadata: Files.FolderMetadata) { + self.metadata = metadata + super.init() + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderResultSerializer().serialize(self)))" + } + } + open class CreateFolderResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderResult) -> JSON { + let output = [ + "metadata": Files.FolderMetadataSerializer().serialize(value.metadata), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateFolderResult { + switch json { + case .dictionary(let dict): + let metadata = Files.FolderMetadataSerializer().deserialize(dict["metadata"] ?? .null) + return CreateFolderResult(metadata: metadata) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeleteArg struct + open class DeleteArg: CustomStringConvertible { + /// Path in the user's Dropbox to delete. + public let path: String + /// Perform delete if given "rev" matches the existing file's latest "rev". This field does not support deleting + /// a folder. + public let parentRev: String? + public init(path: String, parentRev: String? = nil) { + stringValidator(pattern: "(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)|(id:.*)")(path) + self.path = path + nullableValidator(stringValidator(minLength: 9, pattern: "[0-9a-f]+"))(parentRev) + self.parentRev = parentRev + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteArgSerializer().serialize(self)))" + } + } + open class DeleteArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "parent_rev": NullableSerializer(Serialization._StringSerializer).serialize(value.parentRev), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeleteArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let parentRev = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_rev"] ?? .null) + return DeleteArg(path: path, parentRev: parentRev) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeleteBatchArg struct + open class DeleteBatchArg: CustomStringConvertible { + /// (no description) + public let entries: Array + public init(entries: Array) { + self.entries = entries + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteBatchArgSerializer().serialize(self)))" + } + } + open class DeleteBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteBatchArg) -> JSON { + let output = [ + "entries": ArraySerializer(Files.DeleteArgSerializer()).serialize(value.entries), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeleteBatchArg { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.DeleteArgSerializer()).deserialize(dict["entries"] ?? .null) + return DeleteBatchArg(entries: entries) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeleteBatchError union + public enum DeleteBatchError: CustomStringConvertible { + /// Use tooManyWriteOperations in DeleteError. deleteBatch now provides smaller granularity about which entry + /// has failed because of this. + case tooManyWriteOperations + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteBatchErrorSerializer().serialize(self)))" + } + } + open class DeleteBatchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteBatchError) -> JSON { + switch value { + case .tooManyWriteOperations: + var d = [String: JSON]() + d[".tag"] = .str("too_many_write_operations") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DeleteBatchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "too_many_write_operations": + return DeleteBatchError.tooManyWriteOperations + case "other": + return DeleteBatchError.other + default: + return DeleteBatchError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The DeleteBatchJobStatus union + public enum DeleteBatchJobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The batch delete has finished. + case complete(Files.DeleteBatchResult) + /// The batch delete has failed. + case failed(Files.DeleteBatchError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteBatchJobStatusSerializer().serialize(self)))" + } + } + open class DeleteBatchJobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteBatchJobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.DeleteBatchResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .failed(let arg): + var d = ["failed": Files.DeleteBatchErrorSerializer().serialize(arg)] + d[".tag"] = .str("failed") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DeleteBatchJobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return DeleteBatchJobStatus.inProgress + case "complete": + let v = Files.DeleteBatchResultSerializer().deserialize(json) + return DeleteBatchJobStatus.complete(v) + case "failed": + let v = Files.DeleteBatchErrorSerializer().deserialize(d["failed"] ?? .null) + return DeleteBatchJobStatus.failed(v) + case "other": + return DeleteBatchJobStatus.other + default: + return DeleteBatchJobStatus.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result returned by deleteBatch that may either launch an asynchronous job or complete synchronously. + public enum DeleteBatchLaunch: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// An unspecified error. + case complete(Files.DeleteBatchResult) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteBatchLaunchSerializer().serialize(self)))" + } + } + open class DeleteBatchLaunchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteBatchLaunch) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.DeleteBatchResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DeleteBatchLaunch { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return DeleteBatchLaunch.asyncJobId(v) + case "complete": + let v = Files.DeleteBatchResultSerializer().deserialize(json) + return DeleteBatchLaunch.complete(v) + case "other": + return DeleteBatchLaunch.other + default: + return DeleteBatchLaunch.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The DeleteBatchResult struct + open class DeleteBatchResult: Files.FileOpsResult { + /// Each entry in entries in DeleteBatchArg will appear at the same position inside entries in + /// DeleteBatchResult. + public let entries: Array + public init(entries: Array) { + self.entries = entries + super.init() + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteBatchResultSerializer().serialize(self)))" + } + } + open class DeleteBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteBatchResult) -> JSON { + let output = [ + "entries": ArraySerializer(Files.DeleteBatchResultEntrySerializer()).serialize(value.entries), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeleteBatchResult { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.DeleteBatchResultEntrySerializer()).deserialize(dict["entries"] ?? .null) + return DeleteBatchResult(entries: entries) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeleteBatchResultData struct + open class DeleteBatchResultData: CustomStringConvertible { + /// Metadata of the deleted object. + public let metadata: Files.Metadata + public init(metadata: Files.Metadata) { + self.metadata = metadata + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteBatchResultDataSerializer().serialize(self)))" + } + } + open class DeleteBatchResultDataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteBatchResultData) -> JSON { + let output = [ + "metadata": Files.MetadataSerializer().serialize(value.metadata), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeleteBatchResultData { + switch json { + case .dictionary(let dict): + let metadata = Files.MetadataSerializer().deserialize(dict["metadata"] ?? .null) + return DeleteBatchResultData(metadata: metadata) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeleteBatchResultEntry union + public enum DeleteBatchResultEntry: CustomStringConvertible { + /// An unspecified error. + case success(Files.DeleteBatchResultData) + /// An unspecified error. + case failure(Files.DeleteError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteBatchResultEntrySerializer().serialize(self)))" + } + } + open class DeleteBatchResultEntrySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteBatchResultEntry) -> JSON { + switch value { + case .success(let arg): + var d = Serialization.getFields(Files.DeleteBatchResultDataSerializer().serialize(arg)) + d[".tag"] = .str("success") + return .dictionary(d) + case .failure(let arg): + var d = ["failure": Files.DeleteErrorSerializer().serialize(arg)] + d[".tag"] = .str("failure") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DeleteBatchResultEntry { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = Files.DeleteBatchResultDataSerializer().deserialize(json) + return DeleteBatchResultEntry.success(v) + case "failure": + let v = Files.DeleteErrorSerializer().deserialize(d["failure"] ?? .null) + return DeleteBatchResultEntry.failure(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The DeleteError union + public enum DeleteError: CustomStringConvertible { + /// An unspecified error. + case pathLookup(Files.LookupError) + /// An unspecified error. + case pathWrite(Files.WriteError) + /// There are too many write operations in user's Dropbox. Please retry this request. + case tooManyWriteOperations + /// There are too many files in one request. Please retry with fewer files. + case tooManyFiles + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteErrorSerializer().serialize(self)))" + } + } + open class DeleteErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteError) -> JSON { + switch value { + case .pathLookup(let arg): + var d = ["path_lookup": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path_lookup") + return .dictionary(d) + case .pathWrite(let arg): + var d = ["path_write": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("path_write") + return .dictionary(d) + case .tooManyWriteOperations: + var d = [String: JSON]() + d[".tag"] = .str("too_many_write_operations") + return .dictionary(d) + case .tooManyFiles: + var d = [String: JSON]() + d[".tag"] = .str("too_many_files") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DeleteError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path_lookup": + let v = Files.LookupErrorSerializer().deserialize(d["path_lookup"] ?? .null) + return DeleteError.pathLookup(v) + case "path_write": + let v = Files.WriteErrorSerializer().deserialize(d["path_write"] ?? .null) + return DeleteError.pathWrite(v) + case "too_many_write_operations": + return DeleteError.tooManyWriteOperations + case "too_many_files": + return DeleteError.tooManyFiles + case "other": + return DeleteError.other + default: + return DeleteError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The DeleteResult struct + open class DeleteResult: Files.FileOpsResult { + /// Metadata of the deleted object. + public let metadata: Files.Metadata + public init(metadata: Files.Metadata) { + self.metadata = metadata + super.init() + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeleteResultSerializer().serialize(self)))" + } + } + open class DeleteResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeleteResult) -> JSON { + let output = [ + "metadata": Files.MetadataSerializer().serialize(value.metadata), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeleteResult { + switch json { + case .dictionary(let dict): + let metadata = Files.MetadataSerializer().deserialize(dict["metadata"] ?? .null) + return DeleteResult(metadata: metadata) + default: + fatalError("Type error deserializing") + } + } + } + + /// Metadata for a file or folder. + open class Metadata: CustomStringConvertible { + /// The last component of the path (including extension). This never contains a slash. + public let name: String + /// The lowercased full path in the user's Dropbox. This always starts with a slash. This field will be null if + /// the file or folder is not mounted. + public let pathLower: String? + /// The cased path to be used for display purposes only. In rare instances the casing will not correctly match + /// the user's filesystem, but this behavior will match the path provided in the Core API v1, and at least the + /// last path component will have the correct casing. Changes to only the casing of paths won't be returned by + /// listFolderContinue. This field will be null if the file or folder is not mounted. + public let pathDisplay: String? + /// Please use parentSharedFolderId in FileSharingInfo or parentSharedFolderId in FolderSharingInfo instead. + public let parentSharedFolderId: String? + public init(name: String, pathLower: String? = nil, pathDisplay: String? = nil, parentSharedFolderId: String? = nil) { + stringValidator()(name) + self.name = name + nullableValidator(stringValidator())(pathLower) + self.pathLower = pathLower + nullableValidator(stringValidator())(pathDisplay) + self.pathDisplay = pathDisplay + nullableValidator(stringValidator(pattern: "[-_0-9a-zA-Z:]+"))(parentSharedFolderId) + self.parentSharedFolderId = parentSharedFolderId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MetadataSerializer().serialize(self)))" + } + } + open class MetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Metadata) -> JSON { + var output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + "path_display": NullableSerializer(Serialization._StringSerializer).serialize(value.pathDisplay), + "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + ] + switch value { + case let file as Files.FileMetadata: + for (k, v) in Serialization.getFields(Files.FileMetadataSerializer().serialize(file)) { + output[k] = v + } + output[".tag"] = .str("file") + case let folder as Files.FolderMetadata: + for (k, v) in Serialization.getFields(Files.FolderMetadataSerializer().serialize(folder)) { + output[k] = v + } + output[".tag"] = .str("folder") + case let deleted as Files.DeletedMetadata: + for (k, v) in Serialization.getFields(Files.DeletedMetadataSerializer().serialize(deleted)) { + output[k] = v + } + output[".tag"] = .str("deleted") + default: fatalError("Tried to serialize unexpected subtype") + } + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> Metadata { + switch json { + case .dictionary(let dict): + let tag = Serialization.getTag(dict) + switch tag { + case "file": + return Files.FileMetadataSerializer().deserialize(json) + case "folder": + return Files.FolderMetadataSerializer().deserialize(json) + case "deleted": + return Files.DeletedMetadataSerializer().deserialize(json) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Type error deserializing") + } + } + } + + /// Indicates that there used to be a file or folder at this path, but it no longer exists. + open class DeletedMetadata: Files.Metadata { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeletedMetadataSerializer().serialize(self)))" + } + } + open class DeletedMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeletedMetadata) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + "path_display": NullableSerializer(Serialization._StringSerializer).serialize(value.pathDisplay), + "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeletedMetadata { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) + let pathDisplay = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_display"] ?? .null) + let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) + return DeletedMetadata(name: name, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Dimensions for a photo or video. + open class Dimensions: CustomStringConvertible { + /// Height of the photo/video. + public let height: UInt64 + /// Width of the photo/video. + public let width: UInt64 + public init(height: UInt64, width: UInt64) { + comparableValidator()(height) + self.height = height + comparableValidator()(width) + self.width = width + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DimensionsSerializer().serialize(self)))" + } + } + open class DimensionsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Dimensions) -> JSON { + let output = [ + "height": Serialization._UInt64Serializer.serialize(value.height), + "width": Serialization._UInt64Serializer.serialize(value.width), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> Dimensions { + switch json { + case .dictionary(let dict): + let height = Serialization._UInt64Serializer.deserialize(dict["height"] ?? .null) + let width = Serialization._UInt64Serializer.deserialize(dict["width"] ?? .null) + return Dimensions(height: height, width: width) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DownloadArg struct + open class DownloadArg: CustomStringConvertible { + /// The path of the file to download. + public let path: String + /// Please specify revision in path instead. + public let rev: String? + public init(path: String, rev: String? = nil) { + stringValidator(pattern: "(/(.|[\\r\\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)")(path) + self.path = path + nullableValidator(stringValidator(minLength: 9, pattern: "[0-9a-f]+"))(rev) + self.rev = rev + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DownloadArgSerializer().serialize(self)))" + } + } + open class DownloadArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DownloadArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "rev": NullableSerializer(Serialization._StringSerializer).serialize(value.rev), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DownloadArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let rev = NullableSerializer(Serialization._StringSerializer).deserialize(dict["rev"] ?? .null) + return DownloadArg(path: path, rev: rev) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DownloadError union + public enum DownloadError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DownloadErrorSerializer().serialize(self)))" + } + } + open class DownloadErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DownloadError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DownloadError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return DownloadError.path(v) + case "other": + return DownloadError.other + default: + return DownloadError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The DownloadZipArg struct + open class DownloadZipArg: CustomStringConvertible { + /// The path of the folder to download. + public let path: String + public init(path: String) { + stringValidator(pattern: "(/(.|[\\r\\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)")(path) + self.path = path + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DownloadZipArgSerializer().serialize(self)))" + } + } + open class DownloadZipArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DownloadZipArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DownloadZipArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + return DownloadZipArg(path: path) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DownloadZipError union + public enum DownloadZipError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// The folder or a file is too large to download. + case tooLarge + /// The folder has too many files to download. + case tooManyFiles + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DownloadZipErrorSerializer().serialize(self)))" + } + } + open class DownloadZipErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DownloadZipError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .tooLarge: + var d = [String: JSON]() + d[".tag"] = .str("too_large") + return .dictionary(d) + case .tooManyFiles: + var d = [String: JSON]() + d[".tag"] = .str("too_many_files") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DownloadZipError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return DownloadZipError.path(v) + case "too_large": + return DownloadZipError.tooLarge + case "too_many_files": + return DownloadZipError.tooManyFiles + case "other": + return DownloadZipError.other + default: + return DownloadZipError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The DownloadZipResult struct + open class DownloadZipResult: CustomStringConvertible { + /// (no description) + public let metadata: Files.FolderMetadata + public init(metadata: Files.FolderMetadata) { + self.metadata = metadata + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DownloadZipResultSerializer().serialize(self)))" + } + } + open class DownloadZipResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DownloadZipResult) -> JSON { + let output = [ + "metadata": Files.FolderMetadataSerializer().serialize(value.metadata), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DownloadZipResult { + switch json { + case .dictionary(let dict): + let metadata = Files.FolderMetadataSerializer().deserialize(dict["metadata"] ?? .null) + return DownloadZipResult(metadata: metadata) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileMetadata struct + open class FileMetadata: Files.Metadata { + /// A unique identifier for the file. + public let id: String + /// For files, this is the modification time set by the desktop client when the file was added to Dropbox. Since + /// this time is not verified (the Dropbox server stores whatever the desktop client sends up), this should only + /// be used for display purposes (such as sorting) and not, for example, to determine if a file has changed or + /// not. + public let clientModified: Date + /// The last time the file was modified on Dropbox. + public let serverModified: Date + /// A unique identifier for the current revision of a file. This field is the same rev as elsewhere in the API + /// and can be used to detect changes and avoid conflicts. + public let rev: String + /// The file size in bytes. + public let size: UInt64 + /// Additional information if the file is a photo or video. + public let mediaInfo: Files.MediaInfo? + /// Set if this file is a symlink. + public let symlinkInfo: Files.SymlinkInfo? + /// Set if this file is contained in a shared folder. + public let sharingInfo: Files.FileSharingInfo? + /// Additional information if the file has custom properties with the property template specified. + public let propertyGroups: Array? + /// This flag will only be present if include_has_explicit_shared_members is true in listFolder or getMetadata. + /// If this flag is present, it will be true if this file has any explicit shared members. This is different + /// from sharing_info in that this could be true in the case where a file has explicit members but is not + /// contained within a shared folder. + public let hasExplicitSharedMembers: Bool? + /// A hash of the file content. This field can be used to verify data integrity. For more information see our + /// Content hash https://www.dropbox.com/developers/reference/content-hash page. + public let contentHash: String? + public init(name: String, id: String, clientModified: Date, serverModified: Date, rev: String, size: UInt64, pathLower: String? = nil, pathDisplay: String? = nil, parentSharedFolderId: String? = nil, mediaInfo: Files.MediaInfo? = nil, symlinkInfo: Files.SymlinkInfo? = nil, sharingInfo: Files.FileSharingInfo? = nil, propertyGroups: Array? = nil, hasExplicitSharedMembers: Bool? = nil, contentHash: String? = nil) { + stringValidator(minLength: 1)(id) + self.id = id + self.clientModified = clientModified + self.serverModified = serverModified + stringValidator(minLength: 9, pattern: "[0-9a-f]+")(rev) + self.rev = rev + comparableValidator()(size) + self.size = size + self.mediaInfo = mediaInfo + self.symlinkInfo = symlinkInfo + self.sharingInfo = sharingInfo + self.propertyGroups = propertyGroups + self.hasExplicitSharedMembers = hasExplicitSharedMembers + nullableValidator(stringValidator(minLength: 64, maxLength: 64))(contentHash) + self.contentHash = contentHash + super.init(name: name, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileMetadataSerializer().serialize(self)))" + } + } + open class FileMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileMetadata) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "id": Serialization._StringSerializer.serialize(value.id), + "client_modified": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.clientModified), + "server_modified": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.serverModified), + "rev": Serialization._StringSerializer.serialize(value.rev), + "size": Serialization._UInt64Serializer.serialize(value.size), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + "path_display": NullableSerializer(Serialization._StringSerializer).serialize(value.pathDisplay), + "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "media_info": NullableSerializer(Files.MediaInfoSerializer()).serialize(value.mediaInfo), + "symlink_info": NullableSerializer(Files.SymlinkInfoSerializer()).serialize(value.symlinkInfo), + "sharing_info": NullableSerializer(Files.FileSharingInfoSerializer()).serialize(value.sharingInfo), + "property_groups": NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).serialize(value.propertyGroups), + "has_explicit_shared_members": NullableSerializer(Serialization._BoolSerializer).serialize(value.hasExplicitSharedMembers), + "content_hash": NullableSerializer(Serialization._StringSerializer).serialize(value.contentHash), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileMetadata { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let clientModified = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["client_modified"] ?? .null) + let serverModified = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["server_modified"] ?? .null) + let rev = Serialization._StringSerializer.deserialize(dict["rev"] ?? .null) + let size = Serialization._UInt64Serializer.deserialize(dict["size"] ?? .null) + let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) + let pathDisplay = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_display"] ?? .null) + let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) + let mediaInfo = NullableSerializer(Files.MediaInfoSerializer()).deserialize(dict["media_info"] ?? .null) + let symlinkInfo = NullableSerializer(Files.SymlinkInfoSerializer()).deserialize(dict["symlink_info"] ?? .null) + let sharingInfo = NullableSerializer(Files.FileSharingInfoSerializer()).deserialize(dict["sharing_info"] ?? .null) + let propertyGroups = NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).deserialize(dict["property_groups"] ?? .null) + let hasExplicitSharedMembers = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["has_explicit_shared_members"] ?? .null) + let contentHash = NullableSerializer(Serialization._StringSerializer).deserialize(dict["content_hash"] ?? .null) + return FileMetadata(name: name, id: id, clientModified: clientModified, serverModified: serverModified, rev: rev, size: size, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId, mediaInfo: mediaInfo, symlinkInfo: symlinkInfo, sharingInfo: sharingInfo, propertyGroups: propertyGroups, hasExplicitSharedMembers: hasExplicitSharedMembers, contentHash: contentHash) + default: + fatalError("Type error deserializing") + } + } + } + + /// Sharing info for a file or folder. + open class SharingInfo: CustomStringConvertible { + /// True if the file or folder is inside a read-only shared folder. + public let readOnly: Bool + public init(readOnly: Bool) { + self.readOnly = readOnly + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingInfoSerializer().serialize(self)))" + } + } + open class SharingInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingInfo) -> JSON { + let output = [ + "read_only": Serialization._BoolSerializer.serialize(value.readOnly), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharingInfo { + switch json { + case .dictionary(let dict): + let readOnly = Serialization._BoolSerializer.deserialize(dict["read_only"] ?? .null) + return SharingInfo(readOnly: readOnly) + default: + fatalError("Type error deserializing") + } + } + } + + /// Sharing info for a file which is contained by a shared folder. + open class FileSharingInfo: Files.SharingInfo { + /// ID of shared folder that holds this file. + public let parentSharedFolderId: String + /// The last user who modified the file. This field will be null if the user's account has been deleted. + public let modifiedBy: String? + public init(readOnly: Bool, parentSharedFolderId: String, modifiedBy: String? = nil) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(parentSharedFolderId) + self.parentSharedFolderId = parentSharedFolderId + nullableValidator(stringValidator(minLength: 40, maxLength: 40))(modifiedBy) + self.modifiedBy = modifiedBy + super.init(readOnly: readOnly) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileSharingInfoSerializer().serialize(self)))" + } + } + open class FileSharingInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileSharingInfo) -> JSON { + let output = [ + "read_only": Serialization._BoolSerializer.serialize(value.readOnly), + "parent_shared_folder_id": Serialization._StringSerializer.serialize(value.parentSharedFolderId), + "modified_by": NullableSerializer(Serialization._StringSerializer).serialize(value.modifiedBy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileSharingInfo { + switch json { + case .dictionary(let dict): + let readOnly = Serialization._BoolSerializer.deserialize(dict["read_only"] ?? .null) + let parentSharedFolderId = Serialization._StringSerializer.deserialize(dict["parent_shared_folder_id"] ?? .null) + let modifiedBy = NullableSerializer(Serialization._StringSerializer).deserialize(dict["modified_by"] ?? .null) + return FileSharingInfo(readOnly: readOnly, parentSharedFolderId: parentSharedFolderId, modifiedBy: modifiedBy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FolderMetadata struct + open class FolderMetadata: Files.Metadata { + /// A unique identifier for the folder. + public let id: String + /// Please use sharingInfo instead. + public let sharedFolderId: String? + /// Set if the folder is contained in a shared folder or is a shared folder mount point. + public let sharingInfo: Files.FolderSharingInfo? + /// Additional information if the file has custom properties with the property template specified. Note that + /// only properties associated with user-owned templates, not team-owned templates, can be attached to folders. + public let propertyGroups: Array? + public init(name: String, id: String, pathLower: String? = nil, pathDisplay: String? = nil, parentSharedFolderId: String? = nil, sharedFolderId: String? = nil, sharingInfo: Files.FolderSharingInfo? = nil, propertyGroups: Array? = nil) { + stringValidator(minLength: 1)(id) + self.id = id + nullableValidator(stringValidator(pattern: "[-_0-9a-zA-Z:]+"))(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.sharingInfo = sharingInfo + self.propertyGroups = propertyGroups + super.init(name: name, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderMetadataSerializer().serialize(self)))" + } + } + open class FolderMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FolderMetadata) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "id": Serialization._StringSerializer.serialize(value.id), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + "path_display": NullableSerializer(Serialization._StringSerializer).serialize(value.pathDisplay), + "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.sharedFolderId), + "sharing_info": NullableSerializer(Files.FolderSharingInfoSerializer()).serialize(value.sharingInfo), + "property_groups": NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).serialize(value.propertyGroups), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FolderMetadata { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) + let pathDisplay = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_display"] ?? .null) + let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) + let sharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["shared_folder_id"] ?? .null) + let sharingInfo = NullableSerializer(Files.FolderSharingInfoSerializer()).deserialize(dict["sharing_info"] ?? .null) + let propertyGroups = NullableSerializer(ArraySerializer(FileProperties.PropertyGroupSerializer())).deserialize(dict["property_groups"] ?? .null) + return FolderMetadata(name: name, id: id, pathLower: pathLower, pathDisplay: pathDisplay, parentSharedFolderId: parentSharedFolderId, sharedFolderId: sharedFolderId, sharingInfo: sharingInfo, propertyGroups: propertyGroups) + default: + fatalError("Type error deserializing") + } + } + } + + /// Sharing info for a folder which is contained in a shared folder or is a shared folder mount point. + open class FolderSharingInfo: Files.SharingInfo { + /// Set if the folder is contained by a shared folder. + public let parentSharedFolderId: String? + /// If this folder is a shared folder mount point, the ID of the shared folder mounted at this location. + public let sharedFolderId: String? + /// Specifies that the folder can only be traversed and the user can only see a limited subset of the contents + /// of this folder because they don't have read access to this folder. They do, however, have access to some sub + /// folder. + public let traverseOnly: Bool + /// Specifies that the folder cannot be accessed by the user. + public let noAccess: Bool + public init(readOnly: Bool, parentSharedFolderId: String? = nil, sharedFolderId: String? = nil, traverseOnly: Bool = false, noAccess: Bool = false) { + nullableValidator(stringValidator(pattern: "[-_0-9a-zA-Z:]+"))(parentSharedFolderId) + self.parentSharedFolderId = parentSharedFolderId + nullableValidator(stringValidator(pattern: "[-_0-9a-zA-Z:]+"))(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.traverseOnly = traverseOnly + self.noAccess = noAccess + super.init(readOnly: readOnly) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderSharingInfoSerializer().serialize(self)))" + } + } + open class FolderSharingInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FolderSharingInfo) -> JSON { + let output = [ + "read_only": Serialization._BoolSerializer.serialize(value.readOnly), + "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.sharedFolderId), + "traverse_only": Serialization._BoolSerializer.serialize(value.traverseOnly), + "no_access": Serialization._BoolSerializer.serialize(value.noAccess), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FolderSharingInfo { + switch json { + case .dictionary(let dict): + let readOnly = Serialization._BoolSerializer.deserialize(dict["read_only"] ?? .null) + let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) + let sharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["shared_folder_id"] ?? .null) + let traverseOnly = Serialization._BoolSerializer.deserialize(dict["traverse_only"] ?? .number(0)) + let noAccess = Serialization._BoolSerializer.deserialize(dict["no_access"] ?? .number(0)) + return FolderSharingInfo(readOnly: readOnly, parentSharedFolderId: parentSharedFolderId, sharedFolderId: sharedFolderId, traverseOnly: traverseOnly, noAccess: noAccess) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetCopyReferenceArg struct + open class GetCopyReferenceArg: CustomStringConvertible { + /// The path to the file or folder you want to get a copy reference to. + public let path: String + public init(path: String) { + stringValidator(pattern: "(/(.|[\\r\\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)")(path) + self.path = path + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetCopyReferenceArgSerializer().serialize(self)))" + } + } + open class GetCopyReferenceArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetCopyReferenceArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetCopyReferenceArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + return GetCopyReferenceArg(path: path) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetCopyReferenceError union + public enum GetCopyReferenceError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetCopyReferenceErrorSerializer().serialize(self)))" + } + } + open class GetCopyReferenceErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetCopyReferenceError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetCopyReferenceError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return GetCopyReferenceError.path(v) + case "other": + return GetCopyReferenceError.other + default: + return GetCopyReferenceError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetCopyReferenceResult struct + open class GetCopyReferenceResult: CustomStringConvertible { + /// Metadata of the file or folder. + public let metadata: Files.Metadata + /// A copy reference to the file or folder. + public let copyReference: String + /// The expiration date of the copy reference. This value is currently set to be far enough in the future so + /// that expiration is effectively not an issue. + public let expires: Date + public init(metadata: Files.Metadata, copyReference: String, expires: Date) { + self.metadata = metadata + stringValidator()(copyReference) + self.copyReference = copyReference + self.expires = expires + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetCopyReferenceResultSerializer().serialize(self)))" + } + } + open class GetCopyReferenceResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetCopyReferenceResult) -> JSON { + let output = [ + "metadata": Files.MetadataSerializer().serialize(value.metadata), + "copy_reference": Serialization._StringSerializer.serialize(value.copyReference), + "expires": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.expires), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetCopyReferenceResult { + switch json { + case .dictionary(let dict): + let metadata = Files.MetadataSerializer().deserialize(dict["metadata"] ?? .null) + let copyReference = Serialization._StringSerializer.deserialize(dict["copy_reference"] ?? .null) + let expires = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["expires"] ?? .null) + return GetCopyReferenceResult(metadata: metadata, copyReference: copyReference, expires: expires) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetTemporaryLinkArg struct + open class GetTemporaryLinkArg: CustomStringConvertible { + /// The path to the file you want a temporary link to. + public let path: String + public init(path: String) { + stringValidator(pattern: "(/(.|[\\r\\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)")(path) + self.path = path + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTemporaryLinkArgSerializer().serialize(self)))" + } + } + open class GetTemporaryLinkArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTemporaryLinkArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetTemporaryLinkArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + return GetTemporaryLinkArg(path: path) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetTemporaryLinkError union + public enum GetTemporaryLinkError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTemporaryLinkErrorSerializer().serialize(self)))" + } + } + open class GetTemporaryLinkErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTemporaryLinkError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetTemporaryLinkError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return GetTemporaryLinkError.path(v) + case "other": + return GetTemporaryLinkError.other + default: + return GetTemporaryLinkError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetTemporaryLinkResult struct + open class GetTemporaryLinkResult: CustomStringConvertible { + /// Metadata of the file. + public let metadata: Files.FileMetadata + /// The temporary link which can be used to stream content the file. + public let link: String + public init(metadata: Files.FileMetadata, link: String) { + self.metadata = metadata + stringValidator()(link) + self.link = link + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTemporaryLinkResultSerializer().serialize(self)))" + } + } + open class GetTemporaryLinkResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTemporaryLinkResult) -> JSON { + let output = [ + "metadata": Files.FileMetadataSerializer().serialize(value.metadata), + "link": Serialization._StringSerializer.serialize(value.link), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetTemporaryLinkResult { + switch json { + case .dictionary(let dict): + let metadata = Files.FileMetadataSerializer().deserialize(dict["metadata"] ?? .null) + let link = Serialization._StringSerializer.deserialize(dict["link"] ?? .null) + return GetTemporaryLinkResult(metadata: metadata, link: link) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetTemporaryUploadLinkArg struct + open class GetTemporaryUploadLinkArg: CustomStringConvertible { + /// Contains the path and other optional modifiers for the future upload commit. Equivalent to the parameters + /// provided to upload. + public let commitInfo: Files.CommitInfo + /// How long before this link expires, in seconds. Attempting to start an upload with this link longer than + /// this period of time after link creation will result in an error. + public let duration: Double + public init(commitInfo: Files.CommitInfo, duration: Double = 14400.0) { + self.commitInfo = commitInfo + comparableValidator(minValue: 60.0, maxValue: 14400.0)(duration) + self.duration = duration + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTemporaryUploadLinkArgSerializer().serialize(self)))" + } + } + open class GetTemporaryUploadLinkArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTemporaryUploadLinkArg) -> JSON { + let output = [ + "commit_info": Files.CommitInfoSerializer().serialize(value.commitInfo), + "duration": Serialization._DoubleSerializer.serialize(value.duration), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetTemporaryUploadLinkArg { + switch json { + case .dictionary(let dict): + let commitInfo = Files.CommitInfoSerializer().deserialize(dict["commit_info"] ?? .null) + let duration = Serialization._DoubleSerializer.deserialize(dict["duration"] ?? .number(14400.0)) + return GetTemporaryUploadLinkArg(commitInfo: commitInfo, duration: duration) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetTemporaryUploadLinkResult struct + open class GetTemporaryUploadLinkResult: CustomStringConvertible { + /// The temporary link which can be used to stream a file to a Dropbox location. + public let link: String + public init(link: String) { + stringValidator()(link) + self.link = link + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTemporaryUploadLinkResultSerializer().serialize(self)))" + } + } + open class GetTemporaryUploadLinkResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTemporaryUploadLinkResult) -> JSON { + let output = [ + "link": Serialization._StringSerializer.serialize(value.link), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetTemporaryUploadLinkResult { + switch json { + case .dictionary(let dict): + let link = Serialization._StringSerializer.deserialize(dict["link"] ?? .null) + return GetTemporaryUploadLinkResult(link: link) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for getThumbnailBatch. + open class GetThumbnailBatchArg: CustomStringConvertible { + /// List of files to get thumbnails. + public let entries: Array + public init(entries: Array) { + self.entries = entries + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetThumbnailBatchArgSerializer().serialize(self)))" + } + } + open class GetThumbnailBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetThumbnailBatchArg) -> JSON { + let output = [ + "entries": ArraySerializer(Files.ThumbnailArgSerializer()).serialize(value.entries), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetThumbnailBatchArg { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.ThumbnailArgSerializer()).deserialize(dict["entries"] ?? .null) + return GetThumbnailBatchArg(entries: entries) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetThumbnailBatchError union + public enum GetThumbnailBatchError: CustomStringConvertible { + /// The operation involves more than 25 files. + case tooManyFiles + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetThumbnailBatchErrorSerializer().serialize(self)))" + } + } + open class GetThumbnailBatchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetThumbnailBatchError) -> JSON { + switch value { + case .tooManyFiles: + var d = [String: JSON]() + d[".tag"] = .str("too_many_files") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetThumbnailBatchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "too_many_files": + return GetThumbnailBatchError.tooManyFiles + case "other": + return GetThumbnailBatchError.other + default: + return GetThumbnailBatchError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetThumbnailBatchResult struct + open class GetThumbnailBatchResult: CustomStringConvertible { + /// List of files and their thumbnails. + public let entries: Array + public init(entries: Array) { + self.entries = entries + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetThumbnailBatchResultSerializer().serialize(self)))" + } + } + open class GetThumbnailBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetThumbnailBatchResult) -> JSON { + let output = [ + "entries": ArraySerializer(Files.GetThumbnailBatchResultEntrySerializer()).serialize(value.entries), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetThumbnailBatchResult { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.GetThumbnailBatchResultEntrySerializer()).deserialize(dict["entries"] ?? .null) + return GetThumbnailBatchResult(entries: entries) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetThumbnailBatchResultData struct + open class GetThumbnailBatchResultData: CustomStringConvertible { + /// (no description) + public let metadata: Files.FileMetadata + /// A string containing the base64-encoded thumbnail data for this file. + public let thumbnail: String + public init(metadata: Files.FileMetadata, thumbnail: String) { + self.metadata = metadata + stringValidator()(thumbnail) + self.thumbnail = thumbnail + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetThumbnailBatchResultDataSerializer().serialize(self)))" + } + } + open class GetThumbnailBatchResultDataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetThumbnailBatchResultData) -> JSON { + let output = [ + "metadata": Files.FileMetadataSerializer().serialize(value.metadata), + "thumbnail": Serialization._StringSerializer.serialize(value.thumbnail), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetThumbnailBatchResultData { + switch json { + case .dictionary(let dict): + let metadata = Files.FileMetadataSerializer().deserialize(dict["metadata"] ?? .null) + let thumbnail = Serialization._StringSerializer.deserialize(dict["thumbnail"] ?? .null) + return GetThumbnailBatchResultData(metadata: metadata, thumbnail: thumbnail) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetThumbnailBatchResultEntry union + public enum GetThumbnailBatchResultEntry: CustomStringConvertible { + /// An unspecified error. + case success(Files.GetThumbnailBatchResultData) + /// The result for this file if it was an error. + case failure(Files.ThumbnailError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetThumbnailBatchResultEntrySerializer().serialize(self)))" + } + } + open class GetThumbnailBatchResultEntrySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetThumbnailBatchResultEntry) -> JSON { + switch value { + case .success(let arg): + var d = Serialization.getFields(Files.GetThumbnailBatchResultDataSerializer().serialize(arg)) + d[".tag"] = .str("success") + return .dictionary(d) + case .failure(let arg): + var d = ["failure": Files.ThumbnailErrorSerializer().serialize(arg)] + d[".tag"] = .str("failure") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetThumbnailBatchResultEntry { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = Files.GetThumbnailBatchResultDataSerializer().deserialize(json) + return GetThumbnailBatchResultEntry.success(v) + case "failure": + let v = Files.ThumbnailErrorSerializer().deserialize(d["failure"] ?? .null) + return GetThumbnailBatchResultEntry.failure(v) + case "other": + return GetThumbnailBatchResultEntry.other + default: + return GetThumbnailBatchResultEntry.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// GPS coordinates for a photo or video. + open class GpsCoordinates: CustomStringConvertible { + /// Latitude of the GPS coordinates. + public let latitude: Double + /// Longitude of the GPS coordinates. + public let longitude: Double + public init(latitude: Double, longitude: Double) { + comparableValidator()(latitude) + self.latitude = latitude + comparableValidator()(longitude) + self.longitude = longitude + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GpsCoordinatesSerializer().serialize(self)))" + } + } + open class GpsCoordinatesSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GpsCoordinates) -> JSON { + let output = [ + "latitude": Serialization._DoubleSerializer.serialize(value.latitude), + "longitude": Serialization._DoubleSerializer.serialize(value.longitude), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GpsCoordinates { + switch json { + case .dictionary(let dict): + let latitude = Serialization._DoubleSerializer.deserialize(dict["latitude"] ?? .null) + let longitude = Serialization._DoubleSerializer.deserialize(dict["longitude"] ?? .null) + return GpsCoordinates(latitude: latitude, longitude: longitude) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderArg struct + open class ListFolderArg: CustomStringConvertible { + /// A unique identifier for the file. + public let path: String + /// If true, the list folder operation will be applied recursively to all subfolders and the response will + /// contain contents of all subfolders. + public let recursive: Bool + /// If true, mediaInfo in FileMetadata is set for photo and video. + public let includeMediaInfo: Bool + /// If true, the results will include entries for files and folders that used to exist but were deleted. + public let includeDeleted: Bool + /// If true, the results will include a flag for each file indicating whether or not that file has any explicit + /// members. + public let includeHasExplicitSharedMembers: Bool + /// If true, the results will include entries under mounted folders which includes app folder, shared folder and + /// team folder. + public let includeMountedFolders: Bool + /// The maximum number of results to return per request. Note: This is an approximate number and there can be + /// slightly more entries returned in some cases. + public let limit: UInt32? + /// A shared link to list the contents of. If the link is password-protected, the password must be provided. If + /// this field is present, path in ListFolderArg will be relative to root of the shared link. Only non-recursive + /// mode is supported for shared link. + public let sharedLink: Files.SharedLink? + /// If set to a valid list of template IDs, propertyGroups in FileMetadata is set if there exists property data + /// associated with the file and each of the listed templates. + public let includePropertyGroups: FileProperties.TemplateFilterBase? + public init(path: String, recursive: Bool = false, includeMediaInfo: Bool = false, includeDeleted: Bool = false, includeHasExplicitSharedMembers: Bool = false, includeMountedFolders: Bool = true, limit: UInt32? = nil, sharedLink: Files.SharedLink? = nil, includePropertyGroups: FileProperties.TemplateFilterBase? = nil) { + stringValidator(pattern: "(/(.|[\\r\\n])*)?|id:.*|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.recursive = recursive + self.includeMediaInfo = includeMediaInfo + self.includeDeleted = includeDeleted + self.includeHasExplicitSharedMembers = includeHasExplicitSharedMembers + self.includeMountedFolders = includeMountedFolders + nullableValidator(comparableValidator(minValue: 1, maxValue: 2000))(limit) + self.limit = limit + self.sharedLink = sharedLink + self.includePropertyGroups = includePropertyGroups + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderArgSerializer().serialize(self)))" + } + } + open class ListFolderArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "recursive": Serialization._BoolSerializer.serialize(value.recursive), + "include_media_info": Serialization._BoolSerializer.serialize(value.includeMediaInfo), + "include_deleted": Serialization._BoolSerializer.serialize(value.includeDeleted), + "include_has_explicit_shared_members": Serialization._BoolSerializer.serialize(value.includeHasExplicitSharedMembers), + "include_mounted_folders": Serialization._BoolSerializer.serialize(value.includeMountedFolders), + "limit": NullableSerializer(Serialization._UInt32Serializer).serialize(value.limit), + "shared_link": NullableSerializer(Files.SharedLinkSerializer()).serialize(value.sharedLink), + "include_property_groups": NullableSerializer(FileProperties.TemplateFilterBaseSerializer()).serialize(value.includePropertyGroups), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFolderArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let recursive = Serialization._BoolSerializer.deserialize(dict["recursive"] ?? .number(0)) + let includeMediaInfo = Serialization._BoolSerializer.deserialize(dict["include_media_info"] ?? .number(0)) + let includeDeleted = Serialization._BoolSerializer.deserialize(dict["include_deleted"] ?? .number(0)) + let includeHasExplicitSharedMembers = Serialization._BoolSerializer.deserialize(dict["include_has_explicit_shared_members"] ?? .number(0)) + let includeMountedFolders = Serialization._BoolSerializer.deserialize(dict["include_mounted_folders"] ?? .number(1)) + let limit = NullableSerializer(Serialization._UInt32Serializer).deserialize(dict["limit"] ?? .null) + let sharedLink = NullableSerializer(Files.SharedLinkSerializer()).deserialize(dict["shared_link"] ?? .null) + let includePropertyGroups = NullableSerializer(FileProperties.TemplateFilterBaseSerializer()).deserialize(dict["include_property_groups"] ?? .null) + return ListFolderArg(path: path, recursive: recursive, includeMediaInfo: includeMediaInfo, includeDeleted: includeDeleted, includeHasExplicitSharedMembers: includeHasExplicitSharedMembers, includeMountedFolders: includeMountedFolders, limit: limit, sharedLink: sharedLink, includePropertyGroups: includePropertyGroups) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderContinueArg struct + open class ListFolderContinueArg: CustomStringConvertible { + /// The cursor returned by your last call to listFolder or listFolderContinue. + public let cursor: String + public init(cursor: String) { + stringValidator(minLength: 1)(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderContinueArgSerializer().serialize(self)))" + } + } + open class ListFolderContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFolderContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ListFolderContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderContinueError union + public enum ListFolderContinueError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// Indicates that the cursor has been invalidated. Call listFolder to obtain a new cursor. + case reset + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderContinueErrorSerializer().serialize(self)))" + } + } + open class ListFolderContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderContinueError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .reset: + var d = [String: JSON]() + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFolderContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return ListFolderContinueError.path(v) + case "reset": + return ListFolderContinueError.reset + case "other": + return ListFolderContinueError.other + default: + return ListFolderContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListFolderError union + public enum ListFolderError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderErrorSerializer().serialize(self)))" + } + } + open class ListFolderErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFolderError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return ListFolderError.path(v) + case "other": + return ListFolderError.other + default: + return ListFolderError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListFolderGetLatestCursorResult struct + open class ListFolderGetLatestCursorResult: CustomStringConvertible { + /// Pass the cursor into listFolderContinue to see what's changed in the folder since your previous query. + public let cursor: String + public init(cursor: String) { + stringValidator(minLength: 1)(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderGetLatestCursorResultSerializer().serialize(self)))" + } + } + open class ListFolderGetLatestCursorResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderGetLatestCursorResult) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFolderGetLatestCursorResult { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ListFolderGetLatestCursorResult(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderLongpollArg struct + open class ListFolderLongpollArg: CustomStringConvertible { + /// A cursor as returned by listFolder or listFolderContinue. Cursors retrieved by setting includeMediaInfo in + /// ListFolderArg to true are not supported. + public let cursor: String + /// A timeout in seconds. The request will block for at most this length of time, plus up to 90 seconds of + /// random jitter added to avoid the thundering herd problem. Care should be taken when using this parameter, as + /// some network infrastructure does not support long timeouts. + public let timeout: UInt64 + public init(cursor: String, timeout: UInt64 = 30) { + stringValidator(minLength: 1)(cursor) + self.cursor = cursor + comparableValidator(minValue: 30, maxValue: 480)(timeout) + self.timeout = timeout + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderLongpollArgSerializer().serialize(self)))" + } + } + open class ListFolderLongpollArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderLongpollArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + "timeout": Serialization._UInt64Serializer.serialize(value.timeout), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFolderLongpollArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + let timeout = Serialization._UInt64Serializer.deserialize(dict["timeout"] ?? .number(30)) + return ListFolderLongpollArg(cursor: cursor, timeout: timeout) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderLongpollError union + public enum ListFolderLongpollError: CustomStringConvertible { + /// Indicates that the cursor has been invalidated. Call listFolder to obtain a new cursor. + case reset + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderLongpollErrorSerializer().serialize(self)))" + } + } + open class ListFolderLongpollErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderLongpollError) -> JSON { + switch value { + case .reset: + var d = [String: JSON]() + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFolderLongpollError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "reset": + return ListFolderLongpollError.reset + case "other": + return ListFolderLongpollError.other + default: + return ListFolderLongpollError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListFolderLongpollResult struct + open class ListFolderLongpollResult: CustomStringConvertible { + /// Indicates whether new changes are available. If true, call listFolderContinue to retrieve the changes. + public let changes: Bool + /// If present, backoff for at least this many seconds before calling listFolderLongpoll again. + public let backoff: UInt64? + public init(changes: Bool, backoff: UInt64? = nil) { + self.changes = changes + nullableValidator(comparableValidator())(backoff) + self.backoff = backoff + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderLongpollResultSerializer().serialize(self)))" + } + } + open class ListFolderLongpollResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderLongpollResult) -> JSON { + let output = [ + "changes": Serialization._BoolSerializer.serialize(value.changes), + "backoff": NullableSerializer(Serialization._UInt64Serializer).serialize(value.backoff), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFolderLongpollResult { + switch json { + case .dictionary(let dict): + let changes = Serialization._BoolSerializer.deserialize(dict["changes"] ?? .null) + let backoff = NullableSerializer(Serialization._UInt64Serializer).deserialize(dict["backoff"] ?? .null) + return ListFolderLongpollResult(changes: changes, backoff: backoff) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderResult struct + open class ListFolderResult: CustomStringConvertible { + /// The files and (direct) subfolders in the folder. + public let entries: Array + /// Pass the cursor into listFolderContinue to see what's changed in the folder since your previous query. + public let cursor: String + /// If true, then there are more entries available. Pass the cursor to listFolderContinue to retrieve the rest. + public let hasMore: Bool + public init(entries: Array, cursor: String, hasMore: Bool) { + self.entries = entries + stringValidator(minLength: 1)(cursor) + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderResultSerializer().serialize(self)))" + } + } + open class ListFolderResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderResult) -> JSON { + let output = [ + "entries": ArraySerializer(Files.MetadataSerializer()).serialize(value.entries), + "cursor": Serialization._StringSerializer.serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFolderResult { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.MetadataSerializer()).deserialize(dict["entries"] ?? .null) + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return ListFolderResult(entries: entries, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListRevisionsArg struct + open class ListRevisionsArg: CustomStringConvertible { + /// The path to the file you want to see the revisions of. + public let path: String + /// Determines the behavior of the API in listing the revisions for a given file path or id. + public let mode: Files.ListRevisionsMode + /// The maximum number of revision entries returned. + public let limit: UInt64 + public init(path: String, mode: Files.ListRevisionsMode = .path, limit: UInt64 = 10) { + stringValidator(pattern: "/(.|[\\r\\n])*|id:.*|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.mode = mode + comparableValidator(minValue: 1, maxValue: 100)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListRevisionsArgSerializer().serialize(self)))" + } + } + open class ListRevisionsArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListRevisionsArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "mode": Files.ListRevisionsModeSerializer().serialize(value.mode), + "limit": Serialization._UInt64Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListRevisionsArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let mode = Files.ListRevisionsModeSerializer().deserialize(dict["mode"] ?? Files.ListRevisionsModeSerializer().serialize(.path)) + let limit = Serialization._UInt64Serializer.deserialize(dict["limit"] ?? .number(10)) + return ListRevisionsArg(path: path, mode: mode, limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListRevisionsError union + public enum ListRevisionsError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListRevisionsErrorSerializer().serialize(self)))" + } + } + open class ListRevisionsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListRevisionsError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListRevisionsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return ListRevisionsError.path(v) + case "other": + return ListRevisionsError.other + default: + return ListRevisionsError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListRevisionsMode union + public enum ListRevisionsMode: CustomStringConvertible { + /// Returns revisions with the same file path as identified by the latest file entry at the given file path or + /// id. + case path + /// Returns revisions with the same file id as identified by the latest file entry at the given file path or id. + case id + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListRevisionsModeSerializer().serialize(self)))" + } + } + open class ListRevisionsModeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListRevisionsMode) -> JSON { + switch value { + case .path: + var d = [String: JSON]() + d[".tag"] = .str("path") + return .dictionary(d) + case .id: + var d = [String: JSON]() + d[".tag"] = .str("id") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListRevisionsMode { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + return ListRevisionsMode.path + case "id": + return ListRevisionsMode.id + case "other": + return ListRevisionsMode.other + default: + return ListRevisionsMode.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListRevisionsResult struct + open class ListRevisionsResult: CustomStringConvertible { + /// If the file identified by the latest revision in the response is either deleted or moved. + public let isDeleted: Bool + /// The time of deletion if the file was deleted. + public let serverDeleted: Date? + /// The revisions for the file. Only revisions that are not deleted will show up here. + public let entries: Array + public init(isDeleted: Bool, entries: Array, serverDeleted: Date? = nil) { + self.isDeleted = isDeleted + self.serverDeleted = serverDeleted + self.entries = entries + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListRevisionsResultSerializer().serialize(self)))" + } + } + open class ListRevisionsResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListRevisionsResult) -> JSON { + let output = [ + "is_deleted": Serialization._BoolSerializer.serialize(value.isDeleted), + "entries": ArraySerializer(Files.FileMetadataSerializer()).serialize(value.entries), + "server_deleted": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.serverDeleted), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListRevisionsResult { + switch json { + case .dictionary(let dict): + let isDeleted = Serialization._BoolSerializer.deserialize(dict["is_deleted"] ?? .null) + let entries = ArraySerializer(Files.FileMetadataSerializer()).deserialize(dict["entries"] ?? .null) + let serverDeleted = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["server_deleted"] ?? .null) + return ListRevisionsResult(isDeleted: isDeleted, entries: entries, serverDeleted: serverDeleted) + default: + fatalError("Type error deserializing") + } + } + } + + /// The LookupError union + public enum LookupError: CustomStringConvertible { + /// The given path does not satisfy the required path format. Please refer to the Path formats documentation + /// https://www.dropbox.com/developers/documentation/http/documentation#path-formats for more information. + case malformedPath(String?) + /// There is nothing at the given path. + case notFound + /// We were expecting a file, but the given path refers to something that isn't a file. + case notFile + /// We were expecting a folder, but the given path refers to something that isn't a folder. + case notFolder + /// The file cannot be transferred because the content is restricted. For example, sometimes there are legal + /// restrictions due to copyright claims. + case restrictedContent + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LookupErrorSerializer().serialize(self)))" + } + } + open class LookupErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LookupError) -> JSON { + switch value { + case .malformedPath(let arg): + var d = ["malformed_path": NullableSerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("malformed_path") + return .dictionary(d) + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .notFile: + var d = [String: JSON]() + d[".tag"] = .str("not_file") + return .dictionary(d) + case .notFolder: + var d = [String: JSON]() + d[".tag"] = .str("not_folder") + return .dictionary(d) + case .restrictedContent: + var d = [String: JSON]() + d[".tag"] = .str("restricted_content") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LookupError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "malformed_path": + let v = NullableSerializer(Serialization._StringSerializer).deserialize(d["malformed_path"] ?? .null) + return LookupError.malformedPath(v) + case "not_found": + return LookupError.notFound + case "not_file": + return LookupError.notFile + case "not_folder": + return LookupError.notFolder + case "restricted_content": + return LookupError.restrictedContent + case "other": + return LookupError.other + default: + return LookupError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MediaInfo union + public enum MediaInfo: CustomStringConvertible { + /// Indicate the photo/video is still under processing and metadata is not available yet. + case pending + /// The metadata for the photo/video. + case metadata(Files.MediaMetadata) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MediaInfoSerializer().serialize(self)))" + } + } + open class MediaInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MediaInfo) -> JSON { + switch value { + case .pending: + var d = [String: JSON]() + d[".tag"] = .str("pending") + return .dictionary(d) + case .metadata(let arg): + var d = ["metadata": Files.MediaMetadataSerializer().serialize(arg)] + d[".tag"] = .str("metadata") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MediaInfo { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "pending": + return MediaInfo.pending + case "metadata": + let v = Files.MediaMetadataSerializer().deserialize(d["metadata"] ?? .null) + return MediaInfo.metadata(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Metadata for a photo or video. + open class MediaMetadata: CustomStringConvertible { + /// Dimension of the photo/video. + public let dimensions: Files.Dimensions? + /// The GPS coordinate of the photo/video. + public let location: Files.GpsCoordinates? + /// The timestamp when the photo/video is taken. + public let timeTaken: Date? + public init(dimensions: Files.Dimensions? = nil, location: Files.GpsCoordinates? = nil, timeTaken: Date? = nil) { + self.dimensions = dimensions + self.location = location + self.timeTaken = timeTaken + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MediaMetadataSerializer().serialize(self)))" + } + } + open class MediaMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MediaMetadata) -> JSON { + var output = [ + "dimensions": NullableSerializer(Files.DimensionsSerializer()).serialize(value.dimensions), + "location": NullableSerializer(Files.GpsCoordinatesSerializer()).serialize(value.location), + "time_taken": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.timeTaken), + ] + switch value { + case let photo as Files.PhotoMetadata: + for (k, v) in Serialization.getFields(Files.PhotoMetadataSerializer().serialize(photo)) { + output[k] = v + } + output[".tag"] = .str("photo") + case let video as Files.VideoMetadata: + for (k, v) in Serialization.getFields(Files.VideoMetadataSerializer().serialize(video)) { + output[k] = v + } + output[".tag"] = .str("video") + default: fatalError("Tried to serialize unexpected subtype") + } + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MediaMetadata { + switch json { + case .dictionary(let dict): + let tag = Serialization.getTag(dict) + switch tag { + case "photo": + return Files.PhotoMetadataSerializer().deserialize(json) + case "video": + return Files.VideoMetadataSerializer().deserialize(json) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Type error deserializing") + } + } + } + + /// The RelocationBatchArgBase struct + open class RelocationBatchArgBase: CustomStringConvertible { + /// List of entries to be moved or copied. Each entry is RelocationPath. + public let entries: Array + /// If there's a conflict with any file, have the Dropbox server try to autorename that file to avoid the + /// conflict. + public let autorename: Bool + public init(entries: Array, autorename: Bool = false) { + self.entries = entries + self.autorename = autorename + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchArgBaseSerializer().serialize(self)))" + } + } + open class RelocationBatchArgBaseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchArgBase) -> JSON { + let output = [ + "entries": ArraySerializer(Files.RelocationPathSerializer()).serialize(value.entries), + "autorename": Serialization._BoolSerializer.serialize(value.autorename), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelocationBatchArgBase { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.RelocationPathSerializer()).deserialize(dict["entries"] ?? .null) + let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) + return RelocationBatchArgBase(entries: entries, autorename: autorename) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MoveBatchArg struct + open class MoveBatchArg: Files.RelocationBatchArgBase { + /// Allow moves by owner even if it would result in an ownership transfer for the content being moved. This does + /// not apply to copies. + public let allowOwnershipTransfer: Bool + public init(entries: Array, autorename: Bool = false, allowOwnershipTransfer: Bool = false) { + self.allowOwnershipTransfer = allowOwnershipTransfer + super.init(entries: entries, autorename: autorename) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MoveBatchArgSerializer().serialize(self)))" + } + } + open class MoveBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MoveBatchArg) -> JSON { + let output = [ + "entries": ArraySerializer(Files.RelocationPathSerializer()).serialize(value.entries), + "autorename": Serialization._BoolSerializer.serialize(value.autorename), + "allow_ownership_transfer": Serialization._BoolSerializer.serialize(value.allowOwnershipTransfer), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MoveBatchArg { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.RelocationPathSerializer()).deserialize(dict["entries"] ?? .null) + let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) + let allowOwnershipTransfer = Serialization._BoolSerializer.deserialize(dict["allow_ownership_transfer"] ?? .number(0)) + return MoveBatchArg(entries: entries, autorename: autorename, allowOwnershipTransfer: allowOwnershipTransfer) + default: + fatalError("Type error deserializing") + } + } + } + + /// Metadata for a photo. + open class PhotoMetadata: Files.MediaMetadata { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PhotoMetadataSerializer().serialize(self)))" + } + } + open class PhotoMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PhotoMetadata) -> JSON { + let output = [ + "dimensions": NullableSerializer(Files.DimensionsSerializer()).serialize(value.dimensions), + "location": NullableSerializer(Files.GpsCoordinatesSerializer()).serialize(value.location), + "time_taken": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.timeTaken), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PhotoMetadata { + switch json { + case .dictionary(let dict): + let dimensions = NullableSerializer(Files.DimensionsSerializer()).deserialize(dict["dimensions"] ?? .null) + let location = NullableSerializer(Files.GpsCoordinatesSerializer()).deserialize(dict["location"] ?? .null) + let timeTaken = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["time_taken"] ?? .null) + return PhotoMetadata(dimensions: dimensions, location: location, timeTaken: timeTaken) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PreviewArg struct + open class PreviewArg: CustomStringConvertible { + /// The path of the file to preview. + public let path: String + /// Please specify revision in path instead. + public let rev: String? + public init(path: String, rev: String? = nil) { + stringValidator(pattern: "(/(.|[\\r\\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)")(path) + self.path = path + nullableValidator(stringValidator(minLength: 9, pattern: "[0-9a-f]+"))(rev) + self.rev = rev + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PreviewArgSerializer().serialize(self)))" + } + } + open class PreviewArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PreviewArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "rev": NullableSerializer(Serialization._StringSerializer).serialize(value.rev), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PreviewArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let rev = NullableSerializer(Serialization._StringSerializer).deserialize(dict["rev"] ?? .null) + return PreviewArg(path: path, rev: rev) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PreviewError union + public enum PreviewError: CustomStringConvertible { + /// An error occurs when downloading metadata for the file. + case path(Files.LookupError) + /// This preview generation is still in progress and the file is not ready for preview yet. + case inProgress + /// The file extension is not supported preview generation. + case unsupportedExtension + /// The file content is not supported for preview generation. + case unsupportedContent + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PreviewErrorSerializer().serialize(self)))" + } + } + open class PreviewErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PreviewError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .unsupportedExtension: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_extension") + return .dictionary(d) + case .unsupportedContent: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_content") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PreviewError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return PreviewError.path(v) + case "in_progress": + return PreviewError.inProgress + case "unsupported_extension": + return PreviewError.unsupportedExtension + case "unsupported_content": + return PreviewError.unsupportedContent + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RelocationPath struct + open class RelocationPath: CustomStringConvertible { + /// Path in the user's Dropbox to be copied or moved. + public let fromPath: String + /// Path in the user's Dropbox that is the destination. + public let toPath: String + public init(fromPath: String, toPath: String) { + stringValidator(pattern: "(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)|(id:.*)")(fromPath) + self.fromPath = fromPath + stringValidator(pattern: "(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)|(id:.*)")(toPath) + self.toPath = toPath + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationPathSerializer().serialize(self)))" + } + } + open class RelocationPathSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationPath) -> JSON { + let output = [ + "from_path": Serialization._StringSerializer.serialize(value.fromPath), + "to_path": Serialization._StringSerializer.serialize(value.toPath), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelocationPath { + switch json { + case .dictionary(let dict): + let fromPath = Serialization._StringSerializer.deserialize(dict["from_path"] ?? .null) + let toPath = Serialization._StringSerializer.deserialize(dict["to_path"] ?? .null) + return RelocationPath(fromPath: fromPath, toPath: toPath) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RelocationArg struct + open class RelocationArg: Files.RelocationPath { + /// If true, copy will copy contents in shared folder, otherwise cantCopySharedFolder in RelocationError will be + /// returned if fromPath contains shared folder. This field is always true for move. + public let allowSharedFolder: Bool + /// If there's a conflict, have the Dropbox server try to autorename the file to avoid the conflict. + public let autorename: Bool + /// Allow moves by owner even if it would result in an ownership transfer for the content being moved. This does + /// not apply to copies. + public let allowOwnershipTransfer: Bool + public init(fromPath: String, toPath: String, allowSharedFolder: Bool = false, autorename: Bool = false, allowOwnershipTransfer: Bool = false) { + self.allowSharedFolder = allowSharedFolder + self.autorename = autorename + self.allowOwnershipTransfer = allowOwnershipTransfer + super.init(fromPath: fromPath, toPath: toPath) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationArgSerializer().serialize(self)))" + } + } + open class RelocationArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationArg) -> JSON { + let output = [ + "from_path": Serialization._StringSerializer.serialize(value.fromPath), + "to_path": Serialization._StringSerializer.serialize(value.toPath), + "allow_shared_folder": Serialization._BoolSerializer.serialize(value.allowSharedFolder), + "autorename": Serialization._BoolSerializer.serialize(value.autorename), + "allow_ownership_transfer": Serialization._BoolSerializer.serialize(value.allowOwnershipTransfer), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelocationArg { + switch json { + case .dictionary(let dict): + let fromPath = Serialization._StringSerializer.deserialize(dict["from_path"] ?? .null) + let toPath = Serialization._StringSerializer.deserialize(dict["to_path"] ?? .null) + let allowSharedFolder = Serialization._BoolSerializer.deserialize(dict["allow_shared_folder"] ?? .number(0)) + let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) + let allowOwnershipTransfer = Serialization._BoolSerializer.deserialize(dict["allow_ownership_transfer"] ?? .number(0)) + return RelocationArg(fromPath: fromPath, toPath: toPath, allowSharedFolder: allowSharedFolder, autorename: autorename, allowOwnershipTransfer: allowOwnershipTransfer) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RelocationBatchArg struct + open class RelocationBatchArg: Files.RelocationBatchArgBase { + /// If true, copyBatch will copy contents in shared folder, otherwise cantCopySharedFolder in RelocationError + /// will be returned if fromPath in RelocationPath contains shared folder. This field is always true for + /// moveBatch. + public let allowSharedFolder: Bool + /// Allow moves by owner even if it would result in an ownership transfer for the content being moved. This does + /// not apply to copies. + public let allowOwnershipTransfer: Bool + public init(entries: Array, autorename: Bool = false, allowSharedFolder: Bool = false, allowOwnershipTransfer: Bool = false) { + self.allowSharedFolder = allowSharedFolder + self.allowOwnershipTransfer = allowOwnershipTransfer + super.init(entries: entries, autorename: autorename) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchArgSerializer().serialize(self)))" + } + } + open class RelocationBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchArg) -> JSON { + let output = [ + "entries": ArraySerializer(Files.RelocationPathSerializer()).serialize(value.entries), + "autorename": Serialization._BoolSerializer.serialize(value.autorename), + "allow_shared_folder": Serialization._BoolSerializer.serialize(value.allowSharedFolder), + "allow_ownership_transfer": Serialization._BoolSerializer.serialize(value.allowOwnershipTransfer), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelocationBatchArg { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.RelocationPathSerializer()).deserialize(dict["entries"] ?? .null) + let autorename = Serialization._BoolSerializer.deserialize(dict["autorename"] ?? .number(0)) + let allowSharedFolder = Serialization._BoolSerializer.deserialize(dict["allow_shared_folder"] ?? .number(0)) + let allowOwnershipTransfer = Serialization._BoolSerializer.deserialize(dict["allow_ownership_transfer"] ?? .number(0)) + return RelocationBatchArg(entries: entries, autorename: autorename, allowSharedFolder: allowSharedFolder, allowOwnershipTransfer: allowOwnershipTransfer) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RelocationError union + public enum RelocationError: CustomStringConvertible { + /// An unspecified error. + case fromLookup(Files.LookupError) + /// An unspecified error. + case fromWrite(Files.WriteError) + /// An unspecified error. + case to(Files.WriteError) + /// Shared folders can't be copied. + case cantCopySharedFolder + /// Your move operation would result in nested shared folders. This is not allowed. + case cantNestSharedFolder + /// You cannot move a folder into itself. + case cantMoveFolderIntoItself + /// The operation would involve more than 10,000 files and folders. + case tooManyFiles + /// There are duplicated/nested paths among fromPath in RelocationArg and toPath in RelocationArg. + case duplicatedOrNestedPaths + /// Your move operation would result in an ownership transfer. You may reissue the request with the field + /// allowOwnershipTransfer in RelocationArg to true. + case cantTransferOwnership + /// The current user does not have enough space to move or copy the files. + case insufficientQuota + /// Something went wrong with the job on Dropbox's end. You'll need to verify that the action you were taking + /// succeeded, and if not, try again. This should happen very rarely. + case internalError + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationErrorSerializer().serialize(self)))" + } + } + open class RelocationErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationError) -> JSON { + switch value { + case .fromLookup(let arg): + var d = ["from_lookup": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("from_lookup") + return .dictionary(d) + case .fromWrite(let arg): + var d = ["from_write": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("from_write") + return .dictionary(d) + case .to(let arg): + var d = ["to": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("to") + return .dictionary(d) + case .cantCopySharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("cant_copy_shared_folder") + return .dictionary(d) + case .cantNestSharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("cant_nest_shared_folder") + return .dictionary(d) + case .cantMoveFolderIntoItself: + var d = [String: JSON]() + d[".tag"] = .str("cant_move_folder_into_itself") + return .dictionary(d) + case .tooManyFiles: + var d = [String: JSON]() + d[".tag"] = .str("too_many_files") + return .dictionary(d) + case .duplicatedOrNestedPaths: + var d = [String: JSON]() + d[".tag"] = .str("duplicated_or_nested_paths") + return .dictionary(d) + case .cantTransferOwnership: + var d = [String: JSON]() + d[".tag"] = .str("cant_transfer_ownership") + return .dictionary(d) + case .insufficientQuota: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_quota") + return .dictionary(d) + case .internalError: + var d = [String: JSON]() + d[".tag"] = .str("internal_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelocationError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "from_lookup": + let v = Files.LookupErrorSerializer().deserialize(d["from_lookup"] ?? .null) + return RelocationError.fromLookup(v) + case "from_write": + let v = Files.WriteErrorSerializer().deserialize(d["from_write"] ?? .null) + return RelocationError.fromWrite(v) + case "to": + let v = Files.WriteErrorSerializer().deserialize(d["to"] ?? .null) + return RelocationError.to(v) + case "cant_copy_shared_folder": + return RelocationError.cantCopySharedFolder + case "cant_nest_shared_folder": + return RelocationError.cantNestSharedFolder + case "cant_move_folder_into_itself": + return RelocationError.cantMoveFolderIntoItself + case "too_many_files": + return RelocationError.tooManyFiles + case "duplicated_or_nested_paths": + return RelocationError.duplicatedOrNestedPaths + case "cant_transfer_ownership": + return RelocationError.cantTransferOwnership + case "insufficient_quota": + return RelocationError.insufficientQuota + case "internal_error": + return RelocationError.internalError + case "other": + return RelocationError.other + default: + return RelocationError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RelocationBatchError union + public enum RelocationBatchError: CustomStringConvertible { + /// An unspecified error. + case fromLookup(Files.LookupError) + /// An unspecified error. + case fromWrite(Files.WriteError) + /// An unspecified error. + case to(Files.WriteError) + /// Shared folders can't be copied. + case cantCopySharedFolder + /// Your move operation would result in nested shared folders. This is not allowed. + case cantNestSharedFolder + /// You cannot move a folder into itself. + case cantMoveFolderIntoItself + /// The operation would involve more than 10,000 files and folders. + case tooManyFiles + /// There are duplicated/nested paths among fromPath in RelocationArg and toPath in RelocationArg. + case duplicatedOrNestedPaths + /// Your move operation would result in an ownership transfer. You may reissue the request with the field + /// allowOwnershipTransfer in RelocationArg to true. + case cantTransferOwnership + /// The current user does not have enough space to move or copy the files. + case insufficientQuota + /// Something went wrong with the job on Dropbox's end. You'll need to verify that the action you were taking + /// succeeded, and if not, try again. This should happen very rarely. + case internalError + /// An unspecified error. + case other + /// There are too many write operations in user's Dropbox. Please retry this request. + case tooManyWriteOperations + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchErrorSerializer().serialize(self)))" + } + } + open class RelocationBatchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchError) -> JSON { + switch value { + case .fromLookup(let arg): + var d = ["from_lookup": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("from_lookup") + return .dictionary(d) + case .fromWrite(let arg): + var d = ["from_write": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("from_write") + return .dictionary(d) + case .to(let arg): + var d = ["to": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("to") + return .dictionary(d) + case .cantCopySharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("cant_copy_shared_folder") + return .dictionary(d) + case .cantNestSharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("cant_nest_shared_folder") + return .dictionary(d) + case .cantMoveFolderIntoItself: + var d = [String: JSON]() + d[".tag"] = .str("cant_move_folder_into_itself") + return .dictionary(d) + case .tooManyFiles: + var d = [String: JSON]() + d[".tag"] = .str("too_many_files") + return .dictionary(d) + case .duplicatedOrNestedPaths: + var d = [String: JSON]() + d[".tag"] = .str("duplicated_or_nested_paths") + return .dictionary(d) + case .cantTransferOwnership: + var d = [String: JSON]() + d[".tag"] = .str("cant_transfer_ownership") + return .dictionary(d) + case .insufficientQuota: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_quota") + return .dictionary(d) + case .internalError: + var d = [String: JSON]() + d[".tag"] = .str("internal_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .tooManyWriteOperations: + var d = [String: JSON]() + d[".tag"] = .str("too_many_write_operations") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelocationBatchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "from_lookup": + let v = Files.LookupErrorSerializer().deserialize(d["from_lookup"] ?? .null) + return RelocationBatchError.fromLookup(v) + case "from_write": + let v = Files.WriteErrorSerializer().deserialize(d["from_write"] ?? .null) + return RelocationBatchError.fromWrite(v) + case "to": + let v = Files.WriteErrorSerializer().deserialize(d["to"] ?? .null) + return RelocationBatchError.to(v) + case "cant_copy_shared_folder": + return RelocationBatchError.cantCopySharedFolder + case "cant_nest_shared_folder": + return RelocationBatchError.cantNestSharedFolder + case "cant_move_folder_into_itself": + return RelocationBatchError.cantMoveFolderIntoItself + case "too_many_files": + return RelocationBatchError.tooManyFiles + case "duplicated_or_nested_paths": + return RelocationBatchError.duplicatedOrNestedPaths + case "cant_transfer_ownership": + return RelocationBatchError.cantTransferOwnership + case "insufficient_quota": + return RelocationBatchError.insufficientQuota + case "internal_error": + return RelocationBatchError.internalError + case "other": + return RelocationBatchError.other + case "too_many_write_operations": + return RelocationBatchError.tooManyWriteOperations + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RelocationBatchErrorEntry union + public enum RelocationBatchErrorEntry: CustomStringConvertible { + /// User errors that retry won't help. + case relocationError(Files.RelocationError) + /// Something went wrong with the job on Dropbox's end. You'll need to verify that the action you were taking + /// succeeded, and if not, try again. This should happen very rarely. + case internalError + /// There are too many write operations in user's Dropbox. Please retry this request. + case tooManyWriteOperations + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchErrorEntrySerializer().serialize(self)))" + } + } + open class RelocationBatchErrorEntrySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchErrorEntry) -> JSON { + switch value { + case .relocationError(let arg): + var d = ["relocation_error": Files.RelocationErrorSerializer().serialize(arg)] + d[".tag"] = .str("relocation_error") + return .dictionary(d) + case .internalError: + var d = [String: JSON]() + d[".tag"] = .str("internal_error") + return .dictionary(d) + case .tooManyWriteOperations: + var d = [String: JSON]() + d[".tag"] = .str("too_many_write_operations") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelocationBatchErrorEntry { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "relocation_error": + let v = Files.RelocationErrorSerializer().deserialize(d["relocation_error"] ?? .null) + return RelocationBatchErrorEntry.relocationError(v) + case "internal_error": + return RelocationBatchErrorEntry.internalError + case "too_many_write_operations": + return RelocationBatchErrorEntry.tooManyWriteOperations + case "other": + return RelocationBatchErrorEntry.other + default: + return RelocationBatchErrorEntry.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RelocationBatchJobStatus union + public enum RelocationBatchJobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The copy or move batch job has finished. + case complete(Files.RelocationBatchResult) + /// The copy or move batch job has failed with exception. + case failed(Files.RelocationBatchError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchJobStatusSerializer().serialize(self)))" + } + } + open class RelocationBatchJobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchJobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.RelocationBatchResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .failed(let arg): + var d = ["failed": Files.RelocationBatchErrorSerializer().serialize(arg)] + d[".tag"] = .str("failed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelocationBatchJobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return RelocationBatchJobStatus.inProgress + case "complete": + let v = Files.RelocationBatchResultSerializer().deserialize(json) + return RelocationBatchJobStatus.complete(v) + case "failed": + let v = Files.RelocationBatchErrorSerializer().deserialize(d["failed"] ?? .null) + return RelocationBatchJobStatus.failed(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result returned by copyBatch or moveBatch that may either launch an asynchronous job or complete synchronously. + public enum RelocationBatchLaunch: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// An unspecified error. + case complete(Files.RelocationBatchResult) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchLaunchSerializer().serialize(self)))" + } + } + open class RelocationBatchLaunchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchLaunch) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.RelocationBatchResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelocationBatchLaunch { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return RelocationBatchLaunch.asyncJobId(v) + case "complete": + let v = Files.RelocationBatchResultSerializer().deserialize(json) + return RelocationBatchLaunch.complete(v) + case "other": + return RelocationBatchLaunch.other + default: + return RelocationBatchLaunch.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RelocationBatchResult struct + open class RelocationBatchResult: Files.FileOpsResult { + /// (no description) + public let entries: Array + public init(entries: Array) { + self.entries = entries + super.init() + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchResultSerializer().serialize(self)))" + } + } + open class RelocationBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchResult) -> JSON { + let output = [ + "entries": ArraySerializer(Files.RelocationBatchResultDataSerializer()).serialize(value.entries), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelocationBatchResult { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.RelocationBatchResultDataSerializer()).deserialize(dict["entries"] ?? .null) + return RelocationBatchResult(entries: entries) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RelocationBatchResultData struct + open class RelocationBatchResultData: CustomStringConvertible { + /// Metadata of the relocated object. + public let metadata: Files.Metadata + public init(metadata: Files.Metadata) { + self.metadata = metadata + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchResultDataSerializer().serialize(self)))" + } + } + open class RelocationBatchResultDataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchResultData) -> JSON { + let output = [ + "metadata": Files.MetadataSerializer().serialize(value.metadata), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelocationBatchResultData { + switch json { + case .dictionary(let dict): + let metadata = Files.MetadataSerializer().deserialize(dict["metadata"] ?? .null) + return RelocationBatchResultData(metadata: metadata) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RelocationBatchResultEntry union + public enum RelocationBatchResultEntry: CustomStringConvertible { + /// An unspecified error. + case success(Files.Metadata) + /// An unspecified error. + case failure(Files.RelocationBatchErrorEntry) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchResultEntrySerializer().serialize(self)))" + } + } + open class RelocationBatchResultEntrySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchResultEntry) -> JSON { + switch value { + case .success(let arg): + var d = ["success": Files.MetadataSerializer().serialize(arg)] + d[".tag"] = .str("success") + return .dictionary(d) + case .failure(let arg): + var d = ["failure": Files.RelocationBatchErrorEntrySerializer().serialize(arg)] + d[".tag"] = .str("failure") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelocationBatchResultEntry { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = Files.MetadataSerializer().deserialize(d["success"] ?? .null) + return RelocationBatchResultEntry.success(v) + case "failure": + let v = Files.RelocationBatchErrorEntrySerializer().deserialize(d["failure"] ?? .null) + return RelocationBatchResultEntry.failure(v) + case "other": + return RelocationBatchResultEntry.other + default: + return RelocationBatchResultEntry.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result returned by copyBatchV2 or moveBatchV2 that may either launch an asynchronous job or complete + /// synchronously. + public enum RelocationBatchV2JobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The copy or move batch job has finished. + case complete(Files.RelocationBatchV2Result) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchV2JobStatusSerializer().serialize(self)))" + } + } + open class RelocationBatchV2JobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchV2JobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.RelocationBatchV2ResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelocationBatchV2JobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return RelocationBatchV2JobStatus.inProgress + case "complete": + let v = Files.RelocationBatchV2ResultSerializer().deserialize(json) + return RelocationBatchV2JobStatus.complete(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result returned by copyBatchV2 or moveBatchV2 that may either launch an asynchronous job or complete + /// synchronously. + public enum RelocationBatchV2Launch: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// An unspecified error. + case complete(Files.RelocationBatchV2Result) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchV2LaunchSerializer().serialize(self)))" + } + } + open class RelocationBatchV2LaunchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchV2Launch) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.RelocationBatchV2ResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelocationBatchV2Launch { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return RelocationBatchV2Launch.asyncJobId(v) + case "complete": + let v = Files.RelocationBatchV2ResultSerializer().deserialize(json) + return RelocationBatchV2Launch.complete(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RelocationBatchV2Result struct + open class RelocationBatchV2Result: Files.FileOpsResult { + /// Each entry in CopyBatchArg.entries or entries in MoveBatchArg will appear at the same position inside + /// entries in RelocationBatchV2Result. + public let entries: Array + public init(entries: Array) { + self.entries = entries + super.init() + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationBatchV2ResultSerializer().serialize(self)))" + } + } + open class RelocationBatchV2ResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationBatchV2Result) -> JSON { + let output = [ + "entries": ArraySerializer(Files.RelocationBatchResultEntrySerializer()).serialize(value.entries), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelocationBatchV2Result { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.RelocationBatchResultEntrySerializer()).deserialize(dict["entries"] ?? .null) + return RelocationBatchV2Result(entries: entries) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RelocationResult struct + open class RelocationResult: Files.FileOpsResult { + /// Metadata of the relocated object. + public let metadata: Files.Metadata + public init(metadata: Files.Metadata) { + self.metadata = metadata + super.init() + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocationResultSerializer().serialize(self)))" + } + } + open class RelocationResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocationResult) -> JSON { + let output = [ + "metadata": Files.MetadataSerializer().serialize(value.metadata), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelocationResult { + switch json { + case .dictionary(let dict): + let metadata = Files.MetadataSerializer().deserialize(dict["metadata"] ?? .null) + return RelocationResult(metadata: metadata) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RestoreArg struct + open class RestoreArg: CustomStringConvertible { + /// The path to save the restored file. + public let path: String + /// The revision to restore. + public let rev: String + public init(path: String, rev: String) { + stringValidator(pattern: "(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)")(path) + self.path = path + stringValidator(minLength: 9, pattern: "[0-9a-f]+")(rev) + self.rev = rev + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RestoreArgSerializer().serialize(self)))" + } + } + open class RestoreArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RestoreArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "rev": Serialization._StringSerializer.serialize(value.rev), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RestoreArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let rev = Serialization._StringSerializer.deserialize(dict["rev"] ?? .null) + return RestoreArg(path: path, rev: rev) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RestoreError union + public enum RestoreError: CustomStringConvertible { + /// An error occurs when downloading metadata for the file. + case pathLookup(Files.LookupError) + /// An error occurs when trying to restore the file to that path. + case pathWrite(Files.WriteError) + /// The revision is invalid. It may not exist. + case invalidRevision + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RestoreErrorSerializer().serialize(self)))" + } + } + open class RestoreErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RestoreError) -> JSON { + switch value { + case .pathLookup(let arg): + var d = ["path_lookup": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path_lookup") + return .dictionary(d) + case .pathWrite(let arg): + var d = ["path_write": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("path_write") + return .dictionary(d) + case .invalidRevision: + var d = [String: JSON]() + d[".tag"] = .str("invalid_revision") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RestoreError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path_lookup": + let v = Files.LookupErrorSerializer().deserialize(d["path_lookup"] ?? .null) + return RestoreError.pathLookup(v) + case "path_write": + let v = Files.WriteErrorSerializer().deserialize(d["path_write"] ?? .null) + return RestoreError.pathWrite(v) + case "invalid_revision": + return RestoreError.invalidRevision + case "other": + return RestoreError.other + default: + return RestoreError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SaveCopyReferenceArg struct + open class SaveCopyReferenceArg: CustomStringConvertible { + /// A copy reference returned by copyReferenceGet. + public let copyReference: String + /// Path in the user's Dropbox that is the destination. + public let path: String + public init(copyReference: String, path: String) { + stringValidator()(copyReference) + self.copyReference = copyReference + stringValidator(pattern: "/(.|[\\r\\n])*")(path) + self.path = path + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SaveCopyReferenceArgSerializer().serialize(self)))" + } + } + open class SaveCopyReferenceArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SaveCopyReferenceArg) -> JSON { + let output = [ + "copy_reference": Serialization._StringSerializer.serialize(value.copyReference), + "path": Serialization._StringSerializer.serialize(value.path), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SaveCopyReferenceArg { + switch json { + case .dictionary(let dict): + let copyReference = Serialization._StringSerializer.deserialize(dict["copy_reference"] ?? .null) + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + return SaveCopyReferenceArg(copyReference: copyReference, path: path) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SaveCopyReferenceError union + public enum SaveCopyReferenceError: CustomStringConvertible { + /// An unspecified error. + case path(Files.WriteError) + /// The copy reference is invalid. + case invalidCopyReference + /// You don't have permission to save the given copy reference. Please make sure this app is same app which + /// created the copy reference and the source user is still linked to the app. + case noPermission + /// The file referenced by the copy reference cannot be found. + case notFound + /// The operation would involve more than 10,000 files and folders. + case tooManyFiles + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SaveCopyReferenceErrorSerializer().serialize(self)))" + } + } + open class SaveCopyReferenceErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SaveCopyReferenceError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .invalidCopyReference: + var d = [String: JSON]() + d[".tag"] = .str("invalid_copy_reference") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .tooManyFiles: + var d = [String: JSON]() + d[".tag"] = .str("too_many_files") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SaveCopyReferenceError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.WriteErrorSerializer().deserialize(d["path"] ?? .null) + return SaveCopyReferenceError.path(v) + case "invalid_copy_reference": + return SaveCopyReferenceError.invalidCopyReference + case "no_permission": + return SaveCopyReferenceError.noPermission + case "not_found": + return SaveCopyReferenceError.notFound + case "too_many_files": + return SaveCopyReferenceError.tooManyFiles + case "other": + return SaveCopyReferenceError.other + default: + return SaveCopyReferenceError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SaveCopyReferenceResult struct + open class SaveCopyReferenceResult: CustomStringConvertible { + /// The metadata of the saved file or folder in the user's Dropbox. + public let metadata: Files.Metadata + public init(metadata: Files.Metadata) { + self.metadata = metadata + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SaveCopyReferenceResultSerializer().serialize(self)))" + } + } + open class SaveCopyReferenceResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SaveCopyReferenceResult) -> JSON { + let output = [ + "metadata": Files.MetadataSerializer().serialize(value.metadata), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SaveCopyReferenceResult { + switch json { + case .dictionary(let dict): + let metadata = Files.MetadataSerializer().deserialize(dict["metadata"] ?? .null) + return SaveCopyReferenceResult(metadata: metadata) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SaveUrlArg struct + open class SaveUrlArg: CustomStringConvertible { + /// The path in Dropbox where the URL will be saved to. + public let path: String + /// The URL to be saved. + public let url: String + public init(path: String, url: String) { + stringValidator(pattern: "/(.|[\\r\\n])*")(path) + self.path = path + stringValidator()(url) + self.url = url + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SaveUrlArgSerializer().serialize(self)))" + } + } + open class SaveUrlArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SaveUrlArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "url": Serialization._StringSerializer.serialize(value.url), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SaveUrlArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + return SaveUrlArg(path: path, url: url) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SaveUrlError union + public enum SaveUrlError: CustomStringConvertible { + /// An unspecified error. + case path(Files.WriteError) + /// Failed downloading the given URL. + case downloadFailed + /// The given URL is invalid. + case invalidUrl + /// The file where the URL is saved to no longer exists. + case notFound + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SaveUrlErrorSerializer().serialize(self)))" + } + } + open class SaveUrlErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SaveUrlError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .downloadFailed: + var d = [String: JSON]() + d[".tag"] = .str("download_failed") + return .dictionary(d) + case .invalidUrl: + var d = [String: JSON]() + d[".tag"] = .str("invalid_url") + return .dictionary(d) + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SaveUrlError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.WriteErrorSerializer().deserialize(d["path"] ?? .null) + return SaveUrlError.path(v) + case "download_failed": + return SaveUrlError.downloadFailed + case "invalid_url": + return SaveUrlError.invalidUrl + case "not_found": + return SaveUrlError.notFound + case "other": + return SaveUrlError.other + default: + return SaveUrlError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SaveUrlJobStatus union + public enum SaveUrlJobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// Metadata of the file where the URL is saved to. + case complete(Files.FileMetadata) + /// An unspecified error. + case failed(Files.SaveUrlError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SaveUrlJobStatusSerializer().serialize(self)))" + } + } + open class SaveUrlJobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SaveUrlJobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.FileMetadataSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .failed(let arg): + var d = ["failed": Files.SaveUrlErrorSerializer().serialize(arg)] + d[".tag"] = .str("failed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SaveUrlJobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return SaveUrlJobStatus.inProgress + case "complete": + let v = Files.FileMetadataSerializer().deserialize(json) + return SaveUrlJobStatus.complete(v) + case "failed": + let v = Files.SaveUrlErrorSerializer().deserialize(d["failed"] ?? .null) + return SaveUrlJobStatus.failed(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SaveUrlResult union + public enum SaveUrlResult: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// Metadata of the file where the URL is saved to. + case complete(Files.FileMetadata) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SaveUrlResultSerializer().serialize(self)))" + } + } + open class SaveUrlResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SaveUrlResult) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.FileMetadataSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SaveUrlResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return SaveUrlResult.asyncJobId(v) + case "complete": + let v = Files.FileMetadataSerializer().deserialize(json) + return SaveUrlResult.complete(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SearchArg struct + open class SearchArg: CustomStringConvertible { + /// The path in the user's Dropbox to search. Should probably be a folder. + public let path: String + /// The string to search for. The search string is split on spaces into multiple tokens. For file name + /// searching, the last token is used for prefix matching (i.e. "bat c" matches "bat cave" but not "batman + /// car"). + public let query: String + /// The starting index within the search results (used for paging). + public let start: UInt64 + /// The maximum number of search results to return. + public let maxResults: UInt64 + /// The search mode (filename, filename_and_content, or deleted_filename). Note that searching file content is + /// only available for Dropbox Business accounts. + public let mode: Files.SearchMode + public init(path: String, query: String, start: UInt64 = 0, maxResults: UInt64 = 100, mode: Files.SearchMode = .filename) { + stringValidator(pattern: "(/(.|[\\r\\n])*)?|id:.*|(ns:[0-9]+(/.*)?)")(path) + self.path = path + stringValidator()(query) + self.query = query + comparableValidator()(start) + self.start = start + comparableValidator(minValue: 1, maxValue: 1000)(maxResults) + self.maxResults = maxResults + self.mode = mode + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SearchArgSerializer().serialize(self)))" + } + } + open class SearchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SearchArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "query": Serialization._StringSerializer.serialize(value.query), + "start": Serialization._UInt64Serializer.serialize(value.start), + "max_results": Serialization._UInt64Serializer.serialize(value.maxResults), + "mode": Files.SearchModeSerializer().serialize(value.mode), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SearchArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let query = Serialization._StringSerializer.deserialize(dict["query"] ?? .null) + let start = Serialization._UInt64Serializer.deserialize(dict["start"] ?? .number(0)) + let maxResults = Serialization._UInt64Serializer.deserialize(dict["max_results"] ?? .number(100)) + let mode = Files.SearchModeSerializer().deserialize(dict["mode"] ?? Files.SearchModeSerializer().serialize(.filename)) + return SearchArg(path: path, query: query, start: start, maxResults: maxResults, mode: mode) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SearchError union + public enum SearchError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SearchErrorSerializer().serialize(self)))" + } + } + open class SearchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SearchError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SearchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return SearchError.path(v) + case "other": + return SearchError.other + default: + return SearchError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SearchMatch struct + open class SearchMatch: CustomStringConvertible { + /// The type of the match. + public let matchType: Files.SearchMatchType + /// The metadata for the matched file or folder. + public let metadata: Files.Metadata + public init(matchType: Files.SearchMatchType, metadata: Files.Metadata) { + self.matchType = matchType + self.metadata = metadata + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SearchMatchSerializer().serialize(self)))" + } + } + open class SearchMatchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SearchMatch) -> JSON { + let output = [ + "match_type": Files.SearchMatchTypeSerializer().serialize(value.matchType), + "metadata": Files.MetadataSerializer().serialize(value.metadata), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SearchMatch { + switch json { + case .dictionary(let dict): + let matchType = Files.SearchMatchTypeSerializer().deserialize(dict["match_type"] ?? .null) + let metadata = Files.MetadataSerializer().deserialize(dict["metadata"] ?? .null) + return SearchMatch(matchType: matchType, metadata: metadata) + default: + fatalError("Type error deserializing") + } + } + } + + /// Indicates what type of match was found for a given item. + public enum SearchMatchType: CustomStringConvertible { + /// This item was matched on its file or folder name. + case filename + /// This item was matched based on its file contents. + case content + /// This item was matched based on both its contents and its file name. + case both + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SearchMatchTypeSerializer().serialize(self)))" + } + } + open class SearchMatchTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SearchMatchType) -> JSON { + switch value { + case .filename: + var d = [String: JSON]() + d[".tag"] = .str("filename") + return .dictionary(d) + case .content: + var d = [String: JSON]() + d[".tag"] = .str("content") + return .dictionary(d) + case .both: + var d = [String: JSON]() + d[".tag"] = .str("both") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SearchMatchType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "filename": + return SearchMatchType.filename + case "content": + return SearchMatchType.content + case "both": + return SearchMatchType.both + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SearchMode union + public enum SearchMode: CustomStringConvertible { + /// Search file and folder names. + case filename + /// Search file and folder names as well as file contents. + case filenameAndContent + /// Search for deleted file and folder names. + case deletedFilename + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SearchModeSerializer().serialize(self)))" + } + } + open class SearchModeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SearchMode) -> JSON { + switch value { + case .filename: + var d = [String: JSON]() + d[".tag"] = .str("filename") + return .dictionary(d) + case .filenameAndContent: + var d = [String: JSON]() + d[".tag"] = .str("filename_and_content") + return .dictionary(d) + case .deletedFilename: + var d = [String: JSON]() + d[".tag"] = .str("deleted_filename") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SearchMode { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "filename": + return SearchMode.filename + case "filename_and_content": + return SearchMode.filenameAndContent + case "deleted_filename": + return SearchMode.deletedFilename + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SearchResult struct + open class SearchResult: CustomStringConvertible { + /// A list (possibly empty) of matches for the query. + public let matches: Array + /// Used for paging. If true, indicates there is another page of results available that can be fetched by + /// calling search again. + public let more: Bool + /// Used for paging. Value to set the start argument to when calling search to fetch the next page of results. + public let start: UInt64 + public init(matches: Array, more: Bool, start: UInt64) { + self.matches = matches + self.more = more + comparableValidator()(start) + self.start = start + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SearchResultSerializer().serialize(self)))" + } + } + open class SearchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SearchResult) -> JSON { + let output = [ + "matches": ArraySerializer(Files.SearchMatchSerializer()).serialize(value.matches), + "more": Serialization._BoolSerializer.serialize(value.more), + "start": Serialization._UInt64Serializer.serialize(value.start), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SearchResult { + switch json { + case .dictionary(let dict): + let matches = ArraySerializer(Files.SearchMatchSerializer()).deserialize(dict["matches"] ?? .null) + let more = Serialization._BoolSerializer.deserialize(dict["more"] ?? .null) + let start = Serialization._UInt64Serializer.deserialize(dict["start"] ?? .null) + return SearchResult(matches: matches, more: more, start: start) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLink struct + open class SharedLink: CustomStringConvertible { + /// Shared link url. + public let url: String + /// Password for the shared link. + public let password: String? + public init(url: String, password: String? = nil) { + stringValidator()(url) + self.url = url + nullableValidator(stringValidator())(password) + self.password = password + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkSerializer().serialize(self)))" + } + } + open class SharedLinkSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLink) -> JSON { + let output = [ + "url": Serialization._StringSerializer.serialize(value.url), + "password": NullableSerializer(Serialization._StringSerializer).serialize(value.password), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLink { + switch json { + case .dictionary(let dict): + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let password = NullableSerializer(Serialization._StringSerializer).deserialize(dict["password"] ?? .null) + return SharedLink(url: url, password: password) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SymlinkInfo struct + open class SymlinkInfo: CustomStringConvertible { + /// The target this symlink points to. + public let target: String + public init(target: String) { + stringValidator()(target) + self.target = target + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SymlinkInfoSerializer().serialize(self)))" + } + } + open class SymlinkInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SymlinkInfo) -> JSON { + let output = [ + "target": Serialization._StringSerializer.serialize(value.target), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SymlinkInfo { + switch json { + case .dictionary(let dict): + let target = Serialization._StringSerializer.deserialize(dict["target"] ?? .null) + return SymlinkInfo(target: target) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SyncSetting union + public enum SyncSetting: CustomStringConvertible { + /// On first sync to members' computers, the specified folder will follow its parent folder's setting or + /// otherwise follow default sync behavior. + case default_ + /// On first sync to members' computers, the specified folder will be set to not sync with selective sync. + case notSynced + /// The specified folder's not_synced setting is inactive due to its location or other configuration changes. It + /// will follow its parent folder's setting. + case notSyncedInactive + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SyncSettingSerializer().serialize(self)))" + } + } + open class SyncSettingSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SyncSetting) -> JSON { + switch value { + case .default_: + var d = [String: JSON]() + d[".tag"] = .str("default") + return .dictionary(d) + case .notSynced: + var d = [String: JSON]() + d[".tag"] = .str("not_synced") + return .dictionary(d) + case .notSyncedInactive: + var d = [String: JSON]() + d[".tag"] = .str("not_synced_inactive") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SyncSetting { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "default": + return SyncSetting.default_ + case "not_synced": + return SyncSetting.notSynced + case "not_synced_inactive": + return SyncSetting.notSyncedInactive + case "other": + return SyncSetting.other + default: + return SyncSetting.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SyncSettingArg union + public enum SyncSettingArg: CustomStringConvertible { + /// On first sync to members' computers, the specified folder will follow its parent folder's setting or + /// otherwise follow default sync behavior. + case default_ + /// On first sync to members' computers, the specified folder will be set to not sync with selective sync. + case notSynced + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SyncSettingArgSerializer().serialize(self)))" + } + } + open class SyncSettingArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SyncSettingArg) -> JSON { + switch value { + case .default_: + var d = [String: JSON]() + d[".tag"] = .str("default") + return .dictionary(d) + case .notSynced: + var d = [String: JSON]() + d[".tag"] = .str("not_synced") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SyncSettingArg { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "default": + return SyncSettingArg.default_ + case "not_synced": + return SyncSettingArg.notSynced + case "other": + return SyncSettingArg.other + default: + return SyncSettingArg.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SyncSettingsError union + public enum SyncSettingsError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// Setting this combination of sync settings simultaneously is not supported. + case unsupportedCombination + /// The specified configuration is not supported. + case unsupportedConfiguration + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SyncSettingsErrorSerializer().serialize(self)))" + } + } + open class SyncSettingsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SyncSettingsError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .unsupportedCombination: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_combination") + return .dictionary(d) + case .unsupportedConfiguration: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_configuration") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SyncSettingsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return SyncSettingsError.path(v) + case "unsupported_combination": + return SyncSettingsError.unsupportedCombination + case "unsupported_configuration": + return SyncSettingsError.unsupportedConfiguration + case "other": + return SyncSettingsError.other + default: + return SyncSettingsError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ThumbnailArg struct + open class ThumbnailArg: CustomStringConvertible { + /// The path to the image file you want to thumbnail. + public let path: String + /// The format for the thumbnail image, jpeg (default) or png. For images that are photos, jpeg should be + /// preferred, while png is better for screenshots and digital arts. + public let format: Files.ThumbnailFormat + /// The size for the thumbnail image. + public let size: Files.ThumbnailSize + /// How to resize and crop the image to achieve the desired size. + public let mode: Files.ThumbnailMode + public init(path: String, format: Files.ThumbnailFormat = .jpeg, size: Files.ThumbnailSize = .w64h64, mode: Files.ThumbnailMode = .strict) { + stringValidator(pattern: "(/(.|[\\r\\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.format = format + self.size = size + self.mode = mode + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ThumbnailArgSerializer().serialize(self)))" + } + } + open class ThumbnailArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ThumbnailArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "format": Files.ThumbnailFormatSerializer().serialize(value.format), + "size": Files.ThumbnailSizeSerializer().serialize(value.size), + "mode": Files.ThumbnailModeSerializer().serialize(value.mode), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ThumbnailArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let format = Files.ThumbnailFormatSerializer().deserialize(dict["format"] ?? Files.ThumbnailFormatSerializer().serialize(.jpeg)) + let size = Files.ThumbnailSizeSerializer().deserialize(dict["size"] ?? Files.ThumbnailSizeSerializer().serialize(.w64h64)) + let mode = Files.ThumbnailModeSerializer().deserialize(dict["mode"] ?? Files.ThumbnailModeSerializer().serialize(.strict)) + return ThumbnailArg(path: path, format: format, size: size, mode: mode) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ThumbnailError union + public enum ThumbnailError: CustomStringConvertible { + /// An error occurs when downloading metadata for the image. + case path(Files.LookupError) + /// The file extension doesn't allow conversion to a thumbnail. + case unsupportedExtension + /// The image cannot be converted to a thumbnail. + case unsupportedImage + /// An error occurs during thumbnail conversion. + case conversionError + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ThumbnailErrorSerializer().serialize(self)))" + } + } + open class ThumbnailErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ThumbnailError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .unsupportedExtension: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_extension") + return .dictionary(d) + case .unsupportedImage: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_image") + return .dictionary(d) + case .conversionError: + var d = [String: JSON]() + d[".tag"] = .str("conversion_error") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ThumbnailError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return ThumbnailError.path(v) + case "unsupported_extension": + return ThumbnailError.unsupportedExtension + case "unsupported_image": + return ThumbnailError.unsupportedImage + case "conversion_error": + return ThumbnailError.conversionError + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ThumbnailFormat union + public enum ThumbnailFormat: CustomStringConvertible { + /// An unspecified error. + case jpeg + /// An unspecified error. + case png + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ThumbnailFormatSerializer().serialize(self)))" + } + } + open class ThumbnailFormatSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ThumbnailFormat) -> JSON { + switch value { + case .jpeg: + var d = [String: JSON]() + d[".tag"] = .str("jpeg") + return .dictionary(d) + case .png: + var d = [String: JSON]() + d[".tag"] = .str("png") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ThumbnailFormat { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "jpeg": + return ThumbnailFormat.jpeg + case "png": + return ThumbnailFormat.png + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ThumbnailMode union + public enum ThumbnailMode: CustomStringConvertible { + /// Scale down the image to fit within the given size. + case strict + /// Scale down the image to fit within the given size or its transpose. + case bestfit + /// Scale down the image to completely cover the given size or its transpose. + case fitoneBestfit + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ThumbnailModeSerializer().serialize(self)))" + } + } + open class ThumbnailModeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ThumbnailMode) -> JSON { + switch value { + case .strict: + var d = [String: JSON]() + d[".tag"] = .str("strict") + return .dictionary(d) + case .bestfit: + var d = [String: JSON]() + d[".tag"] = .str("bestfit") + return .dictionary(d) + case .fitoneBestfit: + var d = [String: JSON]() + d[".tag"] = .str("fitone_bestfit") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ThumbnailMode { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "strict": + return ThumbnailMode.strict + case "bestfit": + return ThumbnailMode.bestfit + case "fitone_bestfit": + return ThumbnailMode.fitoneBestfit + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ThumbnailSize union + public enum ThumbnailSize: CustomStringConvertible { + /// 32 by 32 px. + case w32h32 + /// 64 by 64 px. + case w64h64 + /// 128 by 128 px. + case w128h128 + /// 256 by 256 px. + case w256h256 + /// 480 by 320 px. + case w480h320 + /// 640 by 480 px. + case w640h480 + /// 960 by 640 px. + case w960h640 + /// 1024 by 768 px. + case w1024h768 + /// 2048 by 1536 px. + case w2048h1536 + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ThumbnailSizeSerializer().serialize(self)))" + } + } + open class ThumbnailSizeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ThumbnailSize) -> JSON { + switch value { + case .w32h32: + var d = [String: JSON]() + d[".tag"] = .str("w32h32") + return .dictionary(d) + case .w64h64: + var d = [String: JSON]() + d[".tag"] = .str("w64h64") + return .dictionary(d) + case .w128h128: + var d = [String: JSON]() + d[".tag"] = .str("w128h128") + return .dictionary(d) + case .w256h256: + var d = [String: JSON]() + d[".tag"] = .str("w256h256") + return .dictionary(d) + case .w480h320: + var d = [String: JSON]() + d[".tag"] = .str("w480h320") + return .dictionary(d) + case .w640h480: + var d = [String: JSON]() + d[".tag"] = .str("w640h480") + return .dictionary(d) + case .w960h640: + var d = [String: JSON]() + d[".tag"] = .str("w960h640") + return .dictionary(d) + case .w1024h768: + var d = [String: JSON]() + d[".tag"] = .str("w1024h768") + return .dictionary(d) + case .w2048h1536: + var d = [String: JSON]() + d[".tag"] = .str("w2048h1536") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ThumbnailSize { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "w32h32": + return ThumbnailSize.w32h32 + case "w64h64": + return ThumbnailSize.w64h64 + case "w128h128": + return ThumbnailSize.w128h128 + case "w256h256": + return ThumbnailSize.w256h256 + case "w480h320": + return ThumbnailSize.w480h320 + case "w640h480": + return ThumbnailSize.w640h480 + case "w960h640": + return ThumbnailSize.w960h640 + case "w1024h768": + return ThumbnailSize.w1024h768 + case "w2048h1536": + return ThumbnailSize.w2048h1536 + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UploadError union + public enum UploadError: CustomStringConvertible { + /// Unable to save the uploaded contents to a file. + case path(Files.UploadWriteFailed) + /// The supplied property group is invalid. The file has uploaded without property groups. + case propertiesError(FileProperties.InvalidPropertyGroupError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadErrorSerializer().serialize(self)))" + } + } + open class UploadErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadError) -> JSON { + switch value { + case .path(let arg): + var d = Serialization.getFields(Files.UploadWriteFailedSerializer().serialize(arg)) + d[".tag"] = .str("path") + return .dictionary(d) + case .propertiesError(let arg): + var d = ["properties_error": FileProperties.InvalidPropertyGroupErrorSerializer().serialize(arg)] + d[".tag"] = .str("properties_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UploadError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.UploadWriteFailedSerializer().deserialize(json) + return UploadError.path(v) + case "properties_error": + let v = FileProperties.InvalidPropertyGroupErrorSerializer().deserialize(d["properties_error"] ?? .null) + return UploadError.propertiesError(v) + case "other": + return UploadError.other + default: + return UploadError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UploadErrorWithProperties union + public enum UploadErrorWithProperties: CustomStringConvertible { + /// Unable to save the uploaded contents to a file. + case path(Files.UploadWriteFailed) + /// The supplied property group is invalid. The file has uploaded without property groups. + case propertiesError(FileProperties.InvalidPropertyGroupError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadErrorWithPropertiesSerializer().serialize(self)))" + } + } + open class UploadErrorWithPropertiesSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadErrorWithProperties) -> JSON { + switch value { + case .path(let arg): + var d = Serialization.getFields(Files.UploadWriteFailedSerializer().serialize(arg)) + d[".tag"] = .str("path") + return .dictionary(d) + case .propertiesError(let arg): + var d = ["properties_error": FileProperties.InvalidPropertyGroupErrorSerializer().serialize(arg)] + d[".tag"] = .str("properties_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UploadErrorWithProperties { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.UploadWriteFailedSerializer().deserialize(json) + return UploadErrorWithProperties.path(v) + case "properties_error": + let v = FileProperties.InvalidPropertyGroupErrorSerializer().deserialize(d["properties_error"] ?? .null) + return UploadErrorWithProperties.propertiesError(v) + case "other": + return UploadErrorWithProperties.other + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UploadSessionAppendArg struct + open class UploadSessionAppendArg: CustomStringConvertible { + /// Contains the upload session ID and the offset. + public let cursor: Files.UploadSessionCursor + /// If true, the current session will be closed, at which point you won't be able to call uploadSessionAppendV2 + /// anymore with the current session. + public let close: Bool + public init(cursor: Files.UploadSessionCursor, close: Bool = false) { + self.cursor = cursor + self.close = close + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionAppendArgSerializer().serialize(self)))" + } + } + open class UploadSessionAppendArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionAppendArg) -> JSON { + let output = [ + "cursor": Files.UploadSessionCursorSerializer().serialize(value.cursor), + "close": Serialization._BoolSerializer.serialize(value.close), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadSessionAppendArg { + switch json { + case .dictionary(let dict): + let cursor = Files.UploadSessionCursorSerializer().deserialize(dict["cursor"] ?? .null) + let close = Serialization._BoolSerializer.deserialize(dict["close"] ?? .number(0)) + return UploadSessionAppendArg(cursor: cursor, close: close) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UploadSessionCursor struct + open class UploadSessionCursor: CustomStringConvertible { + /// The upload session ID (returned by uploadSessionStart). + public let sessionId: String + /// The amount of data that has been uploaded so far. We use this to make sure upload data isn't lost or + /// duplicated in the event of a network error. + public let offset: UInt64 + public init(sessionId: String, offset: UInt64) { + stringValidator()(sessionId) + self.sessionId = sessionId + comparableValidator()(offset) + self.offset = offset + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionCursorSerializer().serialize(self)))" + } + } + open class UploadSessionCursorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionCursor) -> JSON { + let output = [ + "session_id": Serialization._StringSerializer.serialize(value.sessionId), + "offset": Serialization._UInt64Serializer.serialize(value.offset), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadSessionCursor { + switch json { + case .dictionary(let dict): + let sessionId = Serialization._StringSerializer.deserialize(dict["session_id"] ?? .null) + let offset = Serialization._UInt64Serializer.deserialize(dict["offset"] ?? .null) + return UploadSessionCursor(sessionId: sessionId, offset: offset) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UploadSessionFinishArg struct + open class UploadSessionFinishArg: CustomStringConvertible { + /// Contains the upload session ID and the offset. + public let cursor: Files.UploadSessionCursor + /// Contains the path and other optional modifiers for the commit. + public let commit: Files.CommitInfo + public init(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo) { + self.cursor = cursor + self.commit = commit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionFinishArgSerializer().serialize(self)))" + } + } + open class UploadSessionFinishArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionFinishArg) -> JSON { + let output = [ + "cursor": Files.UploadSessionCursorSerializer().serialize(value.cursor), + "commit": Files.CommitInfoSerializer().serialize(value.commit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadSessionFinishArg { + switch json { + case .dictionary(let dict): + let cursor = Files.UploadSessionCursorSerializer().deserialize(dict["cursor"] ?? .null) + let commit = Files.CommitInfoSerializer().deserialize(dict["commit"] ?? .null) + return UploadSessionFinishArg(cursor: cursor, commit: commit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UploadSessionFinishBatchArg struct + open class UploadSessionFinishBatchArg: CustomStringConvertible { + /// Commit information for each file in the batch. + public let entries: Array + public init(entries: Array) { + self.entries = entries + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionFinishBatchArgSerializer().serialize(self)))" + } + } + open class UploadSessionFinishBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionFinishBatchArg) -> JSON { + let output = [ + "entries": ArraySerializer(Files.UploadSessionFinishArgSerializer()).serialize(value.entries), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadSessionFinishBatchArg { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.UploadSessionFinishArgSerializer()).deserialize(dict["entries"] ?? .null) + return UploadSessionFinishBatchArg(entries: entries) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UploadSessionFinishBatchJobStatus union + public enum UploadSessionFinishBatchJobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The uploadSessionFinishBatch has finished. + case complete(Files.UploadSessionFinishBatchResult) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionFinishBatchJobStatusSerializer().serialize(self)))" + } + } + open class UploadSessionFinishBatchJobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionFinishBatchJobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.UploadSessionFinishBatchResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UploadSessionFinishBatchJobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return UploadSessionFinishBatchJobStatus.inProgress + case "complete": + let v = Files.UploadSessionFinishBatchResultSerializer().deserialize(json) + return UploadSessionFinishBatchJobStatus.complete(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result returned by uploadSessionFinishBatch that may either launch an asynchronous job or complete + /// synchronously. + public enum UploadSessionFinishBatchLaunch: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// An unspecified error. + case complete(Files.UploadSessionFinishBatchResult) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionFinishBatchLaunchSerializer().serialize(self)))" + } + } + open class UploadSessionFinishBatchLaunchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionFinishBatchLaunch) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Files.UploadSessionFinishBatchResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UploadSessionFinishBatchLaunch { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return UploadSessionFinishBatchLaunch.asyncJobId(v) + case "complete": + let v = Files.UploadSessionFinishBatchResultSerializer().deserialize(json) + return UploadSessionFinishBatchLaunch.complete(v) + case "other": + return UploadSessionFinishBatchLaunch.other + default: + return UploadSessionFinishBatchLaunch.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UploadSessionFinishBatchResult struct + open class UploadSessionFinishBatchResult: CustomStringConvertible { + /// Each entry in entries in UploadSessionFinishBatchArg will appear at the same position inside entries in + /// UploadSessionFinishBatchResult. + public let entries: Array + public init(entries: Array) { + self.entries = entries + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionFinishBatchResultSerializer().serialize(self)))" + } + } + open class UploadSessionFinishBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionFinishBatchResult) -> JSON { + let output = [ + "entries": ArraySerializer(Files.UploadSessionFinishBatchResultEntrySerializer()).serialize(value.entries), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadSessionFinishBatchResult { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Files.UploadSessionFinishBatchResultEntrySerializer()).deserialize(dict["entries"] ?? .null) + return UploadSessionFinishBatchResult(entries: entries) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UploadSessionFinishBatchResultEntry union + public enum UploadSessionFinishBatchResultEntry: CustomStringConvertible { + /// An unspecified error. + case success(Files.FileMetadata) + /// An unspecified error. + case failure(Files.UploadSessionFinishError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionFinishBatchResultEntrySerializer().serialize(self)))" + } + } + open class UploadSessionFinishBatchResultEntrySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionFinishBatchResultEntry) -> JSON { + switch value { + case .success(let arg): + var d = Serialization.getFields(Files.FileMetadataSerializer().serialize(arg)) + d[".tag"] = .str("success") + return .dictionary(d) + case .failure(let arg): + var d = ["failure": Files.UploadSessionFinishErrorSerializer().serialize(arg)] + d[".tag"] = .str("failure") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UploadSessionFinishBatchResultEntry { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = Files.FileMetadataSerializer().deserialize(json) + return UploadSessionFinishBatchResultEntry.success(v) + case "failure": + let v = Files.UploadSessionFinishErrorSerializer().deserialize(d["failure"] ?? .null) + return UploadSessionFinishBatchResultEntry.failure(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UploadSessionFinishError union + public enum UploadSessionFinishError: CustomStringConvertible { + /// The session arguments are incorrect; the value explains the reason. + case lookupFailed(Files.UploadSessionLookupError) + /// Unable to save the uploaded contents to a file. Data has already been appended to the upload session. Please + /// retry with empty data body and updated offset. + case path(Files.WriteError) + /// The supplied property group is invalid. The file has uploaded without property groups. + case propertiesError(FileProperties.InvalidPropertyGroupError) + /// The batch request commits files into too many different shared folders. Please limit your batch request to + /// files contained in a single shared folder. + case tooManySharedFolderTargets + /// There are too many write operations happening in the user's Dropbox. You should retry uploading this file. + case tooManyWriteOperations + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionFinishErrorSerializer().serialize(self)))" + } + } + open class UploadSessionFinishErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionFinishError) -> JSON { + switch value { + case .lookupFailed(let arg): + var d = ["lookup_failed": Files.UploadSessionLookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("lookup_failed") + return .dictionary(d) + case .path(let arg): + var d = ["path": Files.WriteErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .propertiesError(let arg): + var d = ["properties_error": FileProperties.InvalidPropertyGroupErrorSerializer().serialize(arg)] + d[".tag"] = .str("properties_error") + return .dictionary(d) + case .tooManySharedFolderTargets: + var d = [String: JSON]() + d[".tag"] = .str("too_many_shared_folder_targets") + return .dictionary(d) + case .tooManyWriteOperations: + var d = [String: JSON]() + d[".tag"] = .str("too_many_write_operations") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UploadSessionFinishError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "lookup_failed": + let v = Files.UploadSessionLookupErrorSerializer().deserialize(d["lookup_failed"] ?? .null) + return UploadSessionFinishError.lookupFailed(v) + case "path": + let v = Files.WriteErrorSerializer().deserialize(d["path"] ?? .null) + return UploadSessionFinishError.path(v) + case "properties_error": + let v = FileProperties.InvalidPropertyGroupErrorSerializer().deserialize(d["properties_error"] ?? .null) + return UploadSessionFinishError.propertiesError(v) + case "too_many_shared_folder_targets": + return UploadSessionFinishError.tooManySharedFolderTargets + case "too_many_write_operations": + return UploadSessionFinishError.tooManyWriteOperations + case "other": + return UploadSessionFinishError.other + default: + return UploadSessionFinishError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UploadSessionLookupError union + public enum UploadSessionLookupError: CustomStringConvertible { + /// The upload session ID was not found or has expired. Upload sessions are valid for 48 hours. + case notFound + /// The specified offset was incorrect. See the value for the correct offset. This error may occur when a + /// previous request was received and processed successfully but the client did not receive the response, e.g. + /// due to a network error. + case incorrectOffset(Files.UploadSessionOffsetError) + /// You are attempting to append data to an upload session that has alread been closed (i.e. committed). + case closed + /// The session must be closed before calling upload_session/finish_batch. + case notClosed + /// You can not append to the upload session because the size of a file should not reach the max file size limit + /// (i.e. 350GB). + case tooLarge + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionLookupErrorSerializer().serialize(self)))" + } + } + open class UploadSessionLookupErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionLookupError) -> JSON { + switch value { + case .notFound: + var d = [String: JSON]() + d[".tag"] = .str("not_found") + return .dictionary(d) + case .incorrectOffset(let arg): + var d = Serialization.getFields(Files.UploadSessionOffsetErrorSerializer().serialize(arg)) + d[".tag"] = .str("incorrect_offset") + return .dictionary(d) + case .closed: + var d = [String: JSON]() + d[".tag"] = .str("closed") + return .dictionary(d) + case .notClosed: + var d = [String: JSON]() + d[".tag"] = .str("not_closed") + return .dictionary(d) + case .tooLarge: + var d = [String: JSON]() + d[".tag"] = .str("too_large") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UploadSessionLookupError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "not_found": + return UploadSessionLookupError.notFound + case "incorrect_offset": + let v = Files.UploadSessionOffsetErrorSerializer().deserialize(json) + return UploadSessionLookupError.incorrectOffset(v) + case "closed": + return UploadSessionLookupError.closed + case "not_closed": + return UploadSessionLookupError.notClosed + case "too_large": + return UploadSessionLookupError.tooLarge + case "other": + return UploadSessionLookupError.other + default: + return UploadSessionLookupError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UploadSessionOffsetError struct + open class UploadSessionOffsetError: CustomStringConvertible { + /// The offset up to which data has been collected. + public let correctOffset: UInt64 + public init(correctOffset: UInt64) { + comparableValidator()(correctOffset) + self.correctOffset = correctOffset + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionOffsetErrorSerializer().serialize(self)))" + } + } + open class UploadSessionOffsetErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionOffsetError) -> JSON { + let output = [ + "correct_offset": Serialization._UInt64Serializer.serialize(value.correctOffset), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadSessionOffsetError { + switch json { + case .dictionary(let dict): + let correctOffset = Serialization._UInt64Serializer.deserialize(dict["correct_offset"] ?? .null) + return UploadSessionOffsetError(correctOffset: correctOffset) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UploadSessionStartArg struct + open class UploadSessionStartArg: CustomStringConvertible { + /// If true, the current session will be closed, at which point you won't be able to call uploadSessionAppendV2 + /// anymore with the current session. + public let close: Bool + public init(close: Bool = false) { + self.close = close + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionStartArgSerializer().serialize(self)))" + } + } + open class UploadSessionStartArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionStartArg) -> JSON { + let output = [ + "close": Serialization._BoolSerializer.serialize(value.close), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadSessionStartArg { + switch json { + case .dictionary(let dict): + let close = Serialization._BoolSerializer.deserialize(dict["close"] ?? .number(0)) + return UploadSessionStartArg(close: close) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UploadSessionStartResult struct + open class UploadSessionStartResult: CustomStringConvertible { + /// A unique identifier for the upload session. Pass this to uploadSessionAppendV2 and uploadSessionFinish. + public let sessionId: String + public init(sessionId: String) { + stringValidator()(sessionId) + self.sessionId = sessionId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadSessionStartResultSerializer().serialize(self)))" + } + } + open class UploadSessionStartResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadSessionStartResult) -> JSON { + let output = [ + "session_id": Serialization._StringSerializer.serialize(value.sessionId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadSessionStartResult { + switch json { + case .dictionary(let dict): + let sessionId = Serialization._StringSerializer.deserialize(dict["session_id"] ?? .null) + return UploadSessionStartResult(sessionId: sessionId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UploadWriteFailed struct + open class UploadWriteFailed: CustomStringConvertible { + /// The reason why the file couldn't be saved. + public let reason: Files.WriteError + /// The upload session ID; data has already been uploaded to the corresponding upload session and this ID may be + /// used to retry the commit with uploadSessionFinish. + public let uploadSessionId: String + public init(reason: Files.WriteError, uploadSessionId: String) { + self.reason = reason + stringValidator()(uploadSessionId) + self.uploadSessionId = uploadSessionId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadWriteFailedSerializer().serialize(self)))" + } + } + open class UploadWriteFailedSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadWriteFailed) -> JSON { + let output = [ + "reason": Files.WriteErrorSerializer().serialize(value.reason), + "upload_session_id": Serialization._StringSerializer.serialize(value.uploadSessionId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UploadWriteFailed { + switch json { + case .dictionary(let dict): + let reason = Files.WriteErrorSerializer().deserialize(dict["reason"] ?? .null) + let uploadSessionId = Serialization._StringSerializer.deserialize(dict["upload_session_id"] ?? .null) + return UploadWriteFailed(reason: reason, uploadSessionId: uploadSessionId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Metadata for a video. + open class VideoMetadata: Files.MediaMetadata { + /// The duration of the video in milliseconds. + public let duration: UInt64? + public init(dimensions: Files.Dimensions? = nil, location: Files.GpsCoordinates? = nil, timeTaken: Date? = nil, duration: UInt64? = nil) { + nullableValidator(comparableValidator())(duration) + self.duration = duration + super.init(dimensions: dimensions, location: location, timeTaken: timeTaken) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(VideoMetadataSerializer().serialize(self)))" + } + } + open class VideoMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: VideoMetadata) -> JSON { + let output = [ + "dimensions": NullableSerializer(Files.DimensionsSerializer()).serialize(value.dimensions), + "location": NullableSerializer(Files.GpsCoordinatesSerializer()).serialize(value.location), + "time_taken": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.timeTaken), + "duration": NullableSerializer(Serialization._UInt64Serializer).serialize(value.duration), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> VideoMetadata { + switch json { + case .dictionary(let dict): + let dimensions = NullableSerializer(Files.DimensionsSerializer()).deserialize(dict["dimensions"] ?? .null) + let location = NullableSerializer(Files.GpsCoordinatesSerializer()).deserialize(dict["location"] ?? .null) + let timeTaken = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["time_taken"] ?? .null) + let duration = NullableSerializer(Serialization._UInt64Serializer).deserialize(dict["duration"] ?? .null) + return VideoMetadata(dimensions: dimensions, location: location, timeTaken: timeTaken, duration: duration) + default: + fatalError("Type error deserializing") + } + } + } + + /// The WriteConflictError union + public enum WriteConflictError: CustomStringConvertible { + /// There's a file in the way. + case file + /// There's a folder in the way. + case folder + /// There's a file at an ancestor path, so we couldn't create the required parent folders. + case fileAncestor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WriteConflictErrorSerializer().serialize(self)))" + } + } + open class WriteConflictErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WriteConflictError) -> JSON { + switch value { + case .file: + var d = [String: JSON]() + d[".tag"] = .str("file") + return .dictionary(d) + case .folder: + var d = [String: JSON]() + d[".tag"] = .str("folder") + return .dictionary(d) + case .fileAncestor: + var d = [String: JSON]() + d[".tag"] = .str("file_ancestor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> WriteConflictError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "file": + return WriteConflictError.file + case "folder": + return WriteConflictError.folder + case "file_ancestor": + return WriteConflictError.fileAncestor + case "other": + return WriteConflictError.other + default: + return WriteConflictError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The WriteError union + public enum WriteError: CustomStringConvertible { + /// The given path does not satisfy the required path format. Please refer to the Path formats documentation + /// https://www.dropbox.com/developers/documentation/http/documentation#path-formats for more information. + case malformedPath(String?) + /// Couldn't write to the target path because there was something in the way. + case conflict(Files.WriteConflictError) + /// The user doesn't have permissions to write to the target location. + case noWritePermission + /// The user doesn't have enough available space (bytes) to write more data. + case insufficientSpace + /// Dropbox will not save the file or folder because of its name. + case disallowedName + /// This endpoint cannot move or delete team folders. + case teamFolder + /// There are too many write operations in user's Dropbox. Please retry this request. + case tooManyWriteOperations + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WriteErrorSerializer().serialize(self)))" + } + } + open class WriteErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WriteError) -> JSON { + switch value { + case .malformedPath(let arg): + var d = ["malformed_path": NullableSerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("malformed_path") + return .dictionary(d) + case .conflict(let arg): + var d = ["conflict": Files.WriteConflictErrorSerializer().serialize(arg)] + d[".tag"] = .str("conflict") + return .dictionary(d) + case .noWritePermission: + var d = [String: JSON]() + d[".tag"] = .str("no_write_permission") + return .dictionary(d) + case .insufficientSpace: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_space") + return .dictionary(d) + case .disallowedName: + var d = [String: JSON]() + d[".tag"] = .str("disallowed_name") + return .dictionary(d) + case .teamFolder: + var d = [String: JSON]() + d[".tag"] = .str("team_folder") + return .dictionary(d) + case .tooManyWriteOperations: + var d = [String: JSON]() + d[".tag"] = .str("too_many_write_operations") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> WriteError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "malformed_path": + let v = NullableSerializer(Serialization._StringSerializer).deserialize(d["malformed_path"] ?? .null) + return WriteError.malformedPath(v) + case "conflict": + let v = Files.WriteConflictErrorSerializer().deserialize(d["conflict"] ?? .null) + return WriteError.conflict(v) + case "no_write_permission": + return WriteError.noWritePermission + case "insufficient_space": + return WriteError.insufficientSpace + case "disallowed_name": + return WriteError.disallowedName + case "team_folder": + return WriteError.teamFolder + case "too_many_write_operations": + return WriteError.tooManyWriteOperations + case "other": + return WriteError.other + default: + return WriteError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Your intent when writing a file to some path. This is used to determine what constitutes a conflict and what the + /// autorename strategy is. In some situations, the conflict behavior is identical: (a) If the target path doesn't + /// refer to anything, the file is always written; no conflict. (b) If the target path refers to a folder, it's + /// always a conflict. (c) If the target path refers to a file with identical contents, nothing gets written; no + /// conflict. The conflict checking differs in the case where there's a file at the target path with contents + /// different from the contents you're trying to write. + public enum WriteMode: CustomStringConvertible { + /// Do not overwrite an existing file if there is a conflict. The autorename strategy is to append a number to + /// the file name. For example, "document.txt" might become "document (2).txt". + case add + /// Always overwrite the existing file. The autorename strategy is the same as it is for add. + case overwrite + /// Overwrite if the given "rev" matches the existing file's "rev". The autorename strategy is to append the + /// string "conflicted copy" to the file name. For example, "document.txt" might become "document (conflicted + /// copy).txt" or "document (Panda's conflicted copy).txt". + case update(String) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WriteModeSerializer().serialize(self)))" + } + } + open class WriteModeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WriteMode) -> JSON { + switch value { + case .add: + var d = [String: JSON]() + d[".tag"] = .str("add") + return .dictionary(d) + case .overwrite: + var d = [String: JSON]() + d[".tag"] = .str("overwrite") + return .dictionary(d) + case .update(let arg): + var d = ["update": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("update") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> WriteMode { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "add": + return WriteMode.add + case "overwrite": + return WriteMode.overwrite + case "update": + let v = Serialization._StringSerializer.deserialize(d["update"] ?? .null) + return WriteMode.update(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + + /// Stone Route Objects + + static let alphaGetMetadata = Route( + name: "alpha/get_metadata", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Files.AlphaGetMetadataArgSerializer(), + responseSerializer: Files.MetadataSerializer(), + errorSerializer: Files.AlphaGetMetadataErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let alphaUpload = Route( + name: "alpha/upload", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Files.CommitInfoWithPropertiesSerializer(), + responseSerializer: Files.FileMetadataSerializer(), + errorSerializer: Files.UploadErrorWithPropertiesSerializer(), + attrs: ["host": "content", + "style": "upload"] + ) + static let copyV2 = Route( + name: "copy", + version: 2, + namespace: "files", + deprecated: false, + argSerializer: Files.RelocationArgSerializer(), + responseSerializer: Files.RelocationResultSerializer(), + errorSerializer: Files.RelocationErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let copy = Route( + name: "copy", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Files.RelocationArgSerializer(), + responseSerializer: Files.MetadataSerializer(), + errorSerializer: Files.RelocationErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let copyBatchV2 = Route( + name: "copy_batch", + version: 2, + namespace: "files", + deprecated: false, + argSerializer: Files.RelocationBatchArgBaseSerializer(), + responseSerializer: Files.RelocationBatchV2LaunchSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let copyBatch = Route( + name: "copy_batch", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Files.RelocationBatchArgSerializer(), + responseSerializer: Files.RelocationBatchLaunchSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let copyBatchCheckV2 = Route( + name: "copy_batch/check", + version: 2, + namespace: "files", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Files.RelocationBatchV2JobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let copyBatchCheck = Route( + name: "copy_batch/check", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Files.RelocationBatchJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let copyReferenceGet = Route( + name: "copy_reference/get", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.GetCopyReferenceArgSerializer(), + responseSerializer: Files.GetCopyReferenceResultSerializer(), + errorSerializer: Files.GetCopyReferenceErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let copyReferenceSave = Route( + name: "copy_reference/save", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.SaveCopyReferenceArgSerializer(), + responseSerializer: Files.SaveCopyReferenceResultSerializer(), + errorSerializer: Files.SaveCopyReferenceErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let createFolderV2 = Route( + name: "create_folder", + version: 2, + namespace: "files", + deprecated: false, + argSerializer: Files.CreateFolderArgSerializer(), + responseSerializer: Files.CreateFolderResultSerializer(), + errorSerializer: Files.CreateFolderErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let createFolder = Route( + name: "create_folder", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Files.CreateFolderArgSerializer(), + responseSerializer: Files.FolderMetadataSerializer(), + errorSerializer: Files.CreateFolderErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let createFolderBatch = Route( + name: "create_folder_batch", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.CreateFolderBatchArgSerializer(), + responseSerializer: Files.CreateFolderBatchLaunchSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let createFolderBatchCheck = Route( + name: "create_folder_batch/check", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Files.CreateFolderBatchJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let deleteV2 = Route( + name: "delete", + version: 2, + namespace: "files", + deprecated: false, + argSerializer: Files.DeleteArgSerializer(), + responseSerializer: Files.DeleteResultSerializer(), + errorSerializer: Files.DeleteErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let delete = Route( + name: "delete", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Files.DeleteArgSerializer(), + responseSerializer: Files.MetadataSerializer(), + errorSerializer: Files.DeleteErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let deleteBatch = Route( + name: "delete_batch", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.DeleteBatchArgSerializer(), + responseSerializer: Files.DeleteBatchLaunchSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let deleteBatchCheck = Route( + name: "delete_batch/check", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Files.DeleteBatchJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let download = Route( + name: "download", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.DownloadArgSerializer(), + responseSerializer: Files.FileMetadataSerializer(), + errorSerializer: Files.DownloadErrorSerializer(), + attrs: ["host": "content", + "style": "download"] + ) + static let downloadZip = Route( + name: "download_zip", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.DownloadZipArgSerializer(), + responseSerializer: Files.DownloadZipResultSerializer(), + errorSerializer: Files.DownloadZipErrorSerializer(), + attrs: ["host": "content", + "style": "download"] + ) + static let getMetadata = Route( + name: "get_metadata", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.GetMetadataArgSerializer(), + responseSerializer: Files.MetadataSerializer(), + errorSerializer: Files.GetMetadataErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getPreview = Route( + name: "get_preview", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.PreviewArgSerializer(), + responseSerializer: Files.FileMetadataSerializer(), + errorSerializer: Files.PreviewErrorSerializer(), + attrs: ["host": "content", + "style": "download"] + ) + static let getTemporaryLink = Route( + name: "get_temporary_link", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.GetTemporaryLinkArgSerializer(), + responseSerializer: Files.GetTemporaryLinkResultSerializer(), + errorSerializer: Files.GetTemporaryLinkErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getTemporaryUploadLink = Route( + name: "get_temporary_upload_link", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.GetTemporaryUploadLinkArgSerializer(), + responseSerializer: Files.GetTemporaryUploadLinkResultSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let getThumbnail = Route( + name: "get_thumbnail", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.ThumbnailArgSerializer(), + responseSerializer: Files.FileMetadataSerializer(), + errorSerializer: Files.ThumbnailErrorSerializer(), + attrs: ["host": "content", + "style": "download"] + ) + static let getThumbnailBatch = Route( + name: "get_thumbnail_batch", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.GetThumbnailBatchArgSerializer(), + responseSerializer: Files.GetThumbnailBatchResultSerializer(), + errorSerializer: Files.GetThumbnailBatchErrorSerializer(), + attrs: ["host": "content", + "style": "rpc"] + ) + static let listFolder = Route( + name: "list_folder", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.ListFolderArgSerializer(), + responseSerializer: Files.ListFolderResultSerializer(), + errorSerializer: Files.ListFolderErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFolderContinue = Route( + name: "list_folder/continue", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.ListFolderContinueArgSerializer(), + responseSerializer: Files.ListFolderResultSerializer(), + errorSerializer: Files.ListFolderContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFolderGetLatestCursor = Route( + name: "list_folder/get_latest_cursor", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.ListFolderArgSerializer(), + responseSerializer: Files.ListFolderGetLatestCursorResultSerializer(), + errorSerializer: Files.ListFolderErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFolderLongpoll = Route( + name: "list_folder/longpoll", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.ListFolderLongpollArgSerializer(), + responseSerializer: Files.ListFolderLongpollResultSerializer(), + errorSerializer: Files.ListFolderLongpollErrorSerializer(), + attrs: ["host": "notify", + "style": "rpc"] + ) + static let listRevisions = Route( + name: "list_revisions", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.ListRevisionsArgSerializer(), + responseSerializer: Files.ListRevisionsResultSerializer(), + errorSerializer: Files.ListRevisionsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let moveV2 = Route( + name: "move", + version: 2, + namespace: "files", + deprecated: false, + argSerializer: Files.RelocationArgSerializer(), + responseSerializer: Files.RelocationResultSerializer(), + errorSerializer: Files.RelocationErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let move = Route( + name: "move", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Files.RelocationArgSerializer(), + responseSerializer: Files.MetadataSerializer(), + errorSerializer: Files.RelocationErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let moveBatchV2 = Route( + name: "move_batch", + version: 2, + namespace: "files", + deprecated: false, + argSerializer: Files.MoveBatchArgSerializer(), + responseSerializer: Files.RelocationBatchV2LaunchSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let moveBatch = Route( + name: "move_batch", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.RelocationBatchArgSerializer(), + responseSerializer: Files.RelocationBatchLaunchSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let moveBatchCheckV2 = Route( + name: "move_batch/check", + version: 2, + namespace: "files", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Files.RelocationBatchV2JobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let moveBatchCheck = Route( + name: "move_batch/check", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Files.RelocationBatchJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let permanentlyDelete = Route( + name: "permanently_delete", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.DeleteArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Files.DeleteErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesAdd = Route( + name: "properties/add", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: FileProperties.AddPropertiesArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.AddPropertiesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesOverwrite = Route( + name: "properties/overwrite", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: FileProperties.OverwritePropertyGroupArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.InvalidPropertyGroupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesRemove = Route( + name: "properties/remove", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: FileProperties.RemovePropertiesArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.RemovePropertiesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesTemplateGet = Route( + name: "properties/template/get", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: FileProperties.GetTemplateArgSerializer(), + responseSerializer: FileProperties.GetTemplateResultSerializer(), + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesTemplateList = Route( + name: "properties/template/list", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Serialization._VoidSerializer, + responseSerializer: FileProperties.ListTemplateResultSerializer(), + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesUpdate = Route( + name: "properties/update", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: FileProperties.UpdatePropertiesArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: FileProperties.UpdatePropertiesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let restore = Route( + name: "restore", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.RestoreArgSerializer(), + responseSerializer: Files.FileMetadataSerializer(), + errorSerializer: Files.RestoreErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let saveUrl = Route( + name: "save_url", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.SaveUrlArgSerializer(), + responseSerializer: Files.SaveUrlResultSerializer(), + errorSerializer: Files.SaveUrlErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let saveUrlCheckJobStatus = Route( + name: "save_url/check_job_status", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Files.SaveUrlJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let search = Route( + name: "search", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.SearchArgSerializer(), + responseSerializer: Files.SearchResultSerializer(), + errorSerializer: Files.SearchErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let upload = Route( + name: "upload", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.CommitInfoSerializer(), + responseSerializer: Files.FileMetadataSerializer(), + errorSerializer: Files.UploadErrorSerializer(), + attrs: ["host": "content", + "style": "upload"] + ) + static let uploadSessionAppendV2 = Route( + name: "upload_session/append", + version: 2, + namespace: "files", + deprecated: false, + argSerializer: Files.UploadSessionAppendArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Files.UploadSessionLookupErrorSerializer(), + attrs: ["host": "content", + "style": "upload"] + ) + static let uploadSessionAppend = Route( + name: "upload_session/append", + version: 1, + namespace: "files", + deprecated: true, + argSerializer: Files.UploadSessionCursorSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Files.UploadSessionLookupErrorSerializer(), + attrs: ["host": "content", + "style": "upload"] + ) + static let uploadSessionFinish = Route( + name: "upload_session/finish", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.UploadSessionFinishArgSerializer(), + responseSerializer: Files.FileMetadataSerializer(), + errorSerializer: Files.UploadSessionFinishErrorSerializer(), + attrs: ["host": "content", + "style": "upload"] + ) + static let uploadSessionFinishBatch = Route( + name: "upload_session/finish_batch", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.UploadSessionFinishBatchArgSerializer(), + responseSerializer: Files.UploadSessionFinishBatchLaunchSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let uploadSessionFinishBatchCheck = Route( + name: "upload_session/finish_batch/check", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Files.UploadSessionFinishBatchJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let uploadSessionStart = Route( + name: "upload_session/start", + version: 1, + namespace: "files", + deprecated: false, + argSerializer: Files.UploadSessionStartArgSerializer(), + responseSerializer: Files.UploadSessionStartResultSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "content", + "style": "upload"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift new file mode 100644 index 0000000..6fd9c5f --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift @@ -0,0 +1,1287 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the files namespace +open class FilesRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// Returns the metadata for a file or folder. This is an alpha endpoint compatible with the properties API. Note: + /// Metadata for the root folder is unsupported. + /// + /// - parameter includePropertyTemplates: If set to a valid list of template IDs, propertyGroups in FileMetadata is + /// set for files with custom properties. + /// + /// - returns: Through the response callback, the caller will receive a `Files.Metadata` object on success or a + /// `Files.AlphaGetMetadataError` object on failure. + @available(*, unavailable, message:"alphaGetMetadata is deprecated. Use getMetadata.") + @discardableResult open func alphaGetMetadata(path: String, includeMediaInfo: Bool = false, includeDeleted: Bool = false, includeHasExplicitSharedMembers: Bool = false, includePropertyGroups: FileProperties.TemplateFilterBase? = nil, includePropertyTemplates: Array? = nil) -> RpcRequest { + let route = Files.alphaGetMetadata + let serverArgs = Files.AlphaGetMetadataArg(path: path, includeMediaInfo: includeMediaInfo, includeDeleted: includeDeleted, includeHasExplicitSharedMembers: includeHasExplicitSharedMembers, includePropertyGroups: includePropertyGroups, includePropertyTemplates: includePropertyTemplates) + return client.request(route, serverArgs: serverArgs) + } + + /// Create a new file with the contents provided in the request. Note that this endpoint is part of the properties + /// API alpha and is slightly different from upload. Do not use this to upload a file larger than 150 MB. Instead, + /// create an upload session with uploadSessionStart. + /// + /// - parameter input: The file to upload, as an Data object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.UploadErrorWithProperties` object on failure. + @available(*, unavailable, message:"alphaUpload is deprecated. Use alphaUpload.") + @discardableResult open func alphaUpload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: Data) -> UploadRequest { + let route = Files.alphaUpload + let serverArgs = Files.CommitInfoWithProperties(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + return client.request(route, serverArgs: serverArgs, input: .data(input)) + } + + /// Create a new file with the contents provided in the request. Note that this endpoint is part of the properties + /// API alpha and is slightly different from upload. Do not use this to upload a file larger than 150 MB. Instead, + /// create an upload session with uploadSessionStart. + /// + /// - parameter input: The file to upload, as an URL object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.UploadErrorWithProperties` object on failure. + @available(*, unavailable, message:"alphaUpload is deprecated. Use alphaUpload.") + @discardableResult open func alphaUpload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: URL) -> UploadRequest { + let route = Files.alphaUpload + let serverArgs = Files.CommitInfoWithProperties(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + return client.request(route, serverArgs: serverArgs, input: .file(input)) + } + + /// Create a new file with the contents provided in the request. Note that this endpoint is part of the properties + /// API alpha and is slightly different from upload. Do not use this to upload a file larger than 150 MB. Instead, + /// create an upload session with uploadSessionStart. + /// + /// - parameter input: The file to upload, as an InputStream object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.UploadErrorWithProperties` object on failure. + @available(*, unavailable, message:"alphaUpload is deprecated. Use alphaUpload.") + @discardableResult open func alphaUpload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: InputStream) -> UploadRequest { + let route = Files.alphaUpload + let serverArgs = Files.CommitInfoWithProperties(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + return client.request(route, serverArgs: serverArgs, input: .stream(input)) + } + + /// Copy a file or folder to a different location in the user's Dropbox. If the source path is a folder all its + /// contents will be copied. + /// + /// - parameter allowSharedFolder: If true, copy will copy contents in shared folder, otherwise cantCopySharedFolder + /// in RelocationError will be returned if fromPath contains shared folder. This field is always true for move. + /// - parameter autorename: If there's a conflict, have the Dropbox server try to autorename the file to avoid the + /// conflict. + /// - parameter allowOwnershipTransfer: Allow moves by owner even if it would result in an ownership transfer for + /// the content being moved. This does not apply to copies. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationResult` object on success + /// or a `Files.RelocationError` object on failure. + @discardableResult open func copyV2(fromPath: String, toPath: String, allowSharedFolder: Bool = false, autorename: Bool = false, allowOwnershipTransfer: Bool = false) -> RpcRequest { + let route = Files.copyV2 + let serverArgs = Files.RelocationArg(fromPath: fromPath, toPath: toPath, allowSharedFolder: allowSharedFolder, autorename: autorename, allowOwnershipTransfer: allowOwnershipTransfer) + return client.request(route, serverArgs: serverArgs) + } + + /// Copy a file or folder to a different location in the user's Dropbox. If the source path is a folder all its + /// contents will be copied. + /// + /// - parameter allowSharedFolder: If true, copy will copy contents in shared folder, otherwise cantCopySharedFolder + /// in RelocationError will be returned if fromPath contains shared folder. This field is always true for move. + /// - parameter autorename: If there's a conflict, have the Dropbox server try to autorename the file to avoid the + /// conflict. + /// - parameter allowOwnershipTransfer: Allow moves by owner even if it would result in an ownership transfer for + /// the content being moved. This does not apply to copies. + /// + /// - returns: Through the response callback, the caller will receive a `Files.Metadata` object on success or a + /// `Files.RelocationError` object on failure. + @available(*, unavailable, message:"copy is deprecated. Use copyV2.") + @discardableResult open func copy(fromPath: String, toPath: String, allowSharedFolder: Bool = false, autorename: Bool = false, allowOwnershipTransfer: Bool = false) -> RpcRequest { + let route = Files.copy + let serverArgs = Files.RelocationArg(fromPath: fromPath, toPath: toPath, allowSharedFolder: allowSharedFolder, autorename: autorename, allowOwnershipTransfer: allowOwnershipTransfer) + return client.request(route, serverArgs: serverArgs) + } + + /// Copy multiple files or folders to different locations at once in the user's Dropbox. This route will replace + /// copyBatch. The main difference is this route will return stutus for each entry, while copyBatch raises failure + /// if any entry fails. This route will either finish synchronously, or return a job ID and do the async copy job in + /// background. Please use copyBatchCheckV2 to check the job status. + /// + /// - parameter entries: List of entries to be moved or copied. Each entry is RelocationPath. + /// - parameter autorename: If there's a conflict with any file, have the Dropbox server try to autorename that file + /// to avoid the conflict. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationBatchV2Launch` object on + /// success or a `Void` object on failure. + @discardableResult open func copyBatchV2(entries: Array, autorename: Bool = false) -> RpcRequest { + let route = Files.copyBatchV2 + let serverArgs = Files.RelocationBatchArgBase(entries: entries, autorename: autorename) + return client.request(route, serverArgs: serverArgs) + } + + /// Copy multiple files or folders to different locations at once in the user's Dropbox. If allowSharedFolder in + /// RelocationBatchArg is false, this route is atomic. If one entry fails, the whole transaction will abort. If + /// allowSharedFolder in RelocationBatchArg is true, atomicity is not guaranteed, but it allows you to copy the + /// contents of shared folders to new locations. This route will return job ID immediately and do the async copy job + /// in background. Please use copyBatchCheck to check the job status. + /// + /// - parameter allowSharedFolder: If true, copyBatch will copy contents in shared folder, otherwise + /// cantCopySharedFolder in RelocationError will be returned if fromPath in RelocationPath contains shared folder. + /// This field is always true for moveBatch. + /// - parameter allowOwnershipTransfer: Allow moves by owner even if it would result in an ownership transfer for + /// the content being moved. This does not apply to copies. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationBatchLaunch` object on + /// success or a `Void` object on failure. + @available(*, unavailable, message:"copyBatch is deprecated. Use copyBatchV2.") + @discardableResult open func copyBatch(entries: Array, autorename: Bool = false, allowSharedFolder: Bool = false, allowOwnershipTransfer: Bool = false) -> RpcRequest { + let route = Files.copyBatch + let serverArgs = Files.RelocationBatchArg(entries: entries, autorename: autorename, allowSharedFolder: allowSharedFolder, allowOwnershipTransfer: allowOwnershipTransfer) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for copyBatchV2. It returns list of results for each entry. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationBatchV2JobStatus` object + /// on success or a `Async.PollError` object on failure. + @discardableResult open func copyBatchCheckV2(asyncJobId: String) -> RpcRequest { + let route = Files.copyBatchCheckV2 + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for copyBatch. If success, it returns list of results for each entry. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationBatchJobStatus` object on + /// success or a `Async.PollError` object on failure. + @available(*, unavailable, message:"copyBatchCheck is deprecated. Use copyBatchCheckV2.") + @discardableResult open func copyBatchCheck(asyncJobId: String) -> RpcRequest { + let route = Files.copyBatchCheck + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Get a copy reference to a file or folder. This reference string can be used to save that file or folder to + /// another user's Dropbox by passing it to copyReferenceSave. + /// + /// - parameter path: The path to the file or folder you want to get a copy reference to. + /// + /// - returns: Through the response callback, the caller will receive a `Files.GetCopyReferenceResult` object on + /// success or a `Files.GetCopyReferenceError` object on failure. + @discardableResult open func copyReferenceGet(path: String) -> RpcRequest { + let route = Files.copyReferenceGet + let serverArgs = Files.GetCopyReferenceArg(path: path) + return client.request(route, serverArgs: serverArgs) + } + + /// Save a copy reference returned by copyReferenceGet to the user's Dropbox. + /// + /// - parameter copyReference: A copy reference returned by copyReferenceGet. + /// - parameter path: Path in the user's Dropbox that is the destination. + /// + /// - returns: Through the response callback, the caller will receive a `Files.SaveCopyReferenceResult` object on + /// success or a `Files.SaveCopyReferenceError` object on failure. + @discardableResult open func copyReferenceSave(copyReference: String, path: String) -> RpcRequest { + let route = Files.copyReferenceSave + let serverArgs = Files.SaveCopyReferenceArg(copyReference: copyReference, path: path) + return client.request(route, serverArgs: serverArgs) + } + + /// Create a folder at a given path. + /// + /// - parameter path: Path in the user's Dropbox to create. + /// - parameter autorename: If there's a conflict, have the Dropbox server try to autorename the folder to avoid the + /// conflict. + /// + /// - returns: Through the response callback, the caller will receive a `Files.CreateFolderResult` object on + /// success or a `Files.CreateFolderError` object on failure. + @discardableResult open func createFolderV2(path: String, autorename: Bool = false) -> RpcRequest { + let route = Files.createFolderV2 + let serverArgs = Files.CreateFolderArg(path: path, autorename: autorename) + return client.request(route, serverArgs: serverArgs) + } + + /// Create a folder at a given path. + /// + /// - parameter path: Path in the user's Dropbox to create. + /// - parameter autorename: If there's a conflict, have the Dropbox server try to autorename the folder to avoid the + /// conflict. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FolderMetadata` object on success or + /// a `Files.CreateFolderError` object on failure. + @available(*, unavailable, message:"createFolder is deprecated. Use createFolderV2.") + @discardableResult open func createFolder(path: String, autorename: Bool = false) -> RpcRequest { + let route = Files.createFolder + let serverArgs = Files.CreateFolderArg(path: path, autorename: autorename) + return client.request(route, serverArgs: serverArgs) + } + + /// Create multiple folders at once. This route is asynchronous for large batches, which returns a job ID + /// immediately and runs the create folder batch asynchronously. Otherwise, creates the folders and returns the + /// result synchronously for smaller inputs. You can force asynchronous behaviour by using the forceAsync in + /// CreateFolderBatchArg flag. Use createFolderBatchCheck to check the job status. + /// + /// - parameter paths: List of paths to be created in the user's Dropbox. Duplicate path arguments in the batch are + /// considered only once. + /// - parameter autorename: If there's a conflict, have the Dropbox server try to autorename the folder to avoid the + /// conflict. + /// - parameter forceAsync: Whether to force the create to happen asynchronously. + /// + /// - returns: Through the response callback, the caller will receive a `Files.CreateFolderBatchLaunch` object on + /// success or a `Void` object on failure. + @discardableResult open func createFolderBatch(paths: Array, autorename: Bool = false, forceAsync: Bool = false) -> RpcRequest { + let route = Files.createFolderBatch + let serverArgs = Files.CreateFolderBatchArg(paths: paths, autorename: autorename, forceAsync: forceAsync) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for createFolderBatch. If success, it returns list of result for each + /// entry. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Files.CreateFolderBatchJobStatus` object + /// on success or a `Async.PollError` object on failure. + @discardableResult open func createFolderBatchCheck(asyncJobId: String) -> RpcRequest { + let route = Files.createFolderBatchCheck + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Delete the file or folder at a given path. If the path is a folder, all its contents will be deleted too. A + /// successful response indicates that the file or folder was deleted. The returned metadata will be the + /// corresponding FileMetadata or FolderMetadata for the item at time of deletion, and not a DeletedMetadata object. + /// + /// - parameter path: Path in the user's Dropbox to delete. + /// - parameter parentRev: Perform delete if given "rev" matches the existing file's latest "rev". This field does + /// not support deleting a folder. + /// + /// - returns: Through the response callback, the caller will receive a `Files.DeleteResult` object on success or a + /// `Files.DeleteError` object on failure. + @discardableResult open func deleteV2(path: String, parentRev: String? = nil) -> RpcRequest { + let route = Files.deleteV2 + let serverArgs = Files.DeleteArg(path: path, parentRev: parentRev) + return client.request(route, serverArgs: serverArgs) + } + + /// Delete the file or folder at a given path. If the path is a folder, all its contents will be deleted too. A + /// successful response indicates that the file or folder was deleted. The returned metadata will be the + /// corresponding FileMetadata or FolderMetadata for the item at time of deletion, and not a DeletedMetadata object. + /// + /// - parameter path: Path in the user's Dropbox to delete. + /// - parameter parentRev: Perform delete if given "rev" matches the existing file's latest "rev". This field does + /// not support deleting a folder. + /// + /// - returns: Through the response callback, the caller will receive a `Files.Metadata` object on success or a + /// `Files.DeleteError` object on failure. + @available(*, unavailable, message:"delete is deprecated. Use deleteV2.") + @discardableResult open func delete(path: String, parentRev: String? = nil) -> RpcRequest { + let route = Files.delete + let serverArgs = Files.DeleteArg(path: path, parentRev: parentRev) + return client.request(route, serverArgs: serverArgs) + } + + /// Delete multiple files/folders at once. This route is asynchronous, which returns a job ID immediately and runs + /// the delete batch asynchronously. Use deleteBatchCheck to check the job status. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Files.DeleteBatchLaunch` object on success + /// or a `Void` object on failure. + @discardableResult open func deleteBatch(entries: Array) -> RpcRequest { + let route = Files.deleteBatch + let serverArgs = Files.DeleteBatchArg(entries: entries) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for deleteBatch. If success, it returns list of result for each entry. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Files.DeleteBatchJobStatus` object on + /// success or a `Async.PollError` object on failure. + @discardableResult open func deleteBatchCheck(asyncJobId: String) -> RpcRequest { + let route = Files.deleteBatchCheck + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Download a file from a user's Dropbox. + /// + /// - parameter path: The path of the file to download. + /// - parameter rev: Please specify revision in path instead. + /// - parameter overwrite: A boolean to set behavior in the event of a naming conflict. `True` will overwrite + /// conflicting file at destination. `False` will take no action (but if left unhandled in destination closure, an + /// NSError will be thrown). + /// - parameter destination: A closure used to compute the destination, given the temporary file location and the + /// response. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.DownloadError` object on failure. + @discardableResult open func download(path: String, rev: String? = nil, overwrite: Bool = false, destination: @escaping (URL, HTTPURLResponse) -> URL) -> DownloadRequestFile { + let route = Files.download + let serverArgs = Files.DownloadArg(path: path, rev: rev) + return client.request(route, serverArgs: serverArgs, overwrite: overwrite, destination: destination) + } + + /// Download a file from a user's Dropbox. + /// + /// - parameter path: The path of the file to download. + /// - parameter rev: Please specify revision in path instead. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.DownloadError` object on failure. + @discardableResult open func download(path: String, rev: String? = nil) -> DownloadRequestMemory { + let route = Files.download + let serverArgs = Files.DownloadArg(path: path, rev: rev) + return client.request(route, serverArgs: serverArgs) + } + + /// Download a folder from the user's Dropbox, as a zip file. The folder must be less than 20 GB in size and have + /// fewer than 10,000 total files. The input cannot be a single file. Any single file must be less than 4GB in size. + /// + /// - parameter path: The path of the folder to download. + /// - parameter overwrite: A boolean to set behavior in the event of a naming conflict. `True` will overwrite + /// conflicting file at destination. `False` will take no action (but if left unhandled in destination closure, an + /// NSError will be thrown). + /// - parameter destination: A closure used to compute the destination, given the temporary file location and the + /// response. + /// + /// - returns: Through the response callback, the caller will receive a `Files.DownloadZipResult` object on success + /// or a `Files.DownloadZipError` object on failure. + @discardableResult open func downloadZip(path: String, overwrite: Bool = false, destination: @escaping (URL, HTTPURLResponse) -> URL) -> DownloadRequestFile { + let route = Files.downloadZip + let serverArgs = Files.DownloadZipArg(path: path) + return client.request(route, serverArgs: serverArgs, overwrite: overwrite, destination: destination) + } + + /// Download a folder from the user's Dropbox, as a zip file. The folder must be less than 20 GB in size and have + /// fewer than 10,000 total files. The input cannot be a single file. Any single file must be less than 4GB in size. + /// + /// - parameter path: The path of the folder to download. + /// + /// - returns: Through the response callback, the caller will receive a `Files.DownloadZipResult` object on success + /// or a `Files.DownloadZipError` object on failure. + @discardableResult open func downloadZip(path: String) -> DownloadRequestMemory { + let route = Files.downloadZip + let serverArgs = Files.DownloadZipArg(path: path) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the metadata for a file or folder. Note: Metadata for the root folder is unsupported. + /// + /// - parameter path: The path of a file or folder on Dropbox. + /// - parameter includeMediaInfo: If true, mediaInfo in FileMetadata is set for photo and video. + /// - parameter includeDeleted: If true, DeletedMetadata will be returned for deleted file or folder, otherwise + /// notFound in LookupError will be returned. + /// - parameter includeHasExplicitSharedMembers: If true, the results will include a flag for each file indicating + /// whether or not that file has any explicit members. + /// - parameter includePropertyGroups: If set to a valid list of template IDs, propertyGroups in FileMetadata is set + /// if there exists property data associated with the file and each of the listed templates. + /// + /// - returns: Through the response callback, the caller will receive a `Files.Metadata` object on success or a + /// `Files.GetMetadataError` object on failure. + @discardableResult open func getMetadata(path: String, includeMediaInfo: Bool = false, includeDeleted: Bool = false, includeHasExplicitSharedMembers: Bool = false, includePropertyGroups: FileProperties.TemplateFilterBase? = nil) -> RpcRequest { + let route = Files.getMetadata + let serverArgs = Files.GetMetadataArg(path: path, includeMediaInfo: includeMediaInfo, includeDeleted: includeDeleted, includeHasExplicitSharedMembers: includeHasExplicitSharedMembers, includePropertyGroups: includePropertyGroups) + return client.request(route, serverArgs: serverArgs) + } + + /// Get a preview for a file. Currently, PDF previews are generated for files with the following extensions: .ai, + /// .doc, .docm, .docx, .eps, .odp, .odt, .pps, .ppsm, .ppsx, .ppt, .pptm, .pptx, .rtf. HTML previews are generated + /// for files with the following extensions: .csv, .ods, .xls, .xlsm, .xlsx. Other formats will return an + /// unsupported extension error. + /// + /// - parameter path: The path of the file to preview. + /// - parameter rev: Please specify revision in path instead. + /// - parameter overwrite: A boolean to set behavior in the event of a naming conflict. `True` will overwrite + /// conflicting file at destination. `False` will take no action (but if left unhandled in destination closure, an + /// NSError will be thrown). + /// - parameter destination: A closure used to compute the destination, given the temporary file location and the + /// response. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.PreviewError` object on failure. + @discardableResult open func getPreview(path: String, rev: String? = nil, overwrite: Bool = false, destination: @escaping (URL, HTTPURLResponse) -> URL) -> DownloadRequestFile { + let route = Files.getPreview + let serverArgs = Files.PreviewArg(path: path, rev: rev) + return client.request(route, serverArgs: serverArgs, overwrite: overwrite, destination: destination) + } + + /// Get a preview for a file. Currently, PDF previews are generated for files with the following extensions: .ai, + /// .doc, .docm, .docx, .eps, .odp, .odt, .pps, .ppsm, .ppsx, .ppt, .pptm, .pptx, .rtf. HTML previews are generated + /// for files with the following extensions: .csv, .ods, .xls, .xlsm, .xlsx. Other formats will return an + /// unsupported extension error. + /// + /// - parameter path: The path of the file to preview. + /// - parameter rev: Please specify revision in path instead. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.PreviewError` object on failure. + @discardableResult open func getPreview(path: String, rev: String? = nil) -> DownloadRequestMemory { + let route = Files.getPreview + let serverArgs = Files.PreviewArg(path: path, rev: rev) + return client.request(route, serverArgs: serverArgs) + } + + /// Get a temporary link to stream content of a file. This link will expire in four hours and afterwards you will + /// get 410 Gone. So this URL should not be used to display content directly in the browser. Content-Type of the + /// link is determined automatically by the file's mime type. + /// + /// - parameter path: The path to the file you want a temporary link to. + /// + /// - returns: Through the response callback, the caller will receive a `Files.GetTemporaryLinkResult` object on + /// success or a `Files.GetTemporaryLinkError` object on failure. + @discardableResult open func getTemporaryLink(path: String) -> RpcRequest { + let route = Files.getTemporaryLink + let serverArgs = Files.GetTemporaryLinkArg(path: path) + return client.request(route, serverArgs: serverArgs) + } + + /// Get a one-time use temporary upload link to upload a file to a Dropbox location. This endpoint acts as a + /// delayed upload. The returned temporary upload link may be used to make a POST request with the data to be + /// uploaded. The upload will then be perfomed with the CommitInfo previously provided to getTemporaryUploadLink but + /// evaluated only upon consumption. Hence, errors stemming from invalid CommitInfo with respect to the state of the + /// user's Dropbox will only be communicated at consumption time. Additionally, these errors are surfaced as generic + /// HTTP 409 Conflict responses, potentially hiding issue details. The maximum temporary upload link duration is 4 + /// hours. Upon consumption or expiration, a new link will have to be generated. Multiple links may exist for a + /// specific upload path at any given time. The POST request on the temporary upload link must have its + /// Content-Type set to "application/octet-stream". Example temporary upload link consumption request: curl -X + /// POST https://dl.dropboxusercontent.com/apitul/1/bNi2uIYF51cVBND --header "Content-Type: + /// application/octet-stream" --data-binary @local_file.txt A successful temporary upload link consumption request + /// returns the content hash of the uploaded data in JSON format. Example succesful temporary upload link + /// consumption response: {"content-hash": "599d71033d700ac892a0e48fa61b125d2f5994"} An unsuccessful temporary + /// upload link consumption request returns any of the following status codes: HTTP 400 Bad Request: Content-Type + /// is not one of application/octet-stream and text/plain or request is invalid. HTTP 409 Conflict: The temporary + /// upload link does not exist or is currently unavailable, the upload failed, or another error happened. HTTP 410 + /// Gone: The temporary upload link is expired or consumed. Example unsuccessful temporary upload link consumption + /// response: Temporary upload link has been recently consumed. + /// + /// - parameter commitInfo: Contains the path and other optional modifiers for the future upload commit. Equivalent + /// to the parameters provided to upload. + /// - parameter duration: How long before this link expires, in seconds. Attempting to start an upload with this + /// link longer than this period of time after link creation will result in an error. + /// + /// - returns: Through the response callback, the caller will receive a `Files.GetTemporaryUploadLinkResult` object + /// on success or a `Void` object on failure. + @discardableResult open func getTemporaryUploadLink(commitInfo: Files.CommitInfo, duration: Double = 14400.0) -> RpcRequest { + let route = Files.getTemporaryUploadLink + let serverArgs = Files.GetTemporaryUploadLinkArg(commitInfo: commitInfo, duration: duration) + return client.request(route, serverArgs: serverArgs) + } + + /// Get a thumbnail for an image. This method currently supports files with the following file extensions: jpg, + /// jpeg, png, tiff, tif, gif and bmp. Photos that are larger than 20MB in size won't be converted to a thumbnail. + /// + /// - parameter path: The path to the image file you want to thumbnail. + /// - parameter format: The format for the thumbnail image, jpeg (default) or png. For images that are photos, jpeg + /// should be preferred, while png is better for screenshots and digital arts. + /// - parameter size: The size for the thumbnail image. + /// - parameter mode: How to resize and crop the image to achieve the desired size. + /// - parameter overwrite: A boolean to set behavior in the event of a naming conflict. `True` will overwrite + /// conflicting file at destination. `False` will take no action (but if left unhandled in destination closure, an + /// NSError will be thrown). + /// - parameter destination: A closure used to compute the destination, given the temporary file location and the + /// response. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.ThumbnailError` object on failure. + @discardableResult open func getThumbnail(path: String, format: Files.ThumbnailFormat = .jpeg, size: Files.ThumbnailSize = .w64h64, mode: Files.ThumbnailMode = .strict, overwrite: Bool = false, destination: @escaping (URL, HTTPURLResponse) -> URL) -> DownloadRequestFile { + let route = Files.getThumbnail + let serverArgs = Files.ThumbnailArg(path: path, format: format, size: size, mode: mode) + return client.request(route, serverArgs: serverArgs, overwrite: overwrite, destination: destination) + } + + /// Get a thumbnail for an image. This method currently supports files with the following file extensions: jpg, + /// jpeg, png, tiff, tif, gif and bmp. Photos that are larger than 20MB in size won't be converted to a thumbnail. + /// + /// - parameter path: The path to the image file you want to thumbnail. + /// - parameter format: The format for the thumbnail image, jpeg (default) or png. For images that are photos, jpeg + /// should be preferred, while png is better for screenshots and digital arts. + /// - parameter size: The size for the thumbnail image. + /// - parameter mode: How to resize and crop the image to achieve the desired size. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.ThumbnailError` object on failure. + @discardableResult open func getThumbnail(path: String, format: Files.ThumbnailFormat = .jpeg, size: Files.ThumbnailSize = .w64h64, mode: Files.ThumbnailMode = .strict) -> DownloadRequestMemory { + let route = Files.getThumbnail + let serverArgs = Files.ThumbnailArg(path: path, format: format, size: size, mode: mode) + return client.request(route, serverArgs: serverArgs) + } + + /// Get thumbnails for a list of images. We allow up to 25 thumbnails in a single batch. This method currently + /// supports files with the following file extensions: jpg, jpeg, png, tiff, tif, gif and bmp. Photos that are + /// larger than 20MB in size won't be converted to a thumbnail. + /// + /// - parameter entries: List of files to get thumbnails. + /// + /// - returns: Through the response callback, the caller will receive a `Files.GetThumbnailBatchResult` object on + /// success or a `Files.GetThumbnailBatchError` object on failure. + @discardableResult open func getThumbnailBatch(entries: Array) -> RpcRequest { + let route = Files.getThumbnailBatch + let serverArgs = Files.GetThumbnailBatchArg(entries: entries) + return client.request(route, serverArgs: serverArgs) + } + + /// Starts returning the contents of a folder. If the result's hasMore in ListFolderResult field is true, call + /// listFolderContinue with the returned cursor in ListFolderResult to retrieve more entries. If you're using + /// recursive in ListFolderArg set to true to keep a local cache of the contents of a Dropbox account, iterate + /// through each entry in order and process them as follows to keep your local state in sync: For each FileMetadata, + /// store the new entry at the given path in your local state. If the required parent folders don't exist yet, + /// create them. If there's already something else at the given path, replace it and remove all its children. For + /// each FolderMetadata, store the new entry at the given path in your local state. If the required parent folders + /// don't exist yet, create them. If there's already something else at the given path, replace it but leave the + /// children as they are. Check the new entry's readOnly in FolderSharingInfo and set all its children's read-only + /// statuses to match. For each DeletedMetadata, if your local state has something at the given path, remove it and + /// all its children. If there's nothing at the given path, ignore this entry. Note: auth.RateLimitError may be + /// returned if multiple listFolder or listFolderContinue calls with same parameters are made simultaneously by same + /// API app for same user. If your app implements retry logic, please hold off the retry until the previous request + /// finishes. + /// + /// - parameter path: A unique identifier for the file. + /// - parameter recursive: If true, the list folder operation will be applied recursively to all subfolders and the + /// response will contain contents of all subfolders. + /// - parameter includeMediaInfo: If true, mediaInfo in FileMetadata is set for photo and video. + /// - parameter includeDeleted: If true, the results will include entries for files and folders that used to exist + /// but were deleted. + /// - parameter includeHasExplicitSharedMembers: If true, the results will include a flag for each file indicating + /// whether or not that file has any explicit members. + /// - parameter includeMountedFolders: If true, the results will include entries under mounted folders which + /// includes app folder, shared folder and team folder. + /// - parameter limit: The maximum number of results to return per request. Note: This is an approximate number and + /// there can be slightly more entries returned in some cases. + /// - parameter sharedLink: A shared link to list the contents of. If the link is password-protected, the password + /// must be provided. If this field is present, path in ListFolderArg will be relative to root of the shared link. + /// Only non-recursive mode is supported for shared link. + /// - parameter includePropertyGroups: If set to a valid list of template IDs, propertyGroups in FileMetadata is set + /// if there exists property data associated with the file and each of the listed templates. + /// + /// - returns: Through the response callback, the caller will receive a `Files.ListFolderResult` object on success + /// or a `Files.ListFolderError` object on failure. + @discardableResult open func listFolder(path: String, recursive: Bool = false, includeMediaInfo: Bool = false, includeDeleted: Bool = false, includeHasExplicitSharedMembers: Bool = false, includeMountedFolders: Bool = true, limit: UInt32? = nil, sharedLink: Files.SharedLink? = nil, includePropertyGroups: FileProperties.TemplateFilterBase? = nil) -> RpcRequest { + let route = Files.listFolder + let serverArgs = Files.ListFolderArg(path: path, recursive: recursive, includeMediaInfo: includeMediaInfo, includeDeleted: includeDeleted, includeHasExplicitSharedMembers: includeHasExplicitSharedMembers, includeMountedFolders: includeMountedFolders, limit: limit, sharedLink: sharedLink, includePropertyGroups: includePropertyGroups) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from listFolder, use this to paginate through all files and retrieve updates to + /// the folder, following the same rules as documented for listFolder. + /// + /// - parameter cursor: The cursor returned by your last call to listFolder or listFolderContinue. + /// + /// - returns: Through the response callback, the caller will receive a `Files.ListFolderResult` object on success + /// or a `Files.ListFolderContinueError` object on failure. + @discardableResult open func listFolderContinue(cursor: String) -> RpcRequest { + let route = Files.listFolderContinue + let serverArgs = Files.ListFolderContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// A way to quickly get a cursor for the folder's state. Unlike listFolder, listFolderGetLatestCursor doesn't + /// return any entries. This endpoint is for app which only needs to know about new files and modifications and + /// doesn't need to know about files that already exist in Dropbox. + /// + /// - parameter path: A unique identifier for the file. + /// - parameter recursive: If true, the list folder operation will be applied recursively to all subfolders and the + /// response will contain contents of all subfolders. + /// - parameter includeMediaInfo: If true, mediaInfo in FileMetadata is set for photo and video. + /// - parameter includeDeleted: If true, the results will include entries for files and folders that used to exist + /// but were deleted. + /// - parameter includeHasExplicitSharedMembers: If true, the results will include a flag for each file indicating + /// whether or not that file has any explicit members. + /// - parameter includeMountedFolders: If true, the results will include entries under mounted folders which + /// includes app folder, shared folder and team folder. + /// - parameter limit: The maximum number of results to return per request. Note: This is an approximate number and + /// there can be slightly more entries returned in some cases. + /// - parameter sharedLink: A shared link to list the contents of. If the link is password-protected, the password + /// must be provided. If this field is present, path in ListFolderArg will be relative to root of the shared link. + /// Only non-recursive mode is supported for shared link. + /// - parameter includePropertyGroups: If set to a valid list of template IDs, propertyGroups in FileMetadata is set + /// if there exists property data associated with the file and each of the listed templates. + /// + /// - returns: Through the response callback, the caller will receive a `Files.ListFolderGetLatestCursorResult` + /// object on success or a `Files.ListFolderError` object on failure. + @discardableResult open func listFolderGetLatestCursor(path: String, recursive: Bool = false, includeMediaInfo: Bool = false, includeDeleted: Bool = false, includeHasExplicitSharedMembers: Bool = false, includeMountedFolders: Bool = true, limit: UInt32? = nil, sharedLink: Files.SharedLink? = nil, includePropertyGroups: FileProperties.TemplateFilterBase? = nil) -> RpcRequest { + let route = Files.listFolderGetLatestCursor + let serverArgs = Files.ListFolderArg(path: path, recursive: recursive, includeMediaInfo: includeMediaInfo, includeDeleted: includeDeleted, includeHasExplicitSharedMembers: includeHasExplicitSharedMembers, includeMountedFolders: includeMountedFolders, limit: limit, sharedLink: sharedLink, includePropertyGroups: includePropertyGroups) + return client.request(route, serverArgs: serverArgs) + } + + /// A longpoll endpoint to wait for changes on an account. In conjunction with listFolderContinue, this call gives + /// you a low-latency way to monitor an account for file changes. The connection will block until there are changes + /// available or a timeout occurs. This endpoint is useful mostly for client-side apps. If you're looking for + /// server-side notifications, check out our webhooks documentation + /// https://www.dropbox.com/developers/reference/webhooks. + /// + /// - parameter cursor: A cursor as returned by listFolder or listFolderContinue. Cursors retrieved by setting + /// includeMediaInfo in ListFolderArg to true are not supported. + /// - parameter timeout: A timeout in seconds. The request will block for at most this length of time, plus up to 90 + /// seconds of random jitter added to avoid the thundering herd problem. Care should be taken when using this + /// parameter, as some network infrastructure does not support long timeouts. + /// + /// - returns: Through the response callback, the caller will receive a `Files.ListFolderLongpollResult` object on + /// success or a `Files.ListFolderLongpollError` object on failure. + @discardableResult open func listFolderLongpoll(cursor: String, timeout: UInt64 = 30) -> RpcRequest { + let route = Files.listFolderLongpoll + let serverArgs = Files.ListFolderLongpollArg(cursor: cursor, timeout: timeout) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns revisions for files based on a file path or a file id. The file path or file id is identified from the + /// latest file entry at the given file path or id. This end point allows your app to query either by file path or + /// file id by setting the mode parameter appropriately. In the path in ListRevisionsMode (default) mode, all + /// revisions at the same file path as the latest file entry are returned. If revisions with the same file id are + /// desired, then mode must be set to id in ListRevisionsMode. The id in ListRevisionsMode mode is useful to + /// retrieve revisions for a given file across moves or renames. + /// + /// - parameter path: The path to the file you want to see the revisions of. + /// - parameter mode: Determines the behavior of the API in listing the revisions for a given file path or id. + /// - parameter limit: The maximum number of revision entries returned. + /// + /// - returns: Through the response callback, the caller will receive a `Files.ListRevisionsResult` object on + /// success or a `Files.ListRevisionsError` object on failure. + @discardableResult open func listRevisions(path: String, mode: Files.ListRevisionsMode = .path, limit: UInt64 = 10) -> RpcRequest { + let route = Files.listRevisions + let serverArgs = Files.ListRevisionsArg(path: path, mode: mode, limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Move a file or folder to a different location in the user's Dropbox. If the source path is a folder all its + /// contents will be moved. + /// + /// - parameter allowSharedFolder: If true, copy will copy contents in shared folder, otherwise cantCopySharedFolder + /// in RelocationError will be returned if fromPath contains shared folder. This field is always true for move. + /// - parameter autorename: If there's a conflict, have the Dropbox server try to autorename the file to avoid the + /// conflict. + /// - parameter allowOwnershipTransfer: Allow moves by owner even if it would result in an ownership transfer for + /// the content being moved. This does not apply to copies. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationResult` object on success + /// or a `Files.RelocationError` object on failure. + @discardableResult open func moveV2(fromPath: String, toPath: String, allowSharedFolder: Bool = false, autorename: Bool = false, allowOwnershipTransfer: Bool = false) -> RpcRequest { + let route = Files.moveV2 + let serverArgs = Files.RelocationArg(fromPath: fromPath, toPath: toPath, allowSharedFolder: allowSharedFolder, autorename: autorename, allowOwnershipTransfer: allowOwnershipTransfer) + return client.request(route, serverArgs: serverArgs) + } + + /// Move a file or folder to a different location in the user's Dropbox. If the source path is a folder all its + /// contents will be moved. + /// + /// - parameter allowSharedFolder: If true, copy will copy contents in shared folder, otherwise cantCopySharedFolder + /// in RelocationError will be returned if fromPath contains shared folder. This field is always true for move. + /// - parameter autorename: If there's a conflict, have the Dropbox server try to autorename the file to avoid the + /// conflict. + /// - parameter allowOwnershipTransfer: Allow moves by owner even if it would result in an ownership transfer for + /// the content being moved. This does not apply to copies. + /// + /// - returns: Through the response callback, the caller will receive a `Files.Metadata` object on success or a + /// `Files.RelocationError` object on failure. + @available(*, unavailable, message:"move is deprecated. Use moveV2.") + @discardableResult open func move(fromPath: String, toPath: String, allowSharedFolder: Bool = false, autorename: Bool = false, allowOwnershipTransfer: Bool = false) -> RpcRequest { + let route = Files.move + let serverArgs = Files.RelocationArg(fromPath: fromPath, toPath: toPath, allowSharedFolder: allowSharedFolder, autorename: autorename, allowOwnershipTransfer: allowOwnershipTransfer) + return client.request(route, serverArgs: serverArgs) + } + + /// Move multiple files or folders to different locations at once in the user's Dropbox. This route will replace + /// moveBatchV2. The main difference is this route will return stutus for each entry, while moveBatch raises failure + /// if any entry fails. This route will either finish synchronously, or return a job ID and do the async move job in + /// background. Please use moveBatchCheckV2 to check the job status. + /// + /// - parameter allowOwnershipTransfer: Allow moves by owner even if it would result in an ownership transfer for + /// the content being moved. This does not apply to copies. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationBatchV2Launch` object on + /// success or a `Void` object on failure. + @discardableResult open func moveBatchV2(entries: Array, autorename: Bool = false, allowOwnershipTransfer: Bool = false) -> RpcRequest { + let route = Files.moveBatchV2 + let serverArgs = Files.MoveBatchArg(entries: entries, autorename: autorename, allowOwnershipTransfer: allowOwnershipTransfer) + return client.request(route, serverArgs: serverArgs) + } + + /// Move multiple files or folders to different locations at once in the user's Dropbox. This route is 'all or + /// nothing', which means if one entry fails, the whole transaction will abort. This route will return job ID + /// immediately and do the async moving job in background. Please use moveBatchCheck to check the job status. + /// + /// - parameter allowSharedFolder: If true, copyBatch will copy contents in shared folder, otherwise + /// cantCopySharedFolder in RelocationError will be returned if fromPath in RelocationPath contains shared folder. + /// This field is always true for moveBatch. + /// - parameter allowOwnershipTransfer: Allow moves by owner even if it would result in an ownership transfer for + /// the content being moved. This does not apply to copies. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationBatchLaunch` object on + /// success or a `Void` object on failure. + @discardableResult open func moveBatch(entries: Array, autorename: Bool = false, allowSharedFolder: Bool = false, allowOwnershipTransfer: Bool = false) -> RpcRequest { + let route = Files.moveBatch + let serverArgs = Files.RelocationBatchArg(entries: entries, autorename: autorename, allowSharedFolder: allowSharedFolder, allowOwnershipTransfer: allowOwnershipTransfer) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for moveBatchV2. It returns list of results for each entry. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationBatchV2JobStatus` object + /// on success or a `Async.PollError` object on failure. + @discardableResult open func moveBatchCheckV2(asyncJobId: String) -> RpcRequest { + let route = Files.moveBatchCheckV2 + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for moveBatch. If success, it returns list of results for each entry. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Files.RelocationBatchJobStatus` object on + /// success or a `Async.PollError` object on failure. + @discardableResult open func moveBatchCheck(asyncJobId: String) -> RpcRequest { + let route = Files.moveBatchCheck + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Permanently delete the file or folder at a given path (see https://www.dropbox.com/en/help/40). Note: This + /// endpoint is only available for Dropbox Business apps. + /// + /// - parameter path: Path in the user's Dropbox to delete. + /// - parameter parentRev: Perform delete if given "rev" matches the existing file's latest "rev". This field does + /// not support deleting a folder. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Files.DeleteError` object on failure. + @discardableResult open func permanentlyDelete(path: String, parentRev: String? = nil) -> RpcRequest { + let route = Files.permanentlyDelete + let serverArgs = Files.DeleteArg(path: path, parentRev: parentRev) + return client.request(route, serverArgs: serverArgs) + } + + /// The propertiesAdd route + /// + /// - parameter path: A unique identifier for the file or folder. + /// - parameter propertyGroups: The property groups which are to be added to a Dropbox file. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.AddPropertiesError` object on failure. + @available(*, unavailable, message:"propertiesAdd is deprecated.") + @discardableResult open func propertiesAdd(path: String, propertyGroups: Array) -> RpcRequest { + let route = Files.propertiesAdd + let serverArgs = FileProperties.AddPropertiesArg(path: path, propertyGroups: propertyGroups) + return client.request(route, serverArgs: serverArgs) + } + + /// The propertiesOverwrite route + /// + /// - parameter path: A unique identifier for the file or folder. + /// - parameter propertyGroups: The property groups "snapshot" updates to force apply. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.InvalidPropertyGroupError` object on failure. + @available(*, unavailable, message:"propertiesOverwrite is deprecated.") + @discardableResult open func propertiesOverwrite(path: String, propertyGroups: Array) -> RpcRequest { + let route = Files.propertiesOverwrite + let serverArgs = FileProperties.OverwritePropertyGroupArg(path: path, propertyGroups: propertyGroups) + return client.request(route, serverArgs: serverArgs) + } + + /// The propertiesRemove route + /// + /// - parameter path: A unique identifier for the file or folder. + /// - parameter propertyTemplateIds: A list of identifiers for a template created by templatesAddForUser or + /// templatesAddForTeam. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.RemovePropertiesError` object on failure. + @available(*, unavailable, message:"propertiesRemove is deprecated.") + @discardableResult open func propertiesRemove(path: String, propertyTemplateIds: Array) -> RpcRequest { + let route = Files.propertiesRemove + let serverArgs = FileProperties.RemovePropertiesArg(path: path, propertyTemplateIds: propertyTemplateIds) + return client.request(route, serverArgs: serverArgs) + } + + /// The propertiesTemplateGet route + /// + /// - parameter templateId: An identifier for template added by route See templatesAddForUser or + /// templatesAddForTeam. + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.GetTemplateResult` object + /// on success or a `FileProperties.TemplateError` object on failure. + @available(*, unavailable, message:"propertiesTemplateGet is deprecated.") + @discardableResult open func propertiesTemplateGet(templateId: String) -> RpcRequest { + let route = Files.propertiesTemplateGet + let serverArgs = FileProperties.GetTemplateArg(templateId: templateId) + return client.request(route, serverArgs: serverArgs) + } + + /// The propertiesTemplateList route + /// + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.ListTemplateResult` object + /// on success or a `FileProperties.TemplateError` object on failure. + @available(*, unavailable, message:"propertiesTemplateList is deprecated.") + @discardableResult open func propertiesTemplateList() -> RpcRequest { + let route = Files.propertiesTemplateList + return client.request(route) + } + + /// The propertiesUpdate route + /// + /// - parameter path: A unique identifier for the file or folder. + /// - parameter updatePropertyGroups: The property groups "delta" updates to apply. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `FileProperties.UpdatePropertiesError` object on failure. + @available(*, unavailable, message:"propertiesUpdate is deprecated.") + @discardableResult open func propertiesUpdate(path: String, updatePropertyGroups: Array) -> RpcRequest { + let route = Files.propertiesUpdate + let serverArgs = FileProperties.UpdatePropertiesArg(path: path, updatePropertyGroups: updatePropertyGroups) + return client.request(route, serverArgs: serverArgs) + } + + /// Restore a specific revision of a file to the given path. + /// + /// - parameter path: The path to save the restored file. + /// - parameter rev: The revision to restore. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.RestoreError` object on failure. + @discardableResult open func restore(path: String, rev: String) -> RpcRequest { + let route = Files.restore + let serverArgs = Files.RestoreArg(path: path, rev: rev) + return client.request(route, serverArgs: serverArgs) + } + + /// Save the data from a specified URL into a file in user's Dropbox. Note that the transfer from the URL must + /// complete within 5 minutes, or the operation will time out and the job will fail. If the given path already + /// exists, the file will be renamed to avoid the conflict (e.g. myfile (1).txt). + /// + /// - parameter path: The path in Dropbox where the URL will be saved to. + /// - parameter url: The URL to be saved. + /// + /// - returns: Through the response callback, the caller will receive a `Files.SaveUrlResult` object on success or + /// a `Files.SaveUrlError` object on failure. + @discardableResult open func saveUrl(path: String, url: String) -> RpcRequest { + let route = Files.saveUrl + let serverArgs = Files.SaveUrlArg(path: path, url: url) + return client.request(route, serverArgs: serverArgs) + } + + /// Check the status of a saveUrl job. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Files.SaveUrlJobStatus` object on success + /// or a `Async.PollError` object on failure. + @discardableResult open func saveUrlCheckJobStatus(asyncJobId: String) -> RpcRequest { + let route = Files.saveUrlCheckJobStatus + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Searches for files and folders. Note: Recent changes may not immediately be reflected in search results due to a + /// short delay in indexing. + /// + /// - parameter path: The path in the user's Dropbox to search. Should probably be a folder. + /// - parameter query: The string to search for. The search string is split on spaces into multiple tokens. For file + /// name searching, the last token is used for prefix matching (i.e. "bat c" matches "bat cave" but not "batman + /// car"). + /// - parameter start: The starting index within the search results (used for paging). + /// - parameter maxResults: The maximum number of search results to return. + /// - parameter mode: The search mode (filename, filename_and_content, or deleted_filename). Note that searching + /// file content is only available for Dropbox Business accounts. + /// + /// - returns: Through the response callback, the caller will receive a `Files.SearchResult` object on success or a + /// `Files.SearchError` object on failure. + @discardableResult open func search(path: String, query: String, start: UInt64 = 0, maxResults: UInt64 = 100, mode: Files.SearchMode = .filename) -> RpcRequest { + let route = Files.search + let serverArgs = Files.SearchArg(path: path, query: query, start: start, maxResults: maxResults, mode: mode) + return client.request(route, serverArgs: serverArgs) + } + + /// Create a new file with the contents provided in the request. Do not use this to upload a file larger than 150 + /// MB. Instead, create an upload session with uploadSessionStart. Calls to this endpoint will count as data + /// transport calls for any Dropbox Business teams with a limit on the number of data transport calls allowed per + /// month. For more information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter path: Path in the user's Dropbox to save the file. + /// - parameter mode: Selects what to do if the file already exists. + /// - parameter autorename: If there's a conflict, as determined by mode, have the Dropbox server try to autorename + /// the file to avoid conflict. + /// - parameter clientModified: The value to store as the clientModified timestamp. Dropbox automatically records + /// the time at which the file was written to the Dropbox servers. It can also record an additional timestamp, + /// provided by Dropbox desktop clients, mobile clients, and API apps of when the file was actually created or + /// modified. + /// - parameter mute: Normally, users are made aware of any file modifications in their Dropbox account via + /// notifications in the client software. If true, this tells the clients that this modification shouldn't result in + /// a user notification. + /// - parameter propertyGroups: List of custom properties to add to file. + /// - parameter strictConflict: Be more strict about how each WriteMode detects conflict. For example, always return + /// a conflict error when mode = update in WriteMode and the given "rev" doesn't match the existing file's "rev", + /// even if the existing file has been deleted. + /// - parameter input: The file to upload, as an Data object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.UploadError` object on failure. + @discardableResult open func upload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: Data) -> UploadRequest { + let route = Files.upload + let serverArgs = Files.CommitInfo(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + return client.request(route, serverArgs: serverArgs, input: .data(input)) + } + + /// Create a new file with the contents provided in the request. Do not use this to upload a file larger than 150 + /// MB. Instead, create an upload session with uploadSessionStart. Calls to this endpoint will count as data + /// transport calls for any Dropbox Business teams with a limit on the number of data transport calls allowed per + /// month. For more information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter path: Path in the user's Dropbox to save the file. + /// - parameter mode: Selects what to do if the file already exists. + /// - parameter autorename: If there's a conflict, as determined by mode, have the Dropbox server try to autorename + /// the file to avoid conflict. + /// - parameter clientModified: The value to store as the clientModified timestamp. Dropbox automatically records + /// the time at which the file was written to the Dropbox servers. It can also record an additional timestamp, + /// provided by Dropbox desktop clients, mobile clients, and API apps of when the file was actually created or + /// modified. + /// - parameter mute: Normally, users are made aware of any file modifications in their Dropbox account via + /// notifications in the client software. If true, this tells the clients that this modification shouldn't result in + /// a user notification. + /// - parameter propertyGroups: List of custom properties to add to file. + /// - parameter strictConflict: Be more strict about how each WriteMode detects conflict. For example, always return + /// a conflict error when mode = update in WriteMode and the given "rev" doesn't match the existing file's "rev", + /// even if the existing file has been deleted. + /// - parameter input: The file to upload, as an URL object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.UploadError` object on failure. + @discardableResult open func upload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: URL) -> UploadRequest { + let route = Files.upload + let serverArgs = Files.CommitInfo(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + return client.request(route, serverArgs: serverArgs, input: .file(input)) + } + + /// Create a new file with the contents provided in the request. Do not use this to upload a file larger than 150 + /// MB. Instead, create an upload session with uploadSessionStart. Calls to this endpoint will count as data + /// transport calls for any Dropbox Business teams with a limit on the number of data transport calls allowed per + /// month. For more information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter path: Path in the user's Dropbox to save the file. + /// - parameter mode: Selects what to do if the file already exists. + /// - parameter autorename: If there's a conflict, as determined by mode, have the Dropbox server try to autorename + /// the file to avoid conflict. + /// - parameter clientModified: The value to store as the clientModified timestamp. Dropbox automatically records + /// the time at which the file was written to the Dropbox servers. It can also record an additional timestamp, + /// provided by Dropbox desktop clients, mobile clients, and API apps of when the file was actually created or + /// modified. + /// - parameter mute: Normally, users are made aware of any file modifications in their Dropbox account via + /// notifications in the client software. If true, this tells the clients that this modification shouldn't result in + /// a user notification. + /// - parameter propertyGroups: List of custom properties to add to file. + /// - parameter strictConflict: Be more strict about how each WriteMode detects conflict. For example, always return + /// a conflict error when mode = update in WriteMode and the given "rev" doesn't match the existing file's "rev", + /// even if the existing file has been deleted. + /// - parameter input: The file to upload, as an InputStream object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.UploadError` object on failure. + @discardableResult open func upload(path: String, mode: Files.WriteMode = .add, autorename: Bool = false, clientModified: Date? = nil, mute: Bool = false, propertyGroups: Array? = nil, strictConflict: Bool = false, input: InputStream) -> UploadRequest { + let route = Files.upload + let serverArgs = Files.CommitInfo(path: path, mode: mode, autorename: autorename, clientModified: clientModified, mute: mute, propertyGroups: propertyGroups, strictConflict: strictConflict) + return client.request(route, serverArgs: serverArgs, input: .stream(input)) + } + + /// Append more data to an upload session. When the parameter close is set, this call will close the session. A + /// single request should not upload more than 150 MB. The maximum size of a file one can upload to an upload + /// session is 350 GB. Calls to this endpoint will count as data transport calls for any Dropbox Business teams with + /// a limit on the number of data transport calls allowed per month. For more information, see the Data transport + /// limit page https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter cursor: Contains the upload session ID and the offset. + /// - parameter close: If true, the current session will be closed, at which point you won't be able to call + /// uploadSessionAppendV2 anymore with the current session. + /// - parameter input: The file to upload, as an Data object. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Files.UploadSessionLookupError` object on failure. + @discardableResult open func uploadSessionAppendV2(cursor: Files.UploadSessionCursor, close: Bool = false, input: Data) -> UploadRequest { + let route = Files.uploadSessionAppendV2 + let serverArgs = Files.UploadSessionAppendArg(cursor: cursor, close: close) + return client.request(route, serverArgs: serverArgs, input: .data(input)) + } + + /// Append more data to an upload session. When the parameter close is set, this call will close the session. A + /// single request should not upload more than 150 MB. The maximum size of a file one can upload to an upload + /// session is 350 GB. Calls to this endpoint will count as data transport calls for any Dropbox Business teams with + /// a limit on the number of data transport calls allowed per month. For more information, see the Data transport + /// limit page https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter cursor: Contains the upload session ID and the offset. + /// - parameter close: If true, the current session will be closed, at which point you won't be able to call + /// uploadSessionAppendV2 anymore with the current session. + /// - parameter input: The file to upload, as an URL object. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Files.UploadSessionLookupError` object on failure. + @discardableResult open func uploadSessionAppendV2(cursor: Files.UploadSessionCursor, close: Bool = false, input: URL) -> UploadRequest { + let route = Files.uploadSessionAppendV2 + let serverArgs = Files.UploadSessionAppendArg(cursor: cursor, close: close) + return client.request(route, serverArgs: serverArgs, input: .file(input)) + } + + /// Append more data to an upload session. When the parameter close is set, this call will close the session. A + /// single request should not upload more than 150 MB. The maximum size of a file one can upload to an upload + /// session is 350 GB. Calls to this endpoint will count as data transport calls for any Dropbox Business teams with + /// a limit on the number of data transport calls allowed per month. For more information, see the Data transport + /// limit page https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter cursor: Contains the upload session ID and the offset. + /// - parameter close: If true, the current session will be closed, at which point you won't be able to call + /// uploadSessionAppendV2 anymore with the current session. + /// - parameter input: The file to upload, as an InputStream object. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Files.UploadSessionLookupError` object on failure. + @discardableResult open func uploadSessionAppendV2(cursor: Files.UploadSessionCursor, close: Bool = false, input: InputStream) -> UploadRequest { + let route = Files.uploadSessionAppendV2 + let serverArgs = Files.UploadSessionAppendArg(cursor: cursor, close: close) + return client.request(route, serverArgs: serverArgs, input: .stream(input)) + } + + /// Append more data to an upload session. A single request should not upload more than 150 MB. The maximum size of + /// a file one can upload to an upload session is 350 GB. Calls to this endpoint will count as data transport calls + /// for any Dropbox Business teams with a limit on the number of data transport calls allowed per month. For more + /// information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter sessionId: The upload session ID (returned by uploadSessionStart). + /// - parameter offset: The amount of data that has been uploaded so far. We use this to make sure upload data isn't + /// lost or duplicated in the event of a network error. + /// - parameter input: The file to upload, as an Data object. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Files.UploadSessionLookupError` object on failure. + @available(*, unavailable, message:"uploadSessionAppend is deprecated. Use uploadSessionAppendV2.") + @discardableResult open func uploadSessionAppend(sessionId: String, offset: UInt64, input: Data) -> UploadRequest { + let route = Files.uploadSessionAppend + let serverArgs = Files.UploadSessionCursor(sessionId: sessionId, offset: offset) + return client.request(route, serverArgs: serverArgs, input: .data(input)) + } + + /// Append more data to an upload session. A single request should not upload more than 150 MB. The maximum size of + /// a file one can upload to an upload session is 350 GB. Calls to this endpoint will count as data transport calls + /// for any Dropbox Business teams with a limit on the number of data transport calls allowed per month. For more + /// information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter sessionId: The upload session ID (returned by uploadSessionStart). + /// - parameter offset: The amount of data that has been uploaded so far. We use this to make sure upload data isn't + /// lost or duplicated in the event of a network error. + /// - parameter input: The file to upload, as an URL object. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Files.UploadSessionLookupError` object on failure. + @available(*, unavailable, message:"uploadSessionAppend is deprecated. Use uploadSessionAppendV2.") + @discardableResult open func uploadSessionAppend(sessionId: String, offset: UInt64, input: URL) -> UploadRequest { + let route = Files.uploadSessionAppend + let serverArgs = Files.UploadSessionCursor(sessionId: sessionId, offset: offset) + return client.request(route, serverArgs: serverArgs, input: .file(input)) + } + + /// Append more data to an upload session. A single request should not upload more than 150 MB. The maximum size of + /// a file one can upload to an upload session is 350 GB. Calls to this endpoint will count as data transport calls + /// for any Dropbox Business teams with a limit on the number of data transport calls allowed per month. For more + /// information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter sessionId: The upload session ID (returned by uploadSessionStart). + /// - parameter offset: The amount of data that has been uploaded so far. We use this to make sure upload data isn't + /// lost or duplicated in the event of a network error. + /// - parameter input: The file to upload, as an InputStream object. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Files.UploadSessionLookupError` object on failure. + @available(*, unavailable, message:"uploadSessionAppend is deprecated. Use uploadSessionAppendV2.") + @discardableResult open func uploadSessionAppend(sessionId: String, offset: UInt64, input: InputStream) -> UploadRequest { + let route = Files.uploadSessionAppend + let serverArgs = Files.UploadSessionCursor(sessionId: sessionId, offset: offset) + return client.request(route, serverArgs: serverArgs, input: .stream(input)) + } + + /// Finish an upload session and save the uploaded data to the given file path. A single request should not upload + /// more than 150 MB. The maximum size of a file one can upload to an upload session is 350 GB. Calls to this + /// endpoint will count as data transport calls for any Dropbox Business teams with a limit on the number of data + /// transport calls allowed per month. For more information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter cursor: Contains the upload session ID and the offset. + /// - parameter commit: Contains the path and other optional modifiers for the commit. + /// - parameter input: The file to upload, as an Data object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.UploadSessionFinishError` object on failure. + @discardableResult open func uploadSessionFinish(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, input: Data) -> UploadRequest { + let route = Files.uploadSessionFinish + let serverArgs = Files.UploadSessionFinishArg(cursor: cursor, commit: commit) + return client.request(route, serverArgs: serverArgs, input: .data(input)) + } + + /// Finish an upload session and save the uploaded data to the given file path. A single request should not upload + /// more than 150 MB. The maximum size of a file one can upload to an upload session is 350 GB. Calls to this + /// endpoint will count as data transport calls for any Dropbox Business teams with a limit on the number of data + /// transport calls allowed per month. For more information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter cursor: Contains the upload session ID and the offset. + /// - parameter commit: Contains the path and other optional modifiers for the commit. + /// - parameter input: The file to upload, as an URL object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.UploadSessionFinishError` object on failure. + @discardableResult open func uploadSessionFinish(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, input: URL) -> UploadRequest { + let route = Files.uploadSessionFinish + let serverArgs = Files.UploadSessionFinishArg(cursor: cursor, commit: commit) + return client.request(route, serverArgs: serverArgs, input: .file(input)) + } + + /// Finish an upload session and save the uploaded data to the given file path. A single request should not upload + /// more than 150 MB. The maximum size of a file one can upload to an upload session is 350 GB. Calls to this + /// endpoint will count as data transport calls for any Dropbox Business teams with a limit on the number of data + /// transport calls allowed per month. For more information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter cursor: Contains the upload session ID and the offset. + /// - parameter commit: Contains the path and other optional modifiers for the commit. + /// - parameter input: The file to upload, as an InputStream object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.FileMetadata` object on success or a + /// `Files.UploadSessionFinishError` object on failure. + @discardableResult open func uploadSessionFinish(cursor: Files.UploadSessionCursor, commit: Files.CommitInfo, input: InputStream) -> UploadRequest { + let route = Files.uploadSessionFinish + let serverArgs = Files.UploadSessionFinishArg(cursor: cursor, commit: commit) + return client.request(route, serverArgs: serverArgs, input: .stream(input)) + } + + /// This route helps you commit many files at once into a user's Dropbox. Use uploadSessionStart and + /// uploadSessionAppendV2 to upload file contents. We recommend uploading many files in parallel to increase + /// throughput. Once the file contents have been uploaded, rather than calling uploadSessionFinish, use this route + /// to finish all your upload sessions in a single request. close in UploadSessionStartArg or close in + /// UploadSessionAppendArg needs to be true for the last uploadSessionStart or uploadSessionAppendV2 call. The + /// maximum size of a file one can upload to an upload session is 350 GB. This route will return a job_id + /// immediately and do the async commit job in background. Use uploadSessionFinishBatchCheck to check the job + /// status. For the same account, this route should be executed serially. That means you should not start the next + /// job before current job finishes. We allow up to 1000 entries in a single request. Calls to this endpoint will + /// count as data transport calls for any Dropbox Business teams with a limit on the number of data transport calls + /// allowed per month. For more information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter entries: Commit information for each file in the batch. + /// + /// - returns: Through the response callback, the caller will receive a `Files.UploadSessionFinishBatchLaunch` + /// object on success or a `Void` object on failure. + @discardableResult open func uploadSessionFinishBatch(entries: Array) -> RpcRequest { + let route = Files.uploadSessionFinishBatch + let serverArgs = Files.UploadSessionFinishBatchArg(entries: entries) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for uploadSessionFinishBatch. If success, it returns list of result + /// for each entry. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Files.UploadSessionFinishBatchJobStatus` + /// object on success or a `Async.PollError` object on failure. + @discardableResult open func uploadSessionFinishBatchCheck(asyncJobId: String) -> RpcRequest { + let route = Files.uploadSessionFinishBatchCheck + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Upload sessions allow you to upload a single file in one or more requests, for example where the size of the + /// file is greater than 150 MB. This call starts a new upload session with the given data. You can then use + /// uploadSessionAppendV2 to add more data and uploadSessionFinish to save all the data to a file in Dropbox. A + /// single request should not upload more than 150 MB. The maximum size of a file one can upload to an upload + /// session is 350 GB. An upload session can be used for a maximum of 48 hours. Attempting to use an sessionId in + /// UploadSessionStartResult with uploadSessionAppendV2 or uploadSessionFinish more than 48 hours after its creation + /// will return a notFound in UploadSessionLookupError. Calls to this endpoint will count as data transport calls + /// for any Dropbox Business teams with a limit on the number of data transport calls allowed per month. For more + /// information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter close: If true, the current session will be closed, at which point you won't be able to call + /// uploadSessionAppendV2 anymore with the current session. + /// - parameter input: The file to upload, as an Data object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.UploadSessionStartResult` object on + /// success or a `Void` object on failure. + @discardableResult open func uploadSessionStart(close: Bool = false, input: Data) -> UploadRequest { + let route = Files.uploadSessionStart + let serverArgs = Files.UploadSessionStartArg(close: close) + return client.request(route, serverArgs: serverArgs, input: .data(input)) + } + + /// Upload sessions allow you to upload a single file in one or more requests, for example where the size of the + /// file is greater than 150 MB. This call starts a new upload session with the given data. You can then use + /// uploadSessionAppendV2 to add more data and uploadSessionFinish to save all the data to a file in Dropbox. A + /// single request should not upload more than 150 MB. The maximum size of a file one can upload to an upload + /// session is 350 GB. An upload session can be used for a maximum of 48 hours. Attempting to use an sessionId in + /// UploadSessionStartResult with uploadSessionAppendV2 or uploadSessionFinish more than 48 hours after its creation + /// will return a notFound in UploadSessionLookupError. Calls to this endpoint will count as data transport calls + /// for any Dropbox Business teams with a limit on the number of data transport calls allowed per month. For more + /// information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter close: If true, the current session will be closed, at which point you won't be able to call + /// uploadSessionAppendV2 anymore with the current session. + /// - parameter input: The file to upload, as an URL object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.UploadSessionStartResult` object on + /// success or a `Void` object on failure. + @discardableResult open func uploadSessionStart(close: Bool = false, input: URL) -> UploadRequest { + let route = Files.uploadSessionStart + let serverArgs = Files.UploadSessionStartArg(close: close) + return client.request(route, serverArgs: serverArgs, input: .file(input)) + } + + /// Upload sessions allow you to upload a single file in one or more requests, for example where the size of the + /// file is greater than 150 MB. This call starts a new upload session with the given data. You can then use + /// uploadSessionAppendV2 to add more data and uploadSessionFinish to save all the data to a file in Dropbox. A + /// single request should not upload more than 150 MB. The maximum size of a file one can upload to an upload + /// session is 350 GB. An upload session can be used for a maximum of 48 hours. Attempting to use an sessionId in + /// UploadSessionStartResult with uploadSessionAppendV2 or uploadSessionFinish more than 48 hours after its creation + /// will return a notFound in UploadSessionLookupError. Calls to this endpoint will count as data transport calls + /// for any Dropbox Business teams with a limit on the number of data transport calls allowed per month. For more + /// information, see the Data transport limit page + /// https://www.dropbox.com/developers/reference/data-transport-limit. + /// + /// - parameter close: If true, the current session will be closed, at which point you won't be able to call + /// uploadSessionAppendV2 anymore with the current session. + /// - parameter input: The file to upload, as an InputStream object. + /// + /// - returns: Through the response callback, the caller will receive a `Files.UploadSessionStartResult` object on + /// success or a `Void` object on failure. + @discardableResult open func uploadSessionStart(close: Bool = false, input: InputStream) -> UploadRequest { + let route = Files.uploadSessionStart + let serverArgs = Files.UploadSessionStartArg(close: close) + return client.request(route, serverArgs: serverArgs, input: .stream(input)) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Paper.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Paper.swift new file mode 100644 index 0000000..e630ec9 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Paper.swift @@ -0,0 +1,2434 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the paper namespace +open class Paper { + /// The AddMember struct + open class AddMember: CustomStringConvertible { + /// Permission for the user. + public let permissionLevel: Paper.PaperDocPermissionLevel + /// User which should be added to the Paper doc. Specify only email address or Dropbox account ID. + public let member: Sharing.MemberSelector + public init(member: Sharing.MemberSelector, permissionLevel: Paper.PaperDocPermissionLevel = .edit) { + self.permissionLevel = permissionLevel + self.member = member + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddMemberSerializer().serialize(self)))" + } + } + open class AddMemberSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddMember) -> JSON { + let output = [ + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + "permission_level": Paper.PaperDocPermissionLevelSerializer().serialize(value.permissionLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AddMember { + switch json { + case .dictionary(let dict): + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + let permissionLevel = Paper.PaperDocPermissionLevelSerializer().deserialize(dict["permission_level"] ?? Paper.PaperDocPermissionLevelSerializer().serialize(.edit)) + return AddMember(member: member, permissionLevel: permissionLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RefPaperDoc struct + open class RefPaperDoc: CustomStringConvertible { + /// The Paper doc ID. + public let docId: String + public init(docId: String) { + stringValidator()(docId) + self.docId = docId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RefPaperDocSerializer().serialize(self)))" + } + } + open class RefPaperDocSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RefPaperDoc) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RefPaperDoc { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + return RefPaperDoc(docId: docId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AddPaperDocUser struct + open class AddPaperDocUser: Paper.RefPaperDoc { + /// User which should be added to the Paper doc. Specify only email address or Dropbox account ID. + public let members: Array + /// A personal message that will be emailed to each successfully added member. + public let customMessage: String? + /// Clients should set this to true if no email message shall be sent to added users. + public let quiet: Bool + public init(docId: String, members: Array, customMessage: String? = nil, quiet: Bool = false) { + self.members = members + nullableValidator(stringValidator())(customMessage) + self.customMessage = customMessage + self.quiet = quiet + super.init(docId: docId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddPaperDocUserSerializer().serialize(self)))" + } + } + open class AddPaperDocUserSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddPaperDocUser) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "members": ArraySerializer(Paper.AddMemberSerializer()).serialize(value.members), + "custom_message": NullableSerializer(Serialization._StringSerializer).serialize(value.customMessage), + "quiet": Serialization._BoolSerializer.serialize(value.quiet), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AddPaperDocUser { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let members = ArraySerializer(Paper.AddMemberSerializer()).deserialize(dict["members"] ?? .null) + let customMessage = NullableSerializer(Serialization._StringSerializer).deserialize(dict["custom_message"] ?? .null) + let quiet = Serialization._BoolSerializer.deserialize(dict["quiet"] ?? .number(0)) + return AddPaperDocUser(docId: docId, members: members, customMessage: customMessage, quiet: quiet) + default: + fatalError("Type error deserializing") + } + } + } + + /// Per-member result for docsUsersAdd. + open class AddPaperDocUserMemberResult: CustomStringConvertible { + /// One of specified input members. + public let member: Sharing.MemberSelector + /// The outcome of the action on this member. + public let result: Paper.AddPaperDocUserResult + public init(member: Sharing.MemberSelector, result: Paper.AddPaperDocUserResult) { + self.member = member + self.result = result + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddPaperDocUserMemberResultSerializer().serialize(self)))" + } + } + open class AddPaperDocUserMemberResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddPaperDocUserMemberResult) -> JSON { + let output = [ + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + "result": Paper.AddPaperDocUserResultSerializer().serialize(value.result), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AddPaperDocUserMemberResult { + switch json { + case .dictionary(let dict): + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + let result = Paper.AddPaperDocUserResultSerializer().deserialize(dict["result"] ?? .null) + return AddPaperDocUserMemberResult(member: member, result: result) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AddPaperDocUserResult union + public enum AddPaperDocUserResult: CustomStringConvertible { + /// User was successfully added to the Paper doc. + case success + /// Something unexpected happened when trying to add the user to the Paper doc. + case unknownError + /// The Paper doc can be shared only with team members. + case sharingOutsideTeamDisabled + /// The daily limit of how many users can be added to the Paper doc was reached. + case dailyLimitReached + /// Owner's permissions cannot be changed. + case userIsOwner + /// User data could not be retrieved. Clients should retry. + case failedUserDataRetrieval + /// This user already has the correct permission to the Paper doc. + case permissionAlreadyGranted + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddPaperDocUserResultSerializer().serialize(self)))" + } + } + open class AddPaperDocUserResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddPaperDocUserResult) -> JSON { + switch value { + case .success: + var d = [String: JSON]() + d[".tag"] = .str("success") + return .dictionary(d) + case .unknownError: + var d = [String: JSON]() + d[".tag"] = .str("unknown_error") + return .dictionary(d) + case .sharingOutsideTeamDisabled: + var d = [String: JSON]() + d[".tag"] = .str("sharing_outside_team_disabled") + return .dictionary(d) + case .dailyLimitReached: + var d = [String: JSON]() + d[".tag"] = .str("daily_limit_reached") + return .dictionary(d) + case .userIsOwner: + var d = [String: JSON]() + d[".tag"] = .str("user_is_owner") + return .dictionary(d) + case .failedUserDataRetrieval: + var d = [String: JSON]() + d[".tag"] = .str("failed_user_data_retrieval") + return .dictionary(d) + case .permissionAlreadyGranted: + var d = [String: JSON]() + d[".tag"] = .str("permission_already_granted") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AddPaperDocUserResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + return AddPaperDocUserResult.success + case "unknown_error": + return AddPaperDocUserResult.unknownError + case "sharing_outside_team_disabled": + return AddPaperDocUserResult.sharingOutsideTeamDisabled + case "daily_limit_reached": + return AddPaperDocUserResult.dailyLimitReached + case "user_is_owner": + return AddPaperDocUserResult.userIsOwner + case "failed_user_data_retrieval": + return AddPaperDocUserResult.failedUserDataRetrieval + case "permission_already_granted": + return AddPaperDocUserResult.permissionAlreadyGranted + case "other": + return AddPaperDocUserResult.other + default: + return AddPaperDocUserResult.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The Cursor struct + open class Cursor: CustomStringConvertible { + /// The actual cursor value. + public let value: String + /// Expiration time of value. Some cursors might have expiration time assigned. This is a UTC value after which + /// the cursor is no longer valid and the API starts returning an error. If cursor expires a new one needs to be + /// obtained and pagination needs to be restarted. Some cursors might be short-lived some cursors might be + /// long-lived. This really depends on the sorting type and order, e.g.: 1. on one hand, listing docs created by + /// the user, sorted by the created time ascending will have undefinite expiration because the results cannot + /// change while the iteration is happening. This cursor would be suitable for long term polling. 2. on the + /// other hand, listing docs sorted by the last modified time will have a very short expiration as docs do get + /// modified very often and the modified time can be changed while the iteration is happening thus altering the + /// results. + public let expiration: Date? + public init(value: String, expiration: Date? = nil) { + stringValidator()(value) + self.value = value + self.expiration = expiration + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CursorSerializer().serialize(self)))" + } + } + open class CursorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Cursor) -> JSON { + let output = [ + "value": Serialization._StringSerializer.serialize(value.value), + "expiration": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expiration), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> Cursor { + switch json { + case .dictionary(let dict): + let value = Serialization._StringSerializer.deserialize(dict["value"] ?? .null) + let expiration = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expiration"] ?? .null) + return Cursor(value: value, expiration: expiration) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperApiBaseError union + public enum PaperApiBaseError: CustomStringConvertible { + /// Your account does not have permissions to perform this action. + case insufficientPermissions + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperApiBaseErrorSerializer().serialize(self)))" + } + } + open class PaperApiBaseErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperApiBaseError) -> JSON { + switch value { + case .insufficientPermissions: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_permissions") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperApiBaseError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "insufficient_permissions": + return PaperApiBaseError.insufficientPermissions + case "other": + return PaperApiBaseError.other + default: + return PaperApiBaseError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The DocLookupError union + public enum DocLookupError: CustomStringConvertible { + /// Your account does not have permissions to perform this action. + case insufficientPermissions + /// An unspecified error. + case other + /// The required doc was not found. + case docNotFound + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DocLookupErrorSerializer().serialize(self)))" + } + } + open class DocLookupErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DocLookupError) -> JSON { + switch value { + case .insufficientPermissions: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_permissions") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .docNotFound: + var d = [String: JSON]() + d[".tag"] = .str("doc_not_found") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DocLookupError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "insufficient_permissions": + return DocLookupError.insufficientPermissions + case "other": + return DocLookupError.other + case "doc_not_found": + return DocLookupError.docNotFound + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The subscription level of a Paper doc. + public enum DocSubscriptionLevel: CustomStringConvertible { + /// No change email messages unless you're the creator. + case default_ + /// Ignored: Not shown in pad lists or activity and no email message is sent. + case ignore + /// Subscribed: Shown in pad lists and activity and change email messages are sent. + case every + /// Unsubscribed: Shown in pad lists, but not in activity and no change email messages are sent. + case noEmail + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DocSubscriptionLevelSerializer().serialize(self)))" + } + } + open class DocSubscriptionLevelSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DocSubscriptionLevel) -> JSON { + switch value { + case .default_: + var d = [String: JSON]() + d[".tag"] = .str("default") + return .dictionary(d) + case .ignore: + var d = [String: JSON]() + d[".tag"] = .str("ignore") + return .dictionary(d) + case .every: + var d = [String: JSON]() + d[".tag"] = .str("every") + return .dictionary(d) + case .noEmail: + var d = [String: JSON]() + d[".tag"] = .str("no_email") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DocSubscriptionLevel { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "default": + return DocSubscriptionLevel.default_ + case "ignore": + return DocSubscriptionLevel.ignore + case "every": + return DocSubscriptionLevel.every + case "no_email": + return DocSubscriptionLevel.noEmail + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The desired export format of the Paper doc. + public enum ExportFormat: CustomStringConvertible { + /// The HTML export format. + case html + /// The markdown export format. + case markdown + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExportFormatSerializer().serialize(self)))" + } + } + open class ExportFormatSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExportFormat) -> JSON { + switch value { + case .html: + var d = [String: JSON]() + d[".tag"] = .str("html") + return .dictionary(d) + case .markdown: + var d = [String: JSON]() + d[".tag"] = .str("markdown") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ExportFormat { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "html": + return ExportFormat.html + case "markdown": + return ExportFormat.markdown + case "other": + return ExportFormat.other + default: + return ExportFormat.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Data structure representing a Paper folder. + open class Folder: CustomStringConvertible { + /// Paper folder ID. This ID uniquely identifies the folder. + public let id: String + /// Paper folder name. + public let name: String + public init(id: String, name: String) { + stringValidator()(id) + self.id = id + stringValidator()(name) + self.name = name + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderSerializer().serialize(self)))" + } + } + open class FolderSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Folder) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + "name": Serialization._StringSerializer.serialize(value.name), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> Folder { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + return Folder(id: id, name: name) + default: + fatalError("Type error deserializing") + } + } + } + + /// The sharing policy of a Paper folder. Note: The sharing policy of subfolders is inherited from the root folder. + public enum FolderSharingPolicyType: CustomStringConvertible { + /// Everyone in your team and anyone directly invited can access this folder. + case team + /// Only people directly invited can access this folder. + case inviteOnly + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderSharingPolicyTypeSerializer().serialize(self)))" + } + } + open class FolderSharingPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FolderSharingPolicyType) -> JSON { + switch value { + case .team: + var d = [String: JSON]() + d[".tag"] = .str("team") + return .dictionary(d) + case .inviteOnly: + var d = [String: JSON]() + d[".tag"] = .str("invite_only") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FolderSharingPolicyType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team": + return FolderSharingPolicyType.team + case "invite_only": + return FolderSharingPolicyType.inviteOnly + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The subscription level of a Paper folder. + public enum FolderSubscriptionLevel: CustomStringConvertible { + /// Not shown in activity, no email messages. + case none + /// Shown in activity, no email messages. + case activityOnly + /// Shown in activity, daily email messages. + case dailyEmails + /// Shown in activity, weekly email messages. + case weeklyEmails + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderSubscriptionLevelSerializer().serialize(self)))" + } + } + open class FolderSubscriptionLevelSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FolderSubscriptionLevel) -> JSON { + switch value { + case .none: + var d = [String: JSON]() + d[".tag"] = .str("none") + return .dictionary(d) + case .activityOnly: + var d = [String: JSON]() + d[".tag"] = .str("activity_only") + return .dictionary(d) + case .dailyEmails: + var d = [String: JSON]() + d[".tag"] = .str("daily_emails") + return .dictionary(d) + case .weeklyEmails: + var d = [String: JSON]() + d[".tag"] = .str("weekly_emails") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FolderSubscriptionLevel { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "none": + return FolderSubscriptionLevel.none + case "activity_only": + return FolderSubscriptionLevel.activityOnly + case "daily_emails": + return FolderSubscriptionLevel.dailyEmails + case "weekly_emails": + return FolderSubscriptionLevel.weeklyEmails + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Metadata about Paper folders containing the specififed Paper doc. + open class FoldersContainingPaperDoc: CustomStringConvertible { + /// The sharing policy of the folder containing the Paper doc. + public let folderSharingPolicyType: Paper.FolderSharingPolicyType? + /// The folder path. If present the first folder is the root folder. + public let folders: Array? + public init(folderSharingPolicyType: Paper.FolderSharingPolicyType? = nil, folders: Array? = nil) { + self.folderSharingPolicyType = folderSharingPolicyType + self.folders = folders + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FoldersContainingPaperDocSerializer().serialize(self)))" + } + } + open class FoldersContainingPaperDocSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FoldersContainingPaperDoc) -> JSON { + let output = [ + "folder_sharing_policy_type": NullableSerializer(Paper.FolderSharingPolicyTypeSerializer()).serialize(value.folderSharingPolicyType), + "folders": NullableSerializer(ArraySerializer(Paper.FolderSerializer())).serialize(value.folders), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FoldersContainingPaperDoc { + switch json { + case .dictionary(let dict): + let folderSharingPolicyType = NullableSerializer(Paper.FolderSharingPolicyTypeSerializer()).deserialize(dict["folder_sharing_policy_type"] ?? .null) + let folders = NullableSerializer(ArraySerializer(Paper.FolderSerializer())).deserialize(dict["folders"] ?? .null) + return FoldersContainingPaperDoc(folderSharingPolicyType: folderSharingPolicyType, folders: folders) + default: + fatalError("Type error deserializing") + } + } + } + + /// The import format of the incoming data. + public enum ImportFormat: CustomStringConvertible { + /// The provided data is interpreted as standard HTML. + case html + /// The provided data is interpreted as markdown. Note: The first line of the provided document will be used as + /// the doc title. + case markdown + /// The provided data is interpreted as plain text. Note: The first line of the provided document will be used + /// as the doc title. + case plainText + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ImportFormatSerializer().serialize(self)))" + } + } + open class ImportFormatSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ImportFormat) -> JSON { + switch value { + case .html: + var d = [String: JSON]() + d[".tag"] = .str("html") + return .dictionary(d) + case .markdown: + var d = [String: JSON]() + d[".tag"] = .str("markdown") + return .dictionary(d) + case .plainText: + var d = [String: JSON]() + d[".tag"] = .str("plain_text") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ImportFormat { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "html": + return ImportFormat.html + case "markdown": + return ImportFormat.markdown + case "plain_text": + return ImportFormat.plainText + case "other": + return ImportFormat.other + default: + return ImportFormat.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The InviteeInfoWithPermissionLevel struct + open class InviteeInfoWithPermissionLevel: CustomStringConvertible { + /// Email address invited to the Paper doc. + public let invitee: Sharing.InviteeInfo + /// Permission level for the invitee. + public let permissionLevel: Paper.PaperDocPermissionLevel + public init(invitee: Sharing.InviteeInfo, permissionLevel: Paper.PaperDocPermissionLevel) { + self.invitee = invitee + self.permissionLevel = permissionLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(InviteeInfoWithPermissionLevelSerializer().serialize(self)))" + } + } + open class InviteeInfoWithPermissionLevelSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: InviteeInfoWithPermissionLevel) -> JSON { + let output = [ + "invitee": Sharing.InviteeInfoSerializer().serialize(value.invitee), + "permission_level": Paper.PaperDocPermissionLevelSerializer().serialize(value.permissionLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> InviteeInfoWithPermissionLevel { + switch json { + case .dictionary(let dict): + let invitee = Sharing.InviteeInfoSerializer().deserialize(dict["invitee"] ?? .null) + let permissionLevel = Paper.PaperDocPermissionLevelSerializer().deserialize(dict["permission_level"] ?? .null) + return InviteeInfoWithPermissionLevel(invitee: invitee, permissionLevel: permissionLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListDocsCursorError union + public enum ListDocsCursorError: CustomStringConvertible { + /// An unspecified error. + case cursorError(Paper.PaperApiCursorError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListDocsCursorErrorSerializer().serialize(self)))" + } + } + open class ListDocsCursorErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListDocsCursorError) -> JSON { + switch value { + case .cursorError(let arg): + var d = ["cursor_error": Paper.PaperApiCursorErrorSerializer().serialize(arg)] + d[".tag"] = .str("cursor_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListDocsCursorError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "cursor_error": + let v = Paper.PaperApiCursorErrorSerializer().deserialize(d["cursor_error"] ?? .null) + return ListDocsCursorError.cursorError(v) + case "other": + return ListDocsCursorError.other + default: + return ListDocsCursorError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListPaperDocsArgs struct + open class ListPaperDocsArgs: CustomStringConvertible { + /// Allows user to specify how the Paper docs should be filtered. + public let filterBy: Paper.ListPaperDocsFilterBy + /// Allows user to specify how the Paper docs should be sorted. + public let sortBy: Paper.ListPaperDocsSortBy + /// Allows user to specify the sort order of the result. + public let sortOrder: Paper.ListPaperDocsSortOrder + /// Size limit per batch. The maximum number of docs that can be retrieved per batch is 1000. Higher value + /// results in invalid arguments error. + public let limit: Int32 + public init(filterBy: Paper.ListPaperDocsFilterBy = .docsAccessed, sortBy: Paper.ListPaperDocsSortBy = .accessed, sortOrder: Paper.ListPaperDocsSortOrder = .ascending, limit: Int32 = 1000) { + self.filterBy = filterBy + self.sortBy = sortBy + self.sortOrder = sortOrder + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListPaperDocsArgsSerializer().serialize(self)))" + } + } + open class ListPaperDocsArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListPaperDocsArgs) -> JSON { + let output = [ + "filter_by": Paper.ListPaperDocsFilterBySerializer().serialize(value.filterBy), + "sort_by": Paper.ListPaperDocsSortBySerializer().serialize(value.sortBy), + "sort_order": Paper.ListPaperDocsSortOrderSerializer().serialize(value.sortOrder), + "limit": Serialization._Int32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListPaperDocsArgs { + switch json { + case .dictionary(let dict): + let filterBy = Paper.ListPaperDocsFilterBySerializer().deserialize(dict["filter_by"] ?? Paper.ListPaperDocsFilterBySerializer().serialize(.docsAccessed)) + let sortBy = Paper.ListPaperDocsSortBySerializer().deserialize(dict["sort_by"] ?? Paper.ListPaperDocsSortBySerializer().serialize(.accessed)) + let sortOrder = Paper.ListPaperDocsSortOrderSerializer().deserialize(dict["sort_order"] ?? Paper.ListPaperDocsSortOrderSerializer().serialize(.ascending)) + let limit = Serialization._Int32Serializer.deserialize(dict["limit"] ?? .number(1000)) + return ListPaperDocsArgs(filterBy: filterBy, sortBy: sortBy, sortOrder: sortOrder, limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListPaperDocsContinueArgs struct + open class ListPaperDocsContinueArgs: CustomStringConvertible { + /// The cursor obtained from docsList or docsListContinue. Allows for pagination. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListPaperDocsContinueArgsSerializer().serialize(self)))" + } + } + open class ListPaperDocsContinueArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListPaperDocsContinueArgs) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListPaperDocsContinueArgs { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ListPaperDocsContinueArgs(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListPaperDocsFilterBy union + public enum ListPaperDocsFilterBy: CustomStringConvertible { + /// Fetches all Paper doc IDs that the user has ever accessed. + case docsAccessed + /// Fetches only the Paper doc IDs that the user has created. + case docsCreated + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListPaperDocsFilterBySerializer().serialize(self)))" + } + } + open class ListPaperDocsFilterBySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListPaperDocsFilterBy) -> JSON { + switch value { + case .docsAccessed: + var d = [String: JSON]() + d[".tag"] = .str("docs_accessed") + return .dictionary(d) + case .docsCreated: + var d = [String: JSON]() + d[".tag"] = .str("docs_created") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListPaperDocsFilterBy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "docs_accessed": + return ListPaperDocsFilterBy.docsAccessed + case "docs_created": + return ListPaperDocsFilterBy.docsCreated + case "other": + return ListPaperDocsFilterBy.other + default: + return ListPaperDocsFilterBy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListPaperDocsResponse struct + open class ListPaperDocsResponse: CustomStringConvertible { + /// The list of Paper doc IDs that can be used to access the given Paper docs or supplied to other API methods. + /// The list is sorted in the order specified by the initial call to docsList. + public let docIds: Array + /// Pass the cursor into docsListContinue to paginate through all files. The cursor preserves all properties as + /// specified in the original call to docsList. + public let cursor: Paper.Cursor + /// Will be set to True if a subsequent call with the provided cursor to docsListContinue returns immediately + /// with some results. If set to False please allow some delay before making another call to docsListContinue. + public let hasMore: Bool + public init(docIds: Array, cursor: Paper.Cursor, hasMore: Bool) { + arrayValidator(itemValidator: stringValidator())(docIds) + self.docIds = docIds + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListPaperDocsResponseSerializer().serialize(self)))" + } + } + open class ListPaperDocsResponseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListPaperDocsResponse) -> JSON { + let output = [ + "doc_ids": ArraySerializer(Serialization._StringSerializer).serialize(value.docIds), + "cursor": Paper.CursorSerializer().serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListPaperDocsResponse { + switch json { + case .dictionary(let dict): + let docIds = ArraySerializer(Serialization._StringSerializer).deserialize(dict["doc_ids"] ?? .null) + let cursor = Paper.CursorSerializer().deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return ListPaperDocsResponse(docIds: docIds, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListPaperDocsSortBy union + public enum ListPaperDocsSortBy: CustomStringConvertible { + /// Sorts the Paper docs by the time they were last accessed. + case accessed + /// Sorts the Paper docs by the time they were last modified. + case modified + /// Sorts the Paper docs by the creation time. + case created + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListPaperDocsSortBySerializer().serialize(self)))" + } + } + open class ListPaperDocsSortBySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListPaperDocsSortBy) -> JSON { + switch value { + case .accessed: + var d = [String: JSON]() + d[".tag"] = .str("accessed") + return .dictionary(d) + case .modified: + var d = [String: JSON]() + d[".tag"] = .str("modified") + return .dictionary(d) + case .created: + var d = [String: JSON]() + d[".tag"] = .str("created") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListPaperDocsSortBy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "accessed": + return ListPaperDocsSortBy.accessed + case "modified": + return ListPaperDocsSortBy.modified + case "created": + return ListPaperDocsSortBy.created + case "other": + return ListPaperDocsSortBy.other + default: + return ListPaperDocsSortBy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListPaperDocsSortOrder union + public enum ListPaperDocsSortOrder: CustomStringConvertible { + /// Sorts the search result in ascending order. + case ascending + /// Sorts the search result in descending order. + case descending + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListPaperDocsSortOrderSerializer().serialize(self)))" + } + } + open class ListPaperDocsSortOrderSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListPaperDocsSortOrder) -> JSON { + switch value { + case .ascending: + var d = [String: JSON]() + d[".tag"] = .str("ascending") + return .dictionary(d) + case .descending: + var d = [String: JSON]() + d[".tag"] = .str("descending") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListPaperDocsSortOrder { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "ascending": + return ListPaperDocsSortOrder.ascending + case "descending": + return ListPaperDocsSortOrder.descending + case "other": + return ListPaperDocsSortOrder.other + default: + return ListPaperDocsSortOrder.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListUsersCursorError union + public enum ListUsersCursorError: CustomStringConvertible { + /// Your account does not have permissions to perform this action. + case insufficientPermissions + /// An unspecified error. + case other + /// The required doc was not found. + case docNotFound + /// An unspecified error. + case cursorError(Paper.PaperApiCursorError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListUsersCursorErrorSerializer().serialize(self)))" + } + } + open class ListUsersCursorErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListUsersCursorError) -> JSON { + switch value { + case .insufficientPermissions: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_permissions") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .docNotFound: + var d = [String: JSON]() + d[".tag"] = .str("doc_not_found") + return .dictionary(d) + case .cursorError(let arg): + var d = ["cursor_error": Paper.PaperApiCursorErrorSerializer().serialize(arg)] + d[".tag"] = .str("cursor_error") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListUsersCursorError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "insufficient_permissions": + return ListUsersCursorError.insufficientPermissions + case "other": + return ListUsersCursorError.other + case "doc_not_found": + return ListUsersCursorError.docNotFound + case "cursor_error": + let v = Paper.PaperApiCursorErrorSerializer().deserialize(d["cursor_error"] ?? .null) + return ListUsersCursorError.cursorError(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListUsersOnFolderArgs struct + open class ListUsersOnFolderArgs: Paper.RefPaperDoc { + /// Size limit per batch. The maximum number of users that can be retrieved per batch is 1000. Higher value + /// results in invalid arguments error. + public let limit: Int32 + public init(docId: String, limit: Int32 = 1000) { + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + super.init(docId: docId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListUsersOnFolderArgsSerializer().serialize(self)))" + } + } + open class ListUsersOnFolderArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListUsersOnFolderArgs) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "limit": Serialization._Int32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListUsersOnFolderArgs { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let limit = Serialization._Int32Serializer.deserialize(dict["limit"] ?? .number(1000)) + return ListUsersOnFolderArgs(docId: docId, limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListUsersOnFolderContinueArgs struct + open class ListUsersOnFolderContinueArgs: Paper.RefPaperDoc { + /// The cursor obtained from docsFolderUsersList or docsFolderUsersListContinue. Allows for pagination. + public let cursor: String + public init(docId: String, cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + super.init(docId: docId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListUsersOnFolderContinueArgsSerializer().serialize(self)))" + } + } + open class ListUsersOnFolderContinueArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListUsersOnFolderContinueArgs) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListUsersOnFolderContinueArgs { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ListUsersOnFolderContinueArgs(docId: docId, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListUsersOnFolderResponse struct + open class ListUsersOnFolderResponse: CustomStringConvertible { + /// List of email addresses that are invited on the Paper folder. + public let invitees: Array + /// List of users that are invited on the Paper folder. + public let users: Array + /// Pass the cursor into docsFolderUsersListContinue to paginate through all users. The cursor preserves all + /// properties as specified in the original call to docsFolderUsersList. + public let cursor: Paper.Cursor + /// Will be set to True if a subsequent call with the provided cursor to docsFolderUsersListContinue returns + /// immediately with some results. If set to False please allow some delay before making another call to + /// docsFolderUsersListContinue. + public let hasMore: Bool + public init(invitees: Array, users: Array, cursor: Paper.Cursor, hasMore: Bool) { + self.invitees = invitees + self.users = users + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListUsersOnFolderResponseSerializer().serialize(self)))" + } + } + open class ListUsersOnFolderResponseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListUsersOnFolderResponse) -> JSON { + let output = [ + "invitees": ArraySerializer(Sharing.InviteeInfoSerializer()).serialize(value.invitees), + "users": ArraySerializer(Sharing.UserInfoSerializer()).serialize(value.users), + "cursor": Paper.CursorSerializer().serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListUsersOnFolderResponse { + switch json { + case .dictionary(let dict): + let invitees = ArraySerializer(Sharing.InviteeInfoSerializer()).deserialize(dict["invitees"] ?? .null) + let users = ArraySerializer(Sharing.UserInfoSerializer()).deserialize(dict["users"] ?? .null) + let cursor = Paper.CursorSerializer().deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return ListUsersOnFolderResponse(invitees: invitees, users: users, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListUsersOnPaperDocArgs struct + open class ListUsersOnPaperDocArgs: Paper.RefPaperDoc { + /// Size limit per batch. The maximum number of users that can be retrieved per batch is 1000. Higher value + /// results in invalid arguments error. + public let limit: Int32 + /// Specify this attribute if you want to obtain users that have already accessed the Paper doc. + public let filterBy: Paper.UserOnPaperDocFilter + public init(docId: String, limit: Int32 = 1000, filterBy: Paper.UserOnPaperDocFilter = .shared) { + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + self.filterBy = filterBy + super.init(docId: docId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListUsersOnPaperDocArgsSerializer().serialize(self)))" + } + } + open class ListUsersOnPaperDocArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListUsersOnPaperDocArgs) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "limit": Serialization._Int32Serializer.serialize(value.limit), + "filter_by": Paper.UserOnPaperDocFilterSerializer().serialize(value.filterBy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListUsersOnPaperDocArgs { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let limit = Serialization._Int32Serializer.deserialize(dict["limit"] ?? .number(1000)) + let filterBy = Paper.UserOnPaperDocFilterSerializer().deserialize(dict["filter_by"] ?? Paper.UserOnPaperDocFilterSerializer().serialize(.shared)) + return ListUsersOnPaperDocArgs(docId: docId, limit: limit, filterBy: filterBy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListUsersOnPaperDocContinueArgs struct + open class ListUsersOnPaperDocContinueArgs: Paper.RefPaperDoc { + /// The cursor obtained from docsUsersList or docsUsersListContinue. Allows for pagination. + public let cursor: String + public init(docId: String, cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + super.init(docId: docId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListUsersOnPaperDocContinueArgsSerializer().serialize(self)))" + } + } + open class ListUsersOnPaperDocContinueArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListUsersOnPaperDocContinueArgs) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListUsersOnPaperDocContinueArgs { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ListUsersOnPaperDocContinueArgs(docId: docId, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListUsersOnPaperDocResponse struct + open class ListUsersOnPaperDocResponse: CustomStringConvertible { + /// List of email addresses with their respective permission levels that are invited on the Paper doc. + public let invitees: Array + /// List of users with their respective permission levels that are invited on the Paper folder. + public let users: Array + /// The Paper doc owner. This field is populated on every single response. + public let docOwner: Sharing.UserInfo + /// Pass the cursor into docsUsersListContinue to paginate through all users. The cursor preserves all + /// properties as specified in the original call to docsUsersList. + public let cursor: Paper.Cursor + /// Will be set to True if a subsequent call with the provided cursor to docsUsersListContinue returns + /// immediately with some results. If set to False please allow some delay before making another call to + /// docsUsersListContinue. + public let hasMore: Bool + public init(invitees: Array, users: Array, docOwner: Sharing.UserInfo, cursor: Paper.Cursor, hasMore: Bool) { + self.invitees = invitees + self.users = users + self.docOwner = docOwner + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListUsersOnPaperDocResponseSerializer().serialize(self)))" + } + } + open class ListUsersOnPaperDocResponseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListUsersOnPaperDocResponse) -> JSON { + let output = [ + "invitees": ArraySerializer(Paper.InviteeInfoWithPermissionLevelSerializer()).serialize(value.invitees), + "users": ArraySerializer(Paper.UserInfoWithPermissionLevelSerializer()).serialize(value.users), + "doc_owner": Sharing.UserInfoSerializer().serialize(value.docOwner), + "cursor": Paper.CursorSerializer().serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListUsersOnPaperDocResponse { + switch json { + case .dictionary(let dict): + let invitees = ArraySerializer(Paper.InviteeInfoWithPermissionLevelSerializer()).deserialize(dict["invitees"] ?? .null) + let users = ArraySerializer(Paper.UserInfoWithPermissionLevelSerializer()).deserialize(dict["users"] ?? .null) + let docOwner = Sharing.UserInfoSerializer().deserialize(dict["doc_owner"] ?? .null) + let cursor = Paper.CursorSerializer().deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return ListUsersOnPaperDocResponse(invitees: invitees, users: users, docOwner: docOwner, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperApiCursorError union + public enum PaperApiCursorError: CustomStringConvertible { + /// The provided cursor is expired. + case expiredCursor + /// The provided cursor is invalid. + case invalidCursor + /// The provided cursor contains invalid user. + case wrongUserInCursor + /// Indicates that the cursor has been invalidated. Call the corresponding non-continue endpoint to obtain a new + /// cursor. + case reset + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperApiCursorErrorSerializer().serialize(self)))" + } + } + open class PaperApiCursorErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperApiCursorError) -> JSON { + switch value { + case .expiredCursor: + var d = [String: JSON]() + d[".tag"] = .str("expired_cursor") + return .dictionary(d) + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .wrongUserInCursor: + var d = [String: JSON]() + d[".tag"] = .str("wrong_user_in_cursor") + return .dictionary(d) + case .reset: + var d = [String: JSON]() + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperApiCursorError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "expired_cursor": + return PaperApiCursorError.expiredCursor + case "invalid_cursor": + return PaperApiCursorError.invalidCursor + case "wrong_user_in_cursor": + return PaperApiCursorError.wrongUserInCursor + case "reset": + return PaperApiCursorError.reset + case "other": + return PaperApiCursorError.other + default: + return PaperApiCursorError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PaperDocCreateArgs struct + open class PaperDocCreateArgs: CustomStringConvertible { + /// The Paper folder ID where the Paper document should be created. The API user has to have write access to + /// this folder or error is thrown. + public let parentFolderId: String? + /// The format of provided data. + public let importFormat: Paper.ImportFormat + public init(importFormat: Paper.ImportFormat, parentFolderId: String? = nil) { + nullableValidator(stringValidator())(parentFolderId) + self.parentFolderId = parentFolderId + self.importFormat = importFormat + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocCreateArgsSerializer().serialize(self)))" + } + } + open class PaperDocCreateArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocCreateArgs) -> JSON { + let output = [ + "import_format": Paper.ImportFormatSerializer().serialize(value.importFormat), + "parent_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentFolderId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocCreateArgs { + switch json { + case .dictionary(let dict): + let importFormat = Paper.ImportFormatSerializer().deserialize(dict["import_format"] ?? .null) + let parentFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_folder_id"] ?? .null) + return PaperDocCreateArgs(importFormat: importFormat, parentFolderId: parentFolderId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocCreateError union + public enum PaperDocCreateError: CustomStringConvertible { + /// Your account does not have permissions to perform this action. + case insufficientPermissions + /// An unspecified error. + case other + /// The provided content was malformed and cannot be imported to Paper. + case contentMalformed + /// The specified Paper folder is cannot be found. + case folderNotFound + /// The newly created Paper doc would be too large. Please split the content into multiple docs. + case docLengthExceeded + /// The imported document contains an image that is too large. The current limit is 1MB. Note: This only applies + /// to HTML with data uri. + case imageSizeExceeded + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocCreateErrorSerializer().serialize(self)))" + } + } + open class PaperDocCreateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocCreateError) -> JSON { + switch value { + case .insufficientPermissions: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_permissions") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .contentMalformed: + var d = [String: JSON]() + d[".tag"] = .str("content_malformed") + return .dictionary(d) + case .folderNotFound: + var d = [String: JSON]() + d[".tag"] = .str("folder_not_found") + return .dictionary(d) + case .docLengthExceeded: + var d = [String: JSON]() + d[".tag"] = .str("doc_length_exceeded") + return .dictionary(d) + case .imageSizeExceeded: + var d = [String: JSON]() + d[".tag"] = .str("image_size_exceeded") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperDocCreateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "insufficient_permissions": + return PaperDocCreateError.insufficientPermissions + case "other": + return PaperDocCreateError.other + case "content_malformed": + return PaperDocCreateError.contentMalformed + case "folder_not_found": + return PaperDocCreateError.folderNotFound + case "doc_length_exceeded": + return PaperDocCreateError.docLengthExceeded + case "image_size_exceeded": + return PaperDocCreateError.imageSizeExceeded + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PaperDocCreateUpdateResult struct + open class PaperDocCreateUpdateResult: CustomStringConvertible { + /// Doc ID of the newly created doc. + public let docId: String + /// The Paper doc revision. Simply an ever increasing number. + public let revision: Int64 + /// The Paper doc title. + public let title: String + public init(docId: String, revision: Int64, title: String) { + stringValidator()(docId) + self.docId = docId + comparableValidator()(revision) + self.revision = revision + stringValidator()(title) + self.title = title + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocCreateUpdateResultSerializer().serialize(self)))" + } + } + open class PaperDocCreateUpdateResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocCreateUpdateResult) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "revision": Serialization._Int64Serializer.serialize(value.revision), + "title": Serialization._StringSerializer.serialize(value.title), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocCreateUpdateResult { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let revision = Serialization._Int64Serializer.deserialize(dict["revision"] ?? .null) + let title = Serialization._StringSerializer.deserialize(dict["title"] ?? .null) + return PaperDocCreateUpdateResult(docId: docId, revision: revision, title: title) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocExport struct + open class PaperDocExport: Paper.RefPaperDoc { + /// (no description) + public let exportFormat: Paper.ExportFormat + public init(docId: String, exportFormat: Paper.ExportFormat) { + self.exportFormat = exportFormat + super.init(docId: docId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocExportSerializer().serialize(self)))" + } + } + open class PaperDocExportSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocExport) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "export_format": Paper.ExportFormatSerializer().serialize(value.exportFormat), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocExport { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let exportFormat = Paper.ExportFormatSerializer().deserialize(dict["export_format"] ?? .null) + return PaperDocExport(docId: docId, exportFormat: exportFormat) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocExportResult struct + open class PaperDocExportResult: CustomStringConvertible { + /// The Paper doc owner's email address. + public let owner: String + /// The Paper doc title. + public let title: String + /// The Paper doc revision. Simply an ever increasing number. + public let revision: Int64 + /// MIME type of the export. This corresponds to ExportFormat specified in the request. + public let mimeType: String + public init(owner: String, title: String, revision: Int64, mimeType: String) { + stringValidator()(owner) + self.owner = owner + stringValidator()(title) + self.title = title + comparableValidator()(revision) + self.revision = revision + stringValidator()(mimeType) + self.mimeType = mimeType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocExportResultSerializer().serialize(self)))" + } + } + open class PaperDocExportResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocExportResult) -> JSON { + let output = [ + "owner": Serialization._StringSerializer.serialize(value.owner), + "title": Serialization._StringSerializer.serialize(value.title), + "revision": Serialization._Int64Serializer.serialize(value.revision), + "mime_type": Serialization._StringSerializer.serialize(value.mimeType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocExportResult { + switch json { + case .dictionary(let dict): + let owner = Serialization._StringSerializer.deserialize(dict["owner"] ?? .null) + let title = Serialization._StringSerializer.deserialize(dict["title"] ?? .null) + let revision = Serialization._Int64Serializer.deserialize(dict["revision"] ?? .null) + let mimeType = Serialization._StringSerializer.deserialize(dict["mime_type"] ?? .null) + return PaperDocExportResult(owner: owner, title: title, revision: revision, mimeType: mimeType) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocPermissionLevel union + public enum PaperDocPermissionLevel: CustomStringConvertible { + /// User will be granted edit permissions. + case edit + /// User will be granted view and comment permissions. + case viewAndComment + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocPermissionLevelSerializer().serialize(self)))" + } + } + open class PaperDocPermissionLevelSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocPermissionLevel) -> JSON { + switch value { + case .edit: + var d = [String: JSON]() + d[".tag"] = .str("edit") + return .dictionary(d) + case .viewAndComment: + var d = [String: JSON]() + d[".tag"] = .str("view_and_comment") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperDocPermissionLevel { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "edit": + return PaperDocPermissionLevel.edit + case "view_and_comment": + return PaperDocPermissionLevel.viewAndComment + case "other": + return PaperDocPermissionLevel.other + default: + return PaperDocPermissionLevel.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PaperDocSharingPolicy struct + open class PaperDocSharingPolicy: Paper.RefPaperDoc { + /// The default sharing policy to be set for the Paper doc. + public let sharingPolicy: Paper.SharingPolicy + public init(docId: String, sharingPolicy: Paper.SharingPolicy) { + self.sharingPolicy = sharingPolicy + super.init(docId: docId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocSharingPolicySerializer().serialize(self)))" + } + } + open class PaperDocSharingPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocSharingPolicy) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "sharing_policy": Paper.SharingPolicySerializer().serialize(value.sharingPolicy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocSharingPolicy { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let sharingPolicy = Paper.SharingPolicySerializer().deserialize(dict["sharing_policy"] ?? .null) + return PaperDocSharingPolicy(docId: docId, sharingPolicy: sharingPolicy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocUpdateArgs struct + open class PaperDocUpdateArgs: Paper.RefPaperDoc { + /// The policy used for the current update call. + public let docUpdatePolicy: Paper.PaperDocUpdatePolicy + /// The latest doc revision. This value must match the head revision or an error code will be returned. This is + /// to prevent colliding writes. + public let revision: Int64 + /// The format of provided data. + public let importFormat: Paper.ImportFormat + public init(docId: String, docUpdatePolicy: Paper.PaperDocUpdatePolicy, revision: Int64, importFormat: Paper.ImportFormat) { + self.docUpdatePolicy = docUpdatePolicy + comparableValidator()(revision) + self.revision = revision + self.importFormat = importFormat + super.init(docId: docId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocUpdateArgsSerializer().serialize(self)))" + } + } + open class PaperDocUpdateArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocUpdateArgs) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "doc_update_policy": Paper.PaperDocUpdatePolicySerializer().serialize(value.docUpdatePolicy), + "revision": Serialization._Int64Serializer.serialize(value.revision), + "import_format": Paper.ImportFormatSerializer().serialize(value.importFormat), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocUpdateArgs { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let docUpdatePolicy = Paper.PaperDocUpdatePolicySerializer().deserialize(dict["doc_update_policy"] ?? .null) + let revision = Serialization._Int64Serializer.deserialize(dict["revision"] ?? .null) + let importFormat = Paper.ImportFormatSerializer().deserialize(dict["import_format"] ?? .null) + return PaperDocUpdateArgs(docId: docId, docUpdatePolicy: docUpdatePolicy, revision: revision, importFormat: importFormat) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocUpdateError union + public enum PaperDocUpdateError: CustomStringConvertible { + /// Your account does not have permissions to perform this action. + case insufficientPermissions + /// An unspecified error. + case other + /// The required doc was not found. + case docNotFound + /// The provided content was malformed and cannot be imported to Paper. + case contentMalformed + /// The provided revision does not match the document head. + case revisionMismatch + /// The newly created Paper doc would be too large, split the content into multiple docs. + case docLengthExceeded + /// The imported document contains an image that is too large. The current limit is 1MB. Note: This only applies + /// to HTML with data uri. + case imageSizeExceeded + /// This operation is not allowed on archived Paper docs. + case docArchived + /// This operation is not allowed on deleted Paper docs. + case docDeleted + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocUpdateErrorSerializer().serialize(self)))" + } + } + open class PaperDocUpdateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocUpdateError) -> JSON { + switch value { + case .insufficientPermissions: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_permissions") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .docNotFound: + var d = [String: JSON]() + d[".tag"] = .str("doc_not_found") + return .dictionary(d) + case .contentMalformed: + var d = [String: JSON]() + d[".tag"] = .str("content_malformed") + return .dictionary(d) + case .revisionMismatch: + var d = [String: JSON]() + d[".tag"] = .str("revision_mismatch") + return .dictionary(d) + case .docLengthExceeded: + var d = [String: JSON]() + d[".tag"] = .str("doc_length_exceeded") + return .dictionary(d) + case .imageSizeExceeded: + var d = [String: JSON]() + d[".tag"] = .str("image_size_exceeded") + return .dictionary(d) + case .docArchived: + var d = [String: JSON]() + d[".tag"] = .str("doc_archived") + return .dictionary(d) + case .docDeleted: + var d = [String: JSON]() + d[".tag"] = .str("doc_deleted") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperDocUpdateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "insufficient_permissions": + return PaperDocUpdateError.insufficientPermissions + case "other": + return PaperDocUpdateError.other + case "doc_not_found": + return PaperDocUpdateError.docNotFound + case "content_malformed": + return PaperDocUpdateError.contentMalformed + case "revision_mismatch": + return PaperDocUpdateError.revisionMismatch + case "doc_length_exceeded": + return PaperDocUpdateError.docLengthExceeded + case "image_size_exceeded": + return PaperDocUpdateError.imageSizeExceeded + case "doc_archived": + return PaperDocUpdateError.docArchived + case "doc_deleted": + return PaperDocUpdateError.docDeleted + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PaperDocUpdatePolicy union + public enum PaperDocUpdatePolicy: CustomStringConvertible { + /// The content will be appended to the doc. + case append + /// The content will be prepended to the doc. Note: the doc title will not be affected. + case prepend + /// The document will be overwitten at the head with the provided content. + case overwriteAll + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocUpdatePolicySerializer().serialize(self)))" + } + } + open class PaperDocUpdatePolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocUpdatePolicy) -> JSON { + switch value { + case .append: + var d = [String: JSON]() + d[".tag"] = .str("append") + return .dictionary(d) + case .prepend: + var d = [String: JSON]() + d[".tag"] = .str("prepend") + return .dictionary(d) + case .overwriteAll: + var d = [String: JSON]() + d[".tag"] = .str("overwrite_all") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperDocUpdatePolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "append": + return PaperDocUpdatePolicy.append + case "prepend": + return PaperDocUpdatePolicy.prepend + case "overwrite_all": + return PaperDocUpdatePolicy.overwriteAll + case "other": + return PaperDocUpdatePolicy.other + default: + return PaperDocUpdatePolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RemovePaperDocUser struct + open class RemovePaperDocUser: Paper.RefPaperDoc { + /// User which should be removed from the Paper doc. Specify only email address or Dropbox account ID. + public let member: Sharing.MemberSelector + public init(docId: String, member: Sharing.MemberSelector) { + self.member = member + super.init(docId: docId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemovePaperDocUserSerializer().serialize(self)))" + } + } + open class RemovePaperDocUserSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemovePaperDocUser) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RemovePaperDocUser { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + return RemovePaperDocUser(docId: docId, member: member) + default: + fatalError("Type error deserializing") + } + } + } + + /// Sharing policy of Paper doc. + open class SharingPolicy: CustomStringConvertible { + /// This value applies to the non-team members. + public let publicSharingPolicy: Paper.SharingPublicPolicyType? + /// This value applies to the team members only. The value is null for all personal accounts. + public let teamSharingPolicy: Paper.SharingTeamPolicyType? + public init(publicSharingPolicy: Paper.SharingPublicPolicyType? = nil, teamSharingPolicy: Paper.SharingTeamPolicyType? = nil) { + self.publicSharingPolicy = publicSharingPolicy + self.teamSharingPolicy = teamSharingPolicy + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingPolicySerializer().serialize(self)))" + } + } + open class SharingPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingPolicy) -> JSON { + let output = [ + "public_sharing_policy": NullableSerializer(Paper.SharingPublicPolicyTypeSerializer()).serialize(value.publicSharingPolicy), + "team_sharing_policy": NullableSerializer(Paper.SharingTeamPolicyTypeSerializer()).serialize(value.teamSharingPolicy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharingPolicy { + switch json { + case .dictionary(let dict): + let publicSharingPolicy = NullableSerializer(Paper.SharingPublicPolicyTypeSerializer()).deserialize(dict["public_sharing_policy"] ?? .null) + let teamSharingPolicy = NullableSerializer(Paper.SharingTeamPolicyTypeSerializer()).deserialize(dict["team_sharing_policy"] ?? .null) + return SharingPolicy(publicSharingPolicy: publicSharingPolicy, teamSharingPolicy: teamSharingPolicy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The sharing policy type of the Paper doc. + public enum SharingTeamPolicyType: CustomStringConvertible { + /// Users who have a link to this doc can edit it. + case peopleWithLinkCanEdit + /// Users who have a link to this doc can view and comment on it. + case peopleWithLinkCanViewAndComment + /// Users must be explicitly invited to this doc. + case inviteOnly + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingTeamPolicyTypeSerializer().serialize(self)))" + } + } + open class SharingTeamPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingTeamPolicyType) -> JSON { + switch value { + case .peopleWithLinkCanEdit: + var d = [String: JSON]() + d[".tag"] = .str("people_with_link_can_edit") + return .dictionary(d) + case .peopleWithLinkCanViewAndComment: + var d = [String: JSON]() + d[".tag"] = .str("people_with_link_can_view_and_comment") + return .dictionary(d) + case .inviteOnly: + var d = [String: JSON]() + d[".tag"] = .str("invite_only") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharingTeamPolicyType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "people_with_link_can_edit": + return SharingTeamPolicyType.peopleWithLinkCanEdit + case "people_with_link_can_view_and_comment": + return SharingTeamPolicyType.peopleWithLinkCanViewAndComment + case "invite_only": + return SharingTeamPolicyType.inviteOnly + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SharingPublicPolicyType union + public enum SharingPublicPolicyType: CustomStringConvertible { + /// Users who have a link to this doc can edit it. + case peopleWithLinkCanEdit + /// Users who have a link to this doc can view and comment on it. + case peopleWithLinkCanViewAndComment + /// Users must be explicitly invited to this doc. + case inviteOnly + /// Value used to indicate that doc sharing is enabled only within team. + case disabled + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingPublicPolicyTypeSerializer().serialize(self)))" + } + } + open class SharingPublicPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingPublicPolicyType) -> JSON { + switch value { + case .peopleWithLinkCanEdit: + var d = [String: JSON]() + d[".tag"] = .str("people_with_link_can_edit") + return .dictionary(d) + case .peopleWithLinkCanViewAndComment: + var d = [String: JSON]() + d[".tag"] = .str("people_with_link_can_view_and_comment") + return .dictionary(d) + case .inviteOnly: + var d = [String: JSON]() + d[".tag"] = .str("invite_only") + return .dictionary(d) + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharingPublicPolicyType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "people_with_link_can_edit": + return SharingPublicPolicyType.peopleWithLinkCanEdit + case "people_with_link_can_view_and_comment": + return SharingPublicPolicyType.peopleWithLinkCanViewAndComment + case "invite_only": + return SharingPublicPolicyType.inviteOnly + case "disabled": + return SharingPublicPolicyType.disabled + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UserInfoWithPermissionLevel struct + open class UserInfoWithPermissionLevel: CustomStringConvertible { + /// User shared on the Paper doc. + public let user: Sharing.UserInfo + /// Permission level for the user. + public let permissionLevel: Paper.PaperDocPermissionLevel + public init(user: Sharing.UserInfo, permissionLevel: Paper.PaperDocPermissionLevel) { + self.user = user + self.permissionLevel = permissionLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserInfoWithPermissionLevelSerializer().serialize(self)))" + } + } + open class UserInfoWithPermissionLevelSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserInfoWithPermissionLevel) -> JSON { + let output = [ + "user": Sharing.UserInfoSerializer().serialize(value.user), + "permission_level": Paper.PaperDocPermissionLevelSerializer().serialize(value.permissionLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserInfoWithPermissionLevel { + switch json { + case .dictionary(let dict): + let user = Sharing.UserInfoSerializer().deserialize(dict["user"] ?? .null) + let permissionLevel = Paper.PaperDocPermissionLevelSerializer().deserialize(dict["permission_level"] ?? .null) + return UserInfoWithPermissionLevel(user: user, permissionLevel: permissionLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UserOnPaperDocFilter union + public enum UserOnPaperDocFilter: CustomStringConvertible { + /// all users who have visited the Paper doc. + case visited + /// All uses who are shared on the Paper doc. This includes all users who have visited the Paper doc as well as + /// those who have not. + case shared + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserOnPaperDocFilterSerializer().serialize(self)))" + } + } + open class UserOnPaperDocFilterSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserOnPaperDocFilter) -> JSON { + switch value { + case .visited: + var d = [String: JSON]() + d[".tag"] = .str("visited") + return .dictionary(d) + case .shared: + var d = [String: JSON]() + d[".tag"] = .str("shared") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UserOnPaperDocFilter { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "visited": + return UserOnPaperDocFilter.visited + case "shared": + return UserOnPaperDocFilter.shared + case "other": + return UserOnPaperDocFilter.other + default: + return UserOnPaperDocFilter.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + + /// Stone Route Objects + + static let docsArchive = Route( + name: "docs/archive", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.RefPaperDocSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsCreate = Route( + name: "docs/create", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.PaperDocCreateArgsSerializer(), + responseSerializer: Paper.PaperDocCreateUpdateResultSerializer(), + errorSerializer: Paper.PaperDocCreateErrorSerializer(), + attrs: ["host": "api", + "style": "upload"] + ) + static let docsDownload = Route( + name: "docs/download", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.PaperDocExportSerializer(), + responseSerializer: Paper.PaperDocExportResultSerializer(), + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "download"] + ) + static let docsFolderUsersList = Route( + name: "docs/folder_users/list", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.ListUsersOnFolderArgsSerializer(), + responseSerializer: Paper.ListUsersOnFolderResponseSerializer(), + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsFolderUsersListContinue = Route( + name: "docs/folder_users/list/continue", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.ListUsersOnFolderContinueArgsSerializer(), + responseSerializer: Paper.ListUsersOnFolderResponseSerializer(), + errorSerializer: Paper.ListUsersCursorErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsGetFolderInfo = Route( + name: "docs/get_folder_info", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.RefPaperDocSerializer(), + responseSerializer: Paper.FoldersContainingPaperDocSerializer(), + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsList = Route( + name: "docs/list", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.ListPaperDocsArgsSerializer(), + responseSerializer: Paper.ListPaperDocsResponseSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsListContinue = Route( + name: "docs/list/continue", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.ListPaperDocsContinueArgsSerializer(), + responseSerializer: Paper.ListPaperDocsResponseSerializer(), + errorSerializer: Paper.ListDocsCursorErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsPermanentlyDelete = Route( + name: "docs/permanently_delete", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.RefPaperDocSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsSharingPolicyGet = Route( + name: "docs/sharing_policy/get", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.RefPaperDocSerializer(), + responseSerializer: Paper.SharingPolicySerializer(), + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsSharingPolicySet = Route( + name: "docs/sharing_policy/set", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.PaperDocSharingPolicySerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsUpdate = Route( + name: "docs/update", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.PaperDocUpdateArgsSerializer(), + responseSerializer: Paper.PaperDocCreateUpdateResultSerializer(), + errorSerializer: Paper.PaperDocUpdateErrorSerializer(), + attrs: ["host": "api", + "style": "upload"] + ) + static let docsUsersAdd = Route( + name: "docs/users/add", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.AddPaperDocUserSerializer(), + responseSerializer: ArraySerializer(Paper.AddPaperDocUserMemberResultSerializer()), + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsUsersList = Route( + name: "docs/users/list", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.ListUsersOnPaperDocArgsSerializer(), + responseSerializer: Paper.ListUsersOnPaperDocResponseSerializer(), + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsUsersListContinue = Route( + name: "docs/users/list/continue", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.ListUsersOnPaperDocContinueArgsSerializer(), + responseSerializer: Paper.ListUsersOnPaperDocResponseSerializer(), + errorSerializer: Paper.ListUsersCursorErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let docsUsersRemove = Route( + name: "docs/users/remove", + version: 1, + namespace: "paper", + deprecated: false, + argSerializer: Paper.RemovePaperDocUserSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Paper.DocLookupErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/PaperRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/PaperRoutes.swift new file mode 100644 index 0000000..914848d --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/PaperRoutes.swift @@ -0,0 +1,318 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the paper namespace +open class PaperRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// Marks the given Paper doc as archived. Note: This action can be performed or undone by anyone with edit + /// permissions to the doc. + /// + /// - parameter docId: The Paper doc ID. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Paper.DocLookupError` object on failure. + @discardableResult open func docsArchive(docId: String) -> RpcRequest { + let route = Paper.docsArchive + let serverArgs = Paper.RefPaperDoc(docId: docId) + return client.request(route, serverArgs: serverArgs) + } + + /// Creates a new Paper doc with the provided content. + /// + /// - parameter parentFolderId: The Paper folder ID where the Paper document should be created. The API user has to + /// have write access to this folder or error is thrown. + /// - parameter importFormat: The format of provided data. + /// - parameter input: The file to upload, as an Data object. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.PaperDocCreateUpdateResult` object + /// on success or a `Paper.PaperDocCreateError` object on failure. + @discardableResult open func docsCreate(importFormat: Paper.ImportFormat, parentFolderId: String? = nil, input: Data) -> UploadRequest { + let route = Paper.docsCreate + let serverArgs = Paper.PaperDocCreateArgs(importFormat: importFormat, parentFolderId: parentFolderId) + return client.request(route, serverArgs: serverArgs, input: .data(input)) + } + + /// Creates a new Paper doc with the provided content. + /// + /// - parameter parentFolderId: The Paper folder ID where the Paper document should be created. The API user has to + /// have write access to this folder or error is thrown. + /// - parameter importFormat: The format of provided data. + /// - parameter input: The file to upload, as an URL object. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.PaperDocCreateUpdateResult` object + /// on success or a `Paper.PaperDocCreateError` object on failure. + @discardableResult open func docsCreate(importFormat: Paper.ImportFormat, parentFolderId: String? = nil, input: URL) -> UploadRequest { + let route = Paper.docsCreate + let serverArgs = Paper.PaperDocCreateArgs(importFormat: importFormat, parentFolderId: parentFolderId) + return client.request(route, serverArgs: serverArgs, input: .file(input)) + } + + /// Creates a new Paper doc with the provided content. + /// + /// - parameter parentFolderId: The Paper folder ID where the Paper document should be created. The API user has to + /// have write access to this folder or error is thrown. + /// - parameter importFormat: The format of provided data. + /// - parameter input: The file to upload, as an InputStream object. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.PaperDocCreateUpdateResult` object + /// on success or a `Paper.PaperDocCreateError` object on failure. + @discardableResult open func docsCreate(importFormat: Paper.ImportFormat, parentFolderId: String? = nil, input: InputStream) -> UploadRequest { + let route = Paper.docsCreate + let serverArgs = Paper.PaperDocCreateArgs(importFormat: importFormat, parentFolderId: parentFolderId) + return client.request(route, serverArgs: serverArgs, input: .stream(input)) + } + + /// Exports and downloads Paper doc either as HTML or markdown. + /// + /// - parameter overwrite: A boolean to set behavior in the event of a naming conflict. `True` will overwrite + /// conflicting file at destination. `False` will take no action (but if left unhandled in destination closure, an + /// NSError will be thrown). + /// - parameter destination: A closure used to compute the destination, given the temporary file location and the + /// response. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.PaperDocExportResult` object on + /// success or a `Paper.DocLookupError` object on failure. + @discardableResult open func docsDownload(docId: String, exportFormat: Paper.ExportFormat, overwrite: Bool = false, destination: @escaping (URL, HTTPURLResponse) -> URL) -> DownloadRequestFile { + let route = Paper.docsDownload + let serverArgs = Paper.PaperDocExport(docId: docId, exportFormat: exportFormat) + return client.request(route, serverArgs: serverArgs, overwrite: overwrite, destination: destination) + } + + /// Exports and downloads Paper doc either as HTML or markdown. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Paper.PaperDocExportResult` object on + /// success or a `Paper.DocLookupError` object on failure. + @discardableResult open func docsDownload(docId: String, exportFormat: Paper.ExportFormat) -> DownloadRequestMemory { + let route = Paper.docsDownload + let serverArgs = Paper.PaperDocExport(docId: docId, exportFormat: exportFormat) + return client.request(route, serverArgs: serverArgs) + } + + /// Lists the users who are explicitly invited to the Paper folder in which the Paper doc is contained. For private + /// folders all users (including owner) shared on the folder are listed and for team folders all non-team users + /// shared on the folder are returned. + /// + /// - parameter limit: Size limit per batch. The maximum number of users that can be retrieved per batch is 1000. + /// Higher value results in invalid arguments error. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.ListUsersOnFolderResponse` object on + /// success or a `Paper.DocLookupError` object on failure. + @discardableResult open func docsFolderUsersList(docId: String, limit: Int32 = 1000) -> RpcRequest { + let route = Paper.docsFolderUsersList + let serverArgs = Paper.ListUsersOnFolderArgs(docId: docId, limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from docsFolderUsersList, use this to paginate through all users on the Paper + /// folder. + /// + /// - parameter cursor: The cursor obtained from docsFolderUsersList or docsFolderUsersListContinue. Allows for + /// pagination. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.ListUsersOnFolderResponse` object on + /// success or a `Paper.ListUsersCursorError` object on failure. + @discardableResult open func docsFolderUsersListContinue(docId: String, cursor: String) -> RpcRequest { + let route = Paper.docsFolderUsersListContinue + let serverArgs = Paper.ListUsersOnFolderContinueArgs(docId: docId, cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Retrieves folder information for the given Paper doc. This includes: - folder sharing policy; permissions for + /// subfolders are set by the top-level folder. - full 'filepath', i.e. the list of folders (both folderId and + /// folderName) from the root folder to the folder directly containing the Paper doc. Note: If the Paper doc is + /// not in any folder (aka unfiled) the response will be empty. + /// + /// - parameter docId: The Paper doc ID. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.FoldersContainingPaperDoc` object on + /// success or a `Paper.DocLookupError` object on failure. + @discardableResult open func docsGetFolderInfo(docId: String) -> RpcRequest { + let route = Paper.docsGetFolderInfo + let serverArgs = Paper.RefPaperDoc(docId: docId) + return client.request(route, serverArgs: serverArgs) + } + + /// Return the list of all Paper docs according to the argument specifications. To iterate over through the full + /// pagination, pass the cursor to docsListContinue. + /// + /// - parameter filterBy: Allows user to specify how the Paper docs should be filtered. + /// - parameter sortBy: Allows user to specify how the Paper docs should be sorted. + /// - parameter sortOrder: Allows user to specify the sort order of the result. + /// - parameter limit: Size limit per batch. The maximum number of docs that can be retrieved per batch is 1000. + /// Higher value results in invalid arguments error. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.ListPaperDocsResponse` object on + /// success or a `Void` object on failure. + @discardableResult open func docsList(filterBy: Paper.ListPaperDocsFilterBy = .docsAccessed, sortBy: Paper.ListPaperDocsSortBy = .accessed, sortOrder: Paper.ListPaperDocsSortOrder = .ascending, limit: Int32 = 1000) -> RpcRequest { + let route = Paper.docsList + let serverArgs = Paper.ListPaperDocsArgs(filterBy: filterBy, sortBy: sortBy, sortOrder: sortOrder, limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from docsList, use this to paginate through all Paper doc. + /// + /// - parameter cursor: The cursor obtained from docsList or docsListContinue. Allows for pagination. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.ListPaperDocsResponse` object on + /// success or a `Paper.ListDocsCursorError` object on failure. + @discardableResult open func docsListContinue(cursor: String) -> RpcRequest { + let route = Paper.docsListContinue + let serverArgs = Paper.ListPaperDocsContinueArgs(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Permanently deletes the given Paper doc. This operation is final as the doc cannot be recovered. Note: This + /// action can be performed only by the doc owner. + /// + /// - parameter docId: The Paper doc ID. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Paper.DocLookupError` object on failure. + @discardableResult open func docsPermanentlyDelete(docId: String) -> RpcRequest { + let route = Paper.docsPermanentlyDelete + let serverArgs = Paper.RefPaperDoc(docId: docId) + return client.request(route, serverArgs: serverArgs) + } + + /// Gets the default sharing policy for the given Paper doc. + /// + /// - parameter docId: The Paper doc ID. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.SharingPolicy` object on success or + /// a `Paper.DocLookupError` object on failure. + @discardableResult open func docsSharingPolicyGet(docId: String) -> RpcRequest { + let route = Paper.docsSharingPolicyGet + let serverArgs = Paper.RefPaperDoc(docId: docId) + return client.request(route, serverArgs: serverArgs) + } + + /// Sets the default sharing policy for the given Paper doc. The default 'team_sharing_policy' can be changed only + /// by teams, omit this field for personal accounts. Note: 'public_sharing_policy' cannot be set to the value + /// 'disabled' because this setting can be changed only via the team admin console. + /// + /// - parameter sharingPolicy: The default sharing policy to be set for the Paper doc. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Paper.DocLookupError` object on failure. + @discardableResult open func docsSharingPolicySet(docId: String, sharingPolicy: Paper.SharingPolicy) -> RpcRequest { + let route = Paper.docsSharingPolicySet + let serverArgs = Paper.PaperDocSharingPolicy(docId: docId, sharingPolicy: sharingPolicy) + return client.request(route, serverArgs: serverArgs) + } + + /// Updates an existing Paper doc with the provided content. + /// + /// - parameter docUpdatePolicy: The policy used for the current update call. + /// - parameter revision: The latest doc revision. This value must match the head revision or an error code will be + /// returned. This is to prevent colliding writes. + /// - parameter importFormat: The format of provided data. + /// - parameter input: The file to upload, as an Data object. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.PaperDocCreateUpdateResult` object + /// on success or a `Paper.PaperDocUpdateError` object on failure. + @discardableResult open func docsUpdate(docId: String, docUpdatePolicy: Paper.PaperDocUpdatePolicy, revision: Int64, importFormat: Paper.ImportFormat, input: Data) -> UploadRequest { + let route = Paper.docsUpdate + let serverArgs = Paper.PaperDocUpdateArgs(docId: docId, docUpdatePolicy: docUpdatePolicy, revision: revision, importFormat: importFormat) + return client.request(route, serverArgs: serverArgs, input: .data(input)) + } + + /// Updates an existing Paper doc with the provided content. + /// + /// - parameter docUpdatePolicy: The policy used for the current update call. + /// - parameter revision: The latest doc revision. This value must match the head revision or an error code will be + /// returned. This is to prevent colliding writes. + /// - parameter importFormat: The format of provided data. + /// - parameter input: The file to upload, as an URL object. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.PaperDocCreateUpdateResult` object + /// on success or a `Paper.PaperDocUpdateError` object on failure. + @discardableResult open func docsUpdate(docId: String, docUpdatePolicy: Paper.PaperDocUpdatePolicy, revision: Int64, importFormat: Paper.ImportFormat, input: URL) -> UploadRequest { + let route = Paper.docsUpdate + let serverArgs = Paper.PaperDocUpdateArgs(docId: docId, docUpdatePolicy: docUpdatePolicy, revision: revision, importFormat: importFormat) + return client.request(route, serverArgs: serverArgs, input: .file(input)) + } + + /// Updates an existing Paper doc with the provided content. + /// + /// - parameter docUpdatePolicy: The policy used for the current update call. + /// - parameter revision: The latest doc revision. This value must match the head revision or an error code will be + /// returned. This is to prevent colliding writes. + /// - parameter importFormat: The format of provided data. + /// - parameter input: The file to upload, as an InputStream object. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.PaperDocCreateUpdateResult` object + /// on success or a `Paper.PaperDocUpdateError` object on failure. + @discardableResult open func docsUpdate(docId: String, docUpdatePolicy: Paper.PaperDocUpdatePolicy, revision: Int64, importFormat: Paper.ImportFormat, input: InputStream) -> UploadRequest { + let route = Paper.docsUpdate + let serverArgs = Paper.PaperDocUpdateArgs(docId: docId, docUpdatePolicy: docUpdatePolicy, revision: revision, importFormat: importFormat) + return client.request(route, serverArgs: serverArgs, input: .stream(input)) + } + + /// Allows an owner or editor to add users to a Paper doc or change their permissions using their email address or + /// Dropbox account ID. Note: The Doc owner's permissions cannot be changed. + /// + /// - parameter members: User which should be added to the Paper doc. Specify only email address or Dropbox account + /// ID. + /// - parameter customMessage: A personal message that will be emailed to each successfully added member. + /// - parameter quiet: Clients should set this to true if no email message shall be sent to added users. + /// + /// - returns: Through the response callback, the caller will receive a `Array` + /// object on success or a `Paper.DocLookupError` object on failure. + @discardableResult open func docsUsersAdd(docId: String, members: Array, customMessage: String? = nil, quiet: Bool = false) -> RpcRequest, Paper.DocLookupErrorSerializer> { + let route = Paper.docsUsersAdd + let serverArgs = Paper.AddPaperDocUser(docId: docId, members: members, customMessage: customMessage, quiet: quiet) + return client.request(route, serverArgs: serverArgs) + } + + /// Lists all users who visited the Paper doc or users with explicit access. This call excludes users who have been + /// removed. The list is sorted by the date of the visit or the share date. The list will include both users, the + /// explicitly shared ones as well as those who came in using the Paper url link. + /// + /// - parameter limit: Size limit per batch. The maximum number of users that can be retrieved per batch is 1000. + /// Higher value results in invalid arguments error. + /// - parameter filterBy: Specify this attribute if you want to obtain users that have already accessed the Paper + /// doc. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.ListUsersOnPaperDocResponse` object + /// on success or a `Paper.DocLookupError` object on failure. + @discardableResult open func docsUsersList(docId: String, limit: Int32 = 1000, filterBy: Paper.UserOnPaperDocFilter = .shared) -> RpcRequest { + let route = Paper.docsUsersList + let serverArgs = Paper.ListUsersOnPaperDocArgs(docId: docId, limit: limit, filterBy: filterBy) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from docsUsersList, use this to paginate through all users on the Paper doc. + /// + /// - parameter cursor: The cursor obtained from docsUsersList or docsUsersListContinue. Allows for pagination. + /// + /// - returns: Through the response callback, the caller will receive a `Paper.ListUsersOnPaperDocResponse` object + /// on success or a `Paper.ListUsersCursorError` object on failure. + @discardableResult open func docsUsersListContinue(docId: String, cursor: String) -> RpcRequest { + let route = Paper.docsUsersListContinue + let serverArgs = Paper.ListUsersOnPaperDocContinueArgs(docId: docId, cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Allows an owner or editor to remove users from a Paper doc using their email address or Dropbox account ID. + /// Note: Doc owner cannot be removed. + /// + /// - parameter member: User which should be removed from the Paper doc. Specify only email address or Dropbox + /// account ID. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Paper.DocLookupError` object on failure. + @discardableResult open func docsUsersRemove(docId: String, member: Sharing.MemberSelector) -> RpcRequest { + let route = Paper.docsUsersRemove + let serverArgs = Paper.RemovePaperDocUser(docId: docId, member: member) + return client.request(route, serverArgs: serverArgs) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/SeenState.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/SeenState.swift new file mode 100644 index 0000000..cc7ddf3 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/SeenState.swift @@ -0,0 +1,78 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the seen_state namespace +open class SeenState { + /// Possible platforms on which a user may view content. + public enum PlatformType: CustomStringConvertible { + /// The content was viewed on the web. + case web + /// The content was viewed on a mobile client. + case mobile + /// The content was viewed on a desktop client. + case desktop + /// The content was viewed on an unknown platform. + case unknown + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PlatformTypeSerializer().serialize(self)))" + } + } + open class PlatformTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PlatformType) -> JSON { + switch value { + case .web: + var d = [String: JSON]() + d[".tag"] = .str("web") + return .dictionary(d) + case .mobile: + var d = [String: JSON]() + d[".tag"] = .str("mobile") + return .dictionary(d) + case .desktop: + var d = [String: JSON]() + d[".tag"] = .str("desktop") + return .dictionary(d) + case .unknown: + var d = [String: JSON]() + d[".tag"] = .str("unknown") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PlatformType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "web": + return PlatformType.web + case "mobile": + return PlatformType.mobile + case "desktop": + return PlatformType.desktop + case "unknown": + return PlatformType.unknown + case "other": + return PlatformType.other + default: + return PlatformType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Sharing.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Sharing.swift new file mode 100644 index 0000000..56ae027 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Sharing.swift @@ -0,0 +1,8787 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the sharing namespace +open class Sharing { + /// Information about the inheritance policy of a shared folder. + public enum AccessInheritance: CustomStringConvertible { + /// The shared folder inherits its members from the parent folder. + case inherit + /// The shared folder does not inherit its members from the parent folder. + case noInherit + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccessInheritanceSerializer().serialize(self)))" + } + } + open class AccessInheritanceSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccessInheritance) -> JSON { + switch value { + case .inherit: + var d = [String: JSON]() + d[".tag"] = .str("inherit") + return .dictionary(d) + case .noInherit: + var d = [String: JSON]() + d[".tag"] = .str("no_inherit") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AccessInheritance { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "inherit": + return AccessInheritance.inherit + case "no_inherit": + return AccessInheritance.noInherit + case "other": + return AccessInheritance.other + default: + return AccessInheritance.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Defines the access levels for collaborators. + public enum AccessLevel: CustomStringConvertible { + /// The collaborator is the owner of the shared folder. Owners can view and edit the shared folder as well as + /// set the folder's policies using updateFolderPolicy. + case owner + /// The collaborator can both view and edit the shared folder. + case editor + /// The collaborator can only view the shared folder. + case viewer + /// The collaborator can only view the shared folder and does not have any access to comments. + case viewerNoComment + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccessLevelSerializer().serialize(self)))" + } + } + open class AccessLevelSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccessLevel) -> JSON { + switch value { + case .owner: + var d = [String: JSON]() + d[".tag"] = .str("owner") + return .dictionary(d) + case .editor: + var d = [String: JSON]() + d[".tag"] = .str("editor") + return .dictionary(d) + case .viewer: + var d = [String: JSON]() + d[".tag"] = .str("viewer") + return .dictionary(d) + case .viewerNoComment: + var d = [String: JSON]() + d[".tag"] = .str("viewer_no_comment") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AccessLevel { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "owner": + return AccessLevel.owner + case "editor": + return AccessLevel.editor + case "viewer": + return AccessLevel.viewer + case "viewer_no_comment": + return AccessLevel.viewerNoComment + case "other": + return AccessLevel.other + default: + return AccessLevel.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Who can change a shared folder's access control list (ACL). In other words, who can add, remove, or change the + /// privileges of members. + public enum AclUpdatePolicy: CustomStringConvertible { + /// Only the owner can update the ACL. + case owner + /// Any editor can update the ACL. This may be further restricted to editors on the same team. + case editors + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AclUpdatePolicySerializer().serialize(self)))" + } + } + open class AclUpdatePolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AclUpdatePolicy) -> JSON { + switch value { + case .owner: + var d = [String: JSON]() + d[".tag"] = .str("owner") + return .dictionary(d) + case .editors: + var d = [String: JSON]() + d[".tag"] = .str("editors") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AclUpdatePolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "owner": + return AclUpdatePolicy.owner + case "editors": + return AclUpdatePolicy.editors + case "other": + return AclUpdatePolicy.other + default: + return AclUpdatePolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Arguments for addFileMember. + open class AddFileMemberArgs: CustomStringConvertible { + /// File to which to add members. + public let file: String + /// Members to add. Note that even an email address is given, this may result in a user being directy added to + /// the membership if that email is the user's main account email. + public let members: Array + /// Message to send to added members in their invitation. + public let customMessage: String? + /// Whether added members should be notified via device notifications of their invitation. + public let quiet: Bool + /// AccessLevel union object, describing what access level we want to give new members. + public let accessLevel: Sharing.AccessLevel + /// If the custom message should be added as a comment on the file. + public let addMessageAsComment: Bool + public init(file: String, members: Array, customMessage: String? = nil, quiet: Bool = false, accessLevel: Sharing.AccessLevel = .viewer, addMessageAsComment: Bool = false) { + stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?")(file) + self.file = file + self.members = members + nullableValidator(stringValidator())(customMessage) + self.customMessage = customMessage + self.quiet = quiet + self.accessLevel = accessLevel + self.addMessageAsComment = addMessageAsComment + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddFileMemberArgsSerializer().serialize(self)))" + } + } + open class AddFileMemberArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddFileMemberArgs) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + "members": ArraySerializer(Sharing.MemberSelectorSerializer()).serialize(value.members), + "custom_message": NullableSerializer(Serialization._StringSerializer).serialize(value.customMessage), + "quiet": Serialization._BoolSerializer.serialize(value.quiet), + "access_level": Sharing.AccessLevelSerializer().serialize(value.accessLevel), + "add_message_as_comment": Serialization._BoolSerializer.serialize(value.addMessageAsComment), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AddFileMemberArgs { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + let members = ArraySerializer(Sharing.MemberSelectorSerializer()).deserialize(dict["members"] ?? .null) + let customMessage = NullableSerializer(Serialization._StringSerializer).deserialize(dict["custom_message"] ?? .null) + let quiet = Serialization._BoolSerializer.deserialize(dict["quiet"] ?? .number(0)) + let accessLevel = Sharing.AccessLevelSerializer().deserialize(dict["access_level"] ?? Sharing.AccessLevelSerializer().serialize(.viewer)) + let addMessageAsComment = Serialization._BoolSerializer.deserialize(dict["add_message_as_comment"] ?? .number(0)) + return AddFileMemberArgs(file: file, members: members, customMessage: customMessage, quiet: quiet, accessLevel: accessLevel, addMessageAsComment: addMessageAsComment) + default: + fatalError("Type error deserializing") + } + } + } + + /// Errors for addFileMember. + public enum AddFileMemberError: CustomStringConvertible { + /// An unspecified error. + case userError(Sharing.SharingUserError) + /// An unspecified error. + case accessError(Sharing.SharingFileAccessError) + /// The user has reached the rate limit for invitations. + case rateLimit + /// The custom message did not pass comment permissions checks. + case invalidComment + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddFileMemberErrorSerializer().serialize(self)))" + } + } + open class AddFileMemberErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddFileMemberError) -> JSON { + switch value { + case .userError(let arg): + var d = ["user_error": Sharing.SharingUserErrorSerializer().serialize(arg)] + d[".tag"] = .str("user_error") + return .dictionary(d) + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .rateLimit: + var d = [String: JSON]() + d[".tag"] = .str("rate_limit") + return .dictionary(d) + case .invalidComment: + var d = [String: JSON]() + d[".tag"] = .str("invalid_comment") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AddFileMemberError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_error": + let v = Sharing.SharingUserErrorSerializer().deserialize(d["user_error"] ?? .null) + return AddFileMemberError.userError(v) + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return AddFileMemberError.accessError(v) + case "rate_limit": + return AddFileMemberError.rateLimit + case "invalid_comment": + return AddFileMemberError.invalidComment + case "other": + return AddFileMemberError.other + default: + return AddFileMemberError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The AddFolderMemberArg struct + open class AddFolderMemberArg: CustomStringConvertible { + /// The ID for the shared folder. + public let sharedFolderId: String + /// The intended list of members to add. Added members will receive invites to join the shared folder. + public let members: Array + /// Whether added members should be notified via email and device notifications of their invite. + public let quiet: Bool + /// Optional message to display to added members in their invitation. + public let customMessage: String? + public init(sharedFolderId: String, members: Array, quiet: Bool = false, customMessage: String? = nil) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.members = members + self.quiet = quiet + nullableValidator(stringValidator(minLength: 1))(customMessage) + self.customMessage = customMessage + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddFolderMemberArgSerializer().serialize(self)))" + } + } + open class AddFolderMemberArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddFolderMemberArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "members": ArraySerializer(Sharing.AddMemberSerializer()).serialize(value.members), + "quiet": Serialization._BoolSerializer.serialize(value.quiet), + "custom_message": NullableSerializer(Serialization._StringSerializer).serialize(value.customMessage), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AddFolderMemberArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let members = ArraySerializer(Sharing.AddMemberSerializer()).deserialize(dict["members"] ?? .null) + let quiet = Serialization._BoolSerializer.deserialize(dict["quiet"] ?? .number(0)) + let customMessage = NullableSerializer(Serialization._StringSerializer).deserialize(dict["custom_message"] ?? .null) + return AddFolderMemberArg(sharedFolderId: sharedFolderId, members: members, quiet: quiet, customMessage: customMessage) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AddFolderMemberError union + public enum AddFolderMemberError: CustomStringConvertible { + /// Unable to access shared folder. + case accessError(Sharing.SharedFolderAccessError) + /// The current user's e-mail address is unverified. + case emailUnverified + /// members in AddFolderMemberArg contains a bad invitation recipient. + case badMember(Sharing.AddMemberSelectorError) + /// Your team policy does not allow sharing outside of the team. + case cantShareOutsideTeam + /// The value is the member limit that was reached. + case tooManyMembers(UInt64) + /// The value is the pending invite limit that was reached. + case tooManyPendingInvites(UInt64) + /// The current user has hit the limit of invites they can send per day. Try again in 24 hours. + case rateLimit + /// The current user is trying to share with too many people at once. + case tooManyInvitees + /// The current user's account doesn't support this action. An example of this is when adding a read-only + /// member. This action can only be performed by users that have upgraded to a Pro or Business plan. + case insufficientPlan + /// This action cannot be performed on a team shared folder. + case teamFolder + /// The current user does not have permission to perform this action. + case noPermission + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddFolderMemberErrorSerializer().serialize(self)))" + } + } + open class AddFolderMemberErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddFolderMemberError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .emailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("email_unverified") + return .dictionary(d) + case .badMember(let arg): + var d = ["bad_member": Sharing.AddMemberSelectorErrorSerializer().serialize(arg)] + d[".tag"] = .str("bad_member") + return .dictionary(d) + case .cantShareOutsideTeam: + var d = [String: JSON]() + d[".tag"] = .str("cant_share_outside_team") + return .dictionary(d) + case .tooManyMembers(let arg): + var d = ["too_many_members": Serialization._UInt64Serializer.serialize(arg)] + d[".tag"] = .str("too_many_members") + return .dictionary(d) + case .tooManyPendingInvites(let arg): + var d = ["too_many_pending_invites": Serialization._UInt64Serializer.serialize(arg)] + d[".tag"] = .str("too_many_pending_invites") + return .dictionary(d) + case .rateLimit: + var d = [String: JSON]() + d[".tag"] = .str("rate_limit") + return .dictionary(d) + case .tooManyInvitees: + var d = [String: JSON]() + d[".tag"] = .str("too_many_invitees") + return .dictionary(d) + case .insufficientPlan: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_plan") + return .dictionary(d) + case .teamFolder: + var d = [String: JSON]() + d[".tag"] = .str("team_folder") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AddFolderMemberError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return AddFolderMemberError.accessError(v) + case "email_unverified": + return AddFolderMemberError.emailUnverified + case "bad_member": + let v = Sharing.AddMemberSelectorErrorSerializer().deserialize(d["bad_member"] ?? .null) + return AddFolderMemberError.badMember(v) + case "cant_share_outside_team": + return AddFolderMemberError.cantShareOutsideTeam + case "too_many_members": + let v = Serialization._UInt64Serializer.deserialize(d["too_many_members"] ?? .null) + return AddFolderMemberError.tooManyMembers(v) + case "too_many_pending_invites": + let v = Serialization._UInt64Serializer.deserialize(d["too_many_pending_invites"] ?? .null) + return AddFolderMemberError.tooManyPendingInvites(v) + case "rate_limit": + return AddFolderMemberError.rateLimit + case "too_many_invitees": + return AddFolderMemberError.tooManyInvitees + case "insufficient_plan": + return AddFolderMemberError.insufficientPlan + case "team_folder": + return AddFolderMemberError.teamFolder + case "no_permission": + return AddFolderMemberError.noPermission + case "other": + return AddFolderMemberError.other + default: + return AddFolderMemberError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The member and type of access the member should have when added to a shared folder. + open class AddMember: CustomStringConvertible { + /// The member to add to the shared folder. + public let member: Sharing.MemberSelector + /// The access level to grant member to the shared folder. owner in AccessLevel is disallowed. + public let accessLevel: Sharing.AccessLevel + public init(member: Sharing.MemberSelector, accessLevel: Sharing.AccessLevel = .viewer) { + self.member = member + self.accessLevel = accessLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddMemberSerializer().serialize(self)))" + } + } + open class AddMemberSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddMember) -> JSON { + let output = [ + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + "access_level": Sharing.AccessLevelSerializer().serialize(value.accessLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AddMember { + switch json { + case .dictionary(let dict): + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + let accessLevel = Sharing.AccessLevelSerializer().deserialize(dict["access_level"] ?? Sharing.AccessLevelSerializer().serialize(.viewer)) + return AddMember(member: member, accessLevel: accessLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AddMemberSelectorError union + public enum AddMemberSelectorError: CustomStringConvertible { + /// Automatically created groups can only be added to team folders. + case automaticGroup + /// The value is the ID that could not be identified. + case invalidDropboxId(String) + /// The value is the e-email address that is malformed. + case invalidEmail(String) + /// The value is the ID of the Dropbox user with an unverified e-mail address. Invite unverified users by + /// e-mail address instead of by their Dropbox ID. + case unverifiedDropboxId(String) + /// At least one of the specified groups in members in AddFolderMemberArg is deleted. + case groupDeleted + /// Sharing to a group that is not on the current user's team. + case groupNotOnTeam + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AddMemberSelectorErrorSerializer().serialize(self)))" + } + } + open class AddMemberSelectorErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AddMemberSelectorError) -> JSON { + switch value { + case .automaticGroup: + var d = [String: JSON]() + d[".tag"] = .str("automatic_group") + return .dictionary(d) + case .invalidDropboxId(let arg): + var d = ["invalid_dropbox_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("invalid_dropbox_id") + return .dictionary(d) + case .invalidEmail(let arg): + var d = ["invalid_email": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("invalid_email") + return .dictionary(d) + case .unverifiedDropboxId(let arg): + var d = ["unverified_dropbox_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("unverified_dropbox_id") + return .dictionary(d) + case .groupDeleted: + var d = [String: JSON]() + d[".tag"] = .str("group_deleted") + return .dictionary(d) + case .groupNotOnTeam: + var d = [String: JSON]() + d[".tag"] = .str("group_not_on_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AddMemberSelectorError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "automatic_group": + return AddMemberSelectorError.automaticGroup + case "invalid_dropbox_id": + let v = Serialization._StringSerializer.deserialize(d["invalid_dropbox_id"] ?? .null) + return AddMemberSelectorError.invalidDropboxId(v) + case "invalid_email": + let v = Serialization._StringSerializer.deserialize(d["invalid_email"] ?? .null) + return AddMemberSelectorError.invalidEmail(v) + case "unverified_dropbox_id": + let v = Serialization._StringSerializer.deserialize(d["unverified_dropbox_id"] ?? .null) + return AddMemberSelectorError.unverifiedDropboxId(v) + case "group_deleted": + return AddMemberSelectorError.groupDeleted + case "group_not_on_team": + return AddMemberSelectorError.groupNotOnTeam + case "other": + return AddMemberSelectorError.other + default: + return AddMemberSelectorError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information about the content that has a link audience different than that of this folder. + open class AudienceExceptionContentInfo: CustomStringConvertible { + /// The name of the content, which is either a file or a folder. + public let name: String + public init(name: String) { + stringValidator()(name) + self.name = name + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AudienceExceptionContentInfoSerializer().serialize(self)))" + } + } + open class AudienceExceptionContentInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AudienceExceptionContentInfo) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AudienceExceptionContentInfo { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + return AudienceExceptionContentInfo(name: name) + default: + fatalError("Type error deserializing") + } + } + } + + /// The total count and truncated list of information of content inside this folder that has a different audience + /// than the link on this folder. This is only returned for folders. + open class AudienceExceptions: CustomStringConvertible { + /// (no description) + public let count: UInt32 + /// A truncated list of some of the content that is an exception. The length of this list could be smaller than + /// the count since it is only a sample but will not be empty as long as count is not 0. + public let exceptions: Array + public init(count: UInt32, exceptions: Array) { + comparableValidator()(count) + self.count = count + self.exceptions = exceptions + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AudienceExceptionsSerializer().serialize(self)))" + } + } + open class AudienceExceptionsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AudienceExceptions) -> JSON { + let output = [ + "count": Serialization._UInt32Serializer.serialize(value.count), + "exceptions": ArraySerializer(Sharing.AudienceExceptionContentInfoSerializer()).serialize(value.exceptions), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AudienceExceptions { + switch json { + case .dictionary(let dict): + let count = Serialization._UInt32Serializer.deserialize(dict["count"] ?? .null) + let exceptions = ArraySerializer(Sharing.AudienceExceptionContentInfoSerializer()).deserialize(dict["exceptions"] ?? .null) + return AudienceExceptions(count: count, exceptions: exceptions) + default: + fatalError("Type error deserializing") + } + } + } + + /// Information about the shared folder that prevents the link audience for this link from being more restrictive. + open class AudienceRestrictingSharedFolder: CustomStringConvertible { + /// The ID of the shared folder. + public let sharedFolderId: String + /// The name of the shared folder. + public let name: String + /// The link audience of the shared folder. + public let audience: Sharing.LinkAudience + public init(sharedFolderId: String, name: String, audience: Sharing.LinkAudience) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + stringValidator()(name) + self.name = name + self.audience = audience + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AudienceRestrictingSharedFolderSerializer().serialize(self)))" + } + } + open class AudienceRestrictingSharedFolderSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AudienceRestrictingSharedFolder) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "name": Serialization._StringSerializer.serialize(value.name), + "audience": Sharing.LinkAudienceSerializer().serialize(value.audience), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AudienceRestrictingSharedFolder { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let audience = Sharing.LinkAudienceSerializer().deserialize(dict["audience"] ?? .null) + return AudienceRestrictingSharedFolder(sharedFolderId: sharedFolderId, name: name, audience: audience) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for changeFileMemberAccess. + open class ChangeFileMemberAccessArgs: CustomStringConvertible { + /// File for which we are changing a member's access. + public let file: String + /// The member whose access we are changing. + public let member: Sharing.MemberSelector + /// The new access level for the member. + public let accessLevel: Sharing.AccessLevel + public init(file: String, member: Sharing.MemberSelector, accessLevel: Sharing.AccessLevel) { + stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?")(file) + self.file = file + self.member = member + self.accessLevel = accessLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ChangeFileMemberAccessArgsSerializer().serialize(self)))" + } + } + open class ChangeFileMemberAccessArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ChangeFileMemberAccessArgs) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + "access_level": Sharing.AccessLevelSerializer().serialize(value.accessLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ChangeFileMemberAccessArgs { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + let accessLevel = Sharing.AccessLevelSerializer().deserialize(dict["access_level"] ?? .null) + return ChangeFileMemberAccessArgs(file: file, member: member, accessLevel: accessLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// Metadata for a shared link. This can be either a PathLinkMetadata or CollectionLinkMetadata. + open class LinkMetadata: CustomStringConvertible { + /// URL of the shared link. + public let url: String + /// Who can access the link. + public let visibility: Sharing.Visibility + /// Expiration time, if set. By default the link won't expire. + public let expires: Date? + public init(url: String, visibility: Sharing.Visibility, expires: Date? = nil) { + stringValidator()(url) + self.url = url + self.visibility = visibility + self.expires = expires + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LinkMetadataSerializer().serialize(self)))" + } + } + open class LinkMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LinkMetadata) -> JSON { + var output = [ + "url": Serialization._StringSerializer.serialize(value.url), + "visibility": Sharing.VisibilitySerializer().serialize(value.visibility), + "expires": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expires), + ] + switch value { + case let path as Sharing.PathLinkMetadata: + for (k, v) in Serialization.getFields(Sharing.PathLinkMetadataSerializer().serialize(path)) { + output[k] = v + } + output[".tag"] = .str("path") + case let collection as Sharing.CollectionLinkMetadata: + for (k, v) in Serialization.getFields(Sharing.CollectionLinkMetadataSerializer().serialize(collection)) { + output[k] = v + } + output[".tag"] = .str("collection") + default: fatalError("Tried to serialize unexpected subtype") + } + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LinkMetadata { + switch json { + case .dictionary(let dict): + let tag = Serialization.getTag(dict) + switch tag { + case "path": + return Sharing.PathLinkMetadataSerializer().deserialize(json) + case "collection": + return Sharing.CollectionLinkMetadataSerializer().deserialize(json) + default: + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let visibility = Sharing.VisibilitySerializer().deserialize(dict["visibility"] ?? .null) + let expires = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expires"] ?? .null) + return LinkMetadata(url: url, visibility: visibility, expires: expires) + } + default: + fatalError("Type error deserializing") + } + } + } + + /// Metadata for a collection-based shared link. + open class CollectionLinkMetadata: Sharing.LinkMetadata { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CollectionLinkMetadataSerializer().serialize(self)))" + } + } + open class CollectionLinkMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CollectionLinkMetadata) -> JSON { + let output = [ + "url": Serialization._StringSerializer.serialize(value.url), + "visibility": Sharing.VisibilitySerializer().serialize(value.visibility), + "expires": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expires), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CollectionLinkMetadata { + switch json { + case .dictionary(let dict): + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let visibility = Sharing.VisibilitySerializer().deserialize(dict["visibility"] ?? .null) + let expires = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expires"] ?? .null) + return CollectionLinkMetadata(url: url, visibility: visibility, expires: expires) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateSharedLinkArg struct + open class CreateSharedLinkArg: CustomStringConvertible { + /// The path to share. + public let path: String + /// Whether to return a shortened URL. + public let shortUrl: Bool + /// If it's okay to share a path that does not yet exist, set this to either file in PendingUploadMode or folder + /// in PendingUploadMode to indicate whether to assume it's a file or folder. + public let pendingUpload: Sharing.PendingUploadMode? + public init(path: String, shortUrl: Bool = false, pendingUpload: Sharing.PendingUploadMode? = nil) { + stringValidator()(path) + self.path = path + self.shortUrl = shortUrl + self.pendingUpload = pendingUpload + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateSharedLinkArgSerializer().serialize(self)))" + } + } + open class CreateSharedLinkArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateSharedLinkArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "short_url": Serialization._BoolSerializer.serialize(value.shortUrl), + "pending_upload": NullableSerializer(Sharing.PendingUploadModeSerializer()).serialize(value.pendingUpload), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateSharedLinkArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let shortUrl = Serialization._BoolSerializer.deserialize(dict["short_url"] ?? .number(0)) + let pendingUpload = NullableSerializer(Sharing.PendingUploadModeSerializer()).deserialize(dict["pending_upload"] ?? .null) + return CreateSharedLinkArg(path: path, shortUrl: shortUrl, pendingUpload: pendingUpload) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateSharedLinkError union + public enum CreateSharedLinkError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateSharedLinkErrorSerializer().serialize(self)))" + } + } + open class CreateSharedLinkErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateSharedLinkError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CreateSharedLinkError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return CreateSharedLinkError.path(v) + case "other": + return CreateSharedLinkError.other + default: + return CreateSharedLinkError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The CreateSharedLinkWithSettingsArg struct + open class CreateSharedLinkWithSettingsArg: CustomStringConvertible { + /// The path to be shared by the shared link. + public let path: String + /// The requested settings for the newly created shared link. + public let settings: Sharing.SharedLinkSettings? + public init(path: String, settings: Sharing.SharedLinkSettings? = nil) { + stringValidator(pattern: "(/(.|[\\r\\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.settings = settings + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateSharedLinkWithSettingsArgSerializer().serialize(self)))" + } + } + open class CreateSharedLinkWithSettingsArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateSharedLinkWithSettingsArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "settings": NullableSerializer(Sharing.SharedLinkSettingsSerializer()).serialize(value.settings), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateSharedLinkWithSettingsArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let settings = NullableSerializer(Sharing.SharedLinkSettingsSerializer()).deserialize(dict["settings"] ?? .null) + return CreateSharedLinkWithSettingsArg(path: path, settings: settings) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateSharedLinkWithSettingsError union + public enum CreateSharedLinkWithSettingsError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// User's email should be verified. + case emailNotVerified + /// The shared link already exists. You can call listSharedLinks to get the existing link. + case sharedLinkAlreadyExists + /// There is an error with the given settings. + case settingsError(Sharing.SharedLinkSettingsError) + /// Access to the requested path is forbidden. + case accessDenied + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateSharedLinkWithSettingsErrorSerializer().serialize(self)))" + } + } + open class CreateSharedLinkWithSettingsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateSharedLinkWithSettingsError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .emailNotVerified: + var d = [String: JSON]() + d[".tag"] = .str("email_not_verified") + return .dictionary(d) + case .sharedLinkAlreadyExists: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_already_exists") + return .dictionary(d) + case .settingsError(let arg): + var d = ["settings_error": Sharing.SharedLinkSettingsErrorSerializer().serialize(arg)] + d[".tag"] = .str("settings_error") + return .dictionary(d) + case .accessDenied: + var d = [String: JSON]() + d[".tag"] = .str("access_denied") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CreateSharedLinkWithSettingsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return CreateSharedLinkWithSettingsError.path(v) + case "email_not_verified": + return CreateSharedLinkWithSettingsError.emailNotVerified + case "shared_link_already_exists": + return CreateSharedLinkWithSettingsError.sharedLinkAlreadyExists + case "settings_error": + let v = Sharing.SharedLinkSettingsErrorSerializer().deserialize(d["settings_error"] ?? .null) + return CreateSharedLinkWithSettingsError.settingsError(v) + case "access_denied": + return CreateSharedLinkWithSettingsError.accessDenied + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SharedContentLinkMetadataBase struct + open class SharedContentLinkMetadataBase: CustomStringConvertible { + /// The access level on the link for this file. + public let accessLevel: Sharing.AccessLevel? + /// The audience options that are available for the content. Some audience options may be unavailable. For + /// example, team_only may be unavailable if the content is not owned by a user on a team. The 'default' + /// audience option is always available if the user can modify link settings. + public let audienceOptions: Array + /// The shared folder that prevents the link audience for this link from being more restrictive. + public let audienceRestrictingSharedFolder: Sharing.AudienceRestrictingSharedFolder? + /// The current audience of the link. + public let currentAudience: Sharing.LinkAudience + /// Whether the link has an expiry set on it. A link with an expiry will have its audience changed to members + /// when the expiry is reached. + public let expiry: Date? + /// A list of permissions for actions you can perform on the link. + public let linkPermissions: Array + /// Whether the link is protected by a password. + public let passwordProtected: Bool + public init(audienceOptions: Array, currentAudience: Sharing.LinkAudience, linkPermissions: Array, passwordProtected: Bool, accessLevel: Sharing.AccessLevel? = nil, audienceRestrictingSharedFolder: Sharing.AudienceRestrictingSharedFolder? = nil, expiry: Date? = nil) { + self.accessLevel = accessLevel + self.audienceOptions = audienceOptions + self.audienceRestrictingSharedFolder = audienceRestrictingSharedFolder + self.currentAudience = currentAudience + self.expiry = expiry + self.linkPermissions = linkPermissions + self.passwordProtected = passwordProtected + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentLinkMetadataBaseSerializer().serialize(self)))" + } + } + open class SharedContentLinkMetadataBaseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentLinkMetadataBase) -> JSON { + let output = [ + "audience_options": ArraySerializer(Sharing.LinkAudienceSerializer()).serialize(value.audienceOptions), + "current_audience": Sharing.LinkAudienceSerializer().serialize(value.currentAudience), + "link_permissions": ArraySerializer(Sharing.LinkPermissionSerializer()).serialize(value.linkPermissions), + "password_protected": Serialization._BoolSerializer.serialize(value.passwordProtected), + "access_level": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(value.accessLevel), + "audience_restricting_shared_folder": NullableSerializer(Sharing.AudienceRestrictingSharedFolderSerializer()).serialize(value.audienceRestrictingSharedFolder), + "expiry": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expiry), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentLinkMetadataBase { + switch json { + case .dictionary(let dict): + let audienceOptions = ArraySerializer(Sharing.LinkAudienceSerializer()).deserialize(dict["audience_options"] ?? .null) + let currentAudience = Sharing.LinkAudienceSerializer().deserialize(dict["current_audience"] ?? .null) + let linkPermissions = ArraySerializer(Sharing.LinkPermissionSerializer()).deserialize(dict["link_permissions"] ?? .null) + let passwordProtected = Serialization._BoolSerializer.deserialize(dict["password_protected"] ?? .null) + let accessLevel = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(dict["access_level"] ?? .null) + let audienceRestrictingSharedFolder = NullableSerializer(Sharing.AudienceRestrictingSharedFolderSerializer()).deserialize(dict["audience_restricting_shared_folder"] ?? .null) + let expiry = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expiry"] ?? .null) + return SharedContentLinkMetadataBase(audienceOptions: audienceOptions, currentAudience: currentAudience, linkPermissions: linkPermissions, passwordProtected: passwordProtected, accessLevel: accessLevel, audienceRestrictingSharedFolder: audienceRestrictingSharedFolder, expiry: expiry) + default: + fatalError("Type error deserializing") + } + } + } + + /// The expected metadata of a shared link for a file or folder when a link is first created for the content. Absent + /// if the link already exists. + open class ExpectedSharedContentLinkMetadata: Sharing.SharedContentLinkMetadataBase { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExpectedSharedContentLinkMetadataSerializer().serialize(self)))" + } + } + open class ExpectedSharedContentLinkMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExpectedSharedContentLinkMetadata) -> JSON { + let output = [ + "audience_options": ArraySerializer(Sharing.LinkAudienceSerializer()).serialize(value.audienceOptions), + "current_audience": Sharing.LinkAudienceSerializer().serialize(value.currentAudience), + "link_permissions": ArraySerializer(Sharing.LinkPermissionSerializer()).serialize(value.linkPermissions), + "password_protected": Serialization._BoolSerializer.serialize(value.passwordProtected), + "access_level": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(value.accessLevel), + "audience_restricting_shared_folder": NullableSerializer(Sharing.AudienceRestrictingSharedFolderSerializer()).serialize(value.audienceRestrictingSharedFolder), + "expiry": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expiry), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExpectedSharedContentLinkMetadata { + switch json { + case .dictionary(let dict): + let audienceOptions = ArraySerializer(Sharing.LinkAudienceSerializer()).deserialize(dict["audience_options"] ?? .null) + let currentAudience = Sharing.LinkAudienceSerializer().deserialize(dict["current_audience"] ?? .null) + let linkPermissions = ArraySerializer(Sharing.LinkPermissionSerializer()).deserialize(dict["link_permissions"] ?? .null) + let passwordProtected = Serialization._BoolSerializer.deserialize(dict["password_protected"] ?? .null) + let accessLevel = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(dict["access_level"] ?? .null) + let audienceRestrictingSharedFolder = NullableSerializer(Sharing.AudienceRestrictingSharedFolderSerializer()).deserialize(dict["audience_restricting_shared_folder"] ?? .null) + let expiry = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expiry"] ?? .null) + return ExpectedSharedContentLinkMetadata(audienceOptions: audienceOptions, currentAudience: currentAudience, linkPermissions: linkPermissions, passwordProtected: passwordProtected, accessLevel: accessLevel, audienceRestrictingSharedFolder: audienceRestrictingSharedFolder, expiry: expiry) + default: + fatalError("Type error deserializing") + } + } + } + + /// Sharing actions that may be taken on files. + public enum FileAction: CustomStringConvertible { + /// Disable viewer information on the file. + case disableViewerInfo + /// Change or edit contents of the file. + case editContents + /// Enable viewer information on the file. + case enableViewerInfo + /// Add a member with view permissions. + case inviteViewer + /// Add a member with view permissions but no comment permissions. + case inviteViewerNoComment + /// Add a member with edit permissions. + case inviteEditor + /// Stop sharing this file. + case unshare + /// Relinquish one's own membership to the file. + case relinquishMembership + /// Use create_link instead. + case shareLink + /// Create a shared link to the file. + case createLink + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileActionSerializer().serialize(self)))" + } + } + open class FileActionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileAction) -> JSON { + switch value { + case .disableViewerInfo: + var d = [String: JSON]() + d[".tag"] = .str("disable_viewer_info") + return .dictionary(d) + case .editContents: + var d = [String: JSON]() + d[".tag"] = .str("edit_contents") + return .dictionary(d) + case .enableViewerInfo: + var d = [String: JSON]() + d[".tag"] = .str("enable_viewer_info") + return .dictionary(d) + case .inviteViewer: + var d = [String: JSON]() + d[".tag"] = .str("invite_viewer") + return .dictionary(d) + case .inviteViewerNoComment: + var d = [String: JSON]() + d[".tag"] = .str("invite_viewer_no_comment") + return .dictionary(d) + case .inviteEditor: + var d = [String: JSON]() + d[".tag"] = .str("invite_editor") + return .dictionary(d) + case .unshare: + var d = [String: JSON]() + d[".tag"] = .str("unshare") + return .dictionary(d) + case .relinquishMembership: + var d = [String: JSON]() + d[".tag"] = .str("relinquish_membership") + return .dictionary(d) + case .shareLink: + var d = [String: JSON]() + d[".tag"] = .str("share_link") + return .dictionary(d) + case .createLink: + var d = [String: JSON]() + d[".tag"] = .str("create_link") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FileAction { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disable_viewer_info": + return FileAction.disableViewerInfo + case "edit_contents": + return FileAction.editContents + case "enable_viewer_info": + return FileAction.enableViewerInfo + case "invite_viewer": + return FileAction.inviteViewer + case "invite_viewer_no_comment": + return FileAction.inviteViewerNoComment + case "invite_editor": + return FileAction.inviteEditor + case "unshare": + return FileAction.unshare + case "relinquish_membership": + return FileAction.relinquishMembership + case "share_link": + return FileAction.shareLink + case "create_link": + return FileAction.createLink + case "other": + return FileAction.other + default: + return FileAction.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The FileErrorResult union + public enum FileErrorResult: CustomStringConvertible { + /// File specified by id was not found. + case fileNotFoundError(String) + /// User does not have permission to take the specified action on the file. + case invalidFileActionError(String) + /// User does not have permission to access file specified by file.Id. + case permissionDeniedError(String) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileErrorResultSerializer().serialize(self)))" + } + } + open class FileErrorResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileErrorResult) -> JSON { + switch value { + case .fileNotFoundError(let arg): + var d = ["file_not_found_error": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("file_not_found_error") + return .dictionary(d) + case .invalidFileActionError(let arg): + var d = ["invalid_file_action_error": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("invalid_file_action_error") + return .dictionary(d) + case .permissionDeniedError(let arg): + var d = ["permission_denied_error": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("permission_denied_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FileErrorResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "file_not_found_error": + let v = Serialization._StringSerializer.deserialize(d["file_not_found_error"] ?? .null) + return FileErrorResult.fileNotFoundError(v) + case "invalid_file_action_error": + let v = Serialization._StringSerializer.deserialize(d["invalid_file_action_error"] ?? .null) + return FileErrorResult.invalidFileActionError(v) + case "permission_denied_error": + let v = Serialization._StringSerializer.deserialize(d["permission_denied_error"] ?? .null) + return FileErrorResult.permissionDeniedError(v) + case "other": + return FileErrorResult.other + default: + return FileErrorResult.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The metadata of a shared link. + open class SharedLinkMetadata: CustomStringConvertible { + /// URL of the shared link. + public let url: String + /// A unique identifier for the linked file. + public let id: String? + /// The linked file name (including extension). This never contains a slash. + public let name: String + /// Expiration time, if set. By default the link won't expire. + public let expires: Date? + /// The lowercased full path in the user's Dropbox. This always starts with a slash. This field will only be + /// present only if the linked file is in the authenticated user's dropbox. + public let pathLower: String? + /// The link's access permissions. + public let linkPermissions: Sharing.LinkPermissions + /// The team membership information of the link's owner. This field will only be present if the link's owner + /// is a team member. + public let teamMemberInfo: Sharing.TeamMemberInfo? + /// The team information of the content's owner. This field will only be present if the content's owner is a + /// team member and the content's owner team is different from the link's owner team. + public let contentOwnerTeamInfo: Users.Team? + public init(url: String, name: String, linkPermissions: Sharing.LinkPermissions, id: String? = nil, expires: Date? = nil, pathLower: String? = nil, teamMemberInfo: Sharing.TeamMemberInfo? = nil, contentOwnerTeamInfo: Users.Team? = nil) { + stringValidator()(url) + self.url = url + nullableValidator(stringValidator(minLength: 1))(id) + self.id = id + stringValidator()(name) + self.name = name + self.expires = expires + nullableValidator(stringValidator())(pathLower) + self.pathLower = pathLower + self.linkPermissions = linkPermissions + self.teamMemberInfo = teamMemberInfo + self.contentOwnerTeamInfo = contentOwnerTeamInfo + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkMetadataSerializer().serialize(self)))" + } + } + open class SharedLinkMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkMetadata) -> JSON { + var output = [ + "url": Serialization._StringSerializer.serialize(value.url), + "name": Serialization._StringSerializer.serialize(value.name), + "link_permissions": Sharing.LinkPermissionsSerializer().serialize(value.linkPermissions), + "id": NullableSerializer(Serialization._StringSerializer).serialize(value.id), + "expires": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expires), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + "team_member_info": NullableSerializer(Sharing.TeamMemberInfoSerializer()).serialize(value.teamMemberInfo), + "content_owner_team_info": NullableSerializer(Users.TeamSerializer()).serialize(value.contentOwnerTeamInfo), + ] + switch value { + case let file as Sharing.FileLinkMetadata: + for (k, v) in Serialization.getFields(Sharing.FileLinkMetadataSerializer().serialize(file)) { + output[k] = v + } + output[".tag"] = .str("file") + case let folder as Sharing.FolderLinkMetadata: + for (k, v) in Serialization.getFields(Sharing.FolderLinkMetadataSerializer().serialize(folder)) { + output[k] = v + } + output[".tag"] = .str("folder") + default: fatalError("Tried to serialize unexpected subtype") + } + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkMetadata { + switch json { + case .dictionary(let dict): + let tag = Serialization.getTag(dict) + switch tag { + case "file": + return Sharing.FileLinkMetadataSerializer().deserialize(json) + case "folder": + return Sharing.FolderLinkMetadataSerializer().deserialize(json) + default: + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let linkPermissions = Sharing.LinkPermissionsSerializer().deserialize(dict["link_permissions"] ?? .null) + let id = NullableSerializer(Serialization._StringSerializer).deserialize(dict["id"] ?? .null) + let expires = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expires"] ?? .null) + let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) + let teamMemberInfo = NullableSerializer(Sharing.TeamMemberInfoSerializer()).deserialize(dict["team_member_info"] ?? .null) + let contentOwnerTeamInfo = NullableSerializer(Users.TeamSerializer()).deserialize(dict["content_owner_team_info"] ?? .null) + return SharedLinkMetadata(url: url, name: name, linkPermissions: linkPermissions, id: id, expires: expires, pathLower: pathLower, teamMemberInfo: teamMemberInfo, contentOwnerTeamInfo: contentOwnerTeamInfo) + } + default: + fatalError("Type error deserializing") + } + } + } + + /// The metadata of a file shared link. + open class FileLinkMetadata: Sharing.SharedLinkMetadata { + /// The modification time set by the desktop client when the file was added to Dropbox. Since this time is not + /// verified (the Dropbox server stores whatever the desktop client sends up), this should only be used for + /// display purposes (such as sorting) and not, for example, to determine if a file has changed or not. + public let clientModified: Date + /// The last time the file was modified on Dropbox. + public let serverModified: Date + /// A unique identifier for the current revision of a file. This field is the same rev as elsewhere in the API + /// and can be used to detect changes and avoid conflicts. + public let rev: String + /// The file size in bytes. + public let size: UInt64 + public init(url: String, name: String, linkPermissions: Sharing.LinkPermissions, clientModified: Date, serverModified: Date, rev: String, size: UInt64, id: String? = nil, expires: Date? = nil, pathLower: String? = nil, teamMemberInfo: Sharing.TeamMemberInfo? = nil, contentOwnerTeamInfo: Users.Team? = nil) { + self.clientModified = clientModified + self.serverModified = serverModified + stringValidator(minLength: 9, pattern: "[0-9a-f]+")(rev) + self.rev = rev + comparableValidator()(size) + self.size = size + super.init(url: url, name: name, linkPermissions: linkPermissions, id: id, expires: expires, pathLower: pathLower, teamMemberInfo: teamMemberInfo, contentOwnerTeamInfo: contentOwnerTeamInfo) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileLinkMetadataSerializer().serialize(self)))" + } + } + open class FileLinkMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileLinkMetadata) -> JSON { + let output = [ + "url": Serialization._StringSerializer.serialize(value.url), + "name": Serialization._StringSerializer.serialize(value.name), + "link_permissions": Sharing.LinkPermissionsSerializer().serialize(value.linkPermissions), + "client_modified": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.clientModified), + "server_modified": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.serverModified), + "rev": Serialization._StringSerializer.serialize(value.rev), + "size": Serialization._UInt64Serializer.serialize(value.size), + "id": NullableSerializer(Serialization._StringSerializer).serialize(value.id), + "expires": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expires), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + "team_member_info": NullableSerializer(Sharing.TeamMemberInfoSerializer()).serialize(value.teamMemberInfo), + "content_owner_team_info": NullableSerializer(Users.TeamSerializer()).serialize(value.contentOwnerTeamInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileLinkMetadata { + switch json { + case .dictionary(let dict): + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let linkPermissions = Sharing.LinkPermissionsSerializer().deserialize(dict["link_permissions"] ?? .null) + let clientModified = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["client_modified"] ?? .null) + let serverModified = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["server_modified"] ?? .null) + let rev = Serialization._StringSerializer.deserialize(dict["rev"] ?? .null) + let size = Serialization._UInt64Serializer.deserialize(dict["size"] ?? .null) + let id = NullableSerializer(Serialization._StringSerializer).deserialize(dict["id"] ?? .null) + let expires = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expires"] ?? .null) + let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) + let teamMemberInfo = NullableSerializer(Sharing.TeamMemberInfoSerializer()).deserialize(dict["team_member_info"] ?? .null) + let contentOwnerTeamInfo = NullableSerializer(Users.TeamSerializer()).deserialize(dict["content_owner_team_info"] ?? .null) + return FileLinkMetadata(url: url, name: name, linkPermissions: linkPermissions, clientModified: clientModified, serverModified: serverModified, rev: rev, size: size, id: id, expires: expires, pathLower: pathLower, teamMemberInfo: teamMemberInfo, contentOwnerTeamInfo: contentOwnerTeamInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileMemberActionError union + public enum FileMemberActionError: CustomStringConvertible { + /// Specified member was not found. + case invalidMember + /// User does not have permission to perform this action on this member. + case noPermission + /// Specified file was invalid or user does not have access. + case accessError(Sharing.SharingFileAccessError) + /// The action cannot be completed because the target member does not have explicit access to the file. The + /// return value is the access that the member has to the file from a parent folder. + case noExplicitAccess(Sharing.MemberAccessLevelResult) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileMemberActionErrorSerializer().serialize(self)))" + } + } + open class FileMemberActionErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileMemberActionError) -> JSON { + switch value { + case .invalidMember: + var d = [String: JSON]() + d[".tag"] = .str("invalid_member") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .noExplicitAccess(let arg): + var d = Serialization.getFields(Sharing.MemberAccessLevelResultSerializer().serialize(arg)) + d[".tag"] = .str("no_explicit_access") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FileMemberActionError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_member": + return FileMemberActionError.invalidMember + case "no_permission": + return FileMemberActionError.noPermission + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return FileMemberActionError.accessError(v) + case "no_explicit_access": + let v = Sharing.MemberAccessLevelResultSerializer().deserialize(json) + return FileMemberActionError.noExplicitAccess(v) + case "other": + return FileMemberActionError.other + default: + return FileMemberActionError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The FileMemberActionIndividualResult union + public enum FileMemberActionIndividualResult: CustomStringConvertible { + /// Member was successfully removed from this file. If AccessLevel is given, the member still has access via a + /// parent shared folder. + case success(Sharing.AccessLevel?) + /// User was not able to perform this action. + case memberError(Sharing.FileMemberActionError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileMemberActionIndividualResultSerializer().serialize(self)))" + } + } + open class FileMemberActionIndividualResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileMemberActionIndividualResult) -> JSON { + switch value { + case .success(let arg): + var d = ["success": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(arg)] + d[".tag"] = .str("success") + return .dictionary(d) + case .memberError(let arg): + var d = ["member_error": Sharing.FileMemberActionErrorSerializer().serialize(arg)] + d[".tag"] = .str("member_error") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FileMemberActionIndividualResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(d["success"] ?? .null) + return FileMemberActionIndividualResult.success(v) + case "member_error": + let v = Sharing.FileMemberActionErrorSerializer().deserialize(d["member_error"] ?? .null) + return FileMemberActionIndividualResult.memberError(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Per-member result for addFileMember or changeFileMemberAccess. + open class FileMemberActionResult: CustomStringConvertible { + /// One of specified input members. + public let member: Sharing.MemberSelector + /// The outcome of the action on this member. + public let result: Sharing.FileMemberActionIndividualResult + public init(member: Sharing.MemberSelector, result: Sharing.FileMemberActionIndividualResult) { + self.member = member + self.result = result + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileMemberActionResultSerializer().serialize(self)))" + } + } + open class FileMemberActionResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileMemberActionResult) -> JSON { + let output = [ + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + "result": Sharing.FileMemberActionIndividualResultSerializer().serialize(value.result), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileMemberActionResult { + switch json { + case .dictionary(let dict): + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + let result = Sharing.FileMemberActionIndividualResultSerializer().deserialize(dict["result"] ?? .null) + return FileMemberActionResult(member: member, result: result) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileMemberRemoveActionResult union + public enum FileMemberRemoveActionResult: CustomStringConvertible { + /// Member was successfully removed from this file. + case success(Sharing.MemberAccessLevelResult) + /// User was not able to remove this member. + case memberError(Sharing.FileMemberActionError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileMemberRemoveActionResultSerializer().serialize(self)))" + } + } + open class FileMemberRemoveActionResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileMemberRemoveActionResult) -> JSON { + switch value { + case .success(let arg): + var d = Serialization.getFields(Sharing.MemberAccessLevelResultSerializer().serialize(arg)) + d[".tag"] = .str("success") + return .dictionary(d) + case .memberError(let arg): + var d = ["member_error": Sharing.FileMemberActionErrorSerializer().serialize(arg)] + d[".tag"] = .str("member_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FileMemberRemoveActionResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = Sharing.MemberAccessLevelResultSerializer().deserialize(json) + return FileMemberRemoveActionResult.success(v) + case "member_error": + let v = Sharing.FileMemberActionErrorSerializer().deserialize(d["member_error"] ?? .null) + return FileMemberRemoveActionResult.memberError(v) + case "other": + return FileMemberRemoveActionResult.other + default: + return FileMemberRemoveActionResult.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Whether the user is allowed to take the sharing action on the file. + open class FilePermission: CustomStringConvertible { + /// The action that the user may wish to take on the file. + public let action: Sharing.FileAction + /// True if the user is allowed to take the action. + public let allow: Bool + /// The reason why the user is denied the permission. Not present if the action is allowed. + public let reason: Sharing.PermissionDeniedReason? + public init(action: Sharing.FileAction, allow: Bool, reason: Sharing.PermissionDeniedReason? = nil) { + self.action = action + self.allow = allow + self.reason = reason + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FilePermissionSerializer().serialize(self)))" + } + } + open class FilePermissionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FilePermission) -> JSON { + let output = [ + "action": Sharing.FileActionSerializer().serialize(value.action), + "allow": Serialization._BoolSerializer.serialize(value.allow), + "reason": NullableSerializer(Sharing.PermissionDeniedReasonSerializer()).serialize(value.reason), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FilePermission { + switch json { + case .dictionary(let dict): + let action = Sharing.FileActionSerializer().deserialize(dict["action"] ?? .null) + let allow = Serialization._BoolSerializer.deserialize(dict["allow"] ?? .null) + let reason = NullableSerializer(Sharing.PermissionDeniedReasonSerializer()).deserialize(dict["reason"] ?? .null) + return FilePermission(action: action, allow: allow, reason: reason) + default: + fatalError("Type error deserializing") + } + } + } + + /// Actions that may be taken on shared folders. + public enum FolderAction: CustomStringConvertible { + /// Change folder options, such as who can be invited to join the folder. + case changeOptions + /// Disable viewer information for this folder. + case disableViewerInfo + /// Change or edit contents of the folder. + case editContents + /// Enable viewer information on the folder. + case enableViewerInfo + /// Invite a user or group to join the folder with read and write permission. + case inviteEditor + /// Invite a user or group to join the folder with read permission. + case inviteViewer + /// Invite a user or group to join the folder with read permission but no comment permissions. + case inviteViewerNoComment + /// Relinquish one's own membership in the folder. + case relinquishMembership + /// Unmount the folder. + case unmount + /// Stop sharing this folder. + case unshare + /// Keep a copy of the contents upon leaving or being kicked from the folder. + case leaveACopy + /// Use create_link instead. + case shareLink + /// Create a shared link for folder. + case createLink + /// Set whether the folder inherits permissions from its parent. + case setAccessInheritance + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderActionSerializer().serialize(self)))" + } + } + open class FolderActionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FolderAction) -> JSON { + switch value { + case .changeOptions: + var d = [String: JSON]() + d[".tag"] = .str("change_options") + return .dictionary(d) + case .disableViewerInfo: + var d = [String: JSON]() + d[".tag"] = .str("disable_viewer_info") + return .dictionary(d) + case .editContents: + var d = [String: JSON]() + d[".tag"] = .str("edit_contents") + return .dictionary(d) + case .enableViewerInfo: + var d = [String: JSON]() + d[".tag"] = .str("enable_viewer_info") + return .dictionary(d) + case .inviteEditor: + var d = [String: JSON]() + d[".tag"] = .str("invite_editor") + return .dictionary(d) + case .inviteViewer: + var d = [String: JSON]() + d[".tag"] = .str("invite_viewer") + return .dictionary(d) + case .inviteViewerNoComment: + var d = [String: JSON]() + d[".tag"] = .str("invite_viewer_no_comment") + return .dictionary(d) + case .relinquishMembership: + var d = [String: JSON]() + d[".tag"] = .str("relinquish_membership") + return .dictionary(d) + case .unmount: + var d = [String: JSON]() + d[".tag"] = .str("unmount") + return .dictionary(d) + case .unshare: + var d = [String: JSON]() + d[".tag"] = .str("unshare") + return .dictionary(d) + case .leaveACopy: + var d = [String: JSON]() + d[".tag"] = .str("leave_a_copy") + return .dictionary(d) + case .shareLink: + var d = [String: JSON]() + d[".tag"] = .str("share_link") + return .dictionary(d) + case .createLink: + var d = [String: JSON]() + d[".tag"] = .str("create_link") + return .dictionary(d) + case .setAccessInheritance: + var d = [String: JSON]() + d[".tag"] = .str("set_access_inheritance") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FolderAction { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "change_options": + return FolderAction.changeOptions + case "disable_viewer_info": + return FolderAction.disableViewerInfo + case "edit_contents": + return FolderAction.editContents + case "enable_viewer_info": + return FolderAction.enableViewerInfo + case "invite_editor": + return FolderAction.inviteEditor + case "invite_viewer": + return FolderAction.inviteViewer + case "invite_viewer_no_comment": + return FolderAction.inviteViewerNoComment + case "relinquish_membership": + return FolderAction.relinquishMembership + case "unmount": + return FolderAction.unmount + case "unshare": + return FolderAction.unshare + case "leave_a_copy": + return FolderAction.leaveACopy + case "share_link": + return FolderAction.shareLink + case "create_link": + return FolderAction.createLink + case "set_access_inheritance": + return FolderAction.setAccessInheritance + case "other": + return FolderAction.other + default: + return FolderAction.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The metadata of a folder shared link. + open class FolderLinkMetadata: Sharing.SharedLinkMetadata { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderLinkMetadataSerializer().serialize(self)))" + } + } + open class FolderLinkMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FolderLinkMetadata) -> JSON { + let output = [ + "url": Serialization._StringSerializer.serialize(value.url), + "name": Serialization._StringSerializer.serialize(value.name), + "link_permissions": Sharing.LinkPermissionsSerializer().serialize(value.linkPermissions), + "id": NullableSerializer(Serialization._StringSerializer).serialize(value.id), + "expires": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expires), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + "team_member_info": NullableSerializer(Sharing.TeamMemberInfoSerializer()).serialize(value.teamMemberInfo), + "content_owner_team_info": NullableSerializer(Users.TeamSerializer()).serialize(value.contentOwnerTeamInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FolderLinkMetadata { + switch json { + case .dictionary(let dict): + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let linkPermissions = Sharing.LinkPermissionsSerializer().deserialize(dict["link_permissions"] ?? .null) + let id = NullableSerializer(Serialization._StringSerializer).deserialize(dict["id"] ?? .null) + let expires = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expires"] ?? .null) + let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) + let teamMemberInfo = NullableSerializer(Sharing.TeamMemberInfoSerializer()).deserialize(dict["team_member_info"] ?? .null) + let contentOwnerTeamInfo = NullableSerializer(Users.TeamSerializer()).deserialize(dict["content_owner_team_info"] ?? .null) + return FolderLinkMetadata(url: url, name: name, linkPermissions: linkPermissions, id: id, expires: expires, pathLower: pathLower, teamMemberInfo: teamMemberInfo, contentOwnerTeamInfo: contentOwnerTeamInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// Whether the user is allowed to take the action on the shared folder. + open class FolderPermission: CustomStringConvertible { + /// The action that the user may wish to take on the folder. + public let action: Sharing.FolderAction + /// True if the user is allowed to take the action. + public let allow: Bool + /// The reason why the user is denied the permission. Not present if the action is allowed, or if no reason is + /// available. + public let reason: Sharing.PermissionDeniedReason? + public init(action: Sharing.FolderAction, allow: Bool, reason: Sharing.PermissionDeniedReason? = nil) { + self.action = action + self.allow = allow + self.reason = reason + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderPermissionSerializer().serialize(self)))" + } + } + open class FolderPermissionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FolderPermission) -> JSON { + let output = [ + "action": Sharing.FolderActionSerializer().serialize(value.action), + "allow": Serialization._BoolSerializer.serialize(value.allow), + "reason": NullableSerializer(Sharing.PermissionDeniedReasonSerializer()).serialize(value.reason), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FolderPermission { + switch json { + case .dictionary(let dict): + let action = Sharing.FolderActionSerializer().deserialize(dict["action"] ?? .null) + let allow = Serialization._BoolSerializer.deserialize(dict["allow"] ?? .null) + let reason = NullableSerializer(Sharing.PermissionDeniedReasonSerializer()).deserialize(dict["reason"] ?? .null) + return FolderPermission(action: action, allow: allow, reason: reason) + default: + fatalError("Type error deserializing") + } + } + } + + /// A set of policies governing membership and privileges for a shared folder. + open class FolderPolicy: CustomStringConvertible { + /// Who can be a member of this shared folder, as set on the folder itself. The effective policy may differ from + /// this value if the team-wide policy is more restrictive. Present only if the folder is owned by a team. + public let memberPolicy: Sharing.MemberPolicy? + /// Who can be a member of this shared folder, taking into account both the folder and the team-wide policy. + /// This value may differ from that of member_policy if the team-wide policy is more restrictive than the folder + /// policy. Present only if the folder is owned by a team. + public let resolvedMemberPolicy: Sharing.MemberPolicy? + /// Who can add and remove members from this shared folder. + public let aclUpdatePolicy: Sharing.AclUpdatePolicy + /// Who links can be shared with. + public let sharedLinkPolicy: Sharing.SharedLinkPolicy + /// Who can enable/disable viewer info for this shared folder. + public let viewerInfoPolicy: Sharing.ViewerInfoPolicy? + public init(aclUpdatePolicy: Sharing.AclUpdatePolicy, sharedLinkPolicy: Sharing.SharedLinkPolicy, memberPolicy: Sharing.MemberPolicy? = nil, resolvedMemberPolicy: Sharing.MemberPolicy? = nil, viewerInfoPolicy: Sharing.ViewerInfoPolicy? = nil) { + self.memberPolicy = memberPolicy + self.resolvedMemberPolicy = resolvedMemberPolicy + self.aclUpdatePolicy = aclUpdatePolicy + self.sharedLinkPolicy = sharedLinkPolicy + self.viewerInfoPolicy = viewerInfoPolicy + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderPolicySerializer().serialize(self)))" + } + } + open class FolderPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FolderPolicy) -> JSON { + let output = [ + "acl_update_policy": Sharing.AclUpdatePolicySerializer().serialize(value.aclUpdatePolicy), + "shared_link_policy": Sharing.SharedLinkPolicySerializer().serialize(value.sharedLinkPolicy), + "member_policy": NullableSerializer(Sharing.MemberPolicySerializer()).serialize(value.memberPolicy), + "resolved_member_policy": NullableSerializer(Sharing.MemberPolicySerializer()).serialize(value.resolvedMemberPolicy), + "viewer_info_policy": NullableSerializer(Sharing.ViewerInfoPolicySerializer()).serialize(value.viewerInfoPolicy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FolderPolicy { + switch json { + case .dictionary(let dict): + let aclUpdatePolicy = Sharing.AclUpdatePolicySerializer().deserialize(dict["acl_update_policy"] ?? .null) + let sharedLinkPolicy = Sharing.SharedLinkPolicySerializer().deserialize(dict["shared_link_policy"] ?? .null) + let memberPolicy = NullableSerializer(Sharing.MemberPolicySerializer()).deserialize(dict["member_policy"] ?? .null) + let resolvedMemberPolicy = NullableSerializer(Sharing.MemberPolicySerializer()).deserialize(dict["resolved_member_policy"] ?? .null) + let viewerInfoPolicy = NullableSerializer(Sharing.ViewerInfoPolicySerializer()).deserialize(dict["viewer_info_policy"] ?? .null) + return FolderPolicy(aclUpdatePolicy: aclUpdatePolicy, sharedLinkPolicy: sharedLinkPolicy, memberPolicy: memberPolicy, resolvedMemberPolicy: resolvedMemberPolicy, viewerInfoPolicy: viewerInfoPolicy) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments of getFileMetadata. + open class GetFileMetadataArg: CustomStringConvertible { + /// The file to query. + public let file: String + /// A list of `FileAction`s corresponding to `FilePermission`s that should appear in the response's permissions + /// in SharedFileMetadata field describing the actions the authenticated user can perform on the file. + public let actions: Array? + public init(file: String, actions: Array? = nil) { + stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?")(file) + self.file = file + self.actions = actions + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetFileMetadataArgSerializer().serialize(self)))" + } + } + open class GetFileMetadataArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetFileMetadataArg) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + "actions": NullableSerializer(ArraySerializer(Sharing.FileActionSerializer())).serialize(value.actions), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetFileMetadataArg { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + let actions = NullableSerializer(ArraySerializer(Sharing.FileActionSerializer())).deserialize(dict["actions"] ?? .null) + return GetFileMetadataArg(file: file, actions: actions) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments of getFileMetadataBatch. + open class GetFileMetadataBatchArg: CustomStringConvertible { + /// The files to query. + public let files: Array + /// A list of `FileAction`s corresponding to `FilePermission`s that should appear in the response's permissions + /// in SharedFileMetadata field describing the actions the authenticated user can perform on the file. + public let actions: Array? + public init(files: Array, actions: Array? = nil) { + arrayValidator(maxItems: 100, itemValidator: stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?"))(files) + self.files = files + self.actions = actions + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetFileMetadataBatchArgSerializer().serialize(self)))" + } + } + open class GetFileMetadataBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetFileMetadataBatchArg) -> JSON { + let output = [ + "files": ArraySerializer(Serialization._StringSerializer).serialize(value.files), + "actions": NullableSerializer(ArraySerializer(Sharing.FileActionSerializer())).serialize(value.actions), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetFileMetadataBatchArg { + switch json { + case .dictionary(let dict): + let files = ArraySerializer(Serialization._StringSerializer).deserialize(dict["files"] ?? .null) + let actions = NullableSerializer(ArraySerializer(Sharing.FileActionSerializer())).deserialize(dict["actions"] ?? .null) + return GetFileMetadataBatchArg(files: files, actions: actions) + default: + fatalError("Type error deserializing") + } + } + } + + /// Per file results of getFileMetadataBatch. + open class GetFileMetadataBatchResult: CustomStringConvertible { + /// This is the input file identifier corresponding to one of files in GetFileMetadataBatchArg. + public let file: String + /// The result for this particular file. + public let result: Sharing.GetFileMetadataIndividualResult + public init(file: String, result: Sharing.GetFileMetadataIndividualResult) { + stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?")(file) + self.file = file + self.result = result + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetFileMetadataBatchResultSerializer().serialize(self)))" + } + } + open class GetFileMetadataBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetFileMetadataBatchResult) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + "result": Sharing.GetFileMetadataIndividualResultSerializer().serialize(value.result), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetFileMetadataBatchResult { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + let result = Sharing.GetFileMetadataIndividualResultSerializer().deserialize(dict["result"] ?? .null) + return GetFileMetadataBatchResult(file: file, result: result) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error result for getFileMetadata. + public enum GetFileMetadataError: CustomStringConvertible { + /// An unspecified error. + case userError(Sharing.SharingUserError) + /// An unspecified error. + case accessError(Sharing.SharingFileAccessError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetFileMetadataErrorSerializer().serialize(self)))" + } + } + open class GetFileMetadataErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetFileMetadataError) -> JSON { + switch value { + case .userError(let arg): + var d = ["user_error": Sharing.SharingUserErrorSerializer().serialize(arg)] + d[".tag"] = .str("user_error") + return .dictionary(d) + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetFileMetadataError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_error": + let v = Sharing.SharingUserErrorSerializer().deserialize(d["user_error"] ?? .null) + return GetFileMetadataError.userError(v) + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return GetFileMetadataError.accessError(v) + case "other": + return GetFileMetadataError.other + default: + return GetFileMetadataError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetFileMetadataIndividualResult union + public enum GetFileMetadataIndividualResult: CustomStringConvertible { + /// The result for this file if it was successful. + case metadata(Sharing.SharedFileMetadata) + /// The result for this file if it was an error. + case accessError(Sharing.SharingFileAccessError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetFileMetadataIndividualResultSerializer().serialize(self)))" + } + } + open class GetFileMetadataIndividualResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetFileMetadataIndividualResult) -> JSON { + switch value { + case .metadata(let arg): + var d = Serialization.getFields(Sharing.SharedFileMetadataSerializer().serialize(arg)) + d[".tag"] = .str("metadata") + return .dictionary(d) + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetFileMetadataIndividualResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "metadata": + let v = Sharing.SharedFileMetadataSerializer().deserialize(json) + return GetFileMetadataIndividualResult.metadata(v) + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return GetFileMetadataIndividualResult.accessError(v) + case "other": + return GetFileMetadataIndividualResult.other + default: + return GetFileMetadataIndividualResult.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetMetadataArgs struct + open class GetMetadataArgs: CustomStringConvertible { + /// The ID for the shared folder. + public let sharedFolderId: String + /// A list of `FolderAction`s corresponding to `FolderPermission`s that should appear in the response's + /// permissions in SharedFolderMetadata field describing the actions the authenticated user can perform on the + /// folder. + public let actions: Array? + public init(sharedFolderId: String, actions: Array? = nil) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.actions = actions + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetMetadataArgsSerializer().serialize(self)))" + } + } + open class GetMetadataArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetMetadataArgs) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "actions": NullableSerializer(ArraySerializer(Sharing.FolderActionSerializer())).serialize(value.actions), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetMetadataArgs { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let actions = NullableSerializer(ArraySerializer(Sharing.FolderActionSerializer())).deserialize(dict["actions"] ?? .null) + return GetMetadataArgs(sharedFolderId: sharedFolderId, actions: actions) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkError union + public enum SharedLinkError: CustomStringConvertible { + /// The shared link wasn't found. + case sharedLinkNotFound + /// The caller is not allowed to access this shared link. + case sharedLinkAccessDenied + /// This type of link is not supported. + case unsupportedLinkType + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkErrorSerializer().serialize(self)))" + } + } + open class SharedLinkErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkError) -> JSON { + switch value { + case .sharedLinkNotFound: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_not_found") + return .dictionary(d) + case .sharedLinkAccessDenied: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_access_denied") + return .dictionary(d) + case .unsupportedLinkType: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_link_type") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedLinkError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "shared_link_not_found": + return SharedLinkError.sharedLinkNotFound + case "shared_link_access_denied": + return SharedLinkError.sharedLinkAccessDenied + case "unsupported_link_type": + return SharedLinkError.unsupportedLinkType + case "other": + return SharedLinkError.other + default: + return SharedLinkError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetSharedLinkFileError union + public enum GetSharedLinkFileError: CustomStringConvertible { + /// The shared link wasn't found. + case sharedLinkNotFound + /// The caller is not allowed to access this shared link. + case sharedLinkAccessDenied + /// This type of link is not supported. + case unsupportedLinkType + /// An unspecified error. + case other + /// Directories cannot be retrieved by this endpoint. + case sharedLinkIsDirectory + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetSharedLinkFileErrorSerializer().serialize(self)))" + } + } + open class GetSharedLinkFileErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetSharedLinkFileError) -> JSON { + switch value { + case .sharedLinkNotFound: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_not_found") + return .dictionary(d) + case .sharedLinkAccessDenied: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_access_denied") + return .dictionary(d) + case .unsupportedLinkType: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_link_type") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .sharedLinkIsDirectory: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_is_directory") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetSharedLinkFileError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "shared_link_not_found": + return GetSharedLinkFileError.sharedLinkNotFound + case "shared_link_access_denied": + return GetSharedLinkFileError.sharedLinkAccessDenied + case "unsupported_link_type": + return GetSharedLinkFileError.unsupportedLinkType + case "other": + return GetSharedLinkFileError.other + case "shared_link_is_directory": + return GetSharedLinkFileError.sharedLinkIsDirectory + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetSharedLinkMetadataArg struct + open class GetSharedLinkMetadataArg: CustomStringConvertible { + /// URL of the shared link. + public let url: String + /// If the shared link is to a folder, this parameter can be used to retrieve the metadata for a specific file + /// or sub-folder in this folder. A relative path should be used. + public let path: String? + /// If the shared link has a password, this parameter can be used. + public let linkPassword: String? + public init(url: String, path: String? = nil, linkPassword: String? = nil) { + stringValidator()(url) + self.url = url + nullableValidator(stringValidator(pattern: "/(.|[\\r\\n])*"))(path) + self.path = path + nullableValidator(stringValidator())(linkPassword) + self.linkPassword = linkPassword + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetSharedLinkMetadataArgSerializer().serialize(self)))" + } + } + open class GetSharedLinkMetadataArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetSharedLinkMetadataArg) -> JSON { + let output = [ + "url": Serialization._StringSerializer.serialize(value.url), + "path": NullableSerializer(Serialization._StringSerializer).serialize(value.path), + "link_password": NullableSerializer(Serialization._StringSerializer).serialize(value.linkPassword), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetSharedLinkMetadataArg { + switch json { + case .dictionary(let dict): + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let path = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path"] ?? .null) + let linkPassword = NullableSerializer(Serialization._StringSerializer).deserialize(dict["link_password"] ?? .null) + return GetSharedLinkMetadataArg(url: url, path: path, linkPassword: linkPassword) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetSharedLinksArg struct + open class GetSharedLinksArg: CustomStringConvertible { + /// See getSharedLinks description. + public let path: String? + public init(path: String? = nil) { + nullableValidator(stringValidator())(path) + self.path = path + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetSharedLinksArgSerializer().serialize(self)))" + } + } + open class GetSharedLinksArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetSharedLinksArg) -> JSON { + let output = [ + "path": NullableSerializer(Serialization._StringSerializer).serialize(value.path), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetSharedLinksArg { + switch json { + case .dictionary(let dict): + let path = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path"] ?? .null) + return GetSharedLinksArg(path: path) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetSharedLinksError union + public enum GetSharedLinksError: CustomStringConvertible { + /// An unspecified error. + case path(String?) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetSharedLinksErrorSerializer().serialize(self)))" + } + } + open class GetSharedLinksErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetSharedLinksError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": NullableSerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetSharedLinksError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = NullableSerializer(Serialization._StringSerializer).deserialize(d["path"] ?? .null) + return GetSharedLinksError.path(v) + case "other": + return GetSharedLinksError.other + default: + return GetSharedLinksError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetSharedLinksResult struct + open class GetSharedLinksResult: CustomStringConvertible { + /// Shared links applicable to the path argument. + public let links: Array + public init(links: Array) { + self.links = links + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetSharedLinksResultSerializer().serialize(self)))" + } + } + open class GetSharedLinksResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetSharedLinksResult) -> JSON { + let output = [ + "links": ArraySerializer(Sharing.LinkMetadataSerializer()).serialize(value.links), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetSharedLinksResult { + switch json { + case .dictionary(let dict): + let links = ArraySerializer(Sharing.LinkMetadataSerializer()).deserialize(dict["links"] ?? .null) + return GetSharedLinksResult(links: links) + default: + fatalError("Type error deserializing") + } + } + } + + /// The information about a group. Groups is a way to manage a list of users who need same access permission to the + /// shared folder. + open class GroupInfo: TeamCommon.GroupSummary { + /// The type of group. + public let groupType: TeamCommon.GroupType + /// If the current user is a member of the group. + public let isMember: Bool + /// If the current user is an owner of the group. + public let isOwner: Bool + /// If the group is owned by the current user's team. + public let sameTeam: Bool + public init(groupName: String, groupId: String, groupManagementType: TeamCommon.GroupManagementType, groupType: TeamCommon.GroupType, isMember: Bool, isOwner: Bool, sameTeam: Bool, groupExternalId: String? = nil, memberCount: UInt32? = nil) { + self.groupType = groupType + self.isMember = isMember + self.isOwner = isOwner + self.sameTeam = sameTeam + super.init(groupName: groupName, groupId: groupId, groupManagementType: groupManagementType, groupExternalId: groupExternalId, memberCount: memberCount) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupInfoSerializer().serialize(self)))" + } + } + open class GroupInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupInfo) -> JSON { + let output = [ + "group_name": Serialization._StringSerializer.serialize(value.groupName), + "group_id": Serialization._StringSerializer.serialize(value.groupId), + "group_management_type": TeamCommon.GroupManagementTypeSerializer().serialize(value.groupManagementType), + "group_type": TeamCommon.GroupTypeSerializer().serialize(value.groupType), + "is_member": Serialization._BoolSerializer.serialize(value.isMember), + "is_owner": Serialization._BoolSerializer.serialize(value.isOwner), + "same_team": Serialization._BoolSerializer.serialize(value.sameTeam), + "group_external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.groupExternalId), + "member_count": NullableSerializer(Serialization._UInt32Serializer).serialize(value.memberCount), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupInfo { + switch json { + case .dictionary(let dict): + let groupName = Serialization._StringSerializer.deserialize(dict["group_name"] ?? .null) + let groupId = Serialization._StringSerializer.deserialize(dict["group_id"] ?? .null) + let groupManagementType = TeamCommon.GroupManagementTypeSerializer().deserialize(dict["group_management_type"] ?? .null) + let groupType = TeamCommon.GroupTypeSerializer().deserialize(dict["group_type"] ?? .null) + let isMember = Serialization._BoolSerializer.deserialize(dict["is_member"] ?? .null) + let isOwner = Serialization._BoolSerializer.deserialize(dict["is_owner"] ?? .null) + let sameTeam = Serialization._BoolSerializer.deserialize(dict["same_team"] ?? .null) + let groupExternalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["group_external_id"] ?? .null) + let memberCount = NullableSerializer(Serialization._UInt32Serializer).deserialize(dict["member_count"] ?? .null) + return GroupInfo(groupName: groupName, groupId: groupId, groupManagementType: groupManagementType, groupType: groupType, isMember: isMember, isOwner: isOwner, sameTeam: sameTeam, groupExternalId: groupExternalId, memberCount: memberCount) + default: + fatalError("Type error deserializing") + } + } + } + + /// The information about a member of the shared content. + open class MembershipInfo: CustomStringConvertible { + /// The access type for this member. It contains inherited access type from parent folder, and acquired access + /// type from this folder. + public let accessType: Sharing.AccessLevel + /// The permissions that requesting user has on this member. The set of permissions corresponds to the + /// MemberActions in the request. + public let permissions: Array? + /// Never set. + public let initials: String? + /// True if the member has access from a parent folder. + public let isInherited: Bool + public init(accessType: Sharing.AccessLevel, permissions: Array? = nil, initials: String? = nil, isInherited: Bool = false) { + self.accessType = accessType + self.permissions = permissions + nullableValidator(stringValidator())(initials) + self.initials = initials + self.isInherited = isInherited + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembershipInfoSerializer().serialize(self)))" + } + } + open class MembershipInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembershipInfo) -> JSON { + let output = [ + "access_type": Sharing.AccessLevelSerializer().serialize(value.accessType), + "permissions": NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).serialize(value.permissions), + "initials": NullableSerializer(Serialization._StringSerializer).serialize(value.initials), + "is_inherited": Serialization._BoolSerializer.serialize(value.isInherited), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembershipInfo { + switch json { + case .dictionary(let dict): + let accessType = Sharing.AccessLevelSerializer().deserialize(dict["access_type"] ?? .null) + let permissions = NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).deserialize(dict["permissions"] ?? .null) + let initials = NullableSerializer(Serialization._StringSerializer).deserialize(dict["initials"] ?? .null) + let isInherited = Serialization._BoolSerializer.deserialize(dict["is_inherited"] ?? .number(0)) + return MembershipInfo(accessType: accessType, permissions: permissions, initials: initials, isInherited: isInherited) + default: + fatalError("Type error deserializing") + } + } + } + + /// The information about a group member of the shared content. + open class GroupMembershipInfo: Sharing.MembershipInfo { + /// The information about the membership group. + public let group: Sharing.GroupInfo + public init(accessType: Sharing.AccessLevel, group: Sharing.GroupInfo, permissions: Array? = nil, initials: String? = nil, isInherited: Bool = false) { + self.group = group + super.init(accessType: accessType, permissions: permissions, initials: initials, isInherited: isInherited) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMembershipInfoSerializer().serialize(self)))" + } + } + open class GroupMembershipInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMembershipInfo) -> JSON { + let output = [ + "access_type": Sharing.AccessLevelSerializer().serialize(value.accessType), + "group": Sharing.GroupInfoSerializer().serialize(value.group), + "permissions": NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).serialize(value.permissions), + "initials": NullableSerializer(Serialization._StringSerializer).serialize(value.initials), + "is_inherited": Serialization._BoolSerializer.serialize(value.isInherited), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMembershipInfo { + switch json { + case .dictionary(let dict): + let accessType = Sharing.AccessLevelSerializer().deserialize(dict["access_type"] ?? .null) + let group = Sharing.GroupInfoSerializer().deserialize(dict["group"] ?? .null) + let permissions = NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).deserialize(dict["permissions"] ?? .null) + let initials = NullableSerializer(Serialization._StringSerializer).deserialize(dict["initials"] ?? .null) + let isInherited = Serialization._BoolSerializer.deserialize(dict["is_inherited"] ?? .number(0)) + return GroupMembershipInfo(accessType: accessType, group: group, permissions: permissions, initials: initials, isInherited: isInherited) + default: + fatalError("Type error deserializing") + } + } + } + + /// The InsufficientPlan struct + open class InsufficientPlan: CustomStringConvertible { + /// A message to tell the user to upgrade in order to support expected action. + public let message: String + /// A URL to send the user to in order to obtain the account type they need, e.g. upgrading. Absent if there is + /// no action the user can take to upgrade. + public let upsellUrl: String? + public init(message: String, upsellUrl: String? = nil) { + stringValidator()(message) + self.message = message + nullableValidator(stringValidator())(upsellUrl) + self.upsellUrl = upsellUrl + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(InsufficientPlanSerializer().serialize(self)))" + } + } + open class InsufficientPlanSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: InsufficientPlan) -> JSON { + let output = [ + "message": Serialization._StringSerializer.serialize(value.message), + "upsell_url": NullableSerializer(Serialization._StringSerializer).serialize(value.upsellUrl), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> InsufficientPlan { + switch json { + case .dictionary(let dict): + let message = Serialization._StringSerializer.deserialize(dict["message"] ?? .null) + let upsellUrl = NullableSerializer(Serialization._StringSerializer).deserialize(dict["upsell_url"] ?? .null) + return InsufficientPlan(message: message, upsellUrl: upsellUrl) + default: + fatalError("Type error deserializing") + } + } + } + + /// The InsufficientQuotaAmounts struct + open class InsufficientQuotaAmounts: CustomStringConvertible { + /// The amount of space needed to add the item (the size of the item). + public let spaceNeeded: UInt64 + /// The amount of extra space needed to add the item. + public let spaceShortage: UInt64 + /// The amount of space left in the user's Dropbox, less than space_needed. + public let spaceLeft: UInt64 + public init(spaceNeeded: UInt64, spaceShortage: UInt64, spaceLeft: UInt64) { + comparableValidator()(spaceNeeded) + self.spaceNeeded = spaceNeeded + comparableValidator()(spaceShortage) + self.spaceShortage = spaceShortage + comparableValidator()(spaceLeft) + self.spaceLeft = spaceLeft + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(InsufficientQuotaAmountsSerializer().serialize(self)))" + } + } + open class InsufficientQuotaAmountsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: InsufficientQuotaAmounts) -> JSON { + let output = [ + "space_needed": Serialization._UInt64Serializer.serialize(value.spaceNeeded), + "space_shortage": Serialization._UInt64Serializer.serialize(value.spaceShortage), + "space_left": Serialization._UInt64Serializer.serialize(value.spaceLeft), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> InsufficientQuotaAmounts { + switch json { + case .dictionary(let dict): + let spaceNeeded = Serialization._UInt64Serializer.deserialize(dict["space_needed"] ?? .null) + let spaceShortage = Serialization._UInt64Serializer.deserialize(dict["space_shortage"] ?? .null) + let spaceLeft = Serialization._UInt64Serializer.deserialize(dict["space_left"] ?? .null) + return InsufficientQuotaAmounts(spaceNeeded: spaceNeeded, spaceShortage: spaceShortage, spaceLeft: spaceLeft) + default: + fatalError("Type error deserializing") + } + } + } + + /// Information about the recipient of a shared content invitation. + public enum InviteeInfo: CustomStringConvertible { + /// E-mail address of invited user. + case email(String) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(InviteeInfoSerializer().serialize(self)))" + } + } + open class InviteeInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: InviteeInfo) -> JSON { + switch value { + case .email(let arg): + var d = ["email": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("email") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> InviteeInfo { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "email": + let v = Serialization._StringSerializer.deserialize(d["email"] ?? .null) + return InviteeInfo.email(v) + case "other": + return InviteeInfo.other + default: + return InviteeInfo.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information about an invited member of a shared content. + open class InviteeMembershipInfo: Sharing.MembershipInfo { + /// Recipient of the invitation. + public let invitee: Sharing.InviteeInfo + /// The user this invitation is tied to, if available. + public let user: Sharing.UserInfo? + public init(accessType: Sharing.AccessLevel, invitee: Sharing.InviteeInfo, permissions: Array? = nil, initials: String? = nil, isInherited: Bool = false, user: Sharing.UserInfo? = nil) { + self.invitee = invitee + self.user = user + super.init(accessType: accessType, permissions: permissions, initials: initials, isInherited: isInherited) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(InviteeMembershipInfoSerializer().serialize(self)))" + } + } + open class InviteeMembershipInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: InviteeMembershipInfo) -> JSON { + let output = [ + "access_type": Sharing.AccessLevelSerializer().serialize(value.accessType), + "invitee": Sharing.InviteeInfoSerializer().serialize(value.invitee), + "permissions": NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).serialize(value.permissions), + "initials": NullableSerializer(Serialization._StringSerializer).serialize(value.initials), + "is_inherited": Serialization._BoolSerializer.serialize(value.isInherited), + "user": NullableSerializer(Sharing.UserInfoSerializer()).serialize(value.user), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> InviteeMembershipInfo { + switch json { + case .dictionary(let dict): + let accessType = Sharing.AccessLevelSerializer().deserialize(dict["access_type"] ?? .null) + let invitee = Sharing.InviteeInfoSerializer().deserialize(dict["invitee"] ?? .null) + let permissions = NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).deserialize(dict["permissions"] ?? .null) + let initials = NullableSerializer(Serialization._StringSerializer).deserialize(dict["initials"] ?? .null) + let isInherited = Serialization._BoolSerializer.deserialize(dict["is_inherited"] ?? .number(0)) + let user = NullableSerializer(Sharing.UserInfoSerializer()).deserialize(dict["user"] ?? .null) + return InviteeMembershipInfo(accessType: accessType, invitee: invitee, permissions: permissions, initials: initials, isInherited: isInherited, user: user) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error occurred while performing an asynchronous job from unshareFolder or removeFolderMember. + public enum JobError: CustomStringConvertible { + /// Error occurred while performing unshareFolder action. + case unshareFolderError(Sharing.UnshareFolderError) + /// Error occurred while performing removeFolderMember action. + case removeFolderMemberError(Sharing.RemoveFolderMemberError) + /// Error occurred while performing relinquishFolderMembership action. + case relinquishFolderMembershipError(Sharing.RelinquishFolderMembershipError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(JobErrorSerializer().serialize(self)))" + } + } + open class JobErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: JobError) -> JSON { + switch value { + case .unshareFolderError(let arg): + var d = ["unshare_folder_error": Sharing.UnshareFolderErrorSerializer().serialize(arg)] + d[".tag"] = .str("unshare_folder_error") + return .dictionary(d) + case .removeFolderMemberError(let arg): + var d = ["remove_folder_member_error": Sharing.RemoveFolderMemberErrorSerializer().serialize(arg)] + d[".tag"] = .str("remove_folder_member_error") + return .dictionary(d) + case .relinquishFolderMembershipError(let arg): + var d = ["relinquish_folder_membership_error": Sharing.RelinquishFolderMembershipErrorSerializer().serialize(arg)] + d[".tag"] = .str("relinquish_folder_membership_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> JobError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "unshare_folder_error": + let v = Sharing.UnshareFolderErrorSerializer().deserialize(d["unshare_folder_error"] ?? .null) + return JobError.unshareFolderError(v) + case "remove_folder_member_error": + let v = Sharing.RemoveFolderMemberErrorSerializer().deserialize(d["remove_folder_member_error"] ?? .null) + return JobError.removeFolderMemberError(v) + case "relinquish_folder_membership_error": + let v = Sharing.RelinquishFolderMembershipErrorSerializer().deserialize(d["relinquish_folder_membership_error"] ?? .null) + return JobError.relinquishFolderMembershipError(v) + case "other": + return JobError.other + default: + return JobError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The JobStatus union + public enum JobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The asynchronous job has finished. + case complete + /// The asynchronous job returned an error. + case failed(Sharing.JobError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(JobStatusSerializer().serialize(self)))" + } + } + open class JobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: JobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete: + var d = [String: JSON]() + d[".tag"] = .str("complete") + return .dictionary(d) + case .failed(let arg): + var d = ["failed": Sharing.JobErrorSerializer().serialize(arg)] + d[".tag"] = .str("failed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> JobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return JobStatus.inProgress + case "complete": + return JobStatus.complete + case "failed": + let v = Sharing.JobErrorSerializer().deserialize(d["failed"] ?? .null) + return JobStatus.failed(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Actions that can be performed on a link. + public enum LinkAction: CustomStringConvertible { + /// Change the access level of the link. + case changeAccessLevel + /// Change the audience of the link. + case changeAudience + /// Remove the expiry date of the link. + case removeExpiry + /// Remove the password of the link. + case removePassword + /// Create or modify the expiry date of the link. + case setExpiry + /// Create or modify the password of the link. + case setPassword + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LinkActionSerializer().serialize(self)))" + } + } + open class LinkActionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LinkAction) -> JSON { + switch value { + case .changeAccessLevel: + var d = [String: JSON]() + d[".tag"] = .str("change_access_level") + return .dictionary(d) + case .changeAudience: + var d = [String: JSON]() + d[".tag"] = .str("change_audience") + return .dictionary(d) + case .removeExpiry: + var d = [String: JSON]() + d[".tag"] = .str("remove_expiry") + return .dictionary(d) + case .removePassword: + var d = [String: JSON]() + d[".tag"] = .str("remove_password") + return .dictionary(d) + case .setExpiry: + var d = [String: JSON]() + d[".tag"] = .str("set_expiry") + return .dictionary(d) + case .setPassword: + var d = [String: JSON]() + d[".tag"] = .str("set_password") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LinkAction { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "change_access_level": + return LinkAction.changeAccessLevel + case "change_audience": + return LinkAction.changeAudience + case "remove_expiry": + return LinkAction.removeExpiry + case "remove_password": + return LinkAction.removePassword + case "set_expiry": + return LinkAction.setExpiry + case "set_password": + return LinkAction.setPassword + case "other": + return LinkAction.other + default: + return LinkAction.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The LinkAudience union + public enum LinkAudience: CustomStringConvertible { + /// Link is accessible by anyone. + case public_ + /// Link is accessible only by team members. + case team + /// The link can be used by no one. The link merely points the user to the content, and does not grant + /// additional rights to the user. Members of the content who use this link can only access the content with + /// their pre-existing access rights. + case noOne + /// Link is accessible only by members of the content. + case members + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LinkAudienceSerializer().serialize(self)))" + } + } + open class LinkAudienceSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LinkAudience) -> JSON { + switch value { + case .public_: + var d = [String: JSON]() + d[".tag"] = .str("public") + return .dictionary(d) + case .team: + var d = [String: JSON]() + d[".tag"] = .str("team") + return .dictionary(d) + case .noOne: + var d = [String: JSON]() + d[".tag"] = .str("no_one") + return .dictionary(d) + case .members: + var d = [String: JSON]() + d[".tag"] = .str("members") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LinkAudience { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "public": + return LinkAudience.public_ + case "team": + return LinkAudience.team + case "no_one": + return LinkAudience.noOne + case "members": + return LinkAudience.members + case "other": + return LinkAudience.other + default: + return LinkAudience.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The LinkExpiry union + public enum LinkExpiry: CustomStringConvertible { + /// Remove the currently set expiry for the link. + case removeExpiry + /// Set a new expiry or change an existing expiry. + case setExpiry(Date) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LinkExpirySerializer().serialize(self)))" + } + } + open class LinkExpirySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LinkExpiry) -> JSON { + switch value { + case .removeExpiry: + var d = [String: JSON]() + d[".tag"] = .str("remove_expiry") + return .dictionary(d) + case .setExpiry(let arg): + var d = ["set_expiry": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(arg)] + d[".tag"] = .str("set_expiry") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LinkExpiry { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "remove_expiry": + return LinkExpiry.removeExpiry + case "set_expiry": + let v = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(d["set_expiry"] ?? .null) + return LinkExpiry.setExpiry(v) + case "other": + return LinkExpiry.other + default: + return LinkExpiry.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The LinkPassword union + public enum LinkPassword: CustomStringConvertible { + /// Remove the currently set password for the link. + case removePassword + /// Set a new password or change an existing password. + case setPassword(String) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LinkPasswordSerializer().serialize(self)))" + } + } + open class LinkPasswordSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LinkPassword) -> JSON { + switch value { + case .removePassword: + var d = [String: JSON]() + d[".tag"] = .str("remove_password") + return .dictionary(d) + case .setPassword(let arg): + var d = ["set_password": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("set_password") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LinkPassword { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "remove_password": + return LinkPassword.removePassword + case "set_password": + let v = Serialization._StringSerializer.deserialize(d["set_password"] ?? .null) + return LinkPassword.setPassword(v) + case "other": + return LinkPassword.other + default: + return LinkPassword.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Permissions for actions that can be performed on a link. + open class LinkPermission: CustomStringConvertible { + /// (no description) + public let action: Sharing.LinkAction + /// (no description) + public let allow: Bool + /// (no description) + public let reason: Sharing.PermissionDeniedReason? + public init(action: Sharing.LinkAction, allow: Bool, reason: Sharing.PermissionDeniedReason? = nil) { + self.action = action + self.allow = allow + self.reason = reason + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LinkPermissionSerializer().serialize(self)))" + } + } + open class LinkPermissionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LinkPermission) -> JSON { + let output = [ + "action": Sharing.LinkActionSerializer().serialize(value.action), + "allow": Serialization._BoolSerializer.serialize(value.allow), + "reason": NullableSerializer(Sharing.PermissionDeniedReasonSerializer()).serialize(value.reason), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LinkPermission { + switch json { + case .dictionary(let dict): + let action = Sharing.LinkActionSerializer().deserialize(dict["action"] ?? .null) + let allow = Serialization._BoolSerializer.deserialize(dict["allow"] ?? .null) + let reason = NullableSerializer(Sharing.PermissionDeniedReasonSerializer()).deserialize(dict["reason"] ?? .null) + return LinkPermission(action: action, allow: allow, reason: reason) + default: + fatalError("Type error deserializing") + } + } + } + + /// The LinkPermissions struct + open class LinkPermissions: CustomStringConvertible { + /// The current visibility of the link after considering the shared links policies of the the team (in case the + /// link's owner is part of a team) and the shared folder (in case the linked file is part of a shared folder). + /// This field is shown only if the caller has access to this info (the link's owner always has access to this + /// data). + public let resolvedVisibility: Sharing.ResolvedVisibility? + /// The shared link's requested visibility. This can be overridden by the team and shared folder policies. The + /// final visibility, after considering these policies, can be found in resolvedVisibility. This is shown only + /// if the caller is the link's owner. + public let requestedVisibility: Sharing.RequestedVisibility? + /// Whether the caller can revoke the shared link. + public let canRevoke: Bool + /// The failure reason for revoking the link. This field will only be present if the canRevoke is false. + public let revokeFailureReason: Sharing.SharedLinkAccessFailureReason? + public init(canRevoke: Bool, resolvedVisibility: Sharing.ResolvedVisibility? = nil, requestedVisibility: Sharing.RequestedVisibility? = nil, revokeFailureReason: Sharing.SharedLinkAccessFailureReason? = nil) { + self.resolvedVisibility = resolvedVisibility + self.requestedVisibility = requestedVisibility + self.canRevoke = canRevoke + self.revokeFailureReason = revokeFailureReason + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LinkPermissionsSerializer().serialize(self)))" + } + } + open class LinkPermissionsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LinkPermissions) -> JSON { + let output = [ + "can_revoke": Serialization._BoolSerializer.serialize(value.canRevoke), + "resolved_visibility": NullableSerializer(Sharing.ResolvedVisibilitySerializer()).serialize(value.resolvedVisibility), + "requested_visibility": NullableSerializer(Sharing.RequestedVisibilitySerializer()).serialize(value.requestedVisibility), + "revoke_failure_reason": NullableSerializer(Sharing.SharedLinkAccessFailureReasonSerializer()).serialize(value.revokeFailureReason), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LinkPermissions { + switch json { + case .dictionary(let dict): + let canRevoke = Serialization._BoolSerializer.deserialize(dict["can_revoke"] ?? .null) + let resolvedVisibility = NullableSerializer(Sharing.ResolvedVisibilitySerializer()).deserialize(dict["resolved_visibility"] ?? .null) + let requestedVisibility = NullableSerializer(Sharing.RequestedVisibilitySerializer()).deserialize(dict["requested_visibility"] ?? .null) + let revokeFailureReason = NullableSerializer(Sharing.SharedLinkAccessFailureReasonSerializer()).deserialize(dict["revoke_failure_reason"] ?? .null) + return LinkPermissions(canRevoke: canRevoke, resolvedVisibility: resolvedVisibility, requestedVisibility: requestedVisibility, revokeFailureReason: revokeFailureReason) + default: + fatalError("Type error deserializing") + } + } + } + + /// Settings that apply to a link. + open class LinkSettings: CustomStringConvertible { + /// The access level on the link for this file. Currently, it only accepts 'viewer' and 'viewer_no_comment'. + public let accessLevel: Sharing.AccessLevel? + /// The type of audience on the link for this file. + public let audience: Sharing.LinkAudience? + /// An expiry timestamp to set on a link. + public let expiry: Sharing.LinkExpiry? + /// The password for the link. + public let password: Sharing.LinkPassword? + public init(accessLevel: Sharing.AccessLevel? = nil, audience: Sharing.LinkAudience? = nil, expiry: Sharing.LinkExpiry? = nil, password: Sharing.LinkPassword? = nil) { + self.accessLevel = accessLevel + self.audience = audience + self.expiry = expiry + self.password = password + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LinkSettingsSerializer().serialize(self)))" + } + } + open class LinkSettingsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LinkSettings) -> JSON { + let output = [ + "access_level": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(value.accessLevel), + "audience": NullableSerializer(Sharing.LinkAudienceSerializer()).serialize(value.audience), + "expiry": NullableSerializer(Sharing.LinkExpirySerializer()).serialize(value.expiry), + "password": NullableSerializer(Sharing.LinkPasswordSerializer()).serialize(value.password), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LinkSettings { + switch json { + case .dictionary(let dict): + let accessLevel = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(dict["access_level"] ?? .null) + let audience = NullableSerializer(Sharing.LinkAudienceSerializer()).deserialize(dict["audience"] ?? .null) + let expiry = NullableSerializer(Sharing.LinkExpirySerializer()).deserialize(dict["expiry"] ?? .null) + let password = NullableSerializer(Sharing.LinkPasswordSerializer()).deserialize(dict["password"] ?? .null) + return LinkSettings(accessLevel: accessLevel, audience: audience, expiry: expiry, password: password) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for listFileMembers. + open class ListFileMembersArg: CustomStringConvertible { + /// The file for which you want to see members. + public let file: String + /// The actions for which to return permissions on a member. + public let actions: Array? + /// Whether to include members who only have access from a parent shared folder. + public let includeInherited: Bool + /// Number of members to return max per query. Defaults to 100 if no limit is specified. + public let limit: UInt32 + public init(file: String, actions: Array? = nil, includeInherited: Bool = true, limit: UInt32 = 100) { + stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?")(file) + self.file = file + self.actions = actions + self.includeInherited = includeInherited + comparableValidator(minValue: 1, maxValue: 300)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileMembersArgSerializer().serialize(self)))" + } + } + open class ListFileMembersArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileMembersArg) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + "actions": NullableSerializer(ArraySerializer(Sharing.MemberActionSerializer())).serialize(value.actions), + "include_inherited": Serialization._BoolSerializer.serialize(value.includeInherited), + "limit": Serialization._UInt32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFileMembersArg { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + let actions = NullableSerializer(ArraySerializer(Sharing.MemberActionSerializer())).deserialize(dict["actions"] ?? .null) + let includeInherited = Serialization._BoolSerializer.deserialize(dict["include_inherited"] ?? .number(1)) + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(100)) + return ListFileMembersArg(file: file, actions: actions, includeInherited: includeInherited, limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for listFileMembersBatch. + open class ListFileMembersBatchArg: CustomStringConvertible { + /// Files for which to return members. + public let files: Array + /// Number of members to return max per query. Defaults to 10 if no limit is specified. + public let limit: UInt32 + public init(files: Array, limit: UInt32 = 10) { + arrayValidator(maxItems: 100, itemValidator: stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?"))(files) + self.files = files + comparableValidator(maxValue: 20)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileMembersBatchArgSerializer().serialize(self)))" + } + } + open class ListFileMembersBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileMembersBatchArg) -> JSON { + let output = [ + "files": ArraySerializer(Serialization._StringSerializer).serialize(value.files), + "limit": Serialization._UInt32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFileMembersBatchArg { + switch json { + case .dictionary(let dict): + let files = ArraySerializer(Serialization._StringSerializer).deserialize(dict["files"] ?? .null) + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(10)) + return ListFileMembersBatchArg(files: files, limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// Per-file result for listFileMembersBatch. + open class ListFileMembersBatchResult: CustomStringConvertible { + /// This is the input file identifier, whether an ID or a path. + public let file: String + /// The result for this particular file. + public let result: Sharing.ListFileMembersIndividualResult + public init(file: String, result: Sharing.ListFileMembersIndividualResult) { + stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?")(file) + self.file = file + self.result = result + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileMembersBatchResultSerializer().serialize(self)))" + } + } + open class ListFileMembersBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileMembersBatchResult) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + "result": Sharing.ListFileMembersIndividualResultSerializer().serialize(value.result), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFileMembersBatchResult { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + let result = Sharing.ListFileMembersIndividualResultSerializer().deserialize(dict["result"] ?? .null) + return ListFileMembersBatchResult(file: file, result: result) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for listFileMembersContinue. + open class ListFileMembersContinueArg: CustomStringConvertible { + /// The cursor returned by your last call to listFileMembers, listFileMembersContinue, or listFileMembersBatch. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileMembersContinueArgSerializer().serialize(self)))" + } + } + open class ListFileMembersContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileMembersContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFileMembersContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ListFileMembersContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error for listFileMembersContinue. + public enum ListFileMembersContinueError: CustomStringConvertible { + /// An unspecified error. + case userError(Sharing.SharingUserError) + /// An unspecified error. + case accessError(Sharing.SharingFileAccessError) + /// cursor in ListFileMembersContinueArg is invalid. + case invalidCursor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileMembersContinueErrorSerializer().serialize(self)))" + } + } + open class ListFileMembersContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileMembersContinueError) -> JSON { + switch value { + case .userError(let arg): + var d = ["user_error": Sharing.SharingUserErrorSerializer().serialize(arg)] + d[".tag"] = .str("user_error") + return .dictionary(d) + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFileMembersContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_error": + let v = Sharing.SharingUserErrorSerializer().deserialize(d["user_error"] ?? .null) + return ListFileMembersContinueError.userError(v) + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return ListFileMembersContinueError.accessError(v) + case "invalid_cursor": + return ListFileMembersContinueError.invalidCursor + case "other": + return ListFileMembersContinueError.other + default: + return ListFileMembersContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListFileMembersCountResult struct + open class ListFileMembersCountResult: CustomStringConvertible { + /// A list of members on this file. + public let members: Sharing.SharedFileMembers + /// The number of members on this file. This does not include inherited members. + public let memberCount: UInt32 + public init(members: Sharing.SharedFileMembers, memberCount: UInt32) { + self.members = members + comparableValidator()(memberCount) + self.memberCount = memberCount + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileMembersCountResultSerializer().serialize(self)))" + } + } + open class ListFileMembersCountResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileMembersCountResult) -> JSON { + let output = [ + "members": Sharing.SharedFileMembersSerializer().serialize(value.members), + "member_count": Serialization._UInt32Serializer.serialize(value.memberCount), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFileMembersCountResult { + switch json { + case .dictionary(let dict): + let members = Sharing.SharedFileMembersSerializer().deserialize(dict["members"] ?? .null) + let memberCount = Serialization._UInt32Serializer.deserialize(dict["member_count"] ?? .null) + return ListFileMembersCountResult(members: members, memberCount: memberCount) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error for listFileMembers. + public enum ListFileMembersError: CustomStringConvertible { + /// An unspecified error. + case userError(Sharing.SharingUserError) + /// An unspecified error. + case accessError(Sharing.SharingFileAccessError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileMembersErrorSerializer().serialize(self)))" + } + } + open class ListFileMembersErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileMembersError) -> JSON { + switch value { + case .userError(let arg): + var d = ["user_error": Sharing.SharingUserErrorSerializer().serialize(arg)] + d[".tag"] = .str("user_error") + return .dictionary(d) + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFileMembersError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_error": + let v = Sharing.SharingUserErrorSerializer().deserialize(d["user_error"] ?? .null) + return ListFileMembersError.userError(v) + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return ListFileMembersError.accessError(v) + case "other": + return ListFileMembersError.other + default: + return ListFileMembersError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListFileMembersIndividualResult union + public enum ListFileMembersIndividualResult: CustomStringConvertible { + /// The results of the query for this file if it was successful. + case result(Sharing.ListFileMembersCountResult) + /// The result of the query for this file if it was an error. + case accessError(Sharing.SharingFileAccessError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFileMembersIndividualResultSerializer().serialize(self)))" + } + } + open class ListFileMembersIndividualResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFileMembersIndividualResult) -> JSON { + switch value { + case .result(let arg): + var d = Serialization.getFields(Sharing.ListFileMembersCountResultSerializer().serialize(arg)) + d[".tag"] = .str("result") + return .dictionary(d) + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFileMembersIndividualResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "result": + let v = Sharing.ListFileMembersCountResultSerializer().deserialize(json) + return ListFileMembersIndividualResult.result(v) + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return ListFileMembersIndividualResult.accessError(v) + case "other": + return ListFileMembersIndividualResult.other + default: + return ListFileMembersIndividualResult.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Arguments for listReceivedFiles. + open class ListFilesArg: CustomStringConvertible { + /// Number of files to return max per query. Defaults to 100 if no limit is specified. + public let limit: UInt32 + /// A list of `FileAction`s corresponding to `FilePermission`s that should appear in the response's permissions + /// in SharedFileMetadata field describing the actions the authenticated user can perform on the file. + public let actions: Array? + public init(limit: UInt32 = 100, actions: Array? = nil) { + comparableValidator(minValue: 1, maxValue: 300)(limit) + self.limit = limit + self.actions = actions + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFilesArgSerializer().serialize(self)))" + } + } + open class ListFilesArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFilesArg) -> JSON { + let output = [ + "limit": Serialization._UInt32Serializer.serialize(value.limit), + "actions": NullableSerializer(ArraySerializer(Sharing.FileActionSerializer())).serialize(value.actions), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFilesArg { + switch json { + case .dictionary(let dict): + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(100)) + let actions = NullableSerializer(ArraySerializer(Sharing.FileActionSerializer())).deserialize(dict["actions"] ?? .null) + return ListFilesArg(limit: limit, actions: actions) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for listReceivedFilesContinue. + open class ListFilesContinueArg: CustomStringConvertible { + /// Cursor in cursor in ListFilesResult. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFilesContinueArgSerializer().serialize(self)))" + } + } + open class ListFilesContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFilesContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFilesContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ListFilesContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error results for listReceivedFilesContinue. + public enum ListFilesContinueError: CustomStringConvertible { + /// User account had a problem. + case userError(Sharing.SharingUserError) + /// cursor in ListFilesContinueArg is invalid. + case invalidCursor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFilesContinueErrorSerializer().serialize(self)))" + } + } + open class ListFilesContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFilesContinueError) -> JSON { + switch value { + case .userError(let arg): + var d = ["user_error": Sharing.SharingUserErrorSerializer().serialize(arg)] + d[".tag"] = .str("user_error") + return .dictionary(d) + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFilesContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_error": + let v = Sharing.SharingUserErrorSerializer().deserialize(d["user_error"] ?? .null) + return ListFilesContinueError.userError(v) + case "invalid_cursor": + return ListFilesContinueError.invalidCursor + case "other": + return ListFilesContinueError.other + default: + return ListFilesContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Success results for listReceivedFiles. + open class ListFilesResult: CustomStringConvertible { + /// Information about the files shared with current user. + public let entries: Array + /// Cursor used to obtain additional shared files. + public let cursor: String? + public init(entries: Array, cursor: String? = nil) { + self.entries = entries + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFilesResultSerializer().serialize(self)))" + } + } + open class ListFilesResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFilesResult) -> JSON { + let output = [ + "entries": ArraySerializer(Sharing.SharedFileMetadataSerializer()).serialize(value.entries), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFilesResult { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Sharing.SharedFileMetadataSerializer()).deserialize(dict["entries"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ListFilesResult(entries: entries, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderMembersCursorArg struct + open class ListFolderMembersCursorArg: CustomStringConvertible { + /// This is a list indicating whether each returned member will include a boolean value allow in + /// MemberPermission that describes whether the current user can perform the MemberAction on the member. + public let actions: Array? + /// The maximum number of results that include members, groups and invitees to return per request. + public let limit: UInt32 + public init(actions: Array? = nil, limit: UInt32 = 1000) { + self.actions = actions + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderMembersCursorArgSerializer().serialize(self)))" + } + } + open class ListFolderMembersCursorArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderMembersCursorArg) -> JSON { + let output = [ + "actions": NullableSerializer(ArraySerializer(Sharing.MemberActionSerializer())).serialize(value.actions), + "limit": Serialization._UInt32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFolderMembersCursorArg { + switch json { + case .dictionary(let dict): + let actions = NullableSerializer(ArraySerializer(Sharing.MemberActionSerializer())).deserialize(dict["actions"] ?? .null) + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + return ListFolderMembersCursorArg(actions: actions, limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderMembersArgs struct + open class ListFolderMembersArgs: Sharing.ListFolderMembersCursorArg { + /// The ID for the shared folder. + public let sharedFolderId: String + public init(sharedFolderId: String, actions: Array? = nil, limit: UInt32 = 1000) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + super.init(actions: actions, limit: limit) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderMembersArgsSerializer().serialize(self)))" + } + } + open class ListFolderMembersArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderMembersArgs) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "actions": NullableSerializer(ArraySerializer(Sharing.MemberActionSerializer())).serialize(value.actions), + "limit": Serialization._UInt32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFolderMembersArgs { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let actions = NullableSerializer(ArraySerializer(Sharing.MemberActionSerializer())).deserialize(dict["actions"] ?? .null) + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + return ListFolderMembersArgs(sharedFolderId: sharedFolderId, actions: actions, limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderMembersContinueArg struct + open class ListFolderMembersContinueArg: CustomStringConvertible { + /// The cursor returned by your last call to listFolderMembers or listFolderMembersContinue. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderMembersContinueArgSerializer().serialize(self)))" + } + } + open class ListFolderMembersContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderMembersContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFolderMembersContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ListFolderMembersContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFolderMembersContinueError union + public enum ListFolderMembersContinueError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharedFolderAccessError) + /// cursor in ListFolderMembersContinueArg is invalid. + case invalidCursor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFolderMembersContinueErrorSerializer().serialize(self)))" + } + } + open class ListFolderMembersContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFolderMembersContinueError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFolderMembersContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return ListFolderMembersContinueError.accessError(v) + case "invalid_cursor": + return ListFolderMembersContinueError.invalidCursor + case "other": + return ListFolderMembersContinueError.other + default: + return ListFolderMembersContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListFoldersArgs struct + open class ListFoldersArgs: CustomStringConvertible { + /// The maximum number of results to return per request. + public let limit: UInt32 + /// A list of `FolderAction`s corresponding to `FolderPermission`s that should appear in the response's + /// permissions in SharedFolderMetadata field describing the actions the authenticated user can perform on the + /// folder. + public let actions: Array? + public init(limit: UInt32 = 1000, actions: Array? = nil) { + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + self.actions = actions + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFoldersArgsSerializer().serialize(self)))" + } + } + open class ListFoldersArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFoldersArgs) -> JSON { + let output = [ + "limit": Serialization._UInt32Serializer.serialize(value.limit), + "actions": NullableSerializer(ArraySerializer(Sharing.FolderActionSerializer())).serialize(value.actions), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFoldersArgs { + switch json { + case .dictionary(let dict): + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + let actions = NullableSerializer(ArraySerializer(Sharing.FolderActionSerializer())).deserialize(dict["actions"] ?? .null) + return ListFoldersArgs(limit: limit, actions: actions) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFoldersContinueArg struct + open class ListFoldersContinueArg: CustomStringConvertible { + /// The cursor returned by the previous API call specified in the endpoint description. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFoldersContinueArgSerializer().serialize(self)))" + } + } + open class ListFoldersContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFoldersContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFoldersContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ListFoldersContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListFoldersContinueError union + public enum ListFoldersContinueError: CustomStringConvertible { + /// cursor in ListFoldersContinueArg is invalid. + case invalidCursor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFoldersContinueErrorSerializer().serialize(self)))" + } + } + open class ListFoldersContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFoldersContinueError) -> JSON { + switch value { + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListFoldersContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_cursor": + return ListFoldersContinueError.invalidCursor + case "other": + return ListFoldersContinueError.other + default: + return ListFoldersContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result for listFolders or listMountableFolders, depending on which endpoint was requested. Unmounted shared + /// folders can be identified by the absence of pathLower in SharedFolderMetadata. + open class ListFoldersResult: CustomStringConvertible { + /// List of all shared folders the authenticated user has access to. + public let entries: Array + /// Present if there are additional shared folders that have not been returned yet. Pass the cursor into the + /// corresponding continue endpoint (either listFoldersContinue or listMountableFoldersContinue) to list + /// additional folders. + public let cursor: String? + public init(entries: Array, cursor: String? = nil) { + self.entries = entries + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListFoldersResultSerializer().serialize(self)))" + } + } + open class ListFoldersResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListFoldersResult) -> JSON { + let output = [ + "entries": ArraySerializer(Sharing.SharedFolderMetadataSerializer()).serialize(value.entries), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListFoldersResult { + switch json { + case .dictionary(let dict): + let entries = ArraySerializer(Sharing.SharedFolderMetadataSerializer()).deserialize(dict["entries"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ListFoldersResult(entries: entries, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListSharedLinksArg struct + open class ListSharedLinksArg: CustomStringConvertible { + /// See listSharedLinks description. + public let path: String? + /// The cursor returned by your last call to listSharedLinks. + public let cursor: String? + /// See listSharedLinks description. + public let directOnly: Bool? + public init(path: String? = nil, cursor: String? = nil, directOnly: Bool? = nil) { + nullableValidator(stringValidator(pattern: "(/(.|[\\r\\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)"))(path) + self.path = path + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + self.directOnly = directOnly + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListSharedLinksArgSerializer().serialize(self)))" + } + } + open class ListSharedLinksArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListSharedLinksArg) -> JSON { + let output = [ + "path": NullableSerializer(Serialization._StringSerializer).serialize(value.path), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + "direct_only": NullableSerializer(Serialization._BoolSerializer).serialize(value.directOnly), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListSharedLinksArg { + switch json { + case .dictionary(let dict): + let path = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + let directOnly = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["direct_only"] ?? .null) + return ListSharedLinksArg(path: path, cursor: cursor, directOnly: directOnly) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListSharedLinksError union + public enum ListSharedLinksError: CustomStringConvertible { + /// An unspecified error. + case path(Files.LookupError) + /// Indicates that the cursor has been invalidated. Call listSharedLinks to obtain a new cursor. + case reset + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListSharedLinksErrorSerializer().serialize(self)))" + } + } + open class ListSharedLinksErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListSharedLinksError) -> JSON { + switch value { + case .path(let arg): + var d = ["path": Files.LookupErrorSerializer().serialize(arg)] + d[".tag"] = .str("path") + return .dictionary(d) + case .reset: + var d = [String: JSON]() + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListSharedLinksError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "path": + let v = Files.LookupErrorSerializer().deserialize(d["path"] ?? .null) + return ListSharedLinksError.path(v) + case "reset": + return ListSharedLinksError.reset + case "other": + return ListSharedLinksError.other + default: + return ListSharedLinksError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListSharedLinksResult struct + open class ListSharedLinksResult: CustomStringConvertible { + /// Shared links applicable to the path argument. + public let links: Array + /// Is true if there are additional shared links that have not been returned yet. Pass the cursor into + /// listSharedLinks to retrieve them. + public let hasMore: Bool + /// Pass the cursor into listSharedLinks to obtain the additional links. Cursor is returned only if no path is + /// given. + public let cursor: String? + public init(links: Array, hasMore: Bool, cursor: String? = nil) { + self.links = links + self.hasMore = hasMore + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListSharedLinksResultSerializer().serialize(self)))" + } + } + open class ListSharedLinksResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListSharedLinksResult) -> JSON { + let output = [ + "links": ArraySerializer(Sharing.SharedLinkMetadataSerializer()).serialize(value.links), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListSharedLinksResult { + switch json { + case .dictionary(let dict): + let links = ArraySerializer(Sharing.SharedLinkMetadataSerializer()).deserialize(dict["links"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ListSharedLinksResult(links: links, hasMore: hasMore, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Contains information about a member's access level to content after an operation. + open class MemberAccessLevelResult: CustomStringConvertible { + /// The member still has this level of access to the content through a parent folder. + public let accessLevel: Sharing.AccessLevel? + /// A localized string with additional information about why the user has this access level to the content. + public let warning: String? + /// The parent folders that a member has access to. The field is present if the user has access to the first + /// parent folder where the member gains access. + public let accessDetails: Array? + public init(accessLevel: Sharing.AccessLevel? = nil, warning: String? = nil, accessDetails: Array? = nil) { + self.accessLevel = accessLevel + nullableValidator(stringValidator())(warning) + self.warning = warning + self.accessDetails = accessDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberAccessLevelResultSerializer().serialize(self)))" + } + } + open class MemberAccessLevelResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberAccessLevelResult) -> JSON { + let output = [ + "access_level": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(value.accessLevel), + "warning": NullableSerializer(Serialization._StringSerializer).serialize(value.warning), + "access_details": NullableSerializer(ArraySerializer(Sharing.ParentFolderAccessInfoSerializer())).serialize(value.accessDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberAccessLevelResult { + switch json { + case .dictionary(let dict): + let accessLevel = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(dict["access_level"] ?? .null) + let warning = NullableSerializer(Serialization._StringSerializer).deserialize(dict["warning"] ?? .null) + let accessDetails = NullableSerializer(ArraySerializer(Sharing.ParentFolderAccessInfoSerializer())).deserialize(dict["access_details"] ?? .null) + return MemberAccessLevelResult(accessLevel: accessLevel, warning: warning, accessDetails: accessDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// Actions that may be taken on members of a shared folder. + public enum MemberAction: CustomStringConvertible { + /// Allow the member to keep a copy of the folder when removing. + case leaveACopy + /// Make the member an editor of the folder. + case makeEditor + /// Make the member an owner of the folder. + case makeOwner + /// Make the member a viewer of the folder. + case makeViewer + /// Make the member a viewer of the folder without commenting permissions. + case makeViewerNoComment + /// Remove the member from the folder. + case remove + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberActionSerializer().serialize(self)))" + } + } + open class MemberActionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberAction) -> JSON { + switch value { + case .leaveACopy: + var d = [String: JSON]() + d[".tag"] = .str("leave_a_copy") + return .dictionary(d) + case .makeEditor: + var d = [String: JSON]() + d[".tag"] = .str("make_editor") + return .dictionary(d) + case .makeOwner: + var d = [String: JSON]() + d[".tag"] = .str("make_owner") + return .dictionary(d) + case .makeViewer: + var d = [String: JSON]() + d[".tag"] = .str("make_viewer") + return .dictionary(d) + case .makeViewerNoComment: + var d = [String: JSON]() + d[".tag"] = .str("make_viewer_no_comment") + return .dictionary(d) + case .remove: + var d = [String: JSON]() + d[".tag"] = .str("remove") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberAction { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "leave_a_copy": + return MemberAction.leaveACopy + case "make_editor": + return MemberAction.makeEditor + case "make_owner": + return MemberAction.makeOwner + case "make_viewer": + return MemberAction.makeViewer + case "make_viewer_no_comment": + return MemberAction.makeViewerNoComment + case "remove": + return MemberAction.remove + case "other": + return MemberAction.other + default: + return MemberAction.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Whether the user is allowed to take the action on the associated member. + open class MemberPermission: CustomStringConvertible { + /// The action that the user may wish to take on the member. + public let action: Sharing.MemberAction + /// True if the user is allowed to take the action. + public let allow: Bool + /// The reason why the user is denied the permission. Not present if the action is allowed. + public let reason: Sharing.PermissionDeniedReason? + public init(action: Sharing.MemberAction, allow: Bool, reason: Sharing.PermissionDeniedReason? = nil) { + self.action = action + self.allow = allow + self.reason = reason + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberPermissionSerializer().serialize(self)))" + } + } + open class MemberPermissionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberPermission) -> JSON { + let output = [ + "action": Sharing.MemberActionSerializer().serialize(value.action), + "allow": Serialization._BoolSerializer.serialize(value.allow), + "reason": NullableSerializer(Sharing.PermissionDeniedReasonSerializer()).serialize(value.reason), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberPermission { + switch json { + case .dictionary(let dict): + let action = Sharing.MemberActionSerializer().deserialize(dict["action"] ?? .null) + let allow = Serialization._BoolSerializer.deserialize(dict["allow"] ?? .null) + let reason = NullableSerializer(Sharing.PermissionDeniedReasonSerializer()).deserialize(dict["reason"] ?? .null) + return MemberPermission(action: action, allow: allow, reason: reason) + default: + fatalError("Type error deserializing") + } + } + } + + /// Policy governing who can be a member of a shared folder. Only applicable to folders owned by a user on a team. + public enum MemberPolicy: CustomStringConvertible { + /// Only a teammate can become a member. + case team + /// Anyone can become a member. + case anyone + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberPolicySerializer().serialize(self)))" + } + } + open class MemberPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberPolicy) -> JSON { + switch value { + case .team: + var d = [String: JSON]() + d[".tag"] = .str("team") + return .dictionary(d) + case .anyone: + var d = [String: JSON]() + d[".tag"] = .str("anyone") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team": + return MemberPolicy.team + case "anyone": + return MemberPolicy.anyone + case "other": + return MemberPolicy.other + default: + return MemberPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Includes different ways to identify a member of a shared folder. + public enum MemberSelector: CustomStringConvertible { + /// Dropbox account, team member, or group ID of member. + case dropboxId(String) + /// E-mail address of member. + case email(String) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSelectorSerializer().serialize(self)))" + } + } + open class MemberSelectorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSelector) -> JSON { + switch value { + case .dropboxId(let arg): + var d = ["dropbox_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("dropbox_id") + return .dictionary(d) + case .email(let arg): + var d = ["email": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("email") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberSelector { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "dropbox_id": + let v = Serialization._StringSerializer.deserialize(d["dropbox_id"] ?? .null) + return MemberSelector.dropboxId(v) + case "email": + let v = Serialization._StringSerializer.deserialize(d["email"] ?? .null) + return MemberSelector.email(v) + case "other": + return MemberSelector.other + default: + return MemberSelector.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ModifySharedLinkSettingsArgs struct + open class ModifySharedLinkSettingsArgs: CustomStringConvertible { + /// URL of the shared link to change its settings. + public let url: String + /// Set of settings for the shared link. + public let settings: Sharing.SharedLinkSettings + /// If set to true, removes the expiration of the shared link. + public let removeExpiration: Bool + public init(url: String, settings: Sharing.SharedLinkSettings, removeExpiration: Bool = false) { + stringValidator()(url) + self.url = url + self.settings = settings + self.removeExpiration = removeExpiration + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ModifySharedLinkSettingsArgsSerializer().serialize(self)))" + } + } + open class ModifySharedLinkSettingsArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ModifySharedLinkSettingsArgs) -> JSON { + let output = [ + "url": Serialization._StringSerializer.serialize(value.url), + "settings": Sharing.SharedLinkSettingsSerializer().serialize(value.settings), + "remove_expiration": Serialization._BoolSerializer.serialize(value.removeExpiration), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ModifySharedLinkSettingsArgs { + switch json { + case .dictionary(let dict): + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let settings = Sharing.SharedLinkSettingsSerializer().deserialize(dict["settings"] ?? .null) + let removeExpiration = Serialization._BoolSerializer.deserialize(dict["remove_expiration"] ?? .number(0)) + return ModifySharedLinkSettingsArgs(url: url, settings: settings, removeExpiration: removeExpiration) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ModifySharedLinkSettingsError union + public enum ModifySharedLinkSettingsError: CustomStringConvertible { + /// The shared link wasn't found. + case sharedLinkNotFound + /// The caller is not allowed to access this shared link. + case sharedLinkAccessDenied + /// This type of link is not supported. + case unsupportedLinkType + /// An unspecified error. + case other + /// There is an error with the given settings. + case settingsError(Sharing.SharedLinkSettingsError) + /// The caller's email should be verified. + case emailNotVerified + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ModifySharedLinkSettingsErrorSerializer().serialize(self)))" + } + } + open class ModifySharedLinkSettingsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ModifySharedLinkSettingsError) -> JSON { + switch value { + case .sharedLinkNotFound: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_not_found") + return .dictionary(d) + case .sharedLinkAccessDenied: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_access_denied") + return .dictionary(d) + case .unsupportedLinkType: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_link_type") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .settingsError(let arg): + var d = ["settings_error": Sharing.SharedLinkSettingsErrorSerializer().serialize(arg)] + d[".tag"] = .str("settings_error") + return .dictionary(d) + case .emailNotVerified: + var d = [String: JSON]() + d[".tag"] = .str("email_not_verified") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ModifySharedLinkSettingsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "shared_link_not_found": + return ModifySharedLinkSettingsError.sharedLinkNotFound + case "shared_link_access_denied": + return ModifySharedLinkSettingsError.sharedLinkAccessDenied + case "unsupported_link_type": + return ModifySharedLinkSettingsError.unsupportedLinkType + case "other": + return ModifySharedLinkSettingsError.other + case "settings_error": + let v = Sharing.SharedLinkSettingsErrorSerializer().deserialize(d["settings_error"] ?? .null) + return ModifySharedLinkSettingsError.settingsError(v) + case "email_not_verified": + return ModifySharedLinkSettingsError.emailNotVerified + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MountFolderArg struct + open class MountFolderArg: CustomStringConvertible { + /// The ID of the shared folder to mount. + public let sharedFolderId: String + public init(sharedFolderId: String) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MountFolderArgSerializer().serialize(self)))" + } + } + open class MountFolderArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MountFolderArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MountFolderArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + return MountFolderArg(sharedFolderId: sharedFolderId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MountFolderError union + public enum MountFolderError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharedFolderAccessError) + /// Mounting would cause a shared folder to be inside another, which is disallowed. + case insideSharedFolder + /// The current user does not have enough space to mount the shared folder. + case insufficientQuota(Sharing.InsufficientQuotaAmounts) + /// The shared folder is already mounted. + case alreadyMounted + /// The current user does not have permission to perform this action. + case noPermission + /// The shared folder is not mountable. One example where this can occur is when the shared folder belongs + /// within a team folder in the user's Dropbox. + case notMountable + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MountFolderErrorSerializer().serialize(self)))" + } + } + open class MountFolderErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MountFolderError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .insideSharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("inside_shared_folder") + return .dictionary(d) + case .insufficientQuota(let arg): + var d = Serialization.getFields(Sharing.InsufficientQuotaAmountsSerializer().serialize(arg)) + d[".tag"] = .str("insufficient_quota") + return .dictionary(d) + case .alreadyMounted: + var d = [String: JSON]() + d[".tag"] = .str("already_mounted") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .notMountable: + var d = [String: JSON]() + d[".tag"] = .str("not_mountable") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MountFolderError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return MountFolderError.accessError(v) + case "inside_shared_folder": + return MountFolderError.insideSharedFolder + case "insufficient_quota": + let v = Sharing.InsufficientQuotaAmountsSerializer().deserialize(json) + return MountFolderError.insufficientQuota(v) + case "already_mounted": + return MountFolderError.alreadyMounted + case "no_permission": + return MountFolderError.noPermission + case "not_mountable": + return MountFolderError.notMountable + case "other": + return MountFolderError.other + default: + return MountFolderError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Contains information about a parent folder that a member has access to. + open class ParentFolderAccessInfo: CustomStringConvertible { + /// Display name for the folder. + public let folderName: String + /// The identifier of the parent shared folder. + public let sharedFolderId: String + /// The user's permissions for the parent shared folder. + public let permissions: Array + /// The full path to the parent shared folder relative to the acting user's root. + public let path: String + public init(folderName: String, sharedFolderId: String, permissions: Array, path: String) { + stringValidator()(folderName) + self.folderName = folderName + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.permissions = permissions + stringValidator()(path) + self.path = path + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ParentFolderAccessInfoSerializer().serialize(self)))" + } + } + open class ParentFolderAccessInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ParentFolderAccessInfo) -> JSON { + let output = [ + "folder_name": Serialization._StringSerializer.serialize(value.folderName), + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "permissions": ArraySerializer(Sharing.MemberPermissionSerializer()).serialize(value.permissions), + "path": Serialization._StringSerializer.serialize(value.path), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ParentFolderAccessInfo { + switch json { + case .dictionary(let dict): + let folderName = Serialization._StringSerializer.deserialize(dict["folder_name"] ?? .null) + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let permissions = ArraySerializer(Sharing.MemberPermissionSerializer()).deserialize(dict["permissions"] ?? .null) + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + return ParentFolderAccessInfo(folderName: folderName, sharedFolderId: sharedFolderId, permissions: permissions, path: path) + default: + fatalError("Type error deserializing") + } + } + } + + /// Metadata for a path-based shared link. + open class PathLinkMetadata: Sharing.LinkMetadata { + /// Path in user's Dropbox. + public let path: String + public init(url: String, visibility: Sharing.Visibility, path: String, expires: Date? = nil) { + stringValidator()(path) + self.path = path + super.init(url: url, visibility: visibility, expires: expires) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PathLinkMetadataSerializer().serialize(self)))" + } + } + open class PathLinkMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PathLinkMetadata) -> JSON { + let output = [ + "url": Serialization._StringSerializer.serialize(value.url), + "visibility": Sharing.VisibilitySerializer().serialize(value.visibility), + "path": Serialization._StringSerializer.serialize(value.path), + "expires": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expires), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PathLinkMetadata { + switch json { + case .dictionary(let dict): + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let visibility = Sharing.VisibilitySerializer().deserialize(dict["visibility"] ?? .null) + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let expires = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expires"] ?? .null) + return PathLinkMetadata(url: url, visibility: visibility, path: path, expires: expires) + default: + fatalError("Type error deserializing") + } + } + } + + /// Flag to indicate pending upload default (for linking to not-yet-existing paths). + public enum PendingUploadMode: CustomStringConvertible { + /// Assume pending uploads are files. + case file + /// Assume pending uploads are folders. + case folder + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PendingUploadModeSerializer().serialize(self)))" + } + } + open class PendingUploadModeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PendingUploadMode) -> JSON { + switch value { + case .file: + var d = [String: JSON]() + d[".tag"] = .str("file") + return .dictionary(d) + case .folder: + var d = [String: JSON]() + d[".tag"] = .str("folder") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PendingUploadMode { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "file": + return PendingUploadMode.file + case "folder": + return PendingUploadMode.folder + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Possible reasons the user is denied a permission. + public enum PermissionDeniedReason: CustomStringConvertible { + /// User is not on the same team as the folder owner. + case userNotSameTeamAsOwner + /// User is prohibited by the owner from taking the action. + case userNotAllowedByOwner + /// Target is indirectly a member of the folder, for example by being part of a group. + case targetIsIndirectMember + /// Target is the owner of the folder. + case targetIsOwner + /// Target is the user itself. + case targetIsSelf + /// Target is not an active member of the team. + case targetNotActive + /// Folder is team folder for a limited team. + case folderIsLimitedTeamFolder + /// The content owner needs to be on a Dropbox team to perform this action. + case ownerNotOnTeam + /// The user does not have permission to perform this action on the link. + case permissionDenied + /// The user's team policy prevents performing this action on the link. + case restrictedByTeam + /// The user's account type does not support this action. + case userAccountType + /// The user needs to be on a Dropbox team to perform this action. + case userNotOnTeam + /// Folder is inside of another shared folder. + case folderIsInsideSharedFolder + /// Policy cannot be changed due to restrictions from parent folder. + case restrictedByParentFolder + /// An unspecified error. + case insufficientPlan(Sharing.InsufficientPlan) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PermissionDeniedReasonSerializer().serialize(self)))" + } + } + open class PermissionDeniedReasonSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PermissionDeniedReason) -> JSON { + switch value { + case .userNotSameTeamAsOwner: + var d = [String: JSON]() + d[".tag"] = .str("user_not_same_team_as_owner") + return .dictionary(d) + case .userNotAllowedByOwner: + var d = [String: JSON]() + d[".tag"] = .str("user_not_allowed_by_owner") + return .dictionary(d) + case .targetIsIndirectMember: + var d = [String: JSON]() + d[".tag"] = .str("target_is_indirect_member") + return .dictionary(d) + case .targetIsOwner: + var d = [String: JSON]() + d[".tag"] = .str("target_is_owner") + return .dictionary(d) + case .targetIsSelf: + var d = [String: JSON]() + d[".tag"] = .str("target_is_self") + return .dictionary(d) + case .targetNotActive: + var d = [String: JSON]() + d[".tag"] = .str("target_not_active") + return .dictionary(d) + case .folderIsLimitedTeamFolder: + var d = [String: JSON]() + d[".tag"] = .str("folder_is_limited_team_folder") + return .dictionary(d) + case .ownerNotOnTeam: + var d = [String: JSON]() + d[".tag"] = .str("owner_not_on_team") + return .dictionary(d) + case .permissionDenied: + var d = [String: JSON]() + d[".tag"] = .str("permission_denied") + return .dictionary(d) + case .restrictedByTeam: + var d = [String: JSON]() + d[".tag"] = .str("restricted_by_team") + return .dictionary(d) + case .userAccountType: + var d = [String: JSON]() + d[".tag"] = .str("user_account_type") + return .dictionary(d) + case .userNotOnTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_on_team") + return .dictionary(d) + case .folderIsInsideSharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("folder_is_inside_shared_folder") + return .dictionary(d) + case .restrictedByParentFolder: + var d = [String: JSON]() + d[".tag"] = .str("restricted_by_parent_folder") + return .dictionary(d) + case .insufficientPlan(let arg): + var d = Serialization.getFields(Sharing.InsufficientPlanSerializer().serialize(arg)) + d[".tag"] = .str("insufficient_plan") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PermissionDeniedReason { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_same_team_as_owner": + return PermissionDeniedReason.userNotSameTeamAsOwner + case "user_not_allowed_by_owner": + return PermissionDeniedReason.userNotAllowedByOwner + case "target_is_indirect_member": + return PermissionDeniedReason.targetIsIndirectMember + case "target_is_owner": + return PermissionDeniedReason.targetIsOwner + case "target_is_self": + return PermissionDeniedReason.targetIsSelf + case "target_not_active": + return PermissionDeniedReason.targetNotActive + case "folder_is_limited_team_folder": + return PermissionDeniedReason.folderIsLimitedTeamFolder + case "owner_not_on_team": + return PermissionDeniedReason.ownerNotOnTeam + case "permission_denied": + return PermissionDeniedReason.permissionDenied + case "restricted_by_team": + return PermissionDeniedReason.restrictedByTeam + case "user_account_type": + return PermissionDeniedReason.userAccountType + case "user_not_on_team": + return PermissionDeniedReason.userNotOnTeam + case "folder_is_inside_shared_folder": + return PermissionDeniedReason.folderIsInsideSharedFolder + case "restricted_by_parent_folder": + return PermissionDeniedReason.restrictedByParentFolder + case "insufficient_plan": + let v = Sharing.InsufficientPlanSerializer().deserialize(json) + return PermissionDeniedReason.insufficientPlan(v) + case "other": + return PermissionDeniedReason.other + default: + return PermissionDeniedReason.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RelinquishFileMembershipArg struct + open class RelinquishFileMembershipArg: CustomStringConvertible { + /// The path or id for the file. + public let file: String + public init(file: String) { + stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?")(file) + self.file = file + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelinquishFileMembershipArgSerializer().serialize(self)))" + } + } + open class RelinquishFileMembershipArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelinquishFileMembershipArg) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelinquishFileMembershipArg { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + return RelinquishFileMembershipArg(file: file) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RelinquishFileMembershipError union + public enum RelinquishFileMembershipError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharingFileAccessError) + /// The current user has access to the shared file via a group. You can't relinquish membership to a file + /// shared via groups. + case groupAccess + /// The current user does not have permission to perform this action. + case noPermission + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelinquishFileMembershipErrorSerializer().serialize(self)))" + } + } + open class RelinquishFileMembershipErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelinquishFileMembershipError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .groupAccess: + var d = [String: JSON]() + d[".tag"] = .str("group_access") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelinquishFileMembershipError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return RelinquishFileMembershipError.accessError(v) + case "group_access": + return RelinquishFileMembershipError.groupAccess + case "no_permission": + return RelinquishFileMembershipError.noPermission + case "other": + return RelinquishFileMembershipError.other + default: + return RelinquishFileMembershipError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RelinquishFolderMembershipArg struct + open class RelinquishFolderMembershipArg: CustomStringConvertible { + /// The ID for the shared folder. + public let sharedFolderId: String + /// Keep a copy of the folder's contents upon relinquishing membership. + public let leaveACopy: Bool + public init(sharedFolderId: String, leaveACopy: Bool = false) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.leaveACopy = leaveACopy + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelinquishFolderMembershipArgSerializer().serialize(self)))" + } + } + open class RelinquishFolderMembershipArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelinquishFolderMembershipArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "leave_a_copy": Serialization._BoolSerializer.serialize(value.leaveACopy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelinquishFolderMembershipArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let leaveACopy = Serialization._BoolSerializer.deserialize(dict["leave_a_copy"] ?? .number(0)) + return RelinquishFolderMembershipArg(sharedFolderId: sharedFolderId, leaveACopy: leaveACopy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RelinquishFolderMembershipError union + public enum RelinquishFolderMembershipError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharedFolderAccessError) + /// The current user is the owner of the shared folder. Owners cannot relinquish membership to their own + /// folders. Try unsharing or transferring ownership first. + case folderOwner + /// The shared folder is currently mounted. Unmount the shared folder before relinquishing membership. + case mounted + /// The current user has access to the shared folder via a group. You can't relinquish membership to folders + /// shared via groups. + case groupAccess + /// This action cannot be performed on a team shared folder. + case teamFolder + /// The current user does not have permission to perform this action. + case noPermission + /// The current user only has inherited access to the shared folder. You can't relinquish inherited membership + /// to folders. + case noExplicitAccess + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelinquishFolderMembershipErrorSerializer().serialize(self)))" + } + } + open class RelinquishFolderMembershipErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelinquishFolderMembershipError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .folderOwner: + var d = [String: JSON]() + d[".tag"] = .str("folder_owner") + return .dictionary(d) + case .mounted: + var d = [String: JSON]() + d[".tag"] = .str("mounted") + return .dictionary(d) + case .groupAccess: + var d = [String: JSON]() + d[".tag"] = .str("group_access") + return .dictionary(d) + case .teamFolder: + var d = [String: JSON]() + d[".tag"] = .str("team_folder") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .noExplicitAccess: + var d = [String: JSON]() + d[".tag"] = .str("no_explicit_access") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RelinquishFolderMembershipError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return RelinquishFolderMembershipError.accessError(v) + case "folder_owner": + return RelinquishFolderMembershipError.folderOwner + case "mounted": + return RelinquishFolderMembershipError.mounted + case "group_access": + return RelinquishFolderMembershipError.groupAccess + case "team_folder": + return RelinquishFolderMembershipError.teamFolder + case "no_permission": + return RelinquishFolderMembershipError.noPermission + case "no_explicit_access": + return RelinquishFolderMembershipError.noExplicitAccess + case "other": + return RelinquishFolderMembershipError.other + default: + return RelinquishFolderMembershipError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Arguments for removeFileMember2. + open class RemoveFileMemberArg: CustomStringConvertible { + /// File from which to remove members. + public let file: String + /// Member to remove from this file. Note that even if an email is specified, it may result in the removal of a + /// user (not an invitee) if the user's main account corresponds to that email address. + public let member: Sharing.MemberSelector + public init(file: String, member: Sharing.MemberSelector) { + stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?")(file) + self.file = file + self.member = member + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemoveFileMemberArgSerializer().serialize(self)))" + } + } + open class RemoveFileMemberArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemoveFileMemberArg) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RemoveFileMemberArg { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + return RemoveFileMemberArg(file: file, member: member) + default: + fatalError("Type error deserializing") + } + } + } + + /// Errors for removeFileMember2. + public enum RemoveFileMemberError: CustomStringConvertible { + /// An unspecified error. + case userError(Sharing.SharingUserError) + /// An unspecified error. + case accessError(Sharing.SharingFileAccessError) + /// This member does not have explicit access to the file and therefore cannot be removed. The return value is + /// the access that a user might have to the file from a parent folder. + case noExplicitAccess(Sharing.MemberAccessLevelResult) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemoveFileMemberErrorSerializer().serialize(self)))" + } + } + open class RemoveFileMemberErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemoveFileMemberError) -> JSON { + switch value { + case .userError(let arg): + var d = ["user_error": Sharing.SharingUserErrorSerializer().serialize(arg)] + d[".tag"] = .str("user_error") + return .dictionary(d) + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .noExplicitAccess(let arg): + var d = Serialization.getFields(Sharing.MemberAccessLevelResultSerializer().serialize(arg)) + d[".tag"] = .str("no_explicit_access") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RemoveFileMemberError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_error": + let v = Sharing.SharingUserErrorSerializer().deserialize(d["user_error"] ?? .null) + return RemoveFileMemberError.userError(v) + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return RemoveFileMemberError.accessError(v) + case "no_explicit_access": + let v = Sharing.MemberAccessLevelResultSerializer().deserialize(json) + return RemoveFileMemberError.noExplicitAccess(v) + case "other": + return RemoveFileMemberError.other + default: + return RemoveFileMemberError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RemoveFolderMemberArg struct + open class RemoveFolderMemberArg: CustomStringConvertible { + /// The ID for the shared folder. + public let sharedFolderId: String + /// The member to remove from the folder. + public let member: Sharing.MemberSelector + /// If true, the removed user will keep their copy of the folder after it's unshared, assuming it was mounted. + /// Otherwise, it will be removed from their Dropbox. Also, this must be set to false when kicking a group. + public let leaveACopy: Bool + public init(sharedFolderId: String, member: Sharing.MemberSelector, leaveACopy: Bool) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.member = member + self.leaveACopy = leaveACopy + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemoveFolderMemberArgSerializer().serialize(self)))" + } + } + open class RemoveFolderMemberArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemoveFolderMemberArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + "leave_a_copy": Serialization._BoolSerializer.serialize(value.leaveACopy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RemoveFolderMemberArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + let leaveACopy = Serialization._BoolSerializer.deserialize(dict["leave_a_copy"] ?? .null) + return RemoveFolderMemberArg(sharedFolderId: sharedFolderId, member: member, leaveACopy: leaveACopy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RemoveFolderMemberError union + public enum RemoveFolderMemberError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharedFolderAccessError) + /// An unspecified error. + case memberError(Sharing.SharedFolderMemberError) + /// The target user is the owner of the shared folder. You can't remove this user until ownership has been + /// transferred to another member. + case folderOwner + /// The target user has access to the shared folder via a group. + case groupAccess + /// This action cannot be performed on a team shared folder. + case teamFolder + /// The current user does not have permission to perform this action. + case noPermission + /// This shared folder has too many files for leaving a copy. You can still remove this user without leaving a + /// copy. + case tooManyFiles + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemoveFolderMemberErrorSerializer().serialize(self)))" + } + } + open class RemoveFolderMemberErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemoveFolderMemberError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .memberError(let arg): + var d = ["member_error": Sharing.SharedFolderMemberErrorSerializer().serialize(arg)] + d[".tag"] = .str("member_error") + return .dictionary(d) + case .folderOwner: + var d = [String: JSON]() + d[".tag"] = .str("folder_owner") + return .dictionary(d) + case .groupAccess: + var d = [String: JSON]() + d[".tag"] = .str("group_access") + return .dictionary(d) + case .teamFolder: + var d = [String: JSON]() + d[".tag"] = .str("team_folder") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .tooManyFiles: + var d = [String: JSON]() + d[".tag"] = .str("too_many_files") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RemoveFolderMemberError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return RemoveFolderMemberError.accessError(v) + case "member_error": + let v = Sharing.SharedFolderMemberErrorSerializer().deserialize(d["member_error"] ?? .null) + return RemoveFolderMemberError.memberError(v) + case "folder_owner": + return RemoveFolderMemberError.folderOwner + case "group_access": + return RemoveFolderMemberError.groupAccess + case "team_folder": + return RemoveFolderMemberError.teamFolder + case "no_permission": + return RemoveFolderMemberError.noPermission + case "too_many_files": + return RemoveFolderMemberError.tooManyFiles + case "other": + return RemoveFolderMemberError.other + default: + return RemoveFolderMemberError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RemoveMemberJobStatus union + public enum RemoveMemberJobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// Removing the folder member has finished. The value is information about whether the member has another form + /// of access. + case complete(Sharing.MemberAccessLevelResult) + /// An unspecified error. + case failed(Sharing.RemoveFolderMemberError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemoveMemberJobStatusSerializer().serialize(self)))" + } + } + open class RemoveMemberJobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemoveMemberJobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Sharing.MemberAccessLevelResultSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .failed(let arg): + var d = ["failed": Sharing.RemoveFolderMemberErrorSerializer().serialize(arg)] + d[".tag"] = .str("failed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RemoveMemberJobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return RemoveMemberJobStatus.inProgress + case "complete": + let v = Sharing.MemberAccessLevelResultSerializer().deserialize(json) + return RemoveMemberJobStatus.complete(v) + case "failed": + let v = Sharing.RemoveFolderMemberErrorSerializer().deserialize(d["failed"] ?? .null) + return RemoveMemberJobStatus.failed(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The access permission that can be requested by the caller for the shared link. Note that the final resolved + /// visibility of the shared link takes into account other aspects, such as team and shared folder settings. Check + /// the ResolvedVisibility for more info on the possible resolved visibility values of shared links. + public enum RequestedVisibility: CustomStringConvertible { + /// Anyone who has received the link can access it. No login required. + case public_ + /// Only members of the same team can access the link. Login is required. + case teamOnly + /// A link-specific password is required to access the link. Login is not required. + case password + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RequestedVisibilitySerializer().serialize(self)))" + } + } + open class RequestedVisibilitySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RequestedVisibility) -> JSON { + switch value { + case .public_: + var d = [String: JSON]() + d[".tag"] = .str("public") + return .dictionary(d) + case .teamOnly: + var d = [String: JSON]() + d[".tag"] = .str("team_only") + return .dictionary(d) + case .password: + var d = [String: JSON]() + d[".tag"] = .str("password") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RequestedVisibility { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "public": + return RequestedVisibility.public_ + case "team_only": + return RequestedVisibility.teamOnly + case "password": + return RequestedVisibility.password + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The actual access permissions values of shared links after taking into account user preferences and the team and + /// shared folder settings. Check the RequestedVisibility for more info on the possible visibility values that can + /// be set by the shared link's owner. + public enum ResolvedVisibility: CustomStringConvertible { + /// Anyone who has received the link can access it. No login required. + case public_ + /// Only members of the same team can access the link. Login is required. + case teamOnly + /// A link-specific password is required to access the link. Login is not required. + case password + /// Only members of the same team who have the link-specific password can access the link. Login is required. + case teamAndPassword + /// Only members of the shared folder containing the linked file can access the link. Login is required. + case sharedFolderOnly + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ResolvedVisibilitySerializer().serialize(self)))" + } + } + open class ResolvedVisibilitySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ResolvedVisibility) -> JSON { + switch value { + case .public_: + var d = [String: JSON]() + d[".tag"] = .str("public") + return .dictionary(d) + case .teamOnly: + var d = [String: JSON]() + d[".tag"] = .str("team_only") + return .dictionary(d) + case .password: + var d = [String: JSON]() + d[".tag"] = .str("password") + return .dictionary(d) + case .teamAndPassword: + var d = [String: JSON]() + d[".tag"] = .str("team_and_password") + return .dictionary(d) + case .sharedFolderOnly: + var d = [String: JSON]() + d[".tag"] = .str("shared_folder_only") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ResolvedVisibility { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "public": + return ResolvedVisibility.public_ + case "team_only": + return ResolvedVisibility.teamOnly + case "password": + return ResolvedVisibility.password + case "team_and_password": + return ResolvedVisibility.teamAndPassword + case "shared_folder_only": + return ResolvedVisibility.sharedFolderOnly + case "other": + return ResolvedVisibility.other + default: + return ResolvedVisibility.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RevokeSharedLinkArg struct + open class RevokeSharedLinkArg: CustomStringConvertible { + /// URL of the shared link. + public let url: String + public init(url: String) { + stringValidator()(url) + self.url = url + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeSharedLinkArgSerializer().serialize(self)))" + } + } + open class RevokeSharedLinkArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeSharedLinkArg) -> JSON { + let output = [ + "url": Serialization._StringSerializer.serialize(value.url), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RevokeSharedLinkArg { + switch json { + case .dictionary(let dict): + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + return RevokeSharedLinkArg(url: url) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RevokeSharedLinkError union + public enum RevokeSharedLinkError: CustomStringConvertible { + /// The shared link wasn't found. + case sharedLinkNotFound + /// The caller is not allowed to access this shared link. + case sharedLinkAccessDenied + /// This type of link is not supported. + case unsupportedLinkType + /// An unspecified error. + case other + /// Shared link is malformed. + case sharedLinkMalformed + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeSharedLinkErrorSerializer().serialize(self)))" + } + } + open class RevokeSharedLinkErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeSharedLinkError) -> JSON { + switch value { + case .sharedLinkNotFound: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_not_found") + return .dictionary(d) + case .sharedLinkAccessDenied: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_access_denied") + return .dictionary(d) + case .unsupportedLinkType: + var d = [String: JSON]() + d[".tag"] = .str("unsupported_link_type") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .sharedLinkMalformed: + var d = [String: JSON]() + d[".tag"] = .str("shared_link_malformed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RevokeSharedLinkError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "shared_link_not_found": + return RevokeSharedLinkError.sharedLinkNotFound + case "shared_link_access_denied": + return RevokeSharedLinkError.sharedLinkAccessDenied + case "unsupported_link_type": + return RevokeSharedLinkError.unsupportedLinkType + case "other": + return RevokeSharedLinkError.other + case "shared_link_malformed": + return RevokeSharedLinkError.sharedLinkMalformed + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SetAccessInheritanceArg struct + open class SetAccessInheritanceArg: CustomStringConvertible { + /// The access inheritance settings for the folder. + public let accessInheritance: Sharing.AccessInheritance + /// The ID for the shared folder. + public let sharedFolderId: String + public init(sharedFolderId: String, accessInheritance: Sharing.AccessInheritance = .inherit) { + self.accessInheritance = accessInheritance + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SetAccessInheritanceArgSerializer().serialize(self)))" + } + } + open class SetAccessInheritanceArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SetAccessInheritanceArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "access_inheritance": Sharing.AccessInheritanceSerializer().serialize(value.accessInheritance), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SetAccessInheritanceArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let accessInheritance = Sharing.AccessInheritanceSerializer().deserialize(dict["access_inheritance"] ?? Sharing.AccessInheritanceSerializer().serialize(.inherit)) + return SetAccessInheritanceArg(sharedFolderId: sharedFolderId, accessInheritance: accessInheritance) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SetAccessInheritanceError union + public enum SetAccessInheritanceError: CustomStringConvertible { + /// Unable to access shared folder. + case accessError(Sharing.SharedFolderAccessError) + /// The current user does not have permission to perform this action. + case noPermission + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SetAccessInheritanceErrorSerializer().serialize(self)))" + } + } + open class SetAccessInheritanceErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SetAccessInheritanceError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SetAccessInheritanceError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return SetAccessInheritanceError.accessError(v) + case "no_permission": + return SetAccessInheritanceError.noPermission + case "other": + return SetAccessInheritanceError.other + default: + return SetAccessInheritanceError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ShareFolderArgBase struct + open class ShareFolderArgBase: CustomStringConvertible { + /// Who can add and remove members of this shared folder. + public let aclUpdatePolicy: Sharing.AclUpdatePolicy? + /// Whether to force the share to happen asynchronously. + public let forceAsync: Bool + /// Who can be a member of this shared folder. Only applicable if the current user is on a team. + public let memberPolicy: Sharing.MemberPolicy? + /// The path to the folder to share. If it does not exist, then a new one is created. + public let path: String + /// The policy to apply to shared links created for content inside this shared folder. The current user must be + /// on a team to set this policy to members in SharedLinkPolicy. + public let sharedLinkPolicy: Sharing.SharedLinkPolicy? + /// Who can enable/disable viewer info for this shared folder. + public let viewerInfoPolicy: Sharing.ViewerInfoPolicy? + /// The access inheritance settings for the folder. + public let accessInheritance: Sharing.AccessInheritance + public init(path: String, aclUpdatePolicy: Sharing.AclUpdatePolicy? = nil, forceAsync: Bool = false, memberPolicy: Sharing.MemberPolicy? = nil, sharedLinkPolicy: Sharing.SharedLinkPolicy? = nil, viewerInfoPolicy: Sharing.ViewerInfoPolicy? = nil, accessInheritance: Sharing.AccessInheritance = .inherit) { + self.aclUpdatePolicy = aclUpdatePolicy + self.forceAsync = forceAsync + self.memberPolicy = memberPolicy + stringValidator(pattern: "(/(.|[\\r\\n])*)|(ns:[0-9]+(/.*)?)")(path) + self.path = path + self.sharedLinkPolicy = sharedLinkPolicy + self.viewerInfoPolicy = viewerInfoPolicy + self.accessInheritance = accessInheritance + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShareFolderArgBaseSerializer().serialize(self)))" + } + } + open class ShareFolderArgBaseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShareFolderArgBase) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "acl_update_policy": NullableSerializer(Sharing.AclUpdatePolicySerializer()).serialize(value.aclUpdatePolicy), + "force_async": Serialization._BoolSerializer.serialize(value.forceAsync), + "member_policy": NullableSerializer(Sharing.MemberPolicySerializer()).serialize(value.memberPolicy), + "shared_link_policy": NullableSerializer(Sharing.SharedLinkPolicySerializer()).serialize(value.sharedLinkPolicy), + "viewer_info_policy": NullableSerializer(Sharing.ViewerInfoPolicySerializer()).serialize(value.viewerInfoPolicy), + "access_inheritance": Sharing.AccessInheritanceSerializer().serialize(value.accessInheritance), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShareFolderArgBase { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let aclUpdatePolicy = NullableSerializer(Sharing.AclUpdatePolicySerializer()).deserialize(dict["acl_update_policy"] ?? .null) + let forceAsync = Serialization._BoolSerializer.deserialize(dict["force_async"] ?? .number(0)) + let memberPolicy = NullableSerializer(Sharing.MemberPolicySerializer()).deserialize(dict["member_policy"] ?? .null) + let sharedLinkPolicy = NullableSerializer(Sharing.SharedLinkPolicySerializer()).deserialize(dict["shared_link_policy"] ?? .null) + let viewerInfoPolicy = NullableSerializer(Sharing.ViewerInfoPolicySerializer()).deserialize(dict["viewer_info_policy"] ?? .null) + let accessInheritance = Sharing.AccessInheritanceSerializer().deserialize(dict["access_inheritance"] ?? Sharing.AccessInheritanceSerializer().serialize(.inherit)) + return ShareFolderArgBase(path: path, aclUpdatePolicy: aclUpdatePolicy, forceAsync: forceAsync, memberPolicy: memberPolicy, sharedLinkPolicy: sharedLinkPolicy, viewerInfoPolicy: viewerInfoPolicy, accessInheritance: accessInheritance) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShareFolderArg struct + open class ShareFolderArg: Sharing.ShareFolderArgBase { + /// A list of `FolderAction`s corresponding to `FolderPermission`s that should appear in the response's + /// permissions in SharedFolderMetadata field describing the actions the authenticated user can perform on the + /// folder. + public let actions: Array? + /// Settings on the link for this folder. + public let linkSettings: Sharing.LinkSettings? + public init(path: String, aclUpdatePolicy: Sharing.AclUpdatePolicy? = nil, forceAsync: Bool = false, memberPolicy: Sharing.MemberPolicy? = nil, sharedLinkPolicy: Sharing.SharedLinkPolicy? = nil, viewerInfoPolicy: Sharing.ViewerInfoPolicy? = nil, accessInheritance: Sharing.AccessInheritance = .inherit, actions: Array? = nil, linkSettings: Sharing.LinkSettings? = nil) { + self.actions = actions + self.linkSettings = linkSettings + super.init(path: path, aclUpdatePolicy: aclUpdatePolicy, forceAsync: forceAsync, memberPolicy: memberPolicy, sharedLinkPolicy: sharedLinkPolicy, viewerInfoPolicy: viewerInfoPolicy, accessInheritance: accessInheritance) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShareFolderArgSerializer().serialize(self)))" + } + } + open class ShareFolderArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShareFolderArg) -> JSON { + let output = [ + "path": Serialization._StringSerializer.serialize(value.path), + "acl_update_policy": NullableSerializer(Sharing.AclUpdatePolicySerializer()).serialize(value.aclUpdatePolicy), + "force_async": Serialization._BoolSerializer.serialize(value.forceAsync), + "member_policy": NullableSerializer(Sharing.MemberPolicySerializer()).serialize(value.memberPolicy), + "shared_link_policy": NullableSerializer(Sharing.SharedLinkPolicySerializer()).serialize(value.sharedLinkPolicy), + "viewer_info_policy": NullableSerializer(Sharing.ViewerInfoPolicySerializer()).serialize(value.viewerInfoPolicy), + "access_inheritance": Sharing.AccessInheritanceSerializer().serialize(value.accessInheritance), + "actions": NullableSerializer(ArraySerializer(Sharing.FolderActionSerializer())).serialize(value.actions), + "link_settings": NullableSerializer(Sharing.LinkSettingsSerializer()).serialize(value.linkSettings), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShareFolderArg { + switch json { + case .dictionary(let dict): + let path = Serialization._StringSerializer.deserialize(dict["path"] ?? .null) + let aclUpdatePolicy = NullableSerializer(Sharing.AclUpdatePolicySerializer()).deserialize(dict["acl_update_policy"] ?? .null) + let forceAsync = Serialization._BoolSerializer.deserialize(dict["force_async"] ?? .number(0)) + let memberPolicy = NullableSerializer(Sharing.MemberPolicySerializer()).deserialize(dict["member_policy"] ?? .null) + let sharedLinkPolicy = NullableSerializer(Sharing.SharedLinkPolicySerializer()).deserialize(dict["shared_link_policy"] ?? .null) + let viewerInfoPolicy = NullableSerializer(Sharing.ViewerInfoPolicySerializer()).deserialize(dict["viewer_info_policy"] ?? .null) + let accessInheritance = Sharing.AccessInheritanceSerializer().deserialize(dict["access_inheritance"] ?? Sharing.AccessInheritanceSerializer().serialize(.inherit)) + let actions = NullableSerializer(ArraySerializer(Sharing.FolderActionSerializer())).deserialize(dict["actions"] ?? .null) + let linkSettings = NullableSerializer(Sharing.LinkSettingsSerializer()).deserialize(dict["link_settings"] ?? .null) + return ShareFolderArg(path: path, aclUpdatePolicy: aclUpdatePolicy, forceAsync: forceAsync, memberPolicy: memberPolicy, sharedLinkPolicy: sharedLinkPolicy, viewerInfoPolicy: viewerInfoPolicy, accessInheritance: accessInheritance, actions: actions, linkSettings: linkSettings) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShareFolderErrorBase union + public enum ShareFolderErrorBase: CustomStringConvertible { + /// The current user's e-mail address is unverified. + case emailUnverified + /// path in ShareFolderArg is invalid. + case badPath(Sharing.SharePathError) + /// Team policy is more restrictive than memberPolicy in ShareFolderArg. + case teamPolicyDisallowsMemberPolicy + /// The current user's account is not allowed to select the specified sharedLinkPolicy in ShareFolderArg. + case disallowedSharedLinkPolicy + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShareFolderErrorBaseSerializer().serialize(self)))" + } + } + open class ShareFolderErrorBaseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShareFolderErrorBase) -> JSON { + switch value { + case .emailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("email_unverified") + return .dictionary(d) + case .badPath(let arg): + var d = ["bad_path": Sharing.SharePathErrorSerializer().serialize(arg)] + d[".tag"] = .str("bad_path") + return .dictionary(d) + case .teamPolicyDisallowsMemberPolicy: + var d = [String: JSON]() + d[".tag"] = .str("team_policy_disallows_member_policy") + return .dictionary(d) + case .disallowedSharedLinkPolicy: + var d = [String: JSON]() + d[".tag"] = .str("disallowed_shared_link_policy") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShareFolderErrorBase { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "email_unverified": + return ShareFolderErrorBase.emailUnverified + case "bad_path": + let v = Sharing.SharePathErrorSerializer().deserialize(d["bad_path"] ?? .null) + return ShareFolderErrorBase.badPath(v) + case "team_policy_disallows_member_policy": + return ShareFolderErrorBase.teamPolicyDisallowsMemberPolicy + case "disallowed_shared_link_policy": + return ShareFolderErrorBase.disallowedSharedLinkPolicy + case "other": + return ShareFolderErrorBase.other + default: + return ShareFolderErrorBase.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ShareFolderError union + public enum ShareFolderError: CustomStringConvertible { + /// The current user's e-mail address is unverified. + case emailUnverified + /// path in ShareFolderArg is invalid. + case badPath(Sharing.SharePathError) + /// Team policy is more restrictive than memberPolicy in ShareFolderArg. + case teamPolicyDisallowsMemberPolicy + /// The current user's account is not allowed to select the specified sharedLinkPolicy in ShareFolderArg. + case disallowedSharedLinkPolicy + /// An unspecified error. + case other + /// The current user does not have permission to perform this action. + case noPermission + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShareFolderErrorSerializer().serialize(self)))" + } + } + open class ShareFolderErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShareFolderError) -> JSON { + switch value { + case .emailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("email_unverified") + return .dictionary(d) + case .badPath(let arg): + var d = ["bad_path": Sharing.SharePathErrorSerializer().serialize(arg)] + d[".tag"] = .str("bad_path") + return .dictionary(d) + case .teamPolicyDisallowsMemberPolicy: + var d = [String: JSON]() + d[".tag"] = .str("team_policy_disallows_member_policy") + return .dictionary(d) + case .disallowedSharedLinkPolicy: + var d = [String: JSON]() + d[".tag"] = .str("disallowed_shared_link_policy") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShareFolderError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "email_unverified": + return ShareFolderError.emailUnverified + case "bad_path": + let v = Sharing.SharePathErrorSerializer().deserialize(d["bad_path"] ?? .null) + return ShareFolderError.badPath(v) + case "team_policy_disallows_member_policy": + return ShareFolderError.teamPolicyDisallowsMemberPolicy + case "disallowed_shared_link_policy": + return ShareFolderError.disallowedSharedLinkPolicy + case "other": + return ShareFolderError.other + case "no_permission": + return ShareFolderError.noPermission + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ShareFolderJobStatus union + public enum ShareFolderJobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The share job has finished. The value is the metadata for the folder. + case complete(Sharing.SharedFolderMetadata) + /// An unspecified error. + case failed(Sharing.ShareFolderError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShareFolderJobStatusSerializer().serialize(self)))" + } + } + open class ShareFolderJobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShareFolderJobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Sharing.SharedFolderMetadataSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .failed(let arg): + var d = ["failed": Sharing.ShareFolderErrorSerializer().serialize(arg)] + d[".tag"] = .str("failed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShareFolderJobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return ShareFolderJobStatus.inProgress + case "complete": + let v = Sharing.SharedFolderMetadataSerializer().deserialize(json) + return ShareFolderJobStatus.complete(v) + case "failed": + let v = Sharing.ShareFolderErrorSerializer().deserialize(d["failed"] ?? .null) + return ShareFolderJobStatus.failed(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ShareFolderLaunch union + public enum ShareFolderLaunch: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// An unspecified error. + case complete(Sharing.SharedFolderMetadata) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShareFolderLaunchSerializer().serialize(self)))" + } + } + open class ShareFolderLaunchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShareFolderLaunch) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Sharing.SharedFolderMetadataSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShareFolderLaunch { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return ShareFolderLaunch.asyncJobId(v) + case "complete": + let v = Sharing.SharedFolderMetadataSerializer().deserialize(json) + return ShareFolderLaunch.complete(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SharePathError union + public enum SharePathError: CustomStringConvertible { + /// A file is at the specified path. + case isFile + /// We do not support sharing a folder inside a shared folder. + case insideSharedFolder + /// We do not support shared folders that contain shared folders. + case containsSharedFolder + /// We do not support shared folders that contain app folders. + case containsAppFolder + /// We do not support shared folders that contain team folders. + case containsTeamFolder + /// We do not support sharing an app folder. + case isAppFolder + /// We do not support sharing a folder inside an app folder. + case insideAppFolder + /// A public folder can't be shared this way. Use a public link instead. + case isPublicFolder + /// A folder inside a public folder can't be shared this way. Use a public link instead. + case insidePublicFolder + /// Folder is already shared. Contains metadata about the existing shared folder. + case alreadyShared(Sharing.SharedFolderMetadata) + /// Path is not valid. + case invalidPath + /// We do not support sharing a Mac OS X package. + case isOsxPackage + /// We do not support sharing a folder inside a Mac OS X package. + case insideOsxPackage + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharePathErrorSerializer().serialize(self)))" + } + } + open class SharePathErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharePathError) -> JSON { + switch value { + case .isFile: + var d = [String: JSON]() + d[".tag"] = .str("is_file") + return .dictionary(d) + case .insideSharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("inside_shared_folder") + return .dictionary(d) + case .containsSharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("contains_shared_folder") + return .dictionary(d) + case .containsAppFolder: + var d = [String: JSON]() + d[".tag"] = .str("contains_app_folder") + return .dictionary(d) + case .containsTeamFolder: + var d = [String: JSON]() + d[".tag"] = .str("contains_team_folder") + return .dictionary(d) + case .isAppFolder: + var d = [String: JSON]() + d[".tag"] = .str("is_app_folder") + return .dictionary(d) + case .insideAppFolder: + var d = [String: JSON]() + d[".tag"] = .str("inside_app_folder") + return .dictionary(d) + case .isPublicFolder: + var d = [String: JSON]() + d[".tag"] = .str("is_public_folder") + return .dictionary(d) + case .insidePublicFolder: + var d = [String: JSON]() + d[".tag"] = .str("inside_public_folder") + return .dictionary(d) + case .alreadyShared(let arg): + var d = Serialization.getFields(Sharing.SharedFolderMetadataSerializer().serialize(arg)) + d[".tag"] = .str("already_shared") + return .dictionary(d) + case .invalidPath: + var d = [String: JSON]() + d[".tag"] = .str("invalid_path") + return .dictionary(d) + case .isOsxPackage: + var d = [String: JSON]() + d[".tag"] = .str("is_osx_package") + return .dictionary(d) + case .insideOsxPackage: + var d = [String: JSON]() + d[".tag"] = .str("inside_osx_package") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharePathError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "is_file": + return SharePathError.isFile + case "inside_shared_folder": + return SharePathError.insideSharedFolder + case "contains_shared_folder": + return SharePathError.containsSharedFolder + case "contains_app_folder": + return SharePathError.containsAppFolder + case "contains_team_folder": + return SharePathError.containsTeamFolder + case "is_app_folder": + return SharePathError.isAppFolder + case "inside_app_folder": + return SharePathError.insideAppFolder + case "is_public_folder": + return SharePathError.isPublicFolder + case "inside_public_folder": + return SharePathError.insidePublicFolder + case "already_shared": + let v = Sharing.SharedFolderMetadataSerializer().deserialize(json) + return SharePathError.alreadyShared(v) + case "invalid_path": + return SharePathError.invalidPath + case "is_osx_package": + return SharePathError.isOsxPackage + case "inside_osx_package": + return SharePathError.insideOsxPackage + case "other": + return SharePathError.other + default: + return SharePathError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Metadata of a shared link for a file or folder. + open class SharedContentLinkMetadata: Sharing.SharedContentLinkMetadataBase { + /// The content inside this folder with link audience different than this folder's. This is only returned when + /// an endpoint that returns metadata for a single shared folder is called, e.g. /get_folder_metadata. + public let audienceExceptions: Sharing.AudienceExceptions? + /// The URL of the link. + public let url: String + public init(audienceOptions: Array, currentAudience: Sharing.LinkAudience, linkPermissions: Array, passwordProtected: Bool, url: String, accessLevel: Sharing.AccessLevel? = nil, audienceRestrictingSharedFolder: Sharing.AudienceRestrictingSharedFolder? = nil, expiry: Date? = nil, audienceExceptions: Sharing.AudienceExceptions? = nil) { + self.audienceExceptions = audienceExceptions + stringValidator()(url) + self.url = url + super.init(audienceOptions: audienceOptions, currentAudience: currentAudience, linkPermissions: linkPermissions, passwordProtected: passwordProtected, accessLevel: accessLevel, audienceRestrictingSharedFolder: audienceRestrictingSharedFolder, expiry: expiry) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentLinkMetadataSerializer().serialize(self)))" + } + } + open class SharedContentLinkMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentLinkMetadata) -> JSON { + let output = [ + "audience_options": ArraySerializer(Sharing.LinkAudienceSerializer()).serialize(value.audienceOptions), + "current_audience": Sharing.LinkAudienceSerializer().serialize(value.currentAudience), + "link_permissions": ArraySerializer(Sharing.LinkPermissionSerializer()).serialize(value.linkPermissions), + "password_protected": Serialization._BoolSerializer.serialize(value.passwordProtected), + "url": Serialization._StringSerializer.serialize(value.url), + "access_level": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(value.accessLevel), + "audience_restricting_shared_folder": NullableSerializer(Sharing.AudienceRestrictingSharedFolderSerializer()).serialize(value.audienceRestrictingSharedFolder), + "expiry": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expiry), + "audience_exceptions": NullableSerializer(Sharing.AudienceExceptionsSerializer()).serialize(value.audienceExceptions), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentLinkMetadata { + switch json { + case .dictionary(let dict): + let audienceOptions = ArraySerializer(Sharing.LinkAudienceSerializer()).deserialize(dict["audience_options"] ?? .null) + let currentAudience = Sharing.LinkAudienceSerializer().deserialize(dict["current_audience"] ?? .null) + let linkPermissions = ArraySerializer(Sharing.LinkPermissionSerializer()).deserialize(dict["link_permissions"] ?? .null) + let passwordProtected = Serialization._BoolSerializer.deserialize(dict["password_protected"] ?? .null) + let url = Serialization._StringSerializer.deserialize(dict["url"] ?? .null) + let accessLevel = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(dict["access_level"] ?? .null) + let audienceRestrictingSharedFolder = NullableSerializer(Sharing.AudienceRestrictingSharedFolderSerializer()).deserialize(dict["audience_restricting_shared_folder"] ?? .null) + let expiry = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expiry"] ?? .null) + let audienceExceptions = NullableSerializer(Sharing.AudienceExceptionsSerializer()).deserialize(dict["audience_exceptions"] ?? .null) + return SharedContentLinkMetadata(audienceOptions: audienceOptions, currentAudience: currentAudience, linkPermissions: linkPermissions, passwordProtected: passwordProtected, url: url, accessLevel: accessLevel, audienceRestrictingSharedFolder: audienceRestrictingSharedFolder, expiry: expiry, audienceExceptions: audienceExceptions) + default: + fatalError("Type error deserializing") + } + } + } + + /// Shared file user, group, and invitee membership. Used for the results of listFileMembers and + /// listFileMembersContinue, and used as part of the results for listFileMembersBatch. + open class SharedFileMembers: CustomStringConvertible { + /// The list of user members of the shared file. + public let users: Array + /// The list of group members of the shared file. + public let groups: Array + /// The list of invited members of a file, but have not logged in and claimed this. + public let invitees: Array + /// Present if there are additional shared file members that have not been returned yet. Pass the cursor into + /// listFileMembersContinue to list additional members. + public let cursor: String? + public init(users: Array, groups: Array, invitees: Array, cursor: String? = nil) { + self.users = users + self.groups = groups + self.invitees = invitees + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFileMembersSerializer().serialize(self)))" + } + } + open class SharedFileMembersSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFileMembers) -> JSON { + let output = [ + "users": ArraySerializer(Sharing.UserFileMembershipInfoSerializer()).serialize(value.users), + "groups": ArraySerializer(Sharing.GroupMembershipInfoSerializer()).serialize(value.groups), + "invitees": ArraySerializer(Sharing.InviteeMembershipInfoSerializer()).serialize(value.invitees), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFileMembers { + switch json { + case .dictionary(let dict): + let users = ArraySerializer(Sharing.UserFileMembershipInfoSerializer()).deserialize(dict["users"] ?? .null) + let groups = ArraySerializer(Sharing.GroupMembershipInfoSerializer()).deserialize(dict["groups"] ?? .null) + let invitees = ArraySerializer(Sharing.InviteeMembershipInfoSerializer()).deserialize(dict["invitees"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return SharedFileMembers(users: users, groups: groups, invitees: invitees, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Properties of the shared file. + open class SharedFileMetadata: CustomStringConvertible { + /// The current user's access level for this shared file. + public let accessType: Sharing.AccessLevel? + /// The ID of the file. + public let id: String + /// The expected metadata of the link associated for the file when it is first shared. Absent if the link + /// already exists. This is for an unreleased feature so it may not be returned yet. + public let expectedLinkMetadata: Sharing.ExpectedSharedContentLinkMetadata? + /// The metadata of the link associated for the file. This is for an unreleased feature so it may not be + /// returned yet. + public let linkMetadata: Sharing.SharedContentLinkMetadata? + /// The name of this file. + public let name: String + /// The display names of the users that own the file. If the file is part of a team folder, the display names of + /// the team admins are also included. Absent if the owner display names cannot be fetched. + public let ownerDisplayNames: Array? + /// The team that owns the file. This field is not present if the file is not owned by a team. + public let ownerTeam: Users.Team? + /// The ID of the parent shared folder. This field is present only if the file is contained within a shared + /// folder. + public let parentSharedFolderId: String? + /// The cased path to be used for display purposes only. In rare instances the casing will not correctly match + /// the user's filesystem, but this behavior will match the path provided in the Core API v1. Absent for + /// unmounted files. + public let pathDisplay: String? + /// The lower-case full path of this file. Absent for unmounted files. + public let pathLower: String? + /// The sharing permissions that requesting user has on this file. This corresponds to the entries given in + /// actions in GetFileMetadataBatchArg or actions in GetFileMetadataArg. + public let permissions: Array? + /// Policies governing this shared file. + public let policy: Sharing.FolderPolicy + /// URL for displaying a web preview of the shared file. + public let previewUrl: String + /// Timestamp indicating when the current user was invited to this shared file. If the user was not invited to + /// the shared file, the timestamp will indicate when the user was invited to the parent shared folder. This + /// value may be absent. + public let timeInvited: Date? + public init(id: String, name: String, policy: Sharing.FolderPolicy, previewUrl: String, accessType: Sharing.AccessLevel? = nil, expectedLinkMetadata: Sharing.ExpectedSharedContentLinkMetadata? = nil, linkMetadata: Sharing.SharedContentLinkMetadata? = nil, ownerDisplayNames: Array? = nil, ownerTeam: Users.Team? = nil, parentSharedFolderId: String? = nil, pathDisplay: String? = nil, pathLower: String? = nil, permissions: Array? = nil, timeInvited: Date? = nil) { + self.accessType = accessType + stringValidator(minLength: 4, pattern: "id:.+")(id) + self.id = id + self.expectedLinkMetadata = expectedLinkMetadata + self.linkMetadata = linkMetadata + stringValidator()(name) + self.name = name + nullableValidator(arrayValidator(itemValidator: stringValidator()))(ownerDisplayNames) + self.ownerDisplayNames = ownerDisplayNames + self.ownerTeam = ownerTeam + nullableValidator(stringValidator(pattern: "[-_0-9a-zA-Z:]+"))(parentSharedFolderId) + self.parentSharedFolderId = parentSharedFolderId + nullableValidator(stringValidator())(pathDisplay) + self.pathDisplay = pathDisplay + nullableValidator(stringValidator())(pathLower) + self.pathLower = pathLower + self.permissions = permissions + self.policy = policy + stringValidator()(previewUrl) + self.previewUrl = previewUrl + self.timeInvited = timeInvited + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFileMetadataSerializer().serialize(self)))" + } + } + open class SharedFileMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFileMetadata) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + "name": Serialization._StringSerializer.serialize(value.name), + "policy": Sharing.FolderPolicySerializer().serialize(value.policy), + "preview_url": Serialization._StringSerializer.serialize(value.previewUrl), + "access_type": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(value.accessType), + "expected_link_metadata": NullableSerializer(Sharing.ExpectedSharedContentLinkMetadataSerializer()).serialize(value.expectedLinkMetadata), + "link_metadata": NullableSerializer(Sharing.SharedContentLinkMetadataSerializer()).serialize(value.linkMetadata), + "owner_display_names": NullableSerializer(ArraySerializer(Serialization._StringSerializer)).serialize(value.ownerDisplayNames), + "owner_team": NullableSerializer(Users.TeamSerializer()).serialize(value.ownerTeam), + "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "path_display": NullableSerializer(Serialization._StringSerializer).serialize(value.pathDisplay), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + "permissions": NullableSerializer(ArraySerializer(Sharing.FilePermissionSerializer())).serialize(value.permissions), + "time_invited": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.timeInvited), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFileMetadata { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let policy = Sharing.FolderPolicySerializer().deserialize(dict["policy"] ?? .null) + let previewUrl = Serialization._StringSerializer.deserialize(dict["preview_url"] ?? .null) + let accessType = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(dict["access_type"] ?? .null) + let expectedLinkMetadata = NullableSerializer(Sharing.ExpectedSharedContentLinkMetadataSerializer()).deserialize(dict["expected_link_metadata"] ?? .null) + let linkMetadata = NullableSerializer(Sharing.SharedContentLinkMetadataSerializer()).deserialize(dict["link_metadata"] ?? .null) + let ownerDisplayNames = NullableSerializer(ArraySerializer(Serialization._StringSerializer)).deserialize(dict["owner_display_names"] ?? .null) + let ownerTeam = NullableSerializer(Users.TeamSerializer()).deserialize(dict["owner_team"] ?? .null) + let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) + let pathDisplay = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_display"] ?? .null) + let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) + let permissions = NullableSerializer(ArraySerializer(Sharing.FilePermissionSerializer())).deserialize(dict["permissions"] ?? .null) + let timeInvited = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["time_invited"] ?? .null) + return SharedFileMetadata(id: id, name: name, policy: policy, previewUrl: previewUrl, accessType: accessType, expectedLinkMetadata: expectedLinkMetadata, linkMetadata: linkMetadata, ownerDisplayNames: ownerDisplayNames, ownerTeam: ownerTeam, parentSharedFolderId: parentSharedFolderId, pathDisplay: pathDisplay, pathLower: pathLower, permissions: permissions, timeInvited: timeInvited) + default: + fatalError("Type error deserializing") + } + } + } + + /// There is an error accessing the shared folder. + public enum SharedFolderAccessError: CustomStringConvertible { + /// This shared folder ID is invalid. + case invalidId + /// The user is not a member of the shared folder thus cannot access it. + case notAMember + /// Never set. + case emailUnverified + /// The shared folder is unmounted. + case unmounted + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderAccessErrorSerializer().serialize(self)))" + } + } + open class SharedFolderAccessErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderAccessError) -> JSON { + switch value { + case .invalidId: + var d = [String: JSON]() + d[".tag"] = .str("invalid_id") + return .dictionary(d) + case .notAMember: + var d = [String: JSON]() + d[".tag"] = .str("not_a_member") + return .dictionary(d) + case .emailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("email_unverified") + return .dictionary(d) + case .unmounted: + var d = [String: JSON]() + d[".tag"] = .str("unmounted") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedFolderAccessError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_id": + return SharedFolderAccessError.invalidId + case "not_a_member": + return SharedFolderAccessError.notAMember + case "email_unverified": + return SharedFolderAccessError.emailUnverified + case "unmounted": + return SharedFolderAccessError.unmounted + case "other": + return SharedFolderAccessError.other + default: + return SharedFolderAccessError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SharedFolderMemberError union + public enum SharedFolderMemberError: CustomStringConvertible { + /// The target dropbox_id is invalid. + case invalidDropboxId + /// The target dropbox_id is not a member of the shared folder. + case notAMember + /// The target member only has inherited access to the shared folder. + case noExplicitAccess(Sharing.MemberAccessLevelResult) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderMemberErrorSerializer().serialize(self)))" + } + } + open class SharedFolderMemberErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderMemberError) -> JSON { + switch value { + case .invalidDropboxId: + var d = [String: JSON]() + d[".tag"] = .str("invalid_dropbox_id") + return .dictionary(d) + case .notAMember: + var d = [String: JSON]() + d[".tag"] = .str("not_a_member") + return .dictionary(d) + case .noExplicitAccess(let arg): + var d = Serialization.getFields(Sharing.MemberAccessLevelResultSerializer().serialize(arg)) + d[".tag"] = .str("no_explicit_access") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedFolderMemberError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_dropbox_id": + return SharedFolderMemberError.invalidDropboxId + case "not_a_member": + return SharedFolderMemberError.notAMember + case "no_explicit_access": + let v = Sharing.MemberAccessLevelResultSerializer().deserialize(json) + return SharedFolderMemberError.noExplicitAccess(v) + case "other": + return SharedFolderMemberError.other + default: + return SharedFolderMemberError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Shared folder user and group membership. + open class SharedFolderMembers: CustomStringConvertible { + /// The list of user members of the shared folder. + public let users: Array + /// The list of group members of the shared folder. + public let groups: Array + /// The list of invitees to the shared folder. + public let invitees: Array + /// Present if there are additional shared folder members that have not been returned yet. Pass the cursor into + /// listFolderMembersContinue to list additional members. + public let cursor: String? + public init(users: Array, groups: Array, invitees: Array, cursor: String? = nil) { + self.users = users + self.groups = groups + self.invitees = invitees + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderMembersSerializer().serialize(self)))" + } + } + open class SharedFolderMembersSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderMembers) -> JSON { + let output = [ + "users": ArraySerializer(Sharing.UserMembershipInfoSerializer()).serialize(value.users), + "groups": ArraySerializer(Sharing.GroupMembershipInfoSerializer()).serialize(value.groups), + "invitees": ArraySerializer(Sharing.InviteeMembershipInfoSerializer()).serialize(value.invitees), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderMembers { + switch json { + case .dictionary(let dict): + let users = ArraySerializer(Sharing.UserMembershipInfoSerializer()).deserialize(dict["users"] ?? .null) + let groups = ArraySerializer(Sharing.GroupMembershipInfoSerializer()).deserialize(dict["groups"] ?? .null) + let invitees = ArraySerializer(Sharing.InviteeMembershipInfoSerializer()).deserialize(dict["invitees"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return SharedFolderMembers(users: users, groups: groups, invitees: invitees, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Properties of the shared folder. + open class SharedFolderMetadataBase: CustomStringConvertible { + /// The current user's access level for this shared folder. + public let accessType: Sharing.AccessLevel + /// Whether this folder is inside of a team folder. + public let isInsideTeamFolder: Bool + /// Whether this folder is a team folder https://www.dropbox.com/en/help/986. + public let isTeamFolder: Bool + /// The display names of the users that own the folder. If the folder is part of a team folder, the display + /// names of the team admins are also included. Absent if the owner display names cannot be fetched. + public let ownerDisplayNames: Array? + /// The team that owns the folder. This field is not present if the folder is not owned by a team. + public let ownerTeam: Users.Team? + /// The ID of the parent shared folder. This field is present only if the folder is contained within another + /// shared folder. + public let parentSharedFolderId: String? + /// The lower-cased full path of this shared folder. Absent for unmounted folders. + public let pathLower: String? + public init(accessType: Sharing.AccessLevel, isInsideTeamFolder: Bool, isTeamFolder: Bool, ownerDisplayNames: Array? = nil, ownerTeam: Users.Team? = nil, parentSharedFolderId: String? = nil, pathLower: String? = nil) { + self.accessType = accessType + self.isInsideTeamFolder = isInsideTeamFolder + self.isTeamFolder = isTeamFolder + nullableValidator(arrayValidator(itemValidator: stringValidator()))(ownerDisplayNames) + self.ownerDisplayNames = ownerDisplayNames + self.ownerTeam = ownerTeam + nullableValidator(stringValidator(pattern: "[-_0-9a-zA-Z:]+"))(parentSharedFolderId) + self.parentSharedFolderId = parentSharedFolderId + nullableValidator(stringValidator())(pathLower) + self.pathLower = pathLower + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderMetadataBaseSerializer().serialize(self)))" + } + } + open class SharedFolderMetadataBaseSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderMetadataBase) -> JSON { + let output = [ + "access_type": Sharing.AccessLevelSerializer().serialize(value.accessType), + "is_inside_team_folder": Serialization._BoolSerializer.serialize(value.isInsideTeamFolder), + "is_team_folder": Serialization._BoolSerializer.serialize(value.isTeamFolder), + "owner_display_names": NullableSerializer(ArraySerializer(Serialization._StringSerializer)).serialize(value.ownerDisplayNames), + "owner_team": NullableSerializer(Users.TeamSerializer()).serialize(value.ownerTeam), + "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderMetadataBase { + switch json { + case .dictionary(let dict): + let accessType = Sharing.AccessLevelSerializer().deserialize(dict["access_type"] ?? .null) + let isInsideTeamFolder = Serialization._BoolSerializer.deserialize(dict["is_inside_team_folder"] ?? .null) + let isTeamFolder = Serialization._BoolSerializer.deserialize(dict["is_team_folder"] ?? .null) + let ownerDisplayNames = NullableSerializer(ArraySerializer(Serialization._StringSerializer)).deserialize(dict["owner_display_names"] ?? .null) + let ownerTeam = NullableSerializer(Users.TeamSerializer()).deserialize(dict["owner_team"] ?? .null) + let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) + let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) + return SharedFolderMetadataBase(accessType: accessType, isInsideTeamFolder: isInsideTeamFolder, isTeamFolder: isTeamFolder, ownerDisplayNames: ownerDisplayNames, ownerTeam: ownerTeam, parentSharedFolderId: parentSharedFolderId, pathLower: pathLower) + default: + fatalError("Type error deserializing") + } + } + } + + /// The metadata which includes basic information about the shared folder. + open class SharedFolderMetadata: Sharing.SharedFolderMetadataBase { + /// The metadata of the shared content link to this shared folder. Absent if there is no link on the folder. + /// This is for an unreleased feature so it may not be returned yet. + public let linkMetadata: Sharing.SharedContentLinkMetadata? + /// The name of the this shared folder. + public let name: String + /// Actions the current user may perform on the folder and its contents. The set of permissions corresponds to + /// the FolderActions in the request. + public let permissions: Array? + /// Policies governing this shared folder. + public let policy: Sharing.FolderPolicy + /// URL for displaying a web preview of the shared folder. + public let previewUrl: String + /// The ID of the shared folder. + public let sharedFolderId: String + /// Timestamp indicating when the current user was invited to this shared folder. + public let timeInvited: Date + /// Whether the folder inherits its members from its parent. + public let accessInheritance: Sharing.AccessInheritance + public init(accessType: Sharing.AccessLevel, isInsideTeamFolder: Bool, isTeamFolder: Bool, name: String, policy: Sharing.FolderPolicy, previewUrl: String, sharedFolderId: String, timeInvited: Date, ownerDisplayNames: Array? = nil, ownerTeam: Users.Team? = nil, parentSharedFolderId: String? = nil, pathLower: String? = nil, linkMetadata: Sharing.SharedContentLinkMetadata? = nil, permissions: Array? = nil, accessInheritance: Sharing.AccessInheritance = .inherit) { + self.linkMetadata = linkMetadata + stringValidator()(name) + self.name = name + self.permissions = permissions + self.policy = policy + stringValidator()(previewUrl) + self.previewUrl = previewUrl + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.timeInvited = timeInvited + self.accessInheritance = accessInheritance + super.init(accessType: accessType, isInsideTeamFolder: isInsideTeamFolder, isTeamFolder: isTeamFolder, ownerDisplayNames: ownerDisplayNames, ownerTeam: ownerTeam, parentSharedFolderId: parentSharedFolderId, pathLower: pathLower) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderMetadataSerializer().serialize(self)))" + } + } + open class SharedFolderMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderMetadata) -> JSON { + let output = [ + "access_type": Sharing.AccessLevelSerializer().serialize(value.accessType), + "is_inside_team_folder": Serialization._BoolSerializer.serialize(value.isInsideTeamFolder), + "is_team_folder": Serialization._BoolSerializer.serialize(value.isTeamFolder), + "name": Serialization._StringSerializer.serialize(value.name), + "policy": Sharing.FolderPolicySerializer().serialize(value.policy), + "preview_url": Serialization._StringSerializer.serialize(value.previewUrl), + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "time_invited": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.timeInvited), + "owner_display_names": NullableSerializer(ArraySerializer(Serialization._StringSerializer)).serialize(value.ownerDisplayNames), + "owner_team": NullableSerializer(Users.TeamSerializer()).serialize(value.ownerTeam), + "parent_shared_folder_id": NullableSerializer(Serialization._StringSerializer).serialize(value.parentSharedFolderId), + "path_lower": NullableSerializer(Serialization._StringSerializer).serialize(value.pathLower), + "link_metadata": NullableSerializer(Sharing.SharedContentLinkMetadataSerializer()).serialize(value.linkMetadata), + "permissions": NullableSerializer(ArraySerializer(Sharing.FolderPermissionSerializer())).serialize(value.permissions), + "access_inheritance": Sharing.AccessInheritanceSerializer().serialize(value.accessInheritance), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderMetadata { + switch json { + case .dictionary(let dict): + let accessType = Sharing.AccessLevelSerializer().deserialize(dict["access_type"] ?? .null) + let isInsideTeamFolder = Serialization._BoolSerializer.deserialize(dict["is_inside_team_folder"] ?? .null) + let isTeamFolder = Serialization._BoolSerializer.deserialize(dict["is_team_folder"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let policy = Sharing.FolderPolicySerializer().deserialize(dict["policy"] ?? .null) + let previewUrl = Serialization._StringSerializer.deserialize(dict["preview_url"] ?? .null) + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let timeInvited = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["time_invited"] ?? .null) + let ownerDisplayNames = NullableSerializer(ArraySerializer(Serialization._StringSerializer)).deserialize(dict["owner_display_names"] ?? .null) + let ownerTeam = NullableSerializer(Users.TeamSerializer()).deserialize(dict["owner_team"] ?? .null) + let parentSharedFolderId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["parent_shared_folder_id"] ?? .null) + let pathLower = NullableSerializer(Serialization._StringSerializer).deserialize(dict["path_lower"] ?? .null) + let linkMetadata = NullableSerializer(Sharing.SharedContentLinkMetadataSerializer()).deserialize(dict["link_metadata"] ?? .null) + let permissions = NullableSerializer(ArraySerializer(Sharing.FolderPermissionSerializer())).deserialize(dict["permissions"] ?? .null) + let accessInheritance = Sharing.AccessInheritanceSerializer().deserialize(dict["access_inheritance"] ?? Sharing.AccessInheritanceSerializer().serialize(.inherit)) + return SharedFolderMetadata(accessType: accessType, isInsideTeamFolder: isInsideTeamFolder, isTeamFolder: isTeamFolder, name: name, policy: policy, previewUrl: previewUrl, sharedFolderId: sharedFolderId, timeInvited: timeInvited, ownerDisplayNames: ownerDisplayNames, ownerTeam: ownerTeam, parentSharedFolderId: parentSharedFolderId, pathLower: pathLower, linkMetadata: linkMetadata, permissions: permissions, accessInheritance: accessInheritance) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkAccessFailureReason union + public enum SharedLinkAccessFailureReason: CustomStringConvertible { + /// User is not logged in. + case loginRequired + /// User's email is not verified. + case emailVerifyRequired + /// The link is password protected. + case passwordRequired + /// Access is allowed for team members only. + case teamOnly + /// Access is allowed for the shared link's owner only. + case ownerOnly + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkAccessFailureReasonSerializer().serialize(self)))" + } + } + open class SharedLinkAccessFailureReasonSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkAccessFailureReason) -> JSON { + switch value { + case .loginRequired: + var d = [String: JSON]() + d[".tag"] = .str("login_required") + return .dictionary(d) + case .emailVerifyRequired: + var d = [String: JSON]() + d[".tag"] = .str("email_verify_required") + return .dictionary(d) + case .passwordRequired: + var d = [String: JSON]() + d[".tag"] = .str("password_required") + return .dictionary(d) + case .teamOnly: + var d = [String: JSON]() + d[".tag"] = .str("team_only") + return .dictionary(d) + case .ownerOnly: + var d = [String: JSON]() + d[".tag"] = .str("owner_only") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedLinkAccessFailureReason { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "login_required": + return SharedLinkAccessFailureReason.loginRequired + case "email_verify_required": + return SharedLinkAccessFailureReason.emailVerifyRequired + case "password_required": + return SharedLinkAccessFailureReason.passwordRequired + case "team_only": + return SharedLinkAccessFailureReason.teamOnly + case "owner_only": + return SharedLinkAccessFailureReason.ownerOnly + case "other": + return SharedLinkAccessFailureReason.other + default: + return SharedLinkAccessFailureReason.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Who can view shared links in this folder. + public enum SharedLinkPolicy: CustomStringConvertible { + /// Links can be shared with anyone. + case anyone + /// Links can be shared with anyone on the same team as the owner. + case team + /// Links can only be shared among members of the shared folder. + case members + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkPolicySerializer().serialize(self)))" + } + } + open class SharedLinkPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkPolicy) -> JSON { + switch value { + case .anyone: + var d = [String: JSON]() + d[".tag"] = .str("anyone") + return .dictionary(d) + case .team: + var d = [String: JSON]() + d[".tag"] = .str("team") + return .dictionary(d) + case .members: + var d = [String: JSON]() + d[".tag"] = .str("members") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedLinkPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "anyone": + return SharedLinkPolicy.anyone + case "team": + return SharedLinkPolicy.team + case "members": + return SharedLinkPolicy.members + case "other": + return SharedLinkPolicy.other + default: + return SharedLinkPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SharedLinkSettings struct + open class SharedLinkSettings: CustomStringConvertible { + /// The requested access for this shared link. + public let requestedVisibility: Sharing.RequestedVisibility? + /// If requestedVisibility is password in RequestedVisibility this is needed to specify the password to access + /// the link. + public let linkPassword: String? + /// Expiration time of the shared link. By default the link won't expire. + public let expires: Date? + public init(requestedVisibility: Sharing.RequestedVisibility? = nil, linkPassword: String? = nil, expires: Date? = nil) { + self.requestedVisibility = requestedVisibility + nullableValidator(stringValidator())(linkPassword) + self.linkPassword = linkPassword + self.expires = expires + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkSettingsSerializer().serialize(self)))" + } + } + open class SharedLinkSettingsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkSettings) -> JSON { + let output = [ + "requested_visibility": NullableSerializer(Sharing.RequestedVisibilitySerializer()).serialize(value.requestedVisibility), + "link_password": NullableSerializer(Serialization._StringSerializer).serialize(value.linkPassword), + "expires": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expires), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkSettings { + switch json { + case .dictionary(let dict): + let requestedVisibility = NullableSerializer(Sharing.RequestedVisibilitySerializer()).deserialize(dict["requested_visibility"] ?? .null) + let linkPassword = NullableSerializer(Serialization._StringSerializer).deserialize(dict["link_password"] ?? .null) + let expires = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expires"] ?? .null) + return SharedLinkSettings(requestedVisibility: requestedVisibility, linkPassword: linkPassword, expires: expires) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkSettingsError union + public enum SharedLinkSettingsError: CustomStringConvertible { + /// The given settings are invalid (for example, all attributes of the SharedLinkSettings are empty, the + /// requested visibility is password in RequestedVisibility but the linkPassword in SharedLinkSettings is + /// missing, expires in SharedLinkSettings is set to the past, etc.). + case invalidSettings + /// User is not allowed to modify the settings of this link. Note that basic users can only set public_ in + /// RequestedVisibility as the requestedVisibility in SharedLinkSettings and cannot set expires in + /// SharedLinkSettings. + case notAuthorized + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkSettingsErrorSerializer().serialize(self)))" + } + } + open class SharedLinkSettingsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkSettingsError) -> JSON { + switch value { + case .invalidSettings: + var d = [String: JSON]() + d[".tag"] = .str("invalid_settings") + return .dictionary(d) + case .notAuthorized: + var d = [String: JSON]() + d[".tag"] = .str("not_authorized") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedLinkSettingsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_settings": + return SharedLinkSettingsError.invalidSettings + case "not_authorized": + return SharedLinkSettingsError.notAuthorized + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// User could not access this file. + public enum SharingFileAccessError: CustomStringConvertible { + /// Current user does not have sufficient privileges to perform the desired action. + case noPermission + /// File specified was not found. + case invalidFile + /// A folder can't be shared this way. Use folder sharing or a shared link instead. + case isFolder + /// A file inside a public folder can't be shared this way. Use a public link instead. + case insidePublicFolder + /// A Mac OS X package can't be shared this way. Use a shared link instead. + case insideOsxPackage + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingFileAccessErrorSerializer().serialize(self)))" + } + } + open class SharingFileAccessErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingFileAccessError) -> JSON { + switch value { + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .invalidFile: + var d = [String: JSON]() + d[".tag"] = .str("invalid_file") + return .dictionary(d) + case .isFolder: + var d = [String: JSON]() + d[".tag"] = .str("is_folder") + return .dictionary(d) + case .insidePublicFolder: + var d = [String: JSON]() + d[".tag"] = .str("inside_public_folder") + return .dictionary(d) + case .insideOsxPackage: + var d = [String: JSON]() + d[".tag"] = .str("inside_osx_package") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharingFileAccessError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "no_permission": + return SharingFileAccessError.noPermission + case "invalid_file": + return SharingFileAccessError.invalidFile + case "is_folder": + return SharingFileAccessError.isFolder + case "inside_public_folder": + return SharingFileAccessError.insidePublicFolder + case "inside_osx_package": + return SharingFileAccessError.insideOsxPackage + case "other": + return SharingFileAccessError.other + default: + return SharingFileAccessError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// User account had a problem preventing this action. + public enum SharingUserError: CustomStringConvertible { + /// The current user must verify the account e-mail address before performing this action. + case emailUnverified + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingUserErrorSerializer().serialize(self)))" + } + } + open class SharingUserErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingUserError) -> JSON { + switch value { + case .emailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("email_unverified") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharingUserError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "email_unverified": + return SharingUserError.emailUnverified + case "other": + return SharingUserError.other + default: + return SharingUserError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information about a team member. + open class TeamMemberInfo: CustomStringConvertible { + /// Information about the member's team. + public let teamInfo: Users.Team + /// The display name of the user. + public let displayName: String + /// ID of user as a member of a team. This field will only be present if the member is in the same team as + /// current user. + public let memberId: String? + public init(teamInfo: Users.Team, displayName: String, memberId: String? = nil) { + self.teamInfo = teamInfo + stringValidator()(displayName) + self.displayName = displayName + nullableValidator(stringValidator())(memberId) + self.memberId = memberId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMemberInfoSerializer().serialize(self)))" + } + } + open class TeamMemberInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMemberInfo) -> JSON { + let output = [ + "team_info": Users.TeamSerializer().serialize(value.teamInfo), + "display_name": Serialization._StringSerializer.serialize(value.displayName), + "member_id": NullableSerializer(Serialization._StringSerializer).serialize(value.memberId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamMemberInfo { + switch json { + case .dictionary(let dict): + let teamInfo = Users.TeamSerializer().deserialize(dict["team_info"] ?? .null) + let displayName = Serialization._StringSerializer.deserialize(dict["display_name"] ?? .null) + let memberId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["member_id"] ?? .null) + return TeamMemberInfo(teamInfo: teamInfo, displayName: displayName, memberId: memberId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TransferFolderArg struct + open class TransferFolderArg: CustomStringConvertible { + /// The ID for the shared folder. + public let sharedFolderId: String + /// A account or team member ID to transfer ownership to. + public let toDropboxId: String + public init(sharedFolderId: String, toDropboxId: String) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + stringValidator(minLength: 1)(toDropboxId) + self.toDropboxId = toDropboxId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TransferFolderArgSerializer().serialize(self)))" + } + } + open class TransferFolderArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TransferFolderArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "to_dropbox_id": Serialization._StringSerializer.serialize(value.toDropboxId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TransferFolderArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let toDropboxId = Serialization._StringSerializer.deserialize(dict["to_dropbox_id"] ?? .null) + return TransferFolderArg(sharedFolderId: sharedFolderId, toDropboxId: toDropboxId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TransferFolderError union + public enum TransferFolderError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharedFolderAccessError) + /// toDropboxId in TransferFolderArg is invalid. + case invalidDropboxId + /// The new designated owner is not currently a member of the shared folder. + case newOwnerNotAMember + /// The new designated owner has not added the folder to their Dropbox. + case newOwnerUnmounted + /// The new designated owner's e-mail address is unverified. + case newOwnerEmailUnverified + /// This action cannot be performed on a team shared folder. + case teamFolder + /// The current user does not have permission to perform this action. + case noPermission + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TransferFolderErrorSerializer().serialize(self)))" + } + } + open class TransferFolderErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TransferFolderError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .invalidDropboxId: + var d = [String: JSON]() + d[".tag"] = .str("invalid_dropbox_id") + return .dictionary(d) + case .newOwnerNotAMember: + var d = [String: JSON]() + d[".tag"] = .str("new_owner_not_a_member") + return .dictionary(d) + case .newOwnerUnmounted: + var d = [String: JSON]() + d[".tag"] = .str("new_owner_unmounted") + return .dictionary(d) + case .newOwnerEmailUnverified: + var d = [String: JSON]() + d[".tag"] = .str("new_owner_email_unverified") + return .dictionary(d) + case .teamFolder: + var d = [String: JSON]() + d[".tag"] = .str("team_folder") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TransferFolderError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return TransferFolderError.accessError(v) + case "invalid_dropbox_id": + return TransferFolderError.invalidDropboxId + case "new_owner_not_a_member": + return TransferFolderError.newOwnerNotAMember + case "new_owner_unmounted": + return TransferFolderError.newOwnerUnmounted + case "new_owner_email_unverified": + return TransferFolderError.newOwnerEmailUnverified + case "team_folder": + return TransferFolderError.teamFolder + case "no_permission": + return TransferFolderError.noPermission + case "other": + return TransferFolderError.other + default: + return TransferFolderError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UnmountFolderArg struct + open class UnmountFolderArg: CustomStringConvertible { + /// The ID for the shared folder. + public let sharedFolderId: String + public init(sharedFolderId: String) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UnmountFolderArgSerializer().serialize(self)))" + } + } + open class UnmountFolderArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UnmountFolderArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UnmountFolderArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + return UnmountFolderArg(sharedFolderId: sharedFolderId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UnmountFolderError union + public enum UnmountFolderError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharedFolderAccessError) + /// The current user does not have permission to perform this action. + case noPermission + /// The shared folder can't be unmounted. One example where this can occur is when the shared folder's parent + /// folder is also a shared folder that resides in the current user's Dropbox. + case notUnmountable + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UnmountFolderErrorSerializer().serialize(self)))" + } + } + open class UnmountFolderErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UnmountFolderError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .notUnmountable: + var d = [String: JSON]() + d[".tag"] = .str("not_unmountable") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UnmountFolderError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return UnmountFolderError.accessError(v) + case "no_permission": + return UnmountFolderError.noPermission + case "not_unmountable": + return UnmountFolderError.notUnmountable + case "other": + return UnmountFolderError.other + default: + return UnmountFolderError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Arguments for unshareFile. + open class UnshareFileArg: CustomStringConvertible { + /// The file to unshare. + public let file: String + public init(file: String) { + stringValidator(minLength: 1, pattern: "((/|id:).*|nspath:[0-9]+:.*)|ns:[0-9]+(/.*)?")(file) + self.file = file + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UnshareFileArgSerializer().serialize(self)))" + } + } + open class UnshareFileArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UnshareFileArg) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UnshareFileArg { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + return UnshareFileArg(file: file) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error result for unshareFile. + public enum UnshareFileError: CustomStringConvertible { + /// An unspecified error. + case userError(Sharing.SharingUserError) + /// An unspecified error. + case accessError(Sharing.SharingFileAccessError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UnshareFileErrorSerializer().serialize(self)))" + } + } + open class UnshareFileErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UnshareFileError) -> JSON { + switch value { + case .userError(let arg): + var d = ["user_error": Sharing.SharingUserErrorSerializer().serialize(arg)] + d[".tag"] = .str("user_error") + return .dictionary(d) + case .accessError(let arg): + var d = ["access_error": Sharing.SharingFileAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UnshareFileError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_error": + let v = Sharing.SharingUserErrorSerializer().deserialize(d["user_error"] ?? .null) + return UnshareFileError.userError(v) + case "access_error": + let v = Sharing.SharingFileAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return UnshareFileError.accessError(v) + case "other": + return UnshareFileError.other + default: + return UnshareFileError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The UnshareFolderArg struct + open class UnshareFolderArg: CustomStringConvertible { + /// The ID for the shared folder. + public let sharedFolderId: String + /// If true, members of this shared folder will get a copy of this folder after it's unshared. Otherwise, it + /// will be removed from their Dropbox. The current user, who is an owner, will always retain their copy. + public let leaveACopy: Bool + public init(sharedFolderId: String, leaveACopy: Bool = false) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.leaveACopy = leaveACopy + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UnshareFolderArgSerializer().serialize(self)))" + } + } + open class UnshareFolderArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UnshareFolderArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "leave_a_copy": Serialization._BoolSerializer.serialize(value.leaveACopy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UnshareFolderArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let leaveACopy = Serialization._BoolSerializer.deserialize(dict["leave_a_copy"] ?? .number(0)) + return UnshareFolderArg(sharedFolderId: sharedFolderId, leaveACopy: leaveACopy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UnshareFolderError union + public enum UnshareFolderError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharedFolderAccessError) + /// This action cannot be performed on a team shared folder. + case teamFolder + /// The current user does not have permission to perform this action. + case noPermission + /// This shared folder has too many files to be unshared. + case tooManyFiles + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UnshareFolderErrorSerializer().serialize(self)))" + } + } + open class UnshareFolderErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UnshareFolderError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .teamFolder: + var d = [String: JSON]() + d[".tag"] = .str("team_folder") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .tooManyFiles: + var d = [String: JSON]() + d[".tag"] = .str("too_many_files") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UnshareFolderError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return UnshareFolderError.accessError(v) + case "team_folder": + return UnshareFolderError.teamFolder + case "no_permission": + return UnshareFolderError.noPermission + case "too_many_files": + return UnshareFolderError.tooManyFiles + case "other": + return UnshareFolderError.other + default: + return UnshareFolderError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Arguments for updateFileMember. + open class UpdateFileMemberArgs: Sharing.ChangeFileMemberAccessArgs { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateFileMemberArgsSerializer().serialize(self)))" + } + } + open class UpdateFileMemberArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateFileMemberArgs) -> JSON { + let output = [ + "file": Serialization._StringSerializer.serialize(value.file), + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + "access_level": Sharing.AccessLevelSerializer().serialize(value.accessLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UpdateFileMemberArgs { + switch json { + case .dictionary(let dict): + let file = Serialization._StringSerializer.deserialize(dict["file"] ?? .null) + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + let accessLevel = Sharing.AccessLevelSerializer().deserialize(dict["access_level"] ?? .null) + return UpdateFileMemberArgs(file: file, member: member, accessLevel: accessLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UpdateFolderMemberArg struct + open class UpdateFolderMemberArg: CustomStringConvertible { + /// The ID for the shared folder. + public let sharedFolderId: String + /// The member of the shared folder to update. Only the dropboxId in MemberSelector may be set at this time. + public let member: Sharing.MemberSelector + /// The new access level for member. owner in AccessLevel is disallowed. + public let accessLevel: Sharing.AccessLevel + public init(sharedFolderId: String, member: Sharing.MemberSelector, accessLevel: Sharing.AccessLevel) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.member = member + self.accessLevel = accessLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateFolderMemberArgSerializer().serialize(self)))" + } + } + open class UpdateFolderMemberArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateFolderMemberArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "member": Sharing.MemberSelectorSerializer().serialize(value.member), + "access_level": Sharing.AccessLevelSerializer().serialize(value.accessLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UpdateFolderMemberArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let member = Sharing.MemberSelectorSerializer().deserialize(dict["member"] ?? .null) + let accessLevel = Sharing.AccessLevelSerializer().deserialize(dict["access_level"] ?? .null) + return UpdateFolderMemberArg(sharedFolderId: sharedFolderId, member: member, accessLevel: accessLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UpdateFolderMemberError union + public enum UpdateFolderMemberError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharedFolderAccessError) + /// An unspecified error. + case memberError(Sharing.SharedFolderMemberError) + /// If updating the access type required the member to be added to the shared folder and there was an error when + /// adding the member. + case noExplicitAccess(Sharing.AddFolderMemberError) + /// The current user's account doesn't support this action. An example of this is when downgrading a member from + /// editor to viewer. This action can only be performed by users that have upgraded to a Pro or Business plan. + case insufficientPlan + /// The current user does not have permission to perform this action. + case noPermission + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateFolderMemberErrorSerializer().serialize(self)))" + } + } + open class UpdateFolderMemberErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateFolderMemberError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .memberError(let arg): + var d = ["member_error": Sharing.SharedFolderMemberErrorSerializer().serialize(arg)] + d[".tag"] = .str("member_error") + return .dictionary(d) + case .noExplicitAccess(let arg): + var d = ["no_explicit_access": Sharing.AddFolderMemberErrorSerializer().serialize(arg)] + d[".tag"] = .str("no_explicit_access") + return .dictionary(d) + case .insufficientPlan: + var d = [String: JSON]() + d[".tag"] = .str("insufficient_plan") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UpdateFolderMemberError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return UpdateFolderMemberError.accessError(v) + case "member_error": + let v = Sharing.SharedFolderMemberErrorSerializer().deserialize(d["member_error"] ?? .null) + return UpdateFolderMemberError.memberError(v) + case "no_explicit_access": + let v = Sharing.AddFolderMemberErrorSerializer().deserialize(d["no_explicit_access"] ?? .null) + return UpdateFolderMemberError.noExplicitAccess(v) + case "insufficient_plan": + return UpdateFolderMemberError.insufficientPlan + case "no_permission": + return UpdateFolderMemberError.noPermission + case "other": + return UpdateFolderMemberError.other + default: + return UpdateFolderMemberError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// If any of the policies are unset, then they retain their current setting. + open class UpdateFolderPolicyArg: CustomStringConvertible { + /// The ID for the shared folder. + public let sharedFolderId: String + /// Who can be a member of this shared folder. Only applicable if the current user is on a team. + public let memberPolicy: Sharing.MemberPolicy? + /// Who can add and remove members of this shared folder. + public let aclUpdatePolicy: Sharing.AclUpdatePolicy? + /// Who can enable/disable viewer info for this shared folder. + public let viewerInfoPolicy: Sharing.ViewerInfoPolicy? + /// The policy to apply to shared links created for content inside this shared folder. The current user must be + /// on a team to set this policy to members in SharedLinkPolicy. + public let sharedLinkPolicy: Sharing.SharedLinkPolicy? + /// Settings on the link for this folder. + public let linkSettings: Sharing.LinkSettings? + /// A list of `FolderAction`s corresponding to `FolderPermission`s that should appear in the response's + /// permissions in SharedFolderMetadata field describing the actions the authenticated user can perform on the + /// folder. + public let actions: Array? + public init(sharedFolderId: String, memberPolicy: Sharing.MemberPolicy? = nil, aclUpdatePolicy: Sharing.AclUpdatePolicy? = nil, viewerInfoPolicy: Sharing.ViewerInfoPolicy? = nil, sharedLinkPolicy: Sharing.SharedLinkPolicy? = nil, linkSettings: Sharing.LinkSettings? = nil, actions: Array? = nil) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(sharedFolderId) + self.sharedFolderId = sharedFolderId + self.memberPolicy = memberPolicy + self.aclUpdatePolicy = aclUpdatePolicy + self.viewerInfoPolicy = viewerInfoPolicy + self.sharedLinkPolicy = sharedLinkPolicy + self.linkSettings = linkSettings + self.actions = actions + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateFolderPolicyArgSerializer().serialize(self)))" + } + } + open class UpdateFolderPolicyArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateFolderPolicyArg) -> JSON { + let output = [ + "shared_folder_id": Serialization._StringSerializer.serialize(value.sharedFolderId), + "member_policy": NullableSerializer(Sharing.MemberPolicySerializer()).serialize(value.memberPolicy), + "acl_update_policy": NullableSerializer(Sharing.AclUpdatePolicySerializer()).serialize(value.aclUpdatePolicy), + "viewer_info_policy": NullableSerializer(Sharing.ViewerInfoPolicySerializer()).serialize(value.viewerInfoPolicy), + "shared_link_policy": NullableSerializer(Sharing.SharedLinkPolicySerializer()).serialize(value.sharedLinkPolicy), + "link_settings": NullableSerializer(Sharing.LinkSettingsSerializer()).serialize(value.linkSettings), + "actions": NullableSerializer(ArraySerializer(Sharing.FolderActionSerializer())).serialize(value.actions), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UpdateFolderPolicyArg { + switch json { + case .dictionary(let dict): + let sharedFolderId = Serialization._StringSerializer.deserialize(dict["shared_folder_id"] ?? .null) + let memberPolicy = NullableSerializer(Sharing.MemberPolicySerializer()).deserialize(dict["member_policy"] ?? .null) + let aclUpdatePolicy = NullableSerializer(Sharing.AclUpdatePolicySerializer()).deserialize(dict["acl_update_policy"] ?? .null) + let viewerInfoPolicy = NullableSerializer(Sharing.ViewerInfoPolicySerializer()).deserialize(dict["viewer_info_policy"] ?? .null) + let sharedLinkPolicy = NullableSerializer(Sharing.SharedLinkPolicySerializer()).deserialize(dict["shared_link_policy"] ?? .null) + let linkSettings = NullableSerializer(Sharing.LinkSettingsSerializer()).deserialize(dict["link_settings"] ?? .null) + let actions = NullableSerializer(ArraySerializer(Sharing.FolderActionSerializer())).deserialize(dict["actions"] ?? .null) + return UpdateFolderPolicyArg(sharedFolderId: sharedFolderId, memberPolicy: memberPolicy, aclUpdatePolicy: aclUpdatePolicy, viewerInfoPolicy: viewerInfoPolicy, sharedLinkPolicy: sharedLinkPolicy, linkSettings: linkSettings, actions: actions) + default: + fatalError("Type error deserializing") + } + } + } + + /// The UpdateFolderPolicyError union + public enum UpdateFolderPolicyError: CustomStringConvertible { + /// An unspecified error. + case accessError(Sharing.SharedFolderAccessError) + /// memberPolicy in UpdateFolderPolicyArg was set even though user is not on a team. + case notOnTeam + /// Team policy is more restrictive than memberPolicy in ShareFolderArg. + case teamPolicyDisallowsMemberPolicy + /// The current account is not allowed to select the specified sharedLinkPolicy in ShareFolderArg. + case disallowedSharedLinkPolicy + /// The current user does not have permission to perform this action. + case noPermission + /// This action cannot be performed on a team shared folder. + case teamFolder + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UpdateFolderPolicyErrorSerializer().serialize(self)))" + } + } + open class UpdateFolderPolicyErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UpdateFolderPolicyError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Sharing.SharedFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .notOnTeam: + var d = [String: JSON]() + d[".tag"] = .str("not_on_team") + return .dictionary(d) + case .teamPolicyDisallowsMemberPolicy: + var d = [String: JSON]() + d[".tag"] = .str("team_policy_disallows_member_policy") + return .dictionary(d) + case .disallowedSharedLinkPolicy: + var d = [String: JSON]() + d[".tag"] = .str("disallowed_shared_link_policy") + return .dictionary(d) + case .noPermission: + var d = [String: JSON]() + d[".tag"] = .str("no_permission") + return .dictionary(d) + case .teamFolder: + var d = [String: JSON]() + d[".tag"] = .str("team_folder") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UpdateFolderPolicyError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Sharing.SharedFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return UpdateFolderPolicyError.accessError(v) + case "not_on_team": + return UpdateFolderPolicyError.notOnTeam + case "team_policy_disallows_member_policy": + return UpdateFolderPolicyError.teamPolicyDisallowsMemberPolicy + case "disallowed_shared_link_policy": + return UpdateFolderPolicyError.disallowedSharedLinkPolicy + case "no_permission": + return UpdateFolderPolicyError.noPermission + case "team_folder": + return UpdateFolderPolicyError.teamFolder + case "other": + return UpdateFolderPolicyError.other + default: + return UpdateFolderPolicyError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The information about a user member of the shared content. + open class UserMembershipInfo: Sharing.MembershipInfo { + /// The account information for the membership user. + public let user: Sharing.UserInfo + public init(accessType: Sharing.AccessLevel, user: Sharing.UserInfo, permissions: Array? = nil, initials: String? = nil, isInherited: Bool = false) { + self.user = user + super.init(accessType: accessType, permissions: permissions, initials: initials, isInherited: isInherited) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserMembershipInfoSerializer().serialize(self)))" + } + } + open class UserMembershipInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserMembershipInfo) -> JSON { + let output = [ + "access_type": Sharing.AccessLevelSerializer().serialize(value.accessType), + "user": Sharing.UserInfoSerializer().serialize(value.user), + "permissions": NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).serialize(value.permissions), + "initials": NullableSerializer(Serialization._StringSerializer).serialize(value.initials), + "is_inherited": Serialization._BoolSerializer.serialize(value.isInherited), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserMembershipInfo { + switch json { + case .dictionary(let dict): + let accessType = Sharing.AccessLevelSerializer().deserialize(dict["access_type"] ?? .null) + let user = Sharing.UserInfoSerializer().deserialize(dict["user"] ?? .null) + let permissions = NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).deserialize(dict["permissions"] ?? .null) + let initials = NullableSerializer(Serialization._StringSerializer).deserialize(dict["initials"] ?? .null) + let isInherited = Serialization._BoolSerializer.deserialize(dict["is_inherited"] ?? .number(0)) + return UserMembershipInfo(accessType: accessType, user: user, permissions: permissions, initials: initials, isInherited: isInherited) + default: + fatalError("Type error deserializing") + } + } + } + + /// The information about a user member of the shared content with an appended last seen timestamp. + open class UserFileMembershipInfo: Sharing.UserMembershipInfo { + /// The UTC timestamp of when the user has last seen the content, if they have. + public let timeLastSeen: Date? + /// The platform on which the user has last seen the content, or unknown. + public let platformType: SeenState.PlatformType? + public init(accessType: Sharing.AccessLevel, user: Sharing.UserInfo, permissions: Array? = nil, initials: String? = nil, isInherited: Bool = false, timeLastSeen: Date? = nil, platformType: SeenState.PlatformType? = nil) { + self.timeLastSeen = timeLastSeen + self.platformType = platformType + super.init(accessType: accessType, user: user, permissions: permissions, initials: initials, isInherited: isInherited) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserFileMembershipInfoSerializer().serialize(self)))" + } + } + open class UserFileMembershipInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserFileMembershipInfo) -> JSON { + let output = [ + "access_type": Sharing.AccessLevelSerializer().serialize(value.accessType), + "user": Sharing.UserInfoSerializer().serialize(value.user), + "permissions": NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).serialize(value.permissions), + "initials": NullableSerializer(Serialization._StringSerializer).serialize(value.initials), + "is_inherited": Serialization._BoolSerializer.serialize(value.isInherited), + "time_last_seen": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.timeLastSeen), + "platform_type": NullableSerializer(SeenState.PlatformTypeSerializer()).serialize(value.platformType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserFileMembershipInfo { + switch json { + case .dictionary(let dict): + let accessType = Sharing.AccessLevelSerializer().deserialize(dict["access_type"] ?? .null) + let user = Sharing.UserInfoSerializer().deserialize(dict["user"] ?? .null) + let permissions = NullableSerializer(ArraySerializer(Sharing.MemberPermissionSerializer())).deserialize(dict["permissions"] ?? .null) + let initials = NullableSerializer(Serialization._StringSerializer).deserialize(dict["initials"] ?? .null) + let isInherited = Serialization._BoolSerializer.deserialize(dict["is_inherited"] ?? .number(0)) + let timeLastSeen = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["time_last_seen"] ?? .null) + let platformType = NullableSerializer(SeenState.PlatformTypeSerializer()).deserialize(dict["platform_type"] ?? .null) + return UserFileMembershipInfo(accessType: accessType, user: user, permissions: permissions, initials: initials, isInherited: isInherited, timeLastSeen: timeLastSeen, platformType: platformType) + default: + fatalError("Type error deserializing") + } + } + } + + /// Basic information about a user. Use usersAccount and usersAccountBatch to obtain more detailed information. + open class UserInfo: CustomStringConvertible { + /// The account ID of the user. + public let accountId: String + /// Email address of user. + public let email: String + /// The display name of the user. + public let displayName: String + /// If the user is in the same team as current user. + public let sameTeam: Bool + /// The team member ID of the shared folder member. Only present if sameTeam is true. + public let teamMemberId: String? + public init(accountId: String, email: String, displayName: String, sameTeam: Bool, teamMemberId: String? = nil) { + stringValidator(minLength: 40, maxLength: 40)(accountId) + self.accountId = accountId + stringValidator()(email) + self.email = email + stringValidator()(displayName) + self.displayName = displayName + self.sameTeam = sameTeam + nullableValidator(stringValidator())(teamMemberId) + self.teamMemberId = teamMemberId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserInfoSerializer().serialize(self)))" + } + } + open class UserInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserInfo) -> JSON { + let output = [ + "account_id": Serialization._StringSerializer.serialize(value.accountId), + "email": Serialization._StringSerializer.serialize(value.email), + "display_name": Serialization._StringSerializer.serialize(value.displayName), + "same_team": Serialization._BoolSerializer.serialize(value.sameTeam), + "team_member_id": NullableSerializer(Serialization._StringSerializer).serialize(value.teamMemberId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserInfo { + switch json { + case .dictionary(let dict): + let accountId = Serialization._StringSerializer.deserialize(dict["account_id"] ?? .null) + let email = Serialization._StringSerializer.deserialize(dict["email"] ?? .null) + let displayName = Serialization._StringSerializer.deserialize(dict["display_name"] ?? .null) + let sameTeam = Serialization._BoolSerializer.deserialize(dict["same_team"] ?? .null) + let teamMemberId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["team_member_id"] ?? .null) + return UserInfo(accountId: accountId, email: email, displayName: displayName, sameTeam: sameTeam, teamMemberId: teamMemberId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ViewerInfoPolicy union + public enum ViewerInfoPolicy: CustomStringConvertible { + /// Viewer information is available on this file. + case enabled + /// Viewer information is disabled on this file. + case disabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ViewerInfoPolicySerializer().serialize(self)))" + } + } + open class ViewerInfoPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ViewerInfoPolicy) -> JSON { + switch value { + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ViewerInfoPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "enabled": + return ViewerInfoPolicy.enabled + case "disabled": + return ViewerInfoPolicy.disabled + case "other": + return ViewerInfoPolicy.other + default: + return ViewerInfoPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Who can access a shared link. The most open visibility is public_. The default depends on many aspects, such as + /// team and user preferences and shared folder settings. + public enum Visibility: CustomStringConvertible { + /// Anyone who has received the link can access it. No login required. + case public_ + /// Only members of the same team can access the link. Login is required. + case teamOnly + /// A link-specific password is required to access the link. Login is not required. + case password + /// Only members of the same team who have the link-specific password can access the link. + case teamAndPassword + /// Only members of the shared folder containing the linked file can access the link. Login is required. + case sharedFolderOnly + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(VisibilitySerializer().serialize(self)))" + } + } + open class VisibilitySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Visibility) -> JSON { + switch value { + case .public_: + var d = [String: JSON]() + d[".tag"] = .str("public") + return .dictionary(d) + case .teamOnly: + var d = [String: JSON]() + d[".tag"] = .str("team_only") + return .dictionary(d) + case .password: + var d = [String: JSON]() + d[".tag"] = .str("password") + return .dictionary(d) + case .teamAndPassword: + var d = [String: JSON]() + d[".tag"] = .str("team_and_password") + return .dictionary(d) + case .sharedFolderOnly: + var d = [String: JSON]() + d[".tag"] = .str("shared_folder_only") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> Visibility { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "public": + return Visibility.public_ + case "team_only": + return Visibility.teamOnly + case "password": + return Visibility.password + case "team_and_password": + return Visibility.teamAndPassword + case "shared_folder_only": + return Visibility.sharedFolderOnly + case "other": + return Visibility.other + default: + return Visibility.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + + /// Stone Route Objects + + static let addFileMember = Route( + name: "add_file_member", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.AddFileMemberArgsSerializer(), + responseSerializer: ArraySerializer(Sharing.FileMemberActionResultSerializer()), + errorSerializer: Sharing.AddFileMemberErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let addFolderMember = Route( + name: "add_folder_member", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.AddFolderMemberArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Sharing.AddFolderMemberErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let changeFileMemberAccess = Route( + name: "change_file_member_access", + version: 1, + namespace: "sharing", + deprecated: true, + argSerializer: Sharing.ChangeFileMemberAccessArgsSerializer(), + responseSerializer: Sharing.FileMemberActionResultSerializer(), + errorSerializer: Sharing.FileMemberActionErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let checkJobStatus = Route( + name: "check_job_status", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Sharing.JobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let checkRemoveMemberJobStatus = Route( + name: "check_remove_member_job_status", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Sharing.RemoveMemberJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let checkShareJobStatus = Route( + name: "check_share_job_status", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Sharing.ShareFolderJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let createSharedLink = Route( + name: "create_shared_link", + version: 1, + namespace: "sharing", + deprecated: true, + argSerializer: Sharing.CreateSharedLinkArgSerializer(), + responseSerializer: Sharing.PathLinkMetadataSerializer(), + errorSerializer: Sharing.CreateSharedLinkErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let createSharedLinkWithSettings = Route( + name: "create_shared_link_with_settings", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.CreateSharedLinkWithSettingsArgSerializer(), + responseSerializer: Sharing.SharedLinkMetadataSerializer(), + errorSerializer: Sharing.CreateSharedLinkWithSettingsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getFileMetadata = Route( + name: "get_file_metadata", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.GetFileMetadataArgSerializer(), + responseSerializer: Sharing.SharedFileMetadataSerializer(), + errorSerializer: Sharing.GetFileMetadataErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getFileMetadataBatch = Route( + name: "get_file_metadata/batch", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.GetFileMetadataBatchArgSerializer(), + responseSerializer: ArraySerializer(Sharing.GetFileMetadataBatchResultSerializer()), + errorSerializer: Sharing.SharingUserErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getFolderMetadata = Route( + name: "get_folder_metadata", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.GetMetadataArgsSerializer(), + responseSerializer: Sharing.SharedFolderMetadataSerializer(), + errorSerializer: Sharing.SharedFolderAccessErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getSharedLinkFile = Route( + name: "get_shared_link_file", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.GetSharedLinkMetadataArgSerializer(), + responseSerializer: Sharing.SharedLinkMetadataSerializer(), + errorSerializer: Sharing.GetSharedLinkFileErrorSerializer(), + attrs: ["host": "content", + "style": "download"] + ) + static let getSharedLinkMetadata = Route( + name: "get_shared_link_metadata", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.GetSharedLinkMetadataArgSerializer(), + responseSerializer: Sharing.SharedLinkMetadataSerializer(), + errorSerializer: Sharing.SharedLinkErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getSharedLinks = Route( + name: "get_shared_links", + version: 1, + namespace: "sharing", + deprecated: true, + argSerializer: Sharing.GetSharedLinksArgSerializer(), + responseSerializer: Sharing.GetSharedLinksResultSerializer(), + errorSerializer: Sharing.GetSharedLinksErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFileMembers = Route( + name: "list_file_members", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFileMembersArgSerializer(), + responseSerializer: Sharing.SharedFileMembersSerializer(), + errorSerializer: Sharing.ListFileMembersErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFileMembersBatch = Route( + name: "list_file_members/batch", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFileMembersBatchArgSerializer(), + responseSerializer: ArraySerializer(Sharing.ListFileMembersBatchResultSerializer()), + errorSerializer: Sharing.SharingUserErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFileMembersContinue = Route( + name: "list_file_members/continue", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFileMembersContinueArgSerializer(), + responseSerializer: Sharing.SharedFileMembersSerializer(), + errorSerializer: Sharing.ListFileMembersContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFolderMembers = Route( + name: "list_folder_members", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFolderMembersArgsSerializer(), + responseSerializer: Sharing.SharedFolderMembersSerializer(), + errorSerializer: Sharing.SharedFolderAccessErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFolderMembersContinue = Route( + name: "list_folder_members/continue", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFolderMembersContinueArgSerializer(), + responseSerializer: Sharing.SharedFolderMembersSerializer(), + errorSerializer: Sharing.ListFolderMembersContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFolders = Route( + name: "list_folders", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFoldersArgsSerializer(), + responseSerializer: Sharing.ListFoldersResultSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let listFoldersContinue = Route( + name: "list_folders/continue", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFoldersContinueArgSerializer(), + responseSerializer: Sharing.ListFoldersResultSerializer(), + errorSerializer: Sharing.ListFoldersContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listMountableFolders = Route( + name: "list_mountable_folders", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFoldersArgsSerializer(), + responseSerializer: Sharing.ListFoldersResultSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let listMountableFoldersContinue = Route( + name: "list_mountable_folders/continue", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFoldersContinueArgSerializer(), + responseSerializer: Sharing.ListFoldersResultSerializer(), + errorSerializer: Sharing.ListFoldersContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listReceivedFiles = Route( + name: "list_received_files", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFilesArgSerializer(), + responseSerializer: Sharing.ListFilesResultSerializer(), + errorSerializer: Sharing.SharingUserErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listReceivedFilesContinue = Route( + name: "list_received_files/continue", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListFilesContinueArgSerializer(), + responseSerializer: Sharing.ListFilesResultSerializer(), + errorSerializer: Sharing.ListFilesContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let listSharedLinks = Route( + name: "list_shared_links", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ListSharedLinksArgSerializer(), + responseSerializer: Sharing.ListSharedLinksResultSerializer(), + errorSerializer: Sharing.ListSharedLinksErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let modifySharedLinkSettings = Route( + name: "modify_shared_link_settings", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ModifySharedLinkSettingsArgsSerializer(), + responseSerializer: Sharing.SharedLinkMetadataSerializer(), + errorSerializer: Sharing.ModifySharedLinkSettingsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let mountFolder = Route( + name: "mount_folder", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.MountFolderArgSerializer(), + responseSerializer: Sharing.SharedFolderMetadataSerializer(), + errorSerializer: Sharing.MountFolderErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let relinquishFileMembership = Route( + name: "relinquish_file_membership", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.RelinquishFileMembershipArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Sharing.RelinquishFileMembershipErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let relinquishFolderMembership = Route( + name: "relinquish_folder_membership", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.RelinquishFolderMembershipArgSerializer(), + responseSerializer: Async.LaunchEmptyResultSerializer(), + errorSerializer: Sharing.RelinquishFolderMembershipErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let removeFileMember = Route( + name: "remove_file_member", + version: 1, + namespace: "sharing", + deprecated: true, + argSerializer: Sharing.RemoveFileMemberArgSerializer(), + responseSerializer: Sharing.FileMemberActionIndividualResultSerializer(), + errorSerializer: Sharing.RemoveFileMemberErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let removeFileMember2 = Route( + name: "remove_file_member_2", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.RemoveFileMemberArgSerializer(), + responseSerializer: Sharing.FileMemberRemoveActionResultSerializer(), + errorSerializer: Sharing.RemoveFileMemberErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let removeFolderMember = Route( + name: "remove_folder_member", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.RemoveFolderMemberArgSerializer(), + responseSerializer: Async.LaunchResultBaseSerializer(), + errorSerializer: Sharing.RemoveFolderMemberErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let revokeSharedLink = Route( + name: "revoke_shared_link", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.RevokeSharedLinkArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Sharing.RevokeSharedLinkErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let setAccessInheritance = Route( + name: "set_access_inheritance", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.SetAccessInheritanceArgSerializer(), + responseSerializer: Sharing.ShareFolderLaunchSerializer(), + errorSerializer: Sharing.SetAccessInheritanceErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let shareFolder = Route( + name: "share_folder", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.ShareFolderArgSerializer(), + responseSerializer: Sharing.ShareFolderLaunchSerializer(), + errorSerializer: Sharing.ShareFolderErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let transferFolder = Route( + name: "transfer_folder", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.TransferFolderArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Sharing.TransferFolderErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let unmountFolder = Route( + name: "unmount_folder", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.UnmountFolderArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Sharing.UnmountFolderErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let unshareFile = Route( + name: "unshare_file", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.UnshareFileArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Sharing.UnshareFileErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let unshareFolder = Route( + name: "unshare_folder", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.UnshareFolderArgSerializer(), + responseSerializer: Async.LaunchEmptyResultSerializer(), + errorSerializer: Sharing.UnshareFolderErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let updateFileMember = Route( + name: "update_file_member", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.UpdateFileMemberArgsSerializer(), + responseSerializer: Sharing.MemberAccessLevelResultSerializer(), + errorSerializer: Sharing.FileMemberActionErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let updateFolderMember = Route( + name: "update_folder_member", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.UpdateFolderMemberArgSerializer(), + responseSerializer: Sharing.MemberAccessLevelResultSerializer(), + errorSerializer: Sharing.UpdateFolderMemberErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let updateFolderPolicy = Route( + name: "update_folder_policy", + version: 1, + namespace: "sharing", + deprecated: false, + argSerializer: Sharing.UpdateFolderPolicyArgSerializer(), + responseSerializer: Sharing.SharedFolderMetadataSerializer(), + errorSerializer: Sharing.UpdateFolderPolicyErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift new file mode 100644 index 0000000..023c259 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift @@ -0,0 +1,672 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the sharing namespace +open class SharingRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// Adds specified members to a file. + /// + /// - parameter file: File to which to add members. + /// - parameter members: Members to add. Note that even an email address is given, this may result in a user being + /// directy added to the membership if that email is the user's main account email. + /// - parameter customMessage: Message to send to added members in their invitation. + /// - parameter quiet: Whether added members should be notified via device notifications of their invitation. + /// - parameter accessLevel: AccessLevel union object, describing what access level we want to give new members. + /// - parameter addMessageAsComment: If the custom message should be added as a comment on the file. + /// + /// - returns: Through the response callback, the caller will receive a `Array` + /// object on success or a `Sharing.AddFileMemberError` object on failure. + @discardableResult open func addFileMember(file: String, members: Array, customMessage: String? = nil, quiet: Bool = false, accessLevel: Sharing.AccessLevel = .viewer, addMessageAsComment: Bool = false) -> RpcRequest, Sharing.AddFileMemberErrorSerializer> { + let route = Sharing.addFileMember + let serverArgs = Sharing.AddFileMemberArgs(file: file, members: members, customMessage: customMessage, quiet: quiet, accessLevel: accessLevel, addMessageAsComment: addMessageAsComment) + return client.request(route, serverArgs: serverArgs) + } + + /// Allows an owner or editor (if the ACL update policy allows) of a shared folder to add another member. For the + /// new member to get access to all the functionality for this folder, you will need to call mountFolder on their + /// behalf. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// - parameter members: The intended list of members to add. Added members will receive invites to join the shared + /// folder. + /// - parameter quiet: Whether added members should be notified via email and device notifications of their invite. + /// - parameter customMessage: Optional message to display to added members in their invitation. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Sharing.AddFolderMemberError` object on failure. + @discardableResult open func addFolderMember(sharedFolderId: String, members: Array, quiet: Bool = false, customMessage: String? = nil) -> RpcRequest { + let route = Sharing.addFolderMember + let serverArgs = Sharing.AddFolderMemberArg(sharedFolderId: sharedFolderId, members: members, quiet: quiet, customMessage: customMessage) + return client.request(route, serverArgs: serverArgs) + } + + /// Identical to update_file_member but with less information returned. + /// + /// - parameter file: File for which we are changing a member's access. + /// - parameter member: The member whose access we are changing. + /// - parameter accessLevel: The new access level for the member. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.FileMemberActionResult` object on + /// success or a `Sharing.FileMemberActionError` object on failure. + @available(*, unavailable, message:"changeFileMemberAccess is deprecated. Use updateFileMember.") + @discardableResult open func changeFileMemberAccess(file: String, member: Sharing.MemberSelector, accessLevel: Sharing.AccessLevel) -> RpcRequest { + let route = Sharing.changeFileMemberAccess + let serverArgs = Sharing.ChangeFileMemberAccessArgs(file: file, member: member, accessLevel: accessLevel) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.JobStatus` object on success or a + /// `Async.PollError` object on failure. + @discardableResult open func checkJobStatus(asyncJobId: String) -> RpcRequest { + let route = Sharing.checkJobStatus + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for sharing a folder. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.RemoveMemberJobStatus` object on + /// success or a `Async.PollError` object on failure. + @discardableResult open func checkRemoveMemberJobStatus(asyncJobId: String) -> RpcRequest { + let route = Sharing.checkRemoveMemberJobStatus + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for sharing a folder. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ShareFolderJobStatus` object on + /// success or a `Async.PollError` object on failure. + @discardableResult open func checkShareJobStatus(asyncJobId: String) -> RpcRequest { + let route = Sharing.checkShareJobStatus + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Create a shared link. If a shared link already exists for the given path, that link is returned. Note that in + /// the returned PathLinkMetadata, the url in PathLinkMetadata field is the shortened URL if shortUrl in + /// CreateSharedLinkArg argument is set to true. Previously, it was technically possible to break a shared link by + /// moving or renaming the corresponding file or folder. In the future, this will no longer be the case, so your app + /// shouldn't rely on this behavior. Instead, if your app needs to revoke a shared link, use revokeSharedLink. + /// + /// - parameter path: The path to share. + /// - parameter shortUrl: Whether to return a shortened URL. + /// - parameter pendingUpload: If it's okay to share a path that does not yet exist, set this to either file in + /// PendingUploadMode or folder in PendingUploadMode to indicate whether to assume it's a file or folder. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.PathLinkMetadata` object on + /// success or a `Sharing.CreateSharedLinkError` object on failure. + @available(*, unavailable, message:"createSharedLink is deprecated. Use createSharedLinkWithSettings.") + @discardableResult open func createSharedLink(path: String, shortUrl: Bool = false, pendingUpload: Sharing.PendingUploadMode? = nil) -> RpcRequest { + let route = Sharing.createSharedLink + let serverArgs = Sharing.CreateSharedLinkArg(path: path, shortUrl: shortUrl, pendingUpload: pendingUpload) + return client.request(route, serverArgs: serverArgs) + } + + /// Create a shared link with custom settings. If no settings are given then the default visibility is public_ in + /// RequestedVisibility (The resolved visibility, though, may depend on other aspects such as team and shared folder + /// settings). + /// + /// - parameter path: The path to be shared by the shared link. + /// - parameter settings: The requested settings for the newly created shared link. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedLinkMetadata` object on + /// success or a `Sharing.CreateSharedLinkWithSettingsError` object on failure. + @discardableResult open func createSharedLinkWithSettings(path: String, settings: Sharing.SharedLinkSettings? = nil) -> RpcRequest { + let route = Sharing.createSharedLinkWithSettings + let serverArgs = Sharing.CreateSharedLinkWithSettingsArg(path: path, settings: settings) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns shared file metadata. + /// + /// - parameter file: The file to query. + /// - parameter actions: A list of `FileAction`s corresponding to `FilePermission`s that should appear in the + /// response's permissions in SharedFileMetadata field describing the actions the authenticated user can perform on + /// the file. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedFileMetadata` object on + /// success or a `Sharing.GetFileMetadataError` object on failure. + @discardableResult open func getFileMetadata(file: String, actions: Array? = nil) -> RpcRequest { + let route = Sharing.getFileMetadata + let serverArgs = Sharing.GetFileMetadataArg(file: file, actions: actions) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns shared file metadata. + /// + /// - parameter files: The files to query. + /// - parameter actions: A list of `FileAction`s corresponding to `FilePermission`s that should appear in the + /// response's permissions in SharedFileMetadata field describing the actions the authenticated user can perform on + /// the file. + /// + /// - returns: Through the response callback, the caller will receive a `Array` + /// object on success or a `Sharing.SharingUserError` object on failure. + @discardableResult open func getFileMetadataBatch(files: Array, actions: Array? = nil) -> RpcRequest, Sharing.SharingUserErrorSerializer> { + let route = Sharing.getFileMetadataBatch + let serverArgs = Sharing.GetFileMetadataBatchArg(files: files, actions: actions) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns shared folder metadata by its folder ID. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// - parameter actions: A list of `FolderAction`s corresponding to `FolderPermission`s that should appear in the + /// response's permissions in SharedFolderMetadata field describing the actions the authenticated user can perform + /// on the folder. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedFolderMetadata` object on + /// success or a `Sharing.SharedFolderAccessError` object on failure. + @discardableResult open func getFolderMetadata(sharedFolderId: String, actions: Array? = nil) -> RpcRequest { + let route = Sharing.getFolderMetadata + let serverArgs = Sharing.GetMetadataArgs(sharedFolderId: sharedFolderId, actions: actions) + return client.request(route, serverArgs: serverArgs) + } + + /// Download the shared link's file from a user's Dropbox. + /// + /// - parameter url: URL of the shared link. + /// - parameter path: If the shared link is to a folder, this parameter can be used to retrieve the metadata for a + /// specific file or sub-folder in this folder. A relative path should be used. + /// - parameter linkPassword: If the shared link has a password, this parameter can be used. + /// - parameter overwrite: A boolean to set behavior in the event of a naming conflict. `True` will overwrite + /// conflicting file at destination. `False` will take no action (but if left unhandled in destination closure, an + /// NSError will be thrown). + /// - parameter destination: A closure used to compute the destination, given the temporary file location and the + /// response. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedLinkMetadata` object on + /// success or a `Sharing.GetSharedLinkFileError` object on failure. + @discardableResult open func getSharedLinkFile(url: String, path: String? = nil, linkPassword: String? = nil, overwrite: Bool = false, destination: @escaping (URL, HTTPURLResponse) -> URL) -> DownloadRequestFile { + let route = Sharing.getSharedLinkFile + let serverArgs = Sharing.GetSharedLinkMetadataArg(url: url, path: path, linkPassword: linkPassword) + return client.request(route, serverArgs: serverArgs, overwrite: overwrite, destination: destination) + } + + /// Download the shared link's file from a user's Dropbox. + /// + /// - parameter url: URL of the shared link. + /// - parameter path: If the shared link is to a folder, this parameter can be used to retrieve the metadata for a + /// specific file or sub-folder in this folder. A relative path should be used. + /// - parameter linkPassword: If the shared link has a password, this parameter can be used. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedLinkMetadata` object on + /// success or a `Sharing.GetSharedLinkFileError` object on failure. + @discardableResult open func getSharedLinkFile(url: String, path: String? = nil, linkPassword: String? = nil) -> DownloadRequestMemory { + let route = Sharing.getSharedLinkFile + let serverArgs = Sharing.GetSharedLinkMetadataArg(url: url, path: path, linkPassword: linkPassword) + return client.request(route, serverArgs: serverArgs) + } + + /// Get the shared link's metadata. + /// + /// - parameter url: URL of the shared link. + /// - parameter path: If the shared link is to a folder, this parameter can be used to retrieve the metadata for a + /// specific file or sub-folder in this folder. A relative path should be used. + /// - parameter linkPassword: If the shared link has a password, this parameter can be used. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedLinkMetadata` object on + /// success or a `Sharing.SharedLinkError` object on failure. + @discardableResult open func getSharedLinkMetadata(url: String, path: String? = nil, linkPassword: String? = nil) -> RpcRequest { + let route = Sharing.getSharedLinkMetadata + let serverArgs = Sharing.GetSharedLinkMetadataArg(url: url, path: path, linkPassword: linkPassword) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns a list of LinkMetadata objects for this user, including collection links. If no path is given, returns a + /// list of all shared links for the current user, including collection links, up to a maximum of 1000 links. If a + /// non-empty path is given, returns a list of all shared links that allow access to the given path. Collection + /// links are never returned in this case. Note that the url field in the response is never the shortened URL. + /// + /// - parameter path: See getSharedLinks description. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.GetSharedLinksResult` object on + /// success or a `Sharing.GetSharedLinksError` object on failure. + @available(*, unavailable, message:"getSharedLinks is deprecated. Use listSharedLinks.") + @discardableResult open func getSharedLinks(path: String? = nil) -> RpcRequest { + let route = Sharing.getSharedLinks + let serverArgs = Sharing.GetSharedLinksArg(path: path) + return client.request(route, serverArgs: serverArgs) + } + + /// Use to obtain the members who have been invited to a file, both inherited and uninherited members. + /// + /// - parameter file: The file for which you want to see members. + /// - parameter actions: The actions for which to return permissions on a member. + /// - parameter includeInherited: Whether to include members who only have access from a parent shared folder. + /// - parameter limit: Number of members to return max per query. Defaults to 100 if no limit is specified. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedFileMembers` object on + /// success or a `Sharing.ListFileMembersError` object on failure. + @discardableResult open func listFileMembers(file: String, actions: Array? = nil, includeInherited: Bool = true, limit: UInt32 = 100) -> RpcRequest { + let route = Sharing.listFileMembers + let serverArgs = Sharing.ListFileMembersArg(file: file, actions: actions, includeInherited: includeInherited, limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Get members of multiple files at once. The arguments to this route are more limited, and the limit on query + /// result size per file is more strict. To customize the results more, use the individual file endpoint. Inherited + /// users and groups are not included in the result, and permissions are not returned for this endpoint. + /// + /// - parameter files: Files for which to return members. + /// - parameter limit: Number of members to return max per query. Defaults to 10 if no limit is specified. + /// + /// - returns: Through the response callback, the caller will receive a `Array` + /// object on success or a `Sharing.SharingUserError` object on failure. + @discardableResult open func listFileMembersBatch(files: Array, limit: UInt32 = 10) -> RpcRequest, Sharing.SharingUserErrorSerializer> { + let route = Sharing.listFileMembersBatch + let serverArgs = Sharing.ListFileMembersBatchArg(files: files, limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from listFileMembers or listFileMembersBatch, use this to paginate through all + /// shared file members. + /// + /// - parameter cursor: The cursor returned by your last call to listFileMembers, listFileMembersContinue, or + /// listFileMembersBatch. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedFileMembers` object on + /// success or a `Sharing.ListFileMembersContinueError` object on failure. + @discardableResult open func listFileMembersContinue(cursor: String) -> RpcRequest { + let route = Sharing.listFileMembersContinue + let serverArgs = Sharing.ListFileMembersContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns shared folder membership by its folder ID. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedFolderMembers` object on + /// success or a `Sharing.SharedFolderAccessError` object on failure. + @discardableResult open func listFolderMembers(sharedFolderId: String, actions: Array? = nil, limit: UInt32 = 1000) -> RpcRequest { + let route = Sharing.listFolderMembers + let serverArgs = Sharing.ListFolderMembersArgs(sharedFolderId: sharedFolderId, actions: actions, limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from listFolderMembers, use this to paginate through all shared folder members. + /// + /// - parameter cursor: The cursor returned by your last call to listFolderMembers or listFolderMembersContinue. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedFolderMembers` object on + /// success or a `Sharing.ListFolderMembersContinueError` object on failure. + @discardableResult open func listFolderMembersContinue(cursor: String) -> RpcRequest { + let route = Sharing.listFolderMembersContinue + let serverArgs = Sharing.ListFolderMembersContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Return the list of all shared folders the current user has access to. + /// + /// - parameter limit: The maximum number of results to return per request. + /// - parameter actions: A list of `FolderAction`s corresponding to `FolderPermission`s that should appear in the + /// response's permissions in SharedFolderMetadata field describing the actions the authenticated user can perform + /// on the folder. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ListFoldersResult` object on + /// success or a `Void` object on failure. + @discardableResult open func listFolders(limit: UInt32 = 1000, actions: Array? = nil) -> RpcRequest { + let route = Sharing.listFolders + let serverArgs = Sharing.ListFoldersArgs(limit: limit, actions: actions) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from listFolders, use this to paginate through all shared folders. The cursor + /// must come from a previous call to listFolders or listFoldersContinue. + /// + /// - parameter cursor: The cursor returned by the previous API call specified in the endpoint description. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ListFoldersResult` object on + /// success or a `Sharing.ListFoldersContinueError` object on failure. + @discardableResult open func listFoldersContinue(cursor: String) -> RpcRequest { + let route = Sharing.listFoldersContinue + let serverArgs = Sharing.ListFoldersContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Return the list of all shared folders the current user can mount or unmount. + /// + /// - parameter limit: The maximum number of results to return per request. + /// - parameter actions: A list of `FolderAction`s corresponding to `FolderPermission`s that should appear in the + /// response's permissions in SharedFolderMetadata field describing the actions the authenticated user can perform + /// on the folder. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ListFoldersResult` object on + /// success or a `Void` object on failure. + @discardableResult open func listMountableFolders(limit: UInt32 = 1000, actions: Array? = nil) -> RpcRequest { + let route = Sharing.listMountableFolders + let serverArgs = Sharing.ListFoldersArgs(limit: limit, actions: actions) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from listMountableFolders, use this to paginate through all mountable shared + /// folders. The cursor must come from a previous call to listMountableFolders or listMountableFoldersContinue. + /// + /// - parameter cursor: The cursor returned by the previous API call specified in the endpoint description. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ListFoldersResult` object on + /// success or a `Sharing.ListFoldersContinueError` object on failure. + @discardableResult open func listMountableFoldersContinue(cursor: String) -> RpcRequest { + let route = Sharing.listMountableFoldersContinue + let serverArgs = Sharing.ListFoldersContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns a list of all files shared with current user. Does not include files the user has received via shared + /// folders, and does not include unclaimed invitations. + /// + /// - parameter limit: Number of files to return max per query. Defaults to 100 if no limit is specified. + /// - parameter actions: A list of `FileAction`s corresponding to `FilePermission`s that should appear in the + /// response's permissions in SharedFileMetadata field describing the actions the authenticated user can perform on + /// the file. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ListFilesResult` object on success + /// or a `Sharing.SharingUserError` object on failure. + @discardableResult open func listReceivedFiles(limit: UInt32 = 100, actions: Array? = nil) -> RpcRequest { + let route = Sharing.listReceivedFiles + let serverArgs = Sharing.ListFilesArg(limit: limit, actions: actions) + return client.request(route, serverArgs: serverArgs) + } + + /// Get more results with a cursor from listReceivedFiles. + /// + /// - parameter cursor: Cursor in cursor in ListFilesResult. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ListFilesResult` object on success + /// or a `Sharing.ListFilesContinueError` object on failure. + @discardableResult open func listReceivedFilesContinue(cursor: String) -> RpcRequest { + let route = Sharing.listReceivedFilesContinue + let serverArgs = Sharing.ListFilesContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// List shared links of this user. If no path is given, returns a list of all shared links for the current user. If + /// a non-empty path is given, returns a list of all shared links that allow access to the given path - direct links + /// to the given path and links to parent folders of the given path. Links to parent folders can be suppressed by + /// setting direct_only to true. + /// + /// - parameter path: See listSharedLinks description. + /// - parameter cursor: The cursor returned by your last call to listSharedLinks. + /// - parameter directOnly: See listSharedLinks description. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ListSharedLinksResult` object on + /// success or a `Sharing.ListSharedLinksError` object on failure. + @discardableResult open func listSharedLinks(path: String? = nil, cursor: String? = nil, directOnly: Bool? = nil) -> RpcRequest { + let route = Sharing.listSharedLinks + let serverArgs = Sharing.ListSharedLinksArg(path: path, cursor: cursor, directOnly: directOnly) + return client.request(route, serverArgs: serverArgs) + } + + /// Modify the shared link's settings. If the requested visibility conflict with the shared links policy of the team + /// or the shared folder (in case the linked file is part of a shared folder) then the resolvedVisibility in + /// LinkPermissions of the returned SharedLinkMetadata will reflect the actual visibility of the shared link and the + /// requestedVisibility in LinkPermissions will reflect the requested visibility. + /// + /// - parameter url: URL of the shared link to change its settings. + /// - parameter settings: Set of settings for the shared link. + /// - parameter removeExpiration: If set to true, removes the expiration of the shared link. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedLinkMetadata` object on + /// success or a `Sharing.ModifySharedLinkSettingsError` object on failure. + @discardableResult open func modifySharedLinkSettings(url: String, settings: Sharing.SharedLinkSettings, removeExpiration: Bool = false) -> RpcRequest { + let route = Sharing.modifySharedLinkSettings + let serverArgs = Sharing.ModifySharedLinkSettingsArgs(url: url, settings: settings, removeExpiration: removeExpiration) + return client.request(route, serverArgs: serverArgs) + } + + /// The current user mounts the designated folder. Mount a shared folder for a user after they have been added as a + /// member. Once mounted, the shared folder will appear in their Dropbox. + /// + /// - parameter sharedFolderId: The ID of the shared folder to mount. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedFolderMetadata` object on + /// success or a `Sharing.MountFolderError` object on failure. + @discardableResult open func mountFolder(sharedFolderId: String) -> RpcRequest { + let route = Sharing.mountFolder + let serverArgs = Sharing.MountFolderArg(sharedFolderId: sharedFolderId) + return client.request(route, serverArgs: serverArgs) + } + + /// The current user relinquishes their membership in the designated file. Note that the current user may still have + /// inherited access to this file through the parent folder. + /// + /// - parameter file: The path or id for the file. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Sharing.RelinquishFileMembershipError` object on failure. + @discardableResult open func relinquishFileMembership(file: String) -> RpcRequest { + let route = Sharing.relinquishFileMembership + let serverArgs = Sharing.RelinquishFileMembershipArg(file: file) + return client.request(route, serverArgs: serverArgs) + } + + /// The current user relinquishes their membership in the designated shared folder and will no longer have access to + /// the folder. A folder owner cannot relinquish membership in their own folder. This will run synchronously if + /// leave_a_copy is false, and asynchronously if leave_a_copy is true. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// - parameter leaveACopy: Keep a copy of the folder's contents upon relinquishing membership. + /// + /// - returns: Through the response callback, the caller will receive a `Async.LaunchEmptyResult` object on success + /// or a `Sharing.RelinquishFolderMembershipError` object on failure. + @discardableResult open func relinquishFolderMembership(sharedFolderId: String, leaveACopy: Bool = false) -> RpcRequest { + let route = Sharing.relinquishFolderMembership + let serverArgs = Sharing.RelinquishFolderMembershipArg(sharedFolderId: sharedFolderId, leaveACopy: leaveACopy) + return client.request(route, serverArgs: serverArgs) + } + + /// Identical to remove_file_member_2 but with less information returned. + /// + /// - parameter file: File from which to remove members. + /// - parameter member: Member to remove from this file. Note that even if an email is specified, it may result in + /// the removal of a user (not an invitee) if the user's main account corresponds to that email address. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.FileMemberActionIndividualResult` + /// object on success or a `Sharing.RemoveFileMemberError` object on failure. + @available(*, unavailable, message:"removeFileMember is deprecated. Use removeFileMember2.") + @discardableResult open func removeFileMember(file: String, member: Sharing.MemberSelector) -> RpcRequest { + let route = Sharing.removeFileMember + let serverArgs = Sharing.RemoveFileMemberArg(file: file, member: member) + return client.request(route, serverArgs: serverArgs) + } + + /// Removes a specified member from the file. + /// + /// - parameter file: File from which to remove members. + /// - parameter member: Member to remove from this file. Note that even if an email is specified, it may result in + /// the removal of a user (not an invitee) if the user's main account corresponds to that email address. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.FileMemberRemoveActionResult` + /// object on success or a `Sharing.RemoveFileMemberError` object on failure. + @discardableResult open func removeFileMember2(file: String, member: Sharing.MemberSelector) -> RpcRequest { + let route = Sharing.removeFileMember2 + let serverArgs = Sharing.RemoveFileMemberArg(file: file, member: member) + return client.request(route, serverArgs: serverArgs) + } + + /// Allows an owner or editor (if the ACL update policy allows) of a shared folder to remove another member. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// - parameter member: The member to remove from the folder. + /// - parameter leaveACopy: If true, the removed user will keep their copy of the folder after it's unshared, + /// assuming it was mounted. Otherwise, it will be removed from their Dropbox. Also, this must be set to false when + /// kicking a group. + /// + /// - returns: Through the response callback, the caller will receive a `Async.LaunchResultBase` object on success + /// or a `Sharing.RemoveFolderMemberError` object on failure. + @discardableResult open func removeFolderMember(sharedFolderId: String, member: Sharing.MemberSelector, leaveACopy: Bool) -> RpcRequest { + let route = Sharing.removeFolderMember + let serverArgs = Sharing.RemoveFolderMemberArg(sharedFolderId: sharedFolderId, member: member, leaveACopy: leaveACopy) + return client.request(route, serverArgs: serverArgs) + } + + /// Revoke a shared link. Note that even after revoking a shared link to a file, the file may be accessible if there + /// are shared links leading to any of the file parent folders. To list all shared links that enable access to a + /// specific file, you can use the listSharedLinks with the file as the path in ListSharedLinksArg argument. + /// + /// - parameter url: URL of the shared link. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Sharing.RevokeSharedLinkError` object on failure. + @discardableResult open func revokeSharedLink(url: String) -> RpcRequest { + let route = Sharing.revokeSharedLink + let serverArgs = Sharing.RevokeSharedLinkArg(url: url) + return client.request(route, serverArgs: serverArgs) + } + + /// Change the inheritance policy of an existing Shared Folder. Only permitted for shared folders in a shared team + /// root. If a asyncJobId in ShareFolderLaunch is returned, you'll need to call checkShareJobStatus until the action + /// completes to get the metadata for the folder. + /// + /// - parameter accessInheritance: The access inheritance settings for the folder. + /// - parameter sharedFolderId: The ID for the shared folder. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ShareFolderLaunch` object on + /// success or a `Sharing.SetAccessInheritanceError` object on failure. + @discardableResult open func setAccessInheritance(sharedFolderId: String, accessInheritance: Sharing.AccessInheritance = .inherit) -> RpcRequest { + let route = Sharing.setAccessInheritance + let serverArgs = Sharing.SetAccessInheritanceArg(sharedFolderId: sharedFolderId, accessInheritance: accessInheritance) + return client.request(route, serverArgs: serverArgs) + } + + /// Share a folder with collaborators. Most sharing will be completed synchronously. Large folders will be completed + /// asynchronously. To make testing the async case repeatable, set `ShareFolderArg.force_async`. If a asyncJobId in + /// ShareFolderLaunch is returned, you'll need to call checkShareJobStatus until the action completes to get the + /// metadata for the folder. + /// + /// - parameter actions: A list of `FolderAction`s corresponding to `FolderPermission`s that should appear in the + /// response's permissions in SharedFolderMetadata field describing the actions the authenticated user can perform + /// on the folder. + /// - parameter linkSettings: Settings on the link for this folder. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.ShareFolderLaunch` object on + /// success or a `Sharing.ShareFolderError` object on failure. + @discardableResult open func shareFolder(path: String, aclUpdatePolicy: Sharing.AclUpdatePolicy? = nil, forceAsync: Bool = false, memberPolicy: Sharing.MemberPolicy? = nil, sharedLinkPolicy: Sharing.SharedLinkPolicy? = nil, viewerInfoPolicy: Sharing.ViewerInfoPolicy? = nil, accessInheritance: Sharing.AccessInheritance = .inherit, actions: Array? = nil, linkSettings: Sharing.LinkSettings? = nil) -> RpcRequest { + let route = Sharing.shareFolder + let serverArgs = Sharing.ShareFolderArg(path: path, aclUpdatePolicy: aclUpdatePolicy, forceAsync: forceAsync, memberPolicy: memberPolicy, sharedLinkPolicy: sharedLinkPolicy, viewerInfoPolicy: viewerInfoPolicy, accessInheritance: accessInheritance, actions: actions, linkSettings: linkSettings) + return client.request(route, serverArgs: serverArgs) + } + + /// Transfer ownership of a shared folder to a member of the shared folder. User must have owner in AccessLevel + /// access to the shared folder to perform a transfer. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// - parameter toDropboxId: A account or team member ID to transfer ownership to. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Sharing.TransferFolderError` object on failure. + @discardableResult open func transferFolder(sharedFolderId: String, toDropboxId: String) -> RpcRequest { + let route = Sharing.transferFolder + let serverArgs = Sharing.TransferFolderArg(sharedFolderId: sharedFolderId, toDropboxId: toDropboxId) + return client.request(route, serverArgs: serverArgs) + } + + /// The current user unmounts the designated folder. They can re-mount the folder at a later time using mountFolder. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Sharing.UnmountFolderError` object on failure. + @discardableResult open func unmountFolder(sharedFolderId: String) -> RpcRequest { + let route = Sharing.unmountFolder + let serverArgs = Sharing.UnmountFolderArg(sharedFolderId: sharedFolderId) + return client.request(route, serverArgs: serverArgs) + } + + /// Remove all members from this file. Does not remove inherited members. + /// + /// - parameter file: The file to unshare. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Sharing.UnshareFileError` object on failure. + @discardableResult open func unshareFile(file: String) -> RpcRequest { + let route = Sharing.unshareFile + let serverArgs = Sharing.UnshareFileArg(file: file) + return client.request(route, serverArgs: serverArgs) + } + + /// Allows a shared folder owner to unshare the folder. You'll need to call checkJobStatus to determine if the + /// action has completed successfully. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// - parameter leaveACopy: If true, members of this shared folder will get a copy of this folder after it's + /// unshared. Otherwise, it will be removed from their Dropbox. The current user, who is an owner, will always + /// retain their copy. + /// + /// - returns: Through the response callback, the caller will receive a `Async.LaunchEmptyResult` object on success + /// or a `Sharing.UnshareFolderError` object on failure. + @discardableResult open func unshareFolder(sharedFolderId: String, leaveACopy: Bool = false) -> RpcRequest { + let route = Sharing.unshareFolder + let serverArgs = Sharing.UnshareFolderArg(sharedFolderId: sharedFolderId, leaveACopy: leaveACopy) + return client.request(route, serverArgs: serverArgs) + } + + /// Changes a member's access on a shared file. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.MemberAccessLevelResult` object on + /// success or a `Sharing.FileMemberActionError` object on failure. + @discardableResult open func updateFileMember(file: String, member: Sharing.MemberSelector, accessLevel: Sharing.AccessLevel) -> RpcRequest { + let route = Sharing.updateFileMember + let serverArgs = Sharing.UpdateFileMemberArgs(file: file, member: member, accessLevel: accessLevel) + return client.request(route, serverArgs: serverArgs) + } + + /// Allows an owner or editor of a shared folder to update another member's permissions. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// - parameter member: The member of the shared folder to update. Only the dropboxId in MemberSelector may be set + /// at this time. + /// - parameter accessLevel: The new access level for member. owner in AccessLevel is disallowed. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.MemberAccessLevelResult` object on + /// success or a `Sharing.UpdateFolderMemberError` object on failure. + @discardableResult open func updateFolderMember(sharedFolderId: String, member: Sharing.MemberSelector, accessLevel: Sharing.AccessLevel) -> RpcRequest { + let route = Sharing.updateFolderMember + let serverArgs = Sharing.UpdateFolderMemberArg(sharedFolderId: sharedFolderId, member: member, accessLevel: accessLevel) + return client.request(route, serverArgs: serverArgs) + } + + /// Update the sharing policies for a shared folder. User must have owner in AccessLevel access to the shared folder + /// to update its policies. + /// + /// - parameter sharedFolderId: The ID for the shared folder. + /// - parameter memberPolicy: Who can be a member of this shared folder. Only applicable if the current user is on a + /// team. + /// - parameter aclUpdatePolicy: Who can add and remove members of this shared folder. + /// - parameter viewerInfoPolicy: Who can enable/disable viewer info for this shared folder. + /// - parameter sharedLinkPolicy: The policy to apply to shared links created for content inside this shared folder. + /// The current user must be on a team to set this policy to members in SharedLinkPolicy. + /// - parameter linkSettings: Settings on the link for this folder. + /// - parameter actions: A list of `FolderAction`s corresponding to `FolderPermission`s that should appear in the + /// response's permissions in SharedFolderMetadata field describing the actions the authenticated user can perform + /// on the folder. + /// + /// - returns: Through the response callback, the caller will receive a `Sharing.SharedFolderMetadata` object on + /// success or a `Sharing.UpdateFolderPolicyError` object on failure. + @discardableResult open func updateFolderPolicy(sharedFolderId: String, memberPolicy: Sharing.MemberPolicy? = nil, aclUpdatePolicy: Sharing.AclUpdatePolicy? = nil, viewerInfoPolicy: Sharing.ViewerInfoPolicy? = nil, sharedLinkPolicy: Sharing.SharedLinkPolicy? = nil, linkSettings: Sharing.LinkSettings? = nil, actions: Array? = nil) -> RpcRequest { + let route = Sharing.updateFolderPolicy + let serverArgs = Sharing.UpdateFolderPolicyArg(sharedFolderId: sharedFolderId, memberPolicy: memberPolicy, aclUpdatePolicy: aclUpdatePolicy, viewerInfoPolicy: viewerInfoPolicy, sharedLinkPolicy: sharedLinkPolicy, linkSettings: linkSettings, actions: actions) + return client.request(route, serverArgs: serverArgs) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneBase.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneBase.swift new file mode 100644 index 0000000..e81d570 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneBase.swift @@ -0,0 +1,31 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation + +// The objects in this file are used by generated code and should not need to be invoked manually. + +open class Route { + public let name: String + public let version: Int32 + public let namespace: String + public let deprecated: Bool + public let argSerializer: ASerial + public let responseSerializer: RSerial + public let errorSerializer: ESerial + public let attrs: [String: String?] + + public init(name: String, version: Int32, namespace: String, deprecated: Bool, + argSerializer: ASerial, responseSerializer: RSerial, errorSerializer: ESerial, + attrs: [String: String?]) { + self.name = name + self.version = version + self.namespace = namespace + self.deprecated = deprecated + self.argSerializer = argSerializer + self.responseSerializer = responseSerializer + self.errorSerializer = errorSerializer + self.attrs = attrs + } +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneSerializers.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneSerializers.swift new file mode 100644 index 0000000..cc79762 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneSerializers.swift @@ -0,0 +1,415 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation + +// The objects in this file are used by generated code and should not need to be invoked manually. + +public enum JSON { + case array([JSON]) + case dictionary([String: JSON]) + case str(String) + case number(NSNumber) + case null +} + +open class SerializeUtil { + open class func objectToJSON(_ json: AnyObject) -> JSON { + + switch json { + case _ as NSNull: + return .null + case let num as NSNumber: + return .number(num) + case let str as String: + return .str(str) + case let dict as [String: AnyObject]: + var ret = [String: JSON]() + for (k, v) in dict { + ret[k] = objectToJSON(v) + } + return .dictionary(ret) + case let array as [AnyObject]: + return .array(array.map(objectToJSON)) + default: + fatalError("Unknown type trying to parse JSON.") + } + } + + open class func prepareJSONForSerialization(_ json: JSON) -> AnyObject { + switch json { + case .array(let array): + return array.map(prepareJSONForSerialization) as AnyObject + case .dictionary(let dict): + var ret = [String: AnyObject]() + for (k, v) in dict { + // kind of a hack... + switch v { + case .null: + continue + default: + ret[k] = prepareJSONForSerialization(v) + } + } + return ret as AnyObject + case .number(let n): + return n + case .str(let s): + return s as AnyObject + case .null: + return NSNull() + } + } + + open class func dumpJSON(_ json: JSON) -> Data? { + switch json { + case .null: + return "null".data(using: String.Encoding.utf8, allowLossyConversion: false) + default: + let obj: AnyObject = prepareJSONForSerialization(json) + if JSONSerialization.isValidJSONObject(obj) { + return try! JSONSerialization.data(withJSONObject: obj, options: JSONSerialization.WritingOptions()) + } else { + fatalError("Invalid JSON toplevel type") + } + } + } + + open class func parseJSON(_ data: Data) -> JSON { + let obj: AnyObject = try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as AnyObject + return objectToJSON(obj) + } +} + + +public protocol JSONSerializer { + associatedtype ValueType + func serialize(_: ValueType) -> JSON + func deserialize(_: JSON) -> ValueType +} + +open class VoidSerializer: JSONSerializer { + open func serialize(_ value: Void) -> JSON { + return .null + } + + open func deserialize(_ json: JSON) -> Void { + switch json { + case .null: + return + default: + fatalError("Type error deserializing") + } + + } +} + + +open class ArraySerializer: JSONSerializer { + + var elementSerializer: T + + init(_ elementSerializer: T) { + self.elementSerializer = elementSerializer + } + + open func serialize(_ arr: Array) -> JSON { + return .array(arr.map { self.elementSerializer.serialize($0) }) + } + + open func deserialize(_ json: JSON) -> Array { + switch json { + case .array(let arr): + return arr.map { self.elementSerializer.deserialize($0) } + default: + fatalError("Type error deserializing") + } + } +} + +open class StringSerializer: JSONSerializer { + open func serialize(_ value: String) -> JSON { + return .str(value) + } + + open func deserialize(_ json: JSON) -> String { + switch (json) { + case .str(let s): + return s + default: + fatalError("Type error deserializing") + } + } +} + +open class NSDateSerializer: JSONSerializer { + + var dateFormatter: DateFormatter + + fileprivate func convertFormat(_ format: String) -> String? { + func symbolForToken(_ token: String) -> String { + switch token { + case "%a": // Weekday as locale’s abbreviated name. + return "EEE" + case "%A": // Weekday as locale’s full name. + return "EEEE" + case "%w": // Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. 0, 1, ..., 6 + return "ccccc" + case "%d": // Day of the month as a zero-padded decimal number. 01, 02, ..., 31 + return "dd" + case "%b": // Month as locale’s abbreviated name. + return "MMM" + case "%B": // Month as locale’s full name. + return "MMMM" + case "%m": // Month as a zero-padded decimal number. 01, 02, ..., 12 + return "MM" + case "%y": // Year without century as a zero-padded decimal number. 00, 01, ..., 99 + return "yy" + case "%Y": // Year with century as a decimal number. 1970, 1988, 2001, 2013 + return "yyyy" + case "%H": // Hour (24-hour clock) as a zero-padded decimal number. 00, 01, ..., 23 + return "HH" + case "%I": // Hour (12-hour clock) as a zero-padded decimal number. 01, 02, ..., 12 + return "hh" + case "%p": // Locale’s equivalent of either AM or PM. + return "a" + case "%M": // Minute as a zero-padded decimal number. 00, 01, ..., 59 + return "mm" + case "%S": // Second as a zero-padded decimal number. 00, 01, ..., 59 + return "ss" + case "%f": // Microsecond as a decimal number, zero-padded on the left. 000000, 000001, ..., 999999 + return "SSSSSS" + case "%z": // UTC offset in the form +HHMM or -HHMM (empty string if the the object is naive). (empty), +0000, -0400, +1030 + return "Z" + case "%Z": // Time zone name (empty string if the object is naive). (empty), UTC, EST, CST + return "z" + case "%j": // Day of the year as a zero-padded decimal number. 001, 002, ..., 366 + return "DDD" + case "%U": // Week number of the year (Sunday as the first day of the week) as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0. 00, 01, ..., 53 (6) + return "ww" + case "%W": // Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0. 00, 01, ..., 53 (6) + return "ww" // one of these can't be right + case "%c": // Locale’s appropriate date and time representation. + return "" // unsupported + case "%x": // Locale’s appropriate date representation. + return "" // unsupported + case "%X": // Locale’s appropriate time representation. + return "" // unsupported + case "%%": // A literal '%' character. + return "%" + default: + return "" + } + } + var newFormat = "" + var inQuotedText = false + var i = format.startIndex + while i < format.endIndex { + if format[i] == "%" { + if format.index(after: i) >= format.endIndex { + return nil + } + i = format.index(after: i) + let token = "%\(format[i])" + if inQuotedText { + newFormat += "'" + inQuotedText = false + } + newFormat += symbolForToken(token) + } else { + if "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".contains(format[i]) { + if !inQuotedText { + newFormat += "'" + inQuotedText = true + } + } else if format[i] == "'" { + newFormat += "'" + } + newFormat += String(format[i]) + } + i = format.index(after: i) + } + if inQuotedText { + newFormat += "'" + } + return newFormat + } + + + init(_ dateFormat: String) { + self.dateFormatter = DateFormatter() + self.dateFormatter.timeZone = TimeZone(identifier: "UTC") + self.dateFormatter.locale = Locale(identifier: "en_US_POSIX") + dateFormatter.dateFormat = self.convertFormat(dateFormat) + } + open func serialize(_ value: Date) -> JSON { + return .str(self.dateFormatter.string(from: value)) + } + + open func deserialize(_ json: JSON) -> Date { + switch json { + case .str(let s): + return self.dateFormatter.date(from: s)! + default: + fatalError("Type error deserializing") + } + } +} + +open class BoolSerializer: JSONSerializer { + open func serialize(_ value: Bool) -> JSON { + return .number(NSNumber(value: value as Bool)) + } + open func deserialize(_ json: JSON) -> Bool { + switch json { + case .number(let b): + return b.boolValue + default: + fatalError("Type error deserializing") + } + } +} + +open class UInt64Serializer: JSONSerializer { + open func serialize(_ value: UInt64) -> JSON { + return .number(NSNumber(value: value as UInt64)) + } + + open func deserialize(_ json: JSON) -> UInt64 { + switch json { + case .number(let n): + return n.uint64Value + default: + fatalError("Type error deserializing") + } + } +} + +open class Int64Serializer: JSONSerializer { + open func serialize(_ value: Int64) -> JSON { + return .number(NSNumber(value: value as Int64)) + } + + open func deserialize(_ json: JSON) -> Int64 { + switch json { + case .number(let n): + return n.int64Value + default: + fatalError("Type error deserializing") + } + } +} + +open class Int32Serializer: JSONSerializer { + open func serialize(_ value: Int32) -> JSON { + return .number(NSNumber(value: value as Int32)) + } + + open func deserialize(_ json: JSON) -> Int32 { + switch json { + case .number(let n): + return n.int32Value + default: + fatalError("Type error deserializing") + } + } +} +open class UInt32Serializer: JSONSerializer { + open func serialize(_ value: UInt32) -> JSON { + return .number(NSNumber(value: value as UInt32)) + } + + open func deserialize(_ json: JSON) -> UInt32 { + switch json { + case .number(let n): + return n.uint32Value + default: + fatalError("Type error deserializing") + } + } +} + +open class NSDataSerializer: JSONSerializer { + open func serialize(_ value: Data) -> JSON { + return .str(value.base64EncodedString(options: [])) + } + + open func deserialize(_ json: JSON) -> Data { + switch(json) { + case .str(let s): + return Data(base64Encoded: s, options: [])! + default: + fatalError("Type error deserializing") + } + } +} + +open class DoubleSerializer: JSONSerializer { + open func serialize(_ value: Double) -> JSON { + return .number(NSNumber(value: value as Double)) + } + + open func deserialize(_ json: JSON) -> Double { + switch json { + case .number(let n): + return n.doubleValue + default: + fatalError("Type error deserializing") + } + } +} + + +open class NullableSerializer: JSONSerializer { + + var internalSerializer: T + + init(_ serializer: T) { + self.internalSerializer = serializer + } + + open func serialize(_ value: Optional) -> JSON { + if let v = value { + return internalSerializer.serialize(v) + } else { + return .null + } + } + + open func deserialize(_ json: JSON) -> Optional { + switch json { + case .null: + return nil + default: + return internalSerializer.deserialize(json) + } + } +} + +struct Serialization { + static var _StringSerializer = StringSerializer() + static var _BoolSerializer = BoolSerializer() + static var _UInt64Serializer = UInt64Serializer() + static var _UInt32Serializer = UInt32Serializer() + static var _Int64Serializer = Int64Serializer() + static var _Int32Serializer = Int32Serializer() + + static var _VoidSerializer = VoidSerializer() + static var _NSDataSerializer = NSDataSerializer() + static var _DoubleSerializer = DoubleSerializer() + + static func getFields(_ json: JSON) -> [String: JSON] { + switch json { + case .dictionary(let dict): + return dict + default: + fatalError("Type error") + } + } + + static func getTag(_ d: [String: JSON]) -> String { + return _StringSerializer.deserialize(d[".tag"]!) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneValidators.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneValidators.swift new file mode 100644 index 0000000..2929f77 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/StoneValidators.swift @@ -0,0 +1,81 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation + +// The objects in this file are used by generated code and should not need to be invoked manually. + +var _assertFunc: (Bool, String) -> Void = { cond, message in precondition(cond, message) } + +public func setAssertFunc(_ assertFunc: @escaping (Bool, String) -> Void) { + _assertFunc = assertFunc +} + +public func arrayValidator(minItems: Int? = nil, maxItems: Int? = nil, itemValidator: @escaping (T) -> Void) -> (Array) -> Void { + return { (value: Array) -> Void in + if let minItems = minItems { + _assertFunc(value.count >= minItems, "\(value) must have at least \(minItems) items") + } + + if let maxItems = maxItems { + _assertFunc(value.count <= maxItems, "\(value) must have at most \(maxItems) items") + } + + for el in value { + itemValidator(el) + } + } +} + +public func stringValidator(minLength: Int? = nil, maxLength: Int? = nil, pattern: String? = nil) -> (String) -> Void { + return { (value: String) -> Void in + let length = value.count + if let minLength = minLength { + _assertFunc(length >= minLength, "\"\(value)\" must be at least \(minLength) characters") + } + if let maxLength = maxLength { + _assertFunc(length <= maxLength, "\"\(value)\" must be at most \(maxLength) characters") + } + + if let pat = pattern { + // patterns much match entire input sequence + let re = try! NSRegularExpression(pattern: "\\A(?:\(pat))\\z", options: NSRegularExpression.Options()) + let matches = re.matches(in: value, options: NSRegularExpression.MatchingOptions(), range: NSRange(location: 0, length: length)) + _assertFunc(matches.count > 0, "\"\(value) must match pattern \"\(re.pattern)\"") + } + } +} + +public func comparableValidator(minValue: T? = nil, maxValue: T? = nil) -> (T) -> Void { + return { (value: T) -> Void in + if let minValue = minValue { + _assertFunc(minValue <= value, "\(value) must be at least \(minValue)") + } + + if let maxValue = maxValue { + _assertFunc(maxValue >= value, "\(value) must be at most \(maxValue)") + } + } +} + +public func nullableValidator(_ internalValidator: @escaping (T) -> Void) -> (T?) -> Void { + return { (value: T?) -> Void in + if let value = value { + internalValidator(value) + } + } +} + +public func binaryValidator(minLength: Int?, maxLength: Int?) -> (Data) -> Void { + return { (value: Data) -> Void in + let length = value.count + if let minLength = minLength { + _assertFunc(length >= minLength, "\"\(value)\" must be at least \(minLength) bytes") + } + + if let maxLength = maxLength { + _assertFunc(length <= maxLength, "\"\(value)\" must be at most \(maxLength) bytes") + } + } +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Team.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Team.swift new file mode 100644 index 0000000..b354a23 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Team.swift @@ -0,0 +1,10063 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the team namespace +open class Team { + /// The DeviceSession struct + open class DeviceSession: CustomStringConvertible { + /// The session id. + public let sessionId: String + /// The IP address of the last activity from this session. + public let ipAddress: String? + /// The country from which the last activity from this session was made. + public let country: String? + /// The time this session was created. + public let created: Date? + /// The time of the last activity from this session. + public let updated: Date? + public init(sessionId: String, ipAddress: String? = nil, country: String? = nil, created: Date? = nil, updated: Date? = nil) { + stringValidator()(sessionId) + self.sessionId = sessionId + nullableValidator(stringValidator())(ipAddress) + self.ipAddress = ipAddress + nullableValidator(stringValidator())(country) + self.country = country + self.created = created + self.updated = updated + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceSessionSerializer().serialize(self)))" + } + } + open class DeviceSessionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceSession) -> JSON { + let output = [ + "session_id": Serialization._StringSerializer.serialize(value.sessionId), + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + "country": NullableSerializer(Serialization._StringSerializer).serialize(value.country), + "created": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.created), + "updated": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.updated), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceSession { + switch json { + case .dictionary(let dict): + let sessionId = Serialization._StringSerializer.deserialize(dict["session_id"] ?? .null) + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + let country = NullableSerializer(Serialization._StringSerializer).deserialize(dict["country"] ?? .null) + let created = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["created"] ?? .null) + let updated = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["updated"] ?? .null) + return DeviceSession(sessionId: sessionId, ipAddress: ipAddress, country: country, created: created, updated: updated) + default: + fatalError("Type error deserializing") + } + } + } + + /// Information on active web sessions. + open class ActiveWebSession: Team.DeviceSession { + /// Information on the hosting device. + public let userAgent: String + /// Information on the hosting operating system. + public let os: String + /// Information on the browser used for this web session. + public let browser: String + /// The time this session expires. + public let expires: Date? + public init(sessionId: String, userAgent: String, os: String, browser: String, ipAddress: String? = nil, country: String? = nil, created: Date? = nil, updated: Date? = nil, expires: Date? = nil) { + stringValidator()(userAgent) + self.userAgent = userAgent + stringValidator()(os) + self.os = os + stringValidator()(browser) + self.browser = browser + self.expires = expires + super.init(sessionId: sessionId, ipAddress: ipAddress, country: country, created: created, updated: updated) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ActiveWebSessionSerializer().serialize(self)))" + } + } + open class ActiveWebSessionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ActiveWebSession) -> JSON { + let output = [ + "session_id": Serialization._StringSerializer.serialize(value.sessionId), + "user_agent": Serialization._StringSerializer.serialize(value.userAgent), + "os": Serialization._StringSerializer.serialize(value.os), + "browser": Serialization._StringSerializer.serialize(value.browser), + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + "country": NullableSerializer(Serialization._StringSerializer).serialize(value.country), + "created": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.created), + "updated": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.updated), + "expires": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.expires), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ActiveWebSession { + switch json { + case .dictionary(let dict): + let sessionId = Serialization._StringSerializer.deserialize(dict["session_id"] ?? .null) + let userAgent = Serialization._StringSerializer.deserialize(dict["user_agent"] ?? .null) + let os = Serialization._StringSerializer.deserialize(dict["os"] ?? .null) + let browser = Serialization._StringSerializer.deserialize(dict["browser"] ?? .null) + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + let country = NullableSerializer(Serialization._StringSerializer).deserialize(dict["country"] ?? .null) + let created = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["created"] ?? .null) + let updated = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["updated"] ?? .null) + let expires = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["expires"] ?? .null) + return ActiveWebSession(sessionId: sessionId, userAgent: userAgent, os: os, browser: browser, ipAddress: ipAddress, country: country, created: created, updated: updated, expires: expires) + default: + fatalError("Type error deserializing") + } + } + } + + /// Describes which team-related admin permissions a user has. + public enum AdminTier: CustomStringConvertible { + /// User is an administrator of the team - has all permissions. + case teamAdmin + /// User can do most user provisioning, de-provisioning and management. + case userManagementAdmin + /// User can do a limited set of common support tasks for existing users. + case supportAdmin + /// User is not an admin of the team. + case memberOnly + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AdminTierSerializer().serialize(self)))" + } + } + open class AdminTierSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AdminTier) -> JSON { + switch value { + case .teamAdmin: + var d = [String: JSON]() + d[".tag"] = .str("team_admin") + return .dictionary(d) + case .userManagementAdmin: + var d = [String: JSON]() + d[".tag"] = .str("user_management_admin") + return .dictionary(d) + case .supportAdmin: + var d = [String: JSON]() + d[".tag"] = .str("support_admin") + return .dictionary(d) + case .memberOnly: + var d = [String: JSON]() + d[".tag"] = .str("member_only") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AdminTier { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team_admin": + return AdminTier.teamAdmin + case "user_management_admin": + return AdminTier.userManagementAdmin + case "support_admin": + return AdminTier.supportAdmin + case "member_only": + return AdminTier.memberOnly + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information on linked third party applications. + open class ApiApp: CustomStringConvertible { + /// The application unique id. + public let appId: String + /// The application name. + public let appName: String + /// The application publisher name. + public let publisher: String? + /// The publisher's URL. + public let publisherUrl: String? + /// The time this application was linked. + public let linked: Date? + /// Whether the linked application uses a dedicated folder. + public let isAppFolder: Bool + public init(appId: String, appName: String, isAppFolder: Bool, publisher: String? = nil, publisherUrl: String? = nil, linked: Date? = nil) { + stringValidator()(appId) + self.appId = appId + stringValidator()(appName) + self.appName = appName + nullableValidator(stringValidator())(publisher) + self.publisher = publisher + nullableValidator(stringValidator())(publisherUrl) + self.publisherUrl = publisherUrl + self.linked = linked + self.isAppFolder = isAppFolder + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ApiAppSerializer().serialize(self)))" + } + } + open class ApiAppSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ApiApp) -> JSON { + let output = [ + "app_id": Serialization._StringSerializer.serialize(value.appId), + "app_name": Serialization._StringSerializer.serialize(value.appName), + "is_app_folder": Serialization._BoolSerializer.serialize(value.isAppFolder), + "publisher": NullableSerializer(Serialization._StringSerializer).serialize(value.publisher), + "publisher_url": NullableSerializer(Serialization._StringSerializer).serialize(value.publisherUrl), + "linked": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.linked), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ApiApp { + switch json { + case .dictionary(let dict): + let appId = Serialization._StringSerializer.deserialize(dict["app_id"] ?? .null) + let appName = Serialization._StringSerializer.deserialize(dict["app_name"] ?? .null) + let isAppFolder = Serialization._BoolSerializer.deserialize(dict["is_app_folder"] ?? .null) + let publisher = NullableSerializer(Serialization._StringSerializer).deserialize(dict["publisher"] ?? .null) + let publisherUrl = NullableSerializer(Serialization._StringSerializer).deserialize(dict["publisher_url"] ?? .null) + let linked = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["linked"] ?? .null) + return ApiApp(appId: appId, appName: appName, isAppFolder: isAppFolder, publisher: publisher, publisherUrl: publisherUrl, linked: linked) + default: + fatalError("Type error deserializing") + } + } + } + + /// Base report structure. + open class BaseDfbReport: CustomStringConvertible { + /// First date present in the results as 'YYYY-MM-DD' or None. + public let startDate: String + public init(startDate: String) { + stringValidator()(startDate) + self.startDate = startDate + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(BaseDfbReportSerializer().serialize(self)))" + } + } + open class BaseDfbReportSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: BaseDfbReport) -> JSON { + let output = [ + "start_date": Serialization._StringSerializer.serialize(value.startDate), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> BaseDfbReport { + switch json { + case .dictionary(let dict): + let startDate = Serialization._StringSerializer.deserialize(dict["start_date"] ?? .null) + return BaseDfbReport(startDate: startDate) + default: + fatalError("Type error deserializing") + } + } + } + + /// Base error that all errors for existing team folders should extend. + public enum BaseTeamFolderError: CustomStringConvertible { + /// An unspecified error. + case accessError(Team.TeamFolderAccessError) + /// An unspecified error. + case statusError(Team.TeamFolderInvalidStatusError) + /// An unspecified error. + case teamSharedDropboxError(Team.TeamFolderTeamSharedDropboxError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(BaseTeamFolderErrorSerializer().serialize(self)))" + } + } + open class BaseTeamFolderErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: BaseTeamFolderError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Team.TeamFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .statusError(let arg): + var d = ["status_error": Team.TeamFolderInvalidStatusErrorSerializer().serialize(arg)] + d[".tag"] = .str("status_error") + return .dictionary(d) + case .teamSharedDropboxError(let arg): + var d = ["team_shared_dropbox_error": Team.TeamFolderTeamSharedDropboxErrorSerializer().serialize(arg)] + d[".tag"] = .str("team_shared_dropbox_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> BaseTeamFolderError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Team.TeamFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return BaseTeamFolderError.accessError(v) + case "status_error": + let v = Team.TeamFolderInvalidStatusErrorSerializer().deserialize(d["status_error"] ?? .null) + return BaseTeamFolderError.statusError(v) + case "team_shared_dropbox_error": + let v = Team.TeamFolderTeamSharedDropboxErrorSerializer().deserialize(d["team_shared_dropbox_error"] ?? .null) + return BaseTeamFolderError.teamSharedDropboxError(v) + case "other": + return BaseTeamFolderError.other + default: + return BaseTeamFolderError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Error returned when getting member custom quota. + public enum CustomQuotaError: CustomStringConvertible { + /// A maximum of 1000 users can be set for a single call. + case tooManyUsers + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CustomQuotaErrorSerializer().serialize(self)))" + } + } + open class CustomQuotaErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CustomQuotaError) -> JSON { + switch value { + case .tooManyUsers: + var d = [String: JSON]() + d[".tag"] = .str("too_many_users") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CustomQuotaError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "too_many_users": + return CustomQuotaError.tooManyUsers + case "other": + return CustomQuotaError.other + default: + return CustomQuotaError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// User custom quota. + public enum CustomQuotaResult: CustomStringConvertible { + /// User's custom quota. + case success(Team.UserCustomQuotaResult) + /// Invalid user (not in team). + case invalidUser(Team.UserSelectorArg) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CustomQuotaResultSerializer().serialize(self)))" + } + } + open class CustomQuotaResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CustomQuotaResult) -> JSON { + switch value { + case .success(let arg): + var d = Serialization.getFields(Team.UserCustomQuotaResultSerializer().serialize(arg)) + d[".tag"] = .str("success") + return .dictionary(d) + case .invalidUser(let arg): + var d = ["invalid_user": Team.UserSelectorArgSerializer().serialize(arg)] + d[".tag"] = .str("invalid_user") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CustomQuotaResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = Team.UserCustomQuotaResultSerializer().deserialize(json) + return CustomQuotaResult.success(v) + case "invalid_user": + let v = Team.UserSelectorArgSerializer().deserialize(d["invalid_user"] ?? .null) + return CustomQuotaResult.invalidUser(v) + case "other": + return CustomQuotaResult.other + default: + return CustomQuotaResult.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The CustomQuotaUsersArg struct + open class CustomQuotaUsersArg: CustomStringConvertible { + /// List of users. + public let users: Array + public init(users: Array) { + self.users = users + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CustomQuotaUsersArgSerializer().serialize(self)))" + } + } + open class CustomQuotaUsersArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CustomQuotaUsersArg) -> JSON { + let output = [ + "users": ArraySerializer(Team.UserSelectorArgSerializer()).serialize(value.users), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CustomQuotaUsersArg { + switch json { + case .dictionary(let dict): + let users = ArraySerializer(Team.UserSelectorArgSerializer()).deserialize(dict["users"] ?? .null) + return CustomQuotaUsersArg(users: users) + default: + fatalError("Type error deserializing") + } + } + } + + /// Input arguments that can be provided for most reports. + open class DateRange: CustomStringConvertible { + /// Optional starting date (inclusive). + public let startDate: Date? + /// Optional ending date (exclusive). + public let endDate: Date? + public init(startDate: Date? = nil, endDate: Date? = nil) { + self.startDate = startDate + self.endDate = endDate + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DateRangeSerializer().serialize(self)))" + } + } + open class DateRangeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DateRange) -> JSON { + let output = [ + "start_date": NullableSerializer(NSDateSerializer("%Y-%m-%d")).serialize(value.startDate), + "end_date": NullableSerializer(NSDateSerializer("%Y-%m-%d")).serialize(value.endDate), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DateRange { + switch json { + case .dictionary(let dict): + let startDate = NullableSerializer(NSDateSerializer("%Y-%m-%d")).deserialize(dict["start_date"] ?? .null) + let endDate = NullableSerializer(NSDateSerializer("%Y-%m-%d")).deserialize(dict["end_date"] ?? .null) + return DateRange(startDate: startDate, endDate: endDate) + default: + fatalError("Type error deserializing") + } + } + } + + /// Errors that can originate from problems in input arguments to reports. + public enum DateRangeError: CustomStringConvertible { + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DateRangeErrorSerializer().serialize(self)))" + } + } + open class DateRangeErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DateRangeError) -> JSON { + switch value { + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DateRangeError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "other": + return DateRangeError.other + default: + return DateRangeError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information about linked Dropbox desktop client sessions. + open class DesktopClientSession: Team.DeviceSession { + /// Name of the hosting desktop. + public let hostName: String + /// The Dropbox desktop client type. + public let clientType: Team.DesktopPlatform + /// The Dropbox client version. + public let clientVersion: String + /// Information on the hosting platform. + public let platform: String + /// Whether it's possible to delete all of the account files upon unlinking. + public let isDeleteOnUnlinkSupported: Bool + public init(sessionId: String, hostName: String, clientType: Team.DesktopPlatform, clientVersion: String, platform: String, isDeleteOnUnlinkSupported: Bool, ipAddress: String? = nil, country: String? = nil, created: Date? = nil, updated: Date? = nil) { + stringValidator()(hostName) + self.hostName = hostName + self.clientType = clientType + stringValidator()(clientVersion) + self.clientVersion = clientVersion + stringValidator()(platform) + self.platform = platform + self.isDeleteOnUnlinkSupported = isDeleteOnUnlinkSupported + super.init(sessionId: sessionId, ipAddress: ipAddress, country: country, created: created, updated: updated) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DesktopClientSessionSerializer().serialize(self)))" + } + } + open class DesktopClientSessionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DesktopClientSession) -> JSON { + let output = [ + "session_id": Serialization._StringSerializer.serialize(value.sessionId), + "host_name": Serialization._StringSerializer.serialize(value.hostName), + "client_type": Team.DesktopPlatformSerializer().serialize(value.clientType), + "client_version": Serialization._StringSerializer.serialize(value.clientVersion), + "platform": Serialization._StringSerializer.serialize(value.platform), + "is_delete_on_unlink_supported": Serialization._BoolSerializer.serialize(value.isDeleteOnUnlinkSupported), + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + "country": NullableSerializer(Serialization._StringSerializer).serialize(value.country), + "created": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.created), + "updated": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.updated), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DesktopClientSession { + switch json { + case .dictionary(let dict): + let sessionId = Serialization._StringSerializer.deserialize(dict["session_id"] ?? .null) + let hostName = Serialization._StringSerializer.deserialize(dict["host_name"] ?? .null) + let clientType = Team.DesktopPlatformSerializer().deserialize(dict["client_type"] ?? .null) + let clientVersion = Serialization._StringSerializer.deserialize(dict["client_version"] ?? .null) + let platform = Serialization._StringSerializer.deserialize(dict["platform"] ?? .null) + let isDeleteOnUnlinkSupported = Serialization._BoolSerializer.deserialize(dict["is_delete_on_unlink_supported"] ?? .null) + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + let country = NullableSerializer(Serialization._StringSerializer).deserialize(dict["country"] ?? .null) + let created = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["created"] ?? .null) + let updated = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["updated"] ?? .null) + return DesktopClientSession(sessionId: sessionId, hostName: hostName, clientType: clientType, clientVersion: clientVersion, platform: platform, isDeleteOnUnlinkSupported: isDeleteOnUnlinkSupported, ipAddress: ipAddress, country: country, created: created, updated: updated) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DesktopPlatform union + public enum DesktopPlatform: CustomStringConvertible { + /// Official Windows Dropbox desktop client. + case windows + /// Official Mac Dropbox desktop client. + case mac + /// Official Linux Dropbox desktop client. + case linux + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DesktopPlatformSerializer().serialize(self)))" + } + } + open class DesktopPlatformSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DesktopPlatform) -> JSON { + switch value { + case .windows: + var d = [String: JSON]() + d[".tag"] = .str("windows") + return .dictionary(d) + case .mac: + var d = [String: JSON]() + d[".tag"] = .str("mac") + return .dictionary(d) + case .linux: + var d = [String: JSON]() + d[".tag"] = .str("linux") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DesktopPlatform { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "windows": + return DesktopPlatform.windows + case "mac": + return DesktopPlatform.mac + case "linux": + return DesktopPlatform.linux + case "other": + return DesktopPlatform.other + default: + return DesktopPlatform.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The DeviceSessionArg struct + open class DeviceSessionArg: CustomStringConvertible { + /// The session id. + public let sessionId: String + /// The unique id of the member owning the device. + public let teamMemberId: String + public init(sessionId: String, teamMemberId: String) { + stringValidator()(sessionId) + self.sessionId = sessionId + stringValidator()(teamMemberId) + self.teamMemberId = teamMemberId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceSessionArgSerializer().serialize(self)))" + } + } + open class DeviceSessionArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceSessionArg) -> JSON { + let output = [ + "session_id": Serialization._StringSerializer.serialize(value.sessionId), + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceSessionArg { + switch json { + case .dictionary(let dict): + let sessionId = Serialization._StringSerializer.deserialize(dict["session_id"] ?? .null) + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + return DeviceSessionArg(sessionId: sessionId, teamMemberId: teamMemberId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Each of the items is an array of values, one value per day. The value is the number of devices active within a + /// time window, ending with that day. If there is no data for a day, then the value will be None. + open class DevicesActive: CustomStringConvertible { + /// Array of number of linked windows (desktop) clients with activity. + public let windows: Array + /// Array of number of linked mac (desktop) clients with activity. + public let macos: Array + /// Array of number of linked linus (desktop) clients with activity. + public let linux: Array + /// Array of number of linked ios devices with activity. + public let ios: Array + /// Array of number of linked android devices with activity. + public let android: Array + /// Array of number of other linked devices (blackberry, windows phone, etc) with activity. + public let other: Array + /// Array of total number of linked clients with activity. + public let total: Array + public init(windows: Array, macos: Array, linux: Array, ios: Array, android: Array, other: Array, total: Array) { + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(windows) + self.windows = windows + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(macos) + self.macos = macos + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(linux) + self.linux = linux + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(ios) + self.ios = ios + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(android) + self.android = android + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(other) + self.other = other + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(total) + self.total = total + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DevicesActiveSerializer().serialize(self)))" + } + } + open class DevicesActiveSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DevicesActive) -> JSON { + let output = [ + "windows": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.windows), + "macos": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.macos), + "linux": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.linux), + "ios": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.ios), + "android": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.android), + "other": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.other), + "total": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.total), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DevicesActive { + switch json { + case .dictionary(let dict): + let windows = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["windows"] ?? .null) + let macos = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["macos"] ?? .null) + let linux = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["linux"] ?? .null) + let ios = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["ios"] ?? .null) + let android = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["android"] ?? .null) + let other = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["other"] ?? .null) + let total = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["total"] ?? .null) + return DevicesActive(windows: windows, macos: macos, linux: linux, ios: ios, android: android, other: other, total: total) + default: + fatalError("Type error deserializing") + } + } + } + + /// Excluded users list argument. + open class ExcludedUsersListArg: CustomStringConvertible { + /// Number of results to return per call. + public let limit: UInt32 + public init(limit: UInt32 = 1000) { + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExcludedUsersListArgSerializer().serialize(self)))" + } + } + open class ExcludedUsersListArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExcludedUsersListArg) -> JSON { + let output = [ + "limit": Serialization._UInt32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExcludedUsersListArg { + switch json { + case .dictionary(let dict): + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + return ExcludedUsersListArg(limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// Excluded users list continue argument. + open class ExcludedUsersListContinueArg: CustomStringConvertible { + /// Indicates from what point to get the next set of users. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExcludedUsersListContinueArgSerializer().serialize(self)))" + } + } + open class ExcludedUsersListContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExcludedUsersListContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExcludedUsersListContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return ExcludedUsersListContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Excluded users list continue error. + public enum ExcludedUsersListContinueError: CustomStringConvertible { + /// The cursor is invalid. + case invalidCursor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExcludedUsersListContinueErrorSerializer().serialize(self)))" + } + } + open class ExcludedUsersListContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExcludedUsersListContinueError) -> JSON { + switch value { + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ExcludedUsersListContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_cursor": + return ExcludedUsersListContinueError.invalidCursor + case "other": + return ExcludedUsersListContinueError.other + default: + return ExcludedUsersListContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Excluded users list error. + public enum ExcludedUsersListError: CustomStringConvertible { + /// An error occurred. + case listError + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExcludedUsersListErrorSerializer().serialize(self)))" + } + } + open class ExcludedUsersListErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExcludedUsersListError) -> JSON { + switch value { + case .listError: + var d = [String: JSON]() + d[".tag"] = .str("list_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ExcludedUsersListError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "list_error": + return ExcludedUsersListError.listError + case "other": + return ExcludedUsersListError.other + default: + return ExcludedUsersListError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Excluded users list result. + open class ExcludedUsersListResult: CustomStringConvertible { + /// (no description) + public let users: Array + /// Pass the cursor into memberSpaceLimitsExcludedUsersListContinue to obtain additional excluded users. + public let cursor: String? + /// Is true if there are additional excluded users that have not been returned yet. An additional call to + /// memberSpaceLimitsExcludedUsersListContinue can retrieve them. + public let hasMore: Bool + public init(users: Array, hasMore: Bool, cursor: String? = nil) { + self.users = users + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExcludedUsersListResultSerializer().serialize(self)))" + } + } + open class ExcludedUsersListResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExcludedUsersListResult) -> JSON { + let output = [ + "users": ArraySerializer(Team.MemberProfileSerializer()).serialize(value.users), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExcludedUsersListResult { + switch json { + case .dictionary(let dict): + let users = ArraySerializer(Team.MemberProfileSerializer()).deserialize(dict["users"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ExcludedUsersListResult(users: users, hasMore: hasMore, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Argument of excluded users update operation. Should include a list of users to add/remove (according to + /// endpoint), Maximum size of the list is 1000 users. + open class ExcludedUsersUpdateArg: CustomStringConvertible { + /// List of users to be added/removed. + public let users: Array? + public init(users: Array? = nil) { + self.users = users + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExcludedUsersUpdateArgSerializer().serialize(self)))" + } + } + open class ExcludedUsersUpdateArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExcludedUsersUpdateArg) -> JSON { + let output = [ + "users": NullableSerializer(ArraySerializer(Team.UserSelectorArgSerializer())).serialize(value.users), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExcludedUsersUpdateArg { + switch json { + case .dictionary(let dict): + let users = NullableSerializer(ArraySerializer(Team.UserSelectorArgSerializer())).deserialize(dict["users"] ?? .null) + return ExcludedUsersUpdateArg(users: users) + default: + fatalError("Type error deserializing") + } + } + } + + /// Excluded users update error. + public enum ExcludedUsersUpdateError: CustomStringConvertible { + /// At least one of the users is not part of your team. + case usersNotInTeam + /// A maximum of 1000 users for each of addition/removal can be supplied. + case tooManyUsers + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExcludedUsersUpdateErrorSerializer().serialize(self)))" + } + } + open class ExcludedUsersUpdateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExcludedUsersUpdateError) -> JSON { + switch value { + case .usersNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("users_not_in_team") + return .dictionary(d) + case .tooManyUsers: + var d = [String: JSON]() + d[".tag"] = .str("too_many_users") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ExcludedUsersUpdateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "users_not_in_team": + return ExcludedUsersUpdateError.usersNotInTeam + case "too_many_users": + return ExcludedUsersUpdateError.tooManyUsers + case "other": + return ExcludedUsersUpdateError.other + default: + return ExcludedUsersUpdateError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Excluded users update result. + open class ExcludedUsersUpdateResult: CustomStringConvertible { + /// Update status. + public let status: Team.ExcludedUsersUpdateStatus + public init(status: Team.ExcludedUsersUpdateStatus) { + self.status = status + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExcludedUsersUpdateResultSerializer().serialize(self)))" + } + } + open class ExcludedUsersUpdateResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExcludedUsersUpdateResult) -> JSON { + let output = [ + "status": Team.ExcludedUsersUpdateStatusSerializer().serialize(value.status), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExcludedUsersUpdateResult { + switch json { + case .dictionary(let dict): + let status = Team.ExcludedUsersUpdateStatusSerializer().deserialize(dict["status"] ?? .null) + return ExcludedUsersUpdateResult(status: status) + default: + fatalError("Type error deserializing") + } + } + } + + /// Excluded users update operation status. + public enum ExcludedUsersUpdateStatus: CustomStringConvertible { + /// Update successful. + case success + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExcludedUsersUpdateStatusSerializer().serialize(self)))" + } + } + open class ExcludedUsersUpdateStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExcludedUsersUpdateStatus) -> JSON { + switch value { + case .success: + var d = [String: JSON]() + d[".tag"] = .str("success") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ExcludedUsersUpdateStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + return ExcludedUsersUpdateStatus.success + case "other": + return ExcludedUsersUpdateStatus.other + default: + return ExcludedUsersUpdateStatus.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// A set of features that a Dropbox Business account may support. + public enum Feature: CustomStringConvertible { + /// The number of upload API calls allowed per month. + case uploadApiRateLimit + /// Does this team have a shared team root. + case hasTeamSharedDropbox + /// Does this team have file events. + case hasTeamFileEvents + /// Does this team have team selective sync enabled. + case hasTeamSelectiveSync + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FeatureSerializer().serialize(self)))" + } + } + open class FeatureSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Feature) -> JSON { + switch value { + case .uploadApiRateLimit: + var d = [String: JSON]() + d[".tag"] = .str("upload_api_rate_limit") + return .dictionary(d) + case .hasTeamSharedDropbox: + var d = [String: JSON]() + d[".tag"] = .str("has_team_shared_dropbox") + return .dictionary(d) + case .hasTeamFileEvents: + var d = [String: JSON]() + d[".tag"] = .str("has_team_file_events") + return .dictionary(d) + case .hasTeamSelectiveSync: + var d = [String: JSON]() + d[".tag"] = .str("has_team_selective_sync") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> Feature { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "upload_api_rate_limit": + return Feature.uploadApiRateLimit + case "has_team_shared_dropbox": + return Feature.hasTeamSharedDropbox + case "has_team_file_events": + return Feature.hasTeamFileEvents + case "has_team_selective_sync": + return Feature.hasTeamSelectiveSync + case "other": + return Feature.other + default: + return Feature.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The values correspond to entries in Feature. You may get different value according to your Dropbox Business + /// plan. + public enum FeatureValue: CustomStringConvertible { + /// An unspecified error. + case uploadApiRateLimit(Team.UploadApiRateLimitValue) + /// An unspecified error. + case hasTeamSharedDropbox(Team.HasTeamSharedDropboxValue) + /// An unspecified error. + case hasTeamFileEvents(Team.HasTeamFileEventsValue) + /// An unspecified error. + case hasTeamSelectiveSync(Team.HasTeamSelectiveSyncValue) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FeatureValueSerializer().serialize(self)))" + } + } + open class FeatureValueSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FeatureValue) -> JSON { + switch value { + case .uploadApiRateLimit(let arg): + var d = ["upload_api_rate_limit": Team.UploadApiRateLimitValueSerializer().serialize(arg)] + d[".tag"] = .str("upload_api_rate_limit") + return .dictionary(d) + case .hasTeamSharedDropbox(let arg): + var d = ["has_team_shared_dropbox": Team.HasTeamSharedDropboxValueSerializer().serialize(arg)] + d[".tag"] = .str("has_team_shared_dropbox") + return .dictionary(d) + case .hasTeamFileEvents(let arg): + var d = ["has_team_file_events": Team.HasTeamFileEventsValueSerializer().serialize(arg)] + d[".tag"] = .str("has_team_file_events") + return .dictionary(d) + case .hasTeamSelectiveSync(let arg): + var d = ["has_team_selective_sync": Team.HasTeamSelectiveSyncValueSerializer().serialize(arg)] + d[".tag"] = .str("has_team_selective_sync") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FeatureValue { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "upload_api_rate_limit": + let v = Team.UploadApiRateLimitValueSerializer().deserialize(d["upload_api_rate_limit"] ?? .null) + return FeatureValue.uploadApiRateLimit(v) + case "has_team_shared_dropbox": + let v = Team.HasTeamSharedDropboxValueSerializer().deserialize(d["has_team_shared_dropbox"] ?? .null) + return FeatureValue.hasTeamSharedDropbox(v) + case "has_team_file_events": + let v = Team.HasTeamFileEventsValueSerializer().deserialize(d["has_team_file_events"] ?? .null) + return FeatureValue.hasTeamFileEvents(v) + case "has_team_selective_sync": + let v = Team.HasTeamSelectiveSyncValueSerializer().deserialize(d["has_team_selective_sync"] ?? .null) + return FeatureValue.hasTeamSelectiveSync(v) + case "other": + return FeatureValue.other + default: + return FeatureValue.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The FeaturesGetValuesBatchArg struct + open class FeaturesGetValuesBatchArg: CustomStringConvertible { + /// A list of features in Feature. If the list is empty, this route will return FeaturesGetValuesBatchError. + public let features: Array + public init(features: Array) { + self.features = features + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FeaturesGetValuesBatchArgSerializer().serialize(self)))" + } + } + open class FeaturesGetValuesBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FeaturesGetValuesBatchArg) -> JSON { + let output = [ + "features": ArraySerializer(Team.FeatureSerializer()).serialize(value.features), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FeaturesGetValuesBatchArg { + switch json { + case .dictionary(let dict): + let features = ArraySerializer(Team.FeatureSerializer()).deserialize(dict["features"] ?? .null) + return FeaturesGetValuesBatchArg(features: features) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FeaturesGetValuesBatchError union + public enum FeaturesGetValuesBatchError: CustomStringConvertible { + /// At least one Feature must be included in the FeaturesGetValuesBatchArg.features list. + case emptyFeaturesList + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FeaturesGetValuesBatchErrorSerializer().serialize(self)))" + } + } + open class FeaturesGetValuesBatchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FeaturesGetValuesBatchError) -> JSON { + switch value { + case .emptyFeaturesList: + var d = [String: JSON]() + d[".tag"] = .str("empty_features_list") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FeaturesGetValuesBatchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "empty_features_list": + return FeaturesGetValuesBatchError.emptyFeaturesList + case "other": + return FeaturesGetValuesBatchError.other + default: + return FeaturesGetValuesBatchError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The FeaturesGetValuesBatchResult struct + open class FeaturesGetValuesBatchResult: CustomStringConvertible { + /// (no description) + public let values: Array + public init(values: Array) { + self.values = values + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FeaturesGetValuesBatchResultSerializer().serialize(self)))" + } + } + open class FeaturesGetValuesBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FeaturesGetValuesBatchResult) -> JSON { + let output = [ + "values": ArraySerializer(Team.FeatureValueSerializer()).serialize(value.values), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FeaturesGetValuesBatchResult { + switch json { + case .dictionary(let dict): + let values = ArraySerializer(Team.FeatureValueSerializer()).deserialize(dict["values"] ?? .null) + return FeaturesGetValuesBatchResult(values: values) + default: + fatalError("Type error deserializing") + } + } + } + + /// Activity Report Result. Each of the items in the storage report is an array of values, one value per day. If + /// there is no data for a day, then the value will be None. + open class GetActivityReport: Team.BaseDfbReport { + /// Array of total number of adds by team members. + public let adds: Array + /// Array of number of edits by team members. If the same user edits the same file multiple times this is + /// counted as a single edit. + public let edits: Array + /// Array of total number of deletes by team members. + public let deletes: Array + /// Array of the number of users who have been active in the last 28 days. + public let activeUsers28Day: Array + /// Array of the number of users who have been active in the last week. + public let activeUsers7Day: Array + /// Array of the number of users who have been active in the last day. + public let activeUsers1Day: Array + /// Array of the number of shared folders with some activity in the last 28 days. + public let activeSharedFolders28Day: Array + /// Array of the number of shared folders with some activity in the last week. + public let activeSharedFolders7Day: Array + /// Array of the number of shared folders with some activity in the last day. + public let activeSharedFolders1Day: Array + /// Array of the number of shared links created. + public let sharedLinksCreated: Array + /// Array of the number of views by team users to shared links created by the team. + public let sharedLinksViewedByTeam: Array + /// Array of the number of views by users outside of the team to shared links created by the team. + public let sharedLinksViewedByOutsideUser: Array + /// Array of the number of views by non-logged-in users to shared links created by the team. + public let sharedLinksViewedByNotLoggedIn: Array + /// Array of the total number of views to shared links created by the team. + public let sharedLinksViewedTotal: Array + public init(startDate: String, adds: Array, edits: Array, deletes: Array, activeUsers28Day: Array, activeUsers7Day: Array, activeUsers1Day: Array, activeSharedFolders28Day: Array, activeSharedFolders7Day: Array, activeSharedFolders1Day: Array, sharedLinksCreated: Array, sharedLinksViewedByTeam: Array, sharedLinksViewedByOutsideUser: Array, sharedLinksViewedByNotLoggedIn: Array, sharedLinksViewedTotal: Array) { + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(adds) + self.adds = adds + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(edits) + self.edits = edits + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(deletes) + self.deletes = deletes + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(activeUsers28Day) + self.activeUsers28Day = activeUsers28Day + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(activeUsers7Day) + self.activeUsers7Day = activeUsers7Day + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(activeUsers1Day) + self.activeUsers1Day = activeUsers1Day + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(activeSharedFolders28Day) + self.activeSharedFolders28Day = activeSharedFolders28Day + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(activeSharedFolders7Day) + self.activeSharedFolders7Day = activeSharedFolders7Day + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(activeSharedFolders1Day) + self.activeSharedFolders1Day = activeSharedFolders1Day + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(sharedLinksCreated) + self.sharedLinksCreated = sharedLinksCreated + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(sharedLinksViewedByTeam) + self.sharedLinksViewedByTeam = sharedLinksViewedByTeam + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(sharedLinksViewedByOutsideUser) + self.sharedLinksViewedByOutsideUser = sharedLinksViewedByOutsideUser + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(sharedLinksViewedByNotLoggedIn) + self.sharedLinksViewedByNotLoggedIn = sharedLinksViewedByNotLoggedIn + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(sharedLinksViewedTotal) + self.sharedLinksViewedTotal = sharedLinksViewedTotal + super.init(startDate: startDate) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetActivityReportSerializer().serialize(self)))" + } + } + open class GetActivityReportSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetActivityReport) -> JSON { + let output = [ + "start_date": Serialization._StringSerializer.serialize(value.startDate), + "adds": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.adds), + "edits": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.edits), + "deletes": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.deletes), + "active_users_28_day": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.activeUsers28Day), + "active_users_7_day": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.activeUsers7Day), + "active_users_1_day": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.activeUsers1Day), + "active_shared_folders_28_day": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.activeSharedFolders28Day), + "active_shared_folders_7_day": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.activeSharedFolders7Day), + "active_shared_folders_1_day": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.activeSharedFolders1Day), + "shared_links_created": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.sharedLinksCreated), + "shared_links_viewed_by_team": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.sharedLinksViewedByTeam), + "shared_links_viewed_by_outside_user": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.sharedLinksViewedByOutsideUser), + "shared_links_viewed_by_not_logged_in": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.sharedLinksViewedByNotLoggedIn), + "shared_links_viewed_total": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.sharedLinksViewedTotal), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetActivityReport { + switch json { + case .dictionary(let dict): + let startDate = Serialization._StringSerializer.deserialize(dict["start_date"] ?? .null) + let adds = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["adds"] ?? .null) + let edits = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["edits"] ?? .null) + let deletes = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["deletes"] ?? .null) + let activeUsers28Day = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["active_users_28_day"] ?? .null) + let activeUsers7Day = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["active_users_7_day"] ?? .null) + let activeUsers1Day = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["active_users_1_day"] ?? .null) + let activeSharedFolders28Day = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["active_shared_folders_28_day"] ?? .null) + let activeSharedFolders7Day = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["active_shared_folders_7_day"] ?? .null) + let activeSharedFolders1Day = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["active_shared_folders_1_day"] ?? .null) + let sharedLinksCreated = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["shared_links_created"] ?? .null) + let sharedLinksViewedByTeam = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["shared_links_viewed_by_team"] ?? .null) + let sharedLinksViewedByOutsideUser = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["shared_links_viewed_by_outside_user"] ?? .null) + let sharedLinksViewedByNotLoggedIn = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["shared_links_viewed_by_not_logged_in"] ?? .null) + let sharedLinksViewedTotal = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["shared_links_viewed_total"] ?? .null) + return GetActivityReport(startDate: startDate, adds: adds, edits: edits, deletes: deletes, activeUsers28Day: activeUsers28Day, activeUsers7Day: activeUsers7Day, activeUsers1Day: activeUsers1Day, activeSharedFolders28Day: activeSharedFolders28Day, activeSharedFolders7Day: activeSharedFolders7Day, activeSharedFolders1Day: activeSharedFolders1Day, sharedLinksCreated: sharedLinksCreated, sharedLinksViewedByTeam: sharedLinksViewedByTeam, sharedLinksViewedByOutsideUser: sharedLinksViewedByOutsideUser, sharedLinksViewedByNotLoggedIn: sharedLinksViewedByNotLoggedIn, sharedLinksViewedTotal: sharedLinksViewedTotal) + default: + fatalError("Type error deserializing") + } + } + } + + /// Devices Report Result. Contains subsections for different time ranges of activity. Each of the items in each + /// subsection of the storage report is an array of values, one value per day. If there is no data for a day, then + /// the value will be None. + open class GetDevicesReport: Team.BaseDfbReport { + /// Report of the number of devices active in the last day. + public let active1Day: Team.DevicesActive + /// Report of the number of devices active in the last 7 days. + public let active7Day: Team.DevicesActive + /// Report of the number of devices active in the last 28 days. + public let active28Day: Team.DevicesActive + public init(startDate: String, active1Day: Team.DevicesActive, active7Day: Team.DevicesActive, active28Day: Team.DevicesActive) { + self.active1Day = active1Day + self.active7Day = active7Day + self.active28Day = active28Day + super.init(startDate: startDate) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetDevicesReportSerializer().serialize(self)))" + } + } + open class GetDevicesReportSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetDevicesReport) -> JSON { + let output = [ + "start_date": Serialization._StringSerializer.serialize(value.startDate), + "active_1_day": Team.DevicesActiveSerializer().serialize(value.active1Day), + "active_7_day": Team.DevicesActiveSerializer().serialize(value.active7Day), + "active_28_day": Team.DevicesActiveSerializer().serialize(value.active28Day), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetDevicesReport { + switch json { + case .dictionary(let dict): + let startDate = Serialization._StringSerializer.deserialize(dict["start_date"] ?? .null) + let active1Day = Team.DevicesActiveSerializer().deserialize(dict["active_1_day"] ?? .null) + let active7Day = Team.DevicesActiveSerializer().deserialize(dict["active_7_day"] ?? .null) + let active28Day = Team.DevicesActiveSerializer().deserialize(dict["active_28_day"] ?? .null) + return GetDevicesReport(startDate: startDate, active1Day: active1Day, active7Day: active7Day, active28Day: active28Day) + default: + fatalError("Type error deserializing") + } + } + } + + /// Membership Report Result. Each of the items in the storage report is an array of values, one value per day. If + /// there is no data for a day, then the value will be None. + open class GetMembershipReport: Team.BaseDfbReport { + /// Team size, for each day. + public let teamSize: Array + /// The number of pending invites to the team, for each day. + public let pendingInvites: Array + /// The number of members that joined the team, for each day. + public let membersJoined: Array + /// The number of suspended team members, for each day. + public let suspendedMembers: Array + /// The total number of licenses the team has, for each day. + public let licenses: Array + public init(startDate: String, teamSize: Array, pendingInvites: Array, membersJoined: Array, suspendedMembers: Array, licenses: Array) { + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(teamSize) + self.teamSize = teamSize + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(pendingInvites) + self.pendingInvites = pendingInvites + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(membersJoined) + self.membersJoined = membersJoined + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(suspendedMembers) + self.suspendedMembers = suspendedMembers + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(licenses) + self.licenses = licenses + super.init(startDate: startDate) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetMembershipReportSerializer().serialize(self)))" + } + } + open class GetMembershipReportSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetMembershipReport) -> JSON { + let output = [ + "start_date": Serialization._StringSerializer.serialize(value.startDate), + "team_size": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.teamSize), + "pending_invites": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.pendingInvites), + "members_joined": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.membersJoined), + "suspended_members": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.suspendedMembers), + "licenses": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.licenses), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetMembershipReport { + switch json { + case .dictionary(let dict): + let startDate = Serialization._StringSerializer.deserialize(dict["start_date"] ?? .null) + let teamSize = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["team_size"] ?? .null) + let pendingInvites = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["pending_invites"] ?? .null) + let membersJoined = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["members_joined"] ?? .null) + let suspendedMembers = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["suspended_members"] ?? .null) + let licenses = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["licenses"] ?? .null) + return GetMembershipReport(startDate: startDate, teamSize: teamSize, pendingInvites: pendingInvites, membersJoined: membersJoined, suspendedMembers: suspendedMembers, licenses: licenses) + default: + fatalError("Type error deserializing") + } + } + } + + /// Storage Report Result. Each of the items in the storage report is an array of values, one value per day. If + /// there is no data for a day, then the value will be None. + open class GetStorageReport: Team.BaseDfbReport { + /// Sum of the shared, unshared, and datastore usages, for each day. + public let totalUsage: Array + /// Array of the combined size (bytes) of team members' shared folders, for each day. + public let sharedUsage: Array + /// Array of the combined size (bytes) of team members' root namespaces, for each day. + public let unsharedUsage: Array + /// Array of the number of shared folders owned by team members, for each day. + public let sharedFolders: Array + /// Array of storage summaries of team members' account sizes. Each storage summary is an array of key, value + /// pairs, where each pair describes a storage bucket. The key indicates the upper bound of the bucket and the + /// value is the number of users in that bucket. There is one such summary per day. If there is no data for a + /// day, the storage summary will be empty. + public let memberStorageMap: Array> + public init(startDate: String, totalUsage: Array, sharedUsage: Array, unsharedUsage: Array, sharedFolders: Array, memberStorageMap: Array>) { + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(totalUsage) + self.totalUsage = totalUsage + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(sharedUsage) + self.sharedUsage = sharedUsage + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(unsharedUsage) + self.unsharedUsage = unsharedUsage + arrayValidator(itemValidator: nullableValidator(comparableValidator()))(sharedFolders) + self.sharedFolders = sharedFolders + self.memberStorageMap = memberStorageMap + super.init(startDate: startDate) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetStorageReportSerializer().serialize(self)))" + } + } + open class GetStorageReportSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetStorageReport) -> JSON { + let output = [ + "start_date": Serialization._StringSerializer.serialize(value.startDate), + "total_usage": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.totalUsage), + "shared_usage": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.sharedUsage), + "unshared_usage": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.unsharedUsage), + "shared_folders": ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).serialize(value.sharedFolders), + "member_storage_map": ArraySerializer(ArraySerializer(Team.StorageBucketSerializer())).serialize(value.memberStorageMap), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetStorageReport { + switch json { + case .dictionary(let dict): + let startDate = Serialization._StringSerializer.deserialize(dict["start_date"] ?? .null) + let totalUsage = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["total_usage"] ?? .null) + let sharedUsage = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["shared_usage"] ?? .null) + let unsharedUsage = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["unshared_usage"] ?? .null) + let sharedFolders = ArraySerializer(NullableSerializer(Serialization._UInt64Serializer)).deserialize(dict["shared_folders"] ?? .null) + let memberStorageMap = ArraySerializer(ArraySerializer(Team.StorageBucketSerializer())).deserialize(dict["member_storage_map"] ?? .null) + return GetStorageReport(startDate: startDate, totalUsage: totalUsage, sharedUsage: sharedUsage, unsharedUsage: unsharedUsage, sharedFolders: sharedFolders, memberStorageMap: memberStorageMap) + default: + fatalError("Type error deserializing") + } + } + } + + /// Role of a user in group. + public enum GroupAccessType: CustomStringConvertible { + /// User is a member of the group, but has no special permissions. + case member + /// User can rename the group, and add/remove members. + case owner + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupAccessTypeSerializer().serialize(self)))" + } + } + open class GroupAccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupAccessType) -> JSON { + switch value { + case .member: + var d = [String: JSON]() + d[".tag"] = .str("member") + return .dictionary(d) + case .owner: + var d = [String: JSON]() + d[".tag"] = .str("owner") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupAccessType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "member": + return GroupAccessType.member + case "owner": + return GroupAccessType.owner + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupCreateArg struct + open class GroupCreateArg: CustomStringConvertible { + /// Group name. + public let groupName: String + /// The creator of a team can associate an arbitrary external ID to the group. + public let groupExternalId: String? + /// Whether the team can be managed by selected users, or only by team admins. + public let groupManagementType: TeamCommon.GroupManagementType? + public init(groupName: String, groupExternalId: String? = nil, groupManagementType: TeamCommon.GroupManagementType? = nil) { + stringValidator()(groupName) + self.groupName = groupName + nullableValidator(stringValidator())(groupExternalId) + self.groupExternalId = groupExternalId + self.groupManagementType = groupManagementType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupCreateArgSerializer().serialize(self)))" + } + } + open class GroupCreateArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupCreateArg) -> JSON { + let output = [ + "group_name": Serialization._StringSerializer.serialize(value.groupName), + "group_external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.groupExternalId), + "group_management_type": NullableSerializer(TeamCommon.GroupManagementTypeSerializer()).serialize(value.groupManagementType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupCreateArg { + switch json { + case .dictionary(let dict): + let groupName = Serialization._StringSerializer.deserialize(dict["group_name"] ?? .null) + let groupExternalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["group_external_id"] ?? .null) + let groupManagementType = NullableSerializer(TeamCommon.GroupManagementTypeSerializer()).deserialize(dict["group_management_type"] ?? .null) + return GroupCreateArg(groupName: groupName, groupExternalId: groupExternalId, groupManagementType: groupManagementType) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupCreateError union + public enum GroupCreateError: CustomStringConvertible { + /// The requested group name is already being used by another group. + case groupNameAlreadyUsed + /// Group name is empty or has invalid characters. + case groupNameInvalid + /// The requested external ID is already being used by another group. + case externalIdAlreadyInUse + /// System-managed group cannot be manually created. + case systemManagedGroupDisallowed + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupCreateErrorSerializer().serialize(self)))" + } + } + open class GroupCreateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupCreateError) -> JSON { + switch value { + case .groupNameAlreadyUsed: + var d = [String: JSON]() + d[".tag"] = .str("group_name_already_used") + return .dictionary(d) + case .groupNameInvalid: + var d = [String: JSON]() + d[".tag"] = .str("group_name_invalid") + return .dictionary(d) + case .externalIdAlreadyInUse: + var d = [String: JSON]() + d[".tag"] = .str("external_id_already_in_use") + return .dictionary(d) + case .systemManagedGroupDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("system_managed_group_disallowed") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupCreateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_name_already_used": + return GroupCreateError.groupNameAlreadyUsed + case "group_name_invalid": + return GroupCreateError.groupNameInvalid + case "external_id_already_in_use": + return GroupCreateError.externalIdAlreadyInUse + case "system_managed_group_disallowed": + return GroupCreateError.systemManagedGroupDisallowed + case "other": + return GroupCreateError.other + default: + return GroupCreateError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Error that can be raised when GroupSelector is used. + public enum GroupSelectorError: CustomStringConvertible { + /// No matching group found. No groups match the specified group ID. + case groupNotFound + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupSelectorErrorSerializer().serialize(self)))" + } + } + open class GroupSelectorErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupSelectorError) -> JSON { + switch value { + case .groupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupSelectorError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_found": + return GroupSelectorError.groupNotFound + case "other": + return GroupSelectorError.other + default: + return GroupSelectorError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Error that can be raised when GroupSelector is used and team groups are disallowed from being used. + public enum GroupSelectorWithTeamGroupError: CustomStringConvertible { + /// No matching group found. No groups match the specified group ID. + case groupNotFound + /// An unspecified error. + case other + /// This operation is not supported on system-managed groups. + case systemManagedGroupDisallowed + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupSelectorWithTeamGroupErrorSerializer().serialize(self)))" + } + } + open class GroupSelectorWithTeamGroupErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupSelectorWithTeamGroupError) -> JSON { + switch value { + case .groupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .systemManagedGroupDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("system_managed_group_disallowed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupSelectorWithTeamGroupError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_found": + return GroupSelectorWithTeamGroupError.groupNotFound + case "other": + return GroupSelectorWithTeamGroupError.other + case "system_managed_group_disallowed": + return GroupSelectorWithTeamGroupError.systemManagedGroupDisallowed + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupDeleteError union + public enum GroupDeleteError: CustomStringConvertible { + /// No matching group found. No groups match the specified group ID. + case groupNotFound + /// An unspecified error. + case other + /// This operation is not supported on system-managed groups. + case systemManagedGroupDisallowed + /// This group has already been deleted. + case groupAlreadyDeleted + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupDeleteErrorSerializer().serialize(self)))" + } + } + open class GroupDeleteErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupDeleteError) -> JSON { + switch value { + case .groupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .systemManagedGroupDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("system_managed_group_disallowed") + return .dictionary(d) + case .groupAlreadyDeleted: + var d = [String: JSON]() + d[".tag"] = .str("group_already_deleted") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupDeleteError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_found": + return GroupDeleteError.groupNotFound + case "other": + return GroupDeleteError.other + case "system_managed_group_disallowed": + return GroupDeleteError.systemManagedGroupDisallowed + case "group_already_deleted": + return GroupDeleteError.groupAlreadyDeleted + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Full description of a group. + open class GroupFullInfo: TeamCommon.GroupSummary { + /// List of group members. + public let members: Array? + /// The group creation time as a UTC timestamp in milliseconds since the Unix epoch. + public let created: UInt64 + public init(groupName: String, groupId: String, groupManagementType: TeamCommon.GroupManagementType, created: UInt64, groupExternalId: String? = nil, memberCount: UInt32? = nil, members: Array? = nil) { + self.members = members + comparableValidator()(created) + self.created = created + super.init(groupName: groupName, groupId: groupId, groupManagementType: groupManagementType, groupExternalId: groupExternalId, memberCount: memberCount) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupFullInfoSerializer().serialize(self)))" + } + } + open class GroupFullInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupFullInfo) -> JSON { + let output = [ + "group_name": Serialization._StringSerializer.serialize(value.groupName), + "group_id": Serialization._StringSerializer.serialize(value.groupId), + "group_management_type": TeamCommon.GroupManagementTypeSerializer().serialize(value.groupManagementType), + "created": Serialization._UInt64Serializer.serialize(value.created), + "group_external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.groupExternalId), + "member_count": NullableSerializer(Serialization._UInt32Serializer).serialize(value.memberCount), + "members": NullableSerializer(ArraySerializer(Team.GroupMemberInfoSerializer())).serialize(value.members), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupFullInfo { + switch json { + case .dictionary(let dict): + let groupName = Serialization._StringSerializer.deserialize(dict["group_name"] ?? .null) + let groupId = Serialization._StringSerializer.deserialize(dict["group_id"] ?? .null) + let groupManagementType = TeamCommon.GroupManagementTypeSerializer().deserialize(dict["group_management_type"] ?? .null) + let created = Serialization._UInt64Serializer.deserialize(dict["created"] ?? .null) + let groupExternalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["group_external_id"] ?? .null) + let memberCount = NullableSerializer(Serialization._UInt32Serializer).deserialize(dict["member_count"] ?? .null) + let members = NullableSerializer(ArraySerializer(Team.GroupMemberInfoSerializer())).deserialize(dict["members"] ?? .null) + return GroupFullInfo(groupName: groupName, groupId: groupId, groupManagementType: groupManagementType, created: created, groupExternalId: groupExternalId, memberCount: memberCount, members: members) + default: + fatalError("Type error deserializing") + } + } + } + + /// Profile of group member, and role in group. + open class GroupMemberInfo: CustomStringConvertible { + /// Profile of group member. + public let profile: Team.MemberProfile + /// The role that the user has in the group. + public let accessType: Team.GroupAccessType + public init(profile: Team.MemberProfile, accessType: Team.GroupAccessType) { + self.profile = profile + self.accessType = accessType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMemberInfoSerializer().serialize(self)))" + } + } + open class GroupMemberInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMemberInfo) -> JSON { + let output = [ + "profile": Team.MemberProfileSerializer().serialize(value.profile), + "access_type": Team.GroupAccessTypeSerializer().serialize(value.accessType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMemberInfo { + switch json { + case .dictionary(let dict): + let profile = Team.MemberProfileSerializer().deserialize(dict["profile"] ?? .null) + let accessType = Team.GroupAccessTypeSerializer().deserialize(dict["access_type"] ?? .null) + return GroupMemberInfo(profile: profile, accessType: accessType) + default: + fatalError("Type error deserializing") + } + } + } + + /// Argument for selecting a group and a single user. + open class GroupMemberSelector: CustomStringConvertible { + /// Specify a group. + public let group: Team.GroupSelector + /// Identity of a user that is a member of group. + public let user: Team.UserSelectorArg + public init(group: Team.GroupSelector, user: Team.UserSelectorArg) { + self.group = group + self.user = user + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMemberSelectorSerializer().serialize(self)))" + } + } + open class GroupMemberSelectorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMemberSelector) -> JSON { + let output = [ + "group": Team.GroupSelectorSerializer().serialize(value.group), + "user": Team.UserSelectorArgSerializer().serialize(value.user), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMemberSelector { + switch json { + case .dictionary(let dict): + let group = Team.GroupSelectorSerializer().deserialize(dict["group"] ?? .null) + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + return GroupMemberSelector(group: group, user: user) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error that can be raised when GroupMemberSelector is used, and the user is required to be a member of the + /// specified group. + public enum GroupMemberSelectorError: CustomStringConvertible { + /// No matching group found. No groups match the specified group ID. + case groupNotFound + /// An unspecified error. + case other + /// This operation is not supported on system-managed groups. + case systemManagedGroupDisallowed + /// The specified user is not a member of this group. + case memberNotInGroup + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMemberSelectorErrorSerializer().serialize(self)))" + } + } + open class GroupMemberSelectorErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMemberSelectorError) -> JSON { + switch value { + case .groupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .systemManagedGroupDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("system_managed_group_disallowed") + return .dictionary(d) + case .memberNotInGroup: + var d = [String: JSON]() + d[".tag"] = .str("member_not_in_group") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupMemberSelectorError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_found": + return GroupMemberSelectorError.groupNotFound + case "other": + return GroupMemberSelectorError.other + case "system_managed_group_disallowed": + return GroupMemberSelectorError.systemManagedGroupDisallowed + case "member_not_in_group": + return GroupMemberSelectorError.memberNotInGroup + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupMemberSetAccessTypeError union + public enum GroupMemberSetAccessTypeError: CustomStringConvertible { + /// No matching group found. No groups match the specified group ID. + case groupNotFound + /// An unspecified error. + case other + /// This operation is not supported on system-managed groups. + case systemManagedGroupDisallowed + /// The specified user is not a member of this group. + case memberNotInGroup + /// A company managed group cannot be managed by a user. + case userCannotBeManagerOfCompanyManagedGroup + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMemberSetAccessTypeErrorSerializer().serialize(self)))" + } + } + open class GroupMemberSetAccessTypeErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMemberSetAccessTypeError) -> JSON { + switch value { + case .groupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .systemManagedGroupDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("system_managed_group_disallowed") + return .dictionary(d) + case .memberNotInGroup: + var d = [String: JSON]() + d[".tag"] = .str("member_not_in_group") + return .dictionary(d) + case .userCannotBeManagerOfCompanyManagedGroup: + var d = [String: JSON]() + d[".tag"] = .str("user_cannot_be_manager_of_company_managed_group") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupMemberSetAccessTypeError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_found": + return GroupMemberSetAccessTypeError.groupNotFound + case "other": + return GroupMemberSetAccessTypeError.other + case "system_managed_group_disallowed": + return GroupMemberSetAccessTypeError.systemManagedGroupDisallowed + case "member_not_in_group": + return GroupMemberSetAccessTypeError.memberNotInGroup + case "user_cannot_be_manager_of_company_managed_group": + return GroupMemberSetAccessTypeError.userCannotBeManagerOfCompanyManagedGroup + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The IncludeMembersArg struct + open class IncludeMembersArg: CustomStringConvertible { + /// Whether to return the list of members in the group. Note that the default value will cause all the group + /// members to be returned in the response. This may take a long time for large groups. + public let returnMembers: Bool + public init(returnMembers: Bool = true) { + self.returnMembers = returnMembers + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(IncludeMembersArgSerializer().serialize(self)))" + } + } + open class IncludeMembersArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: IncludeMembersArg) -> JSON { + let output = [ + "return_members": Serialization._BoolSerializer.serialize(value.returnMembers), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> IncludeMembersArg { + switch json { + case .dictionary(let dict): + let returnMembers = Serialization._BoolSerializer.deserialize(dict["return_members"] ?? .number(1)) + return IncludeMembersArg(returnMembers: returnMembers) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupMembersAddArg struct + open class GroupMembersAddArg: Team.IncludeMembersArg { + /// Group to which users will be added. + public let group: Team.GroupSelector + /// List of users to be added to the group. + public let members: Array + public init(group: Team.GroupSelector, members: Array, returnMembers: Bool = true) { + self.group = group + self.members = members + super.init(returnMembers: returnMembers) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMembersAddArgSerializer().serialize(self)))" + } + } + open class GroupMembersAddArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMembersAddArg) -> JSON { + let output = [ + "group": Team.GroupSelectorSerializer().serialize(value.group), + "members": ArraySerializer(Team.MemberAccessSerializer()).serialize(value.members), + "return_members": Serialization._BoolSerializer.serialize(value.returnMembers), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMembersAddArg { + switch json { + case .dictionary(let dict): + let group = Team.GroupSelectorSerializer().deserialize(dict["group"] ?? .null) + let members = ArraySerializer(Team.MemberAccessSerializer()).deserialize(dict["members"] ?? .null) + let returnMembers = Serialization._BoolSerializer.deserialize(dict["return_members"] ?? .number(1)) + return GroupMembersAddArg(group: group, members: members, returnMembers: returnMembers) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupMembersAddError union + public enum GroupMembersAddError: CustomStringConvertible { + /// No matching group found. No groups match the specified group ID. + case groupNotFound + /// An unspecified error. + case other + /// This operation is not supported on system-managed groups. + case systemManagedGroupDisallowed + /// You cannot add duplicate users. One or more of the members you are trying to add is already a member of the + /// group. + case duplicateUser + /// Group is not in this team. You cannot add members to a group that is outside of your team. + case groupNotInTeam + /// These members are not part of your team. Currently, you cannot add members to a group if they are not part + /// of your team, though this may change in a subsequent version. To add new members to your Dropbox Business + /// team, use the membersAdd endpoint. + case membersNotInTeam(Array) + /// These users were not found in Dropbox. + case usersNotFound(Array) + /// A suspended user cannot be added to a group as owner in GroupAccessType. + case userMustBeActiveToBeOwner + /// A company-managed group cannot be managed by a user. + case userCannotBeManagerOfCompanyManagedGroup(Array) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMembersAddErrorSerializer().serialize(self)))" + } + } + open class GroupMembersAddErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMembersAddError) -> JSON { + switch value { + case .groupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .systemManagedGroupDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("system_managed_group_disallowed") + return .dictionary(d) + case .duplicateUser: + var d = [String: JSON]() + d[".tag"] = .str("duplicate_user") + return .dictionary(d) + case .groupNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("group_not_in_team") + return .dictionary(d) + case .membersNotInTeam(let arg): + var d = ["members_not_in_team": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("members_not_in_team") + return .dictionary(d) + case .usersNotFound(let arg): + var d = ["users_not_found": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("users_not_found") + return .dictionary(d) + case .userMustBeActiveToBeOwner: + var d = [String: JSON]() + d[".tag"] = .str("user_must_be_active_to_be_owner") + return .dictionary(d) + case .userCannotBeManagerOfCompanyManagedGroup(let arg): + var d = ["user_cannot_be_manager_of_company_managed_group": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("user_cannot_be_manager_of_company_managed_group") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupMembersAddError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_found": + return GroupMembersAddError.groupNotFound + case "other": + return GroupMembersAddError.other + case "system_managed_group_disallowed": + return GroupMembersAddError.systemManagedGroupDisallowed + case "duplicate_user": + return GroupMembersAddError.duplicateUser + case "group_not_in_team": + return GroupMembersAddError.groupNotInTeam + case "members_not_in_team": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["members_not_in_team"] ?? .null) + return GroupMembersAddError.membersNotInTeam(v) + case "users_not_found": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["users_not_found"] ?? .null) + return GroupMembersAddError.usersNotFound(v) + case "user_must_be_active_to_be_owner": + return GroupMembersAddError.userMustBeActiveToBeOwner + case "user_cannot_be_manager_of_company_managed_group": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["user_cannot_be_manager_of_company_managed_group"] ?? .null) + return GroupMembersAddError.userCannotBeManagerOfCompanyManagedGroup(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result returned by groupsMembersAdd and groupsMembersRemove. + open class GroupMembersChangeResult: CustomStringConvertible { + /// The group info after member change operation has been performed. + public let groupInfo: Team.GroupFullInfo + /// An ID that can be used to obtain the status of granting/revoking group-owned resources. + public let asyncJobId: String + public init(groupInfo: Team.GroupFullInfo, asyncJobId: String) { + self.groupInfo = groupInfo + stringValidator(minLength: 1)(asyncJobId) + self.asyncJobId = asyncJobId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMembersChangeResultSerializer().serialize(self)))" + } + } + open class GroupMembersChangeResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMembersChangeResult) -> JSON { + let output = [ + "group_info": Team.GroupFullInfoSerializer().serialize(value.groupInfo), + "async_job_id": Serialization._StringSerializer.serialize(value.asyncJobId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMembersChangeResult { + switch json { + case .dictionary(let dict): + let groupInfo = Team.GroupFullInfoSerializer().deserialize(dict["group_info"] ?? .null) + let asyncJobId = Serialization._StringSerializer.deserialize(dict["async_job_id"] ?? .null) + return GroupMembersChangeResult(groupInfo: groupInfo, asyncJobId: asyncJobId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupMembersRemoveArg struct + open class GroupMembersRemoveArg: Team.IncludeMembersArg { + /// Group from which users will be removed. + public let group: Team.GroupSelector + /// List of users to be removed from the group. + public let users: Array + public init(group: Team.GroupSelector, users: Array, returnMembers: Bool = true) { + self.group = group + self.users = users + super.init(returnMembers: returnMembers) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMembersRemoveArgSerializer().serialize(self)))" + } + } + open class GroupMembersRemoveArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMembersRemoveArg) -> JSON { + let output = [ + "group": Team.GroupSelectorSerializer().serialize(value.group), + "users": ArraySerializer(Team.UserSelectorArgSerializer()).serialize(value.users), + "return_members": Serialization._BoolSerializer.serialize(value.returnMembers), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMembersRemoveArg { + switch json { + case .dictionary(let dict): + let group = Team.GroupSelectorSerializer().deserialize(dict["group"] ?? .null) + let users = ArraySerializer(Team.UserSelectorArgSerializer()).deserialize(dict["users"] ?? .null) + let returnMembers = Serialization._BoolSerializer.deserialize(dict["return_members"] ?? .number(1)) + return GroupMembersRemoveArg(group: group, users: users, returnMembers: returnMembers) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error that can be raised when GroupMembersSelector is used, and the users are required to be members of the + /// specified group. + public enum GroupMembersSelectorError: CustomStringConvertible { + /// No matching group found. No groups match the specified group ID. + case groupNotFound + /// An unspecified error. + case other + /// This operation is not supported on system-managed groups. + case systemManagedGroupDisallowed + /// At least one of the specified users is not a member of the group. + case memberNotInGroup + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMembersSelectorErrorSerializer().serialize(self)))" + } + } + open class GroupMembersSelectorErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMembersSelectorError) -> JSON { + switch value { + case .groupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .systemManagedGroupDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("system_managed_group_disallowed") + return .dictionary(d) + case .memberNotInGroup: + var d = [String: JSON]() + d[".tag"] = .str("member_not_in_group") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupMembersSelectorError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_found": + return GroupMembersSelectorError.groupNotFound + case "other": + return GroupMembersSelectorError.other + case "system_managed_group_disallowed": + return GroupMembersSelectorError.systemManagedGroupDisallowed + case "member_not_in_group": + return GroupMembersSelectorError.memberNotInGroup + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupMembersRemoveError union + public enum GroupMembersRemoveError: CustomStringConvertible { + /// No matching group found. No groups match the specified group ID. + case groupNotFound + /// An unspecified error. + case other + /// This operation is not supported on system-managed groups. + case systemManagedGroupDisallowed + /// At least one of the specified users is not a member of the group. + case memberNotInGroup + /// Group is not in this team. You cannot remove members from a group that is outside of your team. + case groupNotInTeam + /// These members are not part of your team. + case membersNotInTeam(Array) + /// These users were not found in Dropbox. + case usersNotFound(Array) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMembersRemoveErrorSerializer().serialize(self)))" + } + } + open class GroupMembersRemoveErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMembersRemoveError) -> JSON { + switch value { + case .groupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .systemManagedGroupDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("system_managed_group_disallowed") + return .dictionary(d) + case .memberNotInGroup: + var d = [String: JSON]() + d[".tag"] = .str("member_not_in_group") + return .dictionary(d) + case .groupNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("group_not_in_team") + return .dictionary(d) + case .membersNotInTeam(let arg): + var d = ["members_not_in_team": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("members_not_in_team") + return .dictionary(d) + case .usersNotFound(let arg): + var d = ["users_not_found": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("users_not_found") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupMembersRemoveError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_found": + return GroupMembersRemoveError.groupNotFound + case "other": + return GroupMembersRemoveError.other + case "system_managed_group_disallowed": + return GroupMembersRemoveError.systemManagedGroupDisallowed + case "member_not_in_group": + return GroupMembersRemoveError.memberNotInGroup + case "group_not_in_team": + return GroupMembersRemoveError.groupNotInTeam + case "members_not_in_team": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["members_not_in_team"] ?? .null) + return GroupMembersRemoveError.membersNotInTeam(v) + case "users_not_found": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["users_not_found"] ?? .null) + return GroupMembersRemoveError.usersNotFound(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Argument for selecting a group and a list of users. + open class GroupMembersSelector: CustomStringConvertible { + /// Specify a group. + public let group: Team.GroupSelector + /// A list of users that are members of group. + public let users: Team.UsersSelectorArg + public init(group: Team.GroupSelector, users: Team.UsersSelectorArg) { + self.group = group + self.users = users + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMembersSelectorSerializer().serialize(self)))" + } + } + open class GroupMembersSelectorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMembersSelector) -> JSON { + let output = [ + "group": Team.GroupSelectorSerializer().serialize(value.group), + "users": Team.UsersSelectorArgSerializer().serialize(value.users), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMembersSelector { + switch json { + case .dictionary(let dict): + let group = Team.GroupSelectorSerializer().deserialize(dict["group"] ?? .null) + let users = Team.UsersSelectorArgSerializer().deserialize(dict["users"] ?? .null) + return GroupMembersSelector(group: group, users: users) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupMembersSetAccessTypeArg struct + open class GroupMembersSetAccessTypeArg: Team.GroupMemberSelector { + /// New group access type the user will have. + public let accessType: Team.GroupAccessType + /// Whether to return the list of members in the group. Note that the default value will cause all the group + /// members to be returned in the response. This may take a long time for large groups. + public let returnMembers: Bool + public init(group: Team.GroupSelector, user: Team.UserSelectorArg, accessType: Team.GroupAccessType, returnMembers: Bool = true) { + self.accessType = accessType + self.returnMembers = returnMembers + super.init(group: group, user: user) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMembersSetAccessTypeArgSerializer().serialize(self)))" + } + } + open class GroupMembersSetAccessTypeArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMembersSetAccessTypeArg) -> JSON { + let output = [ + "group": Team.GroupSelectorSerializer().serialize(value.group), + "user": Team.UserSelectorArgSerializer().serialize(value.user), + "access_type": Team.GroupAccessTypeSerializer().serialize(value.accessType), + "return_members": Serialization._BoolSerializer.serialize(value.returnMembers), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMembersSetAccessTypeArg { + switch json { + case .dictionary(let dict): + let group = Team.GroupSelectorSerializer().deserialize(dict["group"] ?? .null) + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + let accessType = Team.GroupAccessTypeSerializer().deserialize(dict["access_type"] ?? .null) + let returnMembers = Serialization._BoolSerializer.deserialize(dict["return_members"] ?? .number(1)) + return GroupMembersSetAccessTypeArg(group: group, user: user, accessType: accessType, returnMembers: returnMembers) + default: + fatalError("Type error deserializing") + } + } + } + + /// Argument for selecting a single group, either by group_id or by external group ID. + public enum GroupSelector: CustomStringConvertible { + /// Group ID. + case groupId(String) + /// External ID of the group. + case groupExternalId(String) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupSelectorSerializer().serialize(self)))" + } + } + open class GroupSelectorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupSelector) -> JSON { + switch value { + case .groupId(let arg): + var d = ["group_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("group_id") + return .dictionary(d) + case .groupExternalId(let arg): + var d = ["group_external_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("group_external_id") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupSelector { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_id": + let v = Serialization._StringSerializer.deserialize(d["group_id"] ?? .null) + return GroupSelector.groupId(v) + case "group_external_id": + let v = Serialization._StringSerializer.deserialize(d["group_external_id"] ?? .null) + return GroupSelector.groupExternalId(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupUpdateArgs struct + open class GroupUpdateArgs: Team.IncludeMembersArg { + /// Specify a group. + public let group: Team.GroupSelector + /// Optional argument. Set group name to this if provided. + public let newGroupName: String? + /// Optional argument. New group external ID. If the argument is None, the group's external_id won't be updated. + /// If the argument is empty string, the group's external id will be cleared. + public let newGroupExternalId: String? + /// Set new group management type, if provided. + public let newGroupManagementType: TeamCommon.GroupManagementType? + public init(group: Team.GroupSelector, returnMembers: Bool = true, newGroupName: String? = nil, newGroupExternalId: String? = nil, newGroupManagementType: TeamCommon.GroupManagementType? = nil) { + self.group = group + nullableValidator(stringValidator())(newGroupName) + self.newGroupName = newGroupName + nullableValidator(stringValidator())(newGroupExternalId) + self.newGroupExternalId = newGroupExternalId + self.newGroupManagementType = newGroupManagementType + super.init(returnMembers: returnMembers) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupUpdateArgsSerializer().serialize(self)))" + } + } + open class GroupUpdateArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupUpdateArgs) -> JSON { + let output = [ + "group": Team.GroupSelectorSerializer().serialize(value.group), + "return_members": Serialization._BoolSerializer.serialize(value.returnMembers), + "new_group_name": NullableSerializer(Serialization._StringSerializer).serialize(value.newGroupName), + "new_group_external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.newGroupExternalId), + "new_group_management_type": NullableSerializer(TeamCommon.GroupManagementTypeSerializer()).serialize(value.newGroupManagementType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupUpdateArgs { + switch json { + case .dictionary(let dict): + let group = Team.GroupSelectorSerializer().deserialize(dict["group"] ?? .null) + let returnMembers = Serialization._BoolSerializer.deserialize(dict["return_members"] ?? .number(1)) + let newGroupName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_group_name"] ?? .null) + let newGroupExternalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_group_external_id"] ?? .null) + let newGroupManagementType = NullableSerializer(TeamCommon.GroupManagementTypeSerializer()).deserialize(dict["new_group_management_type"] ?? .null) + return GroupUpdateArgs(group: group, returnMembers: returnMembers, newGroupName: newGroupName, newGroupExternalId: newGroupExternalId, newGroupManagementType: newGroupManagementType) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupUpdateError union + public enum GroupUpdateError: CustomStringConvertible { + /// No matching group found. No groups match the specified group ID. + case groupNotFound + /// An unspecified error. + case other + /// This operation is not supported on system-managed groups. + case systemManagedGroupDisallowed + /// The requested group name is already being used by another group. + case groupNameAlreadyUsed + /// Group name is empty or has invalid characters. + case groupNameInvalid + /// The requested external ID is already being used by another group. + case externalIdAlreadyInUse + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupUpdateErrorSerializer().serialize(self)))" + } + } + open class GroupUpdateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupUpdateError) -> JSON { + switch value { + case .groupNotFound: + var d = [String: JSON]() + d[".tag"] = .str("group_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .systemManagedGroupDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("system_managed_group_disallowed") + return .dictionary(d) + case .groupNameAlreadyUsed: + var d = [String: JSON]() + d[".tag"] = .str("group_name_already_used") + return .dictionary(d) + case .groupNameInvalid: + var d = [String: JSON]() + d[".tag"] = .str("group_name_invalid") + return .dictionary(d) + case .externalIdAlreadyInUse: + var d = [String: JSON]() + d[".tag"] = .str("external_id_already_in_use") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupUpdateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_found": + return GroupUpdateError.groupNotFound + case "other": + return GroupUpdateError.other + case "system_managed_group_disallowed": + return GroupUpdateError.systemManagedGroupDisallowed + case "group_name_already_used": + return GroupUpdateError.groupNameAlreadyUsed + case "group_name_invalid": + return GroupUpdateError.groupNameInvalid + case "external_id_already_in_use": + return GroupUpdateError.externalIdAlreadyInUse + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupsGetInfoError union + public enum GroupsGetInfoError: CustomStringConvertible { + /// The group is not on your team. + case groupNotOnTeam + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsGetInfoErrorSerializer().serialize(self)))" + } + } + open class GroupsGetInfoErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsGetInfoError) -> JSON { + switch value { + case .groupNotOnTeam: + var d = [String: JSON]() + d[".tag"] = .str("group_not_on_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupsGetInfoError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_not_on_team": + return GroupsGetInfoError.groupNotOnTeam + case "other": + return GroupsGetInfoError.other + default: + return GroupsGetInfoError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupsGetInfoItem union + public enum GroupsGetInfoItem: CustomStringConvertible { + /// An ID that was provided as a parameter to groupsGetInfo, and did not match a corresponding group. The ID can + /// be a group ID, or an external ID, depending on how the method was called. + case idNotFound(String) + /// Info about a group. + case groupInfo(Team.GroupFullInfo) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsGetInfoItemSerializer().serialize(self)))" + } + } + open class GroupsGetInfoItemSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsGetInfoItem) -> JSON { + switch value { + case .idNotFound(let arg): + var d = ["id_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("id_not_found") + return .dictionary(d) + case .groupInfo(let arg): + var d = Serialization.getFields(Team.GroupFullInfoSerializer().serialize(arg)) + d[".tag"] = .str("group_info") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupsGetInfoItem { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "id_not_found": + let v = Serialization._StringSerializer.deserialize(d["id_not_found"] ?? .null) + return GroupsGetInfoItem.idNotFound(v) + case "group_info": + let v = Team.GroupFullInfoSerializer().deserialize(json) + return GroupsGetInfoItem.groupInfo(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupsListArg struct + open class GroupsListArg: CustomStringConvertible { + /// Number of results to return per call. + public let limit: UInt32 + public init(limit: UInt32 = 1000) { + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsListArgSerializer().serialize(self)))" + } + } + open class GroupsListArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsListArg) -> JSON { + let output = [ + "limit": Serialization._UInt32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupsListArg { + switch json { + case .dictionary(let dict): + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + return GroupsListArg(limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupsListContinueArg struct + open class GroupsListContinueArg: CustomStringConvertible { + /// Indicates from what point to get the next set of groups. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsListContinueArgSerializer().serialize(self)))" + } + } + open class GroupsListContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsListContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupsListContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return GroupsListContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupsListContinueError union + public enum GroupsListContinueError: CustomStringConvertible { + /// The cursor is invalid. + case invalidCursor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsListContinueErrorSerializer().serialize(self)))" + } + } + open class GroupsListContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsListContinueError) -> JSON { + switch value { + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupsListContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_cursor": + return GroupsListContinueError.invalidCursor + case "other": + return GroupsListContinueError.other + default: + return GroupsListContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupsListResult struct + open class GroupsListResult: CustomStringConvertible { + /// (no description) + public let groups: Array + /// Pass the cursor into groupsListContinue to obtain the additional groups. + public let cursor: String + /// Is true if there are additional groups that have not been returned yet. An additional call to + /// groupsListContinue can retrieve them. + public let hasMore: Bool + public init(groups: Array, cursor: String, hasMore: Bool) { + self.groups = groups + stringValidator()(cursor) + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsListResultSerializer().serialize(self)))" + } + } + open class GroupsListResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsListResult) -> JSON { + let output = [ + "groups": ArraySerializer(TeamCommon.GroupSummarySerializer()).serialize(value.groups), + "cursor": Serialization._StringSerializer.serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupsListResult { + switch json { + case .dictionary(let dict): + let groups = ArraySerializer(TeamCommon.GroupSummarySerializer()).deserialize(dict["groups"] ?? .null) + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return GroupsListResult(groups: groups, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupsMembersListArg struct + open class GroupsMembersListArg: CustomStringConvertible { + /// The group whose members are to be listed. + public let group: Team.GroupSelector + /// Number of results to return per call. + public let limit: UInt32 + public init(group: Team.GroupSelector, limit: UInt32 = 1000) { + self.group = group + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsMembersListArgSerializer().serialize(self)))" + } + } + open class GroupsMembersListArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsMembersListArg) -> JSON { + let output = [ + "group": Team.GroupSelectorSerializer().serialize(value.group), + "limit": Serialization._UInt32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupsMembersListArg { + switch json { + case .dictionary(let dict): + let group = Team.GroupSelectorSerializer().deserialize(dict["group"] ?? .null) + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + return GroupsMembersListArg(group: group, limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupsMembersListContinueArg struct + open class GroupsMembersListContinueArg: CustomStringConvertible { + /// Indicates from what point to get the next set of groups. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsMembersListContinueArgSerializer().serialize(self)))" + } + } + open class GroupsMembersListContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsMembersListContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupsMembersListContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return GroupsMembersListContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupsMembersListContinueError union + public enum GroupsMembersListContinueError: CustomStringConvertible { + /// The cursor is invalid. + case invalidCursor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsMembersListContinueErrorSerializer().serialize(self)))" + } + } + open class GroupsMembersListContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsMembersListContinueError) -> JSON { + switch value { + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupsMembersListContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_cursor": + return GroupsMembersListContinueError.invalidCursor + case "other": + return GroupsMembersListContinueError.other + default: + return GroupsMembersListContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupsMembersListResult struct + open class GroupsMembersListResult: CustomStringConvertible { + /// (no description) + public let members: Array + /// Pass the cursor into groupsMembersListContinue to obtain additional group members. + public let cursor: String + /// Is true if there are additional group members that have not been returned yet. An additional call to + /// groupsMembersListContinue can retrieve them. + public let hasMore: Bool + public init(members: Array, cursor: String, hasMore: Bool) { + self.members = members + stringValidator()(cursor) + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsMembersListResultSerializer().serialize(self)))" + } + } + open class GroupsMembersListResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsMembersListResult) -> JSON { + let output = [ + "members": ArraySerializer(Team.GroupMemberInfoSerializer()).serialize(value.members), + "cursor": Serialization._StringSerializer.serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupsMembersListResult { + switch json { + case .dictionary(let dict): + let members = ArraySerializer(Team.GroupMemberInfoSerializer()).deserialize(dict["members"] ?? .null) + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return GroupsMembersListResult(members: members, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupsPollError union + public enum GroupsPollError: CustomStringConvertible { + /// The job ID is invalid. + case invalidAsyncJobId + /// Something went wrong with the job on Dropbox's end. You'll need to verify that the action you were taking + /// succeeded, and if not, try again. This should happen very rarely. + case internalError + /// An unspecified error. + case other + /// You are not allowed to poll this job. + case accessDenied + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsPollErrorSerializer().serialize(self)))" + } + } + open class GroupsPollErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsPollError) -> JSON { + switch value { + case .invalidAsyncJobId: + var d = [String: JSON]() + d[".tag"] = .str("invalid_async_job_id") + return .dictionary(d) + case .internalError: + var d = [String: JSON]() + d[".tag"] = .str("internal_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .accessDenied: + var d = [String: JSON]() + d[".tag"] = .str("access_denied") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupsPollError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_async_job_id": + return GroupsPollError.invalidAsyncJobId + case "internal_error": + return GroupsPollError.internalError + case "other": + return GroupsPollError.other + case "access_denied": + return GroupsPollError.accessDenied + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Argument for selecting a list of groups, either by group_ids, or external group IDs. + public enum GroupsSelector: CustomStringConvertible { + /// List of group IDs. + case groupIds(Array) + /// List of external IDs of groups. + case groupExternalIds(Array) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupsSelectorSerializer().serialize(self)))" + } + } + open class GroupsSelectorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupsSelector) -> JSON { + switch value { + case .groupIds(let arg): + var d = ["group_ids": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("group_ids") + return .dictionary(d) + case .groupExternalIds(let arg): + var d = ["group_external_ids": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("group_external_ids") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupsSelector { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "group_ids": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["group_ids"] ?? .null) + return GroupsSelector.groupIds(v) + case "group_external_ids": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["group_external_ids"] ?? .null) + return GroupsSelector.groupExternalIds(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The value for hasTeamFileEvents in Feature. + public enum HasTeamFileEventsValue: CustomStringConvertible { + /// Does this team have file events. + case enabled(Bool) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(HasTeamFileEventsValueSerializer().serialize(self)))" + } + } + open class HasTeamFileEventsValueSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: HasTeamFileEventsValue) -> JSON { + switch value { + case .enabled(let arg): + var d = ["enabled": Serialization._BoolSerializer.serialize(arg)] + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> HasTeamFileEventsValue { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "enabled": + let v = Serialization._BoolSerializer.deserialize(d["enabled"] ?? .null) + return HasTeamFileEventsValue.enabled(v) + case "other": + return HasTeamFileEventsValue.other + default: + return HasTeamFileEventsValue.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The value for hasTeamSelectiveSync in Feature. + public enum HasTeamSelectiveSyncValue: CustomStringConvertible { + /// Does this team have team selective sync enabled. + case hasTeamSelectiveSync(Bool) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(HasTeamSelectiveSyncValueSerializer().serialize(self)))" + } + } + open class HasTeamSelectiveSyncValueSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: HasTeamSelectiveSyncValue) -> JSON { + switch value { + case .hasTeamSelectiveSync(let arg): + var d = ["has_team_selective_sync": Serialization._BoolSerializer.serialize(arg)] + d[".tag"] = .str("has_team_selective_sync") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> HasTeamSelectiveSyncValue { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "has_team_selective_sync": + let v = Serialization._BoolSerializer.deserialize(d["has_team_selective_sync"] ?? .null) + return HasTeamSelectiveSyncValue.hasTeamSelectiveSync(v) + case "other": + return HasTeamSelectiveSyncValue.other + default: + return HasTeamSelectiveSyncValue.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The value for hasTeamSharedDropbox in Feature. + public enum HasTeamSharedDropboxValue: CustomStringConvertible { + /// Does this team have a shared team root. + case hasTeamSharedDropbox(Bool) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(HasTeamSharedDropboxValueSerializer().serialize(self)))" + } + } + open class HasTeamSharedDropboxValueSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: HasTeamSharedDropboxValue) -> JSON { + switch value { + case .hasTeamSharedDropbox(let arg): + var d = ["has_team_shared_dropbox": Serialization._BoolSerializer.serialize(arg)] + d[".tag"] = .str("has_team_shared_dropbox") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> HasTeamSharedDropboxValue { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "has_team_shared_dropbox": + let v = Serialization._BoolSerializer.deserialize(d["has_team_shared_dropbox"] ?? .null) + return HasTeamSharedDropboxValue.hasTeamSharedDropbox(v) + case "other": + return HasTeamSharedDropboxValue.other + default: + return HasTeamSharedDropboxValue.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListMemberAppsArg struct + open class ListMemberAppsArg: CustomStringConvertible { + /// The team member id. + public let teamMemberId: String + public init(teamMemberId: String) { + stringValidator()(teamMemberId) + self.teamMemberId = teamMemberId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMemberAppsArgSerializer().serialize(self)))" + } + } + open class ListMemberAppsArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMemberAppsArg) -> JSON { + let output = [ + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListMemberAppsArg { + switch json { + case .dictionary(let dict): + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + return ListMemberAppsArg(teamMemberId: teamMemberId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error returned by linkedAppsListMemberLinkedApps. + public enum ListMemberAppsError: CustomStringConvertible { + /// Member not found. + case memberNotFound + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMemberAppsErrorSerializer().serialize(self)))" + } + } + open class ListMemberAppsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMemberAppsError) -> JSON { + switch value { + case .memberNotFound: + var d = [String: JSON]() + d[".tag"] = .str("member_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListMemberAppsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "member_not_found": + return ListMemberAppsError.memberNotFound + case "other": + return ListMemberAppsError.other + default: + return ListMemberAppsError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListMemberAppsResult struct + open class ListMemberAppsResult: CustomStringConvertible { + /// List of third party applications linked by this team member. + public let linkedApiApps: Array + public init(linkedApiApps: Array) { + self.linkedApiApps = linkedApiApps + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMemberAppsResultSerializer().serialize(self)))" + } + } + open class ListMemberAppsResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMemberAppsResult) -> JSON { + let output = [ + "linked_api_apps": ArraySerializer(Team.ApiAppSerializer()).serialize(value.linkedApiApps), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListMemberAppsResult { + switch json { + case .dictionary(let dict): + let linkedApiApps = ArraySerializer(Team.ApiAppSerializer()).deserialize(dict["linked_api_apps"] ?? .null) + return ListMemberAppsResult(linkedApiApps: linkedApiApps) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListMemberDevicesArg struct + open class ListMemberDevicesArg: CustomStringConvertible { + /// The team's member id. + public let teamMemberId: String + /// Whether to list web sessions of the team's member. + public let includeWebSessions: Bool + /// Whether to list linked desktop devices of the team's member. + public let includeDesktopClients: Bool + /// Whether to list linked mobile devices of the team's member. + public let includeMobileClients: Bool + public init(teamMemberId: String, includeWebSessions: Bool = true, includeDesktopClients: Bool = true, includeMobileClients: Bool = true) { + stringValidator()(teamMemberId) + self.teamMemberId = teamMemberId + self.includeWebSessions = includeWebSessions + self.includeDesktopClients = includeDesktopClients + self.includeMobileClients = includeMobileClients + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMemberDevicesArgSerializer().serialize(self)))" + } + } + open class ListMemberDevicesArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMemberDevicesArg) -> JSON { + let output = [ + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + "include_web_sessions": Serialization._BoolSerializer.serialize(value.includeWebSessions), + "include_desktop_clients": Serialization._BoolSerializer.serialize(value.includeDesktopClients), + "include_mobile_clients": Serialization._BoolSerializer.serialize(value.includeMobileClients), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListMemberDevicesArg { + switch json { + case .dictionary(let dict): + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + let includeWebSessions = Serialization._BoolSerializer.deserialize(dict["include_web_sessions"] ?? .number(1)) + let includeDesktopClients = Serialization._BoolSerializer.deserialize(dict["include_desktop_clients"] ?? .number(1)) + let includeMobileClients = Serialization._BoolSerializer.deserialize(dict["include_mobile_clients"] ?? .number(1)) + return ListMemberDevicesArg(teamMemberId: teamMemberId, includeWebSessions: includeWebSessions, includeDesktopClients: includeDesktopClients, includeMobileClients: includeMobileClients) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListMemberDevicesError union + public enum ListMemberDevicesError: CustomStringConvertible { + /// Member not found. + case memberNotFound + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMemberDevicesErrorSerializer().serialize(self)))" + } + } + open class ListMemberDevicesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMemberDevicesError) -> JSON { + switch value { + case .memberNotFound: + var d = [String: JSON]() + d[".tag"] = .str("member_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListMemberDevicesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "member_not_found": + return ListMemberDevicesError.memberNotFound + case "other": + return ListMemberDevicesError.other + default: + return ListMemberDevicesError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListMemberDevicesResult struct + open class ListMemberDevicesResult: CustomStringConvertible { + /// List of web sessions made by this team member. + public let activeWebSessions: Array? + /// List of desktop clients used by this team member. + public let desktopClientSessions: Array? + /// List of mobile client used by this team member. + public let mobileClientSessions: Array? + public init(activeWebSessions: Array? = nil, desktopClientSessions: Array? = nil, mobileClientSessions: Array? = nil) { + self.activeWebSessions = activeWebSessions + self.desktopClientSessions = desktopClientSessions + self.mobileClientSessions = mobileClientSessions + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMemberDevicesResultSerializer().serialize(self)))" + } + } + open class ListMemberDevicesResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMemberDevicesResult) -> JSON { + let output = [ + "active_web_sessions": NullableSerializer(ArraySerializer(Team.ActiveWebSessionSerializer())).serialize(value.activeWebSessions), + "desktop_client_sessions": NullableSerializer(ArraySerializer(Team.DesktopClientSessionSerializer())).serialize(value.desktopClientSessions), + "mobile_client_sessions": NullableSerializer(ArraySerializer(Team.MobileClientSessionSerializer())).serialize(value.mobileClientSessions), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListMemberDevicesResult { + switch json { + case .dictionary(let dict): + let activeWebSessions = NullableSerializer(ArraySerializer(Team.ActiveWebSessionSerializer())).deserialize(dict["active_web_sessions"] ?? .null) + let desktopClientSessions = NullableSerializer(ArraySerializer(Team.DesktopClientSessionSerializer())).deserialize(dict["desktop_client_sessions"] ?? .null) + let mobileClientSessions = NullableSerializer(ArraySerializer(Team.MobileClientSessionSerializer())).deserialize(dict["mobile_client_sessions"] ?? .null) + return ListMemberDevicesResult(activeWebSessions: activeWebSessions, desktopClientSessions: desktopClientSessions, mobileClientSessions: mobileClientSessions) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for linkedAppsListMembersLinkedApps. + open class ListMembersAppsArg: CustomStringConvertible { + /// At the first call to the linkedAppsListMembersLinkedApps the cursor shouldn't be passed. Then, if the result + /// of the call includes a cursor, the following requests should include the received cursors in order to + /// receive the next sub list of the team applications. + public let cursor: String? + public init(cursor: String? = nil) { + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMembersAppsArgSerializer().serialize(self)))" + } + } + open class ListMembersAppsArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMembersAppsArg) -> JSON { + let output = [ + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListMembersAppsArg { + switch json { + case .dictionary(let dict): + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ListMembersAppsArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error returned by linkedAppsListMembersLinkedApps. + public enum ListMembersAppsError: CustomStringConvertible { + /// Indicates that the cursor has been invalidated. Call linkedAppsListMembersLinkedApps again with an empty + /// cursor to obtain a new cursor. + case reset + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMembersAppsErrorSerializer().serialize(self)))" + } + } + open class ListMembersAppsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMembersAppsError) -> JSON { + switch value { + case .reset: + var d = [String: JSON]() + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListMembersAppsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "reset": + return ListMembersAppsError.reset + case "other": + return ListMembersAppsError.other + default: + return ListMembersAppsError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information returned by linkedAppsListMembersLinkedApps. + open class ListMembersAppsResult: CustomStringConvertible { + /// The linked applications of each member of the team. + public let apps: Array + /// If true, then there are more apps available. Pass the cursor to linkedAppsListMembersLinkedApps to retrieve + /// the rest. + public let hasMore: Bool + /// Pass the cursor into linkedAppsListMembersLinkedApps to receive the next sub list of team's applications. + public let cursor: String? + public init(apps: Array, hasMore: Bool, cursor: String? = nil) { + self.apps = apps + self.hasMore = hasMore + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMembersAppsResultSerializer().serialize(self)))" + } + } + open class ListMembersAppsResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMembersAppsResult) -> JSON { + let output = [ + "apps": ArraySerializer(Team.MemberLinkedAppsSerializer()).serialize(value.apps), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListMembersAppsResult { + switch json { + case .dictionary(let dict): + let apps = ArraySerializer(Team.MemberLinkedAppsSerializer()).deserialize(dict["apps"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ListMembersAppsResult(apps: apps, hasMore: hasMore, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListMembersDevicesArg struct + open class ListMembersDevicesArg: CustomStringConvertible { + /// At the first call to the devicesListMembersDevices the cursor shouldn't be passed. Then, if the result of + /// the call includes a cursor, the following requests should include the received cursors in order to receive + /// the next sub list of team devices. + public let cursor: String? + /// Whether to list web sessions of the team members. + public let includeWebSessions: Bool + /// Whether to list desktop clients of the team members. + public let includeDesktopClients: Bool + /// Whether to list mobile clients of the team members. + public let includeMobileClients: Bool + public init(cursor: String? = nil, includeWebSessions: Bool = true, includeDesktopClients: Bool = true, includeMobileClients: Bool = true) { + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + self.includeWebSessions = includeWebSessions + self.includeDesktopClients = includeDesktopClients + self.includeMobileClients = includeMobileClients + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMembersDevicesArgSerializer().serialize(self)))" + } + } + open class ListMembersDevicesArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMembersDevicesArg) -> JSON { + let output = [ + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + "include_web_sessions": Serialization._BoolSerializer.serialize(value.includeWebSessions), + "include_desktop_clients": Serialization._BoolSerializer.serialize(value.includeDesktopClients), + "include_mobile_clients": Serialization._BoolSerializer.serialize(value.includeMobileClients), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListMembersDevicesArg { + switch json { + case .dictionary(let dict): + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + let includeWebSessions = Serialization._BoolSerializer.deserialize(dict["include_web_sessions"] ?? .number(1)) + let includeDesktopClients = Serialization._BoolSerializer.deserialize(dict["include_desktop_clients"] ?? .number(1)) + let includeMobileClients = Serialization._BoolSerializer.deserialize(dict["include_mobile_clients"] ?? .number(1)) + return ListMembersDevicesArg(cursor: cursor, includeWebSessions: includeWebSessions, includeDesktopClients: includeDesktopClients, includeMobileClients: includeMobileClients) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListMembersDevicesError union + public enum ListMembersDevicesError: CustomStringConvertible { + /// Indicates that the cursor has been invalidated. Call devicesListMembersDevices again with an empty cursor to + /// obtain a new cursor. + case reset + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMembersDevicesErrorSerializer().serialize(self)))" + } + } + open class ListMembersDevicesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMembersDevicesError) -> JSON { + switch value { + case .reset: + var d = [String: JSON]() + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListMembersDevicesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "reset": + return ListMembersDevicesError.reset + case "other": + return ListMembersDevicesError.other + default: + return ListMembersDevicesError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListMembersDevicesResult struct + open class ListMembersDevicesResult: CustomStringConvertible { + /// The devices of each member of the team. + public let devices: Array + /// If true, then there are more devices available. Pass the cursor to devicesListMembersDevices to retrieve the + /// rest. + public let hasMore: Bool + /// Pass the cursor into devicesListMembersDevices to receive the next sub list of team's devices. + public let cursor: String? + public init(devices: Array, hasMore: Bool, cursor: String? = nil) { + self.devices = devices + self.hasMore = hasMore + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListMembersDevicesResultSerializer().serialize(self)))" + } + } + open class ListMembersDevicesResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListMembersDevicesResult) -> JSON { + let output = [ + "devices": ArraySerializer(Team.MemberDevicesSerializer()).serialize(value.devices), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListMembersDevicesResult { + switch json { + case .dictionary(let dict): + let devices = ArraySerializer(Team.MemberDevicesSerializer()).deserialize(dict["devices"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ListMembersDevicesResult(devices: devices, hasMore: hasMore, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Arguments for linkedAppsListTeamLinkedApps. + open class ListTeamAppsArg: CustomStringConvertible { + /// At the first call to the linkedAppsListTeamLinkedApps the cursor shouldn't be passed. Then, if the result of + /// the call includes a cursor, the following requests should include the received cursors in order to receive + /// the next sub list of the team applications. + public let cursor: String? + public init(cursor: String? = nil) { + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListTeamAppsArgSerializer().serialize(self)))" + } + } + open class ListTeamAppsArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListTeamAppsArg) -> JSON { + let output = [ + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListTeamAppsArg { + switch json { + case .dictionary(let dict): + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ListTeamAppsArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error returned by linkedAppsListTeamLinkedApps. + public enum ListTeamAppsError: CustomStringConvertible { + /// Indicates that the cursor has been invalidated. Call linkedAppsListTeamLinkedApps again with an empty cursor + /// to obtain a new cursor. + case reset + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListTeamAppsErrorSerializer().serialize(self)))" + } + } + open class ListTeamAppsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListTeamAppsError) -> JSON { + switch value { + case .reset: + var d = [String: JSON]() + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListTeamAppsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "reset": + return ListTeamAppsError.reset + case "other": + return ListTeamAppsError.other + default: + return ListTeamAppsError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information returned by linkedAppsListTeamLinkedApps. + open class ListTeamAppsResult: CustomStringConvertible { + /// The linked applications of each member of the team. + public let apps: Array + /// If true, then there are more apps available. Pass the cursor to linkedAppsListTeamLinkedApps to retrieve the + /// rest. + public let hasMore: Bool + /// Pass the cursor into linkedAppsListTeamLinkedApps to receive the next sub list of team's applications. + public let cursor: String? + public init(apps: Array, hasMore: Bool, cursor: String? = nil) { + self.apps = apps + self.hasMore = hasMore + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListTeamAppsResultSerializer().serialize(self)))" + } + } + open class ListTeamAppsResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListTeamAppsResult) -> JSON { + let output = [ + "apps": ArraySerializer(Team.MemberLinkedAppsSerializer()).serialize(value.apps), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListTeamAppsResult { + switch json { + case .dictionary(let dict): + let apps = ArraySerializer(Team.MemberLinkedAppsSerializer()).deserialize(dict["apps"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ListTeamAppsResult(apps: apps, hasMore: hasMore, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListTeamDevicesArg struct + open class ListTeamDevicesArg: CustomStringConvertible { + /// At the first call to the devicesListTeamDevices the cursor shouldn't be passed. Then, if the result of the + /// call includes a cursor, the following requests should include the received cursors in order to receive the + /// next sub list of team devices. + public let cursor: String? + /// Whether to list web sessions of the team members. + public let includeWebSessions: Bool + /// Whether to list desktop clients of the team members. + public let includeDesktopClients: Bool + /// Whether to list mobile clients of the team members. + public let includeMobileClients: Bool + public init(cursor: String? = nil, includeWebSessions: Bool = true, includeDesktopClients: Bool = true, includeMobileClients: Bool = true) { + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + self.includeWebSessions = includeWebSessions + self.includeDesktopClients = includeDesktopClients + self.includeMobileClients = includeMobileClients + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListTeamDevicesArgSerializer().serialize(self)))" + } + } + open class ListTeamDevicesArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListTeamDevicesArg) -> JSON { + let output = [ + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + "include_web_sessions": Serialization._BoolSerializer.serialize(value.includeWebSessions), + "include_desktop_clients": Serialization._BoolSerializer.serialize(value.includeDesktopClients), + "include_mobile_clients": Serialization._BoolSerializer.serialize(value.includeMobileClients), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListTeamDevicesArg { + switch json { + case .dictionary(let dict): + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + let includeWebSessions = Serialization._BoolSerializer.deserialize(dict["include_web_sessions"] ?? .number(1)) + let includeDesktopClients = Serialization._BoolSerializer.deserialize(dict["include_desktop_clients"] ?? .number(1)) + let includeMobileClients = Serialization._BoolSerializer.deserialize(dict["include_mobile_clients"] ?? .number(1)) + return ListTeamDevicesArg(cursor: cursor, includeWebSessions: includeWebSessions, includeDesktopClients: includeDesktopClients, includeMobileClients: includeMobileClients) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ListTeamDevicesError union + public enum ListTeamDevicesError: CustomStringConvertible { + /// Indicates that the cursor has been invalidated. Call devicesListTeamDevices again with an empty cursor to + /// obtain a new cursor. + case reset + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListTeamDevicesErrorSerializer().serialize(self)))" + } + } + open class ListTeamDevicesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListTeamDevicesError) -> JSON { + switch value { + case .reset: + var d = [String: JSON]() + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ListTeamDevicesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "reset": + return ListTeamDevicesError.reset + case "other": + return ListTeamDevicesError.other + default: + return ListTeamDevicesError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ListTeamDevicesResult struct + open class ListTeamDevicesResult: CustomStringConvertible { + /// The devices of each member of the team. + public let devices: Array + /// If true, then there are more devices available. Pass the cursor to devicesListTeamDevices to retrieve the + /// rest. + public let hasMore: Bool + /// Pass the cursor into devicesListTeamDevices to receive the next sub list of team's devices. + public let cursor: String? + public init(devices: Array, hasMore: Bool, cursor: String? = nil) { + self.devices = devices + self.hasMore = hasMore + nullableValidator(stringValidator())(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ListTeamDevicesResultSerializer().serialize(self)))" + } + } + open class ListTeamDevicesResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ListTeamDevicesResult) -> JSON { + let output = [ + "devices": ArraySerializer(Team.MemberDevicesSerializer()).serialize(value.devices), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + "cursor": NullableSerializer(Serialization._StringSerializer).serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ListTeamDevicesResult { + switch json { + case .dictionary(let dict): + let devices = ArraySerializer(Team.MemberDevicesSerializer()).deserialize(dict["devices"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + let cursor = NullableSerializer(Serialization._StringSerializer).deserialize(dict["cursor"] ?? .null) + return ListTeamDevicesResult(devices: devices, hasMore: hasMore, cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Specify access type a member should have when joined to a group. + open class MemberAccess: CustomStringConvertible { + /// Identity of a user. + public let user: Team.UserSelectorArg + /// Access type. + public let accessType: Team.GroupAccessType + public init(user: Team.UserSelectorArg, accessType: Team.GroupAccessType) { + self.user = user + self.accessType = accessType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberAccessSerializer().serialize(self)))" + } + } + open class MemberAccessSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberAccess) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + "access_type": Team.GroupAccessTypeSerializer().serialize(value.accessType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberAccess { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + let accessType = Team.GroupAccessTypeSerializer().deserialize(dict["access_type"] ?? .null) + return MemberAccess(user: user, accessType: accessType) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberAddArg struct + open class MemberAddArg: CustomStringConvertible { + /// (no description) + public let memberEmail: String + /// Member's first name. + public let memberGivenName: String? + /// Member's last name. + public let memberSurname: String? + /// External ID for member. + public let memberExternalId: String? + /// Persistent ID for member. This field is only available to teams using persistent ID SAML configuration. + public let memberPersistentId: String? + /// Whether to send a welcome email to the member. If send_welcome_email is false, no email invitation will be + /// sent to the user. This may be useful for apps using single sign-on (SSO) flows for onboarding that want to + /// handle announcements themselves. + public let sendWelcomeEmail: Bool + /// (no description) + public let role: Team.AdminTier + /// Whether a user is directory restricted. + public let isDirectoryRestricted: Bool? + public init(memberEmail: String, memberGivenName: String? = nil, memberSurname: String? = nil, memberExternalId: String? = nil, memberPersistentId: String? = nil, sendWelcomeEmail: Bool = true, role: Team.AdminTier = .memberOnly, isDirectoryRestricted: Bool? = nil) { + stringValidator(maxLength: 255, pattern: "^['&A-Za-z0-9._%+-]+@[A-Za-z0-9-][A-Za-z0-9.-]*\\.[A-Za-z]{2,15}$")(memberEmail) + self.memberEmail = memberEmail + nullableValidator(stringValidator(maxLength: 100, pattern: "[^/:?*<>\"|]*"))(memberGivenName) + self.memberGivenName = memberGivenName + nullableValidator(stringValidator(maxLength: 100, pattern: "[^/:?*<>\"|]*"))(memberSurname) + self.memberSurname = memberSurname + nullableValidator(stringValidator(maxLength: 64))(memberExternalId) + self.memberExternalId = memberExternalId + nullableValidator(stringValidator())(memberPersistentId) + self.memberPersistentId = memberPersistentId + self.sendWelcomeEmail = sendWelcomeEmail + self.role = role + self.isDirectoryRestricted = isDirectoryRestricted + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberAddArgSerializer().serialize(self)))" + } + } + open class MemberAddArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberAddArg) -> JSON { + let output = [ + "member_email": Serialization._StringSerializer.serialize(value.memberEmail), + "member_given_name": NullableSerializer(Serialization._StringSerializer).serialize(value.memberGivenName), + "member_surname": NullableSerializer(Serialization._StringSerializer).serialize(value.memberSurname), + "member_external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.memberExternalId), + "member_persistent_id": NullableSerializer(Serialization._StringSerializer).serialize(value.memberPersistentId), + "send_welcome_email": Serialization._BoolSerializer.serialize(value.sendWelcomeEmail), + "role": Team.AdminTierSerializer().serialize(value.role), + "is_directory_restricted": NullableSerializer(Serialization._BoolSerializer).serialize(value.isDirectoryRestricted), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberAddArg { + switch json { + case .dictionary(let dict): + let memberEmail = Serialization._StringSerializer.deserialize(dict["member_email"] ?? .null) + let memberGivenName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["member_given_name"] ?? .null) + let memberSurname = NullableSerializer(Serialization._StringSerializer).deserialize(dict["member_surname"] ?? .null) + let memberExternalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["member_external_id"] ?? .null) + let memberPersistentId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["member_persistent_id"] ?? .null) + let sendWelcomeEmail = Serialization._BoolSerializer.deserialize(dict["send_welcome_email"] ?? .number(1)) + let role = Team.AdminTierSerializer().deserialize(dict["role"] ?? Team.AdminTierSerializer().serialize(.memberOnly)) + let isDirectoryRestricted = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["is_directory_restricted"] ?? .null) + return MemberAddArg(memberEmail: memberEmail, memberGivenName: memberGivenName, memberSurname: memberSurname, memberExternalId: memberExternalId, memberPersistentId: memberPersistentId, sendWelcomeEmail: sendWelcomeEmail, role: role, isDirectoryRestricted: isDirectoryRestricted) + default: + fatalError("Type error deserializing") + } + } + } + + /// Describes the result of attempting to add a single user to the team. 'success' is the only value indicating that + /// a user was indeed added to the team - the other values explain the type of failure that occurred, and include + /// the email of the user for which the operation has failed. + public enum MemberAddResult: CustomStringConvertible { + /// Describes a user that was successfully added to the team. + case success(Team.TeamMemberInfo) + /// Team is already full. The organization has no available licenses. + case teamLicenseLimit(String) + /// Team is already full. The free team member limit has been reached. + case freeTeamMemberLimitReached(String) + /// User is already on this team. The provided email address is associated with a user who is already a member + /// of (including in recoverable state) or invited to the team. + case userAlreadyOnTeam(String) + /// User is already on another team. The provided email address is associated with a user that is already a + /// member or invited to another team. + case userOnAnotherTeam(String) + /// User is already paired. + case userAlreadyPaired(String) + /// User migration has failed. + case userMigrationFailed(String) + /// A user with the given external member ID already exists on the team (including in recoverable state). + case duplicateExternalMemberId(String) + /// A user with the given persistent ID already exists on the team (including in recoverable state). + case duplicateMemberPersistentId(String) + /// Persistent ID is only available to teams with persistent ID SAML configuration. Please contact Dropbox for + /// more information. + case persistentIdDisabled(String) + /// User creation has failed. + case userCreationFailed(String) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberAddResultSerializer().serialize(self)))" + } + } + open class MemberAddResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberAddResult) -> JSON { + switch value { + case .success(let arg): + var d = Serialization.getFields(Team.TeamMemberInfoSerializer().serialize(arg)) + d[".tag"] = .str("success") + return .dictionary(d) + case .teamLicenseLimit(let arg): + var d = ["team_license_limit": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("team_license_limit") + return .dictionary(d) + case .freeTeamMemberLimitReached(let arg): + var d = ["free_team_member_limit_reached": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("free_team_member_limit_reached") + return .dictionary(d) + case .userAlreadyOnTeam(let arg): + var d = ["user_already_on_team": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("user_already_on_team") + return .dictionary(d) + case .userOnAnotherTeam(let arg): + var d = ["user_on_another_team": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("user_on_another_team") + return .dictionary(d) + case .userAlreadyPaired(let arg): + var d = ["user_already_paired": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("user_already_paired") + return .dictionary(d) + case .userMigrationFailed(let arg): + var d = ["user_migration_failed": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("user_migration_failed") + return .dictionary(d) + case .duplicateExternalMemberId(let arg): + var d = ["duplicate_external_member_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("duplicate_external_member_id") + return .dictionary(d) + case .duplicateMemberPersistentId(let arg): + var d = ["duplicate_member_persistent_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("duplicate_member_persistent_id") + return .dictionary(d) + case .persistentIdDisabled(let arg): + var d = ["persistent_id_disabled": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("persistent_id_disabled") + return .dictionary(d) + case .userCreationFailed(let arg): + var d = ["user_creation_failed": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("user_creation_failed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberAddResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = Team.TeamMemberInfoSerializer().deserialize(json) + return MemberAddResult.success(v) + case "team_license_limit": + let v = Serialization._StringSerializer.deserialize(d["team_license_limit"] ?? .null) + return MemberAddResult.teamLicenseLimit(v) + case "free_team_member_limit_reached": + let v = Serialization._StringSerializer.deserialize(d["free_team_member_limit_reached"] ?? .null) + return MemberAddResult.freeTeamMemberLimitReached(v) + case "user_already_on_team": + let v = Serialization._StringSerializer.deserialize(d["user_already_on_team"] ?? .null) + return MemberAddResult.userAlreadyOnTeam(v) + case "user_on_another_team": + let v = Serialization._StringSerializer.deserialize(d["user_on_another_team"] ?? .null) + return MemberAddResult.userOnAnotherTeam(v) + case "user_already_paired": + let v = Serialization._StringSerializer.deserialize(d["user_already_paired"] ?? .null) + return MemberAddResult.userAlreadyPaired(v) + case "user_migration_failed": + let v = Serialization._StringSerializer.deserialize(d["user_migration_failed"] ?? .null) + return MemberAddResult.userMigrationFailed(v) + case "duplicate_external_member_id": + let v = Serialization._StringSerializer.deserialize(d["duplicate_external_member_id"] ?? .null) + return MemberAddResult.duplicateExternalMemberId(v) + case "duplicate_member_persistent_id": + let v = Serialization._StringSerializer.deserialize(d["duplicate_member_persistent_id"] ?? .null) + return MemberAddResult.duplicateMemberPersistentId(v) + case "persistent_id_disabled": + let v = Serialization._StringSerializer.deserialize(d["persistent_id_disabled"] ?? .null) + return MemberAddResult.persistentIdDisabled(v) + case "user_creation_failed": + let v = Serialization._StringSerializer.deserialize(d["user_creation_failed"] ?? .null) + return MemberAddResult.userCreationFailed(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information on devices of a team's member. + open class MemberDevices: CustomStringConvertible { + /// The member unique Id. + public let teamMemberId: String + /// List of web sessions made by this team member. + public let webSessions: Array? + /// List of desktop clients by this team member. + public let desktopClients: Array? + /// List of mobile clients by this team member. + public let mobileClients: Array? + public init(teamMemberId: String, webSessions: Array? = nil, desktopClients: Array? = nil, mobileClients: Array? = nil) { + stringValidator()(teamMemberId) + self.teamMemberId = teamMemberId + self.webSessions = webSessions + self.desktopClients = desktopClients + self.mobileClients = mobileClients + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberDevicesSerializer().serialize(self)))" + } + } + open class MemberDevicesSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberDevices) -> JSON { + let output = [ + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + "web_sessions": NullableSerializer(ArraySerializer(Team.ActiveWebSessionSerializer())).serialize(value.webSessions), + "desktop_clients": NullableSerializer(ArraySerializer(Team.DesktopClientSessionSerializer())).serialize(value.desktopClients), + "mobile_clients": NullableSerializer(ArraySerializer(Team.MobileClientSessionSerializer())).serialize(value.mobileClients), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberDevices { + switch json { + case .dictionary(let dict): + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + let webSessions = NullableSerializer(ArraySerializer(Team.ActiveWebSessionSerializer())).deserialize(dict["web_sessions"] ?? .null) + let desktopClients = NullableSerializer(ArraySerializer(Team.DesktopClientSessionSerializer())).deserialize(dict["desktop_clients"] ?? .null) + let mobileClients = NullableSerializer(ArraySerializer(Team.MobileClientSessionSerializer())).deserialize(dict["mobile_clients"] ?? .null) + return MemberDevices(teamMemberId: teamMemberId, webSessions: webSessions, desktopClients: desktopClients, mobileClients: mobileClients) + default: + fatalError("Type error deserializing") + } + } + } + + /// Information on linked applications of a team member. + open class MemberLinkedApps: CustomStringConvertible { + /// The member unique Id. + public let teamMemberId: String + /// List of third party applications linked by this team member. + public let linkedApiApps: Array + public init(teamMemberId: String, linkedApiApps: Array) { + stringValidator()(teamMemberId) + self.teamMemberId = teamMemberId + self.linkedApiApps = linkedApiApps + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberLinkedAppsSerializer().serialize(self)))" + } + } + open class MemberLinkedAppsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberLinkedApps) -> JSON { + let output = [ + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + "linked_api_apps": ArraySerializer(Team.ApiAppSerializer()).serialize(value.linkedApiApps), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberLinkedApps { + switch json { + case .dictionary(let dict): + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + let linkedApiApps = ArraySerializer(Team.ApiAppSerializer()).deserialize(dict["linked_api_apps"] ?? .null) + return MemberLinkedApps(teamMemberId: teamMemberId, linkedApiApps: linkedApiApps) + default: + fatalError("Type error deserializing") + } + } + } + + /// Basic member profile. + open class MemberProfile: CustomStringConvertible { + /// ID of user as a member of a team. + public let teamMemberId: String + /// External ID that a team can attach to the user. An application using the API may find it easier to use their + /// own IDs instead of Dropbox IDs like account_id or team_member_id. + public let externalId: String? + /// A user's account identifier. + public let accountId: String? + /// Email address of user. + public let email: String + /// Is true if the user's email is verified to be owned by the user. + public let emailVerified: Bool + /// The user's status as a member of a specific team. + public let status: Team.TeamMemberStatus + /// Representations for a person's name. + public let name: Users.Name + /// The user's membership type: full (normal team member) vs limited (does not use a license; no access to the + /// team's shared quota). + public let membershipType: Team.TeamMembershipType + /// The date and time the user joined as a member of a specific team. + public let joinedOn: Date? + /// Persistent ID that a team can attach to the user. The persistent ID is unique ID to be used for SAML + /// authentication. + public let persistentId: String? + /// Whether the user is a directory restricted user. + public let isDirectoryRestricted: Bool? + public init(teamMemberId: String, email: String, emailVerified: Bool, status: Team.TeamMemberStatus, name: Users.Name, membershipType: Team.TeamMembershipType, externalId: String? = nil, accountId: String? = nil, joinedOn: Date? = nil, persistentId: String? = nil, isDirectoryRestricted: Bool? = nil) { + stringValidator()(teamMemberId) + self.teamMemberId = teamMemberId + nullableValidator(stringValidator())(externalId) + self.externalId = externalId + nullableValidator(stringValidator(minLength: 40, maxLength: 40))(accountId) + self.accountId = accountId + stringValidator()(email) + self.email = email + self.emailVerified = emailVerified + self.status = status + self.name = name + self.membershipType = membershipType + self.joinedOn = joinedOn + nullableValidator(stringValidator())(persistentId) + self.persistentId = persistentId + self.isDirectoryRestricted = isDirectoryRestricted + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberProfileSerializer().serialize(self)))" + } + } + open class MemberProfileSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberProfile) -> JSON { + let output = [ + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + "email": Serialization._StringSerializer.serialize(value.email), + "email_verified": Serialization._BoolSerializer.serialize(value.emailVerified), + "status": Team.TeamMemberStatusSerializer().serialize(value.status), + "name": Users.NameSerializer().serialize(value.name), + "membership_type": Team.TeamMembershipTypeSerializer().serialize(value.membershipType), + "external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.externalId), + "account_id": NullableSerializer(Serialization._StringSerializer).serialize(value.accountId), + "joined_on": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.joinedOn), + "persistent_id": NullableSerializer(Serialization._StringSerializer).serialize(value.persistentId), + "is_directory_restricted": NullableSerializer(Serialization._BoolSerializer).serialize(value.isDirectoryRestricted), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberProfile { + switch json { + case .dictionary(let dict): + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + let email = Serialization._StringSerializer.deserialize(dict["email"] ?? .null) + let emailVerified = Serialization._BoolSerializer.deserialize(dict["email_verified"] ?? .null) + let status = Team.TeamMemberStatusSerializer().deserialize(dict["status"] ?? .null) + let name = Users.NameSerializer().deserialize(dict["name"] ?? .null) + let membershipType = Team.TeamMembershipTypeSerializer().deserialize(dict["membership_type"] ?? .null) + let externalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["external_id"] ?? .null) + let accountId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["account_id"] ?? .null) + let joinedOn = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["joined_on"] ?? .null) + let persistentId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["persistent_id"] ?? .null) + let isDirectoryRestricted = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["is_directory_restricted"] ?? .null) + return MemberProfile(teamMemberId: teamMemberId, email: email, emailVerified: emailVerified, status: status, name: name, membershipType: membershipType, externalId: externalId, accountId: accountId, joinedOn: joinedOn, persistentId: persistentId, isDirectoryRestricted: isDirectoryRestricted) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error that can be returned whenever a struct derived from UserSelectorArg is used. + public enum UserSelectorError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserSelectorErrorSerializer().serialize(self)))" + } + } + open class UserSelectorErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserSelectorError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UserSelectorError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return UserSelectorError.userNotFound + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MemberSelectorError union + public enum MemberSelectorError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not a member of the team. + case userNotInTeam + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSelectorErrorSerializer().serialize(self)))" + } + } + open class MemberSelectorErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSelectorError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberSelectorError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MemberSelectorError.userNotFound + case "user_not_in_team": + return MemberSelectorError.userNotInTeam + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersAddArg struct + open class MembersAddArg: CustomStringConvertible { + /// Details of new members to be added to the team. + public let newMembers: Array + /// Whether to force the add to happen asynchronously. + public let forceAsync: Bool + public init(newMembers: Array, forceAsync: Bool = false) { + self.newMembers = newMembers + self.forceAsync = forceAsync + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersAddArgSerializer().serialize(self)))" + } + } + open class MembersAddArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersAddArg) -> JSON { + let output = [ + "new_members": ArraySerializer(Team.MemberAddArgSerializer()).serialize(value.newMembers), + "force_async": Serialization._BoolSerializer.serialize(value.forceAsync), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersAddArg { + switch json { + case .dictionary(let dict): + let newMembers = ArraySerializer(Team.MemberAddArgSerializer()).deserialize(dict["new_members"] ?? .null) + let forceAsync = Serialization._BoolSerializer.deserialize(dict["force_async"] ?? .number(0)) + return MembersAddArg(newMembers: newMembers, forceAsync: forceAsync) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersAddJobStatus union + public enum MembersAddJobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The asynchronous job has finished. For each member that was specified in the parameter MembersAddArg that + /// was provided to membersAdd, a corresponding item is returned in this list. + case complete(Array) + /// The asynchronous job returned an error. The string contains an error message. + case failed(String) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersAddJobStatusSerializer().serialize(self)))" + } + } + open class MembersAddJobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersAddJobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = ["complete": ArraySerializer(Team.MemberAddResultSerializer()).serialize(arg)] + d[".tag"] = .str("complete") + return .dictionary(d) + case .failed(let arg): + var d = ["failed": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("failed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersAddJobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return MembersAddJobStatus.inProgress + case "complete": + let v = ArraySerializer(Team.MemberAddResultSerializer()).deserialize(d["complete"] ?? .null) + return MembersAddJobStatus.complete(v) + case "failed": + let v = Serialization._StringSerializer.deserialize(d["failed"] ?? .null) + return MembersAddJobStatus.failed(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersAddLaunch union + public enum MembersAddLaunch: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// An unspecified error. + case complete(Array) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersAddLaunchSerializer().serialize(self)))" + } + } + open class MembersAddLaunchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersAddLaunch) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete(let arg): + var d = ["complete": ArraySerializer(Team.MemberAddResultSerializer()).serialize(arg)] + d[".tag"] = .str("complete") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersAddLaunch { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return MembersAddLaunch.asyncJobId(v) + case "complete": + let v = ArraySerializer(Team.MemberAddResultSerializer()).deserialize(d["complete"] ?? .null) + return MembersAddLaunch.complete(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Exactly one of team_member_id, email, or external_id must be provided to identify the user account. + open class MembersDeactivateBaseArg: CustomStringConvertible { + /// Identity of user to remove/suspend/have their files moved. + public let user: Team.UserSelectorArg + public init(user: Team.UserSelectorArg) { + self.user = user + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersDeactivateBaseArgSerializer().serialize(self)))" + } + } + open class MembersDeactivateBaseArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersDeactivateBaseArg) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersDeactivateBaseArg { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + return MembersDeactivateBaseArg(user: user) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersDataTransferArg struct + open class MembersDataTransferArg: Team.MembersDeactivateBaseArg { + /// Files from the deleted member account will be transferred to this user. + public let transferDestId: Team.UserSelectorArg + /// Errors during the transfer process will be sent via email to this user. + public let transferAdminId: Team.UserSelectorArg + public init(user: Team.UserSelectorArg, transferDestId: Team.UserSelectorArg, transferAdminId: Team.UserSelectorArg) { + self.transferDestId = transferDestId + self.transferAdminId = transferAdminId + super.init(user: user) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersDataTransferArgSerializer().serialize(self)))" + } + } + open class MembersDataTransferArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersDataTransferArg) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + "transfer_dest_id": Team.UserSelectorArgSerializer().serialize(value.transferDestId), + "transfer_admin_id": Team.UserSelectorArgSerializer().serialize(value.transferAdminId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersDataTransferArg { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + let transferDestId = Team.UserSelectorArgSerializer().deserialize(dict["transfer_dest_id"] ?? .null) + let transferAdminId = Team.UserSelectorArgSerializer().deserialize(dict["transfer_admin_id"] ?? .null) + return MembersDataTransferArg(user: user, transferDestId: transferDestId, transferAdminId: transferAdminId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersDeactivateArg struct + open class MembersDeactivateArg: Team.MembersDeactivateBaseArg { + /// If provided, controls if the user's data will be deleted on their linked devices. + public let wipeData: Bool + public init(user: Team.UserSelectorArg, wipeData: Bool = true) { + self.wipeData = wipeData + super.init(user: user) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersDeactivateArgSerializer().serialize(self)))" + } + } + open class MembersDeactivateArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersDeactivateArg) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + "wipe_data": Serialization._BoolSerializer.serialize(value.wipeData), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersDeactivateArg { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + let wipeData = Serialization._BoolSerializer.deserialize(dict["wipe_data"] ?? .number(1)) + return MembersDeactivateArg(user: user, wipeData: wipeData) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersDeactivateError union + public enum MembersDeactivateError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not a member of the team. + case userNotInTeam + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersDeactivateErrorSerializer().serialize(self)))" + } + } + open class MembersDeactivateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersDeactivateError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersDeactivateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersDeactivateError.userNotFound + case "user_not_in_team": + return MembersDeactivateError.userNotInTeam + case "other": + return MembersDeactivateError.other + default: + return MembersDeactivateError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersGetInfoArgs struct + open class MembersGetInfoArgs: CustomStringConvertible { + /// List of team members. + public let members: Array + public init(members: Array) { + self.members = members + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersGetInfoArgsSerializer().serialize(self)))" + } + } + open class MembersGetInfoArgsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersGetInfoArgs) -> JSON { + let output = [ + "members": ArraySerializer(Team.UserSelectorArgSerializer()).serialize(value.members), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersGetInfoArgs { + switch json { + case .dictionary(let dict): + let members = ArraySerializer(Team.UserSelectorArgSerializer()).deserialize(dict["members"] ?? .null) + return MembersGetInfoArgs(members: members) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersGetInfoError union + public enum MembersGetInfoError: CustomStringConvertible { + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersGetInfoErrorSerializer().serialize(self)))" + } + } + open class MembersGetInfoErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersGetInfoError) -> JSON { + switch value { + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersGetInfoError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "other": + return MembersGetInfoError.other + default: + return MembersGetInfoError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Describes a result obtained for a single user whose id was specified in the parameter of membersGetInfo. + public enum MembersGetInfoItem: CustomStringConvertible { + /// An ID that was provided as a parameter to membersGetInfo, and did not match a corresponding user. This might + /// be a team_member_id, an email, or an external ID, depending on how the method was called. + case idNotFound(String) + /// Info about a team member. + case memberInfo(Team.TeamMemberInfo) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersGetInfoItemSerializer().serialize(self)))" + } + } + open class MembersGetInfoItemSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersGetInfoItem) -> JSON { + switch value { + case .idNotFound(let arg): + var d = ["id_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("id_not_found") + return .dictionary(d) + case .memberInfo(let arg): + var d = Serialization.getFields(Team.TeamMemberInfoSerializer().serialize(arg)) + d[".tag"] = .str("member_info") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersGetInfoItem { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "id_not_found": + let v = Serialization._StringSerializer.deserialize(d["id_not_found"] ?? .null) + return MembersGetInfoItem.idNotFound(v) + case "member_info": + let v = Team.TeamMemberInfoSerializer().deserialize(json) + return MembersGetInfoItem.memberInfo(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersListArg struct + open class MembersListArg: CustomStringConvertible { + /// Number of results to return per call. + public let limit: UInt32 + /// Whether to return removed members. + public let includeRemoved: Bool + public init(limit: UInt32 = 1000, includeRemoved: Bool = false) { + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + self.includeRemoved = includeRemoved + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersListArgSerializer().serialize(self)))" + } + } + open class MembersListArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersListArg) -> JSON { + let output = [ + "limit": Serialization._UInt32Serializer.serialize(value.limit), + "include_removed": Serialization._BoolSerializer.serialize(value.includeRemoved), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersListArg { + switch json { + case .dictionary(let dict): + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + let includeRemoved = Serialization._BoolSerializer.deserialize(dict["include_removed"] ?? .number(0)) + return MembersListArg(limit: limit, includeRemoved: includeRemoved) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersListContinueArg struct + open class MembersListContinueArg: CustomStringConvertible { + /// Indicates from what point to get the next set of members. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersListContinueArgSerializer().serialize(self)))" + } + } + open class MembersListContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersListContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersListContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return MembersListContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersListContinueError union + public enum MembersListContinueError: CustomStringConvertible { + /// The cursor is invalid. + case invalidCursor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersListContinueErrorSerializer().serialize(self)))" + } + } + open class MembersListContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersListContinueError) -> JSON { + switch value { + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersListContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_cursor": + return MembersListContinueError.invalidCursor + case "other": + return MembersListContinueError.other + default: + return MembersListContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersListError union + public enum MembersListError: CustomStringConvertible { + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersListErrorSerializer().serialize(self)))" + } + } + open class MembersListErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersListError) -> JSON { + switch value { + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersListError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "other": + return MembersListError.other + default: + return MembersListError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersListResult struct + open class MembersListResult: CustomStringConvertible { + /// List of team members. + public let members: Array + /// Pass the cursor into membersListContinue to obtain the additional members. + public let cursor: String + /// Is true if there are additional team members that have not been returned yet. An additional call to + /// membersListContinue can retrieve them. + public let hasMore: Bool + public init(members: Array, cursor: String, hasMore: Bool) { + self.members = members + stringValidator()(cursor) + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersListResultSerializer().serialize(self)))" + } + } + open class MembersListResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersListResult) -> JSON { + let output = [ + "members": ArraySerializer(Team.TeamMemberInfoSerializer()).serialize(value.members), + "cursor": Serialization._StringSerializer.serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersListResult { + switch json { + case .dictionary(let dict): + let members = ArraySerializer(Team.TeamMemberInfoSerializer()).deserialize(dict["members"] ?? .null) + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return MembersListResult(members: members, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// Exactly one of team_member_id, email, or external_id must be provided to identify the user account. + open class MembersRecoverArg: CustomStringConvertible { + /// Identity of user to recover. + public let user: Team.UserSelectorArg + public init(user: Team.UserSelectorArg) { + self.user = user + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersRecoverArgSerializer().serialize(self)))" + } + } + open class MembersRecoverArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersRecoverArg) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersRecoverArg { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + return MembersRecoverArg(user: user) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersRecoverError union + public enum MembersRecoverError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not recoverable. + case userUnrecoverable + /// The user is not a member of the team. + case userNotInTeam + /// Team is full. The organization has no available licenses. + case teamLicenseLimit + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersRecoverErrorSerializer().serialize(self)))" + } + } + open class MembersRecoverErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersRecoverError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userUnrecoverable: + var d = [String: JSON]() + d[".tag"] = .str("user_unrecoverable") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .teamLicenseLimit: + var d = [String: JSON]() + d[".tag"] = .str("team_license_limit") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersRecoverError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersRecoverError.userNotFound + case "user_unrecoverable": + return MembersRecoverError.userUnrecoverable + case "user_not_in_team": + return MembersRecoverError.userNotInTeam + case "team_license_limit": + return MembersRecoverError.teamLicenseLimit + case "other": + return MembersRecoverError.other + default: + return MembersRecoverError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersRemoveArg struct + open class MembersRemoveArg: Team.MembersDeactivateArg { + /// If provided, files from the deleted member account will be transferred to this user. + public let transferDestId: Team.UserSelectorArg? + /// If provided, errors during the transfer process will be sent via email to this user. If the transfer_dest_id + /// argument was provided, then this argument must be provided as well. + public let transferAdminId: Team.UserSelectorArg? + /// Downgrade the member to a Basic account. The user will retain the email address associated with their + /// Dropbox account and data in their account that is not restricted to team members. In order to keep the + /// account the argument wipe_data should be set to False. + public let keepAccount: Bool + public init(user: Team.UserSelectorArg, wipeData: Bool = true, transferDestId: Team.UserSelectorArg? = nil, transferAdminId: Team.UserSelectorArg? = nil, keepAccount: Bool = false) { + self.transferDestId = transferDestId + self.transferAdminId = transferAdminId + self.keepAccount = keepAccount + super.init(user: user, wipeData: wipeData) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersRemoveArgSerializer().serialize(self)))" + } + } + open class MembersRemoveArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersRemoveArg) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + "wipe_data": Serialization._BoolSerializer.serialize(value.wipeData), + "transfer_dest_id": NullableSerializer(Team.UserSelectorArgSerializer()).serialize(value.transferDestId), + "transfer_admin_id": NullableSerializer(Team.UserSelectorArgSerializer()).serialize(value.transferAdminId), + "keep_account": Serialization._BoolSerializer.serialize(value.keepAccount), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersRemoveArg { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + let wipeData = Serialization._BoolSerializer.deserialize(dict["wipe_data"] ?? .number(1)) + let transferDestId = NullableSerializer(Team.UserSelectorArgSerializer()).deserialize(dict["transfer_dest_id"] ?? .null) + let transferAdminId = NullableSerializer(Team.UserSelectorArgSerializer()).deserialize(dict["transfer_admin_id"] ?? .null) + let keepAccount = Serialization._BoolSerializer.deserialize(dict["keep_account"] ?? .number(0)) + return MembersRemoveArg(user: user, wipeData: wipeData, transferDestId: transferDestId, transferAdminId: transferAdminId, keepAccount: keepAccount) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersTransferFilesError union + public enum MembersTransferFilesError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not a member of the team. + case userNotInTeam + /// An unspecified error. + case other + /// Expected removed user and transfer_dest user to be different. + case removedAndTransferDestShouldDiffer + /// Expected removed user and transfer_admin user to be different. + case removedAndTransferAdminShouldDiffer + /// No matching user found for the argument transfer_dest_id. + case transferDestUserNotFound + /// The provided transfer_dest_id does not exist on this team. + case transferDestUserNotInTeam + /// The provided transfer_admin_id does not exist on this team. + case transferAdminUserNotInTeam + /// No matching user found for the argument transfer_admin_id. + case transferAdminUserNotFound + /// The transfer_admin_id argument must be provided when file transfer is requested. + case unspecifiedTransferAdminId + /// Specified transfer_admin user is not a team admin. + case transferAdminIsNotAdmin + /// The recipient user's email is not verified. + case recipientNotVerified + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersTransferFilesErrorSerializer().serialize(self)))" + } + } + open class MembersTransferFilesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersTransferFilesError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .removedAndTransferDestShouldDiffer: + var d = [String: JSON]() + d[".tag"] = .str("removed_and_transfer_dest_should_differ") + return .dictionary(d) + case .removedAndTransferAdminShouldDiffer: + var d = [String: JSON]() + d[".tag"] = .str("removed_and_transfer_admin_should_differ") + return .dictionary(d) + case .transferDestUserNotFound: + var d = [String: JSON]() + d[".tag"] = .str("transfer_dest_user_not_found") + return .dictionary(d) + case .transferDestUserNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("transfer_dest_user_not_in_team") + return .dictionary(d) + case .transferAdminUserNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("transfer_admin_user_not_in_team") + return .dictionary(d) + case .transferAdminUserNotFound: + var d = [String: JSON]() + d[".tag"] = .str("transfer_admin_user_not_found") + return .dictionary(d) + case .unspecifiedTransferAdminId: + var d = [String: JSON]() + d[".tag"] = .str("unspecified_transfer_admin_id") + return .dictionary(d) + case .transferAdminIsNotAdmin: + var d = [String: JSON]() + d[".tag"] = .str("transfer_admin_is_not_admin") + return .dictionary(d) + case .recipientNotVerified: + var d = [String: JSON]() + d[".tag"] = .str("recipient_not_verified") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersTransferFilesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersTransferFilesError.userNotFound + case "user_not_in_team": + return MembersTransferFilesError.userNotInTeam + case "other": + return MembersTransferFilesError.other + case "removed_and_transfer_dest_should_differ": + return MembersTransferFilesError.removedAndTransferDestShouldDiffer + case "removed_and_transfer_admin_should_differ": + return MembersTransferFilesError.removedAndTransferAdminShouldDiffer + case "transfer_dest_user_not_found": + return MembersTransferFilesError.transferDestUserNotFound + case "transfer_dest_user_not_in_team": + return MembersTransferFilesError.transferDestUserNotInTeam + case "transfer_admin_user_not_in_team": + return MembersTransferFilesError.transferAdminUserNotInTeam + case "transfer_admin_user_not_found": + return MembersTransferFilesError.transferAdminUserNotFound + case "unspecified_transfer_admin_id": + return MembersTransferFilesError.unspecifiedTransferAdminId + case "transfer_admin_is_not_admin": + return MembersTransferFilesError.transferAdminIsNotAdmin + case "recipient_not_verified": + return MembersTransferFilesError.recipientNotVerified + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersRemoveError union + public enum MembersRemoveError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not a member of the team. + case userNotInTeam + /// An unspecified error. + case other + /// Expected removed user and transfer_dest user to be different. + case removedAndTransferDestShouldDiffer + /// Expected removed user and transfer_admin user to be different. + case removedAndTransferAdminShouldDiffer + /// No matching user found for the argument transfer_dest_id. + case transferDestUserNotFound + /// The provided transfer_dest_id does not exist on this team. + case transferDestUserNotInTeam + /// The provided transfer_admin_id does not exist on this team. + case transferAdminUserNotInTeam + /// No matching user found for the argument transfer_admin_id. + case transferAdminUserNotFound + /// The transfer_admin_id argument must be provided when file transfer is requested. + case unspecifiedTransferAdminId + /// Specified transfer_admin user is not a team admin. + case transferAdminIsNotAdmin + /// The recipient user's email is not verified. + case recipientNotVerified + /// The user is the last admin of the team, so it cannot be removed from it. + case removeLastAdmin + /// Cannot keep account and transfer the data to another user at the same time. + case cannotKeepAccountAndTransfer + /// Cannot keep account and delete the data at the same time. To keep the account the argument wipe_data should + /// be set to False. + case cannotKeepAccountAndDeleteData + /// The email address of the user is too long to be disabled. + case emailAddressTooLongToBeDisabled + /// Cannot keep account of an invited user. + case cannotKeepInvitedUserAccount + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersRemoveErrorSerializer().serialize(self)))" + } + } + open class MembersRemoveErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersRemoveError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .removedAndTransferDestShouldDiffer: + var d = [String: JSON]() + d[".tag"] = .str("removed_and_transfer_dest_should_differ") + return .dictionary(d) + case .removedAndTransferAdminShouldDiffer: + var d = [String: JSON]() + d[".tag"] = .str("removed_and_transfer_admin_should_differ") + return .dictionary(d) + case .transferDestUserNotFound: + var d = [String: JSON]() + d[".tag"] = .str("transfer_dest_user_not_found") + return .dictionary(d) + case .transferDestUserNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("transfer_dest_user_not_in_team") + return .dictionary(d) + case .transferAdminUserNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("transfer_admin_user_not_in_team") + return .dictionary(d) + case .transferAdminUserNotFound: + var d = [String: JSON]() + d[".tag"] = .str("transfer_admin_user_not_found") + return .dictionary(d) + case .unspecifiedTransferAdminId: + var d = [String: JSON]() + d[".tag"] = .str("unspecified_transfer_admin_id") + return .dictionary(d) + case .transferAdminIsNotAdmin: + var d = [String: JSON]() + d[".tag"] = .str("transfer_admin_is_not_admin") + return .dictionary(d) + case .recipientNotVerified: + var d = [String: JSON]() + d[".tag"] = .str("recipient_not_verified") + return .dictionary(d) + case .removeLastAdmin: + var d = [String: JSON]() + d[".tag"] = .str("remove_last_admin") + return .dictionary(d) + case .cannotKeepAccountAndTransfer: + var d = [String: JSON]() + d[".tag"] = .str("cannot_keep_account_and_transfer") + return .dictionary(d) + case .cannotKeepAccountAndDeleteData: + var d = [String: JSON]() + d[".tag"] = .str("cannot_keep_account_and_delete_data") + return .dictionary(d) + case .emailAddressTooLongToBeDisabled: + var d = [String: JSON]() + d[".tag"] = .str("email_address_too_long_to_be_disabled") + return .dictionary(d) + case .cannotKeepInvitedUserAccount: + var d = [String: JSON]() + d[".tag"] = .str("cannot_keep_invited_user_account") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersRemoveError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersRemoveError.userNotFound + case "user_not_in_team": + return MembersRemoveError.userNotInTeam + case "other": + return MembersRemoveError.other + case "removed_and_transfer_dest_should_differ": + return MembersRemoveError.removedAndTransferDestShouldDiffer + case "removed_and_transfer_admin_should_differ": + return MembersRemoveError.removedAndTransferAdminShouldDiffer + case "transfer_dest_user_not_found": + return MembersRemoveError.transferDestUserNotFound + case "transfer_dest_user_not_in_team": + return MembersRemoveError.transferDestUserNotInTeam + case "transfer_admin_user_not_in_team": + return MembersRemoveError.transferAdminUserNotInTeam + case "transfer_admin_user_not_found": + return MembersRemoveError.transferAdminUserNotFound + case "unspecified_transfer_admin_id": + return MembersRemoveError.unspecifiedTransferAdminId + case "transfer_admin_is_not_admin": + return MembersRemoveError.transferAdminIsNotAdmin + case "recipient_not_verified": + return MembersRemoveError.recipientNotVerified + case "remove_last_admin": + return MembersRemoveError.removeLastAdmin + case "cannot_keep_account_and_transfer": + return MembersRemoveError.cannotKeepAccountAndTransfer + case "cannot_keep_account_and_delete_data": + return MembersRemoveError.cannotKeepAccountAndDeleteData + case "email_address_too_long_to_be_disabled": + return MembersRemoveError.emailAddressTooLongToBeDisabled + case "cannot_keep_invited_user_account": + return MembersRemoveError.cannotKeepInvitedUserAccount + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersSendWelcomeError union + public enum MembersSendWelcomeError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not a member of the team. + case userNotInTeam + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersSendWelcomeErrorSerializer().serialize(self)))" + } + } + open class MembersSendWelcomeErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersSendWelcomeError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersSendWelcomeError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersSendWelcomeError.userNotFound + case "user_not_in_team": + return MembersSendWelcomeError.userNotInTeam + case "other": + return MembersSendWelcomeError.other + default: + return MembersSendWelcomeError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Exactly one of team_member_id, email, or external_id must be provided to identify the user account. + open class MembersSetPermissionsArg: CustomStringConvertible { + /// Identity of user whose role will be set. + public let user: Team.UserSelectorArg + /// The new role of the member. + public let newRole: Team.AdminTier + public init(user: Team.UserSelectorArg, newRole: Team.AdminTier) { + self.user = user + self.newRole = newRole + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersSetPermissionsArgSerializer().serialize(self)))" + } + } + open class MembersSetPermissionsArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersSetPermissionsArg) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + "new_role": Team.AdminTierSerializer().serialize(value.newRole), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersSetPermissionsArg { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + let newRole = Team.AdminTierSerializer().deserialize(dict["new_role"] ?? .null) + return MembersSetPermissionsArg(user: user, newRole: newRole) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersSetPermissionsError union + public enum MembersSetPermissionsError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// Cannot remove the admin setting of the last admin. + case lastAdmin + /// The user is not a member of the team. + case userNotInTeam + /// Cannot remove/grant permissions. + case cannotSetPermissions + /// Team is full. The organization has no available licenses. + case teamLicenseLimit + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersSetPermissionsErrorSerializer().serialize(self)))" + } + } + open class MembersSetPermissionsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersSetPermissionsError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .lastAdmin: + var d = [String: JSON]() + d[".tag"] = .str("last_admin") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .cannotSetPermissions: + var d = [String: JSON]() + d[".tag"] = .str("cannot_set_permissions") + return .dictionary(d) + case .teamLicenseLimit: + var d = [String: JSON]() + d[".tag"] = .str("team_license_limit") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersSetPermissionsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersSetPermissionsError.userNotFound + case "last_admin": + return MembersSetPermissionsError.lastAdmin + case "user_not_in_team": + return MembersSetPermissionsError.userNotInTeam + case "cannot_set_permissions": + return MembersSetPermissionsError.cannotSetPermissions + case "team_license_limit": + return MembersSetPermissionsError.teamLicenseLimit + case "other": + return MembersSetPermissionsError.other + default: + return MembersSetPermissionsError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersSetPermissionsResult struct + open class MembersSetPermissionsResult: CustomStringConvertible { + /// The member ID of the user to which the change was applied. + public let teamMemberId: String + /// The role after the change. + public let role: Team.AdminTier + public init(teamMemberId: String, role: Team.AdminTier) { + stringValidator()(teamMemberId) + self.teamMemberId = teamMemberId + self.role = role + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersSetPermissionsResultSerializer().serialize(self)))" + } + } + open class MembersSetPermissionsResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersSetPermissionsResult) -> JSON { + let output = [ + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + "role": Team.AdminTierSerializer().serialize(value.role), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersSetPermissionsResult { + switch json { + case .dictionary(let dict): + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + let role = Team.AdminTierSerializer().deserialize(dict["role"] ?? .null) + return MembersSetPermissionsResult(teamMemberId: teamMemberId, role: role) + default: + fatalError("Type error deserializing") + } + } + } + + /// Exactly one of team_member_id, email, or external_id must be provided to identify the user account. At least one + /// of new_email, new_external_id, new_given_name, and/or new_surname must be provided. + open class MembersSetProfileArg: CustomStringConvertible { + /// Identity of user whose profile will be set. + public let user: Team.UserSelectorArg + /// New email for member. + public let newEmail: String? + /// New external ID for member. + public let newExternalId: String? + /// New given name for member. + public let newGivenName: String? + /// New surname for member. + public let newSurname: String? + /// New persistent ID. This field only available to teams using persistent ID SAML configuration. + public let newPersistentId: String? + /// New value for whether the user is a directory restricted user. + public let newIsDirectoryRestricted: Bool? + public init(user: Team.UserSelectorArg, newEmail: String? = nil, newExternalId: String? = nil, newGivenName: String? = nil, newSurname: String? = nil, newPersistentId: String? = nil, newIsDirectoryRestricted: Bool? = nil) { + self.user = user + nullableValidator(stringValidator(maxLength: 255, pattern: "^['&A-Za-z0-9._%+-]+@[A-Za-z0-9-][A-Za-z0-9.-]*\\.[A-Za-z]{2,15}$"))(newEmail) + self.newEmail = newEmail + nullableValidator(stringValidator(maxLength: 64))(newExternalId) + self.newExternalId = newExternalId + nullableValidator(stringValidator(maxLength: 100, pattern: "[^/:?*<>\"|]*"))(newGivenName) + self.newGivenName = newGivenName + nullableValidator(stringValidator(maxLength: 100, pattern: "[^/:?*<>\"|]*"))(newSurname) + self.newSurname = newSurname + nullableValidator(stringValidator())(newPersistentId) + self.newPersistentId = newPersistentId + self.newIsDirectoryRestricted = newIsDirectoryRestricted + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersSetProfileArgSerializer().serialize(self)))" + } + } + open class MembersSetProfileArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersSetProfileArg) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + "new_email": NullableSerializer(Serialization._StringSerializer).serialize(value.newEmail), + "new_external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.newExternalId), + "new_given_name": NullableSerializer(Serialization._StringSerializer).serialize(value.newGivenName), + "new_surname": NullableSerializer(Serialization._StringSerializer).serialize(value.newSurname), + "new_persistent_id": NullableSerializer(Serialization._StringSerializer).serialize(value.newPersistentId), + "new_is_directory_restricted": NullableSerializer(Serialization._BoolSerializer).serialize(value.newIsDirectoryRestricted), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersSetProfileArg { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + let newEmail = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_email"] ?? .null) + let newExternalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_external_id"] ?? .null) + let newGivenName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_given_name"] ?? .null) + let newSurname = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_surname"] ?? .null) + let newPersistentId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_persistent_id"] ?? .null) + let newIsDirectoryRestricted = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["new_is_directory_restricted"] ?? .null) + return MembersSetProfileArg(user: user, newEmail: newEmail, newExternalId: newExternalId, newGivenName: newGivenName, newSurname: newSurname, newPersistentId: newPersistentId, newIsDirectoryRestricted: newIsDirectoryRestricted) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersSetProfileError union + public enum MembersSetProfileError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not a member of the team. + case userNotInTeam + /// It is unsafe to use both external_id and new_external_id. + case externalIdAndNewExternalIdUnsafe + /// None of new_email, new_given_name, new_surname, or new_external_id are specified. + case noNewDataSpecified + /// Email is already reserved for another user. + case emailReservedForOtherUser + /// The external ID is already in use by another team member. + case externalIdUsedByOtherUser + /// Modifying deleted users is not allowed. + case setProfileDisallowed + /// Parameter new_email cannot be empty. + case paramCannotBeEmpty + /// Persistent ID is only available to teams with persistent ID SAML configuration. Please contact Dropbox for + /// more information. + case persistentIdDisabled + /// The persistent ID is already in use by another team member. + case persistentIdUsedByOtherUser + /// Directory Restrictions option is not available. + case directoryRestrictedOff + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersSetProfileErrorSerializer().serialize(self)))" + } + } + open class MembersSetProfileErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersSetProfileError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .externalIdAndNewExternalIdUnsafe: + var d = [String: JSON]() + d[".tag"] = .str("external_id_and_new_external_id_unsafe") + return .dictionary(d) + case .noNewDataSpecified: + var d = [String: JSON]() + d[".tag"] = .str("no_new_data_specified") + return .dictionary(d) + case .emailReservedForOtherUser: + var d = [String: JSON]() + d[".tag"] = .str("email_reserved_for_other_user") + return .dictionary(d) + case .externalIdUsedByOtherUser: + var d = [String: JSON]() + d[".tag"] = .str("external_id_used_by_other_user") + return .dictionary(d) + case .setProfileDisallowed: + var d = [String: JSON]() + d[".tag"] = .str("set_profile_disallowed") + return .dictionary(d) + case .paramCannotBeEmpty: + var d = [String: JSON]() + d[".tag"] = .str("param_cannot_be_empty") + return .dictionary(d) + case .persistentIdDisabled: + var d = [String: JSON]() + d[".tag"] = .str("persistent_id_disabled") + return .dictionary(d) + case .persistentIdUsedByOtherUser: + var d = [String: JSON]() + d[".tag"] = .str("persistent_id_used_by_other_user") + return .dictionary(d) + case .directoryRestrictedOff: + var d = [String: JSON]() + d[".tag"] = .str("directory_restricted_off") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersSetProfileError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersSetProfileError.userNotFound + case "user_not_in_team": + return MembersSetProfileError.userNotInTeam + case "external_id_and_new_external_id_unsafe": + return MembersSetProfileError.externalIdAndNewExternalIdUnsafe + case "no_new_data_specified": + return MembersSetProfileError.noNewDataSpecified + case "email_reserved_for_other_user": + return MembersSetProfileError.emailReservedForOtherUser + case "external_id_used_by_other_user": + return MembersSetProfileError.externalIdUsedByOtherUser + case "set_profile_disallowed": + return MembersSetProfileError.setProfileDisallowed + case "param_cannot_be_empty": + return MembersSetProfileError.paramCannotBeEmpty + case "persistent_id_disabled": + return MembersSetProfileError.persistentIdDisabled + case "persistent_id_used_by_other_user": + return MembersSetProfileError.persistentIdUsedByOtherUser + case "directory_restricted_off": + return MembersSetProfileError.directoryRestrictedOff + case "other": + return MembersSetProfileError.other + default: + return MembersSetProfileError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersSuspendError union + public enum MembersSuspendError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not a member of the team. + case userNotInTeam + /// An unspecified error. + case other + /// The user is not active, so it cannot be suspended. + case suspendInactiveUser + /// The user is the last admin of the team, so it cannot be suspended. + case suspendLastAdmin + /// Team is full. The organization has no available licenses. + case teamLicenseLimit + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersSuspendErrorSerializer().serialize(self)))" + } + } + open class MembersSuspendErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersSuspendError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .suspendInactiveUser: + var d = [String: JSON]() + d[".tag"] = .str("suspend_inactive_user") + return .dictionary(d) + case .suspendLastAdmin: + var d = [String: JSON]() + d[".tag"] = .str("suspend_last_admin") + return .dictionary(d) + case .teamLicenseLimit: + var d = [String: JSON]() + d[".tag"] = .str("team_license_limit") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersSuspendError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersSuspendError.userNotFound + case "user_not_in_team": + return MembersSuspendError.userNotInTeam + case "other": + return MembersSuspendError.other + case "suspend_inactive_user": + return MembersSuspendError.suspendInactiveUser + case "suspend_last_admin": + return MembersSuspendError.suspendLastAdmin + case "team_license_limit": + return MembersSuspendError.teamLicenseLimit + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MembersTransferFormerMembersFilesError union + public enum MembersTransferFormerMembersFilesError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not a member of the team. + case userNotInTeam + /// An unspecified error. + case other + /// Expected removed user and transfer_dest user to be different. + case removedAndTransferDestShouldDiffer + /// Expected removed user and transfer_admin user to be different. + case removedAndTransferAdminShouldDiffer + /// No matching user found for the argument transfer_dest_id. + case transferDestUserNotFound + /// The provided transfer_dest_id does not exist on this team. + case transferDestUserNotInTeam + /// The provided transfer_admin_id does not exist on this team. + case transferAdminUserNotInTeam + /// No matching user found for the argument transfer_admin_id. + case transferAdminUserNotFound + /// The transfer_admin_id argument must be provided when file transfer is requested. + case unspecifiedTransferAdminId + /// Specified transfer_admin user is not a team admin. + case transferAdminIsNotAdmin + /// The recipient user's email is not verified. + case recipientNotVerified + /// The user's data is being transferred. Please wait some time before retrying. + case userDataIsBeingTransferred + /// No matching removed user found for the argument user. + case userNotRemoved + /// User files aren't transferable anymore. + case userDataCannotBeTransferred + /// User's data has already been transferred to another user. + case userDataAlreadyTransferred + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersTransferFormerMembersFilesErrorSerializer().serialize(self)))" + } + } + open class MembersTransferFormerMembersFilesErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersTransferFormerMembersFilesError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .removedAndTransferDestShouldDiffer: + var d = [String: JSON]() + d[".tag"] = .str("removed_and_transfer_dest_should_differ") + return .dictionary(d) + case .removedAndTransferAdminShouldDiffer: + var d = [String: JSON]() + d[".tag"] = .str("removed_and_transfer_admin_should_differ") + return .dictionary(d) + case .transferDestUserNotFound: + var d = [String: JSON]() + d[".tag"] = .str("transfer_dest_user_not_found") + return .dictionary(d) + case .transferDestUserNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("transfer_dest_user_not_in_team") + return .dictionary(d) + case .transferAdminUserNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("transfer_admin_user_not_in_team") + return .dictionary(d) + case .transferAdminUserNotFound: + var d = [String: JSON]() + d[".tag"] = .str("transfer_admin_user_not_found") + return .dictionary(d) + case .unspecifiedTransferAdminId: + var d = [String: JSON]() + d[".tag"] = .str("unspecified_transfer_admin_id") + return .dictionary(d) + case .transferAdminIsNotAdmin: + var d = [String: JSON]() + d[".tag"] = .str("transfer_admin_is_not_admin") + return .dictionary(d) + case .recipientNotVerified: + var d = [String: JSON]() + d[".tag"] = .str("recipient_not_verified") + return .dictionary(d) + case .userDataIsBeingTransferred: + var d = [String: JSON]() + d[".tag"] = .str("user_data_is_being_transferred") + return .dictionary(d) + case .userNotRemoved: + var d = [String: JSON]() + d[".tag"] = .str("user_not_removed") + return .dictionary(d) + case .userDataCannotBeTransferred: + var d = [String: JSON]() + d[".tag"] = .str("user_data_cannot_be_transferred") + return .dictionary(d) + case .userDataAlreadyTransferred: + var d = [String: JSON]() + d[".tag"] = .str("user_data_already_transferred") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersTransferFormerMembersFilesError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersTransferFormerMembersFilesError.userNotFound + case "user_not_in_team": + return MembersTransferFormerMembersFilesError.userNotInTeam + case "other": + return MembersTransferFormerMembersFilesError.other + case "removed_and_transfer_dest_should_differ": + return MembersTransferFormerMembersFilesError.removedAndTransferDestShouldDiffer + case "removed_and_transfer_admin_should_differ": + return MembersTransferFormerMembersFilesError.removedAndTransferAdminShouldDiffer + case "transfer_dest_user_not_found": + return MembersTransferFormerMembersFilesError.transferDestUserNotFound + case "transfer_dest_user_not_in_team": + return MembersTransferFormerMembersFilesError.transferDestUserNotInTeam + case "transfer_admin_user_not_in_team": + return MembersTransferFormerMembersFilesError.transferAdminUserNotInTeam + case "transfer_admin_user_not_found": + return MembersTransferFormerMembersFilesError.transferAdminUserNotFound + case "unspecified_transfer_admin_id": + return MembersTransferFormerMembersFilesError.unspecifiedTransferAdminId + case "transfer_admin_is_not_admin": + return MembersTransferFormerMembersFilesError.transferAdminIsNotAdmin + case "recipient_not_verified": + return MembersTransferFormerMembersFilesError.recipientNotVerified + case "user_data_is_being_transferred": + return MembersTransferFormerMembersFilesError.userDataIsBeingTransferred + case "user_not_removed": + return MembersTransferFormerMembersFilesError.userNotRemoved + case "user_data_cannot_be_transferred": + return MembersTransferFormerMembersFilesError.userDataCannotBeTransferred + case "user_data_already_transferred": + return MembersTransferFormerMembersFilesError.userDataAlreadyTransferred + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Exactly one of team_member_id, email, or external_id must be provided to identify the user account. + open class MembersUnsuspendArg: CustomStringConvertible { + /// Identity of user to unsuspend. + public let user: Team.UserSelectorArg + public init(user: Team.UserSelectorArg) { + self.user = user + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersUnsuspendArgSerializer().serialize(self)))" + } + } + open class MembersUnsuspendArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersUnsuspendArg) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MembersUnsuspendArg { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + return MembersUnsuspendArg(user: user) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MembersUnsuspendError union + public enum MembersUnsuspendError: CustomStringConvertible { + /// No matching user found. The provided team_member_id, email, or external_id does not exist on this team. + case userNotFound + /// The user is not a member of the team. + case userNotInTeam + /// An unspecified error. + case other + /// The user is unsuspended, so it cannot be unsuspended again. + case unsuspendNonSuspendedMember + /// Team is full. The organization has no available licenses. + case teamLicenseLimit + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MembersUnsuspendErrorSerializer().serialize(self)))" + } + } + open class MembersUnsuspendErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MembersUnsuspendError) -> JSON { + switch value { + case .userNotFound: + var d = [String: JSON]() + d[".tag"] = .str("user_not_found") + return .dictionary(d) + case .userNotInTeam: + var d = [String: JSON]() + d[".tag"] = .str("user_not_in_team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .unsuspendNonSuspendedMember: + var d = [String: JSON]() + d[".tag"] = .str("unsuspend_non_suspended_member") + return .dictionary(d) + case .teamLicenseLimit: + var d = [String: JSON]() + d[".tag"] = .str("team_license_limit") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MembersUnsuspendError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_not_found": + return MembersUnsuspendError.userNotFound + case "user_not_in_team": + return MembersUnsuspendError.userNotInTeam + case "other": + return MembersUnsuspendError.other + case "unsuspend_non_suspended_member": + return MembersUnsuspendError.unsuspendNonSuspendedMember + case "team_license_limit": + return MembersUnsuspendError.teamLicenseLimit + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The MobileClientPlatform union + public enum MobileClientPlatform: CustomStringConvertible { + /// Official Dropbox iPhone client. + case iphone + /// Official Dropbox iPad client. + case ipad + /// Official Dropbox Android client. + case android + /// Official Dropbox Windows phone client. + case windowsPhone + /// Official Dropbox Blackberry client. + case blackberry + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MobileClientPlatformSerializer().serialize(self)))" + } + } + open class MobileClientPlatformSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MobileClientPlatform) -> JSON { + switch value { + case .iphone: + var d = [String: JSON]() + d[".tag"] = .str("iphone") + return .dictionary(d) + case .ipad: + var d = [String: JSON]() + d[".tag"] = .str("ipad") + return .dictionary(d) + case .android: + var d = [String: JSON]() + d[".tag"] = .str("android") + return .dictionary(d) + case .windowsPhone: + var d = [String: JSON]() + d[".tag"] = .str("windows_phone") + return .dictionary(d) + case .blackberry: + var d = [String: JSON]() + d[".tag"] = .str("blackberry") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MobileClientPlatform { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "iphone": + return MobileClientPlatform.iphone + case "ipad": + return MobileClientPlatform.ipad + case "android": + return MobileClientPlatform.android + case "windows_phone": + return MobileClientPlatform.windowsPhone + case "blackberry": + return MobileClientPlatform.blackberry + case "other": + return MobileClientPlatform.other + default: + return MobileClientPlatform.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information about linked Dropbox mobile client sessions. + open class MobileClientSession: Team.DeviceSession { + /// The device name. + public let deviceName: String + /// The mobile application type. + public let clientType: Team.MobileClientPlatform + /// The dropbox client version. + public let clientVersion: String? + /// The hosting OS version. + public let osVersion: String? + /// last carrier used by the device. + public let lastCarrier: String? + public init(sessionId: String, deviceName: String, clientType: Team.MobileClientPlatform, ipAddress: String? = nil, country: String? = nil, created: Date? = nil, updated: Date? = nil, clientVersion: String? = nil, osVersion: String? = nil, lastCarrier: String? = nil) { + stringValidator()(deviceName) + self.deviceName = deviceName + self.clientType = clientType + nullableValidator(stringValidator())(clientVersion) + self.clientVersion = clientVersion + nullableValidator(stringValidator())(osVersion) + self.osVersion = osVersion + nullableValidator(stringValidator())(lastCarrier) + self.lastCarrier = lastCarrier + super.init(sessionId: sessionId, ipAddress: ipAddress, country: country, created: created, updated: updated) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MobileClientSessionSerializer().serialize(self)))" + } + } + open class MobileClientSessionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MobileClientSession) -> JSON { + let output = [ + "session_id": Serialization._StringSerializer.serialize(value.sessionId), + "device_name": Serialization._StringSerializer.serialize(value.deviceName), + "client_type": Team.MobileClientPlatformSerializer().serialize(value.clientType), + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + "country": NullableSerializer(Serialization._StringSerializer).serialize(value.country), + "created": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.created), + "updated": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.updated), + "client_version": NullableSerializer(Serialization._StringSerializer).serialize(value.clientVersion), + "os_version": NullableSerializer(Serialization._StringSerializer).serialize(value.osVersion), + "last_carrier": NullableSerializer(Serialization._StringSerializer).serialize(value.lastCarrier), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MobileClientSession { + switch json { + case .dictionary(let dict): + let sessionId = Serialization._StringSerializer.deserialize(dict["session_id"] ?? .null) + let deviceName = Serialization._StringSerializer.deserialize(dict["device_name"] ?? .null) + let clientType = Team.MobileClientPlatformSerializer().deserialize(dict["client_type"] ?? .null) + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + let country = NullableSerializer(Serialization._StringSerializer).deserialize(dict["country"] ?? .null) + let created = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["created"] ?? .null) + let updated = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["updated"] ?? .null) + let clientVersion = NullableSerializer(Serialization._StringSerializer).deserialize(dict["client_version"] ?? .null) + let osVersion = NullableSerializer(Serialization._StringSerializer).deserialize(dict["os_version"] ?? .null) + let lastCarrier = NullableSerializer(Serialization._StringSerializer).deserialize(dict["last_carrier"] ?? .null) + return MobileClientSession(sessionId: sessionId, deviceName: deviceName, clientType: clientType, ipAddress: ipAddress, country: country, created: created, updated: updated, clientVersion: clientVersion, osVersion: osVersion, lastCarrier: lastCarrier) + default: + fatalError("Type error deserializing") + } + } + } + + /// Properties of a namespace. + open class NamespaceMetadata: CustomStringConvertible { + /// The name of this namespace. + public let name: String + /// The ID of this namespace. + public let namespaceId: String + /// The type of this namespace. + public let namespaceType: Team.NamespaceType + /// If this is a team member or app folder, the ID of the owning team member. Otherwise, this field is not + /// present. + public let teamMemberId: String? + public init(name: String, namespaceId: String, namespaceType: Team.NamespaceType, teamMemberId: String? = nil) { + stringValidator()(name) + self.name = name + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(namespaceId) + self.namespaceId = namespaceId + self.namespaceType = namespaceType + nullableValidator(stringValidator())(teamMemberId) + self.teamMemberId = teamMemberId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NamespaceMetadataSerializer().serialize(self)))" + } + } + open class NamespaceMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NamespaceMetadata) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "namespace_id": Serialization._StringSerializer.serialize(value.namespaceId), + "namespace_type": Team.NamespaceTypeSerializer().serialize(value.namespaceType), + "team_member_id": NullableSerializer(Serialization._StringSerializer).serialize(value.teamMemberId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NamespaceMetadata { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let namespaceId = Serialization._StringSerializer.deserialize(dict["namespace_id"] ?? .null) + let namespaceType = Team.NamespaceTypeSerializer().deserialize(dict["namespace_type"] ?? .null) + let teamMemberId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["team_member_id"] ?? .null) + return NamespaceMetadata(name: name, namespaceId: namespaceId, namespaceType: namespaceType, teamMemberId: teamMemberId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The NamespaceType union + public enum NamespaceType: CustomStringConvertible { + /// App sandbox folder. + case appFolder + /// Shared folder. + case sharedFolder + /// Top-level team-owned folder. + case teamFolder + /// Team member's home folder. + case teamMemberFolder + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NamespaceTypeSerializer().serialize(self)))" + } + } + open class NamespaceTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NamespaceType) -> JSON { + switch value { + case .appFolder: + var d = [String: JSON]() + d[".tag"] = .str("app_folder") + return .dictionary(d) + case .sharedFolder: + var d = [String: JSON]() + d[".tag"] = .str("shared_folder") + return .dictionary(d) + case .teamFolder: + var d = [String: JSON]() + d[".tag"] = .str("team_folder") + return .dictionary(d) + case .teamMemberFolder: + var d = [String: JSON]() + d[".tag"] = .str("team_member_folder") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> NamespaceType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "app_folder": + return NamespaceType.appFolder + case "shared_folder": + return NamespaceType.sharedFolder + case "team_folder": + return NamespaceType.teamFolder + case "team_member_folder": + return NamespaceType.teamMemberFolder + case "other": + return NamespaceType.other + default: + return NamespaceType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// User result for setting member custom quota. + public enum RemoveCustomQuotaResult: CustomStringConvertible { + /// Successfully removed user. + case success(Team.UserSelectorArg) + /// Invalid user (not in team). + case invalidUser(Team.UserSelectorArg) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemoveCustomQuotaResultSerializer().serialize(self)))" + } + } + open class RemoveCustomQuotaResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemoveCustomQuotaResult) -> JSON { + switch value { + case .success(let arg): + var d = ["success": Team.UserSelectorArgSerializer().serialize(arg)] + d[".tag"] = .str("success") + return .dictionary(d) + case .invalidUser(let arg): + var d = ["invalid_user": Team.UserSelectorArgSerializer().serialize(arg)] + d[".tag"] = .str("invalid_user") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RemoveCustomQuotaResult { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "success": + let v = Team.UserSelectorArgSerializer().deserialize(d["success"] ?? .null) + return RemoveCustomQuotaResult.success(v) + case "invalid_user": + let v = Team.UserSelectorArgSerializer().deserialize(d["invalid_user"] ?? .null) + return RemoveCustomQuotaResult.invalidUser(v) + case "other": + return RemoveCustomQuotaResult.other + default: + return RemoveCustomQuotaResult.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RemovedStatus struct + open class RemovedStatus: CustomStringConvertible { + /// True if the removed team member is recoverable. + public let isRecoverable: Bool + /// True if the team member's account was converted to individual account. + public let isDisconnected: Bool + public init(isRecoverable: Bool, isDisconnected: Bool) { + self.isRecoverable = isRecoverable + self.isDisconnected = isDisconnected + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RemovedStatusSerializer().serialize(self)))" + } + } + open class RemovedStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RemovedStatus) -> JSON { + let output = [ + "is_recoverable": Serialization._BoolSerializer.serialize(value.isRecoverable), + "is_disconnected": Serialization._BoolSerializer.serialize(value.isDisconnected), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RemovedStatus { + switch json { + case .dictionary(let dict): + let isRecoverable = Serialization._BoolSerializer.deserialize(dict["is_recoverable"] ?? .null) + let isDisconnected = Serialization._BoolSerializer.deserialize(dict["is_disconnected"] ?? .null) + return RemovedStatus(isRecoverable: isRecoverable, isDisconnected: isDisconnected) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RevokeDesktopClientArg struct + open class RevokeDesktopClientArg: Team.DeviceSessionArg { + /// Whether to delete all files of the account (this is possible only if supported by the desktop client and + /// will be made the next time the client access the account). + public let deleteOnUnlink: Bool + public init(sessionId: String, teamMemberId: String, deleteOnUnlink: Bool = false) { + self.deleteOnUnlink = deleteOnUnlink + super.init(sessionId: sessionId, teamMemberId: teamMemberId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeDesktopClientArgSerializer().serialize(self)))" + } + } + open class RevokeDesktopClientArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeDesktopClientArg) -> JSON { + let output = [ + "session_id": Serialization._StringSerializer.serialize(value.sessionId), + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + "delete_on_unlink": Serialization._BoolSerializer.serialize(value.deleteOnUnlink), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RevokeDesktopClientArg { + switch json { + case .dictionary(let dict): + let sessionId = Serialization._StringSerializer.deserialize(dict["session_id"] ?? .null) + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + let deleteOnUnlink = Serialization._BoolSerializer.deserialize(dict["delete_on_unlink"] ?? .number(0)) + return RevokeDesktopClientArg(sessionId: sessionId, teamMemberId: teamMemberId, deleteOnUnlink: deleteOnUnlink) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RevokeDeviceSessionArg union + public enum RevokeDeviceSessionArg: CustomStringConvertible { + /// End an active session. + case webSession(Team.DeviceSessionArg) + /// Unlink a linked desktop device. + case desktopClient(Team.RevokeDesktopClientArg) + /// Unlink a linked mobile device. + case mobileClient(Team.DeviceSessionArg) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeDeviceSessionArgSerializer().serialize(self)))" + } + } + open class RevokeDeviceSessionArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeDeviceSessionArg) -> JSON { + switch value { + case .webSession(let arg): + var d = Serialization.getFields(Team.DeviceSessionArgSerializer().serialize(arg)) + d[".tag"] = .str("web_session") + return .dictionary(d) + case .desktopClient(let arg): + var d = Serialization.getFields(Team.RevokeDesktopClientArgSerializer().serialize(arg)) + d[".tag"] = .str("desktop_client") + return .dictionary(d) + case .mobileClient(let arg): + var d = Serialization.getFields(Team.DeviceSessionArgSerializer().serialize(arg)) + d[".tag"] = .str("mobile_client") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RevokeDeviceSessionArg { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "web_session": + let v = Team.DeviceSessionArgSerializer().deserialize(json) + return RevokeDeviceSessionArg.webSession(v) + case "desktop_client": + let v = Team.RevokeDesktopClientArgSerializer().deserialize(json) + return RevokeDeviceSessionArg.desktopClient(v) + case "mobile_client": + let v = Team.DeviceSessionArgSerializer().deserialize(json) + return RevokeDeviceSessionArg.mobileClient(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RevokeDeviceSessionBatchArg struct + open class RevokeDeviceSessionBatchArg: CustomStringConvertible { + /// (no description) + public let revokeDevices: Array + public init(revokeDevices: Array) { + self.revokeDevices = revokeDevices + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeDeviceSessionBatchArgSerializer().serialize(self)))" + } + } + open class RevokeDeviceSessionBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeDeviceSessionBatchArg) -> JSON { + let output = [ + "revoke_devices": ArraySerializer(Team.RevokeDeviceSessionArgSerializer()).serialize(value.revokeDevices), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RevokeDeviceSessionBatchArg { + switch json { + case .dictionary(let dict): + let revokeDevices = ArraySerializer(Team.RevokeDeviceSessionArgSerializer()).deserialize(dict["revoke_devices"] ?? .null) + return RevokeDeviceSessionBatchArg(revokeDevices: revokeDevices) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RevokeDeviceSessionBatchError union + public enum RevokeDeviceSessionBatchError: CustomStringConvertible { + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeDeviceSessionBatchErrorSerializer().serialize(self)))" + } + } + open class RevokeDeviceSessionBatchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeDeviceSessionBatchError) -> JSON { + switch value { + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RevokeDeviceSessionBatchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "other": + return RevokeDeviceSessionBatchError.other + default: + return RevokeDeviceSessionBatchError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RevokeDeviceSessionBatchResult struct + open class RevokeDeviceSessionBatchResult: CustomStringConvertible { + /// (no description) + public let revokeDevicesStatus: Array + public init(revokeDevicesStatus: Array) { + self.revokeDevicesStatus = revokeDevicesStatus + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeDeviceSessionBatchResultSerializer().serialize(self)))" + } + } + open class RevokeDeviceSessionBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeDeviceSessionBatchResult) -> JSON { + let output = [ + "revoke_devices_status": ArraySerializer(Team.RevokeDeviceSessionStatusSerializer()).serialize(value.revokeDevicesStatus), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RevokeDeviceSessionBatchResult { + switch json { + case .dictionary(let dict): + let revokeDevicesStatus = ArraySerializer(Team.RevokeDeviceSessionStatusSerializer()).deserialize(dict["revoke_devices_status"] ?? .null) + return RevokeDeviceSessionBatchResult(revokeDevicesStatus: revokeDevicesStatus) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RevokeDeviceSessionError union + public enum RevokeDeviceSessionError: CustomStringConvertible { + /// Device session not found. + case deviceSessionNotFound + /// Member not found. + case memberNotFound + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeDeviceSessionErrorSerializer().serialize(self)))" + } + } + open class RevokeDeviceSessionErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeDeviceSessionError) -> JSON { + switch value { + case .deviceSessionNotFound: + var d = [String: JSON]() + d[".tag"] = .str("device_session_not_found") + return .dictionary(d) + case .memberNotFound: + var d = [String: JSON]() + d[".tag"] = .str("member_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RevokeDeviceSessionError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "device_session_not_found": + return RevokeDeviceSessionError.deviceSessionNotFound + case "member_not_found": + return RevokeDeviceSessionError.memberNotFound + case "other": + return RevokeDeviceSessionError.other + default: + return RevokeDeviceSessionError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RevokeDeviceSessionStatus struct + open class RevokeDeviceSessionStatus: CustomStringConvertible { + /// Result of the revoking request. + public let success: Bool + /// The error cause in case of a failure. + public let errorType: Team.RevokeDeviceSessionError? + public init(success: Bool, errorType: Team.RevokeDeviceSessionError? = nil) { + self.success = success + self.errorType = errorType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeDeviceSessionStatusSerializer().serialize(self)))" + } + } + open class RevokeDeviceSessionStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeDeviceSessionStatus) -> JSON { + let output = [ + "success": Serialization._BoolSerializer.serialize(value.success), + "error_type": NullableSerializer(Team.RevokeDeviceSessionErrorSerializer()).serialize(value.errorType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RevokeDeviceSessionStatus { + switch json { + case .dictionary(let dict): + let success = Serialization._BoolSerializer.deserialize(dict["success"] ?? .null) + let errorType = NullableSerializer(Team.RevokeDeviceSessionErrorSerializer()).deserialize(dict["error_type"] ?? .null) + return RevokeDeviceSessionStatus(success: success, errorType: errorType) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RevokeLinkedApiAppArg struct + open class RevokeLinkedApiAppArg: CustomStringConvertible { + /// The application's unique id. + public let appId: String + /// The unique id of the member owning the device. + public let teamMemberId: String + /// Whether to keep the application dedicated folder (in case the application uses one). + public let keepAppFolder: Bool + public init(appId: String, teamMemberId: String, keepAppFolder: Bool = true) { + stringValidator()(appId) + self.appId = appId + stringValidator()(teamMemberId) + self.teamMemberId = teamMemberId + self.keepAppFolder = keepAppFolder + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeLinkedApiAppArgSerializer().serialize(self)))" + } + } + open class RevokeLinkedApiAppArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeLinkedApiAppArg) -> JSON { + let output = [ + "app_id": Serialization._StringSerializer.serialize(value.appId), + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + "keep_app_folder": Serialization._BoolSerializer.serialize(value.keepAppFolder), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RevokeLinkedApiAppArg { + switch json { + case .dictionary(let dict): + let appId = Serialization._StringSerializer.deserialize(dict["app_id"] ?? .null) + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + let keepAppFolder = Serialization._BoolSerializer.deserialize(dict["keep_app_folder"] ?? .number(1)) + return RevokeLinkedApiAppArg(appId: appId, teamMemberId: teamMemberId, keepAppFolder: keepAppFolder) + default: + fatalError("Type error deserializing") + } + } + } + + /// The RevokeLinkedApiAppBatchArg struct + open class RevokeLinkedApiAppBatchArg: CustomStringConvertible { + /// (no description) + public let revokeLinkedApp: Array + public init(revokeLinkedApp: Array) { + self.revokeLinkedApp = revokeLinkedApp + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeLinkedApiAppBatchArgSerializer().serialize(self)))" + } + } + open class RevokeLinkedApiAppBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeLinkedApiAppBatchArg) -> JSON { + let output = [ + "revoke_linked_app": ArraySerializer(Team.RevokeLinkedApiAppArgSerializer()).serialize(value.revokeLinkedApp), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RevokeLinkedApiAppBatchArg { + switch json { + case .dictionary(let dict): + let revokeLinkedApp = ArraySerializer(Team.RevokeLinkedApiAppArgSerializer()).deserialize(dict["revoke_linked_app"] ?? .null) + return RevokeLinkedApiAppBatchArg(revokeLinkedApp: revokeLinkedApp) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error returned by linkedAppsRevokeLinkedAppBatch. + public enum RevokeLinkedAppBatchError: CustomStringConvertible { + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeLinkedAppBatchErrorSerializer().serialize(self)))" + } + } + open class RevokeLinkedAppBatchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeLinkedAppBatchError) -> JSON { + switch value { + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RevokeLinkedAppBatchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "other": + return RevokeLinkedAppBatchError.other + default: + return RevokeLinkedAppBatchError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RevokeLinkedAppBatchResult struct + open class RevokeLinkedAppBatchResult: CustomStringConvertible { + /// (no description) + public let revokeLinkedAppStatus: Array + public init(revokeLinkedAppStatus: Array) { + self.revokeLinkedAppStatus = revokeLinkedAppStatus + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeLinkedAppBatchResultSerializer().serialize(self)))" + } + } + open class RevokeLinkedAppBatchResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeLinkedAppBatchResult) -> JSON { + let output = [ + "revoke_linked_app_status": ArraySerializer(Team.RevokeLinkedAppStatusSerializer()).serialize(value.revokeLinkedAppStatus), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RevokeLinkedAppBatchResult { + switch json { + case .dictionary(let dict): + let revokeLinkedAppStatus = ArraySerializer(Team.RevokeLinkedAppStatusSerializer()).deserialize(dict["revoke_linked_app_status"] ?? .null) + return RevokeLinkedAppBatchResult(revokeLinkedAppStatus: revokeLinkedAppStatus) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error returned by linkedAppsRevokeLinkedApp. + public enum RevokeLinkedAppError: CustomStringConvertible { + /// Application not found. + case appNotFound + /// Member not found. + case memberNotFound + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeLinkedAppErrorSerializer().serialize(self)))" + } + } + open class RevokeLinkedAppErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeLinkedAppError) -> JSON { + switch value { + case .appNotFound: + var d = [String: JSON]() + d[".tag"] = .str("app_not_found") + return .dictionary(d) + case .memberNotFound: + var d = [String: JSON]() + d[".tag"] = .str("member_not_found") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RevokeLinkedAppError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "app_not_found": + return RevokeLinkedAppError.appNotFound + case "member_not_found": + return RevokeLinkedAppError.memberNotFound + case "other": + return RevokeLinkedAppError.other + default: + return RevokeLinkedAppError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RevokeLinkedAppStatus struct + open class RevokeLinkedAppStatus: CustomStringConvertible { + /// Result of the revoking request. + public let success: Bool + /// The error cause in case of a failure. + public let errorType: Team.RevokeLinkedAppError? + public init(success: Bool, errorType: Team.RevokeLinkedAppError? = nil) { + self.success = success + self.errorType = errorType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RevokeLinkedAppStatusSerializer().serialize(self)))" + } + } + open class RevokeLinkedAppStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RevokeLinkedAppStatus) -> JSON { + let output = [ + "success": Serialization._BoolSerializer.serialize(value.success), + "error_type": NullableSerializer(Team.RevokeLinkedAppErrorSerializer()).serialize(value.errorType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RevokeLinkedAppStatus { + switch json { + case .dictionary(let dict): + let success = Serialization._BoolSerializer.deserialize(dict["success"] ?? .null) + let errorType = NullableSerializer(Team.RevokeLinkedAppErrorSerializer()).deserialize(dict["error_type"] ?? .null) + return RevokeLinkedAppStatus(success: success, errorType: errorType) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SetCustomQuotaArg struct + open class SetCustomQuotaArg: CustomStringConvertible { + /// List of users and their custom quotas. + public let usersAndQuotas: Array + public init(usersAndQuotas: Array) { + self.usersAndQuotas = usersAndQuotas + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SetCustomQuotaArgSerializer().serialize(self)))" + } + } + open class SetCustomQuotaArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SetCustomQuotaArg) -> JSON { + let output = [ + "users_and_quotas": ArraySerializer(Team.UserCustomQuotaArgSerializer()).serialize(value.usersAndQuotas), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SetCustomQuotaArg { + switch json { + case .dictionary(let dict): + let usersAndQuotas = ArraySerializer(Team.UserCustomQuotaArgSerializer()).deserialize(dict["users_and_quotas"] ?? .null) + return SetCustomQuotaArg(usersAndQuotas: usersAndQuotas) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error returned when setting member custom quota. + public enum SetCustomQuotaError: CustomStringConvertible { + /// A maximum of 1000 users can be set for a single call. + case tooManyUsers + /// An unspecified error. + case other + /// Some of the users are on the excluded users list and can't have custom quota set. + case someUsersAreExcluded + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SetCustomQuotaErrorSerializer().serialize(self)))" + } + } + open class SetCustomQuotaErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SetCustomQuotaError) -> JSON { + switch value { + case .tooManyUsers: + var d = [String: JSON]() + d[".tag"] = .str("too_many_users") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .someUsersAreExcluded: + var d = [String: JSON]() + d[".tag"] = .str("some_users_are_excluded") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SetCustomQuotaError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "too_many_users": + return SetCustomQuotaError.tooManyUsers + case "other": + return SetCustomQuotaError.other + case "some_users_are_excluded": + return SetCustomQuotaError.someUsersAreExcluded + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Describes the number of users in a specific storage bucket. + open class StorageBucket: CustomStringConvertible { + /// The name of the storage bucket. For example, '1G' is a bucket of users with storage size up to 1 Giga. + public let bucket: String + /// The number of people whose storage is in the range of this storage bucket. + public let users: UInt64 + public init(bucket: String, users: UInt64) { + stringValidator()(bucket) + self.bucket = bucket + comparableValidator()(users) + self.users = users + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(StorageBucketSerializer().serialize(self)))" + } + } + open class StorageBucketSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: StorageBucket) -> JSON { + let output = [ + "bucket": Serialization._StringSerializer.serialize(value.bucket), + "users": Serialization._UInt64Serializer.serialize(value.users), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> StorageBucket { + switch json { + case .dictionary(let dict): + let bucket = Serialization._StringSerializer.deserialize(dict["bucket"] ?? .null) + let users = Serialization._UInt64Serializer.deserialize(dict["users"] ?? .null) + return StorageBucket(bucket: bucket, users: users) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderAccessError union + public enum TeamFolderAccessError: CustomStringConvertible { + /// The team folder ID is invalid. + case invalidTeamFolderId + /// The authenticated app does not have permission to manage that team folder. + case noAccess + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderAccessErrorSerializer().serialize(self)))" + } + } + open class TeamFolderAccessErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderAccessError) -> JSON { + switch value { + case .invalidTeamFolderId: + var d = [String: JSON]() + d[".tag"] = .str("invalid_team_folder_id") + return .dictionary(d) + case .noAccess: + var d = [String: JSON]() + d[".tag"] = .str("no_access") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderAccessError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_team_folder_id": + return TeamFolderAccessError.invalidTeamFolderId + case "no_access": + return TeamFolderAccessError.noAccess + case "other": + return TeamFolderAccessError.other + default: + return TeamFolderAccessError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderActivateError union + public enum TeamFolderActivateError: CustomStringConvertible { + /// An unspecified error. + case accessError(Team.TeamFolderAccessError) + /// An unspecified error. + case statusError(Team.TeamFolderInvalidStatusError) + /// An unspecified error. + case teamSharedDropboxError(Team.TeamFolderTeamSharedDropboxError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderActivateErrorSerializer().serialize(self)))" + } + } + open class TeamFolderActivateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderActivateError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Team.TeamFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .statusError(let arg): + var d = ["status_error": Team.TeamFolderInvalidStatusErrorSerializer().serialize(arg)] + d[".tag"] = .str("status_error") + return .dictionary(d) + case .teamSharedDropboxError(let arg): + var d = ["team_shared_dropbox_error": Team.TeamFolderTeamSharedDropboxErrorSerializer().serialize(arg)] + d[".tag"] = .str("team_shared_dropbox_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderActivateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Team.TeamFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return TeamFolderActivateError.accessError(v) + case "status_error": + let v = Team.TeamFolderInvalidStatusErrorSerializer().deserialize(d["status_error"] ?? .null) + return TeamFolderActivateError.statusError(v) + case "team_shared_dropbox_error": + let v = Team.TeamFolderTeamSharedDropboxErrorSerializer().deserialize(d["team_shared_dropbox_error"] ?? .null) + return TeamFolderActivateError.teamSharedDropboxError(v) + case "other": + return TeamFolderActivateError.other + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderIdArg struct + open class TeamFolderIdArg: CustomStringConvertible { + /// The ID of the team folder. + public let teamFolderId: String + public init(teamFolderId: String) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(teamFolderId) + self.teamFolderId = teamFolderId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderIdArgSerializer().serialize(self)))" + } + } + open class TeamFolderIdArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderIdArg) -> JSON { + let output = [ + "team_folder_id": Serialization._StringSerializer.serialize(value.teamFolderId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderIdArg { + switch json { + case .dictionary(let dict): + let teamFolderId = Serialization._StringSerializer.deserialize(dict["team_folder_id"] ?? .null) + return TeamFolderIdArg(teamFolderId: teamFolderId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderArchiveArg struct + open class TeamFolderArchiveArg: Team.TeamFolderIdArg { + /// Whether to force the archive to happen synchronously. + public let forceAsyncOff: Bool + public init(teamFolderId: String, forceAsyncOff: Bool = false) { + self.forceAsyncOff = forceAsyncOff + super.init(teamFolderId: teamFolderId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderArchiveArgSerializer().serialize(self)))" + } + } + open class TeamFolderArchiveArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderArchiveArg) -> JSON { + let output = [ + "team_folder_id": Serialization._StringSerializer.serialize(value.teamFolderId), + "force_async_off": Serialization._BoolSerializer.serialize(value.forceAsyncOff), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderArchiveArg { + switch json { + case .dictionary(let dict): + let teamFolderId = Serialization._StringSerializer.deserialize(dict["team_folder_id"] ?? .null) + let forceAsyncOff = Serialization._BoolSerializer.deserialize(dict["force_async_off"] ?? .number(0)) + return TeamFolderArchiveArg(teamFolderId: teamFolderId, forceAsyncOff: forceAsyncOff) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderArchiveError union + public enum TeamFolderArchiveError: CustomStringConvertible { + /// An unspecified error. + case accessError(Team.TeamFolderAccessError) + /// An unspecified error. + case statusError(Team.TeamFolderInvalidStatusError) + /// An unspecified error. + case teamSharedDropboxError(Team.TeamFolderTeamSharedDropboxError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderArchiveErrorSerializer().serialize(self)))" + } + } + open class TeamFolderArchiveErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderArchiveError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Team.TeamFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .statusError(let arg): + var d = ["status_error": Team.TeamFolderInvalidStatusErrorSerializer().serialize(arg)] + d[".tag"] = .str("status_error") + return .dictionary(d) + case .teamSharedDropboxError(let arg): + var d = ["team_shared_dropbox_error": Team.TeamFolderTeamSharedDropboxErrorSerializer().serialize(arg)] + d[".tag"] = .str("team_shared_dropbox_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderArchiveError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Team.TeamFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return TeamFolderArchiveError.accessError(v) + case "status_error": + let v = Team.TeamFolderInvalidStatusErrorSerializer().deserialize(d["status_error"] ?? .null) + return TeamFolderArchiveError.statusError(v) + case "team_shared_dropbox_error": + let v = Team.TeamFolderTeamSharedDropboxErrorSerializer().deserialize(d["team_shared_dropbox_error"] ?? .null) + return TeamFolderArchiveError.teamSharedDropboxError(v) + case "other": + return TeamFolderArchiveError.other + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderArchiveJobStatus union + public enum TeamFolderArchiveJobStatus: CustomStringConvertible { + /// The asynchronous job is still in progress. + case inProgress + /// The archive job has finished. The value is the metadata for the resulting team folder. + case complete(Team.TeamFolderMetadata) + /// Error occurred while performing an asynchronous job from teamFolderArchive. + case failed(Team.TeamFolderArchiveError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderArchiveJobStatusSerializer().serialize(self)))" + } + } + open class TeamFolderArchiveJobStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderArchiveJobStatus) -> JSON { + switch value { + case .inProgress: + var d = [String: JSON]() + d[".tag"] = .str("in_progress") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Team.TeamFolderMetadataSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + case .failed(let arg): + var d = ["failed": Team.TeamFolderArchiveErrorSerializer().serialize(arg)] + d[".tag"] = .str("failed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderArchiveJobStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "in_progress": + return TeamFolderArchiveJobStatus.inProgress + case "complete": + let v = Team.TeamFolderMetadataSerializer().deserialize(json) + return TeamFolderArchiveJobStatus.complete(v) + case "failed": + let v = Team.TeamFolderArchiveErrorSerializer().deserialize(d["failed"] ?? .null) + return TeamFolderArchiveJobStatus.failed(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderArchiveLaunch union + public enum TeamFolderArchiveLaunch: CustomStringConvertible { + /// This response indicates that the processing is asynchronous. The string is an id that can be used to obtain + /// the status of the asynchronous job. + case asyncJobId(String) + /// An unspecified error. + case complete(Team.TeamFolderMetadata) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderArchiveLaunchSerializer().serialize(self)))" + } + } + open class TeamFolderArchiveLaunchSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderArchiveLaunch) -> JSON { + switch value { + case .asyncJobId(let arg): + var d = ["async_job_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("async_job_id") + return .dictionary(d) + case .complete(let arg): + var d = Serialization.getFields(Team.TeamFolderMetadataSerializer().serialize(arg)) + d[".tag"] = .str("complete") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderArchiveLaunch { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "async_job_id": + let v = Serialization._StringSerializer.deserialize(d["async_job_id"] ?? .null) + return TeamFolderArchiveLaunch.asyncJobId(v) + case "complete": + let v = Team.TeamFolderMetadataSerializer().deserialize(json) + return TeamFolderArchiveLaunch.complete(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderCreateArg struct + open class TeamFolderCreateArg: CustomStringConvertible { + /// Name for the new team folder. + public let name: String + /// The sync setting to apply to this team folder. Only permitted if the team has team selective sync enabled. + public let syncSetting: Files.SyncSettingArg? + public init(name: String, syncSetting: Files.SyncSettingArg? = nil) { + stringValidator()(name) + self.name = name + self.syncSetting = syncSetting + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderCreateArgSerializer().serialize(self)))" + } + } + open class TeamFolderCreateArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderCreateArg) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "sync_setting": NullableSerializer(Files.SyncSettingArgSerializer()).serialize(value.syncSetting), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderCreateArg { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let syncSetting = NullableSerializer(Files.SyncSettingArgSerializer()).deserialize(dict["sync_setting"] ?? .null) + return TeamFolderCreateArg(name: name, syncSetting: syncSetting) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderCreateError union + public enum TeamFolderCreateError: CustomStringConvertible { + /// The provided name cannot be used. + case invalidFolderName + /// There is already a team folder with the provided name. + case folderNameAlreadyUsed + /// The provided name cannot be used because it is reserved. + case folderNameReserved + /// An error occurred setting the sync settings. + case syncSettingsError(Files.SyncSettingsError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderCreateErrorSerializer().serialize(self)))" + } + } + open class TeamFolderCreateErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderCreateError) -> JSON { + switch value { + case .invalidFolderName: + var d = [String: JSON]() + d[".tag"] = .str("invalid_folder_name") + return .dictionary(d) + case .folderNameAlreadyUsed: + var d = [String: JSON]() + d[".tag"] = .str("folder_name_already_used") + return .dictionary(d) + case .folderNameReserved: + var d = [String: JSON]() + d[".tag"] = .str("folder_name_reserved") + return .dictionary(d) + case .syncSettingsError(let arg): + var d = ["sync_settings_error": Files.SyncSettingsErrorSerializer().serialize(arg)] + d[".tag"] = .str("sync_settings_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderCreateError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_folder_name": + return TeamFolderCreateError.invalidFolderName + case "folder_name_already_used": + return TeamFolderCreateError.folderNameAlreadyUsed + case "folder_name_reserved": + return TeamFolderCreateError.folderNameReserved + case "sync_settings_error": + let v = Files.SyncSettingsErrorSerializer().deserialize(d["sync_settings_error"] ?? .null) + return TeamFolderCreateError.syncSettingsError(v) + case "other": + return TeamFolderCreateError.other + default: + return TeamFolderCreateError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderGetInfoItem union + public enum TeamFolderGetInfoItem: CustomStringConvertible { + /// An ID that was provided as a parameter to teamFolderGetInfo did not match any of the team's team folders. + case idNotFound(String) + /// Properties of a team folder. + case teamFolderMetadata(Team.TeamFolderMetadata) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderGetInfoItemSerializer().serialize(self)))" + } + } + open class TeamFolderGetInfoItemSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderGetInfoItem) -> JSON { + switch value { + case .idNotFound(let arg): + var d = ["id_not_found": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("id_not_found") + return .dictionary(d) + case .teamFolderMetadata(let arg): + var d = Serialization.getFields(Team.TeamFolderMetadataSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_metadata") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderGetInfoItem { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "id_not_found": + let v = Serialization._StringSerializer.deserialize(d["id_not_found"] ?? .null) + return TeamFolderGetInfoItem.idNotFound(v) + case "team_folder_metadata": + let v = Team.TeamFolderMetadataSerializer().deserialize(json) + return TeamFolderGetInfoItem.teamFolderMetadata(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderIdListArg struct + open class TeamFolderIdListArg: CustomStringConvertible { + /// The list of team folder IDs. + public let teamFolderIds: Array + public init(teamFolderIds: Array) { + arrayValidator(minItems: 1, itemValidator: stringValidator(pattern: "[-_0-9a-zA-Z:]+"))(teamFolderIds) + self.teamFolderIds = teamFolderIds + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderIdListArgSerializer().serialize(self)))" + } + } + open class TeamFolderIdListArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderIdListArg) -> JSON { + let output = [ + "team_folder_ids": ArraySerializer(Serialization._StringSerializer).serialize(value.teamFolderIds), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderIdListArg { + switch json { + case .dictionary(let dict): + let teamFolderIds = ArraySerializer(Serialization._StringSerializer).deserialize(dict["team_folder_ids"] ?? .null) + return TeamFolderIdListArg(teamFolderIds: teamFolderIds) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderInvalidStatusError union + public enum TeamFolderInvalidStatusError: CustomStringConvertible { + /// The folder is active and the operation did not succeed. + case active + /// The folder is archived and the operation did not succeed. + case archived + /// The folder is being archived and the operation did not succeed. + case archiveInProgress + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderInvalidStatusErrorSerializer().serialize(self)))" + } + } + open class TeamFolderInvalidStatusErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderInvalidStatusError) -> JSON { + switch value { + case .active: + var d = [String: JSON]() + d[".tag"] = .str("active") + return .dictionary(d) + case .archived: + var d = [String: JSON]() + d[".tag"] = .str("archived") + return .dictionary(d) + case .archiveInProgress: + var d = [String: JSON]() + d[".tag"] = .str("archive_in_progress") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderInvalidStatusError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "active": + return TeamFolderInvalidStatusError.active + case "archived": + return TeamFolderInvalidStatusError.archived + case "archive_in_progress": + return TeamFolderInvalidStatusError.archiveInProgress + case "other": + return TeamFolderInvalidStatusError.other + default: + return TeamFolderInvalidStatusError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderListArg struct + open class TeamFolderListArg: CustomStringConvertible { + /// The maximum number of results to return per request. + public let limit: UInt32 + public init(limit: UInt32 = 1000) { + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderListArgSerializer().serialize(self)))" + } + } + open class TeamFolderListArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderListArg) -> JSON { + let output = [ + "limit": Serialization._UInt32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderListArg { + switch json { + case .dictionary(let dict): + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + return TeamFolderListArg(limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderListContinueArg struct + open class TeamFolderListContinueArg: CustomStringConvertible { + /// Indicates from what point to get the next set of team folders. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderListContinueArgSerializer().serialize(self)))" + } + } + open class TeamFolderListContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderListContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderListContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return TeamFolderListContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderListContinueError union + public enum TeamFolderListContinueError: CustomStringConvertible { + /// The cursor is invalid. + case invalidCursor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderListContinueErrorSerializer().serialize(self)))" + } + } + open class TeamFolderListContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderListContinueError) -> JSON { + switch value { + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderListContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_cursor": + return TeamFolderListContinueError.invalidCursor + case "other": + return TeamFolderListContinueError.other + default: + return TeamFolderListContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderListError struct + open class TeamFolderListError: CustomStringConvertible { + /// (no description) + public let accessError: Team.TeamFolderAccessError + public init(accessError: Team.TeamFolderAccessError) { + self.accessError = accessError + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderListErrorSerializer().serialize(self)))" + } + } + open class TeamFolderListErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderListError) -> JSON { + let output = [ + "access_error": Team.TeamFolderAccessErrorSerializer().serialize(value.accessError), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderListError { + switch json { + case .dictionary(let dict): + let accessError = Team.TeamFolderAccessErrorSerializer().deserialize(dict["access_error"] ?? .null) + return TeamFolderListError(accessError: accessError) + default: + fatalError("Type error deserializing") + } + } + } + + /// Result for teamFolderList and teamFolderListContinue. + open class TeamFolderListResult: CustomStringConvertible { + /// List of all team folders in the authenticated team. + public let teamFolders: Array + /// Pass the cursor into teamFolderListContinue to obtain additional team folders. + public let cursor: String + /// Is true if there are additional team folders that have not been returned yet. An additional call to + /// teamFolderListContinue can retrieve them. + public let hasMore: Bool + public init(teamFolders: Array, cursor: String, hasMore: Bool) { + self.teamFolders = teamFolders + stringValidator()(cursor) + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderListResultSerializer().serialize(self)))" + } + } + open class TeamFolderListResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderListResult) -> JSON { + let output = [ + "team_folders": ArraySerializer(Team.TeamFolderMetadataSerializer()).serialize(value.teamFolders), + "cursor": Serialization._StringSerializer.serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderListResult { + switch json { + case .dictionary(let dict): + let teamFolders = ArraySerializer(Team.TeamFolderMetadataSerializer()).deserialize(dict["team_folders"] ?? .null) + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return TeamFolderListResult(teamFolders: teamFolders, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// Properties of a team folder. + open class TeamFolderMetadata: CustomStringConvertible { + /// The ID of the team folder. + public let teamFolderId: String + /// The name of the team folder. + public let name: String + /// The status of the team folder. + public let status: Team.TeamFolderStatus + /// True if this team folder is a shared team root. + public let isTeamSharedDropbox: Bool + /// The sync setting applied to this team folder. + public let syncSetting: Files.SyncSetting + /// Sync settings applied to contents of this team folder. + public let contentSyncSettings: Array + public init(teamFolderId: String, name: String, status: Team.TeamFolderStatus, isTeamSharedDropbox: Bool, syncSetting: Files.SyncSetting, contentSyncSettings: Array) { + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(teamFolderId) + self.teamFolderId = teamFolderId + stringValidator()(name) + self.name = name + self.status = status + self.isTeamSharedDropbox = isTeamSharedDropbox + self.syncSetting = syncSetting + self.contentSyncSettings = contentSyncSettings + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderMetadataSerializer().serialize(self)))" + } + } + open class TeamFolderMetadataSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderMetadata) -> JSON { + let output = [ + "team_folder_id": Serialization._StringSerializer.serialize(value.teamFolderId), + "name": Serialization._StringSerializer.serialize(value.name), + "status": Team.TeamFolderStatusSerializer().serialize(value.status), + "is_team_shared_dropbox": Serialization._BoolSerializer.serialize(value.isTeamSharedDropbox), + "sync_setting": Files.SyncSettingSerializer().serialize(value.syncSetting), + "content_sync_settings": ArraySerializer(Files.ContentSyncSettingSerializer()).serialize(value.contentSyncSettings), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderMetadata { + switch json { + case .dictionary(let dict): + let teamFolderId = Serialization._StringSerializer.deserialize(dict["team_folder_id"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let status = Team.TeamFolderStatusSerializer().deserialize(dict["status"] ?? .null) + let isTeamSharedDropbox = Serialization._BoolSerializer.deserialize(dict["is_team_shared_dropbox"] ?? .null) + let syncSetting = Files.SyncSettingSerializer().deserialize(dict["sync_setting"] ?? .null) + let contentSyncSettings = ArraySerializer(Files.ContentSyncSettingSerializer()).deserialize(dict["content_sync_settings"] ?? .null) + return TeamFolderMetadata(teamFolderId: teamFolderId, name: name, status: status, isTeamSharedDropbox: isTeamSharedDropbox, syncSetting: syncSetting, contentSyncSettings: contentSyncSettings) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderPermanentlyDeleteError union + public enum TeamFolderPermanentlyDeleteError: CustomStringConvertible { + /// An unspecified error. + case accessError(Team.TeamFolderAccessError) + /// An unspecified error. + case statusError(Team.TeamFolderInvalidStatusError) + /// An unspecified error. + case teamSharedDropboxError(Team.TeamFolderTeamSharedDropboxError) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderPermanentlyDeleteErrorSerializer().serialize(self)))" + } + } + open class TeamFolderPermanentlyDeleteErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderPermanentlyDeleteError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Team.TeamFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .statusError(let arg): + var d = ["status_error": Team.TeamFolderInvalidStatusErrorSerializer().serialize(arg)] + d[".tag"] = .str("status_error") + return .dictionary(d) + case .teamSharedDropboxError(let arg): + var d = ["team_shared_dropbox_error": Team.TeamFolderTeamSharedDropboxErrorSerializer().serialize(arg)] + d[".tag"] = .str("team_shared_dropbox_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderPermanentlyDeleteError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Team.TeamFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return TeamFolderPermanentlyDeleteError.accessError(v) + case "status_error": + let v = Team.TeamFolderInvalidStatusErrorSerializer().deserialize(d["status_error"] ?? .null) + return TeamFolderPermanentlyDeleteError.statusError(v) + case "team_shared_dropbox_error": + let v = Team.TeamFolderTeamSharedDropboxErrorSerializer().deserialize(d["team_shared_dropbox_error"] ?? .null) + return TeamFolderPermanentlyDeleteError.teamSharedDropboxError(v) + case "other": + return TeamFolderPermanentlyDeleteError.other + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderRenameArg struct + open class TeamFolderRenameArg: Team.TeamFolderIdArg { + /// New team folder name. + public let name: String + public init(teamFolderId: String, name: String) { + stringValidator()(name) + self.name = name + super.init(teamFolderId: teamFolderId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderRenameArgSerializer().serialize(self)))" + } + } + open class TeamFolderRenameArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderRenameArg) -> JSON { + let output = [ + "team_folder_id": Serialization._StringSerializer.serialize(value.teamFolderId), + "name": Serialization._StringSerializer.serialize(value.name), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderRenameArg { + switch json { + case .dictionary(let dict): + let teamFolderId = Serialization._StringSerializer.deserialize(dict["team_folder_id"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + return TeamFolderRenameArg(teamFolderId: teamFolderId, name: name) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderRenameError union + public enum TeamFolderRenameError: CustomStringConvertible { + /// An unspecified error. + case accessError(Team.TeamFolderAccessError) + /// An unspecified error. + case statusError(Team.TeamFolderInvalidStatusError) + /// An unspecified error. + case teamSharedDropboxError(Team.TeamFolderTeamSharedDropboxError) + /// An unspecified error. + case other + /// The provided folder name cannot be used. + case invalidFolderName + /// There is already a team folder with the same name. + case folderNameAlreadyUsed + /// The provided name cannot be used because it is reserved. + case folderNameReserved + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderRenameErrorSerializer().serialize(self)))" + } + } + open class TeamFolderRenameErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderRenameError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Team.TeamFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .statusError(let arg): + var d = ["status_error": Team.TeamFolderInvalidStatusErrorSerializer().serialize(arg)] + d[".tag"] = .str("status_error") + return .dictionary(d) + case .teamSharedDropboxError(let arg): + var d = ["team_shared_dropbox_error": Team.TeamFolderTeamSharedDropboxErrorSerializer().serialize(arg)] + d[".tag"] = .str("team_shared_dropbox_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .invalidFolderName: + var d = [String: JSON]() + d[".tag"] = .str("invalid_folder_name") + return .dictionary(d) + case .folderNameAlreadyUsed: + var d = [String: JSON]() + d[".tag"] = .str("folder_name_already_used") + return .dictionary(d) + case .folderNameReserved: + var d = [String: JSON]() + d[".tag"] = .str("folder_name_reserved") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderRenameError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Team.TeamFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return TeamFolderRenameError.accessError(v) + case "status_error": + let v = Team.TeamFolderInvalidStatusErrorSerializer().deserialize(d["status_error"] ?? .null) + return TeamFolderRenameError.statusError(v) + case "team_shared_dropbox_error": + let v = Team.TeamFolderTeamSharedDropboxErrorSerializer().deserialize(d["team_shared_dropbox_error"] ?? .null) + return TeamFolderRenameError.teamSharedDropboxError(v) + case "other": + return TeamFolderRenameError.other + case "invalid_folder_name": + return TeamFolderRenameError.invalidFolderName + case "folder_name_already_used": + return TeamFolderRenameError.folderNameAlreadyUsed + case "folder_name_reserved": + return TeamFolderRenameError.folderNameReserved + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderStatus union + public enum TeamFolderStatus: CustomStringConvertible { + /// The team folder and sub-folders are available to all members. + case active + /// The team folder is not accessible outside of the team folder manager. + case archived + /// The team folder is not accessible outside of the team folder manager. + case archiveInProgress + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderStatusSerializer().serialize(self)))" + } + } + open class TeamFolderStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderStatus) -> JSON { + switch value { + case .active: + var d = [String: JSON]() + d[".tag"] = .str("active") + return .dictionary(d) + case .archived: + var d = [String: JSON]() + d[".tag"] = .str("archived") + return .dictionary(d) + case .archiveInProgress: + var d = [String: JSON]() + d[".tag"] = .str("archive_in_progress") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "active": + return TeamFolderStatus.active + case "archived": + return TeamFolderStatus.archived + case "archive_in_progress": + return TeamFolderStatus.archiveInProgress + case "other": + return TeamFolderStatus.other + default: + return TeamFolderStatus.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderTeamSharedDropboxError union + public enum TeamFolderTeamSharedDropboxError: CustomStringConvertible { + /// This action is not allowed for a shared team root. + case disallowed + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderTeamSharedDropboxErrorSerializer().serialize(self)))" + } + } + open class TeamFolderTeamSharedDropboxErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderTeamSharedDropboxError) -> JSON { + switch value { + case .disallowed: + var d = [String: JSON]() + d[".tag"] = .str("disallowed") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderTeamSharedDropboxError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disallowed": + return TeamFolderTeamSharedDropboxError.disallowed + case "other": + return TeamFolderTeamSharedDropboxError.other + default: + return TeamFolderTeamSharedDropboxError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamFolderUpdateSyncSettingsArg struct + open class TeamFolderUpdateSyncSettingsArg: Team.TeamFolderIdArg { + /// Sync setting to apply to the team folder itself. Only meaningful if the team folder is not a shared team + /// root. + public let syncSetting: Files.SyncSettingArg? + /// Sync settings to apply to contents of this team folder. + public let contentSyncSettings: Array? + public init(teamFolderId: String, syncSetting: Files.SyncSettingArg? = nil, contentSyncSettings: Array? = nil) { + self.syncSetting = syncSetting + self.contentSyncSettings = contentSyncSettings + super.init(teamFolderId: teamFolderId) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderUpdateSyncSettingsArgSerializer().serialize(self)))" + } + } + open class TeamFolderUpdateSyncSettingsArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderUpdateSyncSettingsArg) -> JSON { + let output = [ + "team_folder_id": Serialization._StringSerializer.serialize(value.teamFolderId), + "sync_setting": NullableSerializer(Files.SyncSettingArgSerializer()).serialize(value.syncSetting), + "content_sync_settings": NullableSerializer(ArraySerializer(Files.ContentSyncSettingArgSerializer())).serialize(value.contentSyncSettings), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderUpdateSyncSettingsArg { + switch json { + case .dictionary(let dict): + let teamFolderId = Serialization._StringSerializer.deserialize(dict["team_folder_id"] ?? .null) + let syncSetting = NullableSerializer(Files.SyncSettingArgSerializer()).deserialize(dict["sync_setting"] ?? .null) + let contentSyncSettings = NullableSerializer(ArraySerializer(Files.ContentSyncSettingArgSerializer())).deserialize(dict["content_sync_settings"] ?? .null) + return TeamFolderUpdateSyncSettingsArg(teamFolderId: teamFolderId, syncSetting: syncSetting, contentSyncSettings: contentSyncSettings) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderUpdateSyncSettingsError union + public enum TeamFolderUpdateSyncSettingsError: CustomStringConvertible { + /// An unspecified error. + case accessError(Team.TeamFolderAccessError) + /// An unspecified error. + case statusError(Team.TeamFolderInvalidStatusError) + /// An unspecified error. + case teamSharedDropboxError(Team.TeamFolderTeamSharedDropboxError) + /// An unspecified error. + case other + /// An error occurred setting the sync settings. + case syncSettingsError(Files.SyncSettingsError) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderUpdateSyncSettingsErrorSerializer().serialize(self)))" + } + } + open class TeamFolderUpdateSyncSettingsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderUpdateSyncSettingsError) -> JSON { + switch value { + case .accessError(let arg): + var d = ["access_error": Team.TeamFolderAccessErrorSerializer().serialize(arg)] + d[".tag"] = .str("access_error") + return .dictionary(d) + case .statusError(let arg): + var d = ["status_error": Team.TeamFolderInvalidStatusErrorSerializer().serialize(arg)] + d[".tag"] = .str("status_error") + return .dictionary(d) + case .teamSharedDropboxError(let arg): + var d = ["team_shared_dropbox_error": Team.TeamFolderTeamSharedDropboxErrorSerializer().serialize(arg)] + d[".tag"] = .str("team_shared_dropbox_error") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .syncSettingsError(let arg): + var d = ["sync_settings_error": Files.SyncSettingsErrorSerializer().serialize(arg)] + d[".tag"] = .str("sync_settings_error") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamFolderUpdateSyncSettingsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "access_error": + let v = Team.TeamFolderAccessErrorSerializer().deserialize(d["access_error"] ?? .null) + return TeamFolderUpdateSyncSettingsError.accessError(v) + case "status_error": + let v = Team.TeamFolderInvalidStatusErrorSerializer().deserialize(d["status_error"] ?? .null) + return TeamFolderUpdateSyncSettingsError.statusError(v) + case "team_shared_dropbox_error": + let v = Team.TeamFolderTeamSharedDropboxErrorSerializer().deserialize(d["team_shared_dropbox_error"] ?? .null) + return TeamFolderUpdateSyncSettingsError.teamSharedDropboxError(v) + case "other": + return TeamFolderUpdateSyncSettingsError.other + case "sync_settings_error": + let v = Files.SyncSettingsErrorSerializer().deserialize(d["sync_settings_error"] ?? .null) + return TeamFolderUpdateSyncSettingsError.syncSettingsError(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamGetInfoResult struct + open class TeamGetInfoResult: CustomStringConvertible { + /// The name of the team. + public let name: String + /// The ID of the team. + public let teamId: String + /// The number of licenses available to the team. + public let numLicensedUsers: UInt32 + /// The number of accounts that have been invited or are already active members of the team. + public let numProvisionedUsers: UInt32 + /// (no description) + public let policies: TeamPolicies.TeamMemberPolicies + public init(name: String, teamId: String, numLicensedUsers: UInt32, numProvisionedUsers: UInt32, policies: TeamPolicies.TeamMemberPolicies) { + stringValidator()(name) + self.name = name + stringValidator()(teamId) + self.teamId = teamId + comparableValidator()(numLicensedUsers) + self.numLicensedUsers = numLicensedUsers + comparableValidator()(numProvisionedUsers) + self.numProvisionedUsers = numProvisionedUsers + self.policies = policies + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamGetInfoResultSerializer().serialize(self)))" + } + } + open class TeamGetInfoResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamGetInfoResult) -> JSON { + let output = [ + "name": Serialization._StringSerializer.serialize(value.name), + "team_id": Serialization._StringSerializer.serialize(value.teamId), + "num_licensed_users": Serialization._UInt32Serializer.serialize(value.numLicensedUsers), + "num_provisioned_users": Serialization._UInt32Serializer.serialize(value.numProvisionedUsers), + "policies": TeamPolicies.TeamMemberPoliciesSerializer().serialize(value.policies), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamGetInfoResult { + switch json { + case .dictionary(let dict): + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let teamId = Serialization._StringSerializer.deserialize(dict["team_id"] ?? .null) + let numLicensedUsers = Serialization._UInt32Serializer.deserialize(dict["num_licensed_users"] ?? .null) + let numProvisionedUsers = Serialization._UInt32Serializer.deserialize(dict["num_provisioned_users"] ?? .null) + let policies = TeamPolicies.TeamMemberPoliciesSerializer().deserialize(dict["policies"] ?? .null) + return TeamGetInfoResult(name: name, teamId: teamId, numLicensedUsers: numLicensedUsers, numProvisionedUsers: numProvisionedUsers, policies: policies) + default: + fatalError("Type error deserializing") + } + } + } + + /// Information about a team member. + open class TeamMemberInfo: CustomStringConvertible { + /// Profile of a user as a member of a team. + public let profile: Team.TeamMemberProfile + /// The user's role in the team. + public let role: Team.AdminTier + public init(profile: Team.TeamMemberProfile, role: Team.AdminTier) { + self.profile = profile + self.role = role + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMemberInfoSerializer().serialize(self)))" + } + } + open class TeamMemberInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMemberInfo) -> JSON { + let output = [ + "profile": Team.TeamMemberProfileSerializer().serialize(value.profile), + "role": Team.AdminTierSerializer().serialize(value.role), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamMemberInfo { + switch json { + case .dictionary(let dict): + let profile = Team.TeamMemberProfileSerializer().deserialize(dict["profile"] ?? .null) + let role = Team.AdminTierSerializer().deserialize(dict["role"] ?? .null) + return TeamMemberInfo(profile: profile, role: role) + default: + fatalError("Type error deserializing") + } + } + } + + /// Profile of a user as a member of a team. + open class TeamMemberProfile: Team.MemberProfile { + /// List of group IDs of groups that the user belongs to. + public let groups: Array + /// The namespace id of the user's root folder. + public let memberFolderId: String + public init(teamMemberId: String, email: String, emailVerified: Bool, status: Team.TeamMemberStatus, name: Users.Name, membershipType: Team.TeamMembershipType, groups: Array, memberFolderId: String, externalId: String? = nil, accountId: String? = nil, joinedOn: Date? = nil, persistentId: String? = nil, isDirectoryRestricted: Bool? = nil) { + arrayValidator(itemValidator: stringValidator())(groups) + self.groups = groups + stringValidator(pattern: "[-_0-9a-zA-Z:]+")(memberFolderId) + self.memberFolderId = memberFolderId + super.init(teamMemberId: teamMemberId, email: email, emailVerified: emailVerified, status: status, name: name, membershipType: membershipType, externalId: externalId, accountId: accountId, joinedOn: joinedOn, persistentId: persistentId, isDirectoryRestricted: isDirectoryRestricted) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMemberProfileSerializer().serialize(self)))" + } + } + open class TeamMemberProfileSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMemberProfile) -> JSON { + let output = [ + "team_member_id": Serialization._StringSerializer.serialize(value.teamMemberId), + "email": Serialization._StringSerializer.serialize(value.email), + "email_verified": Serialization._BoolSerializer.serialize(value.emailVerified), + "status": Team.TeamMemberStatusSerializer().serialize(value.status), + "name": Users.NameSerializer().serialize(value.name), + "membership_type": Team.TeamMembershipTypeSerializer().serialize(value.membershipType), + "groups": ArraySerializer(Serialization._StringSerializer).serialize(value.groups), + "member_folder_id": Serialization._StringSerializer.serialize(value.memberFolderId), + "external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.externalId), + "account_id": NullableSerializer(Serialization._StringSerializer).serialize(value.accountId), + "joined_on": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.joinedOn), + "persistent_id": NullableSerializer(Serialization._StringSerializer).serialize(value.persistentId), + "is_directory_restricted": NullableSerializer(Serialization._BoolSerializer).serialize(value.isDirectoryRestricted), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamMemberProfile { + switch json { + case .dictionary(let dict): + let teamMemberId = Serialization._StringSerializer.deserialize(dict["team_member_id"] ?? .null) + let email = Serialization._StringSerializer.deserialize(dict["email"] ?? .null) + let emailVerified = Serialization._BoolSerializer.deserialize(dict["email_verified"] ?? .null) + let status = Team.TeamMemberStatusSerializer().deserialize(dict["status"] ?? .null) + let name = Users.NameSerializer().deserialize(dict["name"] ?? .null) + let membershipType = Team.TeamMembershipTypeSerializer().deserialize(dict["membership_type"] ?? .null) + let groups = ArraySerializer(Serialization._StringSerializer).deserialize(dict["groups"] ?? .null) + let memberFolderId = Serialization._StringSerializer.deserialize(dict["member_folder_id"] ?? .null) + let externalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["external_id"] ?? .null) + let accountId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["account_id"] ?? .null) + let joinedOn = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["joined_on"] ?? .null) + let persistentId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["persistent_id"] ?? .null) + let isDirectoryRestricted = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["is_directory_restricted"] ?? .null) + return TeamMemberProfile(teamMemberId: teamMemberId, email: email, emailVerified: emailVerified, status: status, name: name, membershipType: membershipType, groups: groups, memberFolderId: memberFolderId, externalId: externalId, accountId: accountId, joinedOn: joinedOn, persistentId: persistentId, isDirectoryRestricted: isDirectoryRestricted) + default: + fatalError("Type error deserializing") + } + } + } + + /// The user's status as a member of a specific team. + public enum TeamMemberStatus: CustomStringConvertible { + /// User has successfully joined the team. + case active + /// User has been invited to a team, but has not joined the team yet. + case invited + /// User is no longer a member of the team, but the account can be un-suspended, re-establishing the user as a + /// team member. + case suspended + /// User is no longer a member of the team. Removed users are only listed when include_removed is true in + /// members/list. + case removed(Team.RemovedStatus) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMemberStatusSerializer().serialize(self)))" + } + } + open class TeamMemberStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMemberStatus) -> JSON { + switch value { + case .active: + var d = [String: JSON]() + d[".tag"] = .str("active") + return .dictionary(d) + case .invited: + var d = [String: JSON]() + d[".tag"] = .str("invited") + return .dictionary(d) + case .suspended: + var d = [String: JSON]() + d[".tag"] = .str("suspended") + return .dictionary(d) + case .removed(let arg): + var d = Serialization.getFields(Team.RemovedStatusSerializer().serialize(arg)) + d[".tag"] = .str("removed") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamMemberStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "active": + return TeamMemberStatus.active + case "invited": + return TeamMemberStatus.invited + case "suspended": + return TeamMemberStatus.suspended + case "removed": + let v = Team.RemovedStatusSerializer().deserialize(json) + return TeamMemberStatus.removed(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamMembershipType union + public enum TeamMembershipType: CustomStringConvertible { + /// User uses a license and has full access to team resources like the shared quota. + case full + /// User does not have access to the shared quota and team admins have restricted administrative control. + case limited + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMembershipTypeSerializer().serialize(self)))" + } + } + open class TeamMembershipTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMembershipType) -> JSON { + switch value { + case .full: + var d = [String: JSON]() + d[".tag"] = .str("full") + return .dictionary(d) + case .limited: + var d = [String: JSON]() + d[".tag"] = .str("limited") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamMembershipType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "full": + return TeamMembershipType.full + case "limited": + return TeamMembershipType.limited + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamNamespacesListArg struct + open class TeamNamespacesListArg: CustomStringConvertible { + /// Specifying a value here has no effect. + public let limit: UInt32 + public init(limit: UInt32 = 1000) { + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamNamespacesListArgSerializer().serialize(self)))" + } + } + open class TeamNamespacesListArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamNamespacesListArg) -> JSON { + let output = [ + "limit": Serialization._UInt32Serializer.serialize(value.limit), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamNamespacesListArg { + switch json { + case .dictionary(let dict): + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + return TeamNamespacesListArg(limit: limit) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamNamespacesListContinueArg struct + open class TeamNamespacesListContinueArg: CustomStringConvertible { + /// Indicates from what point to get the next set of team-accessible namespaces. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamNamespacesListContinueArgSerializer().serialize(self)))" + } + } + open class TeamNamespacesListContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamNamespacesListContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamNamespacesListContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return TeamNamespacesListContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamNamespacesListError union + public enum TeamNamespacesListError: CustomStringConvertible { + /// Argument passed in is invalid. + case invalidArg + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamNamespacesListErrorSerializer().serialize(self)))" + } + } + open class TeamNamespacesListErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamNamespacesListError) -> JSON { + switch value { + case .invalidArg: + var d = [String: JSON]() + d[".tag"] = .str("invalid_arg") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamNamespacesListError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_arg": + return TeamNamespacesListError.invalidArg + case "other": + return TeamNamespacesListError.other + default: + return TeamNamespacesListError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The TeamNamespacesListContinueError union + public enum TeamNamespacesListContinueError: CustomStringConvertible { + /// Argument passed in is invalid. + case invalidArg + /// An unspecified error. + case other + /// The cursor is invalid. + case invalidCursor + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamNamespacesListContinueErrorSerializer().serialize(self)))" + } + } + open class TeamNamespacesListContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamNamespacesListContinueError) -> JSON { + switch value { + case .invalidArg: + var d = [String: JSON]() + d[".tag"] = .str("invalid_arg") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + case .invalidCursor: + var d = [String: JSON]() + d[".tag"] = .str("invalid_cursor") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamNamespacesListContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "invalid_arg": + return TeamNamespacesListContinueError.invalidArg + case "other": + return TeamNamespacesListContinueError.other + case "invalid_cursor": + return TeamNamespacesListContinueError.invalidCursor + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Result for namespacesList. + open class TeamNamespacesListResult: CustomStringConvertible { + /// List of all namespaces the team can access. + public let namespaces: Array + /// Pass the cursor into namespacesListContinue to obtain additional namespaces. Note that duplicate namespaces + /// may be returned. + public let cursor: String + /// Is true if there are additional namespaces that have not been returned yet. + public let hasMore: Bool + public init(namespaces: Array, cursor: String, hasMore: Bool) { + self.namespaces = namespaces + stringValidator()(cursor) + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamNamespacesListResultSerializer().serialize(self)))" + } + } + open class TeamNamespacesListResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamNamespacesListResult) -> JSON { + let output = [ + "namespaces": ArraySerializer(Team.NamespaceMetadataSerializer()).serialize(value.namespaces), + "cursor": Serialization._StringSerializer.serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamNamespacesListResult { + switch json { + case .dictionary(let dict): + let namespaces = ArraySerializer(Team.NamespaceMetadataSerializer()).deserialize(dict["namespaces"] ?? .null) + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return TeamNamespacesListResult(namespaces: namespaces, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// Error returned by tokenGetAuthenticatedAdmin. + public enum TokenGetAuthenticatedAdminError: CustomStringConvertible { + /// The current token is not associated with a team admin, because mappings were not recorded when the token was + /// created. Consider re-authorizing a new access token to record its authenticating admin. + case mappingNotFound + /// Either the team admin that authorized this token is no longer an active member of the team or no longer a + /// team admin. + case adminNotActive + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TokenGetAuthenticatedAdminErrorSerializer().serialize(self)))" + } + } + open class TokenGetAuthenticatedAdminErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TokenGetAuthenticatedAdminError) -> JSON { + switch value { + case .mappingNotFound: + var d = [String: JSON]() + d[".tag"] = .str("mapping_not_found") + return .dictionary(d) + case .adminNotActive: + var d = [String: JSON]() + d[".tag"] = .str("admin_not_active") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TokenGetAuthenticatedAdminError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "mapping_not_found": + return TokenGetAuthenticatedAdminError.mappingNotFound + case "admin_not_active": + return TokenGetAuthenticatedAdminError.adminNotActive + case "other": + return TokenGetAuthenticatedAdminError.other + default: + return TokenGetAuthenticatedAdminError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Results for tokenGetAuthenticatedAdmin. + open class TokenGetAuthenticatedAdminResult: CustomStringConvertible { + /// The admin who authorized the token. + public let adminProfile: Team.TeamMemberProfile + public init(adminProfile: Team.TeamMemberProfile) { + self.adminProfile = adminProfile + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TokenGetAuthenticatedAdminResultSerializer().serialize(self)))" + } + } + open class TokenGetAuthenticatedAdminResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TokenGetAuthenticatedAdminResult) -> JSON { + let output = [ + "admin_profile": Team.TeamMemberProfileSerializer().serialize(value.adminProfile), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TokenGetAuthenticatedAdminResult { + switch json { + case .dictionary(let dict): + let adminProfile = Team.TeamMemberProfileSerializer().deserialize(dict["admin_profile"] ?? .null) + return TokenGetAuthenticatedAdminResult(adminProfile: adminProfile) + default: + fatalError("Type error deserializing") + } + } + } + + /// The value for uploadApiRateLimit in Feature. + public enum UploadApiRateLimitValue: CustomStringConvertible { + /// This team has unlimited upload API quota. So far both server version account and legacy account type have + /// unlimited monthly upload api quota. + case unlimited + /// The number of upload API calls allowed per month. + case limit(UInt32) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UploadApiRateLimitValueSerializer().serialize(self)))" + } + } + open class UploadApiRateLimitValueSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UploadApiRateLimitValue) -> JSON { + switch value { + case .unlimited: + var d = [String: JSON]() + d[".tag"] = .str("unlimited") + return .dictionary(d) + case .limit(let arg): + var d = ["limit": Serialization._UInt32Serializer.serialize(arg)] + d[".tag"] = .str("limit") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UploadApiRateLimitValue { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "unlimited": + return UploadApiRateLimitValue.unlimited + case "limit": + let v = Serialization._UInt32Serializer.deserialize(d["limit"] ?? .null) + return UploadApiRateLimitValue.limit(v) + case "other": + return UploadApiRateLimitValue.other + default: + return UploadApiRateLimitValue.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// User and their required custom quota in GB (1 TB = 1024 GB). + open class UserCustomQuotaArg: CustomStringConvertible { + /// (no description) + public let user: Team.UserSelectorArg + /// (no description) + public let quotaGb: UInt32 + public init(user: Team.UserSelectorArg, quotaGb: UInt32) { + self.user = user + comparableValidator(minValue: 15)(quotaGb) + self.quotaGb = quotaGb + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserCustomQuotaArgSerializer().serialize(self)))" + } + } + open class UserCustomQuotaArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserCustomQuotaArg) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + "quota_gb": Serialization._UInt32Serializer.serialize(value.quotaGb), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserCustomQuotaArg { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + let quotaGb = Serialization._UInt32Serializer.deserialize(dict["quota_gb"] ?? .null) + return UserCustomQuotaArg(user: user, quotaGb: quotaGb) + default: + fatalError("Type error deserializing") + } + } + } + + /// User and their custom quota in GB (1 TB = 1024 GB). No quota returns if the user has no custom quota set. + open class UserCustomQuotaResult: CustomStringConvertible { + /// (no description) + public let user: Team.UserSelectorArg + /// (no description) + public let quotaGb: UInt32? + public init(user: Team.UserSelectorArg, quotaGb: UInt32? = nil) { + self.user = user + nullableValidator(comparableValidator(minValue: 15))(quotaGb) + self.quotaGb = quotaGb + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserCustomQuotaResultSerializer().serialize(self)))" + } + } + open class UserCustomQuotaResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserCustomQuotaResult) -> JSON { + let output = [ + "user": Team.UserSelectorArgSerializer().serialize(value.user), + "quota_gb": NullableSerializer(Serialization._UInt32Serializer).serialize(value.quotaGb), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserCustomQuotaResult { + switch json { + case .dictionary(let dict): + let user = Team.UserSelectorArgSerializer().deserialize(dict["user"] ?? .null) + let quotaGb = NullableSerializer(Serialization._UInt32Serializer).deserialize(dict["quota_gb"] ?? .null) + return UserCustomQuotaResult(user: user, quotaGb: quotaGb) + default: + fatalError("Type error deserializing") + } + } + } + + /// Argument for selecting a single user, either by team_member_id, external_id or email. + public enum UserSelectorArg: CustomStringConvertible { + /// An unspecified error. + case teamMemberId(String) + /// An unspecified error. + case externalId(String) + /// An unspecified error. + case email(String) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserSelectorArgSerializer().serialize(self)))" + } + } + open class UserSelectorArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserSelectorArg) -> JSON { + switch value { + case .teamMemberId(let arg): + var d = ["team_member_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("team_member_id") + return .dictionary(d) + case .externalId(let arg): + var d = ["external_id": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("external_id") + return .dictionary(d) + case .email(let arg): + var d = ["email": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("email") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UserSelectorArg { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team_member_id": + let v = Serialization._StringSerializer.deserialize(d["team_member_id"] ?? .null) + return UserSelectorArg.teamMemberId(v) + case "external_id": + let v = Serialization._StringSerializer.deserialize(d["external_id"] ?? .null) + return UserSelectorArg.externalId(v) + case "email": + let v = Serialization._StringSerializer.deserialize(d["email"] ?? .null) + return UserSelectorArg.email(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Argument for selecting a list of users, either by team_member_ids, external_ids or emails. + public enum UsersSelectorArg: CustomStringConvertible { + /// List of member IDs. + case teamMemberIds(Array) + /// List of external user IDs. + case externalIds(Array) + /// List of email addresses. + case emails(Array) + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UsersSelectorArgSerializer().serialize(self)))" + } + } + open class UsersSelectorArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UsersSelectorArg) -> JSON { + switch value { + case .teamMemberIds(let arg): + var d = ["team_member_ids": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("team_member_ids") + return .dictionary(d) + case .externalIds(let arg): + var d = ["external_ids": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("external_ids") + return .dictionary(d) + case .emails(let arg): + var d = ["emails": ArraySerializer(Serialization._StringSerializer).serialize(arg)] + d[".tag"] = .str("emails") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> UsersSelectorArg { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team_member_ids": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["team_member_ids"] ?? .null) + return UsersSelectorArg.teamMemberIds(v) + case "external_ids": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["external_ids"] ?? .null) + return UsersSelectorArg.externalIds(v) + case "emails": + let v = ArraySerializer(Serialization._StringSerializer).deserialize(d["emails"] ?? .null) + return UsersSelectorArg.emails(v) + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + + /// Stone Route Objects + + static let devicesListMemberDevices = Route( + name: "devices/list_member_devices", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.ListMemberDevicesArgSerializer(), + responseSerializer: Team.ListMemberDevicesResultSerializer(), + errorSerializer: Team.ListMemberDevicesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let devicesListMembersDevices = Route( + name: "devices/list_members_devices", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.ListMembersDevicesArgSerializer(), + responseSerializer: Team.ListMembersDevicesResultSerializer(), + errorSerializer: Team.ListMembersDevicesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let devicesListTeamDevices = Route( + name: "devices/list_team_devices", + version: 1, + namespace: "team", + deprecated: true, + argSerializer: Team.ListTeamDevicesArgSerializer(), + responseSerializer: Team.ListTeamDevicesResultSerializer(), + errorSerializer: Team.ListTeamDevicesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let devicesRevokeDeviceSession = Route( + name: "devices/revoke_device_session", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.RevokeDeviceSessionArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Team.RevokeDeviceSessionErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let devicesRevokeDeviceSessionBatch = Route( + name: "devices/revoke_device_session_batch", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.RevokeDeviceSessionBatchArgSerializer(), + responseSerializer: Team.RevokeDeviceSessionBatchResultSerializer(), + errorSerializer: Team.RevokeDeviceSessionBatchErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let featuresGetValues = Route( + name: "features/get_values", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.FeaturesGetValuesBatchArgSerializer(), + responseSerializer: Team.FeaturesGetValuesBatchResultSerializer(), + errorSerializer: Team.FeaturesGetValuesBatchErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getInfo = Route( + name: "get_info", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Serialization._VoidSerializer, + responseSerializer: Team.TeamGetInfoResultSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsCreate = Route( + name: "groups/create", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupCreateArgSerializer(), + responseSerializer: Team.GroupFullInfoSerializer(), + errorSerializer: Team.GroupCreateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsDelete = Route( + name: "groups/delete", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupSelectorSerializer(), + responseSerializer: Async.LaunchEmptyResultSerializer(), + errorSerializer: Team.GroupDeleteErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsGetInfo = Route( + name: "groups/get_info", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupsSelectorSerializer(), + responseSerializer: ArraySerializer(Team.GroupsGetInfoItemSerializer()), + errorSerializer: Team.GroupsGetInfoErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsJobStatusGet = Route( + name: "groups/job_status/get", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Async.PollEmptyResultSerializer(), + errorSerializer: Team.GroupsPollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsList = Route( + name: "groups/list", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupsListArgSerializer(), + responseSerializer: Team.GroupsListResultSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsListContinue = Route( + name: "groups/list/continue", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupsListContinueArgSerializer(), + responseSerializer: Team.GroupsListResultSerializer(), + errorSerializer: Team.GroupsListContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsMembersAdd = Route( + name: "groups/members/add", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupMembersAddArgSerializer(), + responseSerializer: Team.GroupMembersChangeResultSerializer(), + errorSerializer: Team.GroupMembersAddErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsMembersList = Route( + name: "groups/members/list", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupsMembersListArgSerializer(), + responseSerializer: Team.GroupsMembersListResultSerializer(), + errorSerializer: Team.GroupSelectorErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsMembersListContinue = Route( + name: "groups/members/list/continue", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupsMembersListContinueArgSerializer(), + responseSerializer: Team.GroupsMembersListResultSerializer(), + errorSerializer: Team.GroupsMembersListContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsMembersRemove = Route( + name: "groups/members/remove", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupMembersRemoveArgSerializer(), + responseSerializer: Team.GroupMembersChangeResultSerializer(), + errorSerializer: Team.GroupMembersRemoveErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsMembersSetAccessType = Route( + name: "groups/members/set_access_type", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupMembersSetAccessTypeArgSerializer(), + responseSerializer: ArraySerializer(Team.GroupsGetInfoItemSerializer()), + errorSerializer: Team.GroupMemberSetAccessTypeErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let groupsUpdate = Route( + name: "groups/update", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.GroupUpdateArgsSerializer(), + responseSerializer: Team.GroupFullInfoSerializer(), + errorSerializer: Team.GroupUpdateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let linkedAppsListMemberLinkedApps = Route( + name: "linked_apps/list_member_linked_apps", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.ListMemberAppsArgSerializer(), + responseSerializer: Team.ListMemberAppsResultSerializer(), + errorSerializer: Team.ListMemberAppsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let linkedAppsListMembersLinkedApps = Route( + name: "linked_apps/list_members_linked_apps", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.ListMembersAppsArgSerializer(), + responseSerializer: Team.ListMembersAppsResultSerializer(), + errorSerializer: Team.ListMembersAppsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let linkedAppsListTeamLinkedApps = Route( + name: "linked_apps/list_team_linked_apps", + version: 1, + namespace: "team", + deprecated: true, + argSerializer: Team.ListTeamAppsArgSerializer(), + responseSerializer: Team.ListTeamAppsResultSerializer(), + errorSerializer: Team.ListTeamAppsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let linkedAppsRevokeLinkedApp = Route( + name: "linked_apps/revoke_linked_app", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.RevokeLinkedApiAppArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Team.RevokeLinkedAppErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let linkedAppsRevokeLinkedAppBatch = Route( + name: "linked_apps/revoke_linked_app_batch", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.RevokeLinkedApiAppBatchArgSerializer(), + responseSerializer: Team.RevokeLinkedAppBatchResultSerializer(), + errorSerializer: Team.RevokeLinkedAppBatchErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let memberSpaceLimitsExcludedUsersAdd = Route( + name: "member_space_limits/excluded_users/add", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.ExcludedUsersUpdateArgSerializer(), + responseSerializer: Team.ExcludedUsersUpdateResultSerializer(), + errorSerializer: Team.ExcludedUsersUpdateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let memberSpaceLimitsExcludedUsersList = Route( + name: "member_space_limits/excluded_users/list", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.ExcludedUsersListArgSerializer(), + responseSerializer: Team.ExcludedUsersListResultSerializer(), + errorSerializer: Team.ExcludedUsersListErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let memberSpaceLimitsExcludedUsersListContinue = Route( + name: "member_space_limits/excluded_users/list/continue", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.ExcludedUsersListContinueArgSerializer(), + responseSerializer: Team.ExcludedUsersListResultSerializer(), + errorSerializer: Team.ExcludedUsersListContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let memberSpaceLimitsExcludedUsersRemove = Route( + name: "member_space_limits/excluded_users/remove", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.ExcludedUsersUpdateArgSerializer(), + responseSerializer: Team.ExcludedUsersUpdateResultSerializer(), + errorSerializer: Team.ExcludedUsersUpdateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let memberSpaceLimitsGetCustomQuota = Route( + name: "member_space_limits/get_custom_quota", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.CustomQuotaUsersArgSerializer(), + responseSerializer: ArraySerializer(Team.CustomQuotaResultSerializer()), + errorSerializer: Team.CustomQuotaErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let memberSpaceLimitsRemoveCustomQuota = Route( + name: "member_space_limits/remove_custom_quota", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.CustomQuotaUsersArgSerializer(), + responseSerializer: ArraySerializer(Team.RemoveCustomQuotaResultSerializer()), + errorSerializer: Team.CustomQuotaErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let memberSpaceLimitsSetCustomQuota = Route( + name: "member_space_limits/set_custom_quota", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.SetCustomQuotaArgSerializer(), + responseSerializer: ArraySerializer(Team.CustomQuotaResultSerializer()), + errorSerializer: Team.SetCustomQuotaErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersAdd = Route( + name: "members/add", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersAddArgSerializer(), + responseSerializer: Team.MembersAddLaunchSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersAddJobStatusGet = Route( + name: "members/add/job_status/get", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Team.MembersAddJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersGetInfo = Route( + name: "members/get_info", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersGetInfoArgsSerializer(), + responseSerializer: ArraySerializer(Team.MembersGetInfoItemSerializer()), + errorSerializer: Team.MembersGetInfoErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersList = Route( + name: "members/list", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersListArgSerializer(), + responseSerializer: Team.MembersListResultSerializer(), + errorSerializer: Team.MembersListErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersListContinue = Route( + name: "members/list/continue", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersListContinueArgSerializer(), + responseSerializer: Team.MembersListResultSerializer(), + errorSerializer: Team.MembersListContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersMoveFormerMemberFiles = Route( + name: "members/move_former_member_files", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersDataTransferArgSerializer(), + responseSerializer: Async.LaunchEmptyResultSerializer(), + errorSerializer: Team.MembersTransferFormerMembersFilesErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersMoveFormerMemberFilesJobStatusCheck = Route( + name: "members/move_former_member_files/job_status/check", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Async.PollEmptyResultSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersRecover = Route( + name: "members/recover", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersRecoverArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Team.MembersRecoverErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersRemove = Route( + name: "members/remove", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersRemoveArgSerializer(), + responseSerializer: Async.LaunchEmptyResultSerializer(), + errorSerializer: Team.MembersRemoveErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersRemoveJobStatusGet = Route( + name: "members/remove/job_status/get", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Async.PollEmptyResultSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersSendWelcomeEmail = Route( + name: "members/send_welcome_email", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.UserSelectorArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Team.MembersSendWelcomeErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersSetAdminPermissions = Route( + name: "members/set_admin_permissions", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersSetPermissionsArgSerializer(), + responseSerializer: Team.MembersSetPermissionsResultSerializer(), + errorSerializer: Team.MembersSetPermissionsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersSetProfile = Route( + name: "members/set_profile", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersSetProfileArgSerializer(), + responseSerializer: Team.TeamMemberInfoSerializer(), + errorSerializer: Team.MembersSetProfileErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersSuspend = Route( + name: "members/suspend", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersDeactivateArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Team.MembersSuspendErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let membersUnsuspend = Route( + name: "members/unsuspend", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.MembersUnsuspendArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Team.MembersUnsuspendErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let namespacesList = Route( + name: "namespaces/list", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamNamespacesListArgSerializer(), + responseSerializer: Team.TeamNamespacesListResultSerializer(), + errorSerializer: Team.TeamNamespacesListErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let namespacesListContinue = Route( + name: "namespaces/list/continue", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamNamespacesListContinueArgSerializer(), + responseSerializer: Team.TeamNamespacesListResultSerializer(), + errorSerializer: Team.TeamNamespacesListContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesTemplateAdd = Route( + name: "properties/template/add", + version: 1, + namespace: "team", + deprecated: true, + argSerializer: FileProperties.AddTemplateArgSerializer(), + responseSerializer: FileProperties.AddTemplateResultSerializer(), + errorSerializer: FileProperties.ModifyTemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesTemplateGet = Route( + name: "properties/template/get", + version: 1, + namespace: "team", + deprecated: true, + argSerializer: FileProperties.GetTemplateArgSerializer(), + responseSerializer: FileProperties.GetTemplateResultSerializer(), + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesTemplateList = Route( + name: "properties/template/list", + version: 1, + namespace: "team", + deprecated: true, + argSerializer: Serialization._VoidSerializer, + responseSerializer: FileProperties.ListTemplateResultSerializer(), + errorSerializer: FileProperties.TemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let propertiesTemplateUpdate = Route( + name: "properties/template/update", + version: 1, + namespace: "team", + deprecated: true, + argSerializer: FileProperties.UpdateTemplateArgSerializer(), + responseSerializer: FileProperties.UpdateTemplateResultSerializer(), + errorSerializer: FileProperties.ModifyTemplateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let reportsGetActivity = Route( + name: "reports/get_activity", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.DateRangeSerializer(), + responseSerializer: Team.GetActivityReportSerializer(), + errorSerializer: Team.DateRangeErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let reportsGetDevices = Route( + name: "reports/get_devices", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.DateRangeSerializer(), + responseSerializer: Team.GetDevicesReportSerializer(), + errorSerializer: Team.DateRangeErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let reportsGetMembership = Route( + name: "reports/get_membership", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.DateRangeSerializer(), + responseSerializer: Team.GetMembershipReportSerializer(), + errorSerializer: Team.DateRangeErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let reportsGetStorage = Route( + name: "reports/get_storage", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.DateRangeSerializer(), + responseSerializer: Team.GetStorageReportSerializer(), + errorSerializer: Team.DateRangeErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderActivate = Route( + name: "team_folder/activate", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamFolderIdArgSerializer(), + responseSerializer: Team.TeamFolderMetadataSerializer(), + errorSerializer: Team.TeamFolderActivateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderArchive = Route( + name: "team_folder/archive", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamFolderArchiveArgSerializer(), + responseSerializer: Team.TeamFolderArchiveLaunchSerializer(), + errorSerializer: Team.TeamFolderArchiveErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderArchiveCheck = Route( + name: "team_folder/archive/check", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Async.PollArgSerializer(), + responseSerializer: Team.TeamFolderArchiveJobStatusSerializer(), + errorSerializer: Async.PollErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderCreate = Route( + name: "team_folder/create", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamFolderCreateArgSerializer(), + responseSerializer: Team.TeamFolderMetadataSerializer(), + errorSerializer: Team.TeamFolderCreateErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderGetInfo = Route( + name: "team_folder/get_info", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamFolderIdListArgSerializer(), + responseSerializer: ArraySerializer(Team.TeamFolderGetInfoItemSerializer()), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderList = Route( + name: "team_folder/list", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamFolderListArgSerializer(), + responseSerializer: Team.TeamFolderListResultSerializer(), + errorSerializer: Team.TeamFolderListErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderListContinue = Route( + name: "team_folder/list/continue", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamFolderListContinueArgSerializer(), + responseSerializer: Team.TeamFolderListResultSerializer(), + errorSerializer: Team.TeamFolderListContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderPermanentlyDelete = Route( + name: "team_folder/permanently_delete", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamFolderIdArgSerializer(), + responseSerializer: Serialization._VoidSerializer, + errorSerializer: Team.TeamFolderPermanentlyDeleteErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderRename = Route( + name: "team_folder/rename", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamFolderRenameArgSerializer(), + responseSerializer: Team.TeamFolderMetadataSerializer(), + errorSerializer: Team.TeamFolderRenameErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let teamFolderUpdateSyncSettings = Route( + name: "team_folder/update_sync_settings", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Team.TeamFolderUpdateSyncSettingsArgSerializer(), + responseSerializer: Team.TeamFolderMetadataSerializer(), + errorSerializer: Team.TeamFolderUpdateSyncSettingsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let tokenGetAuthenticatedAdmin = Route( + name: "token/get_authenticated_admin", + version: 1, + namespace: "team", + deprecated: false, + argSerializer: Serialization._VoidSerializer, + responseSerializer: Team.TokenGetAuthenticatedAdminResultSerializer(), + errorSerializer: Team.TokenGetAuthenticatedAdminErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamCommon.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamCommon.swift new file mode 100644 index 0000000..82dea58 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamCommon.swift @@ -0,0 +1,270 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the team_common namespace +open class TeamCommon { + /// The group type determines how a group is managed. + public enum GroupManagementType: CustomStringConvertible { + /// A group which is managed by selected users. + case userManaged + /// A group which is managed by team admins only. + case companyManaged + /// A group which is managed automatically by Dropbox. + case systemManaged + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupManagementTypeSerializer().serialize(self)))" + } + } + open class GroupManagementTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupManagementType) -> JSON { + switch value { + case .userManaged: + var d = [String: JSON]() + d[".tag"] = .str("user_managed") + return .dictionary(d) + case .companyManaged: + var d = [String: JSON]() + d[".tag"] = .str("company_managed") + return .dictionary(d) + case .systemManaged: + var d = [String: JSON]() + d[".tag"] = .str("system_managed") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupManagementType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user_managed": + return GroupManagementType.userManaged + case "company_managed": + return GroupManagementType.companyManaged + case "system_managed": + return GroupManagementType.systemManaged + case "other": + return GroupManagementType.other + default: + return GroupManagementType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information about a group. + open class GroupSummary: CustomStringConvertible { + /// (no description) + public let groupName: String + /// (no description) + public let groupId: String + /// External ID of group. This is an arbitrary ID that an admin can attach to a group. + public let groupExternalId: String? + /// The number of members in the group. + public let memberCount: UInt32? + /// Who is allowed to manage the group. + public let groupManagementType: TeamCommon.GroupManagementType + public init(groupName: String, groupId: String, groupManagementType: TeamCommon.GroupManagementType, groupExternalId: String? = nil, memberCount: UInt32? = nil) { + stringValidator()(groupName) + self.groupName = groupName + stringValidator()(groupId) + self.groupId = groupId + nullableValidator(stringValidator())(groupExternalId) + self.groupExternalId = groupExternalId + nullableValidator(comparableValidator())(memberCount) + self.memberCount = memberCount + self.groupManagementType = groupManagementType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupSummarySerializer().serialize(self)))" + } + } + open class GroupSummarySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupSummary) -> JSON { + let output = [ + "group_name": Serialization._StringSerializer.serialize(value.groupName), + "group_id": Serialization._StringSerializer.serialize(value.groupId), + "group_management_type": TeamCommon.GroupManagementTypeSerializer().serialize(value.groupManagementType), + "group_external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.groupExternalId), + "member_count": NullableSerializer(Serialization._UInt32Serializer).serialize(value.memberCount), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupSummary { + switch json { + case .dictionary(let dict): + let groupName = Serialization._StringSerializer.deserialize(dict["group_name"] ?? .null) + let groupId = Serialization._StringSerializer.deserialize(dict["group_id"] ?? .null) + let groupManagementType = TeamCommon.GroupManagementTypeSerializer().deserialize(dict["group_management_type"] ?? .null) + let groupExternalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["group_external_id"] ?? .null) + let memberCount = NullableSerializer(Serialization._UInt32Serializer).deserialize(dict["member_count"] ?? .null) + return GroupSummary(groupName: groupName, groupId: groupId, groupManagementType: groupManagementType, groupExternalId: groupExternalId, memberCount: memberCount) + default: + fatalError("Type error deserializing") + } + } + } + + /// The group type determines how a group is created and managed. + public enum GroupType: CustomStringConvertible { + /// A group to which team members are automatically added. Applicable to team folders + /// https://www.dropbox.com/help/986 only. + case team + /// A group is created and managed by a user. + case userManaged + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupTypeSerializer().serialize(self)))" + } + } + open class GroupTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupType) -> JSON { + switch value { + case .team: + var d = [String: JSON]() + d[".tag"] = .str("team") + return .dictionary(d) + case .userManaged: + var d = [String: JSON]() + d[".tag"] = .str("user_managed") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team": + return GroupType.team + case "user_managed": + return GroupType.userManaged + case "other": + return GroupType.other + default: + return GroupType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The type of the space limit imposed on a team member. + public enum MemberSpaceLimitType: CustomStringConvertible { + /// The team member does not have imposed space limit. + case off + /// The team member has soft imposed space limit - the limit is used for display and for notifications. + case alertOnly + /// The team member has hard imposed space limit - Dropbox file sync will stop after the limit is reached. + case stopSync + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitTypeSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitType) -> JSON { + switch value { + case .off: + var d = [String: JSON]() + d[".tag"] = .str("off") + return .dictionary(d) + case .alertOnly: + var d = [String: JSON]() + d[".tag"] = .str("alert_only") + return .dictionary(d) + case .stopSync: + var d = [String: JSON]() + d[".tag"] = .str("stop_sync") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "off": + return MemberSpaceLimitType.off + case "alert_only": + return MemberSpaceLimitType.alertOnly + case "stop_sync": + return MemberSpaceLimitType.stopSync + case "other": + return MemberSpaceLimitType.other + default: + return MemberSpaceLimitType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Time range. + open class TimeRange: CustomStringConvertible { + /// Optional starting time (inclusive). + public let startTime: Date? + /// Optional ending time (exclusive). + public let endTime: Date? + public init(startTime: Date? = nil, endTime: Date? = nil) { + self.startTime = startTime + self.endTime = endTime + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TimeRangeSerializer().serialize(self)))" + } + } + open class TimeRangeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TimeRange) -> JSON { + let output = [ + "start_time": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.startTime), + "end_time": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.endTime), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TimeRange { + switch json { + case .dictionary(let dict): + let startTime = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["start_time"] ?? .null) + let endTime = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["end_time"] ?? .null) + return TimeRange(startTime: startTime, endTime: endTime) + default: + fatalError("Type error deserializing") + } + } + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamLog.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamLog.swift new file mode 100644 index 0000000..c3ee4e8 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamLog.swift @@ -0,0 +1,30735 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the team_log namespace +open class TeamLog { + /// Indicates the method in which the action was performed. + public enum AccessMethodLogInfo: CustomStringConvertible { + /// End user session details. + case endUser(TeamLog.SessionLogInfo) + /// Sign in as session details. + case signInAs(TeamLog.WebSessionLogInfo) + /// Content manager session details. + case contentManager(TeamLog.WebSessionLogInfo) + /// Admin console session details. + case adminConsole(TeamLog.WebSessionLogInfo) + /// Api session details. + case api(TeamLog.ApiSessionLogInfo) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccessMethodLogInfoSerializer().serialize(self)))" + } + } + open class AccessMethodLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccessMethodLogInfo) -> JSON { + switch value { + case .endUser(let arg): + var d = ["end_user": TeamLog.SessionLogInfoSerializer().serialize(arg)] + d[".tag"] = .str("end_user") + return .dictionary(d) + case .signInAs(let arg): + var d = Serialization.getFields(TeamLog.WebSessionLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("sign_in_as") + return .dictionary(d) + case .contentManager(let arg): + var d = Serialization.getFields(TeamLog.WebSessionLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("content_manager") + return .dictionary(d) + case .adminConsole(let arg): + var d = Serialization.getFields(TeamLog.WebSessionLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("admin_console") + return .dictionary(d) + case .api(let arg): + var d = Serialization.getFields(TeamLog.ApiSessionLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("api") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AccessMethodLogInfo { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "end_user": + let v = TeamLog.SessionLogInfoSerializer().deserialize(d["end_user"] ?? .null) + return AccessMethodLogInfo.endUser(v) + case "sign_in_as": + let v = TeamLog.WebSessionLogInfoSerializer().deserialize(json) + return AccessMethodLogInfo.signInAs(v) + case "content_manager": + let v = TeamLog.WebSessionLogInfoSerializer().deserialize(json) + return AccessMethodLogInfo.contentManager(v) + case "admin_console": + let v = TeamLog.WebSessionLogInfoSerializer().deserialize(json) + return AccessMethodLogInfo.adminConsole(v) + case "api": + let v = TeamLog.ApiSessionLogInfoSerializer().deserialize(json) + return AccessMethodLogInfo.api(v) + case "other": + return AccessMethodLogInfo.other + default: + return AccessMethodLogInfo.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The AccountCaptureAvailability union + public enum AccountCaptureAvailability: CustomStringConvertible { + /// An unspecified error. + case unavailable + /// An unspecified error. + case available + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureAvailabilitySerializer().serialize(self)))" + } + } + open class AccountCaptureAvailabilitySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureAvailability) -> JSON { + switch value { + case .unavailable: + var d = [String: JSON]() + d[".tag"] = .str("unavailable") + return .dictionary(d) + case .available: + var d = [String: JSON]() + d[".tag"] = .str("available") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AccountCaptureAvailability { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "unavailable": + return AccountCaptureAvailability.unavailable + case "available": + return AccountCaptureAvailability.available + case "other": + return AccountCaptureAvailability.other + default: + return AccountCaptureAvailability.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Granted/revoked option to enable account capture on team domains. + open class AccountCaptureChangeAvailabilityDetails: CustomStringConvertible { + /// New account capture availabilty value. + public let newValue: TeamLog.AccountCaptureAvailability + /// Previous account capture availabilty value. Might be missing due to historical data gap. + public let previousValue: TeamLog.AccountCaptureAvailability? + public init(newValue: TeamLog.AccountCaptureAvailability, previousValue: TeamLog.AccountCaptureAvailability? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureChangeAvailabilityDetailsSerializer().serialize(self)))" + } + } + open class AccountCaptureChangeAvailabilityDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureChangeAvailabilityDetails) -> JSON { + let output = [ + "new_value": TeamLog.AccountCaptureAvailabilitySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.AccountCaptureAvailabilitySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureChangeAvailabilityDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.AccountCaptureAvailabilitySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.AccountCaptureAvailabilitySerializer()).deserialize(dict["previous_value"] ?? .null) + return AccountCaptureChangeAvailabilityDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AccountCaptureChangeAvailabilityType struct + open class AccountCaptureChangeAvailabilityType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureChangeAvailabilityTypeSerializer().serialize(self)))" + } + } + open class AccountCaptureChangeAvailabilityTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureChangeAvailabilityType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureChangeAvailabilityType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AccountCaptureChangeAvailabilityType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed account capture setting on team domain. + open class AccountCaptureChangePolicyDetails: CustomStringConvertible { + /// New account capture policy. + public let newValue: TeamLog.AccountCapturePolicy + /// Previous account capture policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.AccountCapturePolicy? + public init(newValue: TeamLog.AccountCapturePolicy, previousValue: TeamLog.AccountCapturePolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class AccountCaptureChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.AccountCapturePolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.AccountCapturePolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.AccountCapturePolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.AccountCapturePolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return AccountCaptureChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AccountCaptureChangePolicyType struct + open class AccountCaptureChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureChangePolicyTypeSerializer().serialize(self)))" + } + } + open class AccountCaptureChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AccountCaptureChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Account-captured user migrated account to team. + open class AccountCaptureMigrateAccountDetails: CustomStringConvertible { + /// Domain name. + public let domainName: String + public init(domainName: String) { + stringValidator()(domainName) + self.domainName = domainName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureMigrateAccountDetailsSerializer().serialize(self)))" + } + } + open class AccountCaptureMigrateAccountDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureMigrateAccountDetails) -> JSON { + let output = [ + "domain_name": Serialization._StringSerializer.serialize(value.domainName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureMigrateAccountDetails { + switch json { + case .dictionary(let dict): + let domainName = Serialization._StringSerializer.deserialize(dict["domain_name"] ?? .null) + return AccountCaptureMigrateAccountDetails(domainName: domainName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AccountCaptureMigrateAccountType struct + open class AccountCaptureMigrateAccountType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureMigrateAccountTypeSerializer().serialize(self)))" + } + } + open class AccountCaptureMigrateAccountTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureMigrateAccountType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureMigrateAccountType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AccountCaptureMigrateAccountType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Sent proactive account capture email to all unmanaged members. + open class AccountCaptureNotificationEmailsSentDetails: CustomStringConvertible { + /// Domain name. + public let domainName: String + public init(domainName: String) { + stringValidator()(domainName) + self.domainName = domainName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureNotificationEmailsSentDetailsSerializer().serialize(self)))" + } + } + open class AccountCaptureNotificationEmailsSentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureNotificationEmailsSentDetails) -> JSON { + let output = [ + "domain_name": Serialization._StringSerializer.serialize(value.domainName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureNotificationEmailsSentDetails { + switch json { + case .dictionary(let dict): + let domainName = Serialization._StringSerializer.deserialize(dict["domain_name"] ?? .null) + return AccountCaptureNotificationEmailsSentDetails(domainName: domainName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AccountCaptureNotificationEmailsSentType struct + open class AccountCaptureNotificationEmailsSentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureNotificationEmailsSentTypeSerializer().serialize(self)))" + } + } + open class AccountCaptureNotificationEmailsSentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureNotificationEmailsSentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureNotificationEmailsSentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AccountCaptureNotificationEmailsSentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AccountCapturePolicy union + public enum AccountCapturePolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case invitedUsers + /// An unspecified error. + case allUsers + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCapturePolicySerializer().serialize(self)))" + } + } + open class AccountCapturePolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCapturePolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .invitedUsers: + var d = [String: JSON]() + d[".tag"] = .str("invited_users") + return .dictionary(d) + case .allUsers: + var d = [String: JSON]() + d[".tag"] = .str("all_users") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AccountCapturePolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return AccountCapturePolicy.disabled + case "invited_users": + return AccountCapturePolicy.invitedUsers + case "all_users": + return AccountCapturePolicy.allUsers + case "other": + return AccountCapturePolicy.other + default: + return AccountCapturePolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Account-captured user changed account email to personal email. + open class AccountCaptureRelinquishAccountDetails: CustomStringConvertible { + /// Domain name. + public let domainName: String + public init(domainName: String) { + stringValidator()(domainName) + self.domainName = domainName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureRelinquishAccountDetailsSerializer().serialize(self)))" + } + } + open class AccountCaptureRelinquishAccountDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureRelinquishAccountDetails) -> JSON { + let output = [ + "domain_name": Serialization._StringSerializer.serialize(value.domainName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureRelinquishAccountDetails { + switch json { + case .dictionary(let dict): + let domainName = Serialization._StringSerializer.deserialize(dict["domain_name"] ?? .null) + return AccountCaptureRelinquishAccountDetails(domainName: domainName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AccountCaptureRelinquishAccountType struct + open class AccountCaptureRelinquishAccountType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountCaptureRelinquishAccountTypeSerializer().serialize(self)))" + } + } + open class AccountCaptureRelinquishAccountTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountCaptureRelinquishAccountType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AccountCaptureRelinquishAccountType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AccountCaptureRelinquishAccountType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Additional information indicating the action taken that caused status change. + public enum ActionDetails: CustomStringConvertible { + /// Additional information relevant when a new member joins the team. + case teamJoinDetails(TeamLog.JoinTeamDetails) + /// Define how the user was removed from the team. + case removeAction(TeamLog.MemberRemoveActionType) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ActionDetailsSerializer().serialize(self)))" + } + } + open class ActionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ActionDetails) -> JSON { + switch value { + case .teamJoinDetails(let arg): + var d = Serialization.getFields(TeamLog.JoinTeamDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_join_details") + return .dictionary(d) + case .removeAction(let arg): + var d = ["remove_action": TeamLog.MemberRemoveActionTypeSerializer().serialize(arg)] + d[".tag"] = .str("remove_action") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ActionDetails { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team_join_details": + let v = TeamLog.JoinTeamDetailsSerializer().deserialize(json) + return ActionDetails.teamJoinDetails(v) + case "remove_action": + let v = TeamLog.MemberRemoveActionTypeSerializer().deserialize(d["remove_action"] ?? .null) + return ActionDetails.removeAction(v) + case "other": + return ActionDetails.other + default: + return ActionDetails.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The entity who performed the action. + public enum ActorLogInfo: CustomStringConvertible { + /// The user who did the action. + case user(TeamLog.UserLogInfo) + /// The admin who did the action. + case admin(TeamLog.UserLogInfo) + /// The application who did the action. + case app(TeamLog.AppLogInfo) + /// Action done by reseller. + case reseller(TeamLog.ResellerLogInfo) + /// Action done by Dropbox. + case dropbox + /// Anonymous actor. + case anonymous + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ActorLogInfoSerializer().serialize(self)))" + } + } + open class ActorLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ActorLogInfo) -> JSON { + switch value { + case .user(let arg): + var d = ["user": TeamLog.UserLogInfoSerializer().serialize(arg)] + d[".tag"] = .str("user") + return .dictionary(d) + case .admin(let arg): + var d = ["admin": TeamLog.UserLogInfoSerializer().serialize(arg)] + d[".tag"] = .str("admin") + return .dictionary(d) + case .app(let arg): + var d = ["app": TeamLog.AppLogInfoSerializer().serialize(arg)] + d[".tag"] = .str("app") + return .dictionary(d) + case .reseller(let arg): + var d = Serialization.getFields(TeamLog.ResellerLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("reseller") + return .dictionary(d) + case .dropbox: + var d = [String: JSON]() + d[".tag"] = .str("dropbox") + return .dictionary(d) + case .anonymous: + var d = [String: JSON]() + d[".tag"] = .str("anonymous") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ActorLogInfo { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user": + let v = TeamLog.UserLogInfoSerializer().deserialize(d["user"] ?? .null) + return ActorLogInfo.user(v) + case "admin": + let v = TeamLog.UserLogInfoSerializer().deserialize(d["admin"] ?? .null) + return ActorLogInfo.admin(v) + case "app": + let v = TeamLog.AppLogInfoSerializer().deserialize(d["app"] ?? .null) + return ActorLogInfo.app(v) + case "reseller": + let v = TeamLog.ResellerLogInfoSerializer().deserialize(json) + return ActorLogInfo.reseller(v) + case "dropbox": + return ActorLogInfo.dropbox + case "anonymous": + return ActorLogInfo.anonymous + case "other": + return ActorLogInfo.other + default: + return ActorLogInfo.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The AdminRole union + public enum AdminRole: CustomStringConvertible { + /// An unspecified error. + case teamAdmin + /// An unspecified error. + case userManagementAdmin + /// An unspecified error. + case supportAdmin + /// An unspecified error. + case limitedAdmin + /// An unspecified error. + case memberOnly + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AdminRoleSerializer().serialize(self)))" + } + } + open class AdminRoleSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AdminRole) -> JSON { + switch value { + case .teamAdmin: + var d = [String: JSON]() + d[".tag"] = .str("team_admin") + return .dictionary(d) + case .userManagementAdmin: + var d = [String: JSON]() + d[".tag"] = .str("user_management_admin") + return .dictionary(d) + case .supportAdmin: + var d = [String: JSON]() + d[".tag"] = .str("support_admin") + return .dictionary(d) + case .limitedAdmin: + var d = [String: JSON]() + d[".tag"] = .str("limited_admin") + return .dictionary(d) + case .memberOnly: + var d = [String: JSON]() + d[".tag"] = .str("member_only") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AdminRole { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team_admin": + return AdminRole.teamAdmin + case "user_management_admin": + return AdminRole.userManagementAdmin + case "support_admin": + return AdminRole.supportAdmin + case "limited_admin": + return AdminRole.limitedAdmin + case "member_only": + return AdminRole.memberOnly + case "other": + return AdminRole.other + default: + return AdminRole.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Disabled downloads. + open class AllowDownloadDisabledDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AllowDownloadDisabledDetailsSerializer().serialize(self)))" + } + } + open class AllowDownloadDisabledDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AllowDownloadDisabledDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AllowDownloadDisabledDetails { + switch json { + case .dictionary(_): + return AllowDownloadDisabledDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The AllowDownloadDisabledType struct + open class AllowDownloadDisabledType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AllowDownloadDisabledTypeSerializer().serialize(self)))" + } + } + open class AllowDownloadDisabledTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AllowDownloadDisabledType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AllowDownloadDisabledType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AllowDownloadDisabledType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled downloads. + open class AllowDownloadEnabledDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AllowDownloadEnabledDetailsSerializer().serialize(self)))" + } + } + open class AllowDownloadEnabledDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AllowDownloadEnabledDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AllowDownloadEnabledDetails { + switch json { + case .dictionary(_): + return AllowDownloadEnabledDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The AllowDownloadEnabledType struct + open class AllowDownloadEnabledType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AllowDownloadEnabledTypeSerializer().serialize(self)))" + } + } + open class AllowDownloadEnabledTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AllowDownloadEnabledType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AllowDownloadEnabledType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AllowDownloadEnabledType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Api session. + open class ApiSessionLogInfo: CustomStringConvertible { + /// Api request ID. + public let requestId: String + public init(requestId: String) { + stringValidator()(requestId) + self.requestId = requestId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ApiSessionLogInfoSerializer().serialize(self)))" + } + } + open class ApiSessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ApiSessionLogInfo) -> JSON { + let output = [ + "request_id": Serialization._StringSerializer.serialize(value.requestId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ApiSessionLogInfo { + switch json { + case .dictionary(let dict): + let requestId = Serialization._StringSerializer.deserialize(dict["request_id"] ?? .null) + return ApiSessionLogInfo(requestId: requestId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Linked app for team. + open class AppLinkTeamDetails: CustomStringConvertible { + /// Relevant application details. + public let appInfo: TeamLog.AppLogInfo + public init(appInfo: TeamLog.AppLogInfo) { + self.appInfo = appInfo + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AppLinkTeamDetailsSerializer().serialize(self)))" + } + } + open class AppLinkTeamDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AppLinkTeamDetails) -> JSON { + let output = [ + "app_info": TeamLog.AppLogInfoSerializer().serialize(value.appInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AppLinkTeamDetails { + switch json { + case .dictionary(let dict): + let appInfo = TeamLog.AppLogInfoSerializer().deserialize(dict["app_info"] ?? .null) + return AppLinkTeamDetails(appInfo: appInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AppLinkTeamType struct + open class AppLinkTeamType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AppLinkTeamTypeSerializer().serialize(self)))" + } + } + open class AppLinkTeamTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AppLinkTeamType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AppLinkTeamType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AppLinkTeamType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Linked app for member. + open class AppLinkUserDetails: CustomStringConvertible { + /// Relevant application details. + public let appInfo: TeamLog.AppLogInfo + public init(appInfo: TeamLog.AppLogInfo) { + self.appInfo = appInfo + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AppLinkUserDetailsSerializer().serialize(self)))" + } + } + open class AppLinkUserDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AppLinkUserDetails) -> JSON { + let output = [ + "app_info": TeamLog.AppLogInfoSerializer().serialize(value.appInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AppLinkUserDetails { + switch json { + case .dictionary(let dict): + let appInfo = TeamLog.AppLogInfoSerializer().deserialize(dict["app_info"] ?? .null) + return AppLinkUserDetails(appInfo: appInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AppLinkUserType struct + open class AppLinkUserType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AppLinkUserTypeSerializer().serialize(self)))" + } + } + open class AppLinkUserTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AppLinkUserType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AppLinkUserType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AppLinkUserType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// App's logged information. + open class AppLogInfo: CustomStringConvertible { + /// App unique ID. Might be missing due to historical data gap. + public let appId: String? + /// App display name. Might be missing due to historical data gap. + public let displayName: String? + public init(appId: String? = nil, displayName: String? = nil) { + nullableValidator(stringValidator())(appId) + self.appId = appId + nullableValidator(stringValidator())(displayName) + self.displayName = displayName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AppLogInfoSerializer().serialize(self)))" + } + } + open class AppLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AppLogInfo) -> JSON { + var output = [ + "app_id": NullableSerializer(Serialization._StringSerializer).serialize(value.appId), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + ] + switch value { + case let userOrTeamLinkedApp as TeamLog.UserOrTeamLinkedAppLogInfo: + for (k, v) in Serialization.getFields(TeamLog.UserOrTeamLinkedAppLogInfoSerializer().serialize(userOrTeamLinkedApp)) { + output[k] = v + } + output[".tag"] = .str("user_or_team_linked_app") + case let userLinkedApp as TeamLog.UserLinkedAppLogInfo: + for (k, v) in Serialization.getFields(TeamLog.UserLinkedAppLogInfoSerializer().serialize(userLinkedApp)) { + output[k] = v + } + output[".tag"] = .str("user_linked_app") + case let teamLinkedApp as TeamLog.TeamLinkedAppLogInfo: + for (k, v) in Serialization.getFields(TeamLog.TeamLinkedAppLogInfoSerializer().serialize(teamLinkedApp)) { + output[k] = v + } + output[".tag"] = .str("team_linked_app") + default: fatalError("Tried to serialize unexpected subtype") + } + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AppLogInfo { + switch json { + case .dictionary(let dict): + let tag = Serialization.getTag(dict) + switch tag { + case "user_or_team_linked_app": + return TeamLog.UserOrTeamLinkedAppLogInfoSerializer().deserialize(json) + case "user_linked_app": + return TeamLog.UserLinkedAppLogInfoSerializer().deserialize(json) + case "team_linked_app": + return TeamLog.TeamLinkedAppLogInfoSerializer().deserialize(json) + default: + let appId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["app_id"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + return AppLogInfo(appId: appId, displayName: displayName) + } + default: + fatalError("Type error deserializing") + } + } + } + + /// Unlinked app for team. + open class AppUnlinkTeamDetails: CustomStringConvertible { + /// Relevant application details. + public let appInfo: TeamLog.AppLogInfo + public init(appInfo: TeamLog.AppLogInfo) { + self.appInfo = appInfo + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AppUnlinkTeamDetailsSerializer().serialize(self)))" + } + } + open class AppUnlinkTeamDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AppUnlinkTeamDetails) -> JSON { + let output = [ + "app_info": TeamLog.AppLogInfoSerializer().serialize(value.appInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AppUnlinkTeamDetails { + switch json { + case .dictionary(let dict): + let appInfo = TeamLog.AppLogInfoSerializer().deserialize(dict["app_info"] ?? .null) + return AppUnlinkTeamDetails(appInfo: appInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AppUnlinkTeamType struct + open class AppUnlinkTeamType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AppUnlinkTeamTypeSerializer().serialize(self)))" + } + } + open class AppUnlinkTeamTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AppUnlinkTeamType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AppUnlinkTeamType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AppUnlinkTeamType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Unlinked app for member. + open class AppUnlinkUserDetails: CustomStringConvertible { + /// Relevant application details. + public let appInfo: TeamLog.AppLogInfo + public init(appInfo: TeamLog.AppLogInfo) { + self.appInfo = appInfo + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AppUnlinkUserDetailsSerializer().serialize(self)))" + } + } + open class AppUnlinkUserDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AppUnlinkUserDetails) -> JSON { + let output = [ + "app_info": TeamLog.AppLogInfoSerializer().serialize(value.appInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AppUnlinkUserDetails { + switch json { + case .dictionary(let dict): + let appInfo = TeamLog.AppLogInfoSerializer().deserialize(dict["app_info"] ?? .null) + return AppUnlinkUserDetails(appInfo: appInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// The AppUnlinkUserType struct + open class AppUnlinkUserType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AppUnlinkUserTypeSerializer().serialize(self)))" + } + } + open class AppUnlinkUserTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AppUnlinkUserType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> AppUnlinkUserType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return AppUnlinkUserType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Asset details. + public enum AssetLogInfo: CustomStringConvertible { + /// File's details. + case file(TeamLog.FileLogInfo) + /// Folder's details. + case folder(TeamLog.FolderLogInfo) + /// Paper docuement's details. + case paperDocument(TeamLog.PaperDocumentLogInfo) + /// Paper folder's details. + case paperFolder(TeamLog.PaperFolderLogInfo) + /// Showcase document's details. + case showcaseDocument(TeamLog.ShowcaseDocumentLogInfo) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AssetLogInfoSerializer().serialize(self)))" + } + } + open class AssetLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AssetLogInfo) -> JSON { + switch value { + case .file(let arg): + var d = Serialization.getFields(TeamLog.FileLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("file") + return .dictionary(d) + case .folder(let arg): + var d = Serialization.getFields(TeamLog.FolderLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("folder") + return .dictionary(d) + case .paperDocument(let arg): + var d = Serialization.getFields(TeamLog.PaperDocumentLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("paper_document") + return .dictionary(d) + case .paperFolder(let arg): + var d = Serialization.getFields(TeamLog.PaperFolderLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("paper_folder") + return .dictionary(d) + case .showcaseDocument(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseDocumentLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("showcase_document") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AssetLogInfo { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "file": + let v = TeamLog.FileLogInfoSerializer().deserialize(json) + return AssetLogInfo.file(v) + case "folder": + let v = TeamLog.FolderLogInfoSerializer().deserialize(json) + return AssetLogInfo.folder(v) + case "paper_document": + let v = TeamLog.PaperDocumentLogInfoSerializer().deserialize(json) + return AssetLogInfo.paperDocument(v) + case "paper_folder": + let v = TeamLog.PaperFolderLogInfoSerializer().deserialize(json) + return AssetLogInfo.paperFolder(v) + case "showcase_document": + let v = TeamLog.ShowcaseDocumentLogInfoSerializer().deserialize(json) + return AssetLogInfo.showcaseDocument(v) + case "other": + return AssetLogInfo.other + default: + return AssetLogInfo.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Policy for controlling if team members can activate camera uploads + public enum CameraUploadsPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CameraUploadsPolicySerializer().serialize(self)))" + } + } + open class CameraUploadsPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CameraUploadsPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CameraUploadsPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return CameraUploadsPolicy.disabled + case "enabled": + return CameraUploadsPolicy.enabled + case "other": + return CameraUploadsPolicy.other + default: + return CameraUploadsPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Changed camera uploads setting for team. + open class CameraUploadsPolicyChangedDetails: CustomStringConvertible { + /// New camera uploads setting. + public let newValue: TeamLog.CameraUploadsPolicy + /// Previous camera uploads setting. + public let previousValue: TeamLog.CameraUploadsPolicy + public init(newValue: TeamLog.CameraUploadsPolicy, previousValue: TeamLog.CameraUploadsPolicy) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CameraUploadsPolicyChangedDetailsSerializer().serialize(self)))" + } + } + open class CameraUploadsPolicyChangedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CameraUploadsPolicyChangedDetails) -> JSON { + let output = [ + "new_value": TeamLog.CameraUploadsPolicySerializer().serialize(value.newValue), + "previous_value": TeamLog.CameraUploadsPolicySerializer().serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CameraUploadsPolicyChangedDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.CameraUploadsPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = TeamLog.CameraUploadsPolicySerializer().deserialize(dict["previous_value"] ?? .null) + return CameraUploadsPolicyChangedDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CameraUploadsPolicyChangedType struct + open class CameraUploadsPolicyChangedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CameraUploadsPolicyChangedTypeSerializer().serialize(self)))" + } + } + open class CameraUploadsPolicyChangedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CameraUploadsPolicyChangedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CameraUploadsPolicyChangedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return CameraUploadsPolicyChangedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Certificate details. + open class Certificate: CustomStringConvertible { + /// Certificate subject. + public let subject: String + /// Certificate issuer. + public let issuer: String + /// Certificate issue date. + public let issueDate: String + /// Certificate expiration date. + public let expirationDate: String + /// Certificate serial number. + public let serialNumber: String + /// Certificate sha1 fingerprint. + public let sha1Fingerprint: String + /// Certificate common name. + public let commonName: String? + public init(subject: String, issuer: String, issueDate: String, expirationDate: String, serialNumber: String, sha1Fingerprint: String, commonName: String? = nil) { + stringValidator()(subject) + self.subject = subject + stringValidator()(issuer) + self.issuer = issuer + stringValidator()(issueDate) + self.issueDate = issueDate + stringValidator()(expirationDate) + self.expirationDate = expirationDate + stringValidator()(serialNumber) + self.serialNumber = serialNumber + stringValidator()(sha1Fingerprint) + self.sha1Fingerprint = sha1Fingerprint + nullableValidator(stringValidator())(commonName) + self.commonName = commonName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CertificateSerializer().serialize(self)))" + } + } + open class CertificateSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Certificate) -> JSON { + let output = [ + "subject": Serialization._StringSerializer.serialize(value.subject), + "issuer": Serialization._StringSerializer.serialize(value.issuer), + "issue_date": Serialization._StringSerializer.serialize(value.issueDate), + "expiration_date": Serialization._StringSerializer.serialize(value.expirationDate), + "serial_number": Serialization._StringSerializer.serialize(value.serialNumber), + "sha1_fingerprint": Serialization._StringSerializer.serialize(value.sha1Fingerprint), + "common_name": NullableSerializer(Serialization._StringSerializer).serialize(value.commonName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> Certificate { + switch json { + case .dictionary(let dict): + let subject = Serialization._StringSerializer.deserialize(dict["subject"] ?? .null) + let issuer = Serialization._StringSerializer.deserialize(dict["issuer"] ?? .null) + let issueDate = Serialization._StringSerializer.deserialize(dict["issue_date"] ?? .null) + let expirationDate = Serialization._StringSerializer.deserialize(dict["expiration_date"] ?? .null) + let serialNumber = Serialization._StringSerializer.deserialize(dict["serial_number"] ?? .null) + let sha1Fingerprint = Serialization._StringSerializer.deserialize(dict["sha1_fingerprint"] ?? .null) + let commonName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["common_name"] ?? .null) + return Certificate(subject: subject, issuer: issuer, issueDate: issueDate, expirationDate: expirationDate, serialNumber: serialNumber, sha1Fingerprint: sha1Fingerprint, commonName: commonName) + default: + fatalError("Type error deserializing") + } + } + } + + /// Shared album. + open class CollectionShareDetails: CustomStringConvertible { + /// Album name. + public let albumName: String + public init(albumName: String) { + stringValidator()(albumName) + self.albumName = albumName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CollectionShareDetailsSerializer().serialize(self)))" + } + } + open class CollectionShareDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CollectionShareDetails) -> JSON { + let output = [ + "album_name": Serialization._StringSerializer.serialize(value.albumName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CollectionShareDetails { + switch json { + case .dictionary(let dict): + let albumName = Serialization._StringSerializer.deserialize(dict["album_name"] ?? .null) + return CollectionShareDetails(albumName: albumName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The CollectionShareType struct + open class CollectionShareType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CollectionShareTypeSerializer().serialize(self)))" + } + } + open class CollectionShareTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CollectionShareType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CollectionShareType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return CollectionShareType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Policy for pemanent content deletion + public enum ContentPermanentDeletePolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ContentPermanentDeletePolicySerializer().serialize(self)))" + } + } + open class ContentPermanentDeletePolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ContentPermanentDeletePolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ContentPermanentDeletePolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return ContentPermanentDeletePolicy.disabled + case "enabled": + return ContentPermanentDeletePolicy.enabled + case "other": + return ContentPermanentDeletePolicy.other + default: + return ContentPermanentDeletePolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The primary entity on which the action was done. + public enum ContextLogInfo: CustomStringConvertible { + /// Action was done on behalf of a team member. + case teamMember(TeamLog.TeamMemberLogInfo) + /// Action was done on behalf of a non team member. + case nonTeamMember(TeamLog.NonTeamMemberLogInfo) + /// Anonymous context. + case anonymous + /// Action was done on behalf of the team. + case team + /// Action was done on behalf of a trusted non team member. + case trustedNonTeamMember(TeamLog.TrustedNonTeamMemberLogInfo) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ContextLogInfoSerializer().serialize(self)))" + } + } + open class ContextLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ContextLogInfo) -> JSON { + switch value { + case .teamMember(let arg): + var d = Serialization.getFields(TeamLog.TeamMemberLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("team_member") + return .dictionary(d) + case .nonTeamMember(let arg): + var d = Serialization.getFields(TeamLog.NonTeamMemberLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("non_team_member") + return .dictionary(d) + case .anonymous: + var d = [String: JSON]() + d[".tag"] = .str("anonymous") + return .dictionary(d) + case .team: + var d = [String: JSON]() + d[".tag"] = .str("team") + return .dictionary(d) + case .trustedNonTeamMember(let arg): + var d = Serialization.getFields(TeamLog.TrustedNonTeamMemberLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("trusted_non_team_member") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ContextLogInfo { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team_member": + let v = TeamLog.TeamMemberLogInfoSerializer().deserialize(json) + return ContextLogInfo.teamMember(v) + case "non_team_member": + let v = TeamLog.NonTeamMemberLogInfoSerializer().deserialize(json) + return ContextLogInfo.nonTeamMember(v) + case "anonymous": + return ContextLogInfo.anonymous + case "team": + return ContextLogInfo.team + case "trusted_non_team_member": + let v = TeamLog.TrustedNonTeamMemberLogInfoSerializer().deserialize(json) + return ContextLogInfo.trustedNonTeamMember(v) + case "other": + return ContextLogInfo.other + default: + return ContextLogInfo.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Created folders. + open class CreateFolderDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderDetailsSerializer().serialize(self)))" + } + } + open class CreateFolderDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateFolderDetails { + switch json { + case .dictionary(_): + return CreateFolderDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The CreateFolderType struct + open class CreateFolderType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CreateFolderTypeSerializer().serialize(self)))" + } + } + open class CreateFolderTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CreateFolderType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> CreateFolderType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return CreateFolderType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Set restrictions on data center locations where team data resides. + open class DataPlacementRestrictionChangePolicyDetails: CustomStringConvertible { + /// Previous placement restriction. + public let previousValue: TeamLog.PlacementRestriction + /// New placement restriction. + public let newValue: TeamLog.PlacementRestriction + public init(previousValue: TeamLog.PlacementRestriction, newValue: TeamLog.PlacementRestriction) { + self.previousValue = previousValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DataPlacementRestrictionChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class DataPlacementRestrictionChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DataPlacementRestrictionChangePolicyDetails) -> JSON { + let output = [ + "previous_value": TeamLog.PlacementRestrictionSerializer().serialize(value.previousValue), + "new_value": TeamLog.PlacementRestrictionSerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DataPlacementRestrictionChangePolicyDetails { + switch json { + case .dictionary(let dict): + let previousValue = TeamLog.PlacementRestrictionSerializer().deserialize(dict["previous_value"] ?? .null) + let newValue = TeamLog.PlacementRestrictionSerializer().deserialize(dict["new_value"] ?? .null) + return DataPlacementRestrictionChangePolicyDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DataPlacementRestrictionChangePolicyType struct + open class DataPlacementRestrictionChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DataPlacementRestrictionChangePolicyTypeSerializer().serialize(self)))" + } + } + open class DataPlacementRestrictionChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DataPlacementRestrictionChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DataPlacementRestrictionChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DataPlacementRestrictionChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Completed restrictions on data center locations where team data resides. + open class DataPlacementRestrictionSatisfyPolicyDetails: CustomStringConvertible { + /// Placement restriction. + public let placementRestriction: TeamLog.PlacementRestriction + public init(placementRestriction: TeamLog.PlacementRestriction) { + self.placementRestriction = placementRestriction + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DataPlacementRestrictionSatisfyPolicyDetailsSerializer().serialize(self)))" + } + } + open class DataPlacementRestrictionSatisfyPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DataPlacementRestrictionSatisfyPolicyDetails) -> JSON { + let output = [ + "placement_restriction": TeamLog.PlacementRestrictionSerializer().serialize(value.placementRestriction), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DataPlacementRestrictionSatisfyPolicyDetails { + switch json { + case .dictionary(let dict): + let placementRestriction = TeamLog.PlacementRestrictionSerializer().deserialize(dict["placement_restriction"] ?? .null) + return DataPlacementRestrictionSatisfyPolicyDetails(placementRestriction: placementRestriction) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DataPlacementRestrictionSatisfyPolicyType struct + open class DataPlacementRestrictionSatisfyPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DataPlacementRestrictionSatisfyPolicyTypeSerializer().serialize(self)))" + } + } + open class DataPlacementRestrictionSatisfyPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DataPlacementRestrictionSatisfyPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DataPlacementRestrictionSatisfyPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DataPlacementRestrictionSatisfyPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Device's session logged information. + open class DeviceSessionLogInfo: CustomStringConvertible { + /// The IP address of the last activity from this session. Might be missing due to historical data gap. + public let ipAddress: String? + /// The time this session was created. Might be missing due to historical data gap. + public let created: Date? + /// The time of the last activity from this session. Might be missing due to historical data gap. + public let updated: Date? + public init(ipAddress: String? = nil, created: Date? = nil, updated: Date? = nil) { + nullableValidator(stringValidator())(ipAddress) + self.ipAddress = ipAddress + self.created = created + self.updated = updated + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceSessionLogInfoSerializer().serialize(self)))" + } + } + open class DeviceSessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceSessionLogInfo) -> JSON { + var output = [ + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + "created": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.created), + "updated": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.updated), + ] + switch value { + case let desktopDeviceSession as TeamLog.DesktopDeviceSessionLogInfo: + for (k, v) in Serialization.getFields(TeamLog.DesktopDeviceSessionLogInfoSerializer().serialize(desktopDeviceSession)) { + output[k] = v + } + output[".tag"] = .str("desktop_device_session") + case let mobileDeviceSession as TeamLog.MobileDeviceSessionLogInfo: + for (k, v) in Serialization.getFields(TeamLog.MobileDeviceSessionLogInfoSerializer().serialize(mobileDeviceSession)) { + output[k] = v + } + output[".tag"] = .str("mobile_device_session") + case let webDeviceSession as TeamLog.WebDeviceSessionLogInfo: + for (k, v) in Serialization.getFields(TeamLog.WebDeviceSessionLogInfoSerializer().serialize(webDeviceSession)) { + output[k] = v + } + output[".tag"] = .str("web_device_session") + case let legacyDeviceSession as TeamLog.LegacyDeviceSessionLogInfo: + for (k, v) in Serialization.getFields(TeamLog.LegacyDeviceSessionLogInfoSerializer().serialize(legacyDeviceSession)) { + output[k] = v + } + output[".tag"] = .str("legacy_device_session") + default: fatalError("Tried to serialize unexpected subtype") + } + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceSessionLogInfo { + switch json { + case .dictionary(let dict): + let tag = Serialization.getTag(dict) + switch tag { + case "desktop_device_session": + return TeamLog.DesktopDeviceSessionLogInfoSerializer().deserialize(json) + case "mobile_device_session": + return TeamLog.MobileDeviceSessionLogInfoSerializer().deserialize(json) + case "web_device_session": + return TeamLog.WebDeviceSessionLogInfoSerializer().deserialize(json) + case "legacy_device_session": + return TeamLog.LegacyDeviceSessionLogInfoSerializer().deserialize(json) + default: + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + let created = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["created"] ?? .null) + let updated = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["updated"] ?? .null) + return DeviceSessionLogInfo(ipAddress: ipAddress, created: created, updated: updated) + } + default: + fatalError("Type error deserializing") + } + } + } + + /// Information about linked Dropbox desktop client sessions + open class DesktopDeviceSessionLogInfo: TeamLog.DeviceSessionLogInfo { + /// Desktop session unique id. Might be missing due to historical data gap. + public let sessionInfo: TeamLog.DesktopSessionLogInfo? + /// Name of the hosting desktop. + public let hostName: String + /// The Dropbox desktop client type. + public let clientType: Team.DesktopPlatform + /// The Dropbox client version. + public let clientVersion: String? + /// Information on the hosting platform. + public let platform: String + /// Whether itu2019s possible to delete all of the account files upon unlinking. + public let isDeleteOnUnlinkSupported: Bool + public init(hostName: String, clientType: Team.DesktopPlatform, platform: String, isDeleteOnUnlinkSupported: Bool, ipAddress: String? = nil, created: Date? = nil, updated: Date? = nil, sessionInfo: TeamLog.DesktopSessionLogInfo? = nil, clientVersion: String? = nil) { + self.sessionInfo = sessionInfo + stringValidator()(hostName) + self.hostName = hostName + self.clientType = clientType + nullableValidator(stringValidator())(clientVersion) + self.clientVersion = clientVersion + stringValidator()(platform) + self.platform = platform + self.isDeleteOnUnlinkSupported = isDeleteOnUnlinkSupported + super.init(ipAddress: ipAddress, created: created, updated: updated) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DesktopDeviceSessionLogInfoSerializer().serialize(self)))" + } + } + open class DesktopDeviceSessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DesktopDeviceSessionLogInfo) -> JSON { + let output = [ + "host_name": Serialization._StringSerializer.serialize(value.hostName), + "client_type": Team.DesktopPlatformSerializer().serialize(value.clientType), + "platform": Serialization._StringSerializer.serialize(value.platform), + "is_delete_on_unlink_supported": Serialization._BoolSerializer.serialize(value.isDeleteOnUnlinkSupported), + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + "created": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.created), + "updated": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.updated), + "session_info": NullableSerializer(TeamLog.DesktopSessionLogInfoSerializer()).serialize(value.sessionInfo), + "client_version": NullableSerializer(Serialization._StringSerializer).serialize(value.clientVersion), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DesktopDeviceSessionLogInfo { + switch json { + case .dictionary(let dict): + let hostName = Serialization._StringSerializer.deserialize(dict["host_name"] ?? .null) + let clientType = Team.DesktopPlatformSerializer().deserialize(dict["client_type"] ?? .null) + let platform = Serialization._StringSerializer.deserialize(dict["platform"] ?? .null) + let isDeleteOnUnlinkSupported = Serialization._BoolSerializer.deserialize(dict["is_delete_on_unlink_supported"] ?? .null) + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + let created = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["created"] ?? .null) + let updated = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["updated"] ?? .null) + let sessionInfo = NullableSerializer(TeamLog.DesktopSessionLogInfoSerializer()).deserialize(dict["session_info"] ?? .null) + let clientVersion = NullableSerializer(Serialization._StringSerializer).deserialize(dict["client_version"] ?? .null) + return DesktopDeviceSessionLogInfo(hostName: hostName, clientType: clientType, platform: platform, isDeleteOnUnlinkSupported: isDeleteOnUnlinkSupported, ipAddress: ipAddress, created: created, updated: updated, sessionInfo: sessionInfo, clientVersion: clientVersion) + default: + fatalError("Type error deserializing") + } + } + } + + /// Session's logged information. + open class SessionLogInfo: CustomStringConvertible { + /// Session ID. Might be missing due to historical data gap. + public let sessionId: String? + public init(sessionId: String? = nil) { + nullableValidator(stringValidator())(sessionId) + self.sessionId = sessionId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SessionLogInfoSerializer().serialize(self)))" + } + } + open class SessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SessionLogInfo) -> JSON { + var output = [ + "session_id": NullableSerializer(Serialization._StringSerializer).serialize(value.sessionId), + ] + switch value { + case let web as TeamLog.WebSessionLogInfo: + for (k, v) in Serialization.getFields(TeamLog.WebSessionLogInfoSerializer().serialize(web)) { + output[k] = v + } + output[".tag"] = .str("web") + case let desktop as TeamLog.DesktopSessionLogInfo: + for (k, v) in Serialization.getFields(TeamLog.DesktopSessionLogInfoSerializer().serialize(desktop)) { + output[k] = v + } + output[".tag"] = .str("desktop") + case let mobile as TeamLog.MobileSessionLogInfo: + for (k, v) in Serialization.getFields(TeamLog.MobileSessionLogInfoSerializer().serialize(mobile)) { + output[k] = v + } + output[".tag"] = .str("mobile") + default: fatalError("Tried to serialize unexpected subtype") + } + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SessionLogInfo { + switch json { + case .dictionary(let dict): + let tag = Serialization.getTag(dict) + switch tag { + case "web": + return TeamLog.WebSessionLogInfoSerializer().deserialize(json) + case "desktop": + return TeamLog.DesktopSessionLogInfoSerializer().deserialize(json) + case "mobile": + return TeamLog.MobileSessionLogInfoSerializer().deserialize(json) + default: + let sessionId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["session_id"] ?? .null) + return SessionLogInfo(sessionId: sessionId) + } + default: + fatalError("Type error deserializing") + } + } + } + + /// Desktop session. + open class DesktopSessionLogInfo: TeamLog.SessionLogInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DesktopSessionLogInfoSerializer().serialize(self)))" + } + } + open class DesktopSessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DesktopSessionLogInfo) -> JSON { + let output = [ + "session_id": NullableSerializer(Serialization._StringSerializer).serialize(value.sessionId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DesktopSessionLogInfo { + switch json { + case .dictionary(let dict): + let sessionId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["session_id"] ?? .null) + return DesktopSessionLogInfo(sessionId: sessionId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Set/removed limit on number of computers member can link to team Dropbox account. + open class DeviceApprovalsChangeDesktopPolicyDetails: CustomStringConvertible { + /// New desktop device approvals policy. Might be missing due to historical data gap. + public let newValue: TeamLog.DeviceApprovalsPolicy? + /// Previous desktop device approvals policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.DeviceApprovalsPolicy? + public init(newValue: TeamLog.DeviceApprovalsPolicy? = nil, previousValue: TeamLog.DeviceApprovalsPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceApprovalsChangeDesktopPolicyDetailsSerializer().serialize(self)))" + } + } + open class DeviceApprovalsChangeDesktopPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceApprovalsChangeDesktopPolicyDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(TeamLog.DeviceApprovalsPolicySerializer()).serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.DeviceApprovalsPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceApprovalsChangeDesktopPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(TeamLog.DeviceApprovalsPolicySerializer()).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.DeviceApprovalsPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return DeviceApprovalsChangeDesktopPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceApprovalsChangeDesktopPolicyType struct + open class DeviceApprovalsChangeDesktopPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceApprovalsChangeDesktopPolicyTypeSerializer().serialize(self)))" + } + } + open class DeviceApprovalsChangeDesktopPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceApprovalsChangeDesktopPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceApprovalsChangeDesktopPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceApprovalsChangeDesktopPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Set/removed limit on number of mobile devices member can link to team Dropbox account. + open class DeviceApprovalsChangeMobilePolicyDetails: CustomStringConvertible { + /// New mobile device approvals policy. Might be missing due to historical data gap. + public let newValue: TeamLog.DeviceApprovalsPolicy? + /// Previous mobile device approvals policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.DeviceApprovalsPolicy? + public init(newValue: TeamLog.DeviceApprovalsPolicy? = nil, previousValue: TeamLog.DeviceApprovalsPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceApprovalsChangeMobilePolicyDetailsSerializer().serialize(self)))" + } + } + open class DeviceApprovalsChangeMobilePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceApprovalsChangeMobilePolicyDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(TeamLog.DeviceApprovalsPolicySerializer()).serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.DeviceApprovalsPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceApprovalsChangeMobilePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(TeamLog.DeviceApprovalsPolicySerializer()).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.DeviceApprovalsPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return DeviceApprovalsChangeMobilePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceApprovalsChangeMobilePolicyType struct + open class DeviceApprovalsChangeMobilePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceApprovalsChangeMobilePolicyTypeSerializer().serialize(self)))" + } + } + open class DeviceApprovalsChangeMobilePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceApprovalsChangeMobilePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceApprovalsChangeMobilePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceApprovalsChangeMobilePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed device approvals setting when member is over limit. + open class DeviceApprovalsChangeOverageActionDetails: CustomStringConvertible { + /// New over the limits policy. Might be missing due to historical data gap. + public let newValue: TeamPolicies.RolloutMethod? + /// Previous over the limit policy. Might be missing due to historical data gap. + public let previousValue: TeamPolicies.RolloutMethod? + public init(newValue: TeamPolicies.RolloutMethod? = nil, previousValue: TeamPolicies.RolloutMethod? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceApprovalsChangeOverageActionDetailsSerializer().serialize(self)))" + } + } + open class DeviceApprovalsChangeOverageActionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceApprovalsChangeOverageActionDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(TeamPolicies.RolloutMethodSerializer()).serialize(value.newValue), + "previous_value": NullableSerializer(TeamPolicies.RolloutMethodSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceApprovalsChangeOverageActionDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(TeamPolicies.RolloutMethodSerializer()).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamPolicies.RolloutMethodSerializer()).deserialize(dict["previous_value"] ?? .null) + return DeviceApprovalsChangeOverageActionDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceApprovalsChangeOverageActionType struct + open class DeviceApprovalsChangeOverageActionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceApprovalsChangeOverageActionTypeSerializer().serialize(self)))" + } + } + open class DeviceApprovalsChangeOverageActionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceApprovalsChangeOverageActionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceApprovalsChangeOverageActionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceApprovalsChangeOverageActionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed device approvals setting when member unlinks approved device. + open class DeviceApprovalsChangeUnlinkActionDetails: CustomStringConvertible { + /// New device unlink policy. Might be missing due to historical data gap. + public let newValue: TeamLog.DeviceUnlinkPolicy? + /// Previous device unlink policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.DeviceUnlinkPolicy? + public init(newValue: TeamLog.DeviceUnlinkPolicy? = nil, previousValue: TeamLog.DeviceUnlinkPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceApprovalsChangeUnlinkActionDetailsSerializer().serialize(self)))" + } + } + open class DeviceApprovalsChangeUnlinkActionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceApprovalsChangeUnlinkActionDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(TeamLog.DeviceUnlinkPolicySerializer()).serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.DeviceUnlinkPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceApprovalsChangeUnlinkActionDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(TeamLog.DeviceUnlinkPolicySerializer()).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.DeviceUnlinkPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return DeviceApprovalsChangeUnlinkActionDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceApprovalsChangeUnlinkActionType struct + open class DeviceApprovalsChangeUnlinkActionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceApprovalsChangeUnlinkActionTypeSerializer().serialize(self)))" + } + } + open class DeviceApprovalsChangeUnlinkActionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceApprovalsChangeUnlinkActionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceApprovalsChangeUnlinkActionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceApprovalsChangeUnlinkActionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceApprovalsPolicy union + public enum DeviceApprovalsPolicy: CustomStringConvertible { + /// An unspecified error. + case unlimited + /// An unspecified error. + case limited + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceApprovalsPolicySerializer().serialize(self)))" + } + } + open class DeviceApprovalsPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceApprovalsPolicy) -> JSON { + switch value { + case .unlimited: + var d = [String: JSON]() + d[".tag"] = .str("unlimited") + return .dictionary(d) + case .limited: + var d = [String: JSON]() + d[".tag"] = .str("limited") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DeviceApprovalsPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "unlimited": + return DeviceApprovalsPolicy.unlimited + case "limited": + return DeviceApprovalsPolicy.limited + case "other": + return DeviceApprovalsPolicy.other + default: + return DeviceApprovalsPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Changed IP address associated with active desktop session. + open class DeviceChangeIpDesktopDetails: CustomStringConvertible { + /// Device's session logged information. + public let deviceSessionInfo: TeamLog.DeviceSessionLogInfo + public init(deviceSessionInfo: TeamLog.DeviceSessionLogInfo) { + self.deviceSessionInfo = deviceSessionInfo + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceChangeIpDesktopDetailsSerializer().serialize(self)))" + } + } + open class DeviceChangeIpDesktopDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceChangeIpDesktopDetails) -> JSON { + let output = [ + "device_session_info": TeamLog.DeviceSessionLogInfoSerializer().serialize(value.deviceSessionInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceChangeIpDesktopDetails { + switch json { + case .dictionary(let dict): + let deviceSessionInfo = TeamLog.DeviceSessionLogInfoSerializer().deserialize(dict["device_session_info"] ?? .null) + return DeviceChangeIpDesktopDetails(deviceSessionInfo: deviceSessionInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceChangeIpDesktopType struct + open class DeviceChangeIpDesktopType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceChangeIpDesktopTypeSerializer().serialize(self)))" + } + } + open class DeviceChangeIpDesktopTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceChangeIpDesktopType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceChangeIpDesktopType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceChangeIpDesktopType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed IP address associated with active mobile session. + open class DeviceChangeIpMobileDetails: CustomStringConvertible { + /// Device's session logged information. + public let deviceSessionInfo: TeamLog.DeviceSessionLogInfo? + public init(deviceSessionInfo: TeamLog.DeviceSessionLogInfo? = nil) { + self.deviceSessionInfo = deviceSessionInfo + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceChangeIpMobileDetailsSerializer().serialize(self)))" + } + } + open class DeviceChangeIpMobileDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceChangeIpMobileDetails) -> JSON { + let output = [ + "device_session_info": NullableSerializer(TeamLog.DeviceSessionLogInfoSerializer()).serialize(value.deviceSessionInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceChangeIpMobileDetails { + switch json { + case .dictionary(let dict): + let deviceSessionInfo = NullableSerializer(TeamLog.DeviceSessionLogInfoSerializer()).deserialize(dict["device_session_info"] ?? .null) + return DeviceChangeIpMobileDetails(deviceSessionInfo: deviceSessionInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceChangeIpMobileType struct + open class DeviceChangeIpMobileType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceChangeIpMobileTypeSerializer().serialize(self)))" + } + } + open class DeviceChangeIpMobileTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceChangeIpMobileType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceChangeIpMobileType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceChangeIpMobileType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed IP address associated with active web session. + open class DeviceChangeIpWebDetails: CustomStringConvertible { + /// Web browser name. + public let userAgent: String + public init(userAgent: String) { + stringValidator()(userAgent) + self.userAgent = userAgent + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceChangeIpWebDetailsSerializer().serialize(self)))" + } + } + open class DeviceChangeIpWebDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceChangeIpWebDetails) -> JSON { + let output = [ + "user_agent": Serialization._StringSerializer.serialize(value.userAgent), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceChangeIpWebDetails { + switch json { + case .dictionary(let dict): + let userAgent = Serialization._StringSerializer.deserialize(dict["user_agent"] ?? .null) + return DeviceChangeIpWebDetails(userAgent: userAgent) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceChangeIpWebType struct + open class DeviceChangeIpWebType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceChangeIpWebTypeSerializer().serialize(self)))" + } + } + open class DeviceChangeIpWebTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceChangeIpWebType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceChangeIpWebType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceChangeIpWebType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Failed to delete all files from unlinked device. + open class DeviceDeleteOnUnlinkFailDetails: CustomStringConvertible { + /// Session unique id. Might be missing due to historical data gap. + public let sessionInfo: TeamLog.SessionLogInfo? + /// The device name. Might be missing due to historical data gap. + public let displayName: String? + /// The number of times that remote file deletion failed. + public let numFailures: Int64 + public init(numFailures: Int64, sessionInfo: TeamLog.SessionLogInfo? = nil, displayName: String? = nil) { + self.sessionInfo = sessionInfo + nullableValidator(stringValidator())(displayName) + self.displayName = displayName + comparableValidator()(numFailures) + self.numFailures = numFailures + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceDeleteOnUnlinkFailDetailsSerializer().serialize(self)))" + } + } + open class DeviceDeleteOnUnlinkFailDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceDeleteOnUnlinkFailDetails) -> JSON { + let output = [ + "num_failures": Serialization._Int64Serializer.serialize(value.numFailures), + "session_info": NullableSerializer(TeamLog.SessionLogInfoSerializer()).serialize(value.sessionInfo), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceDeleteOnUnlinkFailDetails { + switch json { + case .dictionary(let dict): + let numFailures = Serialization._Int64Serializer.deserialize(dict["num_failures"] ?? .null) + let sessionInfo = NullableSerializer(TeamLog.SessionLogInfoSerializer()).deserialize(dict["session_info"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + return DeviceDeleteOnUnlinkFailDetails(numFailures: numFailures, sessionInfo: sessionInfo, displayName: displayName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceDeleteOnUnlinkFailType struct + open class DeviceDeleteOnUnlinkFailType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceDeleteOnUnlinkFailTypeSerializer().serialize(self)))" + } + } + open class DeviceDeleteOnUnlinkFailTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceDeleteOnUnlinkFailType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceDeleteOnUnlinkFailType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceDeleteOnUnlinkFailType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted all files from unlinked device. + open class DeviceDeleteOnUnlinkSuccessDetails: CustomStringConvertible { + /// Session unique id. Might be missing due to historical data gap. + public let sessionInfo: TeamLog.SessionLogInfo? + /// The device name. Might be missing due to historical data gap. + public let displayName: String? + public init(sessionInfo: TeamLog.SessionLogInfo? = nil, displayName: String? = nil) { + self.sessionInfo = sessionInfo + nullableValidator(stringValidator())(displayName) + self.displayName = displayName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceDeleteOnUnlinkSuccessDetailsSerializer().serialize(self)))" + } + } + open class DeviceDeleteOnUnlinkSuccessDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceDeleteOnUnlinkSuccessDetails) -> JSON { + let output = [ + "session_info": NullableSerializer(TeamLog.SessionLogInfoSerializer()).serialize(value.sessionInfo), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceDeleteOnUnlinkSuccessDetails { + switch json { + case .dictionary(let dict): + let sessionInfo = NullableSerializer(TeamLog.SessionLogInfoSerializer()).deserialize(dict["session_info"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + return DeviceDeleteOnUnlinkSuccessDetails(sessionInfo: sessionInfo, displayName: displayName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceDeleteOnUnlinkSuccessType struct + open class DeviceDeleteOnUnlinkSuccessType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceDeleteOnUnlinkSuccessTypeSerializer().serialize(self)))" + } + } + open class DeviceDeleteOnUnlinkSuccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceDeleteOnUnlinkSuccessType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceDeleteOnUnlinkSuccessType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceDeleteOnUnlinkSuccessType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Failed to link device. + open class DeviceLinkFailDetails: CustomStringConvertible { + /// IP address. Might be missing due to historical data gap. + public let ipAddress: String? + /// A description of the device used while user approval blocked. + public let deviceType: TeamLog.DeviceType + public init(deviceType: TeamLog.DeviceType, ipAddress: String? = nil) { + nullableValidator(stringValidator())(ipAddress) + self.ipAddress = ipAddress + self.deviceType = deviceType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceLinkFailDetailsSerializer().serialize(self)))" + } + } + open class DeviceLinkFailDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceLinkFailDetails) -> JSON { + let output = [ + "device_type": TeamLog.DeviceTypeSerializer().serialize(value.deviceType), + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceLinkFailDetails { + switch json { + case .dictionary(let dict): + let deviceType = TeamLog.DeviceTypeSerializer().deserialize(dict["device_type"] ?? .null) + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + return DeviceLinkFailDetails(deviceType: deviceType, ipAddress: ipAddress) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceLinkFailType struct + open class DeviceLinkFailType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceLinkFailTypeSerializer().serialize(self)))" + } + } + open class DeviceLinkFailTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceLinkFailType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceLinkFailType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceLinkFailType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Linked device. + open class DeviceLinkSuccessDetails: CustomStringConvertible { + /// Device's session logged information. + public let deviceSessionInfo: TeamLog.DeviceSessionLogInfo? + public init(deviceSessionInfo: TeamLog.DeviceSessionLogInfo? = nil) { + self.deviceSessionInfo = deviceSessionInfo + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceLinkSuccessDetailsSerializer().serialize(self)))" + } + } + open class DeviceLinkSuccessDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceLinkSuccessDetails) -> JSON { + let output = [ + "device_session_info": NullableSerializer(TeamLog.DeviceSessionLogInfoSerializer()).serialize(value.deviceSessionInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceLinkSuccessDetails { + switch json { + case .dictionary(let dict): + let deviceSessionInfo = NullableSerializer(TeamLog.DeviceSessionLogInfoSerializer()).deserialize(dict["device_session_info"] ?? .null) + return DeviceLinkSuccessDetails(deviceSessionInfo: deviceSessionInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceLinkSuccessType struct + open class DeviceLinkSuccessType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceLinkSuccessTypeSerializer().serialize(self)))" + } + } + open class DeviceLinkSuccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceLinkSuccessType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceLinkSuccessType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceLinkSuccessType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Disabled device management. + open class DeviceManagementDisabledDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceManagementDisabledDetailsSerializer().serialize(self)))" + } + } + open class DeviceManagementDisabledDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceManagementDisabledDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceManagementDisabledDetails { + switch json { + case .dictionary(_): + return DeviceManagementDisabledDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceManagementDisabledType struct + open class DeviceManagementDisabledType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceManagementDisabledTypeSerializer().serialize(self)))" + } + } + open class DeviceManagementDisabledTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceManagementDisabledType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceManagementDisabledType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceManagementDisabledType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled device management. + open class DeviceManagementEnabledDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceManagementEnabledDetailsSerializer().serialize(self)))" + } + } + open class DeviceManagementEnabledDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceManagementEnabledDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceManagementEnabledDetails { + switch json { + case .dictionary(_): + return DeviceManagementEnabledDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceManagementEnabledType struct + open class DeviceManagementEnabledType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceManagementEnabledTypeSerializer().serialize(self)))" + } + } + open class DeviceManagementEnabledTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceManagementEnabledType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceManagementEnabledType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceManagementEnabledType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceType union + public enum DeviceType: CustomStringConvertible { + /// An unspecified error. + case desktop + /// An unspecified error. + case mobile + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceTypeSerializer().serialize(self)))" + } + } + open class DeviceTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceType) -> JSON { + switch value { + case .desktop: + var d = [String: JSON]() + d[".tag"] = .str("desktop") + return .dictionary(d) + case .mobile: + var d = [String: JSON]() + d[".tag"] = .str("mobile") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DeviceType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "desktop": + return DeviceType.desktop + case "mobile": + return DeviceType.mobile + case "other": + return DeviceType.other + default: + return DeviceType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Disconnected device. + open class DeviceUnlinkDetails: CustomStringConvertible { + /// Session unique id. + public let sessionInfo: TeamLog.SessionLogInfo? + /// The device name. Might be missing due to historical data gap. + public let displayName: String? + /// True if the user requested to delete data after device unlink, false otherwise. + public let deleteData: Bool + public init(deleteData: Bool, sessionInfo: TeamLog.SessionLogInfo? = nil, displayName: String? = nil) { + self.sessionInfo = sessionInfo + nullableValidator(stringValidator())(displayName) + self.displayName = displayName + self.deleteData = deleteData + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceUnlinkDetailsSerializer().serialize(self)))" + } + } + open class DeviceUnlinkDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceUnlinkDetails) -> JSON { + let output = [ + "delete_data": Serialization._BoolSerializer.serialize(value.deleteData), + "session_info": NullableSerializer(TeamLog.SessionLogInfoSerializer()).serialize(value.sessionInfo), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceUnlinkDetails { + switch json { + case .dictionary(let dict): + let deleteData = Serialization._BoolSerializer.deserialize(dict["delete_data"] ?? .null) + let sessionInfo = NullableSerializer(TeamLog.SessionLogInfoSerializer()).deserialize(dict["session_info"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + return DeviceUnlinkDetails(deleteData: deleteData, sessionInfo: sessionInfo, displayName: displayName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DeviceUnlinkPolicy union + public enum DeviceUnlinkPolicy: CustomStringConvertible { + /// An unspecified error. + case remove + /// An unspecified error. + case keep + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceUnlinkPolicySerializer().serialize(self)))" + } + } + open class DeviceUnlinkPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceUnlinkPolicy) -> JSON { + switch value { + case .remove: + var d = [String: JSON]() + d[".tag"] = .str("remove") + return .dictionary(d) + case .keep: + var d = [String: JSON]() + d[".tag"] = .str("keep") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DeviceUnlinkPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "remove": + return DeviceUnlinkPolicy.remove + case "keep": + return DeviceUnlinkPolicy.keep + case "other": + return DeviceUnlinkPolicy.other + default: + return DeviceUnlinkPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The DeviceUnlinkType struct + open class DeviceUnlinkType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DeviceUnlinkTypeSerializer().serialize(self)))" + } + } + open class DeviceUnlinkTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DeviceUnlinkType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DeviceUnlinkType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DeviceUnlinkType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added members to directory restrictions list. + open class DirectoryRestrictionsAddMembersDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DirectoryRestrictionsAddMembersDetailsSerializer().serialize(self)))" + } + } + open class DirectoryRestrictionsAddMembersDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DirectoryRestrictionsAddMembersDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DirectoryRestrictionsAddMembersDetails { + switch json { + case .dictionary(_): + return DirectoryRestrictionsAddMembersDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DirectoryRestrictionsAddMembersType struct + open class DirectoryRestrictionsAddMembersType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DirectoryRestrictionsAddMembersTypeSerializer().serialize(self)))" + } + } + open class DirectoryRestrictionsAddMembersTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DirectoryRestrictionsAddMembersType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DirectoryRestrictionsAddMembersType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DirectoryRestrictionsAddMembersType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed members from directory restrictions list. + open class DirectoryRestrictionsRemoveMembersDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DirectoryRestrictionsRemoveMembersDetailsSerializer().serialize(self)))" + } + } + open class DirectoryRestrictionsRemoveMembersDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DirectoryRestrictionsRemoveMembersDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DirectoryRestrictionsRemoveMembersDetails { + switch json { + case .dictionary(_): + return DirectoryRestrictionsRemoveMembersDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DirectoryRestrictionsRemoveMembersType struct + open class DirectoryRestrictionsRemoveMembersType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DirectoryRestrictionsRemoveMembersTypeSerializer().serialize(self)))" + } + } + open class DirectoryRestrictionsRemoveMembersTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DirectoryRestrictionsRemoveMembersType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DirectoryRestrictionsRemoveMembersType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DirectoryRestrictionsRemoveMembersType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Disabled domain invites. + open class DisabledDomainInvitesDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DisabledDomainInvitesDetailsSerializer().serialize(self)))" + } + } + open class DisabledDomainInvitesDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DisabledDomainInvitesDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DisabledDomainInvitesDetails { + switch json { + case .dictionary(_): + return DisabledDomainInvitesDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DisabledDomainInvitesType struct + open class DisabledDomainInvitesType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DisabledDomainInvitesTypeSerializer().serialize(self)))" + } + } + open class DisabledDomainInvitesTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DisabledDomainInvitesType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DisabledDomainInvitesType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DisabledDomainInvitesType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Approved user's request to join team. + open class DomainInvitesApproveRequestToJoinTeamDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesApproveRequestToJoinTeamDetailsSerializer().serialize(self)))" + } + } + open class DomainInvitesApproveRequestToJoinTeamDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesApproveRequestToJoinTeamDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesApproveRequestToJoinTeamDetails { + switch json { + case .dictionary(_): + return DomainInvitesApproveRequestToJoinTeamDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DomainInvitesApproveRequestToJoinTeamType struct + open class DomainInvitesApproveRequestToJoinTeamType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesApproveRequestToJoinTeamTypeSerializer().serialize(self)))" + } + } + open class DomainInvitesApproveRequestToJoinTeamTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesApproveRequestToJoinTeamType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesApproveRequestToJoinTeamType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DomainInvitesApproveRequestToJoinTeamType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Declined user's request to join team. + open class DomainInvitesDeclineRequestToJoinTeamDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesDeclineRequestToJoinTeamDetailsSerializer().serialize(self)))" + } + } + open class DomainInvitesDeclineRequestToJoinTeamDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesDeclineRequestToJoinTeamDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesDeclineRequestToJoinTeamDetails { + switch json { + case .dictionary(_): + return DomainInvitesDeclineRequestToJoinTeamDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DomainInvitesDeclineRequestToJoinTeamType struct + open class DomainInvitesDeclineRequestToJoinTeamType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesDeclineRequestToJoinTeamTypeSerializer().serialize(self)))" + } + } + open class DomainInvitesDeclineRequestToJoinTeamTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesDeclineRequestToJoinTeamType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesDeclineRequestToJoinTeamType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DomainInvitesDeclineRequestToJoinTeamType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Sent domain invites to existing domain accounts. + open class DomainInvitesEmailExistingUsersDetails: CustomStringConvertible { + /// Domain names. + public let domainName: String + /// Number of recipients. + public let numRecipients: UInt64 + public init(domainName: String, numRecipients: UInt64) { + stringValidator()(domainName) + self.domainName = domainName + comparableValidator()(numRecipients) + self.numRecipients = numRecipients + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesEmailExistingUsersDetailsSerializer().serialize(self)))" + } + } + open class DomainInvitesEmailExistingUsersDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesEmailExistingUsersDetails) -> JSON { + let output = [ + "domain_name": Serialization._StringSerializer.serialize(value.domainName), + "num_recipients": Serialization._UInt64Serializer.serialize(value.numRecipients), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesEmailExistingUsersDetails { + switch json { + case .dictionary(let dict): + let domainName = Serialization._StringSerializer.deserialize(dict["domain_name"] ?? .null) + let numRecipients = Serialization._UInt64Serializer.deserialize(dict["num_recipients"] ?? .null) + return DomainInvitesEmailExistingUsersDetails(domainName: domainName, numRecipients: numRecipients) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DomainInvitesEmailExistingUsersType struct + open class DomainInvitesEmailExistingUsersType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesEmailExistingUsersTypeSerializer().serialize(self)))" + } + } + open class DomainInvitesEmailExistingUsersTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesEmailExistingUsersType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesEmailExistingUsersType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DomainInvitesEmailExistingUsersType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Requested to join team. + open class DomainInvitesRequestToJoinTeamDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesRequestToJoinTeamDetailsSerializer().serialize(self)))" + } + } + open class DomainInvitesRequestToJoinTeamDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesRequestToJoinTeamDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesRequestToJoinTeamDetails { + switch json { + case .dictionary(_): + return DomainInvitesRequestToJoinTeamDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DomainInvitesRequestToJoinTeamType struct + open class DomainInvitesRequestToJoinTeamType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesRequestToJoinTeamTypeSerializer().serialize(self)))" + } + } + open class DomainInvitesRequestToJoinTeamTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesRequestToJoinTeamType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesRequestToJoinTeamType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DomainInvitesRequestToJoinTeamType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Disabled "Automatically invite new users". + open class DomainInvitesSetInviteNewUserPrefToNoDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesSetInviteNewUserPrefToNoDetailsSerializer().serialize(self)))" + } + } + open class DomainInvitesSetInviteNewUserPrefToNoDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesSetInviteNewUserPrefToNoDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesSetInviteNewUserPrefToNoDetails { + switch json { + case .dictionary(_): + return DomainInvitesSetInviteNewUserPrefToNoDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DomainInvitesSetInviteNewUserPrefToNoType struct + open class DomainInvitesSetInviteNewUserPrefToNoType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesSetInviteNewUserPrefToNoTypeSerializer().serialize(self)))" + } + } + open class DomainInvitesSetInviteNewUserPrefToNoTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesSetInviteNewUserPrefToNoType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesSetInviteNewUserPrefToNoType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DomainInvitesSetInviteNewUserPrefToNoType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled "Automatically invite new users". + open class DomainInvitesSetInviteNewUserPrefToYesDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesSetInviteNewUserPrefToYesDetailsSerializer().serialize(self)))" + } + } + open class DomainInvitesSetInviteNewUserPrefToYesDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesSetInviteNewUserPrefToYesDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesSetInviteNewUserPrefToYesDetails { + switch json { + case .dictionary(_): + return DomainInvitesSetInviteNewUserPrefToYesDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The DomainInvitesSetInviteNewUserPrefToYesType struct + open class DomainInvitesSetInviteNewUserPrefToYesType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainInvitesSetInviteNewUserPrefToYesTypeSerializer().serialize(self)))" + } + } + open class DomainInvitesSetInviteNewUserPrefToYesTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainInvitesSetInviteNewUserPrefToYesType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainInvitesSetInviteNewUserPrefToYesType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DomainInvitesSetInviteNewUserPrefToYesType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Failed to verify team domain. + open class DomainVerificationAddDomainFailDetails: CustomStringConvertible { + /// Domain name. + public let domainName: String + /// Domain name verification method. Might be missing due to historical data gap. + public let verificationMethod: String? + public init(domainName: String, verificationMethod: String? = nil) { + stringValidator()(domainName) + self.domainName = domainName + nullableValidator(stringValidator())(verificationMethod) + self.verificationMethod = verificationMethod + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainVerificationAddDomainFailDetailsSerializer().serialize(self)))" + } + } + open class DomainVerificationAddDomainFailDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainVerificationAddDomainFailDetails) -> JSON { + let output = [ + "domain_name": Serialization._StringSerializer.serialize(value.domainName), + "verification_method": NullableSerializer(Serialization._StringSerializer).serialize(value.verificationMethod), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainVerificationAddDomainFailDetails { + switch json { + case .dictionary(let dict): + let domainName = Serialization._StringSerializer.deserialize(dict["domain_name"] ?? .null) + let verificationMethod = NullableSerializer(Serialization._StringSerializer).deserialize(dict["verification_method"] ?? .null) + return DomainVerificationAddDomainFailDetails(domainName: domainName, verificationMethod: verificationMethod) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DomainVerificationAddDomainFailType struct + open class DomainVerificationAddDomainFailType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainVerificationAddDomainFailTypeSerializer().serialize(self)))" + } + } + open class DomainVerificationAddDomainFailTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainVerificationAddDomainFailType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainVerificationAddDomainFailType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DomainVerificationAddDomainFailType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Verified team domain. + open class DomainVerificationAddDomainSuccessDetails: CustomStringConvertible { + /// Domain names. + public let domainNames: Array + /// Domain name verification method. Might be missing due to historical data gap. + public let verificationMethod: String? + public init(domainNames: Array, verificationMethod: String? = nil) { + arrayValidator(itemValidator: stringValidator())(domainNames) + self.domainNames = domainNames + nullableValidator(stringValidator())(verificationMethod) + self.verificationMethod = verificationMethod + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainVerificationAddDomainSuccessDetailsSerializer().serialize(self)))" + } + } + open class DomainVerificationAddDomainSuccessDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainVerificationAddDomainSuccessDetails) -> JSON { + let output = [ + "domain_names": ArraySerializer(Serialization._StringSerializer).serialize(value.domainNames), + "verification_method": NullableSerializer(Serialization._StringSerializer).serialize(value.verificationMethod), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainVerificationAddDomainSuccessDetails { + switch json { + case .dictionary(let dict): + let domainNames = ArraySerializer(Serialization._StringSerializer).deserialize(dict["domain_names"] ?? .null) + let verificationMethod = NullableSerializer(Serialization._StringSerializer).deserialize(dict["verification_method"] ?? .null) + return DomainVerificationAddDomainSuccessDetails(domainNames: domainNames, verificationMethod: verificationMethod) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DomainVerificationAddDomainSuccessType struct + open class DomainVerificationAddDomainSuccessType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainVerificationAddDomainSuccessTypeSerializer().serialize(self)))" + } + } + open class DomainVerificationAddDomainSuccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainVerificationAddDomainSuccessType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainVerificationAddDomainSuccessType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DomainVerificationAddDomainSuccessType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed domain from list of verified team domains. + open class DomainVerificationRemoveDomainDetails: CustomStringConvertible { + /// Domain names. + public let domainNames: Array + public init(domainNames: Array) { + arrayValidator(itemValidator: stringValidator())(domainNames) + self.domainNames = domainNames + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainVerificationRemoveDomainDetailsSerializer().serialize(self)))" + } + } + open class DomainVerificationRemoveDomainDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainVerificationRemoveDomainDetails) -> JSON { + let output = [ + "domain_names": ArraySerializer(Serialization._StringSerializer).serialize(value.domainNames), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainVerificationRemoveDomainDetails { + switch json { + case .dictionary(let dict): + let domainNames = ArraySerializer(Serialization._StringSerializer).deserialize(dict["domain_names"] ?? .null) + return DomainVerificationRemoveDomainDetails(domainNames: domainNames) + default: + fatalError("Type error deserializing") + } + } + } + + /// The DomainVerificationRemoveDomainType struct + open class DomainVerificationRemoveDomainType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DomainVerificationRemoveDomainTypeSerializer().serialize(self)))" + } + } + open class DomainVerificationRemoveDomainTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DomainVerificationRemoveDomainType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DomainVerificationRemoveDomainType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return DomainVerificationRemoveDomainType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Shared content downloads policy + public enum DownloadPolicyType: CustomStringConvertible { + /// An unspecified error. + case allow + /// An unspecified error. + case disallow + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DownloadPolicyTypeSerializer().serialize(self)))" + } + } + open class DownloadPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DownloadPolicyType) -> JSON { + switch value { + case .allow: + var d = [String: JSON]() + d[".tag"] = .str("allow") + return .dictionary(d) + case .disallow: + var d = [String: JSON]() + d[".tag"] = .str("disallow") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> DownloadPolicyType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "allow": + return DownloadPolicyType.allow + case "disallow": + return DownloadPolicyType.disallow + case "other": + return DownloadPolicyType.other + default: + return DownloadPolicyType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Represents a time duration: unit and amount + open class DurationLogInfo: CustomStringConvertible { + /// Time unit. + public let unit: TeamLog.TimeUnit + /// Amount of time. + public let amount: UInt64 + public init(unit: TeamLog.TimeUnit, amount: UInt64) { + self.unit = unit + comparableValidator()(amount) + self.amount = amount + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(DurationLogInfoSerializer().serialize(self)))" + } + } + open class DurationLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: DurationLogInfo) -> JSON { + let output = [ + "unit": TeamLog.TimeUnitSerializer().serialize(value.unit), + "amount": Serialization._UInt64Serializer.serialize(value.amount), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> DurationLogInfo { + switch json { + case .dictionary(let dict): + let unit = TeamLog.TimeUnitSerializer().deserialize(dict["unit"] ?? .null) + let amount = Serialization._UInt64Serializer.deserialize(dict["amount"] ?? .null) + return DurationLogInfo(unit: unit, amount: amount) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added members to EMM exception list. + open class EmmAddExceptionDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmAddExceptionDetailsSerializer().serialize(self)))" + } + } + open class EmmAddExceptionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmAddExceptionDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmAddExceptionDetails { + switch json { + case .dictionary(_): + return EmmAddExceptionDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The EmmAddExceptionType struct + open class EmmAddExceptionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmAddExceptionTypeSerializer().serialize(self)))" + } + } + open class EmmAddExceptionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmAddExceptionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmAddExceptionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return EmmAddExceptionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled enterprise mobility management for members. + open class EmmChangePolicyDetails: CustomStringConvertible { + /// New enterprise mobility management policy. + public let newValue: TeamPolicies.EmmState + /// Previous enterprise mobility management policy. Might be missing due to historical data gap. + public let previousValue: TeamPolicies.EmmState? + public init(newValue: TeamPolicies.EmmState, previousValue: TeamPolicies.EmmState? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class EmmChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamPolicies.EmmStateSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamPolicies.EmmStateSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamPolicies.EmmStateSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamPolicies.EmmStateSerializer()).deserialize(dict["previous_value"] ?? .null) + return EmmChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The EmmChangePolicyType struct + open class EmmChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmChangePolicyTypeSerializer().serialize(self)))" + } + } + open class EmmChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return EmmChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created EMM-excluded users report. + open class EmmCreateExceptionsReportDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmCreateExceptionsReportDetailsSerializer().serialize(self)))" + } + } + open class EmmCreateExceptionsReportDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmCreateExceptionsReportDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmCreateExceptionsReportDetails { + switch json { + case .dictionary(_): + return EmmCreateExceptionsReportDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The EmmCreateExceptionsReportType struct + open class EmmCreateExceptionsReportType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmCreateExceptionsReportTypeSerializer().serialize(self)))" + } + } + open class EmmCreateExceptionsReportTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmCreateExceptionsReportType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmCreateExceptionsReportType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return EmmCreateExceptionsReportType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created EMM mobile app usage report. + open class EmmCreateUsageReportDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmCreateUsageReportDetailsSerializer().serialize(self)))" + } + } + open class EmmCreateUsageReportDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmCreateUsageReportDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmCreateUsageReportDetails { + switch json { + case .dictionary(_): + return EmmCreateUsageReportDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The EmmCreateUsageReportType struct + open class EmmCreateUsageReportType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmCreateUsageReportTypeSerializer().serialize(self)))" + } + } + open class EmmCreateUsageReportTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmCreateUsageReportType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmCreateUsageReportType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return EmmCreateUsageReportType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Failed to sign in via EMM. + open class EmmErrorDetails: CustomStringConvertible { + /// Error details. + public let errorDetails: TeamLog.FailureDetailsLogInfo + public init(errorDetails: TeamLog.FailureDetailsLogInfo) { + self.errorDetails = errorDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmErrorDetailsSerializer().serialize(self)))" + } + } + open class EmmErrorDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmErrorDetails) -> JSON { + let output = [ + "error_details": TeamLog.FailureDetailsLogInfoSerializer().serialize(value.errorDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmErrorDetails { + switch json { + case .dictionary(let dict): + let errorDetails = TeamLog.FailureDetailsLogInfoSerializer().deserialize(dict["error_details"] ?? .null) + return EmmErrorDetails(errorDetails: errorDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The EmmErrorType struct + open class EmmErrorType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmErrorTypeSerializer().serialize(self)))" + } + } + open class EmmErrorTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmErrorType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmErrorType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return EmmErrorType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Refreshed auth token used for setting up enterprise mobility management. + open class EmmRefreshAuthTokenDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmRefreshAuthTokenDetailsSerializer().serialize(self)))" + } + } + open class EmmRefreshAuthTokenDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmRefreshAuthTokenDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmRefreshAuthTokenDetails { + switch json { + case .dictionary(_): + return EmmRefreshAuthTokenDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The EmmRefreshAuthTokenType struct + open class EmmRefreshAuthTokenType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmRefreshAuthTokenTypeSerializer().serialize(self)))" + } + } + open class EmmRefreshAuthTokenTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmRefreshAuthTokenType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmRefreshAuthTokenType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return EmmRefreshAuthTokenType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed members from EMM exception list. + open class EmmRemoveExceptionDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmRemoveExceptionDetailsSerializer().serialize(self)))" + } + } + open class EmmRemoveExceptionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmRemoveExceptionDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmRemoveExceptionDetails { + switch json { + case .dictionary(_): + return EmmRemoveExceptionDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The EmmRemoveExceptionType struct + open class EmmRemoveExceptionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmRemoveExceptionTypeSerializer().serialize(self)))" + } + } + open class EmmRemoveExceptionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmRemoveExceptionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EmmRemoveExceptionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return EmmRemoveExceptionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled domain invites. + open class EnabledDomainInvitesDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EnabledDomainInvitesDetailsSerializer().serialize(self)))" + } + } + open class EnabledDomainInvitesDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EnabledDomainInvitesDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EnabledDomainInvitesDetails { + switch json { + case .dictionary(_): + return EnabledDomainInvitesDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The EnabledDomainInvitesType struct + open class EnabledDomainInvitesType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EnabledDomainInvitesTypeSerializer().serialize(self)))" + } + } + open class EnabledDomainInvitesTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EnabledDomainInvitesType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> EnabledDomainInvitesType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return EnabledDomainInvitesType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Category of events in event audit log. + public enum EventCategory: CustomStringConvertible { + /// Events that apply to management of linked apps. + case apps + /// Events that have to do with comments on files and Paper documents. + case comments + /// Events that apply to linked devices on mobile, desktop and Web platforms. + case devices + /// Events that involve domain management feature: domain verification, invite enforcement and account capture. + case domains + /// Events that have to do with filesystem operations on files and folders: copy, move, delete, etc. + case fileOperations + /// Events that apply to the file requests feature. + case fileRequests + /// Events that involve group management. + case groups + /// Events that involve users signing in to or out of Dropbox. + case logins + /// Events that involve team member management. + case members + /// Events that apply to Dropbox Paper. + case paper + /// Events that involve using, changing or resetting passwords. + case passwords + /// Events that concern generation of admin reports, including team activity and device usage. + case reports + /// Events that apply to all types of sharing and collaboration. + case sharing + /// Events that apply to Dropbox Showcase. + case showcase + /// Events that involve using or configuring single sign-on as well as administrative policies concerning single + /// sign-on. + case sso + /// Events that involve team folder management. + case teamFolders + /// Events that involve a change in team-wide policies. + case teamPolicies + /// Events that involve a change in the team profile. + case teamProfile + /// Events that involve using or configuring two factor authentication as well as administrative policies + /// concerning two factor authentication. + case tfa + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EventCategorySerializer().serialize(self)))" + } + } + open class EventCategorySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EventCategory) -> JSON { + switch value { + case .apps: + var d = [String: JSON]() + d[".tag"] = .str("apps") + return .dictionary(d) + case .comments: + var d = [String: JSON]() + d[".tag"] = .str("comments") + return .dictionary(d) + case .devices: + var d = [String: JSON]() + d[".tag"] = .str("devices") + return .dictionary(d) + case .domains: + var d = [String: JSON]() + d[".tag"] = .str("domains") + return .dictionary(d) + case .fileOperations: + var d = [String: JSON]() + d[".tag"] = .str("file_operations") + return .dictionary(d) + case .fileRequests: + var d = [String: JSON]() + d[".tag"] = .str("file_requests") + return .dictionary(d) + case .groups: + var d = [String: JSON]() + d[".tag"] = .str("groups") + return .dictionary(d) + case .logins: + var d = [String: JSON]() + d[".tag"] = .str("logins") + return .dictionary(d) + case .members: + var d = [String: JSON]() + d[".tag"] = .str("members") + return .dictionary(d) + case .paper: + var d = [String: JSON]() + d[".tag"] = .str("paper") + return .dictionary(d) + case .passwords: + var d = [String: JSON]() + d[".tag"] = .str("passwords") + return .dictionary(d) + case .reports: + var d = [String: JSON]() + d[".tag"] = .str("reports") + return .dictionary(d) + case .sharing: + var d = [String: JSON]() + d[".tag"] = .str("sharing") + return .dictionary(d) + case .showcase: + var d = [String: JSON]() + d[".tag"] = .str("showcase") + return .dictionary(d) + case .sso: + var d = [String: JSON]() + d[".tag"] = .str("sso") + return .dictionary(d) + case .teamFolders: + var d = [String: JSON]() + d[".tag"] = .str("team_folders") + return .dictionary(d) + case .teamPolicies: + var d = [String: JSON]() + d[".tag"] = .str("team_policies") + return .dictionary(d) + case .teamProfile: + var d = [String: JSON]() + d[".tag"] = .str("team_profile") + return .dictionary(d) + case .tfa: + var d = [String: JSON]() + d[".tag"] = .str("tfa") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> EventCategory { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "apps": + return EventCategory.apps + case "comments": + return EventCategory.comments + case "devices": + return EventCategory.devices + case "domains": + return EventCategory.domains + case "file_operations": + return EventCategory.fileOperations + case "file_requests": + return EventCategory.fileRequests + case "groups": + return EventCategory.groups + case "logins": + return EventCategory.logins + case "members": + return EventCategory.members + case "paper": + return EventCategory.paper + case "passwords": + return EventCategory.passwords + case "reports": + return EventCategory.reports + case "sharing": + return EventCategory.sharing + case "showcase": + return EventCategory.showcase + case "sso": + return EventCategory.sso + case "team_folders": + return EventCategory.teamFolders + case "team_policies": + return EventCategory.teamPolicies + case "team_profile": + return EventCategory.teamProfile + case "tfa": + return EventCategory.tfa + case "other": + return EventCategory.other + default: + return EventCategory.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Additional fields depending on the event type. + public enum EventDetails: CustomStringConvertible { + /// An unspecified error. + case appLinkTeamDetails(TeamLog.AppLinkTeamDetails) + /// An unspecified error. + case appLinkUserDetails(TeamLog.AppLinkUserDetails) + /// An unspecified error. + case appUnlinkTeamDetails(TeamLog.AppUnlinkTeamDetails) + /// An unspecified error. + case appUnlinkUserDetails(TeamLog.AppUnlinkUserDetails) + /// An unspecified error. + case fileAddCommentDetails(TeamLog.FileAddCommentDetails) + /// An unspecified error. + case fileChangeCommentSubscriptionDetails(TeamLog.FileChangeCommentSubscriptionDetails) + /// An unspecified error. + case fileDeleteCommentDetails(TeamLog.FileDeleteCommentDetails) + /// An unspecified error. + case fileEditCommentDetails(TeamLog.FileEditCommentDetails) + /// An unspecified error. + case fileLikeCommentDetails(TeamLog.FileLikeCommentDetails) + /// An unspecified error. + case fileResolveCommentDetails(TeamLog.FileResolveCommentDetails) + /// An unspecified error. + case fileUnlikeCommentDetails(TeamLog.FileUnlikeCommentDetails) + /// An unspecified error. + case fileUnresolveCommentDetails(TeamLog.FileUnresolveCommentDetails) + /// An unspecified error. + case deviceChangeIpDesktopDetails(TeamLog.DeviceChangeIpDesktopDetails) + /// An unspecified error. + case deviceChangeIpMobileDetails(TeamLog.DeviceChangeIpMobileDetails) + /// An unspecified error. + case deviceChangeIpWebDetails(TeamLog.DeviceChangeIpWebDetails) + /// An unspecified error. + case deviceDeleteOnUnlinkFailDetails(TeamLog.DeviceDeleteOnUnlinkFailDetails) + /// An unspecified error. + case deviceDeleteOnUnlinkSuccessDetails(TeamLog.DeviceDeleteOnUnlinkSuccessDetails) + /// An unspecified error. + case deviceLinkFailDetails(TeamLog.DeviceLinkFailDetails) + /// An unspecified error. + case deviceLinkSuccessDetails(TeamLog.DeviceLinkSuccessDetails) + /// An unspecified error. + case deviceManagementDisabledDetails(TeamLog.DeviceManagementDisabledDetails) + /// An unspecified error. + case deviceManagementEnabledDetails(TeamLog.DeviceManagementEnabledDetails) + /// An unspecified error. + case deviceUnlinkDetails(TeamLog.DeviceUnlinkDetails) + /// An unspecified error. + case emmRefreshAuthTokenDetails(TeamLog.EmmRefreshAuthTokenDetails) + /// An unspecified error. + case accountCaptureChangeAvailabilityDetails(TeamLog.AccountCaptureChangeAvailabilityDetails) + /// An unspecified error. + case accountCaptureMigrateAccountDetails(TeamLog.AccountCaptureMigrateAccountDetails) + /// An unspecified error. + case accountCaptureNotificationEmailsSentDetails(TeamLog.AccountCaptureNotificationEmailsSentDetails) + /// An unspecified error. + case accountCaptureRelinquishAccountDetails(TeamLog.AccountCaptureRelinquishAccountDetails) + /// An unspecified error. + case disabledDomainInvitesDetails(TeamLog.DisabledDomainInvitesDetails) + /// An unspecified error. + case domainInvitesApproveRequestToJoinTeamDetails(TeamLog.DomainInvitesApproveRequestToJoinTeamDetails) + /// An unspecified error. + case domainInvitesDeclineRequestToJoinTeamDetails(TeamLog.DomainInvitesDeclineRequestToJoinTeamDetails) + /// An unspecified error. + case domainInvitesEmailExistingUsersDetails(TeamLog.DomainInvitesEmailExistingUsersDetails) + /// An unspecified error. + case domainInvitesRequestToJoinTeamDetails(TeamLog.DomainInvitesRequestToJoinTeamDetails) + /// An unspecified error. + case domainInvitesSetInviteNewUserPrefToNoDetails(TeamLog.DomainInvitesSetInviteNewUserPrefToNoDetails) + /// An unspecified error. + case domainInvitesSetInviteNewUserPrefToYesDetails(TeamLog.DomainInvitesSetInviteNewUserPrefToYesDetails) + /// An unspecified error. + case domainVerificationAddDomainFailDetails(TeamLog.DomainVerificationAddDomainFailDetails) + /// An unspecified error. + case domainVerificationAddDomainSuccessDetails(TeamLog.DomainVerificationAddDomainSuccessDetails) + /// An unspecified error. + case domainVerificationRemoveDomainDetails(TeamLog.DomainVerificationRemoveDomainDetails) + /// An unspecified error. + case enabledDomainInvitesDetails(TeamLog.EnabledDomainInvitesDetails) + /// An unspecified error. + case createFolderDetails(TeamLog.CreateFolderDetails) + /// An unspecified error. + case fileAddDetails(TeamLog.FileAddDetails) + /// An unspecified error. + case fileCopyDetails(TeamLog.FileCopyDetails) + /// An unspecified error. + case fileDeleteDetails(TeamLog.FileDeleteDetails) + /// An unspecified error. + case fileDownloadDetails(TeamLog.FileDownloadDetails) + /// An unspecified error. + case fileEditDetails(TeamLog.FileEditDetails) + /// An unspecified error. + case fileGetCopyReferenceDetails(TeamLog.FileGetCopyReferenceDetails) + /// An unspecified error. + case fileMoveDetails(TeamLog.FileMoveDetails) + /// An unspecified error. + case filePermanentlyDeleteDetails(TeamLog.FilePermanentlyDeleteDetails) + /// An unspecified error. + case filePreviewDetails(TeamLog.FilePreviewDetails) + /// An unspecified error. + case fileRenameDetails(TeamLog.FileRenameDetails) + /// An unspecified error. + case fileRestoreDetails(TeamLog.FileRestoreDetails) + /// An unspecified error. + case fileRevertDetails(TeamLog.FileRevertDetails) + /// An unspecified error. + case fileRollbackChangesDetails(TeamLog.FileRollbackChangesDetails) + /// An unspecified error. + case fileSaveCopyReferenceDetails(TeamLog.FileSaveCopyReferenceDetails) + /// An unspecified error. + case fileRequestChangeDetails(TeamLog.FileRequestChangeDetails) + /// An unspecified error. + case fileRequestCloseDetails(TeamLog.FileRequestCloseDetails) + /// An unspecified error. + case fileRequestCreateDetails(TeamLog.FileRequestCreateDetails) + /// An unspecified error. + case fileRequestReceiveFileDetails(TeamLog.FileRequestReceiveFileDetails) + /// An unspecified error. + case groupAddExternalIdDetails(TeamLog.GroupAddExternalIdDetails) + /// An unspecified error. + case groupAddMemberDetails(TeamLog.GroupAddMemberDetails) + /// An unspecified error. + case groupChangeExternalIdDetails(TeamLog.GroupChangeExternalIdDetails) + /// An unspecified error. + case groupChangeManagementTypeDetails(TeamLog.GroupChangeManagementTypeDetails) + /// An unspecified error. + case groupChangeMemberRoleDetails(TeamLog.GroupChangeMemberRoleDetails) + /// An unspecified error. + case groupCreateDetails(TeamLog.GroupCreateDetails) + /// An unspecified error. + case groupDeleteDetails(TeamLog.GroupDeleteDetails) + /// An unspecified error. + case groupDescriptionUpdatedDetails(TeamLog.GroupDescriptionUpdatedDetails) + /// An unspecified error. + case groupJoinPolicyUpdatedDetails(TeamLog.GroupJoinPolicyUpdatedDetails) + /// An unspecified error. + case groupMovedDetails(TeamLog.GroupMovedDetails) + /// An unspecified error. + case groupRemoveExternalIdDetails(TeamLog.GroupRemoveExternalIdDetails) + /// An unspecified error. + case groupRemoveMemberDetails(TeamLog.GroupRemoveMemberDetails) + /// An unspecified error. + case groupRenameDetails(TeamLog.GroupRenameDetails) + /// An unspecified error. + case emmErrorDetails(TeamLog.EmmErrorDetails) + /// An unspecified error. + case loginFailDetails(TeamLog.LoginFailDetails) + /// An unspecified error. + case loginSuccessDetails(TeamLog.LoginSuccessDetails) + /// An unspecified error. + case logoutDetails(TeamLog.LogoutDetails) + /// An unspecified error. + case resellerSupportSessionEndDetails(TeamLog.ResellerSupportSessionEndDetails) + /// An unspecified error. + case resellerSupportSessionStartDetails(TeamLog.ResellerSupportSessionStartDetails) + /// An unspecified error. + case signInAsSessionEndDetails(TeamLog.SignInAsSessionEndDetails) + /// An unspecified error. + case signInAsSessionStartDetails(TeamLog.SignInAsSessionStartDetails) + /// An unspecified error. + case ssoErrorDetails(TeamLog.SsoErrorDetails) + /// An unspecified error. + case memberAddNameDetails(TeamLog.MemberAddNameDetails) + /// An unspecified error. + case memberChangeAdminRoleDetails(TeamLog.MemberChangeAdminRoleDetails) + /// An unspecified error. + case memberChangeEmailDetails(TeamLog.MemberChangeEmailDetails) + /// An unspecified error. + case memberChangeMembershipTypeDetails(TeamLog.MemberChangeMembershipTypeDetails) + /// An unspecified error. + case memberChangeNameDetails(TeamLog.MemberChangeNameDetails) + /// An unspecified error. + case memberChangeStatusDetails(TeamLog.MemberChangeStatusDetails) + /// An unspecified error. + case memberDeleteManualContactsDetails(TeamLog.MemberDeleteManualContactsDetails) + /// An unspecified error. + case memberPermanentlyDeleteAccountContentsDetails(TeamLog.MemberPermanentlyDeleteAccountContentsDetails) + /// An unspecified error. + case memberSpaceLimitsAddCustomQuotaDetails(TeamLog.MemberSpaceLimitsAddCustomQuotaDetails) + /// An unspecified error. + case memberSpaceLimitsChangeCustomQuotaDetails(TeamLog.MemberSpaceLimitsChangeCustomQuotaDetails) + /// An unspecified error. + case memberSpaceLimitsChangeStatusDetails(TeamLog.MemberSpaceLimitsChangeStatusDetails) + /// An unspecified error. + case memberSpaceLimitsRemoveCustomQuotaDetails(TeamLog.MemberSpaceLimitsRemoveCustomQuotaDetails) + /// An unspecified error. + case memberSuggestDetails(TeamLog.MemberSuggestDetails) + /// An unspecified error. + case memberTransferAccountContentsDetails(TeamLog.MemberTransferAccountContentsDetails) + /// An unspecified error. + case secondaryMailsPolicyChangedDetails(TeamLog.SecondaryMailsPolicyChangedDetails) + /// An unspecified error. + case paperContentAddMemberDetails(TeamLog.PaperContentAddMemberDetails) + /// An unspecified error. + case paperContentAddToFolderDetails(TeamLog.PaperContentAddToFolderDetails) + /// An unspecified error. + case paperContentArchiveDetails(TeamLog.PaperContentArchiveDetails) + /// An unspecified error. + case paperContentCreateDetails(TeamLog.PaperContentCreateDetails) + /// An unspecified error. + case paperContentPermanentlyDeleteDetails(TeamLog.PaperContentPermanentlyDeleteDetails) + /// An unspecified error. + case paperContentRemoveFromFolderDetails(TeamLog.PaperContentRemoveFromFolderDetails) + /// An unspecified error. + case paperContentRemoveMemberDetails(TeamLog.PaperContentRemoveMemberDetails) + /// An unspecified error. + case paperContentRenameDetails(TeamLog.PaperContentRenameDetails) + /// An unspecified error. + case paperContentRestoreDetails(TeamLog.PaperContentRestoreDetails) + /// An unspecified error. + case paperDocAddCommentDetails(TeamLog.PaperDocAddCommentDetails) + /// An unspecified error. + case paperDocChangeMemberRoleDetails(TeamLog.PaperDocChangeMemberRoleDetails) + /// An unspecified error. + case paperDocChangeSharingPolicyDetails(TeamLog.PaperDocChangeSharingPolicyDetails) + /// An unspecified error. + case paperDocChangeSubscriptionDetails(TeamLog.PaperDocChangeSubscriptionDetails) + /// An unspecified error. + case paperDocDeletedDetails(TeamLog.PaperDocDeletedDetails) + /// An unspecified error. + case paperDocDeleteCommentDetails(TeamLog.PaperDocDeleteCommentDetails) + /// An unspecified error. + case paperDocDownloadDetails(TeamLog.PaperDocDownloadDetails) + /// An unspecified error. + case paperDocEditDetails(TeamLog.PaperDocEditDetails) + /// An unspecified error. + case paperDocEditCommentDetails(TeamLog.PaperDocEditCommentDetails) + /// An unspecified error. + case paperDocFollowedDetails(TeamLog.PaperDocFollowedDetails) + /// An unspecified error. + case paperDocMentionDetails(TeamLog.PaperDocMentionDetails) + /// An unspecified error. + case paperDocOwnershipChangedDetails(TeamLog.PaperDocOwnershipChangedDetails) + /// An unspecified error. + case paperDocRequestAccessDetails(TeamLog.PaperDocRequestAccessDetails) + /// An unspecified error. + case paperDocResolveCommentDetails(TeamLog.PaperDocResolveCommentDetails) + /// An unspecified error. + case paperDocRevertDetails(TeamLog.PaperDocRevertDetails) + /// An unspecified error. + case paperDocSlackShareDetails(TeamLog.PaperDocSlackShareDetails) + /// An unspecified error. + case paperDocTeamInviteDetails(TeamLog.PaperDocTeamInviteDetails) + /// An unspecified error. + case paperDocTrashedDetails(TeamLog.PaperDocTrashedDetails) + /// An unspecified error. + case paperDocUnresolveCommentDetails(TeamLog.PaperDocUnresolveCommentDetails) + /// An unspecified error. + case paperDocUntrashedDetails(TeamLog.PaperDocUntrashedDetails) + /// An unspecified error. + case paperDocViewDetails(TeamLog.PaperDocViewDetails) + /// An unspecified error. + case paperExternalViewAllowDetails(TeamLog.PaperExternalViewAllowDetails) + /// An unspecified error. + case paperExternalViewDefaultTeamDetails(TeamLog.PaperExternalViewDefaultTeamDetails) + /// An unspecified error. + case paperExternalViewForbidDetails(TeamLog.PaperExternalViewForbidDetails) + /// An unspecified error. + case paperFolderChangeSubscriptionDetails(TeamLog.PaperFolderChangeSubscriptionDetails) + /// An unspecified error. + case paperFolderDeletedDetails(TeamLog.PaperFolderDeletedDetails) + /// An unspecified error. + case paperFolderFollowedDetails(TeamLog.PaperFolderFollowedDetails) + /// An unspecified error. + case paperFolderTeamInviteDetails(TeamLog.PaperFolderTeamInviteDetails) + /// An unspecified error. + case passwordChangeDetails(TeamLog.PasswordChangeDetails) + /// An unspecified error. + case passwordResetDetails(TeamLog.PasswordResetDetails) + /// An unspecified error. + case passwordResetAllDetails(TeamLog.PasswordResetAllDetails) + /// An unspecified error. + case emmCreateExceptionsReportDetails(TeamLog.EmmCreateExceptionsReportDetails) + /// An unspecified error. + case emmCreateUsageReportDetails(TeamLog.EmmCreateUsageReportDetails) + /// An unspecified error. + case exportMembersReportDetails(TeamLog.ExportMembersReportDetails) + /// An unspecified error. + case paperAdminExportStartDetails(TeamLog.PaperAdminExportStartDetails) + /// An unspecified error. + case smartSyncCreateAdminPrivilegeReportDetails(TeamLog.SmartSyncCreateAdminPrivilegeReportDetails) + /// An unspecified error. + case teamActivityCreateReportDetails(TeamLog.TeamActivityCreateReportDetails) + /// An unspecified error. + case collectionShareDetails(TeamLog.CollectionShareDetails) + /// An unspecified error. + case noteAclInviteOnlyDetails(TeamLog.NoteAclInviteOnlyDetails) + /// An unspecified error. + case noteAclLinkDetails(TeamLog.NoteAclLinkDetails) + /// An unspecified error. + case noteAclTeamLinkDetails(TeamLog.NoteAclTeamLinkDetails) + /// An unspecified error. + case noteSharedDetails(TeamLog.NoteSharedDetails) + /// An unspecified error. + case noteShareReceiveDetails(TeamLog.NoteShareReceiveDetails) + /// An unspecified error. + case openNoteSharedDetails(TeamLog.OpenNoteSharedDetails) + /// An unspecified error. + case sfAddGroupDetails(TeamLog.SfAddGroupDetails) + /// An unspecified error. + case sfAllowNonMembersToViewSharedLinksDetails(TeamLog.SfAllowNonMembersToViewSharedLinksDetails) + /// An unspecified error. + case sfExternalInviteWarnDetails(TeamLog.SfExternalInviteWarnDetails) + /// An unspecified error. + case sfFbInviteDetails(TeamLog.SfFbInviteDetails) + /// An unspecified error. + case sfFbInviteChangeRoleDetails(TeamLog.SfFbInviteChangeRoleDetails) + /// An unspecified error. + case sfFbUninviteDetails(TeamLog.SfFbUninviteDetails) + /// An unspecified error. + case sfInviteGroupDetails(TeamLog.SfInviteGroupDetails) + /// An unspecified error. + case sfTeamGrantAccessDetails(TeamLog.SfTeamGrantAccessDetails) + /// An unspecified error. + case sfTeamInviteDetails(TeamLog.SfTeamInviteDetails) + /// An unspecified error. + case sfTeamInviteChangeRoleDetails(TeamLog.SfTeamInviteChangeRoleDetails) + /// An unspecified error. + case sfTeamJoinDetails(TeamLog.SfTeamJoinDetails) + /// An unspecified error. + case sfTeamJoinFromOobLinkDetails(TeamLog.SfTeamJoinFromOobLinkDetails) + /// An unspecified error. + case sfTeamUninviteDetails(TeamLog.SfTeamUninviteDetails) + /// An unspecified error. + case sharedContentAddInviteesDetails(TeamLog.SharedContentAddInviteesDetails) + /// An unspecified error. + case sharedContentAddLinkExpiryDetails(TeamLog.SharedContentAddLinkExpiryDetails) + /// An unspecified error. + case sharedContentAddLinkPasswordDetails(TeamLog.SharedContentAddLinkPasswordDetails) + /// An unspecified error. + case sharedContentAddMemberDetails(TeamLog.SharedContentAddMemberDetails) + /// An unspecified error. + case sharedContentChangeDownloadsPolicyDetails(TeamLog.SharedContentChangeDownloadsPolicyDetails) + /// An unspecified error. + case sharedContentChangeInviteeRoleDetails(TeamLog.SharedContentChangeInviteeRoleDetails) + /// An unspecified error. + case sharedContentChangeLinkAudienceDetails(TeamLog.SharedContentChangeLinkAudienceDetails) + /// An unspecified error. + case sharedContentChangeLinkExpiryDetails(TeamLog.SharedContentChangeLinkExpiryDetails) + /// An unspecified error. + case sharedContentChangeLinkPasswordDetails(TeamLog.SharedContentChangeLinkPasswordDetails) + /// An unspecified error. + case sharedContentChangeMemberRoleDetails(TeamLog.SharedContentChangeMemberRoleDetails) + /// An unspecified error. + case sharedContentChangeViewerInfoPolicyDetails(TeamLog.SharedContentChangeViewerInfoPolicyDetails) + /// An unspecified error. + case sharedContentClaimInvitationDetails(TeamLog.SharedContentClaimInvitationDetails) + /// An unspecified error. + case sharedContentCopyDetails(TeamLog.SharedContentCopyDetails) + /// An unspecified error. + case sharedContentDownloadDetails(TeamLog.SharedContentDownloadDetails) + /// An unspecified error. + case sharedContentRelinquishMembershipDetails(TeamLog.SharedContentRelinquishMembershipDetails) + /// An unspecified error. + case sharedContentRemoveInviteesDetails(TeamLog.SharedContentRemoveInviteesDetails) + /// An unspecified error. + case sharedContentRemoveLinkExpiryDetails(TeamLog.SharedContentRemoveLinkExpiryDetails) + /// An unspecified error. + case sharedContentRemoveLinkPasswordDetails(TeamLog.SharedContentRemoveLinkPasswordDetails) + /// An unspecified error. + case sharedContentRemoveMemberDetails(TeamLog.SharedContentRemoveMemberDetails) + /// An unspecified error. + case sharedContentRequestAccessDetails(TeamLog.SharedContentRequestAccessDetails) + /// An unspecified error. + case sharedContentUnshareDetails(TeamLog.SharedContentUnshareDetails) + /// An unspecified error. + case sharedContentViewDetails(TeamLog.SharedContentViewDetails) + /// An unspecified error. + case sharedFolderChangeLinkPolicyDetails(TeamLog.SharedFolderChangeLinkPolicyDetails) + /// An unspecified error. + case sharedFolderChangeMembersInheritancePolicyDetails(TeamLog.SharedFolderChangeMembersInheritancePolicyDetails) + /// An unspecified error. + case sharedFolderChangeMembersManagementPolicyDetails(TeamLog.SharedFolderChangeMembersManagementPolicyDetails) + /// An unspecified error. + case sharedFolderChangeMembersPolicyDetails(TeamLog.SharedFolderChangeMembersPolicyDetails) + /// An unspecified error. + case sharedFolderCreateDetails(TeamLog.SharedFolderCreateDetails) + /// An unspecified error. + case sharedFolderDeclineInvitationDetails(TeamLog.SharedFolderDeclineInvitationDetails) + /// An unspecified error. + case sharedFolderMountDetails(TeamLog.SharedFolderMountDetails) + /// An unspecified error. + case sharedFolderNestDetails(TeamLog.SharedFolderNestDetails) + /// An unspecified error. + case sharedFolderTransferOwnershipDetails(TeamLog.SharedFolderTransferOwnershipDetails) + /// An unspecified error. + case sharedFolderUnmountDetails(TeamLog.SharedFolderUnmountDetails) + /// An unspecified error. + case sharedLinkAddExpiryDetails(TeamLog.SharedLinkAddExpiryDetails) + /// An unspecified error. + case sharedLinkChangeExpiryDetails(TeamLog.SharedLinkChangeExpiryDetails) + /// An unspecified error. + case sharedLinkChangeVisibilityDetails(TeamLog.SharedLinkChangeVisibilityDetails) + /// An unspecified error. + case sharedLinkCopyDetails(TeamLog.SharedLinkCopyDetails) + /// An unspecified error. + case sharedLinkCreateDetails(TeamLog.SharedLinkCreateDetails) + /// An unspecified error. + case sharedLinkDisableDetails(TeamLog.SharedLinkDisableDetails) + /// An unspecified error. + case sharedLinkDownloadDetails(TeamLog.SharedLinkDownloadDetails) + /// An unspecified error. + case sharedLinkRemoveExpiryDetails(TeamLog.SharedLinkRemoveExpiryDetails) + /// An unspecified error. + case sharedLinkShareDetails(TeamLog.SharedLinkShareDetails) + /// An unspecified error. + case sharedLinkViewDetails(TeamLog.SharedLinkViewDetails) + /// An unspecified error. + case sharedNoteOpenedDetails(TeamLog.SharedNoteOpenedDetails) + /// An unspecified error. + case shmodelGroupShareDetails(TeamLog.ShmodelGroupShareDetails) + /// An unspecified error. + case showcaseAccessGrantedDetails(TeamLog.ShowcaseAccessGrantedDetails) + /// An unspecified error. + case showcaseAddMemberDetails(TeamLog.ShowcaseAddMemberDetails) + /// An unspecified error. + case showcaseArchivedDetails(TeamLog.ShowcaseArchivedDetails) + /// An unspecified error. + case showcaseCreatedDetails(TeamLog.ShowcaseCreatedDetails) + /// An unspecified error. + case showcaseDeleteCommentDetails(TeamLog.ShowcaseDeleteCommentDetails) + /// An unspecified error. + case showcaseEditedDetails(TeamLog.ShowcaseEditedDetails) + /// An unspecified error. + case showcaseEditCommentDetails(TeamLog.ShowcaseEditCommentDetails) + /// An unspecified error. + case showcaseFileAddedDetails(TeamLog.ShowcaseFileAddedDetails) + /// An unspecified error. + case showcaseFileDownloadDetails(TeamLog.ShowcaseFileDownloadDetails) + /// An unspecified error. + case showcaseFileRemovedDetails(TeamLog.ShowcaseFileRemovedDetails) + /// An unspecified error. + case showcaseFileViewDetails(TeamLog.ShowcaseFileViewDetails) + /// An unspecified error. + case showcasePermanentlyDeletedDetails(TeamLog.ShowcasePermanentlyDeletedDetails) + /// An unspecified error. + case showcasePostCommentDetails(TeamLog.ShowcasePostCommentDetails) + /// An unspecified error. + case showcaseRemoveMemberDetails(TeamLog.ShowcaseRemoveMemberDetails) + /// An unspecified error. + case showcaseRenamedDetails(TeamLog.ShowcaseRenamedDetails) + /// An unspecified error. + case showcaseRequestAccessDetails(TeamLog.ShowcaseRequestAccessDetails) + /// An unspecified error. + case showcaseResolveCommentDetails(TeamLog.ShowcaseResolveCommentDetails) + /// An unspecified error. + case showcaseRestoredDetails(TeamLog.ShowcaseRestoredDetails) + /// An unspecified error. + case showcaseTrashedDetails(TeamLog.ShowcaseTrashedDetails) + /// An unspecified error. + case showcaseTrashedDeprecatedDetails(TeamLog.ShowcaseTrashedDeprecatedDetails) + /// An unspecified error. + case showcaseUnresolveCommentDetails(TeamLog.ShowcaseUnresolveCommentDetails) + /// An unspecified error. + case showcaseUntrashedDetails(TeamLog.ShowcaseUntrashedDetails) + /// An unspecified error. + case showcaseUntrashedDeprecatedDetails(TeamLog.ShowcaseUntrashedDeprecatedDetails) + /// An unspecified error. + case showcaseViewDetails(TeamLog.ShowcaseViewDetails) + /// An unspecified error. + case ssoAddCertDetails(TeamLog.SsoAddCertDetails) + /// An unspecified error. + case ssoAddLoginUrlDetails(TeamLog.SsoAddLoginUrlDetails) + /// An unspecified error. + case ssoAddLogoutUrlDetails(TeamLog.SsoAddLogoutUrlDetails) + /// An unspecified error. + case ssoChangeCertDetails(TeamLog.SsoChangeCertDetails) + /// An unspecified error. + case ssoChangeLoginUrlDetails(TeamLog.SsoChangeLoginUrlDetails) + /// An unspecified error. + case ssoChangeLogoutUrlDetails(TeamLog.SsoChangeLogoutUrlDetails) + /// An unspecified error. + case ssoChangeSamlIdentityModeDetails(TeamLog.SsoChangeSamlIdentityModeDetails) + /// An unspecified error. + case ssoRemoveCertDetails(TeamLog.SsoRemoveCertDetails) + /// An unspecified error. + case ssoRemoveLoginUrlDetails(TeamLog.SsoRemoveLoginUrlDetails) + /// An unspecified error. + case ssoRemoveLogoutUrlDetails(TeamLog.SsoRemoveLogoutUrlDetails) + /// An unspecified error. + case teamFolderChangeStatusDetails(TeamLog.TeamFolderChangeStatusDetails) + /// An unspecified error. + case teamFolderCreateDetails(TeamLog.TeamFolderCreateDetails) + /// An unspecified error. + case teamFolderDowngradeDetails(TeamLog.TeamFolderDowngradeDetails) + /// An unspecified error. + case teamFolderPermanentlyDeleteDetails(TeamLog.TeamFolderPermanentlyDeleteDetails) + /// An unspecified error. + case teamFolderRenameDetails(TeamLog.TeamFolderRenameDetails) + /// An unspecified error. + case teamSelectiveSyncSettingsChangedDetails(TeamLog.TeamSelectiveSyncSettingsChangedDetails) + /// An unspecified error. + case accountCaptureChangePolicyDetails(TeamLog.AccountCaptureChangePolicyDetails) + /// An unspecified error. + case allowDownloadDisabledDetails(TeamLog.AllowDownloadDisabledDetails) + /// An unspecified error. + case allowDownloadEnabledDetails(TeamLog.AllowDownloadEnabledDetails) + /// An unspecified error. + case cameraUploadsPolicyChangedDetails(TeamLog.CameraUploadsPolicyChangedDetails) + /// An unspecified error. + case dataPlacementRestrictionChangePolicyDetails(TeamLog.DataPlacementRestrictionChangePolicyDetails) + /// An unspecified error. + case dataPlacementRestrictionSatisfyPolicyDetails(TeamLog.DataPlacementRestrictionSatisfyPolicyDetails) + /// An unspecified error. + case deviceApprovalsChangeDesktopPolicyDetails(TeamLog.DeviceApprovalsChangeDesktopPolicyDetails) + /// An unspecified error. + case deviceApprovalsChangeMobilePolicyDetails(TeamLog.DeviceApprovalsChangeMobilePolicyDetails) + /// An unspecified error. + case deviceApprovalsChangeOverageActionDetails(TeamLog.DeviceApprovalsChangeOverageActionDetails) + /// An unspecified error. + case deviceApprovalsChangeUnlinkActionDetails(TeamLog.DeviceApprovalsChangeUnlinkActionDetails) + /// An unspecified error. + case directoryRestrictionsAddMembersDetails(TeamLog.DirectoryRestrictionsAddMembersDetails) + /// An unspecified error. + case directoryRestrictionsRemoveMembersDetails(TeamLog.DirectoryRestrictionsRemoveMembersDetails) + /// An unspecified error. + case emmAddExceptionDetails(TeamLog.EmmAddExceptionDetails) + /// An unspecified error. + case emmChangePolicyDetails(TeamLog.EmmChangePolicyDetails) + /// An unspecified error. + case emmRemoveExceptionDetails(TeamLog.EmmRemoveExceptionDetails) + /// An unspecified error. + case extendedVersionHistoryChangePolicyDetails(TeamLog.ExtendedVersionHistoryChangePolicyDetails) + /// An unspecified error. + case fileCommentsChangePolicyDetails(TeamLog.FileCommentsChangePolicyDetails) + /// An unspecified error. + case fileRequestsChangePolicyDetails(TeamLog.FileRequestsChangePolicyDetails) + /// An unspecified error. + case fileRequestsEmailsEnabledDetails(TeamLog.FileRequestsEmailsEnabledDetails) + /// An unspecified error. + case fileRequestsEmailsRestrictedToTeamOnlyDetails(TeamLog.FileRequestsEmailsRestrictedToTeamOnlyDetails) + /// An unspecified error. + case googleSsoChangePolicyDetails(TeamLog.GoogleSsoChangePolicyDetails) + /// An unspecified error. + case groupUserManagementChangePolicyDetails(TeamLog.GroupUserManagementChangePolicyDetails) + /// An unspecified error. + case memberRequestsChangePolicyDetails(TeamLog.MemberRequestsChangePolicyDetails) + /// An unspecified error. + case memberSpaceLimitsAddExceptionDetails(TeamLog.MemberSpaceLimitsAddExceptionDetails) + /// An unspecified error. + case memberSpaceLimitsChangeCapsTypePolicyDetails(TeamLog.MemberSpaceLimitsChangeCapsTypePolicyDetails) + /// An unspecified error. + case memberSpaceLimitsChangePolicyDetails(TeamLog.MemberSpaceLimitsChangePolicyDetails) + /// An unspecified error. + case memberSpaceLimitsRemoveExceptionDetails(TeamLog.MemberSpaceLimitsRemoveExceptionDetails) + /// An unspecified error. + case memberSuggestionsChangePolicyDetails(TeamLog.MemberSuggestionsChangePolicyDetails) + /// An unspecified error. + case microsoftOfficeAddinChangePolicyDetails(TeamLog.MicrosoftOfficeAddinChangePolicyDetails) + /// An unspecified error. + case networkControlChangePolicyDetails(TeamLog.NetworkControlChangePolicyDetails) + /// An unspecified error. + case paperChangeDeploymentPolicyDetails(TeamLog.PaperChangeDeploymentPolicyDetails) + /// An unspecified error. + case paperChangeMemberLinkPolicyDetails(TeamLog.PaperChangeMemberLinkPolicyDetails) + /// An unspecified error. + case paperChangeMemberPolicyDetails(TeamLog.PaperChangeMemberPolicyDetails) + /// An unspecified error. + case paperChangePolicyDetails(TeamLog.PaperChangePolicyDetails) + /// An unspecified error. + case paperEnabledUsersGroupAdditionDetails(TeamLog.PaperEnabledUsersGroupAdditionDetails) + /// An unspecified error. + case paperEnabledUsersGroupRemovalDetails(TeamLog.PaperEnabledUsersGroupRemovalDetails) + /// An unspecified error. + case permanentDeleteChangePolicyDetails(TeamLog.PermanentDeleteChangePolicyDetails) + /// An unspecified error. + case sharingChangeFolderJoinPolicyDetails(TeamLog.SharingChangeFolderJoinPolicyDetails) + /// An unspecified error. + case sharingChangeLinkPolicyDetails(TeamLog.SharingChangeLinkPolicyDetails) + /// An unspecified error. + case sharingChangeMemberPolicyDetails(TeamLog.SharingChangeMemberPolicyDetails) + /// An unspecified error. + case showcaseChangeDownloadPolicyDetails(TeamLog.ShowcaseChangeDownloadPolicyDetails) + /// An unspecified error. + case showcaseChangeEnabledPolicyDetails(TeamLog.ShowcaseChangeEnabledPolicyDetails) + /// An unspecified error. + case showcaseChangeExternalSharingPolicyDetails(TeamLog.ShowcaseChangeExternalSharingPolicyDetails) + /// An unspecified error. + case smartSyncChangePolicyDetails(TeamLog.SmartSyncChangePolicyDetails) + /// An unspecified error. + case smartSyncNotOptOutDetails(TeamLog.SmartSyncNotOptOutDetails) + /// An unspecified error. + case smartSyncOptOutDetails(TeamLog.SmartSyncOptOutDetails) + /// An unspecified error. + case ssoChangePolicyDetails(TeamLog.SsoChangePolicyDetails) + /// An unspecified error. + case teamSelectiveSyncPolicyChangedDetails(TeamLog.TeamSelectiveSyncPolicyChangedDetails) + /// An unspecified error. + case tfaChangePolicyDetails(TeamLog.TfaChangePolicyDetails) + /// An unspecified error. + case twoAccountChangePolicyDetails(TeamLog.TwoAccountChangePolicyDetails) + /// An unspecified error. + case viewerInfoPolicyChangedDetails(TeamLog.ViewerInfoPolicyChangedDetails) + /// An unspecified error. + case webSessionsChangeFixedLengthPolicyDetails(TeamLog.WebSessionsChangeFixedLengthPolicyDetails) + /// An unspecified error. + case webSessionsChangeIdleLengthPolicyDetails(TeamLog.WebSessionsChangeIdleLengthPolicyDetails) + /// An unspecified error. + case teamMergeFromDetails(TeamLog.TeamMergeFromDetails) + /// An unspecified error. + case teamMergeToDetails(TeamLog.TeamMergeToDetails) + /// An unspecified error. + case teamProfileAddLogoDetails(TeamLog.TeamProfileAddLogoDetails) + /// An unspecified error. + case teamProfileChangeDefaultLanguageDetails(TeamLog.TeamProfileChangeDefaultLanguageDetails) + /// An unspecified error. + case teamProfileChangeLogoDetails(TeamLog.TeamProfileChangeLogoDetails) + /// An unspecified error. + case teamProfileChangeNameDetails(TeamLog.TeamProfileChangeNameDetails) + /// An unspecified error. + case teamProfileRemoveLogoDetails(TeamLog.TeamProfileRemoveLogoDetails) + /// An unspecified error. + case tfaAddBackupPhoneDetails(TeamLog.TfaAddBackupPhoneDetails) + /// An unspecified error. + case tfaAddSecurityKeyDetails(TeamLog.TfaAddSecurityKeyDetails) + /// An unspecified error. + case tfaChangeBackupPhoneDetails(TeamLog.TfaChangeBackupPhoneDetails) + /// An unspecified error. + case tfaChangeStatusDetails(TeamLog.TfaChangeStatusDetails) + /// An unspecified error. + case tfaRemoveBackupPhoneDetails(TeamLog.TfaRemoveBackupPhoneDetails) + /// An unspecified error. + case tfaRemoveSecurityKeyDetails(TeamLog.TfaRemoveSecurityKeyDetails) + /// An unspecified error. + case tfaResetDetails(TeamLog.TfaResetDetails) + /// Hints that this event was returned with missing details due to an internal error. + case missingDetails(TeamLog.MissingDetails) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EventDetailsSerializer().serialize(self)))" + } + } + open class EventDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EventDetails) -> JSON { + switch value { + case .appLinkTeamDetails(let arg): + var d = Serialization.getFields(TeamLog.AppLinkTeamDetailsSerializer().serialize(arg)) + d[".tag"] = .str("app_link_team_details") + return .dictionary(d) + case .appLinkUserDetails(let arg): + var d = Serialization.getFields(TeamLog.AppLinkUserDetailsSerializer().serialize(arg)) + d[".tag"] = .str("app_link_user_details") + return .dictionary(d) + case .appUnlinkTeamDetails(let arg): + var d = Serialization.getFields(TeamLog.AppUnlinkTeamDetailsSerializer().serialize(arg)) + d[".tag"] = .str("app_unlink_team_details") + return .dictionary(d) + case .appUnlinkUserDetails(let arg): + var d = Serialization.getFields(TeamLog.AppUnlinkUserDetailsSerializer().serialize(arg)) + d[".tag"] = .str("app_unlink_user_details") + return .dictionary(d) + case .fileAddCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.FileAddCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_add_comment_details") + return .dictionary(d) + case .fileChangeCommentSubscriptionDetails(let arg): + var d = Serialization.getFields(TeamLog.FileChangeCommentSubscriptionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_change_comment_subscription_details") + return .dictionary(d) + case .fileDeleteCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.FileDeleteCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_delete_comment_details") + return .dictionary(d) + case .fileEditCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.FileEditCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_edit_comment_details") + return .dictionary(d) + case .fileLikeCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.FileLikeCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_like_comment_details") + return .dictionary(d) + case .fileResolveCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.FileResolveCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_resolve_comment_details") + return .dictionary(d) + case .fileUnlikeCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.FileUnlikeCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_unlike_comment_details") + return .dictionary(d) + case .fileUnresolveCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.FileUnresolveCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_unresolve_comment_details") + return .dictionary(d) + case .deviceChangeIpDesktopDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceChangeIpDesktopDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_change_ip_desktop_details") + return .dictionary(d) + case .deviceChangeIpMobileDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceChangeIpMobileDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_change_ip_mobile_details") + return .dictionary(d) + case .deviceChangeIpWebDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceChangeIpWebDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_change_ip_web_details") + return .dictionary(d) + case .deviceDeleteOnUnlinkFailDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceDeleteOnUnlinkFailDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_delete_on_unlink_fail_details") + return .dictionary(d) + case .deviceDeleteOnUnlinkSuccessDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceDeleteOnUnlinkSuccessDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_delete_on_unlink_success_details") + return .dictionary(d) + case .deviceLinkFailDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceLinkFailDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_link_fail_details") + return .dictionary(d) + case .deviceLinkSuccessDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceLinkSuccessDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_link_success_details") + return .dictionary(d) + case .deviceManagementDisabledDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceManagementDisabledDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_management_disabled_details") + return .dictionary(d) + case .deviceManagementEnabledDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceManagementEnabledDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_management_enabled_details") + return .dictionary(d) + case .deviceUnlinkDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceUnlinkDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_unlink_details") + return .dictionary(d) + case .emmRefreshAuthTokenDetails(let arg): + var d = Serialization.getFields(TeamLog.EmmRefreshAuthTokenDetailsSerializer().serialize(arg)) + d[".tag"] = .str("emm_refresh_auth_token_details") + return .dictionary(d) + case .accountCaptureChangeAvailabilityDetails(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureChangeAvailabilityDetailsSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_change_availability_details") + return .dictionary(d) + case .accountCaptureMigrateAccountDetails(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureMigrateAccountDetailsSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_migrate_account_details") + return .dictionary(d) + case .accountCaptureNotificationEmailsSentDetails(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureNotificationEmailsSentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_notification_emails_sent_details") + return .dictionary(d) + case .accountCaptureRelinquishAccountDetails(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureRelinquishAccountDetailsSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_relinquish_account_details") + return .dictionary(d) + case .disabledDomainInvitesDetails(let arg): + var d = Serialization.getFields(TeamLog.DisabledDomainInvitesDetailsSerializer().serialize(arg)) + d[".tag"] = .str("disabled_domain_invites_details") + return .dictionary(d) + case .domainInvitesApproveRequestToJoinTeamDetails(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesApproveRequestToJoinTeamDetailsSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_approve_request_to_join_team_details") + return .dictionary(d) + case .domainInvitesDeclineRequestToJoinTeamDetails(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesDeclineRequestToJoinTeamDetailsSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_decline_request_to_join_team_details") + return .dictionary(d) + case .domainInvitesEmailExistingUsersDetails(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesEmailExistingUsersDetailsSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_email_existing_users_details") + return .dictionary(d) + case .domainInvitesRequestToJoinTeamDetails(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesRequestToJoinTeamDetailsSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_request_to_join_team_details") + return .dictionary(d) + case .domainInvitesSetInviteNewUserPrefToNoDetails(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesSetInviteNewUserPrefToNoDetailsSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_set_invite_new_user_pref_to_no_details") + return .dictionary(d) + case .domainInvitesSetInviteNewUserPrefToYesDetails(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesSetInviteNewUserPrefToYesDetailsSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_set_invite_new_user_pref_to_yes_details") + return .dictionary(d) + case .domainVerificationAddDomainFailDetails(let arg): + var d = Serialization.getFields(TeamLog.DomainVerificationAddDomainFailDetailsSerializer().serialize(arg)) + d[".tag"] = .str("domain_verification_add_domain_fail_details") + return .dictionary(d) + case .domainVerificationAddDomainSuccessDetails(let arg): + var d = Serialization.getFields(TeamLog.DomainVerificationAddDomainSuccessDetailsSerializer().serialize(arg)) + d[".tag"] = .str("domain_verification_add_domain_success_details") + return .dictionary(d) + case .domainVerificationRemoveDomainDetails(let arg): + var d = Serialization.getFields(TeamLog.DomainVerificationRemoveDomainDetailsSerializer().serialize(arg)) + d[".tag"] = .str("domain_verification_remove_domain_details") + return .dictionary(d) + case .enabledDomainInvitesDetails(let arg): + var d = Serialization.getFields(TeamLog.EnabledDomainInvitesDetailsSerializer().serialize(arg)) + d[".tag"] = .str("enabled_domain_invites_details") + return .dictionary(d) + case .createFolderDetails(let arg): + var d = Serialization.getFields(TeamLog.CreateFolderDetailsSerializer().serialize(arg)) + d[".tag"] = .str("create_folder_details") + return .dictionary(d) + case .fileAddDetails(let arg): + var d = Serialization.getFields(TeamLog.FileAddDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_add_details") + return .dictionary(d) + case .fileCopyDetails(let arg): + var d = Serialization.getFields(TeamLog.FileCopyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_copy_details") + return .dictionary(d) + case .fileDeleteDetails(let arg): + var d = Serialization.getFields(TeamLog.FileDeleteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_delete_details") + return .dictionary(d) + case .fileDownloadDetails(let arg): + var d = Serialization.getFields(TeamLog.FileDownloadDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_download_details") + return .dictionary(d) + case .fileEditDetails(let arg): + var d = Serialization.getFields(TeamLog.FileEditDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_edit_details") + return .dictionary(d) + case .fileGetCopyReferenceDetails(let arg): + var d = Serialization.getFields(TeamLog.FileGetCopyReferenceDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_get_copy_reference_details") + return .dictionary(d) + case .fileMoveDetails(let arg): + var d = Serialization.getFields(TeamLog.FileMoveDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_move_details") + return .dictionary(d) + case .filePermanentlyDeleteDetails(let arg): + var d = Serialization.getFields(TeamLog.FilePermanentlyDeleteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_permanently_delete_details") + return .dictionary(d) + case .filePreviewDetails(let arg): + var d = Serialization.getFields(TeamLog.FilePreviewDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_preview_details") + return .dictionary(d) + case .fileRenameDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRenameDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_rename_details") + return .dictionary(d) + case .fileRestoreDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRestoreDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_restore_details") + return .dictionary(d) + case .fileRevertDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRevertDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_revert_details") + return .dictionary(d) + case .fileRollbackChangesDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRollbackChangesDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_rollback_changes_details") + return .dictionary(d) + case .fileSaveCopyReferenceDetails(let arg): + var d = Serialization.getFields(TeamLog.FileSaveCopyReferenceDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_save_copy_reference_details") + return .dictionary(d) + case .fileRequestChangeDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRequestChangeDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_request_change_details") + return .dictionary(d) + case .fileRequestCloseDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRequestCloseDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_request_close_details") + return .dictionary(d) + case .fileRequestCreateDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRequestCreateDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_request_create_details") + return .dictionary(d) + case .fileRequestReceiveFileDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRequestReceiveFileDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_request_receive_file_details") + return .dictionary(d) + case .groupAddExternalIdDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupAddExternalIdDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_add_external_id_details") + return .dictionary(d) + case .groupAddMemberDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupAddMemberDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_add_member_details") + return .dictionary(d) + case .groupChangeExternalIdDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupChangeExternalIdDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_change_external_id_details") + return .dictionary(d) + case .groupChangeManagementTypeDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupChangeManagementTypeDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_change_management_type_details") + return .dictionary(d) + case .groupChangeMemberRoleDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupChangeMemberRoleDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_change_member_role_details") + return .dictionary(d) + case .groupCreateDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupCreateDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_create_details") + return .dictionary(d) + case .groupDeleteDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupDeleteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_delete_details") + return .dictionary(d) + case .groupDescriptionUpdatedDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupDescriptionUpdatedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_description_updated_details") + return .dictionary(d) + case .groupJoinPolicyUpdatedDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupJoinPolicyUpdatedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_join_policy_updated_details") + return .dictionary(d) + case .groupMovedDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupMovedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_moved_details") + return .dictionary(d) + case .groupRemoveExternalIdDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupRemoveExternalIdDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_remove_external_id_details") + return .dictionary(d) + case .groupRemoveMemberDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupRemoveMemberDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_remove_member_details") + return .dictionary(d) + case .groupRenameDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupRenameDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_rename_details") + return .dictionary(d) + case .emmErrorDetails(let arg): + var d = Serialization.getFields(TeamLog.EmmErrorDetailsSerializer().serialize(arg)) + d[".tag"] = .str("emm_error_details") + return .dictionary(d) + case .loginFailDetails(let arg): + var d = Serialization.getFields(TeamLog.LoginFailDetailsSerializer().serialize(arg)) + d[".tag"] = .str("login_fail_details") + return .dictionary(d) + case .loginSuccessDetails(let arg): + var d = Serialization.getFields(TeamLog.LoginSuccessDetailsSerializer().serialize(arg)) + d[".tag"] = .str("login_success_details") + return .dictionary(d) + case .logoutDetails(let arg): + var d = Serialization.getFields(TeamLog.LogoutDetailsSerializer().serialize(arg)) + d[".tag"] = .str("logout_details") + return .dictionary(d) + case .resellerSupportSessionEndDetails(let arg): + var d = Serialization.getFields(TeamLog.ResellerSupportSessionEndDetailsSerializer().serialize(arg)) + d[".tag"] = .str("reseller_support_session_end_details") + return .dictionary(d) + case .resellerSupportSessionStartDetails(let arg): + var d = Serialization.getFields(TeamLog.ResellerSupportSessionStartDetailsSerializer().serialize(arg)) + d[".tag"] = .str("reseller_support_session_start_details") + return .dictionary(d) + case .signInAsSessionEndDetails(let arg): + var d = Serialization.getFields(TeamLog.SignInAsSessionEndDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sign_in_as_session_end_details") + return .dictionary(d) + case .signInAsSessionStartDetails(let arg): + var d = Serialization.getFields(TeamLog.SignInAsSessionStartDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sign_in_as_session_start_details") + return .dictionary(d) + case .ssoErrorDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoErrorDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_error_details") + return .dictionary(d) + case .memberAddNameDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberAddNameDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_add_name_details") + return .dictionary(d) + case .memberChangeAdminRoleDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeAdminRoleDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_change_admin_role_details") + return .dictionary(d) + case .memberChangeEmailDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeEmailDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_change_email_details") + return .dictionary(d) + case .memberChangeMembershipTypeDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeMembershipTypeDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_change_membership_type_details") + return .dictionary(d) + case .memberChangeNameDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeNameDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_change_name_details") + return .dictionary(d) + case .memberChangeStatusDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeStatusDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_change_status_details") + return .dictionary(d) + case .memberDeleteManualContactsDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberDeleteManualContactsDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_delete_manual_contacts_details") + return .dictionary(d) + case .memberPermanentlyDeleteAccountContentsDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberPermanentlyDeleteAccountContentsDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_permanently_delete_account_contents_details") + return .dictionary(d) + case .memberSpaceLimitsAddCustomQuotaDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsAddCustomQuotaDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_add_custom_quota_details") + return .dictionary(d) + case .memberSpaceLimitsChangeCustomQuotaDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsChangeCustomQuotaDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_change_custom_quota_details") + return .dictionary(d) + case .memberSpaceLimitsChangeStatusDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsChangeStatusDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_change_status_details") + return .dictionary(d) + case .memberSpaceLimitsRemoveCustomQuotaDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsRemoveCustomQuotaDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_remove_custom_quota_details") + return .dictionary(d) + case .memberSuggestDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSuggestDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_suggest_details") + return .dictionary(d) + case .memberTransferAccountContentsDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberTransferAccountContentsDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_transfer_account_contents_details") + return .dictionary(d) + case .secondaryMailsPolicyChangedDetails(let arg): + var d = Serialization.getFields(TeamLog.SecondaryMailsPolicyChangedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("secondary_mails_policy_changed_details") + return .dictionary(d) + case .paperContentAddMemberDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperContentAddMemberDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_add_member_details") + return .dictionary(d) + case .paperContentAddToFolderDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperContentAddToFolderDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_add_to_folder_details") + return .dictionary(d) + case .paperContentArchiveDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperContentArchiveDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_archive_details") + return .dictionary(d) + case .paperContentCreateDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperContentCreateDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_create_details") + return .dictionary(d) + case .paperContentPermanentlyDeleteDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperContentPermanentlyDeleteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_permanently_delete_details") + return .dictionary(d) + case .paperContentRemoveFromFolderDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperContentRemoveFromFolderDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_remove_from_folder_details") + return .dictionary(d) + case .paperContentRemoveMemberDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperContentRemoveMemberDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_remove_member_details") + return .dictionary(d) + case .paperContentRenameDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperContentRenameDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_rename_details") + return .dictionary(d) + case .paperContentRestoreDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperContentRestoreDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_restore_details") + return .dictionary(d) + case .paperDocAddCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocAddCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_add_comment_details") + return .dictionary(d) + case .paperDocChangeMemberRoleDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocChangeMemberRoleDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_change_member_role_details") + return .dictionary(d) + case .paperDocChangeSharingPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocChangeSharingPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_change_sharing_policy_details") + return .dictionary(d) + case .paperDocChangeSubscriptionDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocChangeSubscriptionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_change_subscription_details") + return .dictionary(d) + case .paperDocDeletedDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocDeletedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_deleted_details") + return .dictionary(d) + case .paperDocDeleteCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocDeleteCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_delete_comment_details") + return .dictionary(d) + case .paperDocDownloadDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocDownloadDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_download_details") + return .dictionary(d) + case .paperDocEditDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocEditDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_edit_details") + return .dictionary(d) + case .paperDocEditCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocEditCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_edit_comment_details") + return .dictionary(d) + case .paperDocFollowedDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocFollowedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_followed_details") + return .dictionary(d) + case .paperDocMentionDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocMentionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_mention_details") + return .dictionary(d) + case .paperDocOwnershipChangedDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocOwnershipChangedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_ownership_changed_details") + return .dictionary(d) + case .paperDocRequestAccessDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocRequestAccessDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_request_access_details") + return .dictionary(d) + case .paperDocResolveCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocResolveCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_resolve_comment_details") + return .dictionary(d) + case .paperDocRevertDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocRevertDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_revert_details") + return .dictionary(d) + case .paperDocSlackShareDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocSlackShareDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_slack_share_details") + return .dictionary(d) + case .paperDocTeamInviteDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocTeamInviteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_team_invite_details") + return .dictionary(d) + case .paperDocTrashedDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocTrashedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_trashed_details") + return .dictionary(d) + case .paperDocUnresolveCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocUnresolveCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_unresolve_comment_details") + return .dictionary(d) + case .paperDocUntrashedDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocUntrashedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_untrashed_details") + return .dictionary(d) + case .paperDocViewDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperDocViewDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_view_details") + return .dictionary(d) + case .paperExternalViewAllowDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperExternalViewAllowDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_external_view_allow_details") + return .dictionary(d) + case .paperExternalViewDefaultTeamDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperExternalViewDefaultTeamDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_external_view_default_team_details") + return .dictionary(d) + case .paperExternalViewForbidDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperExternalViewForbidDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_external_view_forbid_details") + return .dictionary(d) + case .paperFolderChangeSubscriptionDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperFolderChangeSubscriptionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_folder_change_subscription_details") + return .dictionary(d) + case .paperFolderDeletedDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperFolderDeletedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_folder_deleted_details") + return .dictionary(d) + case .paperFolderFollowedDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperFolderFollowedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_folder_followed_details") + return .dictionary(d) + case .paperFolderTeamInviteDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperFolderTeamInviteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_folder_team_invite_details") + return .dictionary(d) + case .passwordChangeDetails(let arg): + var d = Serialization.getFields(TeamLog.PasswordChangeDetailsSerializer().serialize(arg)) + d[".tag"] = .str("password_change_details") + return .dictionary(d) + case .passwordResetDetails(let arg): + var d = Serialization.getFields(TeamLog.PasswordResetDetailsSerializer().serialize(arg)) + d[".tag"] = .str("password_reset_details") + return .dictionary(d) + case .passwordResetAllDetails(let arg): + var d = Serialization.getFields(TeamLog.PasswordResetAllDetailsSerializer().serialize(arg)) + d[".tag"] = .str("password_reset_all_details") + return .dictionary(d) + case .emmCreateExceptionsReportDetails(let arg): + var d = Serialization.getFields(TeamLog.EmmCreateExceptionsReportDetailsSerializer().serialize(arg)) + d[".tag"] = .str("emm_create_exceptions_report_details") + return .dictionary(d) + case .emmCreateUsageReportDetails(let arg): + var d = Serialization.getFields(TeamLog.EmmCreateUsageReportDetailsSerializer().serialize(arg)) + d[".tag"] = .str("emm_create_usage_report_details") + return .dictionary(d) + case .exportMembersReportDetails(let arg): + var d = Serialization.getFields(TeamLog.ExportMembersReportDetailsSerializer().serialize(arg)) + d[".tag"] = .str("export_members_report_details") + return .dictionary(d) + case .paperAdminExportStartDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperAdminExportStartDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_admin_export_start_details") + return .dictionary(d) + case .smartSyncCreateAdminPrivilegeReportDetails(let arg): + var d = Serialization.getFields(TeamLog.SmartSyncCreateAdminPrivilegeReportDetailsSerializer().serialize(arg)) + d[".tag"] = .str("smart_sync_create_admin_privilege_report_details") + return .dictionary(d) + case .teamActivityCreateReportDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamActivityCreateReportDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_activity_create_report_details") + return .dictionary(d) + case .collectionShareDetails(let arg): + var d = Serialization.getFields(TeamLog.CollectionShareDetailsSerializer().serialize(arg)) + d[".tag"] = .str("collection_share_details") + return .dictionary(d) + case .noteAclInviteOnlyDetails(let arg): + var d = Serialization.getFields(TeamLog.NoteAclInviteOnlyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("note_acl_invite_only_details") + return .dictionary(d) + case .noteAclLinkDetails(let arg): + var d = Serialization.getFields(TeamLog.NoteAclLinkDetailsSerializer().serialize(arg)) + d[".tag"] = .str("note_acl_link_details") + return .dictionary(d) + case .noteAclTeamLinkDetails(let arg): + var d = Serialization.getFields(TeamLog.NoteAclTeamLinkDetailsSerializer().serialize(arg)) + d[".tag"] = .str("note_acl_team_link_details") + return .dictionary(d) + case .noteSharedDetails(let arg): + var d = Serialization.getFields(TeamLog.NoteSharedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("note_shared_details") + return .dictionary(d) + case .noteShareReceiveDetails(let arg): + var d = Serialization.getFields(TeamLog.NoteShareReceiveDetailsSerializer().serialize(arg)) + d[".tag"] = .str("note_share_receive_details") + return .dictionary(d) + case .openNoteSharedDetails(let arg): + var d = Serialization.getFields(TeamLog.OpenNoteSharedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("open_note_shared_details") + return .dictionary(d) + case .sfAddGroupDetails(let arg): + var d = Serialization.getFields(TeamLog.SfAddGroupDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_add_group_details") + return .dictionary(d) + case .sfAllowNonMembersToViewSharedLinksDetails(let arg): + var d = Serialization.getFields(TeamLog.SfAllowNonMembersToViewSharedLinksDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_allow_non_members_to_view_shared_links_details") + return .dictionary(d) + case .sfExternalInviteWarnDetails(let arg): + var d = Serialization.getFields(TeamLog.SfExternalInviteWarnDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_external_invite_warn_details") + return .dictionary(d) + case .sfFbInviteDetails(let arg): + var d = Serialization.getFields(TeamLog.SfFbInviteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_fb_invite_details") + return .dictionary(d) + case .sfFbInviteChangeRoleDetails(let arg): + var d = Serialization.getFields(TeamLog.SfFbInviteChangeRoleDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_fb_invite_change_role_details") + return .dictionary(d) + case .sfFbUninviteDetails(let arg): + var d = Serialization.getFields(TeamLog.SfFbUninviteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_fb_uninvite_details") + return .dictionary(d) + case .sfInviteGroupDetails(let arg): + var d = Serialization.getFields(TeamLog.SfInviteGroupDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_invite_group_details") + return .dictionary(d) + case .sfTeamGrantAccessDetails(let arg): + var d = Serialization.getFields(TeamLog.SfTeamGrantAccessDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_grant_access_details") + return .dictionary(d) + case .sfTeamInviteDetails(let arg): + var d = Serialization.getFields(TeamLog.SfTeamInviteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_invite_details") + return .dictionary(d) + case .sfTeamInviteChangeRoleDetails(let arg): + var d = Serialization.getFields(TeamLog.SfTeamInviteChangeRoleDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_invite_change_role_details") + return .dictionary(d) + case .sfTeamJoinDetails(let arg): + var d = Serialization.getFields(TeamLog.SfTeamJoinDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_join_details") + return .dictionary(d) + case .sfTeamJoinFromOobLinkDetails(let arg): + var d = Serialization.getFields(TeamLog.SfTeamJoinFromOobLinkDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_join_from_oob_link_details") + return .dictionary(d) + case .sfTeamUninviteDetails(let arg): + var d = Serialization.getFields(TeamLog.SfTeamUninviteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_uninvite_details") + return .dictionary(d) + case .sharedContentAddInviteesDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentAddInviteesDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_add_invitees_details") + return .dictionary(d) + case .sharedContentAddLinkExpiryDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentAddLinkExpiryDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_add_link_expiry_details") + return .dictionary(d) + case .sharedContentAddLinkPasswordDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentAddLinkPasswordDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_add_link_password_details") + return .dictionary(d) + case .sharedContentAddMemberDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentAddMemberDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_add_member_details") + return .dictionary(d) + case .sharedContentChangeDownloadsPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeDownloadsPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_downloads_policy_details") + return .dictionary(d) + case .sharedContentChangeInviteeRoleDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeInviteeRoleDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_invitee_role_details") + return .dictionary(d) + case .sharedContentChangeLinkAudienceDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeLinkAudienceDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_link_audience_details") + return .dictionary(d) + case .sharedContentChangeLinkExpiryDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeLinkExpiryDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_link_expiry_details") + return .dictionary(d) + case .sharedContentChangeLinkPasswordDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeLinkPasswordDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_link_password_details") + return .dictionary(d) + case .sharedContentChangeMemberRoleDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeMemberRoleDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_member_role_details") + return .dictionary(d) + case .sharedContentChangeViewerInfoPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeViewerInfoPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_viewer_info_policy_details") + return .dictionary(d) + case .sharedContentClaimInvitationDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentClaimInvitationDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_claim_invitation_details") + return .dictionary(d) + case .sharedContentCopyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentCopyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_copy_details") + return .dictionary(d) + case .sharedContentDownloadDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentDownloadDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_download_details") + return .dictionary(d) + case .sharedContentRelinquishMembershipDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRelinquishMembershipDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_relinquish_membership_details") + return .dictionary(d) + case .sharedContentRemoveInviteesDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRemoveInviteesDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_remove_invitees_details") + return .dictionary(d) + case .sharedContentRemoveLinkExpiryDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRemoveLinkExpiryDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_remove_link_expiry_details") + return .dictionary(d) + case .sharedContentRemoveLinkPasswordDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRemoveLinkPasswordDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_remove_link_password_details") + return .dictionary(d) + case .sharedContentRemoveMemberDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRemoveMemberDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_remove_member_details") + return .dictionary(d) + case .sharedContentRequestAccessDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRequestAccessDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_request_access_details") + return .dictionary(d) + case .sharedContentUnshareDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentUnshareDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_unshare_details") + return .dictionary(d) + case .sharedContentViewDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedContentViewDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_view_details") + return .dictionary(d) + case .sharedFolderChangeLinkPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderChangeLinkPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_change_link_policy_details") + return .dictionary(d) + case .sharedFolderChangeMembersInheritancePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderChangeMembersInheritancePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_change_members_inheritance_policy_details") + return .dictionary(d) + case .sharedFolderChangeMembersManagementPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderChangeMembersManagementPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_change_members_management_policy_details") + return .dictionary(d) + case .sharedFolderChangeMembersPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderChangeMembersPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_change_members_policy_details") + return .dictionary(d) + case .sharedFolderCreateDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderCreateDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_create_details") + return .dictionary(d) + case .sharedFolderDeclineInvitationDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderDeclineInvitationDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_decline_invitation_details") + return .dictionary(d) + case .sharedFolderMountDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderMountDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_mount_details") + return .dictionary(d) + case .sharedFolderNestDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderNestDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_nest_details") + return .dictionary(d) + case .sharedFolderTransferOwnershipDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderTransferOwnershipDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_transfer_ownership_details") + return .dictionary(d) + case .sharedFolderUnmountDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderUnmountDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_unmount_details") + return .dictionary(d) + case .sharedLinkAddExpiryDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkAddExpiryDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_add_expiry_details") + return .dictionary(d) + case .sharedLinkChangeExpiryDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkChangeExpiryDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_change_expiry_details") + return .dictionary(d) + case .sharedLinkChangeVisibilityDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkChangeVisibilityDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_change_visibility_details") + return .dictionary(d) + case .sharedLinkCopyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkCopyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_copy_details") + return .dictionary(d) + case .sharedLinkCreateDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkCreateDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_create_details") + return .dictionary(d) + case .sharedLinkDisableDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkDisableDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_disable_details") + return .dictionary(d) + case .sharedLinkDownloadDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkDownloadDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_download_details") + return .dictionary(d) + case .sharedLinkRemoveExpiryDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkRemoveExpiryDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_remove_expiry_details") + return .dictionary(d) + case .sharedLinkShareDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkShareDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_share_details") + return .dictionary(d) + case .sharedLinkViewDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkViewDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_view_details") + return .dictionary(d) + case .sharedNoteOpenedDetails(let arg): + var d = Serialization.getFields(TeamLog.SharedNoteOpenedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shared_note_opened_details") + return .dictionary(d) + case .shmodelGroupShareDetails(let arg): + var d = Serialization.getFields(TeamLog.ShmodelGroupShareDetailsSerializer().serialize(arg)) + d[".tag"] = .str("shmodel_group_share_details") + return .dictionary(d) + case .showcaseAccessGrantedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseAccessGrantedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_access_granted_details") + return .dictionary(d) + case .showcaseAddMemberDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseAddMemberDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_add_member_details") + return .dictionary(d) + case .showcaseArchivedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseArchivedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_archived_details") + return .dictionary(d) + case .showcaseCreatedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseCreatedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_created_details") + return .dictionary(d) + case .showcaseDeleteCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseDeleteCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_delete_comment_details") + return .dictionary(d) + case .showcaseEditedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseEditedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_edited_details") + return .dictionary(d) + case .showcaseEditCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseEditCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_edit_comment_details") + return .dictionary(d) + case .showcaseFileAddedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseFileAddedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_file_added_details") + return .dictionary(d) + case .showcaseFileDownloadDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseFileDownloadDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_file_download_details") + return .dictionary(d) + case .showcaseFileRemovedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseFileRemovedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_file_removed_details") + return .dictionary(d) + case .showcaseFileViewDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseFileViewDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_file_view_details") + return .dictionary(d) + case .showcasePermanentlyDeletedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcasePermanentlyDeletedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_permanently_deleted_details") + return .dictionary(d) + case .showcasePostCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcasePostCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_post_comment_details") + return .dictionary(d) + case .showcaseRemoveMemberDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseRemoveMemberDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_remove_member_details") + return .dictionary(d) + case .showcaseRenamedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseRenamedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_renamed_details") + return .dictionary(d) + case .showcaseRequestAccessDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseRequestAccessDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_request_access_details") + return .dictionary(d) + case .showcaseResolveCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseResolveCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_resolve_comment_details") + return .dictionary(d) + case .showcaseRestoredDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseRestoredDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_restored_details") + return .dictionary(d) + case .showcaseTrashedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseTrashedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_trashed_details") + return .dictionary(d) + case .showcaseTrashedDeprecatedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseTrashedDeprecatedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_trashed_deprecated_details") + return .dictionary(d) + case .showcaseUnresolveCommentDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseUnresolveCommentDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_unresolve_comment_details") + return .dictionary(d) + case .showcaseUntrashedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseUntrashedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_untrashed_details") + return .dictionary(d) + case .showcaseUntrashedDeprecatedDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseUntrashedDeprecatedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_untrashed_deprecated_details") + return .dictionary(d) + case .showcaseViewDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseViewDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_view_details") + return .dictionary(d) + case .ssoAddCertDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoAddCertDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_add_cert_details") + return .dictionary(d) + case .ssoAddLoginUrlDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoAddLoginUrlDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_add_login_url_details") + return .dictionary(d) + case .ssoAddLogoutUrlDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoAddLogoutUrlDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_add_logout_url_details") + return .dictionary(d) + case .ssoChangeCertDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoChangeCertDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_cert_details") + return .dictionary(d) + case .ssoChangeLoginUrlDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoChangeLoginUrlDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_login_url_details") + return .dictionary(d) + case .ssoChangeLogoutUrlDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoChangeLogoutUrlDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_logout_url_details") + return .dictionary(d) + case .ssoChangeSamlIdentityModeDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoChangeSamlIdentityModeDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_saml_identity_mode_details") + return .dictionary(d) + case .ssoRemoveCertDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoRemoveCertDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_remove_cert_details") + return .dictionary(d) + case .ssoRemoveLoginUrlDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoRemoveLoginUrlDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_remove_login_url_details") + return .dictionary(d) + case .ssoRemoveLogoutUrlDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoRemoveLogoutUrlDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_remove_logout_url_details") + return .dictionary(d) + case .teamFolderChangeStatusDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderChangeStatusDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_change_status_details") + return .dictionary(d) + case .teamFolderCreateDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderCreateDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_create_details") + return .dictionary(d) + case .teamFolderDowngradeDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderDowngradeDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_downgrade_details") + return .dictionary(d) + case .teamFolderPermanentlyDeleteDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderPermanentlyDeleteDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_permanently_delete_details") + return .dictionary(d) + case .teamFolderRenameDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderRenameDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_rename_details") + return .dictionary(d) + case .teamSelectiveSyncSettingsChangedDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamSelectiveSyncSettingsChangedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_selective_sync_settings_changed_details") + return .dictionary(d) + case .accountCaptureChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_change_policy_details") + return .dictionary(d) + case .allowDownloadDisabledDetails(let arg): + var d = Serialization.getFields(TeamLog.AllowDownloadDisabledDetailsSerializer().serialize(arg)) + d[".tag"] = .str("allow_download_disabled_details") + return .dictionary(d) + case .allowDownloadEnabledDetails(let arg): + var d = Serialization.getFields(TeamLog.AllowDownloadEnabledDetailsSerializer().serialize(arg)) + d[".tag"] = .str("allow_download_enabled_details") + return .dictionary(d) + case .cameraUploadsPolicyChangedDetails(let arg): + var d = Serialization.getFields(TeamLog.CameraUploadsPolicyChangedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("camera_uploads_policy_changed_details") + return .dictionary(d) + case .dataPlacementRestrictionChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.DataPlacementRestrictionChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("data_placement_restriction_change_policy_details") + return .dictionary(d) + case .dataPlacementRestrictionSatisfyPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.DataPlacementRestrictionSatisfyPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("data_placement_restriction_satisfy_policy_details") + return .dictionary(d) + case .deviceApprovalsChangeDesktopPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceApprovalsChangeDesktopPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_approvals_change_desktop_policy_details") + return .dictionary(d) + case .deviceApprovalsChangeMobilePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceApprovalsChangeMobilePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_approvals_change_mobile_policy_details") + return .dictionary(d) + case .deviceApprovalsChangeOverageActionDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceApprovalsChangeOverageActionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_approvals_change_overage_action_details") + return .dictionary(d) + case .deviceApprovalsChangeUnlinkActionDetails(let arg): + var d = Serialization.getFields(TeamLog.DeviceApprovalsChangeUnlinkActionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("device_approvals_change_unlink_action_details") + return .dictionary(d) + case .directoryRestrictionsAddMembersDetails(let arg): + var d = Serialization.getFields(TeamLog.DirectoryRestrictionsAddMembersDetailsSerializer().serialize(arg)) + d[".tag"] = .str("directory_restrictions_add_members_details") + return .dictionary(d) + case .directoryRestrictionsRemoveMembersDetails(let arg): + var d = Serialization.getFields(TeamLog.DirectoryRestrictionsRemoveMembersDetailsSerializer().serialize(arg)) + d[".tag"] = .str("directory_restrictions_remove_members_details") + return .dictionary(d) + case .emmAddExceptionDetails(let arg): + var d = Serialization.getFields(TeamLog.EmmAddExceptionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("emm_add_exception_details") + return .dictionary(d) + case .emmChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.EmmChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("emm_change_policy_details") + return .dictionary(d) + case .emmRemoveExceptionDetails(let arg): + var d = Serialization.getFields(TeamLog.EmmRemoveExceptionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("emm_remove_exception_details") + return .dictionary(d) + case .extendedVersionHistoryChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.ExtendedVersionHistoryChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("extended_version_history_change_policy_details") + return .dictionary(d) + case .fileCommentsChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.FileCommentsChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_comments_change_policy_details") + return .dictionary(d) + case .fileRequestsChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRequestsChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_requests_change_policy_details") + return .dictionary(d) + case .fileRequestsEmailsEnabledDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRequestsEmailsEnabledDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_requests_emails_enabled_details") + return .dictionary(d) + case .fileRequestsEmailsRestrictedToTeamOnlyDetails(let arg): + var d = Serialization.getFields(TeamLog.FileRequestsEmailsRestrictedToTeamOnlyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("file_requests_emails_restricted_to_team_only_details") + return .dictionary(d) + case .googleSsoChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.GoogleSsoChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("google_sso_change_policy_details") + return .dictionary(d) + case .groupUserManagementChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.GroupUserManagementChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("group_user_management_change_policy_details") + return .dictionary(d) + case .memberRequestsChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberRequestsChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_requests_change_policy_details") + return .dictionary(d) + case .memberSpaceLimitsAddExceptionDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsAddExceptionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_add_exception_details") + return .dictionary(d) + case .memberSpaceLimitsChangeCapsTypePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsChangeCapsTypePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_change_caps_type_policy_details") + return .dictionary(d) + case .memberSpaceLimitsChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_change_policy_details") + return .dictionary(d) + case .memberSpaceLimitsRemoveExceptionDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsRemoveExceptionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_remove_exception_details") + return .dictionary(d) + case .memberSuggestionsChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.MemberSuggestionsChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("member_suggestions_change_policy_details") + return .dictionary(d) + case .microsoftOfficeAddinChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.MicrosoftOfficeAddinChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("microsoft_office_addin_change_policy_details") + return .dictionary(d) + case .networkControlChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.NetworkControlChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("network_control_change_policy_details") + return .dictionary(d) + case .paperChangeDeploymentPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperChangeDeploymentPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_change_deployment_policy_details") + return .dictionary(d) + case .paperChangeMemberLinkPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperChangeMemberLinkPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_change_member_link_policy_details") + return .dictionary(d) + case .paperChangeMemberPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperChangeMemberPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_change_member_policy_details") + return .dictionary(d) + case .paperChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_change_policy_details") + return .dictionary(d) + case .paperEnabledUsersGroupAdditionDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperEnabledUsersGroupAdditionDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_enabled_users_group_addition_details") + return .dictionary(d) + case .paperEnabledUsersGroupRemovalDetails(let arg): + var d = Serialization.getFields(TeamLog.PaperEnabledUsersGroupRemovalDetailsSerializer().serialize(arg)) + d[".tag"] = .str("paper_enabled_users_group_removal_details") + return .dictionary(d) + case .permanentDeleteChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.PermanentDeleteChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("permanent_delete_change_policy_details") + return .dictionary(d) + case .sharingChangeFolderJoinPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharingChangeFolderJoinPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sharing_change_folder_join_policy_details") + return .dictionary(d) + case .sharingChangeLinkPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharingChangeLinkPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sharing_change_link_policy_details") + return .dictionary(d) + case .sharingChangeMemberPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SharingChangeMemberPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sharing_change_member_policy_details") + return .dictionary(d) + case .showcaseChangeDownloadPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseChangeDownloadPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_change_download_policy_details") + return .dictionary(d) + case .showcaseChangeEnabledPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseChangeEnabledPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_change_enabled_policy_details") + return .dictionary(d) + case .showcaseChangeExternalSharingPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseChangeExternalSharingPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("showcase_change_external_sharing_policy_details") + return .dictionary(d) + case .smartSyncChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SmartSyncChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("smart_sync_change_policy_details") + return .dictionary(d) + case .smartSyncNotOptOutDetails(let arg): + var d = Serialization.getFields(TeamLog.SmartSyncNotOptOutDetailsSerializer().serialize(arg)) + d[".tag"] = .str("smart_sync_not_opt_out_details") + return .dictionary(d) + case .smartSyncOptOutDetails(let arg): + var d = Serialization.getFields(TeamLog.SmartSyncOptOutDetailsSerializer().serialize(arg)) + d[".tag"] = .str("smart_sync_opt_out_details") + return .dictionary(d) + case .ssoChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.SsoChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_policy_details") + return .dictionary(d) + case .teamSelectiveSyncPolicyChangedDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamSelectiveSyncPolicyChangedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_selective_sync_policy_changed_details") + return .dictionary(d) + case .tfaChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.TfaChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("tfa_change_policy_details") + return .dictionary(d) + case .twoAccountChangePolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.TwoAccountChangePolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("two_account_change_policy_details") + return .dictionary(d) + case .viewerInfoPolicyChangedDetails(let arg): + var d = Serialization.getFields(TeamLog.ViewerInfoPolicyChangedDetailsSerializer().serialize(arg)) + d[".tag"] = .str("viewer_info_policy_changed_details") + return .dictionary(d) + case .webSessionsChangeFixedLengthPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.WebSessionsChangeFixedLengthPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("web_sessions_change_fixed_length_policy_details") + return .dictionary(d) + case .webSessionsChangeIdleLengthPolicyDetails(let arg): + var d = Serialization.getFields(TeamLog.WebSessionsChangeIdleLengthPolicyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("web_sessions_change_idle_length_policy_details") + return .dictionary(d) + case .teamMergeFromDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamMergeFromDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_merge_from_details") + return .dictionary(d) + case .teamMergeToDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamMergeToDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_merge_to_details") + return .dictionary(d) + case .teamProfileAddLogoDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileAddLogoDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_add_logo_details") + return .dictionary(d) + case .teamProfileChangeDefaultLanguageDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileChangeDefaultLanguageDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_change_default_language_details") + return .dictionary(d) + case .teamProfileChangeLogoDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileChangeLogoDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_change_logo_details") + return .dictionary(d) + case .teamProfileChangeNameDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileChangeNameDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_change_name_details") + return .dictionary(d) + case .teamProfileRemoveLogoDetails(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileRemoveLogoDetailsSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_remove_logo_details") + return .dictionary(d) + case .tfaAddBackupPhoneDetails(let arg): + var d = Serialization.getFields(TeamLog.TfaAddBackupPhoneDetailsSerializer().serialize(arg)) + d[".tag"] = .str("tfa_add_backup_phone_details") + return .dictionary(d) + case .tfaAddSecurityKeyDetails(let arg): + var d = Serialization.getFields(TeamLog.TfaAddSecurityKeyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("tfa_add_security_key_details") + return .dictionary(d) + case .tfaChangeBackupPhoneDetails(let arg): + var d = Serialization.getFields(TeamLog.TfaChangeBackupPhoneDetailsSerializer().serialize(arg)) + d[".tag"] = .str("tfa_change_backup_phone_details") + return .dictionary(d) + case .tfaChangeStatusDetails(let arg): + var d = Serialization.getFields(TeamLog.TfaChangeStatusDetailsSerializer().serialize(arg)) + d[".tag"] = .str("tfa_change_status_details") + return .dictionary(d) + case .tfaRemoveBackupPhoneDetails(let arg): + var d = Serialization.getFields(TeamLog.TfaRemoveBackupPhoneDetailsSerializer().serialize(arg)) + d[".tag"] = .str("tfa_remove_backup_phone_details") + return .dictionary(d) + case .tfaRemoveSecurityKeyDetails(let arg): + var d = Serialization.getFields(TeamLog.TfaRemoveSecurityKeyDetailsSerializer().serialize(arg)) + d[".tag"] = .str("tfa_remove_security_key_details") + return .dictionary(d) + case .tfaResetDetails(let arg): + var d = Serialization.getFields(TeamLog.TfaResetDetailsSerializer().serialize(arg)) + d[".tag"] = .str("tfa_reset_details") + return .dictionary(d) + case .missingDetails(let arg): + var d = Serialization.getFields(TeamLog.MissingDetailsSerializer().serialize(arg)) + d[".tag"] = .str("missing_details") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> EventDetails { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "app_link_team_details": + let v = TeamLog.AppLinkTeamDetailsSerializer().deserialize(json) + return EventDetails.appLinkTeamDetails(v) + case "app_link_user_details": + let v = TeamLog.AppLinkUserDetailsSerializer().deserialize(json) + return EventDetails.appLinkUserDetails(v) + case "app_unlink_team_details": + let v = TeamLog.AppUnlinkTeamDetailsSerializer().deserialize(json) + return EventDetails.appUnlinkTeamDetails(v) + case "app_unlink_user_details": + let v = TeamLog.AppUnlinkUserDetailsSerializer().deserialize(json) + return EventDetails.appUnlinkUserDetails(v) + case "file_add_comment_details": + let v = TeamLog.FileAddCommentDetailsSerializer().deserialize(json) + return EventDetails.fileAddCommentDetails(v) + case "file_change_comment_subscription_details": + let v = TeamLog.FileChangeCommentSubscriptionDetailsSerializer().deserialize(json) + return EventDetails.fileChangeCommentSubscriptionDetails(v) + case "file_delete_comment_details": + let v = TeamLog.FileDeleteCommentDetailsSerializer().deserialize(json) + return EventDetails.fileDeleteCommentDetails(v) + case "file_edit_comment_details": + let v = TeamLog.FileEditCommentDetailsSerializer().deserialize(json) + return EventDetails.fileEditCommentDetails(v) + case "file_like_comment_details": + let v = TeamLog.FileLikeCommentDetailsSerializer().deserialize(json) + return EventDetails.fileLikeCommentDetails(v) + case "file_resolve_comment_details": + let v = TeamLog.FileResolveCommentDetailsSerializer().deserialize(json) + return EventDetails.fileResolveCommentDetails(v) + case "file_unlike_comment_details": + let v = TeamLog.FileUnlikeCommentDetailsSerializer().deserialize(json) + return EventDetails.fileUnlikeCommentDetails(v) + case "file_unresolve_comment_details": + let v = TeamLog.FileUnresolveCommentDetailsSerializer().deserialize(json) + return EventDetails.fileUnresolveCommentDetails(v) + case "device_change_ip_desktop_details": + let v = TeamLog.DeviceChangeIpDesktopDetailsSerializer().deserialize(json) + return EventDetails.deviceChangeIpDesktopDetails(v) + case "device_change_ip_mobile_details": + let v = TeamLog.DeviceChangeIpMobileDetailsSerializer().deserialize(json) + return EventDetails.deviceChangeIpMobileDetails(v) + case "device_change_ip_web_details": + let v = TeamLog.DeviceChangeIpWebDetailsSerializer().deserialize(json) + return EventDetails.deviceChangeIpWebDetails(v) + case "device_delete_on_unlink_fail_details": + let v = TeamLog.DeviceDeleteOnUnlinkFailDetailsSerializer().deserialize(json) + return EventDetails.deviceDeleteOnUnlinkFailDetails(v) + case "device_delete_on_unlink_success_details": + let v = TeamLog.DeviceDeleteOnUnlinkSuccessDetailsSerializer().deserialize(json) + return EventDetails.deviceDeleteOnUnlinkSuccessDetails(v) + case "device_link_fail_details": + let v = TeamLog.DeviceLinkFailDetailsSerializer().deserialize(json) + return EventDetails.deviceLinkFailDetails(v) + case "device_link_success_details": + let v = TeamLog.DeviceLinkSuccessDetailsSerializer().deserialize(json) + return EventDetails.deviceLinkSuccessDetails(v) + case "device_management_disabled_details": + let v = TeamLog.DeviceManagementDisabledDetailsSerializer().deserialize(json) + return EventDetails.deviceManagementDisabledDetails(v) + case "device_management_enabled_details": + let v = TeamLog.DeviceManagementEnabledDetailsSerializer().deserialize(json) + return EventDetails.deviceManagementEnabledDetails(v) + case "device_unlink_details": + let v = TeamLog.DeviceUnlinkDetailsSerializer().deserialize(json) + return EventDetails.deviceUnlinkDetails(v) + case "emm_refresh_auth_token_details": + let v = TeamLog.EmmRefreshAuthTokenDetailsSerializer().deserialize(json) + return EventDetails.emmRefreshAuthTokenDetails(v) + case "account_capture_change_availability_details": + let v = TeamLog.AccountCaptureChangeAvailabilityDetailsSerializer().deserialize(json) + return EventDetails.accountCaptureChangeAvailabilityDetails(v) + case "account_capture_migrate_account_details": + let v = TeamLog.AccountCaptureMigrateAccountDetailsSerializer().deserialize(json) + return EventDetails.accountCaptureMigrateAccountDetails(v) + case "account_capture_notification_emails_sent_details": + let v = TeamLog.AccountCaptureNotificationEmailsSentDetailsSerializer().deserialize(json) + return EventDetails.accountCaptureNotificationEmailsSentDetails(v) + case "account_capture_relinquish_account_details": + let v = TeamLog.AccountCaptureRelinquishAccountDetailsSerializer().deserialize(json) + return EventDetails.accountCaptureRelinquishAccountDetails(v) + case "disabled_domain_invites_details": + let v = TeamLog.DisabledDomainInvitesDetailsSerializer().deserialize(json) + return EventDetails.disabledDomainInvitesDetails(v) + case "domain_invites_approve_request_to_join_team_details": + let v = TeamLog.DomainInvitesApproveRequestToJoinTeamDetailsSerializer().deserialize(json) + return EventDetails.domainInvitesApproveRequestToJoinTeamDetails(v) + case "domain_invites_decline_request_to_join_team_details": + let v = TeamLog.DomainInvitesDeclineRequestToJoinTeamDetailsSerializer().deserialize(json) + return EventDetails.domainInvitesDeclineRequestToJoinTeamDetails(v) + case "domain_invites_email_existing_users_details": + let v = TeamLog.DomainInvitesEmailExistingUsersDetailsSerializer().deserialize(json) + return EventDetails.domainInvitesEmailExistingUsersDetails(v) + case "domain_invites_request_to_join_team_details": + let v = TeamLog.DomainInvitesRequestToJoinTeamDetailsSerializer().deserialize(json) + return EventDetails.domainInvitesRequestToJoinTeamDetails(v) + case "domain_invites_set_invite_new_user_pref_to_no_details": + let v = TeamLog.DomainInvitesSetInviteNewUserPrefToNoDetailsSerializer().deserialize(json) + return EventDetails.domainInvitesSetInviteNewUserPrefToNoDetails(v) + case "domain_invites_set_invite_new_user_pref_to_yes_details": + let v = TeamLog.DomainInvitesSetInviteNewUserPrefToYesDetailsSerializer().deserialize(json) + return EventDetails.domainInvitesSetInviteNewUserPrefToYesDetails(v) + case "domain_verification_add_domain_fail_details": + let v = TeamLog.DomainVerificationAddDomainFailDetailsSerializer().deserialize(json) + return EventDetails.domainVerificationAddDomainFailDetails(v) + case "domain_verification_add_domain_success_details": + let v = TeamLog.DomainVerificationAddDomainSuccessDetailsSerializer().deserialize(json) + return EventDetails.domainVerificationAddDomainSuccessDetails(v) + case "domain_verification_remove_domain_details": + let v = TeamLog.DomainVerificationRemoveDomainDetailsSerializer().deserialize(json) + return EventDetails.domainVerificationRemoveDomainDetails(v) + case "enabled_domain_invites_details": + let v = TeamLog.EnabledDomainInvitesDetailsSerializer().deserialize(json) + return EventDetails.enabledDomainInvitesDetails(v) + case "create_folder_details": + let v = TeamLog.CreateFolderDetailsSerializer().deserialize(json) + return EventDetails.createFolderDetails(v) + case "file_add_details": + let v = TeamLog.FileAddDetailsSerializer().deserialize(json) + return EventDetails.fileAddDetails(v) + case "file_copy_details": + let v = TeamLog.FileCopyDetailsSerializer().deserialize(json) + return EventDetails.fileCopyDetails(v) + case "file_delete_details": + let v = TeamLog.FileDeleteDetailsSerializer().deserialize(json) + return EventDetails.fileDeleteDetails(v) + case "file_download_details": + let v = TeamLog.FileDownloadDetailsSerializer().deserialize(json) + return EventDetails.fileDownloadDetails(v) + case "file_edit_details": + let v = TeamLog.FileEditDetailsSerializer().deserialize(json) + return EventDetails.fileEditDetails(v) + case "file_get_copy_reference_details": + let v = TeamLog.FileGetCopyReferenceDetailsSerializer().deserialize(json) + return EventDetails.fileGetCopyReferenceDetails(v) + case "file_move_details": + let v = TeamLog.FileMoveDetailsSerializer().deserialize(json) + return EventDetails.fileMoveDetails(v) + case "file_permanently_delete_details": + let v = TeamLog.FilePermanentlyDeleteDetailsSerializer().deserialize(json) + return EventDetails.filePermanentlyDeleteDetails(v) + case "file_preview_details": + let v = TeamLog.FilePreviewDetailsSerializer().deserialize(json) + return EventDetails.filePreviewDetails(v) + case "file_rename_details": + let v = TeamLog.FileRenameDetailsSerializer().deserialize(json) + return EventDetails.fileRenameDetails(v) + case "file_restore_details": + let v = TeamLog.FileRestoreDetailsSerializer().deserialize(json) + return EventDetails.fileRestoreDetails(v) + case "file_revert_details": + let v = TeamLog.FileRevertDetailsSerializer().deserialize(json) + return EventDetails.fileRevertDetails(v) + case "file_rollback_changes_details": + let v = TeamLog.FileRollbackChangesDetailsSerializer().deserialize(json) + return EventDetails.fileRollbackChangesDetails(v) + case "file_save_copy_reference_details": + let v = TeamLog.FileSaveCopyReferenceDetailsSerializer().deserialize(json) + return EventDetails.fileSaveCopyReferenceDetails(v) + case "file_request_change_details": + let v = TeamLog.FileRequestChangeDetailsSerializer().deserialize(json) + return EventDetails.fileRequestChangeDetails(v) + case "file_request_close_details": + let v = TeamLog.FileRequestCloseDetailsSerializer().deserialize(json) + return EventDetails.fileRequestCloseDetails(v) + case "file_request_create_details": + let v = TeamLog.FileRequestCreateDetailsSerializer().deserialize(json) + return EventDetails.fileRequestCreateDetails(v) + case "file_request_receive_file_details": + let v = TeamLog.FileRequestReceiveFileDetailsSerializer().deserialize(json) + return EventDetails.fileRequestReceiveFileDetails(v) + case "group_add_external_id_details": + let v = TeamLog.GroupAddExternalIdDetailsSerializer().deserialize(json) + return EventDetails.groupAddExternalIdDetails(v) + case "group_add_member_details": + let v = TeamLog.GroupAddMemberDetailsSerializer().deserialize(json) + return EventDetails.groupAddMemberDetails(v) + case "group_change_external_id_details": + let v = TeamLog.GroupChangeExternalIdDetailsSerializer().deserialize(json) + return EventDetails.groupChangeExternalIdDetails(v) + case "group_change_management_type_details": + let v = TeamLog.GroupChangeManagementTypeDetailsSerializer().deserialize(json) + return EventDetails.groupChangeManagementTypeDetails(v) + case "group_change_member_role_details": + let v = TeamLog.GroupChangeMemberRoleDetailsSerializer().deserialize(json) + return EventDetails.groupChangeMemberRoleDetails(v) + case "group_create_details": + let v = TeamLog.GroupCreateDetailsSerializer().deserialize(json) + return EventDetails.groupCreateDetails(v) + case "group_delete_details": + let v = TeamLog.GroupDeleteDetailsSerializer().deserialize(json) + return EventDetails.groupDeleteDetails(v) + case "group_description_updated_details": + let v = TeamLog.GroupDescriptionUpdatedDetailsSerializer().deserialize(json) + return EventDetails.groupDescriptionUpdatedDetails(v) + case "group_join_policy_updated_details": + let v = TeamLog.GroupJoinPolicyUpdatedDetailsSerializer().deserialize(json) + return EventDetails.groupJoinPolicyUpdatedDetails(v) + case "group_moved_details": + let v = TeamLog.GroupMovedDetailsSerializer().deserialize(json) + return EventDetails.groupMovedDetails(v) + case "group_remove_external_id_details": + let v = TeamLog.GroupRemoveExternalIdDetailsSerializer().deserialize(json) + return EventDetails.groupRemoveExternalIdDetails(v) + case "group_remove_member_details": + let v = TeamLog.GroupRemoveMemberDetailsSerializer().deserialize(json) + return EventDetails.groupRemoveMemberDetails(v) + case "group_rename_details": + let v = TeamLog.GroupRenameDetailsSerializer().deserialize(json) + return EventDetails.groupRenameDetails(v) + case "emm_error_details": + let v = TeamLog.EmmErrorDetailsSerializer().deserialize(json) + return EventDetails.emmErrorDetails(v) + case "login_fail_details": + let v = TeamLog.LoginFailDetailsSerializer().deserialize(json) + return EventDetails.loginFailDetails(v) + case "login_success_details": + let v = TeamLog.LoginSuccessDetailsSerializer().deserialize(json) + return EventDetails.loginSuccessDetails(v) + case "logout_details": + let v = TeamLog.LogoutDetailsSerializer().deserialize(json) + return EventDetails.logoutDetails(v) + case "reseller_support_session_end_details": + let v = TeamLog.ResellerSupportSessionEndDetailsSerializer().deserialize(json) + return EventDetails.resellerSupportSessionEndDetails(v) + case "reseller_support_session_start_details": + let v = TeamLog.ResellerSupportSessionStartDetailsSerializer().deserialize(json) + return EventDetails.resellerSupportSessionStartDetails(v) + case "sign_in_as_session_end_details": + let v = TeamLog.SignInAsSessionEndDetailsSerializer().deserialize(json) + return EventDetails.signInAsSessionEndDetails(v) + case "sign_in_as_session_start_details": + let v = TeamLog.SignInAsSessionStartDetailsSerializer().deserialize(json) + return EventDetails.signInAsSessionStartDetails(v) + case "sso_error_details": + let v = TeamLog.SsoErrorDetailsSerializer().deserialize(json) + return EventDetails.ssoErrorDetails(v) + case "member_add_name_details": + let v = TeamLog.MemberAddNameDetailsSerializer().deserialize(json) + return EventDetails.memberAddNameDetails(v) + case "member_change_admin_role_details": + let v = TeamLog.MemberChangeAdminRoleDetailsSerializer().deserialize(json) + return EventDetails.memberChangeAdminRoleDetails(v) + case "member_change_email_details": + let v = TeamLog.MemberChangeEmailDetailsSerializer().deserialize(json) + return EventDetails.memberChangeEmailDetails(v) + case "member_change_membership_type_details": + let v = TeamLog.MemberChangeMembershipTypeDetailsSerializer().deserialize(json) + return EventDetails.memberChangeMembershipTypeDetails(v) + case "member_change_name_details": + let v = TeamLog.MemberChangeNameDetailsSerializer().deserialize(json) + return EventDetails.memberChangeNameDetails(v) + case "member_change_status_details": + let v = TeamLog.MemberChangeStatusDetailsSerializer().deserialize(json) + return EventDetails.memberChangeStatusDetails(v) + case "member_delete_manual_contacts_details": + let v = TeamLog.MemberDeleteManualContactsDetailsSerializer().deserialize(json) + return EventDetails.memberDeleteManualContactsDetails(v) + case "member_permanently_delete_account_contents_details": + let v = TeamLog.MemberPermanentlyDeleteAccountContentsDetailsSerializer().deserialize(json) + return EventDetails.memberPermanentlyDeleteAccountContentsDetails(v) + case "member_space_limits_add_custom_quota_details": + let v = TeamLog.MemberSpaceLimitsAddCustomQuotaDetailsSerializer().deserialize(json) + return EventDetails.memberSpaceLimitsAddCustomQuotaDetails(v) + case "member_space_limits_change_custom_quota_details": + let v = TeamLog.MemberSpaceLimitsChangeCustomQuotaDetailsSerializer().deserialize(json) + return EventDetails.memberSpaceLimitsChangeCustomQuotaDetails(v) + case "member_space_limits_change_status_details": + let v = TeamLog.MemberSpaceLimitsChangeStatusDetailsSerializer().deserialize(json) + return EventDetails.memberSpaceLimitsChangeStatusDetails(v) + case "member_space_limits_remove_custom_quota_details": + let v = TeamLog.MemberSpaceLimitsRemoveCustomQuotaDetailsSerializer().deserialize(json) + return EventDetails.memberSpaceLimitsRemoveCustomQuotaDetails(v) + case "member_suggest_details": + let v = TeamLog.MemberSuggestDetailsSerializer().deserialize(json) + return EventDetails.memberSuggestDetails(v) + case "member_transfer_account_contents_details": + let v = TeamLog.MemberTransferAccountContentsDetailsSerializer().deserialize(json) + return EventDetails.memberTransferAccountContentsDetails(v) + case "secondary_mails_policy_changed_details": + let v = TeamLog.SecondaryMailsPolicyChangedDetailsSerializer().deserialize(json) + return EventDetails.secondaryMailsPolicyChangedDetails(v) + case "paper_content_add_member_details": + let v = TeamLog.PaperContentAddMemberDetailsSerializer().deserialize(json) + return EventDetails.paperContentAddMemberDetails(v) + case "paper_content_add_to_folder_details": + let v = TeamLog.PaperContentAddToFolderDetailsSerializer().deserialize(json) + return EventDetails.paperContentAddToFolderDetails(v) + case "paper_content_archive_details": + let v = TeamLog.PaperContentArchiveDetailsSerializer().deserialize(json) + return EventDetails.paperContentArchiveDetails(v) + case "paper_content_create_details": + let v = TeamLog.PaperContentCreateDetailsSerializer().deserialize(json) + return EventDetails.paperContentCreateDetails(v) + case "paper_content_permanently_delete_details": + let v = TeamLog.PaperContentPermanentlyDeleteDetailsSerializer().deserialize(json) + return EventDetails.paperContentPermanentlyDeleteDetails(v) + case "paper_content_remove_from_folder_details": + let v = TeamLog.PaperContentRemoveFromFolderDetailsSerializer().deserialize(json) + return EventDetails.paperContentRemoveFromFolderDetails(v) + case "paper_content_remove_member_details": + let v = TeamLog.PaperContentRemoveMemberDetailsSerializer().deserialize(json) + return EventDetails.paperContentRemoveMemberDetails(v) + case "paper_content_rename_details": + let v = TeamLog.PaperContentRenameDetailsSerializer().deserialize(json) + return EventDetails.paperContentRenameDetails(v) + case "paper_content_restore_details": + let v = TeamLog.PaperContentRestoreDetailsSerializer().deserialize(json) + return EventDetails.paperContentRestoreDetails(v) + case "paper_doc_add_comment_details": + let v = TeamLog.PaperDocAddCommentDetailsSerializer().deserialize(json) + return EventDetails.paperDocAddCommentDetails(v) + case "paper_doc_change_member_role_details": + let v = TeamLog.PaperDocChangeMemberRoleDetailsSerializer().deserialize(json) + return EventDetails.paperDocChangeMemberRoleDetails(v) + case "paper_doc_change_sharing_policy_details": + let v = TeamLog.PaperDocChangeSharingPolicyDetailsSerializer().deserialize(json) + return EventDetails.paperDocChangeSharingPolicyDetails(v) + case "paper_doc_change_subscription_details": + let v = TeamLog.PaperDocChangeSubscriptionDetailsSerializer().deserialize(json) + return EventDetails.paperDocChangeSubscriptionDetails(v) + case "paper_doc_deleted_details": + let v = TeamLog.PaperDocDeletedDetailsSerializer().deserialize(json) + return EventDetails.paperDocDeletedDetails(v) + case "paper_doc_delete_comment_details": + let v = TeamLog.PaperDocDeleteCommentDetailsSerializer().deserialize(json) + return EventDetails.paperDocDeleteCommentDetails(v) + case "paper_doc_download_details": + let v = TeamLog.PaperDocDownloadDetailsSerializer().deserialize(json) + return EventDetails.paperDocDownloadDetails(v) + case "paper_doc_edit_details": + let v = TeamLog.PaperDocEditDetailsSerializer().deserialize(json) + return EventDetails.paperDocEditDetails(v) + case "paper_doc_edit_comment_details": + let v = TeamLog.PaperDocEditCommentDetailsSerializer().deserialize(json) + return EventDetails.paperDocEditCommentDetails(v) + case "paper_doc_followed_details": + let v = TeamLog.PaperDocFollowedDetailsSerializer().deserialize(json) + return EventDetails.paperDocFollowedDetails(v) + case "paper_doc_mention_details": + let v = TeamLog.PaperDocMentionDetailsSerializer().deserialize(json) + return EventDetails.paperDocMentionDetails(v) + case "paper_doc_ownership_changed_details": + let v = TeamLog.PaperDocOwnershipChangedDetailsSerializer().deserialize(json) + return EventDetails.paperDocOwnershipChangedDetails(v) + case "paper_doc_request_access_details": + let v = TeamLog.PaperDocRequestAccessDetailsSerializer().deserialize(json) + return EventDetails.paperDocRequestAccessDetails(v) + case "paper_doc_resolve_comment_details": + let v = TeamLog.PaperDocResolveCommentDetailsSerializer().deserialize(json) + return EventDetails.paperDocResolveCommentDetails(v) + case "paper_doc_revert_details": + let v = TeamLog.PaperDocRevertDetailsSerializer().deserialize(json) + return EventDetails.paperDocRevertDetails(v) + case "paper_doc_slack_share_details": + let v = TeamLog.PaperDocSlackShareDetailsSerializer().deserialize(json) + return EventDetails.paperDocSlackShareDetails(v) + case "paper_doc_team_invite_details": + let v = TeamLog.PaperDocTeamInviteDetailsSerializer().deserialize(json) + return EventDetails.paperDocTeamInviteDetails(v) + case "paper_doc_trashed_details": + let v = TeamLog.PaperDocTrashedDetailsSerializer().deserialize(json) + return EventDetails.paperDocTrashedDetails(v) + case "paper_doc_unresolve_comment_details": + let v = TeamLog.PaperDocUnresolveCommentDetailsSerializer().deserialize(json) + return EventDetails.paperDocUnresolveCommentDetails(v) + case "paper_doc_untrashed_details": + let v = TeamLog.PaperDocUntrashedDetailsSerializer().deserialize(json) + return EventDetails.paperDocUntrashedDetails(v) + case "paper_doc_view_details": + let v = TeamLog.PaperDocViewDetailsSerializer().deserialize(json) + return EventDetails.paperDocViewDetails(v) + case "paper_external_view_allow_details": + let v = TeamLog.PaperExternalViewAllowDetailsSerializer().deserialize(json) + return EventDetails.paperExternalViewAllowDetails(v) + case "paper_external_view_default_team_details": + let v = TeamLog.PaperExternalViewDefaultTeamDetailsSerializer().deserialize(json) + return EventDetails.paperExternalViewDefaultTeamDetails(v) + case "paper_external_view_forbid_details": + let v = TeamLog.PaperExternalViewForbidDetailsSerializer().deserialize(json) + return EventDetails.paperExternalViewForbidDetails(v) + case "paper_folder_change_subscription_details": + let v = TeamLog.PaperFolderChangeSubscriptionDetailsSerializer().deserialize(json) + return EventDetails.paperFolderChangeSubscriptionDetails(v) + case "paper_folder_deleted_details": + let v = TeamLog.PaperFolderDeletedDetailsSerializer().deserialize(json) + return EventDetails.paperFolderDeletedDetails(v) + case "paper_folder_followed_details": + let v = TeamLog.PaperFolderFollowedDetailsSerializer().deserialize(json) + return EventDetails.paperFolderFollowedDetails(v) + case "paper_folder_team_invite_details": + let v = TeamLog.PaperFolderTeamInviteDetailsSerializer().deserialize(json) + return EventDetails.paperFolderTeamInviteDetails(v) + case "password_change_details": + let v = TeamLog.PasswordChangeDetailsSerializer().deserialize(json) + return EventDetails.passwordChangeDetails(v) + case "password_reset_details": + let v = TeamLog.PasswordResetDetailsSerializer().deserialize(json) + return EventDetails.passwordResetDetails(v) + case "password_reset_all_details": + let v = TeamLog.PasswordResetAllDetailsSerializer().deserialize(json) + return EventDetails.passwordResetAllDetails(v) + case "emm_create_exceptions_report_details": + let v = TeamLog.EmmCreateExceptionsReportDetailsSerializer().deserialize(json) + return EventDetails.emmCreateExceptionsReportDetails(v) + case "emm_create_usage_report_details": + let v = TeamLog.EmmCreateUsageReportDetailsSerializer().deserialize(json) + return EventDetails.emmCreateUsageReportDetails(v) + case "export_members_report_details": + let v = TeamLog.ExportMembersReportDetailsSerializer().deserialize(json) + return EventDetails.exportMembersReportDetails(v) + case "paper_admin_export_start_details": + let v = TeamLog.PaperAdminExportStartDetailsSerializer().deserialize(json) + return EventDetails.paperAdminExportStartDetails(v) + case "smart_sync_create_admin_privilege_report_details": + let v = TeamLog.SmartSyncCreateAdminPrivilegeReportDetailsSerializer().deserialize(json) + return EventDetails.smartSyncCreateAdminPrivilegeReportDetails(v) + case "team_activity_create_report_details": + let v = TeamLog.TeamActivityCreateReportDetailsSerializer().deserialize(json) + return EventDetails.teamActivityCreateReportDetails(v) + case "collection_share_details": + let v = TeamLog.CollectionShareDetailsSerializer().deserialize(json) + return EventDetails.collectionShareDetails(v) + case "note_acl_invite_only_details": + let v = TeamLog.NoteAclInviteOnlyDetailsSerializer().deserialize(json) + return EventDetails.noteAclInviteOnlyDetails(v) + case "note_acl_link_details": + let v = TeamLog.NoteAclLinkDetailsSerializer().deserialize(json) + return EventDetails.noteAclLinkDetails(v) + case "note_acl_team_link_details": + let v = TeamLog.NoteAclTeamLinkDetailsSerializer().deserialize(json) + return EventDetails.noteAclTeamLinkDetails(v) + case "note_shared_details": + let v = TeamLog.NoteSharedDetailsSerializer().deserialize(json) + return EventDetails.noteSharedDetails(v) + case "note_share_receive_details": + let v = TeamLog.NoteShareReceiveDetailsSerializer().deserialize(json) + return EventDetails.noteShareReceiveDetails(v) + case "open_note_shared_details": + let v = TeamLog.OpenNoteSharedDetailsSerializer().deserialize(json) + return EventDetails.openNoteSharedDetails(v) + case "sf_add_group_details": + let v = TeamLog.SfAddGroupDetailsSerializer().deserialize(json) + return EventDetails.sfAddGroupDetails(v) + case "sf_allow_non_members_to_view_shared_links_details": + let v = TeamLog.SfAllowNonMembersToViewSharedLinksDetailsSerializer().deserialize(json) + return EventDetails.sfAllowNonMembersToViewSharedLinksDetails(v) + case "sf_external_invite_warn_details": + let v = TeamLog.SfExternalInviteWarnDetailsSerializer().deserialize(json) + return EventDetails.sfExternalInviteWarnDetails(v) + case "sf_fb_invite_details": + let v = TeamLog.SfFbInviteDetailsSerializer().deserialize(json) + return EventDetails.sfFbInviteDetails(v) + case "sf_fb_invite_change_role_details": + let v = TeamLog.SfFbInviteChangeRoleDetailsSerializer().deserialize(json) + return EventDetails.sfFbInviteChangeRoleDetails(v) + case "sf_fb_uninvite_details": + let v = TeamLog.SfFbUninviteDetailsSerializer().deserialize(json) + return EventDetails.sfFbUninviteDetails(v) + case "sf_invite_group_details": + let v = TeamLog.SfInviteGroupDetailsSerializer().deserialize(json) + return EventDetails.sfInviteGroupDetails(v) + case "sf_team_grant_access_details": + let v = TeamLog.SfTeamGrantAccessDetailsSerializer().deserialize(json) + return EventDetails.sfTeamGrantAccessDetails(v) + case "sf_team_invite_details": + let v = TeamLog.SfTeamInviteDetailsSerializer().deserialize(json) + return EventDetails.sfTeamInviteDetails(v) + case "sf_team_invite_change_role_details": + let v = TeamLog.SfTeamInviteChangeRoleDetailsSerializer().deserialize(json) + return EventDetails.sfTeamInviteChangeRoleDetails(v) + case "sf_team_join_details": + let v = TeamLog.SfTeamJoinDetailsSerializer().deserialize(json) + return EventDetails.sfTeamJoinDetails(v) + case "sf_team_join_from_oob_link_details": + let v = TeamLog.SfTeamJoinFromOobLinkDetailsSerializer().deserialize(json) + return EventDetails.sfTeamJoinFromOobLinkDetails(v) + case "sf_team_uninvite_details": + let v = TeamLog.SfTeamUninviteDetailsSerializer().deserialize(json) + return EventDetails.sfTeamUninviteDetails(v) + case "shared_content_add_invitees_details": + let v = TeamLog.SharedContentAddInviteesDetailsSerializer().deserialize(json) + return EventDetails.sharedContentAddInviteesDetails(v) + case "shared_content_add_link_expiry_details": + let v = TeamLog.SharedContentAddLinkExpiryDetailsSerializer().deserialize(json) + return EventDetails.sharedContentAddLinkExpiryDetails(v) + case "shared_content_add_link_password_details": + let v = TeamLog.SharedContentAddLinkPasswordDetailsSerializer().deserialize(json) + return EventDetails.sharedContentAddLinkPasswordDetails(v) + case "shared_content_add_member_details": + let v = TeamLog.SharedContentAddMemberDetailsSerializer().deserialize(json) + return EventDetails.sharedContentAddMemberDetails(v) + case "shared_content_change_downloads_policy_details": + let v = TeamLog.SharedContentChangeDownloadsPolicyDetailsSerializer().deserialize(json) + return EventDetails.sharedContentChangeDownloadsPolicyDetails(v) + case "shared_content_change_invitee_role_details": + let v = TeamLog.SharedContentChangeInviteeRoleDetailsSerializer().deserialize(json) + return EventDetails.sharedContentChangeInviteeRoleDetails(v) + case "shared_content_change_link_audience_details": + let v = TeamLog.SharedContentChangeLinkAudienceDetailsSerializer().deserialize(json) + return EventDetails.sharedContentChangeLinkAudienceDetails(v) + case "shared_content_change_link_expiry_details": + let v = TeamLog.SharedContentChangeLinkExpiryDetailsSerializer().deserialize(json) + return EventDetails.sharedContentChangeLinkExpiryDetails(v) + case "shared_content_change_link_password_details": + let v = TeamLog.SharedContentChangeLinkPasswordDetailsSerializer().deserialize(json) + return EventDetails.sharedContentChangeLinkPasswordDetails(v) + case "shared_content_change_member_role_details": + let v = TeamLog.SharedContentChangeMemberRoleDetailsSerializer().deserialize(json) + return EventDetails.sharedContentChangeMemberRoleDetails(v) + case "shared_content_change_viewer_info_policy_details": + let v = TeamLog.SharedContentChangeViewerInfoPolicyDetailsSerializer().deserialize(json) + return EventDetails.sharedContentChangeViewerInfoPolicyDetails(v) + case "shared_content_claim_invitation_details": + let v = TeamLog.SharedContentClaimInvitationDetailsSerializer().deserialize(json) + return EventDetails.sharedContentClaimInvitationDetails(v) + case "shared_content_copy_details": + let v = TeamLog.SharedContentCopyDetailsSerializer().deserialize(json) + return EventDetails.sharedContentCopyDetails(v) + case "shared_content_download_details": + let v = TeamLog.SharedContentDownloadDetailsSerializer().deserialize(json) + return EventDetails.sharedContentDownloadDetails(v) + case "shared_content_relinquish_membership_details": + let v = TeamLog.SharedContentRelinquishMembershipDetailsSerializer().deserialize(json) + return EventDetails.sharedContentRelinquishMembershipDetails(v) + case "shared_content_remove_invitees_details": + let v = TeamLog.SharedContentRemoveInviteesDetailsSerializer().deserialize(json) + return EventDetails.sharedContentRemoveInviteesDetails(v) + case "shared_content_remove_link_expiry_details": + let v = TeamLog.SharedContentRemoveLinkExpiryDetailsSerializer().deserialize(json) + return EventDetails.sharedContentRemoveLinkExpiryDetails(v) + case "shared_content_remove_link_password_details": + let v = TeamLog.SharedContentRemoveLinkPasswordDetailsSerializer().deserialize(json) + return EventDetails.sharedContentRemoveLinkPasswordDetails(v) + case "shared_content_remove_member_details": + let v = TeamLog.SharedContentRemoveMemberDetailsSerializer().deserialize(json) + return EventDetails.sharedContentRemoveMemberDetails(v) + case "shared_content_request_access_details": + let v = TeamLog.SharedContentRequestAccessDetailsSerializer().deserialize(json) + return EventDetails.sharedContentRequestAccessDetails(v) + case "shared_content_unshare_details": + let v = TeamLog.SharedContentUnshareDetailsSerializer().deserialize(json) + return EventDetails.sharedContentUnshareDetails(v) + case "shared_content_view_details": + let v = TeamLog.SharedContentViewDetailsSerializer().deserialize(json) + return EventDetails.sharedContentViewDetails(v) + case "shared_folder_change_link_policy_details": + let v = TeamLog.SharedFolderChangeLinkPolicyDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderChangeLinkPolicyDetails(v) + case "shared_folder_change_members_inheritance_policy_details": + let v = TeamLog.SharedFolderChangeMembersInheritancePolicyDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderChangeMembersInheritancePolicyDetails(v) + case "shared_folder_change_members_management_policy_details": + let v = TeamLog.SharedFolderChangeMembersManagementPolicyDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderChangeMembersManagementPolicyDetails(v) + case "shared_folder_change_members_policy_details": + let v = TeamLog.SharedFolderChangeMembersPolicyDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderChangeMembersPolicyDetails(v) + case "shared_folder_create_details": + let v = TeamLog.SharedFolderCreateDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderCreateDetails(v) + case "shared_folder_decline_invitation_details": + let v = TeamLog.SharedFolderDeclineInvitationDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderDeclineInvitationDetails(v) + case "shared_folder_mount_details": + let v = TeamLog.SharedFolderMountDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderMountDetails(v) + case "shared_folder_nest_details": + let v = TeamLog.SharedFolderNestDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderNestDetails(v) + case "shared_folder_transfer_ownership_details": + let v = TeamLog.SharedFolderTransferOwnershipDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderTransferOwnershipDetails(v) + case "shared_folder_unmount_details": + let v = TeamLog.SharedFolderUnmountDetailsSerializer().deserialize(json) + return EventDetails.sharedFolderUnmountDetails(v) + case "shared_link_add_expiry_details": + let v = TeamLog.SharedLinkAddExpiryDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkAddExpiryDetails(v) + case "shared_link_change_expiry_details": + let v = TeamLog.SharedLinkChangeExpiryDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkChangeExpiryDetails(v) + case "shared_link_change_visibility_details": + let v = TeamLog.SharedLinkChangeVisibilityDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkChangeVisibilityDetails(v) + case "shared_link_copy_details": + let v = TeamLog.SharedLinkCopyDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkCopyDetails(v) + case "shared_link_create_details": + let v = TeamLog.SharedLinkCreateDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkCreateDetails(v) + case "shared_link_disable_details": + let v = TeamLog.SharedLinkDisableDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkDisableDetails(v) + case "shared_link_download_details": + let v = TeamLog.SharedLinkDownloadDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkDownloadDetails(v) + case "shared_link_remove_expiry_details": + let v = TeamLog.SharedLinkRemoveExpiryDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkRemoveExpiryDetails(v) + case "shared_link_share_details": + let v = TeamLog.SharedLinkShareDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkShareDetails(v) + case "shared_link_view_details": + let v = TeamLog.SharedLinkViewDetailsSerializer().deserialize(json) + return EventDetails.sharedLinkViewDetails(v) + case "shared_note_opened_details": + let v = TeamLog.SharedNoteOpenedDetailsSerializer().deserialize(json) + return EventDetails.sharedNoteOpenedDetails(v) + case "shmodel_group_share_details": + let v = TeamLog.ShmodelGroupShareDetailsSerializer().deserialize(json) + return EventDetails.shmodelGroupShareDetails(v) + case "showcase_access_granted_details": + let v = TeamLog.ShowcaseAccessGrantedDetailsSerializer().deserialize(json) + return EventDetails.showcaseAccessGrantedDetails(v) + case "showcase_add_member_details": + let v = TeamLog.ShowcaseAddMemberDetailsSerializer().deserialize(json) + return EventDetails.showcaseAddMemberDetails(v) + case "showcase_archived_details": + let v = TeamLog.ShowcaseArchivedDetailsSerializer().deserialize(json) + return EventDetails.showcaseArchivedDetails(v) + case "showcase_created_details": + let v = TeamLog.ShowcaseCreatedDetailsSerializer().deserialize(json) + return EventDetails.showcaseCreatedDetails(v) + case "showcase_delete_comment_details": + let v = TeamLog.ShowcaseDeleteCommentDetailsSerializer().deserialize(json) + return EventDetails.showcaseDeleteCommentDetails(v) + case "showcase_edited_details": + let v = TeamLog.ShowcaseEditedDetailsSerializer().deserialize(json) + return EventDetails.showcaseEditedDetails(v) + case "showcase_edit_comment_details": + let v = TeamLog.ShowcaseEditCommentDetailsSerializer().deserialize(json) + return EventDetails.showcaseEditCommentDetails(v) + case "showcase_file_added_details": + let v = TeamLog.ShowcaseFileAddedDetailsSerializer().deserialize(json) + return EventDetails.showcaseFileAddedDetails(v) + case "showcase_file_download_details": + let v = TeamLog.ShowcaseFileDownloadDetailsSerializer().deserialize(json) + return EventDetails.showcaseFileDownloadDetails(v) + case "showcase_file_removed_details": + let v = TeamLog.ShowcaseFileRemovedDetailsSerializer().deserialize(json) + return EventDetails.showcaseFileRemovedDetails(v) + case "showcase_file_view_details": + let v = TeamLog.ShowcaseFileViewDetailsSerializer().deserialize(json) + return EventDetails.showcaseFileViewDetails(v) + case "showcase_permanently_deleted_details": + let v = TeamLog.ShowcasePermanentlyDeletedDetailsSerializer().deserialize(json) + return EventDetails.showcasePermanentlyDeletedDetails(v) + case "showcase_post_comment_details": + let v = TeamLog.ShowcasePostCommentDetailsSerializer().deserialize(json) + return EventDetails.showcasePostCommentDetails(v) + case "showcase_remove_member_details": + let v = TeamLog.ShowcaseRemoveMemberDetailsSerializer().deserialize(json) + return EventDetails.showcaseRemoveMemberDetails(v) + case "showcase_renamed_details": + let v = TeamLog.ShowcaseRenamedDetailsSerializer().deserialize(json) + return EventDetails.showcaseRenamedDetails(v) + case "showcase_request_access_details": + let v = TeamLog.ShowcaseRequestAccessDetailsSerializer().deserialize(json) + return EventDetails.showcaseRequestAccessDetails(v) + case "showcase_resolve_comment_details": + let v = TeamLog.ShowcaseResolveCommentDetailsSerializer().deserialize(json) + return EventDetails.showcaseResolveCommentDetails(v) + case "showcase_restored_details": + let v = TeamLog.ShowcaseRestoredDetailsSerializer().deserialize(json) + return EventDetails.showcaseRestoredDetails(v) + case "showcase_trashed_details": + let v = TeamLog.ShowcaseTrashedDetailsSerializer().deserialize(json) + return EventDetails.showcaseTrashedDetails(v) + case "showcase_trashed_deprecated_details": + let v = TeamLog.ShowcaseTrashedDeprecatedDetailsSerializer().deserialize(json) + return EventDetails.showcaseTrashedDeprecatedDetails(v) + case "showcase_unresolve_comment_details": + let v = TeamLog.ShowcaseUnresolveCommentDetailsSerializer().deserialize(json) + return EventDetails.showcaseUnresolveCommentDetails(v) + case "showcase_untrashed_details": + let v = TeamLog.ShowcaseUntrashedDetailsSerializer().deserialize(json) + return EventDetails.showcaseUntrashedDetails(v) + case "showcase_untrashed_deprecated_details": + let v = TeamLog.ShowcaseUntrashedDeprecatedDetailsSerializer().deserialize(json) + return EventDetails.showcaseUntrashedDeprecatedDetails(v) + case "showcase_view_details": + let v = TeamLog.ShowcaseViewDetailsSerializer().deserialize(json) + return EventDetails.showcaseViewDetails(v) + case "sso_add_cert_details": + let v = TeamLog.SsoAddCertDetailsSerializer().deserialize(json) + return EventDetails.ssoAddCertDetails(v) + case "sso_add_login_url_details": + let v = TeamLog.SsoAddLoginUrlDetailsSerializer().deserialize(json) + return EventDetails.ssoAddLoginUrlDetails(v) + case "sso_add_logout_url_details": + let v = TeamLog.SsoAddLogoutUrlDetailsSerializer().deserialize(json) + return EventDetails.ssoAddLogoutUrlDetails(v) + case "sso_change_cert_details": + let v = TeamLog.SsoChangeCertDetailsSerializer().deserialize(json) + return EventDetails.ssoChangeCertDetails(v) + case "sso_change_login_url_details": + let v = TeamLog.SsoChangeLoginUrlDetailsSerializer().deserialize(json) + return EventDetails.ssoChangeLoginUrlDetails(v) + case "sso_change_logout_url_details": + let v = TeamLog.SsoChangeLogoutUrlDetailsSerializer().deserialize(json) + return EventDetails.ssoChangeLogoutUrlDetails(v) + case "sso_change_saml_identity_mode_details": + let v = TeamLog.SsoChangeSamlIdentityModeDetailsSerializer().deserialize(json) + return EventDetails.ssoChangeSamlIdentityModeDetails(v) + case "sso_remove_cert_details": + let v = TeamLog.SsoRemoveCertDetailsSerializer().deserialize(json) + return EventDetails.ssoRemoveCertDetails(v) + case "sso_remove_login_url_details": + let v = TeamLog.SsoRemoveLoginUrlDetailsSerializer().deserialize(json) + return EventDetails.ssoRemoveLoginUrlDetails(v) + case "sso_remove_logout_url_details": + let v = TeamLog.SsoRemoveLogoutUrlDetailsSerializer().deserialize(json) + return EventDetails.ssoRemoveLogoutUrlDetails(v) + case "team_folder_change_status_details": + let v = TeamLog.TeamFolderChangeStatusDetailsSerializer().deserialize(json) + return EventDetails.teamFolderChangeStatusDetails(v) + case "team_folder_create_details": + let v = TeamLog.TeamFolderCreateDetailsSerializer().deserialize(json) + return EventDetails.teamFolderCreateDetails(v) + case "team_folder_downgrade_details": + let v = TeamLog.TeamFolderDowngradeDetailsSerializer().deserialize(json) + return EventDetails.teamFolderDowngradeDetails(v) + case "team_folder_permanently_delete_details": + let v = TeamLog.TeamFolderPermanentlyDeleteDetailsSerializer().deserialize(json) + return EventDetails.teamFolderPermanentlyDeleteDetails(v) + case "team_folder_rename_details": + let v = TeamLog.TeamFolderRenameDetailsSerializer().deserialize(json) + return EventDetails.teamFolderRenameDetails(v) + case "team_selective_sync_settings_changed_details": + let v = TeamLog.TeamSelectiveSyncSettingsChangedDetailsSerializer().deserialize(json) + return EventDetails.teamSelectiveSyncSettingsChangedDetails(v) + case "account_capture_change_policy_details": + let v = TeamLog.AccountCaptureChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.accountCaptureChangePolicyDetails(v) + case "allow_download_disabled_details": + let v = TeamLog.AllowDownloadDisabledDetailsSerializer().deserialize(json) + return EventDetails.allowDownloadDisabledDetails(v) + case "allow_download_enabled_details": + let v = TeamLog.AllowDownloadEnabledDetailsSerializer().deserialize(json) + return EventDetails.allowDownloadEnabledDetails(v) + case "camera_uploads_policy_changed_details": + let v = TeamLog.CameraUploadsPolicyChangedDetailsSerializer().deserialize(json) + return EventDetails.cameraUploadsPolicyChangedDetails(v) + case "data_placement_restriction_change_policy_details": + let v = TeamLog.DataPlacementRestrictionChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.dataPlacementRestrictionChangePolicyDetails(v) + case "data_placement_restriction_satisfy_policy_details": + let v = TeamLog.DataPlacementRestrictionSatisfyPolicyDetailsSerializer().deserialize(json) + return EventDetails.dataPlacementRestrictionSatisfyPolicyDetails(v) + case "device_approvals_change_desktop_policy_details": + let v = TeamLog.DeviceApprovalsChangeDesktopPolicyDetailsSerializer().deserialize(json) + return EventDetails.deviceApprovalsChangeDesktopPolicyDetails(v) + case "device_approvals_change_mobile_policy_details": + let v = TeamLog.DeviceApprovalsChangeMobilePolicyDetailsSerializer().deserialize(json) + return EventDetails.deviceApprovalsChangeMobilePolicyDetails(v) + case "device_approvals_change_overage_action_details": + let v = TeamLog.DeviceApprovalsChangeOverageActionDetailsSerializer().deserialize(json) + return EventDetails.deviceApprovalsChangeOverageActionDetails(v) + case "device_approvals_change_unlink_action_details": + let v = TeamLog.DeviceApprovalsChangeUnlinkActionDetailsSerializer().deserialize(json) + return EventDetails.deviceApprovalsChangeUnlinkActionDetails(v) + case "directory_restrictions_add_members_details": + let v = TeamLog.DirectoryRestrictionsAddMembersDetailsSerializer().deserialize(json) + return EventDetails.directoryRestrictionsAddMembersDetails(v) + case "directory_restrictions_remove_members_details": + let v = TeamLog.DirectoryRestrictionsRemoveMembersDetailsSerializer().deserialize(json) + return EventDetails.directoryRestrictionsRemoveMembersDetails(v) + case "emm_add_exception_details": + let v = TeamLog.EmmAddExceptionDetailsSerializer().deserialize(json) + return EventDetails.emmAddExceptionDetails(v) + case "emm_change_policy_details": + let v = TeamLog.EmmChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.emmChangePolicyDetails(v) + case "emm_remove_exception_details": + let v = TeamLog.EmmRemoveExceptionDetailsSerializer().deserialize(json) + return EventDetails.emmRemoveExceptionDetails(v) + case "extended_version_history_change_policy_details": + let v = TeamLog.ExtendedVersionHistoryChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.extendedVersionHistoryChangePolicyDetails(v) + case "file_comments_change_policy_details": + let v = TeamLog.FileCommentsChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.fileCommentsChangePolicyDetails(v) + case "file_requests_change_policy_details": + let v = TeamLog.FileRequestsChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.fileRequestsChangePolicyDetails(v) + case "file_requests_emails_enabled_details": + let v = TeamLog.FileRequestsEmailsEnabledDetailsSerializer().deserialize(json) + return EventDetails.fileRequestsEmailsEnabledDetails(v) + case "file_requests_emails_restricted_to_team_only_details": + let v = TeamLog.FileRequestsEmailsRestrictedToTeamOnlyDetailsSerializer().deserialize(json) + return EventDetails.fileRequestsEmailsRestrictedToTeamOnlyDetails(v) + case "google_sso_change_policy_details": + let v = TeamLog.GoogleSsoChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.googleSsoChangePolicyDetails(v) + case "group_user_management_change_policy_details": + let v = TeamLog.GroupUserManagementChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.groupUserManagementChangePolicyDetails(v) + case "member_requests_change_policy_details": + let v = TeamLog.MemberRequestsChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.memberRequestsChangePolicyDetails(v) + case "member_space_limits_add_exception_details": + let v = TeamLog.MemberSpaceLimitsAddExceptionDetailsSerializer().deserialize(json) + return EventDetails.memberSpaceLimitsAddExceptionDetails(v) + case "member_space_limits_change_caps_type_policy_details": + let v = TeamLog.MemberSpaceLimitsChangeCapsTypePolicyDetailsSerializer().deserialize(json) + return EventDetails.memberSpaceLimitsChangeCapsTypePolicyDetails(v) + case "member_space_limits_change_policy_details": + let v = TeamLog.MemberSpaceLimitsChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.memberSpaceLimitsChangePolicyDetails(v) + case "member_space_limits_remove_exception_details": + let v = TeamLog.MemberSpaceLimitsRemoveExceptionDetailsSerializer().deserialize(json) + return EventDetails.memberSpaceLimitsRemoveExceptionDetails(v) + case "member_suggestions_change_policy_details": + let v = TeamLog.MemberSuggestionsChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.memberSuggestionsChangePolicyDetails(v) + case "microsoft_office_addin_change_policy_details": + let v = TeamLog.MicrosoftOfficeAddinChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.microsoftOfficeAddinChangePolicyDetails(v) + case "network_control_change_policy_details": + let v = TeamLog.NetworkControlChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.networkControlChangePolicyDetails(v) + case "paper_change_deployment_policy_details": + let v = TeamLog.PaperChangeDeploymentPolicyDetailsSerializer().deserialize(json) + return EventDetails.paperChangeDeploymentPolicyDetails(v) + case "paper_change_member_link_policy_details": + let v = TeamLog.PaperChangeMemberLinkPolicyDetailsSerializer().deserialize(json) + return EventDetails.paperChangeMemberLinkPolicyDetails(v) + case "paper_change_member_policy_details": + let v = TeamLog.PaperChangeMemberPolicyDetailsSerializer().deserialize(json) + return EventDetails.paperChangeMemberPolicyDetails(v) + case "paper_change_policy_details": + let v = TeamLog.PaperChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.paperChangePolicyDetails(v) + case "paper_enabled_users_group_addition_details": + let v = TeamLog.PaperEnabledUsersGroupAdditionDetailsSerializer().deserialize(json) + return EventDetails.paperEnabledUsersGroupAdditionDetails(v) + case "paper_enabled_users_group_removal_details": + let v = TeamLog.PaperEnabledUsersGroupRemovalDetailsSerializer().deserialize(json) + return EventDetails.paperEnabledUsersGroupRemovalDetails(v) + case "permanent_delete_change_policy_details": + let v = TeamLog.PermanentDeleteChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.permanentDeleteChangePolicyDetails(v) + case "sharing_change_folder_join_policy_details": + let v = TeamLog.SharingChangeFolderJoinPolicyDetailsSerializer().deserialize(json) + return EventDetails.sharingChangeFolderJoinPolicyDetails(v) + case "sharing_change_link_policy_details": + let v = TeamLog.SharingChangeLinkPolicyDetailsSerializer().deserialize(json) + return EventDetails.sharingChangeLinkPolicyDetails(v) + case "sharing_change_member_policy_details": + let v = TeamLog.SharingChangeMemberPolicyDetailsSerializer().deserialize(json) + return EventDetails.sharingChangeMemberPolicyDetails(v) + case "showcase_change_download_policy_details": + let v = TeamLog.ShowcaseChangeDownloadPolicyDetailsSerializer().deserialize(json) + return EventDetails.showcaseChangeDownloadPolicyDetails(v) + case "showcase_change_enabled_policy_details": + let v = TeamLog.ShowcaseChangeEnabledPolicyDetailsSerializer().deserialize(json) + return EventDetails.showcaseChangeEnabledPolicyDetails(v) + case "showcase_change_external_sharing_policy_details": + let v = TeamLog.ShowcaseChangeExternalSharingPolicyDetailsSerializer().deserialize(json) + return EventDetails.showcaseChangeExternalSharingPolicyDetails(v) + case "smart_sync_change_policy_details": + let v = TeamLog.SmartSyncChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.smartSyncChangePolicyDetails(v) + case "smart_sync_not_opt_out_details": + let v = TeamLog.SmartSyncNotOptOutDetailsSerializer().deserialize(json) + return EventDetails.smartSyncNotOptOutDetails(v) + case "smart_sync_opt_out_details": + let v = TeamLog.SmartSyncOptOutDetailsSerializer().deserialize(json) + return EventDetails.smartSyncOptOutDetails(v) + case "sso_change_policy_details": + let v = TeamLog.SsoChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.ssoChangePolicyDetails(v) + case "team_selective_sync_policy_changed_details": + let v = TeamLog.TeamSelectiveSyncPolicyChangedDetailsSerializer().deserialize(json) + return EventDetails.teamSelectiveSyncPolicyChangedDetails(v) + case "tfa_change_policy_details": + let v = TeamLog.TfaChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.tfaChangePolicyDetails(v) + case "two_account_change_policy_details": + let v = TeamLog.TwoAccountChangePolicyDetailsSerializer().deserialize(json) + return EventDetails.twoAccountChangePolicyDetails(v) + case "viewer_info_policy_changed_details": + let v = TeamLog.ViewerInfoPolicyChangedDetailsSerializer().deserialize(json) + return EventDetails.viewerInfoPolicyChangedDetails(v) + case "web_sessions_change_fixed_length_policy_details": + let v = TeamLog.WebSessionsChangeFixedLengthPolicyDetailsSerializer().deserialize(json) + return EventDetails.webSessionsChangeFixedLengthPolicyDetails(v) + case "web_sessions_change_idle_length_policy_details": + let v = TeamLog.WebSessionsChangeIdleLengthPolicyDetailsSerializer().deserialize(json) + return EventDetails.webSessionsChangeIdleLengthPolicyDetails(v) + case "team_merge_from_details": + let v = TeamLog.TeamMergeFromDetailsSerializer().deserialize(json) + return EventDetails.teamMergeFromDetails(v) + case "team_merge_to_details": + let v = TeamLog.TeamMergeToDetailsSerializer().deserialize(json) + return EventDetails.teamMergeToDetails(v) + case "team_profile_add_logo_details": + let v = TeamLog.TeamProfileAddLogoDetailsSerializer().deserialize(json) + return EventDetails.teamProfileAddLogoDetails(v) + case "team_profile_change_default_language_details": + let v = TeamLog.TeamProfileChangeDefaultLanguageDetailsSerializer().deserialize(json) + return EventDetails.teamProfileChangeDefaultLanguageDetails(v) + case "team_profile_change_logo_details": + let v = TeamLog.TeamProfileChangeLogoDetailsSerializer().deserialize(json) + return EventDetails.teamProfileChangeLogoDetails(v) + case "team_profile_change_name_details": + let v = TeamLog.TeamProfileChangeNameDetailsSerializer().deserialize(json) + return EventDetails.teamProfileChangeNameDetails(v) + case "team_profile_remove_logo_details": + let v = TeamLog.TeamProfileRemoveLogoDetailsSerializer().deserialize(json) + return EventDetails.teamProfileRemoveLogoDetails(v) + case "tfa_add_backup_phone_details": + let v = TeamLog.TfaAddBackupPhoneDetailsSerializer().deserialize(json) + return EventDetails.tfaAddBackupPhoneDetails(v) + case "tfa_add_security_key_details": + let v = TeamLog.TfaAddSecurityKeyDetailsSerializer().deserialize(json) + return EventDetails.tfaAddSecurityKeyDetails(v) + case "tfa_change_backup_phone_details": + let v = TeamLog.TfaChangeBackupPhoneDetailsSerializer().deserialize(json) + return EventDetails.tfaChangeBackupPhoneDetails(v) + case "tfa_change_status_details": + let v = TeamLog.TfaChangeStatusDetailsSerializer().deserialize(json) + return EventDetails.tfaChangeStatusDetails(v) + case "tfa_remove_backup_phone_details": + let v = TeamLog.TfaRemoveBackupPhoneDetailsSerializer().deserialize(json) + return EventDetails.tfaRemoveBackupPhoneDetails(v) + case "tfa_remove_security_key_details": + let v = TeamLog.TfaRemoveSecurityKeyDetailsSerializer().deserialize(json) + return EventDetails.tfaRemoveSecurityKeyDetails(v) + case "tfa_reset_details": + let v = TeamLog.TfaResetDetailsSerializer().deserialize(json) + return EventDetails.tfaResetDetails(v) + case "missing_details": + let v = TeamLog.MissingDetailsSerializer().deserialize(json) + return EventDetails.missingDetails(v) + case "other": + return EventDetails.other + default: + return EventDetails.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The type of the event. + public enum EventType: CustomStringConvertible { + /// (apps) Linked app for team + case appLinkTeam(TeamLog.AppLinkTeamType) + /// (apps) Linked app for member + case appLinkUser(TeamLog.AppLinkUserType) + /// (apps) Unlinked app for team + case appUnlinkTeam(TeamLog.AppUnlinkTeamType) + /// (apps) Unlinked app for member + case appUnlinkUser(TeamLog.AppUnlinkUserType) + /// (comments) Added file comment + case fileAddComment(TeamLog.FileAddCommentType) + /// (comments) Subscribed to or unsubscribed from comment notifications for file + case fileChangeCommentSubscription(TeamLog.FileChangeCommentSubscriptionType) + /// (comments) Deleted file comment + case fileDeleteComment(TeamLog.FileDeleteCommentType) + /// (comments) Edited file comment + case fileEditComment(TeamLog.FileEditCommentType) + /// (comments) Liked file comment (deprecated, no longer logged) + case fileLikeComment(TeamLog.FileLikeCommentType) + /// (comments) Resolved file comment + case fileResolveComment(TeamLog.FileResolveCommentType) + /// (comments) Unliked file comment (deprecated, no longer logged) + case fileUnlikeComment(TeamLog.FileUnlikeCommentType) + /// (comments) Unresolved file comment + case fileUnresolveComment(TeamLog.FileUnresolveCommentType) + /// (devices) Changed IP address associated with active desktop session + case deviceChangeIpDesktop(TeamLog.DeviceChangeIpDesktopType) + /// (devices) Changed IP address associated with active mobile session + case deviceChangeIpMobile(TeamLog.DeviceChangeIpMobileType) + /// (devices) Changed IP address associated with active web session + case deviceChangeIpWeb(TeamLog.DeviceChangeIpWebType) + /// (devices) Failed to delete all files from unlinked device + case deviceDeleteOnUnlinkFail(TeamLog.DeviceDeleteOnUnlinkFailType) + /// (devices) Deleted all files from unlinked device + case deviceDeleteOnUnlinkSuccess(TeamLog.DeviceDeleteOnUnlinkSuccessType) + /// (devices) Failed to link device + case deviceLinkFail(TeamLog.DeviceLinkFailType) + /// (devices) Linked device + case deviceLinkSuccess(TeamLog.DeviceLinkSuccessType) + /// (devices) Disabled device management (deprecated, no longer logged) + case deviceManagementDisabled(TeamLog.DeviceManagementDisabledType) + /// (devices) Enabled device management (deprecated, no longer logged) + case deviceManagementEnabled(TeamLog.DeviceManagementEnabledType) + /// (devices) Disconnected device + case deviceUnlink(TeamLog.DeviceUnlinkType) + /// (devices) Refreshed auth token used for setting up enterprise mobility management + case emmRefreshAuthToken(TeamLog.EmmRefreshAuthTokenType) + /// (domains) Granted/revoked option to enable account capture on team domains + case accountCaptureChangeAvailability(TeamLog.AccountCaptureChangeAvailabilityType) + /// (domains) Account-captured user migrated account to team + case accountCaptureMigrateAccount(TeamLog.AccountCaptureMigrateAccountType) + /// (domains) Sent proactive account capture email to all unmanaged members + case accountCaptureNotificationEmailsSent(TeamLog.AccountCaptureNotificationEmailsSentType) + /// (domains) Account-captured user changed account email to personal email + case accountCaptureRelinquishAccount(TeamLog.AccountCaptureRelinquishAccountType) + /// (domains) Disabled domain invites (deprecated, no longer logged) + case disabledDomainInvites(TeamLog.DisabledDomainInvitesType) + /// (domains) Approved user's request to join team + case domainInvitesApproveRequestToJoinTeam(TeamLog.DomainInvitesApproveRequestToJoinTeamType) + /// (domains) Declined user's request to join team + case domainInvitesDeclineRequestToJoinTeam(TeamLog.DomainInvitesDeclineRequestToJoinTeamType) + /// (domains) Sent domain invites to existing domain accounts (deprecated, no longer logged) + case domainInvitesEmailExistingUsers(TeamLog.DomainInvitesEmailExistingUsersType) + /// (domains) Requested to join team + case domainInvitesRequestToJoinTeam(TeamLog.DomainInvitesRequestToJoinTeamType) + /// (domains) Disabled "Automatically invite new users" (deprecated, no longer logged) + case domainInvitesSetInviteNewUserPrefToNo(TeamLog.DomainInvitesSetInviteNewUserPrefToNoType) + /// (domains) Enabled "Automatically invite new users" (deprecated, no longer logged) + case domainInvitesSetInviteNewUserPrefToYes(TeamLog.DomainInvitesSetInviteNewUserPrefToYesType) + /// (domains) Failed to verify team domain + case domainVerificationAddDomainFail(TeamLog.DomainVerificationAddDomainFailType) + /// (domains) Verified team domain + case domainVerificationAddDomainSuccess(TeamLog.DomainVerificationAddDomainSuccessType) + /// (domains) Removed domain from list of verified team domains + case domainVerificationRemoveDomain(TeamLog.DomainVerificationRemoveDomainType) + /// (domains) Enabled domain invites (deprecated, no longer logged) + case enabledDomainInvites(TeamLog.EnabledDomainInvitesType) + /// (file_operations) Created folders (deprecated, no longer logged) + case createFolder(TeamLog.CreateFolderType) + /// (file_operations) Added files and/or folders + case fileAdd(TeamLog.FileAddType) + /// (file_operations) Copied files and/or folders + case fileCopy(TeamLog.FileCopyType) + /// (file_operations) Deleted files and/or folders + case fileDelete(TeamLog.FileDeleteType) + /// (file_operations) Downloaded files and/or folders + case fileDownload(TeamLog.FileDownloadType) + /// (file_operations) Edited files + case fileEdit(TeamLog.FileEditType) + /// (file_operations) Created copy reference to file/folder + case fileGetCopyReference(TeamLog.FileGetCopyReferenceType) + /// (file_operations) Moved files and/or folders + case fileMove(TeamLog.FileMoveType) + /// (file_operations) Permanently deleted files and/or folders + case filePermanentlyDelete(TeamLog.FilePermanentlyDeleteType) + /// (file_operations) Previewed files and/or folders + case filePreview(TeamLog.FilePreviewType) + /// (file_operations) Renamed files and/or folders + case fileRename(TeamLog.FileRenameType) + /// (file_operations) Restored deleted files and/or folders + case fileRestore(TeamLog.FileRestoreType) + /// (file_operations) Reverted files to previous version + case fileRevert(TeamLog.FileRevertType) + /// (file_operations) Rolled back file actions + case fileRollbackChanges(TeamLog.FileRollbackChangesType) + /// (file_operations) Saved file/folder using copy reference + case fileSaveCopyReference(TeamLog.FileSaveCopyReferenceType) + /// (file_requests) Changed file request + case fileRequestChange(TeamLog.FileRequestChangeType) + /// (file_requests) Closed file request + case fileRequestClose(TeamLog.FileRequestCloseType) + /// (file_requests) Created file request + case fileRequestCreate(TeamLog.FileRequestCreateType) + /// (file_requests) Received files for file request + case fileRequestReceiveFile(TeamLog.FileRequestReceiveFileType) + /// (groups) Added external ID for group + case groupAddExternalId(TeamLog.GroupAddExternalIdType) + /// (groups) Added team members to group + case groupAddMember(TeamLog.GroupAddMemberType) + /// (groups) Changed external ID for group + case groupChangeExternalId(TeamLog.GroupChangeExternalIdType) + /// (groups) Changed group management type + case groupChangeManagementType(TeamLog.GroupChangeManagementTypeType) + /// (groups) Changed manager permissions of group member + case groupChangeMemberRole(TeamLog.GroupChangeMemberRoleType) + /// (groups) Created group + case groupCreate(TeamLog.GroupCreateType) + /// (groups) Deleted group + case groupDelete(TeamLog.GroupDeleteType) + /// (groups) Updated group (deprecated, no longer logged) + case groupDescriptionUpdated(TeamLog.GroupDescriptionUpdatedType) + /// (groups) Updated group join policy (deprecated, no longer logged) + case groupJoinPolicyUpdated(TeamLog.GroupJoinPolicyUpdatedType) + /// (groups) Moved group (deprecated, no longer logged) + case groupMoved(TeamLog.GroupMovedType) + /// (groups) Removed external ID for group + case groupRemoveExternalId(TeamLog.GroupRemoveExternalIdType) + /// (groups) Removed team members from group + case groupRemoveMember(TeamLog.GroupRemoveMemberType) + /// (groups) Renamed group + case groupRename(TeamLog.GroupRenameType) + /// (logins) Failed to sign in via EMM (deprecated, replaced by 'Failed to sign in') + case emmError(TeamLog.EmmErrorType) + /// (logins) Failed to sign in + case loginFail(TeamLog.LoginFailType) + /// (logins) Signed in + case loginSuccess(TeamLog.LoginSuccessType) + /// (logins) Signed out + case logout(TeamLog.LogoutType) + /// (logins) Ended reseller support session + case resellerSupportSessionEnd(TeamLog.ResellerSupportSessionEndType) + /// (logins) Started reseller support session + case resellerSupportSessionStart(TeamLog.ResellerSupportSessionStartType) + /// (logins) Ended admin sign-in-as session + case signInAsSessionEnd(TeamLog.SignInAsSessionEndType) + /// (logins) Started admin sign-in-as session + case signInAsSessionStart(TeamLog.SignInAsSessionStartType) + /// (logins) Failed to sign in via SSO (deprecated, replaced by 'Failed to sign in') + case ssoError(TeamLog.SsoErrorType) + /// (members) Added team member name + case memberAddName(TeamLog.MemberAddNameType) + /// (members) Changed team member admin role + case memberChangeAdminRole(TeamLog.MemberChangeAdminRoleType) + /// (members) Changed team member email + case memberChangeEmail(TeamLog.MemberChangeEmailType) + /// (members) Changed membership type (limited/full) of member (deprecated, no longer logged) + case memberChangeMembershipType(TeamLog.MemberChangeMembershipTypeType) + /// (members) Changed team member name + case memberChangeName(TeamLog.MemberChangeNameType) + /// (members) Changed member status (invited, joined, suspended, etc.) + case memberChangeStatus(TeamLog.MemberChangeStatusType) + /// (members) Cleared manually added contacts + case memberDeleteManualContacts(TeamLog.MemberDeleteManualContactsType) + /// (members) Permanently deleted contents of deleted team member account + case memberPermanentlyDeleteAccountContents(TeamLog.MemberPermanentlyDeleteAccountContentsType) + /// (members) Set custom member space limit + case memberSpaceLimitsAddCustomQuota(TeamLog.MemberSpaceLimitsAddCustomQuotaType) + /// (members) Changed custom member space limit + case memberSpaceLimitsChangeCustomQuota(TeamLog.MemberSpaceLimitsChangeCustomQuotaType) + /// (members) Changed space limit status + case memberSpaceLimitsChangeStatus(TeamLog.MemberSpaceLimitsChangeStatusType) + /// (members) Removed custom member space limit + case memberSpaceLimitsRemoveCustomQuota(TeamLog.MemberSpaceLimitsRemoveCustomQuotaType) + /// (members) Suggested person to add to team + case memberSuggest(TeamLog.MemberSuggestType) + /// (members) Transferred contents of deleted member account to another member + case memberTransferAccountContents(TeamLog.MemberTransferAccountContentsType) + /// (members) Secondary mails policy changed + case secondaryMailsPolicyChanged(TeamLog.SecondaryMailsPolicyChangedType) + /// (paper) Added team member to Paper doc/folder + case paperContentAddMember(TeamLog.PaperContentAddMemberType) + /// (paper) Added Paper doc/folder to folder + case paperContentAddToFolder(TeamLog.PaperContentAddToFolderType) + /// (paper) Archived Paper doc/folder + case paperContentArchive(TeamLog.PaperContentArchiveType) + /// (paper) Created Paper doc/folder + case paperContentCreate(TeamLog.PaperContentCreateType) + /// (paper) Permanently deleted Paper doc/folder + case paperContentPermanentlyDelete(TeamLog.PaperContentPermanentlyDeleteType) + /// (paper) Removed Paper doc/folder from folder + case paperContentRemoveFromFolder(TeamLog.PaperContentRemoveFromFolderType) + /// (paper) Removed team member from Paper doc/folder + case paperContentRemoveMember(TeamLog.PaperContentRemoveMemberType) + /// (paper) Renamed Paper doc/folder + case paperContentRename(TeamLog.PaperContentRenameType) + /// (paper) Restored archived Paper doc/folder + case paperContentRestore(TeamLog.PaperContentRestoreType) + /// (paper) Added Paper doc comment + case paperDocAddComment(TeamLog.PaperDocAddCommentType) + /// (paper) Changed team member permissions for Paper doc + case paperDocChangeMemberRole(TeamLog.PaperDocChangeMemberRoleType) + /// (paper) Changed sharing setting for Paper doc + case paperDocChangeSharingPolicy(TeamLog.PaperDocChangeSharingPolicyType) + /// (paper) Followed/unfollowed Paper doc + case paperDocChangeSubscription(TeamLog.PaperDocChangeSubscriptionType) + /// (paper) Archived Paper doc (deprecated, no longer logged) + case paperDocDeleted(TeamLog.PaperDocDeletedType) + /// (paper) Deleted Paper doc comment + case paperDocDeleteComment(TeamLog.PaperDocDeleteCommentType) + /// (paper) Downloaded Paper doc in specific format + case paperDocDownload(TeamLog.PaperDocDownloadType) + /// (paper) Edited Paper doc + case paperDocEdit(TeamLog.PaperDocEditType) + /// (paper) Edited Paper doc comment + case paperDocEditComment(TeamLog.PaperDocEditCommentType) + /// (paper) Followed Paper doc (deprecated, replaced by 'Followed/unfollowed Paper doc') + case paperDocFollowed(TeamLog.PaperDocFollowedType) + /// (paper) Mentioned team member in Paper doc + case paperDocMention(TeamLog.PaperDocMentionType) + /// (paper) Transferred ownership of Paper doc + case paperDocOwnershipChanged(TeamLog.PaperDocOwnershipChangedType) + /// (paper) Requested access to Paper doc + case paperDocRequestAccess(TeamLog.PaperDocRequestAccessType) + /// (paper) Resolved Paper doc comment + case paperDocResolveComment(TeamLog.PaperDocResolveCommentType) + /// (paper) Restored Paper doc to previous version + case paperDocRevert(TeamLog.PaperDocRevertType) + /// (paper) Shared Paper doc via Slack + case paperDocSlackShare(TeamLog.PaperDocSlackShareType) + /// (paper) Shared Paper doc with team member (deprecated, no longer logged) + case paperDocTeamInvite(TeamLog.PaperDocTeamInviteType) + /// (paper) Deleted Paper doc + case paperDocTrashed(TeamLog.PaperDocTrashedType) + /// (paper) Unresolved Paper doc comment + case paperDocUnresolveComment(TeamLog.PaperDocUnresolveCommentType) + /// (paper) Restored Paper doc + case paperDocUntrashed(TeamLog.PaperDocUntrashedType) + /// (paper) Viewed Paper doc + case paperDocView(TeamLog.PaperDocViewType) + /// (paper) Changed Paper external sharing setting to anyone (deprecated, no longer logged) + case paperExternalViewAllow(TeamLog.PaperExternalViewAllowType) + /// (paper) Changed Paper external sharing setting to default team (deprecated, no longer logged) + case paperExternalViewDefaultTeam(TeamLog.PaperExternalViewDefaultTeamType) + /// (paper) Changed Paper external sharing setting to team-only (deprecated, no longer logged) + case paperExternalViewForbid(TeamLog.PaperExternalViewForbidType) + /// (paper) Followed/unfollowed Paper folder + case paperFolderChangeSubscription(TeamLog.PaperFolderChangeSubscriptionType) + /// (paper) Archived Paper folder (deprecated, no longer logged) + case paperFolderDeleted(TeamLog.PaperFolderDeletedType) + /// (paper) Followed Paper folder (deprecated, replaced by 'Followed/unfollowed Paper folder') + case paperFolderFollowed(TeamLog.PaperFolderFollowedType) + /// (paper) Shared Paper folder with member (deprecated, no longer logged) + case paperFolderTeamInvite(TeamLog.PaperFolderTeamInviteType) + /// (passwords) Changed password + case passwordChange(TeamLog.PasswordChangeType) + /// (passwords) Reset password + case passwordReset(TeamLog.PasswordResetType) + /// (passwords) Reset all team member passwords + case passwordResetAll(TeamLog.PasswordResetAllType) + /// (reports) Created EMM-excluded users report + case emmCreateExceptionsReport(TeamLog.EmmCreateExceptionsReportType) + /// (reports) Created EMM mobile app usage report + case emmCreateUsageReport(TeamLog.EmmCreateUsageReportType) + /// (reports) Created member data report + case exportMembersReport(TeamLog.ExportMembersReportType) + /// (reports) Exported all team Paper docs + case paperAdminExportStart(TeamLog.PaperAdminExportStartType) + /// (reports) Created Smart Sync non-admin devices report + case smartSyncCreateAdminPrivilegeReport(TeamLog.SmartSyncCreateAdminPrivilegeReportType) + /// (reports) Created team activity report + case teamActivityCreateReport(TeamLog.TeamActivityCreateReportType) + /// (sharing) Shared album + case collectionShare(TeamLog.CollectionShareType) + /// (sharing) Changed Paper doc to invite-only (deprecated, no longer logged) + case noteAclInviteOnly(TeamLog.NoteAclInviteOnlyType) + /// (sharing) Changed Paper doc to link-accessible (deprecated, no longer logged) + case noteAclLink(TeamLog.NoteAclLinkType) + /// (sharing) Changed Paper doc to link-accessible for team (deprecated, no longer logged) + case noteAclTeamLink(TeamLog.NoteAclTeamLinkType) + /// (sharing) Shared Paper doc (deprecated, no longer logged) + case noteShared(TeamLog.NoteSharedType) + /// (sharing) Shared received Paper doc (deprecated, no longer logged) + case noteShareReceive(TeamLog.NoteShareReceiveType) + /// (sharing) Opened shared Paper doc (deprecated, no longer logged) + case openNoteShared(TeamLog.OpenNoteSharedType) + /// (sharing) Added team to shared folder (deprecated, no longer logged) + case sfAddGroup(TeamLog.SfAddGroupType) + /// (sharing) Allowed non-collaborators to view links to files in shared folder (deprecated, no longer logged) + case sfAllowNonMembersToViewSharedLinks(TeamLog.SfAllowNonMembersToViewSharedLinksType) + /// (sharing) Set team members to see warning before sharing folders outside team (deprecated, no longer logged) + case sfExternalInviteWarn(TeamLog.SfExternalInviteWarnType) + /// (sharing) Invited Facebook users to shared folder (deprecated, no longer logged) + case sfFbInvite(TeamLog.SfFbInviteType) + /// (sharing) Changed Facebook user's role in shared folder (deprecated, no longer logged) + case sfFbInviteChangeRole(TeamLog.SfFbInviteChangeRoleType) + /// (sharing) Uninvited Facebook user from shared folder (deprecated, no longer logged) + case sfFbUninvite(TeamLog.SfFbUninviteType) + /// (sharing) Invited group to shared folder (deprecated, no longer logged) + case sfInviteGroup(TeamLog.SfInviteGroupType) + /// (sharing) Granted access to shared folder (deprecated, no longer logged) + case sfTeamGrantAccess(TeamLog.SfTeamGrantAccessType) + /// (sharing) Invited team members to shared folder (deprecated, replaced by 'Invited user to Dropbox and added + /// them to shared file/folder') + case sfTeamInvite(TeamLog.SfTeamInviteType) + /// (sharing) Changed team member's role in shared folder (deprecated, no longer logged) + case sfTeamInviteChangeRole(TeamLog.SfTeamInviteChangeRoleType) + /// (sharing) Joined team member's shared folder (deprecated, no longer logged) + case sfTeamJoin(TeamLog.SfTeamJoinType) + /// (sharing) Joined team member's shared folder from link (deprecated, no longer logged) + case sfTeamJoinFromOobLink(TeamLog.SfTeamJoinFromOobLinkType) + /// (sharing) Unshared folder with team member (deprecated, replaced by 'Removed invitee from shared file/folder + /// before invite was accepted') + case sfTeamUninvite(TeamLog.SfTeamUninviteType) + /// (sharing) Invited user to Dropbox and added them to shared file/folder + case sharedContentAddInvitees(TeamLog.SharedContentAddInviteesType) + /// (sharing) Added expiration date to link for shared file/folder + case sharedContentAddLinkExpiry(TeamLog.SharedContentAddLinkExpiryType) + /// (sharing) Added password to link for shared file/folder + case sharedContentAddLinkPassword(TeamLog.SharedContentAddLinkPasswordType) + /// (sharing) Added users and/or groups to shared file/folder + case sharedContentAddMember(TeamLog.SharedContentAddMemberType) + /// (sharing) Changed whether members can download shared file/folder + case sharedContentChangeDownloadsPolicy(TeamLog.SharedContentChangeDownloadsPolicyType) + /// (sharing) Changed access type of invitee to shared file/folder before invite was accepted + case sharedContentChangeInviteeRole(TeamLog.SharedContentChangeInviteeRoleType) + /// (sharing) Changed link audience of shared file/folder + case sharedContentChangeLinkAudience(TeamLog.SharedContentChangeLinkAudienceType) + /// (sharing) Changed link expiration of shared file/folder + case sharedContentChangeLinkExpiry(TeamLog.SharedContentChangeLinkExpiryType) + /// (sharing) Changed link password of shared file/folder + case sharedContentChangeLinkPassword(TeamLog.SharedContentChangeLinkPasswordType) + /// (sharing) Changed access type of shared file/folder member + case sharedContentChangeMemberRole(TeamLog.SharedContentChangeMemberRoleType) + /// (sharing) Changed whether members can see who viewed shared file/folder + case sharedContentChangeViewerInfoPolicy(TeamLog.SharedContentChangeViewerInfoPolicyType) + /// (sharing) Acquired membership of shared file/folder by accepting invite + case sharedContentClaimInvitation(TeamLog.SharedContentClaimInvitationType) + /// (sharing) Copied shared file/folder to own Dropbox + case sharedContentCopy(TeamLog.SharedContentCopyType) + /// (sharing) Downloaded shared file/folder + case sharedContentDownload(TeamLog.SharedContentDownloadType) + /// (sharing) Left shared file/folder + case sharedContentRelinquishMembership(TeamLog.SharedContentRelinquishMembershipType) + /// (sharing) Removed invitee from shared file/folder before invite was accepted + case sharedContentRemoveInvitees(TeamLog.SharedContentRemoveInviteesType) + /// (sharing) Removed link expiration date of shared file/folder + case sharedContentRemoveLinkExpiry(TeamLog.SharedContentRemoveLinkExpiryType) + /// (sharing) Removed link password of shared file/folder + case sharedContentRemoveLinkPassword(TeamLog.SharedContentRemoveLinkPasswordType) + /// (sharing) Removed user/group from shared file/folder + case sharedContentRemoveMember(TeamLog.SharedContentRemoveMemberType) + /// (sharing) Requested access to shared file/folder + case sharedContentRequestAccess(TeamLog.SharedContentRequestAccessType) + /// (sharing) Unshared file/folder by clearing membership and turning off link + case sharedContentUnshare(TeamLog.SharedContentUnshareType) + /// (sharing) Previewed shared file/folder + case sharedContentView(TeamLog.SharedContentViewType) + /// (sharing) Changed who can access shared folder via link + case sharedFolderChangeLinkPolicy(TeamLog.SharedFolderChangeLinkPolicyType) + /// (sharing) Changed whether shared folder inherits members from parent folder + case sharedFolderChangeMembersInheritancePolicy(TeamLog.SharedFolderChangeMembersInheritancePolicyType) + /// (sharing) Changed who can add/remove members of shared folder + case sharedFolderChangeMembersManagementPolicy(TeamLog.SharedFolderChangeMembersManagementPolicyType) + /// (sharing) Changed who can become member of shared folder + case sharedFolderChangeMembersPolicy(TeamLog.SharedFolderChangeMembersPolicyType) + /// (sharing) Created shared folder + case sharedFolderCreate(TeamLog.SharedFolderCreateType) + /// (sharing) Declined team member's invite to shared folder + case sharedFolderDeclineInvitation(TeamLog.SharedFolderDeclineInvitationType) + /// (sharing) Added shared folder to own Dropbox + case sharedFolderMount(TeamLog.SharedFolderMountType) + /// (sharing) Changed parent of shared folder + case sharedFolderNest(TeamLog.SharedFolderNestType) + /// (sharing) Transferred ownership of shared folder to another member + case sharedFolderTransferOwnership(TeamLog.SharedFolderTransferOwnershipType) + /// (sharing) Deleted shared folder from Dropbox + case sharedFolderUnmount(TeamLog.SharedFolderUnmountType) + /// (sharing) Added shared link expiration date + case sharedLinkAddExpiry(TeamLog.SharedLinkAddExpiryType) + /// (sharing) Changed shared link expiration date + case sharedLinkChangeExpiry(TeamLog.SharedLinkChangeExpiryType) + /// (sharing) Changed visibility of shared link + case sharedLinkChangeVisibility(TeamLog.SharedLinkChangeVisibilityType) + /// (sharing) Added file/folder to Dropbox from shared link + case sharedLinkCopy(TeamLog.SharedLinkCopyType) + /// (sharing) Created shared link + case sharedLinkCreate(TeamLog.SharedLinkCreateType) + /// (sharing) Removed shared link + case sharedLinkDisable(TeamLog.SharedLinkDisableType) + /// (sharing) Downloaded file/folder from shared link + case sharedLinkDownload(TeamLog.SharedLinkDownloadType) + /// (sharing) Removed shared link expiration date + case sharedLinkRemoveExpiry(TeamLog.SharedLinkRemoveExpiryType) + /// (sharing) Added members as audience of shared link + case sharedLinkShare(TeamLog.SharedLinkShareType) + /// (sharing) Opened shared link + case sharedLinkView(TeamLog.SharedLinkViewType) + /// (sharing) Opened shared Paper doc (deprecated, no longer logged) + case sharedNoteOpened(TeamLog.SharedNoteOpenedType) + /// (sharing) Shared link with group (deprecated, no longer logged) + case shmodelGroupShare(TeamLog.ShmodelGroupShareType) + /// (showcase) Granted access to showcase + case showcaseAccessGranted(TeamLog.ShowcaseAccessGrantedType) + /// (showcase) Added member to showcase + case showcaseAddMember(TeamLog.ShowcaseAddMemberType) + /// (showcase) Archived showcase + case showcaseArchived(TeamLog.ShowcaseArchivedType) + /// (showcase) Created showcase + case showcaseCreated(TeamLog.ShowcaseCreatedType) + /// (showcase) Deleted showcase comment + case showcaseDeleteComment(TeamLog.ShowcaseDeleteCommentType) + /// (showcase) Edited showcase + case showcaseEdited(TeamLog.ShowcaseEditedType) + /// (showcase) Edited showcase comment + case showcaseEditComment(TeamLog.ShowcaseEditCommentType) + /// (showcase) Added file to showcase + case showcaseFileAdded(TeamLog.ShowcaseFileAddedType) + /// (showcase) Downloaded file from showcase + case showcaseFileDownload(TeamLog.ShowcaseFileDownloadType) + /// (showcase) Removed file from showcase + case showcaseFileRemoved(TeamLog.ShowcaseFileRemovedType) + /// (showcase) Viewed file in showcase + case showcaseFileView(TeamLog.ShowcaseFileViewType) + /// (showcase) Permanently deleted showcase + case showcasePermanentlyDeleted(TeamLog.ShowcasePermanentlyDeletedType) + /// (showcase) Added showcase comment + case showcasePostComment(TeamLog.ShowcasePostCommentType) + /// (showcase) Removed member from showcase + case showcaseRemoveMember(TeamLog.ShowcaseRemoveMemberType) + /// (showcase) Renamed showcase + case showcaseRenamed(TeamLog.ShowcaseRenamedType) + /// (showcase) Requested access to showcase + case showcaseRequestAccess(TeamLog.ShowcaseRequestAccessType) + /// (showcase) Resolved showcase comment + case showcaseResolveComment(TeamLog.ShowcaseResolveCommentType) + /// (showcase) Unarchived showcase + case showcaseRestored(TeamLog.ShowcaseRestoredType) + /// (showcase) Deleted showcase + case showcaseTrashed(TeamLog.ShowcaseTrashedType) + /// (showcase) Deleted showcase (old version) (deprecated, replaced by 'Deleted showcase') + case showcaseTrashedDeprecated(TeamLog.ShowcaseTrashedDeprecatedType) + /// (showcase) Unresolved showcase comment + case showcaseUnresolveComment(TeamLog.ShowcaseUnresolveCommentType) + /// (showcase) Restored showcase + case showcaseUntrashed(TeamLog.ShowcaseUntrashedType) + /// (showcase) Restored showcase (old version) (deprecated, replaced by 'Restored showcase') + case showcaseUntrashedDeprecated(TeamLog.ShowcaseUntrashedDeprecatedType) + /// (showcase) Viewed showcase + case showcaseView(TeamLog.ShowcaseViewType) + /// (sso) Added X.509 certificate for SSO + case ssoAddCert(TeamLog.SsoAddCertType) + /// (sso) Added sign-in URL for SSO + case ssoAddLoginUrl(TeamLog.SsoAddLoginUrlType) + /// (sso) Added sign-out URL for SSO + case ssoAddLogoutUrl(TeamLog.SsoAddLogoutUrlType) + /// (sso) Changed X.509 certificate for SSO + case ssoChangeCert(TeamLog.SsoChangeCertType) + /// (sso) Changed sign-in URL for SSO + case ssoChangeLoginUrl(TeamLog.SsoChangeLoginUrlType) + /// (sso) Changed sign-out URL for SSO + case ssoChangeLogoutUrl(TeamLog.SsoChangeLogoutUrlType) + /// (sso) Changed SAML identity mode for SSO + case ssoChangeSamlIdentityMode(TeamLog.SsoChangeSamlIdentityModeType) + /// (sso) Removed X.509 certificate for SSO + case ssoRemoveCert(TeamLog.SsoRemoveCertType) + /// (sso) Removed sign-in URL for SSO + case ssoRemoveLoginUrl(TeamLog.SsoRemoveLoginUrlType) + /// (sso) Removed sign-out URL for SSO + case ssoRemoveLogoutUrl(TeamLog.SsoRemoveLogoutUrlType) + /// (team_folders) Changed archival status of team folder + case teamFolderChangeStatus(TeamLog.TeamFolderChangeStatusType) + /// (team_folders) Created team folder in active status + case teamFolderCreate(TeamLog.TeamFolderCreateType) + /// (team_folders) Downgraded team folder to regular shared folder + case teamFolderDowngrade(TeamLog.TeamFolderDowngradeType) + /// (team_folders) Permanently deleted archived team folder + case teamFolderPermanentlyDelete(TeamLog.TeamFolderPermanentlyDeleteType) + /// (team_folders) Renamed active/archived team folder + case teamFolderRename(TeamLog.TeamFolderRenameType) + /// (team_folders) Changed sync default + case teamSelectiveSyncSettingsChanged(TeamLog.TeamSelectiveSyncSettingsChangedType) + /// (team_policies) Changed account capture setting on team domain + case accountCaptureChangePolicy(TeamLog.AccountCaptureChangePolicyType) + /// (team_policies) Disabled downloads (deprecated, no longer logged) + case allowDownloadDisabled(TeamLog.AllowDownloadDisabledType) + /// (team_policies) Enabled downloads (deprecated, no longer logged) + case allowDownloadEnabled(TeamLog.AllowDownloadEnabledType) + /// (team_policies) Changed camera uploads setting for team + case cameraUploadsPolicyChanged(TeamLog.CameraUploadsPolicyChangedType) + /// (team_policies) Set restrictions on data center locations where team data resides + case dataPlacementRestrictionChangePolicy(TeamLog.DataPlacementRestrictionChangePolicyType) + /// (team_policies) Completed restrictions on data center locations where team data resides + case dataPlacementRestrictionSatisfyPolicy(TeamLog.DataPlacementRestrictionSatisfyPolicyType) + /// (team_policies) Set/removed limit on number of computers member can link to team Dropbox account + case deviceApprovalsChangeDesktopPolicy(TeamLog.DeviceApprovalsChangeDesktopPolicyType) + /// (team_policies) Set/removed limit on number of mobile devices member can link to team Dropbox account + case deviceApprovalsChangeMobilePolicy(TeamLog.DeviceApprovalsChangeMobilePolicyType) + /// (team_policies) Changed device approvals setting when member is over limit + case deviceApprovalsChangeOverageAction(TeamLog.DeviceApprovalsChangeOverageActionType) + /// (team_policies) Changed device approvals setting when member unlinks approved device + case deviceApprovalsChangeUnlinkAction(TeamLog.DeviceApprovalsChangeUnlinkActionType) + /// (team_policies) Added members to directory restrictions list + case directoryRestrictionsAddMembers(TeamLog.DirectoryRestrictionsAddMembersType) + /// (team_policies) Removed members from directory restrictions list + case directoryRestrictionsRemoveMembers(TeamLog.DirectoryRestrictionsRemoveMembersType) + /// (team_policies) Added members to EMM exception list + case emmAddException(TeamLog.EmmAddExceptionType) + /// (team_policies) Enabled/disabled enterprise mobility management for members + case emmChangePolicy(TeamLog.EmmChangePolicyType) + /// (team_policies) Removed members from EMM exception list + case emmRemoveException(TeamLog.EmmRemoveExceptionType) + /// (team_policies) Accepted/opted out of extended version history + case extendedVersionHistoryChangePolicy(TeamLog.ExtendedVersionHistoryChangePolicyType) + /// (team_policies) Enabled/disabled commenting on team files + case fileCommentsChangePolicy(TeamLog.FileCommentsChangePolicyType) + /// (team_policies) Enabled/disabled file requests + case fileRequestsChangePolicy(TeamLog.FileRequestsChangePolicyType) + /// (team_policies) Enabled file request emails for everyone (deprecated, no longer logged) + case fileRequestsEmailsEnabled(TeamLog.FileRequestsEmailsEnabledType) + /// (team_policies) Enabled file request emails for team (deprecated, no longer logged) + case fileRequestsEmailsRestrictedToTeamOnly(TeamLog.FileRequestsEmailsRestrictedToTeamOnlyType) + /// (team_policies) Enabled/disabled Google single sign-on for team + case googleSsoChangePolicy(TeamLog.GoogleSsoChangePolicyType) + /// (team_policies) Changed who can create groups + case groupUserManagementChangePolicy(TeamLog.GroupUserManagementChangePolicyType) + /// (team_policies) Changed whether users can find team when not invited + case memberRequestsChangePolicy(TeamLog.MemberRequestsChangePolicyType) + /// (team_policies) Added members to member space limit exception list + case memberSpaceLimitsAddException(TeamLog.MemberSpaceLimitsAddExceptionType) + /// (team_policies) Changed member space limit type for team + case memberSpaceLimitsChangeCapsTypePolicy(TeamLog.MemberSpaceLimitsChangeCapsTypePolicyType) + /// (team_policies) Changed team default member space limit + case memberSpaceLimitsChangePolicy(TeamLog.MemberSpaceLimitsChangePolicyType) + /// (team_policies) Removed members from member space limit exception list + case memberSpaceLimitsRemoveException(TeamLog.MemberSpaceLimitsRemoveExceptionType) + /// (team_policies) Enabled/disabled option for team members to suggest people to add to team + case memberSuggestionsChangePolicy(TeamLog.MemberSuggestionsChangePolicyType) + /// (team_policies) Enabled/disabled Microsoft Office add-in + case microsoftOfficeAddinChangePolicy(TeamLog.MicrosoftOfficeAddinChangePolicyType) + /// (team_policies) Enabled/disabled network control + case networkControlChangePolicy(TeamLog.NetworkControlChangePolicyType) + /// (team_policies) Changed whether Dropbox Paper, when enabled, is deployed to all members or to specific + /// members + case paperChangeDeploymentPolicy(TeamLog.PaperChangeDeploymentPolicyType) + /// (team_policies) Changed whether non-members can view Paper docs with link (deprecated, no longer logged) + case paperChangeMemberLinkPolicy(TeamLog.PaperChangeMemberLinkPolicyType) + /// (team_policies) Changed whether members can share Paper docs outside team, and if docs are accessible only + /// by team members or anyone by default + case paperChangeMemberPolicy(TeamLog.PaperChangeMemberPolicyType) + /// (team_policies) Enabled/disabled Dropbox Paper for team + case paperChangePolicy(TeamLog.PaperChangePolicyType) + /// (team_policies) Added users to Paper-enabled users list + case paperEnabledUsersGroupAddition(TeamLog.PaperEnabledUsersGroupAdditionType) + /// (team_policies) Removed users from Paper-enabled users list + case paperEnabledUsersGroupRemoval(TeamLog.PaperEnabledUsersGroupRemovalType) + /// (team_policies) Enabled/disabled ability of team members to permanently delete content + case permanentDeleteChangePolicy(TeamLog.PermanentDeleteChangePolicyType) + /// (team_policies) Changed whether team members can join shared folders owned outside team + case sharingChangeFolderJoinPolicy(TeamLog.SharingChangeFolderJoinPolicyType) + /// (team_policies) Changed whether members can share links outside team, and if links are accessible only by + /// team members or anyone by default + case sharingChangeLinkPolicy(TeamLog.SharingChangeLinkPolicyType) + /// (team_policies) Changed whether members can share files/folders outside team + case sharingChangeMemberPolicy(TeamLog.SharingChangeMemberPolicyType) + /// (team_policies) Enabled/disabled downloading files from Dropbox Showcase for team + case showcaseChangeDownloadPolicy(TeamLog.ShowcaseChangeDownloadPolicyType) + /// (team_policies) Enabled/disabled Dropbox Showcase for team + case showcaseChangeEnabledPolicy(TeamLog.ShowcaseChangeEnabledPolicyType) + /// (team_policies) Enabled/disabled sharing Dropbox Showcase externally for team + case showcaseChangeExternalSharingPolicy(TeamLog.ShowcaseChangeExternalSharingPolicyType) + /// (team_policies) Changed default Smart Sync setting for team members + case smartSyncChangePolicy(TeamLog.SmartSyncChangePolicyType) + /// (team_policies) Opted team into Smart Sync + case smartSyncNotOptOut(TeamLog.SmartSyncNotOptOutType) + /// (team_policies) Opted team out of Smart Sync + case smartSyncOptOut(TeamLog.SmartSyncOptOutType) + /// (team_policies) Changed single sign-on setting for team + case ssoChangePolicy(TeamLog.SsoChangePolicyType) + /// (team_policies) Enabled/disabled Team Selective Sync for team + case teamSelectiveSyncPolicyChanged(TeamLog.TeamSelectiveSyncPolicyChangedType) + /// (team_policies) Changed two-step verification setting for team + case tfaChangePolicy(TeamLog.TfaChangePolicyType) + /// (team_policies) Enabled/disabled option for members to link personal Dropbox account and team account to + /// same computer + case twoAccountChangePolicy(TeamLog.TwoAccountChangePolicyType) + /// (team_policies) Changed team policy for viewer info + case viewerInfoPolicyChanged(TeamLog.ViewerInfoPolicyChangedType) + /// (team_policies) Changed how long members can stay signed in to Dropbox.com + case webSessionsChangeFixedLengthPolicy(TeamLog.WebSessionsChangeFixedLengthPolicyType) + /// (team_policies) Changed how long team members can be idle while signed in to Dropbox.com + case webSessionsChangeIdleLengthPolicy(TeamLog.WebSessionsChangeIdleLengthPolicyType) + /// (team_profile) Merged another team into this team + case teamMergeFrom(TeamLog.TeamMergeFromType) + /// (team_profile) Merged this team into another team + case teamMergeTo(TeamLog.TeamMergeToType) + /// (team_profile) Added team logo to display on shared link headers + case teamProfileAddLogo(TeamLog.TeamProfileAddLogoType) + /// (team_profile) Changed default language for team + case teamProfileChangeDefaultLanguage(TeamLog.TeamProfileChangeDefaultLanguageType) + /// (team_profile) Changed team logo displayed on shared link headers + case teamProfileChangeLogo(TeamLog.TeamProfileChangeLogoType) + /// (team_profile) Changed team name + case teamProfileChangeName(TeamLog.TeamProfileChangeNameType) + /// (team_profile) Removed team logo displayed on shared link headers + case teamProfileRemoveLogo(TeamLog.TeamProfileRemoveLogoType) + /// (tfa) Added backup phone for two-step verification + case tfaAddBackupPhone(TeamLog.TfaAddBackupPhoneType) + /// (tfa) Added security key for two-step verification + case tfaAddSecurityKey(TeamLog.TfaAddSecurityKeyType) + /// (tfa) Changed backup phone for two-step verification + case tfaChangeBackupPhone(TeamLog.TfaChangeBackupPhoneType) + /// (tfa) Enabled/disabled/changed two-step verification setting + case tfaChangeStatus(TeamLog.TfaChangeStatusType) + /// (tfa) Removed backup phone for two-step verification + case tfaRemoveBackupPhone(TeamLog.TfaRemoveBackupPhoneType) + /// (tfa) Removed security key for two-step verification + case tfaRemoveSecurityKey(TeamLog.TfaRemoveSecurityKeyType) + /// (tfa) Reset two-step verification for team member + case tfaReset(TeamLog.TfaResetType) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EventTypeSerializer().serialize(self)))" + } + } + open class EventTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EventType) -> JSON { + switch value { + case .appLinkTeam(let arg): + var d = Serialization.getFields(TeamLog.AppLinkTeamTypeSerializer().serialize(arg)) + d[".tag"] = .str("app_link_team") + return .dictionary(d) + case .appLinkUser(let arg): + var d = Serialization.getFields(TeamLog.AppLinkUserTypeSerializer().serialize(arg)) + d[".tag"] = .str("app_link_user") + return .dictionary(d) + case .appUnlinkTeam(let arg): + var d = Serialization.getFields(TeamLog.AppUnlinkTeamTypeSerializer().serialize(arg)) + d[".tag"] = .str("app_unlink_team") + return .dictionary(d) + case .appUnlinkUser(let arg): + var d = Serialization.getFields(TeamLog.AppUnlinkUserTypeSerializer().serialize(arg)) + d[".tag"] = .str("app_unlink_user") + return .dictionary(d) + case .fileAddComment(let arg): + var d = Serialization.getFields(TeamLog.FileAddCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_add_comment") + return .dictionary(d) + case .fileChangeCommentSubscription(let arg): + var d = Serialization.getFields(TeamLog.FileChangeCommentSubscriptionTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_change_comment_subscription") + return .dictionary(d) + case .fileDeleteComment(let arg): + var d = Serialization.getFields(TeamLog.FileDeleteCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_delete_comment") + return .dictionary(d) + case .fileEditComment(let arg): + var d = Serialization.getFields(TeamLog.FileEditCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_edit_comment") + return .dictionary(d) + case .fileLikeComment(let arg): + var d = Serialization.getFields(TeamLog.FileLikeCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_like_comment") + return .dictionary(d) + case .fileResolveComment(let arg): + var d = Serialization.getFields(TeamLog.FileResolveCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_resolve_comment") + return .dictionary(d) + case .fileUnlikeComment(let arg): + var d = Serialization.getFields(TeamLog.FileUnlikeCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_unlike_comment") + return .dictionary(d) + case .fileUnresolveComment(let arg): + var d = Serialization.getFields(TeamLog.FileUnresolveCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_unresolve_comment") + return .dictionary(d) + case .deviceChangeIpDesktop(let arg): + var d = Serialization.getFields(TeamLog.DeviceChangeIpDesktopTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_change_ip_desktop") + return .dictionary(d) + case .deviceChangeIpMobile(let arg): + var d = Serialization.getFields(TeamLog.DeviceChangeIpMobileTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_change_ip_mobile") + return .dictionary(d) + case .deviceChangeIpWeb(let arg): + var d = Serialization.getFields(TeamLog.DeviceChangeIpWebTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_change_ip_web") + return .dictionary(d) + case .deviceDeleteOnUnlinkFail(let arg): + var d = Serialization.getFields(TeamLog.DeviceDeleteOnUnlinkFailTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_delete_on_unlink_fail") + return .dictionary(d) + case .deviceDeleteOnUnlinkSuccess(let arg): + var d = Serialization.getFields(TeamLog.DeviceDeleteOnUnlinkSuccessTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_delete_on_unlink_success") + return .dictionary(d) + case .deviceLinkFail(let arg): + var d = Serialization.getFields(TeamLog.DeviceLinkFailTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_link_fail") + return .dictionary(d) + case .deviceLinkSuccess(let arg): + var d = Serialization.getFields(TeamLog.DeviceLinkSuccessTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_link_success") + return .dictionary(d) + case .deviceManagementDisabled(let arg): + var d = Serialization.getFields(TeamLog.DeviceManagementDisabledTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_management_disabled") + return .dictionary(d) + case .deviceManagementEnabled(let arg): + var d = Serialization.getFields(TeamLog.DeviceManagementEnabledTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_management_enabled") + return .dictionary(d) + case .deviceUnlink(let arg): + var d = Serialization.getFields(TeamLog.DeviceUnlinkTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_unlink") + return .dictionary(d) + case .emmRefreshAuthToken(let arg): + var d = Serialization.getFields(TeamLog.EmmRefreshAuthTokenTypeSerializer().serialize(arg)) + d[".tag"] = .str("emm_refresh_auth_token") + return .dictionary(d) + case .accountCaptureChangeAvailability(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureChangeAvailabilityTypeSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_change_availability") + return .dictionary(d) + case .accountCaptureMigrateAccount(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureMigrateAccountTypeSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_migrate_account") + return .dictionary(d) + case .accountCaptureNotificationEmailsSent(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureNotificationEmailsSentTypeSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_notification_emails_sent") + return .dictionary(d) + case .accountCaptureRelinquishAccount(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureRelinquishAccountTypeSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_relinquish_account") + return .dictionary(d) + case .disabledDomainInvites(let arg): + var d = Serialization.getFields(TeamLog.DisabledDomainInvitesTypeSerializer().serialize(arg)) + d[".tag"] = .str("disabled_domain_invites") + return .dictionary(d) + case .domainInvitesApproveRequestToJoinTeam(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesApproveRequestToJoinTeamTypeSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_approve_request_to_join_team") + return .dictionary(d) + case .domainInvitesDeclineRequestToJoinTeam(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesDeclineRequestToJoinTeamTypeSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_decline_request_to_join_team") + return .dictionary(d) + case .domainInvitesEmailExistingUsers(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesEmailExistingUsersTypeSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_email_existing_users") + return .dictionary(d) + case .domainInvitesRequestToJoinTeam(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesRequestToJoinTeamTypeSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_request_to_join_team") + return .dictionary(d) + case .domainInvitesSetInviteNewUserPrefToNo(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesSetInviteNewUserPrefToNoTypeSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_set_invite_new_user_pref_to_no") + return .dictionary(d) + case .domainInvitesSetInviteNewUserPrefToYes(let arg): + var d = Serialization.getFields(TeamLog.DomainInvitesSetInviteNewUserPrefToYesTypeSerializer().serialize(arg)) + d[".tag"] = .str("domain_invites_set_invite_new_user_pref_to_yes") + return .dictionary(d) + case .domainVerificationAddDomainFail(let arg): + var d = Serialization.getFields(TeamLog.DomainVerificationAddDomainFailTypeSerializer().serialize(arg)) + d[".tag"] = .str("domain_verification_add_domain_fail") + return .dictionary(d) + case .domainVerificationAddDomainSuccess(let arg): + var d = Serialization.getFields(TeamLog.DomainVerificationAddDomainSuccessTypeSerializer().serialize(arg)) + d[".tag"] = .str("domain_verification_add_domain_success") + return .dictionary(d) + case .domainVerificationRemoveDomain(let arg): + var d = Serialization.getFields(TeamLog.DomainVerificationRemoveDomainTypeSerializer().serialize(arg)) + d[".tag"] = .str("domain_verification_remove_domain") + return .dictionary(d) + case .enabledDomainInvites(let arg): + var d = Serialization.getFields(TeamLog.EnabledDomainInvitesTypeSerializer().serialize(arg)) + d[".tag"] = .str("enabled_domain_invites") + return .dictionary(d) + case .createFolder(let arg): + var d = Serialization.getFields(TeamLog.CreateFolderTypeSerializer().serialize(arg)) + d[".tag"] = .str("create_folder") + return .dictionary(d) + case .fileAdd(let arg): + var d = Serialization.getFields(TeamLog.FileAddTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_add") + return .dictionary(d) + case .fileCopy(let arg): + var d = Serialization.getFields(TeamLog.FileCopyTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_copy") + return .dictionary(d) + case .fileDelete(let arg): + var d = Serialization.getFields(TeamLog.FileDeleteTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_delete") + return .dictionary(d) + case .fileDownload(let arg): + var d = Serialization.getFields(TeamLog.FileDownloadTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_download") + return .dictionary(d) + case .fileEdit(let arg): + var d = Serialization.getFields(TeamLog.FileEditTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_edit") + return .dictionary(d) + case .fileGetCopyReference(let arg): + var d = Serialization.getFields(TeamLog.FileGetCopyReferenceTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_get_copy_reference") + return .dictionary(d) + case .fileMove(let arg): + var d = Serialization.getFields(TeamLog.FileMoveTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_move") + return .dictionary(d) + case .filePermanentlyDelete(let arg): + var d = Serialization.getFields(TeamLog.FilePermanentlyDeleteTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_permanently_delete") + return .dictionary(d) + case .filePreview(let arg): + var d = Serialization.getFields(TeamLog.FilePreviewTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_preview") + return .dictionary(d) + case .fileRename(let arg): + var d = Serialization.getFields(TeamLog.FileRenameTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_rename") + return .dictionary(d) + case .fileRestore(let arg): + var d = Serialization.getFields(TeamLog.FileRestoreTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_restore") + return .dictionary(d) + case .fileRevert(let arg): + var d = Serialization.getFields(TeamLog.FileRevertTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_revert") + return .dictionary(d) + case .fileRollbackChanges(let arg): + var d = Serialization.getFields(TeamLog.FileRollbackChangesTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_rollback_changes") + return .dictionary(d) + case .fileSaveCopyReference(let arg): + var d = Serialization.getFields(TeamLog.FileSaveCopyReferenceTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_save_copy_reference") + return .dictionary(d) + case .fileRequestChange(let arg): + var d = Serialization.getFields(TeamLog.FileRequestChangeTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_request_change") + return .dictionary(d) + case .fileRequestClose(let arg): + var d = Serialization.getFields(TeamLog.FileRequestCloseTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_request_close") + return .dictionary(d) + case .fileRequestCreate(let arg): + var d = Serialization.getFields(TeamLog.FileRequestCreateTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_request_create") + return .dictionary(d) + case .fileRequestReceiveFile(let arg): + var d = Serialization.getFields(TeamLog.FileRequestReceiveFileTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_request_receive_file") + return .dictionary(d) + case .groupAddExternalId(let arg): + var d = Serialization.getFields(TeamLog.GroupAddExternalIdTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_add_external_id") + return .dictionary(d) + case .groupAddMember(let arg): + var d = Serialization.getFields(TeamLog.GroupAddMemberTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_add_member") + return .dictionary(d) + case .groupChangeExternalId(let arg): + var d = Serialization.getFields(TeamLog.GroupChangeExternalIdTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_change_external_id") + return .dictionary(d) + case .groupChangeManagementType(let arg): + var d = Serialization.getFields(TeamLog.GroupChangeManagementTypeTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_change_management_type") + return .dictionary(d) + case .groupChangeMemberRole(let arg): + var d = Serialization.getFields(TeamLog.GroupChangeMemberRoleTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_change_member_role") + return .dictionary(d) + case .groupCreate(let arg): + var d = Serialization.getFields(TeamLog.GroupCreateTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_create") + return .dictionary(d) + case .groupDelete(let arg): + var d = Serialization.getFields(TeamLog.GroupDeleteTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_delete") + return .dictionary(d) + case .groupDescriptionUpdated(let arg): + var d = Serialization.getFields(TeamLog.GroupDescriptionUpdatedTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_description_updated") + return .dictionary(d) + case .groupJoinPolicyUpdated(let arg): + var d = Serialization.getFields(TeamLog.GroupJoinPolicyUpdatedTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_join_policy_updated") + return .dictionary(d) + case .groupMoved(let arg): + var d = Serialization.getFields(TeamLog.GroupMovedTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_moved") + return .dictionary(d) + case .groupRemoveExternalId(let arg): + var d = Serialization.getFields(TeamLog.GroupRemoveExternalIdTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_remove_external_id") + return .dictionary(d) + case .groupRemoveMember(let arg): + var d = Serialization.getFields(TeamLog.GroupRemoveMemberTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_remove_member") + return .dictionary(d) + case .groupRename(let arg): + var d = Serialization.getFields(TeamLog.GroupRenameTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_rename") + return .dictionary(d) + case .emmError(let arg): + var d = Serialization.getFields(TeamLog.EmmErrorTypeSerializer().serialize(arg)) + d[".tag"] = .str("emm_error") + return .dictionary(d) + case .loginFail(let arg): + var d = Serialization.getFields(TeamLog.LoginFailTypeSerializer().serialize(arg)) + d[".tag"] = .str("login_fail") + return .dictionary(d) + case .loginSuccess(let arg): + var d = Serialization.getFields(TeamLog.LoginSuccessTypeSerializer().serialize(arg)) + d[".tag"] = .str("login_success") + return .dictionary(d) + case .logout(let arg): + var d = Serialization.getFields(TeamLog.LogoutTypeSerializer().serialize(arg)) + d[".tag"] = .str("logout") + return .dictionary(d) + case .resellerSupportSessionEnd(let arg): + var d = Serialization.getFields(TeamLog.ResellerSupportSessionEndTypeSerializer().serialize(arg)) + d[".tag"] = .str("reseller_support_session_end") + return .dictionary(d) + case .resellerSupportSessionStart(let arg): + var d = Serialization.getFields(TeamLog.ResellerSupportSessionStartTypeSerializer().serialize(arg)) + d[".tag"] = .str("reseller_support_session_start") + return .dictionary(d) + case .signInAsSessionEnd(let arg): + var d = Serialization.getFields(TeamLog.SignInAsSessionEndTypeSerializer().serialize(arg)) + d[".tag"] = .str("sign_in_as_session_end") + return .dictionary(d) + case .signInAsSessionStart(let arg): + var d = Serialization.getFields(TeamLog.SignInAsSessionStartTypeSerializer().serialize(arg)) + d[".tag"] = .str("sign_in_as_session_start") + return .dictionary(d) + case .ssoError(let arg): + var d = Serialization.getFields(TeamLog.SsoErrorTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_error") + return .dictionary(d) + case .memberAddName(let arg): + var d = Serialization.getFields(TeamLog.MemberAddNameTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_add_name") + return .dictionary(d) + case .memberChangeAdminRole(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeAdminRoleTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_change_admin_role") + return .dictionary(d) + case .memberChangeEmail(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeEmailTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_change_email") + return .dictionary(d) + case .memberChangeMembershipType(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeMembershipTypeTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_change_membership_type") + return .dictionary(d) + case .memberChangeName(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeNameTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_change_name") + return .dictionary(d) + case .memberChangeStatus(let arg): + var d = Serialization.getFields(TeamLog.MemberChangeStatusTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_change_status") + return .dictionary(d) + case .memberDeleteManualContacts(let arg): + var d = Serialization.getFields(TeamLog.MemberDeleteManualContactsTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_delete_manual_contacts") + return .dictionary(d) + case .memberPermanentlyDeleteAccountContents(let arg): + var d = Serialization.getFields(TeamLog.MemberPermanentlyDeleteAccountContentsTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_permanently_delete_account_contents") + return .dictionary(d) + case .memberSpaceLimitsAddCustomQuota(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsAddCustomQuotaTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_add_custom_quota") + return .dictionary(d) + case .memberSpaceLimitsChangeCustomQuota(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsChangeCustomQuotaTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_change_custom_quota") + return .dictionary(d) + case .memberSpaceLimitsChangeStatus(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsChangeStatusTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_change_status") + return .dictionary(d) + case .memberSpaceLimitsRemoveCustomQuota(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsRemoveCustomQuotaTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_remove_custom_quota") + return .dictionary(d) + case .memberSuggest(let arg): + var d = Serialization.getFields(TeamLog.MemberSuggestTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_suggest") + return .dictionary(d) + case .memberTransferAccountContents(let arg): + var d = Serialization.getFields(TeamLog.MemberTransferAccountContentsTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_transfer_account_contents") + return .dictionary(d) + case .secondaryMailsPolicyChanged(let arg): + var d = Serialization.getFields(TeamLog.SecondaryMailsPolicyChangedTypeSerializer().serialize(arg)) + d[".tag"] = .str("secondary_mails_policy_changed") + return .dictionary(d) + case .paperContentAddMember(let arg): + var d = Serialization.getFields(TeamLog.PaperContentAddMemberTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_add_member") + return .dictionary(d) + case .paperContentAddToFolder(let arg): + var d = Serialization.getFields(TeamLog.PaperContentAddToFolderTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_add_to_folder") + return .dictionary(d) + case .paperContentArchive(let arg): + var d = Serialization.getFields(TeamLog.PaperContentArchiveTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_archive") + return .dictionary(d) + case .paperContentCreate(let arg): + var d = Serialization.getFields(TeamLog.PaperContentCreateTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_create") + return .dictionary(d) + case .paperContentPermanentlyDelete(let arg): + var d = Serialization.getFields(TeamLog.PaperContentPermanentlyDeleteTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_permanently_delete") + return .dictionary(d) + case .paperContentRemoveFromFolder(let arg): + var d = Serialization.getFields(TeamLog.PaperContentRemoveFromFolderTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_remove_from_folder") + return .dictionary(d) + case .paperContentRemoveMember(let arg): + var d = Serialization.getFields(TeamLog.PaperContentRemoveMemberTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_remove_member") + return .dictionary(d) + case .paperContentRename(let arg): + var d = Serialization.getFields(TeamLog.PaperContentRenameTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_rename") + return .dictionary(d) + case .paperContentRestore(let arg): + var d = Serialization.getFields(TeamLog.PaperContentRestoreTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_content_restore") + return .dictionary(d) + case .paperDocAddComment(let arg): + var d = Serialization.getFields(TeamLog.PaperDocAddCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_add_comment") + return .dictionary(d) + case .paperDocChangeMemberRole(let arg): + var d = Serialization.getFields(TeamLog.PaperDocChangeMemberRoleTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_change_member_role") + return .dictionary(d) + case .paperDocChangeSharingPolicy(let arg): + var d = Serialization.getFields(TeamLog.PaperDocChangeSharingPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_change_sharing_policy") + return .dictionary(d) + case .paperDocChangeSubscription(let arg): + var d = Serialization.getFields(TeamLog.PaperDocChangeSubscriptionTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_change_subscription") + return .dictionary(d) + case .paperDocDeleted(let arg): + var d = Serialization.getFields(TeamLog.PaperDocDeletedTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_deleted") + return .dictionary(d) + case .paperDocDeleteComment(let arg): + var d = Serialization.getFields(TeamLog.PaperDocDeleteCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_delete_comment") + return .dictionary(d) + case .paperDocDownload(let arg): + var d = Serialization.getFields(TeamLog.PaperDocDownloadTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_download") + return .dictionary(d) + case .paperDocEdit(let arg): + var d = Serialization.getFields(TeamLog.PaperDocEditTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_edit") + return .dictionary(d) + case .paperDocEditComment(let arg): + var d = Serialization.getFields(TeamLog.PaperDocEditCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_edit_comment") + return .dictionary(d) + case .paperDocFollowed(let arg): + var d = Serialization.getFields(TeamLog.PaperDocFollowedTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_followed") + return .dictionary(d) + case .paperDocMention(let arg): + var d = Serialization.getFields(TeamLog.PaperDocMentionTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_mention") + return .dictionary(d) + case .paperDocOwnershipChanged(let arg): + var d = Serialization.getFields(TeamLog.PaperDocOwnershipChangedTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_ownership_changed") + return .dictionary(d) + case .paperDocRequestAccess(let arg): + var d = Serialization.getFields(TeamLog.PaperDocRequestAccessTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_request_access") + return .dictionary(d) + case .paperDocResolveComment(let arg): + var d = Serialization.getFields(TeamLog.PaperDocResolveCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_resolve_comment") + return .dictionary(d) + case .paperDocRevert(let arg): + var d = Serialization.getFields(TeamLog.PaperDocRevertTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_revert") + return .dictionary(d) + case .paperDocSlackShare(let arg): + var d = Serialization.getFields(TeamLog.PaperDocSlackShareTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_slack_share") + return .dictionary(d) + case .paperDocTeamInvite(let arg): + var d = Serialization.getFields(TeamLog.PaperDocTeamInviteTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_team_invite") + return .dictionary(d) + case .paperDocTrashed(let arg): + var d = Serialization.getFields(TeamLog.PaperDocTrashedTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_trashed") + return .dictionary(d) + case .paperDocUnresolveComment(let arg): + var d = Serialization.getFields(TeamLog.PaperDocUnresolveCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_unresolve_comment") + return .dictionary(d) + case .paperDocUntrashed(let arg): + var d = Serialization.getFields(TeamLog.PaperDocUntrashedTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_untrashed") + return .dictionary(d) + case .paperDocView(let arg): + var d = Serialization.getFields(TeamLog.PaperDocViewTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_doc_view") + return .dictionary(d) + case .paperExternalViewAllow(let arg): + var d = Serialization.getFields(TeamLog.PaperExternalViewAllowTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_external_view_allow") + return .dictionary(d) + case .paperExternalViewDefaultTeam(let arg): + var d = Serialization.getFields(TeamLog.PaperExternalViewDefaultTeamTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_external_view_default_team") + return .dictionary(d) + case .paperExternalViewForbid(let arg): + var d = Serialization.getFields(TeamLog.PaperExternalViewForbidTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_external_view_forbid") + return .dictionary(d) + case .paperFolderChangeSubscription(let arg): + var d = Serialization.getFields(TeamLog.PaperFolderChangeSubscriptionTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_folder_change_subscription") + return .dictionary(d) + case .paperFolderDeleted(let arg): + var d = Serialization.getFields(TeamLog.PaperFolderDeletedTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_folder_deleted") + return .dictionary(d) + case .paperFolderFollowed(let arg): + var d = Serialization.getFields(TeamLog.PaperFolderFollowedTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_folder_followed") + return .dictionary(d) + case .paperFolderTeamInvite(let arg): + var d = Serialization.getFields(TeamLog.PaperFolderTeamInviteTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_folder_team_invite") + return .dictionary(d) + case .passwordChange(let arg): + var d = Serialization.getFields(TeamLog.PasswordChangeTypeSerializer().serialize(arg)) + d[".tag"] = .str("password_change") + return .dictionary(d) + case .passwordReset(let arg): + var d = Serialization.getFields(TeamLog.PasswordResetTypeSerializer().serialize(arg)) + d[".tag"] = .str("password_reset") + return .dictionary(d) + case .passwordResetAll(let arg): + var d = Serialization.getFields(TeamLog.PasswordResetAllTypeSerializer().serialize(arg)) + d[".tag"] = .str("password_reset_all") + return .dictionary(d) + case .emmCreateExceptionsReport(let arg): + var d = Serialization.getFields(TeamLog.EmmCreateExceptionsReportTypeSerializer().serialize(arg)) + d[".tag"] = .str("emm_create_exceptions_report") + return .dictionary(d) + case .emmCreateUsageReport(let arg): + var d = Serialization.getFields(TeamLog.EmmCreateUsageReportTypeSerializer().serialize(arg)) + d[".tag"] = .str("emm_create_usage_report") + return .dictionary(d) + case .exportMembersReport(let arg): + var d = Serialization.getFields(TeamLog.ExportMembersReportTypeSerializer().serialize(arg)) + d[".tag"] = .str("export_members_report") + return .dictionary(d) + case .paperAdminExportStart(let arg): + var d = Serialization.getFields(TeamLog.PaperAdminExportStartTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_admin_export_start") + return .dictionary(d) + case .smartSyncCreateAdminPrivilegeReport(let arg): + var d = Serialization.getFields(TeamLog.SmartSyncCreateAdminPrivilegeReportTypeSerializer().serialize(arg)) + d[".tag"] = .str("smart_sync_create_admin_privilege_report") + return .dictionary(d) + case .teamActivityCreateReport(let arg): + var d = Serialization.getFields(TeamLog.TeamActivityCreateReportTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_activity_create_report") + return .dictionary(d) + case .collectionShare(let arg): + var d = Serialization.getFields(TeamLog.CollectionShareTypeSerializer().serialize(arg)) + d[".tag"] = .str("collection_share") + return .dictionary(d) + case .noteAclInviteOnly(let arg): + var d = Serialization.getFields(TeamLog.NoteAclInviteOnlyTypeSerializer().serialize(arg)) + d[".tag"] = .str("note_acl_invite_only") + return .dictionary(d) + case .noteAclLink(let arg): + var d = Serialization.getFields(TeamLog.NoteAclLinkTypeSerializer().serialize(arg)) + d[".tag"] = .str("note_acl_link") + return .dictionary(d) + case .noteAclTeamLink(let arg): + var d = Serialization.getFields(TeamLog.NoteAclTeamLinkTypeSerializer().serialize(arg)) + d[".tag"] = .str("note_acl_team_link") + return .dictionary(d) + case .noteShared(let arg): + var d = Serialization.getFields(TeamLog.NoteSharedTypeSerializer().serialize(arg)) + d[".tag"] = .str("note_shared") + return .dictionary(d) + case .noteShareReceive(let arg): + var d = Serialization.getFields(TeamLog.NoteShareReceiveTypeSerializer().serialize(arg)) + d[".tag"] = .str("note_share_receive") + return .dictionary(d) + case .openNoteShared(let arg): + var d = Serialization.getFields(TeamLog.OpenNoteSharedTypeSerializer().serialize(arg)) + d[".tag"] = .str("open_note_shared") + return .dictionary(d) + case .sfAddGroup(let arg): + var d = Serialization.getFields(TeamLog.SfAddGroupTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_add_group") + return .dictionary(d) + case .sfAllowNonMembersToViewSharedLinks(let arg): + var d = Serialization.getFields(TeamLog.SfAllowNonMembersToViewSharedLinksTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_allow_non_members_to_view_shared_links") + return .dictionary(d) + case .sfExternalInviteWarn(let arg): + var d = Serialization.getFields(TeamLog.SfExternalInviteWarnTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_external_invite_warn") + return .dictionary(d) + case .sfFbInvite(let arg): + var d = Serialization.getFields(TeamLog.SfFbInviteTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_fb_invite") + return .dictionary(d) + case .sfFbInviteChangeRole(let arg): + var d = Serialization.getFields(TeamLog.SfFbInviteChangeRoleTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_fb_invite_change_role") + return .dictionary(d) + case .sfFbUninvite(let arg): + var d = Serialization.getFields(TeamLog.SfFbUninviteTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_fb_uninvite") + return .dictionary(d) + case .sfInviteGroup(let arg): + var d = Serialization.getFields(TeamLog.SfInviteGroupTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_invite_group") + return .dictionary(d) + case .sfTeamGrantAccess(let arg): + var d = Serialization.getFields(TeamLog.SfTeamGrantAccessTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_grant_access") + return .dictionary(d) + case .sfTeamInvite(let arg): + var d = Serialization.getFields(TeamLog.SfTeamInviteTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_invite") + return .dictionary(d) + case .sfTeamInviteChangeRole(let arg): + var d = Serialization.getFields(TeamLog.SfTeamInviteChangeRoleTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_invite_change_role") + return .dictionary(d) + case .sfTeamJoin(let arg): + var d = Serialization.getFields(TeamLog.SfTeamJoinTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_join") + return .dictionary(d) + case .sfTeamJoinFromOobLink(let arg): + var d = Serialization.getFields(TeamLog.SfTeamJoinFromOobLinkTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_join_from_oob_link") + return .dictionary(d) + case .sfTeamUninvite(let arg): + var d = Serialization.getFields(TeamLog.SfTeamUninviteTypeSerializer().serialize(arg)) + d[".tag"] = .str("sf_team_uninvite") + return .dictionary(d) + case .sharedContentAddInvitees(let arg): + var d = Serialization.getFields(TeamLog.SharedContentAddInviteesTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_add_invitees") + return .dictionary(d) + case .sharedContentAddLinkExpiry(let arg): + var d = Serialization.getFields(TeamLog.SharedContentAddLinkExpiryTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_add_link_expiry") + return .dictionary(d) + case .sharedContentAddLinkPassword(let arg): + var d = Serialization.getFields(TeamLog.SharedContentAddLinkPasswordTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_add_link_password") + return .dictionary(d) + case .sharedContentAddMember(let arg): + var d = Serialization.getFields(TeamLog.SharedContentAddMemberTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_add_member") + return .dictionary(d) + case .sharedContentChangeDownloadsPolicy(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeDownloadsPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_downloads_policy") + return .dictionary(d) + case .sharedContentChangeInviteeRole(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeInviteeRoleTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_invitee_role") + return .dictionary(d) + case .sharedContentChangeLinkAudience(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeLinkAudienceTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_link_audience") + return .dictionary(d) + case .sharedContentChangeLinkExpiry(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeLinkExpiryTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_link_expiry") + return .dictionary(d) + case .sharedContentChangeLinkPassword(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeLinkPasswordTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_link_password") + return .dictionary(d) + case .sharedContentChangeMemberRole(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeMemberRoleTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_member_role") + return .dictionary(d) + case .sharedContentChangeViewerInfoPolicy(let arg): + var d = Serialization.getFields(TeamLog.SharedContentChangeViewerInfoPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_change_viewer_info_policy") + return .dictionary(d) + case .sharedContentClaimInvitation(let arg): + var d = Serialization.getFields(TeamLog.SharedContentClaimInvitationTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_claim_invitation") + return .dictionary(d) + case .sharedContentCopy(let arg): + var d = Serialization.getFields(TeamLog.SharedContentCopyTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_copy") + return .dictionary(d) + case .sharedContentDownload(let arg): + var d = Serialization.getFields(TeamLog.SharedContentDownloadTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_download") + return .dictionary(d) + case .sharedContentRelinquishMembership(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRelinquishMembershipTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_relinquish_membership") + return .dictionary(d) + case .sharedContentRemoveInvitees(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRemoveInviteesTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_remove_invitees") + return .dictionary(d) + case .sharedContentRemoveLinkExpiry(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRemoveLinkExpiryTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_remove_link_expiry") + return .dictionary(d) + case .sharedContentRemoveLinkPassword(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRemoveLinkPasswordTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_remove_link_password") + return .dictionary(d) + case .sharedContentRemoveMember(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRemoveMemberTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_remove_member") + return .dictionary(d) + case .sharedContentRequestAccess(let arg): + var d = Serialization.getFields(TeamLog.SharedContentRequestAccessTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_request_access") + return .dictionary(d) + case .sharedContentUnshare(let arg): + var d = Serialization.getFields(TeamLog.SharedContentUnshareTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_unshare") + return .dictionary(d) + case .sharedContentView(let arg): + var d = Serialization.getFields(TeamLog.SharedContentViewTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_content_view") + return .dictionary(d) + case .sharedFolderChangeLinkPolicy(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderChangeLinkPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_change_link_policy") + return .dictionary(d) + case .sharedFolderChangeMembersInheritancePolicy(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderChangeMembersInheritancePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_change_members_inheritance_policy") + return .dictionary(d) + case .sharedFolderChangeMembersManagementPolicy(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderChangeMembersManagementPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_change_members_management_policy") + return .dictionary(d) + case .sharedFolderChangeMembersPolicy(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderChangeMembersPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_change_members_policy") + return .dictionary(d) + case .sharedFolderCreate(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderCreateTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_create") + return .dictionary(d) + case .sharedFolderDeclineInvitation(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderDeclineInvitationTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_decline_invitation") + return .dictionary(d) + case .sharedFolderMount(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderMountTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_mount") + return .dictionary(d) + case .sharedFolderNest(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderNestTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_nest") + return .dictionary(d) + case .sharedFolderTransferOwnership(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderTransferOwnershipTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_transfer_ownership") + return .dictionary(d) + case .sharedFolderUnmount(let arg): + var d = Serialization.getFields(TeamLog.SharedFolderUnmountTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_folder_unmount") + return .dictionary(d) + case .sharedLinkAddExpiry(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkAddExpiryTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_add_expiry") + return .dictionary(d) + case .sharedLinkChangeExpiry(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkChangeExpiryTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_change_expiry") + return .dictionary(d) + case .sharedLinkChangeVisibility(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkChangeVisibilityTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_change_visibility") + return .dictionary(d) + case .sharedLinkCopy(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkCopyTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_copy") + return .dictionary(d) + case .sharedLinkCreate(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkCreateTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_create") + return .dictionary(d) + case .sharedLinkDisable(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkDisableTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_disable") + return .dictionary(d) + case .sharedLinkDownload(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkDownloadTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_download") + return .dictionary(d) + case .sharedLinkRemoveExpiry(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkRemoveExpiryTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_remove_expiry") + return .dictionary(d) + case .sharedLinkShare(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkShareTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_share") + return .dictionary(d) + case .sharedLinkView(let arg): + var d = Serialization.getFields(TeamLog.SharedLinkViewTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_link_view") + return .dictionary(d) + case .sharedNoteOpened(let arg): + var d = Serialization.getFields(TeamLog.SharedNoteOpenedTypeSerializer().serialize(arg)) + d[".tag"] = .str("shared_note_opened") + return .dictionary(d) + case .shmodelGroupShare(let arg): + var d = Serialization.getFields(TeamLog.ShmodelGroupShareTypeSerializer().serialize(arg)) + d[".tag"] = .str("shmodel_group_share") + return .dictionary(d) + case .showcaseAccessGranted(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseAccessGrantedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_access_granted") + return .dictionary(d) + case .showcaseAddMember(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseAddMemberTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_add_member") + return .dictionary(d) + case .showcaseArchived(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseArchivedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_archived") + return .dictionary(d) + case .showcaseCreated(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseCreatedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_created") + return .dictionary(d) + case .showcaseDeleteComment(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseDeleteCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_delete_comment") + return .dictionary(d) + case .showcaseEdited(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseEditedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_edited") + return .dictionary(d) + case .showcaseEditComment(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseEditCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_edit_comment") + return .dictionary(d) + case .showcaseFileAdded(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseFileAddedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_file_added") + return .dictionary(d) + case .showcaseFileDownload(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseFileDownloadTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_file_download") + return .dictionary(d) + case .showcaseFileRemoved(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseFileRemovedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_file_removed") + return .dictionary(d) + case .showcaseFileView(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseFileViewTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_file_view") + return .dictionary(d) + case .showcasePermanentlyDeleted(let arg): + var d = Serialization.getFields(TeamLog.ShowcasePermanentlyDeletedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_permanently_deleted") + return .dictionary(d) + case .showcasePostComment(let arg): + var d = Serialization.getFields(TeamLog.ShowcasePostCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_post_comment") + return .dictionary(d) + case .showcaseRemoveMember(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseRemoveMemberTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_remove_member") + return .dictionary(d) + case .showcaseRenamed(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseRenamedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_renamed") + return .dictionary(d) + case .showcaseRequestAccess(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseRequestAccessTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_request_access") + return .dictionary(d) + case .showcaseResolveComment(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseResolveCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_resolve_comment") + return .dictionary(d) + case .showcaseRestored(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseRestoredTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_restored") + return .dictionary(d) + case .showcaseTrashed(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseTrashedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_trashed") + return .dictionary(d) + case .showcaseTrashedDeprecated(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseTrashedDeprecatedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_trashed_deprecated") + return .dictionary(d) + case .showcaseUnresolveComment(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseUnresolveCommentTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_unresolve_comment") + return .dictionary(d) + case .showcaseUntrashed(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseUntrashedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_untrashed") + return .dictionary(d) + case .showcaseUntrashedDeprecated(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseUntrashedDeprecatedTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_untrashed_deprecated") + return .dictionary(d) + case .showcaseView(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseViewTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_view") + return .dictionary(d) + case .ssoAddCert(let arg): + var d = Serialization.getFields(TeamLog.SsoAddCertTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_add_cert") + return .dictionary(d) + case .ssoAddLoginUrl(let arg): + var d = Serialization.getFields(TeamLog.SsoAddLoginUrlTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_add_login_url") + return .dictionary(d) + case .ssoAddLogoutUrl(let arg): + var d = Serialization.getFields(TeamLog.SsoAddLogoutUrlTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_add_logout_url") + return .dictionary(d) + case .ssoChangeCert(let arg): + var d = Serialization.getFields(TeamLog.SsoChangeCertTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_cert") + return .dictionary(d) + case .ssoChangeLoginUrl(let arg): + var d = Serialization.getFields(TeamLog.SsoChangeLoginUrlTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_login_url") + return .dictionary(d) + case .ssoChangeLogoutUrl(let arg): + var d = Serialization.getFields(TeamLog.SsoChangeLogoutUrlTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_logout_url") + return .dictionary(d) + case .ssoChangeSamlIdentityMode(let arg): + var d = Serialization.getFields(TeamLog.SsoChangeSamlIdentityModeTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_saml_identity_mode") + return .dictionary(d) + case .ssoRemoveCert(let arg): + var d = Serialization.getFields(TeamLog.SsoRemoveCertTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_remove_cert") + return .dictionary(d) + case .ssoRemoveLoginUrl(let arg): + var d = Serialization.getFields(TeamLog.SsoRemoveLoginUrlTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_remove_login_url") + return .dictionary(d) + case .ssoRemoveLogoutUrl(let arg): + var d = Serialization.getFields(TeamLog.SsoRemoveLogoutUrlTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_remove_logout_url") + return .dictionary(d) + case .teamFolderChangeStatus(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderChangeStatusTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_change_status") + return .dictionary(d) + case .teamFolderCreate(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderCreateTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_create") + return .dictionary(d) + case .teamFolderDowngrade(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderDowngradeTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_downgrade") + return .dictionary(d) + case .teamFolderPermanentlyDelete(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderPermanentlyDeleteTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_permanently_delete") + return .dictionary(d) + case .teamFolderRename(let arg): + var d = Serialization.getFields(TeamLog.TeamFolderRenameTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_folder_rename") + return .dictionary(d) + case .teamSelectiveSyncSettingsChanged(let arg): + var d = Serialization.getFields(TeamLog.TeamSelectiveSyncSettingsChangedTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_selective_sync_settings_changed") + return .dictionary(d) + case .accountCaptureChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.AccountCaptureChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("account_capture_change_policy") + return .dictionary(d) + case .allowDownloadDisabled(let arg): + var d = Serialization.getFields(TeamLog.AllowDownloadDisabledTypeSerializer().serialize(arg)) + d[".tag"] = .str("allow_download_disabled") + return .dictionary(d) + case .allowDownloadEnabled(let arg): + var d = Serialization.getFields(TeamLog.AllowDownloadEnabledTypeSerializer().serialize(arg)) + d[".tag"] = .str("allow_download_enabled") + return .dictionary(d) + case .cameraUploadsPolicyChanged(let arg): + var d = Serialization.getFields(TeamLog.CameraUploadsPolicyChangedTypeSerializer().serialize(arg)) + d[".tag"] = .str("camera_uploads_policy_changed") + return .dictionary(d) + case .dataPlacementRestrictionChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.DataPlacementRestrictionChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("data_placement_restriction_change_policy") + return .dictionary(d) + case .dataPlacementRestrictionSatisfyPolicy(let arg): + var d = Serialization.getFields(TeamLog.DataPlacementRestrictionSatisfyPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("data_placement_restriction_satisfy_policy") + return .dictionary(d) + case .deviceApprovalsChangeDesktopPolicy(let arg): + var d = Serialization.getFields(TeamLog.DeviceApprovalsChangeDesktopPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_approvals_change_desktop_policy") + return .dictionary(d) + case .deviceApprovalsChangeMobilePolicy(let arg): + var d = Serialization.getFields(TeamLog.DeviceApprovalsChangeMobilePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_approvals_change_mobile_policy") + return .dictionary(d) + case .deviceApprovalsChangeOverageAction(let arg): + var d = Serialization.getFields(TeamLog.DeviceApprovalsChangeOverageActionTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_approvals_change_overage_action") + return .dictionary(d) + case .deviceApprovalsChangeUnlinkAction(let arg): + var d = Serialization.getFields(TeamLog.DeviceApprovalsChangeUnlinkActionTypeSerializer().serialize(arg)) + d[".tag"] = .str("device_approvals_change_unlink_action") + return .dictionary(d) + case .directoryRestrictionsAddMembers(let arg): + var d = Serialization.getFields(TeamLog.DirectoryRestrictionsAddMembersTypeSerializer().serialize(arg)) + d[".tag"] = .str("directory_restrictions_add_members") + return .dictionary(d) + case .directoryRestrictionsRemoveMembers(let arg): + var d = Serialization.getFields(TeamLog.DirectoryRestrictionsRemoveMembersTypeSerializer().serialize(arg)) + d[".tag"] = .str("directory_restrictions_remove_members") + return .dictionary(d) + case .emmAddException(let arg): + var d = Serialization.getFields(TeamLog.EmmAddExceptionTypeSerializer().serialize(arg)) + d[".tag"] = .str("emm_add_exception") + return .dictionary(d) + case .emmChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.EmmChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("emm_change_policy") + return .dictionary(d) + case .emmRemoveException(let arg): + var d = Serialization.getFields(TeamLog.EmmRemoveExceptionTypeSerializer().serialize(arg)) + d[".tag"] = .str("emm_remove_exception") + return .dictionary(d) + case .extendedVersionHistoryChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.ExtendedVersionHistoryChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("extended_version_history_change_policy") + return .dictionary(d) + case .fileCommentsChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.FileCommentsChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_comments_change_policy") + return .dictionary(d) + case .fileRequestsChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.FileRequestsChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_requests_change_policy") + return .dictionary(d) + case .fileRequestsEmailsEnabled(let arg): + var d = Serialization.getFields(TeamLog.FileRequestsEmailsEnabledTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_requests_emails_enabled") + return .dictionary(d) + case .fileRequestsEmailsRestrictedToTeamOnly(let arg): + var d = Serialization.getFields(TeamLog.FileRequestsEmailsRestrictedToTeamOnlyTypeSerializer().serialize(arg)) + d[".tag"] = .str("file_requests_emails_restricted_to_team_only") + return .dictionary(d) + case .googleSsoChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.GoogleSsoChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("google_sso_change_policy") + return .dictionary(d) + case .groupUserManagementChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.GroupUserManagementChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("group_user_management_change_policy") + return .dictionary(d) + case .memberRequestsChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.MemberRequestsChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_requests_change_policy") + return .dictionary(d) + case .memberSpaceLimitsAddException(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsAddExceptionTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_add_exception") + return .dictionary(d) + case .memberSpaceLimitsChangeCapsTypePolicy(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsChangeCapsTypePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_change_caps_type_policy") + return .dictionary(d) + case .memberSpaceLimitsChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_change_policy") + return .dictionary(d) + case .memberSpaceLimitsRemoveException(let arg): + var d = Serialization.getFields(TeamLog.MemberSpaceLimitsRemoveExceptionTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_space_limits_remove_exception") + return .dictionary(d) + case .memberSuggestionsChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.MemberSuggestionsChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("member_suggestions_change_policy") + return .dictionary(d) + case .microsoftOfficeAddinChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.MicrosoftOfficeAddinChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("microsoft_office_addin_change_policy") + return .dictionary(d) + case .networkControlChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.NetworkControlChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("network_control_change_policy") + return .dictionary(d) + case .paperChangeDeploymentPolicy(let arg): + var d = Serialization.getFields(TeamLog.PaperChangeDeploymentPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_change_deployment_policy") + return .dictionary(d) + case .paperChangeMemberLinkPolicy(let arg): + var d = Serialization.getFields(TeamLog.PaperChangeMemberLinkPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_change_member_link_policy") + return .dictionary(d) + case .paperChangeMemberPolicy(let arg): + var d = Serialization.getFields(TeamLog.PaperChangeMemberPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_change_member_policy") + return .dictionary(d) + case .paperChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.PaperChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_change_policy") + return .dictionary(d) + case .paperEnabledUsersGroupAddition(let arg): + var d = Serialization.getFields(TeamLog.PaperEnabledUsersGroupAdditionTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_enabled_users_group_addition") + return .dictionary(d) + case .paperEnabledUsersGroupRemoval(let arg): + var d = Serialization.getFields(TeamLog.PaperEnabledUsersGroupRemovalTypeSerializer().serialize(arg)) + d[".tag"] = .str("paper_enabled_users_group_removal") + return .dictionary(d) + case .permanentDeleteChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.PermanentDeleteChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("permanent_delete_change_policy") + return .dictionary(d) + case .sharingChangeFolderJoinPolicy(let arg): + var d = Serialization.getFields(TeamLog.SharingChangeFolderJoinPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("sharing_change_folder_join_policy") + return .dictionary(d) + case .sharingChangeLinkPolicy(let arg): + var d = Serialization.getFields(TeamLog.SharingChangeLinkPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("sharing_change_link_policy") + return .dictionary(d) + case .sharingChangeMemberPolicy(let arg): + var d = Serialization.getFields(TeamLog.SharingChangeMemberPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("sharing_change_member_policy") + return .dictionary(d) + case .showcaseChangeDownloadPolicy(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseChangeDownloadPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_change_download_policy") + return .dictionary(d) + case .showcaseChangeEnabledPolicy(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseChangeEnabledPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_change_enabled_policy") + return .dictionary(d) + case .showcaseChangeExternalSharingPolicy(let arg): + var d = Serialization.getFields(TeamLog.ShowcaseChangeExternalSharingPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("showcase_change_external_sharing_policy") + return .dictionary(d) + case .smartSyncChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.SmartSyncChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("smart_sync_change_policy") + return .dictionary(d) + case .smartSyncNotOptOut(let arg): + var d = Serialization.getFields(TeamLog.SmartSyncNotOptOutTypeSerializer().serialize(arg)) + d[".tag"] = .str("smart_sync_not_opt_out") + return .dictionary(d) + case .smartSyncOptOut(let arg): + var d = Serialization.getFields(TeamLog.SmartSyncOptOutTypeSerializer().serialize(arg)) + d[".tag"] = .str("smart_sync_opt_out") + return .dictionary(d) + case .ssoChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.SsoChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("sso_change_policy") + return .dictionary(d) + case .teamSelectiveSyncPolicyChanged(let arg): + var d = Serialization.getFields(TeamLog.TeamSelectiveSyncPolicyChangedTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_selective_sync_policy_changed") + return .dictionary(d) + case .tfaChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.TfaChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("tfa_change_policy") + return .dictionary(d) + case .twoAccountChangePolicy(let arg): + var d = Serialization.getFields(TeamLog.TwoAccountChangePolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("two_account_change_policy") + return .dictionary(d) + case .viewerInfoPolicyChanged(let arg): + var d = Serialization.getFields(TeamLog.ViewerInfoPolicyChangedTypeSerializer().serialize(arg)) + d[".tag"] = .str("viewer_info_policy_changed") + return .dictionary(d) + case .webSessionsChangeFixedLengthPolicy(let arg): + var d = Serialization.getFields(TeamLog.WebSessionsChangeFixedLengthPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("web_sessions_change_fixed_length_policy") + return .dictionary(d) + case .webSessionsChangeIdleLengthPolicy(let arg): + var d = Serialization.getFields(TeamLog.WebSessionsChangeIdleLengthPolicyTypeSerializer().serialize(arg)) + d[".tag"] = .str("web_sessions_change_idle_length_policy") + return .dictionary(d) + case .teamMergeFrom(let arg): + var d = Serialization.getFields(TeamLog.TeamMergeFromTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_merge_from") + return .dictionary(d) + case .teamMergeTo(let arg): + var d = Serialization.getFields(TeamLog.TeamMergeToTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_merge_to") + return .dictionary(d) + case .teamProfileAddLogo(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileAddLogoTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_add_logo") + return .dictionary(d) + case .teamProfileChangeDefaultLanguage(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileChangeDefaultLanguageTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_change_default_language") + return .dictionary(d) + case .teamProfileChangeLogo(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileChangeLogoTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_change_logo") + return .dictionary(d) + case .teamProfileChangeName(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileChangeNameTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_change_name") + return .dictionary(d) + case .teamProfileRemoveLogo(let arg): + var d = Serialization.getFields(TeamLog.TeamProfileRemoveLogoTypeSerializer().serialize(arg)) + d[".tag"] = .str("team_profile_remove_logo") + return .dictionary(d) + case .tfaAddBackupPhone(let arg): + var d = Serialization.getFields(TeamLog.TfaAddBackupPhoneTypeSerializer().serialize(arg)) + d[".tag"] = .str("tfa_add_backup_phone") + return .dictionary(d) + case .tfaAddSecurityKey(let arg): + var d = Serialization.getFields(TeamLog.TfaAddSecurityKeyTypeSerializer().serialize(arg)) + d[".tag"] = .str("tfa_add_security_key") + return .dictionary(d) + case .tfaChangeBackupPhone(let arg): + var d = Serialization.getFields(TeamLog.TfaChangeBackupPhoneTypeSerializer().serialize(arg)) + d[".tag"] = .str("tfa_change_backup_phone") + return .dictionary(d) + case .tfaChangeStatus(let arg): + var d = Serialization.getFields(TeamLog.TfaChangeStatusTypeSerializer().serialize(arg)) + d[".tag"] = .str("tfa_change_status") + return .dictionary(d) + case .tfaRemoveBackupPhone(let arg): + var d = Serialization.getFields(TeamLog.TfaRemoveBackupPhoneTypeSerializer().serialize(arg)) + d[".tag"] = .str("tfa_remove_backup_phone") + return .dictionary(d) + case .tfaRemoveSecurityKey(let arg): + var d = Serialization.getFields(TeamLog.TfaRemoveSecurityKeyTypeSerializer().serialize(arg)) + d[".tag"] = .str("tfa_remove_security_key") + return .dictionary(d) + case .tfaReset(let arg): + var d = Serialization.getFields(TeamLog.TfaResetTypeSerializer().serialize(arg)) + d[".tag"] = .str("tfa_reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> EventType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "app_link_team": + let v = TeamLog.AppLinkTeamTypeSerializer().deserialize(json) + return EventType.appLinkTeam(v) + case "app_link_user": + let v = TeamLog.AppLinkUserTypeSerializer().deserialize(json) + return EventType.appLinkUser(v) + case "app_unlink_team": + let v = TeamLog.AppUnlinkTeamTypeSerializer().deserialize(json) + return EventType.appUnlinkTeam(v) + case "app_unlink_user": + let v = TeamLog.AppUnlinkUserTypeSerializer().deserialize(json) + return EventType.appUnlinkUser(v) + case "file_add_comment": + let v = TeamLog.FileAddCommentTypeSerializer().deserialize(json) + return EventType.fileAddComment(v) + case "file_change_comment_subscription": + let v = TeamLog.FileChangeCommentSubscriptionTypeSerializer().deserialize(json) + return EventType.fileChangeCommentSubscription(v) + case "file_delete_comment": + let v = TeamLog.FileDeleteCommentTypeSerializer().deserialize(json) + return EventType.fileDeleteComment(v) + case "file_edit_comment": + let v = TeamLog.FileEditCommentTypeSerializer().deserialize(json) + return EventType.fileEditComment(v) + case "file_like_comment": + let v = TeamLog.FileLikeCommentTypeSerializer().deserialize(json) + return EventType.fileLikeComment(v) + case "file_resolve_comment": + let v = TeamLog.FileResolveCommentTypeSerializer().deserialize(json) + return EventType.fileResolveComment(v) + case "file_unlike_comment": + let v = TeamLog.FileUnlikeCommentTypeSerializer().deserialize(json) + return EventType.fileUnlikeComment(v) + case "file_unresolve_comment": + let v = TeamLog.FileUnresolveCommentTypeSerializer().deserialize(json) + return EventType.fileUnresolveComment(v) + case "device_change_ip_desktop": + let v = TeamLog.DeviceChangeIpDesktopTypeSerializer().deserialize(json) + return EventType.deviceChangeIpDesktop(v) + case "device_change_ip_mobile": + let v = TeamLog.DeviceChangeIpMobileTypeSerializer().deserialize(json) + return EventType.deviceChangeIpMobile(v) + case "device_change_ip_web": + let v = TeamLog.DeviceChangeIpWebTypeSerializer().deserialize(json) + return EventType.deviceChangeIpWeb(v) + case "device_delete_on_unlink_fail": + let v = TeamLog.DeviceDeleteOnUnlinkFailTypeSerializer().deserialize(json) + return EventType.deviceDeleteOnUnlinkFail(v) + case "device_delete_on_unlink_success": + let v = TeamLog.DeviceDeleteOnUnlinkSuccessTypeSerializer().deserialize(json) + return EventType.deviceDeleteOnUnlinkSuccess(v) + case "device_link_fail": + let v = TeamLog.DeviceLinkFailTypeSerializer().deserialize(json) + return EventType.deviceLinkFail(v) + case "device_link_success": + let v = TeamLog.DeviceLinkSuccessTypeSerializer().deserialize(json) + return EventType.deviceLinkSuccess(v) + case "device_management_disabled": + let v = TeamLog.DeviceManagementDisabledTypeSerializer().deserialize(json) + return EventType.deviceManagementDisabled(v) + case "device_management_enabled": + let v = TeamLog.DeviceManagementEnabledTypeSerializer().deserialize(json) + return EventType.deviceManagementEnabled(v) + case "device_unlink": + let v = TeamLog.DeviceUnlinkTypeSerializer().deserialize(json) + return EventType.deviceUnlink(v) + case "emm_refresh_auth_token": + let v = TeamLog.EmmRefreshAuthTokenTypeSerializer().deserialize(json) + return EventType.emmRefreshAuthToken(v) + case "account_capture_change_availability": + let v = TeamLog.AccountCaptureChangeAvailabilityTypeSerializer().deserialize(json) + return EventType.accountCaptureChangeAvailability(v) + case "account_capture_migrate_account": + let v = TeamLog.AccountCaptureMigrateAccountTypeSerializer().deserialize(json) + return EventType.accountCaptureMigrateAccount(v) + case "account_capture_notification_emails_sent": + let v = TeamLog.AccountCaptureNotificationEmailsSentTypeSerializer().deserialize(json) + return EventType.accountCaptureNotificationEmailsSent(v) + case "account_capture_relinquish_account": + let v = TeamLog.AccountCaptureRelinquishAccountTypeSerializer().deserialize(json) + return EventType.accountCaptureRelinquishAccount(v) + case "disabled_domain_invites": + let v = TeamLog.DisabledDomainInvitesTypeSerializer().deserialize(json) + return EventType.disabledDomainInvites(v) + case "domain_invites_approve_request_to_join_team": + let v = TeamLog.DomainInvitesApproveRequestToJoinTeamTypeSerializer().deserialize(json) + return EventType.domainInvitesApproveRequestToJoinTeam(v) + case "domain_invites_decline_request_to_join_team": + let v = TeamLog.DomainInvitesDeclineRequestToJoinTeamTypeSerializer().deserialize(json) + return EventType.domainInvitesDeclineRequestToJoinTeam(v) + case "domain_invites_email_existing_users": + let v = TeamLog.DomainInvitesEmailExistingUsersTypeSerializer().deserialize(json) + return EventType.domainInvitesEmailExistingUsers(v) + case "domain_invites_request_to_join_team": + let v = TeamLog.DomainInvitesRequestToJoinTeamTypeSerializer().deserialize(json) + return EventType.domainInvitesRequestToJoinTeam(v) + case "domain_invites_set_invite_new_user_pref_to_no": + let v = TeamLog.DomainInvitesSetInviteNewUserPrefToNoTypeSerializer().deserialize(json) + return EventType.domainInvitesSetInviteNewUserPrefToNo(v) + case "domain_invites_set_invite_new_user_pref_to_yes": + let v = TeamLog.DomainInvitesSetInviteNewUserPrefToYesTypeSerializer().deserialize(json) + return EventType.domainInvitesSetInviteNewUserPrefToYes(v) + case "domain_verification_add_domain_fail": + let v = TeamLog.DomainVerificationAddDomainFailTypeSerializer().deserialize(json) + return EventType.domainVerificationAddDomainFail(v) + case "domain_verification_add_domain_success": + let v = TeamLog.DomainVerificationAddDomainSuccessTypeSerializer().deserialize(json) + return EventType.domainVerificationAddDomainSuccess(v) + case "domain_verification_remove_domain": + let v = TeamLog.DomainVerificationRemoveDomainTypeSerializer().deserialize(json) + return EventType.domainVerificationRemoveDomain(v) + case "enabled_domain_invites": + let v = TeamLog.EnabledDomainInvitesTypeSerializer().deserialize(json) + return EventType.enabledDomainInvites(v) + case "create_folder": + let v = TeamLog.CreateFolderTypeSerializer().deserialize(json) + return EventType.createFolder(v) + case "file_add": + let v = TeamLog.FileAddTypeSerializer().deserialize(json) + return EventType.fileAdd(v) + case "file_copy": + let v = TeamLog.FileCopyTypeSerializer().deserialize(json) + return EventType.fileCopy(v) + case "file_delete": + let v = TeamLog.FileDeleteTypeSerializer().deserialize(json) + return EventType.fileDelete(v) + case "file_download": + let v = TeamLog.FileDownloadTypeSerializer().deserialize(json) + return EventType.fileDownload(v) + case "file_edit": + let v = TeamLog.FileEditTypeSerializer().deserialize(json) + return EventType.fileEdit(v) + case "file_get_copy_reference": + let v = TeamLog.FileGetCopyReferenceTypeSerializer().deserialize(json) + return EventType.fileGetCopyReference(v) + case "file_move": + let v = TeamLog.FileMoveTypeSerializer().deserialize(json) + return EventType.fileMove(v) + case "file_permanently_delete": + let v = TeamLog.FilePermanentlyDeleteTypeSerializer().deserialize(json) + return EventType.filePermanentlyDelete(v) + case "file_preview": + let v = TeamLog.FilePreviewTypeSerializer().deserialize(json) + return EventType.filePreview(v) + case "file_rename": + let v = TeamLog.FileRenameTypeSerializer().deserialize(json) + return EventType.fileRename(v) + case "file_restore": + let v = TeamLog.FileRestoreTypeSerializer().deserialize(json) + return EventType.fileRestore(v) + case "file_revert": + let v = TeamLog.FileRevertTypeSerializer().deserialize(json) + return EventType.fileRevert(v) + case "file_rollback_changes": + let v = TeamLog.FileRollbackChangesTypeSerializer().deserialize(json) + return EventType.fileRollbackChanges(v) + case "file_save_copy_reference": + let v = TeamLog.FileSaveCopyReferenceTypeSerializer().deserialize(json) + return EventType.fileSaveCopyReference(v) + case "file_request_change": + let v = TeamLog.FileRequestChangeTypeSerializer().deserialize(json) + return EventType.fileRequestChange(v) + case "file_request_close": + let v = TeamLog.FileRequestCloseTypeSerializer().deserialize(json) + return EventType.fileRequestClose(v) + case "file_request_create": + let v = TeamLog.FileRequestCreateTypeSerializer().deserialize(json) + return EventType.fileRequestCreate(v) + case "file_request_receive_file": + let v = TeamLog.FileRequestReceiveFileTypeSerializer().deserialize(json) + return EventType.fileRequestReceiveFile(v) + case "group_add_external_id": + let v = TeamLog.GroupAddExternalIdTypeSerializer().deserialize(json) + return EventType.groupAddExternalId(v) + case "group_add_member": + let v = TeamLog.GroupAddMemberTypeSerializer().deserialize(json) + return EventType.groupAddMember(v) + case "group_change_external_id": + let v = TeamLog.GroupChangeExternalIdTypeSerializer().deserialize(json) + return EventType.groupChangeExternalId(v) + case "group_change_management_type": + let v = TeamLog.GroupChangeManagementTypeTypeSerializer().deserialize(json) + return EventType.groupChangeManagementType(v) + case "group_change_member_role": + let v = TeamLog.GroupChangeMemberRoleTypeSerializer().deserialize(json) + return EventType.groupChangeMemberRole(v) + case "group_create": + let v = TeamLog.GroupCreateTypeSerializer().deserialize(json) + return EventType.groupCreate(v) + case "group_delete": + let v = TeamLog.GroupDeleteTypeSerializer().deserialize(json) + return EventType.groupDelete(v) + case "group_description_updated": + let v = TeamLog.GroupDescriptionUpdatedTypeSerializer().deserialize(json) + return EventType.groupDescriptionUpdated(v) + case "group_join_policy_updated": + let v = TeamLog.GroupJoinPolicyUpdatedTypeSerializer().deserialize(json) + return EventType.groupJoinPolicyUpdated(v) + case "group_moved": + let v = TeamLog.GroupMovedTypeSerializer().deserialize(json) + return EventType.groupMoved(v) + case "group_remove_external_id": + let v = TeamLog.GroupRemoveExternalIdTypeSerializer().deserialize(json) + return EventType.groupRemoveExternalId(v) + case "group_remove_member": + let v = TeamLog.GroupRemoveMemberTypeSerializer().deserialize(json) + return EventType.groupRemoveMember(v) + case "group_rename": + let v = TeamLog.GroupRenameTypeSerializer().deserialize(json) + return EventType.groupRename(v) + case "emm_error": + let v = TeamLog.EmmErrorTypeSerializer().deserialize(json) + return EventType.emmError(v) + case "login_fail": + let v = TeamLog.LoginFailTypeSerializer().deserialize(json) + return EventType.loginFail(v) + case "login_success": + let v = TeamLog.LoginSuccessTypeSerializer().deserialize(json) + return EventType.loginSuccess(v) + case "logout": + let v = TeamLog.LogoutTypeSerializer().deserialize(json) + return EventType.logout(v) + case "reseller_support_session_end": + let v = TeamLog.ResellerSupportSessionEndTypeSerializer().deserialize(json) + return EventType.resellerSupportSessionEnd(v) + case "reseller_support_session_start": + let v = TeamLog.ResellerSupportSessionStartTypeSerializer().deserialize(json) + return EventType.resellerSupportSessionStart(v) + case "sign_in_as_session_end": + let v = TeamLog.SignInAsSessionEndTypeSerializer().deserialize(json) + return EventType.signInAsSessionEnd(v) + case "sign_in_as_session_start": + let v = TeamLog.SignInAsSessionStartTypeSerializer().deserialize(json) + return EventType.signInAsSessionStart(v) + case "sso_error": + let v = TeamLog.SsoErrorTypeSerializer().deserialize(json) + return EventType.ssoError(v) + case "member_add_name": + let v = TeamLog.MemberAddNameTypeSerializer().deserialize(json) + return EventType.memberAddName(v) + case "member_change_admin_role": + let v = TeamLog.MemberChangeAdminRoleTypeSerializer().deserialize(json) + return EventType.memberChangeAdminRole(v) + case "member_change_email": + let v = TeamLog.MemberChangeEmailTypeSerializer().deserialize(json) + return EventType.memberChangeEmail(v) + case "member_change_membership_type": + let v = TeamLog.MemberChangeMembershipTypeTypeSerializer().deserialize(json) + return EventType.memberChangeMembershipType(v) + case "member_change_name": + let v = TeamLog.MemberChangeNameTypeSerializer().deserialize(json) + return EventType.memberChangeName(v) + case "member_change_status": + let v = TeamLog.MemberChangeStatusTypeSerializer().deserialize(json) + return EventType.memberChangeStatus(v) + case "member_delete_manual_contacts": + let v = TeamLog.MemberDeleteManualContactsTypeSerializer().deserialize(json) + return EventType.memberDeleteManualContacts(v) + case "member_permanently_delete_account_contents": + let v = TeamLog.MemberPermanentlyDeleteAccountContentsTypeSerializer().deserialize(json) + return EventType.memberPermanentlyDeleteAccountContents(v) + case "member_space_limits_add_custom_quota": + let v = TeamLog.MemberSpaceLimitsAddCustomQuotaTypeSerializer().deserialize(json) + return EventType.memberSpaceLimitsAddCustomQuota(v) + case "member_space_limits_change_custom_quota": + let v = TeamLog.MemberSpaceLimitsChangeCustomQuotaTypeSerializer().deserialize(json) + return EventType.memberSpaceLimitsChangeCustomQuota(v) + case "member_space_limits_change_status": + let v = TeamLog.MemberSpaceLimitsChangeStatusTypeSerializer().deserialize(json) + return EventType.memberSpaceLimitsChangeStatus(v) + case "member_space_limits_remove_custom_quota": + let v = TeamLog.MemberSpaceLimitsRemoveCustomQuotaTypeSerializer().deserialize(json) + return EventType.memberSpaceLimitsRemoveCustomQuota(v) + case "member_suggest": + let v = TeamLog.MemberSuggestTypeSerializer().deserialize(json) + return EventType.memberSuggest(v) + case "member_transfer_account_contents": + let v = TeamLog.MemberTransferAccountContentsTypeSerializer().deserialize(json) + return EventType.memberTransferAccountContents(v) + case "secondary_mails_policy_changed": + let v = TeamLog.SecondaryMailsPolicyChangedTypeSerializer().deserialize(json) + return EventType.secondaryMailsPolicyChanged(v) + case "paper_content_add_member": + let v = TeamLog.PaperContentAddMemberTypeSerializer().deserialize(json) + return EventType.paperContentAddMember(v) + case "paper_content_add_to_folder": + let v = TeamLog.PaperContentAddToFolderTypeSerializer().deserialize(json) + return EventType.paperContentAddToFolder(v) + case "paper_content_archive": + let v = TeamLog.PaperContentArchiveTypeSerializer().deserialize(json) + return EventType.paperContentArchive(v) + case "paper_content_create": + let v = TeamLog.PaperContentCreateTypeSerializer().deserialize(json) + return EventType.paperContentCreate(v) + case "paper_content_permanently_delete": + let v = TeamLog.PaperContentPermanentlyDeleteTypeSerializer().deserialize(json) + return EventType.paperContentPermanentlyDelete(v) + case "paper_content_remove_from_folder": + let v = TeamLog.PaperContentRemoveFromFolderTypeSerializer().deserialize(json) + return EventType.paperContentRemoveFromFolder(v) + case "paper_content_remove_member": + let v = TeamLog.PaperContentRemoveMemberTypeSerializer().deserialize(json) + return EventType.paperContentRemoveMember(v) + case "paper_content_rename": + let v = TeamLog.PaperContentRenameTypeSerializer().deserialize(json) + return EventType.paperContentRename(v) + case "paper_content_restore": + let v = TeamLog.PaperContentRestoreTypeSerializer().deserialize(json) + return EventType.paperContentRestore(v) + case "paper_doc_add_comment": + let v = TeamLog.PaperDocAddCommentTypeSerializer().deserialize(json) + return EventType.paperDocAddComment(v) + case "paper_doc_change_member_role": + let v = TeamLog.PaperDocChangeMemberRoleTypeSerializer().deserialize(json) + return EventType.paperDocChangeMemberRole(v) + case "paper_doc_change_sharing_policy": + let v = TeamLog.PaperDocChangeSharingPolicyTypeSerializer().deserialize(json) + return EventType.paperDocChangeSharingPolicy(v) + case "paper_doc_change_subscription": + let v = TeamLog.PaperDocChangeSubscriptionTypeSerializer().deserialize(json) + return EventType.paperDocChangeSubscription(v) + case "paper_doc_deleted": + let v = TeamLog.PaperDocDeletedTypeSerializer().deserialize(json) + return EventType.paperDocDeleted(v) + case "paper_doc_delete_comment": + let v = TeamLog.PaperDocDeleteCommentTypeSerializer().deserialize(json) + return EventType.paperDocDeleteComment(v) + case "paper_doc_download": + let v = TeamLog.PaperDocDownloadTypeSerializer().deserialize(json) + return EventType.paperDocDownload(v) + case "paper_doc_edit": + let v = TeamLog.PaperDocEditTypeSerializer().deserialize(json) + return EventType.paperDocEdit(v) + case "paper_doc_edit_comment": + let v = TeamLog.PaperDocEditCommentTypeSerializer().deserialize(json) + return EventType.paperDocEditComment(v) + case "paper_doc_followed": + let v = TeamLog.PaperDocFollowedTypeSerializer().deserialize(json) + return EventType.paperDocFollowed(v) + case "paper_doc_mention": + let v = TeamLog.PaperDocMentionTypeSerializer().deserialize(json) + return EventType.paperDocMention(v) + case "paper_doc_ownership_changed": + let v = TeamLog.PaperDocOwnershipChangedTypeSerializer().deserialize(json) + return EventType.paperDocOwnershipChanged(v) + case "paper_doc_request_access": + let v = TeamLog.PaperDocRequestAccessTypeSerializer().deserialize(json) + return EventType.paperDocRequestAccess(v) + case "paper_doc_resolve_comment": + let v = TeamLog.PaperDocResolveCommentTypeSerializer().deserialize(json) + return EventType.paperDocResolveComment(v) + case "paper_doc_revert": + let v = TeamLog.PaperDocRevertTypeSerializer().deserialize(json) + return EventType.paperDocRevert(v) + case "paper_doc_slack_share": + let v = TeamLog.PaperDocSlackShareTypeSerializer().deserialize(json) + return EventType.paperDocSlackShare(v) + case "paper_doc_team_invite": + let v = TeamLog.PaperDocTeamInviteTypeSerializer().deserialize(json) + return EventType.paperDocTeamInvite(v) + case "paper_doc_trashed": + let v = TeamLog.PaperDocTrashedTypeSerializer().deserialize(json) + return EventType.paperDocTrashed(v) + case "paper_doc_unresolve_comment": + let v = TeamLog.PaperDocUnresolveCommentTypeSerializer().deserialize(json) + return EventType.paperDocUnresolveComment(v) + case "paper_doc_untrashed": + let v = TeamLog.PaperDocUntrashedTypeSerializer().deserialize(json) + return EventType.paperDocUntrashed(v) + case "paper_doc_view": + let v = TeamLog.PaperDocViewTypeSerializer().deserialize(json) + return EventType.paperDocView(v) + case "paper_external_view_allow": + let v = TeamLog.PaperExternalViewAllowTypeSerializer().deserialize(json) + return EventType.paperExternalViewAllow(v) + case "paper_external_view_default_team": + let v = TeamLog.PaperExternalViewDefaultTeamTypeSerializer().deserialize(json) + return EventType.paperExternalViewDefaultTeam(v) + case "paper_external_view_forbid": + let v = TeamLog.PaperExternalViewForbidTypeSerializer().deserialize(json) + return EventType.paperExternalViewForbid(v) + case "paper_folder_change_subscription": + let v = TeamLog.PaperFolderChangeSubscriptionTypeSerializer().deserialize(json) + return EventType.paperFolderChangeSubscription(v) + case "paper_folder_deleted": + let v = TeamLog.PaperFolderDeletedTypeSerializer().deserialize(json) + return EventType.paperFolderDeleted(v) + case "paper_folder_followed": + let v = TeamLog.PaperFolderFollowedTypeSerializer().deserialize(json) + return EventType.paperFolderFollowed(v) + case "paper_folder_team_invite": + let v = TeamLog.PaperFolderTeamInviteTypeSerializer().deserialize(json) + return EventType.paperFolderTeamInvite(v) + case "password_change": + let v = TeamLog.PasswordChangeTypeSerializer().deserialize(json) + return EventType.passwordChange(v) + case "password_reset": + let v = TeamLog.PasswordResetTypeSerializer().deserialize(json) + return EventType.passwordReset(v) + case "password_reset_all": + let v = TeamLog.PasswordResetAllTypeSerializer().deserialize(json) + return EventType.passwordResetAll(v) + case "emm_create_exceptions_report": + let v = TeamLog.EmmCreateExceptionsReportTypeSerializer().deserialize(json) + return EventType.emmCreateExceptionsReport(v) + case "emm_create_usage_report": + let v = TeamLog.EmmCreateUsageReportTypeSerializer().deserialize(json) + return EventType.emmCreateUsageReport(v) + case "export_members_report": + let v = TeamLog.ExportMembersReportTypeSerializer().deserialize(json) + return EventType.exportMembersReport(v) + case "paper_admin_export_start": + let v = TeamLog.PaperAdminExportStartTypeSerializer().deserialize(json) + return EventType.paperAdminExportStart(v) + case "smart_sync_create_admin_privilege_report": + let v = TeamLog.SmartSyncCreateAdminPrivilegeReportTypeSerializer().deserialize(json) + return EventType.smartSyncCreateAdminPrivilegeReport(v) + case "team_activity_create_report": + let v = TeamLog.TeamActivityCreateReportTypeSerializer().deserialize(json) + return EventType.teamActivityCreateReport(v) + case "collection_share": + let v = TeamLog.CollectionShareTypeSerializer().deserialize(json) + return EventType.collectionShare(v) + case "note_acl_invite_only": + let v = TeamLog.NoteAclInviteOnlyTypeSerializer().deserialize(json) + return EventType.noteAclInviteOnly(v) + case "note_acl_link": + let v = TeamLog.NoteAclLinkTypeSerializer().deserialize(json) + return EventType.noteAclLink(v) + case "note_acl_team_link": + let v = TeamLog.NoteAclTeamLinkTypeSerializer().deserialize(json) + return EventType.noteAclTeamLink(v) + case "note_shared": + let v = TeamLog.NoteSharedTypeSerializer().deserialize(json) + return EventType.noteShared(v) + case "note_share_receive": + let v = TeamLog.NoteShareReceiveTypeSerializer().deserialize(json) + return EventType.noteShareReceive(v) + case "open_note_shared": + let v = TeamLog.OpenNoteSharedTypeSerializer().deserialize(json) + return EventType.openNoteShared(v) + case "sf_add_group": + let v = TeamLog.SfAddGroupTypeSerializer().deserialize(json) + return EventType.sfAddGroup(v) + case "sf_allow_non_members_to_view_shared_links": + let v = TeamLog.SfAllowNonMembersToViewSharedLinksTypeSerializer().deserialize(json) + return EventType.sfAllowNonMembersToViewSharedLinks(v) + case "sf_external_invite_warn": + let v = TeamLog.SfExternalInviteWarnTypeSerializer().deserialize(json) + return EventType.sfExternalInviteWarn(v) + case "sf_fb_invite": + let v = TeamLog.SfFbInviteTypeSerializer().deserialize(json) + return EventType.sfFbInvite(v) + case "sf_fb_invite_change_role": + let v = TeamLog.SfFbInviteChangeRoleTypeSerializer().deserialize(json) + return EventType.sfFbInviteChangeRole(v) + case "sf_fb_uninvite": + let v = TeamLog.SfFbUninviteTypeSerializer().deserialize(json) + return EventType.sfFbUninvite(v) + case "sf_invite_group": + let v = TeamLog.SfInviteGroupTypeSerializer().deserialize(json) + return EventType.sfInviteGroup(v) + case "sf_team_grant_access": + let v = TeamLog.SfTeamGrantAccessTypeSerializer().deserialize(json) + return EventType.sfTeamGrantAccess(v) + case "sf_team_invite": + let v = TeamLog.SfTeamInviteTypeSerializer().deserialize(json) + return EventType.sfTeamInvite(v) + case "sf_team_invite_change_role": + let v = TeamLog.SfTeamInviteChangeRoleTypeSerializer().deserialize(json) + return EventType.sfTeamInviteChangeRole(v) + case "sf_team_join": + let v = TeamLog.SfTeamJoinTypeSerializer().deserialize(json) + return EventType.sfTeamJoin(v) + case "sf_team_join_from_oob_link": + let v = TeamLog.SfTeamJoinFromOobLinkTypeSerializer().deserialize(json) + return EventType.sfTeamJoinFromOobLink(v) + case "sf_team_uninvite": + let v = TeamLog.SfTeamUninviteTypeSerializer().deserialize(json) + return EventType.sfTeamUninvite(v) + case "shared_content_add_invitees": + let v = TeamLog.SharedContentAddInviteesTypeSerializer().deserialize(json) + return EventType.sharedContentAddInvitees(v) + case "shared_content_add_link_expiry": + let v = TeamLog.SharedContentAddLinkExpiryTypeSerializer().deserialize(json) + return EventType.sharedContentAddLinkExpiry(v) + case "shared_content_add_link_password": + let v = TeamLog.SharedContentAddLinkPasswordTypeSerializer().deserialize(json) + return EventType.sharedContentAddLinkPassword(v) + case "shared_content_add_member": + let v = TeamLog.SharedContentAddMemberTypeSerializer().deserialize(json) + return EventType.sharedContentAddMember(v) + case "shared_content_change_downloads_policy": + let v = TeamLog.SharedContentChangeDownloadsPolicyTypeSerializer().deserialize(json) + return EventType.sharedContentChangeDownloadsPolicy(v) + case "shared_content_change_invitee_role": + let v = TeamLog.SharedContentChangeInviteeRoleTypeSerializer().deserialize(json) + return EventType.sharedContentChangeInviteeRole(v) + case "shared_content_change_link_audience": + let v = TeamLog.SharedContentChangeLinkAudienceTypeSerializer().deserialize(json) + return EventType.sharedContentChangeLinkAudience(v) + case "shared_content_change_link_expiry": + let v = TeamLog.SharedContentChangeLinkExpiryTypeSerializer().deserialize(json) + return EventType.sharedContentChangeLinkExpiry(v) + case "shared_content_change_link_password": + let v = TeamLog.SharedContentChangeLinkPasswordTypeSerializer().deserialize(json) + return EventType.sharedContentChangeLinkPassword(v) + case "shared_content_change_member_role": + let v = TeamLog.SharedContentChangeMemberRoleTypeSerializer().deserialize(json) + return EventType.sharedContentChangeMemberRole(v) + case "shared_content_change_viewer_info_policy": + let v = TeamLog.SharedContentChangeViewerInfoPolicyTypeSerializer().deserialize(json) + return EventType.sharedContentChangeViewerInfoPolicy(v) + case "shared_content_claim_invitation": + let v = TeamLog.SharedContentClaimInvitationTypeSerializer().deserialize(json) + return EventType.sharedContentClaimInvitation(v) + case "shared_content_copy": + let v = TeamLog.SharedContentCopyTypeSerializer().deserialize(json) + return EventType.sharedContentCopy(v) + case "shared_content_download": + let v = TeamLog.SharedContentDownloadTypeSerializer().deserialize(json) + return EventType.sharedContentDownload(v) + case "shared_content_relinquish_membership": + let v = TeamLog.SharedContentRelinquishMembershipTypeSerializer().deserialize(json) + return EventType.sharedContentRelinquishMembership(v) + case "shared_content_remove_invitees": + let v = TeamLog.SharedContentRemoveInviteesTypeSerializer().deserialize(json) + return EventType.sharedContentRemoveInvitees(v) + case "shared_content_remove_link_expiry": + let v = TeamLog.SharedContentRemoveLinkExpiryTypeSerializer().deserialize(json) + return EventType.sharedContentRemoveLinkExpiry(v) + case "shared_content_remove_link_password": + let v = TeamLog.SharedContentRemoveLinkPasswordTypeSerializer().deserialize(json) + return EventType.sharedContentRemoveLinkPassword(v) + case "shared_content_remove_member": + let v = TeamLog.SharedContentRemoveMemberTypeSerializer().deserialize(json) + return EventType.sharedContentRemoveMember(v) + case "shared_content_request_access": + let v = TeamLog.SharedContentRequestAccessTypeSerializer().deserialize(json) + return EventType.sharedContentRequestAccess(v) + case "shared_content_unshare": + let v = TeamLog.SharedContentUnshareTypeSerializer().deserialize(json) + return EventType.sharedContentUnshare(v) + case "shared_content_view": + let v = TeamLog.SharedContentViewTypeSerializer().deserialize(json) + return EventType.sharedContentView(v) + case "shared_folder_change_link_policy": + let v = TeamLog.SharedFolderChangeLinkPolicyTypeSerializer().deserialize(json) + return EventType.sharedFolderChangeLinkPolicy(v) + case "shared_folder_change_members_inheritance_policy": + let v = TeamLog.SharedFolderChangeMembersInheritancePolicyTypeSerializer().deserialize(json) + return EventType.sharedFolderChangeMembersInheritancePolicy(v) + case "shared_folder_change_members_management_policy": + let v = TeamLog.SharedFolderChangeMembersManagementPolicyTypeSerializer().deserialize(json) + return EventType.sharedFolderChangeMembersManagementPolicy(v) + case "shared_folder_change_members_policy": + let v = TeamLog.SharedFolderChangeMembersPolicyTypeSerializer().deserialize(json) + return EventType.sharedFolderChangeMembersPolicy(v) + case "shared_folder_create": + let v = TeamLog.SharedFolderCreateTypeSerializer().deserialize(json) + return EventType.sharedFolderCreate(v) + case "shared_folder_decline_invitation": + let v = TeamLog.SharedFolderDeclineInvitationTypeSerializer().deserialize(json) + return EventType.sharedFolderDeclineInvitation(v) + case "shared_folder_mount": + let v = TeamLog.SharedFolderMountTypeSerializer().deserialize(json) + return EventType.sharedFolderMount(v) + case "shared_folder_nest": + let v = TeamLog.SharedFolderNestTypeSerializer().deserialize(json) + return EventType.sharedFolderNest(v) + case "shared_folder_transfer_ownership": + let v = TeamLog.SharedFolderTransferOwnershipTypeSerializer().deserialize(json) + return EventType.sharedFolderTransferOwnership(v) + case "shared_folder_unmount": + let v = TeamLog.SharedFolderUnmountTypeSerializer().deserialize(json) + return EventType.sharedFolderUnmount(v) + case "shared_link_add_expiry": + let v = TeamLog.SharedLinkAddExpiryTypeSerializer().deserialize(json) + return EventType.sharedLinkAddExpiry(v) + case "shared_link_change_expiry": + let v = TeamLog.SharedLinkChangeExpiryTypeSerializer().deserialize(json) + return EventType.sharedLinkChangeExpiry(v) + case "shared_link_change_visibility": + let v = TeamLog.SharedLinkChangeVisibilityTypeSerializer().deserialize(json) + return EventType.sharedLinkChangeVisibility(v) + case "shared_link_copy": + let v = TeamLog.SharedLinkCopyTypeSerializer().deserialize(json) + return EventType.sharedLinkCopy(v) + case "shared_link_create": + let v = TeamLog.SharedLinkCreateTypeSerializer().deserialize(json) + return EventType.sharedLinkCreate(v) + case "shared_link_disable": + let v = TeamLog.SharedLinkDisableTypeSerializer().deserialize(json) + return EventType.sharedLinkDisable(v) + case "shared_link_download": + let v = TeamLog.SharedLinkDownloadTypeSerializer().deserialize(json) + return EventType.sharedLinkDownload(v) + case "shared_link_remove_expiry": + let v = TeamLog.SharedLinkRemoveExpiryTypeSerializer().deserialize(json) + return EventType.sharedLinkRemoveExpiry(v) + case "shared_link_share": + let v = TeamLog.SharedLinkShareTypeSerializer().deserialize(json) + return EventType.sharedLinkShare(v) + case "shared_link_view": + let v = TeamLog.SharedLinkViewTypeSerializer().deserialize(json) + return EventType.sharedLinkView(v) + case "shared_note_opened": + let v = TeamLog.SharedNoteOpenedTypeSerializer().deserialize(json) + return EventType.sharedNoteOpened(v) + case "shmodel_group_share": + let v = TeamLog.ShmodelGroupShareTypeSerializer().deserialize(json) + return EventType.shmodelGroupShare(v) + case "showcase_access_granted": + let v = TeamLog.ShowcaseAccessGrantedTypeSerializer().deserialize(json) + return EventType.showcaseAccessGranted(v) + case "showcase_add_member": + let v = TeamLog.ShowcaseAddMemberTypeSerializer().deserialize(json) + return EventType.showcaseAddMember(v) + case "showcase_archived": + let v = TeamLog.ShowcaseArchivedTypeSerializer().deserialize(json) + return EventType.showcaseArchived(v) + case "showcase_created": + let v = TeamLog.ShowcaseCreatedTypeSerializer().deserialize(json) + return EventType.showcaseCreated(v) + case "showcase_delete_comment": + let v = TeamLog.ShowcaseDeleteCommentTypeSerializer().deserialize(json) + return EventType.showcaseDeleteComment(v) + case "showcase_edited": + let v = TeamLog.ShowcaseEditedTypeSerializer().deserialize(json) + return EventType.showcaseEdited(v) + case "showcase_edit_comment": + let v = TeamLog.ShowcaseEditCommentTypeSerializer().deserialize(json) + return EventType.showcaseEditComment(v) + case "showcase_file_added": + let v = TeamLog.ShowcaseFileAddedTypeSerializer().deserialize(json) + return EventType.showcaseFileAdded(v) + case "showcase_file_download": + let v = TeamLog.ShowcaseFileDownloadTypeSerializer().deserialize(json) + return EventType.showcaseFileDownload(v) + case "showcase_file_removed": + let v = TeamLog.ShowcaseFileRemovedTypeSerializer().deserialize(json) + return EventType.showcaseFileRemoved(v) + case "showcase_file_view": + let v = TeamLog.ShowcaseFileViewTypeSerializer().deserialize(json) + return EventType.showcaseFileView(v) + case "showcase_permanently_deleted": + let v = TeamLog.ShowcasePermanentlyDeletedTypeSerializer().deserialize(json) + return EventType.showcasePermanentlyDeleted(v) + case "showcase_post_comment": + let v = TeamLog.ShowcasePostCommentTypeSerializer().deserialize(json) + return EventType.showcasePostComment(v) + case "showcase_remove_member": + let v = TeamLog.ShowcaseRemoveMemberTypeSerializer().deserialize(json) + return EventType.showcaseRemoveMember(v) + case "showcase_renamed": + let v = TeamLog.ShowcaseRenamedTypeSerializer().deserialize(json) + return EventType.showcaseRenamed(v) + case "showcase_request_access": + let v = TeamLog.ShowcaseRequestAccessTypeSerializer().deserialize(json) + return EventType.showcaseRequestAccess(v) + case "showcase_resolve_comment": + let v = TeamLog.ShowcaseResolveCommentTypeSerializer().deserialize(json) + return EventType.showcaseResolveComment(v) + case "showcase_restored": + let v = TeamLog.ShowcaseRestoredTypeSerializer().deserialize(json) + return EventType.showcaseRestored(v) + case "showcase_trashed": + let v = TeamLog.ShowcaseTrashedTypeSerializer().deserialize(json) + return EventType.showcaseTrashed(v) + case "showcase_trashed_deprecated": + let v = TeamLog.ShowcaseTrashedDeprecatedTypeSerializer().deserialize(json) + return EventType.showcaseTrashedDeprecated(v) + case "showcase_unresolve_comment": + let v = TeamLog.ShowcaseUnresolveCommentTypeSerializer().deserialize(json) + return EventType.showcaseUnresolveComment(v) + case "showcase_untrashed": + let v = TeamLog.ShowcaseUntrashedTypeSerializer().deserialize(json) + return EventType.showcaseUntrashed(v) + case "showcase_untrashed_deprecated": + let v = TeamLog.ShowcaseUntrashedDeprecatedTypeSerializer().deserialize(json) + return EventType.showcaseUntrashedDeprecated(v) + case "showcase_view": + let v = TeamLog.ShowcaseViewTypeSerializer().deserialize(json) + return EventType.showcaseView(v) + case "sso_add_cert": + let v = TeamLog.SsoAddCertTypeSerializer().deserialize(json) + return EventType.ssoAddCert(v) + case "sso_add_login_url": + let v = TeamLog.SsoAddLoginUrlTypeSerializer().deserialize(json) + return EventType.ssoAddLoginUrl(v) + case "sso_add_logout_url": + let v = TeamLog.SsoAddLogoutUrlTypeSerializer().deserialize(json) + return EventType.ssoAddLogoutUrl(v) + case "sso_change_cert": + let v = TeamLog.SsoChangeCertTypeSerializer().deserialize(json) + return EventType.ssoChangeCert(v) + case "sso_change_login_url": + let v = TeamLog.SsoChangeLoginUrlTypeSerializer().deserialize(json) + return EventType.ssoChangeLoginUrl(v) + case "sso_change_logout_url": + let v = TeamLog.SsoChangeLogoutUrlTypeSerializer().deserialize(json) + return EventType.ssoChangeLogoutUrl(v) + case "sso_change_saml_identity_mode": + let v = TeamLog.SsoChangeSamlIdentityModeTypeSerializer().deserialize(json) + return EventType.ssoChangeSamlIdentityMode(v) + case "sso_remove_cert": + let v = TeamLog.SsoRemoveCertTypeSerializer().deserialize(json) + return EventType.ssoRemoveCert(v) + case "sso_remove_login_url": + let v = TeamLog.SsoRemoveLoginUrlTypeSerializer().deserialize(json) + return EventType.ssoRemoveLoginUrl(v) + case "sso_remove_logout_url": + let v = TeamLog.SsoRemoveLogoutUrlTypeSerializer().deserialize(json) + return EventType.ssoRemoveLogoutUrl(v) + case "team_folder_change_status": + let v = TeamLog.TeamFolderChangeStatusTypeSerializer().deserialize(json) + return EventType.teamFolderChangeStatus(v) + case "team_folder_create": + let v = TeamLog.TeamFolderCreateTypeSerializer().deserialize(json) + return EventType.teamFolderCreate(v) + case "team_folder_downgrade": + let v = TeamLog.TeamFolderDowngradeTypeSerializer().deserialize(json) + return EventType.teamFolderDowngrade(v) + case "team_folder_permanently_delete": + let v = TeamLog.TeamFolderPermanentlyDeleteTypeSerializer().deserialize(json) + return EventType.teamFolderPermanentlyDelete(v) + case "team_folder_rename": + let v = TeamLog.TeamFolderRenameTypeSerializer().deserialize(json) + return EventType.teamFolderRename(v) + case "team_selective_sync_settings_changed": + let v = TeamLog.TeamSelectiveSyncSettingsChangedTypeSerializer().deserialize(json) + return EventType.teamSelectiveSyncSettingsChanged(v) + case "account_capture_change_policy": + let v = TeamLog.AccountCaptureChangePolicyTypeSerializer().deserialize(json) + return EventType.accountCaptureChangePolicy(v) + case "allow_download_disabled": + let v = TeamLog.AllowDownloadDisabledTypeSerializer().deserialize(json) + return EventType.allowDownloadDisabled(v) + case "allow_download_enabled": + let v = TeamLog.AllowDownloadEnabledTypeSerializer().deserialize(json) + return EventType.allowDownloadEnabled(v) + case "camera_uploads_policy_changed": + let v = TeamLog.CameraUploadsPolicyChangedTypeSerializer().deserialize(json) + return EventType.cameraUploadsPolicyChanged(v) + case "data_placement_restriction_change_policy": + let v = TeamLog.DataPlacementRestrictionChangePolicyTypeSerializer().deserialize(json) + return EventType.dataPlacementRestrictionChangePolicy(v) + case "data_placement_restriction_satisfy_policy": + let v = TeamLog.DataPlacementRestrictionSatisfyPolicyTypeSerializer().deserialize(json) + return EventType.dataPlacementRestrictionSatisfyPolicy(v) + case "device_approvals_change_desktop_policy": + let v = TeamLog.DeviceApprovalsChangeDesktopPolicyTypeSerializer().deserialize(json) + return EventType.deviceApprovalsChangeDesktopPolicy(v) + case "device_approvals_change_mobile_policy": + let v = TeamLog.DeviceApprovalsChangeMobilePolicyTypeSerializer().deserialize(json) + return EventType.deviceApprovalsChangeMobilePolicy(v) + case "device_approvals_change_overage_action": + let v = TeamLog.DeviceApprovalsChangeOverageActionTypeSerializer().deserialize(json) + return EventType.deviceApprovalsChangeOverageAction(v) + case "device_approvals_change_unlink_action": + let v = TeamLog.DeviceApprovalsChangeUnlinkActionTypeSerializer().deserialize(json) + return EventType.deviceApprovalsChangeUnlinkAction(v) + case "directory_restrictions_add_members": + let v = TeamLog.DirectoryRestrictionsAddMembersTypeSerializer().deserialize(json) + return EventType.directoryRestrictionsAddMembers(v) + case "directory_restrictions_remove_members": + let v = TeamLog.DirectoryRestrictionsRemoveMembersTypeSerializer().deserialize(json) + return EventType.directoryRestrictionsRemoveMembers(v) + case "emm_add_exception": + let v = TeamLog.EmmAddExceptionTypeSerializer().deserialize(json) + return EventType.emmAddException(v) + case "emm_change_policy": + let v = TeamLog.EmmChangePolicyTypeSerializer().deserialize(json) + return EventType.emmChangePolicy(v) + case "emm_remove_exception": + let v = TeamLog.EmmRemoveExceptionTypeSerializer().deserialize(json) + return EventType.emmRemoveException(v) + case "extended_version_history_change_policy": + let v = TeamLog.ExtendedVersionHistoryChangePolicyTypeSerializer().deserialize(json) + return EventType.extendedVersionHistoryChangePolicy(v) + case "file_comments_change_policy": + let v = TeamLog.FileCommentsChangePolicyTypeSerializer().deserialize(json) + return EventType.fileCommentsChangePolicy(v) + case "file_requests_change_policy": + let v = TeamLog.FileRequestsChangePolicyTypeSerializer().deserialize(json) + return EventType.fileRequestsChangePolicy(v) + case "file_requests_emails_enabled": + let v = TeamLog.FileRequestsEmailsEnabledTypeSerializer().deserialize(json) + return EventType.fileRequestsEmailsEnabled(v) + case "file_requests_emails_restricted_to_team_only": + let v = TeamLog.FileRequestsEmailsRestrictedToTeamOnlyTypeSerializer().deserialize(json) + return EventType.fileRequestsEmailsRestrictedToTeamOnly(v) + case "google_sso_change_policy": + let v = TeamLog.GoogleSsoChangePolicyTypeSerializer().deserialize(json) + return EventType.googleSsoChangePolicy(v) + case "group_user_management_change_policy": + let v = TeamLog.GroupUserManagementChangePolicyTypeSerializer().deserialize(json) + return EventType.groupUserManagementChangePolicy(v) + case "member_requests_change_policy": + let v = TeamLog.MemberRequestsChangePolicyTypeSerializer().deserialize(json) + return EventType.memberRequestsChangePolicy(v) + case "member_space_limits_add_exception": + let v = TeamLog.MemberSpaceLimitsAddExceptionTypeSerializer().deserialize(json) + return EventType.memberSpaceLimitsAddException(v) + case "member_space_limits_change_caps_type_policy": + let v = TeamLog.MemberSpaceLimitsChangeCapsTypePolicyTypeSerializer().deserialize(json) + return EventType.memberSpaceLimitsChangeCapsTypePolicy(v) + case "member_space_limits_change_policy": + let v = TeamLog.MemberSpaceLimitsChangePolicyTypeSerializer().deserialize(json) + return EventType.memberSpaceLimitsChangePolicy(v) + case "member_space_limits_remove_exception": + let v = TeamLog.MemberSpaceLimitsRemoveExceptionTypeSerializer().deserialize(json) + return EventType.memberSpaceLimitsRemoveException(v) + case "member_suggestions_change_policy": + let v = TeamLog.MemberSuggestionsChangePolicyTypeSerializer().deserialize(json) + return EventType.memberSuggestionsChangePolicy(v) + case "microsoft_office_addin_change_policy": + let v = TeamLog.MicrosoftOfficeAddinChangePolicyTypeSerializer().deserialize(json) + return EventType.microsoftOfficeAddinChangePolicy(v) + case "network_control_change_policy": + let v = TeamLog.NetworkControlChangePolicyTypeSerializer().deserialize(json) + return EventType.networkControlChangePolicy(v) + case "paper_change_deployment_policy": + let v = TeamLog.PaperChangeDeploymentPolicyTypeSerializer().deserialize(json) + return EventType.paperChangeDeploymentPolicy(v) + case "paper_change_member_link_policy": + let v = TeamLog.PaperChangeMemberLinkPolicyTypeSerializer().deserialize(json) + return EventType.paperChangeMemberLinkPolicy(v) + case "paper_change_member_policy": + let v = TeamLog.PaperChangeMemberPolicyTypeSerializer().deserialize(json) + return EventType.paperChangeMemberPolicy(v) + case "paper_change_policy": + let v = TeamLog.PaperChangePolicyTypeSerializer().deserialize(json) + return EventType.paperChangePolicy(v) + case "paper_enabled_users_group_addition": + let v = TeamLog.PaperEnabledUsersGroupAdditionTypeSerializer().deserialize(json) + return EventType.paperEnabledUsersGroupAddition(v) + case "paper_enabled_users_group_removal": + let v = TeamLog.PaperEnabledUsersGroupRemovalTypeSerializer().deserialize(json) + return EventType.paperEnabledUsersGroupRemoval(v) + case "permanent_delete_change_policy": + let v = TeamLog.PermanentDeleteChangePolicyTypeSerializer().deserialize(json) + return EventType.permanentDeleteChangePolicy(v) + case "sharing_change_folder_join_policy": + let v = TeamLog.SharingChangeFolderJoinPolicyTypeSerializer().deserialize(json) + return EventType.sharingChangeFolderJoinPolicy(v) + case "sharing_change_link_policy": + let v = TeamLog.SharingChangeLinkPolicyTypeSerializer().deserialize(json) + return EventType.sharingChangeLinkPolicy(v) + case "sharing_change_member_policy": + let v = TeamLog.SharingChangeMemberPolicyTypeSerializer().deserialize(json) + return EventType.sharingChangeMemberPolicy(v) + case "showcase_change_download_policy": + let v = TeamLog.ShowcaseChangeDownloadPolicyTypeSerializer().deserialize(json) + return EventType.showcaseChangeDownloadPolicy(v) + case "showcase_change_enabled_policy": + let v = TeamLog.ShowcaseChangeEnabledPolicyTypeSerializer().deserialize(json) + return EventType.showcaseChangeEnabledPolicy(v) + case "showcase_change_external_sharing_policy": + let v = TeamLog.ShowcaseChangeExternalSharingPolicyTypeSerializer().deserialize(json) + return EventType.showcaseChangeExternalSharingPolicy(v) + case "smart_sync_change_policy": + let v = TeamLog.SmartSyncChangePolicyTypeSerializer().deserialize(json) + return EventType.smartSyncChangePolicy(v) + case "smart_sync_not_opt_out": + let v = TeamLog.SmartSyncNotOptOutTypeSerializer().deserialize(json) + return EventType.smartSyncNotOptOut(v) + case "smart_sync_opt_out": + let v = TeamLog.SmartSyncOptOutTypeSerializer().deserialize(json) + return EventType.smartSyncOptOut(v) + case "sso_change_policy": + let v = TeamLog.SsoChangePolicyTypeSerializer().deserialize(json) + return EventType.ssoChangePolicy(v) + case "team_selective_sync_policy_changed": + let v = TeamLog.TeamSelectiveSyncPolicyChangedTypeSerializer().deserialize(json) + return EventType.teamSelectiveSyncPolicyChanged(v) + case "tfa_change_policy": + let v = TeamLog.TfaChangePolicyTypeSerializer().deserialize(json) + return EventType.tfaChangePolicy(v) + case "two_account_change_policy": + let v = TeamLog.TwoAccountChangePolicyTypeSerializer().deserialize(json) + return EventType.twoAccountChangePolicy(v) + case "viewer_info_policy_changed": + let v = TeamLog.ViewerInfoPolicyChangedTypeSerializer().deserialize(json) + return EventType.viewerInfoPolicyChanged(v) + case "web_sessions_change_fixed_length_policy": + let v = TeamLog.WebSessionsChangeFixedLengthPolicyTypeSerializer().deserialize(json) + return EventType.webSessionsChangeFixedLengthPolicy(v) + case "web_sessions_change_idle_length_policy": + let v = TeamLog.WebSessionsChangeIdleLengthPolicyTypeSerializer().deserialize(json) + return EventType.webSessionsChangeIdleLengthPolicy(v) + case "team_merge_from": + let v = TeamLog.TeamMergeFromTypeSerializer().deserialize(json) + return EventType.teamMergeFrom(v) + case "team_merge_to": + let v = TeamLog.TeamMergeToTypeSerializer().deserialize(json) + return EventType.teamMergeTo(v) + case "team_profile_add_logo": + let v = TeamLog.TeamProfileAddLogoTypeSerializer().deserialize(json) + return EventType.teamProfileAddLogo(v) + case "team_profile_change_default_language": + let v = TeamLog.TeamProfileChangeDefaultLanguageTypeSerializer().deserialize(json) + return EventType.teamProfileChangeDefaultLanguage(v) + case "team_profile_change_logo": + let v = TeamLog.TeamProfileChangeLogoTypeSerializer().deserialize(json) + return EventType.teamProfileChangeLogo(v) + case "team_profile_change_name": + let v = TeamLog.TeamProfileChangeNameTypeSerializer().deserialize(json) + return EventType.teamProfileChangeName(v) + case "team_profile_remove_logo": + let v = TeamLog.TeamProfileRemoveLogoTypeSerializer().deserialize(json) + return EventType.teamProfileRemoveLogo(v) + case "tfa_add_backup_phone": + let v = TeamLog.TfaAddBackupPhoneTypeSerializer().deserialize(json) + return EventType.tfaAddBackupPhone(v) + case "tfa_add_security_key": + let v = TeamLog.TfaAddSecurityKeyTypeSerializer().deserialize(json) + return EventType.tfaAddSecurityKey(v) + case "tfa_change_backup_phone": + let v = TeamLog.TfaChangeBackupPhoneTypeSerializer().deserialize(json) + return EventType.tfaChangeBackupPhone(v) + case "tfa_change_status": + let v = TeamLog.TfaChangeStatusTypeSerializer().deserialize(json) + return EventType.tfaChangeStatus(v) + case "tfa_remove_backup_phone": + let v = TeamLog.TfaRemoveBackupPhoneTypeSerializer().deserialize(json) + return EventType.tfaRemoveBackupPhone(v) + case "tfa_remove_security_key": + let v = TeamLog.TfaRemoveSecurityKeyTypeSerializer().deserialize(json) + return EventType.tfaRemoveSecurityKey(v) + case "tfa_reset": + let v = TeamLog.TfaResetTypeSerializer().deserialize(json) + return EventType.tfaReset(v) + case "other": + return EventType.other + default: + return EventType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Created member data report. + open class ExportMembersReportDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExportMembersReportDetailsSerializer().serialize(self)))" + } + } + open class ExportMembersReportDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExportMembersReportDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExportMembersReportDetails { + switch json { + case .dictionary(_): + return ExportMembersReportDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The ExportMembersReportType struct + open class ExportMembersReportType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExportMembersReportTypeSerializer().serialize(self)))" + } + } + open class ExportMembersReportTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExportMembersReportType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExportMembersReportType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ExportMembersReportType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Accepted/opted out of extended version history. + open class ExtendedVersionHistoryChangePolicyDetails: CustomStringConvertible { + /// New extended version history policy. + public let newValue: TeamLog.ExtendedVersionHistoryPolicy + /// Previous extended version history policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.ExtendedVersionHistoryPolicy? + public init(newValue: TeamLog.ExtendedVersionHistoryPolicy, previousValue: TeamLog.ExtendedVersionHistoryPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExtendedVersionHistoryChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class ExtendedVersionHistoryChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExtendedVersionHistoryChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.ExtendedVersionHistoryPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.ExtendedVersionHistoryPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExtendedVersionHistoryChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.ExtendedVersionHistoryPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.ExtendedVersionHistoryPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return ExtendedVersionHistoryChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ExtendedVersionHistoryChangePolicyType struct + open class ExtendedVersionHistoryChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExtendedVersionHistoryChangePolicyTypeSerializer().serialize(self)))" + } + } + open class ExtendedVersionHistoryChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExtendedVersionHistoryChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExtendedVersionHistoryChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ExtendedVersionHistoryChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ExtendedVersionHistoryPolicy union + public enum ExtendedVersionHistoryPolicy: CustomStringConvertible { + /// An unspecified error. + case explicitlyLimited + /// An unspecified error. + case explicitlyUnlimited + /// An unspecified error. + case implicitlyLimited + /// An unspecified error. + case implicitlyUnlimited + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExtendedVersionHistoryPolicySerializer().serialize(self)))" + } + } + open class ExtendedVersionHistoryPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExtendedVersionHistoryPolicy) -> JSON { + switch value { + case .explicitlyLimited: + var d = [String: JSON]() + d[".tag"] = .str("explicitly_limited") + return .dictionary(d) + case .explicitlyUnlimited: + var d = [String: JSON]() + d[".tag"] = .str("explicitly_unlimited") + return .dictionary(d) + case .implicitlyLimited: + var d = [String: JSON]() + d[".tag"] = .str("implicitly_limited") + return .dictionary(d) + case .implicitlyUnlimited: + var d = [String: JSON]() + d[".tag"] = .str("implicitly_unlimited") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ExtendedVersionHistoryPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "explicitly_limited": + return ExtendedVersionHistoryPolicy.explicitlyLimited + case "explicitly_unlimited": + return ExtendedVersionHistoryPolicy.explicitlyUnlimited + case "implicitly_limited": + return ExtendedVersionHistoryPolicy.implicitlyLimited + case "implicitly_unlimited": + return ExtendedVersionHistoryPolicy.implicitlyUnlimited + case "other": + return ExtendedVersionHistoryPolicy.other + default: + return ExtendedVersionHistoryPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// A user without a Dropbox account. + open class ExternalUserLogInfo: CustomStringConvertible { + /// An external user identifier. + public let userIdentifier: String + /// Identifier type. + public let identifierType: TeamLog.IdentifierType + public init(userIdentifier: String, identifierType: TeamLog.IdentifierType) { + stringValidator()(userIdentifier) + self.userIdentifier = userIdentifier + self.identifierType = identifierType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ExternalUserLogInfoSerializer().serialize(self)))" + } + } + open class ExternalUserLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ExternalUserLogInfo) -> JSON { + let output = [ + "user_identifier": Serialization._StringSerializer.serialize(value.userIdentifier), + "identifier_type": TeamLog.IdentifierTypeSerializer().serialize(value.identifierType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ExternalUserLogInfo { + switch json { + case .dictionary(let dict): + let userIdentifier = Serialization._StringSerializer.deserialize(dict["user_identifier"] ?? .null) + let identifierType = TeamLog.IdentifierTypeSerializer().deserialize(dict["identifier_type"] ?? .null) + return ExternalUserLogInfo(userIdentifier: userIdentifier, identifierType: identifierType) + default: + fatalError("Type error deserializing") + } + } + } + + /// Provides details about a failure + open class FailureDetailsLogInfo: CustomStringConvertible { + /// A user friendly explanation of the error. Might be missing due to historical data gap. + public let userFriendlyMessage: String? + /// A technical explanation of the error. This is relevant for some errors. + public let technicalErrorMessage: String? + public init(userFriendlyMessage: String? = nil, technicalErrorMessage: String? = nil) { + nullableValidator(stringValidator())(userFriendlyMessage) + self.userFriendlyMessage = userFriendlyMessage + nullableValidator(stringValidator())(technicalErrorMessage) + self.technicalErrorMessage = technicalErrorMessage + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FailureDetailsLogInfoSerializer().serialize(self)))" + } + } + open class FailureDetailsLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FailureDetailsLogInfo) -> JSON { + let output = [ + "user_friendly_message": NullableSerializer(Serialization._StringSerializer).serialize(value.userFriendlyMessage), + "technical_error_message": NullableSerializer(Serialization._StringSerializer).serialize(value.technicalErrorMessage), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FailureDetailsLogInfo { + switch json { + case .dictionary(let dict): + let userFriendlyMessage = NullableSerializer(Serialization._StringSerializer).deserialize(dict["user_friendly_message"] ?? .null) + let technicalErrorMessage = NullableSerializer(Serialization._StringSerializer).deserialize(dict["technical_error_message"] ?? .null) + return FailureDetailsLogInfo(userFriendlyMessage: userFriendlyMessage, technicalErrorMessage: technicalErrorMessage) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added file comment. + open class FileAddCommentDetails: CustomStringConvertible { + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(commentText: String? = nil) { + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileAddCommentDetailsSerializer().serialize(self)))" + } + } + open class FileAddCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileAddCommentDetails) -> JSON { + let output = [ + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileAddCommentDetails { + switch json { + case .dictionary(let dict): + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return FileAddCommentDetails(commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileAddCommentType struct + open class FileAddCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileAddCommentTypeSerializer().serialize(self)))" + } + } + open class FileAddCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileAddCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileAddCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileAddCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added files and/or folders. + open class FileAddDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileAddDetailsSerializer().serialize(self)))" + } + } + open class FileAddDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileAddDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileAddDetails { + switch json { + case .dictionary(_): + return FileAddDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileAddType struct + open class FileAddType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileAddTypeSerializer().serialize(self)))" + } + } + open class FileAddTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileAddType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileAddType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileAddType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Subscribed to or unsubscribed from comment notifications for file. + open class FileChangeCommentSubscriptionDetails: CustomStringConvertible { + /// New file comment subscription. + public let newValue: TeamLog.FileCommentNotificationPolicy + /// Previous file comment subscription. Might be missing due to historical data gap. + public let previousValue: TeamLog.FileCommentNotificationPolicy? + public init(newValue: TeamLog.FileCommentNotificationPolicy, previousValue: TeamLog.FileCommentNotificationPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileChangeCommentSubscriptionDetailsSerializer().serialize(self)))" + } + } + open class FileChangeCommentSubscriptionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileChangeCommentSubscriptionDetails) -> JSON { + let output = [ + "new_value": TeamLog.FileCommentNotificationPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.FileCommentNotificationPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileChangeCommentSubscriptionDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.FileCommentNotificationPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.FileCommentNotificationPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return FileChangeCommentSubscriptionDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileChangeCommentSubscriptionType struct + open class FileChangeCommentSubscriptionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileChangeCommentSubscriptionTypeSerializer().serialize(self)))" + } + } + open class FileChangeCommentSubscriptionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileChangeCommentSubscriptionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileChangeCommentSubscriptionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileChangeCommentSubscriptionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enable or disable file comments notifications + public enum FileCommentNotificationPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileCommentNotificationPolicySerializer().serialize(self)))" + } + } + open class FileCommentNotificationPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileCommentNotificationPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FileCommentNotificationPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return FileCommentNotificationPolicy.disabled + case "enabled": + return FileCommentNotificationPolicy.enabled + case "other": + return FileCommentNotificationPolicy.other + default: + return FileCommentNotificationPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Enabled/disabled commenting on team files. + open class FileCommentsChangePolicyDetails: CustomStringConvertible { + /// New commenting on team files policy. + public let newValue: TeamLog.FileCommentsPolicy + /// Previous commenting on team files policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.FileCommentsPolicy? + public init(newValue: TeamLog.FileCommentsPolicy, previousValue: TeamLog.FileCommentsPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileCommentsChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class FileCommentsChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileCommentsChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.FileCommentsPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.FileCommentsPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileCommentsChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.FileCommentsPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.FileCommentsPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return FileCommentsChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileCommentsChangePolicyType struct + open class FileCommentsChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileCommentsChangePolicyTypeSerializer().serialize(self)))" + } + } + open class FileCommentsChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileCommentsChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileCommentsChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileCommentsChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// File comments policy + public enum FileCommentsPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileCommentsPolicySerializer().serialize(self)))" + } + } + open class FileCommentsPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileCommentsPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FileCommentsPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return FileCommentsPolicy.disabled + case "enabled": + return FileCommentsPolicy.enabled + case "other": + return FileCommentsPolicy.other + default: + return FileCommentsPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Copied files and/or folders. + open class FileCopyDetails: CustomStringConvertible { + /// Relocate action details. + public let relocateActionDetails: Array + public init(relocateActionDetails: Array) { + self.relocateActionDetails = relocateActionDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileCopyDetailsSerializer().serialize(self)))" + } + } + open class FileCopyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileCopyDetails) -> JSON { + let output = [ + "relocate_action_details": ArraySerializer(TeamLog.RelocateAssetReferencesLogInfoSerializer()).serialize(value.relocateActionDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileCopyDetails { + switch json { + case .dictionary(let dict): + let relocateActionDetails = ArraySerializer(TeamLog.RelocateAssetReferencesLogInfoSerializer()).deserialize(dict["relocate_action_details"] ?? .null) + return FileCopyDetails(relocateActionDetails: relocateActionDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileCopyType struct + open class FileCopyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileCopyTypeSerializer().serialize(self)))" + } + } + open class FileCopyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileCopyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileCopyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileCopyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted file comment. + open class FileDeleteCommentDetails: CustomStringConvertible { + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(commentText: String? = nil) { + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileDeleteCommentDetailsSerializer().serialize(self)))" + } + } + open class FileDeleteCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileDeleteCommentDetails) -> JSON { + let output = [ + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileDeleteCommentDetails { + switch json { + case .dictionary(let dict): + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return FileDeleteCommentDetails(commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileDeleteCommentType struct + open class FileDeleteCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileDeleteCommentTypeSerializer().serialize(self)))" + } + } + open class FileDeleteCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileDeleteCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileDeleteCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileDeleteCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted files and/or folders. + open class FileDeleteDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileDeleteDetailsSerializer().serialize(self)))" + } + } + open class FileDeleteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileDeleteDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileDeleteDetails { + switch json { + case .dictionary(_): + return FileDeleteDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileDeleteType struct + open class FileDeleteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileDeleteTypeSerializer().serialize(self)))" + } + } + open class FileDeleteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileDeleteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileDeleteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileDeleteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Downloaded files and/or folders. + open class FileDownloadDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileDownloadDetailsSerializer().serialize(self)))" + } + } + open class FileDownloadDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileDownloadDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileDownloadDetails { + switch json { + case .dictionary(_): + return FileDownloadDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileDownloadType struct + open class FileDownloadType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileDownloadTypeSerializer().serialize(self)))" + } + } + open class FileDownloadTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileDownloadType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileDownloadType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileDownloadType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Edited file comment. + open class FileEditCommentDetails: CustomStringConvertible { + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + /// Previous comment text. + public let previousCommentText: String + public init(previousCommentText: String, commentText: String? = nil) { + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + stringValidator()(previousCommentText) + self.previousCommentText = previousCommentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileEditCommentDetailsSerializer().serialize(self)))" + } + } + open class FileEditCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileEditCommentDetails) -> JSON { + let output = [ + "previous_comment_text": Serialization._StringSerializer.serialize(value.previousCommentText), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileEditCommentDetails { + switch json { + case .dictionary(let dict): + let previousCommentText = Serialization._StringSerializer.deserialize(dict["previous_comment_text"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return FileEditCommentDetails(previousCommentText: previousCommentText, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileEditCommentType struct + open class FileEditCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileEditCommentTypeSerializer().serialize(self)))" + } + } + open class FileEditCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileEditCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileEditCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileEditCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Edited files. + open class FileEditDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileEditDetailsSerializer().serialize(self)))" + } + } + open class FileEditDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileEditDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileEditDetails { + switch json { + case .dictionary(_): + return FileEditDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileEditType struct + open class FileEditType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileEditTypeSerializer().serialize(self)))" + } + } + open class FileEditTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileEditType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileEditType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileEditType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created copy reference to file/folder. + open class FileGetCopyReferenceDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileGetCopyReferenceDetailsSerializer().serialize(self)))" + } + } + open class FileGetCopyReferenceDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileGetCopyReferenceDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileGetCopyReferenceDetails { + switch json { + case .dictionary(_): + return FileGetCopyReferenceDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileGetCopyReferenceType struct + open class FileGetCopyReferenceType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileGetCopyReferenceTypeSerializer().serialize(self)))" + } + } + open class FileGetCopyReferenceTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileGetCopyReferenceType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileGetCopyReferenceType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileGetCopyReferenceType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Liked file comment. + open class FileLikeCommentDetails: CustomStringConvertible { + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(commentText: String? = nil) { + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileLikeCommentDetailsSerializer().serialize(self)))" + } + } + open class FileLikeCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileLikeCommentDetails) -> JSON { + let output = [ + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileLikeCommentDetails { + switch json { + case .dictionary(let dict): + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return FileLikeCommentDetails(commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileLikeCommentType struct + open class FileLikeCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileLikeCommentTypeSerializer().serialize(self)))" + } + } + open class FileLikeCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileLikeCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileLikeCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileLikeCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Generic information relevant both for files and folders + open class FileOrFolderLogInfo: CustomStringConvertible { + /// Path relative to event context. + public let path: TeamLog.PathLogInfo + /// Display name. Might be missing due to historical data gap. + public let displayName: String? + /// Unique ID. Might be missing due to historical data gap. + public let fileId: String? + public init(path: TeamLog.PathLogInfo, displayName: String? = nil, fileId: String? = nil) { + self.path = path + nullableValidator(stringValidator())(displayName) + self.displayName = displayName + nullableValidator(stringValidator())(fileId) + self.fileId = fileId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileOrFolderLogInfoSerializer().serialize(self)))" + } + } + open class FileOrFolderLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileOrFolderLogInfo) -> JSON { + let output = [ + "path": TeamLog.PathLogInfoSerializer().serialize(value.path), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + "file_id": NullableSerializer(Serialization._StringSerializer).serialize(value.fileId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileOrFolderLogInfo { + switch json { + case .dictionary(let dict): + let path = TeamLog.PathLogInfoSerializer().deserialize(dict["path"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + let fileId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["file_id"] ?? .null) + return FileOrFolderLogInfo(path: path, displayName: displayName, fileId: fileId) + default: + fatalError("Type error deserializing") + } + } + } + + /// File's logged information. + open class FileLogInfo: TeamLog.FileOrFolderLogInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileLogInfoSerializer().serialize(self)))" + } + } + open class FileLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileLogInfo) -> JSON { + let output = [ + "path": TeamLog.PathLogInfoSerializer().serialize(value.path), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + "file_id": NullableSerializer(Serialization._StringSerializer).serialize(value.fileId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileLogInfo { + switch json { + case .dictionary(let dict): + let path = TeamLog.PathLogInfoSerializer().deserialize(dict["path"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + let fileId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["file_id"] ?? .null) + return FileLogInfo(path: path, displayName: displayName, fileId: fileId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Moved files and/or folders. + open class FileMoveDetails: CustomStringConvertible { + /// Relocate action details. + public let relocateActionDetails: Array + public init(relocateActionDetails: Array) { + self.relocateActionDetails = relocateActionDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileMoveDetailsSerializer().serialize(self)))" + } + } + open class FileMoveDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileMoveDetails) -> JSON { + let output = [ + "relocate_action_details": ArraySerializer(TeamLog.RelocateAssetReferencesLogInfoSerializer()).serialize(value.relocateActionDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileMoveDetails { + switch json { + case .dictionary(let dict): + let relocateActionDetails = ArraySerializer(TeamLog.RelocateAssetReferencesLogInfoSerializer()).deserialize(dict["relocate_action_details"] ?? .null) + return FileMoveDetails(relocateActionDetails: relocateActionDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileMoveType struct + open class FileMoveType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileMoveTypeSerializer().serialize(self)))" + } + } + open class FileMoveTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileMoveType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileMoveType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileMoveType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Permanently deleted files and/or folders. + open class FilePermanentlyDeleteDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FilePermanentlyDeleteDetailsSerializer().serialize(self)))" + } + } + open class FilePermanentlyDeleteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FilePermanentlyDeleteDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FilePermanentlyDeleteDetails { + switch json { + case .dictionary(_): + return FilePermanentlyDeleteDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FilePermanentlyDeleteType struct + open class FilePermanentlyDeleteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FilePermanentlyDeleteTypeSerializer().serialize(self)))" + } + } + open class FilePermanentlyDeleteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FilePermanentlyDeleteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FilePermanentlyDeleteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FilePermanentlyDeleteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Previewed files and/or folders. + open class FilePreviewDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FilePreviewDetailsSerializer().serialize(self)))" + } + } + open class FilePreviewDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FilePreviewDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FilePreviewDetails { + switch json { + case .dictionary(_): + return FilePreviewDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FilePreviewType struct + open class FilePreviewType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FilePreviewTypeSerializer().serialize(self)))" + } + } + open class FilePreviewTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FilePreviewType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FilePreviewType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FilePreviewType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Renamed files and/or folders. + open class FileRenameDetails: CustomStringConvertible { + /// Relocate action details. + public let relocateActionDetails: Array + public init(relocateActionDetails: Array) { + self.relocateActionDetails = relocateActionDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRenameDetailsSerializer().serialize(self)))" + } + } + open class FileRenameDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRenameDetails) -> JSON { + let output = [ + "relocate_action_details": ArraySerializer(TeamLog.RelocateAssetReferencesLogInfoSerializer()).serialize(value.relocateActionDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRenameDetails { + switch json { + case .dictionary(let dict): + let relocateActionDetails = ArraySerializer(TeamLog.RelocateAssetReferencesLogInfoSerializer()).deserialize(dict["relocate_action_details"] ?? .null) + return FileRenameDetails(relocateActionDetails: relocateActionDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRenameType struct + open class FileRenameType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRenameTypeSerializer().serialize(self)))" + } + } + open class FileRenameTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRenameType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRenameType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRenameType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed file request. + open class FileRequestChangeDetails: CustomStringConvertible { + /// File request id. Might be missing due to historical data gap. + public let fileRequestId: String? + /// Previous file request details. Might be missing due to historical data gap. + public let previousDetails: TeamLog.FileRequestDetails? + /// New file request details. + public let newDetails: TeamLog.FileRequestDetails + public init(newDetails: TeamLog.FileRequestDetails, fileRequestId: String? = nil, previousDetails: TeamLog.FileRequestDetails? = nil) { + nullableValidator(stringValidator(minLength: 1, pattern: "[-_0-9a-zA-Z]+"))(fileRequestId) + self.fileRequestId = fileRequestId + self.previousDetails = previousDetails + self.newDetails = newDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestChangeDetailsSerializer().serialize(self)))" + } + } + open class FileRequestChangeDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestChangeDetails) -> JSON { + let output = [ + "new_details": TeamLog.FileRequestDetailsSerializer().serialize(value.newDetails), + "file_request_id": NullableSerializer(Serialization._StringSerializer).serialize(value.fileRequestId), + "previous_details": NullableSerializer(TeamLog.FileRequestDetailsSerializer()).serialize(value.previousDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestChangeDetails { + switch json { + case .dictionary(let dict): + let newDetails = TeamLog.FileRequestDetailsSerializer().deserialize(dict["new_details"] ?? .null) + let fileRequestId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["file_request_id"] ?? .null) + let previousDetails = NullableSerializer(TeamLog.FileRequestDetailsSerializer()).deserialize(dict["previous_details"] ?? .null) + return FileRequestChangeDetails(newDetails: newDetails, fileRequestId: fileRequestId, previousDetails: previousDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRequestChangeType struct + open class FileRequestChangeType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestChangeTypeSerializer().serialize(self)))" + } + } + open class FileRequestChangeTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestChangeType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestChangeType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRequestChangeType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Closed file request. + open class FileRequestCloseDetails: CustomStringConvertible { + /// File request id. Might be missing due to historical data gap. + public let fileRequestId: String? + /// Previous file request details. Might be missing due to historical data gap. + public let previousDetails: TeamLog.FileRequestDetails? + public init(fileRequestId: String? = nil, previousDetails: TeamLog.FileRequestDetails? = nil) { + nullableValidator(stringValidator(minLength: 1, pattern: "[-_0-9a-zA-Z]+"))(fileRequestId) + self.fileRequestId = fileRequestId + self.previousDetails = previousDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestCloseDetailsSerializer().serialize(self)))" + } + } + open class FileRequestCloseDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestCloseDetails) -> JSON { + let output = [ + "file_request_id": NullableSerializer(Serialization._StringSerializer).serialize(value.fileRequestId), + "previous_details": NullableSerializer(TeamLog.FileRequestDetailsSerializer()).serialize(value.previousDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestCloseDetails { + switch json { + case .dictionary(let dict): + let fileRequestId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["file_request_id"] ?? .null) + let previousDetails = NullableSerializer(TeamLog.FileRequestDetailsSerializer()).deserialize(dict["previous_details"] ?? .null) + return FileRequestCloseDetails(fileRequestId: fileRequestId, previousDetails: previousDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRequestCloseType struct + open class FileRequestCloseType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestCloseTypeSerializer().serialize(self)))" + } + } + open class FileRequestCloseTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestCloseType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestCloseType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRequestCloseType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created file request. + open class FileRequestCreateDetails: CustomStringConvertible { + /// File request id. Might be missing due to historical data gap. + public let fileRequestId: String? + /// File request details. Might be missing due to historical data gap. + public let requestDetails: TeamLog.FileRequestDetails? + public init(fileRequestId: String? = nil, requestDetails: TeamLog.FileRequestDetails? = nil) { + nullableValidator(stringValidator(minLength: 1, pattern: "[-_0-9a-zA-Z]+"))(fileRequestId) + self.fileRequestId = fileRequestId + self.requestDetails = requestDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestCreateDetailsSerializer().serialize(self)))" + } + } + open class FileRequestCreateDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestCreateDetails) -> JSON { + let output = [ + "file_request_id": NullableSerializer(Serialization._StringSerializer).serialize(value.fileRequestId), + "request_details": NullableSerializer(TeamLog.FileRequestDetailsSerializer()).serialize(value.requestDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestCreateDetails { + switch json { + case .dictionary(let dict): + let fileRequestId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["file_request_id"] ?? .null) + let requestDetails = NullableSerializer(TeamLog.FileRequestDetailsSerializer()).deserialize(dict["request_details"] ?? .null) + return FileRequestCreateDetails(fileRequestId: fileRequestId, requestDetails: requestDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRequestCreateType struct + open class FileRequestCreateType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestCreateTypeSerializer().serialize(self)))" + } + } + open class FileRequestCreateTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestCreateType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestCreateType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRequestCreateType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// File request deadline + open class FileRequestDeadline: CustomStringConvertible { + /// The deadline for this file request. Might be missing due to historical data gap. + public let deadline: Date? + /// If set, allow uploads after the deadline has passed. Might be missing due to historical data gap. + public let allowLateUploads: String? + public init(deadline: Date? = nil, allowLateUploads: String? = nil) { + self.deadline = deadline + nullableValidator(stringValidator())(allowLateUploads) + self.allowLateUploads = allowLateUploads + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestDeadlineSerializer().serialize(self)))" + } + } + open class FileRequestDeadlineSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestDeadline) -> JSON { + let output = [ + "deadline": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.deadline), + "allow_late_uploads": NullableSerializer(Serialization._StringSerializer).serialize(value.allowLateUploads), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestDeadline { + switch json { + case .dictionary(let dict): + let deadline = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["deadline"] ?? .null) + let allowLateUploads = NullableSerializer(Serialization._StringSerializer).deserialize(dict["allow_late_uploads"] ?? .null) + return FileRequestDeadline(deadline: deadline, allowLateUploads: allowLateUploads) + default: + fatalError("Type error deserializing") + } + } + } + + /// File request details + open class FileRequestDetails: CustomStringConvertible { + /// Asset position in the Assets list. + public let assetIndex: UInt64 + /// File request deadline. Might be missing due to historical data gap. + public let deadline: TeamLog.FileRequestDeadline? + public init(assetIndex: UInt64, deadline: TeamLog.FileRequestDeadline? = nil) { + comparableValidator()(assetIndex) + self.assetIndex = assetIndex + self.deadline = deadline + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestDetailsSerializer().serialize(self)))" + } + } + open class FileRequestDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestDetails) -> JSON { + let output = [ + "asset_index": Serialization._UInt64Serializer.serialize(value.assetIndex), + "deadline": NullableSerializer(TeamLog.FileRequestDeadlineSerializer()).serialize(value.deadline), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestDetails { + switch json { + case .dictionary(let dict): + let assetIndex = Serialization._UInt64Serializer.deserialize(dict["asset_index"] ?? .null) + let deadline = NullableSerializer(TeamLog.FileRequestDeadlineSerializer()).deserialize(dict["deadline"] ?? .null) + return FileRequestDetails(assetIndex: assetIndex, deadline: deadline) + default: + fatalError("Type error deserializing") + } + } + } + + /// Received files for file request. + open class FileRequestReceiveFileDetails: CustomStringConvertible { + /// File request id. Might be missing due to historical data gap. + public let fileRequestId: String? + /// File request details. Might be missing due to historical data gap. + public let fileRequestDetails: TeamLog.FileRequestDetails? + /// Submitted file names. + public let submittedFileNames: Array + /// The name as provided by the submitter. Might be missing due to historical data gap. + public let submitterName: String? + /// The email as provided by the submitter. Might be missing due to historical data gap. + public let submitterEmail: String? + public init(submittedFileNames: Array, fileRequestId: String? = nil, fileRequestDetails: TeamLog.FileRequestDetails? = nil, submitterName: String? = nil, submitterEmail: String? = nil) { + nullableValidator(stringValidator(minLength: 1, pattern: "[-_0-9a-zA-Z]+"))(fileRequestId) + self.fileRequestId = fileRequestId + self.fileRequestDetails = fileRequestDetails + arrayValidator(itemValidator: stringValidator())(submittedFileNames) + self.submittedFileNames = submittedFileNames + nullableValidator(stringValidator())(submitterName) + self.submitterName = submitterName + nullableValidator(stringValidator(maxLength: 255))(submitterEmail) + self.submitterEmail = submitterEmail + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestReceiveFileDetailsSerializer().serialize(self)))" + } + } + open class FileRequestReceiveFileDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestReceiveFileDetails) -> JSON { + let output = [ + "submitted_file_names": ArraySerializer(Serialization._StringSerializer).serialize(value.submittedFileNames), + "file_request_id": NullableSerializer(Serialization._StringSerializer).serialize(value.fileRequestId), + "file_request_details": NullableSerializer(TeamLog.FileRequestDetailsSerializer()).serialize(value.fileRequestDetails), + "submitter_name": NullableSerializer(Serialization._StringSerializer).serialize(value.submitterName), + "submitter_email": NullableSerializer(Serialization._StringSerializer).serialize(value.submitterEmail), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestReceiveFileDetails { + switch json { + case .dictionary(let dict): + let submittedFileNames = ArraySerializer(Serialization._StringSerializer).deserialize(dict["submitted_file_names"] ?? .null) + let fileRequestId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["file_request_id"] ?? .null) + let fileRequestDetails = NullableSerializer(TeamLog.FileRequestDetailsSerializer()).deserialize(dict["file_request_details"] ?? .null) + let submitterName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["submitter_name"] ?? .null) + let submitterEmail = NullableSerializer(Serialization._StringSerializer).deserialize(dict["submitter_email"] ?? .null) + return FileRequestReceiveFileDetails(submittedFileNames: submittedFileNames, fileRequestId: fileRequestId, fileRequestDetails: fileRequestDetails, submitterName: submitterName, submitterEmail: submitterEmail) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRequestReceiveFileType struct + open class FileRequestReceiveFileType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestReceiveFileTypeSerializer().serialize(self)))" + } + } + open class FileRequestReceiveFileTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestReceiveFileType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestReceiveFileType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRequestReceiveFileType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled file requests. + open class FileRequestsChangePolicyDetails: CustomStringConvertible { + /// New file requests policy. + public let newValue: TeamLog.FileRequestsPolicy + /// Previous file requests policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.FileRequestsPolicy? + public init(newValue: TeamLog.FileRequestsPolicy, previousValue: TeamLog.FileRequestsPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestsChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class FileRequestsChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestsChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.FileRequestsPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.FileRequestsPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestsChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.FileRequestsPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.FileRequestsPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return FileRequestsChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRequestsChangePolicyType struct + open class FileRequestsChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestsChangePolicyTypeSerializer().serialize(self)))" + } + } + open class FileRequestsChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestsChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestsChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRequestsChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled file request emails for everyone. + open class FileRequestsEmailsEnabledDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestsEmailsEnabledDetailsSerializer().serialize(self)))" + } + } + open class FileRequestsEmailsEnabledDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestsEmailsEnabledDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestsEmailsEnabledDetails { + switch json { + case .dictionary(_): + return FileRequestsEmailsEnabledDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRequestsEmailsEnabledType struct + open class FileRequestsEmailsEnabledType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestsEmailsEnabledTypeSerializer().serialize(self)))" + } + } + open class FileRequestsEmailsEnabledTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestsEmailsEnabledType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestsEmailsEnabledType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRequestsEmailsEnabledType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled file request emails for team. + open class FileRequestsEmailsRestrictedToTeamOnlyDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestsEmailsRestrictedToTeamOnlyDetailsSerializer().serialize(self)))" + } + } + open class FileRequestsEmailsRestrictedToTeamOnlyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestsEmailsRestrictedToTeamOnlyDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestsEmailsRestrictedToTeamOnlyDetails { + switch json { + case .dictionary(_): + return FileRequestsEmailsRestrictedToTeamOnlyDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRequestsEmailsRestrictedToTeamOnlyType struct + open class FileRequestsEmailsRestrictedToTeamOnlyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestsEmailsRestrictedToTeamOnlyTypeSerializer().serialize(self)))" + } + } + open class FileRequestsEmailsRestrictedToTeamOnlyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestsEmailsRestrictedToTeamOnlyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRequestsEmailsRestrictedToTeamOnlyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRequestsEmailsRestrictedToTeamOnlyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// File requests policy + public enum FileRequestsPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRequestsPolicySerializer().serialize(self)))" + } + } + open class FileRequestsPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRequestsPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> FileRequestsPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return FileRequestsPolicy.disabled + case "enabled": + return FileRequestsPolicy.enabled + case "other": + return FileRequestsPolicy.other + default: + return FileRequestsPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Resolved file comment. + open class FileResolveCommentDetails: CustomStringConvertible { + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(commentText: String? = nil) { + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileResolveCommentDetailsSerializer().serialize(self)))" + } + } + open class FileResolveCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileResolveCommentDetails) -> JSON { + let output = [ + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileResolveCommentDetails { + switch json { + case .dictionary(let dict): + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return FileResolveCommentDetails(commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileResolveCommentType struct + open class FileResolveCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileResolveCommentTypeSerializer().serialize(self)))" + } + } + open class FileResolveCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileResolveCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileResolveCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileResolveCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Restored deleted files and/or folders. + open class FileRestoreDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRestoreDetailsSerializer().serialize(self)))" + } + } + open class FileRestoreDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRestoreDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRestoreDetails { + switch json { + case .dictionary(_): + return FileRestoreDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRestoreType struct + open class FileRestoreType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRestoreTypeSerializer().serialize(self)))" + } + } + open class FileRestoreTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRestoreType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRestoreType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRestoreType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Reverted files to previous version. + open class FileRevertDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRevertDetailsSerializer().serialize(self)))" + } + } + open class FileRevertDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRevertDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRevertDetails { + switch json { + case .dictionary(_): + return FileRevertDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRevertType struct + open class FileRevertType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRevertTypeSerializer().serialize(self)))" + } + } + open class FileRevertTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRevertType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRevertType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRevertType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Rolled back file actions. + open class FileRollbackChangesDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRollbackChangesDetailsSerializer().serialize(self)))" + } + } + open class FileRollbackChangesDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRollbackChangesDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRollbackChangesDetails { + switch json { + case .dictionary(_): + return FileRollbackChangesDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileRollbackChangesType struct + open class FileRollbackChangesType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileRollbackChangesTypeSerializer().serialize(self)))" + } + } + open class FileRollbackChangesTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileRollbackChangesType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileRollbackChangesType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileRollbackChangesType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Saved file/folder using copy reference. + open class FileSaveCopyReferenceDetails: CustomStringConvertible { + /// Relocate action details. + public let relocateActionDetails: Array + public init(relocateActionDetails: Array) { + self.relocateActionDetails = relocateActionDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileSaveCopyReferenceDetailsSerializer().serialize(self)))" + } + } + open class FileSaveCopyReferenceDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileSaveCopyReferenceDetails) -> JSON { + let output = [ + "relocate_action_details": ArraySerializer(TeamLog.RelocateAssetReferencesLogInfoSerializer()).serialize(value.relocateActionDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileSaveCopyReferenceDetails { + switch json { + case .dictionary(let dict): + let relocateActionDetails = ArraySerializer(TeamLog.RelocateAssetReferencesLogInfoSerializer()).deserialize(dict["relocate_action_details"] ?? .null) + return FileSaveCopyReferenceDetails(relocateActionDetails: relocateActionDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileSaveCopyReferenceType struct + open class FileSaveCopyReferenceType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileSaveCopyReferenceTypeSerializer().serialize(self)))" + } + } + open class FileSaveCopyReferenceTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileSaveCopyReferenceType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileSaveCopyReferenceType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileSaveCopyReferenceType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Unliked file comment. + open class FileUnlikeCommentDetails: CustomStringConvertible { + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(commentText: String? = nil) { + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileUnlikeCommentDetailsSerializer().serialize(self)))" + } + } + open class FileUnlikeCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileUnlikeCommentDetails) -> JSON { + let output = [ + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileUnlikeCommentDetails { + switch json { + case .dictionary(let dict): + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return FileUnlikeCommentDetails(commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileUnlikeCommentType struct + open class FileUnlikeCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileUnlikeCommentTypeSerializer().serialize(self)))" + } + } + open class FileUnlikeCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileUnlikeCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileUnlikeCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileUnlikeCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Unresolved file comment. + open class FileUnresolveCommentDetails: CustomStringConvertible { + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(commentText: String? = nil) { + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileUnresolveCommentDetailsSerializer().serialize(self)))" + } + } + open class FileUnresolveCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileUnresolveCommentDetails) -> JSON { + let output = [ + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileUnresolveCommentDetails { + switch json { + case .dictionary(let dict): + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return FileUnresolveCommentDetails(commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The FileUnresolveCommentType struct + open class FileUnresolveCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FileUnresolveCommentTypeSerializer().serialize(self)))" + } + } + open class FileUnresolveCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FileUnresolveCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FileUnresolveCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return FileUnresolveCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Folder's logged information. + open class FolderLogInfo: TeamLog.FileOrFolderLogInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FolderLogInfoSerializer().serialize(self)))" + } + } + open class FolderLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FolderLogInfo) -> JSON { + let output = [ + "path": TeamLog.PathLogInfoSerializer().serialize(value.path), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + "file_id": NullableSerializer(Serialization._StringSerializer).serialize(value.fileId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FolderLogInfo { + switch json { + case .dictionary(let dict): + let path = TeamLog.PathLogInfoSerializer().deserialize(dict["path"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + let fileId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["file_id"] ?? .null) + return FolderLogInfo(path: path, displayName: displayName, fileId: fileId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Geographic location details. + open class GeoLocationLogInfo: CustomStringConvertible { + /// City name. + public let city: String? + /// Region name. + public let region: String? + /// Country code. + public let country: String? + /// IP address. + public let ipAddress: String + public init(ipAddress: String, city: String? = nil, region: String? = nil, country: String? = nil) { + nullableValidator(stringValidator())(city) + self.city = city + nullableValidator(stringValidator())(region) + self.region = region + nullableValidator(stringValidator())(country) + self.country = country + stringValidator()(ipAddress) + self.ipAddress = ipAddress + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GeoLocationLogInfoSerializer().serialize(self)))" + } + } + open class GeoLocationLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GeoLocationLogInfo) -> JSON { + let output = [ + "ip_address": Serialization._StringSerializer.serialize(value.ipAddress), + "city": NullableSerializer(Serialization._StringSerializer).serialize(value.city), + "region": NullableSerializer(Serialization._StringSerializer).serialize(value.region), + "country": NullableSerializer(Serialization._StringSerializer).serialize(value.country), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GeoLocationLogInfo { + switch json { + case .dictionary(let dict): + let ipAddress = Serialization._StringSerializer.deserialize(dict["ip_address"] ?? .null) + let city = NullableSerializer(Serialization._StringSerializer).deserialize(dict["city"] ?? .null) + let region = NullableSerializer(Serialization._StringSerializer).deserialize(dict["region"] ?? .null) + let country = NullableSerializer(Serialization._StringSerializer).deserialize(dict["country"] ?? .null) + return GeoLocationLogInfo(ipAddress: ipAddress, city: city, region: region, country: country) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetTeamEventsArg struct + open class GetTeamEventsArg: CustomStringConvertible { + /// The maximal number of results to return per call. Note that some calls may not return limit number of + /// events, and may even return no events, even with `has_more` set to true. In this case, callers should fetch + /// again using getEventsContinue. + public let limit: UInt32 + /// Filter the events by account ID. Return ony events with this account_id as either Actor, Context, or + /// Participants. + public let accountId: String? + /// Filter by time range. + public let time: TeamCommon.TimeRange? + /// Filter the returned events to a single category. + public let category: TeamLog.EventCategory? + public init(limit: UInt32 = 1000, accountId: String? = nil, time: TeamCommon.TimeRange? = nil, category: TeamLog.EventCategory? = nil) { + comparableValidator(minValue: 1, maxValue: 1000)(limit) + self.limit = limit + nullableValidator(stringValidator(minLength: 40, maxLength: 40))(accountId) + self.accountId = accountId + self.time = time + self.category = category + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTeamEventsArgSerializer().serialize(self)))" + } + } + open class GetTeamEventsArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTeamEventsArg) -> JSON { + let output = [ + "limit": Serialization._UInt32Serializer.serialize(value.limit), + "account_id": NullableSerializer(Serialization._StringSerializer).serialize(value.accountId), + "time": NullableSerializer(TeamCommon.TimeRangeSerializer()).serialize(value.time), + "category": NullableSerializer(TeamLog.EventCategorySerializer()).serialize(value.category), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetTeamEventsArg { + switch json { + case .dictionary(let dict): + let limit = Serialization._UInt32Serializer.deserialize(dict["limit"] ?? .number(1000)) + let accountId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["account_id"] ?? .null) + let time = NullableSerializer(TeamCommon.TimeRangeSerializer()).deserialize(dict["time"] ?? .null) + let category = NullableSerializer(TeamLog.EventCategorySerializer()).deserialize(dict["category"] ?? .null) + return GetTeamEventsArg(limit: limit, accountId: accountId, time: time, category: category) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetTeamEventsContinueArg struct + open class GetTeamEventsContinueArg: CustomStringConvertible { + /// Indicates from what point to get the next set of events. + public let cursor: String + public init(cursor: String) { + stringValidator()(cursor) + self.cursor = cursor + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTeamEventsContinueArgSerializer().serialize(self)))" + } + } + open class GetTeamEventsContinueArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTeamEventsContinueArg) -> JSON { + let output = [ + "cursor": Serialization._StringSerializer.serialize(value.cursor), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetTeamEventsContinueArg { + switch json { + case .dictionary(let dict): + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + return GetTeamEventsContinueArg(cursor: cursor) + default: + fatalError("Type error deserializing") + } + } + } + + /// Errors that can be raised when calling getEventsContinue. + public enum GetTeamEventsContinueError: CustomStringConvertible { + /// Bad cursor. + case badCursor + /// Cursors are intended to be used quickly. Individual cursor values are normally valid for days, but in rare + /// cases may be reset sooner. Cursor reset errors should be handled by fetching a new cursor from getEvents. + /// The associated value is the approximate timestamp of the most recent event returned by the cursor. This + /// should be used as a resumption point when calling getEvents to obtain a new cursor. + case reset(Date) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTeamEventsContinueErrorSerializer().serialize(self)))" + } + } + open class GetTeamEventsContinueErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTeamEventsContinueError) -> JSON { + switch value { + case .badCursor: + var d = [String: JSON]() + d[".tag"] = .str("bad_cursor") + return .dictionary(d) + case .reset(let arg): + var d = ["reset": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(arg)] + d[".tag"] = .str("reset") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetTeamEventsContinueError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "bad_cursor": + return GetTeamEventsContinueError.badCursor + case "reset": + let v = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(d["reset"] ?? .null) + return GetTeamEventsContinueError.reset(v) + case "other": + return GetTeamEventsContinueError.other + default: + return GetTeamEventsContinueError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Errors that can be raised when calling getEvents. + public enum GetTeamEventsError: CustomStringConvertible { + /// No user found matching the provided account_id. + case accountIdNotFound + /// Invalid time range. + case invalidTimeRange + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTeamEventsErrorSerializer().serialize(self)))" + } + } + open class GetTeamEventsErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTeamEventsError) -> JSON { + switch value { + case .accountIdNotFound: + var d = [String: JSON]() + d[".tag"] = .str("account_id_not_found") + return .dictionary(d) + case .invalidTimeRange: + var d = [String: JSON]() + d[".tag"] = .str("invalid_time_range") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetTeamEventsError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "account_id_not_found": + return GetTeamEventsError.accountIdNotFound + case "invalid_time_range": + return GetTeamEventsError.invalidTimeRange + case "other": + return GetTeamEventsError.other + default: + return GetTeamEventsError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetTeamEventsResult struct + open class GetTeamEventsResult: CustomStringConvertible { + /// List of events. Note that events are not guaranteed to be sorted by their timestamp value. + public let events: Array + /// Pass the cursor into getEventsContinue to obtain additional events. The value of cursor may change for each + /// response from getEventsContinue, regardless of the value of hasMore; older cursor strings may expire. Thus, + /// callers should ensure that they update their cursor based on the latest value of cursor after each call, and + /// poll regularly if they wish to poll for new events. Callers should handle reset exceptions for expired + /// cursors. + public let cursor: String + /// Is true if there may be additional events that have not been returned yet. An additional call to + /// getEventsContinue can retrieve them. Note that hasMore may be true, even if events is empty. + public let hasMore: Bool + public init(events: Array, cursor: String, hasMore: Bool) { + self.events = events + stringValidator()(cursor) + self.cursor = cursor + self.hasMore = hasMore + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetTeamEventsResultSerializer().serialize(self)))" + } + } + open class GetTeamEventsResultSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetTeamEventsResult) -> JSON { + let output = [ + "events": ArraySerializer(TeamLog.TeamEventSerializer()).serialize(value.events), + "cursor": Serialization._StringSerializer.serialize(value.cursor), + "has_more": Serialization._BoolSerializer.serialize(value.hasMore), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetTeamEventsResult { + switch json { + case .dictionary(let dict): + let events = ArraySerializer(TeamLog.TeamEventSerializer()).deserialize(dict["events"] ?? .null) + let cursor = Serialization._StringSerializer.deserialize(dict["cursor"] ?? .null) + let hasMore = Serialization._BoolSerializer.deserialize(dict["has_more"] ?? .null) + return GetTeamEventsResult(events: events, cursor: cursor, hasMore: hasMore) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled Google single sign-on for team. + open class GoogleSsoChangePolicyDetails: CustomStringConvertible { + /// New Google single sign-on policy. + public let newValue: TeamLog.GoogleSsoPolicy + /// Previous Google single sign-on policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.GoogleSsoPolicy? + public init(newValue: TeamLog.GoogleSsoPolicy, previousValue: TeamLog.GoogleSsoPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GoogleSsoChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class GoogleSsoChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GoogleSsoChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.GoogleSsoPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.GoogleSsoPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GoogleSsoChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.GoogleSsoPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.GoogleSsoPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return GoogleSsoChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GoogleSsoChangePolicyType struct + open class GoogleSsoChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GoogleSsoChangePolicyTypeSerializer().serialize(self)))" + } + } + open class GoogleSsoChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GoogleSsoChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GoogleSsoChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GoogleSsoChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Google SSO policy + public enum GoogleSsoPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GoogleSsoPolicySerializer().serialize(self)))" + } + } + open class GoogleSsoPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GoogleSsoPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GoogleSsoPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return GoogleSsoPolicy.disabled + case "enabled": + return GoogleSsoPolicy.enabled + case "other": + return GoogleSsoPolicy.other + default: + return GoogleSsoPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Added external ID for group. + open class GroupAddExternalIdDetails: CustomStringConvertible { + /// Current external id. + public let newValue: String + public init(newValue: String) { + stringValidator()(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupAddExternalIdDetailsSerializer().serialize(self)))" + } + } + open class GroupAddExternalIdDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupAddExternalIdDetails) -> JSON { + let output = [ + "new_value": Serialization._StringSerializer.serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupAddExternalIdDetails { + switch json { + case .dictionary(let dict): + let newValue = Serialization._StringSerializer.deserialize(dict["new_value"] ?? .null) + return GroupAddExternalIdDetails(newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupAddExternalIdType struct + open class GroupAddExternalIdType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupAddExternalIdTypeSerializer().serialize(self)))" + } + } + open class GroupAddExternalIdTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupAddExternalIdType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupAddExternalIdType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupAddExternalIdType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added team members to group. + open class GroupAddMemberDetails: CustomStringConvertible { + /// Is group owner. + public let isGroupOwner: Bool + public init(isGroupOwner: Bool) { + self.isGroupOwner = isGroupOwner + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupAddMemberDetailsSerializer().serialize(self)))" + } + } + open class GroupAddMemberDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupAddMemberDetails) -> JSON { + let output = [ + "is_group_owner": Serialization._BoolSerializer.serialize(value.isGroupOwner), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupAddMemberDetails { + switch json { + case .dictionary(let dict): + let isGroupOwner = Serialization._BoolSerializer.deserialize(dict["is_group_owner"] ?? .null) + return GroupAddMemberDetails(isGroupOwner: isGroupOwner) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupAddMemberType struct + open class GroupAddMemberType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupAddMemberTypeSerializer().serialize(self)))" + } + } + open class GroupAddMemberTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupAddMemberType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupAddMemberType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupAddMemberType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed external ID for group. + open class GroupChangeExternalIdDetails: CustomStringConvertible { + /// Current external id. + public let newValue: String + /// Old external id. + public let previousValue: String + public init(newValue: String, previousValue: String) { + stringValidator()(newValue) + self.newValue = newValue + stringValidator()(previousValue) + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupChangeExternalIdDetailsSerializer().serialize(self)))" + } + } + open class GroupChangeExternalIdDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupChangeExternalIdDetails) -> JSON { + let output = [ + "new_value": Serialization._StringSerializer.serialize(value.newValue), + "previous_value": Serialization._StringSerializer.serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupChangeExternalIdDetails { + switch json { + case .dictionary(let dict): + let newValue = Serialization._StringSerializer.deserialize(dict["new_value"] ?? .null) + let previousValue = Serialization._StringSerializer.deserialize(dict["previous_value"] ?? .null) + return GroupChangeExternalIdDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupChangeExternalIdType struct + open class GroupChangeExternalIdType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupChangeExternalIdTypeSerializer().serialize(self)))" + } + } + open class GroupChangeExternalIdTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupChangeExternalIdType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupChangeExternalIdType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupChangeExternalIdType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed group management type. + open class GroupChangeManagementTypeDetails: CustomStringConvertible { + /// New group management type. + public let newValue: TeamCommon.GroupManagementType + /// Previous group management type. Might be missing due to historical data gap. + public let previousValue: TeamCommon.GroupManagementType? + public init(newValue: TeamCommon.GroupManagementType, previousValue: TeamCommon.GroupManagementType? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupChangeManagementTypeDetailsSerializer().serialize(self)))" + } + } + open class GroupChangeManagementTypeDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupChangeManagementTypeDetails) -> JSON { + let output = [ + "new_value": TeamCommon.GroupManagementTypeSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamCommon.GroupManagementTypeSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupChangeManagementTypeDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamCommon.GroupManagementTypeSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamCommon.GroupManagementTypeSerializer()).deserialize(dict["previous_value"] ?? .null) + return GroupChangeManagementTypeDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupChangeManagementTypeType struct + open class GroupChangeManagementTypeType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupChangeManagementTypeTypeSerializer().serialize(self)))" + } + } + open class GroupChangeManagementTypeTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupChangeManagementTypeType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupChangeManagementTypeType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupChangeManagementTypeType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed manager permissions of group member. + open class GroupChangeMemberRoleDetails: CustomStringConvertible { + /// Is group owner. + public let isGroupOwner: Bool + public init(isGroupOwner: Bool) { + self.isGroupOwner = isGroupOwner + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupChangeMemberRoleDetailsSerializer().serialize(self)))" + } + } + open class GroupChangeMemberRoleDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupChangeMemberRoleDetails) -> JSON { + let output = [ + "is_group_owner": Serialization._BoolSerializer.serialize(value.isGroupOwner), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupChangeMemberRoleDetails { + switch json { + case .dictionary(let dict): + let isGroupOwner = Serialization._BoolSerializer.deserialize(dict["is_group_owner"] ?? .null) + return GroupChangeMemberRoleDetails(isGroupOwner: isGroupOwner) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupChangeMemberRoleType struct + open class GroupChangeMemberRoleType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupChangeMemberRoleTypeSerializer().serialize(self)))" + } + } + open class GroupChangeMemberRoleTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupChangeMemberRoleType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupChangeMemberRoleType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupChangeMemberRoleType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created group. + open class GroupCreateDetails: CustomStringConvertible { + /// Is company managed group. Might be missing due to historical data gap. + public let isCompanyManaged: Bool? + /// Group join policy. + public let joinPolicy: TeamLog.GroupJoinPolicy? + public init(isCompanyManaged: Bool? = nil, joinPolicy: TeamLog.GroupJoinPolicy? = nil) { + self.isCompanyManaged = isCompanyManaged + self.joinPolicy = joinPolicy + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupCreateDetailsSerializer().serialize(self)))" + } + } + open class GroupCreateDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupCreateDetails) -> JSON { + let output = [ + "is_company_managed": NullableSerializer(Serialization._BoolSerializer).serialize(value.isCompanyManaged), + "join_policy": NullableSerializer(TeamLog.GroupJoinPolicySerializer()).serialize(value.joinPolicy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupCreateDetails { + switch json { + case .dictionary(let dict): + let isCompanyManaged = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["is_company_managed"] ?? .null) + let joinPolicy = NullableSerializer(TeamLog.GroupJoinPolicySerializer()).deserialize(dict["join_policy"] ?? .null) + return GroupCreateDetails(isCompanyManaged: isCompanyManaged, joinPolicy: joinPolicy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupCreateType struct + open class GroupCreateType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupCreateTypeSerializer().serialize(self)))" + } + } + open class GroupCreateTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupCreateType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupCreateType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupCreateType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted group. + open class GroupDeleteDetails: CustomStringConvertible { + /// Is company managed group. Might be missing due to historical data gap. + public let isCompanyManaged: Bool? + public init(isCompanyManaged: Bool? = nil) { + self.isCompanyManaged = isCompanyManaged + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupDeleteDetailsSerializer().serialize(self)))" + } + } + open class GroupDeleteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupDeleteDetails) -> JSON { + let output = [ + "is_company_managed": NullableSerializer(Serialization._BoolSerializer).serialize(value.isCompanyManaged), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupDeleteDetails { + switch json { + case .dictionary(let dict): + let isCompanyManaged = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["is_company_managed"] ?? .null) + return GroupDeleteDetails(isCompanyManaged: isCompanyManaged) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupDeleteType struct + open class GroupDeleteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupDeleteTypeSerializer().serialize(self)))" + } + } + open class GroupDeleteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupDeleteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupDeleteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupDeleteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Updated group. + open class GroupDescriptionUpdatedDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupDescriptionUpdatedDetailsSerializer().serialize(self)))" + } + } + open class GroupDescriptionUpdatedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupDescriptionUpdatedDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupDescriptionUpdatedDetails { + switch json { + case .dictionary(_): + return GroupDescriptionUpdatedDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupDescriptionUpdatedType struct + open class GroupDescriptionUpdatedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupDescriptionUpdatedTypeSerializer().serialize(self)))" + } + } + open class GroupDescriptionUpdatedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupDescriptionUpdatedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupDescriptionUpdatedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupDescriptionUpdatedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupJoinPolicy union + public enum GroupJoinPolicy: CustomStringConvertible { + /// An unspecified error. + case open + /// An unspecified error. + case requestToJoin + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupJoinPolicySerializer().serialize(self)))" + } + } + open class GroupJoinPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupJoinPolicy) -> JSON { + switch value { + case .open: + var d = [String: JSON]() + d[".tag"] = .str("open") + return .dictionary(d) + case .requestToJoin: + var d = [String: JSON]() + d[".tag"] = .str("request_to_join") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupJoinPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "open": + return GroupJoinPolicy.open + case "request_to_join": + return GroupJoinPolicy.requestToJoin + case "other": + return GroupJoinPolicy.other + default: + return GroupJoinPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Updated group join policy. + open class GroupJoinPolicyUpdatedDetails: CustomStringConvertible { + /// Is company managed group. Might be missing due to historical data gap. + public let isCompanyManaged: Bool? + /// Group join policy. + public let joinPolicy: TeamLog.GroupJoinPolicy? + public init(isCompanyManaged: Bool? = nil, joinPolicy: TeamLog.GroupJoinPolicy? = nil) { + self.isCompanyManaged = isCompanyManaged + self.joinPolicy = joinPolicy + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupJoinPolicyUpdatedDetailsSerializer().serialize(self)))" + } + } + open class GroupJoinPolicyUpdatedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupJoinPolicyUpdatedDetails) -> JSON { + let output = [ + "is_company_managed": NullableSerializer(Serialization._BoolSerializer).serialize(value.isCompanyManaged), + "join_policy": NullableSerializer(TeamLog.GroupJoinPolicySerializer()).serialize(value.joinPolicy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupJoinPolicyUpdatedDetails { + switch json { + case .dictionary(let dict): + let isCompanyManaged = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["is_company_managed"] ?? .null) + let joinPolicy = NullableSerializer(TeamLog.GroupJoinPolicySerializer()).deserialize(dict["join_policy"] ?? .null) + return GroupJoinPolicyUpdatedDetails(isCompanyManaged: isCompanyManaged, joinPolicy: joinPolicy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupJoinPolicyUpdatedType struct + open class GroupJoinPolicyUpdatedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupJoinPolicyUpdatedTypeSerializer().serialize(self)))" + } + } + open class GroupJoinPolicyUpdatedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupJoinPolicyUpdatedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupJoinPolicyUpdatedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupJoinPolicyUpdatedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Group's logged information. + open class GroupLogInfo: CustomStringConvertible { + /// The unique id of this group. Might be missing due to historical data gap. + public let groupId: String? + /// The name of this group. + public let displayName: String + /// External group ID. Might be missing due to historical data gap. + public let externalId: String? + public init(displayName: String, groupId: String? = nil, externalId: String? = nil) { + nullableValidator(stringValidator())(groupId) + self.groupId = groupId + stringValidator()(displayName) + self.displayName = displayName + nullableValidator(stringValidator())(externalId) + self.externalId = externalId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupLogInfoSerializer().serialize(self)))" + } + } + open class GroupLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupLogInfo) -> JSON { + let output = [ + "display_name": Serialization._StringSerializer.serialize(value.displayName), + "group_id": NullableSerializer(Serialization._StringSerializer).serialize(value.groupId), + "external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.externalId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupLogInfo { + switch json { + case .dictionary(let dict): + let displayName = Serialization._StringSerializer.deserialize(dict["display_name"] ?? .null) + let groupId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["group_id"] ?? .null) + let externalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["external_id"] ?? .null) + return GroupLogInfo(displayName: displayName, groupId: groupId, externalId: externalId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Moved group. + open class GroupMovedDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMovedDetailsSerializer().serialize(self)))" + } + } + open class GroupMovedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMovedDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMovedDetails { + switch json { + case .dictionary(_): + return GroupMovedDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupMovedType struct + open class GroupMovedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupMovedTypeSerializer().serialize(self)))" + } + } + open class GroupMovedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupMovedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupMovedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupMovedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed external ID for group. + open class GroupRemoveExternalIdDetails: CustomStringConvertible { + /// Old external id. + public let previousValue: String + public init(previousValue: String) { + stringValidator()(previousValue) + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupRemoveExternalIdDetailsSerializer().serialize(self)))" + } + } + open class GroupRemoveExternalIdDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupRemoveExternalIdDetails) -> JSON { + let output = [ + "previous_value": Serialization._StringSerializer.serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupRemoveExternalIdDetails { + switch json { + case .dictionary(let dict): + let previousValue = Serialization._StringSerializer.deserialize(dict["previous_value"] ?? .null) + return GroupRemoveExternalIdDetails(previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupRemoveExternalIdType struct + open class GroupRemoveExternalIdType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupRemoveExternalIdTypeSerializer().serialize(self)))" + } + } + open class GroupRemoveExternalIdTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupRemoveExternalIdType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupRemoveExternalIdType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupRemoveExternalIdType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed team members from group. + open class GroupRemoveMemberDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupRemoveMemberDetailsSerializer().serialize(self)))" + } + } + open class GroupRemoveMemberDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupRemoveMemberDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupRemoveMemberDetails { + switch json { + case .dictionary(_): + return GroupRemoveMemberDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupRemoveMemberType struct + open class GroupRemoveMemberType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupRemoveMemberTypeSerializer().serialize(self)))" + } + } + open class GroupRemoveMemberTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupRemoveMemberType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupRemoveMemberType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupRemoveMemberType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Renamed group. + open class GroupRenameDetails: CustomStringConvertible { + /// Previous display name. + public let previousValue: String + /// New display name. + public let newValue: String + public init(previousValue: String, newValue: String) { + stringValidator()(previousValue) + self.previousValue = previousValue + stringValidator()(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupRenameDetailsSerializer().serialize(self)))" + } + } + open class GroupRenameDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupRenameDetails) -> JSON { + let output = [ + "previous_value": Serialization._StringSerializer.serialize(value.previousValue), + "new_value": Serialization._StringSerializer.serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupRenameDetails { + switch json { + case .dictionary(let dict): + let previousValue = Serialization._StringSerializer.deserialize(dict["previous_value"] ?? .null) + let newValue = Serialization._StringSerializer.deserialize(dict["new_value"] ?? .null) + return GroupRenameDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupRenameType struct + open class GroupRenameType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupRenameTypeSerializer().serialize(self)))" + } + } + open class GroupRenameTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupRenameType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupRenameType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupRenameType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed who can create groups. + open class GroupUserManagementChangePolicyDetails: CustomStringConvertible { + /// New group users management policy. + public let newValue: TeamPolicies.GroupCreation + /// Previous group users management policy. Might be missing due to historical data gap. + public let previousValue: TeamPolicies.GroupCreation? + public init(newValue: TeamPolicies.GroupCreation, previousValue: TeamPolicies.GroupCreation? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupUserManagementChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class GroupUserManagementChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupUserManagementChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamPolicies.GroupCreationSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamPolicies.GroupCreationSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupUserManagementChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamPolicies.GroupCreationSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamPolicies.GroupCreationSerializer()).deserialize(dict["previous_value"] ?? .null) + return GroupUserManagementChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GroupUserManagementChangePolicyType struct + open class GroupUserManagementChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupUserManagementChangePolicyTypeSerializer().serialize(self)))" + } + } + open class GroupUserManagementChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupUserManagementChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GroupUserManagementChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return GroupUserManagementChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The IdentifierType union + public enum IdentifierType: CustomStringConvertible { + /// An unspecified error. + case email + /// An unspecified error. + case facebookProfileName + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(IdentifierTypeSerializer().serialize(self)))" + } + } + open class IdentifierTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: IdentifierType) -> JSON { + switch value { + case .email: + var d = [String: JSON]() + d[".tag"] = .str("email") + return .dictionary(d) + case .facebookProfileName: + var d = [String: JSON]() + d[".tag"] = .str("facebook_profile_name") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> IdentifierType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "email": + return IdentifierType.email + case "facebook_profile_name": + return IdentifierType.facebookProfileName + case "other": + return IdentifierType.other + default: + return IdentifierType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Additional information relevant when a new member joins the team. + open class JoinTeamDetails: CustomStringConvertible { + /// Linked applications. + public let linkedApps: Array + /// Linked devices. + public let linkedDevices: Array + /// Linked shared folders. + public let linkedSharedFolders: Array + public init(linkedApps: Array, linkedDevices: Array, linkedSharedFolders: Array) { + self.linkedApps = linkedApps + self.linkedDevices = linkedDevices + self.linkedSharedFolders = linkedSharedFolders + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(JoinTeamDetailsSerializer().serialize(self)))" + } + } + open class JoinTeamDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: JoinTeamDetails) -> JSON { + let output = [ + "linked_apps": ArraySerializer(TeamLog.UserLinkedAppLogInfoSerializer()).serialize(value.linkedApps), + "linked_devices": ArraySerializer(TeamLog.LinkedDeviceLogInfoSerializer()).serialize(value.linkedDevices), + "linked_shared_folders": ArraySerializer(TeamLog.FolderLogInfoSerializer()).serialize(value.linkedSharedFolders), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> JoinTeamDetails { + switch json { + case .dictionary(let dict): + let linkedApps = ArraySerializer(TeamLog.UserLinkedAppLogInfoSerializer()).deserialize(dict["linked_apps"] ?? .null) + let linkedDevices = ArraySerializer(TeamLog.LinkedDeviceLogInfoSerializer()).deserialize(dict["linked_devices"] ?? .null) + let linkedSharedFolders = ArraySerializer(TeamLog.FolderLogInfoSerializer()).deserialize(dict["linked_shared_folders"] ?? .null) + return JoinTeamDetails(linkedApps: linkedApps, linkedDevices: linkedDevices, linkedSharedFolders: linkedSharedFolders) + default: + fatalError("Type error deserializing") + } + } + } + + /// Information on sessions, in legacy format + open class LegacyDeviceSessionLogInfo: TeamLog.DeviceSessionLogInfo { + /// Session unique id. Might be missing due to historical data gap. + public let sessionInfo: TeamLog.SessionLogInfo? + /// The device name. Might be missing due to historical data gap. + public let displayName: String? + /// Is device managed by emm. Might be missing due to historical data gap. + public let isEmmManaged: Bool? + /// Information on the hosting platform. Might be missing due to historical data gap. + public let platform: String? + /// The mac address of the last activity from this session. Might be missing due to historical data gap. + public let macAddress: String? + /// The hosting OS version. Might be missing due to historical data gap. + public let osVersion: String? + /// Information on the hosting device type. Might be missing due to historical data gap. + public let deviceType: String? + /// The Dropbox client version. Might be missing due to historical data gap. + public let clientVersion: String? + /// Alternative unique device session id, instead of session id field. Might be missing due to historical data + /// gap. + public let legacyUniqId: String? + public init(ipAddress: String? = nil, created: Date? = nil, updated: Date? = nil, sessionInfo: TeamLog.SessionLogInfo? = nil, displayName: String? = nil, isEmmManaged: Bool? = nil, platform: String? = nil, macAddress: String? = nil, osVersion: String? = nil, deviceType: String? = nil, clientVersion: String? = nil, legacyUniqId: String? = nil) { + self.sessionInfo = sessionInfo + nullableValidator(stringValidator())(displayName) + self.displayName = displayName + self.isEmmManaged = isEmmManaged + nullableValidator(stringValidator())(platform) + self.platform = platform + nullableValidator(stringValidator())(macAddress) + self.macAddress = macAddress + nullableValidator(stringValidator())(osVersion) + self.osVersion = osVersion + nullableValidator(stringValidator())(deviceType) + self.deviceType = deviceType + nullableValidator(stringValidator())(clientVersion) + self.clientVersion = clientVersion + nullableValidator(stringValidator())(legacyUniqId) + self.legacyUniqId = legacyUniqId + super.init(ipAddress: ipAddress, created: created, updated: updated) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LegacyDeviceSessionLogInfoSerializer().serialize(self)))" + } + } + open class LegacyDeviceSessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LegacyDeviceSessionLogInfo) -> JSON { + let output = [ + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + "created": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.created), + "updated": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.updated), + "session_info": NullableSerializer(TeamLog.SessionLogInfoSerializer()).serialize(value.sessionInfo), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + "is_emm_managed": NullableSerializer(Serialization._BoolSerializer).serialize(value.isEmmManaged), + "platform": NullableSerializer(Serialization._StringSerializer).serialize(value.platform), + "mac_address": NullableSerializer(Serialization._StringSerializer).serialize(value.macAddress), + "os_version": NullableSerializer(Serialization._StringSerializer).serialize(value.osVersion), + "device_type": NullableSerializer(Serialization._StringSerializer).serialize(value.deviceType), + "client_version": NullableSerializer(Serialization._StringSerializer).serialize(value.clientVersion), + "legacy_uniq_id": NullableSerializer(Serialization._StringSerializer).serialize(value.legacyUniqId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LegacyDeviceSessionLogInfo { + switch json { + case .dictionary(let dict): + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + let created = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["created"] ?? .null) + let updated = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["updated"] ?? .null) + let sessionInfo = NullableSerializer(TeamLog.SessionLogInfoSerializer()).deserialize(dict["session_info"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + let isEmmManaged = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["is_emm_managed"] ?? .null) + let platform = NullableSerializer(Serialization._StringSerializer).deserialize(dict["platform"] ?? .null) + let macAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["mac_address"] ?? .null) + let osVersion = NullableSerializer(Serialization._StringSerializer).deserialize(dict["os_version"] ?? .null) + let deviceType = NullableSerializer(Serialization._StringSerializer).deserialize(dict["device_type"] ?? .null) + let clientVersion = NullableSerializer(Serialization._StringSerializer).deserialize(dict["client_version"] ?? .null) + let legacyUniqId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["legacy_uniq_id"] ?? .null) + return LegacyDeviceSessionLogInfo(ipAddress: ipAddress, created: created, updated: updated, sessionInfo: sessionInfo, displayName: displayName, isEmmManaged: isEmmManaged, platform: platform, macAddress: macAddress, osVersion: osVersion, deviceType: deviceType, clientVersion: clientVersion, legacyUniqId: legacyUniqId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The device sessions that user is linked to. + public enum LinkedDeviceLogInfo: CustomStringConvertible { + /// mobile device session's details. + case mobileDeviceSession(TeamLog.MobileDeviceSessionLogInfo) + /// desktop device session's details. + case desktopDeviceSession(TeamLog.DesktopDeviceSessionLogInfo) + /// web device session's details. + case webDeviceSession(TeamLog.WebDeviceSessionLogInfo) + /// legacy device session's details. + case legacyDeviceSession(TeamLog.LegacyDeviceSessionLogInfo) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LinkedDeviceLogInfoSerializer().serialize(self)))" + } + } + open class LinkedDeviceLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LinkedDeviceLogInfo) -> JSON { + switch value { + case .mobileDeviceSession(let arg): + var d = Serialization.getFields(TeamLog.MobileDeviceSessionLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("mobile_device_session") + return .dictionary(d) + case .desktopDeviceSession(let arg): + var d = Serialization.getFields(TeamLog.DesktopDeviceSessionLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("desktop_device_session") + return .dictionary(d) + case .webDeviceSession(let arg): + var d = Serialization.getFields(TeamLog.WebDeviceSessionLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("web_device_session") + return .dictionary(d) + case .legacyDeviceSession(let arg): + var d = Serialization.getFields(TeamLog.LegacyDeviceSessionLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("legacy_device_session") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LinkedDeviceLogInfo { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "mobile_device_session": + let v = TeamLog.MobileDeviceSessionLogInfoSerializer().deserialize(json) + return LinkedDeviceLogInfo.mobileDeviceSession(v) + case "desktop_device_session": + let v = TeamLog.DesktopDeviceSessionLogInfoSerializer().deserialize(json) + return LinkedDeviceLogInfo.desktopDeviceSession(v) + case "web_device_session": + let v = TeamLog.WebDeviceSessionLogInfoSerializer().deserialize(json) + return LinkedDeviceLogInfo.webDeviceSession(v) + case "legacy_device_session": + let v = TeamLog.LegacyDeviceSessionLogInfoSerializer().deserialize(json) + return LinkedDeviceLogInfo.legacyDeviceSession(v) + case "other": + return LinkedDeviceLogInfo.other + default: + return LinkedDeviceLogInfo.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Failed to sign in. + open class LoginFailDetails: CustomStringConvertible { + /// Tells if the login device is EMM managed. Might be missing due to historical data gap. + public let isEmmManaged: Bool? + /// Login method. + public let loginMethod: TeamLog.LoginMethod + /// Error details. + public let errorDetails: TeamLog.FailureDetailsLogInfo + public init(loginMethod: TeamLog.LoginMethod, errorDetails: TeamLog.FailureDetailsLogInfo, isEmmManaged: Bool? = nil) { + self.isEmmManaged = isEmmManaged + self.loginMethod = loginMethod + self.errorDetails = errorDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LoginFailDetailsSerializer().serialize(self)))" + } + } + open class LoginFailDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LoginFailDetails) -> JSON { + let output = [ + "login_method": TeamLog.LoginMethodSerializer().serialize(value.loginMethod), + "error_details": TeamLog.FailureDetailsLogInfoSerializer().serialize(value.errorDetails), + "is_emm_managed": NullableSerializer(Serialization._BoolSerializer).serialize(value.isEmmManaged), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LoginFailDetails { + switch json { + case .dictionary(let dict): + let loginMethod = TeamLog.LoginMethodSerializer().deserialize(dict["login_method"] ?? .null) + let errorDetails = TeamLog.FailureDetailsLogInfoSerializer().deserialize(dict["error_details"] ?? .null) + let isEmmManaged = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["is_emm_managed"] ?? .null) + return LoginFailDetails(loginMethod: loginMethod, errorDetails: errorDetails, isEmmManaged: isEmmManaged) + default: + fatalError("Type error deserializing") + } + } + } + + /// The LoginFailType struct + open class LoginFailType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LoginFailTypeSerializer().serialize(self)))" + } + } + open class LoginFailTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LoginFailType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LoginFailType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return LoginFailType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The LoginMethod union + public enum LoginMethod: CustomStringConvertible { + /// An unspecified error. + case password + /// An unspecified error. + case twoFactorAuthentication + /// An unspecified error. + case saml + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LoginMethodSerializer().serialize(self)))" + } + } + open class LoginMethodSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LoginMethod) -> JSON { + switch value { + case .password: + var d = [String: JSON]() + d[".tag"] = .str("password") + return .dictionary(d) + case .twoFactorAuthentication: + var d = [String: JSON]() + d[".tag"] = .str("two_factor_authentication") + return .dictionary(d) + case .saml: + var d = [String: JSON]() + d[".tag"] = .str("saml") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> LoginMethod { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "password": + return LoginMethod.password + case "two_factor_authentication": + return LoginMethod.twoFactorAuthentication + case "saml": + return LoginMethod.saml + case "other": + return LoginMethod.other + default: + return LoginMethod.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Signed in. + open class LoginSuccessDetails: CustomStringConvertible { + /// Tells if the login device is EMM managed. Might be missing due to historical data gap. + public let isEmmManaged: Bool? + /// Login method. + public let loginMethod: TeamLog.LoginMethod + public init(loginMethod: TeamLog.LoginMethod, isEmmManaged: Bool? = nil) { + self.isEmmManaged = isEmmManaged + self.loginMethod = loginMethod + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LoginSuccessDetailsSerializer().serialize(self)))" + } + } + open class LoginSuccessDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LoginSuccessDetails) -> JSON { + let output = [ + "login_method": TeamLog.LoginMethodSerializer().serialize(value.loginMethod), + "is_emm_managed": NullableSerializer(Serialization._BoolSerializer).serialize(value.isEmmManaged), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LoginSuccessDetails { + switch json { + case .dictionary(let dict): + let loginMethod = TeamLog.LoginMethodSerializer().deserialize(dict["login_method"] ?? .null) + let isEmmManaged = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["is_emm_managed"] ?? .null) + return LoginSuccessDetails(loginMethod: loginMethod, isEmmManaged: isEmmManaged) + default: + fatalError("Type error deserializing") + } + } + } + + /// The LoginSuccessType struct + open class LoginSuccessType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LoginSuccessTypeSerializer().serialize(self)))" + } + } + open class LoginSuccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LoginSuccessType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LoginSuccessType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return LoginSuccessType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Signed out. + open class LogoutDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LogoutDetailsSerializer().serialize(self)))" + } + } + open class LogoutDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LogoutDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LogoutDetails { + switch json { + case .dictionary(_): + return LogoutDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The LogoutType struct + open class LogoutType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(LogoutTypeSerializer().serialize(self)))" + } + } + open class LogoutTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: LogoutType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> LogoutType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return LogoutType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added team member name. + open class MemberAddNameDetails: CustomStringConvertible { + /// New user's name. + public let newValue: TeamLog.UserNameLogInfo + public init(newValue: TeamLog.UserNameLogInfo) { + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberAddNameDetailsSerializer().serialize(self)))" + } + } + open class MemberAddNameDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberAddNameDetails) -> JSON { + let output = [ + "new_value": TeamLog.UserNameLogInfoSerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberAddNameDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.UserNameLogInfoSerializer().deserialize(dict["new_value"] ?? .null) + return MemberAddNameDetails(newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberAddNameType struct + open class MemberAddNameType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberAddNameTypeSerializer().serialize(self)))" + } + } + open class MemberAddNameTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberAddNameType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberAddNameType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberAddNameType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed team member admin role. + open class MemberChangeAdminRoleDetails: CustomStringConvertible { + /// New admin role. This field is relevant when the admin role is changed or whenthe user role changes from no + /// admin rights to with admin rights. + public let newValue: TeamLog.AdminRole? + /// Previous admin role. This field is relevant when the admin role is changed or when the admin role is + /// removed. + public let previousValue: TeamLog.AdminRole? + public init(newValue: TeamLog.AdminRole? = nil, previousValue: TeamLog.AdminRole? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeAdminRoleDetailsSerializer().serialize(self)))" + } + } + open class MemberChangeAdminRoleDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeAdminRoleDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(TeamLog.AdminRoleSerializer()).serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.AdminRoleSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeAdminRoleDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(TeamLog.AdminRoleSerializer()).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.AdminRoleSerializer()).deserialize(dict["previous_value"] ?? .null) + return MemberChangeAdminRoleDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberChangeAdminRoleType struct + open class MemberChangeAdminRoleType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeAdminRoleTypeSerializer().serialize(self)))" + } + } + open class MemberChangeAdminRoleTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeAdminRoleType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeAdminRoleType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberChangeAdminRoleType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed team member email. + open class MemberChangeEmailDetails: CustomStringConvertible { + /// New email. + public let newValue: String + /// Previous email. Might be missing due to historical data gap. + public let previousValue: String? + public init(newValue: String, previousValue: String? = nil) { + stringValidator(maxLength: 255)(newValue) + self.newValue = newValue + nullableValidator(stringValidator(maxLength: 255))(previousValue) + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeEmailDetailsSerializer().serialize(self)))" + } + } + open class MemberChangeEmailDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeEmailDetails) -> JSON { + let output = [ + "new_value": Serialization._StringSerializer.serialize(value.newValue), + "previous_value": NullableSerializer(Serialization._StringSerializer).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeEmailDetails { + switch json { + case .dictionary(let dict): + let newValue = Serialization._StringSerializer.deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_value"] ?? .null) + return MemberChangeEmailDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberChangeEmailType struct + open class MemberChangeEmailType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeEmailTypeSerializer().serialize(self)))" + } + } + open class MemberChangeEmailTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeEmailType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeEmailType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberChangeEmailType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed membership type (limited/full) of member. + open class MemberChangeMembershipTypeDetails: CustomStringConvertible { + /// Previous membership type. + public let prevValue: TeamLog.TeamMembershipType + /// New membership type. + public let newValue: TeamLog.TeamMembershipType + public init(prevValue: TeamLog.TeamMembershipType, newValue: TeamLog.TeamMembershipType) { + self.prevValue = prevValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeMembershipTypeDetailsSerializer().serialize(self)))" + } + } + open class MemberChangeMembershipTypeDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeMembershipTypeDetails) -> JSON { + let output = [ + "prev_value": TeamLog.TeamMembershipTypeSerializer().serialize(value.prevValue), + "new_value": TeamLog.TeamMembershipTypeSerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeMembershipTypeDetails { + switch json { + case .dictionary(let dict): + let prevValue = TeamLog.TeamMembershipTypeSerializer().deserialize(dict["prev_value"] ?? .null) + let newValue = TeamLog.TeamMembershipTypeSerializer().deserialize(dict["new_value"] ?? .null) + return MemberChangeMembershipTypeDetails(prevValue: prevValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberChangeMembershipTypeType struct + open class MemberChangeMembershipTypeType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeMembershipTypeTypeSerializer().serialize(self)))" + } + } + open class MemberChangeMembershipTypeTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeMembershipTypeType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeMembershipTypeType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberChangeMembershipTypeType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed team member name. + open class MemberChangeNameDetails: CustomStringConvertible { + /// New user's name. + public let newValue: TeamLog.UserNameLogInfo + /// Previous user's name. Might be missing due to historical data gap. + public let previousValue: TeamLog.UserNameLogInfo? + public init(newValue: TeamLog.UserNameLogInfo, previousValue: TeamLog.UserNameLogInfo? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeNameDetailsSerializer().serialize(self)))" + } + } + open class MemberChangeNameDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeNameDetails) -> JSON { + let output = [ + "new_value": TeamLog.UserNameLogInfoSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.UserNameLogInfoSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeNameDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.UserNameLogInfoSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.UserNameLogInfoSerializer()).deserialize(dict["previous_value"] ?? .null) + return MemberChangeNameDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberChangeNameType struct + open class MemberChangeNameType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeNameTypeSerializer().serialize(self)))" + } + } + open class MemberChangeNameTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeNameType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeNameType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberChangeNameType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed member status (invited, joined, suspended, etc.). + open class MemberChangeStatusDetails: CustomStringConvertible { + /// Previous member status. Might be missing due to historical data gap. + public let previousValue: TeamLog.MemberStatus? + /// New member status. + public let newValue: TeamLog.MemberStatus + /// Additional information indicating the action taken that caused status change. + public let action: TeamLog.ActionDetails? + public init(newValue: TeamLog.MemberStatus, previousValue: TeamLog.MemberStatus? = nil, action: TeamLog.ActionDetails? = nil) { + self.previousValue = previousValue + self.newValue = newValue + self.action = action + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeStatusDetailsSerializer().serialize(self)))" + } + } + open class MemberChangeStatusDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeStatusDetails) -> JSON { + let output = [ + "new_value": TeamLog.MemberStatusSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.MemberStatusSerializer()).serialize(value.previousValue), + "action": NullableSerializer(TeamLog.ActionDetailsSerializer()).serialize(value.action), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeStatusDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.MemberStatusSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.MemberStatusSerializer()).deserialize(dict["previous_value"] ?? .null) + let action = NullableSerializer(TeamLog.ActionDetailsSerializer()).deserialize(dict["action"] ?? .null) + return MemberChangeStatusDetails(newValue: newValue, previousValue: previousValue, action: action) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberChangeStatusType struct + open class MemberChangeStatusType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberChangeStatusTypeSerializer().serialize(self)))" + } + } + open class MemberChangeStatusTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberChangeStatusType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberChangeStatusType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberChangeStatusType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Cleared manually added contacts. + open class MemberDeleteManualContactsDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberDeleteManualContactsDetailsSerializer().serialize(self)))" + } + } + open class MemberDeleteManualContactsDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberDeleteManualContactsDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberDeleteManualContactsDetails { + switch json { + case .dictionary(_): + return MemberDeleteManualContactsDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberDeleteManualContactsType struct + open class MemberDeleteManualContactsType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberDeleteManualContactsTypeSerializer().serialize(self)))" + } + } + open class MemberDeleteManualContactsTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberDeleteManualContactsType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberDeleteManualContactsType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberDeleteManualContactsType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Permanently deleted contents of deleted team member account. + open class MemberPermanentlyDeleteAccountContentsDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberPermanentlyDeleteAccountContentsDetailsSerializer().serialize(self)))" + } + } + open class MemberPermanentlyDeleteAccountContentsDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberPermanentlyDeleteAccountContentsDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberPermanentlyDeleteAccountContentsDetails { + switch json { + case .dictionary(_): + return MemberPermanentlyDeleteAccountContentsDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberPermanentlyDeleteAccountContentsType struct + open class MemberPermanentlyDeleteAccountContentsType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberPermanentlyDeleteAccountContentsTypeSerializer().serialize(self)))" + } + } + open class MemberPermanentlyDeleteAccountContentsTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberPermanentlyDeleteAccountContentsType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberPermanentlyDeleteAccountContentsType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberPermanentlyDeleteAccountContentsType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberRemoveActionType union + public enum MemberRemoveActionType: CustomStringConvertible { + /// An unspecified error. + case delete + /// An unspecified error. + case offboard + /// An unspecified error. + case leave + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberRemoveActionTypeSerializer().serialize(self)))" + } + } + open class MemberRemoveActionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberRemoveActionType) -> JSON { + switch value { + case .delete: + var d = [String: JSON]() + d[".tag"] = .str("delete") + return .dictionary(d) + case .offboard: + var d = [String: JSON]() + d[".tag"] = .str("offboard") + return .dictionary(d) + case .leave: + var d = [String: JSON]() + d[".tag"] = .str("leave") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberRemoveActionType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "delete": + return MemberRemoveActionType.delete + case "offboard": + return MemberRemoveActionType.offboard + case "leave": + return MemberRemoveActionType.leave + case "other": + return MemberRemoveActionType.other + default: + return MemberRemoveActionType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Changed whether users can find team when not invited. + open class MemberRequestsChangePolicyDetails: CustomStringConvertible { + /// New member change requests policy. + public let newValue: TeamLog.MemberRequestsPolicy + /// Previous member change requests policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.MemberRequestsPolicy? + public init(newValue: TeamLog.MemberRequestsPolicy, previousValue: TeamLog.MemberRequestsPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberRequestsChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class MemberRequestsChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberRequestsChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.MemberRequestsPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.MemberRequestsPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberRequestsChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.MemberRequestsPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.MemberRequestsPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return MemberRequestsChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberRequestsChangePolicyType struct + open class MemberRequestsChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberRequestsChangePolicyTypeSerializer().serialize(self)))" + } + } + open class MemberRequestsChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberRequestsChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberRequestsChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberRequestsChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberRequestsPolicy union + public enum MemberRequestsPolicy: CustomStringConvertible { + /// An unspecified error. + case autoAccept + /// An unspecified error. + case disabled + /// An unspecified error. + case requireApproval + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberRequestsPolicySerializer().serialize(self)))" + } + } + open class MemberRequestsPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberRequestsPolicy) -> JSON { + switch value { + case .autoAccept: + var d = [String: JSON]() + d[".tag"] = .str("auto_accept") + return .dictionary(d) + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .requireApproval: + var d = [String: JSON]() + d[".tag"] = .str("require_approval") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberRequestsPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "auto_accept": + return MemberRequestsPolicy.autoAccept + case "disabled": + return MemberRequestsPolicy.disabled + case "require_approval": + return MemberRequestsPolicy.requireApproval + case "other": + return MemberRequestsPolicy.other + default: + return MemberRequestsPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Set custom member space limit. + open class MemberSpaceLimitsAddCustomQuotaDetails: CustomStringConvertible { + /// New custom quota value in bytes. + public let newValue: UInt64 + public init(newValue: UInt64) { + comparableValidator()(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsAddCustomQuotaDetailsSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsAddCustomQuotaDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsAddCustomQuotaDetails) -> JSON { + let output = [ + "new_value": Serialization._UInt64Serializer.serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsAddCustomQuotaDetails { + switch json { + case .dictionary(let dict): + let newValue = Serialization._UInt64Serializer.deserialize(dict["new_value"] ?? .null) + return MemberSpaceLimitsAddCustomQuotaDetails(newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSpaceLimitsAddCustomQuotaType struct + open class MemberSpaceLimitsAddCustomQuotaType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsAddCustomQuotaTypeSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsAddCustomQuotaTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsAddCustomQuotaType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsAddCustomQuotaType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSpaceLimitsAddCustomQuotaType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added members to member space limit exception list. + open class MemberSpaceLimitsAddExceptionDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsAddExceptionDetailsSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsAddExceptionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsAddExceptionDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsAddExceptionDetails { + switch json { + case .dictionary(_): + return MemberSpaceLimitsAddExceptionDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSpaceLimitsAddExceptionType struct + open class MemberSpaceLimitsAddExceptionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsAddExceptionTypeSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsAddExceptionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsAddExceptionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsAddExceptionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSpaceLimitsAddExceptionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed member space limit type for team. + open class MemberSpaceLimitsChangeCapsTypePolicyDetails: CustomStringConvertible { + /// Previous space limit type. + public let previousValue: TeamLog.SpaceCapsType + /// New space limit type. + public let newValue: TeamLog.SpaceCapsType + public init(previousValue: TeamLog.SpaceCapsType, newValue: TeamLog.SpaceCapsType) { + self.previousValue = previousValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsChangeCapsTypePolicyDetailsSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsChangeCapsTypePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsChangeCapsTypePolicyDetails) -> JSON { + let output = [ + "previous_value": TeamLog.SpaceCapsTypeSerializer().serialize(value.previousValue), + "new_value": TeamLog.SpaceCapsTypeSerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsChangeCapsTypePolicyDetails { + switch json { + case .dictionary(let dict): + let previousValue = TeamLog.SpaceCapsTypeSerializer().deserialize(dict["previous_value"] ?? .null) + let newValue = TeamLog.SpaceCapsTypeSerializer().deserialize(dict["new_value"] ?? .null) + return MemberSpaceLimitsChangeCapsTypePolicyDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSpaceLimitsChangeCapsTypePolicyType struct + open class MemberSpaceLimitsChangeCapsTypePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsChangeCapsTypePolicyTypeSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsChangeCapsTypePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsChangeCapsTypePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsChangeCapsTypePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSpaceLimitsChangeCapsTypePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed custom member space limit. + open class MemberSpaceLimitsChangeCustomQuotaDetails: CustomStringConvertible { + /// Previous custom quota value in bytes. + public let previousValue: UInt64 + /// New custom quota value in bytes. + public let newValue: UInt64 + public init(previousValue: UInt64, newValue: UInt64) { + comparableValidator()(previousValue) + self.previousValue = previousValue + comparableValidator()(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsChangeCustomQuotaDetailsSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsChangeCustomQuotaDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsChangeCustomQuotaDetails) -> JSON { + let output = [ + "previous_value": Serialization._UInt64Serializer.serialize(value.previousValue), + "new_value": Serialization._UInt64Serializer.serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsChangeCustomQuotaDetails { + switch json { + case .dictionary(let dict): + let previousValue = Serialization._UInt64Serializer.deserialize(dict["previous_value"] ?? .null) + let newValue = Serialization._UInt64Serializer.deserialize(dict["new_value"] ?? .null) + return MemberSpaceLimitsChangeCustomQuotaDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSpaceLimitsChangeCustomQuotaType struct + open class MemberSpaceLimitsChangeCustomQuotaType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsChangeCustomQuotaTypeSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsChangeCustomQuotaTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsChangeCustomQuotaType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsChangeCustomQuotaType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSpaceLimitsChangeCustomQuotaType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed team default member space limit. + open class MemberSpaceLimitsChangePolicyDetails: CustomStringConvertible { + /// Previous team default limit value in bytes. Might be missing due to historical data gap. + public let previousValue: UInt64? + /// New team default limit value in bytes. Might be missing due to historical data gap. + public let newValue: UInt64? + public init(previousValue: UInt64? = nil, newValue: UInt64? = nil) { + nullableValidator(comparableValidator())(previousValue) + self.previousValue = previousValue + nullableValidator(comparableValidator())(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsChangePolicyDetails) -> JSON { + let output = [ + "previous_value": NullableSerializer(Serialization._UInt64Serializer).serialize(value.previousValue), + "new_value": NullableSerializer(Serialization._UInt64Serializer).serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsChangePolicyDetails { + switch json { + case .dictionary(let dict): + let previousValue = NullableSerializer(Serialization._UInt64Serializer).deserialize(dict["previous_value"] ?? .null) + let newValue = NullableSerializer(Serialization._UInt64Serializer).deserialize(dict["new_value"] ?? .null) + return MemberSpaceLimitsChangePolicyDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSpaceLimitsChangePolicyType struct + open class MemberSpaceLimitsChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsChangePolicyTypeSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSpaceLimitsChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed space limit status. + open class MemberSpaceLimitsChangeStatusDetails: CustomStringConvertible { + /// Previous storage quota status. + public let previousValue: TeamLog.SpaceLimitsStatus + /// New storage quota status. + public let newValue: TeamLog.SpaceLimitsStatus + public init(previousValue: TeamLog.SpaceLimitsStatus, newValue: TeamLog.SpaceLimitsStatus) { + self.previousValue = previousValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsChangeStatusDetailsSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsChangeStatusDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsChangeStatusDetails) -> JSON { + let output = [ + "previous_value": TeamLog.SpaceLimitsStatusSerializer().serialize(value.previousValue), + "new_value": TeamLog.SpaceLimitsStatusSerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsChangeStatusDetails { + switch json { + case .dictionary(let dict): + let previousValue = TeamLog.SpaceLimitsStatusSerializer().deserialize(dict["previous_value"] ?? .null) + let newValue = TeamLog.SpaceLimitsStatusSerializer().deserialize(dict["new_value"] ?? .null) + return MemberSpaceLimitsChangeStatusDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSpaceLimitsChangeStatusType struct + open class MemberSpaceLimitsChangeStatusType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsChangeStatusTypeSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsChangeStatusTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsChangeStatusType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsChangeStatusType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSpaceLimitsChangeStatusType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed custom member space limit. + open class MemberSpaceLimitsRemoveCustomQuotaDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsRemoveCustomQuotaDetailsSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsRemoveCustomQuotaDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsRemoveCustomQuotaDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsRemoveCustomQuotaDetails { + switch json { + case .dictionary(_): + return MemberSpaceLimitsRemoveCustomQuotaDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSpaceLimitsRemoveCustomQuotaType struct + open class MemberSpaceLimitsRemoveCustomQuotaType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsRemoveCustomQuotaTypeSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsRemoveCustomQuotaTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsRemoveCustomQuotaType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsRemoveCustomQuotaType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSpaceLimitsRemoveCustomQuotaType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed members from member space limit exception list. + open class MemberSpaceLimitsRemoveExceptionDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsRemoveExceptionDetailsSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsRemoveExceptionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsRemoveExceptionDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsRemoveExceptionDetails { + switch json { + case .dictionary(_): + return MemberSpaceLimitsRemoveExceptionDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSpaceLimitsRemoveExceptionType struct + open class MemberSpaceLimitsRemoveExceptionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSpaceLimitsRemoveExceptionTypeSerializer().serialize(self)))" + } + } + open class MemberSpaceLimitsRemoveExceptionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSpaceLimitsRemoveExceptionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSpaceLimitsRemoveExceptionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSpaceLimitsRemoveExceptionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberStatus union + public enum MemberStatus: CustomStringConvertible { + /// An unspecified error. + case notJoined + /// An unspecified error. + case invited + /// An unspecified error. + case active + /// An unspecified error. + case suspended + /// An unspecified error. + case removed + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberStatusSerializer().serialize(self)))" + } + } + open class MemberStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberStatus) -> JSON { + switch value { + case .notJoined: + var d = [String: JSON]() + d[".tag"] = .str("not_joined") + return .dictionary(d) + case .invited: + var d = [String: JSON]() + d[".tag"] = .str("invited") + return .dictionary(d) + case .active: + var d = [String: JSON]() + d[".tag"] = .str("active") + return .dictionary(d) + case .suspended: + var d = [String: JSON]() + d[".tag"] = .str("suspended") + return .dictionary(d) + case .removed: + var d = [String: JSON]() + d[".tag"] = .str("removed") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "not_joined": + return MemberStatus.notJoined + case "invited": + return MemberStatus.invited + case "active": + return MemberStatus.active + case "suspended": + return MemberStatus.suspended + case "removed": + return MemberStatus.removed + case "other": + return MemberStatus.other + default: + return MemberStatus.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Suggested person to add to team. + open class MemberSuggestDetails: CustomStringConvertible { + /// suggested users emails. + public let suggestedMembers: Array + public init(suggestedMembers: Array) { + arrayValidator(itemValidator: stringValidator(maxLength: 255))(suggestedMembers) + self.suggestedMembers = suggestedMembers + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSuggestDetailsSerializer().serialize(self)))" + } + } + open class MemberSuggestDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSuggestDetails) -> JSON { + let output = [ + "suggested_members": ArraySerializer(Serialization._StringSerializer).serialize(value.suggestedMembers), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSuggestDetails { + switch json { + case .dictionary(let dict): + let suggestedMembers = ArraySerializer(Serialization._StringSerializer).deserialize(dict["suggested_members"] ?? .null) + return MemberSuggestDetails(suggestedMembers: suggestedMembers) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSuggestType struct + open class MemberSuggestType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSuggestTypeSerializer().serialize(self)))" + } + } + open class MemberSuggestTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSuggestType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSuggestType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSuggestType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled option for team members to suggest people to add to team. + open class MemberSuggestionsChangePolicyDetails: CustomStringConvertible { + /// New team member suggestions policy. + public let newValue: TeamLog.MemberSuggestionsPolicy + /// Previous team member suggestions policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.MemberSuggestionsPolicy? + public init(newValue: TeamLog.MemberSuggestionsPolicy, previousValue: TeamLog.MemberSuggestionsPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSuggestionsChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class MemberSuggestionsChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSuggestionsChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.MemberSuggestionsPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.MemberSuggestionsPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSuggestionsChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.MemberSuggestionsPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.MemberSuggestionsPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return MemberSuggestionsChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberSuggestionsChangePolicyType struct + open class MemberSuggestionsChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSuggestionsChangePolicyTypeSerializer().serialize(self)))" + } + } + open class MemberSuggestionsChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSuggestionsChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberSuggestionsChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberSuggestionsChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Member suggestions policy + public enum MemberSuggestionsPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberSuggestionsPolicySerializer().serialize(self)))" + } + } + open class MemberSuggestionsPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberSuggestionsPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MemberSuggestionsPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return MemberSuggestionsPolicy.disabled + case "enabled": + return MemberSuggestionsPolicy.enabled + case "other": + return MemberSuggestionsPolicy.other + default: + return MemberSuggestionsPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Transferred contents of deleted member account to another member. + open class MemberTransferAccountContentsDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberTransferAccountContentsDetailsSerializer().serialize(self)))" + } + } + open class MemberTransferAccountContentsDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberTransferAccountContentsDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberTransferAccountContentsDetails { + switch json { + case .dictionary(_): + return MemberTransferAccountContentsDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The MemberTransferAccountContentsType struct + open class MemberTransferAccountContentsType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MemberTransferAccountContentsTypeSerializer().serialize(self)))" + } + } + open class MemberTransferAccountContentsTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MemberTransferAccountContentsType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MemberTransferAccountContentsType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MemberTransferAccountContentsType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled Microsoft Office add-in. + open class MicrosoftOfficeAddinChangePolicyDetails: CustomStringConvertible { + /// New Microsoft Office addin policy. + public let newValue: TeamLog.MicrosoftOfficeAddinPolicy + /// Previous Microsoft Office addin policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.MicrosoftOfficeAddinPolicy? + public init(newValue: TeamLog.MicrosoftOfficeAddinPolicy, previousValue: TeamLog.MicrosoftOfficeAddinPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MicrosoftOfficeAddinChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class MicrosoftOfficeAddinChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MicrosoftOfficeAddinChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.MicrosoftOfficeAddinPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.MicrosoftOfficeAddinPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MicrosoftOfficeAddinChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.MicrosoftOfficeAddinPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.MicrosoftOfficeAddinPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return MicrosoftOfficeAddinChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The MicrosoftOfficeAddinChangePolicyType struct + open class MicrosoftOfficeAddinChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MicrosoftOfficeAddinChangePolicyTypeSerializer().serialize(self)))" + } + } + open class MicrosoftOfficeAddinChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MicrosoftOfficeAddinChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MicrosoftOfficeAddinChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return MicrosoftOfficeAddinChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Microsoft Office addin policy + public enum MicrosoftOfficeAddinPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MicrosoftOfficeAddinPolicySerializer().serialize(self)))" + } + } + open class MicrosoftOfficeAddinPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MicrosoftOfficeAddinPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> MicrosoftOfficeAddinPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return MicrosoftOfficeAddinPolicy.disabled + case "enabled": + return MicrosoftOfficeAddinPolicy.enabled + case "other": + return MicrosoftOfficeAddinPolicy.other + default: + return MicrosoftOfficeAddinPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// An indication that an error occurred while retrieving the event. Some attributes of the event may be omitted as + /// a result. + open class MissingDetails: CustomStringConvertible { + /// All the data that could be retrieved and converted from the source event. + public let sourceEventFields: String? + public init(sourceEventFields: String? = nil) { + nullableValidator(stringValidator())(sourceEventFields) + self.sourceEventFields = sourceEventFields + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MissingDetailsSerializer().serialize(self)))" + } + } + open class MissingDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MissingDetails) -> JSON { + let output = [ + "source_event_fields": NullableSerializer(Serialization._StringSerializer).serialize(value.sourceEventFields), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MissingDetails { + switch json { + case .dictionary(let dict): + let sourceEventFields = NullableSerializer(Serialization._StringSerializer).deserialize(dict["source_event_fields"] ?? .null) + return MissingDetails(sourceEventFields: sourceEventFields) + default: + fatalError("Type error deserializing") + } + } + } + + /// Information about linked Dropbox mobile client sessions + open class MobileDeviceSessionLogInfo: TeamLog.DeviceSessionLogInfo { + /// Mobile session unique id. Might be missing due to historical data gap. + public let sessionInfo: TeamLog.MobileSessionLogInfo? + /// The device name. + public let deviceName: String + /// The mobile application type. + public let clientType: Team.MobileClientPlatform + /// The Dropbox client version. + public let clientVersion: String? + /// The hosting OS version. + public let osVersion: String? + /// last carrier used by the device. + public let lastCarrier: String? + public init(deviceName: String, clientType: Team.MobileClientPlatform, ipAddress: String? = nil, created: Date? = nil, updated: Date? = nil, sessionInfo: TeamLog.MobileSessionLogInfo? = nil, clientVersion: String? = nil, osVersion: String? = nil, lastCarrier: String? = nil) { + self.sessionInfo = sessionInfo + stringValidator()(deviceName) + self.deviceName = deviceName + self.clientType = clientType + nullableValidator(stringValidator())(clientVersion) + self.clientVersion = clientVersion + nullableValidator(stringValidator())(osVersion) + self.osVersion = osVersion + nullableValidator(stringValidator())(lastCarrier) + self.lastCarrier = lastCarrier + super.init(ipAddress: ipAddress, created: created, updated: updated) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MobileDeviceSessionLogInfoSerializer().serialize(self)))" + } + } + open class MobileDeviceSessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MobileDeviceSessionLogInfo) -> JSON { + let output = [ + "device_name": Serialization._StringSerializer.serialize(value.deviceName), + "client_type": Team.MobileClientPlatformSerializer().serialize(value.clientType), + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + "created": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.created), + "updated": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.updated), + "session_info": NullableSerializer(TeamLog.MobileSessionLogInfoSerializer()).serialize(value.sessionInfo), + "client_version": NullableSerializer(Serialization._StringSerializer).serialize(value.clientVersion), + "os_version": NullableSerializer(Serialization._StringSerializer).serialize(value.osVersion), + "last_carrier": NullableSerializer(Serialization._StringSerializer).serialize(value.lastCarrier), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MobileDeviceSessionLogInfo { + switch json { + case .dictionary(let dict): + let deviceName = Serialization._StringSerializer.deserialize(dict["device_name"] ?? .null) + let clientType = Team.MobileClientPlatformSerializer().deserialize(dict["client_type"] ?? .null) + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + let created = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["created"] ?? .null) + let updated = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["updated"] ?? .null) + let sessionInfo = NullableSerializer(TeamLog.MobileSessionLogInfoSerializer()).deserialize(dict["session_info"] ?? .null) + let clientVersion = NullableSerializer(Serialization._StringSerializer).deserialize(dict["client_version"] ?? .null) + let osVersion = NullableSerializer(Serialization._StringSerializer).deserialize(dict["os_version"] ?? .null) + let lastCarrier = NullableSerializer(Serialization._StringSerializer).deserialize(dict["last_carrier"] ?? .null) + return MobileDeviceSessionLogInfo(deviceName: deviceName, clientType: clientType, ipAddress: ipAddress, created: created, updated: updated, sessionInfo: sessionInfo, clientVersion: clientVersion, osVersion: osVersion, lastCarrier: lastCarrier) + default: + fatalError("Type error deserializing") + } + } + } + + /// Mobile session. + open class MobileSessionLogInfo: TeamLog.SessionLogInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(MobileSessionLogInfoSerializer().serialize(self)))" + } + } + open class MobileSessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: MobileSessionLogInfo) -> JSON { + let output = [ + "session_id": NullableSerializer(Serialization._StringSerializer).serialize(value.sessionId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> MobileSessionLogInfo { + switch json { + case .dictionary(let dict): + let sessionId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["session_id"] ?? .null) + return MobileSessionLogInfo(sessionId: sessionId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Namespace relative path details. + open class NamespaceRelativePathLogInfo: CustomStringConvertible { + /// Namespace ID. Might be missing due to historical data gap. + public let nsId: String? + /// A path relative to the specified namespace ID. Might be missing due to historical data gap. + public let relativePath: String? + public init(nsId: String? = nil, relativePath: String? = nil) { + nullableValidator(stringValidator())(nsId) + self.nsId = nsId + nullableValidator(stringValidator())(relativePath) + self.relativePath = relativePath + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NamespaceRelativePathLogInfoSerializer().serialize(self)))" + } + } + open class NamespaceRelativePathLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NamespaceRelativePathLogInfo) -> JSON { + let output = [ + "ns_id": NullableSerializer(Serialization._StringSerializer).serialize(value.nsId), + "relative_path": NullableSerializer(Serialization._StringSerializer).serialize(value.relativePath), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NamespaceRelativePathLogInfo { + switch json { + case .dictionary(let dict): + let nsId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ns_id"] ?? .null) + let relativePath = NullableSerializer(Serialization._StringSerializer).deserialize(dict["relative_path"] ?? .null) + return NamespaceRelativePathLogInfo(nsId: nsId, relativePath: relativePath) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled network control. + open class NetworkControlChangePolicyDetails: CustomStringConvertible { + /// New network control policy. + public let newValue: TeamLog.NetworkControlPolicy + /// Previous network control policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.NetworkControlPolicy? + public init(newValue: TeamLog.NetworkControlPolicy, previousValue: TeamLog.NetworkControlPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NetworkControlChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class NetworkControlChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NetworkControlChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.NetworkControlPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.NetworkControlPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NetworkControlChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.NetworkControlPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.NetworkControlPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return NetworkControlChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The NetworkControlChangePolicyType struct + open class NetworkControlChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NetworkControlChangePolicyTypeSerializer().serialize(self)))" + } + } + open class NetworkControlChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NetworkControlChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NetworkControlChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return NetworkControlChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Network control policy + public enum NetworkControlPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NetworkControlPolicySerializer().serialize(self)))" + } + } + open class NetworkControlPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NetworkControlPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> NetworkControlPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return NetworkControlPolicy.disabled + case "enabled": + return NetworkControlPolicy.enabled + case "other": + return NetworkControlPolicy.other + default: + return NetworkControlPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// User's logged information. + open class UserLogInfo: CustomStringConvertible { + /// User unique ID. Might be missing due to historical data gap. + public let accountId: String? + /// User display name. Might be missing due to historical data gap. + public let displayName: String? + /// User email address. Might be missing due to historical data gap. + public let email: String? + public init(accountId: String? = nil, displayName: String? = nil, email: String? = nil) { + nullableValidator(stringValidator(minLength: 40, maxLength: 40))(accountId) + self.accountId = accountId + nullableValidator(stringValidator())(displayName) + self.displayName = displayName + nullableValidator(stringValidator(maxLength: 255))(email) + self.email = email + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserLogInfoSerializer().serialize(self)))" + } + } + open class UserLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserLogInfo) -> JSON { + var output = [ + "account_id": NullableSerializer(Serialization._StringSerializer).serialize(value.accountId), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + "email": NullableSerializer(Serialization._StringSerializer).serialize(value.email), + ] + switch value { + case let teamMember as TeamLog.TeamMemberLogInfo: + for (k, v) in Serialization.getFields(TeamLog.TeamMemberLogInfoSerializer().serialize(teamMember)) { + output[k] = v + } + output[".tag"] = .str("team_member") + case let trustedNonTeamMember as TeamLog.TrustedNonTeamMemberLogInfo: + for (k, v) in Serialization.getFields(TeamLog.TrustedNonTeamMemberLogInfoSerializer().serialize(trustedNonTeamMember)) { + output[k] = v + } + output[".tag"] = .str("trusted_non_team_member") + case let nonTeamMember as TeamLog.NonTeamMemberLogInfo: + for (k, v) in Serialization.getFields(TeamLog.NonTeamMemberLogInfoSerializer().serialize(nonTeamMember)) { + output[k] = v + } + output[".tag"] = .str("non_team_member") + default: fatalError("Tried to serialize unexpected subtype") + } + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserLogInfo { + switch json { + case .dictionary(let dict): + let tag = Serialization.getTag(dict) + switch tag { + case "team_member": + return TeamLog.TeamMemberLogInfoSerializer().deserialize(json) + case "trusted_non_team_member": + return TeamLog.TrustedNonTeamMemberLogInfoSerializer().deserialize(json) + case "non_team_member": + return TeamLog.NonTeamMemberLogInfoSerializer().deserialize(json) + default: + let accountId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["account_id"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + let email = NullableSerializer(Serialization._StringSerializer).deserialize(dict["email"] ?? .null) + return UserLogInfo(accountId: accountId, displayName: displayName, email: email) + } + default: + fatalError("Type error deserializing") + } + } + } + + /// Non team member's logged information. + open class NonTeamMemberLogInfo: TeamLog.UserLogInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NonTeamMemberLogInfoSerializer().serialize(self)))" + } + } + open class NonTeamMemberLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NonTeamMemberLogInfo) -> JSON { + let output = [ + "account_id": NullableSerializer(Serialization._StringSerializer).serialize(value.accountId), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + "email": NullableSerializer(Serialization._StringSerializer).serialize(value.email), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NonTeamMemberLogInfo { + switch json { + case .dictionary(let dict): + let accountId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["account_id"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + let email = NullableSerializer(Serialization._StringSerializer).deserialize(dict["email"] ?? .null) + return NonTeamMemberLogInfo(accountId: accountId, displayName: displayName, email: email) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed Paper doc to invite-only. + open class NoteAclInviteOnlyDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteAclInviteOnlyDetailsSerializer().serialize(self)))" + } + } + open class NoteAclInviteOnlyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteAclInviteOnlyDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteAclInviteOnlyDetails { + switch json { + case .dictionary(_): + return NoteAclInviteOnlyDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The NoteAclInviteOnlyType struct + open class NoteAclInviteOnlyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteAclInviteOnlyTypeSerializer().serialize(self)))" + } + } + open class NoteAclInviteOnlyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteAclInviteOnlyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteAclInviteOnlyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return NoteAclInviteOnlyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed Paper doc to link-accessible. + open class NoteAclLinkDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteAclLinkDetailsSerializer().serialize(self)))" + } + } + open class NoteAclLinkDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteAclLinkDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteAclLinkDetails { + switch json { + case .dictionary(_): + return NoteAclLinkDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The NoteAclLinkType struct + open class NoteAclLinkType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteAclLinkTypeSerializer().serialize(self)))" + } + } + open class NoteAclLinkTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteAclLinkType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteAclLinkType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return NoteAclLinkType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed Paper doc to link-accessible for team. + open class NoteAclTeamLinkDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteAclTeamLinkDetailsSerializer().serialize(self)))" + } + } + open class NoteAclTeamLinkDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteAclTeamLinkDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteAclTeamLinkDetails { + switch json { + case .dictionary(_): + return NoteAclTeamLinkDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The NoteAclTeamLinkType struct + open class NoteAclTeamLinkType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteAclTeamLinkTypeSerializer().serialize(self)))" + } + } + open class NoteAclTeamLinkTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteAclTeamLinkType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteAclTeamLinkType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return NoteAclTeamLinkType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Shared received Paper doc. + open class NoteShareReceiveDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteShareReceiveDetailsSerializer().serialize(self)))" + } + } + open class NoteShareReceiveDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteShareReceiveDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteShareReceiveDetails { + switch json { + case .dictionary(_): + return NoteShareReceiveDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The NoteShareReceiveType struct + open class NoteShareReceiveType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteShareReceiveTypeSerializer().serialize(self)))" + } + } + open class NoteShareReceiveTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteShareReceiveType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteShareReceiveType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return NoteShareReceiveType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Shared Paper doc. + open class NoteSharedDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteSharedDetailsSerializer().serialize(self)))" + } + } + open class NoteSharedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteSharedDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteSharedDetails { + switch json { + case .dictionary(_): + return NoteSharedDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The NoteSharedType struct + open class NoteSharedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NoteSharedTypeSerializer().serialize(self)))" + } + } + open class NoteSharedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: NoteSharedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> NoteSharedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return NoteSharedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Opened shared Paper doc. + open class OpenNoteSharedDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(OpenNoteSharedDetailsSerializer().serialize(self)))" + } + } + open class OpenNoteSharedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: OpenNoteSharedDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> OpenNoteSharedDetails { + switch json { + case .dictionary(_): + return OpenNoteSharedDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The OpenNoteSharedType struct + open class OpenNoteSharedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(OpenNoteSharedTypeSerializer().serialize(self)))" + } + } + open class OpenNoteSharedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: OpenNoteSharedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> OpenNoteSharedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return OpenNoteSharedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The origin from which the actor performed the action. + open class OriginLogInfo: CustomStringConvertible { + /// Geographic location details. + public let geoLocation: TeamLog.GeoLocationLogInfo? + /// The method that was used to perform the action. + public let accessMethod: TeamLog.AccessMethodLogInfo + public init(accessMethod: TeamLog.AccessMethodLogInfo, geoLocation: TeamLog.GeoLocationLogInfo? = nil) { + self.geoLocation = geoLocation + self.accessMethod = accessMethod + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(OriginLogInfoSerializer().serialize(self)))" + } + } + open class OriginLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: OriginLogInfo) -> JSON { + let output = [ + "access_method": TeamLog.AccessMethodLogInfoSerializer().serialize(value.accessMethod), + "geo_location": NullableSerializer(TeamLog.GeoLocationLogInfoSerializer()).serialize(value.geoLocation), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> OriginLogInfo { + switch json { + case .dictionary(let dict): + let accessMethod = TeamLog.AccessMethodLogInfoSerializer().deserialize(dict["access_method"] ?? .null) + let geoLocation = NullableSerializer(TeamLog.GeoLocationLogInfoSerializer()).deserialize(dict["geo_location"] ?? .null) + return OriginLogInfo(accessMethod: accessMethod, geoLocation: geoLocation) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperAccessType union + public enum PaperAccessType: CustomStringConvertible { + /// An unspecified error. + case viewer + /// An unspecified error. + case commenter + /// An unspecified error. + case editor + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperAccessTypeSerializer().serialize(self)))" + } + } + open class PaperAccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperAccessType) -> JSON { + switch value { + case .viewer: + var d = [String: JSON]() + d[".tag"] = .str("viewer") + return .dictionary(d) + case .commenter: + var d = [String: JSON]() + d[".tag"] = .str("commenter") + return .dictionary(d) + case .editor: + var d = [String: JSON]() + d[".tag"] = .str("editor") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperAccessType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "viewer": + return PaperAccessType.viewer + case "commenter": + return PaperAccessType.commenter + case "editor": + return PaperAccessType.editor + case "other": + return PaperAccessType.other + default: + return PaperAccessType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Exported all team Paper docs. + open class PaperAdminExportStartDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperAdminExportStartDetailsSerializer().serialize(self)))" + } + } + open class PaperAdminExportStartDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperAdminExportStartDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperAdminExportStartDetails { + switch json { + case .dictionary(_): + return PaperAdminExportStartDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperAdminExportStartType struct + open class PaperAdminExportStartType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperAdminExportStartTypeSerializer().serialize(self)))" + } + } + open class PaperAdminExportStartTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperAdminExportStartType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperAdminExportStartType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperAdminExportStartType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed whether Dropbox Paper, when enabled, is deployed to all members or to specific members. + open class PaperChangeDeploymentPolicyDetails: CustomStringConvertible { + /// New Dropbox Paper deployment policy. + public let newValue: TeamPolicies.PaperDeploymentPolicy + /// Previous Dropbox Paper deployment policy. Might be missing due to historical data gap. + public let previousValue: TeamPolicies.PaperDeploymentPolicy? + public init(newValue: TeamPolicies.PaperDeploymentPolicy, previousValue: TeamPolicies.PaperDeploymentPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperChangeDeploymentPolicyDetailsSerializer().serialize(self)))" + } + } + open class PaperChangeDeploymentPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperChangeDeploymentPolicyDetails) -> JSON { + let output = [ + "new_value": TeamPolicies.PaperDeploymentPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamPolicies.PaperDeploymentPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperChangeDeploymentPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamPolicies.PaperDeploymentPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamPolicies.PaperDeploymentPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return PaperChangeDeploymentPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperChangeDeploymentPolicyType struct + open class PaperChangeDeploymentPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperChangeDeploymentPolicyTypeSerializer().serialize(self)))" + } + } + open class PaperChangeDeploymentPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperChangeDeploymentPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperChangeDeploymentPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperChangeDeploymentPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed whether non-members can view Paper docs with link. + open class PaperChangeMemberLinkPolicyDetails: CustomStringConvertible { + /// New paper external link accessibility policy. + public let newValue: TeamLog.PaperMemberPolicy + public init(newValue: TeamLog.PaperMemberPolicy) { + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperChangeMemberLinkPolicyDetailsSerializer().serialize(self)))" + } + } + open class PaperChangeMemberLinkPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperChangeMemberLinkPolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.PaperMemberPolicySerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperChangeMemberLinkPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.PaperMemberPolicySerializer().deserialize(dict["new_value"] ?? .null) + return PaperChangeMemberLinkPolicyDetails(newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperChangeMemberLinkPolicyType struct + open class PaperChangeMemberLinkPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperChangeMemberLinkPolicyTypeSerializer().serialize(self)))" + } + } + open class PaperChangeMemberLinkPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperChangeMemberLinkPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperChangeMemberLinkPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperChangeMemberLinkPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed whether members can share Paper docs outside team, and if docs are accessible only by team members or + /// anyone by default. + open class PaperChangeMemberPolicyDetails: CustomStringConvertible { + /// New paper external accessibility policy. + public let newValue: TeamLog.PaperMemberPolicy + /// Previous paper external accessibility policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.PaperMemberPolicy? + public init(newValue: TeamLog.PaperMemberPolicy, previousValue: TeamLog.PaperMemberPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperChangeMemberPolicyDetailsSerializer().serialize(self)))" + } + } + open class PaperChangeMemberPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperChangeMemberPolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.PaperMemberPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.PaperMemberPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperChangeMemberPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.PaperMemberPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.PaperMemberPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return PaperChangeMemberPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperChangeMemberPolicyType struct + open class PaperChangeMemberPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperChangeMemberPolicyTypeSerializer().serialize(self)))" + } + } + open class PaperChangeMemberPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperChangeMemberPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperChangeMemberPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperChangeMemberPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled Dropbox Paper for team. + open class PaperChangePolicyDetails: CustomStringConvertible { + /// New Dropbox Paper policy. + public let newValue: TeamPolicies.PaperEnabledPolicy + /// Previous Dropbox Paper policy. Might be missing due to historical data gap. + public let previousValue: TeamPolicies.PaperEnabledPolicy? + public init(newValue: TeamPolicies.PaperEnabledPolicy, previousValue: TeamPolicies.PaperEnabledPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class PaperChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamPolicies.PaperEnabledPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamPolicies.PaperEnabledPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamPolicies.PaperEnabledPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamPolicies.PaperEnabledPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return PaperChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperChangePolicyType struct + open class PaperChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperChangePolicyTypeSerializer().serialize(self)))" + } + } + open class PaperChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added team member to Paper doc/folder. + open class PaperContentAddMemberDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentAddMemberDetailsSerializer().serialize(self)))" + } + } + open class PaperContentAddMemberDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentAddMemberDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentAddMemberDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperContentAddMemberDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperContentAddMemberType struct + open class PaperContentAddMemberType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentAddMemberTypeSerializer().serialize(self)))" + } + } + open class PaperContentAddMemberTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentAddMemberType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentAddMemberType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperContentAddMemberType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added Paper doc/folder to folder. + open class PaperContentAddToFolderDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Parent asset position in the Assets list. + public let parentAssetIndex: UInt64 + public init(eventUuid: String, targetAssetIndex: UInt64, parentAssetIndex: UInt64) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + comparableValidator()(parentAssetIndex) + self.parentAssetIndex = parentAssetIndex + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentAddToFolderDetailsSerializer().serialize(self)))" + } + } + open class PaperContentAddToFolderDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentAddToFolderDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "parent_asset_index": Serialization._UInt64Serializer.serialize(value.parentAssetIndex), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentAddToFolderDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let parentAssetIndex = Serialization._UInt64Serializer.deserialize(dict["parent_asset_index"] ?? .null) + return PaperContentAddToFolderDetails(eventUuid: eventUuid, targetAssetIndex: targetAssetIndex, parentAssetIndex: parentAssetIndex) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperContentAddToFolderType struct + open class PaperContentAddToFolderType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentAddToFolderTypeSerializer().serialize(self)))" + } + } + open class PaperContentAddToFolderTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentAddToFolderType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentAddToFolderType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperContentAddToFolderType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Archived Paper doc/folder. + open class PaperContentArchiveDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentArchiveDetailsSerializer().serialize(self)))" + } + } + open class PaperContentArchiveDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentArchiveDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentArchiveDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperContentArchiveDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperContentArchiveType struct + open class PaperContentArchiveType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentArchiveTypeSerializer().serialize(self)))" + } + } + open class PaperContentArchiveTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentArchiveType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentArchiveType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperContentArchiveType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created Paper doc/folder. + open class PaperContentCreateDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentCreateDetailsSerializer().serialize(self)))" + } + } + open class PaperContentCreateDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentCreateDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentCreateDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperContentCreateDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperContentCreateType struct + open class PaperContentCreateType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentCreateTypeSerializer().serialize(self)))" + } + } + open class PaperContentCreateTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentCreateType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentCreateType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperContentCreateType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Permanently deleted Paper doc/folder. + open class PaperContentPermanentlyDeleteDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentPermanentlyDeleteDetailsSerializer().serialize(self)))" + } + } + open class PaperContentPermanentlyDeleteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentPermanentlyDeleteDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentPermanentlyDeleteDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperContentPermanentlyDeleteDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperContentPermanentlyDeleteType struct + open class PaperContentPermanentlyDeleteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentPermanentlyDeleteTypeSerializer().serialize(self)))" + } + } + open class PaperContentPermanentlyDeleteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentPermanentlyDeleteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentPermanentlyDeleteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperContentPermanentlyDeleteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed Paper doc/folder from folder. + open class PaperContentRemoveFromFolderDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Parent asset position in the Assets list. + public let parentAssetIndex: UInt64 + public init(eventUuid: String, targetAssetIndex: UInt64, parentAssetIndex: UInt64) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + comparableValidator()(parentAssetIndex) + self.parentAssetIndex = parentAssetIndex + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentRemoveFromFolderDetailsSerializer().serialize(self)))" + } + } + open class PaperContentRemoveFromFolderDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentRemoveFromFolderDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "parent_asset_index": Serialization._UInt64Serializer.serialize(value.parentAssetIndex), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentRemoveFromFolderDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let parentAssetIndex = Serialization._UInt64Serializer.deserialize(dict["parent_asset_index"] ?? .null) + return PaperContentRemoveFromFolderDetails(eventUuid: eventUuid, targetAssetIndex: targetAssetIndex, parentAssetIndex: parentAssetIndex) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperContentRemoveFromFolderType struct + open class PaperContentRemoveFromFolderType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentRemoveFromFolderTypeSerializer().serialize(self)))" + } + } + open class PaperContentRemoveFromFolderTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentRemoveFromFolderType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentRemoveFromFolderType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperContentRemoveFromFolderType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed team member from Paper doc/folder. + open class PaperContentRemoveMemberDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentRemoveMemberDetailsSerializer().serialize(self)))" + } + } + open class PaperContentRemoveMemberDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentRemoveMemberDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentRemoveMemberDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperContentRemoveMemberDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperContentRemoveMemberType struct + open class PaperContentRemoveMemberType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentRemoveMemberTypeSerializer().serialize(self)))" + } + } + open class PaperContentRemoveMemberTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentRemoveMemberType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentRemoveMemberType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperContentRemoveMemberType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Renamed Paper doc/folder. + open class PaperContentRenameDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentRenameDetailsSerializer().serialize(self)))" + } + } + open class PaperContentRenameDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentRenameDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentRenameDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperContentRenameDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperContentRenameType struct + open class PaperContentRenameType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentRenameTypeSerializer().serialize(self)))" + } + } + open class PaperContentRenameTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentRenameType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentRenameType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperContentRenameType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Restored archived Paper doc/folder. + open class PaperContentRestoreDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentRestoreDetailsSerializer().serialize(self)))" + } + } + open class PaperContentRestoreDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentRestoreDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentRestoreDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperContentRestoreDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperContentRestoreType struct + open class PaperContentRestoreType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperContentRestoreTypeSerializer().serialize(self)))" + } + } + open class PaperContentRestoreTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperContentRestoreType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperContentRestoreType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperContentRestoreType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added Paper doc comment. + open class PaperDocAddCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocAddCommentDetailsSerializer().serialize(self)))" + } + } + open class PaperDocAddCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocAddCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocAddCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return PaperDocAddCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocAddCommentType struct + open class PaperDocAddCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocAddCommentTypeSerializer().serialize(self)))" + } + } + open class PaperDocAddCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocAddCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocAddCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocAddCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed team member permissions for Paper doc. + open class PaperDocChangeMemberRoleDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Paper doc access type. + public let accessType: TeamLog.PaperAccessType + public init(eventUuid: String, accessType: TeamLog.PaperAccessType) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + self.accessType = accessType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocChangeMemberRoleDetailsSerializer().serialize(self)))" + } + } + open class PaperDocChangeMemberRoleDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocChangeMemberRoleDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "access_type": TeamLog.PaperAccessTypeSerializer().serialize(value.accessType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocChangeMemberRoleDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let accessType = TeamLog.PaperAccessTypeSerializer().deserialize(dict["access_type"] ?? .null) + return PaperDocChangeMemberRoleDetails(eventUuid: eventUuid, accessType: accessType) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocChangeMemberRoleType struct + open class PaperDocChangeMemberRoleType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocChangeMemberRoleTypeSerializer().serialize(self)))" + } + } + open class PaperDocChangeMemberRoleTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocChangeMemberRoleType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocChangeMemberRoleType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocChangeMemberRoleType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed sharing setting for Paper doc. + open class PaperDocChangeSharingPolicyDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Sharing policy with external users. Might be missing due to historical data gap. + public let publicSharingPolicy: String? + /// Sharing policy with team. Might be missing due to historical data gap. + public let teamSharingPolicy: String? + public init(eventUuid: String, publicSharingPolicy: String? = nil, teamSharingPolicy: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(publicSharingPolicy) + self.publicSharingPolicy = publicSharingPolicy + nullableValidator(stringValidator())(teamSharingPolicy) + self.teamSharingPolicy = teamSharingPolicy + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocChangeSharingPolicyDetailsSerializer().serialize(self)))" + } + } + open class PaperDocChangeSharingPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocChangeSharingPolicyDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "public_sharing_policy": NullableSerializer(Serialization._StringSerializer).serialize(value.publicSharingPolicy), + "team_sharing_policy": NullableSerializer(Serialization._StringSerializer).serialize(value.teamSharingPolicy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocChangeSharingPolicyDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let publicSharingPolicy = NullableSerializer(Serialization._StringSerializer).deserialize(dict["public_sharing_policy"] ?? .null) + let teamSharingPolicy = NullableSerializer(Serialization._StringSerializer).deserialize(dict["team_sharing_policy"] ?? .null) + return PaperDocChangeSharingPolicyDetails(eventUuid: eventUuid, publicSharingPolicy: publicSharingPolicy, teamSharingPolicy: teamSharingPolicy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocChangeSharingPolicyType struct + open class PaperDocChangeSharingPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocChangeSharingPolicyTypeSerializer().serialize(self)))" + } + } + open class PaperDocChangeSharingPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocChangeSharingPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocChangeSharingPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocChangeSharingPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Followed/unfollowed Paper doc. + open class PaperDocChangeSubscriptionDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// New doc subscription level. + public let newSubscriptionLevel: String + /// Previous doc subscription level. Might be missing due to historical data gap. + public let previousSubscriptionLevel: String? + public init(eventUuid: String, newSubscriptionLevel: String, previousSubscriptionLevel: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + stringValidator()(newSubscriptionLevel) + self.newSubscriptionLevel = newSubscriptionLevel + nullableValidator(stringValidator())(previousSubscriptionLevel) + self.previousSubscriptionLevel = previousSubscriptionLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocChangeSubscriptionDetailsSerializer().serialize(self)))" + } + } + open class PaperDocChangeSubscriptionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocChangeSubscriptionDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "new_subscription_level": Serialization._StringSerializer.serialize(value.newSubscriptionLevel), + "previous_subscription_level": NullableSerializer(Serialization._StringSerializer).serialize(value.previousSubscriptionLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocChangeSubscriptionDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let newSubscriptionLevel = Serialization._StringSerializer.deserialize(dict["new_subscription_level"] ?? .null) + let previousSubscriptionLevel = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_subscription_level"] ?? .null) + return PaperDocChangeSubscriptionDetails(eventUuid: eventUuid, newSubscriptionLevel: newSubscriptionLevel, previousSubscriptionLevel: previousSubscriptionLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocChangeSubscriptionType struct + open class PaperDocChangeSubscriptionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocChangeSubscriptionTypeSerializer().serialize(self)))" + } + } + open class PaperDocChangeSubscriptionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocChangeSubscriptionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocChangeSubscriptionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocChangeSubscriptionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted Paper doc comment. + open class PaperDocDeleteCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocDeleteCommentDetailsSerializer().serialize(self)))" + } + } + open class PaperDocDeleteCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocDeleteCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocDeleteCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return PaperDocDeleteCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocDeleteCommentType struct + open class PaperDocDeleteCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocDeleteCommentTypeSerializer().serialize(self)))" + } + } + open class PaperDocDeleteCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocDeleteCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocDeleteCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocDeleteCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Archived Paper doc. + open class PaperDocDeletedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocDeletedDetailsSerializer().serialize(self)))" + } + } + open class PaperDocDeletedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocDeletedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocDeletedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocDeletedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocDeletedType struct + open class PaperDocDeletedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocDeletedTypeSerializer().serialize(self)))" + } + } + open class PaperDocDeletedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocDeletedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocDeletedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocDeletedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Downloaded Paper doc in specific format. + open class PaperDocDownloadDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Export file format. + public let exportFileFormat: TeamLog.PaperDownloadFormat + public init(eventUuid: String, exportFileFormat: TeamLog.PaperDownloadFormat) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + self.exportFileFormat = exportFileFormat + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocDownloadDetailsSerializer().serialize(self)))" + } + } + open class PaperDocDownloadDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocDownloadDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "export_file_format": TeamLog.PaperDownloadFormatSerializer().serialize(value.exportFileFormat), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocDownloadDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let exportFileFormat = TeamLog.PaperDownloadFormatSerializer().deserialize(dict["export_file_format"] ?? .null) + return PaperDocDownloadDetails(eventUuid: eventUuid, exportFileFormat: exportFileFormat) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocDownloadType struct + open class PaperDocDownloadType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocDownloadTypeSerializer().serialize(self)))" + } + } + open class PaperDocDownloadTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocDownloadType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocDownloadType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocDownloadType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Edited Paper doc comment. + open class PaperDocEditCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocEditCommentDetailsSerializer().serialize(self)))" + } + } + open class PaperDocEditCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocEditCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocEditCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return PaperDocEditCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocEditCommentType struct + open class PaperDocEditCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocEditCommentTypeSerializer().serialize(self)))" + } + } + open class PaperDocEditCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocEditCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocEditCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocEditCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Edited Paper doc. + open class PaperDocEditDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocEditDetailsSerializer().serialize(self)))" + } + } + open class PaperDocEditDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocEditDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocEditDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocEditDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocEditType struct + open class PaperDocEditType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocEditTypeSerializer().serialize(self)))" + } + } + open class PaperDocEditTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocEditType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocEditType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocEditType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Followed Paper doc. + open class PaperDocFollowedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocFollowedDetailsSerializer().serialize(self)))" + } + } + open class PaperDocFollowedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocFollowedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocFollowedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocFollowedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocFollowedType struct + open class PaperDocFollowedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocFollowedTypeSerializer().serialize(self)))" + } + } + open class PaperDocFollowedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocFollowedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocFollowedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocFollowedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Mentioned team member in Paper doc. + open class PaperDocMentionDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocMentionDetailsSerializer().serialize(self)))" + } + } + open class PaperDocMentionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocMentionDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocMentionDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocMentionDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocMentionType struct + open class PaperDocMentionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocMentionTypeSerializer().serialize(self)))" + } + } + open class PaperDocMentionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocMentionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocMentionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocMentionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Transferred ownership of Paper doc. + open class PaperDocOwnershipChangedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Previous owner. + public let oldOwnerUserId: String? + /// New owner. + public let newOwnerUserId: String + public init(eventUuid: String, newOwnerUserId: String, oldOwnerUserId: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator(minLength: 40, maxLength: 40))(oldOwnerUserId) + self.oldOwnerUserId = oldOwnerUserId + stringValidator(minLength: 40, maxLength: 40)(newOwnerUserId) + self.newOwnerUserId = newOwnerUserId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocOwnershipChangedDetailsSerializer().serialize(self)))" + } + } + open class PaperDocOwnershipChangedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocOwnershipChangedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "new_owner_user_id": Serialization._StringSerializer.serialize(value.newOwnerUserId), + "old_owner_user_id": NullableSerializer(Serialization._StringSerializer).serialize(value.oldOwnerUserId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocOwnershipChangedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let newOwnerUserId = Serialization._StringSerializer.deserialize(dict["new_owner_user_id"] ?? .null) + let oldOwnerUserId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["old_owner_user_id"] ?? .null) + return PaperDocOwnershipChangedDetails(eventUuid: eventUuid, newOwnerUserId: newOwnerUserId, oldOwnerUserId: oldOwnerUserId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocOwnershipChangedType struct + open class PaperDocOwnershipChangedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocOwnershipChangedTypeSerializer().serialize(self)))" + } + } + open class PaperDocOwnershipChangedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocOwnershipChangedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocOwnershipChangedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocOwnershipChangedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Requested access to Paper doc. + open class PaperDocRequestAccessDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocRequestAccessDetailsSerializer().serialize(self)))" + } + } + open class PaperDocRequestAccessDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocRequestAccessDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocRequestAccessDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocRequestAccessDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocRequestAccessType struct + open class PaperDocRequestAccessType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocRequestAccessTypeSerializer().serialize(self)))" + } + } + open class PaperDocRequestAccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocRequestAccessType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocRequestAccessType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocRequestAccessType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Resolved Paper doc comment. + open class PaperDocResolveCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocResolveCommentDetailsSerializer().serialize(self)))" + } + } + open class PaperDocResolveCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocResolveCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocResolveCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return PaperDocResolveCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocResolveCommentType struct + open class PaperDocResolveCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocResolveCommentTypeSerializer().serialize(self)))" + } + } + open class PaperDocResolveCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocResolveCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocResolveCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocResolveCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Restored Paper doc to previous version. + open class PaperDocRevertDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocRevertDetailsSerializer().serialize(self)))" + } + } + open class PaperDocRevertDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocRevertDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocRevertDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocRevertDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocRevertType struct + open class PaperDocRevertType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocRevertTypeSerializer().serialize(self)))" + } + } + open class PaperDocRevertTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocRevertType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocRevertType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocRevertType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Shared Paper doc via Slack. + open class PaperDocSlackShareDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocSlackShareDetailsSerializer().serialize(self)))" + } + } + open class PaperDocSlackShareDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocSlackShareDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocSlackShareDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocSlackShareDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocSlackShareType struct + open class PaperDocSlackShareType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocSlackShareTypeSerializer().serialize(self)))" + } + } + open class PaperDocSlackShareTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocSlackShareType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocSlackShareType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocSlackShareType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Shared Paper doc with team member. + open class PaperDocTeamInviteDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocTeamInviteDetailsSerializer().serialize(self)))" + } + } + open class PaperDocTeamInviteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocTeamInviteDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocTeamInviteDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocTeamInviteDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocTeamInviteType struct + open class PaperDocTeamInviteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocTeamInviteTypeSerializer().serialize(self)))" + } + } + open class PaperDocTeamInviteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocTeamInviteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocTeamInviteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocTeamInviteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted Paper doc. + open class PaperDocTrashedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocTrashedDetailsSerializer().serialize(self)))" + } + } + open class PaperDocTrashedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocTrashedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocTrashedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocTrashedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocTrashedType struct + open class PaperDocTrashedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocTrashedTypeSerializer().serialize(self)))" + } + } + open class PaperDocTrashedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocTrashedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocTrashedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocTrashedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Unresolved Paper doc comment. + open class PaperDocUnresolveCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. Might be missing due to historical data gap. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocUnresolveCommentDetailsSerializer().serialize(self)))" + } + } + open class PaperDocUnresolveCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocUnresolveCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocUnresolveCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return PaperDocUnresolveCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocUnresolveCommentType struct + open class PaperDocUnresolveCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocUnresolveCommentTypeSerializer().serialize(self)))" + } + } + open class PaperDocUnresolveCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocUnresolveCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocUnresolveCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocUnresolveCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Restored Paper doc. + open class PaperDocUntrashedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocUntrashedDetailsSerializer().serialize(self)))" + } + } + open class PaperDocUntrashedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocUntrashedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocUntrashedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocUntrashedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocUntrashedType struct + open class PaperDocUntrashedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocUntrashedTypeSerializer().serialize(self)))" + } + } + open class PaperDocUntrashedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocUntrashedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocUntrashedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocUntrashedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Viewed Paper doc. + open class PaperDocViewDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocViewDetailsSerializer().serialize(self)))" + } + } + open class PaperDocViewDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocViewDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocViewDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperDocViewDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDocViewType struct + open class PaperDocViewType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocViewTypeSerializer().serialize(self)))" + } + } + open class PaperDocViewTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocViewType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocViewType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperDocViewType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Paper document's logged information. + open class PaperDocumentLogInfo: CustomStringConvertible { + /// Papers document Id. + public let docId: String + /// Paper document title. + public let docTitle: String + public init(docId: String, docTitle: String) { + stringValidator()(docId) + self.docId = docId + stringValidator()(docTitle) + self.docTitle = docTitle + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDocumentLogInfoSerializer().serialize(self)))" + } + } + open class PaperDocumentLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDocumentLogInfo) -> JSON { + let output = [ + "doc_id": Serialization._StringSerializer.serialize(value.docId), + "doc_title": Serialization._StringSerializer.serialize(value.docTitle), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperDocumentLogInfo { + switch json { + case .dictionary(let dict): + let docId = Serialization._StringSerializer.deserialize(dict["doc_id"] ?? .null) + let docTitle = Serialization._StringSerializer.deserialize(dict["doc_title"] ?? .null) + return PaperDocumentLogInfo(docId: docId, docTitle: docTitle) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperDownloadFormat union + public enum PaperDownloadFormat: CustomStringConvertible { + /// An unspecified error. + case docx + /// An unspecified error. + case html + /// An unspecified error. + case markdown + /// An unspecified error. + case pdf + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDownloadFormatSerializer().serialize(self)))" + } + } + open class PaperDownloadFormatSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDownloadFormat) -> JSON { + switch value { + case .docx: + var d = [String: JSON]() + d[".tag"] = .str("docx") + return .dictionary(d) + case .html: + var d = [String: JSON]() + d[".tag"] = .str("html") + return .dictionary(d) + case .markdown: + var d = [String: JSON]() + d[".tag"] = .str("markdown") + return .dictionary(d) + case .pdf: + var d = [String: JSON]() + d[".tag"] = .str("pdf") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperDownloadFormat { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "docx": + return PaperDownloadFormat.docx + case "html": + return PaperDownloadFormat.html + case "markdown": + return PaperDownloadFormat.markdown + case "pdf": + return PaperDownloadFormat.pdf + case "other": + return PaperDownloadFormat.other + default: + return PaperDownloadFormat.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Added users to Paper-enabled users list. + open class PaperEnabledUsersGroupAdditionDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperEnabledUsersGroupAdditionDetailsSerializer().serialize(self)))" + } + } + open class PaperEnabledUsersGroupAdditionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperEnabledUsersGroupAdditionDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperEnabledUsersGroupAdditionDetails { + switch json { + case .dictionary(_): + return PaperEnabledUsersGroupAdditionDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperEnabledUsersGroupAdditionType struct + open class PaperEnabledUsersGroupAdditionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperEnabledUsersGroupAdditionTypeSerializer().serialize(self)))" + } + } + open class PaperEnabledUsersGroupAdditionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperEnabledUsersGroupAdditionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperEnabledUsersGroupAdditionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperEnabledUsersGroupAdditionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed users from Paper-enabled users list. + open class PaperEnabledUsersGroupRemovalDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperEnabledUsersGroupRemovalDetailsSerializer().serialize(self)))" + } + } + open class PaperEnabledUsersGroupRemovalDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperEnabledUsersGroupRemovalDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperEnabledUsersGroupRemovalDetails { + switch json { + case .dictionary(_): + return PaperEnabledUsersGroupRemovalDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperEnabledUsersGroupRemovalType struct + open class PaperEnabledUsersGroupRemovalType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperEnabledUsersGroupRemovalTypeSerializer().serialize(self)))" + } + } + open class PaperEnabledUsersGroupRemovalTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperEnabledUsersGroupRemovalType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperEnabledUsersGroupRemovalType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperEnabledUsersGroupRemovalType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed Paper external sharing setting to anyone. + open class PaperExternalViewAllowDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperExternalViewAllowDetailsSerializer().serialize(self)))" + } + } + open class PaperExternalViewAllowDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperExternalViewAllowDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperExternalViewAllowDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperExternalViewAllowDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperExternalViewAllowType struct + open class PaperExternalViewAllowType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperExternalViewAllowTypeSerializer().serialize(self)))" + } + } + open class PaperExternalViewAllowTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperExternalViewAllowType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperExternalViewAllowType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperExternalViewAllowType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed Paper external sharing setting to default team. + open class PaperExternalViewDefaultTeamDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperExternalViewDefaultTeamDetailsSerializer().serialize(self)))" + } + } + open class PaperExternalViewDefaultTeamDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperExternalViewDefaultTeamDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperExternalViewDefaultTeamDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperExternalViewDefaultTeamDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperExternalViewDefaultTeamType struct + open class PaperExternalViewDefaultTeamType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperExternalViewDefaultTeamTypeSerializer().serialize(self)))" + } + } + open class PaperExternalViewDefaultTeamTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperExternalViewDefaultTeamType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperExternalViewDefaultTeamType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperExternalViewDefaultTeamType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed Paper external sharing setting to team-only. + open class PaperExternalViewForbidDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperExternalViewForbidDetailsSerializer().serialize(self)))" + } + } + open class PaperExternalViewForbidDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperExternalViewForbidDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperExternalViewForbidDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperExternalViewForbidDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperExternalViewForbidType struct + open class PaperExternalViewForbidType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperExternalViewForbidTypeSerializer().serialize(self)))" + } + } + open class PaperExternalViewForbidTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperExternalViewForbidType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperExternalViewForbidType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperExternalViewForbidType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Followed/unfollowed Paper folder. + open class PaperFolderChangeSubscriptionDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// New folder subscription level. + public let newSubscriptionLevel: String + /// Previous folder subscription level. Might be missing due to historical data gap. + public let previousSubscriptionLevel: String? + public init(eventUuid: String, newSubscriptionLevel: String, previousSubscriptionLevel: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + stringValidator()(newSubscriptionLevel) + self.newSubscriptionLevel = newSubscriptionLevel + nullableValidator(stringValidator())(previousSubscriptionLevel) + self.previousSubscriptionLevel = previousSubscriptionLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperFolderChangeSubscriptionDetailsSerializer().serialize(self)))" + } + } + open class PaperFolderChangeSubscriptionDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperFolderChangeSubscriptionDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "new_subscription_level": Serialization._StringSerializer.serialize(value.newSubscriptionLevel), + "previous_subscription_level": NullableSerializer(Serialization._StringSerializer).serialize(value.previousSubscriptionLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperFolderChangeSubscriptionDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let newSubscriptionLevel = Serialization._StringSerializer.deserialize(dict["new_subscription_level"] ?? .null) + let previousSubscriptionLevel = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_subscription_level"] ?? .null) + return PaperFolderChangeSubscriptionDetails(eventUuid: eventUuid, newSubscriptionLevel: newSubscriptionLevel, previousSubscriptionLevel: previousSubscriptionLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperFolderChangeSubscriptionType struct + open class PaperFolderChangeSubscriptionType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperFolderChangeSubscriptionTypeSerializer().serialize(self)))" + } + } + open class PaperFolderChangeSubscriptionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperFolderChangeSubscriptionType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperFolderChangeSubscriptionType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperFolderChangeSubscriptionType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Archived Paper folder. + open class PaperFolderDeletedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperFolderDeletedDetailsSerializer().serialize(self)))" + } + } + open class PaperFolderDeletedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperFolderDeletedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperFolderDeletedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperFolderDeletedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperFolderDeletedType struct + open class PaperFolderDeletedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperFolderDeletedTypeSerializer().serialize(self)))" + } + } + open class PaperFolderDeletedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperFolderDeletedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperFolderDeletedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperFolderDeletedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Followed Paper folder. + open class PaperFolderFollowedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperFolderFollowedDetailsSerializer().serialize(self)))" + } + } + open class PaperFolderFollowedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperFolderFollowedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperFolderFollowedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperFolderFollowedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperFolderFollowedType struct + open class PaperFolderFollowedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperFolderFollowedTypeSerializer().serialize(self)))" + } + } + open class PaperFolderFollowedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperFolderFollowedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperFolderFollowedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperFolderFollowedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Paper folder's logged information. + open class PaperFolderLogInfo: CustomStringConvertible { + /// Papers folder Id. + public let folderId: String + /// Paper folder name. + public let folderName: String + public init(folderId: String, folderName: String) { + stringValidator()(folderId) + self.folderId = folderId + stringValidator()(folderName) + self.folderName = folderName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperFolderLogInfoSerializer().serialize(self)))" + } + } + open class PaperFolderLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperFolderLogInfo) -> JSON { + let output = [ + "folder_id": Serialization._StringSerializer.serialize(value.folderId), + "folder_name": Serialization._StringSerializer.serialize(value.folderName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperFolderLogInfo { + switch json { + case .dictionary(let dict): + let folderId = Serialization._StringSerializer.deserialize(dict["folder_id"] ?? .null) + let folderName = Serialization._StringSerializer.deserialize(dict["folder_name"] ?? .null) + return PaperFolderLogInfo(folderId: folderId, folderName: folderName) + default: + fatalError("Type error deserializing") + } + } + } + + /// Shared Paper folder with member. + open class PaperFolderTeamInviteDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperFolderTeamInviteDetailsSerializer().serialize(self)))" + } + } + open class PaperFolderTeamInviteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperFolderTeamInviteDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperFolderTeamInviteDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return PaperFolderTeamInviteDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PaperFolderTeamInviteType struct + open class PaperFolderTeamInviteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperFolderTeamInviteTypeSerializer().serialize(self)))" + } + } + open class PaperFolderTeamInviteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperFolderTeamInviteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PaperFolderTeamInviteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PaperFolderTeamInviteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Policy for controlling if team members can share Paper documents externally. + public enum PaperMemberPolicy: CustomStringConvertible { + /// An unspecified error. + case anyoneWithLink + /// An unspecified error. + case onlyTeam + /// An unspecified error. + case teamAndExplicitlyShared + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperMemberPolicySerializer().serialize(self)))" + } + } + open class PaperMemberPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperMemberPolicy) -> JSON { + switch value { + case .anyoneWithLink: + var d = [String: JSON]() + d[".tag"] = .str("anyone_with_link") + return .dictionary(d) + case .onlyTeam: + var d = [String: JSON]() + d[".tag"] = .str("only_team") + return .dictionary(d) + case .teamAndExplicitlyShared: + var d = [String: JSON]() + d[".tag"] = .str("team_and_explicitly_shared") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperMemberPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "anyone_with_link": + return PaperMemberPolicy.anyoneWithLink + case "only_team": + return PaperMemberPolicy.onlyTeam + case "team_and_explicitly_shared": + return PaperMemberPolicy.teamAndExplicitlyShared + case "other": + return PaperMemberPolicy.other + default: + return PaperMemberPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// A user or group + public enum ParticipantLogInfo: CustomStringConvertible { + /// A user with a Dropbox account. + case user(TeamLog.UserLogInfo) + /// Group details. + case group(TeamLog.GroupLogInfo) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ParticipantLogInfoSerializer().serialize(self)))" + } + } + open class ParticipantLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ParticipantLogInfo) -> JSON { + switch value { + case .user(let arg): + var d = ["user": TeamLog.UserLogInfoSerializer().serialize(arg)] + d[".tag"] = .str("user") + return .dictionary(d) + case .group(let arg): + var d = Serialization.getFields(TeamLog.GroupLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("group") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ParticipantLogInfo { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "user": + let v = TeamLog.UserLogInfoSerializer().deserialize(d["user"] ?? .null) + return ParticipantLogInfo.user(v) + case "group": + let v = TeamLog.GroupLogInfoSerializer().deserialize(json) + return ParticipantLogInfo.group(v) + case "other": + return ParticipantLogInfo.other + default: + return ParticipantLogInfo.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PassPolicy union + public enum PassPolicy: CustomStringConvertible { + /// An unspecified error. + case enabled + /// An unspecified error. + case allow + /// An unspecified error. + case disabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PassPolicySerializer().serialize(self)))" + } + } + open class PassPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PassPolicy) -> JSON { + switch value { + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .allow: + var d = [String: JSON]() + d[".tag"] = .str("allow") + return .dictionary(d) + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PassPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "enabled": + return PassPolicy.enabled + case "allow": + return PassPolicy.allow + case "disabled": + return PassPolicy.disabled + case "other": + return PassPolicy.other + default: + return PassPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Changed password. + open class PasswordChangeDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PasswordChangeDetailsSerializer().serialize(self)))" + } + } + open class PasswordChangeDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PasswordChangeDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PasswordChangeDetails { + switch json { + case .dictionary(_): + return PasswordChangeDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The PasswordChangeType struct + open class PasswordChangeType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PasswordChangeTypeSerializer().serialize(self)))" + } + } + open class PasswordChangeTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PasswordChangeType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PasswordChangeType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PasswordChangeType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Reset all team member passwords. + open class PasswordResetAllDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PasswordResetAllDetailsSerializer().serialize(self)))" + } + } + open class PasswordResetAllDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PasswordResetAllDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PasswordResetAllDetails { + switch json { + case .dictionary(_): + return PasswordResetAllDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The PasswordResetAllType struct + open class PasswordResetAllType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PasswordResetAllTypeSerializer().serialize(self)))" + } + } + open class PasswordResetAllTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PasswordResetAllType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PasswordResetAllType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PasswordResetAllType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Reset password. + open class PasswordResetDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PasswordResetDetailsSerializer().serialize(self)))" + } + } + open class PasswordResetDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PasswordResetDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PasswordResetDetails { + switch json { + case .dictionary(_): + return PasswordResetDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The PasswordResetType struct + open class PasswordResetType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PasswordResetTypeSerializer().serialize(self)))" + } + } + open class PasswordResetTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PasswordResetType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PasswordResetType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PasswordResetType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Path's details. + open class PathLogInfo: CustomStringConvertible { + /// Fully qualified path relative to event's context. Might be missing due to historical data gap. + public let contextual: String? + /// Path relative to the namespace containing the content. + public let namespaceRelative: TeamLog.NamespaceRelativePathLogInfo + public init(namespaceRelative: TeamLog.NamespaceRelativePathLogInfo, contextual: String? = nil) { + nullableValidator(stringValidator())(contextual) + self.contextual = contextual + self.namespaceRelative = namespaceRelative + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PathLogInfoSerializer().serialize(self)))" + } + } + open class PathLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PathLogInfo) -> JSON { + let output = [ + "namespace_relative": TeamLog.NamespaceRelativePathLogInfoSerializer().serialize(value.namespaceRelative), + "contextual": NullableSerializer(Serialization._StringSerializer).serialize(value.contextual), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PathLogInfo { + switch json { + case .dictionary(let dict): + let namespaceRelative = TeamLog.NamespaceRelativePathLogInfoSerializer().deserialize(dict["namespace_relative"] ?? .null) + let contextual = NullableSerializer(Serialization._StringSerializer).deserialize(dict["contextual"] ?? .null) + return PathLogInfo(namespaceRelative: namespaceRelative, contextual: contextual) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled ability of team members to permanently delete content. + open class PermanentDeleteChangePolicyDetails: CustomStringConvertible { + /// New permanent delete content policy. + public let newValue: TeamLog.ContentPermanentDeletePolicy + /// Previous permanent delete content policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.ContentPermanentDeletePolicy? + public init(newValue: TeamLog.ContentPermanentDeletePolicy, previousValue: TeamLog.ContentPermanentDeletePolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PermanentDeleteChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class PermanentDeleteChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PermanentDeleteChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.ContentPermanentDeletePolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.ContentPermanentDeletePolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PermanentDeleteChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.ContentPermanentDeletePolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.ContentPermanentDeletePolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return PermanentDeleteChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PermanentDeleteChangePolicyType struct + open class PermanentDeleteChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PermanentDeleteChangePolicyTypeSerializer().serialize(self)))" + } + } + open class PermanentDeleteChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PermanentDeleteChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> PermanentDeleteChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return PermanentDeleteChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The PlacementRestriction union + public enum PlacementRestriction: CustomStringConvertible { + /// An unspecified error. + case europeOnly + /// An unspecified error. + case none + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PlacementRestrictionSerializer().serialize(self)))" + } + } + open class PlacementRestrictionSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PlacementRestriction) -> JSON { + switch value { + case .europeOnly: + var d = [String: JSON]() + d[".tag"] = .str("europe_only") + return .dictionary(d) + case .none: + var d = [String: JSON]() + d[".tag"] = .str("none") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PlacementRestriction { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "europe_only": + return PlacementRestriction.europeOnly + case "none": + return PlacementRestriction.none + case "other": + return PlacementRestriction.other + default: + return PlacementRestriction.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Quick action type. + public enum QuickActionType: CustomStringConvertible { + /// An unspecified error. + case deleteSharedLink + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(QuickActionTypeSerializer().serialize(self)))" + } + } + open class QuickActionTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: QuickActionType) -> JSON { + switch value { + case .deleteSharedLink: + var d = [String: JSON]() + d[".tag"] = .str("delete_shared_link") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> QuickActionType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "delete_shared_link": + return QuickActionType.deleteSharedLink + case "other": + return QuickActionType.other + default: + return QuickActionType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Provides the indices of the source asset and the destination asset for a relocate action. + open class RelocateAssetReferencesLogInfo: CustomStringConvertible { + /// Source asset position in the Assets list. + public let srcAssetIndex: UInt64 + /// Destination asset position in the Assets list. + public let destAssetIndex: UInt64 + public init(srcAssetIndex: UInt64, destAssetIndex: UInt64) { + comparableValidator()(srcAssetIndex) + self.srcAssetIndex = srcAssetIndex + comparableValidator()(destAssetIndex) + self.destAssetIndex = destAssetIndex + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RelocateAssetReferencesLogInfoSerializer().serialize(self)))" + } + } + open class RelocateAssetReferencesLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RelocateAssetReferencesLogInfo) -> JSON { + let output = [ + "src_asset_index": Serialization._UInt64Serializer.serialize(value.srcAssetIndex), + "dest_asset_index": Serialization._UInt64Serializer.serialize(value.destAssetIndex), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> RelocateAssetReferencesLogInfo { + switch json { + case .dictionary(let dict): + let srcAssetIndex = Serialization._UInt64Serializer.deserialize(dict["src_asset_index"] ?? .null) + let destAssetIndex = Serialization._UInt64Serializer.deserialize(dict["dest_asset_index"] ?? .null) + return RelocateAssetReferencesLogInfo(srcAssetIndex: srcAssetIndex, destAssetIndex: destAssetIndex) + default: + fatalError("Type error deserializing") + } + } + } + + /// Reseller information. + open class ResellerLogInfo: CustomStringConvertible { + /// Reseller name. + public let resellerName: String + /// Reseller email. + public let resellerEmail: String + public init(resellerName: String, resellerEmail: String) { + stringValidator()(resellerName) + self.resellerName = resellerName + stringValidator(maxLength: 255)(resellerEmail) + self.resellerEmail = resellerEmail + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ResellerLogInfoSerializer().serialize(self)))" + } + } + open class ResellerLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ResellerLogInfo) -> JSON { + let output = [ + "reseller_name": Serialization._StringSerializer.serialize(value.resellerName), + "reseller_email": Serialization._StringSerializer.serialize(value.resellerEmail), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ResellerLogInfo { + switch json { + case .dictionary(let dict): + let resellerName = Serialization._StringSerializer.deserialize(dict["reseller_name"] ?? .null) + let resellerEmail = Serialization._StringSerializer.deserialize(dict["reseller_email"] ?? .null) + return ResellerLogInfo(resellerName: resellerName, resellerEmail: resellerEmail) + default: + fatalError("Type error deserializing") + } + } + } + + /// Ended reseller support session. + open class ResellerSupportSessionEndDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ResellerSupportSessionEndDetailsSerializer().serialize(self)))" + } + } + open class ResellerSupportSessionEndDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ResellerSupportSessionEndDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ResellerSupportSessionEndDetails { + switch json { + case .dictionary(_): + return ResellerSupportSessionEndDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The ResellerSupportSessionEndType struct + open class ResellerSupportSessionEndType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ResellerSupportSessionEndTypeSerializer().serialize(self)))" + } + } + open class ResellerSupportSessionEndTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ResellerSupportSessionEndType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ResellerSupportSessionEndType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ResellerSupportSessionEndType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Started reseller support session. + open class ResellerSupportSessionStartDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ResellerSupportSessionStartDetailsSerializer().serialize(self)))" + } + } + open class ResellerSupportSessionStartDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ResellerSupportSessionStartDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ResellerSupportSessionStartDetails { + switch json { + case .dictionary(_): + return ResellerSupportSessionStartDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The ResellerSupportSessionStartType struct + open class ResellerSupportSessionStartType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ResellerSupportSessionStartTypeSerializer().serialize(self)))" + } + } + open class ResellerSupportSessionStartTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ResellerSupportSessionStartType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ResellerSupportSessionStartType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ResellerSupportSessionStartType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SecondaryMailsPolicy union + public enum SecondaryMailsPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SecondaryMailsPolicySerializer().serialize(self)))" + } + } + open class SecondaryMailsPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SecondaryMailsPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SecondaryMailsPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return SecondaryMailsPolicy.disabled + case "enabled": + return SecondaryMailsPolicy.enabled + case "other": + return SecondaryMailsPolicy.other + default: + return SecondaryMailsPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Secondary mails policy changed. + open class SecondaryMailsPolicyChangedDetails: CustomStringConvertible { + /// Previous secondary mails policy. + public let previousValue: TeamLog.SecondaryMailsPolicy + /// New secondary mails policy. + public let newValue: TeamLog.SecondaryMailsPolicy + public init(previousValue: TeamLog.SecondaryMailsPolicy, newValue: TeamLog.SecondaryMailsPolicy) { + self.previousValue = previousValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SecondaryMailsPolicyChangedDetailsSerializer().serialize(self)))" + } + } + open class SecondaryMailsPolicyChangedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SecondaryMailsPolicyChangedDetails) -> JSON { + let output = [ + "previous_value": TeamLog.SecondaryMailsPolicySerializer().serialize(value.previousValue), + "new_value": TeamLog.SecondaryMailsPolicySerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SecondaryMailsPolicyChangedDetails { + switch json { + case .dictionary(let dict): + let previousValue = TeamLog.SecondaryMailsPolicySerializer().deserialize(dict["previous_value"] ?? .null) + let newValue = TeamLog.SecondaryMailsPolicySerializer().deserialize(dict["new_value"] ?? .null) + return SecondaryMailsPolicyChangedDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SecondaryMailsPolicyChangedType struct + open class SecondaryMailsPolicyChangedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SecondaryMailsPolicyChangedTypeSerializer().serialize(self)))" + } + } + open class SecondaryMailsPolicyChangedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SecondaryMailsPolicyChangedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SecondaryMailsPolicyChangedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SecondaryMailsPolicyChangedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added team to shared folder. + open class SfAddGroupDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + /// Sharing permission. Might be missing due to historical data gap. + public let sharingPermission: String? + /// Team name. + public let teamName: String + public init(targetAssetIndex: UInt64, originalFolderName: String, teamName: String, sharingPermission: String? = nil) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + nullableValidator(stringValidator())(sharingPermission) + self.sharingPermission = sharingPermission + stringValidator()(teamName) + self.teamName = teamName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfAddGroupDetailsSerializer().serialize(self)))" + } + } + open class SfAddGroupDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfAddGroupDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + "team_name": Serialization._StringSerializer.serialize(value.teamName), + "sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.sharingPermission), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfAddGroupDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + let teamName = Serialization._StringSerializer.deserialize(dict["team_name"] ?? .null) + let sharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["sharing_permission"] ?? .null) + return SfAddGroupDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName, teamName: teamName, sharingPermission: sharingPermission) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfAddGroupType struct + open class SfAddGroupType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfAddGroupTypeSerializer().serialize(self)))" + } + } + open class SfAddGroupTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfAddGroupType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfAddGroupType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfAddGroupType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Allowed non-collaborators to view links to files in shared folder. + open class SfAllowNonMembersToViewSharedLinksDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + /// Shared folder type. Might be missing due to historical data gap. + public let sharedFolderType: String? + public init(targetAssetIndex: UInt64, originalFolderName: String, sharedFolderType: String? = nil) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + nullableValidator(stringValidator())(sharedFolderType) + self.sharedFolderType = sharedFolderType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfAllowNonMembersToViewSharedLinksDetailsSerializer().serialize(self)))" + } + } + open class SfAllowNonMembersToViewSharedLinksDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfAllowNonMembersToViewSharedLinksDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + "shared_folder_type": NullableSerializer(Serialization._StringSerializer).serialize(value.sharedFolderType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfAllowNonMembersToViewSharedLinksDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + let sharedFolderType = NullableSerializer(Serialization._StringSerializer).deserialize(dict["shared_folder_type"] ?? .null) + return SfAllowNonMembersToViewSharedLinksDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName, sharedFolderType: sharedFolderType) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfAllowNonMembersToViewSharedLinksType struct + open class SfAllowNonMembersToViewSharedLinksType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfAllowNonMembersToViewSharedLinksTypeSerializer().serialize(self)))" + } + } + open class SfAllowNonMembersToViewSharedLinksTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfAllowNonMembersToViewSharedLinksType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfAllowNonMembersToViewSharedLinksType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfAllowNonMembersToViewSharedLinksType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Set team members to see warning before sharing folders outside team. + open class SfExternalInviteWarnDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + /// New sharing permission. Might be missing due to historical data gap. + public let newSharingPermission: String? + /// Previous sharing permission. Might be missing due to historical data gap. + public let previousSharingPermission: String? + public init(targetAssetIndex: UInt64, originalFolderName: String, newSharingPermission: String? = nil, previousSharingPermission: String? = nil) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + nullableValidator(stringValidator())(newSharingPermission) + self.newSharingPermission = newSharingPermission + nullableValidator(stringValidator())(previousSharingPermission) + self.previousSharingPermission = previousSharingPermission + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfExternalInviteWarnDetailsSerializer().serialize(self)))" + } + } + open class SfExternalInviteWarnDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfExternalInviteWarnDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + "new_sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.newSharingPermission), + "previous_sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.previousSharingPermission), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfExternalInviteWarnDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + let newSharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_sharing_permission"] ?? .null) + let previousSharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_sharing_permission"] ?? .null) + return SfExternalInviteWarnDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName, newSharingPermission: newSharingPermission, previousSharingPermission: previousSharingPermission) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfExternalInviteWarnType struct + open class SfExternalInviteWarnType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfExternalInviteWarnTypeSerializer().serialize(self)))" + } + } + open class SfExternalInviteWarnTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfExternalInviteWarnType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfExternalInviteWarnType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfExternalInviteWarnType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed Facebook user's role in shared folder. + open class SfFbInviteChangeRoleDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + /// Previous sharing permission. Might be missing due to historical data gap. + public let previousSharingPermission: String? + /// New sharing permission. Might be missing due to historical data gap. + public let newSharingPermission: String? + public init(targetAssetIndex: UInt64, originalFolderName: String, previousSharingPermission: String? = nil, newSharingPermission: String? = nil) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + nullableValidator(stringValidator())(previousSharingPermission) + self.previousSharingPermission = previousSharingPermission + nullableValidator(stringValidator())(newSharingPermission) + self.newSharingPermission = newSharingPermission + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfFbInviteChangeRoleDetailsSerializer().serialize(self)))" + } + } + open class SfFbInviteChangeRoleDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfFbInviteChangeRoleDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + "previous_sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.previousSharingPermission), + "new_sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.newSharingPermission), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfFbInviteChangeRoleDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + let previousSharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_sharing_permission"] ?? .null) + let newSharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_sharing_permission"] ?? .null) + return SfFbInviteChangeRoleDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName, previousSharingPermission: previousSharingPermission, newSharingPermission: newSharingPermission) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfFbInviteChangeRoleType struct + open class SfFbInviteChangeRoleType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfFbInviteChangeRoleTypeSerializer().serialize(self)))" + } + } + open class SfFbInviteChangeRoleTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfFbInviteChangeRoleType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfFbInviteChangeRoleType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfFbInviteChangeRoleType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Invited Facebook users to shared folder. + open class SfFbInviteDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + /// Sharing permission. Might be missing due to historical data gap. + public let sharingPermission: String? + public init(targetAssetIndex: UInt64, originalFolderName: String, sharingPermission: String? = nil) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + nullableValidator(stringValidator())(sharingPermission) + self.sharingPermission = sharingPermission + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfFbInviteDetailsSerializer().serialize(self)))" + } + } + open class SfFbInviteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfFbInviteDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + "sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.sharingPermission), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfFbInviteDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + let sharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["sharing_permission"] ?? .null) + return SfFbInviteDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName, sharingPermission: sharingPermission) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfFbInviteType struct + open class SfFbInviteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfFbInviteTypeSerializer().serialize(self)))" + } + } + open class SfFbInviteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfFbInviteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfFbInviteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfFbInviteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Uninvited Facebook user from shared folder. + open class SfFbUninviteDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + public init(targetAssetIndex: UInt64, originalFolderName: String) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfFbUninviteDetailsSerializer().serialize(self)))" + } + } + open class SfFbUninviteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfFbUninviteDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfFbUninviteDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + return SfFbUninviteDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfFbUninviteType struct + open class SfFbUninviteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfFbUninviteTypeSerializer().serialize(self)))" + } + } + open class SfFbUninviteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfFbUninviteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfFbUninviteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfFbUninviteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Invited group to shared folder. + open class SfInviteGroupDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + public init(targetAssetIndex: UInt64) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfInviteGroupDetailsSerializer().serialize(self)))" + } + } + open class SfInviteGroupDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfInviteGroupDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfInviteGroupDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + return SfInviteGroupDetails(targetAssetIndex: targetAssetIndex) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfInviteGroupType struct + open class SfInviteGroupType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfInviteGroupTypeSerializer().serialize(self)))" + } + } + open class SfInviteGroupTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfInviteGroupType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfInviteGroupType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfInviteGroupType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Granted access to shared folder. + open class SfTeamGrantAccessDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + public init(targetAssetIndex: UInt64, originalFolderName: String) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamGrantAccessDetailsSerializer().serialize(self)))" + } + } + open class SfTeamGrantAccessDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamGrantAccessDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamGrantAccessDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + return SfTeamGrantAccessDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfTeamGrantAccessType struct + open class SfTeamGrantAccessType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamGrantAccessTypeSerializer().serialize(self)))" + } + } + open class SfTeamGrantAccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamGrantAccessType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamGrantAccessType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfTeamGrantAccessType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed team member's role in shared folder. + open class SfTeamInviteChangeRoleDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + /// New sharing permission. Might be missing due to historical data gap. + public let newSharingPermission: String? + /// Previous sharing permission. Might be missing due to historical data gap. + public let previousSharingPermission: String? + public init(targetAssetIndex: UInt64, originalFolderName: String, newSharingPermission: String? = nil, previousSharingPermission: String? = nil) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + nullableValidator(stringValidator())(newSharingPermission) + self.newSharingPermission = newSharingPermission + nullableValidator(stringValidator())(previousSharingPermission) + self.previousSharingPermission = previousSharingPermission + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamInviteChangeRoleDetailsSerializer().serialize(self)))" + } + } + open class SfTeamInviteChangeRoleDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamInviteChangeRoleDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + "new_sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.newSharingPermission), + "previous_sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.previousSharingPermission), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamInviteChangeRoleDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + let newSharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_sharing_permission"] ?? .null) + let previousSharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_sharing_permission"] ?? .null) + return SfTeamInviteChangeRoleDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName, newSharingPermission: newSharingPermission, previousSharingPermission: previousSharingPermission) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfTeamInviteChangeRoleType struct + open class SfTeamInviteChangeRoleType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamInviteChangeRoleTypeSerializer().serialize(self)))" + } + } + open class SfTeamInviteChangeRoleTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamInviteChangeRoleType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamInviteChangeRoleType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfTeamInviteChangeRoleType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Invited team members to shared folder. + open class SfTeamInviteDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + /// Sharing permission. Might be missing due to historical data gap. + public let sharingPermission: String? + public init(targetAssetIndex: UInt64, originalFolderName: String, sharingPermission: String? = nil) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + nullableValidator(stringValidator())(sharingPermission) + self.sharingPermission = sharingPermission + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamInviteDetailsSerializer().serialize(self)))" + } + } + open class SfTeamInviteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamInviteDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + "sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.sharingPermission), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamInviteDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + let sharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["sharing_permission"] ?? .null) + return SfTeamInviteDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName, sharingPermission: sharingPermission) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfTeamInviteType struct + open class SfTeamInviteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamInviteTypeSerializer().serialize(self)))" + } + } + open class SfTeamInviteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamInviteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamInviteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfTeamInviteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Joined team member's shared folder. + open class SfTeamJoinDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + public init(targetAssetIndex: UInt64, originalFolderName: String) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamJoinDetailsSerializer().serialize(self)))" + } + } + open class SfTeamJoinDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamJoinDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamJoinDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + return SfTeamJoinDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName) + default: + fatalError("Type error deserializing") + } + } + } + + /// Joined team member's shared folder from link. + open class SfTeamJoinFromOobLinkDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + /// Shared link token key. + public let tokenKey: String? + /// Sharing permission. Might be missing due to historical data gap. + public let sharingPermission: String? + public init(targetAssetIndex: UInt64, originalFolderName: String, tokenKey: String? = nil, sharingPermission: String? = nil) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + nullableValidator(stringValidator())(tokenKey) + self.tokenKey = tokenKey + nullableValidator(stringValidator())(sharingPermission) + self.sharingPermission = sharingPermission + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamJoinFromOobLinkDetailsSerializer().serialize(self)))" + } + } + open class SfTeamJoinFromOobLinkDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamJoinFromOobLinkDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + "token_key": NullableSerializer(Serialization._StringSerializer).serialize(value.tokenKey), + "sharing_permission": NullableSerializer(Serialization._StringSerializer).serialize(value.sharingPermission), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamJoinFromOobLinkDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + let tokenKey = NullableSerializer(Serialization._StringSerializer).deserialize(dict["token_key"] ?? .null) + let sharingPermission = NullableSerializer(Serialization._StringSerializer).deserialize(dict["sharing_permission"] ?? .null) + return SfTeamJoinFromOobLinkDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName, tokenKey: tokenKey, sharingPermission: sharingPermission) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfTeamJoinFromOobLinkType struct + open class SfTeamJoinFromOobLinkType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamJoinFromOobLinkTypeSerializer().serialize(self)))" + } + } + open class SfTeamJoinFromOobLinkTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamJoinFromOobLinkType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamJoinFromOobLinkType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfTeamJoinFromOobLinkType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfTeamJoinType struct + open class SfTeamJoinType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamJoinTypeSerializer().serialize(self)))" + } + } + open class SfTeamJoinTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamJoinType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamJoinType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfTeamJoinType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Unshared folder with team member. + open class SfTeamUninviteDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + /// Original shared folder name. + public let originalFolderName: String + public init(targetAssetIndex: UInt64, originalFolderName: String) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + stringValidator()(originalFolderName) + self.originalFolderName = originalFolderName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamUninviteDetailsSerializer().serialize(self)))" + } + } + open class SfTeamUninviteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamUninviteDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + "original_folder_name": Serialization._StringSerializer.serialize(value.originalFolderName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamUninviteDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + let originalFolderName = Serialization._StringSerializer.deserialize(dict["original_folder_name"] ?? .null) + return SfTeamUninviteDetails(targetAssetIndex: targetAssetIndex, originalFolderName: originalFolderName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SfTeamUninviteType struct + open class SfTeamUninviteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SfTeamUninviteTypeSerializer().serialize(self)))" + } + } + open class SfTeamUninviteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SfTeamUninviteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SfTeamUninviteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SfTeamUninviteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Invited user to Dropbox and added them to shared file/folder. + open class SharedContentAddInviteesDetails: CustomStringConvertible { + /// Shared content access level. + public let sharedContentAccessLevel: Sharing.AccessLevel + /// A list of invitees. + public let invitees: Array + public init(sharedContentAccessLevel: Sharing.AccessLevel, invitees: Array) { + self.sharedContentAccessLevel = sharedContentAccessLevel + arrayValidator(itemValidator: stringValidator(maxLength: 255))(invitees) + self.invitees = invitees + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentAddInviteesDetailsSerializer().serialize(self)))" + } + } + open class SharedContentAddInviteesDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentAddInviteesDetails) -> JSON { + let output = [ + "shared_content_access_level": Sharing.AccessLevelSerializer().serialize(value.sharedContentAccessLevel), + "invitees": ArraySerializer(Serialization._StringSerializer).serialize(value.invitees), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentAddInviteesDetails { + switch json { + case .dictionary(let dict): + let sharedContentAccessLevel = Sharing.AccessLevelSerializer().deserialize(dict["shared_content_access_level"] ?? .null) + let invitees = ArraySerializer(Serialization._StringSerializer).deserialize(dict["invitees"] ?? .null) + return SharedContentAddInviteesDetails(sharedContentAccessLevel: sharedContentAccessLevel, invitees: invitees) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentAddInviteesType struct + open class SharedContentAddInviteesType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentAddInviteesTypeSerializer().serialize(self)))" + } + } + open class SharedContentAddInviteesTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentAddInviteesType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentAddInviteesType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentAddInviteesType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added expiration date to link for shared file/folder. + open class SharedContentAddLinkExpiryDetails: CustomStringConvertible { + /// New shared content link expiration date. Might be missing due to historical data gap. + public let newValue: Date? + public init(newValue: Date? = nil) { + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentAddLinkExpiryDetailsSerializer().serialize(self)))" + } + } + open class SharedContentAddLinkExpiryDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentAddLinkExpiryDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentAddLinkExpiryDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["new_value"] ?? .null) + return SharedContentAddLinkExpiryDetails(newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentAddLinkExpiryType struct + open class SharedContentAddLinkExpiryType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentAddLinkExpiryTypeSerializer().serialize(self)))" + } + } + open class SharedContentAddLinkExpiryTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentAddLinkExpiryType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentAddLinkExpiryType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentAddLinkExpiryType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added password to link for shared file/folder. + open class SharedContentAddLinkPasswordDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentAddLinkPasswordDetailsSerializer().serialize(self)))" + } + } + open class SharedContentAddLinkPasswordDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentAddLinkPasswordDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentAddLinkPasswordDetails { + switch json { + case .dictionary(_): + return SharedContentAddLinkPasswordDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentAddLinkPasswordType struct + open class SharedContentAddLinkPasswordType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentAddLinkPasswordTypeSerializer().serialize(self)))" + } + } + open class SharedContentAddLinkPasswordTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentAddLinkPasswordType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentAddLinkPasswordType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentAddLinkPasswordType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added users and/or groups to shared file/folder. + open class SharedContentAddMemberDetails: CustomStringConvertible { + /// Shared content access level. + public let sharedContentAccessLevel: Sharing.AccessLevel + public init(sharedContentAccessLevel: Sharing.AccessLevel) { + self.sharedContentAccessLevel = sharedContentAccessLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentAddMemberDetailsSerializer().serialize(self)))" + } + } + open class SharedContentAddMemberDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentAddMemberDetails) -> JSON { + let output = [ + "shared_content_access_level": Sharing.AccessLevelSerializer().serialize(value.sharedContentAccessLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentAddMemberDetails { + switch json { + case .dictionary(let dict): + let sharedContentAccessLevel = Sharing.AccessLevelSerializer().deserialize(dict["shared_content_access_level"] ?? .null) + return SharedContentAddMemberDetails(sharedContentAccessLevel: sharedContentAccessLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentAddMemberType struct + open class SharedContentAddMemberType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentAddMemberTypeSerializer().serialize(self)))" + } + } + open class SharedContentAddMemberTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentAddMemberType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentAddMemberType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentAddMemberType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed whether members can download shared file/folder. + open class SharedContentChangeDownloadsPolicyDetails: CustomStringConvertible { + /// New downloads policy. + public let newValue: TeamLog.DownloadPolicyType + /// Previous downloads policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.DownloadPolicyType? + public init(newValue: TeamLog.DownloadPolicyType, previousValue: TeamLog.DownloadPolicyType? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeDownloadsPolicyDetailsSerializer().serialize(self)))" + } + } + open class SharedContentChangeDownloadsPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeDownloadsPolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.DownloadPolicyTypeSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.DownloadPolicyTypeSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeDownloadsPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.DownloadPolicyTypeSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.DownloadPolicyTypeSerializer()).deserialize(dict["previous_value"] ?? .null) + return SharedContentChangeDownloadsPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentChangeDownloadsPolicyType struct + open class SharedContentChangeDownloadsPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeDownloadsPolicyTypeSerializer().serialize(self)))" + } + } + open class SharedContentChangeDownloadsPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeDownloadsPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeDownloadsPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentChangeDownloadsPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed access type of invitee to shared file/folder before invite was accepted. + open class SharedContentChangeInviteeRoleDetails: CustomStringConvertible { + /// Previous access level. Might be missing due to historical data gap. + public let previousAccessLevel: Sharing.AccessLevel? + /// New access level. + public let newAccessLevel: Sharing.AccessLevel + /// The invitee whose role was changed. + public let invitee: String + public init(newAccessLevel: Sharing.AccessLevel, invitee: String, previousAccessLevel: Sharing.AccessLevel? = nil) { + self.previousAccessLevel = previousAccessLevel + self.newAccessLevel = newAccessLevel + stringValidator(maxLength: 255)(invitee) + self.invitee = invitee + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeInviteeRoleDetailsSerializer().serialize(self)))" + } + } + open class SharedContentChangeInviteeRoleDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeInviteeRoleDetails) -> JSON { + let output = [ + "new_access_level": Sharing.AccessLevelSerializer().serialize(value.newAccessLevel), + "invitee": Serialization._StringSerializer.serialize(value.invitee), + "previous_access_level": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(value.previousAccessLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeInviteeRoleDetails { + switch json { + case .dictionary(let dict): + let newAccessLevel = Sharing.AccessLevelSerializer().deserialize(dict["new_access_level"] ?? .null) + let invitee = Serialization._StringSerializer.deserialize(dict["invitee"] ?? .null) + let previousAccessLevel = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(dict["previous_access_level"] ?? .null) + return SharedContentChangeInviteeRoleDetails(newAccessLevel: newAccessLevel, invitee: invitee, previousAccessLevel: previousAccessLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentChangeInviteeRoleType struct + open class SharedContentChangeInviteeRoleType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeInviteeRoleTypeSerializer().serialize(self)))" + } + } + open class SharedContentChangeInviteeRoleTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeInviteeRoleType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeInviteeRoleType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentChangeInviteeRoleType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed link audience of shared file/folder. + open class SharedContentChangeLinkAudienceDetails: CustomStringConvertible { + /// New link audience value. + public let newValue: Sharing.LinkAudience + /// Previous link audience value. + public let previousValue: Sharing.LinkAudience? + public init(newValue: Sharing.LinkAudience, previousValue: Sharing.LinkAudience? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeLinkAudienceDetailsSerializer().serialize(self)))" + } + } + open class SharedContentChangeLinkAudienceDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeLinkAudienceDetails) -> JSON { + let output = [ + "new_value": Sharing.LinkAudienceSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(Sharing.LinkAudienceSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeLinkAudienceDetails { + switch json { + case .dictionary(let dict): + let newValue = Sharing.LinkAudienceSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(Sharing.LinkAudienceSerializer()).deserialize(dict["previous_value"] ?? .null) + return SharedContentChangeLinkAudienceDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentChangeLinkAudienceType struct + open class SharedContentChangeLinkAudienceType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeLinkAudienceTypeSerializer().serialize(self)))" + } + } + open class SharedContentChangeLinkAudienceTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeLinkAudienceType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeLinkAudienceType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentChangeLinkAudienceType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed link expiration of shared file/folder. + open class SharedContentChangeLinkExpiryDetails: CustomStringConvertible { + /// New shared content link expiration date. Might be missing due to historical data gap. + public let newValue: Date? + /// Previous shared content link expiration date. Might be missing due to historical data gap. + public let previousValue: Date? + public init(newValue: Date? = nil, previousValue: Date? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeLinkExpiryDetailsSerializer().serialize(self)))" + } + } + open class SharedContentChangeLinkExpiryDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeLinkExpiryDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.newValue), + "previous_value": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeLinkExpiryDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["previous_value"] ?? .null) + return SharedContentChangeLinkExpiryDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentChangeLinkExpiryType struct + open class SharedContentChangeLinkExpiryType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeLinkExpiryTypeSerializer().serialize(self)))" + } + } + open class SharedContentChangeLinkExpiryTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeLinkExpiryType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeLinkExpiryType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentChangeLinkExpiryType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed link password of shared file/folder. + open class SharedContentChangeLinkPasswordDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeLinkPasswordDetailsSerializer().serialize(self)))" + } + } + open class SharedContentChangeLinkPasswordDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeLinkPasswordDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeLinkPasswordDetails { + switch json { + case .dictionary(_): + return SharedContentChangeLinkPasswordDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentChangeLinkPasswordType struct + open class SharedContentChangeLinkPasswordType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeLinkPasswordTypeSerializer().serialize(self)))" + } + } + open class SharedContentChangeLinkPasswordTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeLinkPasswordType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeLinkPasswordType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentChangeLinkPasswordType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed access type of shared file/folder member. + open class SharedContentChangeMemberRoleDetails: CustomStringConvertible { + /// Previous access level. Might be missing due to historical data gap. + public let previousAccessLevel: Sharing.AccessLevel? + /// New access level. + public let newAccessLevel: Sharing.AccessLevel + public init(newAccessLevel: Sharing.AccessLevel, previousAccessLevel: Sharing.AccessLevel? = nil) { + self.previousAccessLevel = previousAccessLevel + self.newAccessLevel = newAccessLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeMemberRoleDetailsSerializer().serialize(self)))" + } + } + open class SharedContentChangeMemberRoleDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeMemberRoleDetails) -> JSON { + let output = [ + "new_access_level": Sharing.AccessLevelSerializer().serialize(value.newAccessLevel), + "previous_access_level": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(value.previousAccessLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeMemberRoleDetails { + switch json { + case .dictionary(let dict): + let newAccessLevel = Sharing.AccessLevelSerializer().deserialize(dict["new_access_level"] ?? .null) + let previousAccessLevel = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(dict["previous_access_level"] ?? .null) + return SharedContentChangeMemberRoleDetails(newAccessLevel: newAccessLevel, previousAccessLevel: previousAccessLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentChangeMemberRoleType struct + open class SharedContentChangeMemberRoleType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeMemberRoleTypeSerializer().serialize(self)))" + } + } + open class SharedContentChangeMemberRoleTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeMemberRoleType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeMemberRoleType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentChangeMemberRoleType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed whether members can see who viewed shared file/folder. + open class SharedContentChangeViewerInfoPolicyDetails: CustomStringConvertible { + /// New viewer info policy. + public let newValue: Sharing.ViewerInfoPolicy + /// Previous view info policy. Might be missing due to historical data gap. + public let previousValue: Sharing.ViewerInfoPolicy? + public init(newValue: Sharing.ViewerInfoPolicy, previousValue: Sharing.ViewerInfoPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeViewerInfoPolicyDetailsSerializer().serialize(self)))" + } + } + open class SharedContentChangeViewerInfoPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeViewerInfoPolicyDetails) -> JSON { + let output = [ + "new_value": Sharing.ViewerInfoPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(Sharing.ViewerInfoPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeViewerInfoPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = Sharing.ViewerInfoPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(Sharing.ViewerInfoPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SharedContentChangeViewerInfoPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentChangeViewerInfoPolicyType struct + open class SharedContentChangeViewerInfoPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentChangeViewerInfoPolicyTypeSerializer().serialize(self)))" + } + } + open class SharedContentChangeViewerInfoPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentChangeViewerInfoPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentChangeViewerInfoPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentChangeViewerInfoPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Acquired membership of shared file/folder by accepting invite. + open class SharedContentClaimInvitationDetails: CustomStringConvertible { + /// Shared content link. + public let sharedContentLink: String? + public init(sharedContentLink: String? = nil) { + nullableValidator(stringValidator())(sharedContentLink) + self.sharedContentLink = sharedContentLink + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentClaimInvitationDetailsSerializer().serialize(self)))" + } + } + open class SharedContentClaimInvitationDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentClaimInvitationDetails) -> JSON { + let output = [ + "shared_content_link": NullableSerializer(Serialization._StringSerializer).serialize(value.sharedContentLink), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentClaimInvitationDetails { + switch json { + case .dictionary(let dict): + let sharedContentLink = NullableSerializer(Serialization._StringSerializer).deserialize(dict["shared_content_link"] ?? .null) + return SharedContentClaimInvitationDetails(sharedContentLink: sharedContentLink) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentClaimInvitationType struct + open class SharedContentClaimInvitationType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentClaimInvitationTypeSerializer().serialize(self)))" + } + } + open class SharedContentClaimInvitationTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentClaimInvitationType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentClaimInvitationType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentClaimInvitationType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Copied shared file/folder to own Dropbox. + open class SharedContentCopyDetails: CustomStringConvertible { + /// Shared content link. + public let sharedContentLink: String + /// The shared content owner. + public let sharedContentOwner: TeamLog.UserLogInfo? + /// Shared content access level. + public let sharedContentAccessLevel: Sharing.AccessLevel + /// The path where the member saved the content. + public let destinationPath: String + public init(sharedContentLink: String, sharedContentAccessLevel: Sharing.AccessLevel, destinationPath: String, sharedContentOwner: TeamLog.UserLogInfo? = nil) { + stringValidator()(sharedContentLink) + self.sharedContentLink = sharedContentLink + self.sharedContentOwner = sharedContentOwner + self.sharedContentAccessLevel = sharedContentAccessLevel + stringValidator()(destinationPath) + self.destinationPath = destinationPath + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentCopyDetailsSerializer().serialize(self)))" + } + } + open class SharedContentCopyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentCopyDetails) -> JSON { + let output = [ + "shared_content_link": Serialization._StringSerializer.serialize(value.sharedContentLink), + "shared_content_access_level": Sharing.AccessLevelSerializer().serialize(value.sharedContentAccessLevel), + "destination_path": Serialization._StringSerializer.serialize(value.destinationPath), + "shared_content_owner": NullableSerializer(TeamLog.UserLogInfoSerializer()).serialize(value.sharedContentOwner), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentCopyDetails { + switch json { + case .dictionary(let dict): + let sharedContentLink = Serialization._StringSerializer.deserialize(dict["shared_content_link"] ?? .null) + let sharedContentAccessLevel = Sharing.AccessLevelSerializer().deserialize(dict["shared_content_access_level"] ?? .null) + let destinationPath = Serialization._StringSerializer.deserialize(dict["destination_path"] ?? .null) + let sharedContentOwner = NullableSerializer(TeamLog.UserLogInfoSerializer()).deserialize(dict["shared_content_owner"] ?? .null) + return SharedContentCopyDetails(sharedContentLink: sharedContentLink, sharedContentAccessLevel: sharedContentAccessLevel, destinationPath: destinationPath, sharedContentOwner: sharedContentOwner) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentCopyType struct + open class SharedContentCopyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentCopyTypeSerializer().serialize(self)))" + } + } + open class SharedContentCopyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentCopyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentCopyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentCopyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Downloaded shared file/folder. + open class SharedContentDownloadDetails: CustomStringConvertible { + /// Shared content link. + public let sharedContentLink: String + /// The shared content owner. + public let sharedContentOwner: TeamLog.UserLogInfo? + /// Shared content access level. + public let sharedContentAccessLevel: Sharing.AccessLevel + public init(sharedContentLink: String, sharedContentAccessLevel: Sharing.AccessLevel, sharedContentOwner: TeamLog.UserLogInfo? = nil) { + stringValidator()(sharedContentLink) + self.sharedContentLink = sharedContentLink + self.sharedContentOwner = sharedContentOwner + self.sharedContentAccessLevel = sharedContentAccessLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentDownloadDetailsSerializer().serialize(self)))" + } + } + open class SharedContentDownloadDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentDownloadDetails) -> JSON { + let output = [ + "shared_content_link": Serialization._StringSerializer.serialize(value.sharedContentLink), + "shared_content_access_level": Sharing.AccessLevelSerializer().serialize(value.sharedContentAccessLevel), + "shared_content_owner": NullableSerializer(TeamLog.UserLogInfoSerializer()).serialize(value.sharedContentOwner), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentDownloadDetails { + switch json { + case .dictionary(let dict): + let sharedContentLink = Serialization._StringSerializer.deserialize(dict["shared_content_link"] ?? .null) + let sharedContentAccessLevel = Sharing.AccessLevelSerializer().deserialize(dict["shared_content_access_level"] ?? .null) + let sharedContentOwner = NullableSerializer(TeamLog.UserLogInfoSerializer()).deserialize(dict["shared_content_owner"] ?? .null) + return SharedContentDownloadDetails(sharedContentLink: sharedContentLink, sharedContentAccessLevel: sharedContentAccessLevel, sharedContentOwner: sharedContentOwner) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentDownloadType struct + open class SharedContentDownloadType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentDownloadTypeSerializer().serialize(self)))" + } + } + open class SharedContentDownloadTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentDownloadType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentDownloadType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentDownloadType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Left shared file/folder. + open class SharedContentRelinquishMembershipDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRelinquishMembershipDetailsSerializer().serialize(self)))" + } + } + open class SharedContentRelinquishMembershipDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRelinquishMembershipDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRelinquishMembershipDetails { + switch json { + case .dictionary(_): + return SharedContentRelinquishMembershipDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentRelinquishMembershipType struct + open class SharedContentRelinquishMembershipType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRelinquishMembershipTypeSerializer().serialize(self)))" + } + } + open class SharedContentRelinquishMembershipTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRelinquishMembershipType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRelinquishMembershipType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentRelinquishMembershipType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed invitee from shared file/folder before invite was accepted. + open class SharedContentRemoveInviteesDetails: CustomStringConvertible { + /// A list of invitees. + public let invitees: Array + public init(invitees: Array) { + arrayValidator(itemValidator: stringValidator(maxLength: 255))(invitees) + self.invitees = invitees + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRemoveInviteesDetailsSerializer().serialize(self)))" + } + } + open class SharedContentRemoveInviteesDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRemoveInviteesDetails) -> JSON { + let output = [ + "invitees": ArraySerializer(Serialization._StringSerializer).serialize(value.invitees), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRemoveInviteesDetails { + switch json { + case .dictionary(let dict): + let invitees = ArraySerializer(Serialization._StringSerializer).deserialize(dict["invitees"] ?? .null) + return SharedContentRemoveInviteesDetails(invitees: invitees) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentRemoveInviteesType struct + open class SharedContentRemoveInviteesType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRemoveInviteesTypeSerializer().serialize(self)))" + } + } + open class SharedContentRemoveInviteesTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRemoveInviteesType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRemoveInviteesType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentRemoveInviteesType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed link expiration date of shared file/folder. + open class SharedContentRemoveLinkExpiryDetails: CustomStringConvertible { + /// Previous shared content link expiration date. Might be missing due to historical data gap. + public let previousValue: Date? + public init(previousValue: Date? = nil) { + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRemoveLinkExpiryDetailsSerializer().serialize(self)))" + } + } + open class SharedContentRemoveLinkExpiryDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRemoveLinkExpiryDetails) -> JSON { + let output = [ + "previous_value": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRemoveLinkExpiryDetails { + switch json { + case .dictionary(let dict): + let previousValue = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["previous_value"] ?? .null) + return SharedContentRemoveLinkExpiryDetails(previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentRemoveLinkExpiryType struct + open class SharedContentRemoveLinkExpiryType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRemoveLinkExpiryTypeSerializer().serialize(self)))" + } + } + open class SharedContentRemoveLinkExpiryTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRemoveLinkExpiryType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRemoveLinkExpiryType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentRemoveLinkExpiryType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed link password of shared file/folder. + open class SharedContentRemoveLinkPasswordDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRemoveLinkPasswordDetailsSerializer().serialize(self)))" + } + } + open class SharedContentRemoveLinkPasswordDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRemoveLinkPasswordDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRemoveLinkPasswordDetails { + switch json { + case .dictionary(_): + return SharedContentRemoveLinkPasswordDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentRemoveLinkPasswordType struct + open class SharedContentRemoveLinkPasswordType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRemoveLinkPasswordTypeSerializer().serialize(self)))" + } + } + open class SharedContentRemoveLinkPasswordTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRemoveLinkPasswordType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRemoveLinkPasswordType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentRemoveLinkPasswordType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed user/group from shared file/folder. + open class SharedContentRemoveMemberDetails: CustomStringConvertible { + /// Shared content access level. + public let sharedContentAccessLevel: Sharing.AccessLevel? + public init(sharedContentAccessLevel: Sharing.AccessLevel? = nil) { + self.sharedContentAccessLevel = sharedContentAccessLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRemoveMemberDetailsSerializer().serialize(self)))" + } + } + open class SharedContentRemoveMemberDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRemoveMemberDetails) -> JSON { + let output = [ + "shared_content_access_level": NullableSerializer(Sharing.AccessLevelSerializer()).serialize(value.sharedContentAccessLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRemoveMemberDetails { + switch json { + case .dictionary(let dict): + let sharedContentAccessLevel = NullableSerializer(Sharing.AccessLevelSerializer()).deserialize(dict["shared_content_access_level"] ?? .null) + return SharedContentRemoveMemberDetails(sharedContentAccessLevel: sharedContentAccessLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentRemoveMemberType struct + open class SharedContentRemoveMemberType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRemoveMemberTypeSerializer().serialize(self)))" + } + } + open class SharedContentRemoveMemberTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRemoveMemberType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRemoveMemberType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentRemoveMemberType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Requested access to shared file/folder. + open class SharedContentRequestAccessDetails: CustomStringConvertible { + /// Shared content link. + public let sharedContentLink: String? + public init(sharedContentLink: String? = nil) { + nullableValidator(stringValidator())(sharedContentLink) + self.sharedContentLink = sharedContentLink + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRequestAccessDetailsSerializer().serialize(self)))" + } + } + open class SharedContentRequestAccessDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRequestAccessDetails) -> JSON { + let output = [ + "shared_content_link": NullableSerializer(Serialization._StringSerializer).serialize(value.sharedContentLink), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRequestAccessDetails { + switch json { + case .dictionary(let dict): + let sharedContentLink = NullableSerializer(Serialization._StringSerializer).deserialize(dict["shared_content_link"] ?? .null) + return SharedContentRequestAccessDetails(sharedContentLink: sharedContentLink) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentRequestAccessType struct + open class SharedContentRequestAccessType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentRequestAccessTypeSerializer().serialize(self)))" + } + } + open class SharedContentRequestAccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentRequestAccessType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentRequestAccessType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentRequestAccessType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Unshared file/folder by clearing membership and turning off link. + open class SharedContentUnshareDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentUnshareDetailsSerializer().serialize(self)))" + } + } + open class SharedContentUnshareDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentUnshareDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentUnshareDetails { + switch json { + case .dictionary(_): + return SharedContentUnshareDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentUnshareType struct + open class SharedContentUnshareType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentUnshareTypeSerializer().serialize(self)))" + } + } + open class SharedContentUnshareTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentUnshareType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentUnshareType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentUnshareType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Previewed shared file/folder. + open class SharedContentViewDetails: CustomStringConvertible { + /// Shared content link. + public let sharedContentLink: String + /// The shared content owner. + public let sharedContentOwner: TeamLog.UserLogInfo? + /// Shared content access level. + public let sharedContentAccessLevel: Sharing.AccessLevel + public init(sharedContentLink: String, sharedContentAccessLevel: Sharing.AccessLevel, sharedContentOwner: TeamLog.UserLogInfo? = nil) { + stringValidator()(sharedContentLink) + self.sharedContentLink = sharedContentLink + self.sharedContentOwner = sharedContentOwner + self.sharedContentAccessLevel = sharedContentAccessLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentViewDetailsSerializer().serialize(self)))" + } + } + open class SharedContentViewDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentViewDetails) -> JSON { + let output = [ + "shared_content_link": Serialization._StringSerializer.serialize(value.sharedContentLink), + "shared_content_access_level": Sharing.AccessLevelSerializer().serialize(value.sharedContentAccessLevel), + "shared_content_owner": NullableSerializer(TeamLog.UserLogInfoSerializer()).serialize(value.sharedContentOwner), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentViewDetails { + switch json { + case .dictionary(let dict): + let sharedContentLink = Serialization._StringSerializer.deserialize(dict["shared_content_link"] ?? .null) + let sharedContentAccessLevel = Sharing.AccessLevelSerializer().deserialize(dict["shared_content_access_level"] ?? .null) + let sharedContentOwner = NullableSerializer(TeamLog.UserLogInfoSerializer()).deserialize(dict["shared_content_owner"] ?? .null) + return SharedContentViewDetails(sharedContentLink: sharedContentLink, sharedContentAccessLevel: sharedContentAccessLevel, sharedContentOwner: sharedContentOwner) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedContentViewType struct + open class SharedContentViewType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedContentViewTypeSerializer().serialize(self)))" + } + } + open class SharedContentViewTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedContentViewType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedContentViewType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedContentViewType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed who can access shared folder via link. + open class SharedFolderChangeLinkPolicyDetails: CustomStringConvertible { + /// New shared folder link policy. + public let newValue: Sharing.SharedLinkPolicy + /// Previous shared folder link policy. Might be missing due to historical data gap. + public let previousValue: Sharing.SharedLinkPolicy? + public init(newValue: Sharing.SharedLinkPolicy, previousValue: Sharing.SharedLinkPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderChangeLinkPolicyDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderChangeLinkPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderChangeLinkPolicyDetails) -> JSON { + let output = [ + "new_value": Sharing.SharedLinkPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(Sharing.SharedLinkPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderChangeLinkPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = Sharing.SharedLinkPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(Sharing.SharedLinkPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SharedFolderChangeLinkPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderChangeLinkPolicyType struct + open class SharedFolderChangeLinkPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderChangeLinkPolicyTypeSerializer().serialize(self)))" + } + } + open class SharedFolderChangeLinkPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderChangeLinkPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderChangeLinkPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderChangeLinkPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed whether shared folder inherits members from parent folder. + open class SharedFolderChangeMembersInheritancePolicyDetails: CustomStringConvertible { + /// New member inheritance policy. + public let newValue: TeamLog.SharedFolderMembersInheritancePolicy + /// Previous member inheritance policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.SharedFolderMembersInheritancePolicy? + public init(newValue: TeamLog.SharedFolderMembersInheritancePolicy, previousValue: TeamLog.SharedFolderMembersInheritancePolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderChangeMembersInheritancePolicyDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderChangeMembersInheritancePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderChangeMembersInheritancePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.SharedFolderMembersInheritancePolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.SharedFolderMembersInheritancePolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderChangeMembersInheritancePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.SharedFolderMembersInheritancePolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.SharedFolderMembersInheritancePolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SharedFolderChangeMembersInheritancePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderChangeMembersInheritancePolicyType struct + open class SharedFolderChangeMembersInheritancePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderChangeMembersInheritancePolicyTypeSerializer().serialize(self)))" + } + } + open class SharedFolderChangeMembersInheritancePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderChangeMembersInheritancePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderChangeMembersInheritancePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderChangeMembersInheritancePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed who can add/remove members of shared folder. + open class SharedFolderChangeMembersManagementPolicyDetails: CustomStringConvertible { + /// New members management policy. + public let newValue: Sharing.AclUpdatePolicy + /// Previous members management policy. Might be missing due to historical data gap. + public let previousValue: Sharing.AclUpdatePolicy? + public init(newValue: Sharing.AclUpdatePolicy, previousValue: Sharing.AclUpdatePolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderChangeMembersManagementPolicyDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderChangeMembersManagementPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderChangeMembersManagementPolicyDetails) -> JSON { + let output = [ + "new_value": Sharing.AclUpdatePolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(Sharing.AclUpdatePolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderChangeMembersManagementPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = Sharing.AclUpdatePolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(Sharing.AclUpdatePolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SharedFolderChangeMembersManagementPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderChangeMembersManagementPolicyType struct + open class SharedFolderChangeMembersManagementPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderChangeMembersManagementPolicyTypeSerializer().serialize(self)))" + } + } + open class SharedFolderChangeMembersManagementPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderChangeMembersManagementPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderChangeMembersManagementPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderChangeMembersManagementPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed who can become member of shared folder. + open class SharedFolderChangeMembersPolicyDetails: CustomStringConvertible { + /// New external invite policy. + public let newValue: Sharing.MemberPolicy + /// Previous external invite policy. Might be missing due to historical data gap. + public let previousValue: Sharing.MemberPolicy? + public init(newValue: Sharing.MemberPolicy, previousValue: Sharing.MemberPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderChangeMembersPolicyDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderChangeMembersPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderChangeMembersPolicyDetails) -> JSON { + let output = [ + "new_value": Sharing.MemberPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(Sharing.MemberPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderChangeMembersPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = Sharing.MemberPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(Sharing.MemberPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SharedFolderChangeMembersPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderChangeMembersPolicyType struct + open class SharedFolderChangeMembersPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderChangeMembersPolicyTypeSerializer().serialize(self)))" + } + } + open class SharedFolderChangeMembersPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderChangeMembersPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderChangeMembersPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderChangeMembersPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created shared folder. + open class SharedFolderCreateDetails: CustomStringConvertible { + /// Target namespace ID. Might be missing due to historical data gap. + public let targetNsId: String? + public init(targetNsId: String? = nil) { + nullableValidator(stringValidator())(targetNsId) + self.targetNsId = targetNsId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderCreateDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderCreateDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderCreateDetails) -> JSON { + let output = [ + "target_ns_id": NullableSerializer(Serialization._StringSerializer).serialize(value.targetNsId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderCreateDetails { + switch json { + case .dictionary(let dict): + let targetNsId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["target_ns_id"] ?? .null) + return SharedFolderCreateDetails(targetNsId: targetNsId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderCreateType struct + open class SharedFolderCreateType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderCreateTypeSerializer().serialize(self)))" + } + } + open class SharedFolderCreateTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderCreateType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderCreateType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderCreateType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Declined team member's invite to shared folder. + open class SharedFolderDeclineInvitationDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderDeclineInvitationDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderDeclineInvitationDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderDeclineInvitationDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderDeclineInvitationDetails { + switch json { + case .dictionary(_): + return SharedFolderDeclineInvitationDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderDeclineInvitationType struct + open class SharedFolderDeclineInvitationType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderDeclineInvitationTypeSerializer().serialize(self)))" + } + } + open class SharedFolderDeclineInvitationTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderDeclineInvitationType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderDeclineInvitationType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderDeclineInvitationType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Specifies if a shared folder inherits its members from the parent folder. + public enum SharedFolderMembersInheritancePolicy: CustomStringConvertible { + /// An unspecified error. + case inheritMembers + /// An unspecified error. + case dontInheritMembers + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderMembersInheritancePolicySerializer().serialize(self)))" + } + } + open class SharedFolderMembersInheritancePolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderMembersInheritancePolicy) -> JSON { + switch value { + case .inheritMembers: + var d = [String: JSON]() + d[".tag"] = .str("inherit_members") + return .dictionary(d) + case .dontInheritMembers: + var d = [String: JSON]() + d[".tag"] = .str("dont_inherit_members") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedFolderMembersInheritancePolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "inherit_members": + return SharedFolderMembersInheritancePolicy.inheritMembers + case "dont_inherit_members": + return SharedFolderMembersInheritancePolicy.dontInheritMembers + case "other": + return SharedFolderMembersInheritancePolicy.other + default: + return SharedFolderMembersInheritancePolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Added shared folder to own Dropbox. + open class SharedFolderMountDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderMountDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderMountDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderMountDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderMountDetails { + switch json { + case .dictionary(_): + return SharedFolderMountDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderMountType struct + open class SharedFolderMountType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderMountTypeSerializer().serialize(self)))" + } + } + open class SharedFolderMountTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderMountType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderMountType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderMountType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed parent of shared folder. + open class SharedFolderNestDetails: CustomStringConvertible { + /// Previous parent namespace ID. Might be missing due to historical data gap. + public let previousParentNsId: String? + /// New parent namespace ID. Might be missing due to historical data gap. + public let newParentNsId: String? + /// Previous namespace path. Might be missing due to historical data gap. + public let previousNsPath: String? + /// New namespace path. Might be missing due to historical data gap. + public let newNsPath: String? + public init(previousParentNsId: String? = nil, newParentNsId: String? = nil, previousNsPath: String? = nil, newNsPath: String? = nil) { + nullableValidator(stringValidator())(previousParentNsId) + self.previousParentNsId = previousParentNsId + nullableValidator(stringValidator())(newParentNsId) + self.newParentNsId = newParentNsId + nullableValidator(stringValidator())(previousNsPath) + self.previousNsPath = previousNsPath + nullableValidator(stringValidator())(newNsPath) + self.newNsPath = newNsPath + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderNestDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderNestDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderNestDetails) -> JSON { + let output = [ + "previous_parent_ns_id": NullableSerializer(Serialization._StringSerializer).serialize(value.previousParentNsId), + "new_parent_ns_id": NullableSerializer(Serialization._StringSerializer).serialize(value.newParentNsId), + "previous_ns_path": NullableSerializer(Serialization._StringSerializer).serialize(value.previousNsPath), + "new_ns_path": NullableSerializer(Serialization._StringSerializer).serialize(value.newNsPath), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderNestDetails { + switch json { + case .dictionary(let dict): + let previousParentNsId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_parent_ns_id"] ?? .null) + let newParentNsId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_parent_ns_id"] ?? .null) + let previousNsPath = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_ns_path"] ?? .null) + let newNsPath = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_ns_path"] ?? .null) + return SharedFolderNestDetails(previousParentNsId: previousParentNsId, newParentNsId: newParentNsId, previousNsPath: previousNsPath, newNsPath: newNsPath) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderNestType struct + open class SharedFolderNestType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderNestTypeSerializer().serialize(self)))" + } + } + open class SharedFolderNestTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderNestType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderNestType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderNestType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Transferred ownership of shared folder to another member. + open class SharedFolderTransferOwnershipDetails: CustomStringConvertible { + /// The email address of the previous shared folder owner. + public let previousOwnerEmail: String? + /// The email address of the new shared folder owner. + public let newOwnerEmail: String + public init(newOwnerEmail: String, previousOwnerEmail: String? = nil) { + nullableValidator(stringValidator(maxLength: 255))(previousOwnerEmail) + self.previousOwnerEmail = previousOwnerEmail + stringValidator(maxLength: 255)(newOwnerEmail) + self.newOwnerEmail = newOwnerEmail + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderTransferOwnershipDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderTransferOwnershipDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderTransferOwnershipDetails) -> JSON { + let output = [ + "new_owner_email": Serialization._StringSerializer.serialize(value.newOwnerEmail), + "previous_owner_email": NullableSerializer(Serialization._StringSerializer).serialize(value.previousOwnerEmail), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderTransferOwnershipDetails { + switch json { + case .dictionary(let dict): + let newOwnerEmail = Serialization._StringSerializer.deserialize(dict["new_owner_email"] ?? .null) + let previousOwnerEmail = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_owner_email"] ?? .null) + return SharedFolderTransferOwnershipDetails(newOwnerEmail: newOwnerEmail, previousOwnerEmail: previousOwnerEmail) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderTransferOwnershipType struct + open class SharedFolderTransferOwnershipType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderTransferOwnershipTypeSerializer().serialize(self)))" + } + } + open class SharedFolderTransferOwnershipTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderTransferOwnershipType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderTransferOwnershipType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderTransferOwnershipType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted shared folder from Dropbox. + open class SharedFolderUnmountDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderUnmountDetailsSerializer().serialize(self)))" + } + } + open class SharedFolderUnmountDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderUnmountDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderUnmountDetails { + switch json { + case .dictionary(_): + return SharedFolderUnmountDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedFolderUnmountType struct + open class SharedFolderUnmountType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderUnmountTypeSerializer().serialize(self)))" + } + } + open class SharedFolderUnmountTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderUnmountType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedFolderUnmountType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedFolderUnmountType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Shared link access level. + public enum SharedLinkAccessLevel: CustomStringConvertible { + /// An unspecified error. + case none + /// An unspecified error. + case reader + /// An unspecified error. + case writer + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkAccessLevelSerializer().serialize(self)))" + } + } + open class SharedLinkAccessLevelSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkAccessLevel) -> JSON { + switch value { + case .none: + var d = [String: JSON]() + d[".tag"] = .str("none") + return .dictionary(d) + case .reader: + var d = [String: JSON]() + d[".tag"] = .str("reader") + return .dictionary(d) + case .writer: + var d = [String: JSON]() + d[".tag"] = .str("writer") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedLinkAccessLevel { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "none": + return SharedLinkAccessLevel.none + case "reader": + return SharedLinkAccessLevel.reader + case "writer": + return SharedLinkAccessLevel.writer + case "other": + return SharedLinkAccessLevel.other + default: + return SharedLinkAccessLevel.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Added shared link expiration date. + open class SharedLinkAddExpiryDetails: CustomStringConvertible { + /// New shared link expiration date. + public let newValue: Date + public init(newValue: Date) { + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkAddExpiryDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkAddExpiryDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkAddExpiryDetails) -> JSON { + let output = [ + "new_value": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkAddExpiryDetails { + switch json { + case .dictionary(let dict): + let newValue = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["new_value"] ?? .null) + return SharedLinkAddExpiryDetails(newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkAddExpiryType struct + open class SharedLinkAddExpiryType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkAddExpiryTypeSerializer().serialize(self)))" + } + } + open class SharedLinkAddExpiryTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkAddExpiryType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkAddExpiryType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkAddExpiryType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed shared link expiration date. + open class SharedLinkChangeExpiryDetails: CustomStringConvertible { + /// New shared link expiration date. Might be missing due to historical data gap. + public let newValue: Date? + /// Previous shared link expiration date. Might be missing due to historical data gap. + public let previousValue: Date? + public init(newValue: Date? = nil, previousValue: Date? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkChangeExpiryDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkChangeExpiryDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkChangeExpiryDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.newValue), + "previous_value": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkChangeExpiryDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["previous_value"] ?? .null) + return SharedLinkChangeExpiryDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkChangeExpiryType struct + open class SharedLinkChangeExpiryType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkChangeExpiryTypeSerializer().serialize(self)))" + } + } + open class SharedLinkChangeExpiryTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkChangeExpiryType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkChangeExpiryType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkChangeExpiryType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed visibility of shared link. + open class SharedLinkChangeVisibilityDetails: CustomStringConvertible { + /// New shared link visibility. + public let newValue: TeamLog.SharedLinkVisibility + /// Previous shared link visibility. Might be missing due to historical data gap. + public let previousValue: TeamLog.SharedLinkVisibility? + public init(newValue: TeamLog.SharedLinkVisibility, previousValue: TeamLog.SharedLinkVisibility? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkChangeVisibilityDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkChangeVisibilityDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkChangeVisibilityDetails) -> JSON { + let output = [ + "new_value": TeamLog.SharedLinkVisibilitySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.SharedLinkVisibilitySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkChangeVisibilityDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.SharedLinkVisibilitySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.SharedLinkVisibilitySerializer()).deserialize(dict["previous_value"] ?? .null) + return SharedLinkChangeVisibilityDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkChangeVisibilityType struct + open class SharedLinkChangeVisibilityType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkChangeVisibilityTypeSerializer().serialize(self)))" + } + } + open class SharedLinkChangeVisibilityTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkChangeVisibilityType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkChangeVisibilityType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkChangeVisibilityType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added file/folder to Dropbox from shared link. + open class SharedLinkCopyDetails: CustomStringConvertible { + /// Shared link owner details. Might be missing due to historical data gap. + public let sharedLinkOwner: TeamLog.UserLogInfo? + public init(sharedLinkOwner: TeamLog.UserLogInfo? = nil) { + self.sharedLinkOwner = sharedLinkOwner + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkCopyDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkCopyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkCopyDetails) -> JSON { + let output = [ + "shared_link_owner": NullableSerializer(TeamLog.UserLogInfoSerializer()).serialize(value.sharedLinkOwner), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkCopyDetails { + switch json { + case .dictionary(let dict): + let sharedLinkOwner = NullableSerializer(TeamLog.UserLogInfoSerializer()).deserialize(dict["shared_link_owner"] ?? .null) + return SharedLinkCopyDetails(sharedLinkOwner: sharedLinkOwner) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkCopyType struct + open class SharedLinkCopyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkCopyTypeSerializer().serialize(self)))" + } + } + open class SharedLinkCopyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkCopyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkCopyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkCopyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created shared link. + open class SharedLinkCreateDetails: CustomStringConvertible { + /// Defines who can access the shared link. Might be missing due to historical data gap. + public let sharedLinkAccessLevel: TeamLog.SharedLinkAccessLevel? + public init(sharedLinkAccessLevel: TeamLog.SharedLinkAccessLevel? = nil) { + self.sharedLinkAccessLevel = sharedLinkAccessLevel + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkCreateDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkCreateDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkCreateDetails) -> JSON { + let output = [ + "shared_link_access_level": NullableSerializer(TeamLog.SharedLinkAccessLevelSerializer()).serialize(value.sharedLinkAccessLevel), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkCreateDetails { + switch json { + case .dictionary(let dict): + let sharedLinkAccessLevel = NullableSerializer(TeamLog.SharedLinkAccessLevelSerializer()).deserialize(dict["shared_link_access_level"] ?? .null) + return SharedLinkCreateDetails(sharedLinkAccessLevel: sharedLinkAccessLevel) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkCreateType struct + open class SharedLinkCreateType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkCreateTypeSerializer().serialize(self)))" + } + } + open class SharedLinkCreateTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkCreateType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkCreateType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkCreateType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed shared link. + open class SharedLinkDisableDetails: CustomStringConvertible { + /// Shared link owner details. Might be missing due to historical data gap. + public let sharedLinkOwner: TeamLog.UserLogInfo? + public init(sharedLinkOwner: TeamLog.UserLogInfo? = nil) { + self.sharedLinkOwner = sharedLinkOwner + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkDisableDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkDisableDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkDisableDetails) -> JSON { + let output = [ + "shared_link_owner": NullableSerializer(TeamLog.UserLogInfoSerializer()).serialize(value.sharedLinkOwner), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkDisableDetails { + switch json { + case .dictionary(let dict): + let sharedLinkOwner = NullableSerializer(TeamLog.UserLogInfoSerializer()).deserialize(dict["shared_link_owner"] ?? .null) + return SharedLinkDisableDetails(sharedLinkOwner: sharedLinkOwner) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkDisableType struct + open class SharedLinkDisableType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkDisableTypeSerializer().serialize(self)))" + } + } + open class SharedLinkDisableTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkDisableType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkDisableType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkDisableType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Downloaded file/folder from shared link. + open class SharedLinkDownloadDetails: CustomStringConvertible { + /// Shared link owner details. Might be missing due to historical data gap. + public let sharedLinkOwner: TeamLog.UserLogInfo? + public init(sharedLinkOwner: TeamLog.UserLogInfo? = nil) { + self.sharedLinkOwner = sharedLinkOwner + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkDownloadDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkDownloadDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkDownloadDetails) -> JSON { + let output = [ + "shared_link_owner": NullableSerializer(TeamLog.UserLogInfoSerializer()).serialize(value.sharedLinkOwner), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkDownloadDetails { + switch json { + case .dictionary(let dict): + let sharedLinkOwner = NullableSerializer(TeamLog.UserLogInfoSerializer()).deserialize(dict["shared_link_owner"] ?? .null) + return SharedLinkDownloadDetails(sharedLinkOwner: sharedLinkOwner) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkDownloadType struct + open class SharedLinkDownloadType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkDownloadTypeSerializer().serialize(self)))" + } + } + open class SharedLinkDownloadTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkDownloadType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkDownloadType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkDownloadType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed shared link expiration date. + open class SharedLinkRemoveExpiryDetails: CustomStringConvertible { + /// Previous shared link expiration date. Might be missing due to historical data gap. + public let previousValue: Date? + public init(previousValue: Date? = nil) { + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkRemoveExpiryDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkRemoveExpiryDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkRemoveExpiryDetails) -> JSON { + let output = [ + "previous_value": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkRemoveExpiryDetails { + switch json { + case .dictionary(let dict): + let previousValue = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["previous_value"] ?? .null) + return SharedLinkRemoveExpiryDetails(previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkRemoveExpiryType struct + open class SharedLinkRemoveExpiryType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkRemoveExpiryTypeSerializer().serialize(self)))" + } + } + open class SharedLinkRemoveExpiryTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkRemoveExpiryType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkRemoveExpiryType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkRemoveExpiryType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added members as audience of shared link. + open class SharedLinkShareDetails: CustomStringConvertible { + /// Shared link owner details. Might be missing due to historical data gap. + public let sharedLinkOwner: TeamLog.UserLogInfo? + /// Users without a Dropbox account that were added as shared link audience. + public let externalUsers: Array? + public init(sharedLinkOwner: TeamLog.UserLogInfo? = nil, externalUsers: Array? = nil) { + self.sharedLinkOwner = sharedLinkOwner + self.externalUsers = externalUsers + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkShareDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkShareDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkShareDetails) -> JSON { + let output = [ + "shared_link_owner": NullableSerializer(TeamLog.UserLogInfoSerializer()).serialize(value.sharedLinkOwner), + "external_users": NullableSerializer(ArraySerializer(TeamLog.ExternalUserLogInfoSerializer())).serialize(value.externalUsers), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkShareDetails { + switch json { + case .dictionary(let dict): + let sharedLinkOwner = NullableSerializer(TeamLog.UserLogInfoSerializer()).deserialize(dict["shared_link_owner"] ?? .null) + let externalUsers = NullableSerializer(ArraySerializer(TeamLog.ExternalUserLogInfoSerializer())).deserialize(dict["external_users"] ?? .null) + return SharedLinkShareDetails(sharedLinkOwner: sharedLinkOwner, externalUsers: externalUsers) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkShareType struct + open class SharedLinkShareType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkShareTypeSerializer().serialize(self)))" + } + } + open class SharedLinkShareTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkShareType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkShareType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkShareType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Opened shared link. + open class SharedLinkViewDetails: CustomStringConvertible { + /// Shared link owner details. Might be missing due to historical data gap. + public let sharedLinkOwner: TeamLog.UserLogInfo? + public init(sharedLinkOwner: TeamLog.UserLogInfo? = nil) { + self.sharedLinkOwner = sharedLinkOwner + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkViewDetailsSerializer().serialize(self)))" + } + } + open class SharedLinkViewDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkViewDetails) -> JSON { + let output = [ + "shared_link_owner": NullableSerializer(TeamLog.UserLogInfoSerializer()).serialize(value.sharedLinkOwner), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkViewDetails { + switch json { + case .dictionary(let dict): + let sharedLinkOwner = NullableSerializer(TeamLog.UserLogInfoSerializer()).deserialize(dict["shared_link_owner"] ?? .null) + return SharedLinkViewDetails(sharedLinkOwner: sharedLinkOwner) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedLinkViewType struct + open class SharedLinkViewType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkViewTypeSerializer().serialize(self)))" + } + } + open class SharedLinkViewTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkViewType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedLinkViewType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedLinkViewType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Defines who has access to a shared link. + public enum SharedLinkVisibility: CustomStringConvertible { + /// An unspecified error. + case password + /// An unspecified error. + case public_ + /// An unspecified error. + case teamOnly + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkVisibilitySerializer().serialize(self)))" + } + } + open class SharedLinkVisibilitySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkVisibility) -> JSON { + switch value { + case .password: + var d = [String: JSON]() + d[".tag"] = .str("password") + return .dictionary(d) + case .public_: + var d = [String: JSON]() + d[".tag"] = .str("public") + return .dictionary(d) + case .teamOnly: + var d = [String: JSON]() + d[".tag"] = .str("team_only") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedLinkVisibility { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "password": + return SharedLinkVisibility.password + case "public": + return SharedLinkVisibility.public_ + case "team_only": + return SharedLinkVisibility.teamOnly + case "other": + return SharedLinkVisibility.other + default: + return SharedLinkVisibility.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Opened shared Paper doc. + open class SharedNoteOpenedDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedNoteOpenedDetailsSerializer().serialize(self)))" + } + } + open class SharedNoteOpenedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedNoteOpenedDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedNoteOpenedDetails { + switch json { + case .dictionary(_): + return SharedNoteOpenedDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharedNoteOpenedType struct + open class SharedNoteOpenedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedNoteOpenedTypeSerializer().serialize(self)))" + } + } + open class SharedNoteOpenedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedNoteOpenedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharedNoteOpenedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharedNoteOpenedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed whether team members can join shared folders owned outside team. + open class SharingChangeFolderJoinPolicyDetails: CustomStringConvertible { + /// New external join policy. + public let newValue: TeamLog.SharingFolderJoinPolicy + /// Previous external join policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.SharingFolderJoinPolicy? + public init(newValue: TeamLog.SharingFolderJoinPolicy, previousValue: TeamLog.SharingFolderJoinPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingChangeFolderJoinPolicyDetailsSerializer().serialize(self)))" + } + } + open class SharingChangeFolderJoinPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingChangeFolderJoinPolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.SharingFolderJoinPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.SharingFolderJoinPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharingChangeFolderJoinPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.SharingFolderJoinPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.SharingFolderJoinPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SharingChangeFolderJoinPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharingChangeFolderJoinPolicyType struct + open class SharingChangeFolderJoinPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingChangeFolderJoinPolicyTypeSerializer().serialize(self)))" + } + } + open class SharingChangeFolderJoinPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingChangeFolderJoinPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharingChangeFolderJoinPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharingChangeFolderJoinPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed whether members can share links outside team, and if links are accessible only by team members or anyone + /// by default. + open class SharingChangeLinkPolicyDetails: CustomStringConvertible { + /// New external link accessibility policy. + public let newValue: TeamLog.SharingLinkPolicy + /// Previous external link accessibility policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.SharingLinkPolicy? + public init(newValue: TeamLog.SharingLinkPolicy, previousValue: TeamLog.SharingLinkPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingChangeLinkPolicyDetailsSerializer().serialize(self)))" + } + } + open class SharingChangeLinkPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingChangeLinkPolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.SharingLinkPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.SharingLinkPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharingChangeLinkPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.SharingLinkPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.SharingLinkPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SharingChangeLinkPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharingChangeLinkPolicyType struct + open class SharingChangeLinkPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingChangeLinkPolicyTypeSerializer().serialize(self)))" + } + } + open class SharingChangeLinkPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingChangeLinkPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharingChangeLinkPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharingChangeLinkPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed whether members can share files/folders outside team. + open class SharingChangeMemberPolicyDetails: CustomStringConvertible { + /// New external invite policy. + public let newValue: TeamLog.SharingMemberPolicy + /// Previous external invite policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.SharingMemberPolicy? + public init(newValue: TeamLog.SharingMemberPolicy, previousValue: TeamLog.SharingMemberPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingChangeMemberPolicyDetailsSerializer().serialize(self)))" + } + } + open class SharingChangeMemberPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingChangeMemberPolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.SharingMemberPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.SharingMemberPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharingChangeMemberPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.SharingMemberPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.SharingMemberPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SharingChangeMemberPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SharingChangeMemberPolicyType struct + open class SharingChangeMemberPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingChangeMemberPolicyTypeSerializer().serialize(self)))" + } + } + open class SharingChangeMemberPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingChangeMemberPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SharingChangeMemberPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SharingChangeMemberPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Policy for controlling if team members can join shared folders owned by non team members. + public enum SharingFolderJoinPolicy: CustomStringConvertible { + /// An unspecified error. + case fromAnyone + /// An unspecified error. + case fromTeamOnly + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingFolderJoinPolicySerializer().serialize(self)))" + } + } + open class SharingFolderJoinPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingFolderJoinPolicy) -> JSON { + switch value { + case .fromAnyone: + var d = [String: JSON]() + d[".tag"] = .str("from_anyone") + return .dictionary(d) + case .fromTeamOnly: + var d = [String: JSON]() + d[".tag"] = .str("from_team_only") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharingFolderJoinPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "from_anyone": + return SharingFolderJoinPolicy.fromAnyone + case "from_team_only": + return SharingFolderJoinPolicy.fromTeamOnly + case "other": + return SharingFolderJoinPolicy.other + default: + return SharingFolderJoinPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Policy for controlling if team members can share links externally + public enum SharingLinkPolicy: CustomStringConvertible { + /// An unspecified error. + case defaultPrivate + /// An unspecified error. + case defaultPublic + /// An unspecified error. + case onlyPrivate + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingLinkPolicySerializer().serialize(self)))" + } + } + open class SharingLinkPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingLinkPolicy) -> JSON { + switch value { + case .defaultPrivate: + var d = [String: JSON]() + d[".tag"] = .str("default_private") + return .dictionary(d) + case .defaultPublic: + var d = [String: JSON]() + d[".tag"] = .str("default_public") + return .dictionary(d) + case .onlyPrivate: + var d = [String: JSON]() + d[".tag"] = .str("only_private") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharingLinkPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "default_private": + return SharingLinkPolicy.defaultPrivate + case "default_public": + return SharingLinkPolicy.defaultPublic + case "only_private": + return SharingLinkPolicy.onlyPrivate + case "other": + return SharingLinkPolicy.other + default: + return SharingLinkPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// External sharing policy + public enum SharingMemberPolicy: CustomStringConvertible { + /// An unspecified error. + case allow + /// An unspecified error. + case forbid + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharingMemberPolicySerializer().serialize(self)))" + } + } + open class SharingMemberPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharingMemberPolicy) -> JSON { + switch value { + case .allow: + var d = [String: JSON]() + d[".tag"] = .str("allow") + return .dictionary(d) + case .forbid: + var d = [String: JSON]() + d[".tag"] = .str("forbid") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharingMemberPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "allow": + return SharingMemberPolicy.allow + case "forbid": + return SharingMemberPolicy.forbid + case "other": + return SharingMemberPolicy.other + default: + return SharingMemberPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Shared link with group. + open class ShmodelGroupShareDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShmodelGroupShareDetailsSerializer().serialize(self)))" + } + } + open class ShmodelGroupShareDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShmodelGroupShareDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShmodelGroupShareDetails { + switch json { + case .dictionary(_): + return ShmodelGroupShareDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShmodelGroupShareType struct + open class ShmodelGroupShareType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShmodelGroupShareTypeSerializer().serialize(self)))" + } + } + open class ShmodelGroupShareTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShmodelGroupShareType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShmodelGroupShareType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShmodelGroupShareType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Granted access to showcase. + open class ShowcaseAccessGrantedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseAccessGrantedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseAccessGrantedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseAccessGrantedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseAccessGrantedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseAccessGrantedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseAccessGrantedType struct + open class ShowcaseAccessGrantedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseAccessGrantedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseAccessGrantedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseAccessGrantedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseAccessGrantedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseAccessGrantedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added member to showcase. + open class ShowcaseAddMemberDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseAddMemberDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseAddMemberDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseAddMemberDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseAddMemberDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseAddMemberDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseAddMemberType struct + open class ShowcaseAddMemberType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseAddMemberTypeSerializer().serialize(self)))" + } + } + open class ShowcaseAddMemberTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseAddMemberType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseAddMemberType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseAddMemberType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Archived showcase. + open class ShowcaseArchivedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseArchivedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseArchivedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseArchivedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseArchivedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseArchivedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseArchivedType struct + open class ShowcaseArchivedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseArchivedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseArchivedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseArchivedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseArchivedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseArchivedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled downloading files from Dropbox Showcase for team. + open class ShowcaseChangeDownloadPolicyDetails: CustomStringConvertible { + /// New Dropbox Showcase download policy. + public let newValue: TeamLog.ShowcaseDownloadPolicy + /// Previous Dropbox Showcase download policy. + public let previousValue: TeamLog.ShowcaseDownloadPolicy + public init(newValue: TeamLog.ShowcaseDownloadPolicy, previousValue: TeamLog.ShowcaseDownloadPolicy) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseChangeDownloadPolicyDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseChangeDownloadPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseChangeDownloadPolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.ShowcaseDownloadPolicySerializer().serialize(value.newValue), + "previous_value": TeamLog.ShowcaseDownloadPolicySerializer().serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseChangeDownloadPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.ShowcaseDownloadPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = TeamLog.ShowcaseDownloadPolicySerializer().deserialize(dict["previous_value"] ?? .null) + return ShowcaseChangeDownloadPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseChangeDownloadPolicyType struct + open class ShowcaseChangeDownloadPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseChangeDownloadPolicyTypeSerializer().serialize(self)))" + } + } + open class ShowcaseChangeDownloadPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseChangeDownloadPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseChangeDownloadPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseChangeDownloadPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled Dropbox Showcase for team. + open class ShowcaseChangeEnabledPolicyDetails: CustomStringConvertible { + /// New Dropbox Showcase policy. + public let newValue: TeamLog.ShowcaseEnabledPolicy + /// Previous Dropbox Showcase policy. + public let previousValue: TeamLog.ShowcaseEnabledPolicy + public init(newValue: TeamLog.ShowcaseEnabledPolicy, previousValue: TeamLog.ShowcaseEnabledPolicy) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseChangeEnabledPolicyDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseChangeEnabledPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseChangeEnabledPolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.ShowcaseEnabledPolicySerializer().serialize(value.newValue), + "previous_value": TeamLog.ShowcaseEnabledPolicySerializer().serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseChangeEnabledPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.ShowcaseEnabledPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = TeamLog.ShowcaseEnabledPolicySerializer().deserialize(dict["previous_value"] ?? .null) + return ShowcaseChangeEnabledPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseChangeEnabledPolicyType struct + open class ShowcaseChangeEnabledPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseChangeEnabledPolicyTypeSerializer().serialize(self)))" + } + } + open class ShowcaseChangeEnabledPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseChangeEnabledPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseChangeEnabledPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseChangeEnabledPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled sharing Dropbox Showcase externally for team. + open class ShowcaseChangeExternalSharingPolicyDetails: CustomStringConvertible { + /// New Dropbox Showcase external sharing policy. + public let newValue: TeamLog.ShowcaseExternalSharingPolicy + /// Previous Dropbox Showcase external sharing policy. + public let previousValue: TeamLog.ShowcaseExternalSharingPolicy + public init(newValue: TeamLog.ShowcaseExternalSharingPolicy, previousValue: TeamLog.ShowcaseExternalSharingPolicy) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseChangeExternalSharingPolicyDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseChangeExternalSharingPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseChangeExternalSharingPolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.ShowcaseExternalSharingPolicySerializer().serialize(value.newValue), + "previous_value": TeamLog.ShowcaseExternalSharingPolicySerializer().serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseChangeExternalSharingPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.ShowcaseExternalSharingPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = TeamLog.ShowcaseExternalSharingPolicySerializer().deserialize(dict["previous_value"] ?? .null) + return ShowcaseChangeExternalSharingPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseChangeExternalSharingPolicyType struct + open class ShowcaseChangeExternalSharingPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseChangeExternalSharingPolicyTypeSerializer().serialize(self)))" + } + } + open class ShowcaseChangeExternalSharingPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseChangeExternalSharingPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseChangeExternalSharingPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseChangeExternalSharingPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created showcase. + open class ShowcaseCreatedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseCreatedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseCreatedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseCreatedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseCreatedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseCreatedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseCreatedType struct + open class ShowcaseCreatedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseCreatedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseCreatedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseCreatedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseCreatedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseCreatedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted showcase comment. + open class ShowcaseDeleteCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseDeleteCommentDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseDeleteCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseDeleteCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseDeleteCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return ShowcaseDeleteCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseDeleteCommentType struct + open class ShowcaseDeleteCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseDeleteCommentTypeSerializer().serialize(self)))" + } + } + open class ShowcaseDeleteCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseDeleteCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseDeleteCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseDeleteCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Showcase document's logged information. + open class ShowcaseDocumentLogInfo: CustomStringConvertible { + /// Showcase document Id. + public let showcaseId: String + /// Showcase document title. + public let showcaseTitle: String + public init(showcaseId: String, showcaseTitle: String) { + stringValidator()(showcaseId) + self.showcaseId = showcaseId + stringValidator()(showcaseTitle) + self.showcaseTitle = showcaseTitle + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseDocumentLogInfoSerializer().serialize(self)))" + } + } + open class ShowcaseDocumentLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseDocumentLogInfo) -> JSON { + let output = [ + "showcase_id": Serialization._StringSerializer.serialize(value.showcaseId), + "showcase_title": Serialization._StringSerializer.serialize(value.showcaseTitle), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseDocumentLogInfo { + switch json { + case .dictionary(let dict): + let showcaseId = Serialization._StringSerializer.deserialize(dict["showcase_id"] ?? .null) + let showcaseTitle = Serialization._StringSerializer.deserialize(dict["showcase_title"] ?? .null) + return ShowcaseDocumentLogInfo(showcaseId: showcaseId, showcaseTitle: showcaseTitle) + default: + fatalError("Type error deserializing") + } + } + } + + /// Policy for controlling if files can be downloaded from Showcases by team members + public enum ShowcaseDownloadPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseDownloadPolicySerializer().serialize(self)))" + } + } + open class ShowcaseDownloadPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseDownloadPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShowcaseDownloadPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return ShowcaseDownloadPolicy.disabled + case "enabled": + return ShowcaseDownloadPolicy.enabled + case "other": + return ShowcaseDownloadPolicy.other + default: + return ShowcaseDownloadPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Edited showcase comment. + open class ShowcaseEditCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseEditCommentDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseEditCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseEditCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseEditCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return ShowcaseEditCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseEditCommentType struct + open class ShowcaseEditCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseEditCommentTypeSerializer().serialize(self)))" + } + } + open class ShowcaseEditCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseEditCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseEditCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseEditCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Edited showcase. + open class ShowcaseEditedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseEditedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseEditedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseEditedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseEditedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseEditedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseEditedType struct + open class ShowcaseEditedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseEditedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseEditedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseEditedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseEditedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseEditedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Policy for controlling whether Showcase is enabled. + public enum ShowcaseEnabledPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseEnabledPolicySerializer().serialize(self)))" + } + } + open class ShowcaseEnabledPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseEnabledPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShowcaseEnabledPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return ShowcaseEnabledPolicy.disabled + case "enabled": + return ShowcaseEnabledPolicy.enabled + case "other": + return ShowcaseEnabledPolicy.other + default: + return ShowcaseEnabledPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Policy for controlling if team members can share Showcases externally. + public enum ShowcaseExternalSharingPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseExternalSharingPolicySerializer().serialize(self)))" + } + } + open class ShowcaseExternalSharingPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseExternalSharingPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShowcaseExternalSharingPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return ShowcaseExternalSharingPolicy.disabled + case "enabled": + return ShowcaseExternalSharingPolicy.enabled + case "other": + return ShowcaseExternalSharingPolicy.other + default: + return ShowcaseExternalSharingPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Added file to showcase. + open class ShowcaseFileAddedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseFileAddedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseFileAddedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseFileAddedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseFileAddedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseFileAddedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseFileAddedType struct + open class ShowcaseFileAddedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseFileAddedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseFileAddedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseFileAddedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseFileAddedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseFileAddedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Downloaded file from showcase. + open class ShowcaseFileDownloadDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Showcase download type. + public let downloadType: String + public init(eventUuid: String, downloadType: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + stringValidator()(downloadType) + self.downloadType = downloadType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseFileDownloadDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseFileDownloadDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseFileDownloadDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "download_type": Serialization._StringSerializer.serialize(value.downloadType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseFileDownloadDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let downloadType = Serialization._StringSerializer.deserialize(dict["download_type"] ?? .null) + return ShowcaseFileDownloadDetails(eventUuid: eventUuid, downloadType: downloadType) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseFileDownloadType struct + open class ShowcaseFileDownloadType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseFileDownloadTypeSerializer().serialize(self)))" + } + } + open class ShowcaseFileDownloadTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseFileDownloadType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseFileDownloadType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseFileDownloadType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed file from showcase. + open class ShowcaseFileRemovedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseFileRemovedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseFileRemovedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseFileRemovedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseFileRemovedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseFileRemovedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseFileRemovedType struct + open class ShowcaseFileRemovedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseFileRemovedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseFileRemovedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseFileRemovedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseFileRemovedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseFileRemovedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Viewed file in showcase. + open class ShowcaseFileViewDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseFileViewDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseFileViewDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseFileViewDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseFileViewDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseFileViewDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseFileViewType struct + open class ShowcaseFileViewType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseFileViewTypeSerializer().serialize(self)))" + } + } + open class ShowcaseFileViewTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseFileViewType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseFileViewType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseFileViewType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Permanently deleted showcase. + open class ShowcasePermanentlyDeletedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcasePermanentlyDeletedDetailsSerializer().serialize(self)))" + } + } + open class ShowcasePermanentlyDeletedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcasePermanentlyDeletedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcasePermanentlyDeletedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcasePermanentlyDeletedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcasePermanentlyDeletedType struct + open class ShowcasePermanentlyDeletedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcasePermanentlyDeletedTypeSerializer().serialize(self)))" + } + } + open class ShowcasePermanentlyDeletedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcasePermanentlyDeletedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcasePermanentlyDeletedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcasePermanentlyDeletedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added showcase comment. + open class ShowcasePostCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcasePostCommentDetailsSerializer().serialize(self)))" + } + } + open class ShowcasePostCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcasePostCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcasePostCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return ShowcasePostCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcasePostCommentType struct + open class ShowcasePostCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcasePostCommentTypeSerializer().serialize(self)))" + } + } + open class ShowcasePostCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcasePostCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcasePostCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcasePostCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed member from showcase. + open class ShowcaseRemoveMemberDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseRemoveMemberDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseRemoveMemberDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseRemoveMemberDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseRemoveMemberDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseRemoveMemberDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseRemoveMemberType struct + open class ShowcaseRemoveMemberType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseRemoveMemberTypeSerializer().serialize(self)))" + } + } + open class ShowcaseRemoveMemberTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseRemoveMemberType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseRemoveMemberType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseRemoveMemberType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Renamed showcase. + open class ShowcaseRenamedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseRenamedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseRenamedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseRenamedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseRenamedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseRenamedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseRenamedType struct + open class ShowcaseRenamedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseRenamedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseRenamedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseRenamedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseRenamedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseRenamedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Requested access to showcase. + open class ShowcaseRequestAccessDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseRequestAccessDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseRequestAccessDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseRequestAccessDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseRequestAccessDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseRequestAccessDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseRequestAccessType struct + open class ShowcaseRequestAccessType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseRequestAccessTypeSerializer().serialize(self)))" + } + } + open class ShowcaseRequestAccessTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseRequestAccessType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseRequestAccessType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseRequestAccessType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Resolved showcase comment. + open class ShowcaseResolveCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseResolveCommentDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseResolveCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseResolveCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseResolveCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return ShowcaseResolveCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseResolveCommentType struct + open class ShowcaseResolveCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseResolveCommentTypeSerializer().serialize(self)))" + } + } + open class ShowcaseResolveCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseResolveCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseResolveCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseResolveCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Unarchived showcase. + open class ShowcaseRestoredDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseRestoredDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseRestoredDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseRestoredDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseRestoredDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseRestoredDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseRestoredType struct + open class ShowcaseRestoredType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseRestoredTypeSerializer().serialize(self)))" + } + } + open class ShowcaseRestoredTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseRestoredType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseRestoredType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseRestoredType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted showcase (old version). + open class ShowcaseTrashedDeprecatedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseTrashedDeprecatedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseTrashedDeprecatedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseTrashedDeprecatedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseTrashedDeprecatedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseTrashedDeprecatedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseTrashedDeprecatedType struct + open class ShowcaseTrashedDeprecatedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseTrashedDeprecatedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseTrashedDeprecatedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseTrashedDeprecatedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseTrashedDeprecatedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseTrashedDeprecatedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Deleted showcase. + open class ShowcaseTrashedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseTrashedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseTrashedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseTrashedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseTrashedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseTrashedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseTrashedType struct + open class ShowcaseTrashedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseTrashedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseTrashedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseTrashedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseTrashedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseTrashedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Unresolved showcase comment. + open class ShowcaseUnresolveCommentDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + /// Comment text. + public let commentText: String? + public init(eventUuid: String, commentText: String? = nil) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + nullableValidator(stringValidator())(commentText) + self.commentText = commentText + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseUnresolveCommentDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseUnresolveCommentDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseUnresolveCommentDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + "comment_text": NullableSerializer(Serialization._StringSerializer).serialize(value.commentText), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseUnresolveCommentDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + let commentText = NullableSerializer(Serialization._StringSerializer).deserialize(dict["comment_text"] ?? .null) + return ShowcaseUnresolveCommentDetails(eventUuid: eventUuid, commentText: commentText) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseUnresolveCommentType struct + open class ShowcaseUnresolveCommentType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseUnresolveCommentTypeSerializer().serialize(self)))" + } + } + open class ShowcaseUnresolveCommentTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseUnresolveCommentType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseUnresolveCommentType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseUnresolveCommentType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Restored showcase (old version). + open class ShowcaseUntrashedDeprecatedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseUntrashedDeprecatedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseUntrashedDeprecatedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseUntrashedDeprecatedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseUntrashedDeprecatedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseUntrashedDeprecatedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseUntrashedDeprecatedType struct + open class ShowcaseUntrashedDeprecatedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseUntrashedDeprecatedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseUntrashedDeprecatedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseUntrashedDeprecatedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseUntrashedDeprecatedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseUntrashedDeprecatedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Restored showcase. + open class ShowcaseUntrashedDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseUntrashedDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseUntrashedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseUntrashedDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseUntrashedDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseUntrashedDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseUntrashedType struct + open class ShowcaseUntrashedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseUntrashedTypeSerializer().serialize(self)))" + } + } + open class ShowcaseUntrashedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseUntrashedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseUntrashedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseUntrashedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Viewed showcase. + open class ShowcaseViewDetails: CustomStringConvertible { + /// Event unique identifier. + public let eventUuid: String + public init(eventUuid: String) { + stringValidator()(eventUuid) + self.eventUuid = eventUuid + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseViewDetailsSerializer().serialize(self)))" + } + } + open class ShowcaseViewDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseViewDetails) -> JSON { + let output = [ + "event_uuid": Serialization._StringSerializer.serialize(value.eventUuid), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseViewDetails { + switch json { + case .dictionary(let dict): + let eventUuid = Serialization._StringSerializer.deserialize(dict["event_uuid"] ?? .null) + return ShowcaseViewDetails(eventUuid: eventUuid) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ShowcaseViewType struct + open class ShowcaseViewType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseViewTypeSerializer().serialize(self)))" + } + } + open class ShowcaseViewTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseViewType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ShowcaseViewType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ShowcaseViewType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Ended admin sign-in-as session. + open class SignInAsSessionEndDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SignInAsSessionEndDetailsSerializer().serialize(self)))" + } + } + open class SignInAsSessionEndDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SignInAsSessionEndDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SignInAsSessionEndDetails { + switch json { + case .dictionary(_): + return SignInAsSessionEndDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SignInAsSessionEndType struct + open class SignInAsSessionEndType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SignInAsSessionEndTypeSerializer().serialize(self)))" + } + } + open class SignInAsSessionEndTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SignInAsSessionEndType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SignInAsSessionEndType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SignInAsSessionEndType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Started admin sign-in-as session. + open class SignInAsSessionStartDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SignInAsSessionStartDetailsSerializer().serialize(self)))" + } + } + open class SignInAsSessionStartDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SignInAsSessionStartDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SignInAsSessionStartDetails { + switch json { + case .dictionary(_): + return SignInAsSessionStartDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SignInAsSessionStartType struct + open class SignInAsSessionStartType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SignInAsSessionStartTypeSerializer().serialize(self)))" + } + } + open class SignInAsSessionStartTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SignInAsSessionStartType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SignInAsSessionStartType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SignInAsSessionStartType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed default Smart Sync setting for team members. + open class SmartSyncChangePolicyDetails: CustomStringConvertible { + /// New smart sync policy. + public let newValue: TeamPolicies.SmartSyncPolicy? + /// Previous smart sync policy. + public let previousValue: TeamPolicies.SmartSyncPolicy? + public init(newValue: TeamPolicies.SmartSyncPolicy? = nil, previousValue: TeamPolicies.SmartSyncPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class SmartSyncChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncChangePolicyDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(TeamPolicies.SmartSyncPolicySerializer()).serialize(value.newValue), + "previous_value": NullableSerializer(TeamPolicies.SmartSyncPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SmartSyncChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(TeamPolicies.SmartSyncPolicySerializer()).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamPolicies.SmartSyncPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SmartSyncChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SmartSyncChangePolicyType struct + open class SmartSyncChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncChangePolicyTypeSerializer().serialize(self)))" + } + } + open class SmartSyncChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SmartSyncChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SmartSyncChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created Smart Sync non-admin devices report. + open class SmartSyncCreateAdminPrivilegeReportDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncCreateAdminPrivilegeReportDetailsSerializer().serialize(self)))" + } + } + open class SmartSyncCreateAdminPrivilegeReportDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncCreateAdminPrivilegeReportDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SmartSyncCreateAdminPrivilegeReportDetails { + switch json { + case .dictionary(_): + return SmartSyncCreateAdminPrivilegeReportDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SmartSyncCreateAdminPrivilegeReportType struct + open class SmartSyncCreateAdminPrivilegeReportType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncCreateAdminPrivilegeReportTypeSerializer().serialize(self)))" + } + } + open class SmartSyncCreateAdminPrivilegeReportTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncCreateAdminPrivilegeReportType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SmartSyncCreateAdminPrivilegeReportType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SmartSyncCreateAdminPrivilegeReportType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Opted team into Smart Sync. + open class SmartSyncNotOptOutDetails: CustomStringConvertible { + /// Previous Smart Sync opt out policy. + public let previousValue: TeamLog.SmartSyncOptOutPolicy + /// New Smart Sync opt out policy. + public let newValue: TeamLog.SmartSyncOptOutPolicy + public init(previousValue: TeamLog.SmartSyncOptOutPolicy, newValue: TeamLog.SmartSyncOptOutPolicy) { + self.previousValue = previousValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncNotOptOutDetailsSerializer().serialize(self)))" + } + } + open class SmartSyncNotOptOutDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncNotOptOutDetails) -> JSON { + let output = [ + "previous_value": TeamLog.SmartSyncOptOutPolicySerializer().serialize(value.previousValue), + "new_value": TeamLog.SmartSyncOptOutPolicySerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SmartSyncNotOptOutDetails { + switch json { + case .dictionary(let dict): + let previousValue = TeamLog.SmartSyncOptOutPolicySerializer().deserialize(dict["previous_value"] ?? .null) + let newValue = TeamLog.SmartSyncOptOutPolicySerializer().deserialize(dict["new_value"] ?? .null) + return SmartSyncNotOptOutDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SmartSyncNotOptOutType struct + open class SmartSyncNotOptOutType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncNotOptOutTypeSerializer().serialize(self)))" + } + } + open class SmartSyncNotOptOutTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncNotOptOutType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SmartSyncNotOptOutType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SmartSyncNotOptOutType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Opted team out of Smart Sync. + open class SmartSyncOptOutDetails: CustomStringConvertible { + /// Previous Smart Sync opt out policy. + public let previousValue: TeamLog.SmartSyncOptOutPolicy + /// New Smart Sync opt out policy. + public let newValue: TeamLog.SmartSyncOptOutPolicy + public init(previousValue: TeamLog.SmartSyncOptOutPolicy, newValue: TeamLog.SmartSyncOptOutPolicy) { + self.previousValue = previousValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncOptOutDetailsSerializer().serialize(self)))" + } + } + open class SmartSyncOptOutDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncOptOutDetails) -> JSON { + let output = [ + "previous_value": TeamLog.SmartSyncOptOutPolicySerializer().serialize(value.previousValue), + "new_value": TeamLog.SmartSyncOptOutPolicySerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SmartSyncOptOutDetails { + switch json { + case .dictionary(let dict): + let previousValue = TeamLog.SmartSyncOptOutPolicySerializer().deserialize(dict["previous_value"] ?? .null) + let newValue = TeamLog.SmartSyncOptOutPolicySerializer().deserialize(dict["new_value"] ?? .null) + return SmartSyncOptOutDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SmartSyncOptOutPolicy union + public enum SmartSyncOptOutPolicy: CustomStringConvertible { + /// An unspecified error. + case default_ + /// An unspecified error. + case optedOut + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncOptOutPolicySerializer().serialize(self)))" + } + } + open class SmartSyncOptOutPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncOptOutPolicy) -> JSON { + switch value { + case .default_: + var d = [String: JSON]() + d[".tag"] = .str("default") + return .dictionary(d) + case .optedOut: + var d = [String: JSON]() + d[".tag"] = .str("opted_out") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SmartSyncOptOutPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "default": + return SmartSyncOptOutPolicy.default_ + case "opted_out": + return SmartSyncOptOutPolicy.optedOut + case "other": + return SmartSyncOptOutPolicy.other + default: + return SmartSyncOptOutPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SmartSyncOptOutType struct + open class SmartSyncOptOutType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncOptOutTypeSerializer().serialize(self)))" + } + } + open class SmartSyncOptOutTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncOptOutType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SmartSyncOptOutType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SmartSyncOptOutType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Space limit alert policy + public enum SpaceCapsType: CustomStringConvertible { + /// An unspecified error. + case hard + /// An unspecified error. + case off + /// An unspecified error. + case soft + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SpaceCapsTypeSerializer().serialize(self)))" + } + } + open class SpaceCapsTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SpaceCapsType) -> JSON { + switch value { + case .hard: + var d = [String: JSON]() + d[".tag"] = .str("hard") + return .dictionary(d) + case .off: + var d = [String: JSON]() + d[".tag"] = .str("off") + return .dictionary(d) + case .soft: + var d = [String: JSON]() + d[".tag"] = .str("soft") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SpaceCapsType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "hard": + return SpaceCapsType.hard + case "off": + return SpaceCapsType.off + case "soft": + return SpaceCapsType.soft + case "other": + return SpaceCapsType.other + default: + return SpaceCapsType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SpaceLimitsStatus union + public enum SpaceLimitsStatus: CustomStringConvertible { + /// An unspecified error. + case withinQuota + /// An unspecified error. + case nearQuota + /// An unspecified error. + case overQuota + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SpaceLimitsStatusSerializer().serialize(self)))" + } + } + open class SpaceLimitsStatusSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SpaceLimitsStatus) -> JSON { + switch value { + case .withinQuota: + var d = [String: JSON]() + d[".tag"] = .str("within_quota") + return .dictionary(d) + case .nearQuota: + var d = [String: JSON]() + d[".tag"] = .str("near_quota") + return .dictionary(d) + case .overQuota: + var d = [String: JSON]() + d[".tag"] = .str("over_quota") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SpaceLimitsStatus { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "within_quota": + return SpaceLimitsStatus.withinQuota + case "near_quota": + return SpaceLimitsStatus.nearQuota + case "over_quota": + return SpaceLimitsStatus.overQuota + case "other": + return SpaceLimitsStatus.other + default: + return SpaceLimitsStatus.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Added X.509 certificate for SSO. + open class SsoAddCertDetails: CustomStringConvertible { + /// SSO certificate details. + public let certificateDetails: TeamLog.Certificate + public init(certificateDetails: TeamLog.Certificate) { + self.certificateDetails = certificateDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoAddCertDetailsSerializer().serialize(self)))" + } + } + open class SsoAddCertDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoAddCertDetails) -> JSON { + let output = [ + "certificate_details": TeamLog.CertificateSerializer().serialize(value.certificateDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoAddCertDetails { + switch json { + case .dictionary(let dict): + let certificateDetails = TeamLog.CertificateSerializer().deserialize(dict["certificate_details"] ?? .null) + return SsoAddCertDetails(certificateDetails: certificateDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoAddCertType struct + open class SsoAddCertType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoAddCertTypeSerializer().serialize(self)))" + } + } + open class SsoAddCertTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoAddCertType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoAddCertType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoAddCertType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added sign-in URL for SSO. + open class SsoAddLoginUrlDetails: CustomStringConvertible { + /// New single sign-on login URL. + public let newValue: String + public init(newValue: String) { + stringValidator()(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoAddLoginUrlDetailsSerializer().serialize(self)))" + } + } + open class SsoAddLoginUrlDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoAddLoginUrlDetails) -> JSON { + let output = [ + "new_value": Serialization._StringSerializer.serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoAddLoginUrlDetails { + switch json { + case .dictionary(let dict): + let newValue = Serialization._StringSerializer.deserialize(dict["new_value"] ?? .null) + return SsoAddLoginUrlDetails(newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoAddLoginUrlType struct + open class SsoAddLoginUrlType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoAddLoginUrlTypeSerializer().serialize(self)))" + } + } + open class SsoAddLoginUrlTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoAddLoginUrlType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoAddLoginUrlType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoAddLoginUrlType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added sign-out URL for SSO. + open class SsoAddLogoutUrlDetails: CustomStringConvertible { + /// New single sign-on logout URL. Might be missing due to historical data gap. + public let newValue: String? + public init(newValue: String? = nil) { + nullableValidator(stringValidator())(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoAddLogoutUrlDetailsSerializer().serialize(self)))" + } + } + open class SsoAddLogoutUrlDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoAddLogoutUrlDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(Serialization._StringSerializer).serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoAddLogoutUrlDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_value"] ?? .null) + return SsoAddLogoutUrlDetails(newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoAddLogoutUrlType struct + open class SsoAddLogoutUrlType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoAddLogoutUrlTypeSerializer().serialize(self)))" + } + } + open class SsoAddLogoutUrlTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoAddLogoutUrlType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoAddLogoutUrlType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoAddLogoutUrlType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed X.509 certificate for SSO. + open class SsoChangeCertDetails: CustomStringConvertible { + /// Previous SSO certificate details. Might be missing due to historical data gap. + public let previousCertificateDetails: TeamLog.Certificate? + /// New SSO certificate details. + public let newCertificateDetails: TeamLog.Certificate + public init(newCertificateDetails: TeamLog.Certificate, previousCertificateDetails: TeamLog.Certificate? = nil) { + self.previousCertificateDetails = previousCertificateDetails + self.newCertificateDetails = newCertificateDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangeCertDetailsSerializer().serialize(self)))" + } + } + open class SsoChangeCertDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangeCertDetails) -> JSON { + let output = [ + "new_certificate_details": TeamLog.CertificateSerializer().serialize(value.newCertificateDetails), + "previous_certificate_details": NullableSerializer(TeamLog.CertificateSerializer()).serialize(value.previousCertificateDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangeCertDetails { + switch json { + case .dictionary(let dict): + let newCertificateDetails = TeamLog.CertificateSerializer().deserialize(dict["new_certificate_details"] ?? .null) + let previousCertificateDetails = NullableSerializer(TeamLog.CertificateSerializer()).deserialize(dict["previous_certificate_details"] ?? .null) + return SsoChangeCertDetails(newCertificateDetails: newCertificateDetails, previousCertificateDetails: previousCertificateDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoChangeCertType struct + open class SsoChangeCertType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangeCertTypeSerializer().serialize(self)))" + } + } + open class SsoChangeCertTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangeCertType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangeCertType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoChangeCertType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed sign-in URL for SSO. + open class SsoChangeLoginUrlDetails: CustomStringConvertible { + /// Previous single sign-on login URL. + public let previousValue: String + /// New single sign-on login URL. + public let newValue: String + public init(previousValue: String, newValue: String) { + stringValidator()(previousValue) + self.previousValue = previousValue + stringValidator()(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangeLoginUrlDetailsSerializer().serialize(self)))" + } + } + open class SsoChangeLoginUrlDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangeLoginUrlDetails) -> JSON { + let output = [ + "previous_value": Serialization._StringSerializer.serialize(value.previousValue), + "new_value": Serialization._StringSerializer.serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangeLoginUrlDetails { + switch json { + case .dictionary(let dict): + let previousValue = Serialization._StringSerializer.deserialize(dict["previous_value"] ?? .null) + let newValue = Serialization._StringSerializer.deserialize(dict["new_value"] ?? .null) + return SsoChangeLoginUrlDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoChangeLoginUrlType struct + open class SsoChangeLoginUrlType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangeLoginUrlTypeSerializer().serialize(self)))" + } + } + open class SsoChangeLoginUrlTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangeLoginUrlType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangeLoginUrlType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoChangeLoginUrlType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed sign-out URL for SSO. + open class SsoChangeLogoutUrlDetails: CustomStringConvertible { + /// Previous single sign-on logout URL. Might be missing due to historical data gap. + public let previousValue: String? + /// New single sign-on logout URL. Might be missing due to historical data gap. + public let newValue: String? + public init(previousValue: String? = nil, newValue: String? = nil) { + nullableValidator(stringValidator())(previousValue) + self.previousValue = previousValue + nullableValidator(stringValidator())(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangeLogoutUrlDetailsSerializer().serialize(self)))" + } + } + open class SsoChangeLogoutUrlDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangeLogoutUrlDetails) -> JSON { + let output = [ + "previous_value": NullableSerializer(Serialization._StringSerializer).serialize(value.previousValue), + "new_value": NullableSerializer(Serialization._StringSerializer).serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangeLogoutUrlDetails { + switch json { + case .dictionary(let dict): + let previousValue = NullableSerializer(Serialization._StringSerializer).deserialize(dict["previous_value"] ?? .null) + let newValue = NullableSerializer(Serialization._StringSerializer).deserialize(dict["new_value"] ?? .null) + return SsoChangeLogoutUrlDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoChangeLogoutUrlType struct + open class SsoChangeLogoutUrlType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangeLogoutUrlTypeSerializer().serialize(self)))" + } + } + open class SsoChangeLogoutUrlTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangeLogoutUrlType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangeLogoutUrlType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoChangeLogoutUrlType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed single sign-on setting for team. + open class SsoChangePolicyDetails: CustomStringConvertible { + /// New single sign-on policy. + public let newValue: TeamPolicies.SsoPolicy + /// Previous single sign-on policy. Might be missing due to historical data gap. + public let previousValue: TeamPolicies.SsoPolicy? + public init(newValue: TeamPolicies.SsoPolicy, previousValue: TeamPolicies.SsoPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class SsoChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamPolicies.SsoPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamPolicies.SsoPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamPolicies.SsoPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamPolicies.SsoPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return SsoChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoChangePolicyType struct + open class SsoChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangePolicyTypeSerializer().serialize(self)))" + } + } + open class SsoChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed SAML identity mode for SSO. + open class SsoChangeSamlIdentityModeDetails: CustomStringConvertible { + /// Previous single sign-on identity mode. + public let previousValue: Int64 + /// New single sign-on identity mode. + public let newValue: Int64 + public init(previousValue: Int64, newValue: Int64) { + comparableValidator()(previousValue) + self.previousValue = previousValue + comparableValidator()(newValue) + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangeSamlIdentityModeDetailsSerializer().serialize(self)))" + } + } + open class SsoChangeSamlIdentityModeDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangeSamlIdentityModeDetails) -> JSON { + let output = [ + "previous_value": Serialization._Int64Serializer.serialize(value.previousValue), + "new_value": Serialization._Int64Serializer.serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangeSamlIdentityModeDetails { + switch json { + case .dictionary(let dict): + let previousValue = Serialization._Int64Serializer.deserialize(dict["previous_value"] ?? .null) + let newValue = Serialization._Int64Serializer.deserialize(dict["new_value"] ?? .null) + return SsoChangeSamlIdentityModeDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoChangeSamlIdentityModeType struct + open class SsoChangeSamlIdentityModeType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoChangeSamlIdentityModeTypeSerializer().serialize(self)))" + } + } + open class SsoChangeSamlIdentityModeTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoChangeSamlIdentityModeType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoChangeSamlIdentityModeType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoChangeSamlIdentityModeType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Failed to sign in via SSO. + open class SsoErrorDetails: CustomStringConvertible { + /// Error details. + public let errorDetails: TeamLog.FailureDetailsLogInfo + public init(errorDetails: TeamLog.FailureDetailsLogInfo) { + self.errorDetails = errorDetails + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoErrorDetailsSerializer().serialize(self)))" + } + } + open class SsoErrorDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoErrorDetails) -> JSON { + let output = [ + "error_details": TeamLog.FailureDetailsLogInfoSerializer().serialize(value.errorDetails), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoErrorDetails { + switch json { + case .dictionary(let dict): + let errorDetails = TeamLog.FailureDetailsLogInfoSerializer().deserialize(dict["error_details"] ?? .null) + return SsoErrorDetails(errorDetails: errorDetails) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoErrorType struct + open class SsoErrorType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoErrorTypeSerializer().serialize(self)))" + } + } + open class SsoErrorTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoErrorType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoErrorType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoErrorType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed X.509 certificate for SSO. + open class SsoRemoveCertDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoRemoveCertDetailsSerializer().serialize(self)))" + } + } + open class SsoRemoveCertDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoRemoveCertDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoRemoveCertDetails { + switch json { + case .dictionary(_): + return SsoRemoveCertDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoRemoveCertType struct + open class SsoRemoveCertType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoRemoveCertTypeSerializer().serialize(self)))" + } + } + open class SsoRemoveCertTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoRemoveCertType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoRemoveCertType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoRemoveCertType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed sign-in URL for SSO. + open class SsoRemoveLoginUrlDetails: CustomStringConvertible { + /// Previous single sign-on login URL. + public let previousValue: String + public init(previousValue: String) { + stringValidator()(previousValue) + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoRemoveLoginUrlDetailsSerializer().serialize(self)))" + } + } + open class SsoRemoveLoginUrlDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoRemoveLoginUrlDetails) -> JSON { + let output = [ + "previous_value": Serialization._StringSerializer.serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoRemoveLoginUrlDetails { + switch json { + case .dictionary(let dict): + let previousValue = Serialization._StringSerializer.deserialize(dict["previous_value"] ?? .null) + return SsoRemoveLoginUrlDetails(previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoRemoveLoginUrlType struct + open class SsoRemoveLoginUrlType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoRemoveLoginUrlTypeSerializer().serialize(self)))" + } + } + open class SsoRemoveLoginUrlTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoRemoveLoginUrlType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoRemoveLoginUrlType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoRemoveLoginUrlType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed sign-out URL for SSO. + open class SsoRemoveLogoutUrlDetails: CustomStringConvertible { + /// Previous single sign-on logout URL. + public let previousValue: String + public init(previousValue: String) { + stringValidator()(previousValue) + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoRemoveLogoutUrlDetailsSerializer().serialize(self)))" + } + } + open class SsoRemoveLogoutUrlDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoRemoveLogoutUrlDetails) -> JSON { + let output = [ + "previous_value": Serialization._StringSerializer.serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoRemoveLogoutUrlDetails { + switch json { + case .dictionary(let dict): + let previousValue = Serialization._StringSerializer.deserialize(dict["previous_value"] ?? .null) + return SsoRemoveLogoutUrlDetails(previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The SsoRemoveLogoutUrlType struct + open class SsoRemoveLogoutUrlType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoRemoveLogoutUrlTypeSerializer().serialize(self)))" + } + } + open class SsoRemoveLogoutUrlTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoRemoveLogoutUrlType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SsoRemoveLogoutUrlType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return SsoRemoveLogoutUrlType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created team activity report. + open class TeamActivityCreateReportDetails: CustomStringConvertible { + /// Report start date. + public let startDate: Date + /// Report end date. + public let endDate: Date + public init(startDate: Date, endDate: Date) { + self.startDate = startDate + self.endDate = endDate + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamActivityCreateReportDetailsSerializer().serialize(self)))" + } + } + open class TeamActivityCreateReportDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamActivityCreateReportDetails) -> JSON { + let output = [ + "start_date": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.startDate), + "end_date": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.endDate), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamActivityCreateReportDetails { + switch json { + case .dictionary(let dict): + let startDate = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["start_date"] ?? .null) + let endDate = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["end_date"] ?? .null) + return TeamActivityCreateReportDetails(startDate: startDate, endDate: endDate) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamActivityCreateReportType struct + open class TeamActivityCreateReportType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamActivityCreateReportTypeSerializer().serialize(self)))" + } + } + open class TeamActivityCreateReportTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamActivityCreateReportType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamActivityCreateReportType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamActivityCreateReportType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// An audit log event. + open class TeamEvent: CustomStringConvertible { + /// The Dropbox timestamp representing when the action was taken. + public let timestamp_: Date + /// The category that this type of action belongs to. + public let eventCategory: TeamLog.EventCategory + /// The entity who actually performed the action. Might be missing due to historical data gap. + public let actor: TeamLog.ActorLogInfo? + /// The origin from which the actor performed the action including information about host, ip address, location, + /// session, etc. If the action was performed programmatically via the API the origin represents the API client. + public let origin: TeamLog.OriginLogInfo? + /// True if the action involved a non team member either as the actor or as one of the affected users. Might be + /// missing due to historical data gap. + public let involveNonTeamMember: Bool? + /// The user or team on whose behalf the actor performed the action. Might be missing due to historical data + /// gap. + public let context: TeamLog.ContextLogInfo? + /// Zero or more users and/or groups that are affected by the action. Note that this list doesn't include any + /// actors or users in context. + public let participants: Array? + /// Zero or more content assets involved in the action. Currently these include Dropbox files and folders but in + /// the future we might add other asset types such as Paper documents, folders, projects, etc. + public let assets: Array? + /// The particular type of action taken. + public let eventType: TeamLog.EventType + /// The variable event schema applicable to this type of action, instantiated with respect to this particular + /// action. + public let details: TeamLog.EventDetails + public init(timestamp_: Date, eventCategory: TeamLog.EventCategory, eventType: TeamLog.EventType, details: TeamLog.EventDetails, actor: TeamLog.ActorLogInfo? = nil, origin: TeamLog.OriginLogInfo? = nil, involveNonTeamMember: Bool? = nil, context: TeamLog.ContextLogInfo? = nil, participants: Array? = nil, assets: Array? = nil) { + self.timestamp_ = timestamp_ + self.eventCategory = eventCategory + self.actor = actor + self.origin = origin + self.involveNonTeamMember = involveNonTeamMember + self.context = context + self.participants = participants + self.assets = assets + self.eventType = eventType + self.details = details + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamEventSerializer().serialize(self)))" + } + } + open class TeamEventSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamEvent) -> JSON { + let output = [ + "timestamp": NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").serialize(value.timestamp_), + "event_category": TeamLog.EventCategorySerializer().serialize(value.eventCategory), + "event_type": TeamLog.EventTypeSerializer().serialize(value.eventType), + "details": TeamLog.EventDetailsSerializer().serialize(value.details), + "actor": NullableSerializer(TeamLog.ActorLogInfoSerializer()).serialize(value.actor), + "origin": NullableSerializer(TeamLog.OriginLogInfoSerializer()).serialize(value.origin), + "involve_non_team_member": NullableSerializer(Serialization._BoolSerializer).serialize(value.involveNonTeamMember), + "context": NullableSerializer(TeamLog.ContextLogInfoSerializer()).serialize(value.context), + "participants": NullableSerializer(ArraySerializer(TeamLog.ParticipantLogInfoSerializer())).serialize(value.participants), + "assets": NullableSerializer(ArraySerializer(TeamLog.AssetLogInfoSerializer())).serialize(value.assets), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamEvent { + switch json { + case .dictionary(let dict): + let timestamp_ = NSDateSerializer("%Y-%m-%dT%H:%M:%SZ").deserialize(dict["timestamp"] ?? .null) + let eventCategory = TeamLog.EventCategorySerializer().deserialize(dict["event_category"] ?? .null) + let eventType = TeamLog.EventTypeSerializer().deserialize(dict["event_type"] ?? .null) + let details = TeamLog.EventDetailsSerializer().deserialize(dict["details"] ?? .null) + let actor = NullableSerializer(TeamLog.ActorLogInfoSerializer()).deserialize(dict["actor"] ?? .null) + let origin = NullableSerializer(TeamLog.OriginLogInfoSerializer()).deserialize(dict["origin"] ?? .null) + let involveNonTeamMember = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["involve_non_team_member"] ?? .null) + let context = NullableSerializer(TeamLog.ContextLogInfoSerializer()).deserialize(dict["context"] ?? .null) + let participants = NullableSerializer(ArraySerializer(TeamLog.ParticipantLogInfoSerializer())).deserialize(dict["participants"] ?? .null) + let assets = NullableSerializer(ArraySerializer(TeamLog.AssetLogInfoSerializer())).deserialize(dict["assets"] ?? .null) + return TeamEvent(timestamp_: timestamp_, eventCategory: eventCategory, eventType: eventType, details: details, actor: actor, origin: origin, involveNonTeamMember: involveNonTeamMember, context: context, participants: participants, assets: assets) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed archival status of team folder. + open class TeamFolderChangeStatusDetails: CustomStringConvertible { + /// New team folder status. + public let newValue: Team.TeamFolderStatus + /// Previous team folder status. Might be missing due to historical data gap. + public let previousValue: Team.TeamFolderStatus? + public init(newValue: Team.TeamFolderStatus, previousValue: Team.TeamFolderStatus? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderChangeStatusDetailsSerializer().serialize(self)))" + } + } + open class TeamFolderChangeStatusDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderChangeStatusDetails) -> JSON { + let output = [ + "new_value": Team.TeamFolderStatusSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(Team.TeamFolderStatusSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderChangeStatusDetails { + switch json { + case .dictionary(let dict): + let newValue = Team.TeamFolderStatusSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(Team.TeamFolderStatusSerializer()).deserialize(dict["previous_value"] ?? .null) + return TeamFolderChangeStatusDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderChangeStatusType struct + open class TeamFolderChangeStatusType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderChangeStatusTypeSerializer().serialize(self)))" + } + } + open class TeamFolderChangeStatusTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderChangeStatusType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderChangeStatusType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamFolderChangeStatusType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Created team folder in active status. + open class TeamFolderCreateDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderCreateDetailsSerializer().serialize(self)))" + } + } + open class TeamFolderCreateDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderCreateDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderCreateDetails { + switch json { + case .dictionary(_): + return TeamFolderCreateDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderCreateType struct + open class TeamFolderCreateType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderCreateTypeSerializer().serialize(self)))" + } + } + open class TeamFolderCreateTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderCreateType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderCreateType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamFolderCreateType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Downgraded team folder to regular shared folder. + open class TeamFolderDowngradeDetails: CustomStringConvertible { + /// Target asset position in the Assets list. + public let targetAssetIndex: UInt64 + public init(targetAssetIndex: UInt64) { + comparableValidator()(targetAssetIndex) + self.targetAssetIndex = targetAssetIndex + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderDowngradeDetailsSerializer().serialize(self)))" + } + } + open class TeamFolderDowngradeDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderDowngradeDetails) -> JSON { + let output = [ + "target_asset_index": Serialization._UInt64Serializer.serialize(value.targetAssetIndex), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderDowngradeDetails { + switch json { + case .dictionary(let dict): + let targetAssetIndex = Serialization._UInt64Serializer.deserialize(dict["target_asset_index"] ?? .null) + return TeamFolderDowngradeDetails(targetAssetIndex: targetAssetIndex) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderDowngradeType struct + open class TeamFolderDowngradeType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderDowngradeTypeSerializer().serialize(self)))" + } + } + open class TeamFolderDowngradeTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderDowngradeType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderDowngradeType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamFolderDowngradeType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Permanently deleted archived team folder. + open class TeamFolderPermanentlyDeleteDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderPermanentlyDeleteDetailsSerializer().serialize(self)))" + } + } + open class TeamFolderPermanentlyDeleteDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderPermanentlyDeleteDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderPermanentlyDeleteDetails { + switch json { + case .dictionary(_): + return TeamFolderPermanentlyDeleteDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderPermanentlyDeleteType struct + open class TeamFolderPermanentlyDeleteType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderPermanentlyDeleteTypeSerializer().serialize(self)))" + } + } + open class TeamFolderPermanentlyDeleteTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderPermanentlyDeleteType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderPermanentlyDeleteType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamFolderPermanentlyDeleteType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Renamed active/archived team folder. + open class TeamFolderRenameDetails: CustomStringConvertible { + /// Previous folder name. + public let previousFolderName: String + /// New folder name. + public let newFolderName: String + public init(previousFolderName: String, newFolderName: String) { + stringValidator()(previousFolderName) + self.previousFolderName = previousFolderName + stringValidator()(newFolderName) + self.newFolderName = newFolderName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderRenameDetailsSerializer().serialize(self)))" + } + } + open class TeamFolderRenameDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderRenameDetails) -> JSON { + let output = [ + "previous_folder_name": Serialization._StringSerializer.serialize(value.previousFolderName), + "new_folder_name": Serialization._StringSerializer.serialize(value.newFolderName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderRenameDetails { + switch json { + case .dictionary(let dict): + let previousFolderName = Serialization._StringSerializer.deserialize(dict["previous_folder_name"] ?? .null) + let newFolderName = Serialization._StringSerializer.deserialize(dict["new_folder_name"] ?? .null) + return TeamFolderRenameDetails(previousFolderName: previousFolderName, newFolderName: newFolderName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamFolderRenameType struct + open class TeamFolderRenameType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamFolderRenameTypeSerializer().serialize(self)))" + } + } + open class TeamFolderRenameTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamFolderRenameType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamFolderRenameType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamFolderRenameType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Team linked app + open class TeamLinkedAppLogInfo: TeamLog.AppLogInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamLinkedAppLogInfoSerializer().serialize(self)))" + } + } + open class TeamLinkedAppLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamLinkedAppLogInfo) -> JSON { + let output = [ + "app_id": NullableSerializer(Serialization._StringSerializer).serialize(value.appId), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamLinkedAppLogInfo { + switch json { + case .dictionary(let dict): + let appId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["app_id"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + return TeamLinkedAppLogInfo(appId: appId, displayName: displayName) + default: + fatalError("Type error deserializing") + } + } + } + + /// Team member's logged information. + open class TeamMemberLogInfo: TeamLog.UserLogInfo { + /// Team member ID. Might be missing due to historical data gap. + public let teamMemberId: String? + /// Team member external ID. + public let memberExternalId: String? + public init(accountId: String? = nil, displayName: String? = nil, email: String? = nil, teamMemberId: String? = nil, memberExternalId: String? = nil) { + nullableValidator(stringValidator())(teamMemberId) + self.teamMemberId = teamMemberId + nullableValidator(stringValidator(maxLength: 64))(memberExternalId) + self.memberExternalId = memberExternalId + super.init(accountId: accountId, displayName: displayName, email: email) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMemberLogInfoSerializer().serialize(self)))" + } + } + open class TeamMemberLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMemberLogInfo) -> JSON { + let output = [ + "account_id": NullableSerializer(Serialization._StringSerializer).serialize(value.accountId), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + "email": NullableSerializer(Serialization._StringSerializer).serialize(value.email), + "team_member_id": NullableSerializer(Serialization._StringSerializer).serialize(value.teamMemberId), + "member_external_id": NullableSerializer(Serialization._StringSerializer).serialize(value.memberExternalId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamMemberLogInfo { + switch json { + case .dictionary(let dict): + let accountId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["account_id"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + let email = NullableSerializer(Serialization._StringSerializer).deserialize(dict["email"] ?? .null) + let teamMemberId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["team_member_id"] ?? .null) + let memberExternalId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["member_external_id"] ?? .null) + return TeamMemberLogInfo(accountId: accountId, displayName: displayName, email: email, teamMemberId: teamMemberId, memberExternalId: memberExternalId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamMembershipType union + public enum TeamMembershipType: CustomStringConvertible { + /// An unspecified error. + case free + /// An unspecified error. + case full + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMembershipTypeSerializer().serialize(self)))" + } + } + open class TeamMembershipTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMembershipType) -> JSON { + switch value { + case .free: + var d = [String: JSON]() + d[".tag"] = .str("free") + return .dictionary(d) + case .full: + var d = [String: JSON]() + d[".tag"] = .str("full") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamMembershipType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "free": + return TeamMembershipType.free + case "full": + return TeamMembershipType.full + case "other": + return TeamMembershipType.other + default: + return TeamMembershipType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Merged another team into this team. + open class TeamMergeFromDetails: CustomStringConvertible { + /// The name of the team that was merged into this team. + public let teamName: String + public init(teamName: String) { + stringValidator()(teamName) + self.teamName = teamName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMergeFromDetailsSerializer().serialize(self)))" + } + } + open class TeamMergeFromDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMergeFromDetails) -> JSON { + let output = [ + "team_name": Serialization._StringSerializer.serialize(value.teamName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamMergeFromDetails { + switch json { + case .dictionary(let dict): + let teamName = Serialization._StringSerializer.deserialize(dict["team_name"] ?? .null) + return TeamMergeFromDetails(teamName: teamName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamMergeFromType struct + open class TeamMergeFromType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMergeFromTypeSerializer().serialize(self)))" + } + } + open class TeamMergeFromTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMergeFromType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamMergeFromType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamMergeFromType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Merged this team into another team. + open class TeamMergeToDetails: CustomStringConvertible { + /// The name of the team that this team was merged into. + public let teamName: String + public init(teamName: String) { + stringValidator()(teamName) + self.teamName = teamName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMergeToDetailsSerializer().serialize(self)))" + } + } + open class TeamMergeToDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMergeToDetails) -> JSON { + let output = [ + "team_name": Serialization._StringSerializer.serialize(value.teamName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamMergeToDetails { + switch json { + case .dictionary(let dict): + let teamName = Serialization._StringSerializer.deserialize(dict["team_name"] ?? .null) + return TeamMergeToDetails(teamName: teamName) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamMergeToType struct + open class TeamMergeToType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMergeToTypeSerializer().serialize(self)))" + } + } + open class TeamMergeToTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMergeToType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamMergeToType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamMergeToType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Team name details + open class TeamName: CustomStringConvertible { + /// Team's display name. + public let teamDisplayName: String + /// Team's legal name. + public let teamLegalName: String + public init(teamDisplayName: String, teamLegalName: String) { + stringValidator()(teamDisplayName) + self.teamDisplayName = teamDisplayName + stringValidator()(teamLegalName) + self.teamLegalName = teamLegalName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamNameSerializer().serialize(self)))" + } + } + open class TeamNameSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamName) -> JSON { + let output = [ + "team_display_name": Serialization._StringSerializer.serialize(value.teamDisplayName), + "team_legal_name": Serialization._StringSerializer.serialize(value.teamLegalName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamName { + switch json { + case .dictionary(let dict): + let teamDisplayName = Serialization._StringSerializer.deserialize(dict["team_display_name"] ?? .null) + let teamLegalName = Serialization._StringSerializer.deserialize(dict["team_legal_name"] ?? .null) + return TeamName(teamDisplayName: teamDisplayName, teamLegalName: teamLegalName) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added team logo to display on shared link headers. + open class TeamProfileAddLogoDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileAddLogoDetailsSerializer().serialize(self)))" + } + } + open class TeamProfileAddLogoDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileAddLogoDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileAddLogoDetails { + switch json { + case .dictionary(_): + return TeamProfileAddLogoDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamProfileAddLogoType struct + open class TeamProfileAddLogoType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileAddLogoTypeSerializer().serialize(self)))" + } + } + open class TeamProfileAddLogoTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileAddLogoType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileAddLogoType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamProfileAddLogoType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed default language for team. + open class TeamProfileChangeDefaultLanguageDetails: CustomStringConvertible { + /// New team's default language. + public let newValue: String + /// Previous team's default language. + public let previousValue: String + public init(newValue: String, previousValue: String) { + stringValidator(minLength: 2)(newValue) + self.newValue = newValue + stringValidator(minLength: 2)(previousValue) + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileChangeDefaultLanguageDetailsSerializer().serialize(self)))" + } + } + open class TeamProfileChangeDefaultLanguageDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileChangeDefaultLanguageDetails) -> JSON { + let output = [ + "new_value": Serialization._StringSerializer.serialize(value.newValue), + "previous_value": Serialization._StringSerializer.serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileChangeDefaultLanguageDetails { + switch json { + case .dictionary(let dict): + let newValue = Serialization._StringSerializer.deserialize(dict["new_value"] ?? .null) + let previousValue = Serialization._StringSerializer.deserialize(dict["previous_value"] ?? .null) + return TeamProfileChangeDefaultLanguageDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamProfileChangeDefaultLanguageType struct + open class TeamProfileChangeDefaultLanguageType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileChangeDefaultLanguageTypeSerializer().serialize(self)))" + } + } + open class TeamProfileChangeDefaultLanguageTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileChangeDefaultLanguageType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileChangeDefaultLanguageType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamProfileChangeDefaultLanguageType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed team logo displayed on shared link headers. + open class TeamProfileChangeLogoDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileChangeLogoDetailsSerializer().serialize(self)))" + } + } + open class TeamProfileChangeLogoDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileChangeLogoDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileChangeLogoDetails { + switch json { + case .dictionary(_): + return TeamProfileChangeLogoDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamProfileChangeLogoType struct + open class TeamProfileChangeLogoType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileChangeLogoTypeSerializer().serialize(self)))" + } + } + open class TeamProfileChangeLogoTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileChangeLogoType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileChangeLogoType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamProfileChangeLogoType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed team name. + open class TeamProfileChangeNameDetails: CustomStringConvertible { + /// Previous teams name. Might be missing due to historical data gap. + public let previousValue: TeamLog.TeamName? + /// New team name. + public let newValue: TeamLog.TeamName + public init(newValue: TeamLog.TeamName, previousValue: TeamLog.TeamName? = nil) { + self.previousValue = previousValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileChangeNameDetailsSerializer().serialize(self)))" + } + } + open class TeamProfileChangeNameDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileChangeNameDetails) -> JSON { + let output = [ + "new_value": TeamLog.TeamNameSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.TeamNameSerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileChangeNameDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.TeamNameSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.TeamNameSerializer()).deserialize(dict["previous_value"] ?? .null) + return TeamProfileChangeNameDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamProfileChangeNameType struct + open class TeamProfileChangeNameType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileChangeNameTypeSerializer().serialize(self)))" + } + } + open class TeamProfileChangeNameTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileChangeNameType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileChangeNameType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamProfileChangeNameType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed team logo displayed on shared link headers. + open class TeamProfileRemoveLogoDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileRemoveLogoDetailsSerializer().serialize(self)))" + } + } + open class TeamProfileRemoveLogoDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileRemoveLogoDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileRemoveLogoDetails { + switch json { + case .dictionary(_): + return TeamProfileRemoveLogoDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamProfileRemoveLogoType struct + open class TeamProfileRemoveLogoType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamProfileRemoveLogoTypeSerializer().serialize(self)))" + } + } + open class TeamProfileRemoveLogoTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamProfileRemoveLogoType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamProfileRemoveLogoType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamProfileRemoveLogoType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Policy for controlling whether team selective sync is enabled for team. + public enum TeamSelectiveSyncPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamSelectiveSyncPolicySerializer().serialize(self)))" + } + } + open class TeamSelectiveSyncPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamSelectiveSyncPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TeamSelectiveSyncPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return TeamSelectiveSyncPolicy.disabled + case "enabled": + return TeamSelectiveSyncPolicy.enabled + case "other": + return TeamSelectiveSyncPolicy.other + default: + return TeamSelectiveSyncPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Enabled/disabled Team Selective Sync for team. + open class TeamSelectiveSyncPolicyChangedDetails: CustomStringConvertible { + /// New Team Selective Sync policy. + public let newValue: TeamLog.TeamSelectiveSyncPolicy + /// Previous Team Selective Sync policy. + public let previousValue: TeamLog.TeamSelectiveSyncPolicy + public init(newValue: TeamLog.TeamSelectiveSyncPolicy, previousValue: TeamLog.TeamSelectiveSyncPolicy) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamSelectiveSyncPolicyChangedDetailsSerializer().serialize(self)))" + } + } + open class TeamSelectiveSyncPolicyChangedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamSelectiveSyncPolicyChangedDetails) -> JSON { + let output = [ + "new_value": TeamLog.TeamSelectiveSyncPolicySerializer().serialize(value.newValue), + "previous_value": TeamLog.TeamSelectiveSyncPolicySerializer().serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamSelectiveSyncPolicyChangedDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.TeamSelectiveSyncPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = TeamLog.TeamSelectiveSyncPolicySerializer().deserialize(dict["previous_value"] ?? .null) + return TeamSelectiveSyncPolicyChangedDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamSelectiveSyncPolicyChangedType struct + open class TeamSelectiveSyncPolicyChangedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamSelectiveSyncPolicyChangedTypeSerializer().serialize(self)))" + } + } + open class TeamSelectiveSyncPolicyChangedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamSelectiveSyncPolicyChangedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamSelectiveSyncPolicyChangedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamSelectiveSyncPolicyChangedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed sync default. + open class TeamSelectiveSyncSettingsChangedDetails: CustomStringConvertible { + /// Previous value. + public let previousValue: Files.SyncSetting + /// New value. + public let newValue: Files.SyncSetting + public init(previousValue: Files.SyncSetting, newValue: Files.SyncSetting) { + self.previousValue = previousValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamSelectiveSyncSettingsChangedDetailsSerializer().serialize(self)))" + } + } + open class TeamSelectiveSyncSettingsChangedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamSelectiveSyncSettingsChangedDetails) -> JSON { + let output = [ + "previous_value": Files.SyncSettingSerializer().serialize(value.previousValue), + "new_value": Files.SyncSettingSerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamSelectiveSyncSettingsChangedDetails { + switch json { + case .dictionary(let dict): + let previousValue = Files.SyncSettingSerializer().deserialize(dict["previous_value"] ?? .null) + let newValue = Files.SyncSettingSerializer().deserialize(dict["new_value"] ?? .null) + return TeamSelectiveSyncSettingsChangedDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamSelectiveSyncSettingsChangedType struct + open class TeamSelectiveSyncSettingsChangedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamSelectiveSyncSettingsChangedTypeSerializer().serialize(self)))" + } + } + open class TeamSelectiveSyncSettingsChangedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamSelectiveSyncSettingsChangedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamSelectiveSyncSettingsChangedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TeamSelectiveSyncSettingsChangedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added backup phone for two-step verification. + open class TfaAddBackupPhoneDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaAddBackupPhoneDetailsSerializer().serialize(self)))" + } + } + open class TfaAddBackupPhoneDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaAddBackupPhoneDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaAddBackupPhoneDetails { + switch json { + case .dictionary(_): + return TfaAddBackupPhoneDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TfaAddBackupPhoneType struct + open class TfaAddBackupPhoneType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaAddBackupPhoneTypeSerializer().serialize(self)))" + } + } + open class TfaAddBackupPhoneTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaAddBackupPhoneType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaAddBackupPhoneType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TfaAddBackupPhoneType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Added security key for two-step verification. + open class TfaAddSecurityKeyDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaAddSecurityKeyDetailsSerializer().serialize(self)))" + } + } + open class TfaAddSecurityKeyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaAddSecurityKeyDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaAddSecurityKeyDetails { + switch json { + case .dictionary(_): + return TfaAddSecurityKeyDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TfaAddSecurityKeyType struct + open class TfaAddSecurityKeyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaAddSecurityKeyTypeSerializer().serialize(self)))" + } + } + open class TfaAddSecurityKeyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaAddSecurityKeyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaAddSecurityKeyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TfaAddSecurityKeyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed backup phone for two-step verification. + open class TfaChangeBackupPhoneDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaChangeBackupPhoneDetailsSerializer().serialize(self)))" + } + } + open class TfaChangeBackupPhoneDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaChangeBackupPhoneDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaChangeBackupPhoneDetails { + switch json { + case .dictionary(_): + return TfaChangeBackupPhoneDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TfaChangeBackupPhoneType struct + open class TfaChangeBackupPhoneType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaChangeBackupPhoneTypeSerializer().serialize(self)))" + } + } + open class TfaChangeBackupPhoneTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaChangeBackupPhoneType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaChangeBackupPhoneType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TfaChangeBackupPhoneType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed two-step verification setting for team. + open class TfaChangePolicyDetails: CustomStringConvertible { + /// New change policy. + public let newValue: TeamPolicies.TwoStepVerificationPolicy + /// Previous change policy. Might be missing due to historical data gap. + public let previousValue: TeamPolicies.TwoStepVerificationPolicy? + public init(newValue: TeamPolicies.TwoStepVerificationPolicy, previousValue: TeamPolicies.TwoStepVerificationPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class TfaChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamPolicies.TwoStepVerificationPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamPolicies.TwoStepVerificationPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamPolicies.TwoStepVerificationPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamPolicies.TwoStepVerificationPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return TfaChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TfaChangePolicyType struct + open class TfaChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaChangePolicyTypeSerializer().serialize(self)))" + } + } + open class TfaChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TfaChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Enabled/disabled/changed two-step verification setting. + open class TfaChangeStatusDetails: CustomStringConvertible { + /// The new two factor authentication configuration. + public let newValue: TeamLog.TfaConfiguration + /// The previous two factor authentication configuration. Might be missing due to historical data gap. + public let previousValue: TeamLog.TfaConfiguration? + /// Used two factor authentication rescue code. This flag is relevant when the two factor authentication + /// configuration is disabled. + public let usedRescueCode: Bool? + public init(newValue: TeamLog.TfaConfiguration, previousValue: TeamLog.TfaConfiguration? = nil, usedRescueCode: Bool? = nil) { + self.newValue = newValue + self.previousValue = previousValue + self.usedRescueCode = usedRescueCode + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaChangeStatusDetailsSerializer().serialize(self)))" + } + } + open class TfaChangeStatusDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaChangeStatusDetails) -> JSON { + let output = [ + "new_value": TeamLog.TfaConfigurationSerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.TfaConfigurationSerializer()).serialize(value.previousValue), + "used_rescue_code": NullableSerializer(Serialization._BoolSerializer).serialize(value.usedRescueCode), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaChangeStatusDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.TfaConfigurationSerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.TfaConfigurationSerializer()).deserialize(dict["previous_value"] ?? .null) + let usedRescueCode = NullableSerializer(Serialization._BoolSerializer).deserialize(dict["used_rescue_code"] ?? .null) + return TfaChangeStatusDetails(newValue: newValue, previousValue: previousValue, usedRescueCode: usedRescueCode) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TfaChangeStatusType struct + open class TfaChangeStatusType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaChangeStatusTypeSerializer().serialize(self)))" + } + } + open class TfaChangeStatusTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaChangeStatusType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaChangeStatusType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TfaChangeStatusType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Two factor authentication configuration. Note: the enabled option is deprecated. + public enum TfaConfiguration: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case sms + /// An unspecified error. + case authenticator + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaConfigurationSerializer().serialize(self)))" + } + } + open class TfaConfigurationSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaConfiguration) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .sms: + var d = [String: JSON]() + d[".tag"] = .str("sms") + return .dictionary(d) + case .authenticator: + var d = [String: JSON]() + d[".tag"] = .str("authenticator") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TfaConfiguration { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return TfaConfiguration.disabled + case "enabled": + return TfaConfiguration.enabled + case "sms": + return TfaConfiguration.sms + case "authenticator": + return TfaConfiguration.authenticator + case "other": + return TfaConfiguration.other + default: + return TfaConfiguration.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Removed backup phone for two-step verification. + open class TfaRemoveBackupPhoneDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaRemoveBackupPhoneDetailsSerializer().serialize(self)))" + } + } + open class TfaRemoveBackupPhoneDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaRemoveBackupPhoneDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaRemoveBackupPhoneDetails { + switch json { + case .dictionary(_): + return TfaRemoveBackupPhoneDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TfaRemoveBackupPhoneType struct + open class TfaRemoveBackupPhoneType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaRemoveBackupPhoneTypeSerializer().serialize(self)))" + } + } + open class TfaRemoveBackupPhoneTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaRemoveBackupPhoneType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaRemoveBackupPhoneType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TfaRemoveBackupPhoneType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Removed security key for two-step verification. + open class TfaRemoveSecurityKeyDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaRemoveSecurityKeyDetailsSerializer().serialize(self)))" + } + } + open class TfaRemoveSecurityKeyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaRemoveSecurityKeyDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaRemoveSecurityKeyDetails { + switch json { + case .dictionary(_): + return TfaRemoveSecurityKeyDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TfaRemoveSecurityKeyType struct + open class TfaRemoveSecurityKeyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaRemoveSecurityKeyTypeSerializer().serialize(self)))" + } + } + open class TfaRemoveSecurityKeyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaRemoveSecurityKeyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaRemoveSecurityKeyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TfaRemoveSecurityKeyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Reset two-step verification for team member. + open class TfaResetDetails: CustomStringConvertible { + public init() { + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaResetDetailsSerializer().serialize(self)))" + } + } + open class TfaResetDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaResetDetails) -> JSON { + let output = [String: JSON]() + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaResetDetails { + switch json { + case .dictionary(_): + return TfaResetDetails() + default: + fatalError("Type error deserializing") + } + } + } + + /// The TfaResetType struct + open class TfaResetType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TfaResetTypeSerializer().serialize(self)))" + } + } + open class TfaResetTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TfaResetType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TfaResetType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TfaResetType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TimeUnit union + public enum TimeUnit: CustomStringConvertible { + /// An unspecified error. + case milliseconds + /// An unspecified error. + case seconds + /// An unspecified error. + case minutes + /// An unspecified error. + case hours + /// An unspecified error. + case days + /// An unspecified error. + case weeks + /// An unspecified error. + case months + /// An unspecified error. + case years + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TimeUnitSerializer().serialize(self)))" + } + } + open class TimeUnitSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TimeUnit) -> JSON { + switch value { + case .milliseconds: + var d = [String: JSON]() + d[".tag"] = .str("milliseconds") + return .dictionary(d) + case .seconds: + var d = [String: JSON]() + d[".tag"] = .str("seconds") + return .dictionary(d) + case .minutes: + var d = [String: JSON]() + d[".tag"] = .str("minutes") + return .dictionary(d) + case .hours: + var d = [String: JSON]() + d[".tag"] = .str("hours") + return .dictionary(d) + case .days: + var d = [String: JSON]() + d[".tag"] = .str("days") + return .dictionary(d) + case .weeks: + var d = [String: JSON]() + d[".tag"] = .str("weeks") + return .dictionary(d) + case .months: + var d = [String: JSON]() + d[".tag"] = .str("months") + return .dictionary(d) + case .years: + var d = [String: JSON]() + d[".tag"] = .str("years") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TimeUnit { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "milliseconds": + return TimeUnit.milliseconds + case "seconds": + return TimeUnit.seconds + case "minutes": + return TimeUnit.minutes + case "hours": + return TimeUnit.hours + case "days": + return TimeUnit.days + case "weeks": + return TimeUnit.weeks + case "months": + return TimeUnit.months + case "years": + return TimeUnit.years + case "other": + return TimeUnit.other + default: + return TimeUnit.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// User that is not a member of the team but considered trusted. + open class TrustedNonTeamMemberLogInfo: TeamLog.UserLogInfo { + /// Indicates the type of the trusted non team member user. + public let trustedNonTeamMemberType: TeamLog.TrustedNonTeamMemberType + public init(trustedNonTeamMemberType: TeamLog.TrustedNonTeamMemberType, accountId: String? = nil, displayName: String? = nil, email: String? = nil) { + self.trustedNonTeamMemberType = trustedNonTeamMemberType + super.init(accountId: accountId, displayName: displayName, email: email) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TrustedNonTeamMemberLogInfoSerializer().serialize(self)))" + } + } + open class TrustedNonTeamMemberLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TrustedNonTeamMemberLogInfo) -> JSON { + let output = [ + "trusted_non_team_member_type": TeamLog.TrustedNonTeamMemberTypeSerializer().serialize(value.trustedNonTeamMemberType), + "account_id": NullableSerializer(Serialization._StringSerializer).serialize(value.accountId), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + "email": NullableSerializer(Serialization._StringSerializer).serialize(value.email), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TrustedNonTeamMemberLogInfo { + switch json { + case .dictionary(let dict): + let trustedNonTeamMemberType = TeamLog.TrustedNonTeamMemberTypeSerializer().deserialize(dict["trusted_non_team_member_type"] ?? .null) + let accountId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["account_id"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + let email = NullableSerializer(Serialization._StringSerializer).deserialize(dict["email"] ?? .null) + return TrustedNonTeamMemberLogInfo(trustedNonTeamMemberType: trustedNonTeamMemberType, accountId: accountId, displayName: displayName, email: email) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TrustedNonTeamMemberType union + public enum TrustedNonTeamMemberType: CustomStringConvertible { + /// An unspecified error. + case multiInstanceAdmin + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TrustedNonTeamMemberTypeSerializer().serialize(self)))" + } + } + open class TrustedNonTeamMemberTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TrustedNonTeamMemberType) -> JSON { + switch value { + case .multiInstanceAdmin: + var d = [String: JSON]() + d[".tag"] = .str("multi_instance_admin") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TrustedNonTeamMemberType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "multi_instance_admin": + return TrustedNonTeamMemberType.multiInstanceAdmin + case "other": + return TrustedNonTeamMemberType.other + default: + return TrustedNonTeamMemberType.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Enabled/disabled option for members to link personal Dropbox account and team account to same computer. + open class TwoAccountChangePolicyDetails: CustomStringConvertible { + /// New two account policy. + public let newValue: TeamLog.TwoAccountPolicy + /// Previous two account policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.TwoAccountPolicy? + public init(newValue: TeamLog.TwoAccountPolicy, previousValue: TeamLog.TwoAccountPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TwoAccountChangePolicyDetailsSerializer().serialize(self)))" + } + } + open class TwoAccountChangePolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TwoAccountChangePolicyDetails) -> JSON { + let output = [ + "new_value": TeamLog.TwoAccountPolicySerializer().serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.TwoAccountPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TwoAccountChangePolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = TeamLog.TwoAccountPolicySerializer().deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.TwoAccountPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return TwoAccountChangePolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TwoAccountChangePolicyType struct + open class TwoAccountChangePolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TwoAccountChangePolicyTypeSerializer().serialize(self)))" + } + } + open class TwoAccountChangePolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TwoAccountChangePolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TwoAccountChangePolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return TwoAccountChangePolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Policy for pairing personal account to work account + public enum TwoAccountPolicy: CustomStringConvertible { + /// An unspecified error. + case disabled + /// An unspecified error. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TwoAccountPolicySerializer().serialize(self)))" + } + } + open class TwoAccountPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TwoAccountPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TwoAccountPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return TwoAccountPolicy.disabled + case "enabled": + return TwoAccountPolicy.enabled + case "other": + return TwoAccountPolicy.other + default: + return TwoAccountPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// User linked app + open class UserLinkedAppLogInfo: TeamLog.AppLogInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserLinkedAppLogInfoSerializer().serialize(self)))" + } + } + open class UserLinkedAppLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserLinkedAppLogInfo) -> JSON { + let output = [ + "app_id": NullableSerializer(Serialization._StringSerializer).serialize(value.appId), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserLinkedAppLogInfo { + switch json { + case .dictionary(let dict): + let appId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["app_id"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + return UserLinkedAppLogInfo(appId: appId, displayName: displayName) + default: + fatalError("Type error deserializing") + } + } + } + + /// User's name logged information + open class UserNameLogInfo: CustomStringConvertible { + /// Given name. + public let givenName: String + /// Surname. + public let surname: String + /// Locale. Might be missing due to historical data gap. + public let locale: String? + public init(givenName: String, surname: String, locale: String? = nil) { + stringValidator()(givenName) + self.givenName = givenName + stringValidator()(surname) + self.surname = surname + nullableValidator(stringValidator())(locale) + self.locale = locale + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserNameLogInfoSerializer().serialize(self)))" + } + } + open class UserNameLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserNameLogInfo) -> JSON { + let output = [ + "given_name": Serialization._StringSerializer.serialize(value.givenName), + "surname": Serialization._StringSerializer.serialize(value.surname), + "locale": NullableSerializer(Serialization._StringSerializer).serialize(value.locale), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserNameLogInfo { + switch json { + case .dictionary(let dict): + let givenName = Serialization._StringSerializer.deserialize(dict["given_name"] ?? .null) + let surname = Serialization._StringSerializer.deserialize(dict["surname"] ?? .null) + let locale = NullableSerializer(Serialization._StringSerializer).deserialize(dict["locale"] ?? .null) + return UserNameLogInfo(givenName: givenName, surname: surname, locale: locale) + default: + fatalError("Type error deserializing") + } + } + } + + /// User or team linked app. Used when linked type is missing due to historical data gap. + open class UserOrTeamLinkedAppLogInfo: TeamLog.AppLogInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(UserOrTeamLinkedAppLogInfoSerializer().serialize(self)))" + } + } + open class UserOrTeamLinkedAppLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: UserOrTeamLinkedAppLogInfo) -> JSON { + let output = [ + "app_id": NullableSerializer(Serialization._StringSerializer).serialize(value.appId), + "display_name": NullableSerializer(Serialization._StringSerializer).serialize(value.displayName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> UserOrTeamLinkedAppLogInfo { + switch json { + case .dictionary(let dict): + let appId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["app_id"] ?? .null) + let displayName = NullableSerializer(Serialization._StringSerializer).deserialize(dict["display_name"] ?? .null) + return UserOrTeamLinkedAppLogInfo(appId: appId, displayName: displayName) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed team policy for viewer info. + open class ViewerInfoPolicyChangedDetails: CustomStringConvertible { + /// Previous Viewer Info policy. + public let previousValue: TeamLog.PassPolicy + /// New Viewer Info policy. + public let newValue: TeamLog.PassPolicy + public init(previousValue: TeamLog.PassPolicy, newValue: TeamLog.PassPolicy) { + self.previousValue = previousValue + self.newValue = newValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ViewerInfoPolicyChangedDetailsSerializer().serialize(self)))" + } + } + open class ViewerInfoPolicyChangedDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ViewerInfoPolicyChangedDetails) -> JSON { + let output = [ + "previous_value": TeamLog.PassPolicySerializer().serialize(value.previousValue), + "new_value": TeamLog.PassPolicySerializer().serialize(value.newValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ViewerInfoPolicyChangedDetails { + switch json { + case .dictionary(let dict): + let previousValue = TeamLog.PassPolicySerializer().deserialize(dict["previous_value"] ?? .null) + let newValue = TeamLog.PassPolicySerializer().deserialize(dict["new_value"] ?? .null) + return ViewerInfoPolicyChangedDetails(previousValue: previousValue, newValue: newValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The ViewerInfoPolicyChangedType struct + open class ViewerInfoPolicyChangedType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ViewerInfoPolicyChangedTypeSerializer().serialize(self)))" + } + } + open class ViewerInfoPolicyChangedTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ViewerInfoPolicyChangedType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> ViewerInfoPolicyChangedType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return ViewerInfoPolicyChangedType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Information on active web sessions + open class WebDeviceSessionLogInfo: TeamLog.DeviceSessionLogInfo { + /// Web session unique id. Might be missing due to historical data gap. + public let sessionInfo: TeamLog.WebSessionLogInfo? + /// Information on the hosting device. + public let userAgent: String + /// Information on the hosting operating system. + public let os: String + /// Information on the browser used for this web session. + public let browser: String + public init(userAgent: String, os: String, browser: String, ipAddress: String? = nil, created: Date? = nil, updated: Date? = nil, sessionInfo: TeamLog.WebSessionLogInfo? = nil) { + self.sessionInfo = sessionInfo + stringValidator()(userAgent) + self.userAgent = userAgent + stringValidator()(os) + self.os = os + stringValidator()(browser) + self.browser = browser + super.init(ipAddress: ipAddress, created: created, updated: updated) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WebDeviceSessionLogInfoSerializer().serialize(self)))" + } + } + open class WebDeviceSessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WebDeviceSessionLogInfo) -> JSON { + let output = [ + "user_agent": Serialization._StringSerializer.serialize(value.userAgent), + "os": Serialization._StringSerializer.serialize(value.os), + "browser": Serialization._StringSerializer.serialize(value.browser), + "ip_address": NullableSerializer(Serialization._StringSerializer).serialize(value.ipAddress), + "created": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.created), + "updated": NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).serialize(value.updated), + "session_info": NullableSerializer(TeamLog.WebSessionLogInfoSerializer()).serialize(value.sessionInfo), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> WebDeviceSessionLogInfo { + switch json { + case .dictionary(let dict): + let userAgent = Serialization._StringSerializer.deserialize(dict["user_agent"] ?? .null) + let os = Serialization._StringSerializer.deserialize(dict["os"] ?? .null) + let browser = Serialization._StringSerializer.deserialize(dict["browser"] ?? .null) + let ipAddress = NullableSerializer(Serialization._StringSerializer).deserialize(dict["ip_address"] ?? .null) + let created = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["created"] ?? .null) + let updated = NullableSerializer(NSDateSerializer("%Y-%m-%dT%H:%M:%SZ")).deserialize(dict["updated"] ?? .null) + let sessionInfo = NullableSerializer(TeamLog.WebSessionLogInfoSerializer()).deserialize(dict["session_info"] ?? .null) + return WebDeviceSessionLogInfo(userAgent: userAgent, os: os, browser: browser, ipAddress: ipAddress, created: created, updated: updated, sessionInfo: sessionInfo) + default: + fatalError("Type error deserializing") + } + } + } + + /// Web session. + open class WebSessionLogInfo: TeamLog.SessionLogInfo { + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WebSessionLogInfoSerializer().serialize(self)))" + } + } + open class WebSessionLogInfoSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WebSessionLogInfo) -> JSON { + let output = [ + "session_id": NullableSerializer(Serialization._StringSerializer).serialize(value.sessionId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> WebSessionLogInfo { + switch json { + case .dictionary(let dict): + let sessionId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["session_id"] ?? .null) + return WebSessionLogInfo(sessionId: sessionId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed how long members can stay signed in to Dropbox.com. + open class WebSessionsChangeFixedLengthPolicyDetails: CustomStringConvertible { + /// New session length policy. Might be missing due to historical data gap. + public let newValue: TeamLog.WebSessionsFixedLengthPolicy? + /// Previous session length policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.WebSessionsFixedLengthPolicy? + public init(newValue: TeamLog.WebSessionsFixedLengthPolicy? = nil, previousValue: TeamLog.WebSessionsFixedLengthPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WebSessionsChangeFixedLengthPolicyDetailsSerializer().serialize(self)))" + } + } + open class WebSessionsChangeFixedLengthPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WebSessionsChangeFixedLengthPolicyDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(TeamLog.WebSessionsFixedLengthPolicySerializer()).serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.WebSessionsFixedLengthPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> WebSessionsChangeFixedLengthPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(TeamLog.WebSessionsFixedLengthPolicySerializer()).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.WebSessionsFixedLengthPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return WebSessionsChangeFixedLengthPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The WebSessionsChangeFixedLengthPolicyType struct + open class WebSessionsChangeFixedLengthPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WebSessionsChangeFixedLengthPolicyTypeSerializer().serialize(self)))" + } + } + open class WebSessionsChangeFixedLengthPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WebSessionsChangeFixedLengthPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> WebSessionsChangeFixedLengthPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return WebSessionsChangeFixedLengthPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Changed how long team members can be idle while signed in to Dropbox.com. + open class WebSessionsChangeIdleLengthPolicyDetails: CustomStringConvertible { + /// New idle length policy. Might be missing due to historical data gap. + public let newValue: TeamLog.WebSessionsIdleLengthPolicy? + /// Previous idle length policy. Might be missing due to historical data gap. + public let previousValue: TeamLog.WebSessionsIdleLengthPolicy? + public init(newValue: TeamLog.WebSessionsIdleLengthPolicy? = nil, previousValue: TeamLog.WebSessionsIdleLengthPolicy? = nil) { + self.newValue = newValue + self.previousValue = previousValue + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WebSessionsChangeIdleLengthPolicyDetailsSerializer().serialize(self)))" + } + } + open class WebSessionsChangeIdleLengthPolicyDetailsSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WebSessionsChangeIdleLengthPolicyDetails) -> JSON { + let output = [ + "new_value": NullableSerializer(TeamLog.WebSessionsIdleLengthPolicySerializer()).serialize(value.newValue), + "previous_value": NullableSerializer(TeamLog.WebSessionsIdleLengthPolicySerializer()).serialize(value.previousValue), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> WebSessionsChangeIdleLengthPolicyDetails { + switch json { + case .dictionary(let dict): + let newValue = NullableSerializer(TeamLog.WebSessionsIdleLengthPolicySerializer()).deserialize(dict["new_value"] ?? .null) + let previousValue = NullableSerializer(TeamLog.WebSessionsIdleLengthPolicySerializer()).deserialize(dict["previous_value"] ?? .null) + return WebSessionsChangeIdleLengthPolicyDetails(newValue: newValue, previousValue: previousValue) + default: + fatalError("Type error deserializing") + } + } + } + + /// The WebSessionsChangeIdleLengthPolicyType struct + open class WebSessionsChangeIdleLengthPolicyType: CustomStringConvertible { + /// (no description) + public let description_: String + public init(description_: String) { + stringValidator()(description_) + self.description_ = description_ + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WebSessionsChangeIdleLengthPolicyTypeSerializer().serialize(self)))" + } + } + open class WebSessionsChangeIdleLengthPolicyTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WebSessionsChangeIdleLengthPolicyType) -> JSON { + let output = [ + "description": Serialization._StringSerializer.serialize(value.description_), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> WebSessionsChangeIdleLengthPolicyType { + switch json { + case .dictionary(let dict): + let description_ = Serialization._StringSerializer.deserialize(dict["description"] ?? .null) + return WebSessionsChangeIdleLengthPolicyType(description_: description_) + default: + fatalError("Type error deserializing") + } + } + } + + /// Web sessions fixed length policy. + public enum WebSessionsFixedLengthPolicy: CustomStringConvertible { + /// Defined fixed session length. + case defined(TeamLog.DurationLogInfo) + /// Undefined fixed session length. + case undefined + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WebSessionsFixedLengthPolicySerializer().serialize(self)))" + } + } + open class WebSessionsFixedLengthPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WebSessionsFixedLengthPolicy) -> JSON { + switch value { + case .defined(let arg): + var d = Serialization.getFields(TeamLog.DurationLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("defined") + return .dictionary(d) + case .undefined: + var d = [String: JSON]() + d[".tag"] = .str("undefined") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> WebSessionsFixedLengthPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "defined": + let v = TeamLog.DurationLogInfoSerializer().deserialize(json) + return WebSessionsFixedLengthPolicy.defined(v) + case "undefined": + return WebSessionsFixedLengthPolicy.undefined + case "other": + return WebSessionsFixedLengthPolicy.other + default: + return WebSessionsFixedLengthPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Web sessions idle length policy. + public enum WebSessionsIdleLengthPolicy: CustomStringConvertible { + /// Defined idle session length. + case defined(TeamLog.DurationLogInfo) + /// Undefined idle session length. + case undefined + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(WebSessionsIdleLengthPolicySerializer().serialize(self)))" + } + } + open class WebSessionsIdleLengthPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: WebSessionsIdleLengthPolicy) -> JSON { + switch value { + case .defined(let arg): + var d = Serialization.getFields(TeamLog.DurationLogInfoSerializer().serialize(arg)) + d[".tag"] = .str("defined") + return .dictionary(d) + case .undefined: + var d = [String: JSON]() + d[".tag"] = .str("undefined") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> WebSessionsIdleLengthPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "defined": + let v = TeamLog.DurationLogInfoSerializer().deserialize(json) + return WebSessionsIdleLengthPolicy.defined(v) + case "undefined": + return WebSessionsIdleLengthPolicy.undefined + case "other": + return WebSessionsIdleLengthPolicy.other + default: + return WebSessionsIdleLengthPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + + /// Stone Route Objects + + static let getEvents = Route( + name: "get_events", + version: 1, + namespace: "team_log", + deprecated: false, + argSerializer: TeamLog.GetTeamEventsArgSerializer(), + responseSerializer: TeamLog.GetTeamEventsResultSerializer(), + errorSerializer: TeamLog.GetTeamEventsErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getEventsContinue = Route( + name: "get_events/continue", + version: 1, + namespace: "team_log", + deprecated: false, + argSerializer: TeamLog.GetTeamEventsContinueArgSerializer(), + responseSerializer: TeamLog.GetTeamEventsResultSerializer(), + errorSerializer: TeamLog.GetTeamEventsContinueErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamLogRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamLogRoutes.swift new file mode 100644 index 0000000..6a1e3a0 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamLogRoutes.swift @@ -0,0 +1,49 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the team_log namespace +open class TeamLogRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// Retrieves team events. Events have a lifespan of two years. Events older than two years will not be returned. + /// Many attributes note 'may be missing due to historical data gap'. Note that the file_operations category and & + /// analogous paper events are not available on all Dropbox Business plans /business/plans-comparison. Use + /// features/get_values /developers/documentation/http/teams#team-features-get_values to check for this feature. + /// Permission : Team Auditing. + /// + /// - parameter limit: The maximal number of results to return per call. Note that some calls may not return limit + /// number of events, and may even return no events, even with `has_more` set to true. In this case, callers should + /// fetch again using getEventsContinue. + /// - parameter accountId: Filter the events by account ID. Return ony events with this account_id as either Actor, + /// Context, or Participants. + /// - parameter time: Filter by time range. + /// - parameter category: Filter the returned events to a single category. + /// + /// - returns: Through the response callback, the caller will receive a `TeamLog.GetTeamEventsResult` object on + /// success or a `TeamLog.GetTeamEventsError` object on failure. + @discardableResult open func getEvents(limit: UInt32 = 1000, accountId: String? = nil, time: TeamCommon.TimeRange? = nil, category: TeamLog.EventCategory? = nil) -> RpcRequest { + let route = TeamLog.getEvents + let serverArgs = TeamLog.GetTeamEventsArg(limit: limit, accountId: accountId, time: time, category: category) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from getEvents, use this to paginate through all events. Permission : Team + /// Auditing. + /// + /// - parameter cursor: Indicates from what point to get the next set of events. + /// + /// - returns: Through the response callback, the caller will receive a `TeamLog.GetTeamEventsResult` object on + /// success or a `TeamLog.GetTeamEventsContinueError` object on failure. + @discardableResult open func getEventsContinue(cursor: String) -> RpcRequest { + let route = TeamLog.getEventsContinue + let serverArgs = TeamLog.GetTeamEventsContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamPolicies.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamPolicies.swift new file mode 100644 index 0000000..3dff0b9 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamPolicies.swift @@ -0,0 +1,998 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the team_policies namespace +open class TeamPolicies { + /// The CameraUploadsPolicyState union + public enum CameraUploadsPolicyState: CustomStringConvertible { + /// Background camera uploads are disabled. + case disabled + /// Background camera uploads are allowed. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(CameraUploadsPolicyStateSerializer().serialize(self)))" + } + } + open class CameraUploadsPolicyStateSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: CameraUploadsPolicyState) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> CameraUploadsPolicyState { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return CameraUploadsPolicyState.disabled + case "enabled": + return CameraUploadsPolicyState.enabled + case "other": + return CameraUploadsPolicyState.other + default: + return CameraUploadsPolicyState.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The EmmState union + public enum EmmState: CustomStringConvertible { + /// Emm token is disabled. + case disabled + /// Emm token is optional. + case optional + /// Emm token is required. + case required + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(EmmStateSerializer().serialize(self)))" + } + } + open class EmmStateSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: EmmState) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .optional: + var d = [String: JSON]() + d[".tag"] = .str("optional") + return .dictionary(d) + case .required: + var d = [String: JSON]() + d[".tag"] = .str("required") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> EmmState { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return EmmState.disabled + case "optional": + return EmmState.optional + case "required": + return EmmState.required + case "other": + return EmmState.other + default: + return EmmState.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GroupCreation union + public enum GroupCreation: CustomStringConvertible { + /// Team admins and members can create groups. + case adminsAndMembers + /// Only team admins can create groups. + case adminsOnly + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GroupCreationSerializer().serialize(self)))" + } + } + open class GroupCreationSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GroupCreation) -> JSON { + switch value { + case .adminsAndMembers: + var d = [String: JSON]() + d[".tag"] = .str("admins_and_members") + return .dictionary(d) + case .adminsOnly: + var d = [String: JSON]() + d[".tag"] = .str("admins_only") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GroupCreation { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "admins_and_members": + return GroupCreation.adminsAndMembers + case "admins_only": + return GroupCreation.adminsOnly + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The OfficeAddInPolicy union + public enum OfficeAddInPolicy: CustomStringConvertible { + /// Office Add-In is disabled. + case disabled + /// Office Add-In is enabled. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(OfficeAddInPolicySerializer().serialize(self)))" + } + } + open class OfficeAddInPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: OfficeAddInPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> OfficeAddInPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return OfficeAddInPolicy.disabled + case "enabled": + return OfficeAddInPolicy.enabled + case "other": + return OfficeAddInPolicy.other + default: + return OfficeAddInPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PaperDeploymentPolicy union + public enum PaperDeploymentPolicy: CustomStringConvertible { + /// All team members have access to Paper. + case full + /// Only whitelisted team members can access Paper. To see which user is whitelisted, check + /// 'is_paper_whitelisted' on 'account/info'. + case partial + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperDeploymentPolicySerializer().serialize(self)))" + } + } + open class PaperDeploymentPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperDeploymentPolicy) -> JSON { + switch value { + case .full: + var d = [String: JSON]() + d[".tag"] = .str("full") + return .dictionary(d) + case .partial: + var d = [String: JSON]() + d[".tag"] = .str("partial") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperDeploymentPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "full": + return PaperDeploymentPolicy.full + case "partial": + return PaperDeploymentPolicy.partial + case "other": + return PaperDeploymentPolicy.other + default: + return PaperDeploymentPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PaperEnabledPolicy union + public enum PaperEnabledPolicy: CustomStringConvertible { + /// Paper is disabled. + case disabled + /// Paper is enabled. + case enabled + /// Unspecified policy. + case unspecified + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PaperEnabledPolicySerializer().serialize(self)))" + } + } + open class PaperEnabledPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PaperEnabledPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .unspecified: + var d = [String: JSON]() + d[".tag"] = .str("unspecified") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PaperEnabledPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return PaperEnabledPolicy.disabled + case "enabled": + return PaperEnabledPolicy.enabled + case "unspecified": + return PaperEnabledPolicy.unspecified + case "other": + return PaperEnabledPolicy.other + default: + return PaperEnabledPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The PasswordStrengthPolicy union + public enum PasswordStrengthPolicy: CustomStringConvertible { + /// User passwords will adhere to the minimal password strength policy. + case minimalRequirements + /// User passwords will adhere to the moderate password strength policy. + case moderatePassword + /// User passwords will adhere to the very strong password strength policy. + case strongPassword + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(PasswordStrengthPolicySerializer().serialize(self)))" + } + } + open class PasswordStrengthPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: PasswordStrengthPolicy) -> JSON { + switch value { + case .minimalRequirements: + var d = [String: JSON]() + d[".tag"] = .str("minimal_requirements") + return .dictionary(d) + case .moderatePassword: + var d = [String: JSON]() + d[".tag"] = .str("moderate_password") + return .dictionary(d) + case .strongPassword: + var d = [String: JSON]() + d[".tag"] = .str("strong_password") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> PasswordStrengthPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "minimal_requirements": + return PasswordStrengthPolicy.minimalRequirements + case "moderate_password": + return PasswordStrengthPolicy.moderatePassword + case "strong_password": + return PasswordStrengthPolicy.strongPassword + case "other": + return PasswordStrengthPolicy.other + default: + return PasswordStrengthPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The RolloutMethod union + public enum RolloutMethod: CustomStringConvertible { + /// Unlink all. + case unlinkAll + /// Unlink devices with the most inactivity. + case unlinkMostInactive + /// Add member to Exceptions. + case addMemberToExceptions + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(RolloutMethodSerializer().serialize(self)))" + } + } + open class RolloutMethodSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: RolloutMethod) -> JSON { + switch value { + case .unlinkAll: + var d = [String: JSON]() + d[".tag"] = .str("unlink_all") + return .dictionary(d) + case .unlinkMostInactive: + var d = [String: JSON]() + d[".tag"] = .str("unlink_most_inactive") + return .dictionary(d) + case .addMemberToExceptions: + var d = [String: JSON]() + d[".tag"] = .str("add_member_to_exceptions") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> RolloutMethod { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "unlink_all": + return RolloutMethod.unlinkAll + case "unlink_most_inactive": + return RolloutMethod.unlinkMostInactive + case "add_member_to_exceptions": + return RolloutMethod.addMemberToExceptions + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Policy governing which shared folders a team member can join. + public enum SharedFolderJoinPolicy: CustomStringConvertible { + /// Team members can only join folders shared by teammates. + case fromTeamOnly + /// Team members can join any shared folder, including those shared by users outside the team. + case fromAnyone + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderJoinPolicySerializer().serialize(self)))" + } + } + open class SharedFolderJoinPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderJoinPolicy) -> JSON { + switch value { + case .fromTeamOnly: + var d = [String: JSON]() + d[".tag"] = .str("from_team_only") + return .dictionary(d) + case .fromAnyone: + var d = [String: JSON]() + d[".tag"] = .str("from_anyone") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedFolderJoinPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "from_team_only": + return SharedFolderJoinPolicy.fromTeamOnly + case "from_anyone": + return SharedFolderJoinPolicy.fromAnyone + case "other": + return SharedFolderJoinPolicy.other + default: + return SharedFolderJoinPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Policy governing who can be a member of a folder shared by a team member. + public enum SharedFolderMemberPolicy: CustomStringConvertible { + /// Only a teammate can be a member of a folder shared by a team member. + case team + /// Anyone can be a member of a folder shared by a team member. + case anyone + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedFolderMemberPolicySerializer().serialize(self)))" + } + } + open class SharedFolderMemberPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedFolderMemberPolicy) -> JSON { + switch value { + case .team: + var d = [String: JSON]() + d[".tag"] = .str("team") + return .dictionary(d) + case .anyone: + var d = [String: JSON]() + d[".tag"] = .str("anyone") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedFolderMemberPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "team": + return SharedFolderMemberPolicy.team + case "anyone": + return SharedFolderMemberPolicy.anyone + case "other": + return SharedFolderMemberPolicy.other + default: + return SharedFolderMemberPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Policy governing the visibility of shared links. This policy can apply to newly created shared links, or all + /// shared links. + public enum SharedLinkCreatePolicy: CustomStringConvertible { + /// By default, anyone can access newly created shared links. No login will be required to access the shared + /// links unless overridden. + case defaultPublic + /// By default, only members of the same team can access newly created shared links. Login will be required to + /// access the shared links unless overridden. + case defaultTeamOnly + /// Only members of the same team can access all shared links. Login will be required to access all shared + /// links. + case teamOnly + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SharedLinkCreatePolicySerializer().serialize(self)))" + } + } + open class SharedLinkCreatePolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SharedLinkCreatePolicy) -> JSON { + switch value { + case .defaultPublic: + var d = [String: JSON]() + d[".tag"] = .str("default_public") + return .dictionary(d) + case .defaultTeamOnly: + var d = [String: JSON]() + d[".tag"] = .str("default_team_only") + return .dictionary(d) + case .teamOnly: + var d = [String: JSON]() + d[".tag"] = .str("team_only") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SharedLinkCreatePolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "default_public": + return SharedLinkCreatePolicy.defaultPublic + case "default_team_only": + return SharedLinkCreatePolicy.defaultTeamOnly + case "team_only": + return SharedLinkCreatePolicy.teamOnly + case "other": + return SharedLinkCreatePolicy.other + default: + return SharedLinkCreatePolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ShowcaseDownloadPolicy union + public enum ShowcaseDownloadPolicy: CustomStringConvertible { + /// Do not allow files to be downloaded from Showcases. + case disabled + /// Allow files to be downloaded from Showcases. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseDownloadPolicySerializer().serialize(self)))" + } + } + open class ShowcaseDownloadPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseDownloadPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShowcaseDownloadPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return ShowcaseDownloadPolicy.disabled + case "enabled": + return ShowcaseDownloadPolicy.enabled + case "other": + return ShowcaseDownloadPolicy.other + default: + return ShowcaseDownloadPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ShowcaseEnabledPolicy union + public enum ShowcaseEnabledPolicy: CustomStringConvertible { + /// Showcase is disabled. + case disabled + /// Showcase is enabled. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseEnabledPolicySerializer().serialize(self)))" + } + } + open class ShowcaseEnabledPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseEnabledPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShowcaseEnabledPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return ShowcaseEnabledPolicy.disabled + case "enabled": + return ShowcaseEnabledPolicy.enabled + case "other": + return ShowcaseEnabledPolicy.other + default: + return ShowcaseEnabledPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The ShowcaseExternalSharingPolicy union + public enum ShowcaseExternalSharingPolicy: CustomStringConvertible { + /// Do not allow showcases to be shared with people not on the team. + case disabled + /// Allow showcases to be shared with people not on the team. + case enabled + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(ShowcaseExternalSharingPolicySerializer().serialize(self)))" + } + } + open class ShowcaseExternalSharingPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: ShowcaseExternalSharingPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .enabled: + var d = [String: JSON]() + d[".tag"] = .str("enabled") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> ShowcaseExternalSharingPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return ShowcaseExternalSharingPolicy.disabled + case "enabled": + return ShowcaseExternalSharingPolicy.enabled + case "other": + return ShowcaseExternalSharingPolicy.other + default: + return ShowcaseExternalSharingPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SmartSyncPolicy union + public enum SmartSyncPolicy: CustomStringConvertible { + /// The specified content will be synced as local files by default. + case local + /// The specified content will be synced as on-demand files by default. + case onDemand + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SmartSyncPolicySerializer().serialize(self)))" + } + } + open class SmartSyncPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SmartSyncPolicy) -> JSON { + switch value { + case .local: + var d = [String: JSON]() + d[".tag"] = .str("local") + return .dictionary(d) + case .onDemand: + var d = [String: JSON]() + d[".tag"] = .str("on_demand") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SmartSyncPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "local": + return SmartSyncPolicy.local + case "on_demand": + return SmartSyncPolicy.onDemand + case "other": + return SmartSyncPolicy.other + default: + return SmartSyncPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The SsoPolicy union + public enum SsoPolicy: CustomStringConvertible { + /// Users will be able to sign in with their Dropbox credentials. + case disabled + /// Users will be able to sign in with either their Dropbox or single sign-on credentials. + case optional + /// Users will be required to sign in with their single sign-on credentials. + case required + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SsoPolicySerializer().serialize(self)))" + } + } + open class SsoPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SsoPolicy) -> JSON { + switch value { + case .disabled: + var d = [String: JSON]() + d[".tag"] = .str("disabled") + return .dictionary(d) + case .optional: + var d = [String: JSON]() + d[".tag"] = .str("optional") + return .dictionary(d) + case .required: + var d = [String: JSON]() + d[".tag"] = .str("required") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SsoPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "disabled": + return SsoPolicy.disabled + case "optional": + return SsoPolicy.optional + case "required": + return SsoPolicy.required + case "other": + return SsoPolicy.other + default: + return SsoPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Policies governing team members. + open class TeamMemberPolicies: CustomStringConvertible { + /// Policies governing sharing. + public let sharing: TeamPolicies.TeamSharingPolicies + /// This describes the Enterprise Mobility Management (EMM) state for this team. This information can be used to + /// understand if an organization is integrating with a third-party EMM vendor to further manage and apply + /// restrictions upon the team's Dropbox usage on mobile devices. This is a new feature and in the future we'll + /// be adding more new fields and additional documentation. + public let emmState: TeamPolicies.EmmState + /// The admin policy around the Dropbox Office Add-In for this team. + public let officeAddin: TeamPolicies.OfficeAddInPolicy + public init(sharing: TeamPolicies.TeamSharingPolicies, emmState: TeamPolicies.EmmState, officeAddin: TeamPolicies.OfficeAddInPolicy) { + self.sharing = sharing + self.emmState = emmState + self.officeAddin = officeAddin + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamMemberPoliciesSerializer().serialize(self)))" + } + } + open class TeamMemberPoliciesSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamMemberPolicies) -> JSON { + let output = [ + "sharing": TeamPolicies.TeamSharingPoliciesSerializer().serialize(value.sharing), + "emm_state": TeamPolicies.EmmStateSerializer().serialize(value.emmState), + "office_addin": TeamPolicies.OfficeAddInPolicySerializer().serialize(value.officeAddin), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamMemberPolicies { + switch json { + case .dictionary(let dict): + let sharing = TeamPolicies.TeamSharingPoliciesSerializer().deserialize(dict["sharing"] ?? .null) + let emmState = TeamPolicies.EmmStateSerializer().deserialize(dict["emm_state"] ?? .null) + let officeAddin = TeamPolicies.OfficeAddInPolicySerializer().deserialize(dict["office_addin"] ?? .null) + return TeamMemberPolicies(sharing: sharing, emmState: emmState, officeAddin: officeAddin) + default: + fatalError("Type error deserializing") + } + } + } + + /// Policies governing sharing within and outside of the team. + open class TeamSharingPolicies: CustomStringConvertible { + /// Who can join folders shared by team members. + public let sharedFolderMemberPolicy: TeamPolicies.SharedFolderMemberPolicy + /// Which shared folders team members can join. + public let sharedFolderJoinPolicy: TeamPolicies.SharedFolderJoinPolicy + /// Who can view shared links owned by team members. + public let sharedLinkCreatePolicy: TeamPolicies.SharedLinkCreatePolicy + public init(sharedFolderMemberPolicy: TeamPolicies.SharedFolderMemberPolicy, sharedFolderJoinPolicy: TeamPolicies.SharedFolderJoinPolicy, sharedLinkCreatePolicy: TeamPolicies.SharedLinkCreatePolicy) { + self.sharedFolderMemberPolicy = sharedFolderMemberPolicy + self.sharedFolderJoinPolicy = sharedFolderJoinPolicy + self.sharedLinkCreatePolicy = sharedLinkCreatePolicy + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamSharingPoliciesSerializer().serialize(self)))" + } + } + open class TeamSharingPoliciesSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamSharingPolicies) -> JSON { + let output = [ + "shared_folder_member_policy": TeamPolicies.SharedFolderMemberPolicySerializer().serialize(value.sharedFolderMemberPolicy), + "shared_folder_join_policy": TeamPolicies.SharedFolderJoinPolicySerializer().serialize(value.sharedFolderJoinPolicy), + "shared_link_create_policy": TeamPolicies.SharedLinkCreatePolicySerializer().serialize(value.sharedLinkCreatePolicy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamSharingPolicies { + switch json { + case .dictionary(let dict): + let sharedFolderMemberPolicy = TeamPolicies.SharedFolderMemberPolicySerializer().deserialize(dict["shared_folder_member_policy"] ?? .null) + let sharedFolderJoinPolicy = TeamPolicies.SharedFolderJoinPolicySerializer().deserialize(dict["shared_folder_join_policy"] ?? .null) + let sharedLinkCreatePolicy = TeamPolicies.SharedLinkCreatePolicySerializer().deserialize(dict["shared_link_create_policy"] ?? .null) + return TeamSharingPolicies(sharedFolderMemberPolicy: sharedFolderMemberPolicy, sharedFolderJoinPolicy: sharedFolderJoinPolicy, sharedLinkCreatePolicy: sharedLinkCreatePolicy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TwoStepVerificationPolicy union + public enum TwoStepVerificationPolicy: CustomStringConvertible { + /// Enabled require two factor authorization. + case requireTfaEnable + /// Disabled require two factor authorization. + case requireTfaDisable + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TwoStepVerificationPolicySerializer().serialize(self)))" + } + } + open class TwoStepVerificationPolicySerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TwoStepVerificationPolicy) -> JSON { + switch value { + case .requireTfaEnable: + var d = [String: JSON]() + d[".tag"] = .str("require_tfa_enable") + return .dictionary(d) + case .requireTfaDisable: + var d = [String: JSON]() + d[".tag"] = .str("require_tfa_disable") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> TwoStepVerificationPolicy { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "require_tfa_enable": + return TwoStepVerificationPolicy.requireTfaEnable + case "require_tfa_disable": + return TwoStepVerificationPolicy.requireTfaDisable + case "other": + return TwoStepVerificationPolicy.other + default: + return TwoStepVerificationPolicy.other + } + default: + fatalError("Failed to deserialize") + } + } + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamRoutes.swift new file mode 100644 index 0000000..00b3191 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/TeamRoutes.swift @@ -0,0 +1,929 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the team namespace +open class TeamRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// List all device sessions of a team's member. + /// + /// - parameter teamMemberId: The team's member id. + /// - parameter includeWebSessions: Whether to list web sessions of the team's member. + /// - parameter includeDesktopClients: Whether to list linked desktop devices of the team's member. + /// - parameter includeMobileClients: Whether to list linked mobile devices of the team's member. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ListMemberDevicesResult` object on + /// success or a `Team.ListMemberDevicesError` object on failure. + @discardableResult open func devicesListMemberDevices(teamMemberId: String, includeWebSessions: Bool = true, includeDesktopClients: Bool = true, includeMobileClients: Bool = true) -> RpcRequest { + let route = Team.devicesListMemberDevices + let serverArgs = Team.ListMemberDevicesArg(teamMemberId: teamMemberId, includeWebSessions: includeWebSessions, includeDesktopClients: includeDesktopClients, includeMobileClients: includeMobileClients) + return client.request(route, serverArgs: serverArgs) + } + + /// List all device sessions of a team. Permission : Team member file access. + /// + /// - parameter cursor: At the first call to the devicesListMembersDevices the cursor shouldn't be passed. Then, if + /// the result of the call includes a cursor, the following requests should include the received cursors in order to + /// receive the next sub list of team devices. + /// - parameter includeWebSessions: Whether to list web sessions of the team members. + /// - parameter includeDesktopClients: Whether to list desktop clients of the team members. + /// - parameter includeMobileClients: Whether to list mobile clients of the team members. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ListMembersDevicesResult` object on + /// success or a `Team.ListMembersDevicesError` object on failure. + @discardableResult open func devicesListMembersDevices(cursor: String? = nil, includeWebSessions: Bool = true, includeDesktopClients: Bool = true, includeMobileClients: Bool = true) -> RpcRequest { + let route = Team.devicesListMembersDevices + let serverArgs = Team.ListMembersDevicesArg(cursor: cursor, includeWebSessions: includeWebSessions, includeDesktopClients: includeDesktopClients, includeMobileClients: includeMobileClients) + return client.request(route, serverArgs: serverArgs) + } + + /// List all device sessions of a team. Permission : Team member file access. + /// + /// - parameter cursor: At the first call to the devicesListTeamDevices the cursor shouldn't be passed. Then, if the + /// result of the call includes a cursor, the following requests should include the received cursors in order to + /// receive the next sub list of team devices. + /// - parameter includeWebSessions: Whether to list web sessions of the team members. + /// - parameter includeDesktopClients: Whether to list desktop clients of the team members. + /// - parameter includeMobileClients: Whether to list mobile clients of the team members. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ListTeamDevicesResult` object on + /// success or a `Team.ListTeamDevicesError` object on failure. + @available(*, unavailable, message:"devicesListTeamDevices is deprecated. Use devicesListMembersDevices.") + @discardableResult open func devicesListTeamDevices(cursor: String? = nil, includeWebSessions: Bool = true, includeDesktopClients: Bool = true, includeMobileClients: Bool = true) -> RpcRequest { + let route = Team.devicesListTeamDevices + let serverArgs = Team.ListTeamDevicesArg(cursor: cursor, includeWebSessions: includeWebSessions, includeDesktopClients: includeDesktopClients, includeMobileClients: includeMobileClients) + return client.request(route, serverArgs: serverArgs) + } + + /// Revoke a device session of a team's member. + /// + /// - parameter revokeDeviceSessionArg: The RevokeDeviceSessionArg union + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Team.RevokeDeviceSessionError` object on failure. + @discardableResult open func devicesRevokeDeviceSession(revokeDeviceSessionArg: Team.RevokeDeviceSessionArg) -> RpcRequest { + let route = Team.devicesRevokeDeviceSession + let serverArgs = revokeDeviceSessionArg + return client.request(route, serverArgs: serverArgs) + } + + /// Revoke a list of device sessions of team members. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Team.RevokeDeviceSessionBatchResult` + /// object on success or a `Team.RevokeDeviceSessionBatchError` object on failure. + @discardableResult open func devicesRevokeDeviceSessionBatch(revokeDevices: Array) -> RpcRequest { + let route = Team.devicesRevokeDeviceSessionBatch + let serverArgs = Team.RevokeDeviceSessionBatchArg(revokeDevices: revokeDevices) + return client.request(route, serverArgs: serverArgs) + } + + /// Get the values for one or more featues. This route allows you to check your account's capability for what + /// feature you can access or what value you have for certain features. Permission : Team information. + /// + /// - parameter features: A list of features in Feature. If the list is empty, this route will return + /// FeaturesGetValuesBatchError. + /// + /// - returns: Through the response callback, the caller will receive a `Team.FeaturesGetValuesBatchResult` object + /// on success or a `Team.FeaturesGetValuesBatchError` object on failure. + @discardableResult open func featuresGetValues(features: Array) -> RpcRequest { + let route = Team.featuresGetValues + let serverArgs = Team.FeaturesGetValuesBatchArg(features: features) + return client.request(route, serverArgs: serverArgs) + } + + /// Retrieves information about a team. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamGetInfoResult` object on success + /// or a `Void` object on failure. + @discardableResult open func getInfo() -> RpcRequest { + let route = Team.getInfo + return client.request(route) + } + + /// Creates a new, empty group, with a requested name. Permission : Team member management. + /// + /// - parameter groupName: Group name. + /// - parameter groupExternalId: The creator of a team can associate an arbitrary external ID to the group. + /// - parameter groupManagementType: Whether the team can be managed by selected users, or only by team admins. + /// + /// - returns: Through the response callback, the caller will receive a `Team.GroupFullInfo` object on success or a + /// `Team.GroupCreateError` object on failure. + @discardableResult open func groupsCreate(groupName: String, groupExternalId: String? = nil, groupManagementType: TeamCommon.GroupManagementType? = nil) -> RpcRequest { + let route = Team.groupsCreate + let serverArgs = Team.GroupCreateArg(groupName: groupName, groupExternalId: groupExternalId, groupManagementType: groupManagementType) + return client.request(route, serverArgs: serverArgs) + } + + /// Deletes a group. The group is deleted immediately. However the revoking of group-owned resources may take + /// additional time. Use the groupsJobStatusGet to determine whether this process has completed. Permission : Team + /// member management. + /// + /// - parameter groupSelector: Argument for selecting a single group, either by group_id or by external group ID. + /// + /// - returns: Through the response callback, the caller will receive a `Async.LaunchEmptyResult` object on success + /// or a `Team.GroupDeleteError` object on failure. + @discardableResult open func groupsDelete(groupSelector: Team.GroupSelector) -> RpcRequest { + let route = Team.groupsDelete + let serverArgs = groupSelector + return client.request(route, serverArgs: serverArgs) + } + + /// Retrieves information about one or more groups. Note that the optional field members in GroupFullInfo is not + /// returned for system-managed groups. Permission : Team Information. + /// + /// - parameter groupsSelector: Argument for selecting a list of groups, either by group_ids, or external group IDs. + /// + /// - returns: Through the response callback, the caller will receive a `Array` object on + /// success or a `Team.GroupsGetInfoError` object on failure. + @discardableResult open func groupsGetInfo(groupsSelector: Team.GroupsSelector) -> RpcRequest, Team.GroupsGetInfoErrorSerializer> { + let route = Team.groupsGetInfo + let serverArgs = groupsSelector + return client.request(route, serverArgs: serverArgs) + } + + /// Once an async_job_id is returned from groupsDelete, groupsMembersAdd , or groupsMembersRemove use this method to + /// poll the status of granting/revoking group members' access to group-owned resources. Permission : Team member + /// management. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Async.PollEmptyResult` object on success + /// or a `Team.GroupsPollError` object on failure. + @discardableResult open func groupsJobStatusGet(asyncJobId: String) -> RpcRequest { + let route = Team.groupsJobStatusGet + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Lists groups on a team. Permission : Team Information. + /// + /// - parameter limit: Number of results to return per call. + /// + /// - returns: Through the response callback, the caller will receive a `Team.GroupsListResult` object on success + /// or a `Void` object on failure. + @discardableResult open func groupsList(limit: UInt32 = 1000) -> RpcRequest { + let route = Team.groupsList + let serverArgs = Team.GroupsListArg(limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from groupsList, use this to paginate through all groups. Permission : Team + /// Information. + /// + /// - parameter cursor: Indicates from what point to get the next set of groups. + /// + /// - returns: Through the response callback, the caller will receive a `Team.GroupsListResult` object on success + /// or a `Team.GroupsListContinueError` object on failure. + @discardableResult open func groupsListContinue(cursor: String) -> RpcRequest { + let route = Team.groupsListContinue + let serverArgs = Team.GroupsListContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Adds members to a group. The members are added immediately. However the granting of group-owned resources may + /// take additional time. Use the groupsJobStatusGet to determine whether this process has completed. Permission : + /// Team member management. + /// + /// - parameter group: Group to which users will be added. + /// - parameter members: List of users to be added to the group. + /// + /// - returns: Through the response callback, the caller will receive a `Team.GroupMembersChangeResult` object on + /// success or a `Team.GroupMembersAddError` object on failure. + @discardableResult open func groupsMembersAdd(group: Team.GroupSelector, members: Array, returnMembers: Bool = true) -> RpcRequest { + let route = Team.groupsMembersAdd + let serverArgs = Team.GroupMembersAddArg(group: group, members: members, returnMembers: returnMembers) + return client.request(route, serverArgs: serverArgs) + } + + /// Lists members of a group. Permission : Team Information. + /// + /// - parameter group: The group whose members are to be listed. + /// - parameter limit: Number of results to return per call. + /// + /// - returns: Through the response callback, the caller will receive a `Team.GroupsMembersListResult` object on + /// success or a `Team.GroupSelectorError` object on failure. + @discardableResult open func groupsMembersList(group: Team.GroupSelector, limit: UInt32 = 1000) -> RpcRequest { + let route = Team.groupsMembersList + let serverArgs = Team.GroupsMembersListArg(group: group, limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from groupsMembersList, use this to paginate through all members of the group. + /// Permission : Team information. + /// + /// - parameter cursor: Indicates from what point to get the next set of groups. + /// + /// - returns: Through the response callback, the caller will receive a `Team.GroupsMembersListResult` object on + /// success or a `Team.GroupsMembersListContinueError` object on failure. + @discardableResult open func groupsMembersListContinue(cursor: String) -> RpcRequest { + let route = Team.groupsMembersListContinue + let serverArgs = Team.GroupsMembersListContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Removes members from a group. The members are removed immediately. However the revoking of group-owned resources + /// may take additional time. Use the groupsJobStatusGet to determine whether this process has completed. This + /// method permits removing the only owner of a group, even in cases where this is not possible via the web client. + /// Permission : Team member management. + /// + /// - parameter group: Group from which users will be removed. + /// - parameter users: List of users to be removed from the group. + /// + /// - returns: Through the response callback, the caller will receive a `Team.GroupMembersChangeResult` object on + /// success or a `Team.GroupMembersRemoveError` object on failure. + @discardableResult open func groupsMembersRemove(group: Team.GroupSelector, users: Array, returnMembers: Bool = true) -> RpcRequest { + let route = Team.groupsMembersRemove + let serverArgs = Team.GroupMembersRemoveArg(group: group, users: users, returnMembers: returnMembers) + return client.request(route, serverArgs: serverArgs) + } + + /// Sets a member's access type in a group. Permission : Team member management. + /// + /// - parameter accessType: New group access type the user will have. + /// - parameter returnMembers: Whether to return the list of members in the group. Note that the default value will + /// cause all the group members to be returned in the response. This may take a long time for large groups. + /// + /// - returns: Through the response callback, the caller will receive a `Array` object on + /// success or a `Team.GroupMemberSetAccessTypeError` object on failure. + @discardableResult open func groupsMembersSetAccessType(group: Team.GroupSelector, user: Team.UserSelectorArg, accessType: Team.GroupAccessType, returnMembers: Bool = true) -> RpcRequest, Team.GroupMemberSetAccessTypeErrorSerializer> { + let route = Team.groupsMembersSetAccessType + let serverArgs = Team.GroupMembersSetAccessTypeArg(group: group, user: user, accessType: accessType, returnMembers: returnMembers) + return client.request(route, serverArgs: serverArgs) + } + + /// Updates a group's name and/or external ID. Permission : Team member management. + /// + /// - parameter group: Specify a group. + /// - parameter newGroupName: Optional argument. Set group name to this if provided. + /// - parameter newGroupExternalId: Optional argument. New group external ID. If the argument is None, the group's + /// external_id won't be updated. If the argument is empty string, the group's external id will be cleared. + /// - parameter newGroupManagementType: Set new group management type, if provided. + /// + /// - returns: Through the response callback, the caller will receive a `Team.GroupFullInfo` object on success or a + /// `Team.GroupUpdateError` object on failure. + @discardableResult open func groupsUpdate(group: Team.GroupSelector, returnMembers: Bool = true, newGroupName: String? = nil, newGroupExternalId: String? = nil, newGroupManagementType: TeamCommon.GroupManagementType? = nil) -> RpcRequest { + let route = Team.groupsUpdate + let serverArgs = Team.GroupUpdateArgs(group: group, returnMembers: returnMembers, newGroupName: newGroupName, newGroupExternalId: newGroupExternalId, newGroupManagementType: newGroupManagementType) + return client.request(route, serverArgs: serverArgs) + } + + /// List all linked applications of the team member. Note, this endpoint does not list any team-linked applications. + /// + /// - parameter teamMemberId: The team member id. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ListMemberAppsResult` object on + /// success or a `Team.ListMemberAppsError` object on failure. + @discardableResult open func linkedAppsListMemberLinkedApps(teamMemberId: String) -> RpcRequest { + let route = Team.linkedAppsListMemberLinkedApps + let serverArgs = Team.ListMemberAppsArg(teamMemberId: teamMemberId) + return client.request(route, serverArgs: serverArgs) + } + + /// List all applications linked to the team members' accounts. Note, this endpoint does not list any team-linked + /// applications. + /// + /// - parameter cursor: At the first call to the linkedAppsListMembersLinkedApps the cursor shouldn't be passed. + /// Then, if the result of the call includes a cursor, the following requests should include the received cursors in + /// order to receive the next sub list of the team applications. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ListMembersAppsResult` object on + /// success or a `Team.ListMembersAppsError` object on failure. + @discardableResult open func linkedAppsListMembersLinkedApps(cursor: String? = nil) -> RpcRequest { + let route = Team.linkedAppsListMembersLinkedApps + let serverArgs = Team.ListMembersAppsArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// List all applications linked to the team members' accounts. Note, this endpoint doesn't list any team-linked + /// applications. + /// + /// - parameter cursor: At the first call to the linkedAppsListTeamLinkedApps the cursor shouldn't be passed. Then, + /// if the result of the call includes a cursor, the following requests should include the received cursors in order + /// to receive the next sub list of the team applications. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ListTeamAppsResult` object on success + /// or a `Team.ListTeamAppsError` object on failure. + @available(*, unavailable, message:"linkedAppsListTeamLinkedApps is deprecated. Use linkedAppsListMembersLinkedApps.") + @discardableResult open func linkedAppsListTeamLinkedApps(cursor: String? = nil) -> RpcRequest { + let route = Team.linkedAppsListTeamLinkedApps + let serverArgs = Team.ListTeamAppsArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Revoke a linked application of the team member. + /// + /// - parameter appId: The application's unique id. + /// - parameter teamMemberId: The unique id of the member owning the device. + /// - parameter keepAppFolder: Whether to keep the application dedicated folder (in case the application uses one). + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Team.RevokeLinkedAppError` object on failure. + @discardableResult open func linkedAppsRevokeLinkedApp(appId: String, teamMemberId: String, keepAppFolder: Bool = true) -> RpcRequest { + let route = Team.linkedAppsRevokeLinkedApp + let serverArgs = Team.RevokeLinkedApiAppArg(appId: appId, teamMemberId: teamMemberId, keepAppFolder: keepAppFolder) + return client.request(route, serverArgs: serverArgs) + } + + /// Revoke a list of linked applications of the team members. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Team.RevokeLinkedAppBatchResult` object on + /// success or a `Team.RevokeLinkedAppBatchError` object on failure. + @discardableResult open func linkedAppsRevokeLinkedAppBatch(revokeLinkedApp: Array) -> RpcRequest { + let route = Team.linkedAppsRevokeLinkedAppBatch + let serverArgs = Team.RevokeLinkedApiAppBatchArg(revokeLinkedApp: revokeLinkedApp) + return client.request(route, serverArgs: serverArgs) + } + + /// Add users to member space limits excluded users list. + /// + /// - parameter users: List of users to be added/removed. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ExcludedUsersUpdateResult` object on + /// success or a `Team.ExcludedUsersUpdateError` object on failure. + @discardableResult open func memberSpaceLimitsExcludedUsersAdd(users: Array? = nil) -> RpcRequest { + let route = Team.memberSpaceLimitsExcludedUsersAdd + let serverArgs = Team.ExcludedUsersUpdateArg(users: users) + return client.request(route, serverArgs: serverArgs) + } + + /// List member space limits excluded users. + /// + /// - parameter limit: Number of results to return per call. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ExcludedUsersListResult` object on + /// success or a `Team.ExcludedUsersListError` object on failure. + @discardableResult open func memberSpaceLimitsExcludedUsersList(limit: UInt32 = 1000) -> RpcRequest { + let route = Team.memberSpaceLimitsExcludedUsersList + let serverArgs = Team.ExcludedUsersListArg(limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Continue listing member space limits excluded users. + /// + /// - parameter cursor: Indicates from what point to get the next set of users. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ExcludedUsersListResult` object on + /// success or a `Team.ExcludedUsersListContinueError` object on failure. + @discardableResult open func memberSpaceLimitsExcludedUsersListContinue(cursor: String) -> RpcRequest { + let route = Team.memberSpaceLimitsExcludedUsersListContinue + let serverArgs = Team.ExcludedUsersListContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Remove users from member space limits excluded users list. + /// + /// - parameter users: List of users to be added/removed. + /// + /// - returns: Through the response callback, the caller will receive a `Team.ExcludedUsersUpdateResult` object on + /// success or a `Team.ExcludedUsersUpdateError` object on failure. + @discardableResult open func memberSpaceLimitsExcludedUsersRemove(users: Array? = nil) -> RpcRequest { + let route = Team.memberSpaceLimitsExcludedUsersRemove + let serverArgs = Team.ExcludedUsersUpdateArg(users: users) + return client.request(route, serverArgs: serverArgs) + } + + /// Get users custom quota. Returns none as the custom quota if none was set. A maximum of 1000 members can be + /// specified in a single call. + /// + /// - parameter users: List of users. + /// + /// - returns: Through the response callback, the caller will receive a `Array` object on + /// success or a `Team.CustomQuotaError` object on failure. + @discardableResult open func memberSpaceLimitsGetCustomQuota(users: Array) -> RpcRequest, Team.CustomQuotaErrorSerializer> { + let route = Team.memberSpaceLimitsGetCustomQuota + let serverArgs = Team.CustomQuotaUsersArg(users: users) + return client.request(route, serverArgs: serverArgs) + } + + /// Remove users custom quota. A maximum of 1000 members can be specified in a single call. + /// + /// - parameter users: List of users. + /// + /// - returns: Through the response callback, the caller will receive a `Array` + /// object on success or a `Team.CustomQuotaError` object on failure. + @discardableResult open func memberSpaceLimitsRemoveCustomQuota(users: Array) -> RpcRequest, Team.CustomQuotaErrorSerializer> { + let route = Team.memberSpaceLimitsRemoveCustomQuota + let serverArgs = Team.CustomQuotaUsersArg(users: users) + return client.request(route, serverArgs: serverArgs) + } + + /// Set users custom quota. Custom quota has to be at least 15GB. A maximum of 1000 members can be specified in a + /// single call. + /// + /// - parameter usersAndQuotas: List of users and their custom quotas. + /// + /// - returns: Through the response callback, the caller will receive a `Array` object on + /// success or a `Team.SetCustomQuotaError` object on failure. + @discardableResult open func memberSpaceLimitsSetCustomQuota(usersAndQuotas: Array) -> RpcRequest, Team.SetCustomQuotaErrorSerializer> { + let route = Team.memberSpaceLimitsSetCustomQuota + let serverArgs = Team.SetCustomQuotaArg(usersAndQuotas: usersAndQuotas) + return client.request(route, serverArgs: serverArgs) + } + + /// Adds members to a team. Permission : Team member management A maximum of 20 members can be specified in a single + /// call. If no Dropbox account exists with the email address specified, a new Dropbox account will be created with + /// the given email address, and that account will be invited to the team. If a personal Dropbox account exists with + /// the email address specified in the call, this call will create a placeholder Dropbox account for the user on the + /// team and send an email inviting the user to migrate their existing personal account onto the team. Team member + /// management apps are required to set an initial given_name and surname for a user to use in the team invitation + /// and for 'Perform as team member' actions taken on the user before they become 'active'. + /// + /// - parameter newMembers: Details of new members to be added to the team. + /// - parameter forceAsync: Whether to force the add to happen asynchronously. + /// + /// - returns: Through the response callback, the caller will receive a `Team.MembersAddLaunch` object on success + /// or a `Void` object on failure. + @discardableResult open func membersAdd(newMembers: Array, forceAsync: Bool = false) -> RpcRequest { + let route = Team.membersAdd + let serverArgs = Team.MembersAddArg(newMembers: newMembers, forceAsync: forceAsync) + return client.request(route, serverArgs: serverArgs) + } + + /// Once an async_job_id is returned from membersAdd , use this to poll the status of the asynchronous request. + /// Permission : Team member management. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Team.MembersAddJobStatus` object on + /// success or a `Async.PollError` object on failure. + @discardableResult open func membersAddJobStatusGet(asyncJobId: String) -> RpcRequest { + let route = Team.membersAddJobStatusGet + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns information about multiple team members. Permission : Team information This endpoint will return + /// idNotFound in MembersGetInfoItem, for IDs (or emails) that cannot be matched to a valid team member. + /// + /// - parameter members: List of team members. + /// + /// - returns: Through the response callback, the caller will receive a `Array` object on + /// success or a `Team.MembersGetInfoError` object on failure. + @discardableResult open func membersGetInfo(members: Array) -> RpcRequest, Team.MembersGetInfoErrorSerializer> { + let route = Team.membersGetInfo + let serverArgs = Team.MembersGetInfoArgs(members: members) + return client.request(route, serverArgs: serverArgs) + } + + /// Lists members of a team. Permission : Team information. + /// + /// - parameter limit: Number of results to return per call. + /// - parameter includeRemoved: Whether to return removed members. + /// + /// - returns: Through the response callback, the caller will receive a `Team.MembersListResult` object on success + /// or a `Team.MembersListError` object on failure. + @discardableResult open func membersList(limit: UInt32 = 1000, includeRemoved: Bool = false) -> RpcRequest { + let route = Team.membersList + let serverArgs = Team.MembersListArg(limit: limit, includeRemoved: includeRemoved) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from membersList, use this to paginate through all team members. Permission : + /// Team information. + /// + /// - parameter cursor: Indicates from what point to get the next set of members. + /// + /// - returns: Through the response callback, the caller will receive a `Team.MembersListResult` object on success + /// or a `Team.MembersListContinueError` object on failure. + @discardableResult open func membersListContinue(cursor: String) -> RpcRequest { + let route = Team.membersListContinue + let serverArgs = Team.MembersListContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Moves removed member's files to a different member. This endpoint initiates an asynchronous job. To obtain the + /// final result of the job, the client should periodically poll membersMoveFormerMemberFilesJobStatusCheck. + /// Permission : Team member management. + /// + /// - parameter transferDestId: Files from the deleted member account will be transferred to this user. + /// - parameter transferAdminId: Errors during the transfer process will be sent via email to this user. + /// + /// - returns: Through the response callback, the caller will receive a `Async.LaunchEmptyResult` object on success + /// or a `Team.MembersTransferFormerMembersFilesError` object on failure. + @discardableResult open func membersMoveFormerMemberFiles(user: Team.UserSelectorArg, transferDestId: Team.UserSelectorArg, transferAdminId: Team.UserSelectorArg) -> RpcRequest { + let route = Team.membersMoveFormerMemberFiles + let serverArgs = Team.MembersDataTransferArg(user: user, transferDestId: transferDestId, transferAdminId: transferAdminId) + return client.request(route, serverArgs: serverArgs) + } + + /// Once an async_job_id is returned from membersMoveFormerMemberFiles , use this to poll the status of the + /// asynchronous request. Permission : Team member management. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Async.PollEmptyResult` object on success + /// or a `Async.PollError` object on failure. + @discardableResult open func membersMoveFormerMemberFilesJobStatusCheck(asyncJobId: String) -> RpcRequest { + let route = Team.membersMoveFormerMemberFilesJobStatusCheck + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Recover a deleted member. Permission : Team member management Exactly one of team_member_id, email, or + /// external_id must be provided to identify the user account. + /// + /// - parameter user: Identity of user to recover. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Team.MembersRecoverError` object on failure. + @discardableResult open func membersRecover(user: Team.UserSelectorArg) -> RpcRequest { + let route = Team.membersRecover + let serverArgs = Team.MembersRecoverArg(user: user) + return client.request(route, serverArgs: serverArgs) + } + + /// Removes a member from a team. Permission : Team member management Exactly one of team_member_id, email, or + /// external_id must be provided to identify the user account. Accounts can be recovered via membersRecover for a 7 + /// day period or until the account has been permanently deleted or transferred to another account (whichever comes + /// first). Calling membersAdd while a user is still recoverable on your team will return with userAlreadyOnTeam in + /// MemberAddResult. Accounts can have their files transferred via the admin console for a limited time, based on + /// the version history length associated with the team (120 days for most teams). This endpoint may initiate an + /// asynchronous job. To obtain the final result of the job, the client should periodically poll + /// membersRemoveJobStatusGet. + /// + /// - parameter transferDestId: If provided, files from the deleted member account will be transferred to this user. + /// - parameter transferAdminId: If provided, errors during the transfer process will be sent via email to this + /// user. If the transfer_dest_id argument was provided, then this argument must be provided as well. + /// - parameter keepAccount: Downgrade the member to a Basic account. The user will retain the email address + /// associated with their Dropbox account and data in their account that is not restricted to team members. In + /// order to keep the account the argument wipe_data should be set to False. + /// + /// - returns: Through the response callback, the caller will receive a `Async.LaunchEmptyResult` object on success + /// or a `Team.MembersRemoveError` object on failure. + @discardableResult open func membersRemove(user: Team.UserSelectorArg, wipeData: Bool = true, transferDestId: Team.UserSelectorArg? = nil, transferAdminId: Team.UserSelectorArg? = nil, keepAccount: Bool = false) -> RpcRequest { + let route = Team.membersRemove + let serverArgs = Team.MembersRemoveArg(user: user, wipeData: wipeData, transferDestId: transferDestId, transferAdminId: transferAdminId, keepAccount: keepAccount) + return client.request(route, serverArgs: serverArgs) + } + + /// Once an async_job_id is returned from membersRemove , use this to poll the status of the asynchronous request. + /// Permission : Team member management. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Async.PollEmptyResult` object on success + /// or a `Async.PollError` object on failure. + @discardableResult open func membersRemoveJobStatusGet(asyncJobId: String) -> RpcRequest { + let route = Team.membersRemoveJobStatusGet + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Sends welcome email to pending team member. Permission : Team member management Exactly one of team_member_id, + /// email, or external_id must be provided to identify the user account. No-op if team member is not pending. + /// + /// - parameter userSelectorArg: Argument for selecting a single user, either by team_member_id, external_id or + /// email. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Team.MembersSendWelcomeError` object on failure. + @discardableResult open func membersSendWelcomeEmail(userSelectorArg: Team.UserSelectorArg) -> RpcRequest { + let route = Team.membersSendWelcomeEmail + let serverArgs = userSelectorArg + return client.request(route, serverArgs: serverArgs) + } + + /// Updates a team member's permissions. Permission : Team member management. + /// + /// - parameter user: Identity of user whose role will be set. + /// - parameter newRole: The new role of the member. + /// + /// - returns: Through the response callback, the caller will receive a `Team.MembersSetPermissionsResult` object + /// on success or a `Team.MembersSetPermissionsError` object on failure. + @discardableResult open func membersSetAdminPermissions(user: Team.UserSelectorArg, newRole: Team.AdminTier) -> RpcRequest { + let route = Team.membersSetAdminPermissions + let serverArgs = Team.MembersSetPermissionsArg(user: user, newRole: newRole) + return client.request(route, serverArgs: serverArgs) + } + + /// Updates a team member's profile. Permission : Team member management. + /// + /// - parameter user: Identity of user whose profile will be set. + /// - parameter newEmail: New email for member. + /// - parameter newExternalId: New external ID for member. + /// - parameter newGivenName: New given name for member. + /// - parameter newSurname: New surname for member. + /// - parameter newPersistentId: New persistent ID. This field only available to teams using persistent ID SAML + /// configuration. + /// - parameter newIsDirectoryRestricted: New value for whether the user is a directory restricted user. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamMemberInfo` object on success or + /// a `Team.MembersSetProfileError` object on failure. + @discardableResult open func membersSetProfile(user: Team.UserSelectorArg, newEmail: String? = nil, newExternalId: String? = nil, newGivenName: String? = nil, newSurname: String? = nil, newPersistentId: String? = nil, newIsDirectoryRestricted: Bool? = nil) -> RpcRequest { + let route = Team.membersSetProfile + let serverArgs = Team.MembersSetProfileArg(user: user, newEmail: newEmail, newExternalId: newExternalId, newGivenName: newGivenName, newSurname: newSurname, newPersistentId: newPersistentId, newIsDirectoryRestricted: newIsDirectoryRestricted) + return client.request(route, serverArgs: serverArgs) + } + + /// Suspend a member from a team. Permission : Team member management Exactly one of team_member_id, email, or + /// external_id must be provided to identify the user account. + /// + /// - parameter wipeData: If provided, controls if the user's data will be deleted on their linked devices. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Team.MembersSuspendError` object on failure. + @discardableResult open func membersSuspend(user: Team.UserSelectorArg, wipeData: Bool = true) -> RpcRequest { + let route = Team.membersSuspend + let serverArgs = Team.MembersDeactivateArg(user: user, wipeData: wipeData) + return client.request(route, serverArgs: serverArgs) + } + + /// Unsuspend a member from a team. Permission : Team member management Exactly one of team_member_id, email, or + /// external_id must be provided to identify the user account. + /// + /// - parameter user: Identity of user to unsuspend. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Team.MembersUnsuspendError` object on failure. + @discardableResult open func membersUnsuspend(user: Team.UserSelectorArg) -> RpcRequest { + let route = Team.membersUnsuspend + let serverArgs = Team.MembersUnsuspendArg(user: user) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns a list of all team-accessible namespaces. This list includes team folders, shared folders containing + /// team members, team members' home namespaces, and team members' app folders. Home namespaces and app folders are + /// always owned by this team or members of the team, but shared folders may be owned by other users or other teams. + /// Duplicates may occur in the list. + /// + /// - parameter limit: Specifying a value here has no effect. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamNamespacesListResult` object on + /// success or a `Team.TeamNamespacesListError` object on failure. + @discardableResult open func namespacesList(limit: UInt32 = 1000) -> RpcRequest { + let route = Team.namespacesList + let serverArgs = Team.TeamNamespacesListArg(limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from namespacesList, use this to paginate through all team-accessible + /// namespaces. Duplicates may occur in the list. + /// + /// - parameter cursor: Indicates from what point to get the next set of team-accessible namespaces. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamNamespacesListResult` object on + /// success or a `Team.TeamNamespacesListContinueError` object on failure. + @discardableResult open func namespacesListContinue(cursor: String) -> RpcRequest { + let route = Team.namespacesListContinue + let serverArgs = Team.TeamNamespacesListContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Permission : Team member file access. + /// + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.AddTemplateResult` object + /// on success or a `FileProperties.ModifyTemplateError` object on failure. + @available(*, unavailable, message:"propertiesTemplateAdd is deprecated.") + @discardableResult open func propertiesTemplateAdd(name: String, description_: String, fields: Array) -> RpcRequest { + let route = Team.propertiesTemplateAdd + let serverArgs = FileProperties.AddTemplateArg(name: name, description_: description_, fields: fields) + return client.request(route, serverArgs: serverArgs) + } + + /// Permission : Team member file access. + /// + /// - parameter templateId: An identifier for template added by route See templatesAddForUser or + /// templatesAddForTeam. + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.GetTemplateResult` object + /// on success or a `FileProperties.TemplateError` object on failure. + @available(*, unavailable, message:"propertiesTemplateGet is deprecated.") + @discardableResult open func propertiesTemplateGet(templateId: String) -> RpcRequest { + let route = Team.propertiesTemplateGet + let serverArgs = FileProperties.GetTemplateArg(templateId: templateId) + return client.request(route, serverArgs: serverArgs) + } + + /// Permission : Team member file access. + /// + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.ListTemplateResult` object + /// on success or a `FileProperties.TemplateError` object on failure. + @available(*, unavailable, message:"propertiesTemplateList is deprecated.") + @discardableResult open func propertiesTemplateList() -> RpcRequest { + let route = Team.propertiesTemplateList + return client.request(route) + } + + /// Permission : Team member file access. + /// + /// - parameter templateId: An identifier for template added by See templatesAddForUser or templatesAddForTeam. + /// - parameter name: A display name for the template. template names can be up to 256 bytes. + /// - parameter description_: Description for the new template. Template descriptions can be up to 1024 bytes. + /// - parameter addFields: Property field templates to be added to the group template. There can be up to 32 + /// properties in a single template. + /// + /// - returns: Through the response callback, the caller will receive a `FileProperties.UpdateTemplateResult` + /// object on success or a `FileProperties.ModifyTemplateError` object on failure. + @available(*, unavailable, message:"propertiesTemplateUpdate is deprecated.") + @discardableResult open func propertiesTemplateUpdate(templateId: String, name: String? = nil, description_: String? = nil, addFields: Array? = nil) -> RpcRequest { + let route = Team.propertiesTemplateUpdate + let serverArgs = FileProperties.UpdateTemplateArg(templateId: templateId, name: name, description_: description_, addFields: addFields) + return client.request(route, serverArgs: serverArgs) + } + + /// Retrieves reporting data about a team's user activity. + /// + /// - parameter startDate: Optional starting date (inclusive). + /// - parameter endDate: Optional ending date (exclusive). + /// + /// - returns: Through the response callback, the caller will receive a `Team.GetActivityReport` object on success + /// or a `Team.DateRangeError` object on failure. + @discardableResult open func reportsGetActivity(startDate: Date? = nil, endDate: Date? = nil) -> RpcRequest { + let route = Team.reportsGetActivity + let serverArgs = Team.DateRange(startDate: startDate, endDate: endDate) + return client.request(route, serverArgs: serverArgs) + } + + /// Retrieves reporting data about a team's linked devices. + /// + /// - parameter startDate: Optional starting date (inclusive). + /// - parameter endDate: Optional ending date (exclusive). + /// + /// - returns: Through the response callback, the caller will receive a `Team.GetDevicesReport` object on success + /// or a `Team.DateRangeError` object on failure. + @discardableResult open func reportsGetDevices(startDate: Date? = nil, endDate: Date? = nil) -> RpcRequest { + let route = Team.reportsGetDevices + let serverArgs = Team.DateRange(startDate: startDate, endDate: endDate) + return client.request(route, serverArgs: serverArgs) + } + + /// Retrieves reporting data about a team's membership. + /// + /// - parameter startDate: Optional starting date (inclusive). + /// - parameter endDate: Optional ending date (exclusive). + /// + /// - returns: Through the response callback, the caller will receive a `Team.GetMembershipReport` object on + /// success or a `Team.DateRangeError` object on failure. + @discardableResult open func reportsGetMembership(startDate: Date? = nil, endDate: Date? = nil) -> RpcRequest { + let route = Team.reportsGetMembership + let serverArgs = Team.DateRange(startDate: startDate, endDate: endDate) + return client.request(route, serverArgs: serverArgs) + } + + /// Retrieves reporting data about a team's storage usage. + /// + /// - parameter startDate: Optional starting date (inclusive). + /// - parameter endDate: Optional ending date (exclusive). + /// + /// - returns: Through the response callback, the caller will receive a `Team.GetStorageReport` object on success + /// or a `Team.DateRangeError` object on failure. + @discardableResult open func reportsGetStorage(startDate: Date? = nil, endDate: Date? = nil) -> RpcRequest { + let route = Team.reportsGetStorage + let serverArgs = Team.DateRange(startDate: startDate, endDate: endDate) + return client.request(route, serverArgs: serverArgs) + } + + /// Sets an archived team folder's status to active. Permission : Team member file access. + /// + /// - parameter teamFolderId: The ID of the team folder. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamFolderMetadata` object on success + /// or a `Team.TeamFolderActivateError` object on failure. + @discardableResult open func teamFolderActivate(teamFolderId: String) -> RpcRequest { + let route = Team.teamFolderActivate + let serverArgs = Team.TeamFolderIdArg(teamFolderId: teamFolderId) + return client.request(route, serverArgs: serverArgs) + } + + /// Sets an active team folder's status to archived and removes all folder and file members. Permission : Team + /// member file access. + /// + /// - parameter forceAsyncOff: Whether to force the archive to happen synchronously. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamFolderArchiveLaunch` object on + /// success or a `Team.TeamFolderArchiveError` object on failure. + @discardableResult open func teamFolderArchive(teamFolderId: String, forceAsyncOff: Bool = false) -> RpcRequest { + let route = Team.teamFolderArchive + let serverArgs = Team.TeamFolderArchiveArg(teamFolderId: teamFolderId, forceAsyncOff: forceAsyncOff) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the status of an asynchronous job for archiving a team folder. Permission : Team member file access. + /// + /// - parameter asyncJobId: Id of the asynchronous job. This is the value of a response returned from the method + /// that launched the job. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamFolderArchiveJobStatus` object on + /// success or a `Async.PollError` object on failure. + @discardableResult open func teamFolderArchiveCheck(asyncJobId: String) -> RpcRequest { + let route = Team.teamFolderArchiveCheck + let serverArgs = Async.PollArg(asyncJobId: asyncJobId) + return client.request(route, serverArgs: serverArgs) + } + + /// Creates a new, active, team folder with no members. Permission : Team member file access. + /// + /// - parameter name: Name for the new team folder. + /// - parameter syncSetting: The sync setting to apply to this team folder. Only permitted if the team has team + /// selective sync enabled. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamFolderMetadata` object on success + /// or a `Team.TeamFolderCreateError` object on failure. + @discardableResult open func teamFolderCreate(name: String, syncSetting: Files.SyncSettingArg? = nil) -> RpcRequest { + let route = Team.teamFolderCreate + let serverArgs = Team.TeamFolderCreateArg(name: name, syncSetting: syncSetting) + return client.request(route, serverArgs: serverArgs) + } + + /// Retrieves metadata for team folders. Permission : Team member file access. + /// + /// - parameter teamFolderIds: The list of team folder IDs. + /// + /// - returns: Through the response callback, the caller will receive a `Array` object + /// on success or a `Void` object on failure. + @discardableResult open func teamFolderGetInfo(teamFolderIds: Array) -> RpcRequest, VoidSerializer> { + let route = Team.teamFolderGetInfo + let serverArgs = Team.TeamFolderIdListArg(teamFolderIds: teamFolderIds) + return client.request(route, serverArgs: serverArgs) + } + + /// Lists all team folders. Permission : Team member file access. + /// + /// - parameter limit: The maximum number of results to return per request. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamFolderListResult` object on + /// success or a `Team.TeamFolderListError` object on failure. + @discardableResult open func teamFolderList(limit: UInt32 = 1000) -> RpcRequest { + let route = Team.teamFolderList + let serverArgs = Team.TeamFolderListArg(limit: limit) + return client.request(route, serverArgs: serverArgs) + } + + /// Once a cursor has been retrieved from teamFolderList, use this to paginate through all team folders. Permission + /// : Team member file access. + /// + /// - parameter cursor: Indicates from what point to get the next set of team folders. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamFolderListResult` object on + /// success or a `Team.TeamFolderListContinueError` object on failure. + @discardableResult open func teamFolderListContinue(cursor: String) -> RpcRequest { + let route = Team.teamFolderListContinue + let serverArgs = Team.TeamFolderListContinueArg(cursor: cursor) + return client.request(route, serverArgs: serverArgs) + } + + /// Permanently deletes an archived team folder. Permission : Team member file access. + /// + /// - parameter teamFolderId: The ID of the team folder. + /// + /// - returns: Through the response callback, the caller will receive a `Void` object on success or a + /// `Team.TeamFolderPermanentlyDeleteError` object on failure. + @discardableResult open func teamFolderPermanentlyDelete(teamFolderId: String) -> RpcRequest { + let route = Team.teamFolderPermanentlyDelete + let serverArgs = Team.TeamFolderIdArg(teamFolderId: teamFolderId) + return client.request(route, serverArgs: serverArgs) + } + + /// Changes an active team folder's name. Permission : Team member file access. + /// + /// - parameter name: New team folder name. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamFolderMetadata` object on success + /// or a `Team.TeamFolderRenameError` object on failure. + @discardableResult open func teamFolderRename(teamFolderId: String, name: String) -> RpcRequest { + let route = Team.teamFolderRename + let serverArgs = Team.TeamFolderRenameArg(teamFolderId: teamFolderId, name: name) + return client.request(route, serverArgs: serverArgs) + } + + /// Updates the sync settings on a team folder or its contents. Use of this endpoint requires that the team has + /// team selective sync enabled. + /// + /// - parameter syncSetting: Sync setting to apply to the team folder itself. Only meaningful if the team folder is + /// not a shared team root. + /// - parameter contentSyncSettings: Sync settings to apply to contents of this team folder. + /// + /// - returns: Through the response callback, the caller will receive a `Team.TeamFolderMetadata` object on success + /// or a `Team.TeamFolderUpdateSyncSettingsError` object on failure. + @discardableResult open func teamFolderUpdateSyncSettings(teamFolderId: String, syncSetting: Files.SyncSettingArg? = nil, contentSyncSettings: Array? = nil) -> RpcRequest { + let route = Team.teamFolderUpdateSyncSettings + let serverArgs = Team.TeamFolderUpdateSyncSettingsArg(teamFolderId: teamFolderId, syncSetting: syncSetting, contentSyncSettings: contentSyncSettings) + return client.request(route, serverArgs: serverArgs) + } + + /// Returns the member profile of the admin who generated the team access token used to make the call. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Team.TokenGetAuthenticatedAdminResult` + /// object on success or a `Team.TokenGetAuthenticatedAdminError` object on failure. + @discardableResult open func tokenGetAuthenticatedAdmin() -> RpcRequest { + let route = Team.tokenGetAuthenticatedAdmin + return client.request(route) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Users.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Users.swift new file mode 100644 index 0000000..a1e0792 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/Users.swift @@ -0,0 +1,704 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the users namespace +open class Users { + /// The amount of detail revealed about an account depends on the user being queried and the user making the query. + open class Account: CustomStringConvertible { + /// The user's unique Dropbox ID. + public let accountId: String + /// Details of a user's name. + public let name: Users.Name + /// The user's e-mail address. Do not rely on this without checking the emailVerified field. Even then, it's + /// possible that the user has since lost access to their e-mail. + public let email: String + /// Whether the user has verified their e-mail address. + public let emailVerified: Bool + /// URL for the photo representing the user, if one is set. + public let profilePhotoUrl: String? + /// Whether the user has been disabled. + public let disabled: Bool + public init(accountId: String, name: Users.Name, email: String, emailVerified: Bool, disabled: Bool, profilePhotoUrl: String? = nil) { + stringValidator(minLength: 40, maxLength: 40)(accountId) + self.accountId = accountId + self.name = name + stringValidator()(email) + self.email = email + self.emailVerified = emailVerified + nullableValidator(stringValidator())(profilePhotoUrl) + self.profilePhotoUrl = profilePhotoUrl + self.disabled = disabled + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountSerializer().serialize(self)))" + } + } + open class AccountSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Account) -> JSON { + let output = [ + "account_id": Serialization._StringSerializer.serialize(value.accountId), + "name": Users.NameSerializer().serialize(value.name), + "email": Serialization._StringSerializer.serialize(value.email), + "email_verified": Serialization._BoolSerializer.serialize(value.emailVerified), + "disabled": Serialization._BoolSerializer.serialize(value.disabled), + "profile_photo_url": NullableSerializer(Serialization._StringSerializer).serialize(value.profilePhotoUrl), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> Account { + switch json { + case .dictionary(let dict): + let accountId = Serialization._StringSerializer.deserialize(dict["account_id"] ?? .null) + let name = Users.NameSerializer().deserialize(dict["name"] ?? .null) + let email = Serialization._StringSerializer.deserialize(dict["email"] ?? .null) + let emailVerified = Serialization._BoolSerializer.deserialize(dict["email_verified"] ?? .null) + let disabled = Serialization._BoolSerializer.deserialize(dict["disabled"] ?? .null) + let profilePhotoUrl = NullableSerializer(Serialization._StringSerializer).deserialize(dict["profile_photo_url"] ?? .null) + return Account(accountId: accountId, name: name, email: email, emailVerified: emailVerified, disabled: disabled, profilePhotoUrl: profilePhotoUrl) + default: + fatalError("Type error deserializing") + } + } + } + + /// Basic information about any account. + open class BasicAccount: Users.Account { + /// Whether this user is a teammate of the current user. If this account is the current user's account, then + /// this will be true. + public let isTeammate: Bool + /// The user's unique team member id. This field will only be present if the user is part of a team and + /// isTeammate is true. + public let teamMemberId: String? + public init(accountId: String, name: Users.Name, email: String, emailVerified: Bool, disabled: Bool, isTeammate: Bool, profilePhotoUrl: String? = nil, teamMemberId: String? = nil) { + self.isTeammate = isTeammate + nullableValidator(stringValidator())(teamMemberId) + self.teamMemberId = teamMemberId + super.init(accountId: accountId, name: name, email: email, emailVerified: emailVerified, disabled: disabled, profilePhotoUrl: profilePhotoUrl) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(BasicAccountSerializer().serialize(self)))" + } + } + open class BasicAccountSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: BasicAccount) -> JSON { + let output = [ + "account_id": Serialization._StringSerializer.serialize(value.accountId), + "name": Users.NameSerializer().serialize(value.name), + "email": Serialization._StringSerializer.serialize(value.email), + "email_verified": Serialization._BoolSerializer.serialize(value.emailVerified), + "disabled": Serialization._BoolSerializer.serialize(value.disabled), + "is_teammate": Serialization._BoolSerializer.serialize(value.isTeammate), + "profile_photo_url": NullableSerializer(Serialization._StringSerializer).serialize(value.profilePhotoUrl), + "team_member_id": NullableSerializer(Serialization._StringSerializer).serialize(value.teamMemberId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> BasicAccount { + switch json { + case .dictionary(let dict): + let accountId = Serialization._StringSerializer.deserialize(dict["account_id"] ?? .null) + let name = Users.NameSerializer().deserialize(dict["name"] ?? .null) + let email = Serialization._StringSerializer.deserialize(dict["email"] ?? .null) + let emailVerified = Serialization._BoolSerializer.deserialize(dict["email_verified"] ?? .null) + let disabled = Serialization._BoolSerializer.deserialize(dict["disabled"] ?? .null) + let isTeammate = Serialization._BoolSerializer.deserialize(dict["is_teammate"] ?? .null) + let profilePhotoUrl = NullableSerializer(Serialization._StringSerializer).deserialize(dict["profile_photo_url"] ?? .null) + let teamMemberId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["team_member_id"] ?? .null) + return BasicAccount(accountId: accountId, name: name, email: email, emailVerified: emailVerified, disabled: disabled, isTeammate: isTeammate, profilePhotoUrl: profilePhotoUrl, teamMemberId: teamMemberId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Detailed information about the current user's account. + open class FullAccount: Users.Account { + /// The user's two-letter country code, if available. Country codes are based on ISO 3166-1 + /// http://en.wikipedia.org/wiki/ISO_3166-1. + public let country: String? + /// The language that the user specified. Locale tags will be IETF language tags + /// http://en.wikipedia.org/wiki/IETF_language_tag. + public let locale: String + /// The user's referral link https://www.dropbox.com/referrals. + public let referralLink: String + /// If this account is a member of a team, information about that team. + public let team: Users.FullTeam? + /// This account's unique team member id. This field will only be present if team is present. + public let teamMemberId: String? + /// Whether the user has a personal and work account. If the current account is personal, then team will always + /// be null, but isPaired will indicate if a work account is linked. + public let isPaired: Bool + /// What type of account this user has. + public let accountType: UsersCommon.AccountType + /// The root info for this account. + public let rootInfo: Common.RootInfo + public init(accountId: String, name: Users.Name, email: String, emailVerified: Bool, disabled: Bool, locale: String, referralLink: String, isPaired: Bool, accountType: UsersCommon.AccountType, rootInfo: Common.RootInfo, profilePhotoUrl: String? = nil, country: String? = nil, team: Users.FullTeam? = nil, teamMemberId: String? = nil) { + nullableValidator(stringValidator(minLength: 2, maxLength: 2))(country) + self.country = country + stringValidator(minLength: 2)(locale) + self.locale = locale + stringValidator()(referralLink) + self.referralLink = referralLink + self.team = team + nullableValidator(stringValidator())(teamMemberId) + self.teamMemberId = teamMemberId + self.isPaired = isPaired + self.accountType = accountType + self.rootInfo = rootInfo + super.init(accountId: accountId, name: name, email: email, emailVerified: emailVerified, disabled: disabled, profilePhotoUrl: profilePhotoUrl) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FullAccountSerializer().serialize(self)))" + } + } + open class FullAccountSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FullAccount) -> JSON { + let output = [ + "account_id": Serialization._StringSerializer.serialize(value.accountId), + "name": Users.NameSerializer().serialize(value.name), + "email": Serialization._StringSerializer.serialize(value.email), + "email_verified": Serialization._BoolSerializer.serialize(value.emailVerified), + "disabled": Serialization._BoolSerializer.serialize(value.disabled), + "locale": Serialization._StringSerializer.serialize(value.locale), + "referral_link": Serialization._StringSerializer.serialize(value.referralLink), + "is_paired": Serialization._BoolSerializer.serialize(value.isPaired), + "account_type": UsersCommon.AccountTypeSerializer().serialize(value.accountType), + "root_info": Common.RootInfoSerializer().serialize(value.rootInfo), + "profile_photo_url": NullableSerializer(Serialization._StringSerializer).serialize(value.profilePhotoUrl), + "country": NullableSerializer(Serialization._StringSerializer).serialize(value.country), + "team": NullableSerializer(Users.FullTeamSerializer()).serialize(value.team), + "team_member_id": NullableSerializer(Serialization._StringSerializer).serialize(value.teamMemberId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FullAccount { + switch json { + case .dictionary(let dict): + let accountId = Serialization._StringSerializer.deserialize(dict["account_id"] ?? .null) + let name = Users.NameSerializer().deserialize(dict["name"] ?? .null) + let email = Serialization._StringSerializer.deserialize(dict["email"] ?? .null) + let emailVerified = Serialization._BoolSerializer.deserialize(dict["email_verified"] ?? .null) + let disabled = Serialization._BoolSerializer.deserialize(dict["disabled"] ?? .null) + let locale = Serialization._StringSerializer.deserialize(dict["locale"] ?? .null) + let referralLink = Serialization._StringSerializer.deserialize(dict["referral_link"] ?? .null) + let isPaired = Serialization._BoolSerializer.deserialize(dict["is_paired"] ?? .null) + let accountType = UsersCommon.AccountTypeSerializer().deserialize(dict["account_type"] ?? .null) + let rootInfo = Common.RootInfoSerializer().deserialize(dict["root_info"] ?? .null) + let profilePhotoUrl = NullableSerializer(Serialization._StringSerializer).deserialize(dict["profile_photo_url"] ?? .null) + let country = NullableSerializer(Serialization._StringSerializer).deserialize(dict["country"] ?? .null) + let team = NullableSerializer(Users.FullTeamSerializer()).deserialize(dict["team"] ?? .null) + let teamMemberId = NullableSerializer(Serialization._StringSerializer).deserialize(dict["team_member_id"] ?? .null) + return FullAccount(accountId: accountId, name: name, email: email, emailVerified: emailVerified, disabled: disabled, locale: locale, referralLink: referralLink, isPaired: isPaired, accountType: accountType, rootInfo: rootInfo, profilePhotoUrl: profilePhotoUrl, country: country, team: team, teamMemberId: teamMemberId) + default: + fatalError("Type error deserializing") + } + } + } + + /// Information about a team. + open class Team: CustomStringConvertible { + /// The team's unique ID. + public let id: String + /// The name of the team. + public let name: String + public init(id: String, name: String) { + stringValidator()(id) + self.id = id + stringValidator()(name) + self.name = name + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamSerializer().serialize(self)))" + } + } + open class TeamSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Team) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + "name": Serialization._StringSerializer.serialize(value.name), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> Team { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + return Team(id: id, name: name) + default: + fatalError("Type error deserializing") + } + } + } + + /// Detailed information about a team. + open class FullTeam: Users.Team { + /// Team policies governing sharing. + public let sharingPolicies: TeamPolicies.TeamSharingPolicies + /// Team policy governing the use of the Office Add-In. + public let officeAddinPolicy: TeamPolicies.OfficeAddInPolicy + public init(id: String, name: String, sharingPolicies: TeamPolicies.TeamSharingPolicies, officeAddinPolicy: TeamPolicies.OfficeAddInPolicy) { + self.sharingPolicies = sharingPolicies + self.officeAddinPolicy = officeAddinPolicy + super.init(id: id, name: name) + } + open override var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(FullTeamSerializer().serialize(self)))" + } + } + open class FullTeamSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: FullTeam) -> JSON { + let output = [ + "id": Serialization._StringSerializer.serialize(value.id), + "name": Serialization._StringSerializer.serialize(value.name), + "sharing_policies": TeamPolicies.TeamSharingPoliciesSerializer().serialize(value.sharingPolicies), + "office_addin_policy": TeamPolicies.OfficeAddInPolicySerializer().serialize(value.officeAddinPolicy), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> FullTeam { + switch json { + case .dictionary(let dict): + let id = Serialization._StringSerializer.deserialize(dict["id"] ?? .null) + let name = Serialization._StringSerializer.deserialize(dict["name"] ?? .null) + let sharingPolicies = TeamPolicies.TeamSharingPoliciesSerializer().deserialize(dict["sharing_policies"] ?? .null) + let officeAddinPolicy = TeamPolicies.OfficeAddInPolicySerializer().deserialize(dict["office_addin_policy"] ?? .null) + return FullTeam(id: id, name: name, sharingPolicies: sharingPolicies, officeAddinPolicy: officeAddinPolicy) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetAccountArg struct + open class GetAccountArg: CustomStringConvertible { + /// A user's account identifier. + public let accountId: String + public init(accountId: String) { + stringValidator(minLength: 40, maxLength: 40)(accountId) + self.accountId = accountId + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetAccountArgSerializer().serialize(self)))" + } + } + open class GetAccountArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetAccountArg) -> JSON { + let output = [ + "account_id": Serialization._StringSerializer.serialize(value.accountId), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetAccountArg { + switch json { + case .dictionary(let dict): + let accountId = Serialization._StringSerializer.deserialize(dict["account_id"] ?? .null) + return GetAccountArg(accountId: accountId) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetAccountBatchArg struct + open class GetAccountBatchArg: CustomStringConvertible { + /// List of user account identifiers. Should not contain any duplicate account IDs. + public let accountIds: Array + public init(accountIds: Array) { + arrayValidator(minItems: 1, itemValidator: stringValidator(minLength: 40, maxLength: 40))(accountIds) + self.accountIds = accountIds + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetAccountBatchArgSerializer().serialize(self)))" + } + } + open class GetAccountBatchArgSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetAccountBatchArg) -> JSON { + let output = [ + "account_ids": ArraySerializer(Serialization._StringSerializer).serialize(value.accountIds), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> GetAccountBatchArg { + switch json { + case .dictionary(let dict): + let accountIds = ArraySerializer(Serialization._StringSerializer).deserialize(dict["account_ids"] ?? .null) + return GetAccountBatchArg(accountIds: accountIds) + default: + fatalError("Type error deserializing") + } + } + } + + /// The GetAccountBatchError union + public enum GetAccountBatchError: CustomStringConvertible { + /// The value is an account ID specified in accountIds in GetAccountBatchArg that does not exist. + case noAccount(String) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetAccountBatchErrorSerializer().serialize(self)))" + } + } + open class GetAccountBatchErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetAccountBatchError) -> JSON { + switch value { + case .noAccount(let arg): + var d = ["no_account": Serialization._StringSerializer.serialize(arg)] + d[".tag"] = .str("no_account") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetAccountBatchError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "no_account": + let v = Serialization._StringSerializer.deserialize(d["no_account"] ?? .null) + return GetAccountBatchError.noAccount(v) + case "other": + return GetAccountBatchError.other + default: + return GetAccountBatchError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The GetAccountError union + public enum GetAccountError: CustomStringConvertible { + /// The specified accountId in GetAccountArg does not exist. + case noAccount + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(GetAccountErrorSerializer().serialize(self)))" + } + } + open class GetAccountErrorSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: GetAccountError) -> JSON { + switch value { + case .noAccount: + var d = [String: JSON]() + d[".tag"] = .str("no_account") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> GetAccountError { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "no_account": + return GetAccountError.noAccount + case "other": + return GetAccountError.other + default: + return GetAccountError.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// The IndividualSpaceAllocation struct + open class IndividualSpaceAllocation: CustomStringConvertible { + /// The total space allocated to the user's account (bytes). + public let allocated: UInt64 + public init(allocated: UInt64) { + comparableValidator()(allocated) + self.allocated = allocated + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(IndividualSpaceAllocationSerializer().serialize(self)))" + } + } + open class IndividualSpaceAllocationSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: IndividualSpaceAllocation) -> JSON { + let output = [ + "allocated": Serialization._UInt64Serializer.serialize(value.allocated), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> IndividualSpaceAllocation { + switch json { + case .dictionary(let dict): + let allocated = Serialization._UInt64Serializer.deserialize(dict["allocated"] ?? .null) + return IndividualSpaceAllocation(allocated: allocated) + default: + fatalError("Type error deserializing") + } + } + } + + /// Representations for a person's name to assist with internationalization. + open class Name: CustomStringConvertible { + /// Also known as a first name. + public let givenName: String + /// Also known as a last name or family name. + public let surname: String + /// Locale-dependent name. In the US, a person's familiar name is their givenName, but elsewhere, it could be + /// any combination of a person's givenName and surname. + public let familiarName: String + /// A name that can be used directly to represent the name of a user's Dropbox account. + public let displayName: String + /// An abbreviated form of the person's name. Their initials in most locales. + public let abbreviatedName: String + public init(givenName: String, surname: String, familiarName: String, displayName: String, abbreviatedName: String) { + stringValidator()(givenName) + self.givenName = givenName + stringValidator()(surname) + self.surname = surname + stringValidator()(familiarName) + self.familiarName = familiarName + stringValidator()(displayName) + self.displayName = displayName + stringValidator()(abbreviatedName) + self.abbreviatedName = abbreviatedName + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(NameSerializer().serialize(self)))" + } + } + open class NameSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: Name) -> JSON { + let output = [ + "given_name": Serialization._StringSerializer.serialize(value.givenName), + "surname": Serialization._StringSerializer.serialize(value.surname), + "familiar_name": Serialization._StringSerializer.serialize(value.familiarName), + "display_name": Serialization._StringSerializer.serialize(value.displayName), + "abbreviated_name": Serialization._StringSerializer.serialize(value.abbreviatedName), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> Name { + switch json { + case .dictionary(let dict): + let givenName = Serialization._StringSerializer.deserialize(dict["given_name"] ?? .null) + let surname = Serialization._StringSerializer.deserialize(dict["surname"] ?? .null) + let familiarName = Serialization._StringSerializer.deserialize(dict["familiar_name"] ?? .null) + let displayName = Serialization._StringSerializer.deserialize(dict["display_name"] ?? .null) + let abbreviatedName = Serialization._StringSerializer.deserialize(dict["abbreviated_name"] ?? .null) + return Name(givenName: givenName, surname: surname, familiarName: familiarName, displayName: displayName, abbreviatedName: abbreviatedName) + default: + fatalError("Type error deserializing") + } + } + } + + /// Space is allocated differently based on the type of account. + public enum SpaceAllocation: CustomStringConvertible { + /// The user's space allocation applies only to their individual account. + case individual(Users.IndividualSpaceAllocation) + /// The user shares space with other members of their team. + case team(Users.TeamSpaceAllocation) + /// An unspecified error. + case other + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SpaceAllocationSerializer().serialize(self)))" + } + } + open class SpaceAllocationSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SpaceAllocation) -> JSON { + switch value { + case .individual(let arg): + var d = Serialization.getFields(Users.IndividualSpaceAllocationSerializer().serialize(arg)) + d[".tag"] = .str("individual") + return .dictionary(d) + case .team(let arg): + var d = Serialization.getFields(Users.TeamSpaceAllocationSerializer().serialize(arg)) + d[".tag"] = .str("team") + return .dictionary(d) + case .other: + var d = [String: JSON]() + d[".tag"] = .str("other") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> SpaceAllocation { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "individual": + let v = Users.IndividualSpaceAllocationSerializer().deserialize(json) + return SpaceAllocation.individual(v) + case "team": + let v = Users.TeamSpaceAllocationSerializer().deserialize(json) + return SpaceAllocation.team(v) + case "other": + return SpaceAllocation.other + default: + return SpaceAllocation.other + } + default: + fatalError("Failed to deserialize") + } + } + } + + /// Information about a user's space usage and quota. + open class SpaceUsage: CustomStringConvertible { + /// The user's total space usage (bytes). + public let used: UInt64 + /// The user's space allocation. + public let allocation: Users.SpaceAllocation + public init(used: UInt64, allocation: Users.SpaceAllocation) { + comparableValidator()(used) + self.used = used + self.allocation = allocation + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(SpaceUsageSerializer().serialize(self)))" + } + } + open class SpaceUsageSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: SpaceUsage) -> JSON { + let output = [ + "used": Serialization._UInt64Serializer.serialize(value.used), + "allocation": Users.SpaceAllocationSerializer().serialize(value.allocation), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> SpaceUsage { + switch json { + case .dictionary(let dict): + let used = Serialization._UInt64Serializer.deserialize(dict["used"] ?? .null) + let allocation = Users.SpaceAllocationSerializer().deserialize(dict["allocation"] ?? .null) + return SpaceUsage(used: used, allocation: allocation) + default: + fatalError("Type error deserializing") + } + } + } + + /// The TeamSpaceAllocation struct + open class TeamSpaceAllocation: CustomStringConvertible { + /// The total space currently used by the user's team (bytes). + public let used: UInt64 + /// The total space allocated to the user's team (bytes). + public let allocated: UInt64 + /// The total space allocated to the user within its team allocated space (0 means that no restriction is + /// imposed on the user's quota within its team). + public let userWithinTeamSpaceAllocated: UInt64 + /// The type of the space limit imposed on the team member (off, alert_only, stop_sync). + public let userWithinTeamSpaceLimitType: TeamCommon.MemberSpaceLimitType + public init(used: UInt64, allocated: UInt64, userWithinTeamSpaceAllocated: UInt64, userWithinTeamSpaceLimitType: TeamCommon.MemberSpaceLimitType) { + comparableValidator()(used) + self.used = used + comparableValidator()(allocated) + self.allocated = allocated + comparableValidator()(userWithinTeamSpaceAllocated) + self.userWithinTeamSpaceAllocated = userWithinTeamSpaceAllocated + self.userWithinTeamSpaceLimitType = userWithinTeamSpaceLimitType + } + open var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(TeamSpaceAllocationSerializer().serialize(self)))" + } + } + open class TeamSpaceAllocationSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: TeamSpaceAllocation) -> JSON { + let output = [ + "used": Serialization._UInt64Serializer.serialize(value.used), + "allocated": Serialization._UInt64Serializer.serialize(value.allocated), + "user_within_team_space_allocated": Serialization._UInt64Serializer.serialize(value.userWithinTeamSpaceAllocated), + "user_within_team_space_limit_type": TeamCommon.MemberSpaceLimitTypeSerializer().serialize(value.userWithinTeamSpaceLimitType), + ] + return .dictionary(output) + } + open func deserialize(_ json: JSON) -> TeamSpaceAllocation { + switch json { + case .dictionary(let dict): + let used = Serialization._UInt64Serializer.deserialize(dict["used"] ?? .null) + let allocated = Serialization._UInt64Serializer.deserialize(dict["allocated"] ?? .null) + let userWithinTeamSpaceAllocated = Serialization._UInt64Serializer.deserialize(dict["user_within_team_space_allocated"] ?? .null) + let userWithinTeamSpaceLimitType = TeamCommon.MemberSpaceLimitTypeSerializer().deserialize(dict["user_within_team_space_limit_type"] ?? .null) + return TeamSpaceAllocation(used: used, allocated: allocated, userWithinTeamSpaceAllocated: userWithinTeamSpaceAllocated, userWithinTeamSpaceLimitType: userWithinTeamSpaceLimitType) + default: + fatalError("Type error deserializing") + } + } + } + + + /// Stone Route Objects + + static let getAccount = Route( + name: "get_account", + version: 1, + namespace: "users", + deprecated: false, + argSerializer: Users.GetAccountArgSerializer(), + responseSerializer: Users.BasicAccountSerializer(), + errorSerializer: Users.GetAccountErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getAccountBatch = Route( + name: "get_account_batch", + version: 1, + namespace: "users", + deprecated: false, + argSerializer: Users.GetAccountBatchArgSerializer(), + responseSerializer: ArraySerializer(Users.BasicAccountSerializer()), + errorSerializer: Users.GetAccountBatchErrorSerializer(), + attrs: ["host": "api", + "style": "rpc"] + ) + static let getCurrentAccount = Route( + name: "get_current_account", + version: 1, + namespace: "users", + deprecated: false, + argSerializer: Serialization._VoidSerializer, + responseSerializer: Users.FullAccountSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) + static let getSpaceUsage = Route( + name: "get_space_usage", + version: 1, + namespace: "users", + deprecated: false, + argSerializer: Serialization._VoidSerializer, + responseSerializer: Users.SpaceUsageSerializer(), + errorSerializer: Serialization._VoidSerializer, + attrs: ["host": "api", + "style": "rpc"] + ) +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/UsersCommon.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/UsersCommon.swift new file mode 100644 index 0000000..23e80c5 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/UsersCommon.swift @@ -0,0 +1,62 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +import Foundation + +/// Datatypes and serializers for the users_common namespace +open class UsersCommon { + /// What type of account this user has. + public enum AccountType: CustomStringConvertible { + /// The basic account type. + case basic + /// The Dropbox Pro account type. + case pro + /// The Dropbox Business account type. + case business + + public var description: String { + return "\(SerializeUtil.prepareJSONForSerialization(AccountTypeSerializer().serialize(self)))" + } + } + open class AccountTypeSerializer: JSONSerializer { + public init() { } + open func serialize(_ value: AccountType) -> JSON { + switch value { + case .basic: + var d = [String: JSON]() + d[".tag"] = .str("basic") + return .dictionary(d) + case .pro: + var d = [String: JSON]() + d[".tag"] = .str("pro") + return .dictionary(d) + case .business: + var d = [String: JSON]() + d[".tag"] = .str("business") + return .dictionary(d) + } + } + open func deserialize(_ json: JSON) -> AccountType { + switch json { + case .dictionary(let d): + let tag = Serialization.getTag(d) + switch tag { + case "basic": + return AccountType.basic + case "pro": + return AccountType.pro + case "business": + return AccountType.business + default: + fatalError("Unknown tag \(tag)") + } + default: + fatalError("Failed to deserialize") + } + } + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/UsersRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/UsersRoutes.swift new file mode 100644 index 0000000..682d5bd --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Generated/UsersRoutes.swift @@ -0,0 +1,58 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// +/// Auto-generated by Stone, do not modify. +/// + +/// Routes for the users namespace +open class UsersRoutes { + public let client: DropboxTransportClient + init(client: DropboxTransportClient) { + self.client = client + } + + /// Get information about a user's account. + /// + /// - parameter accountId: A user's account identifier. + /// + /// - returns: Through the response callback, the caller will receive a `Users.BasicAccount` object on success or a + /// `Users.GetAccountError` object on failure. + @discardableResult open func getAccount(accountId: String) -> RpcRequest { + let route = Users.getAccount + let serverArgs = Users.GetAccountArg(accountId: accountId) + return client.request(route, serverArgs: serverArgs) + } + + /// Get information about multiple user accounts. At most 300 accounts may be queried per request. + /// + /// - parameter accountIds: List of user account identifiers. Should not contain any duplicate account IDs. + /// + /// - returns: Through the response callback, the caller will receive a `Array` object on + /// success or a `Users.GetAccountBatchError` object on failure. + @discardableResult open func getAccountBatch(accountIds: Array) -> RpcRequest, Users.GetAccountBatchErrorSerializer> { + let route = Users.getAccountBatch + let serverArgs = Users.GetAccountBatchArg(accountIds: accountIds) + return client.request(route, serverArgs: serverArgs) + } + + /// Get information about the current user's account. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Users.FullAccount` object on success or a + /// `Void` object on failure. + @discardableResult open func getCurrentAccount() -> RpcRequest { + let route = Users.getCurrentAccount + return client.request(route) + } + + /// Get the space usage information for the current user's account. + /// + /// + /// - returns: Through the response callback, the caller will receive a `Users.SpaceUsage` object on success or a + /// `Void` object on failure. + @discardableResult open func getSpaceUsage() -> RpcRequest { + let route = Users.getSpaceUsage + return client.request(route) + } + +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/Custom.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/Custom.swift new file mode 100644 index 0000000..1c3060a --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/Custom.swift @@ -0,0 +1,65 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation + +/// Special custom response block for batch upload. The first argument is a mapping of client-side NSURLs to batch +/// upload result entries (each of which indicates the success / failure of the upload for the corresponding file). This +/// object will be nonnull if the final call to `/upload_session/finish_batch/check` is successful. The second argument +/// is the route-specific error from `/upload_session/finish_batch/check`, which is generally not able to be handled at +/// runtime, but instead should be used for debugging purposes. This object will be nonnull if there is a route-specific +/// error from the call to `/upload_session/finish_batch/check`. The third argument is the general request error from +/// `/upload_session/finish_batch/check`. This object will be nonnull if there is a request error from the call to +/// `/upload_session/finish_batch/check`. The fourth argument is a mapping of client-side NSURLs to general request +/// errors, which occured during the upload of the corresponding file. +public typealias BatchUploadResponseBlock = ([URL: Files.UploadSessionFinishBatchResultEntry]?, CallError?, [URL: CallError]) -> Void + +public typealias ProgressBlock = (Progress) -> Void + +/// +/// Stores data for a particular batch upload attempt. +/// +open class BatchUploadData { + /// The queue on which most response handling is performed. + let queue: DispatchQueue + /// The dispatch group that pairs upload requests with upload responses so that we can wait for all request/response + /// pairs to complete before batch committing. In this way, we can start many upload requests (for files under the chunk + /// limit), without waiting for the corresponding response. + let uploadGroup = DispatchGroup() + /// A client-supplied parameter that maps the file urls of the files to upload to the corresponding commit info objects. + let fileUrlsToCommitInfo: [URL: Files.CommitInfo] + /// Mapping of urls for files that were unsuccessfully uploaded to any request errors that were encounted. + var fileUrlsToRequestErrors: [URL: CallError] + /// List of finish args (which include commit info, cursor, etc.) which the SDK maintains and passes to + /// `upload_session/finish_batch`. + var finishArgs: [Files.UploadSessionFinishArg] + /// The progress block that is periodically executed once a file upload is complete. + let progressBlock: ProgressBlock? + /// The response block that is executed once all file uploads and the final batch commit is complete. + let responseBlock: BatchUploadResponseBlock + /// The total size of all the files to upload. Used to return progress data to the client. + var totalUploadProgress: Progress? + /// The flag that determines whether upload continues or not. + var cancel: Bool = false + /// The container object that stores all upload / download task objects for cancelling. +// let taskStorage: DBTasksStorage! + + public init(fileCommitInfo fileUrlsToCommitInfo: [URL: Files.CommitInfo], progressBlock: ProgressBlock?, responseBlock: @escaping BatchUploadResponseBlock, queue: DispatchQueue) { + // we specifiy a custom queue so that the main thread is not blocked + self.queue = queue + // we want to make sure all of our file data has been uploaded + // before we make our final batch commit call to `/upload_session/finish_batch`, + // but we also don't want to wait for each response before making a + // succeeding upload call, so we used dispatch groups to wait for all upload + // calls to return before making our final batch commit call + self.fileUrlsToCommitInfo = fileUrlsToCommitInfo + self.fileUrlsToRequestErrors = [:] + self.finishArgs = [] + self.progressBlock = progressBlock + self.responseBlock = responseBlock + self.totalUploadProgress = nil +// self.taskStorage = DBTasksStorage() + + } +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/CustomRoutes.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/CustomRoutes.swift new file mode 100644 index 0000000..c594336 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/CustomRoutes.swift @@ -0,0 +1,277 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation + +// 10 MB file chunk size +let fileChunkSize: UInt64 = 10 * 1024 * 1024 +let timeoutInSec = 200 + +extension FilesRoutes { + + @discardableResult open func batchUploadFiles(fileUrlsToCommitInfo: [URL: Files.CommitInfo], queue: DispatchQueue? = nil, progressBlock: ProgressBlock? = nil, responseBlock: @escaping BatchUploadResponseBlock) -> BatchUploadTask { + let uploadData = BatchUploadData(fileCommitInfo: fileUrlsToCommitInfo, progressBlock: progressBlock, responseBlock: responseBlock, queue: queue ?? DispatchQueue.main) + let uploadTask = BatchUploadTask(uploadData: uploadData) + let fileUrls = fileUrlsToCommitInfo.keys + var fileUrlsToFileSize: [URL: UInt64] = [:] + var totalUploadSize: UInt64 = 0 + // determine total upload size for progress handler + for fileUrl: URL in fileUrls { + var fileSize : UInt64 + + do { + let attr = try FileManager.default.attributesOfItem(atPath: fileUrl.path) + fileSize = attr[FileAttributeKey.size] as! UInt64 + totalUploadSize += fileSize + fileUrlsToFileSize[fileUrl] = fileSize + } catch { + uploadData.queue.sync { + uploadData.responseBlock(nil, nil, [fileUrl: .clientError(error)]) + } + return uploadTask + } + } + + uploadData.totalUploadProgress = Progress(totalUnitCount: Int64(totalUploadSize)); + + for fileUrl: URL in fileUrls { + let fileSize = fileUrlsToFileSize[fileUrl]! + if !uploadData.cancel { + if fileSize < fileChunkSize { + // file is small, so we won't chunk upload it. + self.startUploadSmallFile(uploadData: uploadData, fileUrl: fileUrl, fileSize: fileSize) + } + else { + // file is somewhat large, so we will chunk upload it, repeatedly querying + // `/upload_session/append_v2` until the file is uploaded + self.startUploadLargeFile(uploadData: uploadData, fileUrl: fileUrl, fileSize: fileSize) + } + } + else { + break + } + } + // small or large, we query `upload_session/finish_batch` to batch commit + // uploaded files. + self.batchFinishUponCompletion(uploadData: uploadData) + return uploadTask + } + + func startUploadSmallFile(uploadData: BatchUploadData, fileUrl: URL, fileSize: UInt64) { + uploadData.uploadGroup.enter() + // immediately close session after first API call + // because file can be uploaded in one request + self.uploadSessionStart(close: true, input: fileUrl).response(queue: uploadData.queue, completionHandler: { result, error in + if let result = result { + let sessionId = result.sessionId + let offset = (fileSize) + let cursor = Files.UploadSessionCursor(sessionId: sessionId, offset: offset) + let commitInfo = uploadData.fileUrlsToCommitInfo[fileUrl]! + let finishArg = Files.UploadSessionFinishArg(cursor: cursor, commit: commitInfo) + // store commit info for this file + uploadData.finishArgs.append(finishArg) + } + else { +// uploadData.fileUrlsToRequestErrors[fileUrl] = error + } +// uploadData.taskStorage.removeUploadTask(task) + uploadData.uploadGroup.leave() + }) + } + + func startUploadLargeFile(uploadData: BatchUploadData, fileUrl: URL, fileSize: UInt64) { + uploadData.uploadGroup.enter() + let startBytes = 0 + let endBytes = fileChunkSize + let fileChunkInputStream = DBChunkInputStream(fileUrl: fileUrl, startBytes: UInt(startBytes), endBytes: UInt(endBytes)) + // use seperate continue upload queue so we don't block other files from + // commencing their upload + let chunkUploadContinueQueue = DispatchQueue(label: "chunk_upload_continue_queue") + // do not immediately close session + + self.uploadSessionStart(input: fileChunkInputStream).response(queue: chunkUploadContinueQueue, completionHandler: { result, error in + if let result = result { + let sessionId = result.sessionId + self.appendRemainingFileChunks(uploadData: uploadData, fileUrl: fileUrl, fileSize: fileSize, sessionId: sessionId) + let cursor = Files.UploadSessionCursor(sessionId: sessionId, offset: (fileSize)) + let commitInfo = uploadData.fileUrlsToCommitInfo[fileUrl]! + let finishArg = Files.UploadSessionFinishArg(cursor: cursor, commit: commitInfo) + // Store commit info for this file + uploadData.finishArgs.append(finishArg) + } else { +// uploadData.fileUrlsToRequestErrors[fileUrl] = error + uploadData.uploadGroup.leave() + } +// uploadData.taskStorage.remove(task) + }).progress { progress in + self.executeProgressHandler(uploadData:uploadData, progress: progress) + } + +// uploadData.taskStorage.add(task) + } + + func appendRemainingFileChunks(uploadData: BatchUploadData, fileUrl: URL, fileSize: UInt64, sessionId: String) { + // use seperate response queue so we don't block response thread + // with dispatch_semaphore_t + let chunkUploadResponseQueue = DispatchQueue(label: "chunk_upload_response_queue") + + chunkUploadResponseQueue.async { + var numFileChunks = fileSize / fileChunkSize + if fileSize % fileChunkSize != 0 { + numFileChunks += 1 + } + var totalBytesSent: UInt64 = 0 + let chunkUploadFinished = DispatchSemaphore(value: 0) + // iterate through all remaining chunks and upload each one sequentially + for i in 1.. + +/// +/// Subclass of `NSInputStream` to enforce "bounds" on file stream, for +/// chunk uploading. +/// +@interface DBChunkInputStream : NSInputStream + +/// +/// DBChunkInputStream full constructor. +/// +/// @param fileUrl The file to stream. +/// @param startBytes The starting position of the file stream, relative +/// to the beginning of the file. +/// @param endBytes The ending position of the file stream, relative +/// to the beginning of the file. +/// +/// @return An initialized DBChunkInputStream instance. +/// +- (nonnull instancetype)initWithFileUrl:(NSURL * _Nonnull)fileUrl + startBytes:(NSUInteger)startBytes + endBytes:(NSUInteger)endBytes; + +@end diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.m b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.m new file mode 100755 index 0000000..1d440b8 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.m @@ -0,0 +1,207 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// Copyright (c) 2011 BJ Homer. All rights reserved. +/// +/// Based on example from @bjhomer https://github.com/bjhomer/HSCountingInputStream +/// + +#import "DBChunkInputStream.h" + +@interface DBChunkInputStream () + +@property (nonatomic, readonly) NSInputStream * _Nonnull parentStream; +@property (nonatomic) NSStreamStatus parentStreamStatus; +@property (nonatomic, readonly) id streamDelegate; + +@property (nonatomic) CFReadStreamClientCallBack copiedCallback; +@property (nonatomic) CFStreamClientContext copiedContext; +@property (nonatomic) CFOptionFlags requestedEvents; + +@property (nonatomic, readonly) NSUInteger startBytes; +@property (nonatomic, readonly) NSUInteger endBytes; +@property (nonatomic, readonly) NSUInteger totalBytesToRead; +@property (nonatomic) NSUInteger totalBytesRead; + +@end + +@implementation DBChunkInputStream + +#pragma mark Object lifecycle + +- (instancetype)initWithFileUrl:(NSURL *)fileUrl startBytes:(NSUInteger)startBytes endBytes:(NSUInteger)endBytes { + self = [super init]; + if (self) { + _parentStream = [[NSInputStream alloc] initWithURL:fileUrl]; + [_parentStream setDelegate:self]; + + NSAssert(endBytes > startBytes, @"End location (%lu) needs to be greater than start location (%lu)", + (unsigned long)endBytes, (unsigned long)startBytes); + _startBytes = startBytes; + _endBytes = endBytes; + _totalBytesToRead = endBytes - startBytes; + _totalBytesRead = 0; + + [self setDelegate:self]; + } + + return self; +} + +#pragma mark NSStream subclass methods + +- (void)open { + [_parentStream open]; + [_parentStream setProperty:@(_startBytes) forKey:NSStreamFileCurrentOffsetKey]; + _parentStreamStatus = NSStreamStatusOpen; +} + +- (void)close { + [_parentStream close]; + _parentStreamStatus = NSStreamStatusClosed; +} + +- (id)delegate { + return _streamDelegate; +} + +- (void)setDelegate:(id)aDelegate { + if (!aDelegate) { + _streamDelegate = self; + } else { + _streamDelegate = aDelegate; + } +} + +- (void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode { + [_parentStream scheduleInRunLoop:aRunLoop forMode:mode]; +} + +- (void)removeFromRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode { + [_parentStream removeFromRunLoop:aRunLoop forMode:mode]; +} + +- (id)propertyForKey:(NSString *)key { + return [_parentStream propertyForKey:key]; +} + +- (BOOL)setProperty:(id)property forKey:(NSString *)key { + return [_parentStream setProperty:property forKey:key]; +} + +- (NSStreamStatus)streamStatus { + return _parentStreamStatus; +} + +- (NSError *)streamError { + return [_parentStream streamError]; +} + +#pragma mark NSInputStream subclass methods + +- (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len { + NSUInteger bytesToRead = len; + + NSUInteger bytesRemaining = _totalBytesToRead - _totalBytesRead; + if (len > bytesRemaining) { + bytesToRead = bytesRemaining; + } + + NSInteger bytesRead = [_parentStream read:buffer maxLength:bytesToRead]; + + _totalBytesRead += bytesRead; + + return bytesRead; +} + +- (BOOL)getBuffer:(uint8_t **)buffer length:(NSUInteger *)len { +#pragma unused(buffer) +#pragma unused(len) + return NO; +} + +- (BOOL)hasBytesAvailable { + NSUInteger bytesRemaining = _totalBytesToRead - _totalBytesRead; + + if (bytesRemaining == 0) { + _parentStreamStatus = NSStreamStatusAtEnd; + return NO; + } + + return [_parentStream hasBytesAvailable]; +} + +#pragma mark Undocumented CFReadStream bridged methods + +- (void)_scheduleInCFRunLoop:(CFRunLoopRef)aRunLoop forMode:(CFStringRef)aMode { + CFReadStreamScheduleWithRunLoop((CFReadStreamRef)_parentStream, aRunLoop, aMode); +} + +- (BOOL)_setCFClientFlags:(CFOptionFlags)inFlags + callback:(CFReadStreamClientCallBack)inCallback + context:(CFStreamClientContext *)inContext { + + if (inCallback) { + _requestedEvents = inFlags; + _copiedCallback = inCallback; + memcpy(&_copiedContext, inContext, sizeof(CFStreamClientContext)); + + if (_copiedContext.info && _copiedContext.retain) { + _copiedContext.retain(_copiedContext.info); + } + } else { + _requestedEvents = kCFStreamEventNone; + _copiedCallback = nil; + if (_copiedContext.info && _copiedContext.release) { + _copiedContext.release(_copiedContext.info); + } + + memset(&_copiedContext, 0, sizeof(CFStreamClientContext)); + } + + return YES; +} + +- (void)_unscheduleFromCFRunLoop:(CFRunLoopRef)aRunLoop forMode:(CFStringRef)aMode { + CFReadStreamUnscheduleFromRunLoop((CFReadStreamRef)_parentStream, aRunLoop, aMode); +} + +#pragma mark NSStreamDelegate methods + +- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { +#pragma unused(aStream) + assert(aStream == _parentStream); + + switch (eventCode) { + case NSStreamEventOpenCompleted: + if (_requestedEvents & kCFStreamEventOpenCompleted) { + _copiedCallback((__bridge CFReadStreamRef)self, kCFStreamEventOpenCompleted, _copiedContext.info); + } + break; + + case NSStreamEventHasBytesAvailable: + if (_requestedEvents & kCFStreamEventHasBytesAvailable) { + _copiedCallback((__bridge CFReadStreamRef)self, kCFStreamEventHasBytesAvailable, _copiedContext.info); + } + break; + + case NSStreamEventErrorOccurred: + if (_requestedEvents & kCFStreamEventErrorOccurred) { + _copiedCallback((__bridge CFReadStreamRef)self, kCFStreamEventErrorOccurred, _copiedContext.info); + } + break; + + case NSStreamEventEndEncountered: + if (_requestedEvents & kCFStreamEventEndEncountered) { + _copiedCallback((__bridge CFReadStreamRef)self, kCFStreamEventEndEncountered, _copiedContext.info); + } + break; + + case NSStreamEventHasSpaceAvailable: + break; + + default: + break; + } +} + +@end diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxClient.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxClient.swift new file mode 100644 index 0000000..66bc143 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxClient.swift @@ -0,0 +1,30 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation +import Alamofire + +/// The client for the User API. Call routes using the namespaces inside this object (inherited from parent). + +open class DropboxClient: DropboxBase { + fileprivate var transportClient: DropboxTransportClient + fileprivate var accessToken: String; + fileprivate var selectUser: String? + + public convenience init(accessToken: String, selectUser: String? = nil, pathRoot: Common.PathRoot? = nil) { + let transportClient = DropboxTransportClient(accessToken: accessToken, selectUser: selectUser, pathRoot: pathRoot) + self.init(transportClient: transportClient) + } + + public init(transportClient: DropboxTransportClient) { + self.transportClient = transportClient + self.selectUser = transportClient.selectUser + self.accessToken = transportClient.accessToken + super.init(client: transportClient) + } + + open func withPathRoot(_ pathRoot: Common.PathRoot) -> DropboxClient { + return DropboxClient(accessToken: self.accessToken, selectUser: self.selectUser, pathRoot: pathRoot) + } +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxClientsManager.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxClientsManager.swift new file mode 100644 index 0000000..2d11ab0 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxClientsManager.swift @@ -0,0 +1,166 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation +import Alamofire + +/// This is a convenience class for the typical single user case. To use this +/// class, see details in the tutorial at: +/// https://www.dropbox.com/developers/documentation/swift#tutorial +/// +/// For information on the available API methods, see the documentation for DropboxClient +open class DropboxClientsManager { + /// An authorized client. This will be set to nil if unlinked. + public static var authorizedClient: DropboxClient? + + /// An authorized team client. This will be set to nil if unlinked. + public static var authorizedTeamClient: DropboxTeamClient? + + /// Sets up access to the Dropbox User API + static func setupWithOAuthManager(_ appKey: String, oAuthManager: DropboxOAuthManager, transportClient: DropboxTransportClient?) { + precondition(DropboxOAuthManager.sharedOAuthManager == nil, "Only call `DropboxClientsManager.setupWithAppKey` or `DropboxClientsManager.setupWithTeamAppKey` once") + DropboxOAuthManager.sharedOAuthManager = oAuthManager + + if let token = DropboxOAuthManager.sharedOAuthManager.getFirstAccessToken() { + setupAuthorizedClient(token, transportClient:transportClient) + } + Keychain.checkAccessibilityMigrationOneTime + } + + /// Sets up access to the Dropbox User API + static func setupWithOAuthManagerMultiUser(_ appKey: String, oAuthManager: DropboxOAuthManager, transportClient: DropboxTransportClient?, tokenUid: String?) { + precondition(DropboxOAuthManager.sharedOAuthManager == nil, "Only call `DropboxClientsManager.setupWithAppKey` or `DropboxClientsManager.setupWithTeamAppKey` once") + DropboxOAuthManager.sharedOAuthManager = oAuthManager + + if let token = DropboxOAuthManager.sharedOAuthManager.getAccessToken(tokenUid) { + setupAuthorizedClient(token, transportClient:transportClient) + } + Keychain.checkAccessibilityMigrationOneTime + } + + /// Sets up access to the Dropbox Business (Team) API + static func setupWithOAuthManagerTeam(_ appKey: String, oAuthManager: DropboxOAuthManager, transportClient: DropboxTransportClient?) { + precondition(DropboxOAuthManager.sharedOAuthManager == nil, "Only call `DropboxClientsManager.setupWithAppKey` or `DropboxClientsManager.setupWithTeamAppKey` once") + DropboxOAuthManager.sharedOAuthManager = oAuthManager + + if let token = DropboxOAuthManager.sharedOAuthManager.getFirstAccessToken() { + setupAuthorizedTeamClient(token, transportClient:transportClient) + } + Keychain.checkAccessibilityMigrationOneTime + } + + /// Sets up access to the Dropbox Business (Team) API in multi-user case + static func setupWithOAuthManagerMultiUserTeam(_ appKey: String, oAuthManager: DropboxOAuthManager, transportClient: DropboxTransportClient?, tokenUid: String?) { + precondition(DropboxOAuthManager.sharedOAuthManager == nil, "Only call `DropboxClientsManager.setupWithAppKey` or `DropboxClientsManager.setupWithTeamAppKey` once") + DropboxOAuthManager.sharedOAuthManager = oAuthManager + + if let token = DropboxOAuthManager.sharedOAuthManager.getAccessToken(tokenUid) { + setupAuthorizedTeamClient(token, transportClient:transportClient) + } + Keychain.checkAccessibilityMigrationOneTime + } + + public static func reauthorizeClient(_ tokenUid: String) { + precondition(DropboxOAuthManager.sharedOAuthManager != nil, "Call `DropboxClientsManager.setupWithAppKey` before calling this method") + + if let token = DropboxOAuthManager.sharedOAuthManager.getAccessToken(tokenUid) { + setupAuthorizedClient(token, transportClient:nil) + } + Keychain.checkAccessibilityMigrationOneTime + } + + public static func reauthorizeTeamClient(_ tokenUid: String) { + precondition(DropboxOAuthManager.sharedOAuthManager != nil, "Call `DropboxClientsManager.setupWithAppKey` before calling this method") + + if let token = DropboxOAuthManager.sharedOAuthManager.getAccessToken(tokenUid) { + setupAuthorizedTeamClient(token, transportClient:nil) + } + Keychain.checkAccessibilityMigrationOneTime + } + + static func setupAuthorizedClient(_ accessToken: DropboxAccessToken?, transportClient: DropboxTransportClient?) { + if let accessToken = accessToken { + if let transportClient = transportClient { + transportClient.accessToken = accessToken.accessToken + authorizedClient = DropboxClient(transportClient: transportClient) + } else { + authorizedClient = DropboxClient(accessToken: accessToken.accessToken) + } + } else { + if let transportClient = transportClient { + authorizedClient = DropboxClient(transportClient: transportClient) + } + } + } + + static func setupAuthorizedTeamClient(_ accessToken: DropboxAccessToken?, transportClient: DropboxTransportClient?) { + if let accessToken = accessToken { + if let transportClient = transportClient { + transportClient.accessToken = accessToken.accessToken + authorizedTeamClient = DropboxTeamClient(transportClient: transportClient) + } else { + authorizedTeamClient = DropboxTeamClient(accessToken: accessToken.accessToken) + } + } else { + if let transportClient = transportClient { + authorizedTeamClient = DropboxTeamClient(transportClient: transportClient) + } + } + } + + /// Handle a redirect and automatically initialize the client and save the token. + public static func handleRedirectURL(_ url: URL) -> DropboxOAuthResult? { + precondition(DropboxOAuthManager.sharedOAuthManager != nil, "Call `DropboxClientsManager.setupWithAppKey` before calling this method") + if let result = DropboxOAuthManager.sharedOAuthManager.handleRedirectURL(url) { + switch result { + case .success(let accessToken): + DropboxClientsManager.authorizedClient = DropboxClient(accessToken: accessToken.accessToken) + return result + case .cancel: + return result + case .error: + return result + } + } else { + return nil + } + } + + /// Handle a redirect and automatically initialize the client and save the token. + public static func handleRedirectURLTeam(_ url: URL) -> DropboxOAuthResult? { + precondition(DropboxOAuthManager.sharedOAuthManager != nil, "Call `DropboxClientsManager.setupWithTeamAppKey` before calling this method") + if let result = DropboxOAuthManager.sharedOAuthManager.handleRedirectURL(url) { + switch result { + case .success(let accessToken): + DropboxClientsManager.authorizedTeamClient = DropboxTeamClient(accessToken: accessToken.accessToken) + return result + case .cancel: + return result + case .error: + return result + } + } else { + return nil + } + } + + /// Unlink the user. + public static func unlinkClients() { + if let oAuthManager = DropboxOAuthManager.sharedOAuthManager { + _ = oAuthManager.clearStoredAccessTokens() + resetClients() + } + } + + /// Unlink the user. + public static func resetClients() { + if DropboxClientsManager.authorizedClient == nil && DropboxClientsManager.authorizedTeamClient == nil { + // already unlinked + return + } + + DropboxClientsManager.authorizedClient = nil + DropboxClientsManager.authorizedTeamClient = nil + } +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxTeamClient.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxTeamClient.swift new file mode 100644 index 0000000..b1b5686 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxTeamClient.swift @@ -0,0 +1,29 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation +import Alamofire + +/// The client for the Business API. Call routes using the namespaces inside this object (inherited from parent). + +open class DropboxTeamClient: DropboxTeamBase { + fileprivate var transportClient: DropboxTransportClient + fileprivate var accessToken: String + + public convenience init(accessToken: String) { + let transportClient = DropboxTransportClient(accessToken: accessToken) + self.init(transportClient: transportClient) + self.accessToken = accessToken + } + + public init(transportClient: DropboxTransportClient) { + self.transportClient = transportClient + self.accessToken = transportClient.accessToken + super.init(client: transportClient) + } + + open func asMember(_ memberId: String) -> DropboxClient { + return DropboxClient(accessToken: self.accessToken, selectUser: memberId) + } +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxTransportClient.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxTransportClient.swift new file mode 100644 index 0000000..7662045 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/DropboxTransportClient.swift @@ -0,0 +1,623 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation +import Alamofire + +open class DropboxTransportClient { + public let manager: SessionManager + public let backgroundManager: SessionManager + public let longpollManager: SessionManager + open var accessToken: String + open var selectUser: String? + open var pathRoot: Common.PathRoot? + var baseHosts: [String: String] + var userAgent: String + + public convenience init(accessToken: String, selectUser: String? = nil, pathRoot: Common.PathRoot? = nil) { + self.init(accessToken: accessToken, baseHosts: nil, userAgent: nil, selectUser: selectUser, pathRoot: pathRoot) + } + + public init(accessToken: String, baseHosts: [String: String]?, userAgent: String?, selectUser: String?, sessionDelegate: SessionDelegate? = nil, backgroundSessionDelegate: SessionDelegate? = nil, longpollSessionDelegate: SessionDelegate? = nil, serverTrustPolicyManager: ServerTrustPolicyManager? = nil, sharedContainerIdentifier: String? = nil, pathRoot: Common.PathRoot? = nil) { + let config = URLSessionConfiguration.default + let delegate = sessionDelegate ?? SessionDelegate() + let serverTrustPolicyManager = serverTrustPolicyManager ?? nil + + let manager = SessionManager(configuration: config, delegate: delegate, serverTrustPolicyManager: serverTrustPolicyManager) + manager.startRequestsImmediately = false + + let backgroundManager = { () -> SessionManager in + let backgroundConfig = URLSessionConfiguration.background(withIdentifier: "com.dropbox.SwiftyDropbox." + UUID().uuidString) + if let sharedContainerIdentifier = sharedContainerIdentifier{ + backgroundConfig.sharedContainerIdentifier = sharedContainerIdentifier + } + if let backgroundSessionDelegate = backgroundSessionDelegate { + return SessionManager(configuration: backgroundConfig, delegate: backgroundSessionDelegate, serverTrustPolicyManager: serverTrustPolicyManager) + } + return SessionManager(configuration: backgroundConfig, serverTrustPolicyManager: serverTrustPolicyManager) + }() + backgroundManager.startRequestsImmediately = false + + let longpollConfig = URLSessionConfiguration.default + longpollConfig.timeoutIntervalForRequest = 480.0 + + let longpollSessionDelegate = longpollSessionDelegate ?? SessionDelegate() + + let longpollManager = SessionManager(configuration: longpollConfig, delegate: longpollSessionDelegate, serverTrustPolicyManager: serverTrustPolicyManager) + + let defaultBaseHosts = [ + "api": "https://api.dropbox.com/2", + "content": "https://api-content.dropbox.com/2", + "notify": "https://notify.dropboxapi.com/2", + ] + + let defaultUserAgent = "OfficialDropboxSwiftSDKv2/\(Constants.versionSDK)" + + self.manager = manager + self.backgroundManager = backgroundManager + self.longpollManager = longpollManager + self.accessToken = accessToken + self.selectUser = selectUser + self.pathRoot = pathRoot; + self.baseHosts = baseHosts ?? defaultBaseHosts + if let userAgent = userAgent { + let customUserAgent = "\(userAgent)/\(defaultUserAgent)" + self.userAgent = customUserAgent + } else { + self.userAgent = defaultUserAgent + } + } + + open func request(_ route: Route, + serverArgs: ASerial.ValueType? = nil) -> RpcRequest { + let host = route.attrs["host"]! ?? "api" + var routeName = route.name + if route.version > 1 { + routeName = String(format: "%@_v%d", route.name, route.version) + } + let url = "\(self.baseHosts[host]!)/\(route.namespace)/\(routeName)" + + let routeStyle: RouteStyle = RouteStyle(rawValue: route.attrs["style"]!!)! + + var rawJsonRequest: Data? + rawJsonRequest = nil + + if let serverArgs = serverArgs { + let jsonRequestObj = route.argSerializer.serialize(serverArgs) + rawJsonRequest = SerializeUtil.dumpJSON(jsonRequestObj) + } else { + let voidSerializer = route.argSerializer as! VoidSerializer + let jsonRequestObj = voidSerializer.serialize(()) + rawJsonRequest = SerializeUtil.dumpJSON(jsonRequestObj) + } + + let headers = getHeaders(routeStyle, jsonRequest: rawJsonRequest, host: host) + + let customEncoding = SwiftyArgEncoding(rawJsonRequest: rawJsonRequest!) + + let managerToUse = { () -> SessionManager in + // longpoll requests have a much longer timeout period than other requests + if type(of: route) == type(of: Files.listFolderLongpoll) { + return self.longpollManager + } + return self.manager + }() + + let request = managerToUse.request(url, method: .post, parameters: ["jsonRequest": rawJsonRequest!], encoding: customEncoding, headers: headers) + request.task?.priority = URLSessionTask.highPriority + let rpcRequestObj = RpcRequest(request: request, responseSerializer: route.responseSerializer, errorSerializer: route.errorSerializer) + + request.resume() + + return rpcRequestObj + } + + struct SwiftyArgEncoding: ParameterEncoding { + fileprivate let rawJsonRequest: Data + + init(rawJsonRequest: Data) { + self.rawJsonRequest = rawJsonRequest + } + + func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { + var urlRequest = urlRequest.urlRequest + urlRequest!.httpBody = rawJsonRequest + return urlRequest! + } + } + + open func request(_ route: Route, + serverArgs: ASerial.ValueType, input: UploadBody) -> UploadRequest { + let host = route.attrs["host"]! ?? "api" + var routeName = route.name + if route.version > 1 { + routeName = String(format: "%@_v%d", route.name, route.version) + } + let url = "\(self.baseHosts[host]!)/\(route.namespace)/\(routeName)" + let routeStyle: RouteStyle = RouteStyle(rawValue: route.attrs["style"]!!)! + + let jsonRequestObj = route.argSerializer.serialize(serverArgs) + let rawJsonRequest = SerializeUtil.dumpJSON(jsonRequestObj) + + let headers = getHeaders(routeStyle, jsonRequest: rawJsonRequest, host: host) + + let request: Alamofire.UploadRequest + + switch input { + case let .data(data): + request = self.manager.upload(data, to: url, method: .post, headers: headers) + case let .file(file): + request = self.backgroundManager.upload(file, to: url, method: .post, headers: headers) + case let .stream(stream): + request = self.manager.upload(stream, to: url, method: .post, headers: headers) + } + let uploadRequestObj = UploadRequest(request: request, responseSerializer: route.responseSerializer, errorSerializer: route.errorSerializer) + request.resume() + + return uploadRequestObj + } + + open func request(_ route: Route, + serverArgs: ASerial.ValueType, overwrite: Bool, destination: @escaping (URL, HTTPURLResponse) -> URL) -> DownloadRequestFile { + let host = route.attrs["host"]! ?? "api" + var routeName = route.name + if route.version > 1 { + routeName = String(format: "%@_v%d", route.name, route.version) + } + let url = "\(self.baseHosts[host]!)/\(route.namespace)/\(routeName)" + let routeStyle: RouteStyle = RouteStyle(rawValue: route.attrs["style"]!!)! + + let jsonRequestObj = route.argSerializer.serialize(serverArgs) + let rawJsonRequest = SerializeUtil.dumpJSON(jsonRequestObj) + + let headers = getHeaders(routeStyle, jsonRequest: rawJsonRequest, host: host) + + weak var _self: DownloadRequestFile! + + let destinationWrapper: DownloadRequest.DownloadFileDestination = { url, resp in + var finalUrl = destination(url, resp) + + if 200 ... 299 ~= resp.statusCode { + if FileManager.default.fileExists(atPath: finalUrl.path) { + if overwrite { + do { + try FileManager.default.removeItem(at: finalUrl) + } catch let error as NSError { + print("Error: \(error)") + } + } else { + print("Error: File already exists at \(finalUrl.path)") + } + } + } else { + _self.errorMessage = try! Data(contentsOf: url) + // Alamofire will "move" the file to the temporary location where it already resides, + // and where it will soon be automatically deleted + finalUrl = url + } + + _self.urlPath = finalUrl + + return (finalUrl, []) + } + + let request = self.backgroundManager.download(url, method: .post, headers: headers, to: destinationWrapper) + + let downloadRequestObj = DownloadRequestFile(request: request, responseSerializer: route.responseSerializer, errorSerializer: route.errorSerializer) + _self = downloadRequestObj + + request.resume() + + return downloadRequestObj + } + + public func request(_ route: Route, + serverArgs: ASerial.ValueType) -> DownloadRequestMemory { + let host = route.attrs["host"]! ?? "api" + let url = "\(self.baseHosts[host]!)/\(route.namespace)/\(route.name)" + let routeStyle: RouteStyle = RouteStyle(rawValue: route.attrs["style"]!!)! + + let jsonRequestObj = route.argSerializer.serialize(serverArgs) + let rawJsonRequest = SerializeUtil.dumpJSON(jsonRequestObj) + + let headers = getHeaders(routeStyle, jsonRequest: rawJsonRequest, host: host) + + let request = self.backgroundManager.request(url, method: .post, headers: headers) + + let downloadRequestObj = DownloadRequestMemory(request: request, responseSerializer: route.responseSerializer, errorSerializer: route.errorSerializer) + + request.resume() + + return downloadRequestObj + } + + fileprivate func getHeaders(_ routeStyle: RouteStyle, jsonRequest: Data?, host: String) -> HTTPHeaders { + var headers = ["User-Agent": self.userAgent] + let noauth = (host == "notify") + + if (!noauth) { + headers["Authorization"] = "Bearer \(self.accessToken)" + if let selectUser = self.selectUser { + headers["Dropbox-Api-Select-User"] = selectUser + } + + if let pathRoot = self.pathRoot { + let obj = Common.PathRootSerializer().serialize(pathRoot) + headers["Dropbox-Api-Path-Root"] = utf8Decode(SerializeUtil.dumpJSON(obj)!) + } + } + + if (routeStyle == RouteStyle.Rpc) { + headers["Content-Type"] = "application/json" + } else if (routeStyle == RouteStyle.Upload) { + headers["Content-Type"] = "application/octet-stream" + if let jsonRequest = jsonRequest { + let value = asciiEscape(utf8Decode(jsonRequest)) + headers["Dropbox-Api-Arg"] = value + } + } else if (routeStyle == RouteStyle.Download) { + if let jsonRequest = jsonRequest { + let value = asciiEscape(utf8Decode(jsonRequest)) + headers["Dropbox-Api-Arg"] = value + } + } + return headers + } +} + +open class Box { + public let unboxed: T + init (_ v: T) { self.unboxed = v } +} + +public enum CallError: CustomStringConvertible { + case internalServerError(Int, String?, String?) + case badInputError(String?, String?) + case rateLimitError(Auth.RateLimitError, String?, String?, String?) + case httpError(Int?, String?, String?) + case authError(Auth.AuthError, String?, String?, String?) + case accessError(Auth.AccessError, String?, String?, String?) + case routeError(Box, String?, String?, String?) + case clientError(Error?) + + public var description: String { + switch self { + case let .internalServerError(code, message, requestId): + var ret = "" + if let r = requestId { + ret += "[request-id \(r)] " + } + ret += "Internal Server Error \(code)" + if let m = message { + ret += ": \(m)" + } + return ret + case let .badInputError(message, requestId): + var ret = "" + if let r = requestId { + ret += "[request-id \(r)] " + } + ret += "Bad Input" + if let m = message { + ret += ": \(m)" + } + return ret + case let .authError(error, _, _, requestId): + var ret = "" + if let r = requestId { + ret += "[request-id \(r)] " + } + ret += "API auth error - \(error)" + return ret + case let .accessError(error, _, _, requestId): + var ret = "" + if let r = requestId { + ret += "[request-id \(r)] " + } + ret += "API access error - \(error)" + return ret + case let .httpError(code, message, requestId): + var ret = "" + if let r = requestId { + ret += "[request-id \(r)] " + } + ret += "HTTP Error" + if let c = code { + ret += "\(c)" + } + if let m = message { + ret += ": \(m)" + } + return ret + case let .routeError(box, _, _, requestId): + var ret = "" + if let r = requestId { + ret += "[request-id \(r)] " + } + ret += "API route error - \(box.unboxed)" + return ret + case let .rateLimitError(error, _, _, requestId): + var ret = "" + if let r = requestId { + ret += "[request-id \(r)] " + } + ret += "API rate limit error - \(error)" + return ret + case let .clientError(err): + if let e = err { + return "\(e)" + } + return "An unknown system error" + } + } +} + +func utf8Decode(_ data: Data) -> String { + return NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String +} + +func asciiEscape(_ s: String) -> String { + var out: String = "" + + for char in s.unicodeScalars { + var esc = "\(char)" + if !char.isASCII { + esc = NSString(format:"\\u%04x", char.value) as String + } else { + esc = "\(char)" + } + out += esc + + } + return out +} + +public enum RouteStyle: String { + case Rpc = "rpc" + case Upload = "upload" + case Download = "download" + case Other +} + +public enum UploadBody { + case data(Data) + case file(URL) + case stream(InputStream) +} + +/// These objects are constructed by the SDK; users of the SDK do not need to create them manually. +/// +/// Pass in a closure to the `response` method to handle a response or error. +open class Request { + let responseSerializer: RSerial + let errorSerializer: ESerial + + init(responseSerializer: RSerial, errorSerializer: ESerial) { + self.errorSerializer = errorSerializer + self.responseSerializer = responseSerializer + } + + func handleResponseError(_ response: HTTPURLResponse?, data: Data?, error: Error?) -> CallError { + let requestId = response?.allHeaderFields["X-Dropbox-Request-Id"] as? String + if let code = response?.statusCode { + switch code { + case 500...599: + var message = "" + if let d = data { + message = utf8Decode(d) + } + return .internalServerError(code, message, requestId) + case 400: + var message = "" + if let d = data { + message = utf8Decode(d) + } + return .badInputError(message, requestId) + case 401: + let json = SerializeUtil.parseJSON(data!) + switch json { + case .dictionary(let d): + return .authError(Auth.AuthErrorSerializer().deserialize(d["error"]!), getStringFromJson(json: d, key: "user_message"), getStringFromJson(json: d, key: "error_summary"), requestId) + default: + fatalError("Failed to parse error type") + } + case 403: + let json = SerializeUtil.parseJSON(data!) + switch json { + case .dictionary(let d): + return .accessError(Auth.AccessErrorSerializer().deserialize(d["error"]!), getStringFromJson(json: d, key: "user_message"), getStringFromJson(json: d, key: "error_summary"),requestId) + default: + fatalError("Failed to parse error type") + } + case 409: + let json = SerializeUtil.parseJSON(data!) + switch json { + case .dictionary(let d): + return .routeError(Box(self.errorSerializer.deserialize(d["error"]!)), getStringFromJson(json: d, key: "user_message"), getStringFromJson(json: d, key: "error_summary"), requestId) + default: + fatalError("Failed to parse error type") + } + case 429: + let json = SerializeUtil.parseJSON(data!) + switch json { + case .dictionary(let d): + return .rateLimitError(Auth.RateLimitErrorSerializer().deserialize(d["error"]!), getStringFromJson(json: d, key: "user_message"), getStringFromJson(json: d, key: "error_summary"), requestId) + default: + fatalError("Failed to parse error type") + } + case 200: + return .clientError(error) + default: + return .httpError(code, "An error occurred.", requestId) + } + } else if response == nil { + return .clientError(error) + } else { + var message = "" + if let d = data { + message = utf8Decode(d) + } + return .httpError(nil, message, requestId) + } + } + + func getStringFromJson(json: [String : JSON], key: String) -> String { + if let jsonStr = json[key] { + switch jsonStr { + case .str(let str): + return str; + default: + break; + } + } + + return ""; + } +} + +/// An "rpc-style" request +open class RpcRequest: Request { + public let request: Alamofire.DataRequest + + public init(request: Alamofire.DataRequest, responseSerializer: RSerial, errorSerializer: ESerial) { + self.request = request + super.init(responseSerializer: responseSerializer, errorSerializer: errorSerializer) + } + + open func cancel() { + self.request.cancel() + } + + @discardableResult open func response(queue: DispatchQueue? = nil, completionHandler: @escaping (RSerial.ValueType?, CallError?) -> Void) -> Self { + self.request.validate().response(queue: queue) { response in + if let error = response.error { + completionHandler(nil, self.handleResponseError(response.response, data: response.data!, error: error)) + } else { + completionHandler(self.responseSerializer.deserialize(SerializeUtil.parseJSON(response.data!)), nil) + } + } + return self + } +} + +/// An "upload-style" request +open class UploadRequest: Request { + public let request: Alamofire.UploadRequest + + public init(request: Alamofire.UploadRequest, responseSerializer: RSerial, errorSerializer: ESerial) { + self.request = request + super.init(responseSerializer: responseSerializer, errorSerializer: errorSerializer) + } + + @discardableResult open func progress(_ progressHandler: @escaping ((Progress) -> Void)) -> Self { + self.request.uploadProgress { progressData in + progressHandler(progressData) + } + return self + } + + open func cancel() { + self.request.cancel() + } + + @discardableResult open func response(queue: DispatchQueue? = nil, completionHandler: @escaping (RSerial.ValueType?, CallError?) -> Void) -> Self { + self.request.validate().response(queue: queue) { response in + if let error = response.error { + completionHandler(nil, self.handleResponseError(response.response, data: response.data!, error: error)) + } else { + completionHandler(self.responseSerializer.deserialize(SerializeUtil.parseJSON(response.data!)), nil) + } + } + return self + } +} + + +/// A "download-style" request to a file +open class DownloadRequestFile: Request { + public let request: Alamofire.DownloadRequest + open var urlPath: URL? + open var errorMessage: Data + + public init(request: Alamofire.DownloadRequest, responseSerializer: RSerial, errorSerializer: ESerial) { + self.request = request + urlPath = nil + errorMessage = Data() + super.init(responseSerializer: responseSerializer, errorSerializer: errorSerializer) + } + + @discardableResult open func progress(_ progressHandler: @escaping ((Progress) -> Void)) -> Self { + self.request.downloadProgress { progressData in + progressHandler(progressData) + } + return self + } + + open func cancel() { + self.request.cancel() + } + + @discardableResult open func response(queue: DispatchQueue? = nil, completionHandler: @escaping ((RSerial.ValueType, URL)?, CallError?) -> Void) -> Self { + self.request.validate().response(queue: queue) { response in + if let error = response.error { + completionHandler(nil, self.handleResponseError(response.response, data: self.errorMessage, error: error)) + } else { + let headerFields: [AnyHashable : Any] = response.response!.allHeaderFields + let result = caseInsensitiveLookup("Dropbox-Api-Result", dictionary: headerFields)! + let resultData = result.data(using: .utf8, allowLossyConversion: false) + let resultObject = self.responseSerializer.deserialize(SerializeUtil.parseJSON(resultData!)) + + completionHandler((resultObject, self.urlPath!), nil) + } + } + return self + } +} + +/// A "download-style" request to memory +open class DownloadRequestMemory: Request { + public let request: Alamofire.DataRequest + + public init(request: Alamofire.DataRequest, responseSerializer: RSerial, errorSerializer: ESerial) { + self.request = request + super.init(responseSerializer: responseSerializer, errorSerializer: errorSerializer) + } + + @discardableResult open func progress(_ progressHandler: @escaping ((Progress) -> Void)) -> Self { + self.request.downloadProgress { progressData in + progressHandler(progressData) + } + return self + } + + open func cancel() { + self.request.cancel() + } + + @discardableResult open func response(queue: DispatchQueue? = nil, completionHandler: @escaping ((RSerial.ValueType, Data)?, CallError?) -> Void) -> Self { + self.request.validate().response(queue: queue) { response in + if let error = response.error { + completionHandler(nil, self.handleResponseError(response.response, data: response.data, error: error)) + } else { + let headerFields: [AnyHashable : Any] = response.response!.allHeaderFields + let result = caseInsensitiveLookup("Dropbox-Api-Result", dictionary: headerFields)! + let resultData = result.data(using: .utf8, allowLossyConversion: false) + let resultObject = self.responseSerializer.deserialize(SerializeUtil.parseJSON(resultData!)) + + completionHandler((resultObject, response.data!), nil) + } + } + return self + } +} + +func caseInsensitiveLookup(_ lookupKey: String, dictionary: [AnyHashable : Any]) -> String? { + for key in dictionary.keys { + let keyString = key as! String + if (keyString.lowercased() == lookupKey.lowercased()) { + return dictionary[key] as? String + } + } + return nil +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/OAuth.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/OAuth.swift new file mode 100644 index 0000000..dc733dc --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/OAuth.swift @@ -0,0 +1,507 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import SystemConfiguration +import Foundation + +public protocol SharedApplication { + func presentErrorMessage(_ message: String, title: String) + func presentErrorMessageWithHandlers(_ message: String, title: String, buttonHandlers: Dictionary Void>) + func presentPlatformSpecificAuth(_ authURL: URL) -> Bool + func presentAuthChannel(_ authURL: URL, tryIntercept: @escaping ((URL) -> Bool), cancelHandler: @escaping (() -> Void)) + func presentExternalApp(_ url: URL) + func canPresentExternalApp(_ url: URL) -> Bool +} + +/// Manages access token storage and authentication +/// +/// Use the `DropboxOAuthManager` to authenticate users through OAuth2, save access tokens, and retrieve access tokens. +/// +/// @note OAuth flow webviews localize to enviroment locale. +/// +open class DropboxOAuthManager { + public let locale: Locale? + let appKey: String + let redirectURL: URL + let host: String + var urls: Array + + // MARK: Shared instance + /// A shared instance of a `DropboxOAuthManager` for convenience + public static var sharedOAuthManager: DropboxOAuthManager! + + // MARK: Functions + public init(appKey: String, host: String) { + self.appKey = appKey + self.redirectURL = URL(string: "db-\(self.appKey)://2/token")! + self.host = host + self.urls = [self.redirectURL] + self.locale = nil; + } + + /// + /// Create an instance + /// parameter appKey: The app key from the developer console that identifies this app. + /// + convenience public init(appKey: String) { + self.init(appKey: appKey, host: "www.dropbox.com") + } + + /// + /// Try to handle a redirect back into the application + /// + /// - parameter url: The URL to attempt to handle + /// + /// - returns `nil` if SwiftyDropbox cannot handle the redirect URL, otherwise returns the `DropboxOAuthResult`. + /// + open func handleRedirectURL(_ url: URL) -> DropboxOAuthResult? { + // check if url is a cancel url + if (url.host == "1" && url.path == "/cancel") || (url.host == "2" && url.path == "/cancel") { + return .cancel + } + + if !self.canHandleURL(url) { + return nil + } + + let result = extractFromUrl(url) + + switch result { + case .success(let token): + _ = Keychain.set(token.uid, value: token.accessToken) + return result + default: + return result + } + } + + /// + /// Present the OAuth2 authorization request page by presenting a web view controller modally + /// + /// - parameter controller: The controller to present from + /// + open func authorizeFromSharedApplication(_ sharedApplication: SharedApplication) { + let cancelHandler: (() -> Void) = { + let cancelUrl = URL(string: "db-\(self.appKey)://2/cancel")! + sharedApplication.presentExternalApp(cancelUrl) + } + + if !Reachability.connectedToNetwork() { + let message = "Try again once you have an internet connection" + let title = "No internet connection" + + let buttonHandlers: [String: () -> Void] = [ + "Cancel": { cancelHandler() }, + "Retry": { self.authorizeFromSharedApplication(sharedApplication) }, + ] + sharedApplication.presentErrorMessageWithHandlers(message, title: title, buttonHandlers: buttonHandlers) + + return + } + + if !self.conformsToAppScheme() { + let message = "DropboxSDK: unable to link; app isn't registered for correct URL scheme (db-\(self.appKey)). Add this scheme to your project Info.plist file, under \"URL types\" > \"URL Schemes\"." + let title = "SwiftyDropbox Error" + + sharedApplication.presentErrorMessage(message, title:title) + + return + } + + let url = self.authURL() + + if checkAndPresentPlatformSpecificAuth(sharedApplication) { + return + } + + let tryIntercept: ((URL) -> Bool) = { url in + if self.canHandleURL(url) { + sharedApplication.presentExternalApp(url) + return true + } else { + return false + } + } + sharedApplication.presentAuthChannel(url, tryIntercept: tryIntercept, cancelHandler: cancelHandler) + } + + fileprivate func conformsToAppScheme() -> Bool { + let appScheme = "db-\(self.appKey)" + + let urlTypes = Bundle.main.object(forInfoDictionaryKey: "CFBundleURLTypes") as? [ [String: AnyObject] ] ?? [] + + for urlType in urlTypes { + let schemes = urlType["CFBundleURLSchemes"] as? [String] ?? [] + for scheme in schemes { + if scheme == appScheme { + return true + } + } + } + return false + } + + func authURL() -> URL { + var components = URLComponents() + components.scheme = "https" + components.host = self.host + components.path = "/oauth2/authorize" + + let locale = Bundle.main.preferredLocalizations.first ?? "en" + + let state = ProcessInfo.processInfo.globallyUniqueString + UserDefaults.standard.setValue(state, forKey: Constants.kCSERFKey) + + components.queryItems = [ + URLQueryItem(name: "response_type", value: "token"), + URLQueryItem(name: "client_id", value: self.appKey), + URLQueryItem(name: "redirect_uri", value: self.redirectURL.absoluteString), + URLQueryItem(name: "disable_signup", value: "true"), + URLQueryItem(name: "locale", value: self.locale?.identifier ?? locale), + URLQueryItem(name: "state", value: state), + ] + return components.url! + } + + fileprivate func canHandleURL(_ url: URL) -> Bool { + for known in self.urls { + if url.scheme == known.scheme && url.host == known.host && url.path == known.path { + return true + } + } + return false + } + + func extractFromRedirectURL(_ url: URL) -> DropboxOAuthResult { + var results = [String: String]() + let pairs = url.fragment?.components(separatedBy: "&") ?? [] + + for pair in pairs { + let kv = pair.components(separatedBy: "=") + results.updateValue(kv[1], forKey: kv[0]) + } + + if let error = results["error"] { + let desc = results["error_description"]?.replacingOccurrences(of: "+", with: " ").removingPercentEncoding + if results["error"] != "access_denied" { + return .cancel + } + return .error(OAuth2Error(errorCode: error), desc ?? "") + } else { + let state = results["state"] + let storedState = UserDefaults.standard.string(forKey: Constants.kCSERFKey) + + if state == nil || storedState == nil || state != storedState { + return .error(OAuth2Error(errorCode: "inconsistent_state"), "Auth flow failed because of inconsistent state.") + } else { + // reset upon success + UserDefaults.standard.setValue(nil, forKey: Constants.kCSERFKey) + } + let accessToken = results["access_token"]! + let uid = results["uid"]! + return .success(DropboxAccessToken(accessToken: accessToken, uid: uid)) + } + } + + func extractFromUrl(_ url: URL) -> DropboxOAuthResult { + return extractFromRedirectURL(url) + } + + func checkAndPresentPlatformSpecificAuth(_ sharedApplication: SharedApplication) -> Bool { + return false + } + + /// + /// Retrieve all stored access tokens + /// + /// - returns: a dictionary mapping users to their access tokens + /// + open func getAllAccessTokens() -> [String : DropboxAccessToken] { + let users = Keychain.getAll() + var ret = [String : DropboxAccessToken]() + for user in users { + if let accessToken = Keychain.get(user) { + ret[user] = DropboxAccessToken(accessToken: accessToken, uid: user) + } + } + return ret + } + + /// + /// Check if there are any stored access tokens + /// + /// - returns: Whether there are stored access tokens + /// + open func hasStoredAccessTokens() -> Bool { + return self.getAllAccessTokens().count != 0 + } + + /// + /// Retrieve the access token for a particular user + /// + /// - parameter user: The user whose token to retrieve + /// + /// - returns: An access token if present, otherwise `nil`. + /// + open func getAccessToken(_ user: String?) -> DropboxAccessToken? { + if let user = user { + if let accessToken = Keychain.get(user) { + return DropboxAccessToken(accessToken: accessToken, uid: user) + } + } + return nil + } + + /// + /// Delete a specific access token + /// + /// - parameter token: The access token to delete + /// + /// - returns: whether the operation succeeded + /// + open func clearStoredAccessToken(_ token: DropboxAccessToken) -> Bool { + return Keychain.delete(token.uid) + } + + /// + /// Delete all stored access tokens + /// + /// - returns: whether the operation succeeded + /// + open func clearStoredAccessTokens() -> Bool { + return Keychain.clear() + } + + /// + /// Save an access token + /// + /// - parameter token: The access token to save + /// + /// - returns: whether the operation succeeded + /// + open func storeAccessToken(_ token: DropboxAccessToken) -> Bool { + return Keychain.set(token.uid, value: token.accessToken) + } + + /// + /// Utility function to return an arbitrary access token + /// + /// - returns: the "first" access token found, if any (otherwise `nil`) + /// + open func getFirstAccessToken() -> DropboxAccessToken? { + return self.getAllAccessTokens().values.first + } +} + +/// A Dropbox access token +open class DropboxAccessToken: CustomStringConvertible { + + /// The access token string + public let accessToken: String + + /// The associated user + public let uid: String + + public init(accessToken: String, uid: String) { + self.accessToken = accessToken + self.uid = uid + } + + open var description: String { + return self.accessToken + } +} + +/// A failed authorization. +/// See RFC6749 4.2.2.1 +public enum OAuth2Error { + /// The client is not authorized to request an access token using this method. + case unauthorizedClient + + /// The resource owner or authorization server denied the request. + case accessDenied + + /// The authorization server does not support obtaining an access token using this method. + case unsupportedResponseType + + /// The requested scope is invalid, unknown, or malformed. + case invalidScope + + /// The authorization server encountered an unexpected condition that prevented it from fulfilling the request. + case serverError + + /// The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server. + case temporarilyUnavailable + + /// The state param received from the authorization server does not match the state param stored by the SDK. + case inconsistentState + + /// Some other error (outside of the OAuth2 specification) + case unknown + + /// Initializes an error code from the string specced in RFC6749 + init(errorCode: String) { + switch errorCode { + case "unauthorized_client": self = .unauthorizedClient + case "access_denied": self = .accessDenied + case "unsupported_response_type": self = .unsupportedResponseType + case "invalid_scope": self = .invalidScope + case "server_error": self = .serverError + case "temporarily_unavailable": self = .temporarilyUnavailable + case "inconsistent_state": self = .inconsistentState + default: self = .unknown + } + } +} + +internal let kDBLinkNonce = "dropbox.sync.nonce" + +/// The result of an authorization attempt. +public enum DropboxOAuthResult { + /// The authorization succeeded. Includes a `DropboxAccessToken`. + case success(DropboxAccessToken) + + /// The authorization failed. Includes an `OAuth2Error` and a descriptive message. + case error(OAuth2Error, String) + + /// The authorization was manually canceled by the user. + case cancel +} + +class Keychain { + static let checkAccessibilityMigrationOneTime: () = { + Keychain.checkAccessibilityMigration() + }() + + class func queryWithDict(_ query: [String : AnyObject]) -> CFDictionary { + let bundleId = Bundle.main.bundleIdentifier ?? "" + var queryDict = query + + queryDict[kSecClass as String] = kSecClassGenericPassword + queryDict[kSecAttrService as String] = "\(bundleId).dropbox.authv2" as AnyObject? + queryDict[kSecAttrAccessible as String] = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly + + return queryDict as CFDictionary + } + + class func set(_ key: String, value: String) -> Bool { + if let data = value.data(using: String.Encoding.utf8) { + return set(key, value: data) + } else { + return false + } + } + + class func set(_ key: String, value: Data) -> Bool { + let query = Keychain.queryWithDict([ + (kSecAttrAccount as String): key as AnyObject, + ( kSecValueData as String): value as AnyObject + ]) + + SecItemDelete(query) + + return SecItemAdd(query, nil) == noErr + } + + class func getAsData(_ key: String) -> Data? { + let query = Keychain.queryWithDict([ + (kSecAttrAccount as String): key as AnyObject, + ( kSecReturnData as String): kCFBooleanTrue, + ( kSecMatchLimit as String): kSecMatchLimitOne + ]) + + var dataResult: AnyObject? + let status = SecItemCopyMatching(query as CFDictionary, &dataResult) + + if status == noErr { + return dataResult as? Data + } + + return nil + } + + class func getAll() -> [String] { + let query = Keychain.queryWithDict([ + ( kSecReturnAttributes as String): kCFBooleanTrue, + ( kSecMatchLimit as String): kSecMatchLimitAll + ]) + + var dataResult: AnyObject? + let status = SecItemCopyMatching(query as CFDictionary, &dataResult) + + if status == noErr { + let results = dataResult as? [[String : AnyObject]] ?? [] + return results.map { d in d["acct"] as! String } + + } + return [] + } + + + + class func get(_ key: String) -> String? { + if let data = getAsData(key) { + return String(data: data, encoding: .utf8) + } else { + return nil + } + } + + class func delete(_ key: String) -> Bool { + let query = Keychain.queryWithDict([ + (kSecAttrAccount as String): key as AnyObject + ]) + + return SecItemDelete(query) == noErr + } + + class func clear() -> Bool { + let query = Keychain.queryWithDict([:]) + return SecItemDelete(query) == noErr + } + + class func checkAccessibilityMigration() { + let kAccessibilityMigrationOccurredKey = "KeychainAccessibilityMigration" + let MigrationOccurred = UserDefaults.standard.string(forKey: kAccessibilityMigrationOccurredKey) + + if (MigrationOccurred != "true") { + let bundleId = Bundle.main.bundleIdentifier ?? "" + let queryDict = [kSecClass as String: kSecClassGenericPassword, kSecAttrService as String: "\(bundleId).dropbox.authv2" as AnyObject?] + let attributesToUpdateDict = [kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly] + SecItemUpdate(queryDict as CFDictionary, attributesToUpdateDict as CFDictionary) + UserDefaults.standard.set("true", forKey: kAccessibilityMigrationOccurredKey) + } + } +} + +class Reachability { + /// From http://stackoverflow.com/questions/25623272/how-to-use-scnetworkreachability-in-swift/25623647#25623647. + /// + /// This method uses `SCNetworkReachabilityCreateWithAddress` to create a reference to monitor the example host + /// defined by our zeroed `zeroAddress` struct. From this reference, we can extract status flags regarding the + /// reachability of this host, using `SCNetworkReachabilityGetFlags`. + + class func connectedToNetwork() -> Bool { + var zeroAddress = sockaddr_in() + zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress)) + zeroAddress.sin_family = sa_family_t(AF_INET) + + guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, { + $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { + SCNetworkReachabilityCreateWithAddress(nil, $0) + } + }) else { + return false + } + + var flags: SCNetworkReachabilityFlags = [] + if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) { + return false + } + + let isReachable = flags.contains(.reachable) + let needsConnection = flags.contains(.connectionRequired) + return (isReachable && !needsConnection) + } +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SDKConstants.swift b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SDKConstants.swift new file mode 100644 index 0000000..1c633f8 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SDKConstants.swift @@ -0,0 +1,10 @@ +/// +/// Copyright (c) 2016 Dropbox, Inc. All rights reserved. +/// + +import Foundation + +struct Constants { + static let versionSDK = "5.0.0" + static let kCSERFKey = "kCSERFKeySwiftSDK" +} diff --git a/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SwiftyDropbox.h b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SwiftyDropbox.h new file mode 100644 index 0000000..d214d49 --- /dev/null +++ b/Pods/SwiftyDropbox/Source/SwiftyDropbox/Shared/Handwritten/SwiftyDropbox.h @@ -0,0 +1,24 @@ +// +// SwiftyDropbox.h +// SwiftyDropbox +// +// Copyright © 2016 Dropbox. All rights reserved. +// + +#import "TargetConditionals.h" + +#if TARGET_OS_IPHONE + #import +#else + #import +#endif + +//! Project version number for SwiftyDropbox. +FOUNDATION_EXPORT double SwiftyDropboxVersionNumber; + +//! Project version string for SwiftyDropbox. +FOUNDATION_EXPORT const unsigned char SwiftyDropboxVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import +@interface PodsDummy_Alamofire : NSObject +@end +@implementation PodsDummy_Alamofire +@end diff --git a/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch b/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h b/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h new file mode 100644 index 0000000..00014e3 --- /dev/null +++ b/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double AlamofireVersionNumber; +FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; + diff --git a/Pods/Target Support Files/Alamofire/Alamofire.modulemap b/Pods/Target Support Files/Alamofire/Alamofire.modulemap new file mode 100644 index 0000000..16a3673 --- /dev/null +++ b/Pods/Target Support Files/Alamofire/Alamofire.modulemap @@ -0,0 +1,6 @@ +module Alamofire { + umbrella header "Alamofire-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Alamofire/Alamofire.xcconfig b/Pods/Target Support Files/Alamofire/Alamofire.xcconfig new file mode 100644 index 0000000..b905f5f --- /dev/null +++ b/Pods/Target Support Files/Alamofire/Alamofire.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Alamofire +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig b/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig index ff20aba..b679de2 100644 --- a/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig +++ b/Pods/Target Support Files/Crashlytics/Crashlytics.xcconfig @@ -1,10 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Crashlytics FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"c++" -l"z" -framework "Security" -framework "SystemConfiguration" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Crashlytics PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/DSDeltaCore/DSDeltaCore-dummy.m b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore-dummy.m new file mode 100644 index 0000000..699a532 --- /dev/null +++ b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_DSDeltaCore : NSObject +@end +@implementation PodsDummy_DSDeltaCore +@end diff --git a/Pods/Target Support Files/DSDeltaCore/DSDeltaCore-prefix.pch b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/DSDeltaCore/DSDeltaCore-umbrella.h b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore-umbrella.h new file mode 100644 index 0000000..45a7e78 --- /dev/null +++ b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "DSDeltaCore/Types/DSTypes.h" +#import "DSDeltaCore/Bridge/DSEmulatorBridge.h" + +FOUNDATION_EXPORT double DSDeltaCoreVersionNumber; +FOUNDATION_EXPORT const unsigned char DSDeltaCoreVersionString[]; + diff --git a/Pods/Target Support Files/DSDeltaCore/DSDeltaCore.modulemap b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore.modulemap new file mode 100644 index 0000000..7838a3e --- /dev/null +++ b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore.modulemap @@ -0,0 +1,6 @@ +module DSDeltaCore { + umbrella header "DSDeltaCore-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/DSDeltaCore/DSDeltaCore.xcconfig b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore.xcconfig new file mode 100644 index 0000000..3dc4883 --- /dev/null +++ b/Pods/Target Support Files/DSDeltaCore/DSDeltaCore.xcconfig @@ -0,0 +1,14 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/DSDeltaCore" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm -fvisibility=hidden +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../Cores/DSDeltaCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/DSDeltaCore/ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist b/Pods/Target Support Files/DSDeltaCore/ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/DSDeltaCore/ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/DeltaCore/DeltaCore-Info.plist b/Pods/Target Support Files/DeltaCore/DeltaCore-Info.plist new file mode 100644 index 0000000..161a9d3 --- /dev/null +++ b/Pods/Target Support Files/DeltaCore/DeltaCore-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/DeltaCore/DeltaCore-dummy.m b/Pods/Target Support Files/DeltaCore/DeltaCore-dummy.m new file mode 100644 index 0000000..379c56d --- /dev/null +++ b/Pods/Target Support Files/DeltaCore/DeltaCore-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_DeltaCore : NSObject +@end +@implementation PodsDummy_DeltaCore +@end diff --git a/Pods/Target Support Files/DeltaCore/DeltaCore-prefix.pch b/Pods/Target Support Files/DeltaCore/DeltaCore-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/DeltaCore/DeltaCore-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/DeltaCore/DeltaCore-umbrella.h b/Pods/Target Support Files/DeltaCore/DeltaCore-umbrella.h new file mode 100644 index 0000000..7edd82f --- /dev/null +++ b/Pods/Target Support Files/DeltaCore/DeltaCore-umbrella.h @@ -0,0 +1,17 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "DeltaTypes.h" + +FOUNDATION_EXPORT double DeltaCoreVersionNumber; +FOUNDATION_EXPORT const unsigned char DeltaCoreVersionString[]; + diff --git a/Pods/Target Support Files/DeltaCore/DeltaCore.modulemap b/Pods/Target Support Files/DeltaCore/DeltaCore.modulemap new file mode 100644 index 0000000..60b3ae2 --- /dev/null +++ b/Pods/Target Support Files/DeltaCore/DeltaCore.modulemap @@ -0,0 +1,6 @@ +module DeltaCore { + umbrella header "DeltaCore-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/DeltaCore/DeltaCore.xcconfig b/Pods/Target Support Files/DeltaCore/DeltaCore.xcconfig new file mode 100644 index 0000000..5f60d09 --- /dev/null +++ b/Pods/Target Support Files/DeltaCore/DeltaCore.xcconfig @@ -0,0 +1,14 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/DeltaCore" "${PODS_ROOT}/Headers/Public" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../Cores/DeltaCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_ACTIVE_COMPILATION_CONDITIONS = STATIC_LIBRARY +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/DeltaCore/ResourceBundle-DeltaCore-DeltaCore-Info.plist b/Pods/Target Support Files/DeltaCore/ResourceBundle-DeltaCore-DeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/DeltaCore/ResourceBundle-DeltaCore-DeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Fabric/Fabric.xcconfig b/Pods/Target Support Files/Fabric/Fabric.xcconfig index 8cc41b6..660545a 100644 --- a/Pods/Target Support Files/Fabric/Fabric.xcconfig +++ b/Pods/Target Support Files/Fabric/Fabric.xcconfig @@ -1,10 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Fabric FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Fabric/iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Fabric PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/GBADeltaCore/GBADeltaCore-dummy.m b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore-dummy.m new file mode 100644 index 0000000..08f051d --- /dev/null +++ b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_GBADeltaCore : NSObject +@end +@implementation PodsDummy_GBADeltaCore +@end diff --git a/Pods/Target Support Files/GBADeltaCore/GBADeltaCore-prefix.pch b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/GBADeltaCore/GBADeltaCore-umbrella.h b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore-umbrella.h new file mode 100644 index 0000000..76702f2 --- /dev/null +++ b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "GBADeltaCore/Types/GBATypes.h" +#import "GBADeltaCore/Bridge/GBAEmulatorBridge.h" + +FOUNDATION_EXPORT double GBADeltaCoreVersionNumber; +FOUNDATION_EXPORT const unsigned char GBADeltaCoreVersionString[]; + diff --git a/Pods/Target Support Files/GBADeltaCore/GBADeltaCore.modulemap b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore.modulemap new file mode 100644 index 0000000..c0189f8 --- /dev/null +++ b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore.modulemap @@ -0,0 +1,6 @@ +module GBADeltaCore { + umbrella header "GBADeltaCore-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/GBADeltaCore/GBADeltaCore.xcconfig b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore.xcconfig new file mode 100644 index 0000000..277c7e6 --- /dev/null +++ b/Pods/Target Support Files/GBADeltaCore/GBADeltaCore.xcconfig @@ -0,0 +1,14 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GBADeltaCore" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/include" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/src" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../Cores/GBADeltaCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USER_HEADER_SEARCH_PATHS = "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/fex" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/src" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/GBADeltaCore/ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist b/Pods/Target Support Files/GBADeltaCore/ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/GBADeltaCore/ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-dummy.m b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-dummy.m new file mode 100644 index 0000000..4681e33 --- /dev/null +++ b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_GBCDeltaCore : NSObject +@end +@implementation PodsDummy_GBCDeltaCore +@end diff --git a/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-prefix.pch b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-umbrella.h b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-umbrella.h new file mode 100644 index 0000000..84732cc --- /dev/null +++ b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "GBCDeltaCore/Types/GBCTypes.h" +#import "GBCDeltaCore/Bridge/GBCEmulatorBridge.h" + +FOUNDATION_EXPORT double GBCDeltaCoreVersionNumber; +FOUNDATION_EXPORT const unsigned char GBCDeltaCoreVersionString[]; + diff --git a/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore.modulemap b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore.modulemap new file mode 100644 index 0000000..9069199 --- /dev/null +++ b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore.modulemap @@ -0,0 +1,6 @@ +module GBCDeltaCore { + umbrella header "GBCDeltaCore-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore.xcconfig b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore.xcconfig new file mode 100644 index 0000000..ceb536b --- /dev/null +++ b/Pods/Target Support Files/GBCDeltaCore/GBCDeltaCore.xcconfig @@ -0,0 +1,14 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GBCDeltaCore" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -DHAVE_CSTDINT +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../Cores/GBCDeltaCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/GBCDeltaCore/ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist b/Pods/Target Support Files/GBCDeltaCore/ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/GBCDeltaCore/ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-dummy.m b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-dummy.m new file mode 100644 index 0000000..13d68b3 --- /dev/null +++ b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_GTMSessionFetcher : NSObject +@end +@implementation PodsDummy_GTMSessionFetcher +@end diff --git a/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-prefix.pch b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-umbrella.h b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-umbrella.h new file mode 100644 index 0000000..b9e0b3d --- /dev/null +++ b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher-umbrella.h @@ -0,0 +1,23 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "GTMSessionFetcher.h" +#import "GTMSessionFetcherLogging.h" +#import "GTMSessionFetcherService.h" +#import "GTMSessionUploadFetcher.h" +#import "GTMGatherInputStream.h" +#import "GTMMIMEDocument.h" +#import "GTMReadMonitorInputStream.h" + +FOUNDATION_EXPORT double GTMSessionFetcherVersionNumber; +FOUNDATION_EXPORT const unsigned char GTMSessionFetcherVersionString[]; + diff --git a/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap new file mode 100644 index 0000000..dfdac13 --- /dev/null +++ b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.modulemap @@ -0,0 +1,6 @@ +module GTMSessionFetcher { + umbrella header "GTMSessionFetcher-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.xcconfig b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.xcconfig new file mode 100644 index 0000000..708e15f --- /dev/null +++ b/Pods/Target Support Files/GTMSessionFetcher/GTMSessionFetcher.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GTMSessionFetcher" "${PODS_ROOT}/Headers/Public" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GTMSessionFetcher +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-dummy.m b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-dummy.m new file mode 100644 index 0000000..b446325 --- /dev/null +++ b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_GoogleAPIClientForREST : NSObject +@end +@implementation PodsDummy_GoogleAPIClientForREST +@end diff --git a/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-prefix.pch b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-umbrella.h b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-umbrella.h new file mode 100644 index 0000000..b6265b0 --- /dev/null +++ b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST-umbrella.h @@ -0,0 +1,35 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "GTLRDefines.h" +#import "GTLRBatchQuery.h" +#import "GTLRBatchResult.h" +#import "GTLRDateTime.h" +#import "GTLRDuration.h" +#import "GTLRErrorObject.h" +#import "GTLRObject.h" +#import "GTLRQuery.h" +#import "GTLRRuntimeCommon.h" +#import "GTLRService.h" +#import "GTLRUploadParameters.h" +#import "GTLRBase64.h" +#import "GTLRFramework.h" +#import "GTLRURITemplate.h" +#import "GTLRUtilities.h" +#import "GTLRDrive.h" +#import "GTLRDriveObjects.h" +#import "GTLRDriveQuery.h" +#import "GTLRDriveService.h" + +FOUNDATION_EXPORT double GoogleAPIClientForRESTVersionNumber; +FOUNDATION_EXPORT const unsigned char GoogleAPIClientForRESTVersionString[]; + diff --git a/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap new file mode 100644 index 0000000..db93a07 --- /dev/null +++ b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap @@ -0,0 +1,6 @@ +module GoogleAPIClientForREST { + umbrella header "GoogleAPIClientForREST-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST.xcconfig b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST.xcconfig new file mode 100644 index 0000000..9233198 --- /dev/null +++ b/Pods/Target Support Files/GoogleAPIClientForREST/GoogleAPIClientForREST.xcconfig @@ -0,0 +1,11 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleAPIClientForREST +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GoogleAPIClientForREST" "${PODS_ROOT}/Headers/Public" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleAPIClientForREST +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.xcconfig b/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.xcconfig new file mode 100644 index 0000000..41e2591 --- /dev/null +++ b/Pods/Target Support Files/GoogleSignIn/GoogleSignIn.xcconfig @@ -0,0 +1,12 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/GoogleSignIn/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleSignIn +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-dummy.m b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-dummy.m new file mode 100644 index 0000000..9e35ec0 --- /dev/null +++ b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_GoogleToolboxForMac : NSObject +@end +@implementation PodsDummy_GoogleToolboxForMac +@end diff --git a/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-umbrella.h b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-umbrella.h new file mode 100644 index 0000000..f719448 --- /dev/null +++ b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac-umbrella.h @@ -0,0 +1,22 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "GTMDebugSelectorValidation.h" +#import "GTMDebugThreadValidation.h" +#import "GTMMethodCheck.h" +#import "GTMDefines.h" +#import "GTMNSDictionary+URLArguments.h" +#import "GTMNSString+URLArguments.h" + +FOUNDATION_EXPORT double GoogleToolboxForMacVersionNumber; +FOUNDATION_EXPORT const unsigned char GoogleToolboxForMacVersionString[]; + diff --git a/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.modulemap b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.modulemap new file mode 100644 index 0000000..0d4a60b --- /dev/null +++ b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.modulemap @@ -0,0 +1,6 @@ +module GoogleToolboxForMac { + umbrella header "GoogleToolboxForMac-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.xcconfig b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.xcconfig new file mode 100644 index 0000000..7889351 --- /dev/null +++ b/Pods/Target Support Files/GoogleToolboxForMac/GoogleToolboxForMac.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/GoogleToolboxForMac +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Harmony/Harmony-dummy.m b/Pods/Target Support Files/Harmony/Harmony-dummy.m new file mode 100644 index 0000000..95951fc --- /dev/null +++ b/Pods/Target Support Files/Harmony/Harmony-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Harmony : NSObject +@end +@implementation PodsDummy_Harmony +@end diff --git a/Pods/Target Support Files/Harmony/Harmony-prefix.pch b/Pods/Target Support Files/Harmony/Harmony-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/Harmony/Harmony-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/Harmony/Harmony-umbrella.h b/Pods/Target Support Files/Harmony/Harmony-umbrella.h new file mode 100644 index 0000000..45c308b --- /dev/null +++ b/Pods/Target Support Files/Harmony/Harmony-umbrella.h @@ -0,0 +1,17 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "Harmony/Harmony.h" + +FOUNDATION_EXPORT double HarmonyVersionNumber; +FOUNDATION_EXPORT const unsigned char HarmonyVersionString[]; + diff --git a/Pods/Target Support Files/Harmony/Harmony.modulemap b/Pods/Target Support Files/Harmony/Harmony.modulemap new file mode 100644 index 0000000..e926861 --- /dev/null +++ b/Pods/Target Support Files/Harmony/Harmony.modulemap @@ -0,0 +1,6 @@ +module Harmony { + umbrella header "Harmony-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Harmony/Harmony.xcconfig b/Pods/Target Support Files/Harmony/Harmony.xcconfig new file mode 100644 index 0000000..efdedcc --- /dev/null +++ b/Pods/Target Support Files/Harmony/Harmony.xcconfig @@ -0,0 +1,14 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Harmony +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/GoogleSignIn/Frameworks" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Harmony" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Harmony" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../External/Harmony +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-dummy.m b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-dummy.m new file mode 100644 index 0000000..ecae5cb --- /dev/null +++ b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_N64DeltaCore : NSObject +@end +@implementation PodsDummy_N64DeltaCore +@end diff --git a/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-umbrella.h b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-umbrella.h new file mode 100644 index 0000000..fcb1a77 --- /dev/null +++ b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "N64DeltaCore/Types/N64Types.h" +#import "N64DeltaCore/Bridge/N64EmulatorBridge.h" + +FOUNDATION_EXPORT double N64DeltaCoreVersionNumber; +FOUNDATION_EXPORT const unsigned char N64DeltaCoreVersionString[]; + diff --git a/Pods/Target Support Files/N64DeltaCore/N64DeltaCore.modulemap b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore.modulemap new file mode 100644 index 0000000..964334c --- /dev/null +++ b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore.modulemap @@ -0,0 +1,6 @@ +module N64DeltaCore { + umbrella header "N64DeltaCore-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/N64DeltaCore/N64DeltaCore.xcconfig b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore.xcconfig new file mode 100644 index 0000000..ecb008a --- /dev/null +++ b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore.xcconfig @@ -0,0 +1,18 @@ +ALWAYS_SEARCH_USER_PATHS = YES +CLANG_ENABLE_MODULES = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore +GCC_OPTIMIZATION_LEVEL = 3 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 STATIC_LIBRARY=1 STATIC_LIBRARY=1 MUPENPLUSAPI TXFILTER_LIB OS_IOS GLESX GL_ERROR_DEBUG GL_DEBUG GLESX PNG_ARM_NEON_OPT=0 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/N64DeltaCore" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -D__VEC4_OPT -fvisibility=hidden +OTHER_LDFLAGS = $(inherited) -Wl,-exported_symbol,_Video_PluginStartup,-exported_symbol,_Video_PluginShutdown,-exported_symbol,_Video_PluginGetVersion,-exported_symbol,_Video_RomOpen,-exported_symbol,_Video_RomClosed,-exported_symbol,_ConfigGetSharedDataFilepath,-exported_symbol,_ConfigGetUserConfigPath,-exported_symbol,_ConfigGetUserCachePath,-exported_symbol,_ConfigGetUserDataPath,-exported_symbol,_ConfigOpenSection,-exported_symbol,_ConfigDeleteSection,-exported_symbol,_ConfigSaveSection,-exported_symbol,_ConfigSaveFile,-exported_symbol,_ConfigSetDefaultInt,-exported_symbol,_ConfigSetDefaultFloat,-exported_symbol,_ConfigSetDefaultBool,-exported_symbol,_ConfigSetDefaultString,-exported_symbol,_ConfigGetParamInt,-exported_symbol,_ConfigGetParamFloat,-exported_symbol,_ConfigGetParamBool,-exported_symbol,_ConfigGetParamString,-exported_symbol,_ConfigExternalGetParameter,-exported_symbol,_ConfigExternalOpen,-exported_symbol,_ConfigExternalClose,-exported_symbol,_VidExt_Init,-exported_symbol,_VidExt_Quit,-exported_symbol,_VidExt_ListFullscreenModes,-exported_symbol,_VidExt_SetVideoMode,-exported_symbol,_VidExt_SetCaption,-exported_symbol,_VidExt_ToggleFullScreen,-exported_symbol,_VidExt_ResizeWindow,-exported_symbol,_VidExt_GL_GetProcAddress,-exported_symbol,_VidExt_GL_SetAttribute,-exported_symbol,_VidExt_GL_GetAttribute,-exported_symbol,_VidExt_GL_SwapBuffers,-exported_symbol,_ChangeWindow,-exported_symbol,_InitiateGFX,-exported_symbol,_MoveScreen,-exported_symbol,_ProcessDList,-exported_symbol,_ProcessRDPList,-exported_symbol,_ShowCFB,-exported_symbol,_UpdateScreen,-exported_symbol,_ViStatusChanged,-exported_symbol,_ViWidthChanged,-exported_symbol,_ReadScreen2,-exported_symbol,_SetRenderingCallback,-exported_symbol,_FBRead,-exported_symbol,_FBWrite,-exported_symbol,_FBGetFrameBufferInfo,-exported_symbol,_ResizeVideoOutput,-exported_symbol,_RSP_PluginStartup,-exported_symbol,_RSP_PluginShutdown,-exported_symbol,_RSP_PluginGetVersion,-exported_symbol,_DoRspCycles,-exported_symbol,_InitiateRSP,-exported_symbol,_RSP_RomClosed,-exported_symbol,_CoreGetAPIVersions,-exported_symbol,_ConfigGetParameter,-exported_symbol,_ConfigSetParameter,-exported_symbol,_CoreDoCommand +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../Cores/N64DeltaCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/N64DeltaCore-Video/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/N64DeltaCore/ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist b/Pods/Target Support Files/N64DeltaCore/ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/N64DeltaCore/ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/NESDeltaCore/NESDeltaCore-dummy.m b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore-dummy.m new file mode 100644 index 0000000..3c378cb --- /dev/null +++ b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_NESDeltaCore : NSObject +@end +@implementation PodsDummy_NESDeltaCore +@end diff --git a/Pods/Target Support Files/NESDeltaCore/NESDeltaCore-prefix.pch b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/NESDeltaCore/NESDeltaCore-umbrella.h b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore-umbrella.h new file mode 100644 index 0000000..b4e49e0 --- /dev/null +++ b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore-umbrella.h @@ -0,0 +1,17 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "NestopiaJS/NESEmulatorBridge.hpp" + +FOUNDATION_EXPORT double NESDeltaCoreVersionNumber; +FOUNDATION_EXPORT const unsigned char NESDeltaCoreVersionString[]; + diff --git a/Pods/Target Support Files/NESDeltaCore/NESDeltaCore.modulemap b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore.modulemap new file mode 100644 index 0000000..b7b669b --- /dev/null +++ b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore.modulemap @@ -0,0 +1,6 @@ +module NESDeltaCore { + umbrella header "NESDeltaCore-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/NESDeltaCore/NESDeltaCore.xcconfig b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore.xcconfig new file mode 100644 index 0000000..4183116 --- /dev/null +++ b/Pods/Target Support Files/NESDeltaCore/NESDeltaCore.xcconfig @@ -0,0 +1,15 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/NESDeltaCore" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/NESDeltaCore" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../Cores/NESDeltaCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_ACTIVE_COMPILATION_CONDITIONS = FRAMEWORK NATIVE +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/NESDeltaCore/ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist b/Pods/Target Support Files/NESDeltaCore/ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/NESDeltaCore/ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown index aa3ac4c..d6ff9d1 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.markdown @@ -1,6 +1,29 @@ # Acknowledgements This application makes use of the following third party libraries: +## Alamofire + +Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + ## Crashlytics Fabric: Copyright 2017 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2017 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt @@ -9,6 +32,628 @@ Fabric: Copyright 2017 Google, Inc. All Rights Reserved. Use of this software is Fabric: Copyright 2017 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt +## GTMSessionFetcher + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +## GoogleAPIClientForREST + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + +## GoogleSignIn + +Copyright 2018 Google + +## GoogleToolboxForMac + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + ## SDWebImage Copyright (c) 2016 Olivier Poitrey rs@dailymotion.com @@ -236,4 +881,53 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +## SwiftyDropbox + +Copyright (c) 2015 Dropbox Inc., http://www.dropbox.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +## ZIPFoundation + +MIT License + +Copyright (c) 2017 Thomas Zoechling + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist index 6b7ee66..bf6fc6f 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-acknowledgements.plist @@ -12,6 +12,35 @@ Type PSGroupSpecifier + + FooterText + Copyright (c) 2014-2018 Alamofire Software Foundation (http://alamofire.org/) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + Alamofire + Type + PSGroupSpecifier + FooterText Fabric: Copyright 2017 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2017 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt @@ -32,6 +61,652 @@ Type PSGroupSpecifier + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + License + Apache + Title + GTMSessionFetcher + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + License + Apache + Title + GoogleAPIClientForREST + Type + PSGroupSpecifier + + + FooterText + Copyright 2018 Google + License + Copyright + Title + GoogleSignIn + Type + PSGroupSpecifier + + + FooterText + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. + + License + Apache + Title + GoogleToolboxForMac + Type + PSGroupSpecifier + FooterText Copyright (c) 2016 Olivier Poitrey rs@dailymotion.com @@ -278,6 +953,67 @@ SOFTWARE. Type PSGroupSpecifier + + FooterText + Copyright (c) 2015 Dropbox Inc., http://www.dropbox.com/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + License + MIT + Title + SwiftyDropbox + Type + PSGroupSpecifier + + + FooterText + MIT License + +Copyright (c) 2017 Thomas Zoechling + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + License + MIT + Title + ZIPFoundation + Type + PSGroupSpecifier + FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh b/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh index dfdf682..766e2ee 100755 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-frameworks.sh @@ -94,7 +94,7 @@ install_dsym() { binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then strip_invalid_archs "$binary" fi @@ -109,6 +109,14 @@ install_dsym() { fi } +# Copies the bcsymbolmap files of a vendored framework +install_bcsymbolmap() { + local bcsymbolmap_path="$1" + local destination="${BUILT_PRODUCTS_DIR}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" +} + # Signs a framework with the provided identity code_sign_if_enabled() { if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then @@ -153,11 +161,15 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/DeltaCore/DeltaCore.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Roxas/Roxas.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SMCalloutView/SMCalloutView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/DeltaCore/DeltaCore.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Roxas/Roxas.framework" install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework" install_framework "${BUILT_PRODUCTS_DIR}/SMCalloutView/SMCalloutView.framework" install_framework "${BUILT_PRODUCTS_DIR}/SQLite.swift/SQLite.framework" diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh index 345301f..c4b3537 100755 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh @@ -3,10 +3,15 @@ set -e set -u set -o pipefail +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then - # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy - # resources to, so exit 0 (signalling the script phase was successful). - exit 0 + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -91,6 +96,32 @@ EOM ;; esac } +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.bundle" + install_resource "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle" + install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle" + install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTCollectionViewCell.xib" + install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTPlaceholderView.xib" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.bundle" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.bundle" + install_resource "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle" + install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle" + install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTCollectionViewCell.xib" + install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTPlaceholderView.xib" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.bundle" +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig b/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig index 677dbe5..a145057 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig @@ -1,12 +1,19 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView/SMCalloutView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView/SMCalloutView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "ImageIO" -framework "SDWebImage" -framework "SMCalloutView" -framework "SQLite" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +ALWAYS_SEARCH_USER_PATHS = YES +CLANG_ENABLE_MODULES = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleSignIn/Frameworks" +GCC_OPTIMIZATION_LEVEL = 3 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 STATIC_LIBRARY=1 STATIC_LIBRARY=1 MUPENPLUSAPI TXFILTER_LIB OS_IOS GLESX GL_ERROR_DEBUG GL_DEBUG GLESX PNG_ARM_NEON_OPT=0 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DSDeltaCore" "${PODS_ROOT}/Headers/Public/DeltaCore" "${PODS_ROOT}/Headers/Public/GBADeltaCore" "${PODS_ROOT}/Headers/Public/GBCDeltaCore" "${PODS_ROOT}/Headers/Public/GTMSessionFetcher" "${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Harmony" "${PODS_ROOT}/Headers/Public/N64DeltaCore" "${PODS_ROOT}/Headers/Public/NESDeltaCore" "${PODS_ROOT}/Headers/Public/Roxas" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SMCalloutView" "${PODS_ROOT}/Headers/Public/SNESDeltaCore" "${PODS_ROOT}/Headers/Public/SQLite.swift" "${PODS_ROOT}/Headers/Public/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/include" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/src" "${PODS_CONFIGURATION_BUILD_DIR}" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleAPIClientForREST" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Roxas" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DSDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBADeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBCDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/Harmony" -isystem "${PODS_ROOT}/Headers/Public/N64DeltaCore" -isystem "${PODS_ROOT}/Headers/Public/NESDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/SNESDeltaCore" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/GoogleSignIn/Frameworks" -DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm -fvisibility=hidden -DHAVE_CSTDINT -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -D__VEC4_OPT -fvisibility=hidden -funsigned-char -ffast-math -finline -fno-builtin -fno-common -fomit-frame-pointer -funroll-loops -fstrict-aliasing -DHAVE_STDINT_H -DARM +OTHER_LDFLAGS = $(inherited) -ObjC -Wl,-exported_symbol,_Video_PluginStartup,-exported_symbol,_Video_PluginShutdown,-exported_symbol,_Video_PluginGetVersion,-exported_symbol,_Video_RomOpen,-exported_symbol,_Video_RomClosed,-exported_symbol,_ConfigGetSharedDataFilepath,-exported_symbol,_ConfigGetUserConfigPath,-exported_symbol,_ConfigGetUserCachePath,-exported_symbol,_ConfigGetUserDataPath,-exported_symbol,_ConfigOpenSection,-exported_symbol,_ConfigDeleteSection,-exported_symbol,_ConfigSaveSection,-exported_symbol,_ConfigSaveFile,-exported_symbol,_ConfigSetDefaultInt,-exported_symbol,_ConfigSetDefaultFloat,-exported_symbol,_ConfigSetDefaultBool,-exported_symbol,_ConfigSetDefaultString,-exported_symbol,_ConfigGetParamInt,-exported_symbol,_ConfigGetParamFloat,-exported_symbol,_ConfigGetParamBool,-exported_symbol,_ConfigGetParamString,-exported_symbol,_ConfigExternalGetParameter,-exported_symbol,_ConfigExternalOpen,-exported_symbol,_ConfigExternalClose,-exported_symbol,_VidExt_Init,-exported_symbol,_VidExt_Quit,-exported_symbol,_VidExt_ListFullscreenModes,-exported_symbol,_VidExt_SetVideoMode,-exported_symbol,_VidExt_SetCaption,-exported_symbol,_VidExt_ToggleFullScreen,-exported_symbol,_VidExt_ResizeWindow,-exported_symbol,_VidExt_GL_GetProcAddress,-exported_symbol,_VidExt_GL_SetAttribute,-exported_symbol,_VidExt_GL_GetAttribute,-exported_symbol,_VidExt_GL_SwapBuffers,-exported_symbol,_ChangeWindow,-exported_symbol,_InitiateGFX,-exported_symbol,_MoveScreen,-exported_symbol,_ProcessDList,-exported_symbol,_ProcessRDPList,-exported_symbol,_ShowCFB,-exported_symbol,_UpdateScreen,-exported_symbol,_ViStatusChanged,-exported_symbol,_ViWidthChanged,-exported_symbol,_ReadScreen2,-exported_symbol,_SetRenderingCallback,-exported_symbol,_FBRead,-exported_symbol,_FBWrite,-exported_symbol,_FBGetFrameBufferInfo,-exported_symbol,_ResizeVideoOutput,-exported_symbol,_RSP_PluginStartup,-exported_symbol,_RSP_PluginShutdown,-exported_symbol,_RSP_PluginGetVersion,-exported_symbol,_DoRspCycles,-exported_symbol,_InitiateRSP,-exported_symbol,_RSP_RomClosed,-exported_symbol,_CoreGetAPIVersions,-exported_symbol,_ConfigGetParameter,-exported_symbol,_ConfigSetParameter,-exported_symbol,_CoreDoCommand -l"Alamofire" -l"DSDeltaCore" -l"DeltaCore" -l"GBADeltaCore" -l"GBCDeltaCore" -l"GTMSessionFetcher" -l"GoogleAPIClientForREST" -l"GoogleToolboxForMac" -l"Harmony" -l"N64DeltaCore" -l"NESDeltaCore" -l"Roxas" -l"SDWebImage" -l"SMCalloutView" -l"SNESDeltaCore" -l"SQLite.swift" -l"SwiftyDropbox" -l"ZIPFoundation" -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "CoreText" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "GoogleSignIn" -framework "ImageIO" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +SWIFT_ACTIVE_COMPILATION_CONDITIONS = STATIC_LIBRARY FRAMEWORK NATIVE +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/fex" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/N64DeltaCore-Video/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/SNESDeltaCore/snes9x" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta.modulemap b/Pods/Target Support Files/Pods-Delta/Pods-Delta.modulemap index ef8d3b9..1b4a40c 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta.modulemap +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta.modulemap @@ -1,4 +1,4 @@ -framework module Pods_Delta { +module Pods_Delta { umbrella header "Pods-Delta-umbrella.h" export * diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig b/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig index 677dbe5..a145057 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig @@ -1,12 +1,19 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView/SMCalloutView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView/SMCalloutView.framework/Headers" -isystem "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.framework/Headers" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" -iframework "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "ImageIO" -framework "SDWebImage" -framework "SMCalloutView" -framework "SQLite" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +ALWAYS_SEARCH_USER_PATHS = YES +CLANG_ENABLE_MODULES = NO +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleSignIn/Frameworks" +GCC_OPTIMIZATION_LEVEL = 3 +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 STATIC_LIBRARY=1 STATIC_LIBRARY=1 MUPENPLUSAPI TXFILTER_LIB OS_IOS GLESX GL_ERROR_DEBUG GL_DEBUG GLESX PNG_ARM_NEON_OPT=0 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DSDeltaCore" "${PODS_ROOT}/Headers/Public/DeltaCore" "${PODS_ROOT}/Headers/Public/GBADeltaCore" "${PODS_ROOT}/Headers/Public/GBCDeltaCore" "${PODS_ROOT}/Headers/Public/GTMSessionFetcher" "${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Harmony" "${PODS_ROOT}/Headers/Public/N64DeltaCore" "${PODS_ROOT}/Headers/Public/NESDeltaCore" "${PODS_ROOT}/Headers/Public/Roxas" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SMCalloutView" "${PODS_ROOT}/Headers/Public/SNESDeltaCore" "${PODS_ROOT}/Headers/Public/SQLite.swift" "${PODS_ROOT}/Headers/Public/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/include" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/src" "${PODS_CONFIGURATION_BUILD_DIR}" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleAPIClientForREST" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Roxas" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DSDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBADeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBCDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/Harmony" -isystem "${PODS_ROOT}/Headers/Public/N64DeltaCore" -isystem "${PODS_ROOT}/Headers/Public/NESDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/SNESDeltaCore" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/GoogleSignIn/Frameworks" -DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm -fvisibility=hidden -DHAVE_CSTDINT -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -D__VEC4_OPT -fvisibility=hidden -funsigned-char -ffast-math -finline -fno-builtin -fno-common -fomit-frame-pointer -funroll-loops -fstrict-aliasing -DHAVE_STDINT_H -DARM +OTHER_LDFLAGS = $(inherited) -ObjC -Wl,-exported_symbol,_Video_PluginStartup,-exported_symbol,_Video_PluginShutdown,-exported_symbol,_Video_PluginGetVersion,-exported_symbol,_Video_RomOpen,-exported_symbol,_Video_RomClosed,-exported_symbol,_ConfigGetSharedDataFilepath,-exported_symbol,_ConfigGetUserConfigPath,-exported_symbol,_ConfigGetUserCachePath,-exported_symbol,_ConfigGetUserDataPath,-exported_symbol,_ConfigOpenSection,-exported_symbol,_ConfigDeleteSection,-exported_symbol,_ConfigSaveSection,-exported_symbol,_ConfigSaveFile,-exported_symbol,_ConfigSetDefaultInt,-exported_symbol,_ConfigSetDefaultFloat,-exported_symbol,_ConfigSetDefaultBool,-exported_symbol,_ConfigSetDefaultString,-exported_symbol,_ConfigGetParamInt,-exported_symbol,_ConfigGetParamFloat,-exported_symbol,_ConfigGetParamBool,-exported_symbol,_ConfigGetParamString,-exported_symbol,_ConfigExternalGetParameter,-exported_symbol,_ConfigExternalOpen,-exported_symbol,_ConfigExternalClose,-exported_symbol,_VidExt_Init,-exported_symbol,_VidExt_Quit,-exported_symbol,_VidExt_ListFullscreenModes,-exported_symbol,_VidExt_SetVideoMode,-exported_symbol,_VidExt_SetCaption,-exported_symbol,_VidExt_ToggleFullScreen,-exported_symbol,_VidExt_ResizeWindow,-exported_symbol,_VidExt_GL_GetProcAddress,-exported_symbol,_VidExt_GL_SetAttribute,-exported_symbol,_VidExt_GL_GetAttribute,-exported_symbol,_VidExt_GL_SwapBuffers,-exported_symbol,_ChangeWindow,-exported_symbol,_InitiateGFX,-exported_symbol,_MoveScreen,-exported_symbol,_ProcessDList,-exported_symbol,_ProcessRDPList,-exported_symbol,_ShowCFB,-exported_symbol,_UpdateScreen,-exported_symbol,_ViStatusChanged,-exported_symbol,_ViWidthChanged,-exported_symbol,_ReadScreen2,-exported_symbol,_SetRenderingCallback,-exported_symbol,_FBRead,-exported_symbol,_FBWrite,-exported_symbol,_FBGetFrameBufferInfo,-exported_symbol,_ResizeVideoOutput,-exported_symbol,_RSP_PluginStartup,-exported_symbol,_RSP_PluginShutdown,-exported_symbol,_RSP_PluginGetVersion,-exported_symbol,_DoRspCycles,-exported_symbol,_InitiateRSP,-exported_symbol,_RSP_RomClosed,-exported_symbol,_CoreGetAPIVersions,-exported_symbol,_ConfigGetParameter,-exported_symbol,_ConfigSetParameter,-exported_symbol,_CoreDoCommand -l"Alamofire" -l"DSDeltaCore" -l"DeltaCore" -l"GBADeltaCore" -l"GBCDeltaCore" -l"GTMSessionFetcher" -l"GoogleAPIClientForREST" -l"GoogleToolboxForMac" -l"Harmony" -l"N64DeltaCore" -l"NESDeltaCore" -l"Roxas" -l"SDWebImage" -l"SMCalloutView" -l"SNESDeltaCore" -l"SQLite.swift" -l"SwiftyDropbox" -l"ZIPFoundation" -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "CoreText" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "GoogleSignIn" -framework "ImageIO" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods +SWIFT_ACTIVE_COMPILATION_CONDITIONS = STATIC_LIBRARY FRAMEWORK NATIVE +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/fex" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/N64DeltaCore-Video/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/SNESDeltaCore/snes9x" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Roxas/Roxas-Info.plist b/Pods/Target Support Files/Roxas/Roxas-Info.plist new file mode 100644 index 0000000..161a9d3 --- /dev/null +++ b/Pods/Target Support Files/Roxas/Roxas-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Roxas/Roxas-dummy.m b/Pods/Target Support Files/Roxas/Roxas-dummy.m new file mode 100644 index 0000000..bc6fd88 --- /dev/null +++ b/Pods/Target Support Files/Roxas/Roxas-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Roxas : NSObject +@end +@implementation PodsDummy_Roxas +@end diff --git a/Pods/Target Support Files/Roxas/Roxas-prefix.pch b/Pods/Target Support Files/Roxas/Roxas-prefix.pch new file mode 100644 index 0000000..3be18f8 --- /dev/null +++ b/Pods/Target Support Files/Roxas/Roxas-prefix.pch @@ -0,0 +1,36 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +// +// Roxas-Prefix.pch +// Roxas +// +// Created by Riley Testut on 12/6/14. +// Copyright (c) 2014 Riley Testut. All rights reserved. +// + +#ifndef Roxas_Roxas_Prefix_pch +#define Roxas_Roxas_Prefix_pch + +#import + +#ifndef __IPHONE_8_0 +#warning "This project uses features only available in iOS SDK 8.0 and later." +#endif + +#ifdef __OBJC__ + +#import "RSTDefines.h" + +#endif + +#endif diff --git a/Pods/Target Support Files/Roxas/Roxas-umbrella.h b/Pods/Target Support Files/Roxas/Roxas-umbrella.h new file mode 100644 index 0000000..5c944be --- /dev/null +++ b/Pods/Target Support Files/Roxas/Roxas-umbrella.h @@ -0,0 +1,68 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "NSBundle+Extensions.h" +#import "NSConstraintConflict+Conveniences.h" +#import "NSFileManager+URLs.h" +#import "NSLayoutConstraint+Edges.h" +#import "NSPredicate+Search.h" +#import "NSString+Localization.h" +#import "NSUserDefaults+DynamicProperties.h" +#import "Roxas.h" +#import "RSTActivityIndicating.h" +#import "RSTArrayDataSource.h" +#import "RSTBlockOperation.h" +#import "RSTCellContentCell.h" +#import "RSTCellContentChange.h" +#import "RSTCellContentChangeOperation.h" +#import "RSTCellContentDataSource.h" +#import "RSTCellContentPrefetchingDataSource.h" +#import "RSTCellContentView.h" +#import "RSTCollectionViewCell.h" +#import "RSTCollectionViewGridLayout.h" +#import "RSTCompositeDataSource.h" +#import "RSTConstants.h" +#import "RSTDefines.h" +#import "RSTDynamicDataSource.h" +#import "RSTError.h" +#import "RSTFetchedResultsDataSource.h" +#import "RSTHasher.h" +#import "RSTHelperFile.h" +#import "RSTLaunchViewController.h" +#import "RSTLoadOperation.h" +#import "RSTNavigationController.h" +#import "RSTNibView.h" +#import "RSTOperation.h" +#import "RSTOperationQueue.h" +#import "RSTOperation_Subclasses.h" +#import "RSTPersistentContainer.h" +#import "RSTPlaceholderView.h" +#import "RSTRelationshipPreservingMergePolicy.h" +#import "RSTSearchController.h" +#import "RSTSeparatorView.h" +#import "RSTTintedImageView.h" +#import "RSTToastView.h" +#import "UIAlertAction+Actions.h" +#import "UICollectionView+CellContent.h" +#import "UICollectionViewCell+CellContent.h" +#import "UICollectionViewCell+Nibs.h" +#import "UIImage+Manipulation.h" +#import "UIKit+ActivityIndicating.h" +#import "UISpringTimingParameters+Conveniences.h" +#import "UITableView+CellContent.h" +#import "UITableViewCell+CellContent.h" +#import "UIView+AnimatedHide.h" +#import "UIViewController+TransitionState.h" + +FOUNDATION_EXPORT double RoxasVersionNumber; +FOUNDATION_EXPORT const unsigned char RoxasVersionString[]; + diff --git a/Pods/Target Support Files/Roxas/Roxas.modulemap b/Pods/Target Support Files/Roxas/Roxas.modulemap new file mode 100644 index 0000000..f347483 --- /dev/null +++ b/Pods/Target Support Files/Roxas/Roxas.modulemap @@ -0,0 +1,6 @@ +module Roxas { + umbrella header "Roxas-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/Roxas/Roxas.xcconfig b/Pods/Target Support Files/Roxas/Roxas.xcconfig new file mode 100644 index 0000000..973270e --- /dev/null +++ b/Pods/Target Support Files/Roxas/Roxas.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Roxas +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/Roxas" "${PODS_ROOT}/Headers/Public" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../External/Roxas +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap b/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap index 91545be..94f6a48 100644 --- a/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap +++ b/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap @@ -1,4 +1,4 @@ -framework module SDWebImage { +module SDWebImage { umbrella header "SDWebImage-umbrella.h" export * diff --git a/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig b/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig index fa0bf57..853db56 100644 --- a/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig +++ b/Pods/Target Support Files/SDWebImage/SDWebImage.xcconfig @@ -1,9 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "ImageIO" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SDWebImage" "${PODS_ROOT}/Headers/Public" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SDWebImage PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap b/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap index 72f1d32..feecb46 100644 --- a/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView.modulemap @@ -1,4 +1,4 @@ -framework module SMCalloutView { +module SMCalloutView { umbrella header "SMCalloutView-umbrella.h" export * diff --git a/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig b/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig index d5ad8e7..96a609e 100644 --- a/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig +++ b/Pods/Target Support Files/SMCalloutView/SMCalloutView.xcconfig @@ -1,8 +1,10 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SMCalloutView" "${PODS_ROOT}/Headers/Public" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SMCalloutView PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SNESDeltaCore/ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist b/Pods/Target Support Files/SNESDeltaCore/ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/SNESDeltaCore/ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-dummy.m b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-dummy.m new file mode 100644 index 0000000..cd523d0 --- /dev/null +++ b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SNESDeltaCore : NSObject +@end +@implementation PodsDummy_SNESDeltaCore +@end diff --git a/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-prefix.pch b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-umbrella.h b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-umbrella.h new file mode 100644 index 0000000..dd50252 --- /dev/null +++ b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "SNESDeltaCore/Types/SNESTypes.h" +#import "SNESDeltaCore/Bridge/SNESEmulatorBridge.h" + +FOUNDATION_EXPORT double SNESDeltaCoreVersionNumber; +FOUNDATION_EXPORT const unsigned char SNESDeltaCoreVersionString[]; + diff --git a/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore.modulemap b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore.modulemap new file mode 100644 index 0000000..4750def --- /dev/null +++ b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore.modulemap @@ -0,0 +1,6 @@ +module SNESDeltaCore { + umbrella header "SNESDeltaCore-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore.xcconfig b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore.xcconfig new file mode 100644 index 0000000..126b750 --- /dev/null +++ b/Pods/Target Support Files/SNESDeltaCore/SNESDeltaCore.xcconfig @@ -0,0 +1,14 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SNESDeltaCore" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -funsigned-char -ffast-math -finline -fno-builtin -fno-common -fomit-frame-pointer -funroll-loops -fstrict-aliasing -DHAVE_STDINT_H -DARM +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../Cores/SNESDeltaCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/SNESDeltaCore/snes9x" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SQLite.swift/SQLite.swift-umbrella.h b/Pods/Target Support Files/SQLite.swift/SQLite.swift-umbrella.h index 3052d2c..d2be3ef 100644 --- a/Pods/Target Support Files/SQLite.swift/SQLite.swift-umbrella.h +++ b/Pods/Target Support Files/SQLite.swift/SQLite.swift-umbrella.h @@ -11,7 +11,7 @@ #endif #import "SQLite.h" -#import "SQLite-Bridging.h" +#import "SQLiteObjc.h" FOUNDATION_EXPORT double SQLiteVersionNumber; FOUNDATION_EXPORT const unsigned char SQLiteVersionString[]; diff --git a/Pods/Target Support Files/SQLite.swift/SQLite.swift.modulemap b/Pods/Target Support Files/SQLite.swift/SQLite.swift.modulemap index e835c30..ba9d381 100644 --- a/Pods/Target Support Files/SQLite.swift/SQLite.swift.modulemap +++ b/Pods/Target Support Files/SQLite.swift/SQLite.swift.modulemap @@ -1,4 +1,4 @@ -framework module SQLite { +module SQLite { umbrella header "SQLite.swift-umbrella.h" export * diff --git a/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig b/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig index 6adf47f..bb5b95d 100644 --- a/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig +++ b/Pods/Target Support Files/SQLite.swift/SQLite.swift.xcconfig @@ -1,11 +1,11 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -l"sqlite3" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SQLite.swift" "${PODS_ROOT}/Headers/Public" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/SQLite.swift PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES -SWIFT_VERSION = 4.2 +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-dummy.m b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-dummy.m new file mode 100644 index 0000000..63dca0d --- /dev/null +++ b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_SwiftyDropbox : NSObject +@end +@implementation PodsDummy_SwiftyDropbox +@end diff --git a/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-umbrella.h b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-umbrella.h new file mode 100644 index 0000000..981ee8f --- /dev/null +++ b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "DBChunkInputStream.h" +#import "SwiftyDropbox.h" + +FOUNDATION_EXPORT double SwiftyDropboxVersionNumber; +FOUNDATION_EXPORT const unsigned char SwiftyDropboxVersionString[]; + diff --git a/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox.modulemap b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox.modulemap new file mode 100644 index 0000000..75692f7 --- /dev/null +++ b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox.modulemap @@ -0,0 +1,6 @@ +module SwiftyDropbox { + umbrella header "SwiftyDropbox-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox.xcconfig b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox.xcconfig new file mode 100644 index 0000000..4ffec51 --- /dev/null +++ b/Pods/Target Support Files/SwiftyDropbox/SwiftyDropbox.xcconfig @@ -0,0 +1,13 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/SwiftyDropbox" "${PODS_ROOT}/Headers/Public" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftyDropbox +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-dummy.m b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-dummy.m new file mode 100644 index 0000000..f29e071 --- /dev/null +++ b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_ZIPFoundation : NSObject +@end +@implementation PodsDummy_ZIPFoundation +@end diff --git a/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-umbrella.h b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-umbrella.h new file mode 100644 index 0000000..442597c --- /dev/null +++ b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double ZIPFoundationVersionNumber; +FOUNDATION_EXPORT const unsigned char ZIPFoundationVersionString[]; + diff --git a/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.modulemap b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.modulemap new file mode 100644 index 0000000..0325bc4 --- /dev/null +++ b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.modulemap @@ -0,0 +1,6 @@ +module ZIPFoundation { + umbrella header "ZIPFoundation-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.xcconfig b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.xcconfig new file mode 100644 index 0000000..aba4a6f --- /dev/null +++ b/Pods/Target Support Files/ZIPFoundation/ZIPFoundation.xcconfig @@ -0,0 +1,10 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/ZIPFoundation +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/ZIPFoundation/LICENSE b/Pods/ZIPFoundation/LICENSE new file mode 100644 index 0000000..e961fa9 --- /dev/null +++ b/Pods/ZIPFoundation/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Thomas Zoechling + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Pods/ZIPFoundation/README.md b/Pods/ZIPFoundation/README.md new file mode 100644 index 0000000..789f6a7 --- /dev/null +++ b/Pods/ZIPFoundation/README.md @@ -0,0 +1,276 @@ + + +[![Swift Package Manager compatible](https://img.shields.io/badge/SPM-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager) +[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) +[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/ZIPFoundation.svg)](https://cocoapods.org/pods/ZIPFoundation) +[![Platform](https://img.shields.io/badge/Platforms-macOS%20|%20iOS%20|%20tvOS%20|%20watchOS%20|%20Linux-lightgrey.svg)](https://github.com/weichsel/ZIPFoundation) +[![Twitter](https://img.shields.io/badge/twitter-@weichsel-blue.svg?style=flat)](http://twitter.com/weichsel) + +ZIP Foundation is a library to create, read and modify ZIP archive files. +It is written in Swift and based on [Apple's libcompression](https://developer.apple.com/documentation/compression/data_compression) for high performance and energy efficiency. +To learn more about the performance characteristics of the framework, you can read [this blog post](https://thomas.zoechling.me/journal/2017/07/ZIPFoundation.html). + +- [Features](#features) +- [Requirements](#requirements) +- [Installation](#installation) +- [Usage](#usage) + - [Zipping Files and Directories](#zipping-files-and-directories) + - [Unzipping Archives](#unzipping-archives) +- [Advanced Usage](#advanced-usage) + - [Accessing individual Entries](#accessing-individual-entries) + - [Creating Archives](#creating-archives) + - [Adding and Removing Entries](#adding-and-removing-entries) + - [Closure based Reading and Writing](#closure-based-reading-and-writing) + - [Progress Tracking and Cancellation](#progress-tracking-and-cancellation) +- [Credits](#credits) +- [License](#license) + +## Features + +- [x] Modern Swift API +- [x] High Performance Compression and Decompression +- [x] Deterministic Memory Consumption +- [x] Linux compatibility +- [x] No 3rd party dependencies (on Apple platforms, zlib on Linux) +- [x] Comprehensive Unit and Performance Test Coverage +- [x] Complete Documentation + +## Requirements + +- iOS 9.0+ / macOS 10.11+ / tvOS 9.0+ / watchOS 2.0+ +- Or Linux with zlib development package +- Xcode 10.0 +- Swift 4.0 + +## Installation + +### Swift Package Manager +Swift Package Manager is a dependency manager currently under active development. To learn how to use the Swift Package Manager for your project, please read the [official documentation](https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md). +To add ZIP Foundation as a dependency, you have to add it to the `dependencies` of your `Package.swift` file and refer to that dependency in your `target`. + +```swift +// swift-tools-version:5.0 +import PackageDescription +let package = Package( + name: "", + dependencies: [ + .package(url: "https://github.com/weichsel/ZIPFoundation/", .upToNextMajor(from: "0.9.0")) + ], + targets: [ + .target( + name: "", + dependencies: ["ZIPFoundation"]), + ] +) +``` + +After adding the dependency, you can fetch the library with: + +```bash +$ swift package resolve +``` + +### Carthage + +[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager. +Installation instructions can be found in the project's [README file](https://github.com/Carthage/Carthage#installing-carthage). + +To integrate ZIPFoundation into your Xcode project using Carthage, you have to add it to your `Cartfile`: + +```ogdl +github "weichsel/ZIPFoundation" ~> 0.9 +``` + +After adding ZIPFoundation to the `Cartfile`, you have to fetch the sources by running: + +```bash +carthage update --no-build +``` + +The fetched project has to be integrated into your workspace by dragging `ZIPFoundation.xcodeproj` to Xcode's Project Navigator. (See [official Carhage docs](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application).) + +### CocoaPods + +CocoaPods is a dependency manager for Objective-C and Swift. +To learn more about setting up your project for CocoaPods, please refer to the [official documentation](https://cocoapods.org/#install). +To integrate ZIP Foundation into your Xcode project using CocoaPods, you have to add it to your project's `Podfile`: + +```ruby +source 'https://github.com/CocoaPods/Specs.git' +platform :ios, '10.0' +use_frameworks! +target '' do + pod 'ZIPFoundation', '~> 0.9' +end +``` + +Afterwards, run the following command: + +```bash +$ pod install +``` + +## Usage +ZIP Foundation provides two high level methods to zip and unzip items. Both are implemented as extension of `FileManager`. +The functionality of those methods is modeled after the behavior of the Archive Utility in macOS. + +### Zipping Files and Directories +To zip a single file you simply pass a file URL representing the item you want to zip and a destination URL to `FileManager.zipItem(at sourceURL: URL, to destinationURL: URL)`: + +```swift +let fileManager = FileManager() +let currentWorkingPath = fileManager.currentDirectoryPath +var sourceURL = URL(fileURLWithPath: currentWorkingPath) +sourceURL.appendPathComponent("file.txt") +var destinationURL = URL(fileURLWithPath: currentWorkingPath) +destinationURL.appendPathComponent("archive.zip") +do { + try fileManager.zipItem(at: sourceURL, to: destinationURL) +} catch { + print("Creation of ZIP archive failed with error:\(error)") +} +``` + +The same method also accepts URLs that represent directory items. In that case, `zipItem` adds the directory content of `sourceURL` to the archive. +By default, a root directory entry named after the `lastPathComponent` of the `sourceURL` is added to the destination archive. If you don't want to preserve the parent directory of the source in your archive, you can pass `shouldKeepParent: false`. + +### Unzipping Archives +To unzip existing archives, you can use `FileManager.unzipItem(at sourceURL: URL, to destinationURL: URL)`. +This recursively extracts all entries within the archive to the destination URL: + +```swift +let fileManager = FileManager() +let currentWorkingPath = fileManager.currentDirectoryPath +var sourceURL = URL(fileURLWithPath: currentWorkingPath) +sourceURL.appendPathComponent("archive.zip") +var destinationURL = URL(fileURLWithPath: currentWorkingPath) +destinationURL.appendPathComponent("directory") +do { + try fileManager.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil) + try fileManager.unzipItem(at: sourceURL, to: destinationURL) +} catch { + print("Extraction of ZIP archive failed with error:\(error)") +} +``` + +## Advanced Usage +ZIP Foundation also allows you to individually access specific entries without the need to extract the whole archive. Additionally it comes with the ability to incrementally update archive contents. + +### Accessing individual Entries +To gain access to specific ZIP entries, you have to initialize an `Archive` object with a file URL that represents an existing archive. After doing that, entries can be retrieved via their relative path. `Archive` conforms to `Sequence` and therefore supports subscripting: + +```swift +let fileManager = FileManager() +let currentWorkingPath = fileManager.currentDirectoryPath +var archiveURL = URL(fileURLWithPath: currentWorkingPath) +archiveURL.appendPathComponent("archive.zip") +guard let archive = Archive(url: archiveURL, accessMode: .read) else { + return +} +guard let entry = archive["file.txt"] else { + return +} +var destinationURL = URL(fileURLWithPath: currentWorkingPath) +destinationURL.appendPathComponent("out.txt") +do { + try archive.extract(entry, to: destinationURL) +} catch { + print("Extracting entry from archive failed with error:\(error)") +} +``` + +The `extract` method accepts optional parameters that allow you to control compression and memory consumption. +You can find detailed information about that parameters in the method's documentation. + +### Creating Archives +To create a new `Archive`, pass in a non-existing file URL and `AccessMode.create`. + +```swift +let currentWorkingPath = fileManager.currentDirectoryPath +var archiveURL = URL(fileURLWithPath: currentWorkingPath) +archiveURL.appendPathComponent("newArchive.zip") +guard let archive = Archive(url: archiveURL, accessMode: .create) else { + return +} +``` + +### Adding and Removing Entries +You can add or remove entries to/from archives that have been opened with `.create` or `.update` `AccessMode`. +To add an entry from an existing file, you can pass a relative path and a base URL to `addEntry`. The relative path identifies the +entry within the ZIP archive. The relative path and the base URL must form an absolute file URL that points to the file you want to add to +the archive: + +```swift +let fileManager = FileManager() +let currentWorkingPath = fileManager.currentDirectoryPath +var archiveURL = URL(fileURLWithPath: currentWorkingPath) +archiveURL.appendPathComponent("archive.zip") +guard let archive = Archive(url: archiveURL, accessMode: .update) else { + return +} +var fileURL = URL(fileURLWithPath: currentWorkingPath) +fileURL.appendPathComponent("file.txt") +do { + try archive.addEntry(with: fileURL.lastPathComponent, relativeTo: fileURL.deletingLastPathComponent()) +} catch { + print("Adding entry to ZIP archive failed with error:\(error)") +} +``` + +The `addEntry` method accepts several optional parameters that allow you to control compression, memory consumption and file attributes. +You can find detailed information about that parameters in the method's documentation. + +To remove an entry, you need a reference to an entry within an archive that you can pass to `removeEntry`: + +```swift +guard let entry = archive["file.txt"] else { + return +} +do { + try archive.remove(entry) +} catch { + print("Removing entry from ZIP archive failed with error:\(error)") +} +``` + +### Closure based Reading and Writing +ZIP Foundation also allows you to consume ZIP entry contents without writing them to the file system. +The `extract` method accepts a closure of type `Consumer`. This closure is called during extraction until the contents of an entry are exhausted: + +```swift +try archive.extract(entry, consumer: { (data) in + print(data.count) +}) +``` +The `data` passed into the closure contains chunks of the current entry. You can control the chunk size of the entry by providing the optional `bufferSize` parameter. + +You can also add entries from an in-memory data source. To do this you have to provide a closure of type `Provider` to the `addEntry` method: + +```swift +guard let data = "abcdefghijkl".data(using: .utf8) else { return } +try? archive.addEntry(with: "fromMemory.txt", type: .file, uncompressedSize: 12, bufferSize: 4, provider: { (position, size) -> Data in + // This will be called until `data` is exhausted (3x in this case). + return data.subdata(in: position.. CRC32 { + let fileManager = FileManager() + var checksum = CRC32(0) + switch entry.type { + case .file: + guard !fileManager.itemExists(at: url) else { + throw CocoaError(.fileWriteFileExists, userInfo: [NSFilePathErrorKey: url.path]) + } + try fileManager.createParentDirectoryStructure(for: url) + let destinationRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + guard let destinationFile: UnsafeMutablePointer = fopen(destinationRepresentation, "wb+") else { + throw CocoaError(.fileNoSuchFile) + } + defer { fclose(destinationFile) } + let consumer = { _ = try Data.write(chunk: $0, to: destinationFile) } + checksum = try self.extract(entry, bufferSize: bufferSize, skipCRC32: skipCRC32, + progress: progress, consumer: consumer) + case .directory: + let consumer = { (_: Data) in + try fileManager.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil) + } + checksum = try self.extract(entry, bufferSize: bufferSize, skipCRC32: skipCRC32, + progress: progress, consumer: consumer) + case .symlink: + guard !fileManager.itemExists(at: url) else { + throw CocoaError(.fileWriteFileExists, userInfo: [NSFilePathErrorKey: url.path]) + } + let consumer = { (data: Data) in + guard let linkPath = String(data: data, encoding: .utf8) else { throw ArchiveError.invalidEntryPath } + try fileManager.createParentDirectoryStructure(for: url) + try fileManager.createSymbolicLink(atPath: url.path, withDestinationPath: linkPath) + } + checksum = try self.extract(entry, bufferSize: bufferSize, skipCRC32: skipCRC32, + progress: progress, consumer: consumer) + } + let attributes = FileManager.attributes(from: entry) + try fileManager.setAttributes(attributes, ofItemAtPath: url.path) + return checksum + } + + /// Read a ZIP `Entry` from the receiver and forward its contents to a `Consumer` closure. + /// + /// - Parameters: + /// - entry: The ZIP `Entry` to read. + /// - bufferSize: The maximum size of the read buffer and the decompression buffer (if needed). + /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to speed up performance. + /// - progress: A progress object that can be used to track or cancel the extract operation. + /// - consumer: A closure that consumes contents of `Entry` as `Data` chunks. + /// - Returns: The checksum of the processed content or 0 if the `skipCRC32` flag was set to `true`.. + /// - Throws: An error if the destination file cannot be written or the entry contains malformed content. + public func extract(_ entry: Entry, bufferSize: UInt32 = defaultReadChunkSize, skipCRC32: Bool = false, + progress: Progress? = nil, consumer: Consumer) throws -> CRC32 { + var checksum = CRC32(0) + let localFileHeader = entry.localFileHeader + fseek(self.archiveFile, entry.dataOffset, SEEK_SET) + progress?.totalUnitCount = self.totalUnitCountForReading(entry) + switch entry.type { + case .file: + guard let compressionMethod = CompressionMethod(rawValue: localFileHeader.compressionMethod) else { + throw ArchiveError.invalidCompressionMethod + } + switch compressionMethod { + case .none: checksum = try self.readUncompressed(entry: entry, bufferSize: bufferSize, + skipCRC32: skipCRC32, progress: progress, with: consumer) + case .deflate: checksum = try self.readCompressed(entry: entry, bufferSize: bufferSize, + skipCRC32: skipCRC32, progress: progress, with: consumer) + } + case .directory: + try consumer(Data()) + progress?.completedUnitCount = self.totalUnitCountForReading(entry) + case .symlink: + let localFileHeader = entry.localFileHeader + let size = Int(localFileHeader.compressedSize) + let data = try Data.readChunk(of: size, from: self.archiveFile) + checksum = data.crc32(checksum: 0) + try consumer(data) + progress?.completedUnitCount = self.totalUnitCountForReading(entry) + } + return checksum + } + + // MARK: - Helpers + + private func readUncompressed(entry: Entry, bufferSize: UInt32, skipCRC32: Bool, + progress: Progress? = nil, with consumer: Consumer) throws -> CRC32 { + let size = Int(entry.centralDirectoryStructure.uncompressedSize) + return try Data.consumePart(of: size, chunkSize: Int(bufferSize), skipCRC32: skipCRC32, + provider: { (_, chunkSize) -> Data in + return try Data.readChunk(of: Int(chunkSize), from: self.archiveFile) + }, consumer: { (data) in + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + try consumer(data) + progress?.completedUnitCount += Int64(data.count) + }) + } + + private func readCompressed(entry: Entry, bufferSize: UInt32, skipCRC32: Bool, + progress: Progress? = nil, with consumer: Consumer) throws -> CRC32 { + let size = Int(entry.centralDirectoryStructure.compressedSize) + return try Data.decompress(size: size, bufferSize: Int(bufferSize), skipCRC32: skipCRC32, + provider: { (_, chunkSize) -> Data in + return try Data.readChunk(of: chunkSize, from: self.archiveFile) + }, consumer: { (data) in + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + try consumer(data) + progress?.completedUnitCount += Int64(data.count) + }) + } +} diff --git a/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift b/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift new file mode 100644 index 0000000..fedd9f5 --- /dev/null +++ b/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive+Writing.swift @@ -0,0 +1,353 @@ +// +// Archive+Writing.swift +// ZIPFoundation +// +// Copyright © 2017-2019 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +extension Archive { + private enum ModifyOperation: Int { + case remove = -1 + case add = 1 + } + + /// Write files, directories or symlinks to the receiver. + /// + /// - Parameters: + /// - path: The path that is used to identify an `Entry` within the `Archive` file. + /// - baseURL: The base URL of the `Entry` to add. + /// The `baseURL` combined with `path` must form a fully qualified file URL. + /// - compressionMethod: Indicates the `CompressionMethod` that should be applied to `Entry`. + /// - bufferSize: The maximum size of the write buffer and the compression buffer (if needed). + /// - progress: A progress object that can be used to track or cancel the add operation. + /// - Throws: An error if the source file cannot be read or the receiver is not writable. + public func addEntry(with path: String, relativeTo baseURL: URL, compressionMethod: CompressionMethod = .none, + bufferSize: UInt32 = defaultWriteChunkSize, progress: Progress? = nil) throws { + let fileManager = FileManager() + let entryURL = baseURL.appendingPathComponent(path) + guard fileManager.itemExists(at: entryURL) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: entryURL.path]) + } + let type = try FileManager.typeForItem(at: entryURL) + // symlinks do not need to be readable + guard type == .symlink || fileManager.isReadableFile(atPath: entryURL.path) else { + throw CocoaError(.fileReadNoPermission, userInfo: [NSFilePathErrorKey: url.path]) + } + let modDate = try FileManager.fileModificationDateTimeForItem(at: entryURL) + let uncompressedSize = type == .directory ? 0 : try FileManager.fileSizeForItem(at: entryURL) + let permissions = try FileManager.permissionsForItem(at: entryURL) + var provider: Provider + switch type { + case .file: + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: entryURL.path) + guard let entryFile: UnsafeMutablePointer = fopen(entryFileSystemRepresentation, "rb") else { + throw CocoaError(.fileNoSuchFile) + } + defer { fclose(entryFile) } + provider = { _, _ in return try Data.readChunk(of: Int(bufferSize), from: entryFile) } + try self.addEntry(with: path, type: type, uncompressedSize: uncompressedSize, + modificationDate: modDate, permissions: permissions, + compressionMethod: compressionMethod, bufferSize: bufferSize, + progress: progress, provider: provider) + case .directory: + provider = { _, _ in return Data() } + try self.addEntry(with: path.hasSuffix("/") ? path : path + "/", + type: type, uncompressedSize: uncompressedSize, + modificationDate: modDate, permissions: permissions, + compressionMethod: compressionMethod, bufferSize: bufferSize, + progress: progress, provider: provider) + case .symlink: + provider = { _, _ -> Data in + let linkDestination = try fileManager.destinationOfSymbolicLink(atPath: entryURL.path) + let linkFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: linkDestination) + let linkLength = Int(strlen(linkFileSystemRepresentation)) + let linkBuffer = UnsafeBufferPointer(start: linkFileSystemRepresentation, count: linkLength) + return Data(buffer: linkBuffer) + } + try self.addEntry(with: path, type: type, uncompressedSize: uncompressedSize, + modificationDate: modDate, permissions: permissions, + compressionMethod: compressionMethod, bufferSize: bufferSize, + progress: progress, provider: provider) + } + } + + /// Write files, directories or symlinks to the receiver. + /// + /// - Parameters: + /// - path: The path that is used to identify an `Entry` within the `Archive` file. + /// - type: Indicates the `Entry.EntryType` of the added content. + /// - uncompressedSize: The uncompressed size of the data that is going to be added with `provider`. + /// - modificationDate: A `Date` describing the file modification date of the `Entry`. + /// Default is the current `Date`. + /// - permissions: POSIX file permissions for the `Entry`. + /// Default is `0`o`644` for files and symlinks and `0`o`755` for directories. + /// - compressionMethod: Indicates the `CompressionMethod` that should be applied to `Entry`. + /// - bufferSize: The maximum size of the write buffer and the compression buffer (if needed). + /// - progress: A progress object that can be used to track or cancel the add operation. + /// - provider: A closure that accepts a position and a chunk size. Returns a `Data` chunk. + /// - Throws: An error if the source data is invalid or the receiver is not writable. + public func addEntry(with path: String, type: Entry.EntryType, uncompressedSize: UInt32, + modificationDate: Date = Date(), permissions: UInt16? = nil, + compressionMethod: CompressionMethod = .none, bufferSize: UInt32 = defaultWriteChunkSize, + progress: Progress? = nil, provider: Provider) throws { + guard self.accessMode != .read else { throw ArchiveError.unwritableArchive } + progress?.totalUnitCount = type == .directory ? defaultDirectoryUnitCount : Int64(uncompressedSize) + var endOfCentralDirRecord = self.endOfCentralDirectoryRecord + var startOfCD = Int(endOfCentralDirRecord.offsetToStartOfCentralDirectory) + var existingCentralDirData = Data() + fseek(self.archiveFile, startOfCD, SEEK_SET) + existingCentralDirData = try Data.readChunk(of: Int(endOfCentralDirRecord.sizeOfCentralDirectory), + from: self.archiveFile) + fseek(self.archiveFile, startOfCD, SEEK_SET) + let localFileHeaderStart = ftell(self.archiveFile) + let modDateTime = modificationDate.fileModificationDateTime + defer { fflush(self.archiveFile) } + do { + var localFileHeader = try self.writeLocalFileHeader(path: path, compressionMethod: compressionMethod, + size: (uncompressedSize, 0), checksum: 0, + modificationDateTime: modDateTime) + let (written, checksum) = try self.writeEntry(localFileHeader: localFileHeader, type: type, + compressionMethod: compressionMethod, bufferSize: bufferSize, + progress: progress, provider: provider) + startOfCD = ftell(self.archiveFile) + fseek(self.archiveFile, localFileHeaderStart, SEEK_SET) + // Write the local file header a second time. Now with compressedSize (if applicable) and a valid checksum. + localFileHeader = try self.writeLocalFileHeader(path: path, compressionMethod: compressionMethod, + size: (uncompressedSize, written), + checksum: checksum, modificationDateTime: modDateTime) + fseek(self.archiveFile, startOfCD, SEEK_SET) + _ = try Data.write(chunk: existingCentralDirData, to: self.archiveFile) + let permissions = permissions ?? (type == .directory ? defaultDirectoryPermissions :defaultFilePermissions) + let externalAttributes = FileManager.externalFileAttributesForEntry(of: type, permissions: permissions) + let offset = UInt32(localFileHeaderStart) + let centralDir = try self.writeCentralDirectoryStructure(localFileHeader: localFileHeader, + relativeOffset: offset, + externalFileAttributes: externalAttributes) + if startOfCD > UINT32_MAX { throw ArchiveError.invalidStartOfCentralDirectoryOffset } + endOfCentralDirRecord = try self.writeEndOfCentralDirectory(centralDirectoryStructure: centralDir, + startOfCentralDirectory: UInt32(startOfCD), + operation: .add) + self.endOfCentralDirectoryRecord = endOfCentralDirRecord + } catch ArchiveError.cancelledOperation { + try rollback(localFileHeaderStart, existingCentralDirData, endOfCentralDirRecord) + throw ArchiveError.cancelledOperation + } + } + + /// Remove a ZIP `Entry` from the receiver. + /// + /// - Parameters: + /// - entry: The `Entry` to remove. + /// - bufferSize: The maximum size for the read and write buffers used during removal. + /// - progress: A progress object that can be used to track or cancel the remove operation. + /// - Throws: An error if the `Entry` is malformed or the receiver is not writable. + public func remove(_ entry: Entry, bufferSize: UInt32 = defaultReadChunkSize, progress: Progress? = nil) throws { + let manager = FileManager() + let tempDir = self.uniqueTemporaryDirectoryURL() + defer { try? manager.removeItem(at: tempDir) } + let uniqueString = ProcessInfo.processInfo.globallyUniqueString + let tempArchiveURL = tempDir.appendingPathComponent(uniqueString) + do { try manager.createParentDirectoryStructure(for: tempArchiveURL) } catch { + throw ArchiveError.unwritableArchive } + guard let tempArchive = Archive(url: tempArchiveURL, accessMode: .create) else { + throw ArchiveError.unwritableArchive + } + progress?.totalUnitCount = self.totalUnitCountForRemoving(entry) + var centralDirectoryData = Data() + var offset = 0 + for currentEntry in self { + let centralDirectoryStructure = currentEntry.centralDirectoryStructure + if currentEntry != entry { + let entryStart = Int(currentEntry.centralDirectoryStructure.relativeOffsetOfLocalHeader) + fseek(self.archiveFile, entryStart, SEEK_SET) + let provider: Provider = { (_, chunkSize) -> Data in + return try Data.readChunk(of: Int(chunkSize), from: self.archiveFile) + } + let consumer: Consumer = { + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + _ = try Data.write(chunk: $0, to: tempArchive.archiveFile) + progress?.completedUnitCount += Int64($0.count) + } + _ = try Data.consumePart(of: Int(currentEntry.localSize), chunkSize: Int(bufferSize), + provider: provider, consumer: consumer) + let centralDir = CentralDirectoryStructure(centralDirectoryStructure: centralDirectoryStructure, + offset: UInt32(offset)) + centralDirectoryData.append(centralDir.data) + } else { offset = currentEntry.localSize } + } + let startOfCentralDirectory = ftell(tempArchive.archiveFile) + _ = try Data.write(chunk: centralDirectoryData, to: tempArchive.archiveFile) + tempArchive.endOfCentralDirectoryRecord = self.endOfCentralDirectoryRecord + let endOfCentralDirectoryRecord = try + tempArchive.writeEndOfCentralDirectory(centralDirectoryStructure: entry.centralDirectoryStructure, + startOfCentralDirectory: UInt32(startOfCentralDirectory), + operation: .remove) + tempArchive.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord + self.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord + fflush(tempArchive.archiveFile) + try self.replaceCurrentArchiveWithArchive(at: tempArchive.url) + } + + // MARK: - Helpers + + func uniqueTemporaryDirectoryURL() -> URL { + #if swift(>=5.0) || os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + if let tempDir = try? FileManager().url(for: .itemReplacementDirectory, in: .userDomainMask, + appropriateFor: self.url, create: true) { + return tempDir + } + #endif + + return URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent( + ProcessInfo.processInfo.globallyUniqueString) + } + + func replaceCurrentArchiveWithArchive(at URL: URL) throws { + fclose(self.archiveFile) + let fileManager = FileManager() + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + do { + _ = try fileManager.replaceItemAt(self.url, withItemAt: URL) + } catch { + _ = try fileManager.removeItem(at: self.url) + _ = try fileManager.moveItem(at: URL, to: self.url) + } + #else + _ = try fileManager.removeItem(at: self.url) + _ = try fileManager.moveItem(at: URL, to: self.url) + #endif + let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: self.url.path) + self.archiveFile = fopen(fileSystemRepresentation, "rb+") + } + + private func writeLocalFileHeader(path: String, compressionMethod: CompressionMethod, + size: (uncompressed: UInt32, compressed: UInt32), + checksum: CRC32, + modificationDateTime: (UInt16, UInt16)) throws -> LocalFileHeader { + let fileManager = FileManager() + let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: path) + let fileNameLength = Int(strlen(fileSystemRepresentation)) + let fileNameBuffer = UnsafeBufferPointer(start: fileSystemRepresentation, count: fileNameLength) + let fileNameData = Data(buffer: fileNameBuffer) + let localFileHeader = LocalFileHeader(versionNeededToExtract: UInt16(20), generalPurposeBitFlag: UInt16(2048), + compressionMethod: compressionMethod.rawValue, + lastModFileTime: modificationDateTime.1, + lastModFileDate: modificationDateTime.0, crc32: checksum, + compressedSize: size.compressed, uncompressedSize: size.uncompressed, + fileNameLength: UInt16(fileNameLength), extraFieldLength: UInt16(0), + fileNameData: fileNameData, extraFieldData: Data()) + _ = try Data.write(chunk: localFileHeader.data, to: self.archiveFile) + return localFileHeader + } + + private func writeEntry(localFileHeader: LocalFileHeader, type: Entry.EntryType, + compressionMethod: CompressionMethod, bufferSize: UInt32, progress: Progress? = nil, + provider: Provider) throws -> (sizeWritten: UInt32, crc32: CRC32) { + var checksum = CRC32(0) + var sizeWritten = UInt32(0) + switch type { + case .file: + switch compressionMethod { + case .none: + (sizeWritten, checksum) = try self.writeUncompressed(size: localFileHeader.uncompressedSize, + bufferSize: bufferSize, + progress: progress, provider: provider) + case .deflate: + (sizeWritten, checksum) = try self.writeCompressed(size: localFileHeader.uncompressedSize, + bufferSize: bufferSize, + progress: progress, provider: provider) + } + case .directory: + _ = try provider(0, 0) + if let progress = progress { progress.completedUnitCount = progress.totalUnitCount } + case .symlink: + (sizeWritten, checksum) = try self.writeSymbolicLink(size: localFileHeader.uncompressedSize, + provider: provider) + if let progress = progress { progress.completedUnitCount = progress.totalUnitCount } + } + return (sizeWritten, checksum) + } + + private func writeUncompressed(size: UInt32, bufferSize: UInt32, progress: Progress? = nil, + provider: Provider) throws -> (sizeWritten: UInt32, checksum: CRC32) { + var position = 0 + var sizeWritten = 0 + var checksum = CRC32(0) + while position < size { + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + let readSize = (Int(size) - position) >= bufferSize ? Int(bufferSize) : (Int(size) - position) + let entryChunk = try provider(Int(position), Int(readSize)) + checksum = entryChunk.crc32(checksum: checksum) + sizeWritten += try Data.write(chunk: entryChunk, to: self.archiveFile) + position += Int(bufferSize) + progress?.completedUnitCount = Int64(sizeWritten) + } + return (UInt32(sizeWritten), checksum) + } + + private func writeCompressed(size: UInt32, bufferSize: UInt32, progress: Progress? = nil, + provider: Provider) throws -> (sizeWritten: UInt32, checksum: CRC32) { + var sizeWritten = 0 + let consumer: Consumer = { data in sizeWritten += try Data.write(chunk: data, to: self.archiveFile) } + let checksum = try Data.compress(size: Int(size), bufferSize: Int(bufferSize), + provider: { (position, size) -> Data in + if progress?.isCancelled == true { throw ArchiveError.cancelledOperation } + let data = try provider(position, size) + progress?.completedUnitCount += Int64(data.count) + return data + }, consumer: consumer) + return(UInt32(sizeWritten), checksum) + } + + private func writeSymbolicLink(size: UInt32, provider: Provider) throws -> (sizeWritten: UInt32, checksum: CRC32) { + let linkData = try provider(0, Int(size)) + let checksum = linkData.crc32(checksum: 0) + let sizeWritten = try Data.write(chunk: linkData, to: self.archiveFile) + return (UInt32(sizeWritten), checksum) + } + + private func writeCentralDirectoryStructure(localFileHeader: LocalFileHeader, relativeOffset: UInt32, + externalFileAttributes: UInt32) throws -> CentralDirectoryStructure { + let centralDirectory = CentralDirectoryStructure(localFileHeader: localFileHeader, + fileAttributes: externalFileAttributes, + relativeOffset: relativeOffset) + _ = try Data.write(chunk: centralDirectory.data, to: self.archiveFile) + return centralDirectory + } + + private func writeEndOfCentralDirectory(centralDirectoryStructure: CentralDirectoryStructure, + startOfCentralDirectory: UInt32, + operation: ModifyOperation) throws -> EndOfCentralDirectoryRecord { + var record = self.endOfCentralDirectoryRecord + let countChange = operation.rawValue + var dataLength = centralDirectoryStructure.extraFieldLength + dataLength += centralDirectoryStructure.fileNameLength + dataLength += centralDirectoryStructure.fileCommentLength + let centralDirectoryDataLengthChange = operation.rawValue * (Int(dataLength) + CentralDirectoryStructure.size) + var updatedSizeOfCentralDirectory = Int(record.sizeOfCentralDirectory) + updatedSizeOfCentralDirectory += centralDirectoryDataLengthChange + let numberOfEntriesOnDisk = UInt16(Int(record.totalNumberOfEntriesOnDisk) + countChange) + let numberOfEntriesInCentralDirectory = UInt16(Int(record.totalNumberOfEntriesInCentralDirectory) + countChange) + record = EndOfCentralDirectoryRecord(record: record, numberOfEntriesOnDisk: numberOfEntriesOnDisk, + numberOfEntriesInCentralDirectory: numberOfEntriesInCentralDirectory, + updatedSizeOfCentralDirectory: UInt32(updatedSizeOfCentralDirectory), + startOfCentralDirectory: startOfCentralDirectory) + _ = try Data.write(chunk: record.data, to: self.archiveFile) + return record + } + + private func rollback(_ localFileHeaderStart: Int, + _ existingCentralDirectoryData: Data, + _ endOfCentralDirRecord: EndOfCentralDirectoryRecord) throws { + fflush(self.archiveFile) + ftruncate(fileno(self.archiveFile), off_t(localFileHeaderStart)) + fseek(self.archiveFile, localFileHeaderStart, SEEK_SET) + _ = try Data.write(chunk: existingCentralDirectoryData, to: self.archiveFile) + _ = try Data.write(chunk: endOfCentralDirRecord.data, to: self.archiveFile) + } +} diff --git a/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive.swift b/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive.swift new file mode 100644 index 0000000..bd5555e --- /dev/null +++ b/Pods/ZIPFoundation/Sources/ZIPFoundation/Archive.swift @@ -0,0 +1,362 @@ +// +// Archive.swift +// ZIPFoundation +// +// Copyright © 2017-2019 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +/// The default chunk size when reading entry data from an archive. +public let defaultReadChunkSize = UInt32(16*1024) +/// The default chunk size when writing entry data to an archive. +public let defaultWriteChunkSize = defaultReadChunkSize +/// The default permissions for newly added entries. +public let defaultFilePermissions = UInt16(0o644) +public let defaultDirectoryPermissions = UInt16(0o755) +let defaultPOSIXBufferSize = defaultReadChunkSize +let defaultDirectoryUnitCount = Int64(1) +let minDirectoryEndOffset = 22 +let maxDirectoryEndOffset = 66000 +let endOfCentralDirectoryStructSignature = 0x06054b50 +let localFileHeaderStructSignature = 0x04034b50 +let dataDescriptorStructSignature = 0x08074b50 +let centralDirectoryStructSignature = 0x02014b50 + +/// The compression method of an `Entry` in a ZIP `Archive`. +public enum CompressionMethod: UInt16 { + /// Indicates that an `Entry` has no compression applied to its contents. + case none = 0 + /// Indicates that contents of an `Entry` have been compressed with a zlib compatible Deflate algorithm. + case deflate = 8 +} + +/// A sequence of uncompressed or compressed ZIP entries. +/// +/// You use an `Archive` to create, read or update ZIP files. +/// To read an existing ZIP file, you have to pass in an existing file `URL` and `AccessMode.read`: +/// +/// var archiveURL = URL(fileURLWithPath: "/path/file.zip") +/// var archive = Archive(url: archiveURL, accessMode: .read) +/// +/// An `Archive` is a sequence of entries. You can +/// iterate over an archive using a `for`-`in` loop to get access to individual `Entry` objects: +/// +/// for entry in archive { +/// print(entry.path) +/// } +/// +/// Each `Entry` in an `Archive` is represented by its `path`. You can +/// use `path` to retrieve the corresponding `Entry` from an `Archive` via subscripting: +/// +/// let entry = archive['/path/file.txt'] +/// +/// To create a new `Archive`, pass in a non-existing file URL and `AccessMode.create`. To modify an +/// existing `Archive` use `AccessMode.update`: +/// +/// var archiveURL = URL(fileURLWithPath: "/path/file.zip") +/// var archive = Archive(url: archiveURL, accessMode: .update) +/// try archive?.addEntry("test.txt", relativeTo: baseURL, compressionMethod: .deflate) +public final class Archive: Sequence { + typealias LocalFileHeader = Entry.LocalFileHeader + typealias DataDescriptor = Entry.DataDescriptor + typealias CentralDirectoryStructure = Entry.CentralDirectoryStructure + + /// An error that occurs during reading, creating or updating a ZIP file. + public enum ArchiveError: Error { + /// Thrown when an archive file is either damaged or inaccessible. + case unreadableArchive + /// Thrown when an archive is either opened with AccessMode.read or the destination file is unwritable. + case unwritableArchive + /// Thrown when the path of an `Entry` cannot be stored in an archive. + case invalidEntryPath + /// Thrown when an `Entry` can't be stored in the archive with the proposed compression method. + case invalidCompressionMethod + /// Thrown when the start of the central directory exceeds `UINT32_MAX` + case invalidStartOfCentralDirectoryOffset + /// Thrown when an archive does not contain the required End of Central Directory Record. + case missingEndOfCentralDirectoryRecord + /// Thrown when an extract, add or remove operation was canceled. + case cancelledOperation + } + + /// The access mode for an `Archive`. + public enum AccessMode: UInt { + /// Indicates that a newly instantiated `Archive` should create its backing file. + case create + /// Indicates that a newly instantiated `Archive` should read from an existing backing file. + case read + /// Indicates that a newly instantiated `Archive` should update an existing backing file. + case update + } + + struct EndOfCentralDirectoryRecord: DataSerializable { + let endOfCentralDirectorySignature = UInt32(endOfCentralDirectoryStructSignature) + let numberOfDisk: UInt16 + let numberOfDiskStart: UInt16 + let totalNumberOfEntriesOnDisk: UInt16 + let totalNumberOfEntriesInCentralDirectory: UInt16 + let sizeOfCentralDirectory: UInt32 + let offsetToStartOfCentralDirectory: UInt32 + let zipFileCommentLength: UInt16 + let zipFileCommentData: Data + static let size = 22 + } + + /// URL of an Archive's backing file. + public let url: URL + /// Access mode for an archive file. + public let accessMode: AccessMode + var archiveFile: UnsafeMutablePointer + var endOfCentralDirectoryRecord: EndOfCentralDirectoryRecord + var preferredEncoding: String.Encoding? + + /// Initializes a new ZIP `Archive`. + /// + /// You can use this initalizer to create new archive files or to read and update existing ones. + /// + /// To read existing ZIP files, pass in an existing file URL and `AccessMode.read`. + /// + /// To create a new ZIP file, pass in a non-existing file URL and `AccessMode.create`. + /// + /// To update an existing ZIP file, pass in an existing file URL and `AccessMode.update`. + /// + /// - Parameters: + /// - url: File URL to the receivers backing file. + /// - mode: Access mode of the receiver. + /// - preferredEncoding: Encoding for entry paths. Overrides the encoding specified in the archive. + /// + /// - Returns: An archive initialized with a backing file at the passed in file URL and the given access mode + /// or `nil` if the following criteria are not met: + /// - The file URL _must_ point to an existing file for `AccessMode.read` + /// - The file URL _must_ point to a non-existing file for `AccessMode.write` + /// - The file URL _must_ point to an existing file for `AccessMode.update` + public init?(url: URL, accessMode mode: AccessMode, preferredEncoding: String.Encoding? = nil) { + self.url = url + self.accessMode = mode + self.preferredEncoding = preferredEncoding + let fileManager = FileManager() + switch mode { + case .read: + let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + guard let archiveFile = fopen(fileSystemRepresentation, "rb"), + let endOfCentralDirectoryRecord = Archive.scanForEndOfCentralDirectoryRecord(in: archiveFile) else { + return nil + } + self.archiveFile = archiveFile + self.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord + case .create: + let endOfCentralDirectoryRecord = EndOfCentralDirectoryRecord(numberOfDisk: 0, numberOfDiskStart: 0, + totalNumberOfEntriesOnDisk: 0, + totalNumberOfEntriesInCentralDirectory: 0, + sizeOfCentralDirectory: 0, + offsetToStartOfCentralDirectory: 0, + zipFileCommentLength: 0, + zipFileCommentData: Data()) + do { + try endOfCentralDirectoryRecord.data.write(to: url, options: .withoutOverwriting) + } catch { + return nil + } + fallthrough + case .update: + let fileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + guard let archiveFile = fopen(fileSystemRepresentation, "rb+"), + let endOfCentralDirectoryRecord = Archive.scanForEndOfCentralDirectoryRecord(in: archiveFile) else { + return nil + } + self.archiveFile = archiveFile + self.endOfCentralDirectoryRecord = endOfCentralDirectoryRecord + fseek(self.archiveFile, 0, SEEK_SET) + } + setvbuf(self.archiveFile, nil, _IOFBF, Int(defaultPOSIXBufferSize)) + } + + deinit { + fclose(self.archiveFile) + } + + public func makeIterator() -> AnyIterator { + let endOfCentralDirectoryRecord = self.endOfCentralDirectoryRecord + var directoryIndex = Int(endOfCentralDirectoryRecord.offsetToStartOfCentralDirectory) + var index = 0 + return AnyIterator { + guard index < Int(endOfCentralDirectoryRecord.totalNumberOfEntriesInCentralDirectory) else { return nil } + guard let centralDirStruct: CentralDirectoryStructure = Data.readStruct(from: self.archiveFile, + at: directoryIndex) else { + return nil + } + let offset = Int(centralDirStruct.relativeOffsetOfLocalHeader) + guard let localFileHeader: LocalFileHeader = Data.readStruct(from: self.archiveFile, + at: offset) else { return nil } + var dataDescriptor: DataDescriptor? + if centralDirStruct.usesDataDescriptor { + let additionalSize = Int(localFileHeader.fileNameLength + localFileHeader.extraFieldLength) + let isCompressed = centralDirStruct.compressionMethod != CompressionMethod.none.rawValue + let dataSize = isCompressed ? centralDirStruct.compressedSize : centralDirStruct.uncompressedSize + let descriptorPosition = offset + LocalFileHeader.size + additionalSize + Int(dataSize) + dataDescriptor = Data.readStruct(from: self.archiveFile, at: descriptorPosition) + } + defer { + directoryIndex += CentralDirectoryStructure.size + directoryIndex += Int(centralDirStruct.fileNameLength) + directoryIndex += Int(centralDirStruct.extraFieldLength) + directoryIndex += Int(centralDirStruct.fileCommentLength) + index += 1 + } + return Entry(centralDirectoryStructure: centralDirStruct, + localFileHeader: localFileHeader, dataDescriptor: dataDescriptor) + } + } + + /// Retrieve the ZIP `Entry` with the given `path` from the receiver. + /// + /// - Note: The ZIP file format specification does not enforce unique paths for entries. + /// Therefore an archive can contain multiple entries with the same path. This method + /// always returns the first `Entry` with the given `path`. + /// + /// - Parameter path: A relative file path identifiying the corresponding `Entry`. + /// - Returns: An `Entry` with the given `path`. Otherwise, `nil`. + public subscript(path: String) -> Entry? { + if let encoding = preferredEncoding { + return self.filter { $0.path(using: encoding) == path }.first + } + return self.filter { $0.path == path }.first + } + + // MARK: - Helpers + + private static func scanForEndOfCentralDirectoryRecord(in file: UnsafeMutablePointer) + -> EndOfCentralDirectoryRecord? { + var directoryEnd = 0 + var index = minDirectoryEndOffset + var fileStat = stat() + fstat(fileno(file), &fileStat) + let archiveLength = Int(fileStat.st_size) + while directoryEnd == 0 && index < maxDirectoryEndOffset && index <= archiveLength { + fseek(file, archiveLength - index, SEEK_SET) + var potentialDirectoryEndTag: UInt32 = UInt32() + fread(&potentialDirectoryEndTag, 1, MemoryLayout.size, file) + if potentialDirectoryEndTag == UInt32(endOfCentralDirectoryStructSignature) { + directoryEnd = archiveLength - index + return Data.readStruct(from: file, at: directoryEnd) + } + index += 1 + } + return nil + } +} + +extension Archive { + /// The number of the work units that have to be performed when + /// removing `entry` from the receiver. + /// + /// - Parameter entry: The entry that will be removed. + /// - Returns: The number of the work units. + public func totalUnitCountForRemoving(_ entry: Entry) -> Int64 { + return Int64(self.endOfCentralDirectoryRecord.offsetToStartOfCentralDirectory + - UInt32(entry.localSize)) + } + + func makeProgressForRemoving(_ entry: Entry) -> Progress { + return Progress(totalUnitCount: self.totalUnitCountForRemoving(entry)) + } + + /// The number of the work units that have to be performed when + /// reading `entry` from the receiver. + /// + /// - Parameter entry: The entry that will be read. + /// - Returns: The number of the work units. + public func totalUnitCountForReading(_ entry: Entry) -> Int64 { + switch entry.type { + case .file, .symlink: + return Int64(entry.uncompressedSize) + case .directory: + return defaultDirectoryUnitCount + } + } + + func makeProgressForReading(_ entry: Entry) -> Progress { + return Progress(totalUnitCount: self.totalUnitCountForReading(entry)) + } + + /// The number of the work units that have to be performed when + /// adding the file at `url` to the receiver. + /// - Parameter entry: The entry that will be removed. + /// - Returns: The number of the work units. + public func totalUnitCountForAddingItem(at url: URL) -> Int64 { + var count = Int64(0) + do { + let type = try FileManager.typeForItem(at: url) + switch type { + case .file, .symlink: + count = Int64(try FileManager.fileSizeForItem(at: url)) + case .directory: + count = defaultDirectoryUnitCount + } + } catch { + count = -1 + } + return count + } + + func makeProgressForAddingItem(at url: URL) -> Progress { + return Progress(totalUnitCount: self.totalUnitCountForAddingItem(at: url)) + } +} + +extension Archive.EndOfCentralDirectoryRecord { + var data: Data { + var endOfCentralDirectorySignature = self.endOfCentralDirectorySignature + var numberOfDisk = self.numberOfDisk + var numberOfDiskStart = self.numberOfDiskStart + var totalNumberOfEntriesOnDisk = self.totalNumberOfEntriesOnDisk + var totalNumberOfEntriesInCentralDirectory = self.totalNumberOfEntriesInCentralDirectory + var sizeOfCentralDirectory = self.sizeOfCentralDirectory + var offsetToStartOfCentralDirectory = self.offsetToStartOfCentralDirectory + var zipFileCommentLength = self.zipFileCommentLength + var data = Data(buffer: UnsafeBufferPointer(start: &endOfCentralDirectorySignature, count: 1)) + data.append(UnsafeBufferPointer(start: &numberOfDisk, count: 1)) + data.append(UnsafeBufferPointer(start: &numberOfDiskStart, count: 1)) + data.append(UnsafeBufferPointer(start: &totalNumberOfEntriesOnDisk, count: 1)) + data.append(UnsafeBufferPointer(start: &totalNumberOfEntriesInCentralDirectory, count: 1)) + data.append(UnsafeBufferPointer(start: &sizeOfCentralDirectory, count: 1)) + data.append(UnsafeBufferPointer(start: &offsetToStartOfCentralDirectory, count: 1)) + data.append(UnsafeBufferPointer(start: &zipFileCommentLength, count: 1)) + data.append(self.zipFileCommentData) + return data + } + + init?(data: Data, additionalDataProvider provider: (Int) throws -> Data) { + guard data.count == Archive.EndOfCentralDirectoryRecord.size else { return nil } + guard data.scanValue(start: 0) == endOfCentralDirectorySignature else { return nil } + self.numberOfDisk = data.scanValue(start: 4) + self.numberOfDiskStart = data.scanValue(start: 6) + self.totalNumberOfEntriesOnDisk = data.scanValue(start: 8) + self.totalNumberOfEntriesInCentralDirectory = data.scanValue(start: 10) + self.sizeOfCentralDirectory = data.scanValue(start: 12) + self.offsetToStartOfCentralDirectory = data.scanValue(start: 16) + self.zipFileCommentLength = data.scanValue(start: 20) + guard let commentData = try? provider(Int(self.zipFileCommentLength)) else { return nil } + guard commentData.count == Int(self.zipFileCommentLength) else { return nil } + self.zipFileCommentData = commentData + } + + init(record: Archive.EndOfCentralDirectoryRecord, + numberOfEntriesOnDisk: UInt16, + numberOfEntriesInCentralDirectory: UInt16, + updatedSizeOfCentralDirectory: UInt32, + startOfCentralDirectory: UInt32) { + numberOfDisk = record.numberOfDisk + numberOfDiskStart = record.numberOfDiskStart + totalNumberOfEntriesOnDisk = numberOfEntriesOnDisk + totalNumberOfEntriesInCentralDirectory = numberOfEntriesInCentralDirectory + sizeOfCentralDirectory = updatedSizeOfCentralDirectory + offsetToStartOfCentralDirectory = startOfCentralDirectory + zipFileCommentLength = record.zipFileCommentLength + zipFileCommentData = record.zipFileCommentData + } +} diff --git a/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift b/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift new file mode 100644 index 0000000..f2ee544 --- /dev/null +++ b/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Compression.swift @@ -0,0 +1,329 @@ +// +// Data+Compression.swift +// ZIPFoundation +// +// Copyright © 2017-2019 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +/// An unsigned 32-Bit Integer representing a checksum. +public typealias CRC32 = UInt32 +/// A custom handler that consumes a `Data` object containing partial entry data. +/// - Parameters: +/// - data: A chunk of `Data` to consume. +/// - Throws: Can throw to indicate errors during data consumption. +public typealias Consumer = (_ data: Data) throws -> Void +/// A custom handler that receives a position and a size that can be used to provide data from an arbitrary source. +/// - Parameters: +/// - position: The current read position. +/// - size: The size of the chunk to provide. +/// - Returns: A chunk of `Data`. +/// - Throws: Can throw to indicate errors in the data source. +public typealias Provider = (_ position: Int, _ size: Int) throws -> Data + +/// The lookup table used to calculate `CRC32` checksums. +public let crcTable: [UInt32] = [ + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d] + +extension Data { + enum CompressionError: Error { + case invalidStream + case corruptedData + } + + /// Calculates the `CRC32` checksum of the receiver. + /// + /// - Parameter checksum: The starting seed. + /// - Returns: The checksum calcualted from the bytes of the receiver and the starting seed. + public func crc32(checksum: CRC32) -> CRC32 { + // The typecast is necessary on 32-bit platforms because of + // https://bugs.swift.org/browse/SR-1774 + let mask = 0xffffffff as UInt32 + let bufferSize = self.count/MemoryLayout.size + var result = checksum ^ mask + #if swift(>=5.0) + crcTable.withUnsafeBufferPointer { crcTablePointer in + self.withUnsafeBytes { bufferPointer in + let bytePointer = bufferPointer.bindMemory(to: UInt8.self) + for bufferIndex in 0..> 8) ^ crcTablePointer[index] + } + } + } + #else + self.withUnsafeBytes { (bytes) in + let bins = stride(from: 0, to: bufferSize, by: 256) + for bin in bins { + for binIndex in 0..<256 { + let byteIndex = bin + binIndex + guard byteIndex < bufferSize else { break } + + let byte = bytes[byteIndex] + let index = Int((result ^ UInt32(byte)) & 0xff) + result = (result >> 8) ^ crcTable[index] + } + } + } + #endif + return result ^ mask + } + + static func compress(size: Int, bufferSize: Int, provider: Provider, consumer: Consumer) throws -> CRC32 { + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + return try self.process(operation: COMPRESSION_STREAM_ENCODE, size: size, bufferSize: bufferSize, + provider: provider, consumer: consumer) + #else + return try self.encode(size: size, bufferSize: bufferSize, provider: provider, consumer: consumer) + #endif + } + + static func decompress(size: Int, bufferSize: Int, skipCRC32: Bool, + provider: Provider, consumer: Consumer) throws -> CRC32 { + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + return try self.process(operation: COMPRESSION_STREAM_DECODE, size: size, bufferSize: bufferSize, + skipCRC32: skipCRC32, provider: provider, consumer: consumer) + #else + return try self.decode(bufferSize: bufferSize, skipCRC32: skipCRC32, provider: provider, consumer: consumer) + #endif + } +} + +// MARK: - Apple Platforms + +#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +import Compression + +extension Data { + static func process(operation: compression_stream_operation, size: Int, bufferSize: Int, skipCRC32: Bool = false, + provider: Provider, consumer: Consumer) throws -> CRC32 { + var crc32 = CRC32(0) + let destPointer = UnsafeMutablePointer.allocate(capacity: bufferSize) + defer { destPointer.deallocate() } + let streamPointer = UnsafeMutablePointer.allocate(capacity: 1) + defer { streamPointer.deallocate() } + var stream = streamPointer.pointee + var status = compression_stream_init(&stream, operation, COMPRESSION_ZLIB) + guard status != COMPRESSION_STATUS_ERROR else { throw CompressionError.invalidStream } + defer { compression_stream_destroy(&stream) } + stream.src_size = 0 + stream.dst_ptr = destPointer + stream.dst_size = bufferSize + var position = 0 + var sourceData: Data? + repeat { + if stream.src_size == 0 { + do { + sourceData = try provider(position, Swift.min((size - position), bufferSize)) + if let sourceData = sourceData { + position += sourceData.count + stream.src_size = sourceData.count + } + } catch { throw error } + } + if let sourceData = sourceData { + sourceData.withUnsafeBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.src_ptr = pointer.advanced(by: sourceData.count - stream.src_size) + let flags = sourceData.count < bufferSize ? Int32(COMPRESSION_STREAM_FINALIZE.rawValue) : 0 + status = compression_stream_process(&stream, flags) + } + } + if operation == COMPRESSION_STREAM_ENCODE && !skipCRC32 { crc32 = sourceData.crc32(checksum: crc32) } + } + switch status { + case COMPRESSION_STATUS_OK, COMPRESSION_STATUS_END: + let outputData = Data(bytesNoCopy: destPointer, count: bufferSize - stream.dst_size, deallocator: .none) + try consumer(outputData) + if operation == COMPRESSION_STREAM_DECODE && !skipCRC32 { crc32 = outputData.crc32(checksum: crc32) } + stream.dst_ptr = destPointer + stream.dst_size = bufferSize + default: throw CompressionError.corruptedData + } + } while status == COMPRESSION_STATUS_OK + return crc32 + } +} + +// MARK: - Linux + +#else +import CZlib + +extension Data { + static func encode(size: Int, bufferSize: Int, provider: Provider, consumer: Consumer) throws -> CRC32 { + var stream = z_stream() + let streamSize = Int32(MemoryLayout.size) + var result = deflateInit2_(&stream, Z_DEFAULT_COMPRESSION, + Z_DEFLATED, -MAX_WBITS, 9, Z_DEFAULT_STRATEGY, ZLIB_VERSION, streamSize) + defer { deflateEnd(&stream) } + guard result == Z_OK else { throw CompressionError.invalidStream } + var flush = Z_NO_FLUSH + var position = 0 + var zipCRC32 = CRC32(0) + repeat { + let readSize = Swift.min((size - position), bufferSize) + var inputChunk = try provider(position, readSize) + stream.avail_in = UInt32(inputChunk.count) + inputChunk.withUnsafeMutableBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.next_in = pointer + } + } + zipCRC32 = inputChunk.crc32(checksum: zipCRC32) + flush = position + bufferSize >= size ? Z_FINISH : Z_NO_FLUSH + var outputChunk = Data(count: bufferSize) + repeat { + stream.avail_out = UInt32(bufferSize) + outputChunk.withUnsafeMutableBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.next_out = pointer + } + } + result = deflate(&stream, flush) + guard result >= Z_OK else { + throw CompressionError.corruptedData + } + outputChunk.count = bufferSize - Int(stream.avail_out) + try consumer(outputChunk) + } while stream.avail_out == 0 + position += readSize + } while flush != Z_FINISH + return zipCRC32 + } + + static func decode(bufferSize: Int, skipCRC32: Bool, provider: Provider, consumer: Consumer) throws -> CRC32 { + var stream = z_stream() + let streamSize = Int32(MemoryLayout.size) + var result = inflateInit2_(&stream, -MAX_WBITS, ZLIB_VERSION, streamSize) + defer { inflateEnd(&stream) } + guard result == Z_OK else { throw CompressionError.invalidStream } + var unzipCRC32 = CRC32(0) + var position = 0 + repeat { + let inputBytes = malloc(bufferSize) + defer { free(inputBytes) } + stream.avail_in = UInt32(bufferSize) + var chunk = try provider(position, bufferSize) + position += chunk.count + chunk.withUnsafeMutableBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.next_in = pointer + } + } + repeat { + var outputData = Data(count: bufferSize) + stream.avail_out = UInt32(bufferSize) + outputData.withUnsafeMutableBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + stream.next_out = pointer + } + } + result = inflate(&stream, Z_NO_FLUSH) + guard result != Z_NEED_DICT && + result != Z_DATA_ERROR && + result != Z_MEM_ERROR else { + throw CompressionError.corruptedData + } + let remainingLength = UInt32(bufferSize) - stream.avail_out + outputData.count = Int(remainingLength) + try consumer(outputData) + if !skipCRC32 { unzipCRC32 = outputData.crc32(checksum: unzipCRC32) } + } while stream.avail_out == 0 + } while result != Z_STREAM_END + return unzipCRC32 + } +} + +#endif + +#if !swift(>=5.0) + +// Since Swift 5.0, `Data.withUnsafeBytes()` passes an `UnsafeRawBufferPointer` instead of an `UnsafePointer` +// into `body`. +// We provide a compatible method for targets that use Swift 4.x so that we can use the new version +// across all language versions. + +internal extension Data { + func withUnsafeBytes(_ body: (UnsafeRawBufferPointer) throws -> T) rethrows -> T { + let count = self.count + return try withUnsafeBytes { (pointer: UnsafePointer) throws -> T in + try body(UnsafeRawBufferPointer(start: pointer, count: count)) + } + } + + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + #else + mutating func withUnsafeMutableBytes(_ body: (UnsafeMutableRawBufferPointer) throws -> T) rethrows -> T { + let count = self.count + guard count > 0 else { + return try body(UnsafeMutableRawBufferPointer(start: nil, count: count)) + } + return try withUnsafeMutableBytes { (pointer: UnsafeMutablePointer) throws -> T in + try body(UnsafeMutableRawBufferPointer(start: pointer, count: count)) + } + } + #endif +} +#endif diff --git a/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Serialization.swift b/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Serialization.swift new file mode 100644 index 0000000..cdc7a78 --- /dev/null +++ b/Pods/ZIPFoundation/Sources/ZIPFoundation/Data+Serialization.swift @@ -0,0 +1,98 @@ +// +// Data+Serialization.swift +// ZIPFoundation +// +// Copyright © 2017-2019 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +protocol DataSerializable { + static var size: Int { get } + init?(data: Data, additionalDataProvider: (Int) throws -> Data) + var data: Data { get } +} + +extension Data { + enum DataError: Error { + case unreadableFile + case unwritableFile + } + + func scanValue(start: Int) -> T { + let subdata = self.subdata(in: start...size) + #if swift(>=5.0) + return subdata.withUnsafeBytes { $0.load(as: T.self) } + #else + return subdata.withUnsafeBytes { $0.pointee } + #endif + } + + static func readStruct(from file: UnsafeMutablePointer, at offset: Int) -> T? where T: DataSerializable { + fseek(file, offset, SEEK_SET) + guard let data = try? self.readChunk(of: T.size, from: file) else { + return nil + } + let structure = T(data: data, additionalDataProvider: { (additionalDataSize) -> Data in + return try self.readChunk(of: additionalDataSize, from: file) + }) + return structure + } + + static func consumePart(of size: Int, chunkSize: Int, skipCRC32: Bool = false, + provider: Provider, consumer: Consumer) throws -> CRC32 { + let readInOneChunk = (size < chunkSize) + var chunkSize = readInOneChunk ? size : chunkSize + var checksum = CRC32(0) + var bytesRead = 0 + while bytesRead < size { + let remainingSize = size - bytesRead + chunkSize = remainingSize < chunkSize ? remainingSize : chunkSize + let data = try provider(bytesRead, chunkSize) + try consumer(data) + if !skipCRC32 { + checksum = data.crc32(checksum: checksum) + } + bytesRead += chunkSize + } + return checksum + } + + static func readChunk(of size: Int, from file: UnsafeMutablePointer) throws -> Data { + let alignment = MemoryLayout.alignment + #if swift(>=4.1) + let bytes = UnsafeMutableRawPointer.allocate(byteCount: size, alignment: alignment) + #else + let bytes = UnsafeMutableRawPointer.allocate(bytes: size, alignedTo: alignment) + #endif + let bytesRead = fread(bytes, 1, size, file) + let error = ferror(file) + if error > 0 { + throw DataError.unreadableFile + } + #if swift(>=4.1) + return Data(bytesNoCopy: bytes, count: bytesRead, deallocator: .custom({ buf, _ in buf.deallocate() })) + #else + let deallocator = Deallocator.custom({ buf, _ in buf.deallocate(bytes: size, alignedTo: 1) }) + return Data(bytesNoCopy: bytes, count: bytesRead, deallocator: deallocator) + #endif + } + + static func write(chunk: Data, to file: UnsafeMutablePointer) throws -> Int { + var sizeWritten = 0 + chunk.withUnsafeBytes { (rawBufferPointer) in + if let baseAddress = rawBufferPointer.baseAddress, rawBufferPointer.count > 0 { + let pointer = baseAddress.assumingMemoryBound(to: UInt8.self) + sizeWritten = fwrite(pointer, 1, chunk.count, file) + } + } + let error = ferror(file) + if error > 0 { + throw DataError.unwritableFile + } + return sizeWritten + } +} diff --git a/Pods/ZIPFoundation/Sources/ZIPFoundation/Entry.swift b/Pods/ZIPFoundation/Sources/ZIPFoundation/Entry.swift new file mode 100644 index 0000000..074c2d6 --- /dev/null +++ b/Pods/ZIPFoundation/Sources/ZIPFoundation/Entry.swift @@ -0,0 +1,400 @@ +// +// Entry.swift +// ZIPFoundation +// +// Copyright © 2017-2019 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation +import CoreFoundation + +/// A value that represents a file, a direcotry or a symbolic link within a ZIP `Archive`. +/// +/// You can retrieve instances of `Entry` from an `Archive` via subscripting or iteration. +/// Entries are identified by their `path`. +public struct Entry: Equatable { + /// The type of an `Entry` in a ZIP `Archive`. + public enum EntryType: Int { + /// Indicates a regular file. + case file + /// Indicates a directory. + case directory + /// Indicates a symbolic link. + case symlink + + init(mode: mode_t) { + switch mode & S_IFMT { + case S_IFDIR: + self = .directory + case S_IFLNK: + self = .symlink + default: + self = .file + } + } + } + + enum OSType: UInt { + case msdos = 0 + case unix = 3 + case osx = 19 + case unused = 20 + } + + struct LocalFileHeader: DataSerializable { + let localFileHeaderSignature = UInt32(localFileHeaderStructSignature) + let versionNeededToExtract: UInt16 + let generalPurposeBitFlag: UInt16 + let compressionMethod: UInt16 + let lastModFileTime: UInt16 + let lastModFileDate: UInt16 + let crc32: UInt32 + let compressedSize: UInt32 + let uncompressedSize: UInt32 + let fileNameLength: UInt16 + let extraFieldLength: UInt16 + static let size = 30 + let fileNameData: Data + let extraFieldData: Data + } + + struct DataDescriptor: DataSerializable { + let data: Data + let dataDescriptorSignature = UInt32(dataDescriptorStructSignature) + let crc32: UInt32 + let compressedSize: UInt32 + let uncompressedSize: UInt32 + static let size = 16 + } + + struct CentralDirectoryStructure: DataSerializable { + let centralDirectorySignature = UInt32(centralDirectoryStructSignature) + let versionMadeBy: UInt16 + let versionNeededToExtract: UInt16 + let generalPurposeBitFlag: UInt16 + let compressionMethod: UInt16 + let lastModFileTime: UInt16 + let lastModFileDate: UInt16 + let crc32: UInt32 + let compressedSize: UInt32 + let uncompressedSize: UInt32 + let fileNameLength: UInt16 + let extraFieldLength: UInt16 + let fileCommentLength: UInt16 + let diskNumberStart: UInt16 + let internalFileAttributes: UInt16 + let externalFileAttributes: UInt32 + let relativeOffsetOfLocalHeader: UInt32 + static let size = 46 + let fileNameData: Data + let extraFieldData: Data + let fileCommentData: Data + var usesDataDescriptor: Bool { return (self.generalPurposeBitFlag & (1 << 3 )) != 0 } + var isZIP64: Bool { return self.versionNeededToExtract >= 45 } + var isEncrypted: Bool { return (self.generalPurposeBitFlag & (1 << 0)) != 0 } + } + /// Returns the `path` of the receiver within a ZIP `Archive` using a given encoding. + /// + /// - Parameters: + /// - encoding: `String.Encoding` + public func path(using encoding: String.Encoding) -> String { + return String(data: self.centralDirectoryStructure.fileNameData, encoding: encoding) ?? "" + } + /// The `path` of the receiver within a ZIP `Archive`. + public var path: String { + let dosLatinUS = 0x400 + let dosLatinUSEncoding = CFStringEncoding(dosLatinUS) + let dosLatinUSStringEncoding = CFStringConvertEncodingToNSStringEncoding(dosLatinUSEncoding) + let codepage437 = String.Encoding(rawValue: dosLatinUSStringEncoding) + let isUTF8 = ((self.centralDirectoryStructure.generalPurposeBitFlag >> 11) & 1) != 0 + let encoding = isUTF8 ? String.Encoding.utf8 : codepage437 + return self.path(using: encoding) + } + /// The file attributes of the receiver as key/value pairs. + /// + /// Contains the modification date and file permissions. + public var fileAttributes: [FileAttributeKey: Any] { + return FileManager.attributes(from: self) + } + /// The `CRC32` checksum of the receiver. + /// + /// - Note: Always returns `0` for entries of type `EntryType.directory`. + public var checksum: CRC32 { + var checksum = self.centralDirectoryStructure.crc32 + if self.centralDirectoryStructure.usesDataDescriptor { + guard let dataDescriptor = self.dataDescriptor else { return 0 } + checksum = dataDescriptor.crc32 + } + return checksum + } + /// The `EntryType` of the receiver. + public var type: EntryType { + // OS Type is stored in the upper byte of versionMadeBy + let osTypeRaw = self.centralDirectoryStructure.versionMadeBy >> 8 + let osType = OSType(rawValue: UInt(osTypeRaw)) ?? .unused + var isDirectory = self.path.hasSuffix("/") + switch osType { + case .unix, .osx: + let mode = mode_t(self.centralDirectoryStructure.externalFileAttributes >> 16) & S_IFMT + switch mode { + case S_IFREG: + return .file + case S_IFDIR: + return .directory + case S_IFLNK: + return .symlink + default: + return .file + } + case .msdos: + isDirectory = isDirectory || ((centralDirectoryStructure.externalFileAttributes >> 4) == 0x01) + fallthrough + // For all other OSes we can only guess based on the directory suffix char + default: return isDirectory ? .directory : .file + } + } + /// The size of the receiver's compressed data. + public var compressedSize: Int { + return Int(dataDescriptor?.compressedSize ?? localFileHeader.compressedSize) + } + /// The size of the receiver's uncompressed data. + public var uncompressedSize: Int { + return Int(dataDescriptor?.uncompressedSize ?? localFileHeader.uncompressedSize) + } + /// The combined size of the local header, the data and the optional data descriptor. + var localSize: Int { + let localFileHeader = self.localFileHeader + var extraDataLength = Int(localFileHeader.fileNameLength) + extraDataLength += Int(localFileHeader.extraFieldLength) + var size = LocalFileHeader.size + extraDataLength + let isCompressed = localFileHeader.compressionMethod != CompressionMethod.none.rawValue + size += isCompressed ? self.compressedSize : self.uncompressedSize + size += self.dataDescriptor != nil ? DataDescriptor.size : 0 + return size + } + var dataOffset: Int { + var dataOffset = Int(self.centralDirectoryStructure.relativeOffsetOfLocalHeader) + dataOffset += LocalFileHeader.size + dataOffset += Int(self.localFileHeader.fileNameLength) + dataOffset += Int(self.localFileHeader.extraFieldLength) + return dataOffset + } + let centralDirectoryStructure: CentralDirectoryStructure + let localFileHeader: LocalFileHeader + let dataDescriptor: DataDescriptor? + + public static func == (lhs: Entry, rhs: Entry) -> Bool { + return lhs.path == rhs.path + && lhs.localFileHeader.crc32 == rhs.localFileHeader.crc32 + && lhs.centralDirectoryStructure.relativeOffsetOfLocalHeader + == rhs.centralDirectoryStructure.relativeOffsetOfLocalHeader + } + + init?(centralDirectoryStructure: CentralDirectoryStructure, + localFileHeader: LocalFileHeader, + dataDescriptor: DataDescriptor?) { + // We currently don't support ZIP64 or encrypted archives + guard !centralDirectoryStructure.isZIP64 else { return nil } + guard !centralDirectoryStructure.isEncrypted else { return nil } + self.centralDirectoryStructure = centralDirectoryStructure + self.localFileHeader = localFileHeader + self.dataDescriptor = dataDescriptor + } +} + +extension Entry.LocalFileHeader { + var data: Data { + var localFileHeaderSignature = self.localFileHeaderSignature + var versionNeededToExtract = self.versionNeededToExtract + var generalPurposeBitFlag = self.generalPurposeBitFlag + var compressionMethod = self.compressionMethod + var lastModFileTime = self.lastModFileTime + var lastModFileDate = self.lastModFileDate + var crc32 = self.crc32 + var compressedSize = self.compressedSize + var uncompressedSize = self.uncompressedSize + var fileNameLength = self.fileNameLength + var extraFieldLength = self.extraFieldLength + var data = Data(buffer: UnsafeBufferPointer(start: &localFileHeaderSignature, count: 1)) + data.append(UnsafeBufferPointer(start: &versionNeededToExtract, count: 1)) + data.append(UnsafeBufferPointer(start: &generalPurposeBitFlag, count: 1)) + data.append(UnsafeBufferPointer(start: &compressionMethod, count: 1)) + data.append(UnsafeBufferPointer(start: &lastModFileTime, count: 1)) + data.append(UnsafeBufferPointer(start: &lastModFileDate, count: 1)) + data.append(UnsafeBufferPointer(start: &crc32, count: 1)) + data.append(UnsafeBufferPointer(start: &compressedSize, count: 1)) + data.append(UnsafeBufferPointer(start: &uncompressedSize, count: 1)) + data.append(UnsafeBufferPointer(start: &fileNameLength, count: 1)) + data.append(UnsafeBufferPointer(start: &extraFieldLength, count: 1)) + data.append(self.fileNameData) + data.append(self.extraFieldData) + return data + } + + init?(data: Data, additionalDataProvider provider: (Int) throws -> Data) { + guard data.count == Entry.LocalFileHeader.size else { return nil } + guard data.scanValue(start: 0) == localFileHeaderSignature else { return nil } + self.versionNeededToExtract = data.scanValue(start: 4) + self.generalPurposeBitFlag = data.scanValue(start: 6) + self.compressionMethod = data.scanValue(start: 8) + self.lastModFileTime = data.scanValue(start: 10) + self.lastModFileDate = data.scanValue(start: 12) + self.crc32 = data.scanValue(start: 14) + self.compressedSize = data.scanValue(start: 18) + self.uncompressedSize = data.scanValue(start: 22) + self.fileNameLength = data.scanValue(start: 26) + self.extraFieldLength = data.scanValue(start: 28) + let additionalDataLength = Int(self.fileNameLength + self.extraFieldLength) + guard let additionalData = try? provider(additionalDataLength) else { return nil } + guard additionalData.count == additionalDataLength else { return nil } + var subRangeStart = 0 + var subRangeEnd = Int(self.fileNameLength) + self.fileNameData = additionalData.subdata(in: subRangeStart.. Data) { + guard data.count == Entry.CentralDirectoryStructure.size else { return nil } + guard data.scanValue(start: 0) == centralDirectorySignature else { return nil } + self.versionMadeBy = data.scanValue(start: 4) + self.versionNeededToExtract = data.scanValue(start: 6) + self.generalPurposeBitFlag = data.scanValue(start: 8) + self.compressionMethod = data.scanValue(start: 10) + self.lastModFileTime = data.scanValue(start: 12) + self.lastModFileDate = data.scanValue(start: 14) + self.crc32 = data.scanValue(start: 16) + self.compressedSize = data.scanValue(start: 20) + self.uncompressedSize = data.scanValue(start: 24) + self.fileNameLength = data.scanValue(start: 28) + self.extraFieldLength = data.scanValue(start: 30) + self.fileCommentLength = data.scanValue(start: 32) + self.diskNumberStart = data.scanValue(start: 34) + self.internalFileAttributes = data.scanValue(start: 36) + self.externalFileAttributes = data.scanValue(start: 38) + self.relativeOffsetOfLocalHeader = data.scanValue(start: 42) + let additionalDataLength = Int(self.fileNameLength + self.extraFieldLength + self.fileCommentLength) + guard let additionalData = try? provider(additionalDataLength) else { return nil } + guard additionalData.count == additionalDataLength else { return nil } + var subRangeStart = 0 + var subRangeEnd = Int(self.fileNameLength) + self.fileNameData = additionalData.subdata(in: subRangeStart.. Data) { + guard data.count == Entry.DataDescriptor.size else { return nil } + let signature: UInt32 = data.scanValue(start: 0) + // The DataDescriptor signature is not mandatory so we have to re-arrange + // the input data if it is missing + var readOffset = 0 + if signature == self.dataDescriptorSignature { readOffset = 4 } + self.crc32 = data.scanValue(start: readOffset + 0) + self.compressedSize = data.scanValue(start: readOffset + 4) + self.uncompressedSize = data.scanValue(start: readOffset + 8) + // Our add(_ entry:) methods always maintain compressed & uncompressed + // sizes and so we don't need a data descriptor for newly added entries. + // Data descriptors of already existing entries are manually preserved + // when copying those entries to the tempArchive during remove(_ entry:). + self.data = Data() + } +} diff --git a/Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift b/Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift new file mode 100644 index 0000000..a91ddcb --- /dev/null +++ b/Pods/ZIPFoundation/Sources/ZIPFoundation/FileManager+ZIP.swift @@ -0,0 +1,324 @@ +// +// FileManager+ZIP.swift +// ZIPFoundation +// +// Copyright © 2017-2019 Thomas Zoechling, https://www.peakstep.com and the ZIP Foundation project authors. +// Released under the MIT License. +// +// See https://github.com/weichsel/ZIPFoundation/blob/master/LICENSE for license information. +// + +import Foundation + +extension FileManager { + typealias CentralDirectoryStructure = Entry.CentralDirectoryStructure + + /// Zips the file or direcory contents at the specified source URL to the destination URL. + /// + /// If the item at the source URL is a directory, the directory itself will be + /// represented within the ZIP `Archive`. Calling this method with a directory URL + /// `file:///path/directory/` will create an archive with a `directory/` entry at the root level. + /// You can override this behavior by passing `false` for `shouldKeepParent`. In that case, the contents + /// of the source directory will be placed at the root of the archive. + /// - Parameters: + /// - sourceURL: The file URL pointing to an existing file or directory. + /// - destinationURL: The file URL that identifies the destination of the zip operation. + /// - shouldKeepParent: Indicates that the directory name of a source item should be used as root element + /// within the archive. Default is `true`. + /// - compressionMethod: Indicates the `CompressionMethod` that should be applied. + /// - progress: A progress object that can be used to track or cancel the zip operation. + /// - Throws: Throws an error if the source item does not exist or the destination URL is not writable. + public func zipItem(at sourceURL: URL, to destinationURL: URL, + shouldKeepParent: Bool = true, compressionMethod: CompressionMethod = .none, + progress: Progress? = nil) throws { + let fileManager = FileManager() + guard fileManager.itemExists(at: sourceURL) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: sourceURL.path]) + } + guard !fileManager.itemExists(at: destinationURL) else { + throw CocoaError(.fileWriteFileExists, userInfo: [NSFilePathErrorKey: destinationURL.path]) + } + guard let archive = Archive(url: destinationURL, accessMode: .create) else { + throw Archive.ArchiveError.unwritableArchive + } + let isDirectory = try FileManager.typeForItem(at: sourceURL) == .directory + if isDirectory { + let subPaths = try self.subpathsOfDirectory(atPath: sourceURL.path) + var totalUnitCount = Int64(0) + if let progress = progress { + totalUnitCount = subPaths.reduce(Int64(0), { + let itemURL = sourceURL.appendingPathComponent($1) + let itemSize = archive.totalUnitCountForAddingItem(at: itemURL) + return $0 + itemSize + }) + progress.totalUnitCount = totalUnitCount + } + + // If the caller wants to keep the parent directory, we use the lastPathComponent of the source URL + // as common base for all entries (similar to macOS' Archive Utility.app) + let directoryPrefix = sourceURL.lastPathComponent + for entryPath in subPaths { + let finalEntryPath = shouldKeepParent ? directoryPrefix + "/" + entryPath : entryPath + let finalBaseURL = shouldKeepParent ? sourceURL.deletingLastPathComponent() : sourceURL + if let progress = progress { + let itemURL = sourceURL.appendingPathComponent(entryPath) + let entryProgress = archive.makeProgressForAddingItem(at: itemURL) + progress.addChild(entryProgress, withPendingUnitCount: entryProgress.totalUnitCount) + try archive.addEntry(with: finalEntryPath, relativeTo: finalBaseURL, + compressionMethod: compressionMethod, progress: entryProgress) + } else { + try archive.addEntry(with: finalEntryPath, relativeTo: finalBaseURL, + compressionMethod: compressionMethod) + } + } + } else { + progress?.totalUnitCount = archive.totalUnitCountForAddingItem(at: sourceURL) + let baseURL = sourceURL.deletingLastPathComponent() + try archive.addEntry(with: sourceURL.lastPathComponent, relativeTo: baseURL, + compressionMethod: compressionMethod, progress: progress) + } + } + + /// Unzips the contents at the specified source URL to the destination URL. + /// + /// - Parameters: + /// - sourceURL: The file URL pointing to an existing ZIP file. + /// - destinationURL: The file URL that identifies the destination directory of the unzip operation. + /// - skipCRC32: Optional flag to skip calculation of the CRC32 checksum to speed up performance. + /// - progress: A progress object that can be used to track or cancel the unzip operation. + /// - Throws: Throws an error if the source item does not exist or the destination URL is not writable. + public func unzipItem(at sourceURL: URL, to destinationURL: URL, skipCRC32: Bool = false, + progress: Progress? = nil, preferredEncoding: String.Encoding? = nil) throws { + let fileManager = FileManager() + guard fileManager.itemExists(at: sourceURL) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: sourceURL.path]) + } + guard let archive = Archive(url: sourceURL, accessMode: .read, preferredEncoding: preferredEncoding) else { + throw Archive.ArchiveError.unreadableArchive + } + // Defer extraction of symlinks until all files & directories have been created. + // This is necessary because we can't create links to files that haven't been created yet. + let sortedEntries = archive.sorted { (left, right) -> Bool in + switch (left.type, right.type) { + case (.directory, .file): return true + case (.directory, .symlink): return true + case (.file, .symlink): return true + default: return false + } + } + var totalUnitCount = Int64(0) + if let progress = progress { + totalUnitCount = sortedEntries.reduce(0, { $0 + archive.totalUnitCountForReading($1) }) + progress.totalUnitCount = totalUnitCount + } + + for entry in sortedEntries { + let path = preferredEncoding == nil ? entry.path : entry.path(using: preferredEncoding!) + let destinationEntryURL = destinationURL.appendingPathComponent(path) + guard destinationEntryURL.isContained(in: destinationURL) else { + throw CocoaError(.fileReadInvalidFileName, + userInfo: [NSFilePathErrorKey: destinationEntryURL.path]) + } + if let progress = progress { + let entryProgress = archive.makeProgressForReading(entry) + progress.addChild(entryProgress, withPendingUnitCount: entryProgress.totalUnitCount) + _ = try archive.extract(entry, to: destinationEntryURL, skipCRC32: skipCRC32, progress: entryProgress) + } else { + _ = try archive.extract(entry, to: destinationEntryURL, skipCRC32: skipCRC32) + } + } + } + + // MARK: - Helpers + + func itemExists(at url: URL) -> Bool { + // Use `URL.checkResourceIsReachable()` instead of `FileManager.fileExists()` here + // because we don't want implicit symlink resolution. + // As per documentation, `FileManager.fileExists()` traverses symlinks and therefore a broken symlink + // would throw a `.fileReadNoSuchFile` false positive error. + // For ZIP files it may be intended to archive "broken" symlinks because they might be + // resolvable again when extracting the archive to a different destination. + return (try? url.checkResourceIsReachable()) == true + } + + func createParentDirectoryStructure(for url: URL) throws { + let parentDirectoryURL = url.deletingLastPathComponent() + try self.createDirectory(at: parentDirectoryURL, withIntermediateDirectories: true, attributes: nil) + } + + class func attributes(from entry: Entry) -> [FileAttributeKey: Any] { + let centralDirectoryStructure = entry.centralDirectoryStructure + let entryType = entry.type + let fileTime = centralDirectoryStructure.lastModFileTime + let fileDate = centralDirectoryStructure.lastModFileDate + let defaultPermissions = entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions + var attributes = [.posixPermissions: defaultPermissions] as [FileAttributeKey: Any] + // Certain keys are not yet supported in swift-corelibs + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + attributes[.modificationDate] = Date(dateTime: (fileDate, fileTime)) + #endif + let versionMadeBy = centralDirectoryStructure.versionMadeBy + guard let osType = Entry.OSType(rawValue: UInt(versionMadeBy >> 8)) else { return attributes } + + let externalFileAttributes = centralDirectoryStructure.externalFileAttributes + let permissions = self.permissions(for: externalFileAttributes, osType: osType, entryType: entryType) + attributes[.posixPermissions] = NSNumber(value: permissions) + return attributes + } + + class func permissions(for externalFileAttributes: UInt32, osType: Entry.OSType, + entryType: Entry.EntryType) -> UInt16 { + switch osType { + case .unix, .osx: + let permissions = mode_t(externalFileAttributes >> 16) & (~S_IFMT) + let defaultPermissions = entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions + return permissions == 0 ? defaultPermissions : UInt16(permissions) + default: + return entryType == .directory ? defaultDirectoryPermissions : defaultFilePermissions + } + } + + class func externalFileAttributesForEntry(of type: Entry.EntryType, permissions: UInt16) -> UInt32 { + var typeInt: UInt16 + switch type { + case .file: + typeInt = UInt16(S_IFREG) + case .directory: + typeInt = UInt16(S_IFDIR) + case .symlink: + typeInt = UInt16(S_IFLNK) + } + var externalFileAttributes = UInt32(typeInt|UInt16(permissions)) + externalFileAttributes = (externalFileAttributes << 16) + return externalFileAttributes + } + + class func permissionsForItem(at URL: URL) throws -> UInt16 { + let fileManager = FileManager() + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: URL.path) + var fileStat = stat() + lstat(entryFileSystemRepresentation, &fileStat) + let permissions = fileStat.st_mode + return UInt16(permissions) + } + + class func fileModificationDateTimeForItem(at url: URL) throws -> Date { + let fileManager = FileManager() + guard fileManager.itemExists(at: url) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: url.path]) + } + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + var fileStat = stat() + lstat(entryFileSystemRepresentation, &fileStat) + #if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) + let modTimeSpec = fileStat.st_mtimespec + #else + let modTimeSpec = fileStat.st_mtim + #endif + + let timeStamp = TimeInterval(modTimeSpec.tv_sec) + TimeInterval(modTimeSpec.tv_nsec)/1000000000.0 + let modDate = Date(timeIntervalSince1970: timeStamp) + return modDate + } + + class func fileSizeForItem(at url: URL) throws -> UInt32 { + let fileManager = FileManager() + guard fileManager.itemExists(at: url) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: url.path]) + } + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + var fileStat = stat() + lstat(entryFileSystemRepresentation, &fileStat) + return UInt32(fileStat.st_size) + } + + class func typeForItem(at url: URL) throws -> Entry.EntryType { + let fileManager = FileManager() + guard url.isFileURL, fileManager.itemExists(at: url) else { + throw CocoaError(.fileReadNoSuchFile, userInfo: [NSFilePathErrorKey: url.path]) + } + let entryFileSystemRepresentation = fileManager.fileSystemRepresentation(withPath: url.path) + var fileStat = stat() + lstat(entryFileSystemRepresentation, &fileStat) + return Entry.EntryType(mode: fileStat.st_mode) + } +} + +extension Date { + init(dateTime: (UInt16, UInt16)) { + var msdosDateTime = Int(dateTime.0) + msdosDateTime <<= 16 + msdosDateTime |= Int(dateTime.1) + var unixTime = tm() + unixTime.tm_sec = Int32((msdosDateTime&31)*2) + unixTime.tm_min = Int32((msdosDateTime>>5)&63) + unixTime.tm_hour = Int32((Int(dateTime.1)>>11)&31) + unixTime.tm_mday = Int32((msdosDateTime>>16)&31) + unixTime.tm_mon = Int32((msdosDateTime>>21)&15) + unixTime.tm_mon -= 1 // UNIX time struct month entries are zero based. + unixTime.tm_year = Int32(1980+(msdosDateTime>>25)) + unixTime.tm_year -= 1900 // UNIX time structs count in "years since 1900". + let time = timegm(&unixTime) + self = Date(timeIntervalSince1970: TimeInterval(time)) + } + + var fileModificationDateTime: (UInt16, UInt16) { + return (self.fileModificationDate, self.fileModificationTime) + } + + var fileModificationDate: UInt16 { + var time = time_t(self.timeIntervalSince1970) + guard let unixTime = gmtime(&time) else { + return 0 + } + var year = unixTime.pointee.tm_year + 1900 // UNIX time structs count in "years since 1900". + // ZIP uses the MSDOS date format which has a valid range of 1980 - 2099. + year = year >= 1980 ? year : 1980 + year = year <= 2099 ? year : 2099 + let month = unixTime.pointee.tm_mon + 1 // UNIX time struct month entries are zero based. + let day = unixTime.pointee.tm_mday + return (UInt16)(day + ((month) * 32) + ((year - 1980) * 512)) + } + + var fileModificationTime: UInt16 { + var time = time_t(self.timeIntervalSince1970) + guard let unixTime = gmtime(&time) else { + return 0 + } + let hour = unixTime.pointee.tm_hour + let minute = unixTime.pointee.tm_min + let second = unixTime.pointee.tm_sec + return (UInt16)((second/2) + (minute * 32) + (hour * 2048)) + } +} + +#if swift(>=4.2) +#else + +#if os(macOS) || os(iOS) || os(watchOS) || os(tvOS) +#else + +// The swift-corelibs-foundation version of NSError.swift was missing a convenience method to create +// error objects from error codes. (https://github.com/apple/swift-corelibs-foundation/pull/1420) +// We have to provide an implementation for non-Darwin platforms using Swift versions < 4.2. + +public extension CocoaError { + public static func error(_ code: CocoaError.Code, userInfo: [AnyHashable: Any]? = nil, url: URL? = nil) -> Error { + var info: [String: Any] = userInfo as? [String: Any] ?? [:] + if let url = url { + info[NSURLErrorKey] = url + } + return NSError(domain: NSCocoaErrorDomain, code: code.rawValue, userInfo: info) + } +} + +#endif +#endif + +public extension URL { + func isContained(in parentDirectoryURL: URL) -> Bool { + // Ensure this URL is contained in the passed in URL + let parentDirectoryURL = URL(fileURLWithPath: parentDirectoryURL.path, isDirectory: true).standardized + return self.standardized.absoluteString.hasPrefix(parentDirectoryURL.absoluteString) + } +} diff --git a/Pods/exported_symbols.txt b/Pods/exported_symbols.txt new file mode 100644 index 0000000..80c84a3 --- /dev/null +++ b/Pods/exported_symbols.txt @@ -0,0 +1,60 @@ +_ConfigGetSharedDataFilepath_Boogie +_ConfigGetUserConfigPath +_ConfigGetUserCachePath +_ConfigGetUserDataPath +_ConfigOpenSection +_ConfigDeleteSection +_ConfigSaveSection +_ConfigSaveFile +_ConfigSetDefaultInt +_ConfigSetDefaultFloat +_ConfigSetDefaultBool +_ConfigSetDefaultString +_ConfigGetParamInt +_ConfigGetParamFloat +_ConfigGetParamBool +_ConfigGetParamString +_ConfigExternalGetParameter +_ConfigExternalOpen +_ConfigExternalClose +_CoreGetAPIVersions +_ConfigGetParameter +_ConfigSetParameter +_CoreDoCommand +_RSP_PluginStartup +_RSP_PluginShutdown +_RSP_PluginGetVersion +_RSP_RomClosed +_DoRspCycles +_InitiateRSP +_Video_PluginStartup +_Video_PluginShutdown +_Video_PluginGetVersion +_Video_RomOpen +_Video_RomClosed +_VidExt_Init +_VidExt_Quit +_VidExt_ListFullscreenModes +_VidExt_SetVideoMode +_VidExt_SetCaption +_VidExt_ToggleFullScreen +_VidExt_ResizeWindow +_VidExt_GL_GetProcAddress +_VidExt_GL_SetAttribute +_VidExt_GL_GetAttribute +_VidExt_GL_SwapBuffers +_ChangeWindow +_InitiateGFX +_MoveScreen +_ProcessDList +_ProcessRDPList +_ShowCFB +_UpdateScreen +_ViStatusChanged +_ViWidthChanged +_ReadScreen2 +_SetRenderingCallback +_FBRead +_FBWrite +_FBGetFrameBufferInfo +_ResizeVideoOutput \ No newline at end of file From 748f930186d6bbf8b7522112aa2d1e291da06269 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 3 Feb 2020 19:31:12 -0800 Subject: [PATCH 006/105] Updates app version to 1.1.2 --- Delta.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 23c8e17..000e8bc 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -1293,11 +1293,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 16; + CURRENT_PROJECT_VERSION = 17; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.1.1; + MARKETING_VERSION = 1.1.2; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; @@ -1319,11 +1319,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 16; + CURRENT_PROJECT_VERSION = 17; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.1.1; + MARKETING_VERSION = 1.1.2; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DIMPACTOR"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; From cd7e9652abdd9680f071047e60c8e8092905b857 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 6 Feb 2020 14:37:21 -0800 Subject: [PATCH 007/105] Replaces peek & pop with context menus on iOS 13+ --- Delta.xcodeproj/project.pbxproj | 4 + Delta/Components/Action.swift | 60 ++++++++- .../Emulation/PreviewGameViewController.swift | 17 ++- Delta/Extensions/UIImage+SymbolFallback.swift | 24 ++++ .../GameCollectionViewController.swift | 116 ++++++++++++---- .../SaveStatesViewController.swift | 127 +++++++++++++++--- 6 files changed, 289 insertions(+), 59 deletions(-) create mode 100644 Delta/Extensions/UIImage+SymbolFallback.swift diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 000e8bc..407ca30 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -129,6 +129,7 @@ BFDD04F11D5E2C27002D450E /* GameCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */; }; BFE022A01F5B57FF0052D888 /* PopoverMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */; }; BFE4269E1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */; }; + BFE56E1923EB7BE00014FECD /* UIImage+SymbolFallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE56E1823EB7BE00014FECD /* UIImage+SymbolFallback.swift */; }; BFE593CA21F3F8B7003412A6 /* GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593C921F3F8B7003412A6 /* GameSave.swift */; }; BFE593CC21F3F8C2003412A6 /* _GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593CB21F3F8C2003412A6 /* _GameSave.swift */; }; BFEE507D23E7612300416151 /* liblibDeSmuME.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF76BDE823E649150073702C /* liblibDeSmuME.a */; }; @@ -286,6 +287,7 @@ BFDF71DA22F94CDF0074D92E /* DSDeltaCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DSDeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverMenuButton.swift; sourceTree = ""; }; BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveStatesStoryboardSegue.swift; sourceTree = ""; }; + BFE56E1823EB7BE00014FECD /* UIImage+SymbolFallback.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+SymbolFallback.swift"; sourceTree = ""; }; BFE593C921F3F8B7003412A6 /* GameSave.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameSave.swift; sourceTree = ""; }; BFE593CB21F3F8C2003412A6 /* _GameSave.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _GameSave.swift; sourceTree = ""; }; BFEC732C1AAECC4A00650035 /* Roxas.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Roxas.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -351,6 +353,7 @@ BFFBD3D8224A0756002EFC79 /* URL+ExtendedAttributes.swift */, BF647A6922FB8FCE0061D76D /* Bundle+SwizzleBundleID.swift */, BFD1EF3F2336BD8800D197CF /* UIDevice+Processor.swift */, + BFE56E1823EB7BE00014FECD /* UIImage+SymbolFallback.swift */, ); path = Extensions; sourceTree = ""; @@ -1076,6 +1079,7 @@ BF797A2D1C2D339F00F1A000 /* UILabel+FontSize.swift in Sources */, BF80E1D21F13117000847008 /* ControllerInputsViewController.swift in Sources */, BF5942641E09BBB10051894B /* LoadControllerSkinImageOperation.swift in Sources */, + BFE56E1923EB7BE00014FECD /* UIImage+SymbolFallback.swift in Sources */, BF6EE5E91F7C5F860051AD6C /* _GameControllerInputMapping.swift in Sources */, BF5942871E09BC8B0051894B /* _ControllerSkin.swift in Sources */, BF95E2791E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift in Sources */, diff --git a/Delta/Components/Action.swift b/Delta/Components/Action.swift index 8385988..e0b1477 100644 --- a/Delta/Components/Action.swift +++ b/Delta/Components/Action.swift @@ -17,8 +17,7 @@ extension Action case destructive case selected - var alertActionStyle: UIAlertAction.Style - { + var alertActionStyle: UIAlertAction.Style { switch self { case .default, .selected: return .default @@ -27,8 +26,7 @@ extension Action } } - var previewActionStyle: UIPreviewAction.Style? - { + var previewActionStyle: UIPreviewAction.Style? { switch self { case .default: return .default @@ -40,11 +38,40 @@ extension Action } } +@available(iOS 13, *) +extension Action.Style +{ + var menuAttributes: UIMenuElement.Attributes { + switch self + { + case .default, .cancel, .selected: return [] + case .destructive: return .destructive + } + } + + var menuState: UIMenuElement.State { + switch self + { + case .default, .cancel, .destructive: return .off + case .selected: return .on + } + } +} + struct Action { - let title: String - let style: Style - let action: ((Action) -> Void)? + var title: String + var style: Style + var image: UIImage? = nil + var action: ((Action) -> Void)? + + init(title: String, style: Style = .default, image: UIImage? = nil, action: ((Action) -> Void)? = nil) + { + self.title = title + self.style = style + self.image = image + self.action = action + } } extension UIAlertAction @@ -82,6 +109,19 @@ extension UIAlertController } } +@available(iOS 13.0, *) +extension UIAction +{ + convenience init?(_ action: Action) + { + guard action.style != .cancel else { return nil } + + self.init(title: action.title, image: action.image, attributes: action.style.menuAttributes, state: action.style.menuState) { _ in + action.action?(action) + } + } +} + extension RangeReplaceableCollection where Iterator.Element == Action { var alertActions: [UIAlertAction] { @@ -93,4 +133,10 @@ extension RangeReplaceableCollection where Iterator.Element == Action let actions = self.compactMap { UIPreviewAction($0) } return actions } + + @available(iOS 13.0, *) + var menuActions: [UIAction] { + let actions = self.compactMap { UIAction($0) } + return actions + } } diff --git a/Delta/Emulation/PreviewGameViewController.swift b/Delta/Emulation/PreviewGameViewController.swift index 42833a4..2089c3c 100644 --- a/Delta/Emulation/PreviewGameViewController.swift +++ b/Delta/Emulation/PreviewGameViewController.swift @@ -41,7 +41,8 @@ class PreviewGameViewController: DeltaCore.GameViewController emulatorCore.addObserver(self, forKeyPath: #keyPath(EmulatorCore.state), options: [.old], context: &kvoContext) - self.preferredContentSize = emulatorCore.preferredRenderingSize + let size = CGSize(width: emulatorCore.preferredRenderingSize.width * 2.0, height: emulatorCore.preferredRenderingSize.height * 2.0) + self.preferredContentSize = size } } @@ -75,7 +76,7 @@ extension PreviewGameViewController super.viewDidAppear(animated) self.emulatorCoreQueue.async { - self.emulatorCore?.resume() + self.emulatorCore?.start() } } @@ -113,13 +114,9 @@ extension PreviewGameViewController if previousState == .stopped, state == .running { - self.emulatorCoreQueue.sync { - if self.isAppearing - { - // Pause to prevent it from starting before visible (in case user peeked slowly) - self.emulatorCore?.pause() - } - + self.emulatorCoreQueue.async { + // Pause to prevent it from starting before visible (in case user peeked slowly) + self.emulatorCore?.pause() self.preparePreview() } } @@ -172,5 +169,7 @@ private extension PreviewGameViewController // Re-enable emulatorCore to update gameView again self.emulatorCore?.add(self.gameView) + + self.emulatorCore?.resume() } } diff --git a/Delta/Extensions/UIImage+SymbolFallback.swift b/Delta/Extensions/UIImage+SymbolFallback.swift new file mode 100644 index 0000000..e3e5358 --- /dev/null +++ b/Delta/Extensions/UIImage+SymbolFallback.swift @@ -0,0 +1,24 @@ +// +// UIImage+SymbolFallback.swift +// Delta +// +// Created by Riley Testut on 2/5/20. +// Copyright © 2020 Riley Testut. All rights reserved. +// + +import UIKit + +extension UIImage +{ + convenience init?(symbolNameIfAvailable name: String) + { + if #available(iOS 13, *) + { + self.init(systemName: name) + } + else + { + return nil + } + } +} diff --git a/Delta/Game Selection/GameCollectionViewController.swift b/Delta/Game Selection/GameCollectionViewController.swift index 1eba284..7bd09e7 100644 --- a/Delta/Game Selection/GameCollectionViewController.swift +++ b/Delta/Game Selection/GameCollectionViewController.swift @@ -8,6 +8,7 @@ import UIKit import MobileCoreServices +import AVFoundation import DeltaCore @@ -59,8 +60,9 @@ class GameCollectionViewController: UICollectionViewController private let prototypeCell = GridCollectionViewCell() - private var _performing3DTouchTransition = false - private weak var _destination3DTouchTransitionViewController: UIViewController? + private var _performingPreviewTransition = false + private weak var _previewTransitionViewController: PreviewGameViewController? + private weak var _previewTransitionDestinationViewController: UIViewController? private var _renameAction: UIAlertAction? private var _changingArtworkGame: Game? @@ -92,27 +94,31 @@ extension GameCollectionViewController layout.itemWidth = 90 layout.minimumInteritemSpacing = 12 - self.registerForPreviewing(with: self, sourceView: self.collectionView!) - - let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(GameCollectionViewController.handleLongPressGesture(_:))) - self.collectionView?.addGestureRecognizer(longPressGestureRecognizer) + if #available(iOS 13, *) {} + else + { + self.registerForPreviewing(with: self, sourceView: self.collectionView!) + + let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(GameCollectionViewController.handleLongPressGesture(_:))) + self.collectionView?.addGestureRecognizer(longPressGestureRecognizer) + } } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) - if _performing3DTouchTransition + if _performingPreviewTransition { - _performing3DTouchTransition = false + _performingPreviewTransition = false // Unlike our custom transitions, 3D Touch transition doesn't manually call appearance methods for us // To compensate, we call them ourselves - _destination3DTouchTransitionViewController?.beginAppearanceTransition(true, animated: true) + _previewTransitionDestinationViewController?.beginAppearanceTransition(true, animated: true) self.transitionCoordinator?.animate(alongsideTransition: nil, completion: { (context) in - self._destination3DTouchTransitionViewController?.endAppearanceTransition() - self._destination3DTouchTransitionViewController = nil + self._previewTransitionDestinationViewController?.endAppearanceTransition() + self._previewTransitionDestinationViewController = nil }) } } @@ -176,9 +182,9 @@ extension GameCollectionViewController self.activeSaveState = nil - if _performing3DTouchTransition + if _performingPreviewTransition { - _destination3DTouchTransitionViewController = destinationViewController + _previewTransitionDestinationViewController = destinationViewController } default: break @@ -380,27 +386,27 @@ private extension GameCollectionViewController { let cancelAction = Action(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, action: nil) - let renameAction = Action(title: NSLocalizedString("Rename", comment: ""), style: .default, action: { [unowned self] action in + let renameAction = Action(title: NSLocalizedString("Rename", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "pencil.and.ellipsis.rectangle"), action: { [unowned self] action in self.rename(game) }) - let changeArtworkAction = Action(title: NSLocalizedString("Change Artwork", comment: ""), style: .default) { [unowned self] action in + let changeArtworkAction = Action(title: NSLocalizedString("Change Artwork", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "photo")) { [unowned self] action in self.changeArtwork(for: game) } - let shareAction = Action(title: NSLocalizedString("Share", comment: ""), style: .default, action: { [unowned self] action in + let shareAction = Action(title: NSLocalizedString("Share", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "square.and.arrow.up"), action: { [unowned self] action in self.share(game) }) - let saveStatesAction = Action(title: NSLocalizedString("Save States", comment: ""), style: .default, action: { [unowned self] action in + let saveStatesAction = Action(title: NSLocalizedString("Save States", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "doc.on.doc"), action: { [unowned self] action in self.viewSaveStates(for: game) }) - let importSaveFile = Action(title: NSLocalizedString("Import Save File", comment: ""), style: .default) { [unowned self] _ in + let importSaveFile = Action(title: NSLocalizedString("Import Save File", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "tray.and.arrow.down")) { [unowned self] _ in self.importSaveFile(for: game) } - let deleteAction = Action(title: NSLocalizedString("Delete", comment: ""), style: .destructive, action: { [unowned self] action in + let deleteAction = Action(title: NSLocalizedString("Delete", comment: ""), style: .destructive, image: UIImage(symbolNameIfAvailable: "trash"), action: { [unowned self] action in self.delete(game) }) @@ -687,6 +693,18 @@ extension GameCollectionViewController: UIViewControllerPreviewingDelegate let game = self.dataSource.item(at: indexPath) + let gameViewController = self.makePreviewGameViewController(for: game) + _previewTransitionViewController = gameViewController + return gameViewController + } + + func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) + { + self.commitPreviewTransition() + } + + func makePreviewGameViewController(for game: Game) -> PreviewGameViewController + { let gameViewController = PreviewGameViewController() gameViewController.game = game @@ -702,11 +720,11 @@ extension GameCollectionViewController: UIViewControllerPreviewingDelegate return gameViewController } - func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) + func commitPreviewTransition() { - let gameViewController = viewControllerToCommit as! PreviewGameViewController - let game = gameViewController.game as! Game + guard let gameViewController = _previewTransitionViewController else { return } + let game = gameViewController.game as! Game gameViewController.pauseEmulation() let indexPath = self.dataSource.fetchedResultsController.indexPath(forObject: game)! @@ -716,7 +734,7 @@ extension GameCollectionViewController: UIViewControllerPreviewingDelegate gameViewController.emulatorCore?.stop() - _performing3DTouchTransition = true + _performingPreviewTransition = true self.launchGame(at: indexPath, clearScreen: true, ignoreAlreadyRunningError: true) @@ -805,3 +823,55 @@ extension GameCollectionViewController: UICollectionViewDelegateFlowLayout return size } } + +@available(iOS 13.0, *) +extension GameCollectionViewController +{ + override func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? + { + let game = self.dataSource.item(at: indexPath) + let actions = self.actions(for: game) + + return UIContextMenuConfiguration(identifier: indexPath as NSIndexPath, previewProvider: { [weak self] in + guard let self = self else { return nil } + + let previewViewController = self.makePreviewGameViewController(for: game) + self._previewTransitionViewController = previewViewController + + return previewViewController + }) { suggestedActions in + return UIMenu(title: "", children: actions.menuActions) + } + } + + override func collectionView(_ collectionView: UICollectionView, willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionCommitAnimating) + { + self.commitPreviewTransition() + } + + override func collectionView(_ collectionView: UICollectionView, previewForHighlightingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? + { + guard let indexPath = configuration.identifier as? NSIndexPath else { return nil } + guard let cell = collectionView.cellForItem(at: indexPath as IndexPath) as? GridCollectionViewCell else { return nil } + + let parameters = UIPreviewParameters() + parameters.backgroundColor = .clear + + if let image = cell.imageView.image + { + let artworkFrame = AVMakeRect(aspectRatio: image.size, insideRect: cell.imageView.bounds) + + let bezierPath = UIBezierPath(rect: artworkFrame) + parameters.visiblePath = bezierPath + } + + let preview = UITargetedPreview(view: cell.imageView, parameters: parameters) + return preview + } + + override func collectionView(_ collectionView: UICollectionView, previewForDismissingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? + { + _previewTransitionViewController = nil + return self.collectionView(collectionView, previewForHighlightingContextMenuWithConfiguration: configuration) + } +} diff --git a/Delta/Pause Menu/Save States/SaveStatesViewController.swift b/Delta/Pause Menu/Save States/SaveStatesViewController.swift index 85bd353..53d3195 100644 --- a/Delta/Pause Menu/Save States/SaveStatesViewController.swift +++ b/Delta/Pause Menu/Save States/SaveStatesViewController.swift @@ -66,6 +66,8 @@ class SaveStatesViewController: UICollectionViewController private var prototypeCellWidthConstraint: NSLayoutConstraint! private var prototypeHeader = SaveStatesCollectionHeaderView() + private weak var _previewTransitionViewController: PreviewGameViewController? + private let dataSource: RSTFetchedResultsCollectionViewPrefetchingDataSource private var emulatorCoreSaveState: SaveStateProtocol? @@ -115,12 +117,16 @@ extension SaveStatesViewController self.prototypeCellWidthConstraint = self.prototypeCell.contentView.widthAnchor.constraint(equalToConstant: collectionViewLayout.itemWidth) self.prototypeCellWidthConstraint.isActive = true - let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(SaveStatesViewController.handleLongPressGesture(_:))) - self.collectionView?.addGestureRecognizer(longPressGestureRecognizer) - self.prepareEmulatorCoreSaveState() - self.registerForPreviewing(with: self, sourceView: self.collectionView!) + if #available(iOS 13, *) {} + else + { + self.registerForPreviewing(with: self, sourceView: self.collectionView!) + + let longPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: #selector(SaveStatesViewController.handleLongPressGesture(_:))) + self.collectionView?.addGestureRecognizer(longPressGestureRecognizer) + } self.navigationController?.navigationBar.barStyle = .blackTranslucent self.navigationController?.toolbar.barStyle = .blackTranslucent @@ -393,7 +399,18 @@ private extension SaveStatesViewController func updatePreviewSaveState(_ saveState: SaveState?) { - let alertController = UIAlertController(title: NSLocalizedString("Change Preview Save State?", comment: ""), message: NSLocalizedString("The Preview Save State is loaded whenever you preview this game from the Main Menu with 3D Touch. Are you sure you want to change it?", comment: ""), preferredStyle: .alert) + let message: String + + if #available(iOS 13, *) + { + message = NSLocalizedString("The Preview Save State is loaded whenever you long press this game from the Main Menu. Are you sure you want to change it?", comment: "") + } + else + { + message = NSLocalizedString("The Preview Save State is loaded whenever you 3D Touch this game from the Main Menu. Are you sure you want to change it?", comment: "") + } + + let alertController = UIAlertController(title: NSLocalizedString("Change Preview Save State?", comment: ""), message: message, preferredStyle: .alert) alertController.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, handler: nil)) alertController.addAction(UIAlertAction(title: NSLocalizedString("Change", comment: ""), style: .default, handler: { (action) in @@ -471,20 +488,31 @@ private extension SaveStatesViewController { guard saveState.type != .auto else { return nil } + let isPreviewAvailable: Bool + + if #available(iOS 13, *) + { + isPreviewAvailable = true + } + else + { + isPreviewAvailable = (self.traitCollection.forceTouchCapability == .available) + } + var actions = [Action]() - if self.traitCollection.forceTouchCapability == .available + if isPreviewAvailable { if saveState.game?.previewSaveState != saveState { - let previewAction = Action(title: NSLocalizedString("Set as Preview Save State", comment: ""), style: .default, action: { [unowned self] action in + let previewAction = Action(title: NSLocalizedString("Set as Preview Save State", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "eye.fill"), action: { [unowned self] action in self.updatePreviewSaveState(saveState) }) actions.append(previewAction) } else { - let previewAction = Action(title: NSLocalizedString("Remove as Preview Save State", comment: ""), style: .default, action: { [unowned self] action in + let previewAction = Action(title: NSLocalizedString("Remove as Preview Save State", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "eye.slash.fill"), action: { [unowned self] action in self.updatePreviewSaveState(nil) }) actions.append(previewAction) @@ -494,7 +522,7 @@ private extension SaveStatesViewController let cancelAction = Action(title: NSLocalizedString("Cancel", comment: ""), style: .cancel, action: nil) actions.append(cancelAction) - let renameAction = Action(title: NSLocalizedString("Rename", comment: ""), style: .default, action: { [unowned self] action in + let renameAction = Action(title: NSLocalizedString("Rename", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "pencil.and.ellipsis.rectangle"), action: { [unowned self] action in self.renameSaveState(saveState) }) actions.append(renameAction) @@ -504,19 +532,19 @@ private extension SaveStatesViewController case .auto: break case .quick: break case .general: - let lockAction = Action(title: NSLocalizedString("Lock", comment: ""), style: .default, action: { [unowned self] action in + let lockAction = Action(title: NSLocalizedString("Lock", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "lock.fill"), action: { [unowned self] action in self.lockSaveState(saveState) }) actions.append(lockAction) case .locked: - let unlockAction = Action(title: NSLocalizedString("Unlock", comment: ""), style: .default, action: { [unowned self] action in + let unlockAction = Action(title: NSLocalizedString("Unlock", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "lock.open.fill"), action: { [unowned self] action in self.unlockSaveState(saveState) }) actions.append(unlockAction) } - let deleteAction = Action(title: NSLocalizedString("Delete", comment: ""), style: .destructive, action: { [unowned self] action in + let deleteAction = Action(title: NSLocalizedString("Delete", comment: ""), style: .destructive, image: UIImage(symbolNameIfAvailable: "trash"), action: { [unowned self] action in self.deleteSaveState(saveState) }) actions.append(deleteAction) @@ -608,21 +636,36 @@ extension SaveStatesViewController: UIViewControllerPreviewingDelegate previewingContext.sourceRect = layoutAttributes.frame let saveState = self.dataSource.item(at: indexPath) - let actions = self.actionsForSaveState(saveState)?.previewActions ?? [] - let previewImage = self.dataSource.prefetchItemCache.object(forKey: saveState) ?? UIImage(contentsOfFile: saveState.imageFileURL.path) - let previewGameViewController = PreviewGameViewController() - previewGameViewController.game = self.game - previewGameViewController.overridePreviewActionItems = actions - previewGameViewController.previewSaveState = saveState - previewGameViewController.previewImage = previewImage + let previewGameViewController = self.makePreviewGameViewController(for: saveState) + _previewTransitionViewController = previewGameViewController return previewGameViewController } func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) { - let gameViewController = viewControllerToCommit as! PreviewGameViewController + self.commitPreviewTransition() + } + + func makePreviewGameViewController(for saveState: SaveState) -> PreviewGameViewController + { + let previewImage = self.dataSource.prefetchItemCache.object(forKey: saveState) ?? UIImage(contentsOfFile: saveState.imageFileURL.path) + + let gameViewController = PreviewGameViewController() + gameViewController.game = self.game + gameViewController.previewSaveState = saveState + gameViewController.previewImage = previewImage + + let actions = self.actionsForSaveState(saveState)?.previewActions ?? [] + gameViewController.overridePreviewActionItems = actions + + return gameViewController + } + + func commitPreviewTransition() + { + guard let gameViewController = self._previewTransitionViewController else { return } gameViewController.pauseEmulation() let fileURL = FileManager.default.uniqueTemporaryURL() @@ -708,3 +751,47 @@ extension SaveStatesViewController: UICollectionViewDelegateFlowLayout return size } } + +@available(iOS 13.0, *) +extension SaveStatesViewController +{ + override func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? + { + let saveState = self.dataSource.item(at: indexPath) + guard let actions = self.actionsForSaveState(saveState) else { return nil } + + return UIContextMenuConfiguration(identifier: indexPath as NSIndexPath, previewProvider: { [weak self] in + guard let self = self else { return nil } + + let previewGameViewController = self.makePreviewGameViewController(for: saveState) + self._previewTransitionViewController = previewGameViewController + + return previewGameViewController + }) { suggestedActions in + return UIMenu(title: "", children: actions.menuActions) + } + } + + override func collectionView(_ collectionView: UICollectionView, willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionCommitAnimating) + { + self.commitPreviewTransition() + } + + override func collectionView(_ collectionView: UICollectionView, previewForHighlightingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? + { + guard let indexPath = configuration.identifier as? NSIndexPath else { return nil } + guard let cell = collectionView.cellForItem(at: indexPath as IndexPath) as? GridCollectionViewCell else { return nil } + + let parameters = UIPreviewParameters() + parameters.backgroundColor = .clear + + let preview = UITargetedPreview(view: cell.imageView, parameters: parameters) + return preview + } + + override func collectionView(_ collectionView: UICollectionView, previewForDismissingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? + { + self._previewTransitionViewController = nil + return self.collectionView(collectionView, previewForHighlightingContextMenuWithConfiguration: configuration) + } +} From 0373b757f72c5512611aa92f8223f7e1f10bb83c Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Fri, 7 Feb 2020 15:45:34 -0800 Subject: [PATCH 008/105] Adds ability to assign controller skins per game --- Delta.xcodeproj/project.pbxproj | 12 +- Delta/Base.lproj/GamesDatabase.storyboard | 12 +- Delta/Base.lproj/Main.storyboard | 36 +++- Delta/Base.lproj/Settings.storyboard | 115 +++++++------ .../Delta.xcdatamodeld/.xccurrentversion | 2 +- .../Delta 5.xcdatamodel/contents | 159 ++++++++++++++++++ .../Model/Machine/_ControllerSkin.swift | 4 + Delta/Database/Model/Machine/_Game.swift | 4 + Delta/Emulation/GameViewController.swift | 6 +- .../GameCollectionViewController.swift | 23 ++- .../ControllerSkinsViewController.swift | 29 +++- ...ferredControllerSkinsViewController.swift} | 101 ++++++++++- Delta/Settings/Settings.swift | 64 ++++++- Delta/Settings/SettingsViewController.swift | 4 +- 14 files changed, 479 insertions(+), 92 deletions(-) create mode 100644 Delta/Database/Model/Delta.xcdatamodeld/Delta 5.xcdatamodel/contents rename Delta/Settings/Controller Skins/{SystemControllerSkinsViewController.swift => PreferredControllerSkinsViewController.swift} (63%) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 407ca30..b3d3c6c 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -31,7 +31,7 @@ BF13A7581D5D2FD9000BB055 /* EmulatorCore+Cheats.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF13A7571D5D2FD9000BB055 /* EmulatorCore+Cheats.swift */; }; BF15AF841F54B43B009B6AAB /* ActionInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF15AF831F54B43B009B6AAB /* ActionInput.swift */; }; BF18B61F1E2985F900F70067 /* UIAlertController+Importing.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */; }; - BF1DAD5D1D9F576000E752A7 /* SystemControllerSkinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1DAD5C1D9F576000E752A7 /* SystemControllerSkinsViewController.swift */; }; + BF1DAD5D1D9F576000E752A7 /* PreferredControllerSkinsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1DAD5C1D9F576000E752A7 /* PreferredControllerSkinsViewController.swift */; }; BF1F45A421AF274D00EF9895 /* SyncResultViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1F45A321AF274D00EF9895 /* SyncResultViewController.swift */; }; BF1F45AB21AF4B5800EF9895 /* SyncResultsViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF1F45AA21AF4B5800EF9895 /* SyncResultsViewController.storyboard */; }; BF1F45AD21AF57BA00EF9895 /* HarmonyMetadataKey+Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF1F45AC21AF57BA00EF9895 /* HarmonyMetadataKey+Keys.swift */; }; @@ -166,7 +166,7 @@ BF13A7571D5D2FD9000BB055 /* EmulatorCore+Cheats.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "EmulatorCore+Cheats.swift"; sourceTree = ""; }; BF15AF831F54B43B009B6AAB /* ActionInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionInput.swift; sourceTree = ""; }; BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIAlertController+Importing.swift"; sourceTree = ""; }; - BF1DAD5C1D9F576000E752A7 /* SystemControllerSkinsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SystemControllerSkinsViewController.swift; sourceTree = ""; }; + BF1DAD5C1D9F576000E752A7 /* PreferredControllerSkinsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferredControllerSkinsViewController.swift; sourceTree = ""; }; BF1F45A321AF274D00EF9895 /* SyncResultViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncResultViewController.swift; sourceTree = ""; }; BF1F45AA21AF4B5800EF9895 /* SyncResultsViewController.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = SyncResultsViewController.storyboard; sourceTree = ""; }; BF1F45AC21AF57BA00EF9895 /* HarmonyMetadataKey+Keys.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "HarmonyMetadataKey+Keys.swift"; sourceTree = ""; }; @@ -287,6 +287,7 @@ BFDF71DA22F94CDF0074D92E /* DSDeltaCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = DSDeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopoverMenuButton.swift; sourceTree = ""; }; BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveStatesStoryboardSegue.swift; sourceTree = ""; }; + BFE4275223EDF75300E6B417 /* Delta 5.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Delta 5.xcdatamodel"; sourceTree = ""; }; BFE56E1823EB7BE00014FECD /* UIImage+SymbolFallback.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+SymbolFallback.swift"; sourceTree = ""; }; BFE593C921F3F8B7003412A6 /* GameSave.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameSave.swift; sourceTree = ""; }; BFE593CB21F3F8C2003412A6 /* _GameSave.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _GameSave.swift; sourceTree = ""; }; @@ -371,7 +372,7 @@ BF1DAD5B1D9F574900E752A7 /* Controller Skins */ = { isa = PBXGroup; children = ( - BF1DAD5C1D9F576000E752A7 /* SystemControllerSkinsViewController.swift */, + BF1DAD5C1D9F576000E752A7 /* PreferredControllerSkinsViewController.swift */, BF04E6FE1DB8625C000F35D3 /* ControllerSkinsViewController.swift */, BF99A5961DC2F9C400468E9E /* ControllerSkinTableViewCell.swift */, ); @@ -1055,7 +1056,7 @@ BF1F45AD21AF57BA00EF9895 /* HarmonyMetadataKey+Keys.swift in Sources */, BFD1EF402336BD8800D197CF /* UIDevice+Processor.swift in Sources */, BF71CF871FE90006001F1613 /* AppIconShortcutsViewController.swift in Sources */, - BF1DAD5D1D9F576000E752A7 /* SystemControllerSkinsViewController.swift in Sources */, + BF1DAD5D1D9F576000E752A7 /* PreferredControllerSkinsViewController.swift in Sources */, BFE022A01F5B57FF0052D888 /* PopoverMenuButton.swift in Sources */, BF6BF31C1EB821A0008E83CD /* GamesDatabaseImportOption.swift in Sources */, BFFA4C091E8A24D600D87934 /* GameTableViewCell.swift in Sources */, @@ -1374,12 +1375,13 @@ BF4828811F9027B600028B97 /* Delta.xcdatamodeld */ = { isa = XCVersionGroup; children = ( + BFE4275223EDF75300E6B417 /* Delta 5.xcdatamodel */, BF0758DE2202827C005110F2 /* Delta 4.xcdatamodel */, BF5645092202381000A8EA26 /* Delta 3.xcdatamodel */, BF4828821F9027B600028B97 /* Delta 2.xcdatamodel */, BF4828831F9027B600028B97 /* Delta.xcdatamodel */, ); - currentVersion = BF0758DE2202827C005110F2 /* Delta 4.xcdatamodel */; + currentVersion = BFE4275223EDF75300E6B417 /* Delta 5.xcdatamodel */; path = Delta.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/Delta/Base.lproj/GamesDatabase.storyboard b/Delta/Base.lproj/GamesDatabase.storyboard index 4ef0bec..415376c 100644 --- a/Delta/Base.lproj/GamesDatabase.storyboard +++ b/Delta/Base.lproj/GamesDatabase.storyboard @@ -1,11 +1,9 @@ - - - - + + - + @@ -25,7 +23,7 @@ - + @@ -41,7 +39,7 @@ - + diff --git a/Delta/Base.lproj/Main.storyboard b/Delta/Base.lproj/Main.storyboard index 9551acf..ec83268 100644 --- a/Delta/Base.lproj/Main.storyboard +++ b/Delta/Base.lproj/Main.storyboard @@ -1,9 +1,9 @@ - + - + @@ -83,6 +83,7 @@ + @@ -217,7 +218,7 @@ - + @@ -225,6 +226,16 @@ + + + + + + + + + + @@ -235,6 +246,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Delta/Base.lproj/Settings.storyboard b/Delta/Base.lproj/Settings.storyboard index d6e9a5b..e97a4aa 100644 --- a/Delta/Base.lproj/Settings.storyboard +++ b/Delta/Base.lproj/Settings.storyboard @@ -1,9 +1,9 @@ - + - + @@ -18,7 +18,7 @@ diff --git a/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion b/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion index 77fa15c..a1764f4 100644 --- a/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion +++ b/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - Delta 4.xcdatamodel + Delta 5.xcdatamodel diff --git a/Delta/Database/Model/Delta.xcdatamodeld/Delta 5.xcdatamodel/contents b/Delta/Database/Model/Delta.xcdatamodeld/Delta 5.xcdatamodel/contents new file mode 100644 index 0000000..83d3b3e --- /dev/null +++ b/Delta/Database/Model/Delta.xcdatamodeld/Delta 5.xcdatamodel/contents @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Delta/Database/Model/Machine/_ControllerSkin.swift b/Delta/Database/Model/Machine/_ControllerSkin.swift index bff971e..246cc87 100644 --- a/Delta/Database/Model/Machine/_ControllerSkin.swift +++ b/Delta/Database/Model/Machine/_ControllerSkin.swift @@ -28,5 +28,9 @@ public class _ControllerSkin: NSManagedObject // MARK: - Relationships + @NSManaged public var preferredLandscapeSkinByGames: Set + + @NSManaged public var preferredPortraitSkinByGames: Set + } diff --git a/Delta/Database/Model/Machine/_Game.swift b/Delta/Database/Model/Machine/_Game.swift index 112510b..d1bde54 100644 --- a/Delta/Database/Model/Machine/_Game.swift +++ b/Delta/Database/Model/Machine/_Game.swift @@ -34,6 +34,10 @@ public class _Game: NSManagedObject @NSManaged public var gameSave: GameSave? + @NSManaged public var preferredLandscapeSkin: ControllerSkin? + + @NSManaged public var preferredPortraitSkin: ControllerSkin? + @NSManaged public var previewSaveState: SaveState? @NSManaged public var saveStates: Set diff --git a/Delta/Emulation/GameViewController.swift b/Delta/Emulation/GameViewController.swift index 7ff5363..3799552 100644 --- a/Delta/Emulation/GameViewController.swift +++ b/Delta/Emulation/GameViewController.swift @@ -556,14 +556,14 @@ private extension GameViewController func updateControllerSkin() { - guard let game = self.game, let system = System(gameType: game.type), let window = self.view.window else { return } + guard let game = self.game as? Game, let window = self.view.window else { return } let traits = DeltaCore.ControllerSkin.Traits.defaults(for: window) - let controllerSkin = Settings.preferredControllerSkin(for: system, traits: traits) + let controllerSkin = Settings.preferredControllerSkin(for: game, traits: traits) self.controllerView.controllerSkin = controllerSkin - self.view.setNeedsUpdateConstraints() + self.view.setNeedsLayout() } } diff --git a/Delta/Game Selection/GameCollectionViewController.swift b/Delta/Game Selection/GameCollectionViewController.swift index 7bd09e7..eb2dc9e 100644 --- a/Delta/Game Selection/GameCollectionViewController.swift +++ b/Delta/Game Selection/GameCollectionViewController.swift @@ -148,6 +148,12 @@ extension GameCollectionViewController saveStatesViewController.game = game saveStatesViewController.mode = .loading saveStatesViewController.theme = self.theme + + case "preferredControllerSkins": + let game = sender as! Game + + let preferredControllerSkinsViewController = (segue.destination as! UINavigationController).topViewController as! PreferredControllerSkinsViewController + preferredControllerSkinsViewController.game = game case "unwindFromGames": let destinationViewController = segue.destination as! GameViewController @@ -191,11 +197,7 @@ extension GameCollectionViewController } } - @IBAction private func unwindFromSaveStatesViewController(with segue: UIStoryboardSegue) - { - } - - @IBAction private func unwindFromGamesDatabaseBrowser(with segue: UIStoryboardSegue) + @IBAction private func unwindToGameCollectionViewController(_ segue: UIStoryboardSegue) { } } @@ -394,6 +396,10 @@ private extension GameCollectionViewController self.changeArtwork(for: game) } + let changeControllerSkinAction = Action(title: NSLocalizedString("Change Controller Skin", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "gamecontroller")) { [unowned self] _ in + self.changePreferredControllerSkin(for: game) + } + let shareAction = Action(title: NSLocalizedString("Share", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "square.and.arrow.up"), action: { [unowned self] action in self.share(game) }) @@ -413,7 +419,7 @@ private extension GameCollectionViewController switch game.type { case GameType.unknown: return [cancelAction, renameAction, changeArtworkAction, shareAction, deleteAction] - default: return [cancelAction, renameAction, changeArtworkAction, shareAction, saveStatesAction, importSaveFile, deleteAction] + default: return [cancelAction, renameAction, changeArtworkAction, changeControllerSkinAction, shareAction, saveStatesAction, importSaveFile, deleteAction] } } @@ -655,6 +661,11 @@ private extension GameCollectionViewController } } + func changePreferredControllerSkin(for game: Game) + { + self.performSegue(withIdentifier: "preferredControllerSkins", sender: game) + } + @objc func textFieldTextDidChange(_ textField: UITextField) { let text = textField.text ?? "" diff --git a/Delta/Settings/Controller Skins/ControllerSkinsViewController.swift b/Delta/Settings/Controller Skins/ControllerSkinsViewController.swift index 6ab6033..cc3619c 100644 --- a/Delta/Settings/Controller Skins/ControllerSkinsViewController.swift +++ b/Delta/Settings/Controller Skins/ControllerSkinsViewController.swift @@ -12,8 +12,16 @@ import DeltaCore import Roxas +protocol ControllerSkinsViewControllerDelegate: AnyObject +{ + func controllerSkinsViewController(_ controllerSkinsViewController: ControllerSkinsViewController, didChooseControllerSkin controllerSkin: ControllerSkin) + func controllerSkinsViewControllerDidResetControllerSkin(_ controllerSkinsViewController: ControllerSkinsViewController) +} + class ControllerSkinsViewController: UITableViewController { + weak var delegate: ControllerSkinsViewControllerDelegate? + var system: System! { didSet { self.updateDataSource() @@ -26,6 +34,8 @@ class ControllerSkinsViewController: UITableViewController } } + var isResetButtonVisible: Bool = true + private let dataSource: RSTFetchedResultsTableViewPrefetchingDataSource required init?(coder aDecoder: NSCoder) @@ -46,6 +56,11 @@ extension ControllerSkinsViewController self.tableView.dataSource = self.dataSource self.tableView.prefetchDataSource = self.dataSource + + if !self.isResetButtonVisible + { + self.navigationItem.rightBarButtonItem = nil + } } override func didReceiveMemoryWarning() @@ -114,6 +129,16 @@ private extension ControllerSkinsViewController self.dataSource.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.shared.viewContext, sectionNameKeyPath: #keyPath(ControllerSkin.name), cacheName: nil) } + + @IBAction func resetControllerSkin(_ sender: UIBarButtonItem) + { + let alertController = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet) + alertController.addAction(.cancel) + alertController.addAction(UIAlertAction(title: NSLocalizedString("Reset Controller Skin to Default", comment: ""), style: .destructive, handler: { (action) in + self.delegate?.controllerSkinsViewControllerDidResetControllerSkin(self) + })) + self.present(alertController, animated: true, completion: nil) + } } extension ControllerSkinsViewController @@ -155,9 +180,7 @@ extension ControllerSkinsViewController override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let controllerSkin = self.dataSource.item(at: indexPath) - Settings.setPreferredControllerSkin(controllerSkin, for: self.system, traits: self.traits) - - _ = self.navigationController?.popViewController(animated: true) + self.delegate?.controllerSkinsViewController(self, didChooseControllerSkin: controllerSkin) } override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat diff --git a/Delta/Settings/Controller Skins/SystemControllerSkinsViewController.swift b/Delta/Settings/Controller Skins/PreferredControllerSkinsViewController.swift similarity index 63% rename from Delta/Settings/Controller Skins/SystemControllerSkinsViewController.swift rename to Delta/Settings/Controller Skins/PreferredControllerSkinsViewController.swift index 648aa09..7a5379a 100644 --- a/Delta/Settings/Controller Skins/SystemControllerSkinsViewController.swift +++ b/Delta/Settings/Controller Skins/PreferredControllerSkinsViewController.swift @@ -1,5 +1,5 @@ // -// SystemControllerSkinsViewController.swift +// PreferredControllerSkinsViewController.swift // Delta // // Created by Riley Testut on 9/30/16. @@ -10,7 +10,7 @@ import UIKit import DeltaCore -extension SystemControllerSkinsViewController +extension PreferredControllerSkinsViewController { private enum Section: Int { @@ -19,10 +19,17 @@ extension SystemControllerSkinsViewController } } -class SystemControllerSkinsViewController: UITableViewController +class PreferredControllerSkinsViewController: UITableViewController { var system: System! + var game: Game? { + didSet { + guard let game = self.game, let system = System(gameType: game.type) else { return } + self.system = system + } + } + @IBOutlet private var portraitImageView: UIImageView! @IBOutlet private var landscapeImageView: UIImageView! @@ -31,13 +38,19 @@ class SystemControllerSkinsViewController: UITableViewController private var landscapeControllerSkin: ControllerSkin? } -extension SystemControllerSkinsViewController +extension PreferredControllerSkinsViewController { override func viewDidLoad() { super.viewDidLoad() - self.title = self.system.localizedShortName + self.title = self.game?.name ?? self.system.localizedShortName + + if self.navigationController?.viewControllers.first != self + { + // Hide Done button since we are not root view controller. + self.navigationItem.rightBarButtonItem = nil + } } override func viewDidDisappear(_ animated: Bool) @@ -68,6 +81,7 @@ extension SystemControllerSkinsViewController guard let cell = sender as? UITableViewCell, let indexPath = self.tableView.indexPath(for: cell), let window = self.view.window else { return } let controllerSkinsViewController = segue.destination as! ControllerSkinsViewController + controllerSkinsViewController.delegate = self controllerSkinsViewController.system = self.system var traits = DeltaCore.ControllerSkin.Traits.defaults(for: window) @@ -80,10 +94,31 @@ extension SystemControllerSkinsViewController } controllerSkinsViewController.traits = traits + + let isResetButtonVisible: Bool + + if let game = self.game + { + switch section + { + case .portrait: isResetButtonVisible = (game.preferredPortraitSkin != nil) + case .landscape: isResetButtonVisible = (game.preferredLandscapeSkin != nil) + } + } + else + { + switch section + { + case .portrait: isResetButtonVisible = !(self.portraitControllerSkin?.isStandard ?? false) + case .landscape: isResetButtonVisible = !(self.portraitControllerSkin?.isStandard ?? false) + } + } + + controllerSkinsViewController.isResetButtonVisible = isResetButtonVisible } } -extension SystemControllerSkinsViewController +extension PreferredControllerSkinsViewController { override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { @@ -115,7 +150,7 @@ extension SystemControllerSkinsViewController } } -private extension SystemControllerSkinsViewController +private extension PreferredControllerSkinsViewController { func updateControllerSkins() { @@ -126,7 +161,25 @@ private extension SystemControllerSkinsViewController let portraitTraits = self.makeTraits(orientation: .portrait, in: window) let landscapeTraits = self.makeTraits(orientation: .landscape, in: window) - let portraitControllerSkin = Settings.preferredControllerSkin(for: self.system, traits: portraitTraits) + var portraitControllerSkin: ControllerSkin? + var landscapeControllerSkin: ControllerSkin? + + if let game = self.game + { + portraitControllerSkin = Settings.preferredControllerSkin(for: game, traits: portraitTraits) + landscapeControllerSkin = Settings.preferredControllerSkin(for: game, traits: landscapeTraits) + } + + if portraitControllerSkin == nil + { + portraitControllerSkin = Settings.preferredControllerSkin(for: self.system, traits: portraitTraits) + } + + if landscapeControllerSkin == nil + { + landscapeControllerSkin = Settings.preferredControllerSkin(for: self.system, traits: landscapeTraits) + } + if portraitControllerSkin != self.portraitControllerSkin { self.portraitImageView.image = nil @@ -135,7 +188,6 @@ private extension SystemControllerSkinsViewController self.portraitControllerSkin = portraitControllerSkin } - let landscapeControllerSkin = Settings.preferredControllerSkin(for: self.system, traits: landscapeTraits) if landscapeControllerSkin != self.landscapeControllerSkin { self.landscapeImageView.image = nil @@ -186,3 +238,34 @@ private extension SystemControllerSkinsViewController return traits } } + +extension PreferredControllerSkinsViewController: ControllerSkinsViewControllerDelegate +{ + func controllerSkinsViewController(_ controllerSkinsViewController: ControllerSkinsViewController, didChooseControllerSkin controllerSkin: ControllerSkin) + { + if let game = self.game + { + Settings.setPreferredControllerSkin(controllerSkin, for: game, traits: controllerSkinsViewController.traits) + } + else + { + Settings.setPreferredControllerSkin(controllerSkin, for: self.system, traits: controllerSkinsViewController.traits) + } + + _ = self.navigationController?.popViewController(animated: true) + } + + func controllerSkinsViewControllerDidResetControllerSkin(_ controllerSkinsViewController: ControllerSkinsViewController) + { + if let game = self.game + { + Settings.setPreferredControllerSkin(nil, for: game, traits: controllerSkinsViewController.traits) + } + else + { + Settings.setPreferredControllerSkin(nil, for: self.system, traits: controllerSkinsViewController.traits) + } + + _ = self.navigationController?.popViewController(animated: true) + } +} diff --git a/Delta/Settings/Settings.swift b/Delta/Settings/Settings.swift index 63c4b5b..d31f110 100644 --- a/Delta/Settings/Settings.swift +++ b/Delta/Settings/Settings.swift @@ -217,16 +217,74 @@ extension Settings return nil } - static func setPreferredControllerSkin(_ controllerSkin: ControllerSkin, for system: System, traits: DeltaCore.ControllerSkin.Traits) + static func setPreferredControllerSkin(_ controllerSkin: ControllerSkin?, for system: System, traits: DeltaCore.ControllerSkin.Traits) { guard let userDefaultKey = self.preferredControllerSkinKey(for: system, traits: traits) else { return } - guard UserDefaults.standard.string(forKey: userDefaultKey) != controllerSkin.identifier else { return } + guard UserDefaults.standard.string(forKey: userDefaultKey) != controllerSkin?.identifier else { return } - UserDefaults.standard.set(controllerSkin.identifier, forKey: userDefaultKey) + UserDefaults.standard.set(controllerSkin?.identifier, forKey: userDefaultKey) NotificationCenter.default.post(name: .settingsDidChange, object: controllerSkin, userInfo: [NotificationUserInfoKey.name: Name.preferredControllerSkin, NotificationUserInfoKey.system: system, NotificationUserInfoKey.traits: traits]) } + + static func preferredControllerSkin(for game: Game, traits: DeltaCore.ControllerSkin.Traits) -> ControllerSkin? + { + let preferredControllerSkin: ControllerSkin? + + switch traits.orientation + { + case .portrait: preferredControllerSkin = game.preferredPortraitSkin + case .landscape: preferredControllerSkin = game.preferredLandscapeSkin + } + + if let controllerSkin = preferredControllerSkin, controllerSkin.supports(traits) + { + return controllerSkin + } + + if let system = System(gameType: game.type) + { + // Fall back to using preferred controller skin for the system. + let controllerSkin = Settings.preferredControllerSkin(for: system, traits: traits) + return controllerSkin + } + + return nil + } + + static func setPreferredControllerSkin(_ controllerSkin: ControllerSkin?, for game: Game, traits: DeltaCore.ControllerSkin.Traits) + { + let context = DatabaseManager.shared.newBackgroundContext() + context.performAndWait { + let game = context.object(with: game.objectID) as! Game + + let skin: ControllerSkin? + if let controllerSkin = controllerSkin, let contextSkin = context.object(with: controllerSkin.objectID) as? ControllerSkin + { + skin = contextSkin + } + else + { + skin = nil + } + + switch traits.orientation + { + case .portrait: game.preferredPortraitSkin = skin + case .landscape: game.preferredLandscapeSkin = skin + } + + context.saveWithErrorLogging() + } + + game.managedObjectContext?.refresh(game, mergeChanges: false) + + if let system = System(gameType: game.type) + { + NotificationCenter.default.post(name: .settingsDidChange, object: controllerSkin, userInfo: [NotificationUserInfoKey.name: Name.preferredControllerSkin, NotificationUserInfoKey.system: system, NotificationUserInfoKey.traits: traits]) + } + } } private extension Settings diff --git a/Delta/Settings/SettingsViewController.swift b/Delta/Settings/SettingsViewController.swift index f8fb868..1cf116e 100644 --- a/Delta/Settings/SettingsViewController.swift +++ b/Delta/Settings/SettingsViewController.swift @@ -139,10 +139,10 @@ class SettingsViewController: UITableViewController controllersSettingsViewController.playerIndex = indexPath.row case Segue.controllerSkins: - let systemControllerSkinsViewController = segue.destination as! SystemControllerSkinsViewController + let preferredControllerSkinsViewController = segue.destination as! PreferredControllerSkinsViewController let system = System.registeredSystems[indexPath.row] - systemControllerSkinsViewController.system = system + preferredControllerSkinsViewController.system = system } } } From 59beb243c00c805de796c1d336c31c82d512d0ea Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Fri, 7 Feb 2020 16:01:49 -0800 Subject: [PATCH 009/105] Adds Save State and Fast Forward controller skin actions --- Delta/Emulation/ActionInput.swift | 1 + Delta/Emulation/GameViewController.swift | 42 ++++++++++++++++--- .../ControllerInputsViewController.swift | 2 + 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/Delta/Emulation/ActionInput.swift b/Delta/Emulation/ActionInput.swift index 7597eaf..1612dc1 100644 --- a/Delta/Emulation/ActionInput.swift +++ b/Delta/Emulation/ActionInput.swift @@ -18,6 +18,7 @@ enum ActionInput: String case quickSave case quickLoad case fastForward + case toggleFastForward } extension ActionInput: Input diff --git a/Delta/Emulation/GameViewController.swift b/Delta/Emulation/GameViewController.swift index 3799552..10f0f14 100644 --- a/Delta/Emulation/GameViewController.swift +++ b/Delta/Emulation/GameViewController.swift @@ -31,6 +31,29 @@ private extension GameViewController } } + struct DefaultInputMapping: GameControllerInputMappingProtocol + { + let gameController: GameController + + var gameControllerInputType: GameControllerInputType { + return self.gameController.inputType + } + + func input(forControllerInput controllerInput: Input) -> Input? + { + if let mappedInput = self.gameController.defaultInputMapping?.input(forControllerInput: controllerInput) + { + return mappedInput + } + + // Only intercept controller skin inputs. + guard controllerInput.type == .controller(.controllerSkin) else { return nil } + + let actionInput = ActionInput(stringValue: controllerInput.stringValue) + return actionInput + } + } + struct SustainInputsMapping: GameControllerInputMappingProtocol { let gameController: GameController @@ -190,7 +213,7 @@ class GameViewController: DeltaCore.GameViewController self.inputsToSustain[AnyInput(input)] = value } } - else if self.emulatorCore?.state == .running + else if let emulatorCore = self.emulatorCore, emulatorCore.state == .running { guard let actionInput = ActionInput(input: input) else { return } @@ -199,6 +222,9 @@ class GameViewController: DeltaCore.GameViewController case .quickSave: self.performQuickSaveAction() case .quickLoad: self.performQuickLoadAction() case .fastForward: self.performFastForwardAction(activate: true) + case .toggleFastForward: + let isFastForwarding = (emulatorCore.rate != emulatorCore.deltaCore.supportedRates.lowerBound) + self.performFastForwardAction(activate: !isFastForwarding) } } } @@ -223,6 +249,7 @@ class GameViewController: DeltaCore.GameViewController case .quickSave: break case .quickLoad: break case .fastForward: self.performFastForwardAction(activate: false) + case .toggleFastForward: break } } } @@ -518,16 +545,19 @@ private extension GameViewController { if gameController.playerIndex != nil { - if let inputMapping = GameControllerInputMapping.inputMapping(for: gameController, gameType: game.type, in: DatabaseManager.shared.viewContext) + let inputMapping: GameControllerInputMappingProtocol + + if let mapping = GameControllerInputMapping.inputMapping(for: gameController, gameType: game.type, in: DatabaseManager.shared.viewContext) { - gameController.addReceiver(self, inputMapping: inputMapping) - gameController.addReceiver(emulatorCore, inputMapping: inputMapping) + inputMapping = mapping } else { - gameController.addReceiver(self) - gameController.addReceiver(emulatorCore) + inputMapping = DefaultInputMapping(gameController: gameController) } + + gameController.addReceiver(self, inputMapping: inputMapping) + gameController.addReceiver(emulatorCore, inputMapping: inputMapping) } else { diff --git a/Delta/Settings/Controllers/ControllerInputsViewController.swift b/Delta/Settings/Controllers/ControllerInputsViewController.swift index 1aaa1ef..2f7b14f 100644 --- a/Delta/Settings/Controllers/ControllerInputsViewController.swift +++ b/Delta/Settings/Controllers/ControllerInputsViewController.swift @@ -223,6 +223,8 @@ private extension ControllerInputsViewController case .fastForward: image = #imageLiteral(resourceName: "FastForward") text = NSLocalizedString("Fast Forward", comment: "") + + case .toggleFastForward: continue } let item = MenuItem(text: text, image: image) { [unowned self] (item) in From 89db6b0d3a905bd0f37d1d8f44cb1562d30bf741 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 11 Feb 2020 15:44:45 -0800 Subject: [PATCH 010/105] Migrates from Core Data model v4 to v5 --- Delta.xcodeproj/project.pbxproj | 4 + .../xcmapping.xml | 345 ++++++++++++++++++ External/Roxas | 2 +- 3 files changed, 350 insertions(+), 1 deletion(-) create mode 100644 Delta/Database/Model/Migrations/Delta4ToDelta5.xcmappingmodel/xcmapping.xml diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index b3d3c6c..a75ef42 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -133,6 +133,7 @@ BFE593CA21F3F8B7003412A6 /* GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593C921F3F8B7003412A6 /* GameSave.swift */; }; BFE593CC21F3F8C2003412A6 /* _GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593CB21F3F8C2003412A6 /* _GameSave.swift */; }; BFEE507D23E7612300416151 /* liblibDeSmuME.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF76BDE823E649150073702C /* liblibDeSmuME.a */; }; + BFEE943D23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = BFEE943C23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel */; }; BFEF24F31F7DD4FD00454C62 /* SaveStateMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */; }; BFF6452E1F7CC5060056533E /* GameControllerInputMappingTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */; }; BFFA4C091E8A24D600D87934 /* GameTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFFA4C081E8A24D600D87934 /* GameTableViewCell.swift */; }; @@ -292,6 +293,7 @@ BFE593C921F3F8B7003412A6 /* GameSave.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameSave.swift; sourceTree = ""; }; BFE593CB21F3F8C2003412A6 /* _GameSave.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _GameSave.swift; sourceTree = ""; }; BFEC732C1AAECC4A00650035 /* Roxas.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Roxas.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BFEE943C23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Delta4ToDelta5.xcmappingmodel; sourceTree = ""; }; BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveStateMigrationPolicy.swift; sourceTree = ""; }; BFF0742B1E9DC17500ACDF4A /* GBCDeltaCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = GBCDeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFFA4C081E8A24D600D87934 /* GameTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameTableViewCell.swift; sourceTree = ""; }; @@ -715,6 +717,7 @@ isa = PBXGroup; children = ( BF1020E21F95B05B00313182 /* DeltaToDelta2.xcmappingmodel */, + BFEE943C23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel */, BF3D6C502202865F0083E05A /* Delta2ToDelta3.xcmappingmodel */, BF3D6C52220286750083E05A /* Delta3ToDelta4.xcmappingmodel */, BFEF24F11F7DD4BE00454C62 /* Policies */, @@ -1035,6 +1038,7 @@ BF6424831F5B8F3F00D6AB44 /* ListMenuViewController.swift in Sources */, BF1020E31F95B05B00313182 /* DeltaToDelta2.xcmappingmodel in Sources */, BF6BF3131EB7E47F008E83CD /* ImportOption.swift in Sources */, + BFEE943D23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel in Sources */, BF31878B1D489AAA00BD020D /* CheatValidator.swift in Sources */, BFFC46201D59823500AF2CC6 /* InitialGamesStoryboardSegue.swift in Sources */, BF15AF841F54B43B009B6AAB /* ActionInput.swift in Sources */, diff --git a/Delta/Database/Model/Migrations/Delta4ToDelta5.xcmappingmodel/xcmapping.xml b/Delta/Database/Model/Migrations/Delta4ToDelta5.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000..98405ab --- /dev/null +++ b/Delta/Database/Model/Migrations/Delta4ToDelta5.xcmappingmodel/xcmapping.xml @@ -0,0 +1,345 @@ + + + + + + 134481920 + BD790D77-6892-4243-A39D-1AB35464A68F + 158 + + + + NSPersistenceFrameworkVersion + 977 + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesDigest + +Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A== + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + 1 + game + + + + GameCollection + Undefined + 6 + GameCollection + 1 + + + + + + 1 + preferredLandscapeSkin + + + + 1 + saveStates + + + + identifier + + + + filename + + + + type + + + + type + + + + 1 + cheats + + + + 1 + preferredPortraitSkin + + + + Delta/Database/Model/Delta.xcdatamodeld/Delta 4.xcdatamodel + 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zXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKBBROBBRCAAIEFEYAAgQUS3gAcAB0AHgAfACAAIQAiAA4AIwAkACUAJgAnACgAKQAqACsACQApABcALwAwADEAMgAzACkAKQAXXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQUOgQUMgAGABIAAgQUNgQUPEACABYADgASABIAAUFNZRVPTADoAOwAOADwARABMV05TLmtleXNaTlMub2JqZWN0c6cAPQA+AD8AQABBAEIAQ4AGgAeACIAJgAqAC4AMpwBFAEYARwBIAEkASgBLgA2BAkuAlYEBkIEDzoBlgQR1gC5ZU2F2ZVN0YXRlWEdhbWVTYXZlVUNoZWF0XkdhbWVDb2xsZWN0aW9uXkNvbnRyb2xsZXJTa2luVEdhbWVfEBpHYW1lQ29udHJvbGxlcklucHV0TWFwcGluZ98QEABVAFYAVwBYACEAWQBaACMAWwBcAA4AJQBdAF4AKABfAGAAYQApACkAFABlAGYAMQApAGAAaQA9AGAAbABtAG5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2VbX2lzQWJzdHJhY3SAD4A1gASABIACgBCBAXaABIAPgQF4gAaAD4EDzYAOCBIvZ5wlV29yZGVyZWTTADoAOwAOAHIAdABMoQBzgBGhAHWAEoAuXlhEX1BTdGVyZW90eXBl2QAhACUAeQAOACgAegAjAF8AewBFAHMAYAB/ABcAKQAxAG4Ag18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYANgBGAD4A0gACABAiAE9MAOgA7AA4AhQCPAEypAIYAhwCIAIkAigCLAIwAjQCOgBSAFYAWgBeAGIAZgBqAG4AcqQCQAJEAkgCTAJQAlQCWAJcAmIAdgCGAIoAmgCiAKoAsgC+AM4AuXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxARWERfUFNLX2lzQWJzdHJhY3RfEA9YRF9QU0tfdXNlckluZm9fEBNYRF9QU0tfY2xhc3NNYXBwaW5nXxAWWERfUFNLX2VudGl0eUNsYXNzTmFtZd8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAK8AFwB1AG4AbgBuADEAbgC2AIYAbgBuABcAblVfdHlwZVhfZGVmYXVsdFxfYXNzb2NpYXRpb25bX2lzUmVhZE9ubHlZX2lzU3R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ADgAlAKsArAAoAK0AFwdhABcHHQBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIDNgACAyAgICAiAIIBGCAiAAAjTADoAOwAOB28HcABMoKCALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwcdAG4AbgBuADEAbgC2Ab4AbgBuABcAboAAgCuAAIDICAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwcdAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIDICAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwcdAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIDICAgICIAggEkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwcdAG4AbgBuADEAbgC2AcEAbgBuABcAboAAgACAAIDICAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwcdAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIDICAgICIAggEsICIAACNkAIQAlB74ADgAoB78AIwBfB8AFrgcbAGAAfwAXACkAMQBuB8hfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAxIDHgA+ANIAAgAQIgNTTADoAOwAOB8oH0gBMpwfLB8wHzQfOB88H0AfRgNWA1oDXgNiA2YDagNunB9MH1AfVB9YH1wfYB9mA3IDdgN6A34DhgOKA44AuXxAdWERfUEF0dEtfZGVmYXVsdFZhbHVlQXNTdHJpbmdfEChYRF9QQXR0S19hbGxvd3NFeHRlcm5hbEJpbmFyeURhdGFTdG9yYWdlXxAXWERfUEF0dEtfbWluVmFsdWVTdHJpbmdfEBZYRF9QQXR0S19hdHRyaWJ1dGVUeXBlXxAXWERfUEF0dEtfbWF4VmFsdWVTdHJpbmdfEB1YRF9QQXR0S19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ArAAoAK0AFwAXABcIbwBuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACA6AgICAiAIIBKCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcIbwBuAG4AbgAxAG4AtgHCAG4AbgAXAG6AAIArgACA6AgICAiAIIBLCAiAAAjZACEAJQkPAA4AKAkQACMAXwkRBa8HGwBgAH8AFwApADEAbgkZXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgOWAx4APgDSAAIAECID00wA6ADsADgkbCSMATKcHywfMB80HzgfPB9AH0YDVgNaA14DYgNmA2oDbpwkkCSUJJgknCSgJKQkqgPWA9oD3gPiA+YD6gPuALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwhwAG4AbgBuADEAbgC2B8sAbgBuABcAboAAgACAAIDzCAgICIAggNUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwhwAG4AbgBuADEAbgC2B8wAbgBuABcAboAAgCuAAIDzCAgICIAggNYICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwhwAG4AbgBuADEAbgC2B80AbgBuABcAboAAgACAAIDzCAgICIAggNcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXCBEAFwhwAG4AbgBuADEAbgC2B84AbgBuABcAboAAgOCAAIDzCAgICIAggNgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwhwAG4AbgBuADEAbgC2B88AbgBuABcAboAAgACAAIDzCAgICIAggNkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwhwAG4AbgBuADEAbgC2B9AAbgBuABcAboAAgACAAIDzCAgICIAggNoICIAACN8QDwCkAKUApgAhAKcAqACpACM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AJQCrAKwAKACtABcAFwAXCvIAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQEXCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXCzUAFwryAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQEcgACBARcICAgIgCCARggIgAAI0wA6ADsADgtDC0QATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcK8gBuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBARcICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXCvIAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQEXCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwryAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIEBFwgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcK8gBuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBARcICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXCvIAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQEXCAgICIAggEsICIAACNkAIQAlC5IADgAoC5MAIwBfC5QFsQcbAGAAfwAXACkAMQBuC5xfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBARSAx4APgDSAAIAECIEBI9MAOgA7AA4LngumAEynB8sHzAfNB84HzwfQB9GA1YDWgNeA2IDZgNqA26cLpwuoC6kLqgurC6wLrYEBJIEBJYEBJoEBJ4EBKIEBKYEBKoAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXCvMAbgBuAG4AMQBuALYHywBuAG4AFwBugACAAIAAgQEiCAgICIAggNUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwrzAG4AbgBuADEAbgC2B8wAbgBuABcAboAAgCuAAIEBIggICAiAIIDWCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcK8wBuAG4AbgAxAG4AtgfNAG4AbgAXAG6AAIAAgACBASIICAgIgCCA1wgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcKnAAXCvMAbgBuAG4AMQBuALYHzgBuAG4AFwBugACBARCAAIEBIggICAiAIIDYCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcK8wBuAG4AbgAxAG4AtgfPAG4AbgAXAG6AAIAAgACBASIICAgIgCCA2QgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXCvMAbgBuAG4AMQBuALYH0ABuAG4AFwBugACAAIAAgQEiCAgICIAggNoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwrzAG4AbgBuADEAbgC2B9EAbgBuABcAboAAgACAAIEBIggICAiAIIDbCAiAAAjfEBIApAClAKYMGQAhAKgAqQwaACMApwwbAKoADgAlAKsArAAoAK0AFwAXABcAKQBHAG4AbgwjADEAbgBgAG4HEQF6AG4AbgwrAG5fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABICVCAiBAS0IgA8IgOSAOwgIgQEsCBMAAAABGusw2dMAOgA7AA4MLwwyAEyiAaUHG4BAgMeiDDMMNIEBLoEBO4Au2QAhACUMNwAOACgMOAAjAF8MOQWyAaUAYAB/ABcAKQAxAG4MQV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEBK4BAgA+ANIAAgAQIgQEv0wA6ADsADgxDDEwATKgBuwG8Ab0BvgG/AcABwQHCgESARYBGgEeASIBJgEqAS6gMTQxODE8MUAxRDFIMUwxUgQEwgQExgQEygQE2gQE3gQE4gQE5gQE6gC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcMMwBuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBAS4ICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXDDMAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQEuCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXDHYAFwwzAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQEzgACBAS4ICAgIgCCARggIgAAI0wA6ADsADgyEDIYATKEMhYEBNKEMh4EBNYAuXxAXYXR0cmlidXRlVmFsdWVDbGFzc05hbWVZQ2hlYXRUeXBl3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXDDMAbgBuAG4AMQBuALYBvgBuAG4AFwBugACAK4AAgQEuCAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwwzAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIEBLggICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcMMwBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBAS4ICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXDDMAbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQEuCAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwwzAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIEBLggICAiAIIBLCAiAAAjZACEAJQzXAA4AKAzYACMAXwzZBbIHGwBgAH8AFwApADEAbgzhXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQErgMeAD4A0gACABAiBATzTADoAOwAODOMM6wBMpwfLB8wHzQfOB88H0AfRgNWA1oDXgNiA2YDagNunDOwM7QzuDO8M8AzxDPKBAT2BAT6BAT+BAUCBAUKBAUOBAUWALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFww0AG4AbgBuADEAbgC2B8sAbgBuABcAboAAgACAAIEBOwgICAiAIIDVCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcMNABuAG4AbgAxAG4AtgfMAG4AbgAXAG6AAIArgACBATsICAgIgCCA1ggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXDDQAbgBuAG4AMQBuALYHzQBuAG4AFwBugACAAIAAgQE7CAgICIAggNcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXDSMAFww0AG4AbgBuADEAbgC2B84AbgBuABcAboAAgQFBgACBATsICAgIgCCA2AgIgAAIEQcI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXDDQAbgBuAG4AMQBuALYHzwBuAG4AFwBugACAAIAAgQE7CAgICIAggNkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXDUIAFww0AG4AbgBuADEAbgC2B9AAbgBuABcAboAAgQFEgACBATsICAgIgCCA2ggIgAAIXxAZTlNTZWN1cmVVbmFyY2hpdmVGcm9tRGF0Yd8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFww0AG4AbgBuADEAbgC2B9EAbgBuABcAboAAgACAAIEBOwgICAiAIIDbCAiAAAjfEBIApAClAKYNYAAhAKgAqQ1hACMApw1iAKoADgAlAKsArAAoAK0AFwAXABcAKQBHAG4Abg1qADEAbgBgAG4HEQF7AG4Abg1yAG5fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABICVCAiBAUgIgA8IgOSAPAgIgQFHCBKZq1e+0wA6ADsADg12DXkATKIBpQcbgECAx6INeg17gQFJgQFUgC7ZACEAJQ1+AA4AKA1/ACMAXw2ABbMBpQBgAH8AFwApADEAbg2IXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQFGgECAD4A0gACABAiBAUrTADoAOwAODYoNkwBMqAG7AbwBvQG+Ab8BwAHBAcKARIBFgEaAR4BIgEmASoBLqA2UDZUNlg2XDZgNmQ2aDZuBAUuBAUyBAU2BAU+BAVCBAVGBAVKBAVOALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFw16AG4AbgBuADEAbgC2AbsAbgBuABcAboAAgCuAAIEBSQgICAiAIIBECAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcNegBuAG4AbgAxAG4AtgG8AG4AbgAXAG6AAIAAgACBAUkICAgIgCCARQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcNvQAXDXoAbgBuAG4AMQBuALYBvQBuAG4AFwBugACBAU6AAIEBSQgICAiAIIBGCAiAAAjTADoAOwAODcsNzABMoKCALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFw16AG4AbgBuADEAbgC2Ab4AbgBuABcAboAAgCuAAIEBSQgICAiAIIBHCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcNegBuAG4AbgAxAG4AtgG/AG4AbgAXAG6AAIArgACBAUkICAgIgCCASAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXDXoAbgBuAG4AMQBuALYBwABuAG4AFwBugACAK4AAgQFJCAgICIAggEkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFw16AG4AbgBuADEAbgC2AcEAbgBuABcAboAAgACAAIEBSQgICAiAIIBKCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcNegBuAG4AbgAxAG4AtgHCAG4AbgAXAG6AAIArgACBAUkICAgIgCCASwgIgAAI2QAhACUOGgAOACgOGwAjAF8OHAWzBxsAYAB/ABcAKQAxAG4OJF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEBRoDHgA+ANIAAgAQIgQFV0wA6ADsADg4mDi4ATKcHywfMB80HzgfPB9AH0YDVgNaA14DYgNmA2oDbpw4vDjAOMQ4yDjMONA41gQFWgQFXgQFYgQFZgQFagQFbgQFcgC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcNewBuAG4AbgAxAG4AtgfLAG4AbgAXAG6AAIAAgACBAVQICAgIgCCA1QgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXDXsAbgBuAG4AMQBuALYHzABuAG4AFwBugACAK4AAgQFUCAgICIAggNYICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFw17AG4AbgBuADEAbgC2B80AbgBuABcAboAAgACAAIEBVAgICAiAIIDXCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwqcABcNewBuAG4AbgAxAG4AtgfOAG4AbgAXAG6AAIEBEIAAgQFUCAgICIAggNgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFw17AG4AbgBuADEAbgC2B88AbgBuABcAboAAgACAAIEBVAgICAiAIIDZCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcNewBuAG4AbgAxAG4AtgfQAG4AbgAXAG6AAIAAgACBAVQICAgIgCCA2ggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXDXsAbgBuAG4AMQBuALYH0QBuAG4AFwBugACAAIAAgQFUCAgICIAggNsICIAACN8QEgCkAKUApg6hACEAqACpDqIAIwCnDqMAqgAOACUAqwCsACgArQAXABcAFwApAEcAbgBuDqsAMQBuAGAAbgcRBasAbgBuDrMAbl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgJUICIEBXwiADwiA5ICrCAiBAV4IEwAAAAEaxSoc0wA6ADsADg63DroATKIBpQcbgECAx6IOuw68gQFggQFrgC7ZACEAJQ6/AA4AKA7AACMAXw7BBbQBpQBgAH8AFwApADEAbg7JXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQFdgECAD4A0gACABAiBAWHTADoAOwAODssO1ABMqAG7AbwBvQG+Ab8BwAHBAcKARIBFgEaAR4BIgEmASoBLqA7VDtYO1w7YDtkO2g7bDtyBAWKBAWOBAWSBAWaBAWeBAWiBAWmBAWqALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFw67AG4AbgBuADEAbgC2AbsAbgBuABcAboAAgCuAAIEBYAgICAiAIIBECAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcOuwBuAG4AbgAxAG4AtgG8AG4AbgAXAG6AAIAAgACBAWAICAgIgCCARQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcO/gAXDrsAbgBuAG4AMQBuALYBvQBuAG4AFwBugACBAWWAAIEBYAgICAiAIIBGCAiAAAjTADoAOwAODwwPDQBMoKCALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFw67AG4AbgBuADEAbgC2Ab4AbgBuABcAboAAgCuAAIEBYAgICAiAIIBHCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcOuwBuAG4AbgAxAG4AtgG/AG4AbgAXAG6AAIArgACBAWAICAgIgCCASAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXDrsAbgBuAG4AMQBuALYBwABuAG4AFwBugACAK4AAgQFgCAgICIAggEkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFw67AG4AbgBuADEAbgC2AcEAbgBuABcAboAAgACAAIEBYAgICAiAIIBKCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcOuwBuAG4AbgAxAG4AtgHCAG4AbgAXAG6AAIArgACBAWAICAgIgCCASwgIgAAI2QAhACUPWwAOACgPXAAjAF8PXQW0BxsAYAB/ABcAKQAxAG4PZV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEBXYDHgA+ANIAAgAQIgQFs0wA6ADsADg9nD28ATKcHywfMB80HzgfPB9AH0YDVgNaA14DYgNmA2oDbpw9wD3EPcg9zD3QPdQ92gQFtgQFvgQFwgQFxgQFzgQF0gQF1gC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFw96ABcOvABuAG4AbgAxAG4AtgfLAG4AbgAXAG6AAIEBboAAgQFrCAgICIAggNUICIAACFJOT98QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFw68AG4AbgBuADEAbgC2B8wAbgBuABcAboAAgCuAAIEBawgICAiAIIDWCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcOvABuAG4AbgAxAG4AtgfNAG4AbgAXAG6AAIAAgACBAWsICAgIgCCA1wgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcPqAAXDrwAbgBuAG4AMQBuALYHzgBuAG4AFwBugACBAXKAAIEBawgICAiAIIDYCAiAAAgRAyDfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcOvABuAG4AbgAxAG4AtgfPAG4AbgAXAG6AAIAAgACBAWsICAgIgCCA2QgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXDrwAbgBuAG4AMQBuALYH0ABuAG4AFwBugACAAIAAgQFrCAgICIAggNoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFw68AG4AbgBuADEAbgC2B9EAbgBuABcAboAAgACAAIEBawgICAiAIIDbCAiAAAhaZHVwbGljYXRlc9IAOwAOD+UAvqCAH9IAwADBD+gP6VpYRFBNRW50aXR5pw/qD+sP7A/tD+4P7wDFWlhEUE1FbnRpdHldWERVTUxDbGFzc0ltcF8QElhEVU1MQ2xhc3NpZmllckltcF8QEVhEVU1MTmFtZXNwYWNlSW1wXxAUWERVTUxOYW1lZEVsZW1lbnRJbXBfEA9YRFVNTEVsZW1lbnRJbXDfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwIXABcDzQBuAG4AbgAxAG4AtgJkAG4AbgAXAG6AAIBSgACAjggICAiAIIBcCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcDzQBuAG4AbgAxAG4AtgJlAG4AbgAXAG6AAIArgACAjggICAiAIIBdCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwWtABcDzQBuAG4AbgAxAG4AtgJmAG4AbgAXAG6AAICsgACAjggICAiAIIBeCAiAAAjfEBIApAClAKYQHgAhAKgAqRAfACMApxAgAKoADgAlAKsArAAoAK0AFwAXABcAKQBKAG4AbhAoADEAbgBgAG4BnAOTAG4AbhAwAG5fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIBlCAiBAX4IgA8IgMOAeggIgQF9CBMAAAABDFW169MAOgA7AA4QNBA3AEyiAaUBpoBAgEGiEDgQOYEBf4EBioAu2QAhACUQPAAOACgQPQAjAF8QPgOfAaUAYAB/ABcAKQAxAG4QRl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEBfIBAgA+ANIAAgAQIgQGA0wA6ADsADhBIEFEATKgBuwG8Ab0BvgG/AcABwQHCgESARYBGgEeASIBJgEqAS6gQUhBTEFQQVRBWEFcQWBBZgQGBgQGCgQGDgQGFgQGGgQGHgQGIgQGJgC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcQOABuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBAX8ICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXEDgAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQF/CAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXEHsAFxA4AG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQGEgACBAX8ICAgIgCCARggIgAAI0wA6ADsADhCJEIoATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcQOABuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBAX8ICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCFwAXEDgAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAUoAAgQF/CAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxA4AG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIEBfwgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcQOABuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBAX8ICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXEDgAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQF/CAgICIAggEsICIAACNkAIQAlENgADgAoENkAIwBfENoDnwGmAGAAfwAXACkAMQBuEOJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAXyAQYAPgDSAAIAECIEBi9MAOgA7AA4Q5BDsAEynAmACYQJiAmMCZAJlAmaAWIBZgFqAW4BcgF2AXqcQ7RDuEO8Q8BDxEPIQ84EBjIEBjYEBjoEBj4EB74EB8IEB8YAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCeQAXEDkAbgBuAG4AMQBuALYCYABuAG4AFwBugACAYIAAgQGKCAgICIAggFgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAogAFxA5AG4AbgBuADEAbgC2AmEAbgBuABcAboAAgGKAAIEBiggICAiAIIBZCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwKIABcQOQBuAG4AbgAxAG4AtgJiAG4AbgAXAG6AAIBigACBAYoICAgIgCCAWggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcASAAXEDkAbgBuAG4AMQBuALYCYwBuAG4AFwBugACBAZCAAIEBiggICAiAIIBbCAiAAAjfEBARMhEzETQRNQAhETYRNwAjETgROQAOACUROhE7ACgAXwBgET0AKQApABQRQQBmADEAKQBgAGkAQABgEUgRSQBuXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zZHVwbGljYXRlc18QJFhEQnVja2V0Rm9yR2VuZXJhbGl6YXRpb25zd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNvcmRlcmVkXxAhWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNzdG9yYWdlgA+BAaSABIAEgAKBAZKBAXaABIAPgQF4gAmAD4EB7oEBkQgSfkjLf9MAOgA7AA4RTRFPAEyhAHOAEaERUIEBk4Au2QAhACURUwAOACgRVAAjAF8RVQBIAHMAYAB/ABcAKQAxAG4RXV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEBkIARgA+ANIAAgAQIgQGU0wA6ADsADhFfEWkATKkAhgCHAIgAiQCKAIsAjACNAI6AFIAVgBaAF4AYgBmAGoAbgBypEWoRaxFsEW0RbhFvEXARcRFygQGVgQGXgQGYgQGbgQGcgQGegQGfgQGhgQGigC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxF2ABcRUABuAG4AbgAxAG4AtgCGAG4AbgAXAG6AAIEBloAAgQGTCAgICIAggBQICIAACNIAOwAOEYQAvqCAH98QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxFQAG4AbgBuADEAbgC2AIcAbgBuABcAboAAgACAAIEBkwgICAiAIIAVCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxGXABcRUABuAG4AbgAxAG4AtgCIAG4AbgAXAG6AAIEBmYAAgQGTCAgICIAggBYICIAACNIAOwAOEaUAvqERpoEBmoAf0gA7AA4RqQC+oQDwgCWAH98QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxFQAG4AbgBuADEAbgC2AIkAbgBuABcAboAAgACAAIEBkwgICAiAIIAXCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxG9ABcRUABuAG4AbgAxAG4AtgCKAG4AbgAXAG6AAIEBnYAAgQGTCAgICIAggBgICIAACNIAOwAOEcsAvqCAH98QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxFQAG4AbgBuADEAbgC2AIsAbgBuABcAboAAgCuAAIEBkwgICAiAIIAZCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxHeABcRUABuAG4AbgAxAG4AtgCMAG4AbgAXAG6AAIEBoIAAgQGTCAgICIAggBoICIAACNMAOgA7AA4R7BHtAEygoIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBPgAXEVAAbgBuAG4AMQBuALYAjQBuAG4AFwBugACAMIAAgQGTCAgICIAggBsICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXEgAAFxFQAG4AbgBuADEAbgC2AI4AbgBuABcAboAAgQGjgACBAZMICAgIgCCAHAgIgAAIXkdhbWVDb2xsZWN0aW9u0wA6ADsADhIPEhMATKMSEBIRAPCBAaWBAaaAJaMSFBIVEhaBAaeBAcCBAdeALlVpbmRleFVnYW1lc98QEgCkAKUAphIbACEAqACpEhwAIwCnEh0AqgAOACUAqwCsACgArQAXABcAFwApAEgAbgBuEiUAMQBuAGAAbgcREhAAbgBuEi0Abl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQGQCAiBAakIgA8IgOSBAaUICIEBqAgStg2H+NMAOgA7AA4SMRI0AEyiAaUHG4BAgMeiEjUSNoEBqoEBtYAu2QAhACUSOQAOACgSOgAjAF8SOxIUAaUAYAB/ABcAKQAxAG4SQ18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEBp4BAgA+ANIAAgAQIgQGr0wA6ADsADhJFEk4ATKgBuwG8Ab0BvgG/AcABwQHCgESARYBGgEeASIBJgEqAS6gSTxJQElESUhJTElQSVRJWgQGsgQGtgQGugQGwgQGxgQGygQGzgQG0gC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcSNQBuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBAaoICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXEjUAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQGqCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXEngAFxI1AG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQGvgACBAaoICAgIgCCARggIgAAI0wA6ADsADhKGEocATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcSNQBuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBAaoICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXEjUAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQGqCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxI1AG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIEBqggICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcSNQBuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBAaoICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXEjUAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQGqCAgICIAggEsICIAACNkAIQAlEtUADgAoEtYAIwBfEtcSFAcbAGAAfwAXACkAMQBuEt9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAaeAx4APgDSAAIAECIEBttMAOgA7AA4S4RLpAEynB8sHzAfNB84HzwfQB9GA1YDWgNeA2IDZgNqA26cS6hLrEuwS7RLuEu8S8IEBt4EBuYEBuoEBu4EBvYEBvoEBv4Au3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcS9AAXEjYAbgBuAG4AMQBuALYHywBuAG4AFwBugACBAbiAAIEBtQgICAiAIIDVCAiAAAhRMN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxI2AG4AbgBuADEAbgC2B8wAbgBuABcAboAAgCuAAIEBtQgICAiAIIDWCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcSNgBuAG4AbgAxAG4AtgfNAG4AbgAXAG6AAIAAgACBAbUICAgIgCCA1wgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcTIgAXEjYAbgBuAG4AMQBuALYHzgBuAG4AFwBugACBAbyAAIEBtQgICAiAIIDYCAiAAAgQZN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxI2AG4AbgBuADEAbgC2B88AbgBuABcAboAAgACAAIEBtQgICAiAIIDZCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcSNgBuAG4AbgAxAG4AtgfQAG4AbgAXAG6AAIAAgACBAbUICAgIgCCA2ggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXEjYAbgBuAG4AMQBuALYH0QBuAG4AFwBugACAAIAAgQG1CAgICIAggNsICIAACN8QEgCkAKUAphNeACEAqACpE18AIwCnE2AAqgAOACUAqwCsACgArQAXABcAFwApAEgAbgBuE2gAMQBuAGAAbgGcEhEAbgBuE3AAbl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgQGQCAiBAcIIgA8IgMOBAaYICIEBwQgSR0GrzdMAOgA7AA4TdBN3AEyiAaUBpoBAgEGiE3gTeYEBw4EBzoAu2QAhACUTfAAOACgTfQAjAF8TfhIVAaUAYAB/ABcAKQAxAG4Thl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYEBwIBAgA+ANIAAgAQIgQHE0wA6ADsADhOIE5EATKgBuwG8Ab0BvgG/AcABwQHCgESARYBGgEeASIBJgEqAS6gTkhOTE5QTlROWE5cTmBOZgQHFgQHGgQHHgQHJgQHKgQHLgQHMgQHNgC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcTeABuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBAcMICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXE3gAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQHDCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXE7sAFxN4AG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQHIgACBAcMICAgIgCCARggIgAAI0wA6ADsADhPJE8oATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcTeABuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBAcMICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXE3gAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQHDCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxN4AG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIEBwwgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcTeABuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBAcMICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXE3gAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQHDCAgICIAggEsICIAACNkAIQAlFBgADgAoFBkAIwBfFBoSFQGmAGAAfwAXACkAMQBuFCJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAcCAQYAPgDSAAIAECIEBz9MAOgA7AA4UJBQsAEynAmACYQJiAmMCZAJlAmaAWIBZgFqAW4BcgF2AXqcULRQuFC8UMBQxFDIUM4EB0IEB0YEB0oEB04EB1IEB1YEB1oAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCeQAXE3kAbgBuAG4AMQBuALYCYABuAG4AFwBugACAYIAAgQHOCAgICIAggFgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAogAFxN5AG4AbgBuADEAbgC2AmEAbgBuABcAboAAgGKAAIEBzggICAiAIIBZCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwJ5ABcTeQBuAG4AbgAxAG4AtgJiAG4AbgAXAG6AAIBggACBAc4ICAgIgCCAWggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcASgAXE3kAbgBuAG4AMQBuALYCYwBuAG4AFwBugACAZYAAgQHOCAgICIAggFsICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAhcAFxN5AG4AbgBuADEAbgC2AmQAbgBuABcAboAAgFKAAIEBzggICAiAIIBcCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcTeQBuAG4AbgAxAG4AtgJlAG4AbgAXAG6AAIArgACBAc4ICAgIgCCAXQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcDnwAXE3kAbgBuAG4AMQBuALYCZgBuAG4AFwBugACBAXyAAIEBzggICAiAIIBeCAiAAAjfEBIApAClAKYUnwAhAKgAqRSgACMApxShAKoADgAlAKsArAAoAK0AFwAXABcAKQBIAG4AbhSpADEAbgBgAG4HEQDwAG4AbhSxAG5fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIEBkAgIgQHZCIAPCIDkgCUICIEB2AgTAAAAAR5zi8/TADoAOwAOFLUUuABMogGlBxuAQIDHohS5FLqBAdqBAeWALtkAIQAlFL0ADgAoFL4AIwBfFL8SFgGlAGAAfwAXACkAMQBuFMdfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAdeAQIAPgDSAAIAECIEB29MAOgA7AA4UyRTSAEyoAbsBvAG9Ab4BvwHAAcEBwoBEgEWARoBHgEiASYBKgEuoFNMU1BTVFNYU1xTYFNkU2oEB3IEB3YEB3oEB4IEB4YEB4oEB44EB5IAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXFLkAbgBuAG4AMQBuALYBuwBuAG4AFwBugACAK4AAgQHaCAgICIAggEQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxS5AG4AbgBuADEAbgC2AbwAbgBuABcAboAAgACAAIEB2ggICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxT8ABcUuQBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIEB34AAgQHaCAgICIAggEYICIAACNMAOgA7AA4VChULAEygoIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXFLkAbgBuAG4AMQBuALYBvgBuAG4AFwBugACAK4AAgQHaCAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxS5AG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIEB2ggICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcUuQBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBAdoICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXFLkAbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQHaCAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxS5AG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIEB2ggICAiAIIBLCAiAAAjZACEAJRVZAA4AKBVaACMAXxVbEhYHGwBgAH8AFwApADEAbhVjXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQHXgMeAD4A0gACABAiBAebTADoAOwAOFWUVbQBMpwfLB8wHzQfOB88H0AfRgNWA1oDXgNiA2YDagNunFW4VbxVwFXEVchVzFXSBAeeBAeiBAemBAeqBAeuBAeyBAe2ALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxS6AG4AbgBuADEAbgC2B8sAbgBuABcAboAAgACAAIEB5QgICAiAIIDVCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcUugBuAG4AbgAxAG4AtgfMAG4AbgAXAG6AAIArgACBAeUICAgIgCCA1ggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXFLoAbgBuAG4AMQBuALYHzQBuAG4AFwBugACAAIAAgQHlCAgICIAggNcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXCpwAFxS6AG4AbgBuADEAbgC2B84AbgBuABcAboAAgQEQgACBAeUICAgIgCCA2AgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXFLoAbgBuAG4AMQBuALYHzwBuAG4AFwBugACAAIAAgQHlCAgICIAggNkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxS6AG4AbgBuADEAbgC2B9AAbgBuABcAboAAgACAAIEB5QgICAiAIIDaCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcUugBuAG4AbgAxAG4AtgfRAG4AbgAXAG6AAIAAgACBAeUICAgIgCCA2wgIgAAI0gA7AA4V4AC+oIAf3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXEDkAbgBuAG4AMQBuALYCZABuAG4AFwBugACAK4AAgQGKCAgICIAggFwICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxA5AG4AbgBuADEAbgC2AmUAbgBuABcAboAAgCuAAIEBiggICAiAIIBdCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxIVABcQOQBuAG4AbgAxAG4AtgJmAG4AbgAXAG6AAIEBwIAAgQGKCAgICIAggF4ICIAACN8QEgCkAKUAphYQACEAqACpFhEAIwCnFhIAqgAOACUAqwCsACgArQAXABcAFwApAEoAbgBuFhoAMQBuAGAAbgGcA5QAbgBuFiIAbl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgGUICIEB9AiADwiAw4B7CAiBAfMIEm/PrAfTADoAOwAOFiYWKQBMogGlAaaAQIBBohYqFiuBAfWBAgCALtkAIQAlFi4ADgAoFi8AIwBfFjADoAGlAGAAfwAXACkAMQBuFjhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAfKAQIAPgDSAAIAECIEB9tMAOgA7AA4WOhZDAEyoAbsBvAG9Ab4BvwHAAcEBwoBEgEWARoBHgEiASYBKgEuoFkQWRRZGFkcWSBZJFkoWS4EB94EB+IEB+YEB+4EB/IEB/YEB/oEB/4Au3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXFioAbgBuAG4AMQBuALYBuwBuAG4AFwBugACAK4AAgQH1CAgICIAggEQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxYqAG4AbgBuADEAbgC2AbwAbgBuABcAboAAgACAAIEB9QgICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxZtABcWKgBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIEB+oAAgQH1CAgICIAggEYICIAACNMAOgA7AA4WexZ8AEygoIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXFioAbgBuAG4AMQBuALYBvgBuAG4AFwBugACAK4AAgQH1CAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAhcAFxYqAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgFKAAIEB9QgICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcWKgBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBAfUICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXFioAbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQH1CAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxYqAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIEB9QgICAiAIIBLCAiAAAjZACEAJRbKAA4AKBbLACMAXxbMA6ABpgBgAH8AFwApADEAbhbUXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQHygEGAD4A0gACABAiBAgHTADoAOwAOFtYW3gBMpwJgAmECYgJjAmQCZQJmgFiAWYBagFuAXIBdgF6nFt8W4BbhFuIW4xbkFuWBAgKBAgOBAgSBAgWBAgaBAgeBAgiALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAnkAFxYrAG4AbgBuADEAbgC2AmAAbgBuABcAboAAgGCAAIECAAgICAiAIIBYCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwKIABcWKwBuAG4AbgAxAG4AtgJhAG4AbgAXAG6AAIBigACBAgAICAgIgCCAWQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCiAAXFisAbgBuAG4AMQBuALYCYgBuAG4AFwBugACAYoAAgQIACAgICIAggFoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAEUAFxYrAG4AbgBuADEAbgC2AmMAbgBuABcAboAAgA2AAIECAAgICAiAIIBbCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcWKwBuAG4AbgAxAG4AtgJkAG4AbgAXAG6AAIArgACBAgAICAgIgCCAXAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXFisAbgBuAG4AMQBuALYCZQBuAG4AFwBugACAK4AAgQIACAgICIAggF0ICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAX4AFxYrAG4AbgBuADEAbgC2AmYAbgBuABcAboAAgQIJgACBAgAICAgIgCCAXggIgAAI3xASAKQApQCmF1EAIQCoAKkXUgAjAKcXUwCqAA4AJQCrAKwAKACtABcAFwAXACkARQBuAG4XWwAxAG4AYABuAZwBdQBuAG4XYwBuXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASADQgIgQILCIAPCIDDgDcICIECCggS/ANkutMAOgA7AA4XZxdqAEyiAaUBpoBAgEGiF2sXbIECDIECF4Au2QAhACUXbwAOACgXcAAjAF8XcQF+AaUAYAB/ABcAKQAxAG4XeV8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYECCYBAgA+ANIAAgAQIgQIN0wA6ADsADhd7F4QATKgBuwG8Ab0BvgG/AcABwQHCgESARYBGgEeASIBJgEqAS6gXhReGF4cXiBeJF4oXixeMgQIOgQIPgQIQgQISgQITgQIUgQIVgQIWgC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcXawBuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBAgwICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXF2sAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQIMCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXF64AFxdrAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQIRgACBAgwICAgIgCCARggIgAAI0wA6ADsADhe8F70ATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcXawBuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBAgwICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCFwAXF2sAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAUoAAgQIMCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxdrAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIECDAgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcXawBuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBAgwICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXF2sAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQIMCAgICIAggEsICIAACNkAIQAlGAsADgAoGAwAIwBfGA0BfgGmAGAAfwAXACkAMQBuGBVfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAgmAQYAPgDSAAIAECIECGNMAOgA7AA4YFxgfAEynAmACYQJiAmMCZAJlAmaAWIBZgFqAW4BcgF2AXqcYIBghGCIYIxgkGCUYJoECGYECGoECG4ECHIECHYECHoECH4Au3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCeQAXF2wAbgBuAG4AMQBuALYCYABuAG4AFwBugACAYIAAgQIXCAgICIAggFgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAogAFxdsAG4AbgBuADEAbgC2AmEAbgBuABcAboAAgGKAAIECFwgICAiAIIBZCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwKIABcXbABuAG4AbgAxAG4AtgJiAG4AbgAXAG6AAIBigACBAhcICAgIgCCAWggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcASgAXF2wAbgBuAG4AMQBuALYCYwBuAG4AFwBugACAZYAAgQIXCAgICIAggFsICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxdsAG4AbgBuADEAbgC2AmQAbgBuABcAboAAgCuAAIECFwgICAiAIIBcCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcXbABuAG4AbgAxAG4AtgJlAG4AbgAXAG6AAIArgACBAhcICAgIgCCAXQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcDoAAXF2wAbgBuAG4AMQBuALYCZgBuAG4AFwBugACBAfKAAIECFwgICAiAIIBeCAiAAAjfEBIApAClAKYYkgAhAKgAqRiTACMApxiUAKoADgAlAKsArAAoAK0AFwAXABcAKQBKAG4AbhicADEAbgBgAG4BnAOVAG4AbhikAG5fECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWSAAIAAgACABIBlCAiBAiIIgA8IgMOAfAgIgQIhCBMAAAABFxeShNMAOgA7AA4YqBirAEyiAaUBpoBAgEGiGKwYrYECI4ECLoAu2QAhACUYsAAOACgYsQAjAF8YsgOhAaUAYAB/ABcAKQAxAG4Yul8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYECIIBAgA+ANIAAgAQIgQIk0wA6ADsADhi8GMUATKgBuwG8Ab0BvgG/AcABwQHCgESARYBGgEeASIBJgEqAS6gYxhjHGMgYyRjKGMsYzBjNgQIlgQImgQIngQIpgQIqgQIrgQIsgQItgC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcYrABuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBAiMICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXGKwAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQIjCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXGO8AFxisAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQIogACBAiMICAgIgCCARggIgAAI0wA6ADsADhj9GP4ATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcYrABuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBAiMICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXGKwAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQIjCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxisAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIECIwgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcYrABuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBAiMICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXGKwAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQIjCAgICIAggEsICIAACNkAIQAlGUwADgAoGU0AIwBfGU4DoQGmAGAAfwAXACkAMQBuGVZfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAiCAQYAPgDSAAIAECIECL9MAOgA7AA4ZWBlgAEynAmACYQJiAmMCZAJlAmaAWIBZgFqAW4BcgF2AXqcZYRliGWMZZBllGWYZZ4ECMIECMYECMoECM4ECNIECNYECNoAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCeQAXGK0AbgBuAG4AMQBuALYCYABuAG4AFwBugACAYIAAgQIuCAgICIAggFgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXBJoAFxitAG4AbgBuADEAbgC2AmEAbgBuABcAboAAgJKAAIECLggICAiAIIBZCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwJ5ABcYrQBuAG4AbgAxAG4AtgJiAG4AbgAXAG6AAIBggACBAi4ICAgIgCCAWggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcARQAXGK0AbgBuAG4AMQBuALYCYwBuAG4AFwBugACADYAAgQIuCAgICIAggFsICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAhcAFxitAG4AbgBuADEAbgC2AmQAbgBuABcAboAAgFKAAIECLggICAiAIIBcCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcYrQBuAG4AbgAxAG4AtgJlAG4AbgAXAG6AAIArgACBAi4ICAgIgCCAXQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBfQAXGK0AbgBuAG4AMQBuALYCZgBuAG4AFwBugACAPYAAgQIuCAgICIAggF4ICIAACN8QEgCkAKUAphnTACEAqACpGdQAIwCnGdUAqgAOACUAqwCsACgArQAXABcAFwApAEoAbgBuGd0AMQBuAGAAbgGcA5YAbgBuGeUAbl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgGUICIECOQiADwiAw4B9CAiBAjgIEtUFOkjTADoAOwAOGekZ7ABMogGlAaaAQIBBohntGe6BAjqBAkWALtkAIQAlGfEADgAoGfIAIwBfGfMDogGlAGAAfwAXACkAMQBuGftfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAjeAQIAPgDSAAIAECIECO9MAOgA7AA4Z/RoGAEyoAbsBvAG9Ab4BvwHAAcEBwoBEgEWARoBHgEiASYBKgEuoGgcaCBoJGgoaCxoMGg0aDoECPIECPYECPoECQIECQYECQoECQ4ECRIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXGe0AbgBuAG4AMQBuALYBuwBuAG4AFwBugACAK4AAgQI6CAgICIAggEQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxntAG4AbgBuADEAbgC2AbwAbgBuABcAboAAgACAAIECOggICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxowABcZ7QBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIECP4AAgQI6CAgICIAggEYICIAACNMAOgA7AA4aPho/AEygoIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXGe0AbgBuAG4AMQBuALYBvgBuAG4AFwBugACAK4AAgQI6CAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAhcAFxntAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgFKAAIECOggICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcZ7QBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBAjoICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXGe0AbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQI6CAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxntAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIECOggICAiAIIBLCAi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igACBAt0ICAgIgCCARggIgAAI0wA6ADsADiKzIrUATKEitIEC46EitoEC5IAuXxAXYXR0cmlidXRlVmFsdWVDbGFzc05hbWVYR2FtZVR5cGXfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABciYgBuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBAt0ICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXImIAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQLdCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFyJiAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIEC3QgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABciYgBuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBAt0ICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXImIAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQLdCAgICIAggEsICIAACNkAIQAlIwYADgAoIwcAIwBfIwgDpQcbAGAAfwAXACkAMQBuIxBfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAtqAx4APgDSAAIAECIEC69MAOgA7AA4jEiMaAEynB8sHzAfNB84HzwfQB9GA1YDWgNeA2IDZgNqA26cjGyMcIx0jHiMfIyAjIYEC7IEC7YEC7oEC74EC8IEC8YEC84Au3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXImMAbgBuAG4AMQBuALYHywBuAG4AFwBugACAAIAAgQLqCAgICIAggNUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFyJjAG4AbgBuADEAbgC2B8wAbgBuABcAboA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XABc1KQBuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBBEcICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXNSkAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQRHCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXNWwAFzUpAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQRMgACBBEcICAgIgCCARggIgAAI0wA6ADsADjV6NXsATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABc1KQBuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBBEcICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXNSkAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQRHCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFzUpAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIEERwgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABc1KQBuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBBEcICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXNSkAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQRHCAgICIAggEsICIAACNkAIQAlNckADgAoNcoAIwBfNcswAQcbAGAAfwAXACkAMQBuNdNfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBESAx4APgDSAAIAECIEEU9MAOgA7AA411TXdAEynB8sHzAfNB84HzwfQB9GA1YDWgNeA2IDZgNqA26c13jXfNeA14TXiNeM15IEEVIEEVYEEVoEEV4EEWIE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qAA4AJQCrAKwAKACtABcAFwAXN7YAbgBuAG4AMQBuALYAhwBuAG4AFwBugACAAIAAgQR4CAgICIAggBUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXN/0AFze2AG4AbgBuADEAbgC2AIgAbgBuABcAboAAgQR+gACBBHgICAgIgCCAFggIgAAI0gA7AA44CwC+ojgMOA2BBH+BBIKAH9IAOwAOOBAAvqM4ES+POBOBBICBA9mBBIGAH18QF2dhbWVDb250cm9sbGVySW5wdXRUeXBlW3BsYXllckluZGV40gA7AA44GAC+oQDwgCWAH98QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFze2AG4AbgBuADEAbgC2AIkAbgBuABcAboAAgACAAIEEeAgICAiAIIAXCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFzgsABc3tgBuAG4AbgAxAG4AtgCKAG4AbgAXAG6AAIEEhYAAgQR4CAgICIAggBgICIAACNIAOwAOODoAvqCAH98QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFze2AG4AbgBuADEAbgC2AIsAbgBuABcAboAAgCuAAIEEeAgICAiAIIAZCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFzhNABc3tgBuAG4AbgAxAG4AtgCMAG4AbgAXAG6AAIEEiIAAgQR4CAgICIAggBoICIAACNMAOgA7AA44WzhcAEygoIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBPgAXN7YAbgBuAG4AMQBuALYAjQBuAG4AFwBugACAMIAAgQR4CAgICIAggBsICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXOG8AFze2AG4AbgBuADEAbgC2AI4AbgBuABcAboAAgQSLgACBBHgICAgIgCCAHAgIgAAIXxAaR2FtZUNvbnRyb2xsZXJJbnB1dE1hcHBpbmfTADoAOwAOOH44hABMpTh/L484gTiCAPCBBI2BA9mBBI6BBI+AJaU4hTiGOIc4iDiJgQSQgQSngQTAgQTagQT0gC5bcGxheWVySW5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+AAAKxQAACtIAAArlAAAK/QAACwsAAAslAAALJwAACyoAAAstAAALLwAACzIAAAs0AAALNwAAC3AAAAuPAAALrAAAC8sAAAvdAAAL/QAADAQAAAwiAAAMLgAADEoAAAxQAAAMcgAADJMAAAymAAAMqAAADKsAAAyuAAAMsAAADLIAAAy0AAAMtwAADLoAAAy8AAAMvgAADMAAAAzCAAAMxAAADMYAAAzHAAAMywAADNgAAAzgAAAM6wAADPoAAAz8AAAM/gAADQAAAA0CAAANBAAADQYAAA0IAAANFwAADRkAAA0cAAANHgAADSEAAA0kAAANJgAADSkAAA0rAAANNQAADT4AAA1EAAANUwAADWIAAA1nAAANhAAADccAAA3rAAAODwAADjIAAA5ZAAAOeQAADqAAAA7HAAAO5wAADwsAAA8vAAAPOwAADz0AAA8/AAAPQQAAD0MAAA9FAAAPRwAAD0oAAA9MAAAPTgAAD1EAAA9TAAAPVQAAD1gAAA9aAAAPWwAAD2AAAA9oAAAPdQAAD3gAAA96AAAPfQAAD38AAA+BAAAPkAAAD7UAAA/ZAAAQAAAAECQAABAmAAAQKAAAECoAABAsAAAQLgAAEDAAABAxAAAQMwAAEEAAABBTAAAQVQAAEFcAABBZAAAQWwAAEF0AABBfAAAQYQAAEGMAABBlAAAQeAAAEHoAABB8AAAQfgAAEIAAABCCAAAQhAAAEIYAABCIAAAQigAAEIwAABCiAAAQtQAAENEAABDuAAARCgAAER4AABEwAAARRgAAEV8AABGeAAARpAAAEa0AABG6AAARxgAAEdAAABHaAAAR5QAAEfAAABH9AAASBQAAEgcAABIJAAASCwAAEg0AABIOAAASDwAAEhAAABIRAAASEwAAEhUAABIWAAASFwAAEhkAABIaAAASIwAAEiQAABImAAASLwAAEjoAABJDAAASUgAAElkAABJhAAASagAAEnMAABKGAAASjwAAEqIAABK5AAASywAAEwoAABMMAAATDgAAExAAABMSAAATEwAAExQAABMVAAATFgAAExgAABMaAAATGwAAExwAABMeAAATHwAAE14AABNgAAATYgAAE2QAABNmAAATZwAAE2gAABNpAAATagAAE2wAABNuAAATbwAAE3AAABNyAAATcwAAE3wAABN/AAATgQAAE4MAABOMAAATjwAAE5EAABOTAAATngAAE90AABPfAAAT4QAAE+MAABPlAAAT5gAAE+cAABPoAAAT6QAAE+sAABPtAAAT7gAAE+8AABPxAAAT8gAAE/gAABQ3AAAUOQAAFDsAABQ9AAAUPwAAFEAAABRBAAAUQgAAFEMAABRFAAAURwAAFEgAABRJAAAUSwAAFEwAABRVAAAUVgAAFFgAABSXAAAUmQAAFJsAABSdAAAUnwAAFKAAABShAAAUogAAFKMAABSlAAAUpwAAFKgAABSpAAAUqwAAFKwAABStAAAU7AAAFO4AABTwAAAU8gAAFPQAABT1AAAU9gAAFPcAABT4AAAU+gAAFPwAABT9AAAU/gAAFQAAABUBAAAVDgAAFQ8AABUQAAAVEgAAFRsAABUxAAAVOAAAFUUAABWEAAAVhgAAFYgAABWKAAAVjAAAFY0AABWOAAAVjwAAFZAAABWSAAAVlAAAFZUAABWWAAAVmAAAFZkAABWyAAAVtAAAFbYAABW4AAAVuQAAFbsAABXSAAAV2wAAFekAABX2AAAWBAAAFhkAABYtAAAWRAAAFlYAABaVAAAWlwAAFpkAABabAAAWnQAAFp4AABafAAAWoAAAFqEAABajAAAWpQAAFqYAABanAAAWqQAAFqoAABazAAAWyAAAFtcAABbsAAAW+gAAFw8AABcjAAAXOgAAF0wAABdZAAAXagAAF2wAABduAAAXcAAAF3IAABd0AAAXdgAAF3gAABd6AAAXiwAAF40AABeQAAAXkwAAF5YAABeZAAAXnAAAF58AABeiAAAXpAAAF6kAABe1AAAXwgAAF88AABfYAAAX3QAAF+IAABgtAAAYUAAAGHAAABiQAAAYkgAAGJQAABiWAAAYmAAAGJoAABibAAAYnAAAGJ4AABifAAAYoQAAGKIAABikAAAYpgAAGKcAABioAAAYqgAAGKsAABiwAAAYvQAAGMIAABjEAAAYxgAAGMsAABjNAAAYzwAAGNEAABjmAAAY+QAAGR4AABlCAAAZaQAAGY0AABmPAAAZkQAAGZMAABmVAAAZlwAAGZkAABmaAAAZnAAAGakAABm6AAAZvAAAGb4AABnAAAAZwgAAGcQAABnGAAAZyAAAGcoAABnbAAAZ3QAAGd8AABnhAAAZ4wAAGeUAABnnAAAZ6QAAGesAABntAAAaCwAAGikAABo8AAAaUAAAGmUAABqCAAAalgAAGqwAABrrAAAa7QAAGu8AABrxAAAa8wAAGvQAABr1AAAa9gAAGvcAABr5AAAa+wAAGvwAABr9AAAa/wAAGwAAABs/AAAbQQAAG0MAABtFAAAbRwAAG0gAABtJAAAbSgAAG0sAABtNAAAbTwAAG1AAABtRAAAbUwAAG1QAABuTAAAblQAAG5cAABuZAAAbmwAAG5wAABudAAAbngAAG58AABuhAAAbowAAG6QAABulAAAbpwAAG6gAABu1AAAbtgAAG7cAABu5AAAb+AAAG/oAABv8AAAb/gAAHAAAABwBAAAcAgAAHAMAABwEAAAcBgAAHAgAABwJAAAcCgAAHAwAABwNAAAcTAAAHE4AABxQAAAcUgAAHFQAABxVAAAcVgAAHFcAABxYAAAcWgAAHFwAABxdAAAcXgAAHGAAABxhAAAcYgAAHKEAAByjAAAcpQAAHKcAABypAAAcqgAAHKsAABysAAAcrQAAHK8AAByxAAAcsgAAHLMAABy1AAActgAAHPUAABz3AAAc+QAAHPsAABz9AAAc/gAAHP8AAB0AAAAdAQAAHQMAAB0FAAAdBgAAHQcAAB0JAAAdCgAAHUkAAB1LAAAdTQAAHU8AAB1RAAAdUgAAHVMAAB1UAAAdVQAAHVcAAB1ZAAAdWgAAHVsAAB1dAAAdXgAAHYMAAB2nAAAdzgAAHfIAAB30AAAd9gAAHfgAAB36AAAd/AAAHf4AAB3/AAAeAQAAHg4AAB4dAAAeHwAAHiEAAB4jAAAeJQAAHicAAB4pAAAeKwAAHjoAAB48AAAePgAAHkAAAB5CAAAeRQAAHkgAAB5LAAAeTQAAHl8AAB5zAAAehQAAHpoAAB6sAAAeuwAAHtgAAB8XAAAfGQAAHxsAAB8dAAAfHwAAHyAAAB8hAAAfIgAAHyMAAB8lAAAfJwAAHygAAB8pAAAfKwAAHywAAB9rAAAfbQAAH28AAB9xAAAfcwAAH3QAAB91AAAfdgAAH3cAAB95AAAfewAAH3wAAB99AAAffwAAH4AAAB+CAAAfwQAAH8MAAB/FAAAfxwAAH8kAAB/KAAAfywAAH8wAAB/NAAAfzwAAH9EAAB/SAAAf0wAAH9UAAB/WAAAgFQAAIBcAACAZAAAgGwAAIB0AACAeAAAgHwAAICAAACAhAAAgIwAAICUAACAmAAAgJwAAICkAACAqAAAgbQAAIJEAACC1AAAg2AAAIP8AACEfAAAhRgAAIW0AACGNAAAhsQAAIdUAACHXAAAh2QAAIdsAACHdAAAh3wAAIeEAACHkAAAh5gAAIegAACHrAAAh7QAAIe8AACHyAAAh9AAAIfUAACH6AAAiBwAAIgoAACIMAAAiDwAAIhEAACITAAAiOAAAIlwAACKDAAAipwAAIqkAACKrAAAirQAAIq8AACKxAAAiswAAIrQAACK2AAAiwwAAItYAACLYAAAi2gAAItwAACLeAAAi4AAAIuIAACLkAAAi5gAAIugAACL7AAAi/QAAIv8AACMBAAAjAwAAIwUAACMHAAAjCQAAIwsAACMNAAAjDwAAI04AACNQAAAjUgAAI1QAACNWAAAjVwAAI1gAACNZAAAjWgAAI1wAACNeAAAjXwAAI2AAACNiAAAjYwAAI2wAACNtAAAjbwAAI64AACOwAAAjsgAAI7QAACO2AAAjtwAAI7gAACO5AAAjugAAI7wAACO+AAAjvwAAI8AAACPCAAAjwwAAJAIAACQEAAAkBgAAJAgAACQKAAAkCwAAJAwAACQNAAAkDgAAJBAAACQSAAAkEwAAJBQAACQWAAAkFwAAJCAAACQjAAAkJQAAJCcAACQwAAAkMwAAJDUAACQ3AAAkdgAAJHgAACR6AAAkfAAAJH4AACR/AAAkgAAAJIEAACSCAAAkhAAAJIYAACSHAAAkiAAAJIoAACSLAAAkygAAJMwAACTOAAAk0AAAJNIAACTTAAAk1AAAJNUAACTWAAAk2AAAJNoAACTbAAAk3AAAJN4AACTfAAAk6AAAJOkAACTrAAAlKgAAJSwAACUuAAAlMAAAJTIAACUzAAAlNAAAJTUAACU2AAAlOAAAJToAACU7AAAlPAAAJT4AACU/AAAlfgAAJYAAACWCAAAlhAAAJYYAACWHAAAliAAAJYkAACWKAAAljAAAJY4AACWPAAAlkAAAJZIAACWTAAAloAAAJaEAACWiAAAlpAAAJeMAACXlAAAl5wAAJekAACXrAAAl7AAAJe0AACXuAAAl7wAAJfEAACXzAAAl9AAAJfUAACX3AAAl+AAAJjcAACY5AAAmOwAAJj0AACY/AAAmQAAAJkEAACZCAAAmQwAAJkUAACZHAAAmSAAAJkkAACZLAAAmTAAAJlkAACZwAAAmcgAAJnQAACZ2AAAmeAAAJnoAACZ8AAAmfgAAJoAAACaCAAAmhAAAJoYAACadAAAmnwAAJqIAACalAAAmqAAAJqsAACauAAAmsQAAJrQAACa3AAAmugAAJr0AACa/AAAmxgAAJtUAACboAAAm8wAAJvwAACcHAAAnEgAAJ10AACeAAAAnoAAAJ8AAACfCAAAnxAAAJ8YAACfIAAAnygAAJ8sAACfMAAAnzgAAJ88AACfRAAAn0gAAJ9QAACfWAAAn1wAAJ9gAACfaAAAn2wAAJ+AAACftAAAn8gAAJ/QAACf2AAAn+wAAJ/0AACf/AAAoAQAAKCYAAChKAAAocQAAKJUAACiXAAAomQAAKJsAACidAAAonwAAKKEAACiiAAAopAAAKLEAACjCAAAoxAAAKMYAACjIAAAoygAAKMwAACjOAAAo0AAAKNIAACjjAAAo5QAAKOcAACjpAAAo6wAAKO0AACjvAAAo8QAAKPMAACj1AAApNAAAKTYAACk4AAApOgAAKTwAACk9AAApPgAAKT8AAClAAAApQgAAKUQAAClFAAApRgAAKUgAAClJAAApiAAAKYoAACmMAAApjgAAKZAAACmRAAApkgAAKZMAACmUAAAplgAAKZgAACmZAAApmgAAKZwAACmdAAAp3AAAKd4AACngAAAp4gAAKeQAACnlAAAp5gAAKecAACnoAAAp6gAAKewAACntAAAp7gAAKfAAACnxAAAp/gAAKf8AACoAAAAqAgAAKkEAACpDAAAqRQAAKkcAACpJAAAqSgAAKksAACpMAAAqTQAAKk8AACpRAAAqUgAAKlMAACpVAAAqVgAAKpUAACqXAAAqmQAAKpsAACqdAAAqngAAKp8AACqgAAAqoQAAKqMAACqlAAAqpgAAKqcAACqpAAAqqgAAKukAACrrAAAq7QAAKu8AACrxAAAq8gAAKvMAACr0AAAq9QAAKvcAACr5AAAq+gAAKvsAACr9AAAq/gAAKz0AACs/AAArQQAAK0MAACtFAAArRgAAK0cAACtIAAArSQAAK0sAACtNAAArTgAAK08AACtRAAArUgAAK5EAACuTAAArlQAAK5cAACuZAAArmgAAK5sAACucAAArnQAAK58AACuhAAArogAAK6MAACulAAArpgAAK8sAACvvAAAsFgAALDoAACw8AAAsPgAALEAAACxCAAAsRAAALEYAACxHAAAsSQAALFYAACxlAAAsZwAALGkAACxrAAAsbQAALG8AACxxAAAscwAALIIAACyEAAAshgAALIgAACyKAAAsjQAALJAAACyTAAAslQAALNQAACzWAAAs2AAALNoAACzcAAAs3QAALN4AACzfAAAs4AAALOIAACzkAAAs5QAALOYAACzoAAAs6QAALSgAAC0qAAAtLAAALS4AAC0wAAAtMQAALTIAAC0zAAAtNAAALTYAAC04AAAtOQAALToAAC08AAAtPQAALT8AAC1+AAAtgAAALYIAAC2EAAAthgAALYcAAC2IAAAtiQAALYoAAC2MAAAtjgAALY8AAC2QAAAtkgAALZMAAC3SAAAt1AAALdYAAC3YAAAt2gAALdsAAC3cAAAt3QAALd4AAC3gAAAt4gAALeMAAC3kAAAt5gAALecAAC4qAAAuTgAALnIAAC6VAAAuvAAALtwAAC8DAAAvKgAAL0oAAC9uAAAvkgAAL5QAAC+WAAAvmAAAL5oAAC+cAAAvngAAL6EAAC+jAAAvpQAAL6gAAC+qAAAvrAAAL68AAC+xAAAvsgAAL7cAAC/EAAAvxwAAL8kAAC/MAAAvzgAAL9AAAC/1AAAwGQAAMEAAADBkAAAwZgAAMGgAADBqAAAwbAAAMG4AADBwAAAwcQAAMHMAADCAAAAwkwAAMJUAADCXAAAwmQAAMJsAADCdAAAwnwAAMKEAADCjAAAwpQAAMLgAADC6AAAwvAAAML4AADDAAAAwwgAAMMQAADDGAAAwyAAAMMoAADDMAAAxCwAAMQ0AADEPAAAxEQAAMRMAADEUAAAxFQAAMRYAADEXAAAxGQAAMRsAADEcAAAxHQAAMR8AADEgAAAxKQAAMSoAADEsAAAxawAAMW0AADFvAAAxcQAAMXMAADF0AAAxdQAAMXYAADF3AAAxeQAAMXsAADF8AAAxfQAAMX8AADGAAAAxvwAAMcEAADHDAAAxxQAAMccAADHIAAAxyQAAMcoAADHLAAAxzQAAMc8AADHQAAAx0QAAMdMAADHUAAAx3QAAMeAAADHiAAAx5AAAMe0AADHwAAAx8gAAMfQAADIzAAAyNQAAMjcAADI5AAAyOwAAMjwAADI9AAAyPgAAMj8AADJBAAAyQwAAMkQAADJFAAAyRwAAMkgAADKHAAAyiQAAMosAADKNAAAyjwAAMpAAADKRAAAykgAAMpMAADKVAAAylwAAMpgAADKZAAAymwAAMpwAADKlAAAypgAAMqgAADLnAAAy6QAAMusAADLtAAAy7wAAMvAAADLxAAAy8gAAMvMAADL1AAAy9wAAMvgAADL5AAAy+wAAMvwAADM7AAAzPQAAMz8AADNBAAAzQwAAM0QAADNFAAAzRgAAM0cAADNJAAAzSwAAM0wAADNNAAAzTwAAM1AAADNdAAAzXgAAM18AADNhAAAzoAAAM6IAADOkAAAzpgAAM6gAADOpAAAzqgAAM6sAADOsAAAzrgAAM7AAADOxAAAzsgAAM7QAADO1AAAz9AAAM/YAADP4AAAz+gAAM/wAADP9AAAz/gAAM/8AADQAAAA0AgAANAQAADQFAAA0BgAANAgAADQJAAA0FgAANCcAADQpAAA0KwAANC0AADQvAAA0MQAANDMAADQ1AAA0NwAANEgAADRKAAA0TAAANE4AADRQAAA0UwAANFYAADRZAAA0XAAANF4AADRrAAA0cAAANHoAADTFAAA06AAANQgAADUoAAA1KgAANSwAADUuAAA1MAAANTIAADUzAAA1NAAANTYAADU3AAA1OQAANToAADU8AAA1PgAANT8AADVAAAA1QgAANUMAADVIAAA1VQAANVoAADVcAAA1XgAANWMAADVlAAA1ZwAANWkAADWOAAA1sgAANdkAADX9AAA1/wAANgEAADYDAAA2BQAANgcAADYJAAA2CgAANgwAADYZAAA2KgAANiwAADYuAAA2MAAANjIAADY0AAA2NgAANjgAADY6AAA2SwAANk0AADZPAAA2UQAANlMAADZVAAA2VwAANlkAADZbAAA2XQAANpwAADaeAAA2oAAANqIAADakAAA2pQAANqYAADanAAA2qAAANqoAADasAAA2rQAANq4AADawAAA2sQAANvAAADbyAAA29AAANvYAADb4AAA2+QAANvoAADb7AAA2/AAANv4AADcAAAA3AQAANwIAADcEAAA3BQAAN0QAADdGAAA3SAAAN0oAADdMAAA3TQAAN04AADdPAAA3UAAAN1IAADdUAAA3VQAAN1YAADdYAAA3WQAAN2YAADdnAAA3aAAAN2oAADepAAA3qwAAN60AADevAAA3sQAAN7IAADezAAA3tAAAN7UAADe3AAA3uQAAN7oAADe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XAABD2AAAQ9kAAEPaAABD3AAAQ94AAEPfAABD4AAAQ+IAAEPjAABEIgAARCQAAEQmAABEKAAARCoAAEQrAABELAAARC0AAEQuAABEMAAARDIAAEQzAABENAAARDYAAEQ3AABEdgAARHgAAER6AABEfAAARH4AAER/AABEgAAARIEAAESCAABEhAAARIYAAESHAABEiAAARIoAAESLAABEjgAARM0AAETPAABE0QAARNMAAETVAABE1gAARNcAAETYAABE2QAARNsAAETdAABE3gAARN8AAEThAABE4gAARSEAAEUjAABFJQAARScAAEUpAABFKgAARSsAAEUsAABFLQAARS8AAEUxAABFMgAARTMAAEU1AABFNgAARXUAAEV3AABFeQAARXsAAEV9AABFfgAARX8AAEWAAABFgQAARYMAAEWFAABFhgAARYcAAEWJAABFigAARZMAAEWhAABFrgAARbwAAEXJAABF3AAARfMAAEYFAABGUAAARnMAAEaTAABGswAARrUAAEa3AABGuQAARrsAAEa9AABGvgAARr8AAEbBAABGwgAARsQAAEbFAABGxwAARskAAEbKAABGywAARs0AAEbOAABG0wAARuAAAEblAABG5wAARukAAEbuAABG8AAARvIAAEb0AABHGQAARz0AAEdkAABHiAAAR4oAAEeMAABHjgAAR5AAAEeSAABHlAAAR5UAAEeXAABHpAAAR7UAAEe3AABHuQAAR7sAAEe9AABHvwAAR8EAAEfDAABHxQAAR9YAAEfYAABH2gAAR9wAAEfeAABH4AAAR+IAAEfkAABH5gAAR+gAAEgnAABIKQAASCsAAEgtAABILwAASDAAAEgxAABIMgAASDMAAEg1AABINwAASDgAAEg5AABIOwAASDwAAEh7AABIfQAASH8AAEiBAABIgwAASIQAAEiFAABIhgAASIcAAEiJAABIiwAASIwAAEiNAABIjwAASJAAAEjPAABI0QAASNMAAEjVAABI1wAASNgAAEjZAABI2gAASNsAAEjdAABI3wAASOAAAEjhAABI4wAASOQAAEjxAABI8gAASPMAAEj1AABJNAAASTYAAEk4AABJOgAASTwAAEk9AABJPgAAST8AAElAAABJQgAASUQAAElFAABJRgAASUgAAElJAABJiAAASYoAAEmMAABJjgAASZAAAEmRAABJkgAASZMAAEmUAABJlgAASZgAAEmZAABJmgAASZwAAEmdAABJ3AAASd4AAEngAABJ4gAASeQAAEnlAABJ5gAASecAAEnoAABJ6gAASewAAEntAABJ7gAASfAAAEnxAABKMAAASjIAAEo0AABKNgAASjgAAEo5AABKOgAASjsAAEo8AABKPgAASkAAAEpBAABKQgAASkQAAEpFAABKhAAASoYAAEqIAABKigAASowAAEqNAABKjgAASo8AAEqQAABKkgAASpQAAEqVAABKlgAASpgAAEqZAABKvgAASuIAAEsJAABLLQAASy8AAEsxAABLMwAASzUAAEs3AABLOQAASzoAAEs8AABLSQAAS1gAAEtaAABLXAAAS14AAEtgAABLYgAAS2QAAEtmAABLdQAAS3cAAEt5AABLewAAS30AAEt/AABLgQAAS4MAAEuFAABLxAAAS8YAAEvIAABLygAAS8wAAEvNAABLzgAAS88AAEvQAABL0gAAS9QAAEvVAABL1gAAS9gAAEvZAABMGAAATBoAAEwcAABMHgAATCAAAEwhAABMIgAATCMAAEwkAABMJgAATCgAAEwpAABMKgAATCwAAEwtAABMbAAATG4AAExwAABMcgAATHQAAEx1AABMdgAATHcAAEx4AABMegAATHwAAEx9AABMfgAATIAAAEyBAABMwAAATMIAAEzEAABMxgAATMgAAEzJAABMygAATMsAAEzMAABMzgAATNAAAEzRAABM0gAATNQAAEzVAABNFAAATRYAAE0YAABNGgAATRwAAE0dAABNHgAATR8AAE0gAABNIgAATSQAAE0lAABNJgAATSgAAE0pAABNaAAATWoAAE1sAABNbgAATXAAAE1xAABNcgAATXMAAE10AABNdgAATXgAAE15AABNegAATXwAAE19AABNvAAATb4AAE3AAABNwgAATcQAAE3FAABNxgAATccAAE3IAABNygAATcwAAE3NAABNzgAATdAAAE3RAABOHAAATj8AAE5fAABOfwAAToEAAE6DAABOhQAATocAAE6JAABOigAATosAAE6NAABOjgAATpAAAE6RAABOkwAATpUAAE6WAABOlwAATpkAAE6aAABOnwAATqwAAE6xAABOswAATrUAAE66AABOvAAATr8AAE7BAABO5gAATwoAAE8xAABPVQAAT1cAAE9ZAABPWwAAT10AAE9fAABPYQAAT2IAAE9lAABPcgAAT4MAAE+FAABPhwAAT4kAAE+LAABPjQAAT48AAE+RAABPkwAAT6QAAE+nAABPqgAAT60AAE+wAABPswAAT7YAAE+5AABPvAAAT74AAE/9AABP/wAAUAEAAFADAABQBQAAUAYAAFAHAABQCAAAUAkAAFALAABQDQAAUA4AAFAPAABQEQAAUBIAAFBRAABQUwAAUFUAAFBXAABQWQAAUFoAAFBbAABQXAAAUF0AAFBfAABQYQAAUGIAAFBjAABQZQAAUGYAAFClAABQpwAAUKoAAFCsAABQrgAAUK8AAFCwAABQsQAAULIAAFC0AABQtgAAULcAAFC4AABQugAAULsAAFDIAABQyQAAUMoAAFDMAABRCwAAUQ0AAFEPAABREQAAURMAAFEUAABRFQAAURYAAFEXAABRGQAAURsAAFEcAABRHQAAUR8AAFEgAABRXwAAUWEAAFFjAABRZQAAUWcAAFFoAABRaQAAUWoAAFFrAABRbQAAUW8AAFFwAABRcQAAUXMAAFF0AABRswAAUbUAAFG3AABRuQAAUbsAAFG8AABRvQAAUb4AAFG/AABRwQAAUcMAAFHEAABRxQAAUccAAFHIAABSBwAAUgkAAFILAABSDQAAUg8AAFIQAABSEQAAUhIAAFITAABSFQAAUhcAAFIYAABSGQAAUhsAAFIcAABSWwAAUl0AAFJfAABSYQAAUmMAAFJkAABSZQAAUmYAAFJnAABSaQAAUmsAAFJsAABSbQAAUm8AAFJwAABSlQAAUrkAAFLgAABTBAAAUwYAAFMIAABTCgAAUwwAAFMOAABTEAAAUxEAAFMUAABTIQAAUzAAAFMyAABTNAAAUzYAAFM4AABTOgAAUzwAAFM+AABTTQAAU1AAAFNTAABTVgAAU1kAAFNcAABTXwAAU2IAAFNkAABTowAAU6UAAFOnAABTqQAAU6wAAFOtAABTrgAAU68AAFOwAABTsgAAU7QAAFO1AABTtgAAU7gAAFO5AABT+AAAU/oAAFP8AABT/gAAVAEAAFQCAABUAwAAVAQAAFQFAABUBwAAVAkAAFQKAABUCwAAVA0AAFQOAABUTQAAVE8AAFRRAABUUwAAVFYAAFRXAABUWAAAVFkAAFRaAABUXAAAVF4AAFRfAABUYAAAVGIAAFRjAABUogAAVKQAAFSnAABUqQAAVKwAAFStAABUrgAAVK8AAFSwAABUsgAAVLQAAFS1AABUtgAAVLgAAFS5AABUvAAAVPsAAFT9AABU/wAAVQEAAFUEAABVBQAAVQYAAFUHAABVCAAAVQoAAFUMAABVDQAAVQ4AAFUQAABVEQAAVVAAAFVSAABVVAAAVVYAAFVZAABVWgAAVVsAAFVcAABVXQAAVV8AAFVhAABVYgAAVWMAAFVlAABVZgAAVaUAAFWnAABVqQAAVasAAFWuAABVrwAAVbAAAFWxAABVsgAAVbQAAFW2AABVtwAAVbgAAFW6AABVuwAAVgYAAFYpAABWSQAAVmkAAFZrAABWbQAAVm8AAFZxAABWcwAAVnQAAFZ1AABWeAAAVnkAAFZ7AABWfAAAVn4AAFaAAABWgQAAVoIAAFaFAABWhgAAVo8AAFacAABWoQAAVqMAAFalAABWqgAAVq0AAFawAABWsgAAVtcAAFb7AABXIgAAV0YAAFdJAABXSwAAV00AAFdPAABXUQAAV1MAAFdUAABXVwAAV2QAAFd1AABXdwAAV3kAAFd7AABXfQAAV38AAFeBAABXgwAAV4UAAFeWAABXmQAAV5wAAFefAABXogAAV6UAAFeoAABXqwAAV64AAFewAABX7wAAV/EAAFfzAABX9QAAV/gAAFf5AABX+gAAV/sAAFf8AABX/gAAWAAAAFgBAABYAgAAWAQAAFgFAABYRAAAWEYAAFhIAABYSgAAWE0AAFhOAABYTwAAWFAAAFhRAABYUwAAWFUAAFhWAABYVwAAWFkAAFhaAABYmQAAWJsAAFieAABYoAAAWKMAAFikAABYpQAAWKYAAFinAABYqQAAWKsAAFisAABYrQAAWK8AAFiwAABYvQAAWL4AAFi/AABYwQAAWQAAAFkCAABZBAAAWQYAAFkJAABZCgAAWQsAAFkMAABZDQAAWQ8AAFkRAABZEgAAWRMAAFkVAABZFgAAWVUAAFlXAABZWQAAWVsAAFleAABZXwAAWWAAAFlhAABZYgAAWWQAAFlmAABZZwAAWWgAAFlqAABZawAAWaoAAFmsAABZrgAAWbAAAFmzAABZtAAAWbUAAFm2AABZtwAAWbkAAFm7AABZvAAAWb0AAFm/AABZwAAAWf8AAFoBAABaAwAAWgUAAFoIAABaCQAAWgoAAFoLAABaDAAAWg4AAFoQAABaEQAAWhIAAFoUAABaFQAAWlQAAFpWAABaWAAAWloAAFpdAABaXgAAWl8AAFpgAABaYQAAWmMAAFplAABaZgAAWmcAAFppAABaagAAWo8AAFqzAABa2gAAWv4AAFsBAABbAwAAWwUAAFsHAABbCQAAWwsAAFsMAABbDwAAWxwAAFsrAABbLQAAWy8AAFsxAABbMwAAWzUAAFs3AABbOQAAW0gAAFtLAABbTgAAW1EAAFtUAABbVwAAW1oAAFtdAABbXwAAW54AAFugAABbogAAW6QAAFunAABbqAAAW6kAAFuqAABbqwAAW60AAFuvAABbsAAAW7EAAFuzAABbtAAAW/MAAFv1AABb9wAAW/kAAFv8AABb/QAAW/4AAFv/AABcAAAAXAIAAFwEAABcBQAAXAYAAFwIAABcCQAAXEgAAFxKAABcTAAAXE4AAFxRAABcUgAAXFMAAFxUAABcVQAAXFcAAFxZAABcWgAAXFsAAFxdAABcXgAAXJ0AAFyfAABcogAAXKQAAFynAABcqAAAXKkAAFyqAABcqwAAXK0AAFyvAABcsAAAXLEAAFyzAABctAAAXPMAAFz1AABc9wAAXPkAAFz8AABc/QAAXP4AAFz/AABdAAAAXQIAAF0EAABdBQAAXQYAAF0IAABdCQAAXUgAAF1KAABdTAAAXU4AAF1RAABdUgAAXVMAAF1UAABdVQAAXVcAAF1ZAABdWgAAXVsAAF1dAABdXgAAXZ0AAF2fAABdoQAAXaMAAF2mAABdpwAAXagAAF2pAABdqgAAXawAAF2uAABdrwAAXbAAAF2yAABdswAAXf4AAF4hAABeQQAAXmEAAF5jAABeZQAAXmcAAF5pAABeawAAXmwAAF5tAABecAAAXnEAAF5zAABedAAAXnYAAF54AABeeQAAXnoAAF59AABefgAAXocAAF6UAABemQAAXpsAAF6dAABeogAAXqUAAF6oAABeqgAAXs8AAF7zAABfGgAAXz4AAF9BAABfQwAAX0UAAF9HAABfSQAAX0sAAF9MAABfTwAAX1wAAF9tAABfbwAAX3EAAF9zAABfdQAAX3cAAF95AABfewAAX30AAF+OAABfkQAAX5QAAF+XAABfmgAAX50AAF+gAABfowAAX6YAAF+oAABf5wAAX+kAAF/rAABf7QAAX/AAAF/xAABf8gAAX/MAAF/0AABf9gAAX/gAAF/5AABf+gAAX/wAAF/9AABgPAAAYD4AAGBAAABgQgAAYEUAAGBGAABgRwAAYEgAAGBJAABgSwAAYE0AAGBOAABgTwAAYFEAAGBSAABgkQAAYJMAAGCWAABgmAAAYJsAAGCcAABgnQAAYJ4AAGCfAABgoQAAYKMAAGCkAABgpQAAYKcAAGCoAABgtQAAYLgAAGC7AABgvgAAYMEAAGDDAABg3QAAYOcAAGEmAABhKAAAYSoAAGEsAABhLwAAYTAAAGExAABhMgAAYTMAAGE1AABhNwAAYTgAAGE5AABhOwAAYTwAAGF7AABhfQAAYX8AAGGBAABhhAAAYYUAAGGGAABhhwAAYYgAAGGKAABhjAAAYY0AAGGOAABhkAAAYZEAAGHQAABh0gAAYdQAAGHWAABh2QAAYdoAAGHbAABh3AAAYd0AAGHfAABh4QAAYeIAAGHjAABh5QAAYeYAAGIlAABiJwAAYikAAGIrAABiLgAAYi8AAGIwAABiMQAAYjIAAGI0AABiNgAAYjcAAGI4AABiOgAAYjsAAGJ6AABifAAAYn4AAGKAAABigwAAYoQAAGKFAABihgAAYocAAGKJAABiiwAAYowAAGKNAABijwAAYpAAAGK1AABi2QAAYwAAAGMkAABjJwAAYykAAGMrAABjLQAAYy8AAGMxAABjMgAAYzUAAGNCAABjUQAAY1MAAGNVAABjVwAAY1kAAGNbAABjXQAAY18AAGNuAABjcQAAY3QAAGN3AABjegAAY30AAGOAAABjgwAAY4UAAGPEAABjxgAAY8gAAGPKAABjzQAAY84AAGPPAABj0AAAY9EAAGPTAABj1QAAY9YAAGPXAABj2QAAY9oAAGQZAABkGwAAZB0AAGQfAABkIgAAZCMAAGQkAABkJQAAZCYAAGQoAABkKgAAZCsAAGQsAABkLgAAZC8AAGRuAABkcAAAZHIAAGR0AABkdwAAZHgAAGR5AABkegAAZHsAAGR9AABkfwAAZIAAAGSBAABkgwAAZIQAAGTDAABkxQAAZMgAAGTKAABkzQAAZM4AAGTPAABk0AAAZNEAAGTTAABk1QAAZNYAAGTXAABk2QAAZNoAAGTdAABlHAAAZR4AAGUgAABlIgAAZSUAAGUmAABlJwAAZSgAAGUpAABlKwAAZS0AAGUuAABlLwAAZTEAAGUyAABlcQAAZXMAAGV2AABleAAAZXsAAGV8AABlfQAAZX4AAGV/AABlgQAAZYMAAGWEAABlhQAAZYcAAGWIAABlpAAAZeMAAGXlAABl5wAAZekAAGXsAABl7QAAZe4AAGXvAABl8AAAZfIAAGX0AABl9QAAZfYAAGX4AABl+QAAZkQAAGZnAABmhwAAZqcAAGapAABmqwAAZq0AAGavAABmsQAAZrIAAGazAABmtgAAZrcAAGa5AABmugAAZrwAAGa+AABmvwAAZsAAAGbDAABmxAAAZskAAGbWAABm2wAAZt0AAGbfAABm5AAAZucAAGbqAABm7AAAZxEAAGc1AABnXAAAZ4AAAGeDAABnhQAAZ4cAAGeJAABniwAAZ40AAGeOAABnkQAAZ54AAGevAABnsQAAZ7MAAGe1AABntwAAZ7kAAGe7AABnvQAAZ78AAGfQAABn0wAAZ9YAAGfZAABn3AAAZ98AAGfiAABn5QAAZ+gAAGfqAABoKQAAaCsAAGgtAABoLwAAaDIAAGgzAABoNAAAaDUAAGg2AABoOAAAaDoAAGg7AABoPAAAaD4AAGg/AABofgAAaIAAAGiCAABohAAAaIcAAGiIAABoiQAAaIoAAGiLAABojQAAaI8AAGiQAABokQAAaJMAAGiUAABo0wAAaNUAAGjYAABo2gAAaN0AAGjeAABo3wAAaOAAAGjhAABo4wAAaOUAAGjmAABo5wAAaOkAAGjqAABo9wAAaPgAAGj5AABo+wAAaToAAGk8AABpPgAAaUAAAGlDAABpRAAAaUUAAGlGAABpRwAAaUkAAGlLAABpTAAAaU0AAGlPAABpUAAAaY8AAGmRAABpkwAAaZUAAGmYAABpmQAAaZoAAGmbAABpnAAAaZ4AAGmgAABpoQAAaaIAAGmkAABppQAAaeQAAGnmAABp6AAAaeoAAGntAABp7gAAae8AAGnwAABp8QAAafMAAGn1AABp9gAAafcAAGn5AABp+gAAajkAAGo7AABqPQAAaj8AAGpCAABqQwAAakQAAGpFAABqRgAAakgAAGpKAABqSwAAakwAAGpOAABqTwAAao4AAGqQAABqkgAAapQAAGqXAABqmAAAapkAAGqaAABqmwAAap0AAGqfAABqoAAAaqEAAGqjAABqpAAAaskAAGrtAABrFAAAazgAAGs7AABrPQAAaz8AAGtBAABrQwAAa0UAAGtGAABrSQAAa1YAAGtlAABrZwAAa2kAAGtrAABrbQAAa28AAGtxAABrcwAAa4IAAGuFAABriAAAa4sAAGuOAABrkQAAa5QAAGuXAABrmQAAa9gAAGvaAABr3AAAa94AAGvhAABr4gAAa+MAAGvkAABr5QAAa+cAAGvpAABr6gAAa+sAAGvtAABr7gAAbC0AAGwvAABsMQAAbDMAAGw2AABsNwAAbDgAAGw5AABsOgAAbDwAAGw+AABsPwAAbEAAAGxCAABsQwAAbIIAAGyEAABshgAAbIgAAGyLAABsjAAAbI0AAGyOAABsjwAAbJEAAGyTAABslAAAbJUAAGyXAABsmAAAbNcAAGzZAABs3AAAbN4AAGzhAABs4gAAbOMAAGzkAABs5QAAbOcAAGzpAABs6gAAbOsAAGztAABs7gAAbS0AAG0vAABtMQAAbTMAAG02AABtNwAAbTgAAG05AABtOgAAbTwAAG0+AABtPwAAbUAAAG1CAABtQwAAbYIAAG2EAABthgAAbYgAAG2LAABtjAAAbY0AAG2OAABtjwAAbZEAAG2TAABtlAAAbZUAAG2XAABtmAAAbdcAAG3ZAABt2wAAbd0AAG3gAABt4QAAbeIAAG3jAABt5AAAbeYAAG3oAABt6QAAbeoAAG3sAABt7QAAbjgAAG5bAABuewAAbpsAAG6dAABunwAAbqEAAG6jAABupQAAbqYAAG6nAABuqgAAbqsAAG6tAABurgAAbrAAAG6yAABuswAAbrQAAG63AABuuAAAbsEAAG7OAABu0wAAbtUAAG7XAABu3AAAbt8AAG7iAABu5AAAbwkAAG8tAABvVAAAb3gAAG97AABvfQAAb38AAG+BAABvgwAAb4UAAG+GAABviQAAb5YAAG+nAABvqQAAb6sAAG+tAABvrwAAb7EAAG+zAABvtQAAb7cAAG/IAABvywAAb84AAG/RAABv1AAAb9cAAG/aAABv3QAAb+AAAG/iAABwIQAAcCMAAHAlAABwJwAAcCoAAHArAABwLAAAcC0AAHAuAABwMAAAcDIAAHAzAABwNAAAcDYAAHA3AABwdgAAcHgAAHB6AABwfAAAcH8AAHCAAABwgQAAcIIAAHCDAABwhQAAcIcAAHCIAABwiQAAcIsAAHCMAABwywAAcM0AAHDQAABw0gAAcNUAAHDWAABw1wAAcNgAAHDZAABw2wAAcN0AAHDeAABw3wAAcOEAAHDiAABw7wAAcPAAAHDxAABw8wAAcTIAAHE0AABxNgAAcTgAAHE7AABxPAAAcT0AAHE+AABxPwAAcUEAAHFDAABxRAAAcUUAAHFHAABxSAAAcYcAAHGJAABxiwAAcY0AAHGQAABxkQAAcZIAAHGTAABxlAAAcZYAAHGYAABxmQAAcZoAAHGcAABxnQAAcdwAAHHeAABx4AAAceIAAHHlAABx5gAAcecAAHHoAABx6QAAcesAAHHtAABx7gAAce8AAHHxAABx8gAAcjEAAHIzAAByNQAAcjcAAHI6AAByOwAAcjwAAHI9AAByPgAAckAAAHJCAAByQwAAckQAAHJGAAByRwAAcoYAAHKIAAByigAAcowAAHKPAABykAAAcpEAAHKSAABykwAAcpUAAHKXAABymAAAcpkAAHKbAABynAAAcsEAAHLlAABzDAAAczAAAHMzAABzNQAAczcAAHM5AABzOwAAcz0AAHM+AABzQQAAc04AAHNdAABzXwAAc2EAAHNjAABzZQAAc2cAAHNpAABzawAAc3oAAHN9AABzgAAAc4MAAHOGAABziQAAc4wAAHOPAABzkQAAc9AAAHPSAABz1QAAc9cAAHPaAABz2wAAc9wAAHPdAABz3gAAc+AAAHPiAABz4wAAc+QAAHPmAABz5wAAc+oAAHQpAAB0KwAAdC0AAHQvAAB0MgAAdDMAAHQ0AAB0NQAAdDYAAHQ4AAB0OgAAdDsAAHQ8AAB0PgAAdD8AAHR+AAB0gAAAdIIAAHSEAAB0hwAAdIgAAHSJAAB0igAAdIsAAHSNAAB0jwAAdJAAAHSRAAB0kwAAdJQAAHTTAAB01QAAdNgAAHTaAAB03QAAdN4AAHTfAAB04AAAdOEAAHTjAAB05QAAdOYAAHTnAAB06QAAdOoAAHTtAAB1LAAAdS4AAHUwAAB1MgAAdTUAAHU2AAB1NwAAdTgAAHU5AAB1OwAAdT0AAHU+AAB1PwAAdUEAAHVCAAB1gQAAdYMAAHWFAAB1hwAAdYoAAHWLAAB1jAAAdY0AAHWOAAB1kAAAdZIAAHWTAAB1lAAAdZYAAHWXAAB11gAAddgAAHXaAAB13AAAdd8AAHXgAAB14QAAdeIAAHXjAAB15QAAdecAAHX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/AACIAQAAiAIAAIgPAACIEAAAiBEAAIgTAACIUgAAiFQAAIhWAACIWAAAiFsAAIhcAACIXQAAiF4AAIhfAACIYQAAiGMAAIhkAACIZQAAiGcAAIhoAACIpwAAiKkAAIirAACIrQAAiLAAAIixAACIsgAAiLMAAIi0AACItgAAiLgAAIi5AACIugAAiLwAAIi9AACI/AAAiP4AAIkAAACJAgAAiQUAAIkGAACJBwAAiQgAAIkJAACJCwAAiQ0AAIkOAACJDwAAiREAAIkSAACJUQAAiVMAAIlVAACJVwAAiVoAAIlbAACJXAAAiV0AAIleAACJYAAAiWIAAIljAACJZAAAiWYAAIlnAACJpgAAiagAAImqAACJrAAAia8AAImwAACJsQAAibIAAImzAACJtQAAibcAAIm4AACJuQAAibsAAIm8AACJ4QAAigUAAIosAACKUAAAilMAAIpVAACKVwAAilkAAIpbAACKXQAAil4AAIphAACKbgAAin0AAIp/AACKgQAAioMAAIqFAACKhwAAiokAAIqLAACKmgAAip0AAIqgAACKowAAiqYAAIqpAACKrAAAiq8AAIqxAACK8AAAivIAAIr1AACK9wAAivoAAIr7AACK/AAAiv0AAIr+AACLAAAAiwIAAIsDAACLBAAAiwYAAIsHAACLCQAAi0gAAItKAACLTAAAi04AAItRAACLUgAAi1MAAItUAACLVQAAi1cAAItZAACLWgAAi1sAAItdAACLXgAAi50AAIufAACLoQAAi6MAAIumAACLpwAAi6gAAIupAACLqgAAi6wAAIuuAACLrwAAi7AAAIuyAACLswAAi/IAAIv0AACL9wAAi/kAAIv8AACL/QAAi/4AAIv/AACMAAAAjAIAAIwEAACMBQAAjAYAAIwIAACMCQAAjAsAAIxKAACMTAAAjE4AAIxQAACMUwAAjFQAAIxVAACMVgAAjFcAAIxZAACMWwAAjFwAAIxdAACMXwAAjGAAAIyfAACMoQAAjKMAAIylAACMqAAAjKkAAIyqAACMqwAAjKwAAIyuAACMsAAAjLEAAIyyAACMtAAAjLUAAIz0AACM9gAAjPgAAIz6AACM/QAAjP4AAIz/AACNAAAAjQEAAI0DAACNBQAAjQYAAI0HAACNCQAAjQoAAI1VAACNeAAAjZgAAI24AACNugAAjbwAAI2+AACNwAAAjcMAAI3EAACNxQAAjcgAAI3JAACNywAAjcwAAI3OAACN0QAAjdIAAI3TAACN1gAAjdcAAI3cAACN6QAAje4AAI3wAACN8gAAjfcAAI36AACN/QAAjf8AAI4kAACOSAAAjm8AAI6TAACOlgAAjpgAAI6aAACOnAAAjp4AAI6gAACOoQAAjqQAAI6xAACOwgAAjsQAAI7GAACOyAAAjsoAAI7MAACOzgAAjtAAAI7SAACO4wAAjuYAAI7pAACO7AAAju8AAI7yAACO9QAAjvgAAI77AACO/QAAjzwAAI8+AACPQAAAj0IAAI9FAACPRgAAj0cAAI9IAACPSQAAj0sAAI9NAACPTgAAj08AAI9RAACPUgAAj5EAAI+TAACPlQAAj5cAAI+aAACPmwAAj5wAAI+dAACPngAAj6AAAI+iAACPowAAj6QAAI+mAACPpwAAj+YAAI/oAACP6wAAj+0AAI/wAACP8QAAj/IAAI/zAACP9AAAj/YAAI/4AACP+QAAj/oAAI/8AACP/QAAkAoAAJALAACQDAAAkA4AAJBNAACQTwAAkFEAAJBTAACQVgAAkFcAAJBYAACQWQAAkFoAAJBcAACQXgAAkF8AAJBgAACQYgAAkGMAAJCiAACQpAAAkKYAAJCoAACQqwAAkKwAAJCtAACQrgAAkK8AAJCxAACQswAAkLQAAJC1AACQtwAAkLgAAJD3AACQ+QAAkPsAAJD9AACRAAAAkQEAAJECAACRAwAAkQQAAJEGAACRCAAAkQkAAJEKAACRDAAAkQ0AAJFMAACRTgAAkVAAAJFSAACRVQAAkVYAAJFXAACRWAAAkVkAAJFbAACRXQAAkV4AAJFfAACRYQAAkWIAAJGhAACRowAAkaUAAJGnAACRqgAAkasAAJGsAACRrQAAka4AAJGwAACRsgAAkbMAAJG0AACRtgAAkbcAAJHcAACSAAAAkicAAJJLAACSTgAAklAAAJJSAACSVAAAklYAAJJYAACSWQAAklwAAJJpAACSeAAAknoAAJJ8AACSfgAAkoAAAJKCAACShAAAkoYAAJKVAACSmAAAkpsAAJKeAACSoQAAkqQAAJKnAACSqgAAkqwAAJLrAACS7QAAku8AAJLxAACS9AAAkvUAAJL2AACS9wAAkvgAAJL6AACS/AAAkv0AAJL+AACTAAAAkwEAAJNAAACTQgAAk0QAAJNGAACTSQAAk0oAAJNLAACTTAAAk00AAJNPAACTUQAAk1IAAJNTAACTVQAAk1YAAJOVAACTlwAAk5kAAJObAACTngAAk58AAJOgAACToQAAk6IAAJOkAACTpgAAk6cAAJOoAACTqgAAk6sAAJPqAACT7AAAk+4AAJPwAACT8wAAk/QAAJP1AACT9gAAk/cAAJP5AACT+wAAk/wAAJP9AACT/wAAlAAAAJQ/AACUQQAAlEMAAJRFAACUSAAAlEkAAJRKAACUSwAAlEwAAJROAACUUAAAlFEAAJRSAACUVAAAlFUAAJSUAACUlgAAlJgAAJSaAACUnQAAlJ4AAJSfAACUoAAAlKEAAJSjAACUpQAAlKYAAJSnAACUqQAAlKoAAJTpAACU6wAAlO4AAJTwAACU8wAAlPQAAJT1AACU9gAAlPcAAJT5AACU+wAAlPwAAJT9AACU/wAAlQAAAJVLAACVbgAAlY4AAJWuAACVsAAAlbIAAJW0AACVtgAAlbkAAJW6AACVuwAAlb4AAJW/AACVwQAAlcIAAJXEAACVxgAAlccAAJXIAACVywAAlcwAAJXVAACV4gAAlecAAJXpAACV6wAAlfAAAJXzAACV9gAAlfgAAJYdAACWQQAAlmgAAJaMAACWjwAAlpEAAJaTAACWlQAAlpcAAJaZAACWmgAAlp0AAJaqAACWuwAAlr0AAJa/AACWwQAAlsMAAJbFAACWxwAAlskAAJbLAACW3AAAlt8AAJbiAACW5QAAlugAAJbrAACW7gAAlvEAAJb0AACW9gAAlzUAAJc3AACXOQAAlzsAAJc+AACXPwAAl0AAAJdBAACXQgAAl0QAAJdGAACXRwAAl0gAAJdKAACXSwAAl4oAAJeMAACXjgAAl5AAAJeTAACXlAAAl5UAAJeWAACXlwAAl5kAAJebAACXnAAAl50AAJefAACXoAAAl98AAJfhAACX5AAAl+YAAJfpAACX6gAAl+sAAJfsAACX7QAAl+8AAJfxAACX8gAAl/MAAJf1AACX9gAAmAMAAJgEAACYBQAAmAcAAJhGAACYSAAAmEoAAJhMAACYTwAAmFAAAJhRAACYUgAAmFMAAJhVAACYVwAAmFgAAJhZAACYWwAAmFwAAJibAACYnQAAmJ8AAJihAACYpAAAmKUAAJimAACYpwAAmKgAAJiqAACYrAAAmK0AAJiuAACYsAAAmLEAAJjwAACY8gAAmPQAAJj2AACY+QAAmPoAAJj7AACY/AAAmP0AAJj/AACZAQAAmQIAAJkDAACZBQAAmQYAAJlFAACZRwAAmUkAAJlLAACZTgAAmU8AAJlQAACZUQAAmVIAAJlUAACZVgAAmVcAAJlYAACZWgAAmVsAAJmaAACZnAAAmZ4AAJmgAACZowAAmaQAAJmlAACZpgAAmacAAJmpAACZqwAAmawAAJmtAACZrwAAmbAAAJnVAACZ+QAAmiAAAJpEAACaRwAAmkkAAJpLAACaTQAAmk8AAJpRAACaUgAAmlUAAJpiAACacQAAmnMAAJp1AACadwAAmnkAAJp7AACafQAAmn8AAJqOAACakQAAmpQAAJqXAACamgAAmp0AAJqgAACaowAAmqUAAJrkAACa5gAAmugAAJrqAACa7QAAmu4AAJrvAACa8AAAmvEAAJrzAACa9QAAmvYAAJr3AACa+QAAmvoAAJs5AACbOwAAmz0AAJs/AACbQgAAm0MAAJtEAACbRQAAm0YAAJtIAACbSgAAm0sAAJtMAACbTgAAm08AAJuOAACbkAAAm5IAAJuUAACblwAAm5gAAJuZAACbmgAAm5sAAJudAACbnwAAm6AAAJuhAACbowAAm6QAAJvjAACb5QAAm+gAAJvqAACb7QAAm+4AAJvvAACb8AAAm/EAAJvzAACb9QAAm/YAAJv3AACb+QAAm/oAAJw5AACcOwAAnD0AAJw/AACcQgAAnEMAAJxEAACcRQAAnEYAAJxIAACcSgAAnEsAAJxMAACcTgAAnE8AAJyOAACckAAAnJIAAJyUAACclwAAnJgAAJyZAACcmgAAnJsAAJydAACcnwAAnKAAAJyhAACcowAAnKQAAJzjAACc5QAAnOcAAJzpAACc7AAAnO0AAJzuAACc7wAAnPAAAJzyAACc9AAAnPUAAJz2AACc+AAAnPkAAJ0CAACdAwAAnQUAAJ1EAACdRgAAnUgAAJ1KAACdTQAAnU4AAJ1PAACdUAAAnVEAAJ1TAACdVQAAnVYAAJ1XAACdWQAAnVoAAJ2ZAACdmwAAnZ0AAJ2fAACdogAAnaMAAJ2kAACdpQAAnaYAAJ2oAACdqgAAnasAAJ2sAACdrgAAna8AAJ3uAACd8AAAnfMAAJ31AACd+AAAnfkAAJ36AACd+wAAnfwAAJ3+AACeAAAAngEAAJ4CAACeBAAAngUAAJ5QAACecwAAnpMAAJ6zAACetQAAnrcAAJ65AACeuwAAnr0AAJ6+AACevwAAnsIAAJ7DAACexQAAnsYAAJ7IAACeygAAnssAAJ7MAACezwAAntAAAJ7VAACe4gAAnucAAJ7pAACe6wAAnvAAAJ7zAACe9gAAnvgAAJ8dAACfQQAAn2gAAJ+MAACfjwAAn5EAAJ+TAACflQAAn5cAAJ+ZAACfmgAAn50AAJ+qAACfuwAAn70AAJ+/AACfwQAAn8MAAJ/FAACfxwAAn8kAAJ/LAACf3AAAn98AAJ/iAACf5QAAn+gAAJ/rAACf7gAAn/EAAJ/0AACf9gAAoDUAAKA3AACgOQAAoDsAAKA+AACgPwAAoEAAAKBBAACgQgAAoEQAAKBGAACgRwAAoEgAAKBKAACgSwAAoIoAAKCMAACgjgAAoJAAAKCTAACglAAAoJUAAKCWAACglwAAoJkAAKCbAACgnAAAoJ0AAKCfAACgoAAAoN8AAKDhAACg5AAAoOYAAKDpAACg6gAAoOsAAKDsAACg7QAAoO8AAKDxAACg8gAAoPMAAKD1AACg9gAAoQMAAKEEAAChBQAAoQcAAKFGAAChSAAAoUoAAKFMAAChTwAAoVAAAKFRAAChUgAAoVMAAKFVAAChVwAAoVgAAKFZAAChWwAAoVwAAKGbAAChnQAAoZ8AAKGhAAChpAAAoaUAAKGmAAChpwAAoagAAKGqAAChrAAAoa0AAKGuAAChsAAAobEAAKHwAACh8gAAofQAAKH2AACh+QAAofoAAKH7AACh/AAAof0AAKH/AACiAQAAogIAAKIDAACiBQAAogYAAKJFAACiRwAAokkAAKJLAACiTgAAok8AAKJQAACiUQAAolIAAKJUAACiVgAAolcAAKJYAACiWgAAolsAAKKaAACinAAAop4AAKKgAACiowAAoqQAAKKlAACipgAAoqcAAKKpAACiqwAAoqwAAKKtAACirwAAorAAAKLVAACi+QAAoyAAAKNEAACjRwAAo0kAAKNLAACjTQAAo08AAKNRAACjUgAAo1UAAKNiAACjcQAAo3MAAKN1AACjdwAAo3kAAKN7AACjfQAAo38AAKOOAACjkQAAo5QAAKOXAACjmgAAo50AAKOgAACjowAAo6UAAKPkAACj5gAAo+gAAKPqAACj7QAAo+4AAKPvAACj8AAAo/EAAKPzAACj9QAAo/YAAKP3AACj+QAAo/oAAKQ5AACkOwAApD0AAKQ/AACkQgAApEMAAKREAACkRQAApEYAAKRIAACkSgAApEsAAKRMAACkTgAApE8AAKSOAACkkAAApJIAAKSUAACklwAApJgAAKSZAACkmgAApJsAAKSdAACknwAApKAAAKShAACkowAApKQAAKTjAACk5QAApOcAAKTpAACk7AAApO0AAKTuAACk7wAApPAAAKTyAACk9AAApPUAAKT2AACk+AAApPkAAKU4AAClOgAApTwAAKU+AAClQQAApUIAAKVDAAClRAAApUUAAKVHAAClSQAApUoAAKVLAAClTQAApU4AAKWNAACljwAApZEAAKWTAACllgAApZcAAKWYAAClmQAApZoAAKWcAAClngAApZ8AAKWgAAClogAApaMAAKXiAACl5AAApecAAKXpAACl7AAApe0AAKXuAACl7wAApfAAAKXyAACl9AAApfUAAKX2AACl+AAApfkAAKZEAACmZwAApocAAKanAACmqQAApqsAAKatAACmrwAAprEAAKayAACmswAAprYAAKa3AACmuQAAproAAKa8AACmvgAApr8AAKbAAACmwwAApsQAAKbJAACm1gAAptsAAKbdAACm3wAApuQAAKbnAACm6gAApuwAAKcRAACnNQAAp1wAAKeAAACngwAAp4UAAKeHAACniQAAp4sAAKeNAACnjgAAp5EAAKeeAACnrwAAp7EAAKezAACntQAAp7cAAKe5AACnuwAAp70AAKe/AACn0AAAp9MAAKfWAACn2QAAp9wAAKffAACn4gAAp+UAAKfoAACn6gAAqCkAAKgrAACoLQAAqC8AAKgyAACoMwAAqDQAAKg1AACoNgAAqDgAAKg6AACoOwAAqDwAAKg+AACoPwAAqH4AAKiAAACoggAAqIQAAKiHAACoiAAAqIkAAKiKAACoiwAAqI0AAKiPAACokAAAqJEAAKiTAAColAAAqNMAAKjVAACo2AAAqNoAAKjdAACo3gAAqN8AAKjgAACo4QAAqOMAAKjlAACo5gAAqOcAAKjpAACo6gAAqPcAAKj4AACo+QAAqPsAAKk6AACpPAAAqT4AAKlAAACpQwAAqUQAAKlFAACpRgAAqUcAAKlJAACpSwAAqUwAAKlNAACpTwAAqVAAAKmPAACpkQAAqZMAAKmVAACpmAAAqZkAAKmaAACpmwAAqZwAAKmeAACpoAAAqaEAAKmiAACppAAAqaUAAKnkAACp5gAAqegAAKnqAACp7QAAqe4AAKnvAACp8AAAqfEAAKnzAACp9QAAqfYAAKn3AACp+QAAqfoAAKo5AACqOwAAqj0AAKo/AACqQgAAqkMAAKpEAACqRQAAqkYAAKpIAACqSgAAqksAAKpMAACqTgAAqk8AAKqOAACqkAAAqpIAAKqUAACqlwAAqpgAAKqZAACqmgAAqpsAAKqdAACqnwAAqqAAAKqhAACqowAAqqQAAKrJAACq7QAAqxQAAKs4AACrOwAAqz0AAKs/AACrQQAAq0MAAKtFAACrRgAAq0kAAKtWAACrZQAAq2cAAKtpAACrawAAq20AAKtvAACrcQAAq3MAAKuCAACrhQAAq4gAAKuLAACrjgAAq5EAAKuUAACrlwAAq5kAAKvYAACr2gAAq9wAAKveAACr4QAAq+IAAKvjAACr5AAAq+UAAKvnAACr6QAAq+oAAKvrAACr7QAAq+4AAKwtAACsLwAArDEAAKwzAACsNgAArDcAAKw4AACsOQAArDoAAKw8AACsPgAArD8AAKxAAACsQgAArEMAAKyCAACshAAArIYAAKyIAACsiwAArIwAAKyNAACsjgAArI8AAKyRAACskwAArJQAAKyVAACslwAArJgAAKzXAACs2QAArNsAAKzdAACs4AAArOEAAKziAACs4wAArOQAAKzmAACs6AAArOkAAKzqAACs7AAArO0AAK0sAACtLgAArTAAAK0yAACtNQAArTYAAK03AACtOAAArTkAAK07AACtPQAArT4AAK0/AACtQQAArUIAAK2BAACtgwAArYUAAK2HAACtigAArYsAAK2MAACtjQAArY4AAK2QAACtkgAArZMAAK2UAACtlgAArZcAAK3WAACt2AAArdsAAK3dAACt4AAAreEAAK3iAACt4wAAreQAAK3mAACt6AAArekAAK3qAACt7AAAre0AAK44AACuWwAArnsAAK6bAACunQAArp8AAK6hAACuowAArqUAAK6mAACupwAArqoAAK6rAACurQAArq4AAK6wAACusgAArrMAAK60AACutwAArrgAAK7BAACuzgAArtMAAK7VAACu1wAArtwAAK7fAACu4gAAruQAAK8JAACvLQAAr1QAAK94AACvewAAr30AAK9/AACvgQAAr4MAAK+FAACvhgAAr4kAAK+WAACvpwAAr6kAAK+rAACvrQAAr68AAK+xAACvswAAr7UAAK+3AACvyAAAr8sAAK/OAACv0QAAr9QAAK/XAACv2gAAr90AAK/gAACv4gAAsCEAALAjAACwJQAAsCcAALAqAACwKwAAsCwAALAtAACwLgAAsDAAALAyAACwMwAAsDQAALA2AACwNwAAsHYAALB4AACwegAAsHwAALB/AACwgAAAsIEAALCCAACwgwAAsIUAALCHAACwiAAAsIkAALCLAACwjAAAsMsAALDNAACw0AAAsNIAALDVAACw1gAAsNcAALDYAACw2QAAsNsAALDdAACw3gAAsN8AALDhAACw4gAAsO8AALDwAACw8QAAsPMAALEyAACxNAAAsTYAALE4AACxOwAAsTwAALE9AACxPgAAsT8AALFBAACxQwAAsUQAALFFAACxRwAAsUgAALGHAACxiQAAsYsAALGNAACxkAAAsZEAALGSAACxkwAAsZQAALGWAACxmAAAsZkAALGaAACxnAAAsZ0AALHcAACx3gAAseAAALHiAACx5QAAseYAALHnAACx6AAAsekAALHrAACx7QAAse4AALHvAACx8QAAsfIAALIxAACyMwAAsjUAALI3AACyOgAAsjsAALI8AACyPQAAsj4AALJAAACyQgAAskMAALJEAACyRgAAskcAALKGAACyiAAAsooAALKMAACyjwAAspAAALKRAACykgAAspMAALKVAACylwAAspgAALKZAACymwAAspwAALLBAACy5QAAswwAALMwAACzMwAAszUAALM3AACzOQAAszsAALM9AACzPgAAs0EAALNOAACzXQAAs18AALNhAACzYwAAs2UAALNnAACzaQAAs2sAALN6AACzfQAAs4AAALODAACzhgAAs4kAALOMAACzjwAAs5EAALPQAACz0gAAs9QAALPWAACz2QAAs9oAALPbAACz3AAAs90AALPfAACz4QAAs+IAALPjAACz5QAAs+YAALQlAAC0JwAAtCkAALQrAAC0LgAAtC8AALQwAAC0MQAAtDIAALQ0AAC0NgAAtDcAALQ4AAC0OgAAtDsAALR6AAC0fAAAtH4AALSAAAC0gwAAtIQAALSFAAC0hgAAtIcAALSJAAC0iwAAtIwAALSNAAC0jwAAtJAAALTPAAC00QAAtNMAALTVAAC02AAAtNkAALTaAAC02wAAtNwAALTeAAC04AAAtOEAALTiAAC05AAAtOUAALUkAAC1JgAAtSgAALUqAAC1LQAAtS4AALUvAAC1MAAAtTEAALUzAAC1NQAAtTYAALU3AAC1OQAAtToAALV5AAC1ewAAtX0AALV/AAC1ggAAtYMAALWEAAC1hQAAtYYAALWIAAC1igAAtYsAALWMAAC1jgAAtY8AALXOAAC10AAAtdIAALXUAAC11wAAtdgAALXZAAC12gAAtdsAALXdAAC13wAAteAAALXhAAC14wAAteQAALYvAAC2UgAAtnIAALaSAAC2lAAAtpYAALaYAAC2mgAAtpwAALadAAC2ngAAtqEAALaiAAC2pAAAtqUAALanAAC2qQAAtqoAALarAAC2rgAAtq8AALa0AAC2wQAAtsYAALbIAAC2ygAAts8AALbSAAC21QAAttcAALb8AAC3IAAAt0cAALdrAAC3bgAAt3AAALdyAAC3dAAAt3YAALd4AAC3eQAAt3wAALeJAAC3mgAAt5wAALeeAAC3oAAAt6IAALekAAC3pgAAt6gAALeqAAC3uwAAt74AALfBAAC3xAAAt8cAALfKAAC3zQAAt9AAALfTAAC31QAAuBQAALgWAAC4GAAAuBoAALgdAAC4HgAAuB8AALggAAC4IQAAuCMAALglAAC4JgAAuCcAALgpAAC4KgAAuGkAALhrAAC4bQAAuG8AALhyAAC4cwAAuHQAALh1AAC4dgAAuHgAALh6AAC4ewAAuHwAALh+AAC4fwAAuL4AALjAAAC4wwAAuMUAALjIAAC4yQAAuMoAALjLAAC4zAAAuM4AALjQAAC40QAAuNIAALjUAAC41QAAuOIAALjjAAC45AAAuOYAALklAAC5JwAAuSkAALkrAAC5LgAAuS8AALkwAAC5MQAAuTIAALk0AAC5NgAAuTcAALk4AAC5OgAAuTsAALl6AAC5fAAAuX4AALmAAAC5gwAAuYQAALmFAAC5hgAAuYcAALmJAAC5iwAAuYwAALmNAAC5jwAAuZAAALnPAAC50QAAudMAALnVAAC52AAAudkAALnaAAC52wAAudwAALneAAC54AAAueEAALn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2AADROAAA0TkAANE6AADRPAAA0T0AANF8AADRfgAA0YAAANGCAADRhQAA0YYAANGHAADRiAAA0YkAANGLAADRjQAA0Y4AANGPAADRkQAA0ZIAANHRAADR0wAA0dUAANHXAADR2gAA0dsAANHcAADR3QAA0d4AANHgAADR4gAA0eMAANHkAADR5gAA0ecAANImAADSKAAA0ioAANIsAADSLwAA0jAAANIxAADSMgAA0jMAANI1AADSNwAA0jgAANI5AADSOwAA0jwAANJ7AADSfQAA0n8AANKBAADShAAA0oUAANKGAADShwAA0ogAANKKAADSjAAA0o0AANKOAADSkAAA0pEAANLQAADS0gAA0tQAANLWAADS2QAA0toAANLbAADS3AAA0t0AANLfAADS4QAA0uIAANLjAADS5QAA0uYAANMlAADTJwAA0yoAANMsAADTLwAA0zAAANMxAADTMgAA0zMAANM1AADTNwAA0zgAANM5AADTOwAA0zwAANOHAADTqgAA08oAANPqAADT7AAA0+4AANPwAADT8gAA0/UAANP2AADT9wAA0/oAANP7AADT/QAA0/4AANQAAADUAgAA1AMAANQEAADUBwAA1AgAANQNAADUGgAA1B8AANQhAADUIwAA1CgAANQrAADULgAA1DAAANRVAADUeQAA1KAAANTEAADUxwAA1MkAANTLAADUzQAA1M8AANTRAADU0gAA1NUAANTiAADU8wAA1PUAANT3AADU+QAA1PsAANT9AADU/wAA1QEAANUDAADVFAAA1RcAANUaAADVHQAA1SAAANUjAADVJgAA1SkAANUsAADVLgAA1W0AANVvAADVcQAA1XMAANV2AADVdwAA1XgAANV5AADVegAA1XwAANV+AADVfwAA1YAAANWCAADVgwAA1cIAANXEAADVxgAA1cgAANXLAADVzAAA1c0AANXOAADVzwAA1dEAANXTAADV1AAA1dUAANXXAADV2AAA1hcAANYZAADWHAAA1h4AANYhAADWIgAA1iMAANYkAADWJQAA1icAANYpAADWKgAA1isAANYtAADWLgAA1jsAANY8AADWPQAA1j8AANZ+AADWgAAA1oIAANaEAADWhwAA1ogAANaJAADWigAA1osAANaNAADWjwAA1pAAANaRAADWkwAA1pQAANbTAADW1QAA1tcAANbZAADW3AAA1t0AANbeAADW3wAA1uAAANbiAADW5AAA1uUAANbmAADW6AAA1ukAANcoAADXKgAA1ywAANcuAADXMQAA1zIAANczAADXNAAA1zUAANc3AADXOQAA1zoAANc7AADXPQAA1z4AANd9AADXfwAA14EAANeDAADXhgAA14cAANeIAADXiQAA14oAANeMAADXjgAA148AANeQAADXkgAA15MAANfSAADX1AAA19YAANfYAADX2wAA19wAANfdAADX3gAA198AANfhAADX4wAA1+QAANflAADX5wAA1+gAANgNAADYMQAA2FgAANh8AADYfwAA2IEAANiDAADYhQAA2IcAANiJAADYigAA2I0AANiaAADYqQAA2KsAANitAADYrwAA2LEAANizAADYtQAA2LcAANjGAADYyQAA2MwAANjPAADY0gAA2NUAANjYAADY2wAA2N0AANkcAADZHgAA2SAAANkiAADZJQAA2SYAANknAADZKAAA2SkAANkrAADZLQAA2S4AANkvAADZMQAA2TIAANlxAADZcwAA2XUAANl3AADZegAA2XsAANl8AADZfQAA2X4AANmAAADZggAA2YMAANmEAADZhgAA2YcAANnGAADZyAAA2coAANnMAADZzwAA2dAAANnRAADZ0gAA2dMAANnVAADZ1wAA2dgAANnZAADZ2wAA2dwAANobAADaHQAA2iAAANoiAADaJQAA2iYAANonAADaKAAA2ikAANorAADaLQAA2i4AANovAADaMQAA2jIAANpxAADacwAA2nUAANp3AADaegAA2nsAANp8AADafQAA2n4AANqAAADaggAA2oMAANqEAADahgAA2ocAANrGAADayAAA2soAANrMAADazwAA2tAAANrRAADa0gAA2tMAANrVAADa1wAA2tgAANrZAADa2wAA2twAANsbAADbHQAA2x8AANshAADbJAAA2yUAANsmAADbJwAA2ygAANsqAADbLAAA2y0AANsuAADbMAAA2zEAANs6AADbOwAA2z0AANt8AADbfgAA24AAANuCAADbhQAA24YAANuHAADbiAAA24kAANuLAADbjQAA244AANuPAADbkQAA25IAANvRAADb0wAA29UAANvXAADb2gAA29sAANvcAADb3QAA294AANvgAADb4gAA2+MAANvkAADb5gAA2+cAANwmAADcKAAA3CsAANwtAADcMAAA3DEAANwyAADcMwAA3DQAANw2AADcOAAA3DkAANw6AADcPAAA3D0AANyIAADcqwAA3MsAANzrAADc7QAA3O8AANzxAADc8wAA3PUAANz2AADc9wAA3PoAANz7AADc/QAA3P4AAN0AAADdAgAA3QMAAN0EAADdBwAA3QgAAN0NAADdGgAA3R8AAN0hAADdIwAA3SgAAN0rAADdLgAA3TAAAN1VAADdeQAA3aAAAN3EAADdxwAA3ckAAN3LAADdzQAA3c8AAN3RAADd0gAA3dUAAN3iAADd8wAA3fUAAN33AADd+QAA3fsAAN39AADd/wAA3gEAAN4DAADeFAAA3hcAAN4aAADeHQAA3iAAAN4jAADeJgAA3ikAAN4sAADeLgAA3m0AAN5vAADecQAA3nMAAN52AADedwAA3ngAAN55AADeegAA3nwAAN5+AADefwAA3oAAAN6CAADegwAA3sIAAN7EAADexgAA3sgAAN7LAADezAAA3s0AAN7OAADezwAA3tEAAN7TAADe1AAA3tUAAN7XAADe2AAA3xcAAN8ZAADfHAAA3x4AAN8hAADfIgAA3yMAAN8kAADfJQAA3ycAAN8pAADfKgAA3ysAAN8tAADfLgAA3zsAAN88AADfPQAA3z8AAN9+AADfgAAA34IAAN+EAADfhwAA34gAAN+JAADfigAA34sAAN+NAADfjwAA35AAAN+RAADfkwAA35QAAN/TAADf1QAA39cAAN/ZAADf3AAA390AAN/eAADf3wAA3+AAAN/iAADf5AAA3+UAAN/mAADf6AAA3+kAAOAoAADgKgAA4CwAAOAuAADgMQAA4DIAAOAzAADgNAAA4DUAAOA3AADgOQAA4DoAAOA7AADgPQAA4D4AAOB9AADgfwAA4IEAAOCDAADghgAA4IcAAOCIAADgiQAA4IoAAOCMAADgjgAA4I8AAOCQAADgkgAA4JMAAODSAADg1AAA4NYAAODYAADg2wAA4NwAAODdAADg3gAA4N8AAODhAADg4wAA4OQAAODlAADg5wAA4OgAAOENAADhMQAA4VgAAOF8AADhfwAA4YEAAOGDAADhhQAA4YcAAOGJAADhigAA4Y0AAOGaAADhqQAA4asAAOGtAADhrwAA4bEAAOGzAADhtQAA4bcAAOHGAADhyQAA4cwAAOHPAADh0gAA4dUAAOHYAADh2wAA4d0AAOIcAADiHgAA4iAAAOIiAADiJQAA4iYAAOInAADiKAAA4ikAAOIrAADiLQAA4i4AAOIvAADiMQAA4jIAAOJxAADicwAA4nUAAOJ3AADiegAA4nsAAOJ8AADifQAA4n4AAOKAAADiggAA4oMAAOKEAADihgAA4ocAAOLGAADiyAAA4soAAOLMAADizwAA4tAAAOLRAADi0gAA4tMAAOLVAADi1wAA4tgAAOLZAADi2wAA4twAAOMbAADjHQAA4yAAAOMiAADjJQAA4yYAAOMnAADjKAAA4ykAAOMrAADjLQAA4y4AAOMvAADjMQAA4zIAAONxAADjcwAA43UAAON3AADjegAA43sAAON8AADjfQAA434AAOOAAADjggAA44MAAOOEAADjhgAA44cAAOPGAADjyAAA48oAAOPMAADjzwAA49AAAOPRAADj0gAA49MAAOPVAADj1wAA49gAAOPZAADj2wAA49wAAOQbAADkHQAA5B8AAOQhAADkJAAA5CUAAOQmAADkJwAA5CgAAOQqAADkLAAA5C0AAOQuAADkMAAA5DEAAOR8AADknwAA5L8AAOTfAADk4QAA5OMAAOTlAADk5wAA5OkAAOTqAADk6wAA5O4AAOTvAADk8QAA5PIAAOT0AADk9gAA5PcAAOT4AADk+wAA5PwAAOUBAADlDgAA5RMAAOUVAADlFwAA5RwAAOUfAADlIgAA5SQAAOVJAADlbQAA5ZQAAOW4AADluwAA5b0AAOW/AADlwQAA5cMAAOXFAADlxgAA5ckAAOXWAADl5wAA5ekAAOXrAADl7QAA5e8AAOXxAADl8wAA5fUAAOX3AADmCAAA5gsAAOYOAADmEQAA5hQAAOYXAADmGgAA5h0AAOYgAADmIgAA5mEAAOZjAADmZQAA5mcAAOZqAADmawAA5mwAAOZtAADmbgAA5nAAAOZyAADmcwAA5nQAAOZ2AADmdwAA5rYAAOa4AADmugAA5rwAAOa/AADmwAAA5sEAAObCAADmwwAA5sUAAObHAADmyAAA5skAAObLAADmzAAA5wsAAOcNAADnEAAA5xIAAOcVAADnFgAA5xcAAOcYAADnGQAA5xsAAOcdAADnHgAA5x8AAOchAADnIgAA5y8AAOcyAADnNQAA5zgAAOc7AADnPQAA51cAAOdbAADnmgAA55wAAOeeAADnoAAA56MAAOekAADnpQAA56YAAOenAADnqQAA56sAAOesAADnrQAA568AAOewAADn7wAA5/EAAOfzAADn9QAA5/gAAOf5AADn+gAA5/sAAOf8AADn/gAA6AAAAOgBAADoAgAA6AQAAOgFAADoRAAA6EYAAOhIAADoSgAA6E0AAOhOAADoTwAA6FAAAOhRAADoUwAA6FUAAOhWAADoVwAA6FkAAOhaAADomQAA6JsAAOidAADonwAA6KIAAOijAADopAAA6KUAAOimAADoqAAA6KoAAOirAADorAAA6K4AAOivAADo7gAA6PAAAOjyAADo9AAA6PcAAOj4AADo+QAA6PoAAOj7AADo/QAA6P8AAOkAAADpAQAA6QMAAOkEAADpKQAA6U0AAOl0AADpmAAA6ZsAAOmdAADpnwAA6aEAAOmjAADppQAA6aYAAOmpAADptgAA6cUAAOnHAADpyQAA6csAAOnNAADpzwAA6dEAAOnTAADp4gAA6eUAAOnoAADp6wAA6e4AAOnxAADp9AAA6fcAAOn5AADqOAAA6joAAOo8AADqPgAA6kEAAOpCAADqQwAA6kQAAOpFAADqRwAA6kkAAOpKAADqSwAA6k0AAOpOAADqjQAA6o8AAOqRAADqkwAA6pYAAOqXAADqmAAA6pkAAOqaAADqnAAA6p4AAOqfAADqoAAA6qIAAOqjAADq4gAA6uQAAOrmAADq6AAA6usAAOrsAADq7QAA6u4AAOrvAADq8QAA6vMAAOr0AADq9QAA6vcAAOr4AADrNwAA6zkAAOs8AADrPgAA60EAAOtCAADrQwAA60QAAOtFAADrRwAA60kAAOtKAADrSwAA600AAOtOAADrjQAA648AAOuRAADrkwAA65YAAOuXAADrmAAA65kAAOuaAADrnAAA654AAOufAADroAAA66IAAOujAADr4gAA6+QAAOvnAADr6QAA6+wAAOvtAADr7gAA6+8AAOvwAADr8gAA6/QAAOv1AADr9gAA6/gAAOv5AADsFQAA7FQAAOxWAADsWAAA7FoAAOxdAADsXgAA7F8AAOxgAADsYQAA7GMAAOxlAADsZgAA7GcAAOxpAADsagAA7LUAAOzYAADs+AAA7RgAAO0aAADtHAAA7R4AAO0gAADtIgAA7SMAAO0kAADtJwAA7SgAAO0qAADtKwAA7S0AAO0vAADtMAAA7TEAAO00AADtNQAA7ToAAO1HAADtTAAA7U4AAO1QAADtVQAA7VgAAO1bAADtXQAA7YIAAO2mAADtzQAA7fEAAO30AADt9gAA7fgAAO36AADt/AAA7f4AAO3/AADuAgAA7g8AAO4gAADuIgAA7iQAAO4mAADuKAAA7ioAAO4sAADuLgAA7jAAAO5BAADuRAAA7kcAAO5KAADuTQAA7lAAAO5TAADuVgAA7lkAAO5bAADumgAA7pwAAO6eAADuoAAA7qMAAO6kAADupQAA7qYAAO6nAADuqQAA7qsAAO6sAADurQAA7q8AAO6wAADu7wAA7vEAAO7zAADu9QAA7vgAAO75AADu+gAA7vsAAO78AADu/gAA7wAAAO8BAADvAgAA7wQAAO8FAADvRAAA70YAAO9JAADvSwAA704AAO9PAADvUAAA71EAAO9SAADvVAAA71YAAO9XAADvWAAA71oAAO9bAADvaAAA72sAAO9uAADvcQAA73QAAO92AADvkAAA75kAAO/YAADv2gAA79wAAO/eAADv4QAA7+IAAO/jAADv5AAA7+UAAO/nAADv6QAA7+oAAO/rAADv7QAA7+4AAPAtAADwLwAA8DEAAPAzAADwNgAA8DcAAPA4AADwOQAA8DoAAPA8AADwPgAA8D8AAPBAAADwQgAA8EMAAPCCAADwhAAA8IYAAPCIAADwiwAA8IwAAPCNAADwjgAA8I8AAPCRAADwkwAA8JQAAPCVAADwlwAA8JgAAPDXAADw2QAA8NsAAPDdAADw4AAA8OEAAPDiAADw4wAA8OQAAPDmAADw6AAA8OkAAPDqAADw7AAA8O0AAPEsAADxLgAA8TAAAPEyAADxNQAA8TYAAPE3AADxOAAA8TkAAPE7AADxPQAA8T4AAPE/AADxQQAA8UIAAPFnAADxiwAA8bIAAPHWAADx2QAA8dsAAPHdAADx3wAA8eEAAPHjAADx5AAA8ecAAPH0AADyAwAA8gUAAPIHAADyCQAA8gsAAPINAADyDwAA8hEAAPIgAADyIwAA8iYAAPIpAADyLAAA8i8AAPIyAADyNQAA8jcAAPJ2AADyeAAA8noAAPJ8AADyfwAA8oAAAPKBAADyggAA8oMAAPKFAADyhwAA8ogAAPKJAADyiwAA8owAAPLLAADyzQAA8s8AAPL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TAAEOmAABDpoAAQ6cAAEOoQABDqQAAQ6nAAEOqQABDs4AAQ7yAAEPGQABDz0AAQ9AAAEPQgABD0QAAQ9GAAEPSAABD0oAAQ9LAAEPTgABD1sAAQ9sAAEPbgABD3AAAQ9yAAEPdAABD3YAAQ94AAEPegABD3wAAQ+NAAEPkAABD5MAAQ+WAAEPmQABD5wAAQ+fAAEPogABD6UAAQ+nAAEP5gABD+gAAQ/qAAEP7AABD+8AAQ/wAAEP8QABD/IAAQ/zAAEP9QABD/cAAQ/4AAEP+QABD/sAAQ/8AAEQOwABED0AARA/AAEQQQABEEQAARBFAAEQRgABEEcAARBIAAEQSgABEEwAARBNAAEQTgABEFAAARBRAAEQkAABEJIAARCVAAEQlwABEJoAARCbAAEQnAABEJ0AARCeAAEQoAABEKIAARCjAAEQpAABEKYAARCnAAEQtAABELUAARC2AAEQuAABEPcAARD5AAEQ+wABEP0AAREAAAERAQABEQIAAREDAAERBAABEQYAAREIAAERCQABEQoAAREMAAERDQABEUwAARFOAAERUAABEVIAARFVAAERVgABEVcAARFYAAERWQABEVsAARFdAAERXgABEV8AARFhAAERYgABEaEAARGjAAERpQABEacAARGqAAERqwABEawAARGtAAERrgABEbAAARGyAAERswABEbQAARG2AAERtwABEfYAARH4AAER+gABEfwAARH/AAESAAABEgEAARICAAESAwABEgUAARIHAAESCAABEgkAARILAAESDAABEksAARJNAAESTwABElEAARJUAAESVQABElYAARJXAAESWAABEloAARJcAAESXQABEl4AARJgAAESYQABEoYAARKqAAES0QABEvUAARL4AAES+gABEvwAARL+AAETAAABEwIAARMDAAETBgABExMAARMiAAETJAABEyYAARMoAAETKgABEywAARMuAAETMAABEz8AARNCAAETRQABE0gAARNLAAETTgABE1EAARNUAAETVgABE5UAAROXAAETmQABE5sAAROeAAETnwABE6AAAROhAAETogABE6QAAROmAAETpwABE6gAAROqAAETqwABE+oAARPsAAET7gABE/AAARPzAAET9AABE/UAARP2AAET9wABE/kAARP7AAET/AABE/0AARP/AAEUAAABFD8AARRBAAEUQwABFEUAARRIAAEUSQABFEoAARRLAAEUTAABFE4AARRQAAEUUQABFFIAARRUAAEUVQABFJQAARSWAAEUmAABFJoAARSdAAEUngABFJ8AARSgAAEUoQABFKMAARSlAAEUpgABFKcAARSpAAEUqgABFOkAARTrAAEU7QABFO8AARTyAAEU8wABFPQAART1AAEU9gABFPgAART6AAEU+wABFPwAART+AAEU/wABFT4AARVAAAEVQgABFUQAARVHAAEVSAABFUkAARVKAAEVSwABFU0AARVPAAEVUAABFVEAARVTAAEVVAABFZMAARWVAAEVlwABFZkAARWcAAEVnQABFZ4AARWfAAEVoAABFaIAARWkAAEVpQABFaYAARWoAAEVqQABFfQAARYXAAEWNwABFlcAARZZAAEWWwABFl0AARZfAAEWYQABFmIAARZjAAEWZgABFmcAARZpAAEWagABFmwAARZuAAEWbwABFnAAARZzAAEWdAABFnkAARaGAAEWiwABFo0AARaPAAEWlAABFpcAARaaAAEWnAABFsEAARblAAEXDAABFzAAARczAAEXNQABFzcAARc5AAEXOwABFz0AARc+AAEXQQABF04AARdfAAEXYQABF2MAARdlAAEXZwABF2kAARdrAAEXbQABF28AAReAAAEXgwABF4YAAReJAAEXjAABF48AAReSAAEXlQABF5gAAReaAAEX2QABF9sAARfdAAEX3wABF+IAARfjAAEX5AABF+UAARfmAAEX6AABF+oAARfrAAEX7AABF+4AARfvAAEYLgABGDAAARgyAAEYNAABGDcAARg4AAEYOQABGDoAARg7AAEYPQABGD8AARhAAAEYQQABGEMAARhEAAEYgwABGIUAARiIAAEYigABGI0AARiOAAEYjwABGJAAARiRAAEYkwABGJUAARiWAAEYlwABGJkAARiaAAEYpwABGKgAARipAAEYqwABGOoAARjsAAEY7gABGPAAARjzAAEY9AABGPUAARj2AAEY9wABGPkAARj7AAEY/AABGP0AARj/AAEZAAABGT8AARlBAAEZQwABGUUAARlIAAEZSQABGUoAARlLAAEZTAABGU4AARlQAAEZUQABGVIAARlUAAEZVQABGZQAARmWAAEZmAABGZoAARmdAAEZngABGZ8AARmgAAEZoQABGaMAARmlAAEZpgABGacAARmpAAEZqgABGekAARnrAAEZ7QABGe8AARnyAAEZ8wABGfQAARn1AAEZ9gABGfgAARn6AAEZ+wABGfwAARn+AAEZ/wABGj4AARpAAAEaQgABGkQAARpHAAEaSAABGkkAARpKAAEaSwABGk0AARpPAAEaUAABGlEAARpTAAEaVAABGnkAARqdAAEaxAABGugAARrrAAEa7QABGu8AARrxAAEa8wABGvUAARr2AAEa+QABGwYAARsVAAEbFwABGxkAARsbAAEbHQABGx8AARshAAEbIwABGzIAARs1AAEbOAABGzsAARs+AAEbQQABG0QAARtHAAEbSQABG4gAARuKAAEbjAABG44AARuRAAEbkgABG5MAARuUAAEblQABG5cAARuZAAEbmgABG5sAARudAAEbngABG90AARvfAAEb4QABG+MAARvmAAEb5wABG+gAARvpAAEb6gABG+wAARvuAAEb7wABG/AAARvyAAEb8wABHDIAARw0AAEcNgABHDgAARw7AAEcPAABHD0AARw+AAEcPwABHEEAARxDAAEcRAABHEUAARxHAAEcSAABHIcAARyJAAEciwABHI0AARyQAAEckQABHJIAARyTAAEclAABHJYAARyYAAEcmQABHJoAARycAAEcnQABHNwAARzeAAEc4AABHOIAARzlAAEc5gABHOcAARzoAAEc6QABHOsAARztAAEc7gABHO8AARzxAAEc8gABHTEAAR0zAAEdNQABHTcAAR06AAEdOwABHTwAAR09AAEdPgABHUAAAR1CAAEdQwABHUQAAR1GAAEdRwABHYYAAR2IAAEdigABHYwAAR2PAAEdkAABHZEAAR2SAAEdkwABHZUAAR2XAAEdmAABHZkAAR2bAAEdnAABHecAAR4KAAEeKgABHkoAAR5MAAEeTgABHlAAAR5SAAEeVAABHlUAAR5WAAEeWQABHloAAR5cAAEeXQABHl8AAR5hAAEeYgABHmMAAR5mAAEeZwABHmwAAR55AAEefgABHoAAAR6CAAEehwABHooAAR6NAAEejwABHrQAAR7YAAEe/wABHyMAAR8mAAEfKAABHyoAAR8sAAEfLgABHzAAAR8xAAEfNAABH0EAAR9SAAEfVAABH1YAAR9YAAEfWgABH1wAAR9eAAEfYAABH2IAAR9zAAEfdgABH3kAAR98AAEffwABH4IAAR+FAAEfiAABH4sAAR+NAAEfzAABH84AAR/QAAEf0gABH9UAAR/WAAEf1wABH9gAAR/ZAAEf2wABH90AAR/eAAEf3wABH+EAAR/iAAEgIQABICMAASAlAAEgJwABICoAASArAAEgLAABIC0AASAuAAEgMAABIDIAASAzAAEgNAABIDYAASA3AAEgdgABIHgAASB7AAEgfQABIIAAASCBAAEgggABIIMAASCEAAEghgABIIgAASCJAAEgigABIIwAASCNAAEgmgABIJsAASCcAAEgngABIN0AASDfAAEg4QABIOMAASDmAAEg5wABIOgAASDpAAEg6gABIOwAASDuAAEg7wABIPAAASDyAAEg8wABITIAASE0AAEhNgABITgAASE7AAEhPAABIT0AASE+AAEhPwABIUEAASFDAAEhRAABIUUAASFHAAEhSAABIYcAASGJAAEhiwABIY0AASGQAAEhkQABIZIAASGTAAEhlAABIZYAASGYAAEhmQABIZoAASGcAAEhnQABIdwAASHeAAEh4AABIeIAASHlAAEh5gABIecAASHoAAEh6QABIesAASHtAAEh7gABIe8AASHxAAEh8gABIjEAASIzAAEiNQABIjcAASI6AAEiOwABIjwAASI9AAEiPgABIkAAASJCAAEiQwABIkQAASJGAAEiRwABImwAASKQAAEitwABItsAASLeAAEi4AABIuIAASLkAAEi5gABIugAASLpAAEi7AABIvkAASMIAAEjCgABIwwAASMOAAEjEAABIxIAASMUAAEjFgABIyUAASMoAAEjKwABIy4AASMxAAEjNAABIzcAASM6AAEjPAABI3sAASN9AAEjfwABI4EAASOEAAEjhQABI4YAASOHAAEjiAABI4oAASOMAAEjjQABI44AASOQAAEjkQABI9AAASPSAAEj1AABI9YAASPZAAEj2gABI9sAASPcAAEj3QABI98AASPhAAEj4gABI+MAASPlAAEj5gABJCUAASQnAAEkKQABJCsAASQuAAEkLwABJDAAASQxAAEkMgABJDQAASQ2AAEkNwABJDgAASQ6AAEkOwABJHoAASR8AAEkfwABJIEAASSEAAEkhQABJIYAASSHAAEkiAABJIoAASSMAAEkjQABJI4AASSQAAEkkQABJNAAASTSAAEk1AABJNYAASTZAAEk2gABJNsAASTcAAEk3QABJN8AASThAAEk4gABJOMAASTlAAEk5gABJSUAASUnAAElKQABJSsAASUuAAElLwABJTAAASUxAAElMgABJTQAASU2AAElNwABJTgAASU6AAElOwABJXoAASV8AAElfgABJYAAASWDAAElhAABJYUAASWGAAElhwABJYkAASWLAAEljAABJY0AASWPAAElkAABJdsAASX+AAEmHgABJj4AASZAAAEmQgABJkQAASZGAAEmSAABJkkAASZKAAEmTQABJk4AASZQAAEmUQABJlMAASZVAAEmVgABJlcAASZaAAEmWwABJmQAASZxAAEmdgABJngAASZ6AAEmfwABJoIAASaFAAEmhwABJqwAASbQAAEm9wABJxsAASceAAEnIAABJyIAASckAAEnJgABJygAAScpAAEnLAABJzkAASdKAAEnTAABJ04AASdQAAEnUgABJ1QAASdWAAEnWAABJ1oAASdrAAEnbgABJ3EAASd0AAEndwABJ3oAASd9AAEngAABJ4MAASeFAAEnxAABJ8YAASfIAAEnygABJ80AASfOAAEnzwABJ9AAASfRAAEn0wABJ9UAASfWAAEn1wABJ9kAASfaAAEoGQABKBsAASgdAAEoHwABKCIAASgjAAEoJAABKCUAASgmAAEoKAABKCoAASgrAAEoLAABKC4AASgvAAEobgABKHAAAShzAAEodQABKHgAASh5AAEoegABKHsAASh8AAEofgABKIAAASiBAAEoggABKIQAASiFAAEokgABKJUAASiYAAEomwABKJ4AASigAAEougABKPkAASj7AAEo/QABKP8AASkCAAEpAwABKQQAASkFAAEpBgABKQgAASkKAAEpCwABKQwAASkOAAEpDwABKU4AASlQAAEpUgABKVQAASlXAAEpWAABKVkAASlaAAEpWwABKV0AASlfAAEpYAABKWEAASljAAEpZAABKaMAASmlAAEppwABKakAASmsAAEprQABKa4AASmvAAEpsAABKbIAASm0AAEptQABKbYAASm4AAEpuQABKfgAASn6AAEp/AABKf4AASoBAAEqAgABKgMAASoEAAEqBQABKgcAASoJAAEqCgABKgsAASoNAAEqDgABKk0AASpPAAEqUQABKlMAASpWAAEqVwABKlgAASpZAAEqWgABKlwAASpeAAEqXwABKmAAASpiAAEqYwABKogAASqsAAEq0wABKvcAASr6AAEq/AABKv4AASsAAAErAgABKwQAASsFAAErCAABKxUAASskAAErJgABKygAASsqAAErLAABKy4AASswAAErMgABK0EAAStEAAErRwABK0oAAStNAAErUAABK1MAAStWAAErWAABK5cAASuZAAErmwABK50AASugAAEroQABK6IAASujAAErpAABK6YAASuoAAErqQABK6oAASusAAErrQABK+wAASvuAAEr8AABK/IAASv1AAEr9gABK/cAASv4AAEr+QABK/sAASv9AAEr/gABK/8AASwBAAEsAgABLEEAASxDAAEsRQABLEcAASxKAAEsSwABLEwAASxNAAEsTgABLFAAASxSAAEsUwABLFQAASxWAAEsVwABLJYAASyYAAEsmwABLJ0AASygAAEsoQABLKIAASyjAAEspAABLKYAASyoAAEsqQABLKoAASysAAEsrQABLOwAASzuAAEs8AABLPIAASz1AAEs9gABLPcAASz4AAEs+QABLPsAASz9AAEs/gABLP8AAS0BAAEtAgABLUEAAS1DAAEtRQABLUcAAS1KAAEtSwABLUwAAS1NAAEtTgABLVAAAS1SAAEtUwABLVQAAS1WAAEtVwABLZYAAS2YAAEtmgABLZwAAS2fAAEtoAABLaEAAS2iAAEtowABLaUAAS2nAAEtqAABLakAAS2rAAEtrAABLfcAAS4aAAEuOgABLloAAS5cAAEuXgABLmAAAS5iAAEuZAABLmUAAS5mAAEuaQABLmoAAS5sAAEubQABLm8AAS5xAAEucgABLnMAAS52AAEudwABLnwAAS6JAAEujgABLpAAAS6SAAEulwABLpoAAS6dAAEunwABLsQAAS7oAAEvDwABLzMAAS82AAEvOAABLzoAAS88AAEvPgABL0AAAS9BAAEvRAABL1EAAS9iAAEvZAABL2YAAS9oAAEvagABL2wAAS9uAAEvcAABL3IAAS+DAAEvhgABL4kAAS+MAAEvjwABL5IAAS+VAAEvmAABL5sAAS+dAAEv3AABL94AAS/gAAEv4gABL+UAAS/mAAEv5wABL+gAAS/pAAEv6wABL+0AAS/uAAEv7wABL/EAAS/yAAEwMQABMDMAATA1AAEwNwABMDoAATA7AAEwPAABMD0AATA+AAEwQAABMEIAATBDAAEwRAABMEYAATBHAAEwhgABMIgAATCLAAEwjQABMJAAATCRAAEwkgABMJMAATCUAAEwlgABMJgAATCZAAEwmgABMJwAATCdAAEwqgABMK0AATCwAAEwswABMLYAATC4AAEw0wABMOEAATEgAAExIgABMSQAATEmAAExKQABMSoAATErAAExLAABMS0AATEvAAExMQABMTIAATEzAAExNQABMTYAATF1AAExdwABMXkAATF7AAExfgABMX8AATGAAAExgQABMYIAATGEAAExhgABMYcAATGIAAExigABMYsAATHKAAExzAABMc4AATHQAAEx0wABMdQAATHVAAEx1gABMdcAATHZAAEx2wABMdwAATHdAAEx3wABMeAAATIfAAEyIQABMiMAATIlAAEyKAABMikAATIqAAEyKwABMiwAATIuAAEyMAABMjEAATIyAAEyNAABMjUAATJ0AAEydgABMngAATJ6AAEyfQABMn4AATJ/AAEygAABMoEAATKDAAEyhQABMoYAATKHAAEyiQABMooAATKvAAEy0wABMvoAATMeAAEzIQABMyMAATMlAAEzJwABMykAATMrAAEzLAABMy8AATM8AAEzSwABM00AATNPAAEzUQABM1MAATNVAAEzVwABM1kAATNoAAEzawABM24AATNxAAEzdAABM3cAATN6AAEzfQABM38AATO+AAEzwAABM8MAATPFAAEzyAABM8kAATPKAAEzywABM8wAATPOAAEz0AABM9EAATPSAAEz1AABM9UAATPXAAE0FgABNBgAATQaAAE0HAABNB8AATQgAAE0IQABNCIAATQjAAE0JQABNCcAATQoAAE0KQABNCsAATQsAAE0awABNG0AATRvAAE0cQABNHQAATR1AAE0dgABNHcAATR4AAE0egABNHwAATR9AAE0fgABNIAAATSBAAE0wAABNMIAATTFAAE0xwABNMoAATTLAAE0zAABNM0AATTOAAE00AABNNIAATTTAAE01AABNNYAATTXAAE1FgABNRgAATUaAAE1HAABNR8AATUgAAE1IQABNSIAATUjAAE1JQABNScAATUoAAE1KQABNSsAATUsAAE1awABNW0AATVvAAE1cQABNXQAATV1AAE1dgABNXcAATV4AAE1egABNXwAATV9AAE1fgABNYAAATWBAAE1wAABNcIAATXEAAE1xgABNckAATXKAAE1ywABNcwAATXNAAE1zwABNdEAATXSAAE10wABNdUAATXWAAE2IQABNkQAATZkAAE2hAABNoYAATaIAAE2igABNowAATaOAAE2jwABNpAAATaTAAE2lAABNpYAATaXAAE2mQABNpsAATacAAE2nQABNqAAATahAAE2pgABNrMAATa4AAE2ugABNrwAATbBAAE2xAABNscAATbJAAE27gABNxIAATc5AAE3XQABN2AAATdiAAE3ZAABN2YAATdoAAE3agABN2sAATduAAE3ewABN4wAATeOAAE3kAABN5IAATeUAAE3lgABN5gAATeaAAE3nAABN60AATewAAE3swABN7YAATe5AAE3vAABN78AATfCAAE3xQABN8cAATgGAAE4CAABOAoAATgMAAE4DwABOBAAATgRAAE4EgABOBMAATgVAAE4FwABOBgAATgZAAE4GwABOBwAAThbAAE4XQABOF8AAThhAAE4ZAABOGUAAThmAAE4ZwABOGgAAThqAAE4bAABOG0AAThuAAE4cAABOHEAATiwAAE4sgABOLUAATi3AAE4ugABOLsAATi8AAE4vQABOL4AATjAAAE4wgABOMMAATjEAAE4xgABOMcAATjUAAE41QABONYAATjYAAE5FwABORkAATkbAAE5HQABOSAAATkhAAE5IgABOSMAATkkAAE5JgABOSgAATkpAAE5KgABOSwAATktAAE5bAABOW4AATlwAAE5cgABOXUAATl2AAE5dwABOXgAATl5AAE5ewABOX0AATl+AAE5fwABOYEAATmCAAE5wQABOcMAATnFAAE5xwABOcoAATnLAAE5zAABOc0AATnOAAE50AABOdIAATnTAAE51AABOdYAATnXAAE6FgABOhgAAToaAAE6HAABOh8AATogAAE6IQABOiIAATojAAE6JQABOicAATooAAE6KQABOisAATosAAE6awABOm0AATpvAAE6cQABOnQAATp1AAE6dgABOncAATp4AAE6egABOnwAATp9AAE6fgABOoAAATqBAAE6pgABOsoAATrxAAE7FQABOxgAATsaAAE7HAABOx4AATsgAAE7IgABOyMAATsmAAE7MwABO0IAATtEAAE7RgABO0gAATtKAAE7TAABO04AATtQAAE7XwABO2IAATtlAAE7aAABO2sAATtuAAE7cQABO3QAATt2AAE7tQABO7cAATu5AAE7uwABO74AATu/AAE7wAABO8EAATvCAAE7xAABO8YAATvHAAE7yAABO8oAATvLAAE8CgABPAwAATwOAAE8EAABPBMAATwUAAE8FQABPBYAATwXAAE8GQABPBsAATwcAAE8HQABPB8AATwgAAE8XwABPGEAATxjAAE8ZQABPGgAATxpAAE8agABPGsAATxsAAE8bgABPHAAATxxAAE8cgABPHQAATx1AAE8tAABPLYAATy5AAE8uwABPL4AATy/AAE8wAABPMEAATzCAAE8xAABPMYAATzHAAE8yAABPMoAATzLAAE9CgABPQwAAT0OAAE9EAABPRMAAT0UAAE9FQABPRYAAT0XAAE9GQABPRsAAT0cAAE9HQABPR8AAT0gAAE9XwABPWEAAT1jAAE9ZQABPWgAAT1pAAE9agABPWsAAT1sAAE9bgABPXAAAT1xAAE9cgABPXQAAT11AAE9tAABPbYAAT24AAE9ugABPb0AAT2+AAE9vwABPcAAAT3BAAE9wwABPcUAAT3GAAE9xwABPckAAT3KAAE90wABPdQAAT3WAAE+GQABPj0AAT5hAAE+hAABPqsAAT7LAAE+8gABPxkAAT85AAE/XQABP4EAAT+DAAE/hgABP4gAAT+KAAE/jAABP48AAT+SAAE/lAABP5YAAT+ZAAE/mwABP50AAT+gAAE/owABP6QAAT+pAAE/tgABP7kAAT+7AAE/vgABP8EAAT/DAAE/6AABQAwAAUAzAAFAVwABQFoAAUBcAAFAXgABQGAAAUBiAAFAZAABQGUAAUBoAAFAdQABQIgAAUCKAAFAjAABQI4AAUCQAAFAkgABQJQAAUCWAAFAmAABQJoAAUCtAAFAsAABQLMAAUC2AAFAuQABQLwAAUC/AAFAwgABQMUAAUDIAAFAygABQQkAAUELAAFBDgABQRAAAUETAAFBFAABQRUAAUEWAAFBFwABQRkAAUEbAAFBHAABQR0AAUEfAAFBIAABQSkAAUEqAAFBLAABQWsAAUFtAAFBbwABQXEAAUF0AAFBdQABQXYAAUF3AAFBeAABQXoAAUF8AAFBfQABQX4AAUGAAAFBgQABQcAAAUHCAAFBxQABQccAAUHKAAFBywABQcwAAUHNAAFBzgABQdAAAUH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lAAFYJwABWCgAAVhnAAFYaQABWGsAAVhtAAFYcAABWHEAAVhyAAFYcwABWHQAAVh2AAFYeAABWHkAAVh6AAFYfAABWH0AAVi8AAFYvgABWMAAAVjCAAFYxQABWMYAAVjHAAFYyAABWMkAAVjLAAFYzQABWM4AAVjPAAFY0QABWNIAAVkRAAFZEwABWRUAAVkXAAFZGgABWRsAAVkcAAFZHQABWR4AAVkgAAFZIgABWSMAAVkkAAFZJgABWScAAVlmAAFZaAABWWoAAVlsAAFZbwABWXAAAVlxAAFZcgABWXMAAVl1AAFZdwABWXgAAVl5AAFZewABWXwAAVmhAAFZxQABWewAAVoQAAFaEwABWhUAAVoXAAFaGQABWhsAAVodAAFaHgABWiEAAVouAAFaPQABWj8AAVpBAAFaQwABWkUAAVpHAAFaSQABWksAAVpaAAFaXQABWmAAAVpjAAFaZgABWmkAAVpsAAFabwABWnEAAVqwAAFasgABWrQAAVq2AAFauQABWroAAVq7AAFavAABWr0AAVq/AAFawQABWsIAAVrDAAFaxQABWsYAAVsFAAFbBwABWwkAAVsLAAFbDgABWw8AAVsQAAFbEQABWxIAAVsUAAFbFgABWxcAAVsYAAFbGgABWxsAAVtaAAFbXAABW14AAVtgAAFbYwABW2QAAVtlAAFbZgABW2cAAVtpAAFbawABW2wAAVttAAFbbwABW3AAAVuvAAFbsQABW7QAAVu2AAFbuQABW7oAAVu7AAFbvAABW70AAVu/AAFbwQABW8IAAVvDAAFbxQABW8YAAVwFAAFcBwABXAkAAVwLAAFcDgABXA8AAVwQAAFcEQABXBIAAVwUAAFcFgABXBcAAVwYAAFcGgABXBsAAVxaAAFcXAABXF4AAVxgAAFcYwABXGQAAVxlAAFcZgABXGcAAVxpAAFcawABXGwAAVxtAAFcbwABXHAAAVyvAAFcsQABXLMAAVy1AAFcuAABXLkAAVy6AAFcuwABXLwAAVy+AAFcwAABXMEAAVzCAAFcxAABXMUAAV0QAAFdMwABXVMAAV1zAAFddQABXXcAAV15AAFdewABXX4AAV1/AAFdgAABXYMAAV2EAAFdhgABXYcAAV2JAAFdiwABXYwAAV2NAAFdkAABXZEAAV2WAAFdowABXagAAV2qAAFdrAABXbEAAV20AAFdtwABXbkAAV3eAAFeAgABXikAAV5NAAFeUAABXlIAAV5UAAFeVgABXlgAAV5aAAFeWwABXl4AAV5rAAFefAABXn4AAV6AAAFeggABXoQAAV6GAAFeiAABXooAAV6MAAFenQABXqAAAV6jAAFepgABXqkAAV6sAAFerwABXrIAAV61AAFetwABXvYAAV74AAFe+gABXvwAAV7/AAFfAAABXwEAAV8CAAFfAwABXwUAAV8HAAFfCAABXwkAAV8LAAFfDAABX0sAAV9NAAFfTwABX1EAAV9UAAFfVQABX1YAAV9XAAFfWAABX1oAAV9cAAFfXQABX14AAV9gAAFfYQABX6AAAV+iAAFfpQABX6cAAV+qAAFfqwABX6wAAV+tAAFfrgABX7AAAV+yAAFfswABX7QAAV+2AAFftwABX8QAAV/FAAFfxgABX8gAAWAHAAFgCQABYAsAAWANAAFgEAABYBEAAWASAAFgEwABYBQAAWAWAAFgGAABYBkAAWAaAAFgHAABYB0AAWBcAAFgXgABYGAAAWBiAAFgZQABYGYAAWBnAAFgaAABYGkAAWBrAAFgbQABYG4AAWBvAAFgcQABYHIAAWCxAAFgswABYLUAAWC3AAFgugABYLsAAWC8AAFgvQABYL4AAWDAAAFgwgABYMMAAWDEAAFgxgABYMcAAWEGAAFhCAABYQoAAWEMAAFhDwABYRAAAWERAAFhEgABYRMAAWEVAAFhFwABYRgAAWEZAAFhGwABYRwAAWFbAAFhXQABYV8AAWFhAAFhZAABYWUAAWFmAAFhZwABYWgAAWFqAAFhbAABYW0AAWFuAAFhcAABYXEAAWGWAAFhugABYeEAAWIFAAFiCAABYgoAAWIMAAFiDgABYhAAAWISAAFiEwABYhYAAWIjAAFiMgABYjQAAWI2AAFiOAABYjoAAWI8AAFiPgABYkAAAWJPAAFiUgABYlUAAWJYAAFiWwABYl4AAWJhAAFiZAABYmYAAWKlAAFipwABYqkAAWKrAAFirgABYq8AAWKwAAFisQABYrIAAWK0AAFitgABYrcAAWK4AAFiugABYrsAAWL6AAFi/AABYv4AAWMAAAFjAwABYwQAAWMFAAFjBgABYwcAAWMJAAFjCwABYwwAAWMNAAFjDwABYxAAAWNPAAFjUQABY1MAAWNVAAFjWAABY1kAAWNaAAFjWwABY1wAAWNeAAFjYAABY2EAAWNiAAFjZAABY2UAAWOkAAFjpgABY6kAAWOrAAFjrgABY68AAWOwAAFjsQABY7IAAWO0AAFjtgABY7cAAWO4AAFjugABY7sAAWP6AAFj/AABY/4AAWQAAAFkAwABZAQAAWQFAAFkBgABZAcAAWQJAAFkCwABZAwAAWQNAAFkDwABZBAAAWRPAAFkUQABZFMAAWRVAAFkWAABZFkAAWRaAAFkWwABZFwAAWReAAFkYAABZGEAAWRiAAFkZAABZGUAAWSkAAFkpgABZKgAAWSqAAFkrQABZK4AAWSvAAFksAABZLEAAWSzAAFktQABZLYAAWS3AAFkuQABZLoAAWUFAAFlKAABZUgAAWVoAAFlagABZWwAAWVuAAFlcAABZXMAAWV0AAFldQABZXgAAWV5AAFlewABZXwAAWV+AAFlgAABZYEAAWWCAAFlhQABZYYAAWWLAAFlmAABZZ0AAWWfAAFloQABZaYAAWWpAAFlrAABZa4AAWXTAAFl9wABZh4AAWZCAAFmRQABZkcAAWZJAAFmSwABZk0AAWZPAAFmUAABZlMAAWZgAAFmcQABZnMAAWZ1AAFmdwABZnkAAWZ7AAFmfQABZn8AAWaBAAFmkgABZpUAAWaYAAFmmwABZp4AAWahAAFmpAABZqcAAWaqAAFmrAABZusAAWbtAAFm7wABZvEAAWb0AAFm9QABZvYAAWb3AAFm+AABZvoAAWb8AAFm/QABZv4AAWcAAAFnAQABZ0AAAWdCAAFnRAABZ0YAAWdJAAFnSgABZ0sAAWdMAAFnTQABZ08AAWdRAAFnUgABZ1MAAWdVAAFnVgABZ5UAAWeXAAFnmgABZ5wAAWefAAFnoAABZ6EAAWeiAAFnowABZ6UAAWenAAFnqAABZ6kAAWerAAFnrAABZ7kAAWe6AAFnuwABZ70AAWf8AAFn/gABaAAAAWgCAAFoBQABaAYAAWgHAAFoCAABaAkAAWgLAAFoDQABaA4AAWgPAAFoEQABaBIAAWhRAAFoUwABaFUAAWhXAAFoWgABaFsAAWhcAAFoXQABaF4AAWhgAAFoYgABaGMAAWhkAAFoZgABaGcAAWimAAFoqAABaKoAAWisAAForwABaLAAAWixAAFosgABaLMAAWi1AAFotwABaLgAAWi5AAFouwABaLwAAWj7AAFo/QABaP8AAWkBAAFpBAABaQUAAWkGAAFpBwABaQgAAWkKAAFpDAABaQ0AAWkOAAFpEAABaREAAWlQAAFpUgABaVQAAWlWAAFpWQABaVoAAWlbAAFpXAABaV0AAWlfAAFpYQABaWIAAWljAAFpZQABaWYAAWmLAAFprwABadYAAWn6AAFp/QABaf8AAWoBAAFqAwABagUAAWoHAAFqCAABagsAAWoYAAFqJwABaikAAWorAAFqLQABai8AAWoxAAFqMwABajUAAWpEAAFqRwABakoAAWpNAAFqUAABalMAAWpWAAFqWQABalsAAWqaAAFqnAABap4AAWqgAAFqowABaqQAAWqlAAFqpgABaqcAAWqpAAFqqwABaqwAAWqtAAFqrwABarAAAWrvAAFq8QABavMAAWr1AAFq+AABavkAAWr6AAFq+wABavwAAWr+AAFrAAABawEAAWsCAAFrBAABawUAAWtEAAFrRgABa0gAAWtKAAFrTQABa04AAWtPAAFrUAABa1EAAWtTAAFrVQABa1YAAWtXAAFrWQABa1oAAWuZAAFrmwABa54AAWugAAFrowABa6QAAWulAAFrpgABa6cAAWupAAFrqwABa6wAAWutAAFrrwABa7AAAWvvAAFr8QABa/MAAWv1AAFr+AABa/kAAWv6AAFr+wABa/wAAWv+AAFsAAABbAEAAWwCAAFsBAABbAUAAWxEAAFsRgABbEgAAWxKAAFsTQABbE4AAWxPAAFsUAABbFEAAWxTAAFsVQABbFYAAWxXAAFsWQABbFoAAWyZAAFsmwABbJ0AAWyfAAFsogABbKMAAWykAAFspQABbKYAAWyoAAFsqgABbKsAAWysAAFsrgABbK8AAWz6AAFtHQABbT0AAW1dAAFtXwABbWEAAW1jAAFtZQABbWgAAW1pAAFtagABbW0AAW1uAAFtcAABbXEAAW1zAAFtdgABbXcAAW14AAFtewABbXwAAW2FAAFtkgABbZcAAW2ZAAFtmwABbaAAAW2jAAFtpgABbagAAW3NAAFt8QABbhgAAW48AAFuPwABbkEAAW5DAAFuRQABbkcAAW5JAAFuSgABbk0AAW5aAAFuawABbm0AAW5vAAFucQABbnMAAW51AAFudwABbnkAAW57AAFujAABbo8AAW6SAAFulQABbpgAAW6bAAFungABbqEAAW6kAAFupgABbuUAAW7nAAFu6QABbusAAW7uAAFu7wABbvAAAW7xAAFu8gABbvQAAW72AAFu9wABbvgAAW76AAFu+wABbzoAAW88AAFvPgABb0AAAW9DAAFvRAABb0UAAW9GAAFvRwABb0kAAW9LAAFvTAABb00AAW9PAAFvUAABb48AAW+RAAFvlAABb5YAAW+ZAAFvmgABb5sAAW+cAAFvnQABb58AAW+hAAFvogABb6MAAW+lAAFvpgABb7MAAW+2AAFvuQABb7wAAW+/AAFvwQABb9wAAW/7AAFwOgABcDwAAXA+AAFwQAABcEMAAXBEAAFwRQABcEYAAXBHAAFwSQABcEsAAXBMAAFwTQABcE8AAXBQAAFwjwABcJEAAXCTAAFwlQABcJgAAXCZAAFwmgABcJsAAXCcAAFwngABcKAAAXChAAFwogABcKQAAXClAAFw5AABcOYAAXDoAAFw6gABcO0AAXDuAAFw7wABcPAAAXDxAAFw8wABcPUAAXD2AAFw9wABcPkAAXD6AAFxOQABcTsAAXE9AAFxPwABcUIAAXFDAAFxRAABcUUAAXFGAAFxSAABcUoAAXFLAAFxTAABcU4AAXFPAAFxjgABcZAAAXGSAAFxlAABcZcAAXGYAAFxmQABcZoAAXGbAAFxnQABcZ8AAXGgAAFxoQABcaMAAXGkAAFxyQABce0AAXIUAAFyOAABcjsAAXI9AAFyPwABckEAAXJDAAFyRQABckYAAXJJAAFyVgABcmUAAXJnAAFyaQABcmsAAXJtAAFybwABcnEAAXJzAAFyggABcoUAAXKIAAFyiwABco4AAXKRAAFylAABcpcAAXKZAAFy2AABctoAAXLdAAFy3wABcuIAAXLjAAFy5AABcuUAAXLmAAFy6AABcuoAAXLrAAFy7AABcu4AAXLvAAFzLgABczAAAXMyAAFzNAABczcAAXM4AAFzOQABczoAAXM7AAFzPQABcz8AAXNAAAFzQQABc0MAAXNEAAFzgwABc4UAAXOHAAFziQABc4wAAXONAAFzjgABc48AAXOQAAFzkgABc5QAAXOVAAFzlgABc5gAAXOZAAFz2AABc9oAAXPdAAFz3wABc+IAAXPjAAFz5AABc+UAAXPmAAFz6AABc+oAAXPrAAFz7AABc+4AAXPvAAF0LgABdDAAAXQyAAF0NAABdDcAAXQ4AAF0OQABdDoAAXQ7AAF0PQABdD8AAXRAAAF0QQABdEMAAXREAAF0gwABdIUAAXSHAAF0iQABdIwAAXSNAAF0jgABdI8AAXSQAAF0kgABdJQAAXSVAAF0lgABdJgAAXSZAAF02AABdNoAAXTcAAF03gABdOEAAXTiAAF04wABdOQAAXTlAAF05wABdOkAAXTqAAF06wABdO0AAXTuAAF09wABdPgAAXT6AAF1PQABdWEAAXWFAAF1qAABdc8AAXXvAAF2FgABdj0AAXZdAAF2gQABdqUAAXanAAF2qgABdqwAAXauAAF2sAABdrMAAXa2AAF2uAABdroAAXa9AAF2vwABdsEAAXbEAAF2xwABdsgAAXbNAAF22gABdt0AAXbfAAF24gABduUAAXbnAAF3DAABdzAAAXdXAAF3ewABd34AAXeAAAF3ggABd4QAAXeGAAF3iAABd4kAAXeMAAF3mQABd6wAAXeuAAF3sAABd7IAAXe0AAF3tgABd7gAAXe6AAF3vAABd74AAXfRAAF31AABd9cAAXfaAAF33QABd+AAAXfjAAF35gABd+kAAXfsAAF37gABeC0AAXgvAAF4MgABeDQAAXg3AAF4OAABeDkAAXg6AAF4OwABeD0AAXg/AAF4QAABeEEAAXhDAAF4RAABeE0AAXhOAAF4UAABeI8AAXiRAAF4kwABeJUAAXiYAAF4mQABeJoAAXibAAF4nAABeJ4AAXigAAF4oQABeKIAAXikAAF4pQABeOQAAXjmAAF46QABeOsAAXjuAAF47wABePAAAXjxAAF48gABePQAAXj2AAF49wABePgAAXj6AAF4+wABeQQAAXkJAAF5DAABeQ8AAXkRAAF5GgABeSEAAXkkAAF5JwABeSoAAXksAAF5RgABeVIAAXlbAAF5XgABeWAAAXliAAF5oQABeaMAAXmlAAF5pwABeaoAAXmrAAF5rAABea0AAXmuAAF5sAABebIAAXmzAAF5tAABebYAAXm3AAF59gABefgAAXn7AAF5/QABegAAAXoBAAF6AgABegMAAXoEAAF6BgABeggAAXoJAAF6CgABegwAAXoNAAF6FgABehcAAXoZAAF6WAABeloAAXpcAAF6XgABemEAAXpiAAF6YwABemQAAXplAAF6ZwABemkAAXpqAAF6awABem0AAXpuAAF6rQABeq8AAXqyAAF6tAABercAAXq4AAF6uQABeroAAXq7AAF6vQABer8AAXrAAAF6wQABesMAAXrEAAF60QABetIAAXrTAAF61QABexQAAXsWAAF7GAABexoAAXsdAAF7HgABex8AAXsgAAF7IQABeyMAAXslAAF7JgABeycAAXspAAF7KgABe2kAAXtrAAF7bgABe3AAAXtzAAF7dAABe3UAAXt2AAF7dwABe3kAAXt7AAF7fAABe30AAXt/AAF7gAABe50AAXuqAAF7tQABe7gAAXu7AAF7vgABe8EAAXvDAAF7zgABe9EAAXvUAAF71wABe9oAAXvdAAF73wABe+sAAXwFAAF8HQABfGgAAXyLAAF8qwABfMsAAXzNAAF8zwABfNEAAXzTAAF81gABfNcAAXzYAAF82wABfNwAAXzeAAF83wABfOEAAXzkAAF85QABfOYAAXzpAAF86gABfO8AAXz8AAF9AQABfQMAAX0FAAF9CgABfQ0AAX0QAAF9EgABfTcAAX1bAAF9ggABfaYAAX2pAAF9qwABfa0AAX2vAAF9sQABfbMAAX20AAF9twABfcQAAX3VAAF91wABfdkAAX3bAAF93QABfd8AAX3hAAF94wABfeUAAX32AAF9+QABffwAAX3/AAF+AgABfgUAAX4IAAF+CwABfg4AAX4QAAF+TwABflEAAX5TAAF+VQABflgAAX5ZAAF+WgABflsAAX5cAAF+XgABfmAAAX5hAAF+YgABfmQAAX5lAAF+pAABfqYAAX6oAAF+qgABfq0AAX6uAAF+rwABfrAAAX6xAAF+swABfrUAAX62AAF+twABfrkAAX66AAF++QABfvsAAX7+AAF/AAABfwMAAX8EAAF/BQABfwYAAX8HAAF/CQABfwsAAX8MAAF/DQABfw8AAX8QAAF/HQABfx4AAX8fAAF/IQABf2AAAX9iAAF/ZAABf2YAAX9pAAF/agABf2sAAX9sAAF/bQABf28AAX9xAAF/cgABf3MAAX91AAF/dgABf7UAAX+3AAF/uQABf7sAAX++AAF/vwABf8AAAX/BAAF/wgABf8QAAX/GAAF/xwABf8gAAX/KAAF/ywABgAoAAYAMAAGADgABgBAAAYATAAGAFAABgBUAAYAWAAGAFwABgBkAAYAbAAGAHAABgB0AAYAfAAGAIAABgF8AAYBhAAGAYwABgGUAAYBoAAGAaQABgGoAAYBrAAGAbAABgG4AAYBwAAGAcQABgHIAAYB0AAGAdQABgLQAAYC2AAGAuAABgLoAAYC9AAGAvgABgL8AAYDAAAGAwQABgMMAAYDFAAGAxgABgMcAAYDJAAGAygABgO8AAYETAAGBOgABgV4AAYFhAAGBYwABgWUAAYFnAAGBaQABgWsAAYFsAAGBbwABgXwAAYGLAAGBjQABgY8AAYGRAAGBkwABgZUAAYGXAAGBmQABgagAAYGrAAGBrgABgbEAAYG0AAGBtwABgboAAYG9AAGBvwABgf4AAYIAAAGCAwABggUAAYIIAAGCCQABggoAAYILAAGCDAABgg4AAYIQAAGCEQABghIAAYIUAAGCFQABglQAAYJWAAGCWAABgloAAYJdAAGCXgABgl8AAYJgAAGCYQABgmMAAYJlAAGCZgABgmcAAYJpAAGCagABgqkAAYKrAAGCrQABgq8AAYKyAAGCswABgrQAAYK1AAGCtgABgrgAAYK6AAGCuwABgrwAAYK+AAGCvwABgv4AAYMAAAGDAwABgwUAAYMIAAGDCQABgwoAAYMLAAGDDAABgw4AAYMQAAGDEQABgxIAAYMUAAGDFQABg1QAAYNWAAGDWAABg1oAAYNdAAGDXgABg18AAYNgAAGDYQABg2MAAYNlAAGDZgABg2cAAYNpAAGDagABg6kAAYOrAAGDrQABg68AAYOyAAGDswABg7QAAYO1AAGDtgABg7gAAYO6AAGDuwABg7wAAYO+AAGDvwABg/4AAYQAAAGEAgABhAQAAYQHAAGECAABhAkAAYQKAAGECwABhA0AAYQPAAGEEAABhBEAAYQTAAGEFAABhF8AAYSCAAGEogABhMIAAYTEAAGExgABhMgAAYTKAAGEzQABhM4AAYTPAAGE0gABhNMAAYTVAAGE1gABhNgAAYTbAAGE3AABhN0AAYTgAAGE4QABhOYAAYTzAAGE+AABhPoAAYT8AAGFAQABhQQAAYUHAAGFCQABhS4AAYVSAAGFeQABhZ0AAYWgAAGFogABhaQAAYWmAAGFqAABhaoAAYWrAAGFrgABhbsAAYXMAAGFzgABhdAAAYXSAAGF1AABhdYAAYXYAAGF2gABhdwAAYXtAAGF8AABhfMAAYX2AAGF+QABhfwAAYX/AAGGAgABhgUAAYYHAAGGRgABhkgAAYZKAAGGTAABhk8AAYZQAAGGUQABhlIAAYZTAAGGVQABhlcAAYZYAAGGWQABhlsAAYZcAAGGmwABhp0AAYafAAGGoQABhqQAAYalAAGGpgABhqcAAYaoAAGGqgABhqwAAYatAAGGrgABhrAAAYaxAAGG8AABhvIAAYb1AAGG9wABhvoAAYb7AAGG/AABhv0AAYb+AAGHAAABhwIAAYcDAAGHBAABhwYAAYcHAAGHFAABhxcAAYcaAAGHHQABhyAAAYciAAGHPAABh3sAAYd9AAGHfwABh4EAAYeEAAGHhQABh4YAAYeHAAGHiAABh4oAAYeMAAGHjQABh44AAYeQAAGHkQABh9AAAYfSAAGH1AABh9YAAYfZAAGH2gABh9sAAYfcAAGH3QABh98AAYfhAAGH4gABh+MAAYflAAGH5gABiCUAAYgnAAGIKQABiCsAAYguAAGILwABiDAAAYgxAAGIMgABiDQAAYg2AAGINwABiDgAAYg6AAGIOwABiHoAAYh8AAGIfgABiIAAAYiDAAGIhAABiIUAAYiGAAGIhwABiIkAAYiLAAGIjAABiI0AAYiPAAGIkAABiM8AAYjRAAGI0wABiNUAAYjYAAGI2QABiNoAAYjbAAGI3AABiN4AAYjgAAGI4QABiOIAAYjkAAGI5QABiQoAAYkuAAGJVQABiXkAAYl8AAGJfgABiYAAAYmCAAGJhAABiYYAAYmHAAGJigABiZcAAYmmAAGJqAABiaoAAYmsAAGJrgABibAAAYmyAAGJtAABicMAAYnGAAGJyQABicwAAYnPAAGJ0gABidUAAYnYAAGJ2gABihkAAYobAAGKHQABih8AAYoiAAGKIwABiiQAAYolAAGKJgABiigAAYoqAAGKKwABiiwAAYouAAGKLwABim4AAYpwAAGKcgABinQAAYp3AAGKeAABinkAAYp6AAGKewABin0AAYp/AAGKgAABioEAAYqDAAGKhAABisMAAYrFAAGKxwABiskAAYrMAAGKzQABis4AAYrPAAGK0AABitIAAYrUAAGK1QABitYAAYrYAAGK2QABixgAAYsaAAGLHQABix8AAYsiAAGLIwABiyQAAYslAAGLJgABiygAAYsqAAGLKwABiywAAYsuAAGLLwABi24AAYtwAAGLcgABi3QAAYt3AAGLeAABi3kAAYt6AAGLewABi30AAYt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1AAGXNgABlzgAAZc5AAGXeAABl3oAAZd9AAGXfwABl4IAAZeDAAGXhAABl4UAAZeGAAGXiAABl4oAAZeLAAGXjAABl44AAZePAAGXnAABl58AAZeiAAGXpQABl6gAAZeqAAGXxAABl8gAAZgHAAGYCQABmAsAAZgNAAGYEAABmBEAAZgSAAGYEwABmBQAAZgWAAGYGAABmBkAAZgaAAGYHAABmB0AAZhcAAGYXgABmGAAAZhiAAGYZQABmGYAAZhnAAGYaAABmGkAAZhrAAGYbQABmG4AAZhvAAGYcQABmHIAAZixAAGYswABmLUAAZi3AAGYugABmLsAAZi8AAGYvQABmL4AAZjAAAGYwgABmMMAAZjEAAGYxgABmMcAAZkGAAGZCAABmQoAAZkMAAGZDwABmRAAAZkRAAGZEgABmRMAAZkVAAGZFwABmRgAAZkZAAGZGwABmRwAAZlbAAGZXQABmV8AAZlhAAGZZAABmWUAAZlmAAGZZwABmWgAAZlqAAGZbAABmW0AAZluAAGZcAABmXEAAZmWAAGZugABmeEAAZoFAAGaCAABmgoAAZoMAAGaDgABmhAAAZoSAAGaEwABmhYAAZojAAGaMgABmjQAAZo2AAGaOAABmjoAAZo8AAGaPgABmkAAAZpPAAGaUgABmlUAAZpYAAGaWwABml4AAZphAAGaZAABmmYAAZqlAAGapwABmqkAAZqrAAGargABmq8AAZqwAAGasQABmrIAAZq0AAGatgABmrcAAZq4AAGaugABmrsAAZr6AAGa/AABmv4AAZsAAAGbAwABmwQAAZsFAAGbBgABmwcAAZsJAAGbCwABmwwAAZsNAAGbDwABmxAAAZtPAAGbUQABm1MAAZtVAAGbWAABm1kAAZtaAAGbWwABm1wAAZteAAGbYAABm2EAAZtiAAGbZAABm2UAAZukAAGbpgABm6kAAZurAAGbrgABm68AAZuwAAGbsQABm7IAAZu0AAGbtgABm7cAAZu4AAGbugABm7sAAZv6AAGb/AABm/4AAZwAAAGcAwABnAQAAZwFAAGcBgABnAcAAZwJAAGcCwABnAwAAZwNAAGcDwABnBAAAZxPAAGcUQABnFQAAZxWAAGcWQABnFoAAZxbAAGcXAABnF0AAZxfAAGcYQABnGIAAZxjAAGcZQABnGYAAZyOAAGczQABnM8AAZzRAAGc0wABnNYAAZzXAAGc2AABnNkAAZzaAAGc3AABnN4AAZzfAAGc4AABnOIAAZzjAAGdLgABnVEAAZ1xAAGdkQABnZMAAZ2VAAGdlwABnZkAAZ2cAAGdnQABnZ4AAZ2hAAGdogABnaQAAZ2lAAGdpwABnakAAZ2qAAGdqwABna4AAZ2vAAGdtAABncEAAZ3GAAGdyAABncoAAZ3PAAGd0gABndUAAZ3XAAGd/AABniAAAZ5HAAGeawABnm4AAZ5wAAGecgABnnQAAZ52AAGeeAABnnkAAZ58AAGeiQABnpoAAZ6cAAGengABnqAAAZ6iAAGepAABnqYAAZ6oAAGeqgABnrsAAZ6+AAGewQABnsQAAZ7HAAGeygABns0AAZ7QAAGe0wABntUAAZ8UAAGfFgABnxgAAZ8aAAGfHQABnx4AAZ8fAAGfIAABnyEAAZ8jAAGfJQABnyYAAZ8nAAGfKQABnyoAAZ9pAAGfawABn20AAZ9vAAGfcgABn3MAAZ90AAGfdQABn3YAAZ94AAGfegABn3sAAZ98AAGffgABn38AAZ++AAGfwAABn8MAAZ/FAAGfyAABn8kAAZ/KAAGfywABn8wAAZ/OAAGf0AABn9EAAZ/SAAGf1AABn9UAAZ/iAAGf4wABn+QAAZ/mAAGgJQABoCcAAaApAAGgKwABoC4AAaAvAAGgMAABoDEAAaAyAAGgNAABoDYAAaA3AAGgOAABoDoAAaA7AAGgegABoHwAAaB+AAGggAABoIMAAaCEAAGghQABoIYAAaCHAAGgiQABoIsAAaCMAAGgjQABoI8AAaCQAAGgzwABoNEAAaDTAAGg1QABoNgAAaDZAAGg2gABoNsAAaDcAAGg3gABoOAAAaDhAAGg4gABoOQAAaDlAAGhJAABoSYAAaEoAAGhKgABoS0AAaEuAAGhLwABoTAAAaExAAGhMwABoTUAAaE2AAGhNwABoTkAAaE6AAGheQABoXsAAaF9AAGhfwABoYIAAaGDAAGhhAABoYUAAaGGAAGhiAABoYoAAaGLAAGhjAABoY4AAaGPAAGhtAABodgAAaH/AAGiIwABoiYAAaIoAAGiKgABoiwAAaIuAAGiMAABojEAAaI0AAGiQQABolAAAaJSAAGiVAABolYAAaJYAAGiWgABolwAAaJeAAGibQABonAAAaJzAAGidgABonkAAaJ8AAGifwABooIAAaKEAAGiwwABosUAAaLHAAGiyQABoswAAaLNAAGizgABos8AAaLQAAGi0gABotQAAaLVAAGi1gABotgAAaLZAAGjGAABoxoAAaMcAAGjHgABoyEAAaMiAAGjIwABoyQAAaMlAAGjJwABoykAAaMqAAGjKwABoy0AAaMuAAGjbQABo28AAaNxAAGjcwABo3YAAaN3AAGjeAABo3kAAaN6AAGjfAABo34AAaN/AAGjgAABo4IAAaODAAGjwgABo8QAAaPHAAGjyQABo8wAAaPNAAGjzgABo88AAaPQAAGj0gABo9QAAaPVAAGj1gABo9gAAaPZAAGkGAABpBoAAaQcAAGkHgABpCEAAaQiAAGkIwABpCQAAaQlAAGkJwABpCkAAaQqAAGkKwABpC0AAaQuAAGkbQABpG8AAaRxAAGkcwABpHYAAaR3AAGkeAABpHkAAaR6AAGkfAABpH4AAaR/AAGkgAABpIIAAaSDAAGkwgABpMQAAaTGAAGkyAABpMsAAaTMAAGkzQABpM4AAaTPAAGk0QABpNMAAaTUAAGk1QABpNcAAaTYAAGk4QABpOIAAaTkAAGk8QABpPIAAaTzAAGk9QABpQIAAaUDAAGlBAABpQYAAaUTAAGlFAABpRUAAaUXAAGlIAABpS8AAaU8AAGlSwABpV0AAaVxAAGliAABpZoAAaWjAAGlpAABpaYAAaWzAAGltAABpbUAAaW3AAGluwABpcQAAaXOAAGl1QAAAAAAAAQCAAAAAAAAPwQAAAAAAAAAAAAAAAAAAaXd + + Delta/Database/Model/Delta.xcdatamodeld/Delta 5.xcdatamodel + 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uQQBBD0EeQS1BPEFLQVpBW0FqQX9BgEGIQZRBqEG3QcZB1UHbQdxB3UHsQftCCkIZQihCNEJGQlVCZEJzQoJCkUKgQqFCsELFQsZCzkLaQu5C/UMMQxtDH0MuQz1DTENbQ2pDdkOIQ5dDpkO1Q8RD00PiQ/FD9EP4Q/xEAEQIRAtED0QQVSRudWxs1wANAA4ADwAQABEAEgATABQAFQAWABcAGAAXABpfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKBBXOBBXCAAIEFcYAAgQVy3gAcAB0AHgAfACAAIQAiAA4AIwAkACUAJgAnACgAKQAqACsACQApABcALwAwADEAMgAzACkAKQAXXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQVugQVsgAGABIAAgQVtgQVvEACABYADgASABIAAUFNZRVPTADoAOwAOADwARABMV05TLmtleXNaTlMub2JqZWN0c6cAPQA+AD8AQABBAEIAQ4AGgAeACIAJgAqAC4AMpwBFAEYARwBIAEkASgBLgA2BA82BAuOA/oEBkoBlgQTVgC5ZU2F2ZVN0YXRlWEdhbWVTYXZlVUNoZWF0XkdhbWVDb2xsZWN0aW9uXkNvbnRyb2xsZXJTa2luVEdhbWVfEBpHYW1lQ29udHJvbGxlcklucHV0TWFwcGluZ98QEABVAFYAVwBYACEAWQBaACMAWwBcAA4AJQBdAF4AKABfAGAAYQApACkAFABlAGYAMQApAGAAaQA9AGAAbABtAG5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2VbX2lzQWJzdHJhY3SAD4A1gASABIACgBCBAV2ABIAPgQFfgAaAD4EE1IAOCBIlXHU5V29yZGVyZWTTADoAOwAOAHIAdABMoQBzgBGhAHWAEoAuXlhEX1BTdGVyZW90eXBl2QAhACUAeQAOACgAegAjAF8AewBFAHMAYAB/ABcAKQAxAG4Ag18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYANgBGAD4A0gACABAiAE9MAOgA7AA4AhQCPAEypAIYAhwCIAIkAigCLAIwAjQCOgBSAFYAWgBeAGIAZgBqAG4AcqQCQAJEAkgCTAJQAlQCWAJcAmIAdgCGAIoAmgCiAKoAsgC+AM4AuXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxA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vcmFnZV8QF1hEX1BBdHRLX21pblZhbHVlU3RyaW5nXxAWWERfUEF0dEtfYXR0cmlidXRlVHlwZV8QF1hEX1BBdHRLX21heFZhbHVlU3RyaW5nXxAdWERfUEF0dEtfdmFsdWVUcmFuc2Zvcm1lck5hbWVfECBYRF9QQXR0S19yZWd1bGFyRXhwcmVzc2lvblN0cmluZ98QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIAAbgBuABcAboAAgACAAICRCAgICIAggJMICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwPTAG4AbgBuADEAbgC2BIEAbgBuABcAboAAgCuAAICRCAgICIAggJQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIIAbgBuABcAboAAgACAAICRCAgICIAggJUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXBMYAFwPTAG4AbgBuADEAbgC2BIMAbgBuABcAboAAgJ6AAICRCAgICIAggJYICIAACBEDhN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIQAbgBuABcAboAAgACAAICRCAgICIAggJcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIUAbgBuABcAboAAgACAAICRCAgICIAggJgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIYAbgBuABcAboAAgACAAICRCAgICIAggJkICIAACNIAwADBBQIFA11YRFBNQXR0cmlidXRlpgUEBQUFBgUHBQgAxV1YRFBNQXR0cmlidXRlXFhEUE1Qcm9wZXJ0eV8QEFhEVU1MUHJvcGVydHlJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QEgCkAKUApgUKACEAqACpBQsAIwCnBQwAqgAOACUAqwCsACg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OBrYGtwBMoKCALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwZlAG4AbgBuADEAbgC2Ab4AbgBuABcAboAAgCuAAIC9CAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAhcAFwZlAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgFKAAIC9CAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwZlAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIC9CAgICIAggEkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwZlAG4AbgBuADEAbgC2AcEAbgBuABcAboAAgACAAIC9CAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwZlAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIC9CAgICIAggEsICIAACNkAIQAlBwUADgAoBwYAIwBfBwcBfgGmAGAAfwAXACkAMQBuBw9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAuoBBgA+ANIAAgAQIgMnTADoAOwAOBxEHGQBMpwJgAmECYgJjAmQCZQJmgFiAWYBagFuAXIBdgF6nBxoHGwccBx0HHgcfByCAyoDLgMyAzYDOgM+A0IAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCeQAXBmYAbgBuAG4AMQBuALYCYABuAG4AFwBugACAYIAAgMgICAgIgCCAWAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCiAAXBmYAbgBuAG4AMQBuALYCYQBuAG4AFwBugACAYoAAgMgICAgIgCCAWQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCiAAXBmYAbgBuAG4AMQBuALYCYgBuAG4AFwBugAC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AgA+ANIAAgAQIgQEZ0wA6ADsADgr9CwYATKgBuwG8Ab0BvgG/AcABwQHCgESARYBGgEeASIBJgEqAS6gLBwsICwkLCgsLCwwLDQsOgQEagQEbgQEcgQEegQEfgQEggQEhgQEigC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcK7QBuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBARgICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXCu0AbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQEYCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXCzAAFwrtAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQEdgACBARgICAgIgCCARggIgAAI0wA6ADsADgs+Cz8ATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcK7QBuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBARgICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXCu0AbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQEYCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwrtAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIEBGAgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcK7QBuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBARgICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXCu0AbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQEYCAgICIAggEsICIAACNkAIQAlC40ADgAoC44AIwBfC48KzAPQAGAAfwAXACkAMQBuC5dfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXR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lc3N0b3JhZ2WBAiOAQIAPgDSAAIAECIECJ9MAOgA7AA4YmhijAEyoAbsBvAG9Ab4BvwHAAcEBwoBEgEWARoBHgEiASYBKgEuoGKQYpRimGKcYqBipGKoYq4ECKIECKYECKoECLoECL4ECMIECMYECMoAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXGIoAbgBuAG4AMQBuALYBuwBuAG4AFwBugACAK4AAgQImCAgICIAggEQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxiKAG4AbgBuADEAbgC2AbwAbgBuABcAboAAgACAAIECJggICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxjNABcYigBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIECK4AAgQImCAgICIAggEYICIAACNMAOgA7AA4Y2xjdAEyhGNyBAiyhGN6BAi2ALl8QF2F0dHJpYnV0ZVZhbHVlQ2xhc3NOYW1lWEdhbWVUeXBl3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXGIoAbgBuAG4AMQBuALYBvgBuAG4AFwBugACAK4AAgQImCAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxiKAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIECJggICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcYigBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBAiYICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXGIoAbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQImCAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxiKAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIECJggICAiAIIBLCAiAAAjZACEAJRkuAA4AKBkvACMAXxkwEhsD0ABgAH8AFwApADEAbhk4XxAhWER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ggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFx3DAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIECiQgICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcdwwBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBAokICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHcMAbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQKJCAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFx3DAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIECiQgICAiAIIBLCAiAAAjZACEAJR5nAA4AKB5oACMAXx5pA6YD0ABgAH8AFwApADEAbh5xXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQKGgIWAD4A0gACABAiBApfTADoAOwAOHnMeewBMpwSABIEEggSDBIQEhQSGgJOAlICVgJaAl4CYgJmnHnwefR5+Hn8egB6BHoKBApiBApmBApqBApuBApyBAp2BAp6ALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFx3EAG4AbgBuADEAbgC2BIAAbgBuABcAboAAgACAAIEClggICAiAIICTCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcdxABuAG4AbgAxAG4AtgSBAG4AbgAXAG6AAIArgACBApYICAgIgCCAlAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHcQAbgBuAG4AMQBuALYEggBuAG4AFwBugACAAIAAgQKWCAgICIAggJUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXDl0AFx3EAG4AbgBuADEAbgC2BIMAbgBuABcAboAAgQFZgACBApYICAgIgCCAlggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHcQAbgBuAG4AMQBuALYEhABuAG4AFwBugACAAIAAgQKWCAgICIAggJcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFx3EAG4AbgBuADEAbgC2BIUAbgBuABcAboAAgACAAIEClggICAiAIICYCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcdxABuAG4AbgAxAG4AtgSGAG4AbgAXAG6AAIAAgACBApYICAgIgCCAmQgIgAAI3xASAKQApQCmHu4AIQCoAKke7wAjAKce8ACqAA4AJQCrAKwAKACtABcAFwAXACkASgBuAG4e+AAxAG4AYABuA8YBegBuAG4fAABuXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASAZQgIgQKhCIAPCICigDsICIECoAgSSaj0WNMAOgA7AA4fBB8HAEyiAaUD0IBAgIWiHwgfCYECooECroAu2QAhACUfDAAOACgfDQAjAF8fDgOnAaUAYAB/ABcAKQAxAG4fFl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYECn4BAgA+ANIAAgAQIgQKj0wA6ADsADh8YHyEATKgBuwG8Ab0BvgG/AcABwQHCgESARYBGgEeASIBJgEqAS6gfIh8jHyQfJR8mHycfKB8pgQKkgQKlgQKmgQKpgQKqgQKrgQKsgQKtgC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcfCABuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBAqIICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHwgAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQKiCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXH0sAFx8IAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQKngACBAqIICAgIgCCARggIgAAI0wA6ADsADh9ZH1sATKEfWoECqKEY3oECLYAuXxAXYXR0cmlidXRlVmFsdWVDbGFzc05hbWXfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcfCABuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBAqIICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXHwgAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQKiCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFx8IAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIECoggICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcfCABuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBAqIICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXHwgAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQKiCAgICIAggEsICIAACNkAIQAlH6sADgAoH6wAIwBfH60DpwPQAGAAfwAXACkAMQBuH7VfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAp+AhYAPgDSAAIAECIECr9MAOgA7AA4ftx+/AEynBIAEgQSCBIMEhASFBIaAk4CUgJWAloCXgJiAmacfwB/BH8Ifwx/EH8UfxoECsIECsYECsoECs4ECtIECtYECt4Au3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHwkAbgBuAG4AMQBuALYEgABuAG4AFwBugACAAIAAgQKuCAgICIAggJMICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFx8JAG4AbgBuADEAbgC2BIEAbgBuABcAboAAgCuAAIECrggICAiAIICUCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcfCQBuAG4AbgAxAG4AtgSCAG4AbgAXAG6AAIAAgACBAq4ICAgIgCCAlQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcP3QAXHwkAbgBuAG4AMQBuALYEgwBuAG4AFwBugACBAXmAAIECrggICAiAIICWCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcfCQBuAG4AbgAxAG4AtgSEAG4AbgAXAG6AAIAAgACBAq4ICAgIgCCAlwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcgFQAXHwkAbgBuAG4AMQBuALYEhQBuAG4AFwBugACBAraAAIECrggICAiAIICYCAiAAAhfEBlOU1NlY3VyZVVuYXJjaGl2ZUZyb21EYXRh3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHwkAbgBuAG4AMQBuALYEhgBuAG4AFwBugACAAIAAgQKuCAgICIAggJkICIAACN8QEgCkAKUApiAzACEAqACpIDQAIwCnIDUAqgAOACUAqwCsACgArQAXABcAFwApAEoAbgBuID0AMQBuAGAAbgPGAPAAbgBuIEUAbl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgGUICIECugiADwiAooAlCAiBArkIEnbzBarTADoAOwAOIEkgTABMogGlA9CAQICFoiBNIE6BAruBAsaALtkAIQAlIFEADgAoIFIAIwBfIFMDqAGlAGAAfwAXACkAMQBuIFtfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAriAQIAPgDSAAIAECIECvNMAOgA7AA4gXSBmAEyoAbsBvAG9Ab4BvwHAAcEBwoBEgEWARoBHgEiASYBKgEuoIGcgaCBpIGogayBsIG0gboECvYECvoECv4ECwYECwoECw4ECxIECxYAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXIE0AbgBuAG4AMQBuALYBuwBuAG4AFwBugACAK4AAgQK7CAgICIAggEQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFyBNAG4AbgBuADEAbgC2AbwAbgBuABcAboAAgACAAIECuwgICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFyCQABcgTQBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIECwIAAgQK7CAgICIAggEYICIAACNMAOgA7AA4gniCfAEygoIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXIE0AbgBuAG4AMQBuALYBvgBuAG4AFwBugACAK4AAgQK7CAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFyBNAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIECuwgICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcgTQBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBArsICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXIE0AbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQK7CAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFyBNAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIECuwgICAiAIIBLCAiAAAjZACEAJSDtAA4AKCDuACM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AqQAjAKoADgAlAKsArAAoAK0AFwEXABcvzQBuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBA+UICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXL80AbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQPlCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFy/NAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIED5QgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcvzQBuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBA+UICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXL80AbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQPlCAgICIAggEsICIAACNkAIQAlMG0ADgAoMG4AIwBfMG8vrQPQAGAAfwAXACkAMQBuMHdfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA+KAhYAPgDSAAIAECIED8dMAOgA7AA4weTCBAEynBIAEgQSCBIMEhASFBIaAk4CUgJWAloCXgJiAmacwgjCDMIQwhTCGMIcwiIED8oED84ED9IED9YED9oED94ED+IAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXL84AbgBuAG4AMQBuALYEgABuAG4AFwBugACAAIAAgQPwCAgICIAggJMICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFy/OAG4AbgBuADEAbgC2BIEAbgBuABcAboAAgCuAAIED8AgICAiAIICUCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcvzgBuAG4AbgAxAG4AtgSCAG4AbgAXAG6AAIAAgACBA/AICAg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AF6wAABe6AAAXzwAAF+MAABf6AAAYDAAAGBkAABgqAAAYLAAAGC4AABgwAAAYMgAAGDQAABg2AAAYOAAAGDoAABhLAAAYTQAAGE8AABhSAAAYVQAAGFgAABhbAAAYXgAAGGEAABhjAAAYaAAAGHQAABiBAAAYjgAAGJcAABicAAAYoQAAGOwAABkPAAAZLwAAGU8AABlRAAAZUwAAGVUAABlXAAAZWQAAGVoAABlbAAAZXQAAGV4AABlgAAAZYQAAGWMAABllAAAZZgAAGWcAABlpAAAZagAAGW8AABl8AAAZgQAAGYMAABmFAAAZigAAGYwAABmOAAAZkAAAGaUAABm4AAAZ3QAAGgEAABooAAAaTAAAGk4AABpQAAAaUgAAGlQAABpWAAAaWAAAGlkAABpbAAAaaAAAGnkAABp7AAAafQAAGn8AABqBAAAagwAAGoUAABqHAAAaiQAAGpoAABqcAAAangAAGqAAABqiAAAapAAAGqYAABqoAAAaqgAAGqwAABrKAAAa6AAAGvsAABsPAAAbJAAAG0EAABtVAAAbawAAG6oAABusAAAbrgAAG7AAABuyAAAbswAAG7QAABu1AAAbtgAAG7gAABu6AAAbuwAAG7wAABu+AAAbvwAAG/4AABwAAAAcAgAAHAQAABwGAAAcBwAAHAgAABwJAAAcCgAAHAwAABwOAAAcDwAAHBAAABwSAAAcEwAAHFIAABxUAAAcVgAAHFgAABxaAAAcWwAAHFwAABxdAAAcXgAAHGAAABxiAAAcYwAAHGQAABxmAAAcZwAAHHQAABx1AAAcdgAAHHgAABy3AAAcuQAAHLsAABy9AAAcvwAAHMAAABzBAAAcwgAAHMMAABzFAAAcxwAAHMgAABzJAAAcywAAHMwAAB0LAAAdDQAAHQ8AAB0RAAAdEwAAHRQAAB0VAAAdFgAAHRcAAB0ZAAAdGwAAHRwAAB0dAAAdHwAAHSAAAB0hAAAdYAAAHWIAAB1kAAAdZgAAHWgAAB1pAAAdagAAHWsAAB1sAAAdbgAAHXAAAB1xAAAdcgAAHXQAAB11AAAdtAAAHbYAAB24AAAdugAAHbwAAB29AAAdvgAAHb8AAB3AAAAdwgAAHcQAAB3FAAAdxgAAHcgAAB3JAAAeCAAAHgoAAB4MAAAeDgAAHhAAAB4RAAAeEgAAHhMAAB4UAAAeFgAAHhgAAB4ZAAAeGgAAHhwAAB4dAAAeQgAAHmYAAB6NAAAesQAAHrMAAB61AAAetwAAHrkAAB67AAAevQAAHr4AAB7AAAAezQAAHtwAAB7eAAAe4AAAHuIAAB7kAAAe5gAAHugAAB7qAAAe+QAAHvsAAB79AAAe/wAAHwEAAB8EAAAfBwAAHwoAAB8MAAAfHgAAHzIAAB9EAAAfWQAAH2sAAB96AAAflwAAH9YAAB/YAAAf2gAAH9wAAB/eAAAf3wAAH+AAAB/hAAAf4gAAH+QAAB/mAAAf5wAAH+gAAB/qAAAf6wAAICoAACAsAAAgLgAAIDAAACAyAAAgMwAAIDQAACA1AAAgNgAAIDgAACA6AAAgOwAAIDwAACA+AAAgPwAAIEEAACCAAAAgggAAIIQAACCGAAAgiAAAIIkAACCKAAAgiwAAIIwAACCOAAAgkAAAIJEAACCSAAAglAAAIJUAACDUAAAg1gAAINgAACDaAAAg3AAAIN0AACDeAAAg3wAAIOAAACDiAAAg5AAAIOUAACDmAAAg6AAAIOkAACEsAAAhUAAAIXQAACGXAAAhvgAAId4AACIFAAAiLAAAIkwAACJwAAAilAAAIpYAACKYAAAimgAAIpwAACKeAAAioAAAIqMAACKlAAAipwAAIqoAACKsAAAirgAAIrEAACKzAAAitAAAIrkAACLGAAAiyQAAIssAACLOAAAi0AAAItIAACL3AAAjGwAAI0IAACNmAAAjaAAAI2oAACNsAAAjbgAAI3AAACNyAAAjcwAAI3UAACOCAAAjlQAAI5cAACOZAAAjmwAAI50AACOfAAAjoQAAI6MAACOlAAAjpwAAI7oAACO8AAAjvgAAI8AAACPCAAAjxAAAI8YAACPIAAAjygAAI8wAACPOAAAkDQAAJA8AACQRAAAkEwAAJBUAACQWAAAkFwAAJBgAACQZAAAkGwAAJB0AACQeAAAkHwAAJCEAACQiAAAkKwAAJCwAACQuAAAkbQAAJG8AACRxAAAkcwAAJHUAACR2AAAkdwAAJHgAACR5AAAkewAAJH0AACR+AAAkfwAAJIEAACSCAAAkwQAAJMMAACTFAAAkxwAAJMkAACTKAAAkywAAJMwAACTNAAAkzwAAJNEAACTSAAAk0wAAJNUAACTWAAAk3wAAJOIAACTkAAAk5gAAJO8AACTyAAAk9AAAJPYAACU1AAAlNwAAJTkAACU7AAAlPQAAJT4AACU/AAAlQAAAJUEAACVDAAAlRQAAJUYAACVHAAAlSQAAJUoAACWJAAAliwAAJY0AACWPAAAlkQAAJZIAACWTAAAllAAAJZUAACWXAAAlmQAAJZoAACWbAAAlnQAAJZ4AACWnAAAlqAAAJaoAACXpAAAl6wAAJe0AACXvAAAl8QAAJfIAACXzAAAl9AAAJfUAACX3AAAl+QAAJfoAACX7AAAl/QAAJf4AACY9AAAmPwAAJkEAACZDAAAmRQAAJkYAACZHAAAmSAAAJkkAACZLAAAmTQAAJk4AACZPAAAmUQAAJlIAACZfAAAmYAAAJmEAACZjAAAmogAAJqQAACamAAAmqAAAJqoAACarAAAmrAAAJq0AACauAAAmsAAAJrIAACazAAAmtAAAJrYAACa3AAAm9gAAJvgAACb6AAAm/AAAJv4AACb/AAAnAAAAJwEAACcCAAAnBAAAJwYAACcHAAAnCAAAJwoAACcLAAAnGAAAJzMAACc1AAAnNwAAJzkAACc7AAAnPQAAJz8AACdBAAAnQwAAJ0UAACdHAAAnSQAAJ0sAACdNAAAnaAAAJ2oAACdsAAAnbgAAJ3AAACdzAAAndgAAJ3kAACd8AAAnfwAAJ4IAACeFAAAniAAAJ4sAACeNAAAnmAAAJ6sAACe2AAAnxQAAJ9AAACfpAAAoAQAAKAgAACgRAAAoXAAAKH8AACifAAAovwAAKMEAACjDAAAoxQAAKMcAACjJAAAoygAAKMsAACjNAAAozgAAKNAAACjRAAAo0wAAKNUAACjWAAAo1wAAKNkAACjaAAAo3wAAKOwAACjxAAAo8wAAKPUAACj6AAAo/AAAKP4AACkAAAApFQAAKToAACleAAAphQAAKakAACmrAAAprQAAKa8AACmxAAApswAAKbUAACm2AAApuAAAKcUAACnWAAAp2AAAKdoAACncAAAp3gAAKeAAACniAAAp5AAAKeYAACn3AAAp+QAAKfsAACn9AAAp/wAAKgEAACoDAAAqBQAAKgcAACoJAAAqSAAAKkoAACpMAAAqTgAAKlAAACpRAAAqUgAAKlMAACpUAAAqVgAAKlgAACpZAAAqWgAAKlwAACpdAAAqnAAAKp4AACqgAAAqogAAKqQAACqlAAAqpgAAKqcAACqoAAAqqgAAKqwAACqtAAAqrgAAKrAAACqxAAAq8AAAKvIAACr0AAAq9gAAKvgAACr5AAAq+gAAKvsAACr8AAAq/gAAKwAAACsBAAArAgAAKwQAACsFAAArEgAAKxMAACsUAAArFgAAK1UAACtXAAArWQAAK1sAACtdAAArXgAAK18AACtgAAArYQAAK2MAACtlAAArZgAAK2cAACtpAAAragAAK6kAACurAAArrQAAK68AACuxAAArsgAAK7MAACu0AAArtQAAK7cAACu5AAArugAAK7sAACu9AAArvgAAK/0AACv/AAAsAQAALAMAACwFAAAsBgAALAcAACwIAAAsCQAALAsAACwNAAAsDgAALA8AACwRAAAsEgAALFEAACxTAAAsVQAALFcAACxZAAAsWgAALFsAACxcAAAsXQAALF8AACxhAAAsYgAALGMAACxlAAAsZgAALKUAACynAAAsqQAALKsAACytAAAsrgAALK8AACywAAAssQAALLMAACy1AAAstgAALLcAACy5AAAsugAALN8AAC0DAAAtKgAALU4AAC1QAAAtUgAALVQAAC1WAAAtWAAALVoAAC1bAAAtXQAALWoAAC15AAAtewAALX0AAC1/AAAtgQAALYMAAC2FAAAthwAALZYAAC2YAAAtmgAALZwAAC2eAAAtoAAALaIAAC2kAAAtpgAALcYAAC3xAAAuCwAALiQAAC4+AAAuXgAALoEAAC7AAAAuwgAALsQAAC7GAAAuyAAALskAAC7KAAAuywAALswAAC7OAAAu0AAALtEAAC7SAAAu1AAALtUAAC8UAAAvFgAALxgAAC8aAAAvHAAALx0AAC8eAAAvHwAALyAAAC8iAAAvJAAALyUAAC8mAAAvKAAALykAAC9oAAAvagAAL2wAAC9uAAAvcAAAL3EAAC9yAAAvcwAAL3QAAC92AAAveAAAL3kAAC96AAAvfAAAL30AAC+8AAAvvgAAL8AAAC/CAAAvxAAAL8UAAC/GAAAvxwAAL8gAAC/KAAAvzAAAL80AAC/OAAAv0AAAL9EAAC/UAAAwEwAAMBUAADAXAAAwGQAAMBsAADAcAAAwHQAAMB4AADAfAAAwIQAAMCMAADAkAAAwJQAAMCcAADAoAAAwZwAAMGkAADBrAAAwbQAAMG8AADBwAAAwcQAAMHIAADBzAAAwdQAAMHcAADB4AAAweQAAMHsAADB8AAAwuwAAML0AADC/AAAwwQAAMMMAADDEAAAwxQAAMMYAADDHAAAwyQAAMMsAADDMAAAwzQAAMM8AADDQAAAw2QAAMOcAADD0AAAxAgAAMQ8AADEiAAAxOQAAMUsAADGWAAAxuQAAMdkAADH5AAAx+wAAMf0AADH/AAAyAQAAMgMAADIEAAAyBQAAMgcAADIIAAAyCgAAMgsAADINAAAyDwAAMhAAADIRAAAyEwAAMhQAADIZAAAyJgAAMisAADItAAAyLwAAMjQAADI2AAAyOAAAMjoAADJfAAAygwAAMqoAADLOAAAy0AAAMtIAADLUAAAy1gAAMtgAADLaAAAy2wAAMt0AADLqAAAy+wAAMv0AADL/AAAzAQAAMwMAADMFAAAzBwAAMwkAADMLAAAzHAAAMx4AADMgAAAzIgAAMyQAADMmAAAzKAAAMyoAADMsAAAzLgAAM20AADNvAAAzcQAAM3MAADN1AAAzdgAAM3cAADN4AAAzeQAAM3sAADN9AAAzfgAAM38AADOBAAAzggAAM8EAADPDAAAzxQAAM8cAADPJAAAzygAAM8sAADPMAAAzzQAAM88AADPRAAAz0gAAM9MAADPVAAAz1gAANBUAADQXAAA0GQAANBsAADQdAAA0HgAANB8AADQgAAA0IQAANCMAADQlAAA0JgAANCcAADQpAAA0KgAANDcAADQ4AAA0OQAANDsAADR6AAA0fAAANH4AADSAAAA0ggAANIMAADSEAAA0hQAANIYAADSIAAA0igAANIsAADSMAAA0jgAANI8AADTOAAA00AAANNIAADTUAAA01gAANNcAADTYAAA02QAANNoAADTcAAA03gAANN8AADTgAAA04gAANOMAADUiAAA1JAAANSYAADUoAAA1KgAANSsAADUsAAA1LQAANS4AADUwAAA1MgAANTMAADU0AAA1NgAANTcAADV2AAA1eAAANXoAADV8AAA1fgAANX8AADWAAAA1gQAANYIAADWEAAA1hgAANYcAADWIAAA1igAANYsAADXKAAA1zAAANc4AADXQAAA10gAANdMAADXUAAA11QAANdYAADXYAAA12gAANdsAADXcAAA13gAANd8AADYEAAA2KAAANk8AADZzAAA2dQAANncAADZ5AAA2ewAANn0AADZ/AAA2gAAANoIAADaPAAA2ngAANqAAADaiAAA2pAAANqYAADaoAAA2qgAANqwAADa7AAA2vQAANr8AADbBAAA2wwAANsUAADbHAAA2yQAANssAADcKAAA3DAAANw4AADcQAAA3EgAANxMAADcUAAA3FQAANxYAADcYAAA3GgAANxsAADccAAA3HgAANx8AADdeAAA3YAAAN2IAADdkAAA3ZgAAN2cAADdoAAA3aQAAN2oAADdsAAA3bgAAN28AADdwAAA3cgAAN3MAADeyAAA3tAAAN7YAADe4AAA3ugAAN7sAADe8AAA3vQAAN74AADfAAAA3wgAAN8MAADfEAAA3xgAAN8cAADgGAAA4CAAAOAoAADgMAAA4DgAAOA8AADgQAAA4EQAAOBIAADgUAAA4FgAAOBcAADgYAAA4GgAAOBsAADhaAAA4XAAAOF4AADhgAAA4YgAAOGMAADhkAAA4ZQAAOGYAADhoAAA4agAAOGsAADhsAAA4bgAAOG8AADiuAAA4sAAAOLIAADi0AAA4tgAAOLcAADi4AAA4uQAAOLoAADi8AAA4vgAAOL8AADjAAAA4wgAAOMMAADkCAAA5BAAAOQYAADkIAAA5CgAAOQsAADkMAAA5DQAAOQ4AADkQAAA5EgAAORMAADkUAAA5FgAAORcAADliAAA5hQAAOaUAADnFAAA5xwAAOckAADnLAAA5zQAAOc8AADnQAAA50QAAOdMAADnUAAA51gAAOdcAADnZAAA52wAAOdwAADndAAA53wAAOeAAADnlAAA58gAAOfcAADn5AAA5+wAAOgAAADoCAAA6BAAAOgYAADorAAA6TwAAOnYAADqaAAA6nAAAOp4AADqgAAA6ogAAOqQAADqmAAA6pwAAOqkAADq2AAA6xwAAOskAADrLAAA6zQAAOs8AADrRAAA60wAAOtUAADrXAAA66AAAOuoAADrsAAA67gAAOvAAADryAAA69AAAOvYAADr4AAA6+gAAOzkAADs7AAA7PQAAOz8AADtBAAA7QgAAO0MAADtEAAA7RQAAO0cAADtJAAA7SgAAO0sAADtNAAA7TgAAO40AADuPAAA7kQAAO5MAADuVAAA7lgAAO5cAADuYAAA7mQAAO5sAADudAAA7ngAAO58AADuhAAA7ogAAO+EAADvjAAA75QAAO+cAADvpAAA76gAAO+sAADvsAAA77QAAO+8AADvxAAA78gAAO/MAADv1AAA79gAAPAMAADwEAAA8BQAAPAcAADxGAAA8SAAAPEoAADxMAAA8TgAAPE8AADxQAAA8UQAAPFIAADxUAAA8VgAAPFcAADxYAAA8WgAAPFsAADyaAAA8nAAAPJ4AADygAAA8ogAAPKMAADykAAA8pQAAPKYAADyoAAA8qgAAPKsAADysAAA8rgAAPK8AADzuAAA88AAAPPIAADz0AAA89gAAPPcAADz4AAA8+QAAPPoAADz8AAA8/gAAPP8AAD0AAAA9AgAAPQMAAD1CAAA9RAAAPUYAAD1IAAA9SgAAPUsAAD1MAAA9TQAAPU4AAD1QAAA9UgAAPVMAAD1UAAA9VgAAPVcAAD2WAAA9mAAAPZoAAD2cAAA9ngAAPZ8AAD2gAAA9oQAAPaIAAD2kAAA9pgAAPacAAD2oAAA9qgAAPasAAD3QAAA99AAAPhsAAD4/AAA+QQAAPkMAAD5FAAA+RwAAPkkAAD5LAAA+TAAAPk4AAD5bAAA+agAAPmwAAD5uAAA+cAAAPnIAAD50AAA+dgAAPngAAD6HAAA+iQAAPosAAD6NAAA+jwAAPpEAAD6TAAA+lQAAPpcAAD7WAAA+2AAAPtoAAD7cAAA+3gAAPt8AAD7gAAA+4QAAPuIAAD7kAAA+5gAAPucAAD7oAAA+6gAAPusAAD8qAAA/LAAAPy4AAD8wAAA/MgAAPzMAAD80AAA/NQAAPzYAAD84AAA/OgAAPzsAAD88AAA/PgAAPz8AAD9+AAA/gAAAP4IAAD+EAAA/hgAAP4cAAD+IAAA/iQAAP4oAAD+MAAA/jgAAP48AAD+QAAA/kgAAP5MAAD/SAAA/1AAAP9YAAD/YAAA/2gAAP9sAAD/cAAA/3QAAP94AAD/gAAA/4gAAP+MAAD/kAAA/5gAAP+cAAEAmAABAKAAAQCoAAEAsAABALgAAQC8AAEAwAABAMQAAQDIAAEA0AABANgAAQDcAAEA4AABAOgAAQDsAAEB6AABAfAAAQH4AAECAAABAggAAQIMAAECEAABAhQAAQIYAAECIAABAigAAQIsAAECMAABAjgAAQI8AAEDOAABA0AAAQNIAAEDUAABA1gAAQNcAAEDYAABA2QAAQNoAAEDcAABA3gAAQN8AAEDgAABA4gAAQOMAAEDsAABA/wAAQQwAAEEfAABBLAAAQT8AAEFWAABBaAAAQbMAAEHWAABB9gAAQhYAAEIYAABCGgAAQhwAAEIeAABCIAAAQiEAAEIiAABCJAAAQiUAAEInAABCKAAAQioAAEIsAABCLQAAQi4AAEIwAABCMQAAQjYAAEJDAABCSAAAQkoAAEJMAABCUQAAQlMAAEJVAABCVwAAQnwAAEKgAABCxwAAQusAAELtAABC7wAAQvEAAELzAABC9QAAQvcAAEL4AABC+gAAQwcAAEMYAABDGgAAQxwAAEMeAABDIAAAQyIAAEMkAABDJgAAQygAAEM5AABDOwAAQz0AAEM/AABDQQAAQ0MAAENFAABDRwAAQ0kAAENLAABDigAAQ4wAAEOOAABDkAAAQ5IAAEOTAABDlAAAQ5UAAEOWAABDmAAAQ5oAAEObAABDnAAAQ54AAEOfAABD3gAAQ+AAAEPiAABD5AAAQ+YAAEPnAABD6AAAQ+kAAEPqAABD7AAAQ+4AAEPvAABD8AAAQ/IAAEPzAABEMgAARDQAAEQ2AABEOAAARDoAAEQ7AABEPAAARD0AAEQ+AABEQAAAREIAAERDAABERAAAREYAAERHAABEVAAARFUAAERWAABEWAAARJcAAESZAABEmwAARJ0AAESfAABEoAAARKEAAESiAABEowAARKUAAESnAABEqAAARKkAAESrAABErAAAROsAAETtAABE7wAARPEAAETzAABE9AAARPUAAET2AABE9wAARPkAAET7AABE/AAARP0AAET/AABFAAAART8AAEVBAABFQwAARUUAAEVHAABFSAAARUkAAEVKAABFSwAARU0AAEVPAABFUAAARVEAAEVTAABFVAAARZMAAEWVAABFlwAARZkAAEWbAABFnAAARZ0AAEWeAABFnwAARaEAAEWjAABFpAAARaUAAEWnAABFqAAARecAAEXpAABF6wAARe0AAEXvAABF8AAARfEAAEXyAABF8wAARfUAAEX3AABF+AAARfkAAEX7AABF/AAARiEAAEZFAABGbAAARpAAAEaSAABGlAAARpYAAEaYAABGmgAARpwAAEadAABGnwAARqwAAEa7AABGvQAARr8AAEbBAABGwwAARsUAAEbHAABGyQAARtgAAEbaAABG3AAARt4AAEbgAABG4gAARuQAAEbmAABG6AAARycAAEcpAABHKwAARy0AAEcvAABHMAAARzEAAEcyAABHMwAARzUAAEc3AABHOAAARzkAAEc7AABHPAAAR3sAAEd9AABHfwAAR4EAAEeDAABHhAAAR4UAAEeGAABHhwAAR4kAAEeLAABHjAAAR40AAEePAABHkAAAR5IAAEfRAABH0wAAR9UAAEfXAABH2QAAR9oAAEfbAABH3AAAR90AAEffAABH4QAAR+IAAEfjAABH5QAAR+YAAEglAABIJwAASCkAAEgrAABILQAASC4AAEgvAABIMAAASDEAAEgzAABINQAASDYAAEg3AABIOQAASDoAAEh5AABIewAASH0AAEh/AABIgQAASIIAAEiDAABIhAAASIUAAEiHAABIiQAASIoAAEiLAABIjQAASI4AAEjNAABIzwAASNEAAEjTAABI1QAASNYAAEjXAABI2AAASNkAAEjbAABI3QAASN4AAEjfAABI4QAASOIAAEkhAABJIwAASSUAAEknAABJKQAASSoAAEkrAABJLAAASS0AAEkvAABJMQAASTIAAEkzAABJNQAASTYAAEmBAABJpAAAScQAAEnkAABJ5gAASegAAEnqAABJ7AAASe4AAEnvAABJ8AAASfIAAEnzAABJ9QAASfYAAEn4AABJ+gAASfsAAEn8AABJ/gAASf8AAEoEAABKEQAAShYAAEoYAABKGgAASh8AAEohAABKIwAASiUAAEpKAABKbgAASpUAAEq5AABKuwAASr0AAEq/AABKwQAASsMAAErFAABKxgAASsgAAErVAABK5gAASugAAErqAABK7AAASu4AAErwAABK8gAASvQAAEr2AABLBwAASwkAAEsLAABLDQAASw8AAEsRAABLEwAASxUAAEsXAABLGQAAS1gAAEtaAABLXAAAS14AAEtgAABLYQAAS2IAAEtjAABLZAAAS2YAAEtoAABLaQAAS2oAAEtsAABLbQAAS6wAAEuuAABLsAAAS7IAAEu0AABLtQAAS7YAAEu3AABLuAAAS7oAAEu8AABLvQAAS74AAEvAAABLwQAATAAAAEwCAABMBAAATAYAAEwIAABMCQAATAoAAEwLAABMDAAATA4AAEwQAABMEQAATBIAAEwUAABMFQAATCIAAEwjAABMJAAATCYAAExlAABMZwAATGkAAExrAABMbQAATG4AAExvAABMcAAATHEAAExzAABMdQAATHYAAEx3AABMeQAATHoAAEy5AABMuwAATL0AAEy/AABMwQAATMIAAEzDAABMxAAATMUAAEzHAABMyQAATMoAAEzLAABMzQAATM4AAE0NAABNDwAATREAAE0TAABNFQAATRYAAE0XAABNGAAATRkAAE0bAABNHQAATR4AAE0fAABNIQAATSIAAE1hAABNYwAATWUAAE1nAABNaQAATWoAAE1rAABNbAAATW0AAE1vAABNcQAATXIAAE1zAABNdQAATXYAAE21AABNtwAATbkAAE27AABNvQAATb4AAE2/AABNwAAATcEAAE3DAABNxQAATcYAAE3HAABNyQAATcoAAE3vAABOEwAATjoAAE5eAABOYAAATmIAAE5kAABOZgAATmgAAE5qAABOawAATm0AAE56AABOiQAATosAAE6NAABOjwAATpEAAE6TAABOlQAATpcAAE6mAABOqAAATqoAAE6sAABOrgAATrEAAE60AABOtwAATrkAAE74AABO+gAATvwAAE7+AABPAAAATwEAAE8CAABPAwAATwQAAE8GAABPCAAATwkAAE8KAABPDAAATw0AAE9MAABPTgAAT1AAAE9SAABPVAAAT1UAAE9WAABPVwAAT1gAAE9aAABPXAAAT10AAE9eAABPYAAAT2EAAE+gAABPogAAT6QAAE+mAABPqAAAT6kAAE+qAABPqwAAT6wAAE+uAABPsAAAT7EAAE+yAABPtAAAT7UAAE/0AABP9gAAT/gAAE/6AABP/AAAT/0AAE/+AABP/wAAUAAAAFACAABQBAAAUAUAAFAGAABQCAAAUAkAAFBMAABQcAAAUJQAAFC3AABQ3gAAUP4AAFElAABRTAAAUWwAAFGQAABRtAAAUbYAAFG5AABRuwAAUb0AAFG/AABRwgAAUcUAAFHHAABRyQAAUcwAAFHOAABR0AAAUdMAAFHVAABR1gAAUdsAAFHoAABR6wAAUe0AAFHwAABR8wAAUfUAAFIaAABSPgAAUmUAAFKJAABSiwAAUo0AAFKPAABSkQAAUpMAAFKVAABSlgAAUpkAAFKmAABSuQAAUrsAAFK9AABSvwAAUsEAAFLDAABSxQAAUscAAFLJAABSywAAUt4AAFLhAABS5AAAUucAAFLqAABS7QAAUvAAAFLzAABS9gAAUvkAAFL7AABTOgAAUzwAAFM/AABTQQAAU0QAAFNFAABTRgAAU0cAAFNIAABTSgAAU0wAAFNNAABTTgAAU1AAAFNRAABTWgAAU1sAAFNdAABTnAAAU54AAFOgAABTogAAU6UAAFOmAABTpwAAU6gAAFOpAABTqwAAU60AAFOuAABTrwAAU7EAAFOyAABT8QAAU/MAAFP2AABT+AAAU/sAAFP8AABT/QAAU/4AAFP/AABUAQAAVAMAAFQEAABUBQAAVAcAAFQIAABUEQAAVBQAAFQXAABUGQAAVCIAAFQlAABUJwAAVCkAAFRoAABUagAAVGwAAFRuAABUcQAAVHIAAFRzAABUdAAAVHUAAFR3AABUeQAAVHoAAFR7AABUfQAAVH4AAFS9AABUvwAAVMIAAFTEAABUxwAAVMgAAFTJAABUygAAVMsAAFTNAABUzwAAVNAAAFTRAABU0wAAVNQAAFTdAABU3gAAVOAAAFUfAABVIQAAVSMAAFUlAABVKAAAVSkAAFUqAABVKwAAVSwAAFUuAABVMAAAVTEAAFUyAABVNAAAVTUAAFV0AABVdgAAVXkAAFV7AABVfgAAVX8AAFWAAABVgQAAVYIAAFWEAABVhgAAVYcAAFWIAABVigAAVYsAAFWYAABVmQAAVZoAAFWcAABV2wAAVd0AAFXfAABV4QAAVeQAAFXlAABV5gAAVecAAFXoAABV6gAAVewAAFXtAABV7gAAVfAAAFXxAABWMAAAVjIAAFY1AABWNwAAVjoAAFY7AABWPAAAVj0AAFY+AABWQAAAVkIAAFZDAABWRAAAVkYAAFZHAABWVgAAVmMAAFZqAABWbQAAVnAAAFZyAABWeQAAVnwAAFZ/AABWggAAVoQAAFaKAABWkAAAVtsAAFb+AABXHgAAVz4AAFdAAABXQgAAV0QAAFdGAABXSAAAV0kAAFdKAABXTQAAV04AAFdQAABXUQAAV1MAAFdWAABXVwAAV1gAAFdbAABXXAAAV2EAAFduAABXcwAAV3UAAFd3AABXfAAAV38AAFeCAABXhAAAV6kAAFfNAABX9AAAWBgAAFgbAABYHQAAWB8AAFghAABYIwAAWCUAAFgmAABYKQAAWDYAAFhHAABYSQAAWEsAAFhNAABYTwAAWFEAAFhTAABYVQAAWFcAAFhoAABYawAAWG4AAFhxAABYdAAAWHcAAFh6AABYfQAAWIAAAFiCAABYwQAAWMMAAFjFAABYxwAAWMoAAFjLAABYzAAAWM0AAFjOAABY0AAAWNIAAFjTAABY1AAAWNYAAFjXAABZFgAAWRgAAFkaAABZHAAAWR8AAFkgAABZIQAAWSIAAFkjAABZJQAAWScAAFkoAABZKQAAWSsAAFksAABZawAAWW0AAFlwAABZcgAAWXUAAFl2AABZdwAAWXgAAFl5AABZewAAWX0AAFl+AABZfwAAWYEAAFmCAABZjwAAWZAAAFmRAABZkwAAWdIAAFnUAABZ1gAAWdgAAFnbAABZ3AAAWd0AAFneAABZ3wAAWeEAAFnjAABZ5AAAWeUAAFnnAABZ6AAAWicAAFopAABaKwAAWi0AAFowAABaMQAAWjIAAFozAABaNAAAWjYAAFo4AABaOQAAWjoAAFo8AABaPQAAWnwAAFp+AABagAAAWoIAAFqFAABahgAAWocAAFqIAABaiQAAWosAAFqNAABajgAAWo8AAFqRAABakgAAWtEAAFrTAABa1QAAWtcAAFraAABa2wAAWtwAAFrdAABa3gAAWuAAAFriAABa4wAAWuQAAFrmAABa5wAAWyYAAFsoAABbKgAAWywAAFsvAABbMAAAWzEAAFsyAABbMwAAWzUAAFs3AABbOAAAWzkAAFs7AABbPAAAW2EAAFuFAABbrAAAW9AAAFvTAABb1QAAW9cAAFvZAABb2wAAW90AAFveAABb4QAAW+4AAFv9AABb/wAAXAEAAFwDAABcBQAAXAcAAFwJAABcCwAAXBoAAFwdAABcIAAAXCMAAFwmAABcKQAAXCwAAFwvAABcMQAAXHAAAFxyAABcdQAAXHcAAFx6AABcewAAXHwAAFx9AABcfgAAXIAAAFyCAABcgwAAXIQAAFyGAABchwAAXIkAAFzIAABcygAAXMwAAFzOAABc0QAAXNIAAFzTAABc1AAAXNUAAFzXAABc2QAAXNoAAFzbAABc3QAAXN4AAF0dAABdHwAAXSEAAF0jAABdJgAAXScAAF0oAABdKQAAXSoAAF0sAABdLgAAXS8AAF0wAABdMgAAXTMAAF1yAABddAAAXXcAAF15AABdfAAAXX0AAF1+AABdfwAAXYAAAF2CAABdhAAAXYUAAF2GAABdiAAAXYkAAF2LAABdygAAXcwAAF3OAABd0AAAXdMAAF3UAABd1QAAXdYAAF3XAABd2QAAXdsAAF3cAABd3QAAXd8AAF3gAABeHwAAXiEAAF4jAABeJQAAXigAAF4pAABeKgAAXisAAF4sAABeLgAAXjAAAF4xAABeMgAAXjQAAF41AABedAAAXnYAAF54AABeegAAXn0AAF5+AABefwAAXoAAAF6BAABegwAAXoUAAF6GAABehwAAXokAAF6KAABe1QAAXvgAAF8YAABfOAAAXzoAAF88AABfPgAAX0AAAF9CAABfQwAAX0QAAF9HAABfSAAAX0oAAF9LAABfTQAAX1AAAF9RAABfUgAAX1UAAF9WAABfWwAAX2gAAF9tAABfbwAAX3EAAF92AABfeQAAX3wAAF9+AABfowAAX8cAAF/uAABgEgAAYBUAAGAXAABgGQAAYBsAAGAdAABgHwAAYCAAAGAjAABgMAAAYEEAAGBDAABgRQAAYEcAAGBJAABgSwAAYE0AAGBPAABgUQAAYGIAAGBlAABgaAAAYGsAAGBuAABgcQAAYHQAAGB3AABgegAAYHwAAGC7AABgvQAAYL8AAGDBAABgxAAAYMUAAGDGAABgxwAAYMgAAGDKAABgzAAAYM0AAGDOAABg0AAAYNEAAGEQAABhEgAAYRQAAGEWAABhGQAAYRoAAGEbAABhHAAAYR0AAGEfAABhIQAAYSIAAGEjAABhJQAAYSYAAGFlAABhZwAAYWoAAGFsAABhbwAAYXAAAGFxAABhcgAAYXMAAGF1AABhdwAAYXgAAGF5AABhewAAYXwAAGGJAABhigAAYYsAAGGNAABhzAAAYc4AAGHQAABh0gAAYdUAAGHWAABh1wAAYdgAAGHZAABh2wAAYd0AAGHeAABh3wAAYeEAAGHiAABiIQAAYiMAAGIlAABiJwAAYioAAGIrAABiLAAAYi0AAGIuAABiMAAAYjIAAGIzAABiNAAAYjYAAGI3AABidgAAYngAAGJ6AABifAAAYn8AAGKAAABigQAAYoIAAGKDAABihQAAYocAAGKIAABiiQAAYosAAGKMAABiywAAYs0AAGLPAABi0QAAYtQAAGLVAABi1gAAYtcAAGLYAABi2gAAYtwAAGLdAABi3gAAYuAAAGLhAABjIAAAYyIAAGMkAABjJgAAYykAAGMqAABjKwAAYywAAGMtAABjLwAAYzEAAGMyAABjMwAAYzUAAGM2AABjWwAAY38AAGOmAABjygAAY80AAGPPAABj0QAAY9MAAGPVAABj1wAAY9gAAGPbAABj6AAAY/cAAGP5AABj+wAAY/0AAGP/AABkAQAAZAMAAGQFAABkFAAAZBcAAGQaAABkHQAAZCAAAGQjAABkJgAAZCkAAGQrAABkagAAZGwAAGRuAABkcAAAZHMAAGR0AABkdQAAZHYAAGR3AABkeQAAZHsAAGR8AABkfQAAZH8AAGSAAABkvwAAZMEAAGTDAABkxQAAZMgAAGTJAABkygAAZMsAAGTMAABkzgAAZNAAAGTRAABk0gAAZNQAAGTVAABlFAAAZRYAAGUYAABlGgAAZR0AAGUeAABlHwAAZSAAAGUhAABlIwAAZSUAAGUmAABlJwAAZSkAAGUqAABlaQAAZWsAAGVtAABlbwAAZXIAAGVzAABldAAAZXUAAGV2AABleAAAZXoAAGV7AABlfAAAZX4AAGV/AABlvgAAZcAAAGXCAABlxAAAZccAAGXIAABlyQAAZcoAAGXLAABlzQAAZc8AAGXQAABl0QAAZdMAAGXUAABmEwAAZhUAAGYXAABmGQAAZhwAAGYdAABmHgAAZh8AAGYgAABmIgAAZiQAAGYlAABmJgAAZigAAGYpAABmaAAAZmoAAGZsAABmbgAAZnEAAGZyAABmcwAAZnQAAGZ1AABmdwAAZnkAAGZ6AABmewAAZn0AAGZ+AABmyQAAZuwAAGcMAABnLAAAZy4AAGcwAABnMgAAZzQAAGc2AABnNwAAZzgAAGc7AABnPAAAZz4AAGc/AABnQQAAZ0MAAGdEAABnRQAAZ0gAAGdJAABnTgAAZ1sAAGdgAABnYgAAZ2QAAGdpAABnbAAAZ28AAGdxAABnlgAAZ7oAAGfhAABoBQAAaAgAAGgKAABoDAAAaA4AAGgQAABoEgAAaBMAAGgWAABoIwAAaDQAAGg2AABoOAAAaDoAAGg8AABoPgAAaEAAAGhCAABoRAAAaFUAAGhYAABoWwAAaF4AAGhhAABoZAAAaGcAAGhqAABobQAAaG8AAGiuAABosAAAaLIAAGi0AABotwAAaLgAAGi5AABougAAaLsAAGi9AABovwAAaMAAAGjBAABowwAAaMQAAGkDAABpBQAAaQcAAGkJAABpDAAAaQ0AAGkOAABpDwAAaRAAAGkSAABpFAAAaRUAAGkWAABpGAAAaRkAAGlYAABpWgAAaV0AAGlfAABpYgAAaWMAAGlkAABpZQAAaWYAAGloAABpagAAaWsAAGlsAABpbgAAaW8AAGl8AABpfQAAaX4AAGmAAABpvwAAacEAAGnDAABpxQAAacgAAGnJAABpygAAacsAAGnMAABpzgAAadAAAGnRAABp0gAAadQAAGnVAABqFAAAahYAAGoYAABqGgAAah0AAGoeAABqHwAAaiAAAGohAABqIwAAaiUAAGomAABqJwAAaikAAGoqAABqaQAAamsAAGptAABqbwAAanIAAGpzAABqdAAAanUAAGp2AABqeAAAanoAAGp7AABqfAAAan4AAGp/AABqvgAAasAAAGrCAABqxAAAascAAGrIAABqyQAAasoAAGrLAABqzQAAas8AAGrQAABq0QAAatMAAGrUAABrEwAAaxUAAGsXAABrGQAAaxwAAGsdAABrHgAAax8AAGsgAABrIgAAayQAAGslAABrJgAAaygAAGspAABrTgAAa3IAAGuZAABrvQAAa8AAAGvCAABrxAAAa8YAAGvIAABrygAAa8sAAGvOAABr2wAAa+oAAGvsAABr7gAAa/AAAGvyAABr9AAAa/YAAGv4AABsBwAAbAoAAGwNAABsEAAAbBMAAGwWAABsGQAAbBwAAGweAABsXQAAbF8AAGxhAABsYwAAbGYAAGxnAABsaAAAbGkAAGxqAABsbAAAbG4AAGxvAABscAAAbHIAAGxzAABssgAAbLQAAGy2AABsuAAAbLsAAGy8AABsvQAAbL4AAGy/AABswQAAbMMAAGzEAABsxQAAbMcAAGzIAABtBwAAbQkAAG0LAABtDQAAbRAAAG0RAABtEgAAbRMAAG0UAABtFgAAbRgAAG0ZAABtGgAAbRwAAG0dAABtXAAAbV4AAG1hAABtYwAAbWYAAG1nAABtaAAAbWkAAG1qAABtbAAAbW4AAG1vAABtcAAAbXIAAG1zAABtdgAAbbUAAG23AABtuQAAbbsAAG2+AABtvwAAbcAAAG3BAABtwgAAbcQAAG3GAABtxwAAbcgAAG3KAABtywAAbgoAAG4MAABuDgAAbhAAAG4TAABuFAAAbhUAAG4WAABuFwAAbhkAAG4bAABuHAAAbh0AAG4fAABuIAAAbl8AAG5hAABuYwAAbmUAAG5oAABuaQAAbmoAAG5rAABubAAAbm4AAG5wAABucQAAbnIAAG50AABudQAAboAAAG6JAABuigAAbowAAG6VAABuoAAAbq8AAG66AABuyAAAbt0AAG7xAABvCAAAbxoAAG9ZAABvWwAAb10AAG9fAABvYQAAb2IAAG9jAABvZAAAb2UAAG9nAABvaQAAb2oAAG9rAABvbQAAb24AAG+tAABvrwAAb7EAAG+zAABvtQAAb7YAAG+3AABvuAAAb7kAAG+7AABvvQAAb74AAG+/AABvwQAAb8IAAHABAABwAwAAcAYAAHAIAABwCgAAcAsAAHAMAABwDQAAcA4AAHAQAABwEgAAcBMAAHAUAABwFgAAcBcAAHBiAABwhQAAcKUAAHDFAABwxwAAcMkAAHDLAABwzQAAcM8AAHDQAABw0QAAcNQAAHDVAABw1wAAcNgAAHDaAABw3AAAcN0AAHDeAABw4QAAcOIAAHDnAABw9AAAcPkAAHD7AABw/QAAcQIAAHEFAABxCAAAcQoAAHEvAABxUwAAcXoAAHGeAABxoQAAcaMAAHGlAABxpwAAcakAAHGrAABxrAAAca8AAHG8AABxzQAAcc8AAHHRAABx0wAAcdUAAHHXAABx2QAAcdsAAHHdAABx7gAAcfEAAHH0AABx9wAAcfoAAHH9AAByAAAAcgMAAHIGAAByCAAAckcAAHJJAABySwAAck0AAHJQAAByUQAAclIAAHJTAAByVAAAclYAAHJYAAByWQAAcloAAHJcAAByXQAAcpwAAHKeAAByoAAAcqIAAHKlAABypgAAcqcAAHKoAAByqQAAcqsAAHKtAAByrgAAcq8AAHKxAABysgAAcvEAAHLzAABy9gAAcvgAAHL7AABy/AAAcv0AAHL+AABy/wAAcwEAAHMDAABzBAAAcwUAAHMHAABzCAAAcxUAAHMYAABzGwAAcx4AAHMhAABzIwAAcz0AAHNBAABzgAAAc4IAAHOEAABzhgAAc4kAAHOKAABziwAAc4wAAHONAABzjwAAc5EAAHOSAABzkwAAc5UAAHOWAABz1QAAc9cAAHPZAABz2wAAc94AAHPfAABz4AAAc+EAAHPiAABz5AAAc+YAAHPnAABz6AAAc+oAAHPrAAB0KgAAdCwAAHQuAAB0MAAAdDMAAHQ0AAB0NQAAdDYAAHQ3AAB0OQAAdDsAAHQ8AAB0PQAAdD8AAHRAAAB0fwAAdIEAAHSDAAB0hQAAdIgAAHSJAAB0igAAdIsAAHSMAAB0jgA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AgQQAAIEGAACBCAAAgQsAAIENAACBDwAAgRIAAIEVAACBFgAAgRsAAIEoAACBKwAAgS0AAIEwAACBMwAAgTUAAIFaAACBfgAAgaUAAIHJAACBzAAAgc4AAIHQAACB0gAAgdQAAIHWAACB1wAAgdoAAIHnAACB+gAAgfwAAIH+AACCAAAAggIAAIIEAACCBgAAgggAAIIKAACCDAAAgh8AAIIiAACCJQAAgigAAIIrAACCLgAAgjEAAII0AACCNwAAgjoAAII8AACCewAAgn0AAIKAAACCggAAgoUAAIKGAACChwAAgogAAIKJAACCiwAAgo0AAIKOAACCjwAAgpEAAIKSAACCmwAAgpwAAIKeAACC3QAAgt8AAILhAACC4wAAguYAAILnAACC6AAAgukAAILqAACC7AAAgu4AAILvAACC8AAAgvIAAILzAACDMgAAgzQAAIM3AACDOQAAgzwAAIM9AACDPgAAgz8AAINAAACDQgAAg0QAAINFAACDRgAAg0gAAINJAACDUgAAg1UAAINYAACDWgAAg2MAAINoAACDagAAg20AAINvAACDeAAAg7cAAIO5AACDuwAAg70AAIPAAACDwQAAg8IAAIPDAACDxAAAg8YAAIPIAACDyQAAg8oAAIPMAACDzQAAhAwAAIQOAACEEQAAhBMAAIQWAACEFwAAhBgAAIQZAACEGgAAhBwAAIQeAACEHwAAhCAAAIQiAACEIwAAhCwAAIQtAACELwAAhG4AAIRwAACEcgAAhHQAAIR3AACEeAAAhHkAAIR6AACEewAAhH0AAIR/AACEgAAAhIEAAISDAACEhAAAhMMAAITFAACEyAAAhMoAAITNAACEzgAAhM8AAITQAACE0QAAhNMAAITVAACE1gAAhNcAAITZAACE2gAAhOcAAIToAACE6QAAhOsAAIUqAACFLAAAhS4AAIUwAACFMwAAhTQAAIU1AACFNgAAhTcAAIU5AACFOwAAhTwAAIU9AACFPwAAhUAAAIV/AACFgQAAhYQAAIWGAACFiQAAhYoAAIWLAACFjAAAhY0AAIWPAACFkQAAhZIAAIWTAACFlQAAhZYAAIWlAACFsgAAhcMAAIXGAACFyQAAhcwAAIXPAACF0gAAhdQAAIXWAACF2AAAhekAAIXsAACF7wAAhfIAAIX1AACF+AAAhfsAAIX+AACGAQAAhgMAAIYjAACGPQAAhlwAAIZnAACGsgAAhtUAAIb1AACHFQAAhxcAAIcZAACHGwAAhx0AAIcgAACHIQAAhyIAAIclAACHJgAAhygAAIcpAACHKwAAhy4AAIcvAACHMAAAhzMAAIc0AACHOQAAh0YAAIdLAACHTQAAh08AAIdUAACHVwAAh1oAAIdcAACHgQAAh6UAAIfMAACH8AAAh/MAAIf1AACH9wAAh/kAAIf7AACH/QAAh/4AAIgBAACIDgAAiB8AAIghAACIIwAAiCUAAIgnAACIKQAAiCsAAIgtAACILwAAiEAAAIhDAACIRgAAiEkAAIhMAACITwAAiFIAAIhVAACIWAAAiFoAAIiZAACImwAAiJ0AAIifAACIogAAiKMAAIikAACIpQAAiKYAAIioAACIqgAAiKsAAIisAACIrgAAiK8AAIjuAACI8AAAiPIAAIj0AACI9wAAiPgAAIj5AACI+gAAiPsAAIj9AACI/wAAiQAAAIkBAACJAwAAiQQAAIlDAACJRQAAiUgAAIlKAACJTQAAiU4AAIlPAACJUAAAiVEAAIlTAACJVQAAiVYAAIlXAACJWQAAiVoAAIlnAACJaAAAiWkAAIlrAACJqgAAiawAAImuAACJsAAAibMAAIm0AACJtQAAibYAAIm3AACJuQAAibsAAIm8AACJvQAAib8AAInAAACJ/wAAigEAAIoDAACKBQAAiggAAIoJAACKCgAAigsAAIoMAACKDgAAihAAAIoRAACKEgAAihQAAIoVAACKVAAAilYAAIpYAACKWgAAil0AAIpeAACKXwAAimAAAIphAACKYwAAimUAAIpmAACKZwAAimkAAIpqAACKqQAAiqsAAIqtAACKrwAAirIAAIqzAACKtAAAirUAAIq2AACKuAAAiroAAIq7AACKvAAAir4AAIq/AACK/gAAiwAAAIsCAACLBAAAiwcAAIsIAACLCQAAiwoAAIsLAACLDQAAiw8AAIsQAACLEQAAixMAAIsUAACLOQAAi10AAIuEAACLqAAAi6sAAIutAACLrwAAi7EAAIuzAACLtQAAi7YAAIu5AACLxgAAi9UAAIvXAACL2QAAi9sAAIvdAACL3wAAi+EAAIvjAACL8gAAi/UAAIv4AACL+wAAi/4AAIwBAACMBAAAjAcAAIwJAACMSAAAjEoAAIxMAACMTgA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Al34AAJeAAACXhQAAl4gAAJeLAACXjQAAl7IAAJfWAACX/QAAmCEAAJgkAACYJgAAmCgAAJgqAACYLAAAmC4AAJgvAACYMgAAmD8AAJhQAACYUgAAmFQAAJhWAACYWAAAmFoAAJhcAACYXgAAmGAAAJhxAACYdAAAmHcAAJh6AACYfQAAmIAAAJiDAACYhgAAmIkAAJiLAACYygAAmMwAAJjOAACY0AAAmNMAAJjUAACY1QAAmNYAAJjXAACY2QAAmNsAAJjcAACY3QAAmN8AAJjgAACZHwAAmSEAAJkjAACZJQAAmSgAAJkpAACZKgAAmSsAAJksAACZLgAAmTAAAJkxAACZMgAAmTQAAJk1AACZdAAAmXYAAJl5AACZewAAmX4AAJl/AACZgAAAmYEAAJmCAACZhAAAmYYAAJmHAACZiAAAmYoAAJmLAACZmAAAmZkAAJmaAACZnAAAmdsAAJndAACZ3wAAmeEAAJnkAACZ5QAAmeYAAJnnAACZ6AAAmeoAAJnsAACZ7QAAme4AAJnwAACZ8QAAmjAAAJoyAACaNAAAmjYAAJo5AACaOgAAmjsAAJo8AACaPQAAmj8AAJpBAACaQgAAmkMAAJpFAACaRgAAmoUAAJqHAACaiQAAmosAAJqOAACajwAAmpAAAJqRAACakgAAmpQAAJqWAACalwAAmpgAAJqaAACamwAAmtoAAJrcAACa3gAAmuAAAJrjAACa5AAAmuUAAJrmAACa5wAAmukAAJrrAACa7AAAmu0AAJrvAACa8AAAmy8AAJsxAACbMwAAmzUAAJs4AACbOQAAmzoAAJs7AACbPAAAmz4AAJtAAACbQQAAm0IAAJtEAACbRQAAm2oAAJuOAACbtQAAm9kAAJvcAACb3gAAm+AAAJviAACb5AAAm+YAAJvnAACb6gAAm/cAAJwGAACcCAAAnAoAAJwMAACcDgAAnBAAAJwSAACcFAAAnCMAAJwmAACcKQAAnCwAAJwvAACcMgAAnDUAAJw4AACcOgAAnHkAAJx7AACcfQAAnH8AAJyCAACcgwAAnIQAAJyFAACchgAAnIgAAJyKAACciwAAnIwAAJyOAACcjwAAnM4AAJzQAACc0gAAnNQAAJzXAACc2AAAnNkAAJzaAACc2wAAnN0AAJzfAACc4AAAnOEAAJzjAACc5AAAnSMAAJ0lAACdJwAAnSkAAJ0sAACdLQAAnS4AAJ0vAACdMAAAnTIAAJ00AACdNQAAnTYAAJ04AACdOQAAnXgAAJ16AACdfAAAnX4AAJ2BAACdggAAnYMAAJ2EAACdhQAAnYcAAJ2JAACdigAAnYsAAJ2NAACdjgAAnc0AAJ3PAACd0QAAndMAAJ3WAACd1wAAndgAAJ3ZAACd2gAAndwAAJ3eAACd3wAAneAAAJ3iAACd4wAAniIAAJ4kAACeJgAAnigAAJ4rAACeLAAAni0AAJ4uAACeLwAAnjEAAJ4zAACeNAAAnjUAAJ43AACeOAAAnncAAJ55AACefAAAnn4AAJ6BAACeggAAnoMAAJ6EAACehQAAnocAAJ6JAACeigAAnosAAJ6NAACejgAAntkAAJ78AACfHAAAnzwAAJ8+AACfQAAAn0IAAJ9EAACfRgAAn0cAAJ9IAACfSwAAn0wAAJ9OAACfTwAAn1EAAJ9TAACfVAAAn1UAAJ9YAACfWQAAn14AAJ9rAACfcAAAn3IAAJ90AACfeQAAn3wAAJ9/AACfgQAAn6YAAJ/KAACf8QAAoBUAAKAYAACgGgAAoBwAAKAeAACgIAAAoCIAAKAjAACgJgAAoDMAAKBEAACgRgAAoEgAAKBKAACgTAAAoE4AAKBQAACgUgAAoFQAAKBlAACgaAAAoGsAAKBuAACgcQAAoHQAAKB3AACgegAAoH0AAKB/AACgvgAAoMAAAKDCAACgxAAAoMcAAKDIAACgyQAAoMoAAKDLAACgzQAAoM8AAKDQAACg0QAAoNMAAKDUAAChEwAAoRUAAKEXAAChGQAAoRwAAKEdAAChHgAAoR8AAKEgAAChIgAAoSQAAKElAAChJgAAoSgAAKEpAAChaAAAoWoAAKFtAAChbwAAoXIAAKFzAAChdAAAoXUAAKF2AACheAAAoXoAAKF7AAChfAAAoX4AAKF/AAChjAAAoY0AAKGOAAChkAAAoc8AAKHRAACh0wAAodUAAKHYAACh2QAAodoAAKHbAACh3AAAod4AAKHgAACh4QAAoeIAAKHkAACh5QAAoiQAAKImAACiKAAAoioAAKItAACiLgAAoi8AAKIwAACiMQAAojMAAKI1AACiNgAAojcAAKI5AACiOgAAonkAAKJ7AACifQAAon8AAKKCAACigwAAooQAAKKFAACihgAAoogAAKKKAACiiwAAoowAAKKOAACijwAAos4AAKLQAACi0gAAotQAAKLXAACi2AAAotkAAKLaAACi2wAAot0AAKLfAACi4AAAouEAAKLjAACi5AAAoyMAAKMlAACjJwAAoykAAKMsAACjLQAAoy4AAKMvAACjMAAAozIAAKM0AACjNQAAozYAAKM4AACjOQAAo14AAKOCAACjqQAAo80AAKPQAACj0gAAo9QAAKPWAACj2AAAo9oAAKPbAACj3gAAo+sAAKP6AACj/AAAo/4AAKQAAACkAgAApAQAAKQGAACkCAAApBcAAKQaAACkHQAApCAAAKQjAACkJgAApCkAAKQsAACkLgAApG0AAKRvAACkcQAApHMAAKR2AACkdwAApHgAAKR5AACkegAApHwAAKR+AACkfwAApIAAAKSCAACkgwAApMIAAKTEAACkxgAApMgAAKTLAACkzAAApM0AAKTOAACkzwAApNEAAKTTAACk1AAApNUAAKTXAACk2AAApRcAAKUZAAClGwAApR0AAKUgAAClIQAApSIAAKUjAAClJAAApSYAAKUoAAClKQAApSoAAKUsAAClLQAApWwAAKVuAAClcQAApXMAAKV2AACldwAApXgAAKV5AAClegAApXwAAKV+AAClfwAApYAAAKWCAAClgwAApcIAAKXEAAClxgAApcgAAKXLAAClzAAApc0AAKXOAAClzwAApdEAAKXTAACl1AAApdUAAKXXAACl2AAAphcAAKYZAACmGwAAph0AAKYgAACmIQAApiIAAKYjAACmJAAApiYAAKYoAACmKQAApioAAKYsAACmLQAApmwAAKZuAACmcQAApnMAAKZ2AACmdwAApngAAKZ5AACmegAApnwAAKZ+AACmfwAApoAAAKaCAACmgwAAps4AAKbxAACnEQAApzEAAKczAACnNQAApzcAAKc5AACnPAAApz0AAKc+AACnQQAAp0IAAKdEAACnRQAAp0cAAKdKAACnSwAAp0wAAKdPAACnUAAAp1UAAKdiAACnZwAAp2kAAKdrAACncAAAp3MAAKd2AACneAAAp50AAKfBAACn6AAAqAwAAKgPAACoEQAAqBMAAKgVAACoFwAAqBkAAKgaAACoHQAAqCoAAKg7AACoPQAAqD8AAKhBAACoQwAAqEUAAKhHAACoSQAAqEsAAKhcAACoXwAAqGIAAKhlAACoaAAAqGsAAKhuAACocQAAqHQAAKh2AACotQAAqLcAAKi5AACouwAAqL4AAKi/AACowAAAqMEAAKjCAACoxAAAqMYAAKjHAACoyAAAqMoAAKjLAACpCgAAqQwAAKkOAACpEAAAqRMAAKkUAACpFQAAqRYAAKkXAACpGQAAqRsAAKkcAACpHQAAqR8AAKkgAACpXwAAqWEAAKlkAACpZgAAqWkAAKlqAACpawAAqWwAAKltAACpbwAAqXEAAKlyAACpcwAAqXUAAKl2AACpgwAAqYQAAKmFAACphwAAqcYAAKnIAACpygAAqcwAAKnPAACp0AAAqdEAAKnSAACp0wAAqdUAAKnXAACp2AAAqdkAAKnbAACp3AAAqhsAAKodAACqHwAAqiEAAKokAACqJQAAqiYAAKonAACqKAAAqioAAKosAACqLQAAqi4AAKowAACqMQAAqnAAAKpyAACqdAAAqnYAAKp5AACqegAAqnsAAKp8AACqfQAAqn8AAKqBAACqggAAqoMAAKqFAACqhgAAqsUAAKrHAACqyQAAqssAAKrOAACqzwAAqtAAAKrRAACq0gAAqtQAAKrWAACq1wAAqtgAAKraAACq2wAAqxoAAKscAACrHgAAqyAAAKsjAACrJAAAqyUAAKsmAACrJwAAqykAAKsrAACrLAAAqy0AAKsvAACrMAAAq1UAAKt5AACroAAAq8QAAKvHAACryQAAq8sAAKvNAACrzwAAq9EAAKvSAACr1QAAq+IAAKvxAACr8wAAq/UAAKv3AACr+QAAq/sAAKv9AACr/wAArA4AAKwRAACsFAAArBcAAKwaAACsHQAArCAAAKwjAACsJQAArGQAAKxmAACsaQAArGsAAKxuAACsbwAArHAAAKxxAACscgAArHQAAKx2AACsdwAArHgAAKx6AACsewAArH4AAKy9AACsvwAArMEAAKzDAACsxgAArMcAAKzIAACsyQAArMoAAKzMAACszgAArM8AAKzQAACs0gAArNMAAK0SAACtFAAArRYAAK0YAACtGwAArRwAAK0dAACtHgAArR8AAK0hAACtIwAArSQAAK0lAACtJwAArSgAAK1nAACtaQAArWwAAK1uAACtcQAArXIAAK1zAACtdAAArXUAAK13AACteQAArXoAAK17AACtfQAArX4AAK2BAACtwAAArcIAAK3EAACtxgAArckAAK3KAACtywAArcwAAK3NAACtzwAArdEAAK3SAACt0wAArdUAAK3WAACuFQAArhcAAK4ZAACuGwAArh4AAK4fAACuIAAAriEAAK4iAACuJAAAriYAAK4nAACuKAAArioAAK4rAACuagAArmwAAK5uAACucAAArnMAAK50AACudQAArnYAAK53AACueQAArnsAAK58AACufQAArn8AAK6AAACuywAAru4AAK8OAACvLgAArzAAAK8yAACvNAAArzYAAK85AACvOgAArzsAAK8+AACvPwAAr0EAAK9CAACvRAAAr0cAAK9IAACvSQAAr0wAAK9NAACvUgAAr18AAK9kAACvZgAAr2gAAK9tAACvcAAAr3MAAK91AACvmgAAr74AAK/lAACwCQAAsAwAALAOAACwEAAAsBIAALAUAACwFgAAsBcAALAaAACwJwAAsDgAALA6AACwPAAAsD4AALBAAACwQgAAsEQAALBGAACwSAAAsFkAALBcAACwXwAAsGIAALBlAACwaAAAsGsAALBuAACwcQAAsHMAALCyAACwtAAAsLYAALC4AACwuwAAsLwAALC9AACwvgAAsL8AALDBAACwwwAAsMQAALDFAACwxwAAsMgAALEHAACxCQAAsQsAALENAACxEAAAsREAALESAACxEwAAsRQAALEWAACxGAAAsRkAALEaAACxHAAAsR0AALFcAACxXgAAsWEAALFjAACxZgAAsWcAALFoAACxaQAAsWoAALFsAACxbgAAsW8AALFwAACxcgAAsXMAALGAAACxgwAAsYYAALGJAACxjAAAsY4AALGoAACxsQAAsfAAALHyAACx9AAAsfYAALH5AACx+gAAsfsAALH8AACx/QAAsf8AALIBAACyAgAAsgMAALIFAACyBgAAskUAALJHAACySQAAsksAALJOAACyTwAAslAAALJRAACyUgAAslQAALJWAACyVwAAslgAALJaAACyWwAAspoAALKcAACyngAAsqAAALKjAACypAAAsqUAALKmAACypwAAsqkAALKrAACyrAAAsq0AALKvAACysAAAsu8AALLxAACy8wAAsvUAALL4AACy+QAAsvoAALL7AACy/AAAsv4AALMAAACzAQAAswIAALMEAACzBQAAs0QAALNGAACzSAAAs0oAALNNAACzTgAAs08AALNQAACzUQA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AxFIAAMRVAADEWAAAxFoAAMSZAADEmwAAxJ0AAMSfAADEogAAxKMAAMSkAADEpQAAxKYAAMSoAADEqgAAxKsAAMSsAADErgAAxK8AAMTuAADE8AAAxPIAAMT0AADE9wAAxPgAAMT5AADE+gAAxPsAAMT9AADE/wAAxQAAAMUBAADFAwAAxQQAAMVDAADFRQAAxUcAAMVJAADFTAAAxU0AAMVOAADFTwAAxVAAAMVSAADFVAAAxVUAAMVWAADFWAAAxVkAAMWYAADFmgAAxZ0AAMWfAADFogAAxaMAAMWkAADFpQAAxaYAAMWoAADFqgAAxasAAMWsAADFrgAAxa8AAMXuAADF8AAAxfIAAMX0AADF9wAAxfgAAMX5AADF+gAAxfsAAMX9AADF/wAAxgAAAMYBAADGAwAAxgQAAMZDAADGRQAAxkcAAMZJAADGTAAAxk0AAMZOAADGTwAAxlAAAMZSAADGVAAAxlUAAMZWAADGWAAAxlkAAMaYAADGmgAAxpwAAMaeAADGoQAAxqIAAMajAADGpAAAxqUAAManAADGqQAAxqoAAMarAADGrQAAxq4AAMb5AADHHAAAxzwAAMdcAADHXgAAx2AAAMdiAADHZAAAx2cAAMdoAADHaQAAx2wAAMdtAADHbwAAx3AAAMdyAADHdAAAx3UAAMd2AADHeQAAx3oAAMd/AADHjAAAx5EAAMeTAADHlQAAx5oAAMedAADHoAAAx6IAAMfHAADH6wAAyBIAAMg2AADIOQAAyDsAAMg9AADIPwAAyEEAAMhDAADIRAAAyEcAAMhUAADIZQAAyGcAAMhpAADIawAAyG0AAMhvAADIcQAAyHMAAMh1AADIhgAAyIkAAMiMAADIjwAAyJIAAMiVAADImAAAyJsAAMieAADIoAAAyN8AAMjhAADI4wAAyOUAAMjoAADI6QAAyOoAAMjrAADI7AAAyO4AAMjwAADI8QAAyPIAAMj0AADI9QAAyTQAAMk2AADJOAAAyToAAMk9AADJPgAAyT8AAMlAAADJQQAAyUMAAMlFAADJRgAAyUcAAMlJAADJSgAAyYkAAMmLAADJjgAAyZAAAMmTAADJlAAAyZUAAMmWAADJlwAAyZkAAMmbAADJnAAAyZ0AAMmfAADJoAAAya0AAMmuAADJrwAAybEAAMnwAADJ8gAAyfQAAMn2AADJ+QAAyfoAAMn7AADJ/AAAyf0AAMn/AADKAQAAygIAAMoDAADKBQAAygYAAMpFAADKRwAAykkAAMpLAADKTgAAyk8AAMpQAADKUQAAylIAAMpUAADKVgAAylcAAMpYAADKWgAAylsAAMqaAADKnAAAyp4AAMqgAADKowAAyqQAAMqlAADKpgAAyqcAAMqpAADKqwAAyqwAAMqtAADKrwAAyrAAAMrvAADK8QAAyvMAAMr1AADK+AAAyvkAAMr6AADK+wAAyvwAAMr+AADLAAAAywEAAMsCAADLBAAAywUAAMtEAADLRgAAy0gAAMtKAADLTQAAy04AAMtPAADLUAAAy1EAAMtTAADLVQAAy1YAAMtXAADLWQAAy1oAAMt/AADLowAAy8oAAMvuAADL8QAAy/MAAMv1AADL9wAAy/kAAMv7AADL/AAAy/8AAMwMAADMGwAAzB0AAMwfAADMIQAAzCMAAMwlAADMJwAAzCkAAMw4AADMOwAAzD4AAMxBAADMRAAAzEcAAMxKAADMTQAAzE8AAMyOAADMkAAAzJIAAMyUAADMlwAAzJgAAMyZAADMmgAAzJsAAMydAADMnwAAzKAAAMyhAADMowAAzKQAAMzjAADM5QAAzOcAAMzpAADM7AAAzO0AAMzuAADM7wAAzPAAAMzyAADM9AAAzPUAAMz2AADM+AAAzPkAAM04AADNOgAAzTwAAM0+AADNQQAAzUIAAM1DAADNRAAAzUUAAM1HAADNSQAAzUoAAM1LAADNTQAAzU4AAM2NAADNjwAAzZIAAM2UAADNlwAAzZgAAM2ZAADNmgAAzZsAAM2dAADNnwAAzaAAAM2hAADNowAAzaQAAM3jAADN5QAAzecAAM3pAADN7AAAze0AAM3uAADN7wAAzfAAAM3yAADN9AAAzfUAAM32AADN+AAAzfkAAM44AADOOgAAzjwAAM4+AADOQQAAzkIAAM5DAADORAAAzkUAAM5HAADOSQAAzkoAAM5LAADOTQAAzk4AAM6NAADOjwAAzpEAAM6TAADOlgAAzpcAAM6YAADOmQAAzpoAAM6cAADOngAAzp8AAM6gAADOogAAzqMAAM6sAADOrQAAzq8AAM7uAADO8AAAzvIAAM70AADO9wAAzvgAAM75AADO+gAAzvsAAM79AADO/wAAzwAAAM8BAADPAwAAzwQAAM9DAADPRQAAz0cAAM9JAADPTAAAz00AAM9OAADPTwAAz1AAAM9SAADPVAAAz1UAAM9WAADPWAAAz1kAAM+YAADPmgAAz50AAM+fAADPogAAz6MAAM+kAADPpQAAz6YAAM+oAADPqgAAz6sAAM+sAADPrgAAz68AAM/6AADQHQAA0D0AANBdAADQXwAA0GEAANBjAADQZQAA0GcAANBoAADQaQAA0GwAANBtAADQbwAA0HAAANByAADQdAAA0HUAANB2AADQeQAA0HoAANB/AADQjAAA0JEAANCTAADQlQAA0JoAANCdAADQoAAA0KIAANDHAADQ6wAA0RIAANE2AADROQAA0TsAANE9AADRPwAA0UEAANFDAADRRAAA0UcAANFUAADRZQAA0WcAANFpAADRawAA0W0AANFvAADRcQAA0XMAANF1AADRhgAA0YkAANGMAADRjwAA0ZIAANGVAADRmAAA0ZsAANGeAADRoAAA0d8AANHhAADR4wAA0eUAANHoAADR6QAA0eoAANHrAADR7AAA0e4AANHwAADR8QAA0fIAANH0AADR9QAA0jQAANI2AADSOAAA0joAANI9AADSPgAA0j8AANJAAADSQQAA0kMAANJFAADSRgAA0kcAANJJAADSSgAA0okAANKLAADSjgAA0pAAANKTAADSlAAA0pUAANKWAADSlwAA0pkAANKbAADSnAAA0p0AANKfAADSoAAA0q0AANKwAADSswAA0rYAANK5AADSuwAA0tUAANLbAADTGgAA0xwAANMeAADTIAAA0yMAANMkAADTJQAA0yYAANMnAADTKQAA0ysAANMsAADTLQAA0y8AANMwAADTbwAA03EAANNzAADTdQAA03gAANN5AADTegAA03sAANN8AADTfgAA04AAANOBAADTggAA04QAANOFAADTxAAA08YAANPIAADTygAA080AANPOAADTzwAA09AAANPRAADT0wAA09UAANPWAADT1wAA09kAANPaAADUGQAA1BsAANQdAADUHwAA1CIAANQjAADUJAAA1CUAANQmAADUKAAA1CoAANQrAADULAAA1C4AANQvAADUbgAA1HAAANRyAADUdAAA1HcAANR4AADUeQAA1HoAANR7AADUfQAA1H8AANSAAADUgQAA1IMAANSEAADUqQAA1M0AANT0AADVGAAA1RsAANUdAADVHwAA1SEAANUjAADVJQAA1SYAANUpAADVNgAA1UUAANVHAADVSQAA1UsAANVNAADVTwAA1VEAANVTAADVYgAA1WUAANVoAADVawAA1W4AANVxAADVdAAA1XcAANV5AADVuAAA1boAANW8AADVvgAA1cEAANXCAADVwwAA1cQAANXFAADVxwAA1ckAANXKAADVywAA1c0AANXOAADWDQAA1g8AANYRAADWEwAA1hYAANYXAADWGAAA1hkAANYaAADWHAAA1h4AANYfAADWIAAA1iIAANYjAADWYgAA1mQAANZmAADWaAAA1msAANZsAADWbQAA1m4AANZvAADWcQAA1nMAANZ0AADWdQAA1ncAANZ4AADWtwAA1rkAANa8AADWvgAA1sEAANbCAADWwwAA1sQAANbFAADWxwAA1skAANbKAADWywAA1s0AANbOAADXDQAA1w8AANcRAADXEwAA1xYAANcXAADXGAAA1xkAANcaAADXHAAA1x4AANcfAADXIAAA1yIAANcjAADXYgAA12QAANdmAADXaAAA12sAANdsAADXbQAA124AANdvAADXcQAA13MAANd0AADXdQAA13cAANd4AADXtwAA17kAANe7AADXvQAA18AAANfBAADXwgAA18MAANfEAADXxgAA18gAANfJAADXygAA18wAANfNAADYGAAA2DsAANhbAADYewAA2H0AANh/AADYgQAA2IMAANiFAADYhgAA2IcAANiKAADYiwAA2I0AANiOAADYkAAA2JIAANiTAADYlAAA2JcAANiYAADYnQAA2KoAANivAADYsQAA2LMAANi4AADYuwAA2L4AANjAAADY5QAA2QkAANkwAADZVAAA2VcAANlZAADZWwAA2V0AANlfAADZYQAA2WIAANllAADZcgAA2YMAANmFAADZhwAA2YkAANmLAADZjQAA2Y8AANmRAADZkwAA2aQAANmnAADZqgAA2a0AANmwAADZswAA2bYAANm5AADZvAAA2b4AANn9AADZ/wAA2gEAANoDAADaBgAA2gcAANoIAADaCQAA2goAANoMAADaDgAA2g8AANoQAADaEgAA2hMAANpSAADaVAAA2lYAANpYAADaWwAA2lwAANpdAADaXgAA2l8AANphAADaYwAA2mQAANplAADaZwAA2mgAANqnAADaqQAA2qwAANquAADasQAA2rIAANqzAADatAAA2rUAANq3AADauQAA2roAANq7AADavQAA2r4AANrLAADazgAA2tEAANrUAADa1wAA2tkAANrzAADbMgAA2zQAANs2AADbOAAA2zsAANs8AADbPQAA2z4AANs/AADbQQAA20MAANtEAADbRQAA20cAANtIAADbhwAA24kAANuLAADbjQAA25AAANuRAADbkgAA25MAANuUAADblgAA25gAANuZAADbmgAA25wAANudAADb3AAA294AANvgAADb4gAA2+UAANvmAADb5wAA2+gAANvpAADb6wAA2+0AANvuAADb7wAA2/EAANvyAADcMQAA3DMAANw1AADcNwAA3DoAANw7AADcPAAA3D0AANw+AADcQAAA3EIAANxDAADcRAAA3EYAANxHAADchgAA3IgAANyKAADcjAAA3I8AANyQAADckQAA3JIAANyTAADclQAA3JcAANyYAADcmQAA3JsAANycAADcwQAA3OUAAN0MAADdMAAA3TMAAN01AADdNwAA3TkAAN07AADdPQAA3T4AAN1BAADdTgAA3V0AAN1fAADdYQAA3WMAAN1lAADdZwAA3WkAAN1rAADdegAA3X0AAN2AAADdgwAA3YYAAN2JAADdjAAA3Y8AAN2RAADd0AAA3dIAAN3UAADd1gAA3dkAAN3aAADd2wAA3dwAAN3dAADd3wAA3eEAAN3iAADd4wAA3eUAAN3mAADeJQAA3icAAN4pAADeKwAA3i4AAN4vAADeMAAA3jEAAN4yAADeNAAA3jYAAN43AADeOAAA3joAAN47AADeegAA3nwAAN5+AADegAAA3oMAAN6EAADehQAA3oYAAN6HAADeiQAA3osAAN6MAADejQAA3o8AAN6QAADezwAA3tEAAN7UAADe1gAA3tkAAN7aAADe2wAA3twAAN7dAADe3wAA3uEAAN7iAADe4wAA3uUAAN7mAADfJQAA3ycAAN8pAADfKwAA3y4AAN8vAADfMAAA3zEAAN8yAADfNAAA3zYAAN83AADfOAAA3zoAAN87AADfegAA33wAAN9/AADfgQAA34QAAN+FAADfhgAA34cAAN+IAADfigAA34wAAN+NAADfjgAA35AAAN+RAADfrQAA3+wAAN/uAADf8AAA3/IAAN/1AADf9gAA3/cAAN/4AADf+QAA3/sAAN/9AADf/gAA3/8AAOABAADgAgAA4E0AAOBwAADgkAAA4LAAAOCyAADgtAAA4LYAAOC4AADgugAA4LsAAOC8AADgvwAA4MAAAODCAADgwwAA4MUAAODHAADgyAAA4MkAAODMAADgzQAA4NIAAODfAADg5AAA4OYAAODoAADg7QAA4PAAAODzAADg9QAA4RoAAOE+AADhZQAA4YkAAOGMAADhjgAA4ZAAAOGSAADhlAAA4ZYAAOGXAADhmgAA4acAAOG4AADhugAA4bwAAOG+AADhwAAA4cIAAOHEAADhxgAA4cgAAOHZAADh3AAA4d8AAOHiAADh5QAA4egAAOHrAADh7gAA4fEAAOHzAADiMgAA4jQAAOI2AADiOAAA4jsAAOI8AADiPQAA4j4AAOI/AADiQQAA4kMAAOJEAADiRQAA4kcAAOJIAADihwAA4okAAOKLAADijQAA4pAAAOKRAADikgAA4pMAAOKUAADilgAA4pgAAOKZAADimgAA4pwAAOKdAADi3AAA4t4AAOLhAADi4wAA4uYAAOLnAADi6AAA4ukAAOLqAADi7AAA4u4AAOLvAADi8AAA4vIAAOLzAADjAAAA4wEAAOMCAADjBAAA40MAAONFAADjRwAA40kAAONMAADjTQAA404AAONPAADjUAAA41IAAONUAADjVQAA41YAAONYAADjWQAA45gAAOOaAADjnAAA454AAOOhAADjogAA46MAAOOkAADjpQAA46cAAOOpAADjqgAA46sAAOOtAADjrgAA4+0AAOPvAADj8QAA4/MAAOP2AADj9wAA4/gAAOP5AADj+gAA4/wAAOP+AADj/wAA5AAAAOQCAADkAwAA5EIAAOREAADkRgAA5EgAAORLAADkTAAA5E0AAOROAADkTwAA5FEAAORTAADkVAAA5FUAAORXAADkWAAA5JcAAOSZAADkmwAA5J0AAOSgAADkoQAA5KIAAOSjAADkpAAA5KYAAOSoAADkqQAA5KoAAOSsAADkrQAA5NIAAOT2AADlHQAA5UEAAOVEAADlRgAA5UgAAOVKAADlTAAA5U4AAOVPAADlUgAA5V8AAOVuAADlcAAA5XIAAOV0AADldgAA5XgAAOV6AADlfAAA5YsAAOWOAADlkQAA5ZQAAOWXAADlmgAA5Z0AAOWgAADlogAA5eEAAOXjAADl5QAA5ecAAOXqAADl6wAA5ewAAOXtAADl7gAA5fAAAOXyAADl8wAA5fQAAOX2AADl9wAA5jYAAOY4AADmOgAA5jwAAOY/AADmQAAA5kEAAOZCAADmQwAA5kUAAOZHAADmSAAA5kkAAOZLAADmTAAA5osAAOaNAADmjwAA5pEAAOaUAADmlQAA5pYAAOaXAADmmAAA5poAAOacAADmnQAA5p4AAOagAADmoQAA5uAAAObiAADm5QAA5ucAAObqAADm6wAA5uwAAObtAADm7gAA5vAAAObyAADm8wAA5vQAAOb2AADm9wAA5zYAAOc4AADnOgAA5zwAAOc/AADnQAAA50EAAOdCAADnQwAA50UAAOdHAADnSAAA50kAAOdLAADnTAAA54sAAOeNAADnjwAA55EAAOeUAADnlQAA55YAAOeXAADnmAAA55oAAOecAADnnQAA554AAOegAADnoQAA5+AAAOfiAADn5AAA5+YAAOfpAADn6gAA5+sAAOfsAADn7QAA5+8AAOfxAADn8gAA5/MAAOf1AADn9gAA6EEAAOhkAADohAAA6KQAAOimAADoqAAA6KoAAOisAADorgAA6K8AAOiwAADoswAA6LQAAOi2AADotwAA6LkAAOi7AADovAAA6L0AAOjAAADowQAA6MYAAOjTAADo2AAA6NoAAOjcAADo4QAA6OQAAOjnAADo6QAA6Q4AAOkyAADpWQAA6X0AAOmAAADpggAA6YQAAOmGAADpiAAA6YoAAOmLAADpjgAA6ZsAAOmsAADprgAA6bAAAOmyAADptAAA6bYAAOm4AADpugAA6bwAAOnNAADp0AAA6dMAAOnWAADp2QAA6dwAAOnfAADp4gAA6eUAAOnnAADqJgAA6igAAOoqAADqLAAA6i8AAOowAADqMQAA6jIAAOozAADqNQAA6jcAAOo4AADqOQAA6jsAAOo8AADqewAA6n0AAOp/AADqgQAA6oQAAOqFAADqhgAA6ocAAOqIAADqigAA6owAAOqNAADqjgAA6pAAAOqRAADq0AAA6tIAAOrVAADq1wAA6toAAOrbAADq3AAA6t0AAOreAADq4AAA6uIAAOrjAADq5AAA6uYAAOrnAADq9AAA6vUAAOr2AADq+AAA6zcAAOs5AADrOwAA6z0AAOtAAADrQQAA60IAAOtDAADrRAAA60YAAOtIAADrSQAA60oAAOtMAADrTQAA64wAAOuOAADrkAAA65IAAOuVAADrlgAA65cAAOuYAADrmQAA65sAAOudAADrngAA658AAOuhAADrogAA6+EAAOvjAADr5QAA6+cAAOvqAADr6wAA6+wAAOvtAADr7gAA6/AAAOvyAADr8wAA6/QAAOv2AADr9wAA7DYAAOw4AADsOgAA7DwAAOw/AADsQAAA7EEAAOxCAADsQwAA7EUAAOxHAADsSAAA7EkAAOxLAADsTAAA7IsAAOyNAADsjwAA7JEAAOyUAADslQAA7JYAAOyXAADsmAAA7JoAAOycAADsnQAA7J4AAOygAADsoQAA7MYAAOzqAADtEQAA7TUAAO04AADtOgAA7TwAAO0+AADtQAAA7UIAAO1DAADtRgAA7VMAAO1iAADtZAAA7WYAAO1oAADtagAA7WwAAO1uAADtcAAA7X8AAO2CAADthQAA7YgAAO2LAADtjgAA7ZEAAO2UAADtlgAA7dUAAO3XAADt2QAA7dsAAO3eAADt3wAA7eAAAO3hAADt4gAA7eQAAO3mAADt5wAA7egAAO3qAADt6wAA7ioAAO4sAADuLgAA7jAAAO4zAADuNAAA7jUAAO42AADuNwAA7jkAAO47AADuPAAA7j0AAO4/AADuQAAA7n8AAO6BAADugwAA7oUAAO6IAADuiQAA7ooAAO6LAADujAAA7o4AAO6QAADukQAA7pIAAO6UAADulQAA7tQAAO7WAADu2QAA7tsAAO7eAADu3wAA7uAAAO7hAADu4gAA7uQAAO7mAADu5wAA7ugAAO7qAADu6wAA7y4AAO9SAADvdgAA75kAAO/AAADv4AAA8AcAAPAuAADwTgAA8HIAAPCWAADwmAAA8JsAAPCdAADwnwAA8KEAAPCkAADwpwAA8KkAAPCrAADwrgAA8LAAAPCyAADwtQAA8LgAAPC5AADwwgAA8M8AAPDSAADw1AAA8NcAAPDaAADw3AAA8QEAAPElAADxTAAA8XAAAPFzAADxdQAA8XcAAPF5AADxewAA8X0AAPF+AADxgQAA8Y4AAPGhAADxowAA8aUAAPGnAADxqQAA8asAAPGtAADxrwAA8bEAAPGzAADxxgAA8ckAAPHMAADxzwAA8dIAAPHVAADx2AAA8dsAAPHeAADx4QAA8eMAAPIiAADyJAAA8icAAPIpAADyLAAA8i0AAPIuAADyLwA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BDX0AAQ1/AAENgAABDYEAAQ2DAAENhAABDc8AAQ3yAAEOEgABDjIAAQ40AAEONgABDjgAAQ46AAEOPQABDj4AAQ4/AAEOQgABDkMAAQ5FAAEORgABDkgAAQ5LAAEOTAABDk0AAQ5QAAEOUQABDlYAAQ5jAAEOaAABDmoAAQ5sAAEOcQABDnQAAQ53AAEOeQABDp4AAQ7CAAEO6QABDw0AAQ8QAAEPEgABDxQAAQ8WAAEPGAABDxoAAQ8bAAEPHgABDysAAQ88AAEPPgABD0AAAQ9CAAEPRAABD0YAAQ9IAAEPSgABD0wAAQ9dAAEPYAABD2MAAQ9mAAEPaQABD2wAAQ9vAAEPcgABD3UAAQ93AAEPtgABD7gAAQ+6AAEPvAABD78AAQ/AAAEPwQABD8IAAQ/DAAEPxQABD8cAAQ/IAAEPyQABD8sAAQ/MAAEQCwABEA0AARAPAAEQEQABEBQAARAVAAEQFgABEBcAARAYAAEQGgABEBwAARAdAAEQHgABECAAARAhAAEQYAABEGIAARBlAAEQZwABEGoAARBrAAEQbAABEG0AARBuAAEQcAABEHIAARBzAAEQdAABEHYAARB3AAEQhAABEIUAARCGAAEQiAABEMcAARDJAAEQywABEM0AARDQAAEQ0QABENIAARDTAAEQ1AABENYAARDYAAEQ2QABENoAARDcAAEQ3QABERwAAREeAAERIAABESIAARElAAERJgABEScAAREoAAERKQABESsAAREtAAERLgABES8AARExAAERMgABEXEAARFzAAERdQABEXcAARF6AAERewABEXwAARF9AAERfgABEYAAARGCAAERgwABEYQAARGGAAERhwABEcYAARHIAAERygABEcwAARHPAAER0AABEdEAARHSAAER0wABEdUAARHXAAER2AABEdkAARHbAAER3AABEhsAARIdAAESHwABEiEAARIkAAESJQABEiYAARInAAESKAABEioAARIsAAESLQABEi4AARIwAAESMQABElYAARJ6AAESoQABEsUAARLIAAESygABEswAARLOAAES0AABEtIAARLTAAES1gABEuMAARLyAAES9AABEvYAARL4AAES+gABEvwAARL+AAETAAABEw8AARMSAAETFQABExgAARMbAAETHgABEyEAARMkAAETJgABE2UAARNnAAETaQABE2sAARNuAAETbwABE3AAARNxAAETcgABE3QAARN2AAETdwABE3gAARN6AAETewABE7oAARO8AAETvgABE8AAARPDAAETxAABE8UAARPGAAETxwABE8kAARPLAAETzAABE80AARPPAAET0AABFA8AARQRAAEUEwABFBUAARQYAAEUGQABFBoAARQbAAEUHAABFB4AARQgAAEUIQABFCIAARQkAAEUJQABFGQAARRmAAEUaQABFGsAARRuAAEUbwABFHAAARRxAAEUcgABFHQAARR2AAEUdwABFHgAARR6AAEUewABFLoAARS8AAEUvgABFMAAARTDAAEUxAABFMUAARTGAAEUxwABFMkAARTLAAEUzAABFM0AARTPAAEU0AABFQ8AARURAAEVEwABFRUAARUYAAEVGQABFRoAARUbAAEVHAABFR4AARUgAAEVIQABFSIAARUkAAEVJQABFWQAARVmAAEVaAABFWoAARVtAAEVbgABFW8AARVwAAEVcQABFXMAARV1AAEVdgABFXcAARV5AAEVegABFcUAARXoAAEWCAABFigAARYqAAEWLAABFi4AARYwAAEWMwABFjQAARY1AAEWOAABFjkAARY7AAEWPAABFj4AARZAAAEWQQABFkIAARZFAAEWRgABFk8AARZcAAEWYQABFmMAARZlAAEWagABFm0AARZwAAEWcgABFpcAARa7AAEW4gABFwYAARcJAAEXCwABFw0AARcPAAEXEQABFxMAARcUAAEXFwABFyQAARc1AAEXNwABFzkAARc7AAEXPQABFz8AARdBAAEXQwABF0UAARdWAAEXWQABF1wAARdfAAEXYgABF2UAARdoAAEXawABF24AARdwAAEXrwABF7EAARezAAEXtQABF7gAARe5AAEXugABF7sAARe8AAEXvgABF8AAARfBAAEXwgABF8QAARfFAAEYBAABGAYAARgIAAEYCgABGA0AARgOAAEYDwABGBAAARgRAAEYEwABGBUAARgWAAEYFwABGBkAARgaAAEYWQABGFsAARheAAEYYAABGGMAARhkAAEYZQABGGYAARhnAAEYaQABGGsAARhsAAEYbQABGG8AARhwAAEYfQABGH4AARh/AAEYgQABGMAAARjCAAEYxAABGMYAARjJAAEYygABGMsAARjMAAEYzQABGM8AARjRAAEY0gABGNMAARjVAAEY1gABGRUAARkXAAEZGQABGRsAARkeAAEZHwABGSAAARkhAAEZIgABGSQAARkmAAEZJwABGSgAARkqAAEZKwABGWoAARlsAAEZbgABGXAAARlzAAEZdAABGXUAARl2AAEZdwABGXkAARl7AAEZfAABGX0AARl/AAEZgAABGb8AARnBAAEZwwABGcUAARnIAAEZyQABGcoAARnLAAEZzAABGc4AARnQAAEZ0QABGdIAARnUAAEZ1QABGhQAARoWAAEaGAABGhoAARodAAEaHgABGh8AARogAAEaIQABGiMAARolAAEaJgABGicAARopAAEaKgABGk8AARpzAAEamgABGr4AARrBAAEawwABGsUAARrHAAEayQABGssAARrMAAEazwABGtwAARrrAAEa7QABGu8AARrxAAEa8wABGvUAARr3AAEa+QABGwgAARsLAAEbDgABGxEAARsUAAEbFwABGxoAARsdAAEbHwABG14AARtgAAEbYgABG2QAARtnAAEbaAABG2kAARtqAAEbawABG20AARtvAAEbcAABG3EAARtzAAEbdAABG7MAARu1AAEbtwABG7kAARu8AAEbvQABG74AARu/AAEbwAABG8IAARvEAAEbxQABG8YAARvIAAEbyQABHAgAARwKAAEcDAABHA4AARwRAAEcEgABHBMAARwUAAEcFQABHBcAARwZAAEcGgABHBsAARwdAAEcHgABHF0AARxfAAEcYgABHGQAARxnAAEcaAABHGkAARxqAAEcawABHG0AARxvAAEccAABHHEAARxzAAEcdAABHLMAARy1AAEctwABHLkAARy8AAEcvQABHL4AARy/AAEcwAABHMIAARzEAAEcxQABHMYAARzIAAEcyQABHQgAAR0KAAEdDAABHQ4AAR0RAAEdEgABHRMAAR0UAAEdFQABHRcAAR0ZAAEdGgABHRsAAR0dAAEdHgABHV0AAR1fAAEdYQABHWMAAR1mAAEdZwABHWgAAR1pAAEdagABHWwAAR1uAAEdbwABHXAAAR1yAAEdcwABHb4AAR3hAAEeAQABHiEAAR4jAAEeJQABHicAAR4pAAEeLAABHi0AAR4uAAEeMQABHjIAAR40AAEeNQABHjcAAR45AAEeOgABHjsAAR4+AAEePwABHkQAAR5RAAEeVgABHlgAAR5aAAEeXwABHmIAAR5lAAEeZwABHowAAR6wAAEe1wABHvsAAR7+AAEfAAABHwIAAR8EAAEfBgABHwgAAR8JAAEfDAABHxkAAR8qAAEfLAABHy4AAR8wAAEfMgABHzQAAR82AAEfOAABHzoAAR9LAAEfTgABH1EAAR9UAAEfVwABH1oAAR9dAAEfYAABH2MAAR9lAAEfpAABH6YAAR+oAAEfqgABH60AAR+uAAEfrwABH7AAAR+xAAEfswABH7UAAR+2AAEftwABH7kAAR+6AAEf+QABH/sAAR/9AAEf/wABIAIAASADAAEgBAABIAUAASAGAAEgCAABIAoAASALAAEgDAABIA4AASAPAAEgTgABIFAAASBTAAEgVQABIFgAASBZAAEgWgABIFsAASBcAAEgXgABIGAAASBhAAEgYgABIGQAASBlAAEgcgABIHUAASB4AAEgewABIH4AASCAAAEgmgABIKQAASDjAAEg5QABIOcAASDpAAEg7AABIO0AASDuAAEg7wABIPAAASDyAAEg9AABIPUAASD2AAEg+AABIPkAASE4AAEhOgABITwAASE+AAEhQQABIUIAASFDAAEhRAABIUUAASFHAAEhSQABIUoAASFLAAEhTQABIU4AASGNAAEhjwABIZEAASGTAAEhlgABIZcAASGYAAEhmQABIZoAASGcAAEhngABIZ8AASGgAAEhogABIaMAASHiAAEh5AABIeYAASHoAAEh6wABIewAASHtAAEh7gABIe8AASHxAAEh8wABIfQAASH1AAEh9wABIfgAASI3AAEiOQABIjsAASI9AAEiQAABIkEAASJCAAEiQwABIkQAASJGAAEiSAABIkkAASJKAAEiTAABIk0AASJyAAEilgABIr0AASLhAAEi5AABIuYAASLoAAEi6gABIuwAASLuAAEi7wABIvIAASL/AAEjDgABIxAAASMSAAEjFAABIxYAASMYAAEjGgABIxwAASMrAAEjLgABIzEAASM0AAEjNwABIzoAASM9AAEjQAABI0IAASOBAAEjgwABI4UAASOHAAEjigABI4sAASOMAAEjjQABI44AASOQAAEjkgABI5MAASOUAAEjlgABI5cAASPWAAEj2AABI9oAASPcAAEj3wABI+AAASPhAAEj4gABI+MAASPlAAEj5wABI+gAASPpAAEj6wABI+wAASQrAAEkLQABJC8AASQxAAEkNAABJDUAASQ2AAEkNwABJDgAASQ6AAEkPAABJD0AASQ+AAEkQAABJEEAASSAAAEkggABJIUAASSHAAEkigABJIsAASSMAAEkjQABJI4AASSQAAEkkgABJJMAASSUAAEklgABJJcAASTWAAEk2AABJNoAASTcAAEk3wABJOAAASThAAEk4gABJOMAASTlAAEk5wABJOgAASTpAAEk6wABJOwAASUrAAElLQABJTAAASUyAAElNQABJTYAASU3AAElOAABJTkAASU7AAElPQABJT4AASU/AAElQQABJUIAASVeAAElnQABJZ8AASWhAAElowABJaYAASWnAAElqAABJakAASWqAAElrAABJa4AASWvAAElsAABJbIAASWzAAEl/gABJiEAASZBAAEmYQABJmMAASZlAAEmZwABJmkAASZsAAEmbQABJm4AASZxAAEmcgABJnQAASZ1AAEmdwABJnkAASZ6AAEmewABJn4AASZ/AAEmhAABJpEAASaWAAEmmAABJpoAASafAAEmogABJqUAASanAAEmzAABJvAAAScXAAEnOwABJz4AASdAAAEnQgABJ0QAASdGAAEnSAABJ0kAASdMAAEnWQABJ2oAASdsAAEnbgABJ3AAASdyAAEndAABJ3YAASd4AAEnegABJ4sAASeOAAEnkQABJ5QAASeXAAEnmgABJ50AASegAAEnowABJ6UAASfkAAEn5gABJ+gAASfqAAEn7QABJ+4AASfvAAEn8AABJ/EAASfzAAEn9QABJ/YAASf3AAEn+QABJ/oAASg5AAEoOwABKD0AASg/AAEoQgABKEMAAShEAAEoRQABKEYAAShIAAEoSgABKEsAAShMAAEoTgABKE8AASiOAAEokAABKJMAASiVAAEomAABKJkAASiaAAEomwABKJwAASieAAEooAABKKEAASiiAAEopAABKKUAASiyAAEoswABKLQAASi2AAEo9QABKPcAASj5AAEo+wABKP4AASj/AAEpAAABKQEAASkCAAEpBAABKQYAASkHAAEpCAABKQoAASkLAAEpSgABKUwAASlOAAEpUAABKVMAASlUAAEpVQABKVYAASlXAAEpWQABKVsAASlcAAEpXQABKV8AASlgAAEpnwABKaEAASmjAAEppQABKagAASmpAAEpqgABKasAASmsAAEprgABKbAAASmxAAEpsgABKbQAASm1AAEp9AABKfYAASn4AAEp+gABKf0AASn+AAEp/wABKgAAASoBAAEqAwABKgUAASoGAAEqBwABKgkAASoKAAEqSQABKksAASpNAAEqTwABKlIAASpTAAEqVAABKlUAASpWAAEqWAABKloAASpbAAEqXAABKl4AASpfAAEqhAABKqgAASrPAAEq8wABKvYAASr4AAEq+gABKvwAASr+AAErAAABKwEAASsEAAErEQABKyAAASsiAAErJAABKyYAASsoAAErKgABKywAASsuAAErPQABK0AAAStDAAErRgABK0kAAStMAAErTwABK1IAAStUAAErkwABK5UAASuXAAErmQABK5wAASudAAErngABK58AASugAAErogABK6QAASulAAErpgABK6gAASupAAEr6AABK+oAASvsAAEr7gABK/EAASvyAAEr8wABK/QAASv1AAEr9wABK/kAASv6AAEr+wABK/0AASv+AAEsPQABLD8AASxBAAEsQwABLEYAASxHAAEsSAABLEkAASxKAAEsTAABLE4AASxPAAEsUAABLFIAASxTAAEskgABLJQAASyXAAEsmQABLJwAASydAAEsngABLJ8AASygAAEsogABLKQAASylAAEspgABLKgAASypAAEs6AABLOoAASzsAAEs7gABLPEAASzyAAEs8wABLPQAASz1AAEs9wABLPkAASz6AAEs+wABLP0AASz+AAEtPQABLT8AAS1BAAEtQwABLUYAAS1HAAEtSAABLUkAAS1KAAEtTAABLU4AAS1PAAEtUAABLVIAAS1TAAEtkgABLZQAAS2WAAEtmAABLZsAAS2cAAEtnQABLZ4AAS2fAAEtoQABLaMAAS2kAAEtpQABLacAAS2oAAEt8wABLhYAAS42AAEuVgABLlgAAS5aAAEuXAABLl4AAS5hAAEuYgABLmMAAS5mAAEuZwABLmkAAS5qAAEubAABLm8AAS5wAAEucQABLnQAAS51AAEuegABLocAAS6MAAEujgABLpAAAS6VAAEumAABLpsAAS6dAAEuwgABLuYAAS8NAAEvMQABLzQAAS82AAEvOAABLzoAAS88AAEvPgABLz8AAS9CAAEvTwABL2AAAS9iAAEvZAABL2YAAS9oAAEvagABL2wAAS9uAAEvcAABL4EAAS+EAAEvhwABL4oAAS+NAAEvkAABL5MAAS+WAAEvmQABL5sAAS/aAAEv3AABL94AAS/gAAEv4wABL+QAAS/lAAEv5gABL+cAAS/pAAEv6wABL+wAAS/tAAEv7wABL/AAATAvAAEwMQABMDMAATA1AAEwOAABMDkAATA6AAEwOwABMDwAATA+AAEwQAABMEEAATBCAAEwRAABMEUAATCEAAEwhgABMIkAATCLAAEwjgABMI8AATCQAAEwkQABMJIAATCUAAEwlgABMJcAATCYAAEwmgABMJsAATCoAAEwqQABMKoAATCsAAEw6wABMO0AATDvAAEw8QABMPQAATD1AAEw9gABMPcAATD4AAEw+gABMPwAATD9AAEw/gABMQAAATEBAAExQAABMUIAATFEAAExRgABMUkAATFKAAExSwABMUwAATFNAAExTwABMVEAATFSAAExUwABMVUAATFWAAExlQABMZcAATGZAAExmwABMZ4AATGfAAExoAABMaEAATGiAAExpAABMaYAATGnAAExqAABMaoAATGrAAEx6gABMewAATHuAAEx8AABMfMAATH0AAEx9QABMfYAATH3AAEx+QABMfsAATH8AAEx/QABMf8AATIAAAEyPwABMkEAATJDAAEyRQABMkgAATJJAAEySgABMksAATJMAAEyTgABMlAAATJRAAEyUgABMlQAATJVAAEyegABMp4AATLFAAEy6QABMuwAATLuAAEy8AABMvIAATL0AAEy9gABMvcAATL6AAEzBwABMxYAATMYAAEzGgABMxwAATMeAAEzIAABMyIAATMkAAEzMwABMzYAATM5AAEzPAABMz8AATNCAAEzRQABM0gAATNKAAEziQABM4sAATOOAAEzkAABM5MAATOUAAEzlQABM5YAATOXAAEzmQABM5sAATOcAAEznQABM58AATOgAAEz3wABM+EAATPjAAEz5QABM+gAATPpAAEz6gABM+sAATPsAAEz7gABM/AAATPxAAEz8gABM/QAATP1AAE0NAABNDYAATQ4AAE0OgABND0AATQ+AAE0PwABNEAAATRBAAE0QwABNEUAATRGAAE0RwABNEkAATRKAAE0iQABNIsAATSOAAE0kAABNJMAATSUAAE0lQABNJYAATSXAAE0mQABNJsAATScAAE0nQABNJ8AATSgAAE03wABNOEAATTjAAE05QABNOgAATTpAAE06gABNOsAATTsAAE07gABNPAAATTxAAE08gABNPQAATT1AAE1NAABNTYAATU4AAE1OgABNT0AATU+AAE1PwABNUAAATVBAAE1QwABNUUAATVGAAE1RwABNUkAATVKAAE1iQABNYsAATWNAAE1jwABNZIAATWTAAE1lAABNZUAATWWAAE1mAABNZoAATWbAAE1nAABNZ4AATWfAAE1qAABNakAATWrAAE16gABNewAATXuAAE18AABNfMAATX0AAE19QABNfYAATX3AAE1+QABNfsAATX8AAE1/QABNf8AATYAAAE2PwABNkEAATZDAAE2RQABNkgAATZJAAE2SgABNksAATZMAAE2TgABNlAAATZRAAE2UgABNlQAATZVAAE2lAABNpYAATaZAAE2mwABNp4AATafAAE2oAABNqEAATaiAAE2pAABNqYAATanAAE2qAABNqoAATarAAE29gABNxkAATc5AAE3WQABN1sAATddAAE3XwABN2EAATdjAAE3ZAABN2UAATdoAAE3aQABN2sAATdsAAE3bgABN3AAATdxAAE3cgABN3UAATd2AAE3ewABN4gAATeNAAE3jwABN5EAATeWAAE3mQABN5wAATeeAAE3wwABN+cAATgOAAE4MgABODUAATg3AAE4OQABODsAATg9AAE4PwABOEAAAThDAAE4UAABOGEAAThjAAE4ZQABOGcAAThpAAE4awABOG0AAThvAAE4cQABOIIAATiFAAE4iAABOIsAATiOAAE4kQABOJQAATiXAAE4mgABOJwAATjbAAE43QABON8AATjhAAE45AABOOUAATjmAAE45wABOOgAATjqAAE47AABOO0AATjuAAE48AABOPEAATkwAAE5MgABOTQAATk2AAE5OQABOToAATk7AAE5PAABOT0AATk/AAE5QQABOUIAATlDAAE5RQABOUYAATmFAAE5hwABOYoAATmMAAE5jwABOZAAATmRAAE5kgABOZMAATmVAAE5lwABOZgAATmZAAE5mwABOZwAATmpAAE5qgABOasAATmtAAE57AABOe4AATnwAAE58gABOfUAATn2AAE59wABOfgAATn5AAE5+wABOf0AATn+AAE5/wABOgEAAToCAAE6QQABOkMAATpFAAE6RwABOkoAATpLAAE6TAABOk0AATpOAAE6UAABOlIAATpTAAE6VAABOlYAATpXAAE6lgABOpgAATqaAAE6nAABOp8AATqgAAE6oQABOqIAATqjAAE6pQABOqcAATqoAAE6qQABOqsAATqsAAE66wABOu0AATrvAAE68QABOvQAATr1AAE69gABOvcAATr4AAE6+gABOvwAATr9AAE6/gABOwAAATsBAAE7QAABO0IAATtEAAE7RgABO0kAATtKAAE7SwABO0wAATtNAAE7TwABO1EAATtSAAE7UwABO1UAATtWAAE7ewABO58AATvGAAE76gABO+0AATvvAAE78QABO/MAATv1AAE79wABO/gAATv7AAE8CAABPBcAATwZAAE8GwABPB0AATwfAAE8IQABPCMAATwlAAE8NAABPDcAATw6AAE8PQABPEAAATxDAAE8RgABPEkAATxLAAE8igABPIwAATyOAAE8kAABPJMAATyUAAE8lQABPJYAATyXAAE8mQABPJsAATycAAE8nQABPJ8AATygAAE83wABPOEAATzjAAE85QABPOgAATzpAAE86gABPOsAATzsAAE87gABPPAAATzxAAE88gABPPQAATz1AAE9NAABPTYAAT04AAE9OgABPT0AAT0+AAE9PwABPUAAAT1BAAE9QwABPUUAAT1GAAE9RwABPUkAAT1KAAE9iQABPYsAAT2OAAE9kAABPZMAAT2UAAE9lQABPZYAAT2XAAE9mQABPZsAAT2cAAE9nQABPZ8AAT2gAAE94wABPgcAAT4rAAE+TgABPnUAAT6VAAE+vAABPuMAAT8DAAE/JwABP0sAAT9NAAE/UAABP1IAAT9UAAE/VgABP1kAAT9cAAE/XgABP2AAAT9jAAE/ZQABP2cAAT9qAAE/bQABP24AAT9zAAE/gAABP4MAAT+FAAE/iAABP4sAAT+NAAE/sgABP9YAAT/9AAFAIQABQCQAAUAmAAFAKAABQCoAAUAsAAFALgABQC8AAUAyAAFAPwABQFIAAUBUAAFAVgABQFgAAUBaAAFAXAABQF4AAUBgAAFAYgABQGQAAUB3AAFAegABQH0AAUCAAAFAgwABQIYAAUCJAAFAjAABQI8AAUCSAAFAlAABQNMAAUDVAAFA2AABQNoAAUDdAAFA3gABQN8AAUDgAAFA4QABQOMAAUDlAAFA5gABQOcAAUDpAAFA6gABQPMAAUD0AAFA9gABQTUAAUE3AAFBOQABQTsAAUE+AAFBPwABQUAAAUFBAAFBQgABQUQAAUFGAAFBRwABQUgAAUFKAAFBSwABQYoAAUGMAAFBjwABQZEAAUGUAAFBlQABQZYAAUGXAAFBmAABQZoAAUGcAAFBnQABQZ4AAUGgAAFBoQABQaoAAUGtAAFBsAABQbIAAUG7AAFBvgABQcAAAUHCAAFCAQABQgMAAUIFAAFCBwABQgoAAUILAAFCDAABQg0AAUIOAAFCEAABQhIAAUITAAFCFAABQhYAAUIXAAFCVgABQlgAAUJbAAFCXQABQmAAAUJhAAFCYgABQmMAAUJkAAFCZgABQmgAAUJpAAFCagABQmwAAUJtAAFCdgABQncAAUJ5AAFCuAABQroAAUK8AAFCvgABQsEAAULCAAFCwwABQsQAAULFAAFCxwABQskAAULKAAFCywABQs0AAULOAAFDDQABQw8AAUMSAAFDFAABQxcAAUMYAAFDGQABQxoAAUMbAAFDHQABQx8AAUMgAAFDIQABQyMAAUMkAAFDMQABQzIAAUMzAAFDNQABQ3QAAUN2AAFDeAABQ3oAAUN9AAFDfgABQ38AAUOAAAFDgQABQ4MAAUOFAAFDhgABQ4cAAUOJAAFDigABQ8kAAUPLAAFDzQABQ88AAUPSAAFD0wABQ9QAAUPVAAFD1gABQ9gAAUPaAAFD2wABQ9wAAUPeAAFD3wABQ+wAAUPzAAFD9gABQ/gAAUP6AAFEAQABRAQAAUQHAAFECgABRAwAAUQZAAFEZAABRIcAAUSnAAFExwABRMkAAUTLAAFEzQABRM8AAUTSAAFE0wABRNQAAUTXAAFE2AABRNoAAUTbAAFE3QABROAAAUThAAFE4gABROUAAUTmAAFE6wABRPgAAUT9AAFE/wABRQEAAUUGAAFFCQABRQwAAUUOAAFFMwABRVcAAUV+AAFFogABRaUAAUWnAAFFqQABRasAAUWtAAFFrwABRbAAAUWzAAFFwAABRdEAAUXTAAFF1QABRdcAAUXZAAFF2wABRd0AAUXfAAFF4QABRfIAAUX1AAFF+AABRfsAAUX+AAFGAQABRgQAAUYHAAFGCgABRgwAAUZLAAFGTQABRk8AAUZRAAFGVAABRlUAAUZWAAFGVwABRlgAAUZaAAFGXAABRl0AAUZeAAFGYAABRmEAAUagAAFGogABRqQAAUamAAFGqQABRqoAAUarAAFGrAABRq0AAUavAAFGsQABRrIAAUazAAFGtQABRrYAAUb1AAFG9wABRvoAAUb8AAFG/wABRwAAAUcBAAFHAgABRwMAAUcFAAFHBwABRwgAAUcJAAFHCwABRwwAAUcZAAFHGgABRxsAAUcdAAFHXAABR14AAUdgAAFHYgABR2UAAUdmAAFHZwABR2gAAUdpAAFHawABR20AAUduAAFHbwABR3EAAUdyAAFHsQABR7MAAUe1AAFHtwABR7oAAUe7AAFHvAABR70AAUe+AAFHwAABR8IAAUfDAAFHxAABR8YAAUfHAAFIBgABSAgAAUgKAAFIDAABSA8AAUgQAAFIEQABSBIAAUgTAAFIFQABSBcAAUgYAAFIGQABSBsAAUgcAAFIWwABSF0AAUhfAAFIYQABSGQAAUhlAAFIZgABSGcAAUhoAAFIagABSGwAAUhtAAFIbgABSHAAAUhxAAFIsAABSLIAAUi0AAFItgABSLkAAUi6AAFIuwABSLwAAUi9AAFIvwABSMEAAUjCAAFIwwABSMUAAUjGAAFI6wABSQ8AAUk2AAFJWgABSV0AAUlfAAFJYQABSWMAAUllAAFJZwABSWgAAUlrAAFJeAABSYcAAUmJAAFJiwABSY0AAUmPAAFJkQABSZMAAUmVAAFJpAABSacAAUmqAAFJrQABSbAAAUmzAAFJtgABSbkAAUm7AAFJ+gABSfwAAUn+AAFKAAABSgMAAUoEAAFKBQABSgYAAUoHAAFKCQABSgsAAUoMAAFKDQABSg8AAUoQAAFKTwABSlEAAUpTAAFKVQABSlgAAUpZAAFKWgABSlsAAUpcAAFKXgABSmAAAUphAAFKYgABSmQAAUplAAFKpAABSqYAAUqoAAFKqgABSq0AAUquAAFKrwABSrAAAUqxAAFKswABSrUAAUq2AAFKtwABSrkAAUq6AAFK+QABSvsAAUr9AAFK/wABSwIAAUsDAAFLBAABSwUAAUsGAAFLCAABSwoAAUsLAAFLDAABSw4AAUsPAAFLTgABS1AAAUtSAAFLVAABS1cAAUtYAAFLWQABS1oAAUtbAAFLXQABS18AAUtgAAFLYQABS2MAAUtkAAFLowABS6UAAUunAAFLqQABS6wAAUutAAFLrgABS68AAUuwAAFLsgABS7QAAUu1AAFLtgA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BV0cAAVdJAAFXSwABV04AAVdPAAFXUAABV1EAAVdSAAFXVAABV1YAAVdXAAFXWAABV1oAAVdbAAFXmgABV5wAAVeeAAFXoAABV6MAAVekAAFXpQABV6YAAVenAAFXqQABV6sAAVesAAFXrQABV68AAVewAAFX7wABV/EAAVfzAAFX9QABV/gAAVf5AAFX+gABV/sAAVf8AAFX/gABWAAAAVgBAAFYAgABWAQAAVgFAAFYRAABWEYAAVhIAAFYSgABWE0AAVhOAAFYTwABWFAAAVhRAAFYUwABWFUAAVhWAAFYVwABWFkAAVhaAAFYmQABWJsAAVidAAFYnwABWKIAAVijAAFYpAABWKUAAVimAAFYqAABWKoAAVirAAFYrAABWK4AAVivAAFY1AABWPgAAVkfAAFZQwABWUYAAVlIAAFZSgABWUwAAVlOAAFZUAABWVEAAVlUAAFZYQABWXAAAVlyAAFZdAABWXYAAVl4AAFZegABWXwAAVl+AAFZjQABWZAAAVmTAAFZlgABWZkAAVmcAAFZnwABWaIAAVmkAAFZ4wABWeUAAVnnAAFZ6QABWewAAVntAAFZ7gABWe8AAVnwAAFZ8gABWfQAAVn1AAFZ9gABWfgAAVn5AAFaOAABWjoAAVo8AAFaPgABWkEAAVpCAAFaQwABWkQAAVpFAAFaRwABWkkAAVpKAAFaSwABWk0AAVpOAAFajQABWo8AAVqRAAFakwABWpYAAVqXAAFamAABWpkAAVqaAAFanAABWp4AAVqfAAFaoAABWqIAAVqjAAFa4gABWuQAAVrnAAFa6QABWuwAAVrtAAFa7gABWu8AAVrwAAFa8gABWvQAAVr1AAFa9gABWvgAAVr5AAFbOAABWzoAAVs8AAFbPgABW0EAAVtCAAFbQwABW0QAAVtFAAFbRwABW0kAAVtKAAFbSwABW00AAVtOAAFbjQABW48AAVuRAAFbkwABW5YAAVuXAAFbmAABW5kAAVuaAAFbnAABW54AAVufAAFboAABW6IAAVujAAFb4gABW+QAAVvmAAFb6AABW+sAAVvsAAFb7QABW+4AAVvvAAFb8QABW/MAAVv0AAFb9QABW/cAAVv4AAFcAQABXAIAAVwEAAFcQwABXEUAAVxHAAFcSQABXEwAAVxNAAFcTgABXE8AAVxQAAFcUgABXFQAAVxVAAFcVgABXFgAAVxZAAFcmAABXJoAAVycAAFcngABXKEAAVyiAAFcowABXKQAAVylAAFcpwABXKkAAVyqAAFcqwABXK0AAVyuAAFc7QABXO8AAVzyAAFc9AABXPcAAVz4AAFc+QABXPoAAVz7AAFc/QABXP8AAV0AAAFdAQABXQMAAV0EAAFdTwABXXIAAV2SAAFdsgABXbQAAV22AAFduAABXboAAV28AAFdvQABXb4AAV3BAAFdwgABXcQAAV3FAAFdxwABXckAAV3KAAFdywABXc4AAV3PAAFd2AABXeUAAV3qAAFd7AABXe4AAV3zAAFd9gABXfkAAV37AAFeIAABXkQAAV5rAAFejwABXpIAAV6UAAFelgABXpgAAV6aAAFenAABXp0AAV6gAAFerQABXr4AAV7AAAFewgABXsQAAV7GAAFeyAABXsoAAV7MAAFezgABXt8AAV7iAAFe5QABXugAAV7rAAFe7gABXvEAAV70AAFe9wABXvkAAV84AAFfOgABXzwAAV8+AAFfQQABX0IAAV9DAAFfRAABX0UAAV9HAAFfSQABX0oAAV9LAAFfTQABX04AAV+NAAFfjwABX5EAAV+TAAFflgABX5cAAV+YAAFfmQABX5oAAV+cAAFfngABX58AAV+gAAFfogABX6MAAV/iAAFf5AABX+cAAV/pAAFf7AABX+0AAV/uAAFf7wABX/AAAV/yAAFf9AABX/UAAV/2AAFf+AABX/kAAWAGAAFgBwABYAgAAWAKAAFgSQABYEsAAWBNAAFgTwABYFIAAWBTAAFgVAABYFUAAWBWAAFgWAABYFoAAWBbAAFgXAABYF4AAWBfAAFgngABYKAAAWCiAAFgpAABYKcAAWCoAAFgqQABYKoAAWCrAAFgrQABYK8AAWCwAAFgsQABYLMAAWC0AAFg8wABYPUAAWD3AAFg+QABYPwAAWD9AAFg/gABYP8AAWEAAAFhAgABYQQAAWEFAAFhBgABYQgAAWEJAAFhSAABYUoAAWFMAAFhTgABYVEAAWFSAAFhUwABYVQAAWFVAAFhVwABYVkAAWFaAAFhWwABYV0AAWFeAAFhnQABYZ8AAWGhAAFhowABYaYAAWGnAAFhqAABYakAAWGqAAFhrAABYa4AAWGvAAFhsAABYbIAAWGzAAFh2AABYfwAAWIjAAFiRwABYkoAAWJMAAFiTgABYlAAAWJSAAFiVAABYlUAAWJYAAFiZQABYnQAAWJ2AAFieAABYnoAAWJ8AAFifgABYoAAAWKCAAFikQABYpQAAWKXAAFimgABYp0AAWKgAAFiowABYqYAAWKoAAFi5wABYukAAWLrAAFi7QABYvAAAWLxAAFi8gABYvMAAWL0AAFi9gABYvgAAWL5AAFi+gABYvwAAWL9AAFjPAABYz4AAWNAAAFjQgABY0UAAWNGAAFjRwABY0gAAWNJAAFjSwABY00AAWNOAAFjTwABY1EAAWNSAAFjkQABY5MAAWOVAAFjlwABY5oAAWObAAFjnAABY50AAWOeAAFjoAABY6IAAWOjAAFjpAABY6YAAWOnAAFj5gABY+gAAWPrAAFj7QABY/AAAWPxAAFj8gABY/MAAWP0AAFj9gABY/gAAWP5AAFj+gABY/wAAWP9AAFkPAABZD4AAWRAAAFkQgABZEUAAWRGAAFkRwABZEgAAWRJAAFkSwABZE0AAWROAAFkTwABZFEAAWRSAAFkkQABZJMAAWSVAAFklwABZJoAAWSbAAFknAABZJ0AAWSeAAFkoAABZKIAAWSjAAFkpAABZKYAAWSnAAFk5gABZOgAAWTqAAFk7AABZO8AAWTwAAFk8QABZPIAAWTzAAFk9QABZPcAAWT4AAFk+QABZPsAAWT8AAFlBQABZQYAAWUIAAFlRwABZUkAAWVLAAFlTQABZU8AAWVQAAFlUQABZVIAAWVTAAFlVQABZVcAAWVYAAFlWQABZVsAAWVcAAFlmwABZZ0AAWWfAAFloQABZaMAAWWkAAFlpQABZaYAAWWnAAFlqQABZasAAWWsAAFlrQABZa8AAWWwAAFl7wABZfEAAWXzAAFl9QABZfcAAWX4AAFl+QABZfoAAWX7AAFl/QABZf8AAWYAAAFmAQABZgMAAWYEAAFmTwABZnIAAWaSAAFmsgABZrQAAWa2AAFmuAABZroAAWa8AAFmvQABZr4AAWbBAAFmwgABZsQAAWbFAAFmxwABZskAAWbKAAFmywABZs4AAWbPAAFm1AABZuEAAWbmAAFm6AABZuoAAWbvAAFm8gABZvUAAWb3AAFnHAABZ0AAAWdnAAFniwABZ44AAWeQAAFnkgABZ5QAAWeWAAFnmAABZ5kAAWecAAFnqQABZ7oAAWe8AAFnvgABZ8AAAWfCAAFnxAABZ8YAAWfIAAFnygABZ9sAAWfeAAFn4QABZ+QAAWfnAAFn6gABZ+0AAWfwAAFn8wABZ/UAAWg0AAFoNgABaDgAAWg6AAFoPQABaD4AAWg/AAFoQAABaEEAAWhDAAFoRQABaEYAAWhHAAFoSQABaEoAAWiJAAFoiwABaI0AAWiPAAFokgABaJMAAWiUAAFolQABaJYAAWiYAAFomgABaJsAAWicAAFongABaJ8AAWjeAAFo4AABaOMAAWjlAAFo6AABaOkAAWjqAAFo6wABaOwAAWjuAAFo8AABaPEAAWjyAAFo9AABaPUAAWkCAAFpAwABaQQAAWkGAAFpRQABaUcAAWlJAAFpSwABaU4AAWlPAAFpUAABaVEAAWlSAAFpVAABaVYAAWlXAAFpWAABaVoAAWlbAAFpmgABaZwAAWmeAAFpoAABaaMAAWmkAAFppQABaaYAAWmnAAFpqQABaasAAWmsAAFprQABaa8AAWmwAAFp7wABafEAAWnzAAFp9QABafgAAWn5AAFp+gABafsAAWn8AAFp/gABagAAAWoBAAFqAgABagQAAWoFAAFqRAABakYAAWpIAAFqSgABak0AAWpOAAFqTwABalAAAWpRAAFqUwABalUAAWpWAAFqVwABalkAAWpaAAFqmQABapsAAWqdAAFqnwABaqIAAWqjAAFqpAABaqUAAWqmAAFqqAABaqoAAWqrAAFqrAABaq4AAWqvAAFq1AABavgAAWsfAAFrQwABa0YAAWtIAAFrSgABa0wAAWtOAAFrUAABa1EAAWtUAAFrYQABa3AAAWtyAAFrdAABa3YAAWt4AAFregABa3wAAWt+AAFrjQABa5AAAWuTAAFrlgABa5kAAWucAAFrnwABa6IAAWukAAFr4wABa+UAAWvnAAFr6QABa+wAAWvtAAFr7gABa+8AAWvwAAFr8gABa/QAAWv1AAFr9gABa/gAAWv5AAFsOAABbDoAAWw8AAFsPgABbEEAAWxCAAFsQwABbEQAAWxFAAFsRwABbEkAAWxKAAFsSwABbE0AAWxOAAFsjQABbI8AAWyRAAFskwABbJYAAWyXAAFsmAABbJkAAWyaAAFsnAABbJ4AAWyfAAFsoAABbKIAAWyjAAFs4gABbOQAAWzmAAFs6AABbOsAAWzsAAFs7QABbO4AAWzvAAFs8QABbPMAAWz0AAFs9QABbPcAAWz4AAFtNwABbTkAAW07AAFtPQABbUAAAW1BAAFtQgABbUMAAW1EAAFtRgABbUgAAW1JAAFtSgABbUwAAW1NAAFtjAABbY4AAW2QAAFtkgABbZUAAW2WAAFtlwABbZgAAW2ZAAFtmwABbZ0AAW2eAAFtnwABbaEAAW2iAAFt4QABbeMAAW3lAAFt5wABbeoAAW3rAAFt7AABbe0AAW3uAAFt8AABbfIAAW3zAAFt9AABbfYAAW33AAFuQgABbmUAAW6FAAFupQABbqcAAW6pAAFuqwABbq0AAW6vAAFusAABbrEAAW60AAFutQABbrcAAW64AAFuugABbrwAAW69AAFuvgABbsEAAW7CAAFuxwABbtQAAW7ZAAFu2wABbt0AAW7iAAFu5QABbugAAW7qAAFvDwABbzMAAW9aAAFvfgABb4EAAW+DAAFvhQABb4cAAW+JAAFviwABb4wAAW+PAAFvnAABb60AAW+vAAFvsQABb7MAAW+1AAFvtwABb7kAAW+7AAFvvQABb84AAW/RAAFv1AABb9cAAW/aAAFv3QABb+AAAW/jAAFv5gABb+gAAXAnAAFwKQABcCsAAXAtAAFwMAABcDEAAXAyAAFwMwABcDQAAXA2AAFwOAABcDkAAXA6AAFwPAABcD0AAXB8AAFwfgABcIAAAXCCAAFwhQABcIYAAXCHAAFwiAABcIkAAXCLAAFwjQABcI4AAXCPAAFwkQABcJIAAXDRAAFw0wABcNYAAXDYAAFw2wABcNwAAXDdAAFw3gABcN8AAXDhAAFw4wABcOQAAXDlAAFw5wABcOgAAXD1AAFw9gABcPcAAXD5AAFxOAABcToAAXE8AAFxPgABcUEAAXFCAAFxQwABcUQAAXFFAAFxRwABcUkAAXFKAAFxSwABcU0AAXFOAAFxjQABcY8AAXGRAAFxkwABcZYAAXGXAAFxmAABcZkAAXGaAAFxnAABcZ4AAXGfAAFxoAABcaIAAXGjAAFx4gABceQAAXHmAAFx6AABcesAAXHsAAFx7QABce4AAXHvAAFx8QABcfMAAXH0AAFx9QABcfcAAXH4AAFyNwABcjkAAXI7AAFyPQABckAAAXJBAAFyQgABckMAAXJEAAFyRgABckgAAXJJAAFySgABckwAAXJNAAFyjAABco4AAXKQAAFykgABcpUAAXKWAAFylwABcpgAAXKZAAFymwABcp0AAXKeAAFynwABcqEAAXKiAAFyxwABcusAAXMSAAFzNgABczkAAXM7AAFzPQABcz8AAXNBAAFzQwABc0QAAXNHAAFzVAABc2MAAXNlAAFzZwABc2kAAXNrAAFzbQABc28AAXNxAAFzgAABc4MAAXOGAAFziQABc4wAAXOPAAFzkgABc5UAAXOXAAFz1gABc9gAAXPaAAFz3AABc98AAXPgAAFz4QABc+IAAXPjAAFz5QABc+cAAXPoAAFz6QABc+sAAXPsAAF0KwABdC0AAXQvAAF0MQABdDQAAXQ1AAF0NgABdDcAAXQ4AAF0OgABdDwAAXQ9AAF0PgABdEAAAXRBAAF0gAABdIIAAXSEAAF0hgABdIkAAXSKAAF0iwABdIwAAXSNAAF0jwABdJEAAXSSAAF0kwABdJUAAXSWAAF01QABdNcAAXTZAAF02wABdN4AAXTfAAF04AABdOEAAXTiAAF05AABdOYAAXTnAAF06AABdOoAAXTrAAF1KgABdSwAAXUuAAF1MAABdTMAAXU0AAF1NQABdTYAAXU3AAF1OQABdTsAAXU8AAF1PQABdT8AAXVAAAF1fwABdYEAAXWDAAF1hQABdYgAAXWJAAF1igABdYsAAXWMAAF1jgABdZAAAXWRAAF1kgABdZQAAXWVAAF11AABddYAAXXYAAF12gABdd0AAXXeAAF13wABdeAAAXXhAAF14wABdeUAAXXmAAF15wABdekAAXXqAAF2NQABdlgAAXZ4AAF2mAABdpoAAXacAAF2ngABdqAAAXaiAAF2owABdqQAAXanAAF2qAABdqoAAXarAAF2rQABdq8AAXawAAF2sQABdrQAAXa1AAF2vgABdssAAXbQAAF20gABdtQAAXbZAAF23AABdt8AAXbhAAF3BgABdyoAAXdRAAF3dQABd3gAAXd6AAF3fAABd34AAXeAAAF3ggABd4MAAXeGAAF3kwABd6QAAXemAAF3qAABd6oAAXesAAF3rgABd7AAAXeyAAF3tAABd8UAAXfIAAF3ywABd84AAXfRAAF31AABd9cAAXfaAAF33QABd98AAXgeAAF4IAABeCIAAXgkAAF4JwABeCgAAXgpAAF4KgABeCsAAXgtAAF4LwABeDAAAXgxAAF4MwABeDQAAXhzAAF4dQABeHcAAXh5AAF4fAABeH0AAXh+AAF4fwABeIAAAXiCAAF4hAABeIUAAXiGAAF4iAABeIkAAXjIAAF4ygABeM0AAXjPAAF40gABeNMAAXjUAAF41QABeNYAAXjYAAF42gABeNsAAXjcAAF43gABeN8AAXjsAAF47QABeO4AAXjwAAF5LwABeTEAAXkzAAF5NQABeTgAAXk5AAF5OgABeTsAAXk8AAF5PgABeUAAAXlBAAF5QgABeUQAAXlFAAF5hAABeYYAAXmIAAF5igABeY0AAXmOAAF5jwABeZAAAXmRAAF5kwABeZUAAXmWAAF5lwABeZkAAXmaAAF52QABedsAAXndAAF53wABeeIAAXnjAAF55AABeeUAAXnmAAF56AABeeoAAXnrAAF57AABee4AAXnvAAF6LgABejAAAXoyAAF6NAABejcAAXo4AAF6OQABejoAAXo7AAF6PQABej8AAXpAAAF6QQABekMAAXpEAAF6gwABeoUAAXqHAAF6iQABeowAAXqNAAF6jgABeo8AAXqQAAF6kgABepQAAXqVAAF6lgABepgAAXqZAAF6vgABeuIAAXsJAAF7LQABezAAAXsyAAF7NAABezYAAXs4AAF7OgABezsAAXs+AAF7SwABe1oAAXtcAAF7XgABe2AAAXtiAAF7ZAABe2YAAXtoAAF7dwABe3oAAXt9AAF7gAABe4MAAXuGAAF7iQABe4wAAXuOAAF7zQABe88AAXvRAAF70wABe9YAAXvXAAF72AABe9kAAXvaAAF73AABe94AAXvfAAF74AABe+IAAXvjAAF8IgABfCQAAXwmAAF8KAABfCsAAXwsAAF8LQABfC4AAXwvAAF8MQABfDMAAXw0AAF8NQABfDcAAXw4AAF8dwABfHkAAXx7AAF8fQABfIAAAXyBAAF8ggABfIMAAXyEAAF8hgABfIgAAXyJAAF8igABfIwAAXyNAAF8zAABfM4AAXzRAAF80wABfNYAAXzXAAF82AABfNkAAXzaAAF83AABfN4AAXzfAAF84AABfOIAAXzjAAF9IgABfSQAAX0mAAF9KAABfSsAAX0sAAF9LQABfS4AAX0vAAF9MQABfTMAAX00AAF9NQABfTcAAX04AAF9dwABfXkAAX17AAF9fQABfYAAAX2BAAF9ggABfYMAAX2EAAF9hgABfYgAAX2JAAF9igABfYwAAX2NAAF9zAA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BlGIAAZRjAAGUZAABlGUAAZRnAAGUaQABlGoAAZRrAAGUbQABlG4AAZStAAGUrwABlLEAAZSzAAGUtgABlLcAAZS4AAGUuQABlLoAAZS8AAGUvgABlL8AAZTAAAGUwgABlMMAAZUCAAGVBAABlQcAAZUJAAGVDAABlQ0AAZUOAAGVDwABlRAAAZUSAAGVFAABlRUAAZUWAAGVGAABlRkAAZVYAAGVWgABlVwAAZVeAAGVYQABlWIAAZVjAAGVZAABlWUAAZVnAAGVaQABlWoAAZVrAAGVbQABlW4AAZWtAAGVrwABlbEAAZWzAAGVtgABlbcAAZW4AAGVuQABlboAAZW8AAGVvgABlb8AAZXAAAGVwgABlcMAAZYCAAGWBAABlgYAAZYIAAGWCwABlgwAAZYNAAGWDgABlg8AAZYRAAGWEwABlhQAAZYVAAGWFwABlhgAAZYhAAGWIgABliQAAZZnAAGWiwABlq8AAZbSAAGW+QABlxkAAZdAAAGXZwABl4cAAZerAAGXzwABl9EAAZfUAAGX1gABl9gAAZfaAAGX3QABl+AAAZfiAAGX5AABl+cAAZfpAAGX6wABl+4AAZfxAAGX8gABl/sAAZgIAAGYCwABmA0AAZgQAAGYEwABmBUAAZg6AAGYXgABmIUAAZipAAGYrAABmK4AAZiwAAGYsgABmLQAAZi2AAGYtwABmLoAAZjHAAGY2gABmNwAAZjeAAGY4AABmOIAAZjkAAGY5gABmOgAAZjqAAGY7AABmP8AAZkCAAGZBQABmQgAAZkLAAGZDgABmREAAZkUAAGZFwABmRoAAZkcAAGZWwABmV0AAZlgAAGZYgABmWUAAZlmAAGZZwABmWgAAZlpAAGZawABmW0AAZluAAGZbwABmXEAAZlyAAGZewABmXwAAZl+AAGZvQABmb8AAZnBAAGZwwABmcYAAZnHAAGZyAABmckAAZnKAAGZzAABmc4AAZnPAAGZ0AABmdIAAZnTAAGaEgABmhQAAZoXAAGaGQABmhwAAZodAAGaHgABmh8AAZogAAGaIgABmiQAAZolAAGaJgABmigAAZopAAGaMgABmjcAAZo6AAGaPQABmj8AAZpIAAGaTwABmlIAAZpVAAGaWAABmloAAZp0AAGagAABmokAAZqMAAGajgABmpAAAZrPAAGa0QABmtMAAZrVAAGa2AABmtkAAZraAAGa2wABmtwAAZreAAGa4AABmuEAAZriAAGa5AABmuUAAZskAAGbJgABmykAAZsrAAGbLgABmy8AAZswAAGbMQABmzIAAZs0AAGbNgABmzcAAZs4AAGbOgABmzsAAZtEAAGbRQABm0cAAZuGAAGbiAABm4oAAZuMAAGbjwABm5AAAZuRAAGbkgABm5MAAZuVAAGblwABm5gAAZuZAAGbmwABm5wAAZvbAAGb3QABm+AAAZviAAGb5QABm+YAAZvnAAGb6AABm+kAAZvrAAGb7QABm+4AAZvvAAGb8QABm/IAAZv/AAGcAAABnAEAAZwDAAGcQgABnEQAAZxGAAGcSAABnEsAAZxMAAGcTQABnE4AAZxPAAGcUQABnFMAAZxUAAGcVQABnFcAAZxYAAGclwABnJkAAZycAAGcngABnKEAAZyiAAGcowABnKQAAZylAAGcpwABnKkAAZyqAAGcqwABnK0AAZyuAAGcywABnNgAAZzjAAGc5gABnOkAAZzsAAGc7wABnPEAAZz8AAGc/wABnQIAAZ0FAAGdCAABnQsAAZ0NAAGdGQABnTMAAZ1LAAGdlgABnbkAAZ3ZAAGd+QABnfsAAZ39AAGd/wABngEAAZ4EAAGeBQABngYAAZ4JAAGeCgABngwAAZ4NAAGeDwABnhIAAZ4TAAGeFAABnhcAAZ4YAAGeHQABnioAAZ4vAAGeMQABnjMAAZ44AAGeOwABnj4AAZ5AAAGeZQABnokAAZ6wAAGe1AABntcAAZ7ZAAGe2wABnt0AAZ7fAAGe4QABnuIAAZ7lAAGe8gABnwMAAZ8FAAGfBwABnwkAAZ8LAAGfDQABnw8AAZ8RAAGfEwABnyQAAZ8nAAGfKgABny0AAZ8wAAGfMwABnzYAAZ85AAGfPAABnz4AAZ99AAGffwABn4EAAZ+DAAGfhgABn4cAAZ+IAAGfiQABn4oAAZ+MAAGfjgABn48AAZ+QAAGfkgABn5MAAZ/SAAGf1AABn9YAAZ/YAAGf2wABn9wAAZ/dAAGf3gABn98AAZ/hAAGf4wABn+QAAZ/lAAGf5wABn+gAAaAnAAGgKQABoCwAAaAuAAGgMQABoDIAAaAzAAGgNAABoDUAAaA3AAGgOQABoDoAAaA7AAGgPQABoD4AAaBLAAGgTAABoE0AAaBPAAGgjgABoJAAAaCSAAGglAABoJcAAaCYAAGgmQABoJoAAaCbAAGgnQABoJ8AAaCgAAGgoQABoKMAAaCkAAGg4wABoOUAAaDnAAGg6QABoOwAAaDtAAGg7gABoO8AAaDwAAGg8gABoPQAAaD1AAGg9gABoPgAAaD5AAGhOAABoToAAaE8AAGhPgABoUEAAaFCAAGhQwABoUQAAaFFAAGhRwABoUkAAaFKAAGhSwABoU0AAaFOAAGhjQABoY8AAaGRAAGhkwABoZYAAaGXAAGhmAABoZkAAaGaAAGhnAABoZ4AAaGfAAGhoAABoaIAAaGjAAGh4gABoeQAAaHmAAGh6AABoesAAaHsAAGh7QABoe4AAaHvAAGh8QABofMAAaH0AAGh9QABofcAAaH4AAGiHQABokEAAaJoAAGijAABoo8AAaKRAAGikwABopUAAaKXAAGimQABopoAAaKdAAGiqgABorkAAaK7AAGivQABor8AAaLBAAGiwwABosUAAaLHAAGi1gABotkAAaLcAAGi3wABouIAAaLlAAGi6AABousAAaLtAAGjLAABoy4AAaMxAAGjMwABozYAAaM3AAGjOAABozkAAaM6AAGjPAABoz4AAaM/AAGjQAABo0IAAaNDAAGjggABo4QAAaOGAAGjiAABo4sAAaOMAAGjjQABo44AAaOPAAGjkQABo5MAAaOUAAGjlQABo5cAAaOYAAGj1wABo9kAAaPbAAGj3QABo+AAAaPhAAGj4gABo+MAAaPkAAGj5gABo+gAAaPpAAGj6gABo+wAAaPtAAGkLAABpC4AAaQxAAGkMwABpDYAAaQ3AAGkOAABpDkAAaQ6AAGkPAABpD4AAaQ/AAGkQAABpEIAAaRDAAGkggABpIQAAaSGAAGkiAABpIsAAaSMAAGkjQABpI4AAaSPAAGkkQABpJMAAaSUAAGklQABpJcAAaSYAAGk1wABpNkAAaTbAAGk3QABpOAAAaThAAGk4gABpOMAAaTkAAGk5gABpOgAAaTpAAGk6gABpOwAAaTtAAGlLAABpS4AAaUwAAGlMgABpTUAAaU2AAGlNwABpTgAAaU5AAGlOwABpT0AAaU+AAGlPwABpUEAAaVCAAGljQABpbAAAaXQAAGl8AABpfIAAaX0AAGl9gABpfgAAaX7AAGl/AABpf0AAaYAAAGmAQABpgMAAaYEAAGmBgABpgkAAaYKAAGmCwABpg4AAaYPAAGmGAABpiUAAaYqAAGmLAABpi4AAaYzAAGmNgABpjkAAaY7AAGmYAABpoQAAaarAAGmzwABptIAAabUAAGm1gABptgAAabaAAGm3AABpt0AAabgAAGm7QABpv4AAacAAAGnAgABpwQAAacGAAGnCAABpwoAAacMAAGnDgABpx8AAaciAAGnJQABpygAAacrAAGnLgABpzEAAac0AAGnNwABpzkAAad4AAGnegABp3wAAad+AAGngQABp4IAAaeDAAGnhAABp4UAAaeHAAGniQABp4oAAaeLAAGnjQABp44AAafNAAGnzwABp9EAAafTAAGn1gABp9cAAafYAAGn2QABp9oAAafcAAGn3gABp98AAafgAAGn4gABp+MAAagiAAGoJAABqCcAAagpAAGoLAABqC0AAaguAAGoLwABqDAAAagyAAGoNAABqDUAAag2AAGoOAABqDkAAahGAAGoSQABqEwAAahPAAGoUgABqFQAAahuAAGorQABqK8AAaixAAGoswABqLYAAai3AAGouAABqLkAAai6AAGovAABqL4AAai/AAGowAABqMIAAajDAAGpAgABqQQAAakGAAGpCAABqQsAAakMAAGpDQABqQ4AAakPAAGpEQABqRMAAakUAAGpFQABqRcAAakYAAGpVwABqVkAAalbAAGpXQABqWAAAalhAAGpYgABqWMAAalkAAGpZgABqWgAAalpAAGpagABqWwAAaltAAGprAABqa4AAamwAAGpsgABqbUAAam2AAGptwABqbgAAam5AAGpuwABqb0AAam+AAGpvwABqcEAAanCAAGqAQABqgMAAaoFAAGqBwABqgoAAaoLAAGqDAABqg0AAaoOAAGqEAABqhIAAaoTAAGqFAABqhYAAaoXAAGqPAABqmAAAaqHAAGqqwABqq4AAaqwAAGqsgABqrQAAaq2AAGquAABqrkAAaq8AAGqyQABqtgAAaraAAGq3AABqt4AAargAAGq4gABquQAAarmAAGq9QABqvgAAar7AAGq/gABqwEAAasEAAGrBwABqwoAAasMAAGrSwABq00AAatPAAGrUQABq1QAAatVAAGrVgABq1cAAatYAAGrWgABq1wAAatdAAGrXgABq2AAAathAAGroAABq6IAAaukAAGrpgABq6kAAauqAAGrqwABq6wAAautAAGrrwABq7EAAauyAAGrswABq7UAAau2AAGr9QABq/cAAav5AAGr+wABq/4AAav/AAGsAAABrAEAAawCAAGsBAABrAYAAawHAAGsCAABrAoAAawLAAGsSgABrEwAAaxPAAGsUQABrFQAAaxVAAGsVgABrFcAAaxYAAGsWgABrFwAAaxdAAGsXgABrGAAAaxhAAGsoAABrKIAAaykAAGspgABrKkAAayqAAGsqwABrKwAAaytAAGsrwABrLEAAayyAAGsswABrLUAAay2AAGs9QABrPcAAaz6AAGs/AABrP8AAa0AAAGtAQABrQIAAa0DAAGtBQABrQcAAa0IAAGtCQABrQsAAa0MAAGtKAABrWcAAa1pAAGtawABrW0AAa1wAAGtcQABrXIAAa1zAAGtdAABrXYAAa14AAGteQABrXoAAa18AAGtfQABrcgAAa3rAAGuCwABrisAAa4tAAGuLwABrjEAAa4zAAGuNgABrjcAAa44AAGuOwABrjwAAa4+AAGuPwABrkEAAa5EAAGuRQABrkYAAa5JAAGuSgABrk8AAa5cAAGuYQABrmMAAa5lAAGuagABrm0AAa5wAAGucgABrpcAAa67AAGu4gABrwYAAa8JAAGvCwABrw0AAa8PAAGvEQABrxMAAa8UAAGvFwABryQAAa81AAGvNwABrzkAAa87AAGvPQABrz8AAa9BAAGvQwABr0UAAa9WAAGvWQABr1wAAa9fAAGvYgABr2UAAa9oAAGvawABr24AAa9wAAGvrwABr7EAAa+zAAGvtQABr7gAAa+5AAGvugABr7sAAa+8AAGvvgABr8AAAa/BAAGvwgABr8QAAa/FAAGwBAABsAYAAbAIAAGwCgABsA0AAbAOAAGwDwABsBAAAbARAAGwEwABsBUAAbAWAAGwFwABsBkAAbAaAAGwWQABsFsAAbBeAAGwYAABsGMAAbBkAAGwZQABsGYAAbBnAAGwaQABsGsAAbBsAAGwbQABsG8AAbBwAAGwfQABsIAAAbCDAAGwhgABsIkAAbCLAAGwpQABsL8AAbD+AAGxAAABsQIAAbEEAAGxBwABsQgAAbEJAAGxCgABsQsAAbENAAGxDwABsRAAAbERAAGxEwABsRQAAbFTAAGxVQABsVcAAbFZAAGxXAABsV0AAbFeAAGxXwABsWAAAbFiAAGxZAABsWUAAbFmAAGxaAA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 + + + + + name + + + + ControllerSkin + Undefined + 4 + ControllerSkin + 1 + + + + + + 1 + gameSave + + + + Cheat + Undefined + 7 + Cheat + 1 + + + + + + 1 + games + + + + filename + + + + gameControllerInputType + + + + 1 + previewGame + + + + gameType + + + + deltaCoreInputMapping + + + + 1 + preferredLandscapeSkinByGames + + + + filename + + + + playerIndex + + + + supportedConfigurations + + + + code + + + + modifiedDate + + + + Game + Undefined + 5 + Game + 1 + + + + + + type + + + + name + + + + identifier + + + + modifiedDate + + + + 1 + preferredPortraitSkinByGames + + + + isStandard + + + + isEnabled + + + + index + + + + 1 + game + + + + identifier + + + + identifier + + + + identifier + + + + 1 + previewSaveState + + + + SaveState + Undefined + 1 + SaveState + 1 + + + + + + identifier + + + + modifiedDate + + + + name + + + + GameSave + Undefined + 3 + GameSave + 1 + + + + + + 1 + gameCollection + + + + artworkURL + + + + creationDate + + + + GameControllerInputMapping + Undefined + 8 + GameControllerInputMapping + 1 + + + + + + 1 + game + + + + gameType + + + + name + + + + identifier + + + + creationDate + + + + playedDate + + + + Mapping + Undefined + 2 + 1 + + + + + \ No newline at end of file diff --git a/External/Roxas b/External/Roxas index d91deff..f9a60e0 160000 --- a/External/Roxas +++ b/External/Roxas @@ -1 +1 @@ -Subproject commit d91deff1aee35061e162ba14b8d206ecbc2b1b0e +Subproject commit f9a60e0ec667a6643f4b0744bd0dfcbb7087e4e8 From 8b5ac435a6b284d7971fe251cc13ed4e885aeb1f Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 11 Feb 2020 16:32:20 -0800 Subject: [PATCH 011/105] Fixes assigning non-X controller skins to games on X-devices --- Delta/Settings/Settings.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Delta/Settings/Settings.swift b/Delta/Settings/Settings.swift index d31f110..d88e11b 100644 --- a/Delta/Settings/Settings.swift +++ b/Delta/Settings/Settings.swift @@ -238,8 +238,9 @@ extension Settings case .landscape: preferredControllerSkin = game.preferredLandscapeSkin } - if let controllerSkin = preferredControllerSkin, controllerSkin.supports(traits) + if let controllerSkin = preferredControllerSkin, let _ = controllerSkin.supportedTraits(for: traits) { + // Check if there are supported traits, which includes fallback traits for X <-> non-X devices. return controllerSkin } From 4ba2fa8d21d847ad4ea1594edbcaa8ff63001898 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 11 Feb 2020 16:34:57 -0800 Subject: [PATCH 012/105] Adds support for new Nintendo DS controller skin --- Cores/DSDeltaCore | 2 +- Cores/DeltaCore | 2 +- Delta/Database/Model/Human/ControllerSkin.swift | 5 +++++ Delta/Emulation/GameViewController.swift | 14 ++++++-------- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Cores/DSDeltaCore b/Cores/DSDeltaCore index 88037a5..23abf63 160000 --- a/Cores/DSDeltaCore +++ b/Cores/DSDeltaCore @@ -1 +1 @@ -Subproject commit 88037a5745399074cedb665f435564bb5d89ba91 +Subproject commit 23abf633559dac471fa3b38a3cfcc12ffa68ab6e diff --git a/Cores/DeltaCore b/Cores/DeltaCore index 5570db1..3e5331f 160000 --- a/Cores/DeltaCore +++ b/Cores/DeltaCore @@ -1 +1 @@ -Subproject commit 5570db1dfe95d6e08b0abaefe63b89a9cac211fc +Subproject commit 3e5331fd79663791bbe456499517047f8d75f4f2 diff --git a/Delta/Database/Model/Human/ControllerSkin.swift b/Delta/Database/Model/Human/ControllerSkin.swift index c63d2cd..3470836 100644 --- a/Delta/Database/Model/Human/ControllerSkin.swift +++ b/Delta/Database/Model/Human/ControllerSkin.swift @@ -91,6 +91,11 @@ extension ControllerSkin: ControllerSkinProtocol return self.controllerSkin?.gameScreenFrame(for: traits) } + public func screens(for traits: DeltaCore.ControllerSkin.Traits) -> [DeltaCore.ControllerSkin.Screen]? + { + return self.controllerSkin?.screens(for: traits) + } + public func aspectRatio(for traits: DeltaCore.ControllerSkin.Traits) -> CGSize? { return self.controllerSkin?.aspectRatio(for: traits) diff --git a/Delta/Emulation/GameViewController.swift b/Delta/Emulation/GameViewController.swift index 10f0f14..2c7017e 100644 --- a/Delta/Emulation/GameViewController.swift +++ b/Delta/Emulation/GameViewController.swift @@ -267,14 +267,12 @@ extension GameViewController // Lays out self.gameView, so we can pin self.sustainButtonsContentView to it without resulting in a temporary "cannot satisfy constraints". self.view.layoutIfNeeded() - let gameViewContainerView = self.gameView.superview! - self.controllerView.translucentControllerSkinOpacity = Settings.translucentControllerSkinOpacity self.sustainButtonsContentView = UIView(frame: CGRect(x: 0, y: 0, width: self.gameView.bounds.width, height: self.gameView.bounds.height)) self.sustainButtonsContentView.translatesAutoresizingMaskIntoConstraints = false self.sustainButtonsContentView.isHidden = true - self.view.insertSubview(self.sustainButtonsContentView, aboveSubview: gameViewContainerView) + self.view.insertSubview(self.sustainButtonsContentView, aboveSubview: self.gameView) let blurEffect = UIBlurEffect(style: .dark) let vibrancyEffect = UIVibrancyEffect(blurEffect: blurEffect) @@ -300,10 +298,10 @@ extension GameViewController vibrancyView.contentView.addSubview(self.sustainButtonsBackgroundView) // Auto Layout - self.sustainButtonsContentView.leadingAnchor.constraint(equalTo: gameViewContainerView.leadingAnchor).isActive = true - self.sustainButtonsContentView.trailingAnchor.constraint(equalTo: gameViewContainerView.trailingAnchor).isActive = true - self.sustainButtonsContentView.topAnchor.constraint(equalTo: gameViewContainerView.topAnchor).isActive = true - self.sustainButtonsContentView.bottomAnchor.constraint(equalTo: gameViewContainerView.bottomAnchor).isActive = true + self.sustainButtonsContentView.leadingAnchor.constraint(equalTo: self.gameView.leadingAnchor).isActive = true + self.sustainButtonsContentView.trailingAnchor.constraint(equalTo: self.gameView.trailingAnchor).isActive = true + self.sustainButtonsContentView.topAnchor.constraint(equalTo: self.gameView.topAnchor).isActive = true + self.sustainButtonsContentView.bottomAnchor.constraint(equalTo: self.gameView.bottomAnchor).isActive = true self.updateControllerSkin() self.updateControllers() @@ -729,7 +727,7 @@ extension GameViewController: SaveStatesViewControllerDelegate self.emulatorCore?.saveSaveState(to: saveState.fileURL) } - if let snapshot = self.gameView.snapshot(), let data = snapshot.pngData() + if let snapshot = self.emulatorCore?.videoManager.snapshot(), let data = snapshot.pngData() { do { From 38591bf374814cefc53d77fc788c91aad77be183 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 11 Feb 2020 16:36:21 -0800 Subject: [PATCH 013/105] Updates app version to 1.2b --- Delta.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index a75ef42..571769d 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -1302,11 +1302,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 17; + CURRENT_PROJECT_VERSION = 18; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.1.2; + MARKETING_VERSION = 1.2b; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; @@ -1328,11 +1328,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 17; + CURRENT_PROJECT_VERSION = 18; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.1.2; + MARKETING_VERSION = 1.2b; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DIMPACTOR"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; From d99b54f8ff41c04f0b5415c79bd3f5e4f0e98e04 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 11 Feb 2020 19:02:21 -0800 Subject: [PATCH 014/105] Fixes broken submodule reference --- External/Roxas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/External/Roxas b/External/Roxas index f9a60e0..08c92a5 160000 --- a/External/Roxas +++ b/External/Roxas @@ -1 +1 @@ -Subproject commit f9a60e0ec667a6643f4b0744bd0dfcbb7087e4e8 +Subproject commit 08c92a5d255e9418fe0450375e8403d40d7d48d6 From 9dc823f25c074d577cf31d344fb69322791d7b60 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Wed, 18 Mar 2020 13:17:44 -0700 Subject: [PATCH 015/105] Fixes missing GameType declarations with Xcode 11.4 --- Delta/Systems/System.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Delta/Systems/System.swift b/Delta/Systems/System.swift index 9f049a5..b43dbdc 100644 --- a/Delta/Systems/System.swift +++ b/Delta/Systems/System.swift @@ -83,7 +83,7 @@ extension System } } - var gameType: GameType { + var gameType: DeltaCore.GameType { switch self { case .nes: return .nes @@ -95,7 +95,7 @@ extension System } } - init?(gameType: GameType) + init?(gameType: DeltaCore.GameType) { switch gameType { @@ -110,7 +110,7 @@ extension System } } -extension GameType +extension DeltaCore.GameType { init?(fileExtension: String) { From 427ec9da73b077f50b8f85e58efdb4f18836f72c Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 23 Apr 2020 16:19:05 -0700 Subject: [PATCH 016/105] Fixes incorrect cheat code formatting --- Delta/Pause Menu/Cheats/EditCheatViewController.swift | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Delta/Pause Menu/Cheats/EditCheatViewController.swift b/Delta/Pause Menu/Cheats/EditCheatViewController.swift index 38f72f0..5527c78 100644 --- a/Delta/Pause Menu/Cheats/EditCheatViewController.swift +++ b/Delta/Pause Menu/Cheats/EditCheatViewController.swift @@ -183,9 +183,12 @@ extension EditCheatViewController if let superview = self.codeTextView.superview { let layoutMargins = superview.layoutMargins - self.codeTextView.textContainerInset = layoutMargins - - self.codeTextView.textContainer.lineFragmentPadding = 0 + if self.codeTextView.textContainerInset.left != layoutMargins.left + { + self.codeTextView.textContainerInset.left = layoutMargins.left // Don't change right inset because CheatTextView adjusts it as well. + self.codeTextView.textContainer.lineFragmentPadding = 0 + self.codeTextView.setNeedsLayout() + } } if self.isAppearing && !self.isPreviewing @@ -252,6 +255,8 @@ private extension EditCheatViewController self.tableView.endUpdates() } + + self.view.setNeedsLayout() } func updateSaveButtonState() From 35fe306c123c82e9cafcfecf1d391aea14276228 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 23 Apr 2020 16:52:29 -0700 Subject: [PATCH 017/105] Switches to melonDS-based core for DS games --- .gitmodules | 3 + Cores/DeltaCore | 2 +- Cores/GBADeltaCore | 2 +- Cores/GBCDeltaCore | 2 +- Cores/MelonDSDeltaCore | 1 + Cores/N64DeltaCore | 2 +- Cores/NESDeltaCore | 2 +- Cores/SNESDeltaCore | 2 +- Delta.xcodeproj/project.pbxproj | 12 +- Delta.xcworkspace/contents.xcworkspacedata | 3 + Delta/Emulation/GameViewController.swift | 46 +- .../Game Selection/GamesViewController.swift | 31 +- Delta/Systems/System.swift | 4 +- Podfile | 1 + Podfile.lock | 8 +- .../Bridge/MelonDSEmulatorBridge.h | 1 + .../MelonDSDeltaCore/MelonDSDeltaCore.h | 1 + .../MelonDSDeltaCore/Types/MelonDSTypes.h | 1 + .../MelonDSDeltaCore/melonDS/src/ARCodeList.h | 1 + .../MelonDSDeltaCore/melonDS/src/AREngine.h | 1 + .../MelonDSDeltaCore/melonDS/src/ARM.h | 1 + .../melonDS/src/ARMInterpreter.h | 1 + .../melonDS/src/ARMInterpreter_ALU.h | 1 + .../melonDS/src/ARMInterpreter_Branch.h | 1 + .../melonDS/src/ARMInterpreter_LoadStore.h | 1 + .../melonDS/src/ARM_InstrTable.h | 1 + .../MelonDSDeltaCore/melonDS/src/CRC32.h | 1 + .../MelonDSDeltaCore/melonDS/src/Config.h | 1 + .../MelonDSDeltaCore/melonDS/src/DMA.h | 1 + .../MelonDSDeltaCore/melonDS/src/FIFO.h | 1 + .../MelonDSDeltaCore/melonDS/src/GBACart.h | 1 + .../MelonDSDeltaCore/melonDS/src/GPU.h | 1 + .../MelonDSDeltaCore/melonDS/src/GPU2D.h | 1 + .../MelonDSDeltaCore/melonDS/src/GPU3D.h | 1 + .../melonDS/src/GPU3D_OpenGL_shaders.h | 1 + .../MelonDSDeltaCore/melonDS/src/NDS.h | 1 + .../MelonDSDeltaCore/melonDS/src/NDSCart.h | 1 + .../melonDS/src/OpenGLSupport.h | 1 + .../MelonDSDeltaCore/melonDS/src/Platform.h | 1 + .../MelonDSDeltaCore/melonDS/src/RTC.h | 1 + .../MelonDSDeltaCore/melonDS/src/SPI.h | 1 + .../MelonDSDeltaCore/melonDS/src/SPU.h | 1 + .../MelonDSDeltaCore/melonDS/src/Savestate.h | 1 + .../MelonDSDeltaCore/melonDS/src/Wifi.h | 1 + .../MelonDSDeltaCore/melonDS/src/WifiAP.h | 1 + .../melonDS/src/libui_sdl/PlatformConfig.h | 1 + .../MelonDSDeltaCore/melonDS/src/types.h | 1 + .../MelonDSDeltaCore/melonDS/src/version.h | 1 + .../MelonDSDeltaCore-umbrella.h | 1 + .../MelonDSDeltaCore.modulemap | 1 + .../Bridge/MelonDSEmulatorBridge.h | 1 + .../MelonDSDeltaCore/MelonDSDeltaCore.h | 1 + .../MelonDSDeltaCore/Types/MelonDSTypes.h | 1 + .../MelonDSDeltaCore.podspec.json | 53 + Pods/Manifest.lock | 8 +- Pods/Pods.xcodeproj/project.pbxproj | 12967 ++++++++-------- .../xcschemes/MelonDSDeltaCore.xcscheme | 67 + .../MelonDSDeltaCore/MelonDSDeltaCore-dummy.m | 5 + .../MelonDSDeltaCore-prefix.pch | 12 + .../MelonDSDeltaCore-umbrella.h | 19 + .../MelonDSDeltaCore.modulemap | 6 + .../MelonDSDeltaCore.xcconfig | 15 + ...lonDSDeltaCore-MelonDSDeltaCore-Info.plist | 24 + ...Bundle-melonDS-MelonDSDeltaCore-Info.plist | 24 + .../Pods-Delta/Pods-Delta-resources.sh | 2 + .../Pods-Delta/Pods-Delta.debug.xcconfig | 13 +- .../Pods-Delta/Pods-Delta.release.xcconfig | 13 +- 67 files changed, 7187 insertions(+), 6200 deletions(-) create mode 160000 Cores/MelonDSDeltaCore create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARCodeList.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/AREngine.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARM.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_ALU.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_Branch.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_LoadStore.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARM_InstrTable.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/CRC32.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Config.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/DMA.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/FIFO.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GBACart.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU2D.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU3D.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU3D_OpenGL_shaders.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/NDS.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/NDSCart.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/OpenGLSupport.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Platform.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/RTC.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/SPI.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/SPU.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Savestate.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Wifi.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/WifiAP.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/libui_sdl/PlatformConfig.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/types.h create mode 120000 Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/version.h create mode 120000 Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h create mode 120000 Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore.modulemap create mode 120000 Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h create mode 120000 Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h create mode 120000 Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h create mode 100644 Pods/Local Podspecs/MelonDSDeltaCore.podspec.json create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/MelonDSDeltaCore.xcscheme create mode 100644 Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-dummy.m create mode 100644 Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-prefix.pch create mode 100644 Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h create mode 100644 Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore.modulemap create mode 100644 Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore.xcconfig create mode 100644 Pods/Target Support Files/MelonDSDeltaCore/ResourceBundle-MelonDSDeltaCore-MelonDSDeltaCore-Info.plist create mode 100644 Pods/Target Support Files/MelonDSDeltaCore/ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist diff --git a/.gitmodules b/.gitmodules index fc1f8f7..6bf44d6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -25,3 +25,6 @@ [submodule "Cores/DSDeltaCore"] path = Cores/DSDeltaCore url = https://github.com/rileytestut/DSDeltaCore.git +[submodule "Cores/MelonDSDeltaCore"] + path = Cores/MelonDSDeltaCore + url = https://github.com/rileytestut/MelonDSDeltaCore.git diff --git a/Cores/DeltaCore b/Cores/DeltaCore index 3e5331f..4109613 160000 --- a/Cores/DeltaCore +++ b/Cores/DeltaCore @@ -1 +1 @@ -Subproject commit 3e5331fd79663791bbe456499517047f8d75f4f2 +Subproject commit 41096136bac3a034e6320bcba3a5c8849b63a298 diff --git a/Cores/GBADeltaCore b/Cores/GBADeltaCore index d4bc2da..e9327e4 160000 --- a/Cores/GBADeltaCore +++ b/Cores/GBADeltaCore @@ -1 +1 @@ -Subproject commit d4bc2da2b19dddb87610c62ea190c42029fdf3c2 +Subproject commit e9327e44dde45e8eef15d28895e50e69ce031f4b diff --git a/Cores/GBCDeltaCore b/Cores/GBCDeltaCore index a15e8ae..4313fa6 160000 --- a/Cores/GBCDeltaCore +++ b/Cores/GBCDeltaCore @@ -1 +1 @@ -Subproject commit a15e8ae6fee927fd95a8243231ee849eab31e1ef +Subproject commit 4313fa6670ab534e70d13532c2504761f849c432 diff --git a/Cores/MelonDSDeltaCore b/Cores/MelonDSDeltaCore new file mode 160000 index 0000000..93b68d5 --- /dev/null +++ b/Cores/MelonDSDeltaCore @@ -0,0 +1 @@ +Subproject commit 93b68d5f01acbbfacf59f35fa9ed68523d955f6a diff --git a/Cores/N64DeltaCore b/Cores/N64DeltaCore index 9f9b7b3..d180057 160000 --- a/Cores/N64DeltaCore +++ b/Cores/N64DeltaCore @@ -1 +1 @@ -Subproject commit 9f9b7b32503b0ed6bcc0065e7880e02c75859623 +Subproject commit d180057161e2fb378f36a71b461de49c6c879b7f diff --git a/Cores/NESDeltaCore b/Cores/NESDeltaCore index 04d17a5..195c89c 160000 --- a/Cores/NESDeltaCore +++ b/Cores/NESDeltaCore @@ -1 +1 @@ -Subproject commit 04d17a5400711e7551d07cd158ca856a0302a005 +Subproject commit 195c89cfe2dde99f10ccdcc503088c68d9a27478 diff --git a/Cores/SNESDeltaCore b/Cores/SNESDeltaCore index b90b603..e16b8aa 160000 --- a/Cores/SNESDeltaCore +++ b/Cores/SNESDeltaCore @@ -1 +1 @@ -Subproject commit b90b6030a74420152b071073c3a4b2fdbe82f5af +Subproject commit e16b8aa94593df3ee5e65ad6b748de25d59f3a60 diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 571769d..29744c4 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -126,13 +126,13 @@ BFD097211D3A01B8005A44C2 /* SaveStatesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3540041C5DA70400C1184C /* SaveStatesViewController.swift */; }; BFD1EF402336BD8800D197CF /* UIDevice+Processor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFD1EF3F2336BD8800D197CF /* UIDevice+Processor.swift */; }; BFDB3418219E4B1700595A62 /* SyncStatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDB3417219E4B1700595A62 /* SyncStatusViewController.swift */; }; + BFDCA1E6244EBAA900B8FBDB /* liblibDeSmuME.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BFDCA1E5244EBAA900B8FBDB /* liblibDeSmuME.a */; }; BFDD04F11D5E2C27002D450E /* GameCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */; }; BFE022A01F5B57FF0052D888 /* PopoverMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */; }; BFE4269E1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */; }; BFE56E1923EB7BE00014FECD /* UIImage+SymbolFallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE56E1823EB7BE00014FECD /* UIImage+SymbolFallback.swift */; }; BFE593CA21F3F8B7003412A6 /* GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593C921F3F8B7003412A6 /* GameSave.swift */; }; BFE593CC21F3F8C2003412A6 /* _GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593CB21F3F8C2003412A6 /* _GameSave.swift */; }; - BFEE507D23E7612300416151 /* liblibDeSmuME.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BF76BDE823E649150073702C /* liblibDeSmuME.a */; }; BFEE943D23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = BFEE943C23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel */; }; BFEF24F31F7DD4FD00454C62 /* SaveStateMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */; }; BFF6452E1F7CC5060056533E /* GameControllerInputMappingTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */; }; @@ -176,6 +176,7 @@ BF27CC8A1BC9FE4D00A20D89 /* Pods.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Pods.framework; path = "Pods/../build/Debug-appletvos/Pods.framework"; sourceTree = ""; }; BF27CC941BCB7B7A00A20D89 /* GameController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameController.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.0.sdk/System/Library/Frameworks/GameController.framework; sourceTree = DEVELOPER_DIR; }; BF2B98E51C97E32F00F6D57D /* SaveStatesCollectionHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SaveStatesCollectionHeaderView.swift; sourceTree = ""; }; + BF30AC25244E88BE00F0C744 /* libMelonDSDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libMelonDSDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; BF31878A1D489AAA00BD020D /* CheatValidator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheatValidator.swift; sourceTree = ""; }; BF34FA061CF0F510006624C7 /* EditCheatViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditCheatViewController.swift; sourceTree = ""; }; BF34FA101CF1899D006624C7 /* CheatTextView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheatTextView.swift; sourceTree = ""; }; @@ -252,7 +253,6 @@ BF713C0722499ED3004A1A2B /* Harmony.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Harmony.xcdatamodel; sourceTree = ""; }; BF71CF861FE90006001F1613 /* AppIconShortcutsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIconShortcutsViewController.swift; sourceTree = ""; }; BF71CF891FE904B1001F1613 /* GameTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GameTableViewCell.xib; sourceTree = ""; }; - BF76BDE823E649150073702C /* liblibDeSmuME.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liblibDeSmuME.a; sourceTree = BUILT_PRODUCTS_DIR; }; BF797A2C1C2D339F00F1A000 /* UILabel+FontSize.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UILabel+FontSize.swift"; sourceTree = ""; }; BF79966C224C075A009B094F /* N64DeltaCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = N64DeltaCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BF7AE8041C2E858400B1B5BC /* GridMenuViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GridMenuViewController.swift; sourceTree = ""; }; @@ -281,6 +281,7 @@ BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewControllerContextTransitioning+Conveniences.swift"; sourceTree = ""; }; BFD1EF3F2336BD8800D197CF /* UIDevice+Processor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDevice+Processor.swift"; sourceTree = ""; }; BFDB3417219E4B1700595A62 /* SyncStatusViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncStatusViewController.swift; sourceTree = ""; }; + BFDCA1E5244EBAA900B8FBDB /* liblibDeSmuME.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liblibDeSmuME.a; sourceTree = BUILT_PRODUCTS_DIR; }; BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameCollectionViewController.swift; sourceTree = ""; }; BFDE2CC6222DF345008038E0 /* Harmony_Dropbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Harmony_Dropbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFDE2CC7222DF345008038E0 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -320,11 +321,11 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BFEE507D23E7612300416151 /* liblibDeSmuME.a in Frameworks */, BF69FBA823E396860051BEEA /* libz.tbd in Frameworks */, BF69FBAA23E399AA0051BEEA /* CoreMotion.framework in Frameworks */, BF69FBA223E375A20051BEEA /* libVBA-M.a in Frameworks */, BFFDF04623E3D3A600931B96 /* libMupen64Plus.a in Frameworks */, + BFDCA1E6244EBAA900B8FBDB /* liblibDeSmuME.a in Frameworks */, BF69FBC923E3A8380051BEEA /* libNestopia.a in Frameworks */, 1FA4ABA79AB72914FE414A61 /* libPods-Delta.a in Frameworks */, BFFDF03F23E3C28A00931B96 /* libGambatte.a in Frameworks */, @@ -623,7 +624,8 @@ BF9F4FCD1AAD7B25004C9500 /* Frameworks */ = { isa = PBXGroup; children = ( - BF76BDE823E649150073702C /* liblibDeSmuME.a */, + BFDCA1E5244EBAA900B8FBDB /* liblibDeSmuME.a */, + BF30AC25244E88BE00F0C744 /* libMelonDSDeltaCore.a */, BFFDF04523E3D3A600931B96 /* libMupen64Plus.a */, BFFDF03D23E3C0F000931B96 /* libGambatte.a */, BFFDF03623E3BB2600931B96 /* libSnes9x.a */, @@ -933,6 +935,7 @@ "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.bundle", "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle", "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld", + "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/melonDS.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle", "${PODS_ROOT}/../External/Roxas/Roxas/RSTCollectionViewCell.xib", @@ -947,6 +950,7 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GBCDeltaCore.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Harmony.momd", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/melonDS.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/N64DeltaCore.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/NESDeltaCore.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RSTCollectionViewCell.nib", diff --git a/Delta.xcworkspace/contents.xcworkspacedata b/Delta.xcworkspace/contents.xcworkspacedata index fe30684..44ba284 100644 --- a/Delta.xcworkspace/contents.xcworkspacedata +++ b/Delta.xcworkspace/contents.xcworkspacedata @@ -22,6 +22,9 @@ + + diff --git a/Delta/Emulation/GameViewController.swift b/Delta/Emulation/GameViewController.swift index 2c7017e..f452190 100644 --- a/Delta/Emulation/GameViewController.swift +++ b/Delta/Emulation/GameViewController.swift @@ -192,6 +192,8 @@ class GameViewController: DeltaCore.GameViewController NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.didActivateGyro(with:)), name: GBA.didActivateGyroNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.didDeactivateGyro(with:)), name: GBA.didDeactivateGyroNotification, object: nil) + + NotificationCenter.default.addObserver(self, selector: #selector(GameViewController.emulationDidQuit(with:)), name: EmulatorCore.emulationDidQuitNotification, object: nil) } deinit @@ -327,10 +329,18 @@ extension GameViewController { case "showGamesViewController": let gamesViewController = (segue.destination as! UINavigationController).topViewController as! GamesViewController - gamesViewController.theme = .translucent - gamesViewController.activeEmulatorCore = self.emulatorCore - self.updateAutoSaveState() + if let emulatorCore = self.emulatorCore + { + gamesViewController.theme = .translucent + gamesViewController.activeEmulatorCore = emulatorCore + + self.updateAutoSaveState() + } + else + { + gamesViewController.theme = .opaque + } case "pause": @@ -383,9 +393,12 @@ extension GameViewController // A8 processors and earlier aren't powerful enough to run N64 games faster than 1x speed. pauseViewController.fastForwardItem = nil - case .ds?: - // Cheats and Fast Forwarding are not yet supported for DS games. + case .ds? where self.emulatorCore?.deltaCore == DS.core: + // Cheats are not supported by DeSmuME core. pauseViewController.cheatCodesItem = nil + + case .ds? where !UIDevice.current.hasA9ProcessorOrBetter: + // A8 processors and earlier aren't powerful enough to run DS games faster than 1x speed. pauseViewController.fastForwardItem = nil default: break @@ -648,6 +661,8 @@ extension GameViewController: SaveStatesViewControllerDelegate // Ensures game is non-nil and also a Game subclass guard let game = self.game as? Game else { return } + guard let emulatorCore = self.emulatorCore, emulatorCore.state != .stopped else { return } + // If pausedSaveState exists and has already been saved, don't update auto save state // This prevents us from filling our auto save state slots with the same save state let savedPausedSaveState = self.pausedSaveState?.isSaved ?? false @@ -1136,4 +1151,25 @@ private extension GameViewController { self.isGyroActive = false } + + @objc func emulationDidQuit(with notification: Notification) + { + DispatchQueue.main.async { + guard self.presentedViewController == nil else { return } + + // Wait for emulation to stop completely before performing segue. + var token: NSKeyValueObservation? + token = self.emulatorCore?.observe(\.state, options: [.initial]) { (emulatorCore, change) in + guard emulatorCore.state == .stopped else { return } + + DispatchQueue.main.async { + self.game = nil + self.performSegue(withIdentifier: "showGamesViewController", sender: nil) + } + + token?.invalidate() + } + } + } +} } diff --git a/Delta/Game Selection/GamesViewController.swift b/Delta/Game Selection/GamesViewController.swift index d64e6a6..4a84687 100644 --- a/Delta/Game Selection/GamesViewController.swift +++ b/Delta/Game Selection/GamesViewController.swift @@ -75,6 +75,7 @@ class GamesViewController: UIViewController NotificationCenter.default.addObserver(self, selector: #selector(GamesViewController.syncingDidStart(_:)), name: SyncCoordinator.didStartSyncingNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(GamesViewController.syncingDidFinish(_:)), name: SyncCoordinator.didFinishSyncingNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(GamesViewController.emulationDidQuit(_:)), name: EmulatorCore.emulationDidQuitNotification, object: nil) } } @@ -469,6 +470,23 @@ private extension GamesViewController let navigationController = SyncResultViewController.make(result: result) self.present(navigationController, animated: true, completion: nil) } + + func quitEmulation() + { + DispatchQueue.main.async { + self.activeEmulatorCore = nil + + if let viewControllers = self.pageViewController.viewControllers as? [GameCollectionViewController] + { + for collectionViewController in viewControllers + { + collectionViewController.activeEmulatorCore = nil + } + } + + self.theme = .opaque + } + } } //MARK: - Notifications - @@ -483,16 +501,12 @@ private extension GamesViewController { if deletedObjects.contains(game) { - DispatchQueue.main.async { - self.theme = .opaque - } + self.quitEmulation() } } else { - DispatchQueue.main.async { - self.theme = .opaque - } + self.quitEmulation() } } @@ -510,6 +524,11 @@ private extension GamesViewController self.showSyncFinishedToastView(result: result) } } + + @objc func emulationDidQuit(_ notification: Notification) + { + self.quitEmulation() + } } //MARK: - UIPageViewController - diff --git a/Delta/Systems/System.swift b/Delta/Systems/System.swift index b43dbdc..8b9ab6f 100644 --- a/Delta/Systems/System.swift +++ b/Delta/Systems/System.swift @@ -13,7 +13,7 @@ import GBADeltaCore import GBCDeltaCore import NESDeltaCore import N64DeltaCore -import DSDeltaCore +import MelonDSDeltaCore enum System: CaseIterable { @@ -79,7 +79,7 @@ extension System case .n64: return N64.core case .gbc: return GBC.core case .gba: return GBA.core - case .ds: return DS.core + case .ds: return MelonDS.core } } diff --git a/Podfile b/Podfile index bc1f3fd..c8b2ce4 100644 --- a/Podfile +++ b/Podfile @@ -18,6 +18,7 @@ target 'Delta' do pod 'GBCDeltaCore', :path => 'Cores/GBCDeltaCore' pod 'GBADeltaCore', :path => 'Cores/GBADeltaCore' pod 'DSDeltaCore', :path => 'Cores/DSDeltaCore' + pod 'MelonDSDeltaCore', :path => 'Cores/MelonDSDeltaCore' pod 'Roxas', :path => 'External/Roxas' pod 'Harmony', :path => 'External/Harmony' end \ No newline at end of file diff --git a/Podfile.lock b/Podfile.lock index bada546..0bfdd03 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -44,6 +44,8 @@ PODS: - Harmony/Harmony-Dropbox (0.1): - Roxas - SwiftyDropbox (~> 5.0.0) + - MelonDSDeltaCore (0.1): + - DeltaCore - N64DeltaCore (0.1): - DeltaCore - N64DeltaCore/RSP (= 0.1) @@ -76,6 +78,7 @@ DEPENDENCIES: - GBADeltaCore (from `Cores/GBADeltaCore`) - GBCDeltaCore (from `Cores/GBCDeltaCore`) - Harmony (from `External/Harmony`) + - MelonDSDeltaCore (from `Cores/MelonDSDeltaCore`) - N64DeltaCore (from `Cores/N64DeltaCore`) - NESDeltaCore (from `Cores/NESDeltaCore`) - Roxas (from `External/Roxas`) @@ -110,6 +113,8 @@ EXTERNAL SOURCES: :path: Cores/GBCDeltaCore Harmony: :path: External/Harmony + MelonDSDeltaCore: + :path: Cores/MelonDSDeltaCore N64DeltaCore: :path: Cores/N64DeltaCore NESDeltaCore: @@ -132,6 +137,7 @@ SPEC CHECKSUMS: GoogleToolboxForMac: 800648f8b3127618c1b59c7f97684427630c5ea3 GTMSessionFetcher: cea130bbfe5a7edc8d06d3f0d17288c32ffe9925 Harmony: 1978345dcf69ce6cf4c94c07405ebf01b7d6fe28 + MelonDSDeltaCore: d6e0953bd475a17848964b4fc48bf0e838617984 N64DeltaCore: fd4823c300feae8d93ceea8aca2024a0be13c1d5 NESDeltaCore: 41ab438dd78d51d4636aacb7d9a7336ea3d4728c Roxas: 1990039f843f5dc284918dc82375feb80020ef62 @@ -142,6 +148,6 @@ SPEC CHECKSUMS: SwiftyDropbox: 378b4425a2e8d0cb24c7b0f2e3af72bfbaaf1e73 ZIPFoundation: 249fa8890597086cd536bb2df5c9804d84e122b0 -PODFILE CHECKSUM: f31937de08bbf917d8b684c542c81b49e5fb72b5 +PODFILE CHECKSUM: f60a226b9a1a5137750584aa70be862b6caa110d COCOAPODS: 1.8.4 diff --git a/Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h b/Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h new file mode 120000 index 0000000..6e84fee --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h b/Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h new file mode 120000 index 0000000..852a84e --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h @@ -0,0 +1 @@ +../../../../../Cores/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h b/Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h new file mode 120000 index 0000000..5a3884d --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARCodeList.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARCodeList.h new file mode 120000 index 0000000..3f950d2 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARCodeList.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/ARCodeList.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/AREngine.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/AREngine.h new file mode 120000 index 0000000..0a453e9 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/AREngine.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/AREngine.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARM.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARM.h new file mode 120000 index 0000000..8b77d3f --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARM.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/ARM.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter.h new file mode 120000 index 0000000..97d2275 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/ARMInterpreter.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_ALU.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_ALU.h new file mode 120000 index 0000000..4c87f76 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_ALU.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/ARMInterpreter_ALU.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_Branch.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_Branch.h new file mode 120000 index 0000000..be3a2c4 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_Branch.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/ARMInterpreter_Branch.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_LoadStore.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_LoadStore.h new file mode 120000 index 0000000..8688d17 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARMInterpreter_LoadStore.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/ARMInterpreter_LoadStore.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARM_InstrTable.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARM_InstrTable.h new file mode 120000 index 0000000..a52b7e8 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/ARM_InstrTable.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/ARM_InstrTable.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/CRC32.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/CRC32.h new file mode 120000 index 0000000..c4e07b9 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/CRC32.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/CRC32.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Config.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Config.h new file mode 120000 index 0000000..e735ddb --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Config.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/Config.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/DMA.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/DMA.h new file mode 120000 index 0000000..4cb063a --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/DMA.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/DMA.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/FIFO.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/FIFO.h new file mode 120000 index 0000000..fa97e23 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/FIFO.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/FIFO.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GBACart.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GBACart.h new file mode 120000 index 0000000..0a8a2dd --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GBACart.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/GBACart.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU.h new file mode 120000 index 0000000..bf377a5 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/GPU.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU2D.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU2D.h new file mode 120000 index 0000000..5f8dfb1 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU2D.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/GPU2D.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU3D.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU3D.h new file mode 120000 index 0000000..46f8a21 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU3D.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/GPU3D.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU3D_OpenGL_shaders.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU3D_OpenGL_shaders.h new file mode 120000 index 0000000..bee0763 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/GPU3D_OpenGL_shaders.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/GPU3D_OpenGL_shaders.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/NDS.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/NDS.h new file mode 120000 index 0000000..b89946d --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/NDS.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/NDS.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/NDSCart.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/NDSCart.h new file mode 120000 index 0000000..e14b8c1 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/NDSCart.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/NDSCart.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/OpenGLSupport.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/OpenGLSupport.h new file mode 120000 index 0000000..3af4dfc --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/OpenGLSupport.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/OpenGLSupport.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Platform.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Platform.h new file mode 120000 index 0000000..1e98d7c --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Platform.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/Platform.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/RTC.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/RTC.h new file mode 120000 index 0000000..3ea4956 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/RTC.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/RTC.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/SPI.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/SPI.h new file mode 120000 index 0000000..d2e60ad --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/SPI.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/SPI.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/SPU.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/SPU.h new file mode 120000 index 0000000..9e0410f --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/SPU.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/SPU.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Savestate.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Savestate.h new file mode 120000 index 0000000..852abc1 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Savestate.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/Savestate.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Wifi.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Wifi.h new file mode 120000 index 0000000..2722305 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/Wifi.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/Wifi.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/WifiAP.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/WifiAP.h new file mode 120000 index 0000000..0de4814 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/WifiAP.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/WifiAP.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/libui_sdl/PlatformConfig.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/libui_sdl/PlatformConfig.h new file mode 120000 index 0000000..00d9532 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/libui_sdl/PlatformConfig.h @@ -0,0 +1 @@ +../../../../../../../Cores/MelonDSDeltaCore/melonDS/src/libui_sdl/PlatformConfig.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/types.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/types.h new file mode 120000 index 0000000..3c44794 --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/types.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/types.h \ No newline at end of file diff --git a/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/version.h b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/version.h new file mode 120000 index 0000000..c5e29fd --- /dev/null +++ b/Pods/Headers/Private/MelonDSDeltaCore/melonDS/src/version.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/melonDS/src/version.h \ No newline at end of file diff --git a/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h new file mode 120000 index 0000000..8d004be --- /dev/null +++ b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h @@ -0,0 +1 @@ +../../../Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h \ No newline at end of file diff --git a/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore.modulemap b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore.modulemap new file mode 120000 index 0000000..2e84e09 --- /dev/null +++ b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore.modulemap @@ -0,0 +1 @@ +../../../Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore.modulemap \ No newline at end of file diff --git a/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h new file mode 120000 index 0000000..6e84fee --- /dev/null +++ b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h \ No newline at end of file diff --git a/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h new file mode 120000 index 0000000..852a84e --- /dev/null +++ b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h @@ -0,0 +1 @@ +../../../../../Cores/MelonDSDeltaCore/MelonDSDeltaCore/MelonDSDeltaCore.h \ No newline at end of file diff --git a/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h new file mode 120000 index 0000000..5a3884d --- /dev/null +++ b/Pods/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h @@ -0,0 +1 @@ +../../../../../../Cores/MelonDSDeltaCore/MelonDSDeltaCore/Types/MelonDSTypes.h \ No newline at end of file diff --git a/Pods/Local Podspecs/MelonDSDeltaCore.podspec.json b/Pods/Local Podspecs/MelonDSDeltaCore.podspec.json new file mode 100644 index 0000000..9b22f7a --- /dev/null +++ b/Pods/Local Podspecs/MelonDSDeltaCore.podspec.json @@ -0,0 +1,53 @@ +{ + "name": "MelonDSDeltaCore", + "version": "0.1", + "summary": "Nintendo DS plug-in for Delta emulator.", + "description": "iOS framework that wraps melonDS to allow playing Nintendo DS games with Delta emulator.", + "homepage": "https://github.com/rileytestut/MelonDSDeltaCore", + "platforms": { + "ios": "12.0" + }, + "source": { + "git": "https://github.com/rileytestut/MelonDSDeltaCore.git" + }, + "authors": { + "Riley Testut": "riley@rileytestut.com" + }, + "social_media_url": "https://twitter.com/rileytestut", + "source_files": [ + "MelonDSDeltaCore/**/*.{swift}", + "MelonDSDeltaCore/MelonDSDeltaCore.h", + "MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.{h,mm}", + "MelonDSDeltaCore/Types/MelonDSTypes.{h,m}", + "melonDS/src/*.{h,hpp,cpp}", + "melonDS/src/libui_sdl/PlatformConfig.{h,cpp}" + ], + "exclude_files": [ + "melonDS/src/GPU3D_OpenGL.cpp", + "melonDS/src/OpenGLSupport.cpp" + ], + "public_header_files": [ + "MelonDSDeltaCore/Types/MelonDSTypes.h", + "MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h", + "MelonDSDeltaCore/MelonDSDeltaCore.h" + ], + "header_mappings_dir": "", + "resource_bundles": { + "melonDS": [ + "MelonDSDeltaCore/**/*.deltamapping", + "MelonDSDeltaCore/**/*.deltaskin", + "melonDS/romlist.bin" + ] + }, + "dependencies": { + "DeltaCore": [ + + ] + }, + "xcconfig": { + "HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}\" \"$(PODS_ROOT)/Headers/Private/MelonDSDeltaCore/melonDS/src\"", + "USER_HEADER_SEARCH_PATHS": "\"${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header\"", + "GCC_PREPROCESSOR_DEFINITIONS": "STATIC_LIBRARY=1", + "GCC_OPTIMIZATION_LEVEL": "fast" + } +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index bada546..0bfdd03 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -44,6 +44,8 @@ PODS: - Harmony/Harmony-Dropbox (0.1): - Roxas - SwiftyDropbox (~> 5.0.0) + - MelonDSDeltaCore (0.1): + - DeltaCore - N64DeltaCore (0.1): - DeltaCore - N64DeltaCore/RSP (= 0.1) @@ -76,6 +78,7 @@ DEPENDENCIES: - GBADeltaCore (from `Cores/GBADeltaCore`) - GBCDeltaCore (from `Cores/GBCDeltaCore`) - Harmony (from `External/Harmony`) + - MelonDSDeltaCore (from `Cores/MelonDSDeltaCore`) - N64DeltaCore (from `Cores/N64DeltaCore`) - NESDeltaCore (from `Cores/NESDeltaCore`) - Roxas (from `External/Roxas`) @@ -110,6 +113,8 @@ EXTERNAL SOURCES: :path: Cores/GBCDeltaCore Harmony: :path: External/Harmony + MelonDSDeltaCore: + :path: Cores/MelonDSDeltaCore N64DeltaCore: :path: Cores/N64DeltaCore NESDeltaCore: @@ -132,6 +137,7 @@ SPEC CHECKSUMS: GoogleToolboxForMac: 800648f8b3127618c1b59c7f97684427630c5ea3 GTMSessionFetcher: cea130bbfe5a7edc8d06d3f0d17288c32ffe9925 Harmony: 1978345dcf69ce6cf4c94c07405ebf01b7d6fe28 + MelonDSDeltaCore: d6e0953bd475a17848964b4fc48bf0e838617984 N64DeltaCore: fd4823c300feae8d93ceea8aca2024a0be13c1d5 NESDeltaCore: 41ab438dd78d51d4636aacb7d9a7336ea3d4728c Roxas: 1990039f843f5dc284918dc82375feb80020ef62 @@ -142,6 +148,6 @@ SPEC CHECKSUMS: SwiftyDropbox: 378b4425a2e8d0cb24c7b0f2e3af72bfbaaf1e73 ZIPFoundation: 249fa8890597086cd536bb2df5c9804d84e122b0 -PODFILE CHECKSUM: f31937de08bbf917d8b684c542c81b49e5fb72b5 +PODFILE CHECKSUM: f60a226b9a1a5137750584aa70be862b6caa110d COCOAPODS: 1.8.4 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index f0a68d7..fe92369 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -40,1671 +40,1744 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 001067059F900FD4F276F98ABA47822C /* ColorBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BBA1A4FC53D2DE892DE2B5AB5226E8B /* ColorBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0023451255D0B6A96551C6491BE4CB73 /* ConfigDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 09764ED9B10646101C0CA4C1EC479B47 /* ConfigDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 005390FF8907FBAF4496EC51AA641D1F /* ftttdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = 1340B180649533E638F85761755DDEFC /* ftttdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 007BBAFEFCEE96B7DDF8EFA8934DEC0C /* ftbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = DCA611BC3AFEC2780F5ED5167FEFBACF /* ftbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 001067059F900FD4F276F98ABA47822C /* ColorBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D0EF9DC873BCE8C132664936AA4D2C /* ColorBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0023451255D0B6A96551C6491BE4CB73 /* ConfigDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = A590F12D65E6986C2D6F38990BFE02DD /* ConfigDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 005390FF8907FBAF4496EC51AA641D1F /* ftttdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B7D93006047AEA1B2086CF5FEC0FAEC /* ftttdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 007BBAFEFCEE96B7DDF8EFA8934DEC0C /* ftbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = 601F63C6825CC3B6550C9C4169033152 /* ftbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; 00808122820CCB7D640A23AF2F851D96 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6C874D560C2ECE9A78595318F449292 /* Notifications.swift */; }; - 00CD0FD425B91AE7BB08048D06C70828 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B55404E8B2117F5FA8444F1ADD1A5039 /* GameViewController.swift */; }; + 00CD0FD425B91AE7BB08048D06C70828 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50CB8263181606A93C7C4DB62B954BCC /* GameViewController.swift */; }; 00D6A91F2372896AFCBADBB569CB61B2 /* GTLRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 9209A157558D6C7A57364B029B93BF01 /* GTLRUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 011A7D5944D78BBDB6D70E337DF496B9 /* UITableViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = D5918BE30019D1A9AFEAA94298952245 /* UITableViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 011C0272A367FAF487C0387072D80C35 /* sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B55E01B937143BE70ADC92C259EA847 /* sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01A810DA28D4CD0190DB127527310019 /* Context.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2A2F8E82B85B6C622F315EBC51F857CC /* Context.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 01B175F9FA772FCB44596F79F8D00880 /* pure_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = 85384C51860DF6A3AB223E1B8439C471 /* pure_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 011A7D5944D78BBDB6D70E337DF496B9 /* UITableViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DABB5ACFBF2E1DA35CD42F620E46F1 /* UITableViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 011C0272A367FAF487C0387072D80C35 /* sound.h in Headers */ = {isa = PBXBuildFile; fileRef = CC08FCCCC5D573865D7ADF9FB0838E1D /* sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 01A810DA28D4CD0190DB127527310019 /* Context.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 108D3937640AD5EF672C23E5C9F1D052 /* Context.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 01B175F9FA772FCB44596F79F8D00880 /* pure_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = A24C851DBA65EF8E8469317673E6CCF4 /* pure_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 01BA691B21BFCA4E9DD73F0D1DE67D2B /* SwiftyDropbox-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AE215D47AD4C3E4C2C354C0C591C34C /* SwiftyDropbox-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01D25C020EDD6D8936111118CDB7CFA3 /* VertexArray.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 784FA935740E152532499A73DA5AA3DB /* VertexArray.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 02088785CF10C92191BD4C2A65A4A4EE /* gb_cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D0E61C75D78DD7A729364010BDBB106 /* gb_cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02619B61469E1C06E2A30FF166068583 /* Combiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9FF916A03FC9114DF6807EC4AE2F131C /* Combiner.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0268FE03E18EFF693689E074F11B96C1 /* opengl_Attributes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 092D5916BAD725E2BD181241814AD72A /* opengl_Attributes.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 01D25C020EDD6D8936111118CDB7CFA3 /* VertexArray.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8E28B73D51B4BAB2720A6765199517D2 /* VertexArray.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 02088785CF10C92191BD4C2A65A4A4EE /* gb_cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F8AB3F41F84C94BBEED8C22E4E61BC /* gb_cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 02619B61469E1C06E2A30FF166068583 /* Combiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0275BCD590CD9EDAE776A4F66B072CD5 /* Combiner.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0268FE03E18EFF693689E074F11B96C1 /* opengl_Attributes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F42E220EA589F02ED66B2844BC537B1B /* opengl_Attributes.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 02727D92764378FFAED7FA05551AB810 /* UsersCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F53A98CDF1BC90A1B45D603F7DC3BC7F /* UsersCommon.swift */; }; 02D9C3D0F0992ED6738D080A0E1CC9E1 /* GTLRFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = 947D4308D4F2D06F37BC4881F1637F48 /* GTLRFramework.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 033870A05FAC3AAD229C5B42B6664AB5 /* readwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = BC60B5824BD4DA2AB25BA85A4C586886 /* readwrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 03537729FA84F09053DE494116B627D6 /* NstBoardJalecoSs88006.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2446BE6FAF88E2295DA4D857C1DC7C16 /* NstBoardJalecoSs88006.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 03798D6E6E597C6AFF6054A3EB904E8B /* NstBoardBmc15in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F81D2A992DCD611FF9C080137C990E31 /* NstBoardBmc15in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0413BC0701D41DE3070F47C36421EF7F /* NstBoardBmcSuper700in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D18007DF21DF9CDE2EA3A14D00C050DA /* NstBoardBmcSuper700in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0418874BC3FB8854951251864FB63C4E /* NstBoardIremH3001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 456C9F03B0C75358971F5599710FB4AC /* NstBoardIremH3001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0479E96052F30333A5AE51A1A5DD22C3 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 222369BCAE458E6A21F1C9AEE03983ED /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 04FA93674AA0B4947CA3DC85196D9EAC /* NstBoardBandai24c0x.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 316C97172E998626A782DC7AB8C5416C /* NstBoardBandai24c0x.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 05013F5C3F8897B02CAC065EF3189E58 /* RSTRelationshipPreservingMergePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DEB79CC55673435872F4AC4127BD0B0 /* RSTRelationshipPreservingMergePolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0514955DC0F673DF12A1317127CA45B3 /* Sound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2BCCA563115C1ABD0F6BE0FC0B3CE00B /* Sound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 052787144BE4266A8166E4B0DF4ACCA3 /* dummy_input.h in Headers */ = {isa = PBXBuildFile; fileRef = 83189ADFB9F73F46FCE23B3CE9012A77 /* dummy_input.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 053DB492720A3409C50E148E4AE4E0F1 /* cart_rom.h in Headers */ = {isa = PBXBuildFile; fileRef = BA46D0D247C2A97E0EBAEF9B67F430BF /* cart_rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 05D3406A9CDB6F3CA3BA42733AD9B486 /* Sleep.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 33B4914FDB89C5B28445FE64AA86085E /* Sleep.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 05E346049D925B2F24BFD812BB16EACE /* TextureFilters_hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 619F66C6C65A42C014C9700FAB9316F8 /* TextureFilters_hq4x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 064F0446DD0F453314D4002599D238F5 /* RSTCellContentPrefetchingDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EDEFED9C09EB37D2B09A2EE84A2BA70 /* RSTCellContentPrefetchingDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 066C91AF87F745BB782958FD99EB410B /* writepng.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C3466A9256511834DC5E817CC21AE91 /* writepng.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 067C84CE3338DB36FF1EC1A0D0D1A63F /* initstate.h in Headers */ = {isa = PBXBuildFile; fileRef = 173C3BCDE823B84D23477806EC2CF1EB /* initstate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 069E1D48DD81FE5B6A827810AD64B3F3 /* MFiGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6794551744F79F117DF19850F503283 /* MFiGameController.swift */; }; - 06DC2503AAF54FB4B5D3B4606EC66F81 /* UploadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6768756BD63AFB81ABEB6934A427CA39 /* UploadRecordsOperation.swift */; }; - 06E4B39B70500AB74C837D9F65505FE2 /* WavFile.h in Headers */ = {isa = PBXBuildFile; fileRef = D8E275522B55AF9B007FC628DA27411C /* WavFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 06F04214E1DFA5C3662A6901F65DD3F6 /* inputgetter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FD0F2986CF92C82ADF825EBEADF3727 /* inputgetter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 033870A05FAC3AAD229C5B42B6664AB5 /* readwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9403FE981B76C994D3645B33292EE8 /* readwrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 03537729FA84F09053DE494116B627D6 /* NstBoardJalecoSs88006.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EFDB6C6F57F2A3D44F48F431F3C13B71 /* NstBoardJalecoSs88006.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 03798D6E6E597C6AFF6054A3EB904E8B /* NstBoardBmc15in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5D7960122A08AC82F9286C7A2E2275F2 /* NstBoardBmc15in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0413BC0701D41DE3070F47C36421EF7F /* NstBoardBmcSuper700in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5B4B6B605F69B9997410194A1E0CB31D /* NstBoardBmcSuper700in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0418874BC3FB8854951251864FB63C4E /* NstBoardIremH3001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83F4160DB27DAF789E0C84F4BE223EAD /* NstBoardIremH3001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0479E96052F30333A5AE51A1A5DD22C3 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 55A7E5964AAB52C30CA7C4233CDB81F1 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04FA93674AA0B4947CA3DC85196D9EAC /* NstBoardBandai24c0x.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75A75028AFBA185D5D391D73DC4FE6AB /* NstBoardBandai24c0x.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 05013F5C3F8897B02CAC065EF3189E58 /* RSTRelationshipPreservingMergePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BECDD49D8123BEDD18D8163C335A153 /* RSTRelationshipPreservingMergePolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0514955DC0F673DF12A1317127CA45B3 /* Sound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8AE46FAE84F979857B31ACDC50F71617 /* Sound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 052787144BE4266A8166E4B0DF4ACCA3 /* dummy_input.h in Headers */ = {isa = PBXBuildFile; fileRef = FB50DB0D94A17BD483732F8CF157CACE /* dummy_input.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 053DB492720A3409C50E148E4AE4E0F1 /* cart_rom.h in Headers */ = {isa = PBXBuildFile; fileRef = E98E9898FE20472841A8D1A0EF9806EF /* cart_rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 05D3406A9CDB6F3CA3BA42733AD9B486 /* Sleep.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4A2ED9639F26522F182428771C311F1A /* Sleep.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 05E346049D925B2F24BFD812BB16EACE /* TextureFilters_hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61394348571E8373817FFE9C2319D511 /* TextureFilters_hq4x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 064F0446DD0F453314D4002599D238F5 /* RSTCellContentPrefetchingDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F361E120BFFD12C4731934DEC8344968 /* RSTCellContentPrefetchingDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 066C91AF87F745BB782958FD99EB410B /* writepng.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A4C76DED9C21C388F39532BDFE1609 /* writepng.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 067C84CE3338DB36FF1EC1A0D0D1A63F /* initstate.h in Headers */ = {isa = PBXBuildFile; fileRef = BBF6A7EF37190036ACC153A560EC7279 /* initstate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 069E1D48DD81FE5B6A827810AD64B3F3 /* MFiGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0FE60C5CC43E6BEE71A9295033B18F2 /* MFiGameController.swift */; }; + 06DC2503AAF54FB4B5D3B4606EC66F81 /* UploadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A684B9BC0FD9B61CE70469E6CF6BA3C /* UploadRecordsOperation.swift */; }; + 06E4B39B70500AB74C837D9F65505FE2 /* WavFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 55871AB19F8B639CFD102F69EAED1E93 /* WavFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 06F04214E1DFA5C3662A6901F65DD3F6 /* inputgetter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C5BAA938FFA460E1B80ECB271C8B9D9 /* inputgetter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 07061CB34749ECA222E5A23CC2437521 /* GTLRBatchQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = B06418EA2C5657C3621FE94DE245B06B /* GTLRBatchQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 07498127BC05CF69795D53A3D8EB9340 /* Thread.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 90E20CF10E66ADE35B580C23C72D76A4 /* Thread.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 07B07C5C1845808BAC8BA53FA149C192 /* L3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 83DAD8759111F18B4EDD79709EA9C168 /* L3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07498127BC05CF69795D53A3D8EB9340 /* Thread.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C4B900A4DF59414221BA4B0965A47C7C /* Thread.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 07B07C5C1845808BAC8BA53FA149C192 /* L3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B7E4CE889EFFA5F1F5DAF6C3BD013A /* L3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 07BB377F31975D34EB8CCC8C3E05597F /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 792056404E543D00399F5986E8B3812F /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 07DF414393A0265559B74FF88238011A /* opengl_GLInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2DA2D2C771F4634211A5B88321499576 /* opengl_GLInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 08686CCC2A05E5818FECBD202DD69628 /* dummy_rsp.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0B0C7FCCE7AFC841BEE7048A093B70 /* dummy_rsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 088166778CBF92A59C6AEA8158CB7B56 /* ObjectHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = A37542A2D1F6B0496F72D1B87245F461 /* ObjectHandle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08CBBE506F5F9C4F6B5FBA173182B627 /* NstBoardBtlDragonNinja.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9D7F4E7EB78574E9BE5E912032A3DFF /* NstBoardBtlDragonNinja.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 08DB3EE7795392A4AD6CDA6911C4ADE8 /* NstBoardTaitoTc0190fmcPal16r4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DB916A39387B7212EE06E2DA467A8D51 /* NstBoardTaitoTc0190fmcPal16r4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0930988FAA51B3BFEFDDE01D83611CFE /* cheat.h in Headers */ = {isa = PBXBuildFile; fileRef = 28A32492091FA65B2E25F38BDB5EE070 /* cheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09317AE820EE6AC27E5564E6830A6B2B /* glsl_CombinerInputs.h in Headers */ = {isa = PBXBuildFile; fileRef = F2257CE5C9B676C063600BAA94CA562D /* glsl_CombinerInputs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 093A5EF57A260B6E4066AA6FEFA72B0B /* freetype.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DD54C4B2A034B3E5694E1C6C3916D18 /* freetype.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 095ECDF5BCBCCC825E489471C3556732 /* RSTLoadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 453A43AE3933FBE73C478E25DB5E476A /* RSTLoadOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 09712513CDD56B9AD1082FD253B210B0 /* TxFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 320B83F85351687CBC80A3C6FC74440B /* TxFilter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 09A56050F738852C24E48CAB1A12327F /* NstBoardKonamiVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D98EC38E106371722A01A73B3CD4D54B /* NstBoardKonamiVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 09F83B8522313DF122E91C5E908CC256 /* dummy_video.h in Headers */ = {isa = PBXBuildFile; fileRef = 17AE63368464F283CA60EB477B2EAC1B /* dummy_video.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09FC171FD71744C6F47D4CC3341BF102 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 926DE74AEC8B4A89CE303E7D15837382 /* xxhash.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0A3FA8250DCAA57E611E6433F084CE11 /* NstBoardFujiya.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5233AE6CB42C097DA937081AB4814A39 /* NstBoardFujiya.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A7F43CFFA49DD8651630CD5B766D2A3 /* NstImage.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E79FC4B64B0151C5D97016FE705608F2 /* NstImage.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A82B6C9EC4EA09A0C213ABAE1E08E9B /* FrameBufferInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D654A5B901E387BCEA877A4F4B1FC31 /* FrameBufferInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0AA09DE9241869ECCCC26D4E11F357FF /* GBCEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AE7C6AEDB1B177BEA97EAFF75DCDAF4 /* GBCEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0AE2AA9CFBAB73BA390B8AB2BD339DCC /* SoundFileReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95B34037E8B652335969759E49B0F3B4 /* SoundFileReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0AE68C487359922B30E80D82CD556435 /* NstBoardBmcSuperVision16in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B139C8BFA41616549DEEAA545317F7F /* NstBoardBmcSuperVision16in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0AE7EA1277618FFEC475AF5B709DE97C /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = 3940CE8EE2A18C0E5B6BE8394499EEB9 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0B12EDB39B8EDFD03B311F9733108E6D /* opengl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E80A2591A2367572B4E5468FB72C0B0 /* opengl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0B8D0DF76E87D68894A0DC0C4DEF1911 /* KeyboardGameController.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 8DC46E7D667B05E526897085BDA6A68F /* KeyboardGameController.deltamapping */; }; - 0B984B28675905FE99D500B13967A582 /* SNESEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 146B44A557A13EB3BBE8A5C53D94BC9E /* SNESEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 07DF414393A0265559B74FF88238011A /* opengl_GLInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7FA66BA44508C8E1B3BC97E5590E2EC /* opengl_GLInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 08686CCC2A05E5818FECBD202DD69628 /* dummy_rsp.h in Headers */ = {isa = PBXBuildFile; fileRef = C0BD20FF1A75F7E688073AEAC0E0E421 /* dummy_rsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 088166778CBF92A59C6AEA8158CB7B56 /* ObjectHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3152F7F819F4D7C0199707F1F5A9B8 /* ObjectHandle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 08A1B982F9CD6EA5ECD5A442973A25AD /* NDS.h in Headers */ = {isa = PBXBuildFile; fileRef = 933D69C235D50794635AA2A58BC23D85 /* NDS.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 08B9F6148C2A49A570F33B4BF7163484 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = B399BA8CED66B7B4AB724D2D580D4943 /* Standard.deltaskin */; }; + 08CBBE506F5F9C4F6B5FBA173182B627 /* NstBoardBtlDragonNinja.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0D2603FBE6D0E88895754984334C87D0 /* NstBoardBtlDragonNinja.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 08DB3EE7795392A4AD6CDA6911C4ADE8 /* NstBoardTaitoTc0190fmcPal16r4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BBD164DBFFAA1294217B9F595993108D /* NstBoardTaitoTc0190fmcPal16r4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0930988FAA51B3BFEFDDE01D83611CFE /* cheat.h in Headers */ = {isa = PBXBuildFile; fileRef = AF7DB0A4354868150C48B6B6E2D4FE4D /* cheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 09317AE820EE6AC27E5564E6830A6B2B /* glsl_CombinerInputs.h in Headers */ = {isa = PBXBuildFile; fileRef = FC3273B92BA8458C348A8240AB0C67AE /* glsl_CombinerInputs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 093A5EF57A260B6E4066AA6FEFA72B0B /* freetype.h in Headers */ = {isa = PBXBuildFile; fileRef = F4BFC00E618DE0EF34A6FA01F88AA209 /* freetype.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 095ECDF5BCBCCC825E489471C3556732 /* RSTLoadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AC36AE82A4992804E6ECF7236E5ECA7 /* RSTLoadOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 09712513CDD56B9AD1082FD253B210B0 /* TxFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC339C9C59B65A4D6483598A6451971E /* TxFilter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 09A56050F738852C24E48CAB1A12327F /* NstBoardKonamiVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0636E7B8F2E8F376A9BF6CEC67B0B615 /* NstBoardKonamiVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 09F83B8522313DF122E91C5E908CC256 /* dummy_video.h in Headers */ = {isa = PBXBuildFile; fileRef = E2FDB4BB627C5ED4C383AB3D3EB64DA2 /* dummy_video.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 09FC171FD71744C6F47D4CC3341BF102 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 6AA43E914AB86898557D6FEDC791C933 /* xxhash.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0A3FA8250DCAA57E611E6433F084CE11 /* NstBoardFujiya.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6F58E0B7D553A24812938BBCA1D73D71 /* NstBoardFujiya.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0A7F43CFFA49DD8651630CD5B766D2A3 /* NstImage.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 99AFEBCD0E127C34321505B630C49E92 /* NstImage.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0A82B6C9EC4EA09A0C213ABAE1E08E9B /* FrameBufferInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DBD80F21182531F3EA2504E53691367A /* FrameBufferInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0AA09DE9241869ECCCC26D4E11F357FF /* GBCEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 04CE2E235B10188704B563E18E7D532A /* GBCEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AE2AA9CFBAB73BA390B8AB2BD339DCC /* SoundFileReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43281994AE91BE3DCE9CD0F6A87B1273 /* SoundFileReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AE68C487359922B30E80D82CD556435 /* NstBoardBmcSuperVision16in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2098A1D3BBCAAFB3A5D52959C3751342 /* NstBoardBmcSuperVision16in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AE7EA1277618FFEC475AF5B709DE97C /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = 3300F6B66FF14313A41952BEDB638D10 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0B12EDB39B8EDFD03B311F9733108E6D /* opengl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F94CD2A593A3820ECA68A3AD91377F /* opengl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0B8D0DF76E87D68894A0DC0C4DEF1911 /* KeyboardGameController.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 40B5D84ECD183C3EF78823E7CF938746 /* KeyboardGameController.deltamapping */; }; + 0B984B28675905FE99D500B13967A582 /* SNESEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = E216C0C45BCA364953D3D8851490070E /* SNESEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0BC29A4D141721CED777951AFB6285DC /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE8DDA1C621BC7547ED906A580F98278 /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C85C17E4ABD29F912F85A3579F2C13F /* n64_cic_nus_6105.h in Headers */ = {isa = PBXBuildFile; fileRef = 485C8F569695892A8BF25E965F61DDE1 /* n64_cic_nus_6105.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C8CEB39DBD171C39AD70F1D22B0D8F2 /* NstBoardMmc5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 231C3B1815030738C172F8C3A61AB598 /* NstBoardMmc5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0CC4033E6747ED10E9BC142192F6AD39 /* NSString+Localization.m in Sources */ = {isa = PBXBuildFile; fileRef = 21A038DB12C94476C404398950A88C8D /* NSString+Localization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0D0CDD2D121FB16DD8061998BE122543 /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = 0ECE608D60C05AB0625906E8A6493CB1 /* pngget.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0D0DD77BB2692454B0600C393C56B3A8 /* rom.h in Headers */ = {isa = PBXBuildFile; fileRef = 798A8C02C208746867C1899AE83B7EF3 /* rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D3A7FEA753047DE31A6F81799F3190C /* TxDbg_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9DFC0EF480A5361B80E075558EEDEDEE /* TxDbg_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0D4B0761D98B1D32B5B34C414181316E /* DeltaCoreProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A201B11504778569D1F2D7EB83668E6 /* DeltaCoreProtocol.swift */; }; + 0C85C17E4ABD29F912F85A3579F2C13F /* n64_cic_nus_6105.h in Headers */ = {isa = PBXBuildFile; fileRef = 112637F718E98C3499172684DAB993A0 /* n64_cic_nus_6105.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C8CEB39DBD171C39AD70F1D22B0D8F2 /* NstBoardMmc5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0C864A48A744E0C4E9B10806107515B8 /* NstBoardMmc5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0CC4033E6747ED10E9BC142192F6AD39 /* NSString+Localization.m in Sources */ = {isa = PBXBuildFile; fileRef = FB5E73C8C7F0D5AB282E9A29954B036F /* NSString+Localization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D0CDD2D121FB16DD8061998BE122543 /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = C00543EF4F06FBFA511049B6A2E2638E /* pngget.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D0DD77BB2692454B0600C393C56B3A8 /* rom.h in Headers */ = {isa = PBXBuildFile; fileRef = FB3BB654A06CE0DED1C9C6F934367DDF /* rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0D3A7FEA753047DE31A6F81799F3190C /* TxDbg_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9AC4EDED962C7496D2538B9A6128954 /* TxDbg_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D4B0761D98B1D32B5B34C414181316E /* DeltaCoreProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C65F0AD8F6ACAD0EA3F1D732708E85 /* DeltaCoreProtocol.swift */; }; 0D6BF9F58172028164D17C031B1FCFF6 /* GTMNSString+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = BBE10799564D3547139EFF5CE894CF5A /* GTMNSString+URLArguments.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D97BC11BC4E1636F550EF6D331031AF /* DepthBufferRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 38670547E681F154E5A9A09F39390D14 /* DepthBufferRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0DAA2A9EA3C7BE275C199CE4FC0F8660 /* RSTHasher.m in Sources */ = {isa = PBXBuildFile; fileRef = F7E8CC2CC4A372DB06C3A4DDF7BD00C2 /* RSTHasher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0DBB61B8C2133BA49617D71CB72C59DC /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A9086E824EFB7B7B14B240188DF62CE /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0DD2B79568FD5D7753E4220B0A700C96 /* svgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = D64D70EE0AECCCED6FF32F99E14D58BF /* svgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0DE37FB9E50E1562BF60D5BFA8252BA7 /* RSTArrayDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 33A331134BE85F727CC5CCD89769383E /* RSTArrayDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E1533213CE06AD25D7A467D0F3AC3F7 /* scoped_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 416A8E69A7929028B4EDF36F7813BCDA /* scoped_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E434E17E33AA0A6B8BB202C4684EDD8 /* osd_element.h in Headers */ = {isa = PBXBuildFile; fileRef = 00DDAF44FCEF1DAE01680CB1290E8DA6 /* osd_element.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E62C30ACBFB8DC392E5CE59DDAA64A2 /* DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 636BCAA16AC311A2A310C344BD9FBCB8 /* DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D97BC11BC4E1636F550EF6D331031AF /* DepthBufferRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E29595D0B8DD5D154897A066190504AB /* DepthBufferRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0DAA2A9EA3C7BE275C199CE4FC0F8660 /* RSTHasher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ABC265715DD434AE88383B1CAD97215 /* RSTHasher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0DBB61B8C2133BA49617D71CB72C59DC /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FE4B65AFEE414DDF2934ED450332C42 /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DD2B79568FD5D7753E4220B0A700C96 /* svgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = 19B404312BCFE831CA10C0C54C6D0B58 /* svgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DE37FB9E50E1562BF60D5BFA8252BA7 /* RSTArrayDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F336E2D3C53A29FF9A360C8ECDF43F2E /* RSTArrayDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E1533213CE06AD25D7A467D0F3AC3F7 /* scoped_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = AC89CB7A34B3B2FF8DBF5BB0E234D8A9 /* scoped_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E434E17E33AA0A6B8BB202C4684EDD8 /* osd_element.h in Headers */ = {isa = PBXBuildFile; fileRef = DB20DDFBF1AF645CE61ADF09F5974137 /* osd_element.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E62C30ACBFB8DC392E5CE59DDAA64A2 /* DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D14C427796C3B67D5F822717322045B9 /* DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0EC9CB34CA3F574AE5B715EB1DD9DF8C /* DropboxTransportClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E2C328E034800C2CB26F5B94B12DDF6 /* DropboxTransportClient.swift */; }; - 0ECA6110DA3B0588B02D33C1E337CDF1 /* Result+Success.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECDCC3E94D5101F61796B3E89290013D /* Result+Success.swift */; }; + 0ECA6110DA3B0588B02D33C1E337CDF1 /* Result+Success.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87263EF46CC8CB36CF6CC2C7E1D63E62 /* Result+Success.swift */; }; 0EDDADFF86CE8E23349B8C17EAB86C98 /* SeenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0CD3AC5CF344D777C591A59C269664 /* SeenState.swift */; }; - 0EF4F8570AB47B8BDEF7F3B3FDFE3457 /* boolean.h in Headers */ = {isa = PBXBuildFile; fileRef = 025953BB492B1D55BDA573CAC6CE9000 /* boolean.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F1030089F00486F17ED78F7651056AE /* SNESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFB410CFC7528D974AC5C39C85ED086 /* SNESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F2AAC05FC0C90D1437629B2DD879D83 /* NstCartridgeUnif.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E11C4236342FA8398AE626DB3274772D /* NstCartridgeUnif.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F35EC2E4E3C5B5025464323CDA17109 /* NstBoardNtdec.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EE3F927B7F58D93B1C98460B28559AE7 /* NstBoardNtdec.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F6AD4EB188F8A35D985C14ED56521F5 /* ftmoderr.h in Headers */ = {isa = PBXBuildFile; fileRef = A1054468B8504A0284F550663CC44349 /* ftmoderr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0FCCD4B109AB22FC20A743AB750B95EC /* glsl_SpecialShadersFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 538F7789F2608728E516881281A64037 /* glsl_SpecialShadersFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0FCDAB60E00061A616936D080A17A72D /* FrameBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D29EE04287C192700BAA7D8E7068B20 /* FrameBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 100055E823D8664CA3967CA7223DE414 /* 65c816.h in Headers */ = {isa = PBXBuildFile; fileRef = 816D92F12BC3698BEE8F45620FB157CC /* 65c816.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 10558603C3F6732FEF6B1882CC605395 /* ftstroke.h in Headers */ = {isa = PBXBuildFile; fileRef = F14AE82C6F3F1E53A7B148B891178E59 /* ftstroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 106923F11FA63A0A83DDFF28E6D682E6 /* TxTexCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DCA41822F3659F65C03D6B0D418F612B /* TxTexCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0EF4F8570AB47B8BDEF7F3B3FDFE3457 /* boolean.h in Headers */ = {isa = PBXBuildFile; fileRef = 73DC986430887FFB58433385B29BACE2 /* boolean.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F1030089F00486F17ED78F7651056AE /* SNESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D12A00DD051835A984A58D6DD44BDD4 /* SNESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F2AAC05FC0C90D1437629B2DD879D83 /* NstCartridgeUnif.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2541FACE6856FBF20F718BF93515A799 /* NstCartridgeUnif.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F35EC2E4E3C5B5025464323CDA17109 /* NstBoardNtdec.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD746E8386BFDF6E8F7B293E9EA93E17 /* NstBoardNtdec.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F6AD4EB188F8A35D985C14ED56521F5 /* ftmoderr.h in Headers */ = {isa = PBXBuildFile; fileRef = B1A991CECAB9DD46D6515EF84919F6D0 /* ftmoderr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0FCCD4B109AB22FC20A743AB750B95EC /* glsl_SpecialShadersFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91142883C9B61CDABD669F132E23BA6B /* glsl_SpecialShadersFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0FCDAB60E00061A616936D080A17A72D /* FrameBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D39CF0AC7F91D702958292DA91F30D /* FrameBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 100055E823D8664CA3967CA7223DE414 /* 65c816.h in Headers */ = {isa = PBXBuildFile; fileRef = BFF9BE4B997D71AFFD82B6E8CBC06B97 /* 65c816.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 10558603C3F6732FEF6B1882CC605395 /* ftstroke.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E0ED605D7C2BAE8463AEB4ADEDF371 /* ftstroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 106923F11FA63A0A83DDFF28E6D682E6 /* TxTexCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 838F667D353D92B49C6150D47D8E5C4D /* TxTexCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 106D77956F70BC0E0A55EDAFE9264B53 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = E474FB45FC3DD9C8E04C72D076AC8DFC /* Data+Serialization.swift */; }; - 109639DF3F0EF7199D502AE257551180 /* Harmony-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D42075157F824B1040606B316473092 /* Harmony-dummy.m */; }; - 10963C0B1643A34DF49E5FF651AEF1D8 /* main.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F39CB2B6042785A3E5F2C40320DD2C /* main.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1096C2B586E2EA8769B5E346F337BD89 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 9A6B0D2942B8BAF98B09DC10EDD20618 /* Standard.deltaskin */; }; - 10B25A3E89F2BC948F600F93DFD2AEEE /* pngerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 4875A5F2894B64D59ABA846310074DDD /* pngerror.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 113A3ADEA158094373E44C01E1443F61 /* CombinerProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9D8C6B600EB0F6E81ED97BC1F30272D4 /* CombinerProgram.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 11536204ECDF7D9DB75EC2A0D9FE46A5 /* ftsnames.h in Headers */ = {isa = PBXBuildFile; fileRef = 08B8560CC6F18BF32453AAB35DA2A0FE /* ftsnames.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 11654A14DAFB94587890A4B673D7B7C9 /* SoundRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3791E485D89113AC4B25ADE046DEE5D1 /* SoundRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 11999A3107D95813D7DE36E802941DF9 /* alist.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FA26C4FB0D6E27B0C9E9607D02D8E25 /* alist.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 119EB4FFA02590EA2498963ECEC6707B /* RenderTexture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5FCE00327D6825CD6F2088A345690DCC /* RenderTexture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 109639DF3F0EF7199D502AE257551180 /* Harmony-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 238AA279772C644CC943D63E37C7AA3A /* Harmony-dummy.m */; }; + 10963C0B1643A34DF49E5FF651AEF1D8 /* main.h in Headers */ = {isa = PBXBuildFile; fileRef = 62CF24548323CEDA7F6C62DDD4E4970E /* main.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1096C2B586E2EA8769B5E346F337BD89 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 7C4240EE1FE35FE23E5975F8DCB23A33 /* Standard.deltaskin */; }; + 10B25A3E89F2BC948F600F93DFD2AEEE /* pngerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 24443F50309F188F0D359B49C0F136CB /* pngerror.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 113A3ADEA158094373E44C01E1443F61 /* CombinerProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 507AEE0DE905FE749721BA983355BC23 /* CombinerProgram.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 11536204ECDF7D9DB75EC2A0D9FE46A5 /* ftsnames.h in Headers */ = {isa = PBXBuildFile; fileRef = 423425F5988743735EC12578B4A52F5F /* ftsnames.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 11654A14DAFB94587890A4B673D7B7C9 /* SoundRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1DF37E36CD72A2D07A3FCAD216576B53 /* SoundRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 11999A3107D95813D7DE36E802941DF9 /* alist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A827256CC16710474531DFA7ECE526F /* alist.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 119EB4FFA02590EA2498963ECEC6707B /* RenderTexture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3E937AC710B3BDEE100401BE7BEFD62 /* RenderTexture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 11B1E455943227B7FDE64E7910BE6D76 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB7F32ED8575A87699DF593661DBD4B /* Data+Compression.swift */; }; - 121447EDCD87D030260B53FA7E426098 /* ConfigManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E132A030504CB91FC153F9A62C74870 /* ConfigManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 121447EDCD87D030260B53FA7E426098 /* ConfigManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 558ABB8E63AEB6155C40A551D88F9123 /* ConfigManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 122A53C6A8CE37059A0CF1D111472CDD /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D110BCE90D1CF941FD0145CBB7DD6C /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 124DCEE18B5406C095B74C9B178BD647 /* NstBoardTxcMxmdhtwo.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FE45DB19ABFD58A4D2DCCB58292ABED4 /* NstBoardTxcMxmdhtwo.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 12642C40ECD4772D8E3C16F32834E565 /* GraphicsDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0553C664A9287732CFEA939623E83E70 /* GraphicsDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 124DCEE18B5406C095B74C9B178BD647 /* NstBoardTxcMxmdhtwo.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 85245105BDC64E12FADEF30BE855FEC1 /* NstBoardTxcMxmdhtwo.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 12642C40ECD4772D8E3C16F32834E565 /* GraphicsDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 176F2C264C99888772BBC8A3F018B128 /* GraphicsDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 128CFECF46B7047470D018C987584ACD /* WifiAP.h in Headers */ = {isa = PBXBuildFile; fileRef = D6152F7397477BE4F0ED9C7788792005 /* WifiAP.h */; settings = {ATTRIBUTES = (Project, ); }; }; 12AEC0B4C35E8BDE4366D57CE6805481 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20BCD689A6CAE5B82E9CC42375BA7AE7 /* Blob.swift */; }; 12D7AFC87809B7DB47930F38ACBCF03E /* TeamLogRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEBCE82463719FE6476D577E1F4423FD /* TeamLogRoutes.swift */; }; 12EB6F66719644A22679C7B30EA4F9DA /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AB3CC30BCD19485A7A87DB2D78E2BA1 /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12FD0A784B96093568057FFB24752931 /* ftsystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 35465BE12D8260B15CC6BD3C5FEF813C /* ftsystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1320CB37F0E2606479AD7BAB5C56E7D3 /* RemoteFile+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9688C4994A8E7E8C3EFC291E37D8B050 /* RemoteFile+File.swift */; }; - 132DE130DC8D504D3672FE0A8438E82F /* GBCTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 81A8FD9E119F896E60B2564D9D8761CD /* GBCTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 134D8E34601F861AC001CCDF57026CE4 /* NstBoardCxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34A215FA298A479379277FF73C2A596C /* NstBoardCxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1399567CFA56F981E650715560737DE4 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC1909CF0C525687C49B17CBAC1003E /* text.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13A70EB0D59A7AC78B914E7961428A3D /* NstBoardQj.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 58F426BB1C791A20225DADEEE031718A /* NstBoardQj.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 13DDDEE8E9A5F0E7D4767A7E2438F61E /* NSManagedObject+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7BCCABE84D92A4A7AB4A427BB8558AE /* NSManagedObject+Conveniences.swift */; }; - 14275531D4F7CDD462D18A3DE8962F9D /* instructions.h in Headers */ = {isa = PBXBuildFile; fileRef = 916788F0642B21A136DE8950DB47B018 /* instructions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 145D41EBB9C9985DBB3C476165DC7974 /* fpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FD1CD254FC9810DC969445799C4AC02 /* fpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14814E514A0815D4CF25874DBA95BC79 /* NstBoardFxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7CF779051F3316DCCCAAB71AF25F906C /* NstBoardFxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 14890F4A609A98F54A7AE2FAA7A769BA /* dummy_video_capture.c in Sources */ = {isa = PBXBuildFile; fileRef = 894545843DCDE3856F3A5F4BA90A2227 /* dummy_video_capture.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 14A6A31A437EF94D756BC7E48CA08C0A /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = BD629D406305184DD39F018AC48C58E7 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14C40CB2C689C2CEFFEEBC5D170379B1 /* Window.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5AC3A6B0034D34F9209BBD58348B9047 /* Window.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 14D191D837FD7D431194C98BC575E356 /* GBCInputGetter.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B84B3955DE3CC74FD9418BE74C2896 /* GBCInputGetter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14D448DCE42024011A61818D6536731E /* dd_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = D8D7F2571154753B11327E7B624A795A /* dd_controller.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 14E4FB185F30A8C5DC3F1D4B9E0DE716 /* video_capture_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ED8DCB8CB080AFAA17D199C268096E6 /* video_capture_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1505FB7B20F25998D75A83A2147DF2F0 /* pngrio.c in Sources */ = {isa = PBXBuildFile; fileRef = AB9A44C4015E688182AFC5CE81179187 /* pngrio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 153188A806D2A1F337D4F09283D8C8FD /* NstBoardBmcSuperGun20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD40FB9904EBC64F4CB21A6062A4FFC8 /* NstBoardBmcSuperGun20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 12FD0A784B96093568057FFB24752931 /* ftsystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBFA95BE33AC04B65DD7AF6C54B92DD /* ftsystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1320CB37F0E2606479AD7BAB5C56E7D3 /* RemoteFile+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AF44E99CDEC34FBD91AFEE4DACFD88A /* RemoteFile+File.swift */; }; + 132DE130DC8D504D3672FE0A8438E82F /* GBCTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 708D9E956CB287CC2879FE1061D1F6C5 /* GBCTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 134D8E34601F861AC001CCDF57026CE4 /* NstBoardCxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 698C748E342E77F1EA0CBA79A28CAC0B /* NstBoardCxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1399567CFA56F981E650715560737DE4 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = 021DE75321784D55780486DCF5510498 /* text.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 13A70EB0D59A7AC78B914E7961428A3D /* NstBoardQj.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7CD443BDF938671B3B442333D9A63ED0 /* NstBoardQj.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 13DDDEE8E9A5F0E7D4767A7E2438F61E /* NSManagedObject+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD4A28E12A0F4CA5FB5F949171A2104B /* NSManagedObject+Conveniences.swift */; }; + 14275531D4F7CDD462D18A3DE8962F9D /* instructions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DDB31BEBA1AF6B8AA83AFE0B4A2D7EE /* instructions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14363C965EF433EBD28CBF68938C6441 /* SPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 12535108C24D1C6BADF6FB802CB39A5F /* SPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 145D41EBB9C9985DBB3C476165DC7974 /* fpu.h in Headers */ = {isa = PBXBuildFile; fileRef = AE319AE2C2040F374241D90E84825723 /* fpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14814E514A0815D4CF25874DBA95BC79 /* NstBoardFxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 06A49EC7BA9A5FD79AC2FE0923FBCF54 /* NstBoardFxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 14890F4A609A98F54A7AE2FAA7A769BA /* dummy_video_capture.c in Sources */ = {isa = PBXBuildFile; fileRef = B331F7660FB59081A99ADBA1AF706462 /* dummy_video_capture.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14A6A31A437EF94D756BC7E48CA08C0A /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 471C4997518A7042AE098438B7958754 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14C40CB2C689C2CEFFEEBC5D170379B1 /* Window.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 31B5A52F1F76F3224E54451C2B25CA8D /* Window.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 14D191D837FD7D431194C98BC575E356 /* GBCInputGetter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D9EAB15090D2390809047688EF8E815 /* GBCInputGetter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 14D448DCE42024011A61818D6536731E /* dd_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = E5C78C628E0A4C0BA6411600CC689510 /* dd_controller.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14E4FB185F30A8C5DC3F1D4B9E0DE716 /* video_capture_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 959C8F76FF4E413331083F4B7271A79D /* video_capture_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1505FB7B20F25998D75A83A2147DF2F0 /* pngrio.c in Sources */ = {isa = PBXBuildFile; fileRef = 5986D113E80DE6E1FCE1BF2079E6B442 /* pngrio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 153188A806D2A1F337D4F09283D8C8FD /* NstBoardBmcSuperGun20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F021EBB9B583D41D119B66FBC95F7F2C /* NstBoardBmcSuperGun20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1541CD75ED87DD98D3FB227978648F92 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B8AF793D67661D01A11B1A56931BA03 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 15631406F1349925694F775193DCE3B8 /* DropboxService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB9C709F559518962C652F5BBA13E865 /* DropboxService+Versions.swift */; }; - 159AEB925F329623B682DF445F17309B /* SoundTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = 9300FDAE5D36EBEB31F93D3C7215E806 /* SoundTouch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 161DC98CB6404CA6989C81EAB0E1C3EE /* CombinerKey.h in Headers */ = {isa = PBXBuildFile; fileRef = D344F505862E745C78F15C36F91D7325 /* CombinerKey.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 165DA1CB4491C51A5BC65A8F519D53DD /* F3DGOLDEN.h in Headers */ = {isa = PBXBuildFile; fileRef = 475A94434453EF6E1D44C3894F12A473 /* F3DGOLDEN.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1673BDEF58AAD91E8E8136D14A6D92CC /* tttables.h in Headers */ = {isa = PBXBuildFile; fileRef = A1C9D65BEDC2366AB15142DA01309E46 /* tttables.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 15631406F1349925694F775193DCE3B8 /* DropboxService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 636321611157247A4B100E3ACC431B70 /* DropboxService+Versions.swift */; }; + 159AEB925F329623B682DF445F17309B /* SoundTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = 086BC7A1837005C56E8908CBF2465274 /* SoundTouch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 161DC98CB6404CA6989C81EAB0E1C3EE /* CombinerKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 6658EE9B0A19441E97A1284103D6A0A2 /* CombinerKey.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 165DA1CB4491C51A5BC65A8F519D53DD /* F3DGOLDEN.h in Headers */ = {isa = PBXBuildFile; fileRef = FB9EE7B4A2F519FCFB65900960419A5F /* F3DGOLDEN.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1673BDEF58AAD91E8E8136D14A6D92CC /* tttables.h in Headers */ = {isa = PBXBuildFile; fileRef = E332D1A2E036E2DF42439D6ABAD4A55C /* tttables.h */; settings = {ATTRIBUTES = (Project, ); }; }; 16BA02E314DD1557E7856374C52DA346 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D71AD94F1DE85C71287112E838A7581 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 174F4F23259306B5ECEB19D6FAE4FE93 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = DBFD59116F5FC54AE4428271A6BB1CAA /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 175C9AE704D01C600031D567C80BB91A /* NstLog.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E94066EEBFDC68DAC8ABD344BE20C393 /* NstLog.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1763806549E7B189A1B7D629CD271BDC /* NstVideoFilterNone.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3E9A8C85F702C4A1468F58BB906D4ED1 /* NstVideoFilterNone.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 188C27A5024641883B67EC17C1AA6995 /* FetchRemoteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00E83FB8FE257D431296C57164DBCE71 /* FetchRemoteRecordsOperation.swift */; }; - 18A170DDE02E7B4C59A58B5C333487D5 /* NstApiCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = ED768209E20E3298713767938BD05B35 /* NstApiCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 18E5D24C8847A14DE25CC9E73B28CBD5 /* Globals.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C829F5E801FB46F0C66DA77EB247349 /* Globals.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 18FF637458B07675EF16BAECCF6AFDD7 /* ftotval.h in Headers */ = {isa = PBXBuildFile; fileRef = A57B57432BC4D00AD43EB6687F06197C /* ftotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 192D121D3A8C6AE6BA5A7AF2D0CDC952 /* SoundStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 288D4255C025E9AE120B756ED3D79848 /* SoundStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 193424E7818DE3CC415F1ABA7BDA5044 /* OGLRender_3_2.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B02B3B5A0036A6726FBD9167A2946A9 /* OGLRender_3_2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 195CAEC55D7B3D6D31D6DF39B4123E29 /* NstBoardAveNina.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5901F945E4B7BD8E993A572C8320D4E8 /* NstBoardAveNina.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 196B46FD2B40CE0CF8D6F681C1A9307B /* ftbzip2.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A01843AE7F8A9690F749CE033E441E4 /* ftbzip2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1980201958ED3367F3828BC226C5506A /* RSTTintedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = F76E3967E1E2834EA49B2FFB6117AEEB /* RSTTintedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1989138BFE55C51C2E1C1D1D3921CD01 /* libretro_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = FA7FE2BBE843B46F88B62F9D98574BCC /* libretro_vulkan.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19A2BFBA669411936E7BDFC0D05C4701 /* rateest.h in Headers */ = {isa = PBXBuildFile; fileRef = B009C33CC7DA7BB144CBFC37BB96FADA /* rateest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19AE6DE6691A392520AF008719995124 /* armcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 6249457A28CDE33CCE657105EDBF5C7C /* armcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19C03E95F42417EF92D0D3EA03AE1E93 /* retro_stat.h in Headers */ = {isa = PBXBuildFile; fileRef = 1631DF20959AF33BB911DE604C526934 /* retro_stat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A320DC3BB4F411FF18589AC2EF1C65D /* NstBoardKayH2288.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4A32B8F42EA9A1885D2B08250359F9FC /* NstBoardKayH2288.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A511E47EF74155034C3FD58A291B1CD /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = A7449C167D753EB017EF503CF6D7DBF5 /* array.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 172D940DCB5435663DBA9C5B5E92D436 /* Savestate.h in Headers */ = {isa = PBXBuildFile; fileRef = 42E8911C9890E3A93DD7CE8A4B3A27CC /* Savestate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 174F4F23259306B5ECEB19D6FAE4FE93 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = 122B792B0EAAF896926591B297C9D30D /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 175C9AE704D01C600031D567C80BB91A /* NstLog.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2D2882065898FB0E38AD32AA9BC8E931 /* NstLog.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1763806549E7B189A1B7D629CD271BDC /* NstVideoFilterNone.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B6460A6DCAB66445786D1832B9B7D54A /* NstVideoFilterNone.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 188C27A5024641883B67EC17C1AA6995 /* FetchRemoteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60FB49D244425C934B22DB89FE9F68AB /* FetchRemoteRecordsOperation.swift */; }; + 18A170DDE02E7B4C59A58B5C333487D5 /* NstApiCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7A23A59045CAA0A03697397632CF3A5B /* NstApiCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 18E5D24C8847A14DE25CC9E73B28CBD5 /* Globals.h in Headers */ = {isa = PBXBuildFile; fileRef = BB49743C9C35F2C946022473E1E84595 /* Globals.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 18FF637458B07675EF16BAECCF6AFDD7 /* ftotval.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EFE9AE79EBD67A282DE349ECDBA9D52 /* ftotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 192D121D3A8C6AE6BA5A7AF2D0CDC952 /* SoundStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48BF55C9520932E61BA7E91D0DE78B47 /* SoundStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 193424E7818DE3CC415F1ABA7BDA5044 /* OGLRender_3_2.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF0BB22A90E877C1E14A623DE51DD25 /* OGLRender_3_2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 195CAEC55D7B3D6D31D6DF39B4123E29 /* NstBoardAveNina.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D5D7C859DA53707D68A0C6096E4FD656 /* NstBoardAveNina.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 196B46FD2B40CE0CF8D6F681C1A9307B /* ftbzip2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FACC0B21FDAA0F253D9BB7A5062C4B0 /* ftbzip2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1980201958ED3367F3828BC226C5506A /* RSTTintedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 327910F0090992C6E3CBE5627E621EB3 /* RSTTintedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1989138BFE55C51C2E1C1D1D3921CD01 /* libretro_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A88ADF5CB822A0ABF0CDD1E4D68BAAE /* libretro_vulkan.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19A2BFBA669411936E7BDFC0D05C4701 /* rateest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D74E106D389811B1BA21826E9E3C690 /* rateest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19AE6DE6691A392520AF008719995124 /* armcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 1615D09DB3F681C62200592953856E68 /* armcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19C03E95F42417EF92D0D3EA03AE1E93 /* retro_stat.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C53EC4A93175802A6008176A72A482 /* retro_stat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A320DC3BB4F411FF18589AC2EF1C65D /* NstBoardKayH2288.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 789D5CFDF81A92162003BEBF18BA3C20 /* NstBoardKayH2288.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A511E47EF74155034C3FD58A291B1CD /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C62C2A7373598D1D87C3F00E90A7722 /* array.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1A740EB1DC7E96D415A582212D8BD190 /* GTLRBatchResult.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D42A4393C5EA5D2C2E7F5B2D175FE0 /* GTLRBatchResult.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1A9E0A5933F001BD9AC823B4EEF7415A /* RTC.h in Headers */ = {isa = PBXBuildFile; fileRef = 838D80A959C5C766EFB33104D72194AF /* RTC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A87A2F68523FA26D625BEC658965C81 /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F8D603EBE941AC871B0A2F47AD5B6D5 /* Pods-Delta-dummy.m */; }; + 1A9E0A5933F001BD9AC823B4EEF7415A /* RTC.h in Headers */ = {isa = PBXBuildFile; fileRef = 311F5E992C4184B1925C4E380CBBEFB5 /* RTC.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1AAB4E66BB2F67D75ED31A969FB90445 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E17A40A5122F984FE431D21753C8CF06 /* Alamofire-dummy.m */; }; - 1AF87E34A2309B096AE662A3F0A54538 /* SocketHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1649F44ED2BD21529BA16B7B2A429793 /* SocketHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B03CF4D7E9A0CF1B1A5C0DFAB8B0DD9 /* ButtonsInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE05B7A52F5A35ED15F9580C4144EC6 /* ButtonsInputView.swift */; }; - 1B09EC58FBD912A974C56A3F2BFE36D0 /* Keyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DFD8974B1F72F3E8D3FB1FC240A1ABD1 /* Keyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B0E862A80891D08A0C6F2E43AE8B356 /* TexrectDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9FB554080990194873F4A54006A5E02 /* TexrectDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1B2B4C5155210EBDD0892BE184220A44 /* instruction_attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8B22C2F3B453B4853E09852C790FFB /* instruction_attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B2BB2FEF328AF927516BB5185869A9E /* CheatProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67AB883A36469191BFD529D65D8810A1 /* CheatProtocol.swift */; }; - 1B8E1324EF162AD35B1923FE3BC32753 /* NstBoardJalecoJf11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6C87A284686A358CFAC958B264749422 /* NstBoardJalecoJf11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1BA51CA49FF3BF6647ECEB45F30364BA /* NstBoardBtlT230.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74A1A47D0674A91258AD7D9DAB661740 /* NstBoardBtlT230.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1BD64B8159B5CAE972498CA344F46490 /* readpng2.h in Headers */ = {isa = PBXBuildFile; fileRef = 205369CAD1E4D0EB34E3DAA176117F19 /* readpng2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1BF72388F9052C123EADC996D4D33C47 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = DBAA90C42D53B3B86801C3ADD7C2CC2A /* stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1C570DFFEE1F86736CC9E98C382D99B5 /* NstFds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6D9291C6142C075D49A0EDDA11CC4A78 /* NstFds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D3D48B74FB7DC35F5A27D2E4F8EF530 /* NstInpPartyTap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 22D727FF73EDD7D66A073041A47B0DE6 /* NstInpPartyTap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D50F4D79058E4B1B5D465253CE3E893 /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D11622874CFF7D4685E506F182E85B /* convert.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1DB6F3BD942AB6C506FA3D02C3569721 /* RSTNibView.h in Headers */ = {isa = PBXBuildFile; fileRef = 814013939A450B54B81B83B1EDB7A650 /* RSTNibView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1AF87E34A2309B096AE662A3F0A54538 /* SocketHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AAD25B7136752E5F978B2EA8A9F1B2C7 /* SocketHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B03CF4D7E9A0CF1B1A5C0DFAB8B0DD9 /* ButtonsInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F9A0594B477E44DA3CB74E54DD67ED /* ButtonsInputView.swift */; }; + 1B09EC58FBD912A974C56A3F2BFE36D0 /* Keyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 229289C6AEBA126CD4AF9033E65834CC /* Keyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B0E862A80891D08A0C6F2E43AE8B356 /* TexrectDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8958320DAE6D887ED9E5A519C025718B /* TexrectDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1B2B4C5155210EBDD0892BE184220A44 /* instruction_attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 39BF407461BE0D689AC655371DD416DE /* instruction_attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B2BB2FEF328AF927516BB5185869A9E /* CheatProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC29261FDE2973B2D6B6F1E62024A0A9 /* CheatProtocol.swift */; }; + 1B8E1324EF162AD35B1923FE3BC32753 /* NstBoardJalecoJf11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E8D1644FE6C9B9EA40479CBCFD2D7CC0 /* NstBoardJalecoJf11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1BA51CA49FF3BF6647ECEB45F30364BA /* NstBoardBtlT230.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD957EF417E4ED855F413792CFADBB28 /* NstBoardBtlT230.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1BD64B8159B5CAE972498CA344F46490 /* readpng2.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD0F23869E4370E465AE1C8597D8843 /* readpng2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1BF72388F9052C123EADC996D4D33C47 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F066AA72AF013DB424E69E221FDA626 /* stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C47B242A0B80613D72DA6089181905C /* DMA.h in Headers */ = {isa = PBXBuildFile; fileRef = 72DF6D71D0B2650FA29881ABB3113610 /* DMA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1C570DFFEE1F86736CC9E98C382D99B5 /* NstFds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 20855F4A8AE76A4363C4DE75B53963FA /* NstFds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D3D48B74FB7DC35F5A27D2E4F8EF530 /* NstInpPartyTap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C6D50BD15001580ABEF75FEE0D3BF80F /* NstInpPartyTap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D50F4D79058E4B1B5D465253CE3E893 /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = D709E423B3398EC39A98F76319C9374B /* convert.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1DB6F3BD942AB6C506FA3D02C3569721 /* RSTNibView.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A24856C0FCE10AA34185E05096752B /* RSTNibView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1DC7AB00CF86DEB9192BBD6BF1F049CB /* GTLRDuration.h in Headers */ = {isa = PBXBuildFile; fileRef = A73E1E700670A66A2AE2A03B799E23EF /* GTLRDuration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1DC9D83D5C3C27C865626FDC47FFA727 /* NstBoardHes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DA87C06EA55D40BF0BACCC63B7F0FA76 /* NstBoardHes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1E1F3E6F985575475CEC5C5627B10979 /* video.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ED12F95712B43803C58FF2D53075392 /* video.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1EE8CE815DB7AB1FE9B3284530CDE68B /* MemoryInputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 173F53675D53F79BED6F8E8D2FB1D09C /* MemoryInputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F1CCD14892B307D3C349F9C4117740C /* glsl_CombinerProgramUniformFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ED141EBC657EC07C8D65BCD12249B41 /* glsl_CombinerProgramUniformFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F30DD02CA191CAE3D0B657F89B4F11F /* RSTHelperFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D1A093309BA94F1AB20657C257070E2 /* RSTHelperFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F5C43C6770674DE9AF51FC93CA86659 /* NstBoardBtlPikachuY2k.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D282E9AC180F6200BA4B724CC7918B06 /* NstBoardBtlPikachuY2k.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F8209A656C45B0F07C3C1BF8E02279E /* MergePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C09575AF57FFD4D7C7A04FC133E63156 /* MergePolicy.swift */; }; - 1FB0A954FA7AF8FE8D99D959DE9965B9 /* mupen64plus_DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A3DDC9D77AA62AA058CD07A50BE2E396 /* mupen64plus_DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 1FEE8B5284DC3C2F7D3F0E28E62961C1 /* Version+Revision.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECAA6C5363B0FC690064E077812D9EF0 /* Version+Revision.swift */; }; - 20456037EE6A29D63087BCDEABE7A543 /* cicx105.c in Sources */ = {isa = PBXBuildFile; fileRef = A999E4DD49AD8CA4E0FB85985E53D97E /* cicx105.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2095A394F1DB498633048FA6F4CF5B6B /* GLideN64.custom.ini in Resources */ = {isa = PBXBuildFile; fileRef = 23AFAE86E4F0EDD062DB46895DAF5251 /* GLideN64.custom.ini */; }; - 20963639D29C2627884D0C2039FA09D7 /* NstBoardUnlXzy.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6878BE119742EC0C21A2CB0F923D256C /* NstBoardUnlXzy.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1DC9D83D5C3C27C865626FDC47FFA727 /* NstBoardHes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9A208B7D6A17B5E6210F640474730F8 /* NstBoardHes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E1F3E6F985575475CEC5C5627B10979 /* video.h in Headers */ = {isa = PBXBuildFile; fileRef = 42B13B5F43FDB8941F1473AB0E24A54D /* video.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1EE8CE815DB7AB1FE9B3284530CDE68B /* MemoryInputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D86A59B7F6D5BB8BCCA5F180F29A6656 /* MemoryInputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F1CCD14892B307D3C349F9C4117740C /* glsl_CombinerProgramUniformFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = B41ADAC311E8AD6F6A31A14C3ACCF208 /* glsl_CombinerProgramUniformFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F30DD02CA191CAE3D0B657F89B4F11F /* RSTHelperFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EE40C178D686A2BE9C93C6CF7FAE736 /* RSTHelperFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F5C43C6770674DE9AF51FC93CA86659 /* NstBoardBtlPikachuY2k.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 560CD792E13012FE41D46832508B9D30 /* NstBoardBtlPikachuY2k.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F8209A656C45B0F07C3C1BF8E02279E /* MergePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD6E96B0D1C5E0989F7B0041FA8E00A /* MergePolicy.swift */; }; + 1FB0A954FA7AF8FE8D99D959DE9965B9 /* mupen64plus_DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93058B797119FD95E8232C8C7B7BE0AA /* mupen64plus_DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1FEE8B5284DC3C2F7D3F0E28E62961C1 /* Version+Revision.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7835A1CFAD26F5CED24394F9EB07DBD /* Version+Revision.swift */; }; + 20456037EE6A29D63087BCDEABE7A543 /* cicx105.c in Sources */ = {isa = PBXBuildFile; fileRef = AEBCD05077A7A9D50A99D05DDFABD57D /* cicx105.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2095A394F1DB498633048FA6F4CF5B6B /* GLideN64.custom.ini in Resources */ = {isa = PBXBuildFile; fileRef = 12E9FF9AEEDE68C957B7D04E8966667F /* GLideN64.custom.ini */; }; + 20963639D29C2627884D0C2039FA09D7 /* NstBoardUnlXzy.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CF5ED3F5DA210F1A19B3FCA09E19F679 /* NstBoardUnlXzy.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 20983A4E2B0967B542119114AB073BB7 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 74853BDEC32A6CFF7D0D323E406FE7A9 /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 20F9B744BEFD8D7B6A31CAD347DA905B /* alist_naudio.c in Sources */ = {isa = PBXBuildFile; fileRef = 51F387B6A186310DE8AB25011DB2D480 /* alist_naudio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 20FA839518ED4413C10C26D0729B844E /* NstBoardMmc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 24DCB8F3924D4B8E723EDE7D9E36EE1C /* NstBoardMmc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 211F41E155C9801313A5A9B60E42B528 /* GLFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = CBECAF1300D5AE6D87DDEBE18A8D1C3C /* GLFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21939F9BD51F63E11D098AD04138814E /* NstBoardSachenSa0037.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA6F6DCD09DADEC4F87458FB70013D1B /* NstBoardSachenSa0037.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 219D418E6FEE74ABE4998946887B23F2 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 6630BB30C19291FAB71F19904132A2FB /* Standard.deltaskin */; }; - 21D164D1A6501C153372290BE9A11509 /* android_hardware_buffer_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7AAD31402E31872C9054EB4185634A /* android_hardware_buffer_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21E502D6891B860C977E695E0DC485BD /* ftheader.h in Headers */ = {isa = PBXBuildFile; fileRef = 77D3B3A913E0D9BC6F044C9D89CB8D96 /* ftheader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22004865065093B59F7DF41EAA0DEA79 /* RDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3FC4C12AAEC24F5791DDF9CF0F417BA0 /* RDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2230CED7C3633C3F5F473DF2EC5E50A7 /* ClipPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 9524C7CAEA9B69DE45AEF5526465F6C0 /* ClipPolygon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22612E795DA2B4185DAEAB3DD73A2267 /* GLideN64.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E65D162B8D927702A508BF68B07EF7D /* GLideN64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 227EA8867B83F2F2978D06671A0A10CF /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 37221D699E77B16EA4FE6C376B827730 /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22A782478094510168B16DDC00EAD35B /* ColorBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 254168DB44BEBEB68F731713E971B912 /* ColorBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 233D66440766BCC248853A39EDDFB1C5 /* ri_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CDD7B173B5F39A57867ED110A1FCA3A /* ri_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 23522007F1E5D00C56884454695C1C4D /* NstBoardCaltron.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 44F1BD582E0D3BBA64326BDB9B1D6DDD /* NstBoardCaltron.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2365E217AA5534FC880E18EF3CE9CA69 /* transfer_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 26CE0005068BFE608A1C540A882BA5FB /* transfer_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2383152D6C4F84FD2EE8A437B924C1A5 /* NstBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3F67DC9F98BC9365BCA0C5FBE0E14C93 /* NstBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 20F9B744BEFD8D7B6A31CAD347DA905B /* alist_naudio.c in Sources */ = {isa = PBXBuildFile; fileRef = F52217DDA56116C4579A60B66E239C62 /* alist_naudio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 20FA839518ED4413C10C26D0729B844E /* NstBoardMmc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C96DE12BB01FD7E95F041A594A9910CC /* NstBoardMmc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 211F41E155C9801313A5A9B60E42B528 /* GLFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = B54D71F0A9EE62F2B238B985FFE6C460 /* GLFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21939F9BD51F63E11D098AD04138814E /* NstBoardSachenSa0037.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9B8FEC06D5E475FC88E23200F3F9604 /* NstBoardSachenSa0037.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 219D418E6FEE74ABE4998946887B23F2 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 560F98A5E3D6842B976BE9CCD21AF72C /* Standard.deltaskin */; }; + 21D164D1A6501C153372290BE9A11509 /* android_hardware_buffer_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B799B0BED0EB9D4351BA9CBC630C918 /* android_hardware_buffer_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21E502D6891B860C977E695E0DC485BD /* ftheader.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF22CB647ADB3D529D1C542345BB178 /* ftheader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22004865065093B59F7DF41EAA0DEA79 /* RDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73594F3371FE49C0D1356C423974A617 /* RDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2202C76B0ACAFF39A84EE36584148743 /* NDSCart.h in Headers */ = {isa = PBXBuildFile; fileRef = DD81DFC2C331976AE715C460849BA6F6 /* NDSCart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2230CED7C3633C3F5F473DF2EC5E50A7 /* ClipPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C0978994ADA13ACDD55B35B73CF516B /* ClipPolygon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22612E795DA2B4185DAEAB3DD73A2267 /* GLideN64.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E4AAD82240CB7384572BAC20D31685 /* GLideN64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 22A782478094510168B16DDC00EAD35B /* ColorBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 530422F5717AFED3153BFF2D2284D3E5 /* ColorBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 233D66440766BCC248853A39EDDFB1C5 /* ri_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A933B1B324B43BC6E0CEBB638211EBA /* ri_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 23522007F1E5D00C56884454695C1C4D /* NstBoardCaltron.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 65C8737805E86FA67C1579855D59CB64 /* NstBoardCaltron.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2365E217AA5534FC880E18EF3CE9CA69 /* transfer_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = A855A24013B4807694DE373F6612044D /* transfer_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 236FE18B9A85308D24405A2A9ECF2840 /* ARMInterpreter_LoadStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F04169937EFDD63A68B6EE345F1D4B17 /* ARMInterpreter_LoadStore.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2383152D6C4F84FD2EE8A437B924C1A5 /* NstBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7F445EA81E198A163B9A40E5A2E7653A /* NstBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 239B54D42D526085B60108A60B9A4787 /* TeamLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCBE6B3F37DD42BA03F9A43F4FBE4F4D /* TeamLog.swift */; }; - 23BF54CE4938EDB1F46BFB0E71C0C87B /* Roxas-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A031E1BD1EAC694520C66D56F10F34E /* Roxas-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 242DC7B7B8092DC35B88FD61DEE5EE36 /* ftgasp.h in Headers */ = {isa = PBXBuildFile; fileRef = B87260587307761413DE023873BF047A /* ftgasp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 243487548FDE3E663997187437CAA558 /* storage_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 3993143AF65CD570A58EFF32C95A56FD /* storage_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 245707596236331BCA745BDF2CCD3A79 /* NstBoardUnlEdu2000.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAABB4AF34B608AA851191DA7195AC03 /* NstBoardUnlEdu2000.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 24681274F8D57A98446AD3E532DEFA17 /* NstBoardMmc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C2C58B3E3B8C36120F560F859D6D98F7 /* NstBoardMmc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 24BAED760BC6B605CA667DBDA91632C2 /* NstBoardUnlWorldHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E33793CEFFD0F60ECF7785770DBCE9F3 /* NstBoardUnlWorldHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2518C27E9C6CDC038A72544E1448E6A8 /* rumblepak.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC19450998BD4D56C3C2C86AE5687C6 /* rumblepak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 23BF54CE4938EDB1F46BFB0E71C0C87B /* Roxas-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE6AED1C735BB477D425F99206A28D87 /* Roxas-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 242DC7B7B8092DC35B88FD61DEE5EE36 /* ftgasp.h in Headers */ = {isa = PBXBuildFile; fileRef = 886A3E189B577FD6E4F71CFF3F0C163C /* ftgasp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 243487548FDE3E663997187437CAA558 /* storage_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C393F6D77A263F418781F717B7AA90D /* storage_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 245707596236331BCA745BDF2CCD3A79 /* NstBoardUnlEdu2000.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A8E224696F035B298DBC6B2B425DB4D9 /* NstBoardUnlEdu2000.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 24681274F8D57A98446AD3E532DEFA17 /* NstBoardMmc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EE1BB2C196F721EAE216A16D2C28F108 /* NstBoardMmc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 24BAED760BC6B605CA667DBDA91632C2 /* NstBoardUnlWorldHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 879E33D39DED7A856D086D3BB622C65A /* NstBoardUnlWorldHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2518C27E9C6CDC038A72544E1448E6A8 /* rumblepak.h in Headers */ = {isa = PBXBuildFile; fileRef = FACC5CB26B7294708491B46F0397D3DD /* rumblepak.h */; settings = {ATTRIBUTES = (Project, ); }; }; 25254659998C756A3F648127FA733177 /* GTLRErrorObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D5738F79EFF74666BE041EC76ACDFA /* GTLRErrorObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2531408651F267E3005C180FC7BBCA68 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 9C8507D47BD97C259CB67E95B0055BCC /* Standard.deltamapping */; }; - 25323339A8211142EC7CBCF8BB9C62EE /* Color.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 01B378B099C14E4E827FCBA843C08674 /* Color.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 256AB7604288ED1751C5EF0B1E7A789A /* NstVsSuperXevious.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B58A269231B9317967B84F433CD1F14 /* NstVsSuperXevious.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 256D95458D9F853F472BD6467FF15C4B /* NDSSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F2AB56328583FAAF95D7D3FFD81FEB33 /* NDSSystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2531408651F267E3005C180FC7BBCA68 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 80C066584D91192C2CB5B4E7606E8F20 /* Standard.deltamapping */; }; + 25323339A8211142EC7CBCF8BB9C62EE /* Color.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7D978ADE4F6407467C63202A3628BB80 /* Color.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 256AB7604288ED1751C5EF0B1E7A789A /* NstVsSuperXevious.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A3112617A51AF6A36EACF9C3379C4BED /* NstVsSuperXevious.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 256D95458D9F853F472BD6467FF15C4B /* NDSSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = C75D9ED3389A6C4CBF7EE16167967675 /* NDSSystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 258EC8380EB18D73BE4A95E0F6E76F6E /* GoogleToolboxForMac-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B8494C070246CC8BED190E092A370B3C /* GoogleToolboxForMac-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25A38C9929C9AA2BF9B4C5EC01EB5100 /* NstBoardBmcNovelDiamond.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5B3906E0F867AD7DBE110BED3C71FCD8 /* NstBoardBmcNovelDiamond.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 25DA4338D845BE0E74C55BE243C7ED93 /* assemble.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ACB84EDA396FC32A38EF2E80F2E78D5 /* assemble.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25DC15B3C97C02EAC7A4363265E8FFC5 /* NstCartridgeRomset.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1FF86939139DCD92059F8AFE38FCB116 /* NstCartridgeRomset.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 25EDEFE8AA7FFB5C69FED296344DAEFE /* assem_x64.h in Headers */ = {isa = PBXBuildFile; fileRef = C7361C449C785F93C554BF35D3475E03 /* assem_x64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25F9D19D9F8A5BA67FF2B729D05E1F2E /* hle.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BF79F8CEE5F58CD7F29CAF0AED592D /* hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 26067F53DD0AAA69124AF2F234C2B412 /* SocketSelector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6207EF118B9280CEDE13421C4CF64C8B /* SocketSelector.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 264031FA160F74BD32D8EF9F30514C16 /* NstBoardSachen74x374.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73427BAA44C8216F08EDAC6A0CAD0190 /* NstBoardSachen74x374.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 269A8F0EF89DD3F63151C8785ABE7A51 /* GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = F779EEE5715D3C32E844758058351CE8 /* GameControllerInputMapping.swift */; }; + 25A38C9929C9AA2BF9B4C5EC01EB5100 /* NstBoardBmcNovelDiamond.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8000DA34B53DFAB07C0D683921D81892 /* NstBoardBmcNovelDiamond.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 25DA4338D845BE0E74C55BE243C7ED93 /* assemble.h in Headers */ = {isa = PBXBuildFile; fileRef = FC30BD70C930E58720D8025E77346710 /* assemble.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25DC15B3C97C02EAC7A4363265E8FFC5 /* NstCartridgeRomset.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 36D6B831A12A9A6161E3436E49D4113A /* NstCartridgeRomset.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 25EDEFE8AA7FFB5C69FED296344DAEFE /* assem_x64.h in Headers */ = {isa = PBXBuildFile; fileRef = CA31C817FA32BF3FA44E8F3FD7273A2B /* assem_x64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 25F9D19D9F8A5BA67FF2B729D05E1F2E /* hle.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE1F9090B5DA68190D7B03CCE5E4629 /* hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 26067F53DD0AAA69124AF2F234C2B412 /* SocketSelector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 258092907C70394268136103C022FEE8 /* SocketSelector.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 264031FA160F74BD32D8EF9F30514C16 /* NstBoardSachen74x374.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8200E4FD4C7E3CC1AF2E0385FF61B65A /* NstBoardSachen74x374.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 269A8F0EF89DD3F63151C8785ABE7A51 /* GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE4DF888D759F8A1EFC289D72E1DF95 /* GameControllerInputMapping.swift */; }; + 26BD486C68EF5B079CF50F132FB6EAC5 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 02BCDAEC84EB90FED96E1A7812F1B9CC /* Standard.deltamapping */; }; 26D84D2836C13B2D939D5A5E2B1BD47B /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD2701346D82207B53CC9EC541F8AB0 /* Schema.swift */; }; - 26EA8FC2F1D23AB23AE750AF18221843 /* pngtest.c in Sources */ = {isa = PBXBuildFile; fileRef = A5D27BA453130BFB47F360AB69AE7A74 /* pngtest.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2759C2F52CCBBBA9F7A243D31EC1D042 /* language.h in Headers */ = {isa = PBXBuildFile; fileRef = EE4444EAFD33EB8BAB4FCBCD65A8446A /* language.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27A3816D5997640C9C2977E66280EBE6 /* TextureFilterHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = CFF9DBD50FF109AB529096538EAC3BE3 /* TextureFilterHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27ABACC6A4783C9079079AD0599DB017 /* NstBoardSunsoft3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9FDC34A806C43FEC8AEFDE037CBB3624 /* NstBoardSunsoft3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 27E12C031E1F193F89D7607F22242B8B /* NstBoardRexSoft.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CDE5597A73178118289A5342B56A5EFB /* NstBoardRexSoft.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 27E6E896B473FB2C6E22657C01C3F5C3 /* NstBoardBmcFk23c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52468FE08B22885CDC155AF176219E41 /* NstBoardBmcFk23c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 26EA8FC2F1D23AB23AE750AF18221843 /* pngtest.c in Sources */ = {isa = PBXBuildFile; fileRef = 308BAF6C3BE086BDB26EFE72FA9E48A6 /* pngtest.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2759C2F52CCBBBA9F7A243D31EC1D042 /* language.h in Headers */ = {isa = PBXBuildFile; fileRef = C2095BD846E0E2918CC6C26E739E147E /* language.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27A3816D5997640C9C2977E66280EBE6 /* TextureFilterHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F722266C08C5C1739772E3E72CEE17F /* TextureFilterHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27ABACC6A4783C9079079AD0599DB017 /* NstBoardSunsoft3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C021C2B8A573225A193057ADC5D4155F /* NstBoardSunsoft3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 27E12C031E1F193F89D7607F22242B8B /* NstBoardRexSoft.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5E0F87CCF191867B903270F7A2973CA2 /* NstBoardRexSoft.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 27E6E896B473FB2C6E22657C01C3F5C3 /* NstBoardBmcFk23c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EEC4678594429BB9CEE4C8F14CE8FB18 /* NstBoardBmcFk23c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 27E9618AB807EFBA9F6F713F8A3F9E38 /* TeamPolicies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A4B7B6EB4DB8A673532771B4AA8B264 /* TeamPolicies.swift */; }; - 27EA6C0692558952AA8164A66E618824 /* rdram.h in Headers */ = {isa = PBXBuildFile; fileRef = 2545337131DCB550937E1BA985A7CFB7 /* rdram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 28010A4E02AFF7CA653853E5B0F63621 /* encrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 7362D3AF48B22723885E66B0D25420E5 /* encrypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2819DC98C607DE278124727BA384A637 /* NstBoardMmc3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 455C3A1951DCCE758C8B38B0D96D1745 /* NstBoardMmc3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 28AEB1D89C9F02C00B767D2D95D68FB4 /* NstBoardSunsoftFme7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1B60BE30FA309328A9F8DEECADF5B276 /* NstBoardSunsoftFme7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 28B10CF2C882DC18EF20B1AA8E23AFE2 /* NstXml.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9AD6579FF3326133D973B8178ED12CEB /* NstXml.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 28ED02C88B90C1B230F0D20D597ED49B /* NstBoardSunsoft4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EDCD39BFA98723F034DF29BDED0067EC /* NstBoardSunsoft4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2951A6A8F093CE2733377394E60F8575 /* cached_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = A3B60534D5E0521E52D17D41457801B7 /* cached_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 295238CB026C2D0DE66098E71D0CC261 /* Version+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B9808132CF6702DDD5DA9C2F9A0C253 /* Version+Dropbox.swift */; }; - 296C11D713DA694BC95126E931781FAA /* ftrfork.h in Headers */ = {isa = PBXBuildFile; fileRef = E009A78A05503277A11995657704C090 /* ftrfork.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 27EA6C0692558952AA8164A66E618824 /* rdram.h in Headers */ = {isa = PBXBuildFile; fileRef = 468999824D8EE841754A3B910A80F137 /* rdram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 28010A4E02AFF7CA653853E5B0F63621 /* encrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 68A229662DE33DC9840D7CCB41582EA9 /* encrypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2819DC98C607DE278124727BA384A637 /* NstBoardMmc3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 599BB76DE3FA8F63E0E23EA8BAFD278B /* NstBoardMmc3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 28AEB1D89C9F02C00B767D2D95D68FB4 /* NstBoardSunsoftFme7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 69F05BD9CB2FBF76E6BDDB0F64BEDA8F /* NstBoardSunsoftFme7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 28B10CF2C882DC18EF20B1AA8E23AFE2 /* NstXml.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C6615F5A71F8DCD1E426F1118FC5F17A /* NstXml.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 28ED02C88B90C1B230F0D20D597ED49B /* NstBoardSunsoft4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1CFCC0E9B1069C5E4DE9B21620D39BEE /* NstBoardSunsoft4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2951A6A8F093CE2733377394E60F8575 /* cached_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FFF20A5E29BABF9B99B4C36366F9A7B /* cached_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 295238CB026C2D0DE66098E71D0CC261 /* Version+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F453A50C9E6D70D2C15CD2F4D9BE68 /* Version+Dropbox.swift */; }; + 296C11D713DA694BC95126E931781FAA /* ftrfork.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A1DFA16FF297CF6D496D8299BD6B3A4 /* ftrfork.h */; settings = {ATTRIBUTES = (Project, ); }; }; 29962679E9012751AD784D26C64074A6 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B56F8A99B549137872A3667B98CBAB /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 299A3DFFDCF10D83F769BE40B7F8730F /* DSTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CD89764ACCFBF65BFF14776DAB37EA9 /* DSTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 29F809E6C4D11C55843F619D51A88F05 /* SNESDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E7CFE992FA2A4ABDEAADC452BA0C39D5 /* SNESDeltaCore-dummy.m */; }; + 299A3DFFDCF10D83F769BE40B7F8730F /* DSTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E5761EB37D9B48C3780E3C7C5C40100 /* DSTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 29F809E6C4D11C55843F619D51A88F05 /* SNESDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EC30A57562ACA7D0725AAD7A0C184376 /* SNESDeltaCore-dummy.m */; }; 29FCAF85FC12577CD5CFF57453594C65 /* GTLRDriveService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A2CACDB9FCC4BFBF7C2F672657367FF /* GTLRDriveService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2A7DA941742FE42A2432F2776BBB4821 /* registers.h in Headers */ = {isa = PBXBuildFile; fileRef = D159D83AA74847EB95659739517DA8FE /* registers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2AA72C64A1A864A039D5E3F085526F29 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2DB53EA9D410D595711ED5EE029CAC60 /* Config.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2ABF63D583A05522FC0E68E2A51246B3 /* gfx.h in Headers */ = {isa = PBXBuildFile; fileRef = C9E53CDEE3FB0C997231AFF0EA62A9F4 /* gfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2ACBB459B58101305C15B9E93221B2D8 /* NSPersistentStore+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FB473C586C6C3957FB7196F5D749297 /* NSPersistentStore+Configuration.swift */; }; - 2AE4D610E02551D8EC4D51E4FED51ACD /* pngstest-errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B8B19BAF3A73578C62F6DA00164A175 /* pngstest-errors.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2AE7A62010F0BD02BBED36CFF53BBF91 /* TDStretch.h in Headers */ = {isa = PBXBuildFile; fileRef = CFE10B16B0C4C7D24E899A604244116E /* TDStretch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2AFC27492C6A1CBD4483B8FF6F94B1DF /* ftgloadr.h in Headers */ = {isa = PBXBuildFile; fileRef = B61327FFC19D6334ACBC6C66C2BC2BF5 /* ftgloadr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B4595B164B23A199766D1E6F5F27072 /* svkern.h in Headers */ = {isa = PBXBuildFile; fileRef = BB711F8EFE31B0F681D314A46FEA8398 /* svkern.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B533915FBFC58A9851E3F92E296A5C4 /* F3DFLX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A9E10651AAF13257794A36D1EE6B48B /* F3DFLX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2BB5DA0DB6B389E75E5ABD816506A72B /* ControllerDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2472287C41451AFFEC020183BD042A3 /* ControllerDebugView.swift */; }; - 2C5240B6436593A65C2120F7BABBE34B /* Keys.h in Headers */ = {isa = PBXBuildFile; fileRef = 133A1237CF59770626D5E03A5FDF58FB /* Keys.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2C54BA2379A2C403F7B8D0C49FAACC25 /* InputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B525F9D23FEA3BE925293A80FEC7DCC /* InputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A7DA941742FE42A2432F2776BBB4821 /* registers.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AD9520272152BEF938AC2E8A1E5961D /* registers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AA72C64A1A864A039D5E3F085526F29 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923B6C52E65298DE9941024CC376A04A /* Config.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2ABF63D583A05522FC0E68E2A51246B3 /* gfx.h in Headers */ = {isa = PBXBuildFile; fileRef = E0F150BFDEE45BE9AA4D0FDF4D91815E /* gfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2ACBB459B58101305C15B9E93221B2D8 /* NSPersistentStore+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36F0EA19BE634583B78B77F370DF9C88 /* NSPersistentStore+Configuration.swift */; }; + 2AE4D610E02551D8EC4D51E4FED51ACD /* pngstest-errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 16F999D1DA5FF8502A180736C3C54BFB /* pngstest-errors.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AE7A62010F0BD02BBED36CFF53BBF91 /* TDStretch.h in Headers */ = {isa = PBXBuildFile; fileRef = E3E9EE093E08EF6C06AEBAFED90F5FDC /* TDStretch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AFC27492C6A1CBD4483B8FF6F94B1DF /* ftgloadr.h in Headers */ = {isa = PBXBuildFile; fileRef = 9537E6C2A66052A73DC48C9A51A85FCA /* ftgloadr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B16AC9E3C87FF2EBD5E3AF7F7F4FB29 /* Wifi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BFE1D65673DECE7D6E2A1B6B529D5CAE /* Wifi.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B4595B164B23A199766D1E6F5F27072 /* svkern.h in Headers */ = {isa = PBXBuildFile; fileRef = 4541F12B3B53C045767B87EFB73A1AF3 /* svkern.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B533915FBFC58A9851E3F92E296A5C4 /* F3DFLX2.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9634B3B11790E21D1DD4B3D06D4A1A /* F3DFLX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2BB5DA0DB6B389E75E5ABD816506A72B /* ControllerDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FBFEDA648CA302663BC0A53CD4C4444 /* ControllerDebugView.swift */; }; + 2C5240B6436593A65C2120F7BABBE34B /* Keys.h in Headers */ = {isa = PBXBuildFile; fileRef = 73490B7869EFEC11975B85243D0CA66D /* Keys.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2C54BA2379A2C403F7B8D0C49FAACC25 /* InputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 165B7915A8914F93AA1A0D7D45181074 /* InputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2C793E39108FE340FC5BFCF448F6AC2F /* GTLRDateTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 01082497DDFB3641F47D167E3C3EB389 /* GTLRDateTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2C86F96F2A98EB8553F83501FAB77D58 /* NstBoardKonamiVrc2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3F3421F39C5B3686D06A4A47CFC049B7 /* NstBoardKonamiVrc2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CC0B722492849CF64841AE7884A8948 /* RemoteRecord+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70E06F935BCC172832EAFB66DF8A22AF /* RemoteRecord+Dropbox.swift */; }; - 2CCC882A4E5D781FCB474D22071FDB82 /* ZSortBOSS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 071BA5C258DCD29E5B2DDCC021A6B4F7 /* ZSortBOSS.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2CEEF7D75DDAFBAAF8E4106F54BDE731 /* opengl_CachedFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AE06F95AF0928716E10E432596BE6C68 /* opengl_CachedFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2C86F96F2A98EB8553F83501FAB77D58 /* NstBoardKonamiVrc2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 431243B7F84E2298319F60EF40D02386 /* NstBoardKonamiVrc2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2CC0B722492849CF64841AE7884A8948 /* RemoteRecord+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A95544E49AAD44E88BF2C9268C9BF94 /* RemoteRecord+Dropbox.swift */; }; + 2CCC882A4E5D781FCB474D22071FDB82 /* ZSortBOSS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1939C13EF032EAB42CBC6C921ECE7AD8 /* ZSortBOSS.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2CEEF7D75DDAFBAAF8E4106F54BDE731 /* opengl_CachedFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0089D9FB88A0BFD7C81E2BBAD71BEFBF /* opengl_CachedFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2CFB7E4AB44C35953034CE00C927B1F8 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FC76FBFEFEF12E5FDF51209753949E3 /* Response.swift */; }; - 2D1470711C87547A80BB9C982EB6B149 /* PACKED.h in Headers */ = {isa = PBXBuildFile; fileRef = 24C0E7C293EBDFEBA516E17AD1564246 /* PACKED.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D5FA06414DA007392294E443A9FA75B /* CombinerProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CC4973A6BF6AFF9D8562E7A4E9AE4D8 /* CombinerProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D6BF11580E1CC47CF8280E5C4971155 /* clock_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BACFFAA0E0BD975E90FF29D6B33B0B3 /* clock_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D1470711C87547A80BB9C982EB6B149 /* PACKED.h in Headers */ = {isa = PBXBuildFile; fileRef = C64A7F2FDE6DF6B64B3CFFEE19102859 /* PACKED.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D5FA06414DA007392294E443A9FA75B /* CombinerProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = E66B9B91DB7E04516C8FF716DE48D701 /* CombinerProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D6BF11580E1CC47CF8280E5C4971155 /* clock_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 22515475C0A7E9BD8FD4145526FBC353 /* clock_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2D87E1AEC45003E3C2203D5A623DB6E1 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB8D4802A5F80BBA2E31C377A7C9689F /* Expression.swift */; }; - 2DB19BEF17C3D5BE1E0C85B25C931C43 /* Debugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 82C27E6DA6F13A8BFDE148AF1AEB92CD /* Debugger.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2DC9C43A21C6350E567B14C11DDE7542 /* NstInpKonamiHyperShot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 35AD6B07396F00A51E9FE9F7F393FAE0 /* NstInpKonamiHyperShot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2DE185B952A67810F78722837354F3EF /* RSTPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 37F6886809E07DA8D8DA791B7D5E700D /* RSTPlaceholderView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2E17100758232DC76432B02A12EFAEC1 /* NstBoardDxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB023C27C2E7EBAB1EBA4B6CE2CB82B8 /* NstBoardDxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E1CE99F9F3BACCEBB2EE44E78B4D3F3 /* DeleteRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF6E047B23D9FBAF2DB48EC4B655B82B /* DeleteRecordOperation.swift */; }; - 2E4CB07EBF0D9A446F74DC8A81CA4EDE /* opengl_BufferManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1841A00CFBD8BE33D1C7736E94E929AE /* opengl_BufferManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E62C0D774A841E9ED7F5CE4E5B70E09 /* AutoBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C33E4A59D390AF25D605A289B4F902E /* AutoBuild.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E682F38F1F25EFF84F90ABADA51DB89 /* sram.h in Headers */ = {isa = PBXBuildFile; fileRef = A19E4DF8BAF4F0082185FA6315D2B6B7 /* sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2EF4938D66CE6DBAB9CA5E87DC5DA1D9 /* rsp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = F203A19460529D13E8FCE2A540485658 /* rsp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2EF7C84C951F326A18407145FF81F584 /* armdis.h in Headers */ = {isa = PBXBuildFile; fileRef = A1E8AC977ABBC00002A2FD5C18CF395A /* armdis.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2F010DC7BBE382CA0729F3EBD313D9B9 /* NstDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B7F7B276E6C1803265F573539F0A3704 /* NstDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2F47AFFD0CEB31CEC05058726214B60A /* RSTCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FCDA1FB74E4C4092E5F8A5BC8289630 /* RSTCollectionViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2FBA2E9BACD4FFD2BEAC5CAB997FBC99 /* NstApiMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94C8A461D47DE4DDB1AEE7830B56ADAC /* NstApiMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 30360304FB3B07CC67CE7E12DDCD6AD8 /* NSPredicate+Search.m in Sources */ = {isa = PBXBuildFile; fileRef = BFD0CAB74C45D6B1CA49B94505E8E762 /* NSPredicate+Search.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 304A6957CBA97867455427624312350B /* ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = F17010739364C5C3A5C00A7849EDF47C /* ring_buffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 305114B6580952D1693DD539DEA79A62 /* NstBoardSachenTca01.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1BC03A069A547EB736D558AC237B614A /* NstBoardSachenTca01.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 30A0140597B79FDE8AE504A40DDE901F /* ftchapters.h in Headers */ = {isa = PBXBuildFile; fileRef = A71446C1AC97FB34D26841347BA3E583 /* ftchapters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 30C13B34A3BE33BA757F87123E879893 /* NstBoardBmcPowerjoy84in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F11F1CCE5B53125548AF2C84DC90CF96 /* NstBoardBmcPowerjoy84in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 30C7890A54FA46DF6071A8DF2496A9E0 /* opengl_UnbufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CD4252EE7412B7E97A7FA9F6EB9095D /* opengl_UnbufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2DB19BEF17C3D5BE1E0C85B25C931C43 /* Debugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80019774B54716FABF7DEFCCD68E75C2 /* Debugger.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2DC9C43A21C6350E567B14C11DDE7542 /* NstInpKonamiHyperShot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93BDAC11CA2A4DE08DB5A3ACAFE90787 /* NstInpKonamiHyperShot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2DE185B952A67810F78722837354F3EF /* RSTPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8643E93FD4508FE4A1F4CFE2588044 /* RSTPlaceholderView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E17100758232DC76432B02A12EFAEC1 /* NstBoardDxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 49479F202B609744C82D4138F8FCD9CE /* NstBoardDxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E1CE99F9F3BACCEBB2EE44E78B4D3F3 /* DeleteRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F512DCC7821D8E2620E88EDC969A6116 /* DeleteRecordOperation.swift */; }; + 2E4CB07EBF0D9A446F74DC8A81CA4EDE /* opengl_BufferManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = AE3364FCB045C19E649AAFBEB1B1A950 /* opengl_BufferManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E62C0D774A841E9ED7F5CE4E5B70E09 /* AutoBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 08EEF87CE7D5964AB34DCF33763BB099 /* AutoBuild.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E682F38F1F25EFF84F90ABADA51DB89 /* sram.h in Headers */ = {isa = PBXBuildFile; fileRef = 022DB7F76D90A69E8472052BB6DAF7F7 /* sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E8BB841572131183B17430DC86A4A5D /* ARMInterpreter_ALU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E5A3A24EB4B9ABCAF94937C5D6C5E88 /* ARMInterpreter_ALU.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2EF4938D66CE6DBAB9CA5E87DC5DA1D9 /* rsp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEBC190192DF7DAD9E802180C71E395 /* rsp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2EF7C84C951F326A18407145FF81F584 /* armdis.h in Headers */ = {isa = PBXBuildFile; fileRef = A493D236FBEDB31AE7799E82580CE1E6 /* armdis.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2F010DC7BBE382CA0729F3EBD313D9B9 /* NstDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FC77FD154105FF5182FC0B3EB06431FE /* NstDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2F47AFFD0CEB31CEC05058726214B60A /* RSTCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 39C09D3911D40FDAEA431AB499EE712E /* RSTCollectionViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2FBA2E9BACD4FFD2BEAC5CAB997FBC99 /* NstApiMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C08D3CFD628192FDB9B9FD5A63E531B4 /* NstApiMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 30360304FB3B07CC67CE7E12DDCD6AD8 /* NSPredicate+Search.m in Sources */ = {isa = PBXBuildFile; fileRef = 558BFA270FA2F23C320E11E090A7662E /* NSPredicate+Search.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 304A6957CBA97867455427624312350B /* ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 15A5B47B39157696DDBC56DF53AEFE81 /* ring_buffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 305114B6580952D1693DD539DEA79A62 /* NstBoardSachenTca01.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 24CA32513A0AE3E1229D4189D3F40C32 /* NstBoardSachenTca01.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 30A0140597B79FDE8AE504A40DDE901F /* ftchapters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9378D679A1407D0B1973322B7BC01CC6 /* ftchapters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30C13B34A3BE33BA757F87123E879893 /* NstBoardBmcPowerjoy84in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D23E1E808E48E9849AB52E92FEE110B2 /* NstBoardBmcPowerjoy84in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 30C7890A54FA46DF6071A8DF2496A9E0 /* opengl_UnbufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = DFDA1E12C63A8E139E0F5F52E6F63F9D /* opengl_UnbufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 30E3FF5DE72D56612993D499EBED8C9B /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDA9A78863460869F150386B089AF8F /* AggregateFunctions.swift */; }; + 310EE1EEE2F7EE1601F5B3BE385E9C1D /* ARMInterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956202907723788FB190BB389EFFDB25 /* ARMInterpreter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3118030C5A979F122AACB2CBD58C4E56 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4476D277BAC65A966CF97717AC7EC945 /* Archive+Writing.swift */; }; - 312AD7DE1453F9AD4A92963F384CF46C /* RSTCellContentChange.m in Sources */ = {isa = PBXBuildFile; fileRef = AB4067DCD2A73B47C583FB56E3239688 /* RSTCellContentChange.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 313A7C9034C26D9940E7B65EFB88F57E /* CRC.h in Headers */ = {isa = PBXBuildFile; fileRef = 7637F69AFE4440D79912C03BC0E864AE /* CRC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 312AD7DE1453F9AD4A92963F384CF46C /* RSTCellContentChange.m in Sources */ = {isa = PBXBuildFile; fileRef = D446F7C2C98C47BB376AA4DC92FF956D /* RSTCellContentChange.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 313A7C9034C26D9940E7B65EFB88F57E /* CRC.h in Headers */ = {isa = PBXBuildFile; fileRef = BB01FC8167E6C6B4469AC59E3C3DF146 /* CRC.h */; settings = {ATTRIBUTES = (Project, ); }; }; 31697585FCCAF83D2BF44D087DA75CB8 /* StoneSerializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDEA401B77A227622E55445028991383 /* StoneSerializers.swift */; }; - 319D7327C17D7254FF4FBC0F1522DD04 /* svpsinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C269A9412FC718CE8C8E996630F5873 /* svpsinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 31C3355B5C3F3DBA2AE027298397ABFC /* svprop.h in Headers */ = {isa = PBXBuildFile; fileRef = F33297D97FD3A5157D3125AA0D30D1CC /* svprop.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 31DF008DDC244721324E3AB3AEEBDB22 /* vidext_sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = EDC16124014E8BE9A723398676F8E95D /* vidext_sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 326048AB59E512995FA92BFB0D4005C9 /* Roxas.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A32869D90E7BAC47B25D2F8E75F7856 /* Roxas.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 328973836A67F6C5B5D59A4EEC49C810 /* GLFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5D08BCF7193B533EB2AF5071C88F1E40 /* GLFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 32B5C2CBFA681959F551BF129BD8DC00 /* NstApiBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4060028836FDB7AAC525DB0819187A0C /* NstApiBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 32B869763DE524407E4EC13B5405C6CA /* NstBoardBmc20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6653BEF078E8146300FE0A11A7E562B9 /* NstBoardBmc20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 32B8B962EEB709DEC0F2BAEB037A21B1 /* dd_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = B83F5B2E3006BD12D60CA06E677E7EE6 /* dd_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 319D7327C17D7254FF4FBC0F1522DD04 /* svpsinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FF62ADB0969A5BAF88DAF079C924AD01 /* svpsinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31C3355B5C3F3DBA2AE027298397ABFC /* svprop.h in Headers */ = {isa = PBXBuildFile; fileRef = B1080C9D0AB5BC601BD4F16A50CC842F /* svprop.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31DF008DDC244721324E3AB3AEEBDB22 /* vidext_sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AE7E3B37D390409F4ECEA14098EE0F7 /* vidext_sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 326048AB59E512995FA92BFB0D4005C9 /* Roxas.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE57A68E189FBFDCA39ADF0FAB28195 /* Roxas.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 32835555CC71C9A1FD4C3765B72224E5 /* ARMInterpreter_ALU.h in Headers */ = {isa = PBXBuildFile; fileRef = E2C410EBF08C1B76FDAC71A27419D38B /* ARMInterpreter_ALU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 328973836A67F6C5B5D59A4EEC49C810 /* GLFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 442FF940EB7C16C5DB47BE217B7EAC51 /* GLFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 32B5C2CBFA681959F551BF129BD8DC00 /* NstApiBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9ED0B41AF5C196E6858B6DA26EAAC68 /* NstApiBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 32B869763DE524407E4EC13B5405C6CA /* NstBoardBmc20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F376A1194EDAFFBDE131906336FB08BB /* NstBoardBmc20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 32B8B962EEB709DEC0F2BAEB037A21B1 /* dd_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = FA40AAF8BCF7B04694A0037FB3760458 /* dd_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; 32C5649F56A9F2DE34AC6EF9FCA33323 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F9F5190AC3B7EA2777CF3CE3A3E7986B /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 32D70D7BB7F2A17F9C78F7AE99B2F7CC /* FileProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12EC1D77781095125E901DEFF622F36 /* FileProperties.swift */; }; 32F7E2ACCA4602AE9DE680A9D70EE36F /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D3DBD12BF6940FC1A2BE76A08E5471 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33005D6A6E94208A97F963B03EB5768F /* savestates.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A3C6439C7D592FA721C9BF78D5CF6BC /* savestates.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 332024B9AF30A07CE496CC11D9591023 /* SaveState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00EA19D2D4A64B523C65C5C29699ADC6 /* SaveState.swift */; }; - 3323FFE5A1367960FDB731C2D8B45870 /* SNESDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CD3F5DB69B6C64C0A6692B58AFD0B17 /* SNESDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 334648F3BE0F3EB894ED97C63BABFEA7 /* NstBoardUnlN625092.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F76EE1EB3D0BD20599E9210AA395F4F5 /* NstBoardUnlN625092.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 337E5275965EC77007B11EADB625B015 /* FIFOSampleBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = AB065A0FEDAFF486E7DA04E1936E82A1 /* FIFOSampleBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33869554EDBB14406B7BB9E8647E35A0 /* hle.c in Sources */ = {isa = PBXBuildFile; fileRef = 74F470E8DD823ED4FE7D10FB84B4ABD8 /* hle.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 338A23437E12CC5C72BBB54B8189E707 /* ftpic.h in Headers */ = {isa = PBXBuildFile; fileRef = D9191356F40229DDA60488AC64805339 /* ftpic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3399E40819B47FC57D44FDBE3182620E /* fxinst.h in Headers */ = {isa = PBXBuildFile; fileRef = F92CC3DB4FB3E1C8CB02FF550968E5DD /* fxinst.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33D52FD746A6F4535B78B95B1949D628 /* ftoutln.h in Headers */ = {isa = PBXBuildFile; fileRef = D69B8F7EC4A4B64E7B7E790A6DCF62C4 /* ftoutln.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33F513674BEFADB6CB760D6A81C2AA7B /* F3DPD.h in Headers */ = {isa = PBXBuildFile; fileRef = A6652070A07FC48369CD2D2D93B812AB /* F3DPD.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 342FFC207143FFD0D02C8E58FD8765D9 /* ThreadImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6ECAD64E54D551CAC63388B1E3FBB33 /* ThreadImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3440F2E7C7091E968DCC8219C505A657 /* Config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4B51F40AD66946C956A3C40AF6E4E5E6 /* Config.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 34AA63D390F044C33722CC2D9CC9B3D6 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 49A05F402834F289E25A1D2D8D31ADA5 /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 34AE8851640DC6E16132178B877A21E0 /* RemoteFile+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69ABB3390625B7C34F4619CCD4F218E2 /* RemoteFile+Dropbox.swift */; }; - 34B57DA227F4B2C65BB287D38D80ED9D /* opengl_ColorBufferReaderWithEGLImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 464088003409FF077A690AF31D685656 /* opengl_ColorBufferReaderWithEGLImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 34FBC7619CC07453CA4485178D84925C /* NstBoardKaiser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 72248A001C60C8B9DD1CCDC9D78DAE0B /* NstBoardKaiser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 33005D6A6E94208A97F963B03EB5768F /* savestates.h in Headers */ = {isa = PBXBuildFile; fileRef = F27E0BB08CA9AA99087CB49B95D5A051 /* savestates.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 332024B9AF30A07CE496CC11D9591023 /* SaveState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 027FB4C6CC71DADB243F4D75F54D49E2 /* SaveState.swift */; }; + 3323FFE5A1367960FDB731C2D8B45870 /* SNESDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D6CBC1B60FADA9D18C705CC48D37B27 /* SNESDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 334648F3BE0F3EB894ED97C63BABFEA7 /* NstBoardUnlN625092.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B67B97B22BF6E290CE3176CF648D18EC /* NstBoardUnlN625092.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 337E5275965EC77007B11EADB625B015 /* FIFOSampleBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = CE2627D52C27F26A3779CDAD7756E356 /* FIFOSampleBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33869554EDBB14406B7BB9E8647E35A0 /* hle.c in Sources */ = {isa = PBXBuildFile; fileRef = 888E98C361E5C340C2DFB6D6D1029392 /* hle.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 338A23437E12CC5C72BBB54B8189E707 /* ftpic.h in Headers */ = {isa = PBXBuildFile; fileRef = 1406F5851ECA113961E420930E44400E /* ftpic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3399E40819B47FC57D44FDBE3182620E /* fxinst.h in Headers */ = {isa = PBXBuildFile; fileRef = A69F666C61BC56F0C8F6DA00E957E5AE /* fxinst.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33D52FD746A6F4535B78B95B1949D628 /* ftoutln.h in Headers */ = {isa = PBXBuildFile; fileRef = 424AB45294CF56320B355DCE7A0F8E81 /* ftoutln.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33F513674BEFADB6CB760D6A81C2AA7B /* F3DPD.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D3C6982EBE0EAC53FAA7E37AFA9496 /* F3DPD.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 342FFC207143FFD0D02C8E58FD8765D9 /* ThreadImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07CA97CCF4C09704E6DE0E7275915BD2 /* ThreadImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3440F2E7C7091E968DCC8219C505A657 /* Config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0556A2BF839B0F53563F8D71873A9029 /* Config.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 34AA63D390F044C33722CC2D9CC9B3D6 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 33B331BB819B9C6CB76839045D4EF06B /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 34AE8851640DC6E16132178B877A21E0 /* RemoteFile+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB870F4AD39D4A4E00866F16DBDCEE49 /* RemoteFile+Dropbox.swift */; }; + 34B57DA227F4B2C65BB287D38D80ED9D /* opengl_ColorBufferReaderWithEGLImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B0AD671A8AD882845CE216B6821E50B /* opengl_ColorBufferReaderWithEGLImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 34FBC7619CC07453CA4485178D84925C /* NstBoardKaiser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75A5C15DC18E79C28375E74324A85E26 /* NstBoardKaiser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3522984A23D0983D50F2F60CD2B9F2C9 /* SMCalloutView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B70989044B91229B1C51B5758D9F96E5 /* SMCalloutView-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35383CB99EAA9537E5158062A5DBC3DF /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = 53A3C2A5341545B46CCEF6C7DCCC3D12 /* callbacks.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35722184127DCAE56E998143DD4FFE37 /* NstFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 81ACB985C1F71D0FC6DF2A0CBEC3C3D6 /* NstFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 357A8FB1CC3FD998F2F68DFDBD72ADB2 /* NstBoardBmcGamestarA.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 46068669BC91126FFFEA59576128CCDD /* NstBoardBmcGamestarA.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 35AF870E1B3A0DB7D735F735FA422C6F /* NstMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A03F65FB47279C40083D17F181821336 /* NstMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 35D2385FCC093615C3BA7B260E3E6CF0 /* TxQuantize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5D68576CC0EE04A78AE791897AFD780 /* TxQuantize.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 35EC8B4BFB120C69E99A260D786EAB16 /* NstBoardUnlTf1201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B227CD071A5B88861CA260BED0FBE3D8 /* NstBoardUnlTf1201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 362273378B1432EA72CB535B566D301C /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4649DC9403189EF7D8B5F740147BCBF /* opengl_ColorBufferReaderWithBufferStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 362D9AD5872E377FFDA39BFED5E02BA3 /* gralloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B2C2ADF3521E6B7DFB9C17A4247A3B /* gralloc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 35383CB99EAA9537E5158062A5DBC3DF /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = F764C420914578158ED027BC44B8591B /* callbacks.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 354A8F40F5743D12518A0509EB8575FC /* CRC32.h in Headers */ = {isa = PBXBuildFile; fileRef = 40F516E9DDCDFF55309BF56900D3A6CA /* CRC32.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 35722184127DCAE56E998143DD4FFE37 /* NstFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8F3A9DEA75F75C3ECC9442042F92E484 /* NstFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 357A8FB1CC3FD998F2F68DFDBD72ADB2 /* NstBoardBmcGamestarA.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 18185E2750AF215989A1C8875DDD67B4 /* NstBoardBmcGamestarA.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 35AF870E1B3A0DB7D735F735FA422C6F /* NstMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 59E4444E0AA576955C9370592EBB6D96 /* NstMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 35D2385FCC093615C3BA7B260E3E6CF0 /* TxQuantize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29EB52E4D8EE749D56B951548307A0DE /* TxQuantize.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 35EC8B4BFB120C69E99A260D786EAB16 /* NstBoardUnlTf1201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43CE808CD1AE36F53CED9431BA461025 /* NstBoardUnlTf1201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 362273378B1432EA72CB535B566D301C /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDF03E49537AAB42B11FC2BE2DA3821B /* opengl_ColorBufferReaderWithBufferStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 362D9AD5872E377FFDA39BFED5E02BA3 /* gralloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7001F35121D79E891B1BD2B4C133B505 /* gralloc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 365E7E156C92209524A265BE63A05992 /* TransportConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BFB44B9B839260D03128AA298313F4 /* TransportConfig.swift */; }; - 36F12C2BEFEC26AF3FB64AE840F145B6 /* audio_out_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CA88B3A2BBE2EA0112C360B061B10B9 /* audio_out_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 37021E54EAB76D5B8FD8730232C11C87 /* NstBoardBmcCh001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 35CFBA425AB64788F59985DF4294DCD2 /* NstBoardBmcCh001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 375E255B89D6FC678440579E28CCB3F8 /* inputSDL.h in Headers */ = {isa = PBXBuildFile; fileRef = 933F52FD6D2B1895EB6774DAEDF6A159 /* inputSDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 37759BA8A77F128E6D2AF1A74F89F7B0 /* retro_inline.h in Headers */ = {isa = PBXBuildFile; fileRef = 185D80DA8DB94398379D2CBC6CB4E814 /* retro_inline.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 37C6EC1C6E2FD686EDD84A12A42235C1 /* NstBoardRumbleStation.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 215635C653FC2F3689E27136178F6166 /* NstBoardRumbleStation.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 37FF7BAE099FE3FA458DF38E809F974B /* RateTransposer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AFAB5260C27DEE351813C7122CD4AF4 /* RateTransposer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38140579D6698DB3EC5D4D8348A639CE /* ttnameid.h in Headers */ = {isa = PBXBuildFile; fileRef = 8715DB110EE34E0C96E7C74313A7A89A /* ttnameid.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3826FDB208BDA2324262CC8F09622DA4 /* NstBoardKasing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A5E4840045EBB8FE5E794C6DAEFF0CE7 /* NstBoardKasing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 384996ED15655B92633B49BE2D2F508B /* 3DMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 3283EF596434B1D254E4719AEDDF2B9F /* 3DMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38645348CC5C592425C533EC8030013D /* F3DDKR.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C35DC64C3A93740937D3C3964F9200 /* F3DDKR.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3867303ED090C22C7B91F80D0D34877C /* NstBoardJaleco.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 05E18E206FE5E3ECC0A0F7DE2BFF3CB9 /* NstBoardJaleco.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 38C976A8DEE43222DFA6C54E16E79FFA /* jpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = A9749B925BF718E50CBCEE6B82F21925 /* jpeg.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 38F6582226CA2808DF945CDE63DC5158 /* DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D8EB194138EAB03A1BAF77804381385D /* DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3914A75BEE189973A204BF332FFCEFA8 /* VideoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07BDCD6B6C9579E41B46804763B13582 /* VideoManager.swift */; }; - 3926A56C74A6C3AE66EF1745844B04BE /* NstBoardJalecoJf17.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D8D32EAB45D5BEE636521CB06DB71FF9 /* NstBoardJalecoJf17.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 394E947ED5AECB6E6C373FCB5BC01756 /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = 451269EF812651EDABF4A20D0D0EC707 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 39A8A5F1AC09F24DF124FA568B4BA9DE /* interpret.h in Headers */ = {isa = PBXBuildFile; fileRef = 7745EBDA352FAAAD04827718AFC2DDD0 /* interpret.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 36F12C2BEFEC26AF3FB64AE840F145B6 /* audio_out_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 2212C1BF0C50BC7C98BA6A5202DD8DFC /* audio_out_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37021E54EAB76D5B8FD8730232C11C87 /* NstBoardBmcCh001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DB8FE8CE43E3908EA8654AD9FBFC9667 /* NstBoardBmcCh001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 373BD9D2878032DC599159EE03FB8083 /* NDSCart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEDC2F9C531F5A7B59C13110C977C309 /* NDSCart.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 375E255B89D6FC678440579E28CCB3F8 /* inputSDL.h in Headers */ = {isa = PBXBuildFile; fileRef = FFB86879ED24825EDEC6F479F7EAA0DA /* inputSDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37759BA8A77F128E6D2AF1A74F89F7B0 /* retro_inline.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E4E1022555EFD22260B7C32AE9BCEF /* retro_inline.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37C6EC1C6E2FD686EDD84A12A42235C1 /* NstBoardRumbleStation.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B01AC6DC482963FB6A18796241C0A542 /* NstBoardRumbleStation.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 37F81F0927DEAB2B067BB5BD8D29618B /* FIFO.h in Headers */ = {isa = PBXBuildFile; fileRef = 4154C14E31E1F470D6189218AA154654 /* FIFO.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 37FF7BAE099FE3FA458DF38E809F974B /* RateTransposer.h in Headers */ = {isa = PBXBuildFile; fileRef = DB540D974E938108678097CB0FEB8A5E /* RateTransposer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 38140579D6698DB3EC5D4D8348A639CE /* ttnameid.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E2DF4FE7FA12D11F9519C050CBAE82 /* ttnameid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3826FDB208BDA2324262CC8F09622DA4 /* NstBoardKasing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3E468629CDCBD9A934833FB33710BC38 /* NstBoardKasing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 384996ED15655B92633B49BE2D2F508B /* 3DMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 75C6CA9B6DE6420B9DC5F198E990FC25 /* 3DMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 38645348CC5C592425C533EC8030013D /* F3DDKR.h in Headers */ = {isa = PBXBuildFile; fileRef = 47298EADB145DA1C5DC8A5C800E652FD /* F3DDKR.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3867303ED090C22C7B91F80D0D34877C /* NstBoardJaleco.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E551214789CB8350262743FF9EF95629 /* NstBoardJaleco.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 38C976A8DEE43222DFA6C54E16E79FFA /* jpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = D72335FEE7B69D06AC33B707144B50DE /* jpeg.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 38F6582226CA2808DF945CDE63DC5158 /* DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 957167DFF15F649697598EB9E605462A /* DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3914A75BEE189973A204BF332FFCEFA8 /* VideoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A428ACD6852B72482C8570B4E49B15B4 /* VideoManager.swift */; }; + 3926A56C74A6C3AE66EF1745844B04BE /* NstBoardJalecoJf17.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9AB2C2CCEC496A1EE69FB5F1EF214B1A /* NstBoardJalecoJf17.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 394E947ED5AECB6E6C373FCB5BC01756 /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = DE1CD0A14598D55B1CD56BD77F8073C9 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39A8A5F1AC09F24DF124FA568B4BA9DE /* interpret.h in Headers */ = {isa = PBXBuildFile; fileRef = F85A845F1619F7A0F0BB1F552B74AA0E /* interpret.h */; settings = {ATTRIBUTES = (Project, ); }; }; 39E36E16FF2FAB77065F3E24D90D594B /* GTMGatherInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D9CA1BA4B1C7EB05BD412CB7895C1658 /* GTMGatherInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 39F169D40F3D2217C030DF5C4AB9AEEA /* NstBoardBtlShuiGuanPipe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D31F9464D26C84F4303F9214852E0259 /* NstBoardBtlShuiGuanPipe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 39F6310C0E2893433591C1FB861126CB /* fterrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 24ADD77C9E459763B52BB8DD8BA8DE7C /* fterrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A2C36BE4037A177800397DEBC20D3CB /* DebugDump.h in Headers */ = {isa = PBXBuildFile; fileRef = 485C835BCAC9FE9D2D7A0723CC28AE49 /* DebugDump.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A3EF780EA0DC5DAB4B04EEE425125F1 /* CircleShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F96385E0EAB3EFE69A0C198645BE3F02 /* CircleShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A629AE2A7756937510D8E4BF71DE816 /* NstBoardExRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FC1E9CD449F2D3C5D045DFEBF6BBE3C2 /* NstBoardExRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A76CD8381C61DF00848DA207E173AE6 /* CommonAPIImpl_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 337E3DE6F767B4B0E0E8615F5A236955 /* CommonAPIImpl_common.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3AB819E705859C4B41819930E8681142 /* musyx.c in Sources */ = {isa = PBXBuildFile; fileRef = B6DF6A81ED3CF21DF9B51DF914D08077 /* musyx.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3B1BDA44ECDDE86E5A508EF8FA5CB3AB /* metaspu.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ACF8573E12E7CE6FC8382B1C7A28827 /* metaspu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3B2297CC939F6D0B7512A5D0F8E91436 /* GLideN64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0482ED34CE1A01F70FEB8B861E2E8E09 /* GLideN64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3B46BB318BD31DA44FF7F2A0625EDD1B /* ftserv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A0B7AABE64CE3CFD6CBD4F335F9FBE1 /* ftserv.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3B7DFAE0D5614D45A623F2BA17A8884D /* NstInpPaddle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2F60B797411C7BEEEE57114981D1D5CE /* NstInpPaddle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3BD8EFFCB0910051586FBF46AC5C55C8 /* NSBundle+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B22B42E3A2ED5293029A56068CA8061 /* NSBundle+Extensions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3C0BD562ED5EA4DBCCE3A2FB7D940FF6 /* gfx3d.h in Headers */ = {isa = PBXBuildFile; fileRef = AB93D8ED4B2543F199979AA5F4CDF7EE /* gfx3d.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C0C34B66F4DE1573FAD3F67797849EC /* retro_dirent.h in Headers */ = {isa = PBXBuildFile; fileRef = F43AF02D4A3D45AB4C91449083C04623 /* retro_dirent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C1277C9879849275BD4412E63547A9A /* PngFile.h in Headers */ = {isa = PBXBuildFile; fileRef = EF96AD8DFCE6CD9FF8E28E8AED9E829B /* PngFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C36E674426756F060D9479A78E5CB38 /* RSTCompositeDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 17D76ED9F3E5D01C1E48424DA204220B /* RSTCompositeDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3C42E2DF170FEEC1FEDCF257FBC59691 /* NstVideoFilter2xSaI.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E66CD7AF3945F7CDD842E817ACEA39E8 /* NstVideoFilter2xSaI.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C5A26E2B06FF1324498A5DAA75F2AFD /* texcache.h in Headers */ = {isa = PBXBuildFile; fileRef = AD3187200380A3FB25170D5B9EE0F5DF /* texcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C75D97752958BB6E1068A79BBB78763 /* opengl_TextureManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2008405A1930372A338506F2E4FA20BA /* opengl_TextureManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C78E4348B065F6A1F2E070E9C9AEA1F /* GBCTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = A0E180FFBDDF6AD6D35795FD64A7222B /* GBCTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3C832BE3E684CFF4E7D7C7D1104C63C7 /* UITableView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = D6BFD334CCCF9EBCBC3A6ABCF03BF295 /* UITableView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3CCFF040F69A447BCC79C844C6E30412 /* DeleteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CE5B0A31ACD87513F0942D9E71F9BD6 /* DeleteRecordsOperation.swift */; }; - 3D28FECC438A6FCA1A5C16275198B7A5 /* NstIoPort.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A48812FF7D0B803D29C9CE12B0F74926 /* NstIoPort.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 39F169D40F3D2217C030DF5C4AB9AEEA /* NstBoardBtlShuiGuanPipe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 406A09A4EB4DA79E27112B7E71A89701 /* NstBoardBtlShuiGuanPipe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 39F6310C0E2893433591C1FB861126CB /* fterrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 71CB328D9397310D6DF21B68E80E7672 /* fterrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A2C36BE4037A177800397DEBC20D3CB /* DebugDump.h in Headers */ = {isa = PBXBuildFile; fileRef = D18D98DFBFA469D8509A1C9BFB85042E /* DebugDump.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A3EF780EA0DC5DAB4B04EEE425125F1 /* CircleShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9B0886627D79927053695B7F4472719 /* CircleShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A629AE2A7756937510D8E4BF71DE816 /* NstBoardExRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4964760304F643497DF38EA719CD28CA /* NstBoardExRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A76CD8381C61DF00848DA207E173AE6 /* CommonAPIImpl_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDBCAC7AE4C298FE4646BD7005AEE4F8 /* CommonAPIImpl_common.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3A8E9E2BBC13E7A7D646DE95D3153B21 /* MelonDSEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9D3F865CEA5A8DDF0E5A48DF76EFC326 /* MelonDSEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3A92EB7D29C472B745D4A5BA74BD53A6 /* MelonDSTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 11142D8FFFBE27CBCDA599BAC4229CE3 /* MelonDSTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3AB819E705859C4B41819930E8681142 /* musyx.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A835642A0FF668D9565F7122EDF06B1 /* musyx.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B1BDA44ECDDE86E5A508EF8FA5CB3AB /* metaspu.h in Headers */ = {isa = PBXBuildFile; fileRef = 43A3F7C375F5059943E7A8DB77319414 /* metaspu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B2297CC939F6D0B7512A5D0F8E91436 /* GLideN64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92C0056228C548EC5C0C4574520A559A /* GLideN64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B46BB318BD31DA44FF7F2A0625EDD1B /* ftserv.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A5F0CC9425A669A2FB1790D3BDAABD /* ftserv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B7DFAE0D5614D45A623F2BA17A8884D /* NstInpPaddle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CCA63F92FA1AA67CA403E2E475DF92B3 /* NstInpPaddle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3BD5536C63EEDE95794066C869549BA1 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 316A846E58F0E27085A4330EE10E3B5F /* SPU.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3BD8EFFCB0910051586FBF46AC5C55C8 /* NSBundle+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 514762CD1DB6A2350BA5EE10914786CD /* NSBundle+Extensions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C0BD562ED5EA4DBCCE3A2FB7D940FF6 /* gfx3d.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E49EBED49055AAF839B8A99FC0D76C9 /* gfx3d.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C0C34B66F4DE1573FAD3F67797849EC /* retro_dirent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E75A6CD77FDC5730599F170C8A47DC0 /* retro_dirent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C1277C9879849275BD4412E63547A9A /* PngFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F58A45C3A6F2E0C9EE2FB2DCD85BDF1 /* PngFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C36E674426756F060D9479A78E5CB38 /* RSTCompositeDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 32C661EFF23BB80E5CBC79C7B385920A /* RSTCompositeDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C42E2DF170FEEC1FEDCF257FBC59691 /* NstVideoFilter2xSaI.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB480F86E824BBF3F976C29F3F518408 /* NstVideoFilter2xSaI.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C5A26E2B06FF1324498A5DAA75F2AFD /* texcache.h in Headers */ = {isa = PBXBuildFile; fileRef = BF2D25C87184C7CB6292C194EBA05335 /* texcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C75D97752958BB6E1068A79BBB78763 /* opengl_TextureManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E1E1C9F6B0A62DA55FDEB54FB33235C /* opengl_TextureManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3C78E4348B065F6A1F2E070E9C9AEA1F /* GBCTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = A3B3DA7E38DD3305FA49B067BBEE2BBC /* GBCTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C832BE3E684CFF4E7D7C7D1104C63C7 /* UITableView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = CC438CAEA107E0F60CF6B6A8FBD21763 /* UITableView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3CCFF040F69A447BCC79C844C6E30412 /* DeleteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403F1EF9016E064303392CD24F59212D /* DeleteRecordsOperation.swift */; }; + 3D28FECC438A6FCA1A5C16275198B7A5 /* NstIoPort.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 46639CDFB2B4FF61588F77A4A2FFD6FE /* NstIoPort.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3D38D3143F60F22FF8148BA31C508E73 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8760D486359333F01A58D9A3E6965D9E /* Operators.swift */; }; - 3D66A31C8103A03FDF1F0E57C640C042 /* NSConstraintConflict+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EA5F7D97C9AB37E20A715D3398E9330 /* NSConstraintConflict+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3D82BB8BB2ECF360078CE90C99E218A3 /* DSDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D8CFE89245F633014BBDF6E8AF4985D1 /* DSDeltaCore-dummy.m */; }; - 3D8B6797F5BE3B29DE5D0560B6E485C5 /* glsl_CombinerProgramBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DA85D3012B6718655D78006E60A7A61 /* glsl_CombinerProgramBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3DA0789B294D0A4B0337D4849E79FFBC /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 93B1E65A642EA1EAA4D3043EE455F0DA /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3DF05EBCA922A228ADAA6EF81BF2E18D /* AboutDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 02871D18AA28905E1FE181B4AEDAE388 /* AboutDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3DF3BF1A81EF709BFA95298AC8F1FEB0 /* NstBoardSomeriTeamSl12.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6270AB27CBF8BA6CBBAF402530B111BF /* NstBoardSomeriTeamSl12.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E03AD02DEC735901C06DBB467257AB5 /* Font.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7DE820C181248C292881B0298B0F1F90 /* Font.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E1730D55849A497D872A47300530E33 /* VideoMode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = ADC9542E96F656BB89C5311EEBDA9E2F /* VideoMode.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3E1960795F1CDD5DA3D5234B649D9A64 /* GBA.swift in Sources */ = {isa = PBXBuildFile; fileRef = 069FDF1510D1EE57999D9EEFA42DCFAC /* GBA.swift */; }; + 3D66A31C8103A03FDF1F0E57C640C042 /* NSConstraintConflict+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 932A9FB4261665509630DF314C0698B4 /* NSConstraintConflict+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3D82BB8BB2ECF360078CE90C99E218A3 /* DSDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 202473EE9351AD87378741BBD152C958 /* DSDeltaCore-dummy.m */; }; + 3D8B6797F5BE3B29DE5D0560B6E485C5 /* glsl_CombinerProgramBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = AA792B0E18A3BA4548FB2C386287DD46 /* glsl_CombinerProgramBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DA0789B294D0A4B0337D4849E79FFBC /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B8875D91FA20F49517CC1C5CB0BEA40 /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DF05EBCA922A228ADAA6EF81BF2E18D /* AboutDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 44FAD07D80BFEE0D325168C079FABD94 /* AboutDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DF3BF1A81EF709BFA95298AC8F1FEB0 /* NstBoardSomeriTeamSl12.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F3922596938CC3AC96994BC5EBAEC217 /* NstBoardSomeriTeamSl12.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E03AD02DEC735901C06DBB467257AB5 /* Font.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F686DB132322EBC65182C37F284A25F3 /* Font.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E1730D55849A497D872A47300530E33 /* VideoMode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FF4871EEC174D41700409C80284E7FD5 /* VideoMode.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E1960795F1CDD5DA3D5234B649D9A64 /* GBA.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5727401E6F6A0439D8F333FA838602 /* GBA.swift */; }; 3E5EA4F51A82281DFE44955D6791C12D /* GTLRObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 50BD32E959F332B2734900E76DAB58D2 /* GTLRObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3E82C4D5935E02D385D773C59D424ADD /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D300A5B7805C13ACEEB33CFECE9235DD /* Validation.swift */; }; - 3EC2C605E7291B1BEC99AD3F06D54379 /* svpostnm.h in Headers */ = {isa = PBXBuildFile; fileRef = 89A7A6CB88FF9F00BD89DB332B5BDA1D /* svpostnm.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3EEB2162999CE5EC7F850E4B1FAAF5A6 /* Port.h in Headers */ = {isa = PBXBuildFile; fileRef = C37DA4AD186CBA7132359E75E98431E8 /* Port.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F029746684D344355091865BDDE4121 /* NstBoardBmc9999999in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3F52E4EF9D56259B6359336A7D98C0A /* NstBoardBmc9999999in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F0EBD18ACD97785A90A6D0B4E723D03 /* NstInpExcitingBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 020829DABC4B34F0B103CB44A86B1E02 /* NstInpExcitingBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3EC2C605E7291B1BEC99AD3F06D54379 /* svpostnm.h in Headers */ = {isa = PBXBuildFile; fileRef = EB05D37130F5C1E54F68ECD8CDDC22EC /* svpostnm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3EEB2162999CE5EC7F850E4B1FAAF5A6 /* Port.h in Headers */ = {isa = PBXBuildFile; fileRef = B30081991D15EDA28B670E4E8B5B46F5 /* Port.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F029746684D344355091865BDDE4121 /* NstBoardBmc9999999in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 873C9B1C70581E3ACE0CEA93EA9568DB /* NstBoardBmc9999999in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F0EBD18ACD97785A90A6D0B4E723D03 /* NstInpExcitingBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B5A0DE104CFED381B5A6268A32DA5C06 /* NstInpExcitingBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3F29506C9C2F36B576E3C109F24238AD /* StoneBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FE893CBC159403181F3126C6C7917D /* StoneBase.swift */; }; - 3F4312485CA4E0E988DC0DEEBB2EA306 /* FramebufferTextureFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C86335713D20D759954CBB00EC6AEC3 /* FramebufferTextureFormats.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FFE1AC1F70ED63623326CD9EB4732E7 /* DisplayLoadProgress.h in Headers */ = {isa = PBXBuildFile; fileRef = 165095C0F2AC162D9A03CCCE15E06D7A /* DisplayLoadProgress.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 405BFB74E64E523A84040C173A88A574 /* opengl_CachedFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = F8D137604EE39A80F050CC3248514E8F /* opengl_CachedFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 407B667E5FEB14F591611B01EFD52340 /* assem_arm64.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CEF1CF6322D0D33545A1E86B80C6505 /* assem_arm64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 407EC03D3DFF08A04296FC36CD38AF4D /* NstIoLine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EAD0D53A51B076CD685814AD012D9855 /* NstIoLine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 408C9467A440ACF40ED221AF38A11CAB /* SaveStateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E5950F1D94686CF45BF978347B71AA5 /* SaveStateProtocol.swift */; }; - 40C0A2EC77F246C6770B772E8130A8C5 /* gDP.h in Headers */ = {isa = PBXBuildFile; fileRef = 34B58BB2F0C3289A22FE5DD2CA130C8D /* gDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40D29AB1C0B1AE9D5A16D8A00CC5EC8A /* NstVsRbiBaseball.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 024F3CDD3E74EDB4AB9DEC89AC1A8D5E /* NstVsRbiBaseball.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4117A58F736F3993A5D14CF4CC2D8924 /* NstBoardTxcTw.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 27CAFC4023101EB518BF390FBCBDAC6C /* NstBoardTxcTw.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 415C3AD46D4C5EF9970EC2575E98EDA0 /* Database.h in Headers */ = {isa = PBXBuildFile; fileRef = A2E8E678B7D4B407202D422C8CE42DA0 /* Database.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F4312485CA4E0E988DC0DEEBB2EA306 /* FramebufferTextureFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ACDAD920571F82F0FDFF413996C187F /* FramebufferTextureFormats.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3FFE1AC1F70ED63623326CD9EB4732E7 /* DisplayLoadProgress.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D709C9141E75CC5376CABB8ED0406AF /* DisplayLoadProgress.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 405BFB74E64E523A84040C173A88A574 /* opengl_CachedFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C53D6C2BECC25796BBBD554B17692783 /* opengl_CachedFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 407B667E5FEB14F591611B01EFD52340 /* assem_arm64.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AB8A827FC69B7712131051BF7CDAEBF /* assem_arm64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 407EC03D3DFF08A04296FC36CD38AF4D /* NstIoLine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BE0C7306F2F560B898301521B0E951DA /* NstIoLine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 408C9467A440ACF40ED221AF38A11CAB /* SaveStateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48B7D69EC414883941231476116906D7 /* SaveStateProtocol.swift */; }; + 40C0A2EC77F246C6770B772E8130A8C5 /* gDP.h in Headers */ = {isa = PBXBuildFile; fileRef = EE72931824332E351A9F7197A02E23BD /* gDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 40D29AB1C0B1AE9D5A16D8A00CC5EC8A /* NstVsRbiBaseball.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9A6407C4FE9D4F3E62ECF1C9CABE92A0 /* NstVsRbiBaseball.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 40F75F4E2E7192A47FE6E9826664A8AE /* MelonDSDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7934E37DFF6BB49A4E11E78A63B5CD51 /* MelonDSDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4117A58F736F3993A5D14CF4CC2D8924 /* NstBoardTxcTw.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E07126E3FC357870F5EAEC48FB308C9A /* NstBoardTxcTw.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 415C3AD46D4C5EF9970EC2575E98EDA0 /* Database.h in Headers */ = {isa = PBXBuildFile; fileRef = BD12836DFFA0899682ECB705F36AD40F /* Database.h */; settings = {ATTRIBUTES = (Project, ); }; }; 417CB1E153B4D573A3F86BC063262EBF /* UsersRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5A8C2D0C4FF79FF4A82A7C02704490 /* UsersRoutes.swift */; }; 41A7B51821FA9F73512BF747599C4C47 /* GTLRURITemplate.m in Sources */ = {isa = PBXBuildFile; fileRef = 35A46DA9D7B9942345456BEF6DF7E8D1 /* GTLRURITemplate.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 41AED5AF1633147BF20119FE09B88FD0 /* DeltaTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = FEA0ACC910F13E9D6B8C51CFE1B8EDA4 /* DeltaTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 41F232CB3D23E3A6A1C5E4A4628FB79D /* T3DUX.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F992EC4AD08ED4806E1B360451E1861 /* T3DUX.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42486E8EA746BEC5D598F95DA726529D /* GlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E936FF10A7FD12B81B6130E8D750F73A /* GlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 42607AF15A2E89DD92B0930C561F736F /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = B3475FAD5B489B5292E3D459A64A3417 /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42B300BEBAFE6EE9B77570DA9F09BE1C /* ftoption.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A0298053CF49C68092396B42DD55D37 /* ftoption.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42CE6348D210BC1705B97E3E33A03756 /* recomp.h in Headers */ = {isa = PBXBuildFile; fileRef = 02F79C936D7C91B742192824860F638C /* recomp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42D3004B9FAA6E6FC7F5C1FF64FC642E /* Image.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BB40DF340E3D23ACCF742C2B72217324 /* Image.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 430806697BCF27E39D1755EBD50C2AD8 /* NstBoardBmc36in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83C196FE4CF60A03565B95B1C9C0217C /* NstBoardBmc36in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4350BC2A7ED052D1A8C7322572F983FE /* Shader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CB3301D4A5FED38AEE41ED07A6C502BE /* Shader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 41AED5AF1633147BF20119FE09B88FD0 /* DeltaTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F02B0ECCDFC2E4E491C095B018680E /* DeltaTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 41F232CB3D23E3A6A1C5E4A4628FB79D /* T3DUX.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA6CE40033E7605CBA05FE256EA16DD /* T3DUX.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42486E8EA746BEC5D598F95DA726529D /* GlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C4F2063F71920535B22EF7E3FF01117B /* GlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 42607AF15A2E89DD92B0930C561F736F /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 06C47AD06BB9C0BD7738A8444AB1B3FF /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42B300BEBAFE6EE9B77570DA9F09BE1C /* ftoption.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D43A3C12E2607439AFFC8A1D1CDE41 /* ftoption.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42CE6348D210BC1705B97E3E33A03756 /* recomp.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E695BDE117DE11C2A9816B243CE8D2 /* recomp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42D3004B9FAA6E6FC7F5C1FF64FC642E /* Image.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA7B07F6922A453BFCB66757611F7273 /* Image.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 430806697BCF27E39D1755EBD50C2AD8 /* NstBoardBmc36in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3347C3BDA90B90C1FA03156B774C2A1E /* NstBoardBmc36in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4350BC2A7ED052D1A8C7322572F983FE /* Shader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92F0DF6F9D8A1A4D8748ADB82258371D /* Shader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 43A6F36EC82583DFC3F1B2EB25F87C7E /* GTMSessionFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C490BE7A4301170F339101D64A47136 /* GTMSessionFetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 43B5E0E98AAF560F0241FC12684F8441 /* xxhash.h in Headers */ = {isa = PBXBuildFile; fileRef = D761EA5C2004DE520EE6E3DA7CD4F6C3 /* xxhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 43E9744B08213A6C8BEFAF6B70F435E4 /* NstPins.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 69CFD44724961B202086D65543370D05 /* NstPins.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 43F876E1F40CE874937E046A6E211731 /* convert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 580B1B5358971578E8D067CD87CCA4EE /* convert.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4404B6CEB79B295BDC094339D07BAAAF /* joybus.h in Headers */ = {isa = PBXBuildFile; fileRef = 19CC725F77A1590AFC450371B084F35C /* joybus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 444053C71CF9C418328ABDA8B2528AFC /* plugins_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B2D3B45DE97EE84171CC1A90FD17872 /* plugins_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44574ABD35CB7C8E7308A753B541D666 /* RSTNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = CAE0F839C3C1E4DB9E2519345C397A21 /* RSTNavigationController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4483660753264FD8120A2067CD6A13CF /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 763AE2EACA7FF8898176F552273EFF1C /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44CEC7EA6296BDF52E6847748021D0F5 /* emufile.h in Headers */ = {isa = PBXBuildFile; fileRef = 237B84F01B49BFC3E63C9FE3F3D458FC /* emufile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44CF59CDE936F5CFD762DA0BCB0E94F0 /* RSP.h in Headers */ = {isa = PBXBuildFile; fileRef = C2480C7048FB3B86DEDC127B883F6323 /* RSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44DFF6AD46F4B1073CBE3E11FABF2CA4 /* NstBoardBmcBallgames11in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C91AB35D0843E8B6D4267700DA3291F0 /* NstBoardBmcBallgames11in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 453C841E0DDCE5508E5FD4DE0737E6ED /* ftlcdfil.h in Headers */ = {isa = PBXBuildFile; fileRef = 13766CCFB7D97DABE91EFE46F07D098C /* ftlcdfil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 43B5E0E98AAF560F0241FC12684F8441 /* xxhash.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A334ACFE0D3AC3FE96307D138436AB /* xxhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 43E9744B08213A6C8BEFAF6B70F435E4 /* NstPins.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3465DB1B610ECE37C91169B30B6FF528 /* NstPins.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 43F876E1F40CE874937E046A6E211731 /* convert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35C4D4998448EFC8D73C7526A9E0766B /* convert.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4404B6CEB79B295BDC094339D07BAAAF /* joybus.h in Headers */ = {isa = PBXBuildFile; fileRef = 4495365E36E72B1DF9F8324A09B6DCB1 /* joybus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 444053C71CF9C418328ABDA8B2528AFC /* plugins_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 062F18B3DCFB2719520C631367293BC3 /* plugins_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44574ABD35CB7C8E7308A753B541D666 /* RSTNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E9FD5A3371067E608C6FF32C3E1179 /* RSTNavigationController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4483660753264FD8120A2067CD6A13CF /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = E2736204110643A558D3FFB355216B2E /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44CEC7EA6296BDF52E6847748021D0F5 /* emufile.h in Headers */ = {isa = PBXBuildFile; fileRef = AFF3C3B618AFF0BDD1845467EA4D5341 /* emufile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44CF59CDE936F5CFD762DA0BCB0E94F0 /* RSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AA8A343F392F57FB9A603A5E4378309 /* RSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44DFF6AD46F4B1073CBE3E11FABF2CA4 /* NstBoardBmcBallgames11in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CDCA56A230FEF11250C8907E001346C3 /* NstBoardBmcBallgames11in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 453C841E0DDCE5508E5FD4DE0737E6ED /* ftlcdfil.h in Headers */ = {isa = PBXBuildFile; fileRef = E963BB1D802954605DE54BEAEAA046C0 /* ftlcdfil.h */; settings = {ATTRIBUTES = (Project, ); }; }; 454435BAA1232B5BB55B7FA9E7B97C0D /* FileRequestsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1393F6F0A0F928C49105FCA78288193B /* FileRequestsRoutes.swift */; }; - 4545BB25DC4B965622D16CF4D6506135 /* Mouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1EE7F9057B40115EF146A96035510405 /* Mouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 459005C8FDA84ADF202550615D20DE98 /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 153DE0DE16595A04ED8966B393EF2468 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 459A931CCF39B8FB19164EFE3CF2D863 /* NstInpMahjong.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7A8C9A3E803EF09830C30971C4D0333D /* NstInpMahjong.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 45AD333FE1F9589DE61E55A1F9F12CF6 /* glsl_ShaderPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D2215E3C485C95C307BE07BC62D0E65 /* glsl_ShaderPart.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 45F9C2BE3D3D88B7333F8CCFB32B5442 /* glsl_CombinerInputs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABDD0D043967D1CF64FE87292AD3328B /* glsl_CombinerInputs.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4619C7C20249E0D46A2D68E292D09BF4 /* alist_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 215F41B527253A671A97637E35BDC2EA /* alist_audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4621F1AF007DEF733981FDC8CCE566E0 /* N64DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0236ACAAE07BD9A1FA670BDBDADC0D30 /* N64DeltaCore-dummy.m */; }; - 462EC951E880EBF477C63C7C878DD3C3 /* NstBoardGxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A5EB56E07F663B5DB04E4B9B6C85C4B6 /* NstBoardGxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 46306BFF5D233EBDB4F8F1FEC8E1CE86 /* font.h in Headers */ = {isa = PBXBuildFile; fileRef = 60655F2593406B5777F801C875F02F75 /* font.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 469306CB7368CE64157615FF08A064DC /* ftobjs.h in Headers */ = {isa = PBXBuildFile; fileRef = A6A34D0C07503E7FFFE1FC9EE96553BB /* ftobjs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 46D2FA65C1F7514FB5AF1B3AB540BD7A /* NstBoardUnlKingOfFighters97.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0E992CA8B2DD446EF5D166F52EB6ED50 /* NstBoardUnlKingOfFighters97.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4712883E9233CBF125D350671054463F /* ServiceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 412DB502B74306CF8DF0466A42864A4E /* ServiceOperation.swift */; }; - 4714EA370675DABB8EB39DFCC754B958 /* pnglibconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 40BF1C58E8788FDF52E4550CE38FFF13 /* pnglibconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 471A75A7D62F9B14EB4441C630F660BF /* Util.h in Headers */ = {isa = PBXBuildFile; fileRef = 555DB2B83943DAFAC8FBDB0E065CCC16 /* Util.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4727DC7D681E19904DFFAB1C46B76FE1 /* retro_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 57F1FC93C4F0049F6CC1DE462EAD9871 /* retro_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 47594914E8EA112593EFC6661444193C /* dummy_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = 770FB112F840EA62E9A6C88008B7C1D7 /* dummy_audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4793DB607E09DF311154B2909787E3C4 /* m64p_debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 08B17046C01595A0433E18CDE7B926A2 /* m64p_debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4799F1F6F4A15F207732F60601F39CB3 /* NstBoardBmcGoldenCard6in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 27D3E954F1B9259AA8BFF0453108844D /* NstBoardBmcGoldenCard6in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 480FB68E1413AE0DC7B8CE67383BF00F /* RDRAMtoColorBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12060A6DBBD12A6E816E1B753273DD7A /* RDRAMtoColorBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 481FDC02D816C4D6984B333CDD130B3D /* TextureFilters_hq4x.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ECDC95F1D25F3D0FDE01C632C5EEE7F /* TextureFilters_hq4x.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4826CCCFC9FEA358F0FC255ABB00B2E0 /* NstBoardBmc8157.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92F06EFCC636BAAC527CE6543D3ABA5E /* NstBoardBmc8157.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4545BB25DC4B965622D16CF4D6506135 /* Mouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 507E5C05C910EB9C2351B7FDAC89B9AE /* Mouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 459005C8FDA84ADF202550615D20DE98 /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = F6EC76AAFEB4EFCCAA67C1913C4F3FB1 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 459A931CCF39B8FB19164EFE3CF2D863 /* NstInpMahjong.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 61036065030A2D0CAFA57E52B4AEBBBB /* NstInpMahjong.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 45AD333FE1F9589DE61E55A1F9F12CF6 /* glsl_ShaderPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 96095127DE4F08650D82A0815DD6DB1D /* glsl_ShaderPart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 45F9C2BE3D3D88B7333F8CCFB32B5442 /* glsl_CombinerInputs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD26BD355F8C9C43A997914155B54C75 /* glsl_CombinerInputs.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4619C7C20249E0D46A2D68E292D09BF4 /* alist_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 65A31956BBF79B889849828770076815 /* alist_audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4621F1AF007DEF733981FDC8CCE566E0 /* N64DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 52FF008EAD8518503CF4BE5EDABF7FD3 /* N64DeltaCore-dummy.m */; }; + 462EC951E880EBF477C63C7C878DD3C3 /* NstBoardGxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FB1D4DE902DAAC0A8831F7A63906AE6B /* NstBoardGxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 46306BFF5D233EBDB4F8F1FEC8E1CE86 /* font.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CCBFD78ABFCD2FE1C22DA2F349D8520 /* font.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 469306CB7368CE64157615FF08A064DC /* ftobjs.h in Headers */ = {isa = PBXBuildFile; fileRef = 531E9AB4F828520F2368955170BA41BB /* ftobjs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46D2FA65C1F7514FB5AF1B3AB540BD7A /* NstBoardUnlKingOfFighters97.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C6BBE5B4E442F86207E88DDD286857CF /* NstBoardUnlKingOfFighters97.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4712883E9233CBF125D350671054463F /* ServiceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6118EFDD077B9EC964912181660B7A95 /* ServiceOperation.swift */; }; + 4714EA370675DABB8EB39DFCC754B958 /* pnglibconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 12046753C25C05BEB8D3B91D9C84AFE9 /* pnglibconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 471A75A7D62F9B14EB4441C630F660BF /* Util.h in Headers */ = {isa = PBXBuildFile; fileRef = 585857562D0E1129BE114DD8982CFEAC /* Util.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4727DC7D681E19904DFFAB1C46B76FE1 /* retro_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 03152EFD6359667DF578CCCE3CAF648E /* retro_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47594914E8EA112593EFC6661444193C /* dummy_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = B93E69089ACE58953005A5382B2ADAAD /* dummy_audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4793DB607E09DF311154B2909787E3C4 /* m64p_debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = C6E1F81ACE1C72D6F43ECBBE4EB03E7C /* m64p_debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4799F1F6F4A15F207732F60601F39CB3 /* NstBoardBmcGoldenCard6in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EEF6D1011DA5B2381B452C7A4A848E70 /* NstBoardBmcGoldenCard6in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 480FB68E1413AE0DC7B8CE67383BF00F /* RDRAMtoColorBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5A8B0D1C08B6C55E4CA098FCE620178 /* RDRAMtoColorBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 481FDC02D816C4D6984B333CDD130B3D /* TextureFilters_hq4x.h in Headers */ = {isa = PBXBuildFile; fileRef = 009F86808D0C8EA68A833D33755CD232 /* TextureFilters_hq4x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4826CCCFC9FEA358F0FC255ABB00B2E0 /* NstBoardBmc8157.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 495697E3F178E65EB3DA72E358CB964A /* NstBoardBmc8157.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 488875F3618617406AB771502A10BE59 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = F88BB2DC2D2059BC24702E5033B1FA18 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 489FD286E54A8CF00552B82CBE154B85 /* glsl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2FFD68EF928DFACE9371D8AAC65F52 /* glsl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 48C37CCF88449880D62A12DCE1B313AB /* MemoryStatus_mupenplus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24F185C35417DF1B6626AAC2D1E5E538 /* MemoryStatus_mupenplus.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 48DD34EC238804715558E42A981112BB /* PACKED_END.h in Headers */ = {isa = PBXBuildFile; fileRef = 9750F2298895C6CB0021A8776937EC4B /* PACKED_END.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 48FE3ADC3F482FB1896BB017B2A60B4C /* RSTDynamicDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EA024415809AA543311AA9FE4454F1E /* RSTDynamicDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 493D2606DF4B76687CCD0F48B2E76904 /* NstBoardBmcCtc65.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 695EC8428ABF7B3AF98FDB33DD69DB98 /* NstBoardBmcCtc65.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 489FD286E54A8CF00552B82CBE154B85 /* glsl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C136320E214AE8F3ECD371DECBC4849 /* glsl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 48C37CCF88449880D62A12DCE1B313AB /* MemoryStatus_mupenplus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 876C8D28D439902E84EF476C79F7E2C8 /* MemoryStatus_mupenplus.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 48DD34EC238804715558E42A981112BB /* PACKED_END.h in Headers */ = {isa = PBXBuildFile; fileRef = D1B6EF297830BCAD6D884EED97389BCF /* PACKED_END.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48FE3ADC3F482FB1896BB017B2A60B4C /* RSTDynamicDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C730E5915747302EDF3EC772425E5899 /* RSTDynamicDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 493D2606DF4B76687CCD0F48B2E76904 /* NstBoardBmcCtc65.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3B33F3D270F71B002370D6D901A9EC19 /* NstBoardBmcCtc65.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4948EB328DD7614DF746912086A18D65 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 578F350CDE9D940384DFB5636F635219 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 494BF218C4F917D55808751F21518F3F /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 432A5751918B766667F9CD8866666085 /* ResponseSerialization.swift */; }; - 49518AAC1F6826215684B5499BF1E6BE /* NstBoardBmcFamily4646B.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52373DA4A745FB2484B38C3DBF6F4512 /* NstBoardBmcFamily4646B.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4995851CA04E15BE62A4905F6212BB68 /* DriveService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8110229A2612B6ADEB790CF3A880D7F8 /* DriveService.swift */; }; - 499BFF148188191A810DEC5F4E739AB0 /* seta.h in Headers */ = {isa = PBXBuildFile; fileRef = 94228059341CBA18109047D570DAEA1A /* seta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A1F273145AC8A73006C32CCD1DCBECC /* RSTOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D5F7B6EF99FCD4BF1F3869F8D73FE95B /* RSTOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A235B8A8EB5A067D71258818BE0595D /* NstBoardNamcot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 71E464E228C2FFB740BCB0AF049E4332 /* NstBoardNamcot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A53F0A16D88C817005A54BAE4A6F449 /* KeyedContainers+ManagedValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684FBE5FB16F9A9B0FC3DD78F607C946 /* KeyedContainers+ManagedValues.swift */; }; - 4A83924C5F211B90E03A8A227F460210 /* NstInpPokkunMoguraa.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 06D710973353A358D86E72C355EAB4A5 /* NstInpPokkunMoguraa.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B7AC54FDF87859ED298ABADF7043037 /* SoftwareRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A833E7EBCC4497CD94712AAEB129AFEF /* SoftwareRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4BB66E23280EEDDAB33FD3849235715C /* F3DTEXA.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C0286BB0302AD778CF29EECE712709B /* F3DTEXA.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4BE34CEBCADA7E00993E48F365D76C6F /* NstBoardNitra.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 68753DE722C0980098E0081FA7664AD1 /* NstBoardNitra.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C2525168A2CC6EC7625B8AC550C92AB /* commandline.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CC9F125F98839707615EC7F6D62E31F /* commandline.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C2666CEA93DF12E808B0748AA6C1F87 /* TxHiResCache.h in Headers */ = {isa = PBXBuildFile; fileRef = BE3BB976C21C71194C0B3D42717A0917 /* TxHiResCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C44ECF64FB6C4EDEF4ACD2236BA1545 /* UICollectionViewCell+Nibs.m in Sources */ = {isa = PBXBuildFile; fileRef = 2312F596695044513C4F58CD3E2960D0 /* UICollectionViewCell+Nibs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4C4A649C2F5E44BC6753A9AF4066B5CD /* controls.h in Headers */ = {isa = PBXBuildFile; fileRef = DF75CDA06A2F599F32A8F0E05EEF39FA /* controls.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C5A26ACD5B7FB918191313A9F178EC8 /* 3DMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BF84BC955CB33F2AF3685A48B39D12AC /* 3DMath.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4C8972B658D801A7F3D8AC1ECE935C1F /* NstCrc32.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B442E052E2E964ADC9111C8C691F1F49 /* NstCrc32.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C8EDFDEB5BE1B8740F01A75D78CC82F /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 634114A0217955A80057DD03929C6053 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4CEADE56BB2EF761D27E112FE7616D6E /* pngdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C369537653C1D3D646427D235DA8800 /* pngdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D0BA6DDAECF3625D9D4F8884C396135 /* RSTToastView.h in Headers */ = {isa = PBXBuildFile; fileRef = 11CDF3492A5E59C765F2232102DA540C /* RSTToastView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D18844FC53DBD634580E3013793C936 /* ZSortBOSS.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C1C055B90B4594009DB00C4694AD0E8 /* ZSortBOSS.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D596A13AB85FB2666F860BA7D172A91 /* SNES.swift in Sources */ = {isa = PBXBuildFile; fileRef = C718FF2F26B50069B14C6107F86F877B /* SNES.swift */; }; - 4DC192EDBBB019B891988F7845182F51 /* RSTCellContentDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C0C395FEF300FE2DAB4AB70FDFBE9A0F /* RSTCellContentDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4DC1F5A681A0675066595FBC8231B4B2 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E6BE100ACC34617987896C070068D72 /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 49518AAC1F6826215684B5499BF1E6BE /* NstBoardBmcFamily4646B.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F872C43256DB5C1C7D80F3F0E8E9CE0A /* NstBoardBmcFamily4646B.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4995851CA04E15BE62A4905F6212BB68 /* DriveService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EBF9C7AF0DBEF9D5C106E02B9B28CE6 /* DriveService.swift */; }; + 499BFF148188191A810DEC5F4E739AB0 /* seta.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A4E086533D156DB8CB90B68CFB34011 /* seta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 49B42763E754035FF9813F47341292A8 /* PlatformConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BC65E8B857820DDE5B77199E9852C4 /* PlatformConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A1F273145AC8A73006C32CCD1DCBECC /* RSTOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DE3498D124753251241C3DCDB5CB194 /* RSTOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A235B8A8EB5A067D71258818BE0595D /* NstBoardNamcot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2135E69E6A4F906CD35BBC26E511A87E /* NstBoardNamcot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A53F0A16D88C817005A54BAE4A6F449 /* KeyedContainers+ManagedValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D3AABE38A819F833123F47E08B8F6F8 /* KeyedContainers+ManagedValues.swift */; }; + 4A83924C5F211B90E03A8A227F460210 /* NstInpPokkunMoguraa.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D3FF2CD92B642B01EE1206B628894B5C /* NstInpPokkunMoguraa.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4A9F3B1885A725C767C559BD65A10935 /* ARMInterpreter_LoadStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C336BB83B448CA034099BF3E7B12D55 /* ARMInterpreter_LoadStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4AD9EE859F0DE01AF2C869C403FE8AD6 /* OpenGLSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B9E0F2F6641A295442D13F0770261B5 /* OpenGLSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4B7AC54FDF87859ED298ABADF7043037 /* SoftwareRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB043895CFC330790DEDECC0C41BFEBE /* SoftwareRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4BB66E23280EEDDAB33FD3849235715C /* F3DTEXA.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C92A047E2902F98A561866E68DFBD1 /* F3DTEXA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BE34CEBCADA7E00993E48F365D76C6F /* NstBoardNitra.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4E6CEEF9383BEA7F879EA4F942833796 /* NstBoardNitra.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C2525168A2CC6EC7625B8AC550C92AB /* commandline.h in Headers */ = {isa = PBXBuildFile; fileRef = 42877B5C59DA3CE7FFC800C308596589 /* commandline.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C2666CEA93DF12E808B0748AA6C1F87 /* TxHiResCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 47179FBED9A19BF96E05BC6C9E3056FB /* TxHiResCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C44ECF64FB6C4EDEF4ACD2236BA1545 /* UICollectionViewCell+Nibs.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7FFE29C3C4FE3726FAB1DB3F1C4F3F /* UICollectionViewCell+Nibs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C4A649C2F5E44BC6753A9AF4066B5CD /* controls.h in Headers */ = {isa = PBXBuildFile; fileRef = 5046B6E78EA1FD56CEB696532A667D56 /* controls.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C5A26ACD5B7FB918191313A9F178EC8 /* 3DMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 232881DB5B781BEF87FE7B6665883476 /* 3DMath.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4C8972B658D801A7F3D8AC1ECE935C1F /* NstCrc32.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 85522F84ED70DA2A5D98CB751A79DB2E /* NstCrc32.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4C8EDFDEB5BE1B8740F01A75D78CC82F /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E5F4DAB8AE8D24960DF1E5DB3F6DE5 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CEADE56BB2EF761D27E112FE7616D6E /* pngdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0E56A4DBE284273ED40732FDB073C9 /* pngdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D0BA6DDAECF3625D9D4F8884C396135 /* RSTToastView.h in Headers */ = {isa = PBXBuildFile; fileRef = 275D08AF3E80D1A5B843C23F36F20FE6 /* RSTToastView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D18844FC53DBD634580E3013793C936 /* ZSortBOSS.h in Headers */ = {isa = PBXBuildFile; fileRef = A52143F41FF59A51CFA9789F6A96A1F3 /* ZSortBOSS.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D596A13AB85FB2666F860BA7D172A91 /* SNES.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3467F0683A726E7FA99570996471C2 /* SNES.swift */; }; + 4DC192EDBBB019B891988F7845182F51 /* RSTCellContentDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C982B805086D1D5E4EF8373EF7E777A3 /* RSTCellContentDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4DC1F5A681A0675066595FBC8231B4B2 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = F70E93212D39D1D9645D5BBE0CFB4A26 /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4DC3CE0782BBAC382A857CFEBFDE94BC /* Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB060E9B70D07FF358DD8F33001FD5C6 /* Custom.swift */; }; - 4DC932B5F4D7AA22146806DD1090F1DF /* RSTDynamicDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BBA8B55E8468DDF3F3DCACBEC6CC1E2 /* RSTDynamicDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4DCBFFA1B95BE1BD4BFE5C963C7C81AA /* NstState.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 40106E58B0E94346FDE0DC29003A577B /* NstState.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4DDC8A1EF3EA4BE02FF0B695D582EF17 /* Settings.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE9A850D36C7373D36DB707F1F2FD8D /* Settings.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E2240017E2AF72AD8910D16B4ADBA96 /* SyncProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0307F4D94070F2E4674AD03B8CE79D58 /* SyncProgress.swift */; }; - 4E404863CC3B40582879E711E4216354 /* driver.h in Headers */ = {isa = PBXBuildFile; fileRef = F76D8AFD80E7A4DAACF521163CC4B26C /* driver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DC932B5F4D7AA22146806DD1090F1DF /* RSTDynamicDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 705D7689B51FCCF53E9C703400B0DFC4 /* RSTDynamicDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DCBFFA1B95BE1BD4BFE5C963C7C81AA /* NstState.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 26539A58480363BAF74C49F66717AAE3 /* NstState.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DDC8A1EF3EA4BE02FF0B695D582EF17 /* Settings.h in Headers */ = {isa = PBXBuildFile; fileRef = 3077BDF790EB52605DBA99AE8089C2FA /* Settings.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4E2240017E2AF72AD8910D16B4ADBA96 /* SyncProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = F68723D87D569E987F572CCD08093F61 /* SyncProgress.swift */; }; + 4E404863CC3B40582879E711E4216354 /* driver.h in Headers */ = {isa = PBXBuildFile; fileRef = D5BACB869529C8A58764FBF51E5D7BB8 /* driver.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4EB3ECBAB9FB0B1B2067EF0E1DC27E47 /* GTMNSDictionary+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = F2087F209824BFEA65167BC5408CF95A /* GTMNSDictionary+URLArguments.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F413DC26068AB7502D2ADE1EED949AA /* PaletteTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 000CEE30E84D661F89DA9650593A2099 /* PaletteTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F483ADE9F4639BF875D6E84D02AEB80 /* opengl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DC0155465127BC9B36185F96DDCAB75 /* opengl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F79FE245CDFD8041C639E51AD66DE39 /* cpumacro.h in Headers */ = {isa = PBXBuildFile; fileRef = CA99918A66499B3FD57B4BE6A2985044 /* cpumacro.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F8113B8B99AD98CDD9E3B137185F836 /* ftcalc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7853737E5530C7A19E57F3534054E328 /* ftcalc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F413DC26068AB7502D2ADE1EED949AA /* PaletteTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14D158A352A8BBA396519A2C6CDC67FD /* PaletteTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F483ADE9F4639BF875D6E84D02AEB80 /* opengl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4A650EA7BBC2B23A0D479A0DA4FB270 /* opengl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F79FE245CDFD8041C639E51AD66DE39 /* cpumacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F7BDDB3C4AACF9488005884AA49676 /* cpumacro.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F8113B8B99AD98CDD9E3B137185F836 /* ftcalc.h in Headers */ = {isa = PBXBuildFile; fileRef = F87EFA6D54FDC38E1D796063498DB67B /* ftcalc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4F8D23620463D8FF135DC582B2B54D41 /* GTLRUploadParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = D686BB86CE4E75B4F320164A9EC1B404 /* GTLRUploadParameters.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F9DEF5AB8980F5F6CBD545C902C6963 /* RSTPersistentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0098D6E2E55E4CB590673ABF30CBCFF6 /* RSTPersistentContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4FE9D949CE1EA4D7AC2C0DC75BDC7D09 /* counterdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA5B2EC8B8F0A5D59CC97B40A380CA8 /* counterdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5028F30132D3D726A5BFEB6A45CE08F6 /* ManagedAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99D799A06F3A84C7D777C9A3BD9BE511 /* ManagedAccount.swift */; }; - 505AF6CFE7AF897C939CE3F4893D79C7 /* NstBoardSunsoft2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3A6EC0B470AAD78C4D5550BBDA4A73E /* NstBoardSunsoft2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 505EA34BB63D4DA3E07D0BEAEA9CBBFE /* RenderTarget.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0ECF374B07795E7E2A151E2B4D8D2A29 /* RenderTarget.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 506700D55CD43C1F9D14D10C36B2E4EA /* NstBoardAve.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B686582878B4BC8A27AD99BE25411842 /* NstBoardAve.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5073BE55602733E1D570CBFAF7444F9C /* FIFOSamplePipe.h in Headers */ = {isa = PBXBuildFile; fileRef = EF6779B78D5B9B6019F29579F2C1C894 /* FIFOSamplePipe.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 508F79BAF68E3B5A238FE6A3953A1D4D /* GBAGfx.h in Headers */ = {isa = PBXBuildFile; fileRef = F0220951E1C5853626F63AA3472A9F71 /* GBAGfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50FED56DA840079A313570E00101A9E0 /* Syncable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437F2293962BC32124208AB59C25F268 /* Syncable.swift */; }; - 5158E74402D7498E84B1E75998347C9D /* UICollectionView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 678B4D33461C1C6B1A1DAD8189F4BEB2 /* UICollectionView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 516599687587135EAF7497B4869D18AE /* NstBoardJyCompany.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BC6023BC6F5B2433CF51C57DEE9E331A /* NstBoardJyCompany.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F9DEF5AB8980F5F6CBD545C902C6963 /* RSTPersistentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 051DD45485937EBA4AEB4D55FB230DCB /* RSTPersistentContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4FD50804BC7509091BA1DCBA69F8C306 /* GPU2D.h in Headers */ = {isa = PBXBuildFile; fileRef = 967EFE5245A453AF9AA01C58AA47CA6F /* GPU2D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4FE9D949CE1EA4D7AC2C0DC75BDC7D09 /* counterdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DC71414A1C59E302D19045860C86F3D /* counterdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5028F30132D3D726A5BFEB6A45CE08F6 /* ManagedAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE50DAF15EC75FA249C291622A4739DE /* ManagedAccount.swift */; }; + 505AF6CFE7AF897C939CE3F4893D79C7 /* NstBoardSunsoft2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 50B7464DE19879312AD16F0F9584E7C7 /* NstBoardSunsoft2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 505EA34BB63D4DA3E07D0BEAEA9CBBFE /* RenderTarget.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D98DA2B55C239E4E1EC147BC992F6F5 /* RenderTarget.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 506700D55CD43C1F9D14D10C36B2E4EA /* NstBoardAve.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 290CD775EF514EB180E591FA1BBD9EE9 /* NstBoardAve.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5073BE55602733E1D570CBFAF7444F9C /* FIFOSamplePipe.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E62533D6ADE3583F493484D3ABF1BB5 /* FIFOSamplePipe.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 508F79BAF68E3B5A238FE6A3953A1D4D /* GBAGfx.h in Headers */ = {isa = PBXBuildFile; fileRef = 0893F87C0C44883CFA0FF8BD37E0CB50 /* GBAGfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50B180CFEAD01CDF7AE77F036B6AD4E3 /* romlist.bin in Resources */ = {isa = PBXBuildFile; fileRef = E077F3008801C506785266DF63C1EA19 /* romlist.bin */; }; + 50FED56DA840079A313570E00101A9E0 /* Syncable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F82BADF1B128B29E800481350228566 /* Syncable.swift */; }; + 5158E74402D7498E84B1E75998347C9D /* UICollectionView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EEE2D5A7CAE13A6BDB9042F46420270 /* UICollectionView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 516599687587135EAF7497B4869D18AE /* NstBoardJyCompany.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1559231E2BE01D21A0445943D40BD8B9 /* NstBoardJyCompany.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 51882AB1BF2D64307CB26E25DB7A43C2 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B222E309AC91E1D67F520A0BF59B834 /* ServerTrustPolicy.swift */; }; - 51918AE90F48400669540D82E6FE3864 /* RDRAMtoColorBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C3B7DA45835B08897BC091AEF1EEB6 /* RDRAMtoColorBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 51BDAAC3AA2EF11A4E0777A032576AFA /* NstInpOekaKidsTablet.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F506F9CB88905A0006F9CBDBB8EBCA31 /* NstInpOekaKidsTablet.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 51CB2AF004A303202AC4E2E08B6DD4E4 /* SoundSDL.h in Headers */ = {isa = PBXBuildFile; fileRef = 949120606BFB2FD67DC4240028FEB398 /* SoundSDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 52323B8DDC717EBF29016585E2D8C524 /* GBASockClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 27CF12F82D7FC895B714C5F31C07E905 /* GBASockClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 523CB85DD9D51432DCC507568B4D3905 /* RSTLaunchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F6D552EFD0D0F0A9F5EEC068432F589 /* RSTLaunchViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 524F9BFEF89FF358697E09E935BB0B98 /* Utf.inl in Headers */ = {isa = PBXBuildFile; fileRef = 8DDA3FCC5B59298F8FF38E7914D03FB0 /* Utf.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 51918AE90F48400669540D82E6FE3864 /* RDRAMtoColorBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = C159885D11F51EC41D84186D52DC4483 /* RDRAMtoColorBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 51BDAAC3AA2EF11A4E0777A032576AFA /* NstInpOekaKidsTablet.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43D27CBEDCDDFA5D7CB760B22CEA6D23 /* NstInpOekaKidsTablet.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 51CB2AF004A303202AC4E2E08B6DD4E4 /* SoundSDL.h in Headers */ = {isa = PBXBuildFile; fileRef = A159872320887E8CBF6333094E374F4F /* SoundSDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52323B8DDC717EBF29016585E2D8C524 /* GBASockClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A720235BC5442B027233F68A35C4613 /* GBASockClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 523CB85DD9D51432DCC507568B4D3905 /* RSTLaunchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45858FC63D79F8CB87FFC7F4E24B4A91 /* RSTLaunchViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 524F9BFEF89FF358697E09E935BB0B98 /* Utf.inl in Headers */ = {isa = PBXBuildFile; fileRef = 8EB59526DBBF1B92F1C18D793F09DF21 /* Utf.inl */; settings = {ATTRIBUTES = (Project, ); }; }; 52722B0030C7E925E9C8304457491FFB /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BA5332776FCBF3B75CDD7168F2B8E2C4 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 52B893DB672E18029FA04807F0771F85 /* Vector2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DBB26A9F3AD2F7159A0C7E893521DBCA /* Vector2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 52D74F7ECCC1DBF6E16DE1F12141B276 /* WriteToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6C7C0BB4E1D92107DD8D623F8F45E5 /* WriteToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 52E4F3DFED11D9653AEC0B37BFCA708E /* RemoteFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE12392094B01C972B9C0018E1869E29 /* RemoteFile.swift */; }; + 52B893DB672E18029FA04807F0771F85 /* Vector2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7E0AC0D5AF34E7D36AEA71DF98E8EC9C /* Vector2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 52D74F7ECCC1DBF6E16DE1F12141B276 /* WriteToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 0218E1BBADD080E67F9220EDFDF90EF3 /* WriteToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52E4F3DFED11D9653AEC0B37BFCA708E /* RemoteFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A5EDA091E457F4BF1FF9D5715E8EF2 /* RemoteFile.swift */; }; 5312806A7BA82453F7A3E5C233835D29 /* GTMDebugSelectorValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C85069E5F2ED830B22D7D1AB4A529C /* GTMDebugSelectorValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 53D1203F37189E1B0B8854659A9345AE /* ftconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 413E31D8C1624AEAC8EE7570F0551194 /* ftconfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 53ECC6163FB5AF3BBA2F3FAE6A8F1BEF /* DS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64B255C31BCB0FDD8AB113CF71D128C3 /* DS.swift */; }; - 54035E7677B71E7D130E4E693B211B71 /* ImmediatePanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB1DC75CE747381BA8AA66BC31541BCF /* ImmediatePanGestureRecognizer.swift */; }; + 53D1203F37189E1B0B8854659A9345AE /* ftconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = F8EB681067B1016B70AE4047A7C916B9 /* ftconfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53ECC6163FB5AF3BBA2F3FAE6A8F1BEF /* DS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9925E412F176DF45C332321285001A55 /* DS.swift */; }; + 54035E7677B71E7D130E4E693B211B71 /* ImmediatePanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD855AE6412C0DD63FC4D79544883DB2 /* ImmediatePanGestureRecognizer.swift */; }; 5410DE9CCCA5B27BF32F53F10277BF94 /* TeamRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A222C0427237AEDD558FEFA410B5E021 /* TeamRoutes.swift */; }; - 5433266A44831DC01F4FEF584030D6DA /* NstBoardBmc35in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 179CA20387AC394361693DD1CD2E4572 /* NstBoardBmc35in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 54B0F9C41BE6A78067881BEB750C1AF6 /* ThreadImpl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48A397662316360402E0600E571AD262 /* ThreadImpl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 54B7FB35A2EDEB196FE50FF306656B62 /* NstBoardWaixing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 54EB6E02433DBB4599FF9FECA6F74BEC /* NstBoardWaixing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 556FF16A662F3C2DEBA50B9693599DE1 /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 086ADF754FD807B796DAED4D2797BAA7 /* pngtrans.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 558A233C324EBAE74D567FDC751D1EB5 /* retro_endianness.h in Headers */ = {isa = PBXBuildFile; fileRef = 1848F23A934DCF2922E385DA2CFEDB81 /* retro_endianness.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55BA63757D1E64C1BD4D132210364BBA /* biopak.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DD623E462036E417A6C1BF38166141C /* biopak.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55BACBFD0A8A8EBD6EC8AA2002E6046D /* GraphicBufferWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3443718CF69897A14D49B9C400E80C50 /* GraphicBufferWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55C3D30D20E39AA463F637012FA6E15D /* ColorBufferToRDRAMStub.h in Headers */ = {isa = PBXBuildFile; fileRef = 35485E76FD48D810C5D7C95E2FD90D64 /* ColorBufferToRDRAMStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55C4AA463699B788B9F18C0103D41C85 /* ftmodule.h in Headers */ = {isa = PBXBuildFile; fileRef = 3451D46815FC1E9C8DD13CA49D2186AF /* ftmodule.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55E38E50C72F3898CD13D71706F1BBC4 /* NSManagedObjectContext+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = F27A0FAE014100246C0E1DAC5E1E38DF /* NSManagedObjectContext+Harmony.swift */; }; - 56096E16210F97AF0E03EB7509C67B7E /* NSManagedObject+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46A81EB457DC21D9C21932C473EB359A /* NSManagedObject+Harmony.swift */; }; - 56192DB51F2A50C90569FF1BD1985C88 /* glsl_FXAA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7B99B417F7B87ED84AC94DA16A254477 /* glsl_FXAA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5619A5DFD12F6FC67F5596883382EAA3 /* rasterize.h in Headers */ = {isa = PBXBuildFile; fileRef = BF4CCC593653835948DE2077F515DDF3 /* rasterize.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56487F87D42D4ABC274B99A23E38ED51 /* DSEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3C4B8A5D7D056FB02966F159AFC5E9F4 /* DSEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5433266A44831DC01F4FEF584030D6DA /* NstBoardBmc35in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F931544B104EDCB547B089F7B0707ED8 /* NstBoardBmc35in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 549122D7AE98AC9764DE456E99B50AB9 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEDAB7B8B80BCC8BB405F1C556A4E36E /* Config.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 54B0F9C41BE6A78067881BEB750C1AF6 /* ThreadImpl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CA7F161EA390DDDF6ECB71EE876B89D9 /* ThreadImpl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 54B7FB35A2EDEB196FE50FF306656B62 /* NstBoardWaixing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7E97EB0C49F861BC8AC2D75CE54C4EB4 /* NstBoardWaixing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 556FF16A662F3C2DEBA50B9693599DE1 /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 162D4D53C68E5F2542C1898C9D356FB1 /* pngtrans.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 558A233C324EBAE74D567FDC751D1EB5 /* retro_endianness.h in Headers */ = {isa = PBXBuildFile; fileRef = 3762689E296E5EBA4CC56F2683522DF0 /* retro_endianness.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55BA63757D1E64C1BD4D132210364BBA /* biopak.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E65EB68D56E7366BC886E0DF3F4369 /* biopak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55BACBFD0A8A8EBD6EC8AA2002E6046D /* GraphicBufferWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 535C2901C00E7283DD28013BBBC6CA4F /* GraphicBufferWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55C3D30D20E39AA463F637012FA6E15D /* ColorBufferToRDRAMStub.h in Headers */ = {isa = PBXBuildFile; fileRef = F1BABB17270A0A3966333B7C327BF0CA /* ColorBufferToRDRAMStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55C4AA463699B788B9F18C0103D41C85 /* ftmodule.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A22E94D129FB402325A388CC5DF7FDD /* ftmodule.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 55E38E50C72F3898CD13D71706F1BBC4 /* NSManagedObjectContext+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = E90308ECF32EF009E33F9EEBA9B7C84A /* NSManagedObjectContext+Harmony.swift */; }; + 55EA606F85ADCDB8455EE53A2F280B55 /* RTC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D6C840B3C97CEC304F49384CCAA446AA /* RTC.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 56096E16210F97AF0E03EB7509C67B7E /* NSManagedObject+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3538A2EB4EDA6929B5D32A095FD21C6E /* NSManagedObject+Harmony.swift */; }; + 56192DB51F2A50C90569FF1BD1985C88 /* glsl_FXAA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 816DCE1C4957B5B87AF4A2EA4D7451FF /* glsl_FXAA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5619A5DFD12F6FC67F5596883382EAA3 /* rasterize.h in Headers */ = {isa = PBXBuildFile; fileRef = 169291B84BEFD54121E345D556B0F9F8 /* rasterize.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 56487F87D42D4ABC274B99A23E38ED51 /* DSEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = EFFE70745486E1FF21AEAF435A71FBB3 /* DSEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 566B02F81167FAAB363014E42ED15BFF /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D113E482EBF7C096302CD382067ECB51 /* Foundation.swift */; }; - 5678ED8E60F31109D707A9CD20001EB6 /* Rect.inl in Headers */ = {isa = PBXBuildFile; fileRef = 635101CB7845320BEBBEE9E499DCF372 /* Rect.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - 56CC143D8E35F7C9A786111F8469E4AE /* L3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CA005FCDCBF549105B1691D698AFFE18 /* L3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 56D815C1383B97B622D2C8A50156BBC4 /* ColorBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B75443503A9FFE2C23D1ACE270C81B1 /* ColorBufferReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56F2FD6BBD1FEDD660C763B74D0367B8 /* SNESEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 40018788A7B82BE36F7A4762218942C4 /* SNESEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 574897C776D4A75F06D108C90308A36E /* UIKit+ActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = 22925124C257896E19766BEE921A074A /* UIKit+ActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5788CF6580789EB32B111C2CEBE2FA98 /* NstProperties.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AF55BE85D1766A85D542E06F8CB64DAA /* NstProperties.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 57934F805FBD53511D97E2A813CCA304 /* GLideNUI.h in Headers */ = {isa = PBXBuildFile; fileRef = CB608FA02B2FC02737ED821505210FEC /* GLideNUI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57B0E2E5E730BB045DF85BD06E05F717 /* NstDatabase.xml in Resources */ = {isa = PBXBuildFile; fileRef = D9445B158497F7C69D8E9D2443A33739 /* NstDatabase.xml */; }; - 57D216129FDA337F9E3D3C3FA2B064AA /* pi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = AC44908E2E42851E70850DD854945391 /* pi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58502D5F6100ACE79187371096DD70CA /* mic.h in Headers */ = {isa = PBXBuildFile; fileRef = 414ABC5418ACBADFD1E0682648431076 /* mic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5858556236C0AD004276850A211BBBB2 /* Turbo3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF16DF495D40774F62F549F44383A37B /* Turbo3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5678ED8E60F31109D707A9CD20001EB6 /* Rect.inl in Headers */ = {isa = PBXBuildFile; fileRef = E149E90D3011EE5DD380C62CC073BF20 /* Rect.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 56CC143D8E35F7C9A786111F8469E4AE /* L3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93DB6CBD9964A538F778E19D3832F2B9 /* L3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 56D815C1383B97B622D2C8A50156BBC4 /* ColorBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = E726879448FBC69F09C3868AEAA3AE81 /* ColorBufferReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 56F2FD6BBD1FEDD660C763B74D0367B8 /* SNESEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 46CC56588A9249D29F68E981CE6C8B54 /* SNESEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 574897C776D4A75F06D108C90308A36E /* UIKit+ActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = F6225E475A9B0FB7A6AD9A1B3E32D764 /* UIKit+ActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5788CF6580789EB32B111C2CEBE2FA98 /* NstProperties.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 436B7542629ABF7B0FFD6BB9B072FC21 /* NstProperties.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 57934F805FBD53511D97E2A813CCA304 /* GLideNUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E3627E2B352D880C38B219494E20A52 /* GLideNUI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57B0E2E5E730BB045DF85BD06E05F717 /* NstDatabase.xml in Resources */ = {isa = PBXBuildFile; fileRef = 3312E5853E083AE08720EFDF8EE603C0 /* NstDatabase.xml */; }; + 57D216129FDA337F9E3D3C3FA2B064AA /* pi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DFFCF1CDD169427B033DBE318C4EECA /* pi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58502D5F6100ACE79187371096DD70CA /* mic.h in Headers */ = {isa = PBXBuildFile; fileRef = F93CCC48091B82BDE2E10023D5C4990A /* mic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5858556236C0AD004276850A211BBBB2 /* Turbo3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A4769F49E16CB7DA2C80A4AE0AB75CA /* Turbo3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 58670BDA59BC1476ECD1AE42A65DEDB4 /* SQLiteObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1AC80F9908EC458F2880C5D2B25C33 /* SQLiteObjc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5872138AFC456A4EFAF08719BB37464C /* opengl_UnbufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C43B2C1E1A9F88A7EEAE044E22A0CDC6 /* opengl_UnbufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 58766C2ABA1EA78EBFDA6358071598A6 /* NstVideoFilterScaleX.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B6CDC4DC2E9754CD3DA34C6A091F6E53 /* NstVideoFilterScaleX.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 58A8D33FD84F62BA37B6B53109F22783 /* ROMReader.h in Headers */ = {isa = PBXBuildFile; fileRef = AB3A5F6A3985C524CE62D3D188B41912 /* ROMReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58B5EB01C16F961316330E4D251E7648 /* UploadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8697A847DE43FFACD393D2A7A9B84E /* UploadRecordOperation.swift */; }; - 58BE7AF2705F2F19B2DBD0077245F46C /* Flash.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A8950AA257A8E57DB3C9539DBCCC980 /* Flash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58EA70D5ACB9CC2718AEC1AEBADFB157 /* SndOut.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E6B9B56EA3BE92F4A8798B0D43526B2 /* SndOut.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 592095BB4B63DA9A913D330FFA26905F /* SyncRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EFA3B9D1B35DA0B89C71DA1D01B3B45 /* SyncRecordsOperation.swift */; }; - 59337EDB4628FDAC6C07792E35AE0FFE /* PixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CE468B2DBAC6E3109B9A6E529ADACA1 /* PixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59462C1E4E16ACC6FD20C786FE5D2A1A /* DownloadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0EF51BD6A873328F443F48E06B74BF8 /* DownloadRecordsOperation.swift */; }; - 5949B7253E6E1DB1793B5F8D17F6F095 /* PluginAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D28BE3E5AFE58F245865607BE7171E8 /* PluginAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59580416DDB44B3A787BC982BC72F768 /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 56521BBB435C7A22CFF991B7B01066DE /* zlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5964FD1B899EE5FDD4F98F594BC29971 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E0ECBB02BB69E04F4F0E29EDA00B847 /* Errors.swift */; }; - 599D552BADBF132BAA36F06CCCD06913 /* NstBoardBtlSmb2c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9E493AB01A18F0DA9F384ACB5CBD5C5A /* NstBoardBtlSmb2c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 59C9DFBC77F345B4C89ECEDC869567AE /* sfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BA8D788852783316C1BE135C3ADC92B /* sfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59E880502F8D50F9EE5D608A579F9BC0 /* wst.h in Headers */ = {isa = PBXBuildFile; fileRef = FB78D889B9AEF0455BFA9A0731B00CE4 /* wst.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59F9463AE8F8A4C77B2B7FE0E646026B /* F5Rogue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 33CC18E757DD735D6437685485DADD01 /* F5Rogue.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5A09E36B97C75FB76C579219F68AEEB9 /* NstVector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7DE608CD51BCBB2191371758B7C8E134 /* NstVector.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5872138AFC456A4EFAF08719BB37464C /* opengl_UnbufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B5206BC0DB3FB590107A53EBAE4647D /* opengl_UnbufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 58766C2ABA1EA78EBFDA6358071598A6 /* NstVideoFilterScaleX.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BD74931B096C1E1F3A72E00B9A1B4861 /* NstVideoFilterScaleX.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 58A8D33FD84F62BA37B6B53109F22783 /* ROMReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 01BC5E003AE565B6B711436BFBF86BF4 /* ROMReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58B5EB01C16F961316330E4D251E7648 /* UploadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B236B2DB89B26DE7B16E762CF3080C5A /* UploadRecordOperation.swift */; }; + 58BE7AF2705F2F19B2DBD0077245F46C /* Flash.h in Headers */ = {isa = PBXBuildFile; fileRef = 03D0F6F861896F902FD904A5CA166856 /* Flash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58EA70D5ACB9CC2718AEC1AEBADFB157 /* SndOut.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F0E6B2352802896ACECD64204A6113D /* SndOut.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 592095BB4B63DA9A913D330FFA26905F /* SyncRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47D47AFCF1385842685E8C07121C8BE8 /* SyncRecordsOperation.swift */; }; + 59337EDB4628FDAC6C07792E35AE0FFE /* PixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A586DA6049F657DBEA1D6CB398378C21 /* PixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59462C1E4E16ACC6FD20C786FE5D2A1A /* DownloadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 450775B09B5A404AD4A5910F22DD06C9 /* DownloadRecordsOperation.swift */; }; + 5949B7253E6E1DB1793B5F8D17F6F095 /* PluginAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 77423E6CCB3B1A7C499FEC5ADF73561A /* PluginAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59580416DDB44B3A787BC982BC72F768 /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = E284FFF9015A2937CE2CA1509C92B65C /* zlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5964FD1B899EE5FDD4F98F594BC29971 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D9AB238C0D8C37F7486D77CC4E9BF4 /* Errors.swift */; }; + 599D552BADBF132BAA36F06CCCD06913 /* NstBoardBtlSmb2c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B341B464E13F5C77115D01AF3A303C0 /* NstBoardBtlSmb2c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 59C9DFBC77F345B4C89ECEDC869567AE /* sfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0B9BFF156565987763A09CCD986B38 /* sfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59E880502F8D50F9EE5D608A579F9BC0 /* wst.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F279CB05ABD733ECA41FFA2F19A00B6 /* wst.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59F9463AE8F8A4C77B2B7FE0E646026B /* F5Rogue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 092C6EE9873F269B8DF55D311028DF6F /* F5Rogue.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5A09E36B97C75FB76C579219F68AEEB9 /* NstVector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCB1D2FFB53452577990FA3D356A4DD7 /* NstVector.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5A0BF65D720FB2B9FADC78A474E6A81B /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783A65AE17A33F0C1C242F5B30F01680 /* Archive+Reading.swift */; }; - 5A79C28FC58E9C640DFD7AAF04AF8827 /* NstBoardBmcA65as.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B56303B13A0444FFC586E198F58DAFAB /* NstBoardBmcA65as.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A79C28FC58E9C640DFD7AAF04AF8827 /* NstBoardBmcA65as.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1D8AA62CF8EE1D7BD51C30F2874CC2D2 /* NstBoardBmcA65as.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5AA3255686819EB4DD24A1FE23CC6F28 /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23C9343FC4FB0FD507A750B3EF697747 /* Contacts.swift */; }; - 5ABA51E69DCE967FCBED1A337D04F0A7 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 6DF6C3B7940689905856C5444F2A0E35 /* Standard.deltaskin */; }; - 5ACC5FA32C77A54CBFEC08C34ACEACCB /* NstMemory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 610583D92AD551F88F44D66D964F1334 /* NstMemory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5AFA9AD616A22E16547326EF1CDA4C83 /* file_storage.h in Headers */ = {isa = PBXBuildFile; fileRef = 92B94EAC848FCE04BDC76F2D0CC75878 /* file_storage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B025E037D2C37021CA068050A2CA3B8 /* ftbitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 782EAF069DEB44E112D5056BEF8C3DE2 /* ftbitmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B444B54168E8EDD6542DE7127EEF823 /* Debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E118D0678F9057E5942E1C06792221 /* Debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B523F0E6CC4D851035C0FF668B53075 /* TcpListener.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43B52186D0ADE3F0F74317B7F542BF3E /* TcpListener.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B5FC4B8005630CE21B998A96C73D770 /* F3DGOLDEN.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D1E6C0B74E1FAEE75DA38BD38CEBDCE /* F3DGOLDEN.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5BD8D84D6C59417A4EFF51A407BA04A5 /* NstBoardSomeriTeam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 62CFF0059E7E0AE9B9B20A8DBAE51D16 /* NstBoardSomeriTeam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5BDF97784CBEA46C26B454F806233B2C /* F3DZEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = C1651CF80D05D97DB390C5D66D51F25C /* F3DZEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5BE7D6FBE9EB93D43C99935C48A966B7 /* GLideN64.ini in Resources */ = {isa = PBXBuildFile; fileRef = 20E6DC27E3CD5270C16AC4F9F2E0D3B5 /* GLideN64.ini */; }; - 5BEFEF83E88746F60EE96520C83CF8B1 /* RSTPersistentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = FFEC014D2C956093FFE28CD534E23741 /* RSTPersistentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C1E3DA8CF07041B9499F603C66261DE /* fttrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 232E1FD2069448A4B7FA73B378A48EDC /* fttrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C28996B1131EFFAB4E75493D9F16B65 /* ftmac.h in Headers */ = {isa = PBXBuildFile; fileRef = E82E5BAA08ADC037E1F7765FE77042C5 /* ftmac.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5ABA51E69DCE967FCBED1A337D04F0A7 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = EE94484CFDB733F9B6B76E0416EB735F /* Standard.deltaskin */; }; + 5ACC5FA32C77A54CBFEC08C34ACEACCB /* NstMemory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D5643A5674D32FE8D35CE78AF0B30F39 /* NstMemory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5AFA9AD616A22E16547326EF1CDA4C83 /* file_storage.h in Headers */ = {isa = PBXBuildFile; fileRef = CF4CB213C78DA27A2EF987CB656BA480 /* file_storage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B025E037D2C37021CA068050A2CA3B8 /* ftbitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = E94F624FEBCECA3D447A42E223613A20 /* ftbitmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B0F1790A09DEAEED24FACF655B74D15 /* GPU3D_Soft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8DA8A3992CF991EF375A78B56D07EF09 /* GPU3D_Soft.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5B444B54168E8EDD6542DE7127EEF823 /* Debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C536521365129A5FF9AE40DDF753F8 /* Debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B523F0E6CC4D851035C0FF668B53075 /* TcpListener.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F857371D3F5B8E4318217720FD868368 /* TcpListener.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B5FC4B8005630CE21B998A96C73D770 /* F3DGOLDEN.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E090AE4D2EB3F7EBC12F7527F8C83A7 /* F3DGOLDEN.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5BD8D84D6C59417A4EFF51A407BA04A5 /* NstBoardSomeriTeam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56D472264507A3544C43D6606FB37390 /* NstBoardSomeriTeam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5BDF97784CBEA46C26B454F806233B2C /* F3DZEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B432CCBAD2A0A59F5EFB878191A511 /* F3DZEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5BE7D6FBE9EB93D43C99935C48A966B7 /* GLideN64.ini in Resources */ = {isa = PBXBuildFile; fileRef = 3A13B4329882F5A80C1C1326BB560732 /* GLideN64.ini */; }; + 5BEFEF83E88746F60EE96520C83CF8B1 /* RSTPersistentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FBF06615B56E55808CEBADD68B920BE /* RSTPersistentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C1E3DA8CF07041B9499F603C66261DE /* fttrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 88EF2BA95EB1E18CBC11B6130EC55E16 /* fttrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C28996B1131EFFAB4E75493D9F16B65 /* ftmac.h in Headers */ = {isa = PBXBuildFile; fileRef = 84758A5917B6274B633D5B6A3A3E91F9 /* ftmac.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5C2C50048DF9D8C1D128711187453A8D /* GTLRBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ABF32DB7C03DC858879C758E39AAD27 /* GTLRBase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C3F628CF00E3CD05F3055BC14650779 /* String.inl in Headers */ = {isa = PBXBuildFile; fileRef = C77DD7055BE2E940CB49A8B0F10A472F /* String.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C5F387309EC920C1D2F76769CE76897 /* Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F04014B383F64E12DE6C9129A85A7C5 /* Delta.swift */; }; - 5CE430BB46B6B4C1B3051011D523753D /* DepthBufferRender.h in Headers */ = {isa = PBXBuildFile; fileRef = A1817B7D536070DB0693E3627DEE3C0E /* DepthBufferRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5CEA0B264A2AC9222A69B62A1F0C7AF5 /* sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = C5AA082D0701AB3A2B49F4AA865B5021 /* sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5D11ABFFC6008AB58F5E115BC314596B /* NstBoardGouder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4DDA965CE8714B275AFFEDDF6DC053CB /* NstBoardGouder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5DBB580BC90D0C0893FC692F012A0B28 /* NstBoardCneDecathlon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04F25CB32F102ED6A7598D66E7BC9443 /* NstBoardCneDecathlon.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C3F628CF00E3CD05F3055BC14650779 /* String.inl in Headers */ = {isa = PBXBuildFile; fileRef = E56992DF458AE190EF8B6FDBB9A4DE70 /* String.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C5F387309EC920C1D2F76769CE76897 /* Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BBE274343E5120686BB2D52C486B98F /* Delta.swift */; }; + 5CE430BB46B6B4C1B3051011D523753D /* DepthBufferRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFF7521BE73EED39D6F3DAC41584A38 /* DepthBufferRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5CEA0B264A2AC9222A69B62A1F0C7AF5 /* sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = F15930486D7F45DD18CFBA9BD8800E92 /* sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D11ABFFC6008AB58F5E115BC314596B /* NstBoardGouder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 452F3BC887D4177C15C6B566333C123E /* NstBoardGouder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DBB580BC90D0C0893FC692F012A0B28 /* NstBoardCneDecathlon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94A3287DE1F597EEEB81597618FA9901 /* NstBoardCneDecathlon.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5DE22207D1B1CD7A583F52895E942007 /* CustomRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF02F520CDA87AF4813D4764ECD43F5 /* CustomRoutes.swift */; }; - 5DF0A3CA62FCFD5CB7345A9B97F10049 /* NstBoardSuperGamePocahontas2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7537CE11495993BB05FE9EAA5BFED976 /* NstBoardSuperGamePocahontas2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5DFA7B4B653B42D7A547C3A60EFD77CA /* Joystick.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4EFC0CB26048698A849DD6BD85E55424 /* Joystick.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5E39903C4C3C854D8A8F52D82FF51ED2 /* bitmap_font.h in Headers */ = {isa = PBXBuildFile; fileRef = A4BC2C14AAA86B73D6B28FED8975C3F4 /* bitmap_font.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5E8C4F8137E41A59A3EE4DE28307BB64 /* DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = FB4B3A1CE88E9FF6475854D98A52A5DD /* DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5ED3D70CB705D6F29363340A8E1B314E /* ftxf86.h in Headers */ = {isa = PBXBuildFile; fileRef = C26FEA9C82A62549EEEB21A953C0F6DF /* ftxf86.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DF0A3CA62FCFD5CB7345A9B97F10049 /* NstBoardSuperGamePocahontas2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5884B3D9687E41073D6AE9F4960640D8 /* NstBoardSuperGamePocahontas2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DFA7B4B653B42D7A547C3A60EFD77CA /* Joystick.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 14C71D27630335B15939DD0664CE76D0 /* Joystick.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E39903C4C3C854D8A8F52D82FF51ED2 /* bitmap_font.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D4C88AAB9529011A0BC78A5F8FB349 /* bitmap_font.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E8C4F8137E41A59A3EE4DE28307BB64 /* DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3CDDB5072744264D4A7519AE6D6A63 /* DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5ED3D70CB705D6F29363340A8E1B314E /* ftxf86.h in Headers */ = {isa = PBXBuildFile; fileRef = 1168E68918E5BF84E08E11C7B371ABED /* ftxf86.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5F3811A8B4109BA4B752316B90429F4C /* OAuthMobile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A552ADFE847FA0B9435F038FD25C6AB /* OAuthMobile.swift */; }; - 5F45A12D5CFF64756E09AD77EF5081E1 /* Transform.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCD06FDE6C4BF266F270034784E23776 /* Transform.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F89935F0D9FA301409E399D2B40B501 /* pakinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C71AA7A6480E27C964B8F797CDFC89B /* pakinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FBC206C59F0020EFCEC4718EE86DF8A /* bldno.h in Headers */ = {isa = PBXBuildFile; fileRef = 5974CDB2492B4BFA5566A1D118F12B98 /* bldno.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FD5F0CF6C721D19713FF7C5E82F1829 /* NstBoardSachenS8259.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3555155F2CD8E368BB6A27A9517ADC29 /* NstBoardSachenS8259.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FF9738199FD4275E4CEF17EB2FD0E14 /* NstBoardBmcMarioParty7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3AF4B7019142B0E02BDE3089ED853C72 /* NstBoardBmcMarioParty7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FFED05405EB077DD3158D0203FEEF2E /* NstBoardDreamtech.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4AAA4EBFA294D12114F5AAAB4941BFC2 /* NstBoardDreamtech.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 601B04A377C214C532FD3284085C6C4A /* Vector3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 40C9A47942EB199AC851986CB149BF7F /* Vector3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 60253526607A110A8D0EE8069B3D101D /* NstBoardBmcSuper40in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04FA9510648C9DD5A3436B2139DA560F /* NstBoardBmcSuper40in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 6109531B72E4E232C02329870717C7EF /* NESEmulatorBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 631827F8F7F53171DBE8CFA596562B76 /* NESEmulatorBridge.swift */; }; - 612626E2EEFEF0B280A30622DFCB55C7 /* NstApiUser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1227B98A9F28F7732433A1CA68F8F875 /* NstApiUser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 61637EE91267F265A7F4EB3CECCFFA1F /* NstBoardBtl2708.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB24131FB6C69C2CA2374DF4C6A91A71 /* NstBoardBtl2708.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 61978EBDA8F0BEDE69E4CE4034FC960C /* m64p_common.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE3998515C1E572211C2A5EEE7EF068 /* m64p_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61A0F8234682825C2206D9B58BE241DD /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D8592309610FD7BF2ECC3EF7A2F045F /* pngstruct.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61A36B8525B5D1CA38CFC4C2564DA2C3 /* ftgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = D2F66324134D7EB7894E23D64D5D292B /* ftgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61B583689DD2CFBD46FA3712A184E2E5 /* CheatFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBAEA04DA00E792104BDE8F6F66BBE09 /* CheatFormat.swift */; }; - 61D1C0178CE6181A4877AD63422267AE /* VI.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EEBB60E43F6C3B0B541EE72A7C426F9 /* VI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61EBB111287EDF6AE4ABF04DA5A396CF /* NstBoardIremG101.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8FA72104E6FCAFAAAE36DA0189E9CB62 /* NstBoardIremG101.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 6212289ABD96C811DCD8B09B9BCC1E9B /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBEB0C887336CD9006A57A0852F915DA /* Operation.swift */; }; - 6212EBD634EBA7AC7214545989DC7AE0 /* dma.h in Headers */ = {isa = PBXBuildFile; fileRef = CBE1D5062813EDF33B5FBD108CA1A88C /* dma.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F45A12D5CFF64756E09AD77EF5081E1 /* Transform.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7C7EB4C3A9DB67B4B73C20A18B53EA47 /* Transform.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F89935F0D9FA301409E399D2B40B501 /* pakinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7550F86AC04930B4F25BF5030BE49B93 /* pakinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FBC206C59F0020EFCEC4718EE86DF8A /* bldno.h in Headers */ = {isa = PBXBuildFile; fileRef = 44EC5F94EE5BFE7A785C5541E9210F90 /* bldno.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FD5F0CF6C721D19713FF7C5E82F1829 /* NstBoardSachenS8259.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8523ACBE5D20530D62699515CC0C275A /* NstBoardSachenS8259.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FF9738199FD4275E4CEF17EB2FD0E14 /* NstBoardBmcMarioParty7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FF0C7BE73DA19DD12046FF44E95DC7E7 /* NstBoardBmcMarioParty7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5FFED05405EB077DD3158D0203FEEF2E /* NstBoardDreamtech.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B72A5A5016919006907A70C26E61B891 /* NstBoardDreamtech.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 601B04A377C214C532FD3284085C6C4A /* Vector3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16C765B40106664E143CBFFBDA5A104A /* Vector3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 60253526607A110A8D0EE8069B3D101D /* NstBoardBmcSuper40in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B5AE816827C6AA5796CDFC4C7E83D492 /* NstBoardBmcSuper40in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 60958CC056A611C62497E3D2010A35CC /* RTC.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FEB473929021F04D0B2259A61CE3883 /* RTC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6109531B72E4E232C02329870717C7EF /* NESEmulatorBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3B33FD961F7E04608908F29394499A /* NESEmulatorBridge.swift */; }; + 612626E2EEFEF0B280A30622DFCB55C7 /* NstApiUser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9AE76E7D656F9FC63729D2FE6CF2EE4B /* NstApiUser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 61637EE91267F265A7F4EB3CECCFFA1F /* NstBoardBtl2708.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E264A0D34041EEDB230760A4DF155023 /* NstBoardBtl2708.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 61978EBDA8F0BEDE69E4CE4034FC960C /* m64p_common.h in Headers */ = {isa = PBXBuildFile; fileRef = D1975814ACD46FECD8CEDFCE0706FFF0 /* m64p_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61A0F8234682825C2206D9B58BE241DD /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = A088B6DC0DF984AFEA200E3D0824458F /* pngstruct.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61A36B8525B5D1CA38CFC4C2564DA2C3 /* ftgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D7A85BF8A1C0DC2EE0B2F071F97445 /* ftgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61B583689DD2CFBD46FA3712A184E2E5 /* CheatFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 795C12A193997827B4ADD870D87BDF8C /* CheatFormat.swift */; }; + 61D1C0178CE6181A4877AD63422267AE /* VI.h in Headers */ = {isa = PBXBuildFile; fileRef = 66E2F83711E351CACFF208148B544CB1 /* VI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 61EBB111287EDF6AE4ABF04DA5A396CF /* NstBoardIremG101.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D81B0A638756575C41CA82842260A641 /* NstBoardIremG101.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6212289ABD96C811DCD8B09B9BCC1E9B /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA23C36C890553725FA9BBEBC0789829 /* Operation.swift */; }; + 6212EBD634EBA7AC7214545989DC7AE0 /* dma.h in Headers */ = {isa = PBXBuildFile; fileRef = 54ED6F866B4324DFC72570435F1EBD41 /* dma.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62340E0AED101FFE91C18C91AD9ACEEB /* MelonDSDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C3381B8A55051B7129CC78CA0231C2D /* MelonDSDeltaCore-dummy.m */; }; 6252AC3C230BC83234C9D7D7F17455E5 /* GTMSessionFetcherLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E4A6FA078E5D38752214D65807E3B87 /* GTMSessionFetcherLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; 626863FBB1F3C943ACB548FFB7A85E8C /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3871D54EF3B7DA9555828F18A50129A9 /* Timeline.swift */; }; - 6281A81C693739FBEEB99068ADE81F94 /* cpu_detect.h in Headers */ = {isa = PBXBuildFile; fileRef = E21A90A7C4C571865F8859DE15FB6A94 /* cpu_detect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62949FF9C1CBB808257B793D91067BD3 /* NstNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F67940E7C50D7A614B939AD60E078097 /* NstNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 62A34A388C71F471F3585E7D042A16AC /* AlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4EDFE6FDF5489F61CF533AAB848DEC32 /* AlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6281A81C693739FBEEB99068ADE81F94 /* cpu_detect.h in Headers */ = {isa = PBXBuildFile; fileRef = 3197530A210649B738C6111BF7966B53 /* cpu_detect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 62949FF9C1CBB808257B793D91067BD3 /* NstNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C786A086E27CBD3229EFD85CE7497EC8 /* NstNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 62A34A388C71F471F3585E7D042A16AC /* AlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A391671858B2C18AC2A7795F92FD3F03 /* AlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 6322A14CBDF57EF29695F820A403EDE2 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C0BA17B21F19930A3F7215B702D7372 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 63306BB36B1EE0257031B7113C64569F /* F3DPD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5DCDE4D17E50CB5CCFB03F65E6287BF0 /* F3DPD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 63427690A77B2B5436666DAF5706611B /* Err.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 62F06888B27D96F21A3D53797DD35725 /* Err.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 634773B1E340AACEAF3FE0D1F31F51D5 /* gbafilter.h in Headers */ = {isa = PBXBuildFile; fileRef = B2A2C9E40FB41F12D2820E3BC07998FC /* gbafilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6348E28B60143E90AC1BE0E53C58DC48 /* opengl_BufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B2829EE8FD1B61E4880C2DDA961706 /* opengl_BufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 636BA008A6D26E9CDAC0E0358AF55866 /* SoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 887068F06A80B516F5DE95AE14158D3F /* SoundDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6373AC1BC02916DA7A4727231D4E72E6 /* ControllerInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399024492430E7258571697FBE41E931 /* ControllerInputView.swift */; }; - 6419BCC57C3D947320987D210C349675 /* instr_counters.h in Headers */ = {isa = PBXBuildFile; fileRef = EC16A6C9E22D1924AE516F38A6DBFE58 /* instr_counters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 642FFA142ED6C17EF6E07F09CCB95DE2 /* ThreadLocalPtr.inl in Headers */ = {isa = PBXBuildFile; fileRef = B57DE6F8DC52A0DF6FA63026114732E6 /* ThreadLocalPtr.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - 6446ABE3984EC295A073DDF259A3968B /* tile.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E62A12C767331BC621336E59054040F /* tile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 644B2EA9FB3436835DEE0BA7DA47DAE1 /* t1tables.h in Headers */ = {isa = PBXBuildFile; fileRef = C1E54260AFD798B02F4283ECF16E444F /* t1tables.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 64C9989CD9A4F9A39D9599A0881F5655 /* GBALink.h in Headers */ = {isa = PBXBuildFile; fileRef = 64F5E353543E813AE8499F0415496364 /* GBALink.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6502705CE8C9907BF33AEC009AAE49A6 /* NstBoardIrem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E64DA6F38CE5BF6A1B8B85644BF421A8 /* NstBoardIrem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 652A1D1BC29758EF8C914998DFAB0F96 /* Mutex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9F97A82B4B62F88A9ABDCB471BD4E255 /* Mutex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 6535B1B6AC3FBC20B9D1C2B6255A3708 /* fttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = DACC10FFB04DCEFEA489925006B8311D /* fttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 653EFAF65992560FB2370C51780DB91C /* SoundBufferRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0C27F2E27F1106463E57DFEED760FFA8 /* SoundBufferRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 657244809950CE301AD70BDD7C2D4DE8 /* NstBoardFfe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A7FA6F5EFA3E03E39BBF032A32482DBE /* NstBoardFfe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 6572D4AD2CDA7C344092B902AE5E375D /* svpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = 339EF64DD9F7A5E35B3CA9B6E200C168 /* svpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65AB36D595CB07090A2AB42CFA4C4F96 /* L3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 15B06D5EC0A84D413A97D791A09DD4C0 /* L3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65CBBDBDF701FB51569473462CF38DF8 /* svsfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DA02F00ADA726E3CE0F82AA955FFB71 /* svsfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6604303E9728F99EAFA8B202C3B06AAF /* apu.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EC7300212B3C57CD396DDC7242519F3 /* apu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66AE47CDE09E8A95A29BB75F046C2B03 /* ftcffdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F9A4CA2154481A63B5E58F37EBDA908 /* ftcffdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66D90649D3F20F5DA87EC0A5FD2168D3 /* NstBoardBmcHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F712A25B70E2BECE91A60F3F2CDBC6D6 /* NstBoardBmcHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 66E68D161A3E4F2F8CF51848F5E11C60 /* STTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2013712F504FC10A75B32DB78638B56B /* STTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 670B1515AB23AB6EF7AA6DE75DCD4BFA /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F0727F553BF04882765DDB5CDA7D864 /* internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6728DD595016A88D0BE42E03C7F8FFCC /* GBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458848778BD2CA388B2DC820968AECB /* GBC.swift */; }; - 6731CC4CED928FD83F4CEA695B5D6A78 /* CombinerKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9863A0F82AE9292BB81384ECFD45AABF /* CombinerKey.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 675105628714D68862DC480B2632FFC7 /* MMU.h in Headers */ = {isa = PBXBuildFile; fileRef = 81699BBB7E4A8A98AF2985A53BE0E791 /* MMU.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 679942ACF8264152448A2861144849F9 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C24EA8E380769E668B40D2C5025505CB /* opengl_ColorBufferReaderWithPixelBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 67ECCA37061F91867BC2AEA13B836BDB /* SNESTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F571DFD58990674E824384F544CF9CD1 /* SNESTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 63306BB36B1EE0257031B7113C64569F /* F3DPD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F07E76FD0A048E88C13AD72461D1A8A5 /* F3DPD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 63427690A77B2B5436666DAF5706611B /* Err.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB5B6F86BFE8AFABADAFCCC745D013FE /* Err.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 634773B1E340AACEAF3FE0D1F31F51D5 /* gbafilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D0B8740C1A5A02C3EBF2D3FF634FACF /* gbafilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6348E28B60143E90AC1BE0E53C58DC48 /* opengl_BufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = C129B80E9CC6B64D0600B9A46648ED8B /* opengl_BufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 636BA008A6D26E9CDAC0E0358AF55866 /* SoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA06CA70E6579DA7013F9BF0C6148C7 /* SoundDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6373AC1BC02916DA7A4727231D4E72E6 /* ControllerInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3104A99F1E2E5DCD9FCE463C1BCD842 /* ControllerInputView.swift */; }; + 6419BCC57C3D947320987D210C349675 /* instr_counters.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C7B436FC2BE106D5FAF2A5FE73A0CEB /* instr_counters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 642FFA142ED6C17EF6E07F09CCB95DE2 /* ThreadLocalPtr.inl in Headers */ = {isa = PBXBuildFile; fileRef = 6A98E587E6533A6DF4F4624F83C3BD14 /* ThreadLocalPtr.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 6446ABE3984EC295A073DDF259A3968B /* tile.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B74C9DADB72CF0883D582488B13ED6 /* tile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 644B2EA9FB3436835DEE0BA7DA47DAE1 /* t1tables.h in Headers */ = {isa = PBXBuildFile; fileRef = 030B53DF4264E1E4E75E737FC9B5B696 /* t1tables.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 644DA2A6ED8D65DD05C30EACC26425F5 /* NDS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A854F4317FA28AEE4189EE7FF42C9E3 /* NDS.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 64AAC890C5FE81CDEA42957859B1A198 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 21A623E3F7E900942F5A6AD1E693832D /* Platform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 64C9989CD9A4F9A39D9599A0881F5655 /* GBALink.h in Headers */ = {isa = PBXBuildFile; fileRef = DB6A84DCE2259D650CA6872E7BC6A3C9 /* GBALink.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6502705CE8C9907BF33AEC009AAE49A6 /* NstBoardIrem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 20D9584841AECE27BBC056E45740941F /* NstBoardIrem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 652A1D1BC29758EF8C914998DFAB0F96 /* Mutex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7C65583B30F5CE8CB3A417DCFB648306 /* Mutex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6535B1B6AC3FBC20B9D1C2B6255A3708 /* fttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 57067E8C28EB51D8DC120B70B3A966CF /* fttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 653EFAF65992560FB2370C51780DB91C /* SoundBufferRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4D26635313FF0E89E645E701C664260 /* SoundBufferRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6556E55EE066A70B571AA0F6018B0988 /* GBACart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 649A8676EC984C0C8FDF1CCA5D3FF80D /* GBACart.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 657244809950CE301AD70BDD7C2D4DE8 /* NstBoardFfe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48362C4E645985DF12660BB2415B0487 /* NstBoardFfe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6572D4AD2CDA7C344092B902AE5E375D /* svpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = C4D7382D1D8B2EAAEDEC4E420FAC72E6 /* svpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 65AB36D595CB07090A2AB42CFA4C4F96 /* L3D.h in Headers */ = {isa = PBXBuildFile; fileRef = DDB2184F0999EE882B67DEFADE1B4A63 /* L3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 65CBBDBDF701FB51569473462CF38DF8 /* svsfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3139CDEFDF54874B3FE87D52FBEE63BB /* svsfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6604303E9728F99EAFA8B202C3B06AAF /* apu.h in Headers */ = {isa = PBXBuildFile; fileRef = ADFD98373A9BA6422C60F09ADCB69852 /* apu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 66AE47CDE09E8A95A29BB75F046C2B03 /* ftcffdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = FA571B46E66CC61957A2EC9659B40B5F /* ftcffdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 66D90649D3F20F5DA87EC0A5FD2168D3 /* NstBoardBmcHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 430D8BC642B862DC5871DCA6D4D4B26A /* NstBoardBmcHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 66E68D161A3E4F2F8CF51848F5E11C60 /* STTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 80E83F0F41410406BC51FD2A72523649 /* STTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 670B1515AB23AB6EF7AA6DE75DCD4BFA /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CEF3CC6501A56EB934F1F25AEB77A985 /* internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6728DD595016A88D0BE42E03C7F8FFCC /* GBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CE2ACA6C2A3B34E052EB69D646F08D /* GBC.swift */; }; + 6731CC4CED928FD83F4CEA695B5D6A78 /* CombinerKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE736221B155C2514D9D36EB4FBAEEEF /* CombinerKey.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 675105628714D68862DC480B2632FFC7 /* MMU.h in Headers */ = {isa = PBXBuildFile; fileRef = 88C31AF11910728A45F6A72A4BF44968 /* MMU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 679942ACF8264152448A2861144849F9 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 944052D0ED4C8624EF4485EE37D7898C /* opengl_ColorBufferReaderWithPixelBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 67ECCA37061F91867BC2AEA13B836BDB /* SNESTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 360FE52BEEE04312C550B83F42CCF550 /* SNESTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6853624E43A5EB0CA069A0F55C3C315C /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC397E433E2CCBB38824AB04FAAC26C /* NetworkReachabilityManager.swift */; }; - 687F1F311F418FE895B2D96BF3617B14 /* mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DB43450886939FC8E10313F46E479D1 /* mem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 687F1F311F418FE895B2D96BF3617B14 /* mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 123BC6ACD39EEA715F0A93879B490B14 /* mem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 68F7071AB87ED8CB4B8CF11F7BF9A78E /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C8D94F40BF63E8927B70BB024B0F136 /* Connection.swift */; }; - 68F955348FE9A8B6BCE3113CE94A7DE3 /* remote.h in Headers */ = {isa = PBXBuildFile; fileRef = B0720305184D6498023330012901935C /* remote.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 693CE9D53961CFDE9E0763B45047AA96 /* wifi.h in Headers */ = {isa = PBXBuildFile; fileRef = 08A7738B63C4EF018D66094588BB33F2 /* wifi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 695099FE2655BBE346F93075ABE6CF75 /* psaux.h in Headers */ = {isa = PBXBuildFile; fileRef = 7502471AA27312AF107E971A67EC58C6 /* psaux.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6A07D0503F964D4BA74E6F726D679DF7 /* NESEmulatorBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 16493B09A57A9904E0843D5268271785 /* NESEmulatorBridge.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 68F955348FE9A8B6BCE3113CE94A7DE3 /* remote.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FF9B56C14F9DA7D4C860A76893C21C5 /* remote.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 693CE9D53961CFDE9E0763B45047AA96 /* wifi.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FE86A7AE75D5AB202DCEB5C676F51B /* wifi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 695099FE2655BBE346F93075ABE6CF75 /* psaux.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E570CBAF755D32B62B2B5506AE1CB8 /* psaux.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A07D0503F964D4BA74E6F726D679DF7 /* NESEmulatorBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5984855E15D790E1B69A1BD578ABC85 /* NESEmulatorBridge.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6A245DCAC5A1FD3F8943F4FD3E1473EE /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 71FF835F27DBABBE447A40E51AF4AC68 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6A386F883B6F86FCA792C8C1134057CA /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6365C9968A510968784A08051605D583 /* Result.swift */; }; - 6A86407036458ED2BBE900F4A74A49A4 /* resource.h in Headers */ = {isa = PBXBuildFile; fileRef = 582940D574BD4B0474117DA6BE586566 /* resource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A86407036458ED2BBE900F4A74A49A4 /* resource.h in Headers */ = {isa = PBXBuildFile; fileRef = C7042544A83B2C65E8D67FFD6DBACCD4 /* resource.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6A90DB9252F5F4A3ECBB6AD4F22A1352 /* GTLRRuntimeCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = F97E0802AC94B24B1FB03E55CD9A2FAC /* GTLRRuntimeCommon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6ACAD89B30AD04EE41D0ABDD3FB3A546 /* slot1.h in Headers */ = {isa = PBXBuildFile; fileRef = BB534F82994E35C0556962CEB04EAF6E /* slot1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6AE5D505AB46EAC8A4CA2ACBE1EF0FC3 /* TxReSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 205D59098479C96A36856ACF72D6AF7C /* TxReSample.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6AE6261249D9E4BD068CD7091A136070 /* osal_dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = 67464BB3B17BCC0986DEB6DD52C604A5 /* osal_dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6ACAD89B30AD04EE41D0ABDD3FB3A546 /* slot1.h in Headers */ = {isa = PBXBuildFile; fileRef = 287CF3209EFBA423F838FBAE494AB0C0 /* slot1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6AE5D505AB46EAC8A4CA2ACBE1EF0FC3 /* TxReSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE3A4F7E48FD2C3751CCD26689C1353D /* TxReSample.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6AE6261249D9E4BD068CD7091A136070 /* osal_dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = FE17ACA9391DAFCA51DA8FE4929D2B86 /* osal_dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6AF4C6E585CFF93B76EC9C45FE0F7CB1 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039A7DC666394A7FCDA8D0587DD80EAD /* Files.swift */; }; - 6B16C85148A68CC975DA7929304DF1B7 /* PostProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C9E1AF02B3EAB5EEF41A090B1D93CA6 /* PostProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6B63836AD6E6BC9D03FB3AD4A534B6AC /* gSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0E9121D9B12531DC426945BA216F72E0 /* gSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6B6B1242D265B7C549A4D6A341A1EEB0 /* dcheck.h in Headers */ = {isa = PBXBuildFile; fileRef = 133FFF074C7375B30FD28DFF38BE260D /* dcheck.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BABA54BBEBA347D766C48087A4F87D0 /* Patch.h in Headers */ = {isa = PBXBuildFile; fileRef = E269D644BF08F4B053F036687791157F /* Patch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BBCF5E1AC45FC48B7C6E6AA2A19E03D /* DeltaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = ACD2694A63AA0B70E91DAF193E7B4425 /* DeltaTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BC128BCDCE5AC608EA415377CCC78B8 /* libhardware.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DD967DC3CDB801FA186F97CA836B2E5 /* libhardware.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6C01BBF8A1A21C9696500E148349BC14 /* AnyInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 294C23E97C15AE68F25128C115C99270 /* AnyInput.swift */; }; - 6C138F122959D82C0E672FA0ACE8F007 /* ppu.h in Headers */ = {isa = PBXBuildFile; fileRef = D9ED4C71C3016ED3FC4BA58AD0F23387 /* ppu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6B16C85148A68CC975DA7929304DF1B7 /* PostProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = A664ED590168019449C1E8A60B996A1D /* PostProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6B63836AD6E6BC9D03FB3AD4A534B6AC /* gSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0EA337C872D00B3A247FF40858C6BF1F /* gSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6B6B1242D265B7C549A4D6A341A1EEB0 /* dcheck.h in Headers */ = {isa = PBXBuildFile; fileRef = CBE09CFE7E4A642AC1B56EC89FADDFFE /* dcheck.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BABA54BBEBA347D766C48087A4F87D0 /* Patch.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AFD09F14D0DA01868F50B237A0B76B1 /* Patch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BBCF5E1AC45FC48B7C6E6AA2A19E03D /* DeltaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = ABF2E1030F06335CAB068D719C129216 /* DeltaTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BC128BCDCE5AC608EA415377CCC78B8 /* libhardware.h in Headers */ = {isa = PBXBuildFile; fileRef = 431779F5BA85EA4F476E69CF0D2AEFD3 /* libhardware.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6BD8B0E292B94BC9D8A9CBA583D4A79E /* MelonDSEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F014A83DEF4F355ED7E7CBACE0FBE07 /* MelonDSEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C01BBF8A1A21C9696500E148349BC14 /* AnyInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90564B99F2C2EF43FEC4BA55EEF618FB /* AnyInput.swift */; }; + 6C138F122959D82C0E672FA0ACE8F007 /* ppu.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BB33D23E1407CA689F462EB7799485 /* ppu.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6C6915CA122E8B4630061446128E2BCC /* Paper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F9C1E6A3EFB7439D016876D6537610 /* Paper.swift */; }; - 6C87671F7C948E465D76853474A7F27E /* DropboxService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9140DC01C356F980A0A4E04F1CCC3636 /* DropboxService+Records.swift */; }; - 6C98F3F29A1ACE6C91C20CE35EDA0261 /* NstBoardNamcot163.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5385CA919BFDAA02107CE76AD241472B /* NstBoardNamcot163.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CCACC2383F5ADD7F92D95FF4C6CDD56 /* GBA.h in Headers */ = {isa = PBXBuildFile; fileRef = 325F0C3218801422F4A41352BE209C49 /* GBA.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CD1DD53A424B153F6267EE63AFE1CDC /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C0CA4A2A069453672147E331C600848 /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CE7F4046BA417D2DF53E0C69D47B473 /* DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B270BDDBFC6E00BB3C7D20C485D51558 /* DeltaCore-dummy.m */; }; + 6C87671F7C948E465D76853474A7F27E /* DropboxService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17FD4E3456BB23320C0E9F652CC29D1 /* DropboxService+Records.swift */; }; + 6C98F3F29A1ACE6C91C20CE35EDA0261 /* NstBoardNamcot163.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FDBE09509A57E9C26585D21FA1FB381C /* NstBoardNamcot163.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CCACC2383F5ADD7F92D95FF4C6CDD56 /* GBA.h in Headers */ = {isa = PBXBuildFile; fileRef = A8939FA4EA41B857876F33812D829B63 /* GBA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CD1DD53A424B153F6267EE63AFE1CDC /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C7894842679F86AEA25BABD02717D75 /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CE7F4046BA417D2DF53E0C69D47B473 /* DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5393A36A3C22644206D6D5187A6B0285 /* DeltaCore-dummy.m */; }; 6D1CB98C0BB063D06CF4A3B13B4D21F3 /* OAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 542213FAAE95E6EA5E3E9392D8DD3B49 /* OAuth.swift */; }; - 6D4FDCA328DD8D76500CEE55AA8663B6 /* adaptivesleep.h in Headers */ = {isa = PBXBuildFile; fileRef = C1F9B4F1AC4BEBB6F3B839EDBD9E5F8C /* adaptivesleep.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D5F88F8EE3492C0AD55D6CD854681EA /* LocalRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04CC6EBCEC394DA0E803BBA27F7D98C0 /* LocalRecord.swift */; }; - 6D611D7DCB3F3FB551F06D363B0F6BC9 /* Parameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B314596089C9694EA48772E604953E9 /* Parameter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D72C6C57A885CD6E28DEA598592E6AB /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 1708CC47B44B29F11E1399CFC0321DC7 /* Standard.deltamapping */; }; - 6DE7BBDFA34C2573298F7441BBF3AB4A /* CRC_OPT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 75F57C00E99D0261142E905420B1FDA7 /* CRC_OPT.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6E50F30E4BECE7A6C3531020D1E5C59F /* msu1.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B254FADF7513993D3F7353F6B8F1395 /* msu1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E5A067CD4797D3ABC2BC001B7005A84 /* ZSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 600582314CC9166CC637A8451ADB1310 /* ZSort.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6D4FDCA328DD8D76500CEE55AA8663B6 /* adaptivesleep.h in Headers */ = {isa = PBXBuildFile; fileRef = C82F87697475573C237F91B5498957A0 /* adaptivesleep.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D5F88F8EE3492C0AD55D6CD854681EA /* LocalRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA5774FC0B40EC779613DB64E15C046 /* LocalRecord.swift */; }; + 6D611D7DCB3F3FB551F06D363B0F6BC9 /* Parameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C1FB014388E9D1E47EB7DCC0CD0682 /* Parameter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D72C6C57A885CD6E28DEA598592E6AB /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = C94926745D8A006AA0A950A854249A42 /* Standard.deltamapping */; }; + 6DE7BBDFA34C2573298F7441BBF3AB4A /* CRC_OPT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E535808FC30F7474AE914FD2270A2715 /* CRC_OPT.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E50F30E4BECE7A6C3531020D1E5C59F /* msu1.h in Headers */ = {isa = PBXBuildFile; fileRef = FC26AD726BEA827DE29E8369FB6303C6 /* msu1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E5A067CD4797D3ABC2BC001B7005A84 /* ZSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B9D8426DBFEF530DE2AC44162062396 /* ZSort.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6E64571D846DA6B46DEF71405A2C71F7 /* GTLRService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1B35A10293013EB1FF554F7BEB76DC /* GTLRService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E775AD30672E29EEE6CC70D23A833C9 /* opengl_ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F09391CC528737E038858DA43278244 /* opengl_ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E77A5D834F1A5B81DFB7C1955085F93 /* RSTToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A435B10C22B22C7734A3E5913E53474 /* RSTToastView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E775AD30672E29EEE6CC70D23A833C9 /* opengl_ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = EAFE7943BDC2A2EA16E70C5B9E8335BE /* opengl_ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E77A5D834F1A5B81DFB7C1955085F93 /* RSTToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = 18A21C316835DD316654A070B9E838EF /* RSTToastView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6EA0A6FE9CCD2699B6BEF34376E9649F /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC1B770F09F0C669234396A39BFF6BB9 /* SDWebImage-dummy.m */; }; 6EAC3C9446063F09611B9BE55D8D34C1 /* SQLiteObjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 89132F0647F462DF7B2532346D3447EE /* SQLiteObjc.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6EC906D378EF8ADEC5D7C2B04BE6C36B /* AudioRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E81E563B519CB275A216BD3E5414DAA /* AudioRendering.swift */; }; - 6EDBE3E2C2021F2A4DC6A5D4258AAB9A /* hle_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 58B5E7D372F81123297C2A52505FD923 /* hle_internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6EC906D378EF8ADEC5D7C2B04BE6C36B /* AudioRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CB3FC8544B28E9203C07151D44AC01 /* AudioRendering.swift */; }; + 6EDBE3E2C2021F2A4DC6A5D4258AAB9A /* hle_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DF2DD4169A9A5CEA5319C794BD888975 /* hle_internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6EE9ACB0AB0E0CB81A490F499EBEFF29 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 040EDE19207F90BFBF015280544EC415 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6F2BC09D000622A367F66D88714B1C38 /* NstBoardUnlA9746.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7F657EAC00204AF30C7E4EA0B4518AC5 /* NstBoardUnlA9746.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 6F7B7F6E4DF7B31AC33A3A62461A2127 /* NstBoardHxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A3F6E644CFB6C961D9227F005A276743 /* NstBoardHxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 700240FA8626FBCB8DD1E6A528883AEC /* GBAEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = BD71FA05AF33D2016379AB441E9DA7FD /* GBAEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 70035AF1D8DA93A9B0572D1D91051A47 /* gdbstub.h in Headers */ = {isa = PBXBuildFile; fileRef = D2787BB38A3A6EE118F7DC347429E78F /* gdbstub.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6F2BC09D000622A367F66D88714B1C38 /* NstBoardUnlA9746.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0D13CE77F2679DAE2B0BD39A25C2A0DE /* NstBoardUnlA9746.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6F7B7F6E4DF7B31AC33A3A62461A2127 /* NstBoardHxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 183E1BFA0F57AF969EEA014FEB426220 /* NstBoardHxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6FC18CA0020117D5096CF72A20A94C68 /* SPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E319DE75A7A4BF735167A2B78A55635 /* SPI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 700240FA8626FBCB8DD1E6A528883AEC /* GBAEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5F716F68D783146B202EC8FC938BC98B /* GBAEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 70035AF1D8DA93A9B0572D1D91051A47 /* gdbstub.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D2B3BDB29EB37DAEDCBC3179FAA6100 /* gdbstub.h */; settings = {ATTRIBUTES = (Project, ); }; }; 705E7B04E1FE3269939CC5C40D83CACE /* DBChunkInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F2AC6B33D1F207C23351293A0A281146 /* DBChunkInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7064D5DF4976B7F5D00D0B07734180B0 /* fterrdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 435368F303983E9CA139C506A1FEDEDB /* fterrdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70AFFCAC4CE322C09CE2DC0E3E7EA378 /* NstInpAdapter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3B72CA5846B888FBC7CF69D1C40C9AE7 /* NstInpAdapter.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 70B5E10C6A4B9C465AC2BE6C2767396C /* Transformable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3786BF5CD7F52FDF2EC2229D9387B2A8 /* Transformable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 70E25FC6BCB677FCACF3974715396E5D /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BE2E896D06C7357E3D03BBCFA7DAC96 /* Platform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70F8274ED7EAC15159077EA63E371A20 /* ftvalid.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E8F9415B50C5BE88ACC481C92800E41 /* ftvalid.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 71090B7AF02512A3B3624247E31E7431 /* NstBoardBtlSuperBros11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2D3BDC0A83B15DB6FCC56F319C1AD6E8 /* NstBoardBtlSuperBros11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 71818CFECCB549FFE9A56EFC73229B2B /* NstBoardKonamiVrc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9C6F3AAA06C293FC9A91CD7A5FE7D65A /* NstBoardKonamiVrc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 71A5939665A6E80DDE1C1A3AE2CEBA27 /* F3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A79E77382CDD0991EC1FF3A9416D1E8 /* F3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 71F6A8B4B3856EB5415745A312B82590 /* NstBoardJalecoJf13.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E042969907A8F89D42D0992DE8D4804B /* NstBoardJalecoJf13.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7264B6C7620512CB91DD5A6E09E01DED /* TxUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E57F66FFEB81B1218E882DC67DDCD97 /* TxUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72B1945C2E80532FCF4F8003F26CCC0A /* NstCpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 13AB3B953E50263BB51D1FB9AE869E8E /* NstCpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 72DD532BE9D0102D2688E11ACACFF362 /* libco.h in Headers */ = {isa = PBXBuildFile; fileRef = F31355AD8ECDC7A336C4AC45A5CD2FDE /* libco.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7324ED114581AE7281851FCD2DFE2220 /* audio.h in Headers */ = {isa = PBXBuildFile; fileRef = 00E1CE975F5DF9EF52286A091470CE4D /* audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 73292E5A2AC3196B5409A496BB5C5541 /* PrimitiveType.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 406077526A3C40A99FE96076975E23CA /* PrimitiveType.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 732F3A5D226D0D463C9027476C9F5E60 /* T3DUX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59F17550D814845B484B295BDDA7E52E /* T3DUX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 732FD811EC8A5BA0B28708137D0A45D2 /* logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A4016B959B9C2B70E21D27AA4439760 /* logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 73386D5E90D47431798B1A5A736601B7 /* glsl_ShaderStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E988413B416CBB252A2093E604B1CBEA /* glsl_ShaderStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7372BF9BC203CFB23F3EF1A9742FAC93 /* NstBoardBandaiLz93d50.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C55A28A051F1189A5E169C1AE35F08E6 /* NstBoardBandaiLz93d50.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 73884246E8506A0D452A96718B443133 /* vi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 115E4BA52EDB4A7B8117F27B828EF3DC /* vi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74206933424C0DC3CB8FAE979E98F7E1 /* NstPatcherUps.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04432A140C95AD3E4476D54108D6800F /* NstPatcherUps.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7436F86B9A9CD831006948764C9DFB72 /* MFiGameController.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 2E8023826B8975C217D59F5E61A8DCEA /* MFiGameController.deltamapping */; }; - 74B438724E9EA3B46DED43330AFF691C /* sdd1emu.h in Headers */ = {isa = PBXBuildFile; fileRef = ED04A2B8DBDC30DD89B8DB99DD186974 /* sdd1emu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74BD141762B0C89C185D3ABE65E58448 /* NstBoardHosenkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 64F52923D2670C65E03D742EF710218A /* NstBoardHosenkan.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 74C1EC2D9E5FAFAE8A89018C1B79FD90 /* NstBoardBmc1200in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 301D690D8387625CECE00F7DFC975BD1 /* NstBoardBmc1200in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 74C7BF54656C67DEB87098CB74EBFED4 /* UpdateRecordMetadataOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D564037F9192979A0BA63A5F9545CDE /* UpdateRecordMetadataOperation.swift */; }; - 74CF4098668D8E59F2F415F232C54506 /* NstVideoScreen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E525D21EBF75A723E18A33533D504F6B /* NstVideoScreen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 74D859213990282C35C19B6D2313E0E8 /* RSTOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = F1420029FD3C40F200795462E463C362 /* RSTOperationQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 753C7E6021A90C69A401D819AA4460D5 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F6E550519668062C1B78FCF1BBCEA0 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75909BCE4368ECAC28AACD2C2CBB5682 /* idec.h in Headers */ = {isa = PBXBuildFile; fileRef = 89C8E96993FFE0F04D42EF2FC57593F3 /* idec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75B06D656B71606BD4C8995494313BDE /* PropertyGroup+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = D98981D944CEC9F56A1D909EFAB4FB16 /* PropertyGroup+Harmony.swift */; }; - 75B85A307530462BEDD1925293E1B335 /* ffmpeg.h in Headers */ = {isa = PBXBuildFile; fileRef = 490A6AF86E771A7376AA1B58EDEAE7EC /* ffmpeg.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75C08B83D5F3E9E679CE2F1619FEF158 /* NstVsTkoBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 955407B1C8467036B4E43CAD531EECB3 /* NstVsTkoBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 75F7A8F8126A9FE9B693F50E46A15BDE /* NstBoardKay.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 323BA7B73E9CB19F2E6792B339B711E1 /* NstBoardKay.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 760970F7137AE6D811FF1CDB6CC2D871 /* F5Indi_Naboo.h in Headers */ = {isa = PBXBuildFile; fileRef = 888803D1EF43D58657C5732AFAC576BC /* F5Indi_Naboo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7676FAAA46D6F17DD9B7DD349475C457 /* Packet.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 30DCADC540C43841BB69ADBF07E2D033 /* Packet.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7694BBD406736AE9B3A9A54680E1BE83 /* iniparser.h in Headers */ = {isa = PBXBuildFile; fileRef = 042D259A0DE7C5C64344E6F6C921F2F4 /* iniparser.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7064D5DF4976B7F5D00D0B07734180B0 /* fterrdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E65C6009E97AD1F054B35476E2887A /* fterrdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 70AFFCAC4CE322C09CE2DC0E3E7EA378 /* NstInpAdapter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 213E27CCA1F2F1BE726697432009E2C9 /* NstInpAdapter.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 70B5E10C6A4B9C465AC2BE6C2767396C /* Transformable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E7771F7C5B8F14F803F19FCEB39CD0B /* Transformable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 70E25FC6BCB677FCACF3974715396E5D /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 68776D658C9400B8766FD395BBD08F63 /* Platform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 70F8274ED7EAC15159077EA63E371A20 /* ftvalid.h in Headers */ = {isa = PBXBuildFile; fileRef = 191702D253506FDF5363FBCC895772FA /* ftvalid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71090B7AF02512A3B3624247E31E7431 /* NstBoardBtlSuperBros11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73ECDB6212A48398010C7457141CC1B2 /* NstBoardBtlSuperBros11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 71818CFECCB549FFE9A56EFC73229B2B /* NstBoardKonamiVrc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AEB306B4037EA4CACDF06823F9F7AAAE /* NstBoardKonamiVrc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 71A5939665A6E80DDE1C1A3AE2CEBA27 /* F3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = EEAE0F78E10C6AB8250B4FCF2FBB074F /* F3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71C0A367EA0BA6BF86EE30AD3006E1D0 /* CP15.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9BFC6434EFC695B07E4DF1FB6E56F95 /* CP15.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 71F6A8B4B3856EB5415745A312B82590 /* NstBoardJalecoJf13.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E10F919F295AF23B2D729F89AA44145D /* NstBoardJalecoJf13.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7264B6C7620512CB91DD5A6E09E01DED /* TxUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = FEAE71533C82C752E7F1D21A99698CD1 /* TxUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 72B1945C2E80532FCF4F8003F26CCC0A /* NstCpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 32C6794E2F48E8D40B8DA4F984505F38 /* NstCpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 72DD532BE9D0102D2688E11ACACFF362 /* libco.h in Headers */ = {isa = PBXBuildFile; fileRef = 4963CF582BB4AB9E1079BB9ACCA4C395 /* libco.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7324ED114581AE7281851FCD2DFE2220 /* audio.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CE8685D1C71D8EB010FB3B97ECE0634 /* audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 73292E5A2AC3196B5409A496BB5C5541 /* PrimitiveType.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56244C2165C1707D7E72E9B0F3441A1D /* PrimitiveType.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 732F3A5D226D0D463C9027476C9F5E60 /* T3DUX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 931ECBBA73F768F5570C9A96C3F2C003 /* T3DUX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 732FD811EC8A5BA0B28708137D0A45D2 /* logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 420E3047C00A76F43CBE5EDA68BCCEF1 /* logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 73386D5E90D47431798B1A5A736601B7 /* glsl_ShaderStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E7A6E2D2600BE5C4EEA5BD6FF1BD0175 /* glsl_ShaderStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7372BF9BC203CFB23F3EF1A9742FAC93 /* NstBoardBandaiLz93d50.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7103DD1615CC67B6239304B8B4BE2F06 /* NstBoardBandaiLz93d50.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 73884246E8506A0D452A96718B443133 /* vi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E5C87C85D80CEFECDBD846C5507C244 /* vi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74206933424C0DC3CB8FAE979E98F7E1 /* NstPatcherUps.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D14E9FD4E7425DDD45906CDB6CEB7EF9 /* NstPatcherUps.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7436F86B9A9CD831006948764C9DFB72 /* MFiGameController.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 226C662B43ECEB12F37DFF9C36643D0B /* MFiGameController.deltamapping */; }; + 74B438724E9EA3B46DED43330AFF691C /* sdd1emu.h in Headers */ = {isa = PBXBuildFile; fileRef = E33F73E03E8DBCB9A561F9D7082C8EB3 /* sdd1emu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74BD141762B0C89C185D3ABE65E58448 /* NstBoardHosenkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1D48E1464F25EE094AB21C99E9CDC8BF /* NstBoardHosenkan.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 74C1EC2D9E5FAFAE8A89018C1B79FD90 /* NstBoardBmc1200in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E9B5611EF6F1B6A753A3169A802B611A /* NstBoardBmc1200in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 74C7BF54656C67DEB87098CB74EBFED4 /* UpdateRecordMetadataOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72B1BA0104CB37793A0BEBF5E0F3FFB8 /* UpdateRecordMetadataOperation.swift */; }; + 74CF4098668D8E59F2F415F232C54506 /* NstVideoScreen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75C95A2D2A55102279FEBE572C7A8FB0 /* NstVideoScreen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 74D859213990282C35C19B6D2313E0E8 /* RSTOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B9083EB242665508C97535A7311874C /* RSTOperationQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 753C7E6021A90C69A401D819AA4460D5 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 42052734B8AE23EA17D468F6CABDCEB7 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75909BCE4368ECAC28AACD2C2CBB5682 /* idec.h in Headers */ = {isa = PBXBuildFile; fileRef = BEDA7F12E500CF17988D000DA2BF93E7 /* idec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75B06D656B71606BD4C8995494313BDE /* PropertyGroup+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E354663056D2C09F9EBDE7F3F20EF4 /* PropertyGroup+Harmony.swift */; }; + 75B85A307530462BEDD1925293E1B335 /* ffmpeg.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D8F9B8A6D48D5044338BCB2BA139DA1 /* ffmpeg.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 75C08B83D5F3E9E679CE2F1619FEF158 /* NstVsTkoBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A36271D99C74D00F39DEEE122842B93E /* NstVsTkoBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 75F7A8F8126A9FE9B693F50E46A15BDE /* NstBoardKay.hpp in Headers */ = {isa = PBXBuildFile; fileRef = ED915D94AD96A862B32BB7B60A454CF2 /* NstBoardKay.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 760970F7137AE6D811FF1CDB6CC2D871 /* F5Indi_Naboo.h in Headers */ = {isa = PBXBuildFile; fileRef = DF93E143D1E16A5D0994F45965CDDB74 /* F5Indi_Naboo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7676FAAA46D6F17DD9B7DD349475C457 /* Packet.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 26031A010DCC281450512C72B41CD425 /* Packet.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7694BBD406736AE9B3A9A54680E1BE83 /* iniparser.h in Headers */ = {isa = PBXBuildFile; fileRef = EAEC7554802DE0A7D1588B6403024167 /* iniparser.h */; settings = {ATTRIBUTES = (Project, ); }; }; 769EEA7F82C3927B9C262C740EF80DC1 /* GTLRDuration.m in Sources */ = {isa = PBXBuildFile; fileRef = CD370B63C73F83203B239D65A10BF44A /* GTLRDuration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 76A404D815A496FF472714B9493FB2E8 /* NstApiFds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF8FF38768C4E80A0EA1F613D38541E5 /* NstApiFds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 76AA012877710AB1F164AE7B49DD098D /* NstInpPowerPad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D41C7731EC1A1866FC9B20D1EFC8D2ED /* NstInpPowerPad.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 76D132D024B6A52E4DFDD31827EBE0FC /* VideoRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3D974A96D201E7E1B93CC578D3AC323 /* VideoRendering.swift */; }; - 77338E935B4CB0FA16154F8F845B9F74 /* NstPpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6C7AA36ACFE2AD062803B5CC90965154 /* NstPpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7736A8964115F20A8A6F09230ED8814D /* Time.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5F4BA7A7D97044CD5A2BE415D287BEC1 /* Time.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 77708024733DF3B64F127AB9D0E5C5EA /* RSTPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = 03792829FDEFEBCD237AD95762EF484D /* RSTPlaceholderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7793407AABB80F7FF59D7C5516D14FD9 /* ExtensibleEnums.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD01747A1D135D8C97DBC34B3BADEEA8 /* ExtensibleEnums.swift */; }; - 77A85C92FFB254C86D986447BE4A3853 /* glsl_CombinerProgramBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD521670C6D7CBA41733C054C293541C /* glsl_CombinerProgramBuilder.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7818851D20DA2D669A8C12B16316D10E /* NstBoardBmcVt5201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 62945616EBEA8F7DB40A59C37964637B /* NstBoardBmcVt5201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7836A137F2D211F1D9314D9FE4EA0D66 /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 40C24A38D0B2D424939FBE8FE393A00C /* FrameBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 784A5769DDE6CB551D21EE19FDBE91B9 /* GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F843099C865EF969075D9084E1EE49 /* GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78560D7AC30CADA128CED2F38DB0C367 /* NstPatcherIps.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0F88A26F6B6CF0CB98D87C013543A190 /* NstPatcherIps.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7868B35569F0B0197EF1FFD2D25B1BA6 /* m64282fp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8326EAB88C81EB3273CE84BFBE30C290 /* m64282fp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7876D3F7521DB44C406A743CF81BEB47 /* NativeActivity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48A852C211E587038DA4AA46F7C9B164 /* NativeActivity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 788B83D78AB9E0EFF886B1FEB9295554 /* obc1.h in Headers */ = {isa = PBXBuildFile; fileRef = D6CAAD3D41D505A55D4926BAF41AF958 /* obc1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 788E19683756F921D267319C0BC8D9D4 /* EEprom.h in Headers */ = {isa = PBXBuildFile; fileRef = 63BABDED98CDB1DC811FC1832968CE5D /* EEprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78E24F2CE9FB7845AE6DEEC34E9D9366 /* opengl_GLInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E464A7D70176B62BFF57B34C448A9023 /* opengl_GLInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79168BEC654655F20E8D99687F8B42CD /* NstBoardBtlSmb2a.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 32C312AFD3D5355E34E5264A0D924E24 /* NstBoardBtlSmb2a.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 791ECC26E09854BE01A5356B8FB4FBFF /* skipsched.h in Headers */ = {isa = PBXBuildFile; fileRef = F590A4FDC0A63C530D1734FD50B7078E /* skipsched.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79213C390062FF156D05A120E12D7F28 /* MemoryStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = EB9627220FFF83CC1F4AAE5DCC667ADD /* MemoryStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79CB4C69D5B62C1F128632103768629D /* Listener.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 416AB7C47B6BD20BDB570AFCF32DA07F /* Listener.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 79D1DBF8A2B975AA6502E3E0E19627B4 /* NstBoardBmc110in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C4DEF759B31F98EC3A0C7C1538495611 /* NstBoardBmc110in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A05BDF6F0EF1F8EF35BD85D32DA9A84 /* RSTLaunchViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BFEAD74D75F957AC8D29DA74DAD189C /* RSTLaunchViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A2438E3C2548E6C6B9046875E06F5DF /* TxCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 11C5EB86C8B5D063931113BD696A449D /* TxCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7A4B501942CA119ADB0CC7E54FC735B5 /* RSTCellContentCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 45E7411B04ED1D693EAE8865EB4AB4A8 /* RSTCellContentCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A4F11E768C0C86EA95B2AB424A4377B /* OGLRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 2470D300240FF936891A6DA2EBE0164B /* OGLRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A7260BF99BC683C9C43C76B8D20DE57 /* NstBoardBmc21in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FA1B820118906800A592F7AEC27C0DFF /* NstBoardBmc21in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AA70F0483FB790115C42CE9CF815B99 /* game_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 66403032D229EFE419B1F624D8E3A6AE /* game_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AABDCDC1FB95E91C935F89E00FA89DC /* arm_jit.h in Headers */ = {isa = PBXBuildFile; fileRef = 0798506C053FB81EBDF4F4EF5E7C226A /* arm_jit.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AB3BF79F79BAFF5769C3A3CCC19AD47 /* Shape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAE71BC8FD40F93BEB90C2ED42088A99 /* Shape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AC069D617A084BEDA70B1D9B89F6470 /* NstVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95CD1D48C38E182BA0C36253C2422B8A /* NstVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AEC6E1A5BB3B489183A23AD3AB8D7AE /* FilterChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3919DEC2EE937226ECE6A9846B2DA0D4 /* FilterChain.swift */; }; - 7AED12329BC4A94E43D7FA7FFFA4A8A2 /* Ext_TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = FC1899B3A2064A321C87961972F926A9 /* Ext_TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AFA40D6E7662FCB31023984FC8A5540 /* NstBoardUnlKingOfFighters96.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0DEC322B85B93540CD7F53F2185164D6 /* NstBoardUnlKingOfFighters96.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B291FDF52E0F7FB64A9FA0C4A88E848 /* TextureFilters_lq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = F832E6227B7F9677B7AF38BFB58A5A09 /* TextureFilters_lq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B594E7B42D038F5C9EAB636CDDCAEBE /* NstBoardRcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5F38047E1651287DC3AA705DF9C06C72 /* NstBoardRcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B7E2677824409DA731B3FAD16DF422A /* TxHiResCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 98429553652599A6220233E3F8D224FD /* TxHiResCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7BD0C0DD3F3DB5369846E07F7FA5B186 /* NstBoardBandaiLz93d50ex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C44BBA15DF8CEE92A417577E4C1D5D9 /* NstBoardBandaiLz93d50ex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C127E067D6F3B7F1C96AB3813393B8B /* assem_arm.h in Headers */ = {isa = PBXBuildFile; fileRef = BF609625DC6D6DCA4E18292A7309D441 /* assem_arm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 76A404D815A496FF472714B9493FB2E8 /* NstApiFds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 21AFB40E9F20886BAC51721D47518A42 /* NstApiFds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 76AA012877710AB1F164AE7B49DD098D /* NstInpPowerPad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C24FF4FB306EA08CFD23D4A8DD8B6C7F /* NstInpPowerPad.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 76D132D024B6A52E4DFDD31827EBE0FC /* VideoRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 961ACD2164700D5FD67F6014EB6E2CCF /* VideoRendering.swift */; }; + 76E9947CFB8C27CE5BC16E70BD417614 /* PlatformConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B426B703A1D05906A76F9144E7FA0433 /* PlatformConfig.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 77338E935B4CB0FA16154F8F845B9F74 /* NstPpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2769336E22CE289D3CE9EC20CBF91610 /* NstPpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7736A8964115F20A8A6F09230ED8814D /* Time.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4293F313CBA439948FBF2F6EC87D6390 /* Time.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 77708024733DF3B64F127AB9D0E5C5EA /* RSTPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F23CEC53278E0CEB1614056B5D4F8C /* RSTPlaceholderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7793407AABB80F7FF59D7C5516D14FD9 /* ExtensibleEnums.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13D3D42973146D80916E32B3BBE3D0A1 /* ExtensibleEnums.swift */; }; + 77A85C92FFB254C86D986447BE4A3853 /* glsl_CombinerProgramBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35B53A6EBBDB14342ACBC6EF87C2FAFD /* glsl_CombinerProgramBuilder.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7818851D20DA2D669A8C12B16316D10E /* NstBoardBmcVt5201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C74DB15319EBC3307C2EB1ECF5912CD9 /* NstBoardBmcVt5201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7836A137F2D211F1D9314D9FE4EA0D66 /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A33B3B4BD1E78794258F5AD6D999C880 /* FrameBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 784A5769DDE6CB551D21EE19FDBE91B9 /* GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E4294CBF5BD945DE53BB04420F881C9 /* GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 78560D7AC30CADA128CED2F38DB0C367 /* NstPatcherIps.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6E3F8E9A443CB8805EFE8175563E893E /* NstPatcherIps.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7868B35569F0B0197EF1FFD2D25B1BA6 /* m64282fp.h in Headers */ = {isa = PBXBuildFile; fileRef = 299389570253111A7FC0B2AD359D7A1A /* m64282fp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7876D3F7521DB44C406A743CF81BEB47 /* NativeActivity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E8ADEC5003627F607F9CB7482F3C79DD /* NativeActivity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 788B83D78AB9E0EFF886B1FEB9295554 /* obc1.h in Headers */ = {isa = PBXBuildFile; fileRef = 949E3958BCE1694E83B41187962E38E9 /* obc1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 788E19683756F921D267319C0BC8D9D4 /* EEprom.h in Headers */ = {isa = PBXBuildFile; fileRef = C769B8DF9FD73419F7A8CE7F4C7192F4 /* EEprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 78E24F2CE9FB7845AE6DEEC34E9D9366 /* opengl_GLInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 86EF6CED706D9CF50812AACFBA3D3205 /* opengl_GLInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79168BEC654655F20E8D99687F8B42CD /* NstBoardBtlSmb2a.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD3757C91C65FB4E4EBAB668470109FE /* NstBoardBtlSmb2a.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 791ECC26E09854BE01A5356B8FB4FBFF /* skipsched.h in Headers */ = {isa = PBXBuildFile; fileRef = 592333B6A8CE7E474E19C151AE976FBE /* skipsched.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79213C390062FF156D05A120E12D7F28 /* MemoryStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 0663F28B78D5B488BBD1158305953BF2 /* MemoryStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79CB4C69D5B62C1F128632103768629D /* Listener.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48316C3FF62C94776726A1CAD59F2C64 /* Listener.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 79D1DBF8A2B975AA6502E3E0E19627B4 /* NstBoardBmc110in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8693CF6D0BA1054AECDB9EBCB129A363 /* NstBoardBmc110in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A05BDF6F0EF1F8EF35BD85D32DA9A84 /* RSTLaunchViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 816CBA26E3940C8402B8EFE63E169294 /* RSTLaunchViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A2438E3C2548E6C6B9046875E06F5DF /* TxCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E8024B293C9555F3BBBE264D95E1A8D /* TxCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A4B501942CA119ADB0CC7E54FC735B5 /* RSTCellContentCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D9ACA67CBB81C221D9E4E05F8646744 /* RSTCellContentCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A4F11E768C0C86EA95B2AB424A4377B /* OGLRender.h in Headers */ = {isa = PBXBuildFile; fileRef = DA9C9A6D30671F1FB5F50BFBC1D1DF0B /* OGLRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A7260BF99BC683C9C43C76B8D20DE57 /* NstBoardBmc21in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F11EA13357D6F351A1A191DA33451B01 /* NstBoardBmc21in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AA70F0483FB790115C42CE9CF815B99 /* game_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 5536CF5E11B5E15ED66757BB394C8694 /* game_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AABDCDC1FB95E91C935F89E00FA89DC /* arm_jit.h in Headers */ = {isa = PBXBuildFile; fileRef = F8211C9AAFD5EAFF6AE32CAF702CC376 /* arm_jit.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AB3BF79F79BAFF5769C3A3CCC19AD47 /* Shape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D13626EE69FD1C7B6C4F9D290D2A71BD /* Shape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AC069D617A084BEDA70B1D9B89F6470 /* NstVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CAAEE81FB5DFAF21D63A74329E6F4E9C /* NstVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AEC6E1A5BB3B489183A23AD3AB8D7AE /* FilterChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A2EA6E13FD790527F86EB2CDB1E402 /* FilterChain.swift */; }; + 7AED12329BC4A94E43D7FA7FFFA4A8A2 /* Ext_TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E27968A4F0A9279BF48A15BCFF4B8 /* Ext_TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AFA40D6E7662FCB31023984FC8A5540 /* NstBoardUnlKingOfFighters96.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F1CFEE2E88E05706A2CB9A382C9447D7 /* NstBoardUnlKingOfFighters96.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B291FDF52E0F7FB64A9FA0C4A88E848 /* TextureFilters_lq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C1C0E46794ACCFA1D49F4F9F7418C1 /* TextureFilters_lq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B594E7B42D038F5C9EAB636CDDCAEBE /* NstBoardRcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D4557C24D5CC84F9F3B2999C33F9DE91 /* NstBoardRcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B7E2677824409DA731B3FAD16DF422A /* TxHiResCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FCA829A51AC7996EB15AC022B591C7AE /* TxHiResCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7B85E337A6D06E8012EC891088CEB9FA /* ARM_InstrTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E058DDD738AC1B8E1A7C13BC1DF630A /* ARM_InstrTable.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7BD0C0DD3F3DB5369846E07F7FA5B186 /* NstBoardBandaiLz93d50ex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 743D60A80C02E747A93C054B7CE7F1E9 /* NstBoardBandaiLz93d50ex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C127E067D6F3B7F1C96AB3813393B8B /* assem_arm.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D9DAB0BA1335AAA8FDA3EB6A06284D7 /* assem_arm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7C223CCCA8FDA2AFC24233CF2C80D507 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 61922816ADB3E7C4600DF77D3B382727 /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C3B24BE5F539E4C169AD6B54E548B18 /* ftadvanc.h in Headers */ = {isa = PBXBuildFile; fileRef = EBCC2D85473B037A5DD49F1E35B5D218 /* ftadvanc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C44081096D7BD7EC16DEF322D7DC5E4 /* DropboxService.swift in Sources */ = {isa = PBXBuildFile; fileRef = E644A28566DC640498573CF1E665C045 /* DropboxService.swift */; }; - 7C6C12C8C35F1D6A2B00AF837C71404C /* readpng.h in Headers */ = {isa = PBXBuildFile; fileRef = 04E947092A258CFB57EB84AFAB619A18 /* readpng.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C81CF6208DCFD04CA626E3E81DBD14F /* UISpringTimingParameters+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E669C711147F6173C46040444135A2D /* UISpringTimingParameters+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C85EFFC4862D5DD572D67FB0D67A8DE /* NstTracker.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DCBEFF02673A4D0CD9185C6100D7E963 /* NstTracker.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C8F536BB5772737F608061B0FE4C7B3 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = A5549F772937B547424E53A87C4959B4 /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7CC39EEEBA01397C44CD70FF1D855E9B /* svpscmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 6871DA21F2195F33706882F64D12E1D8 /* svpscmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7CC91E5E71DC76D48A82BC591ABA6C87 /* NstBoardBmc31in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73006DC6C1509BB82F83AC8D88F0481E /* NstBoardBmc31in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D13C492B14BA0EB2DC0783DB4150ED4 /* L3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 29ABF3EFA4F58F7434261260A0FCC2A5 /* L3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D3F6F6AF8ED6A7D7EC99CD1C094A779 /* TxQuantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E413CD260AC5D4938501D07A19728DF /* TxQuantize.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D42DA555697670FC84BBAB5492696FA /* pcap.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E0F32F5D4B36915598F0AD7BB83F6A3 /* pcap.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D6640DB587F29263DFD54F344B9AE8B /* NstCartridgeInes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16EC811CB549CE7395A41A2FD9C4BE80 /* NstCartridgeInes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C3B24BE5F539E4C169AD6B54E548B18 /* ftadvanc.h in Headers */ = {isa = PBXBuildFile; fileRef = 97A529B5224544C993C7547C6A313CCC /* ftadvanc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C44081096D7BD7EC16DEF322D7DC5E4 /* DropboxService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D254660B89B2DF06F349F2BC87B3FEFA /* DropboxService.swift */; }; + 7C6C12C8C35F1D6A2B00AF837C71404C /* readpng.h in Headers */ = {isa = PBXBuildFile; fileRef = BD84F06A10C7F36232CEC327446C64C9 /* readpng.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C81CF6208DCFD04CA626E3E81DBD14F /* UISpringTimingParameters+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BEC3A5E5A6DF3FF717E11AF5286D93 /* UISpringTimingParameters+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C85EFFC4862D5DD572D67FB0D67A8DE /* NstTracker.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 510A47958AB211D60455C0DBFCFF190A /* NstTracker.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C8F536BB5772737F608061B0FE4C7B3 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = BD7F218037A6C72ADDD5F262DAFE2D1C /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CC39EEEBA01397C44CD70FF1D855E9B /* svpscmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 86BF9E53BBD7D649033BB1F156870DE2 /* svpscmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CC91E5E71DC76D48A82BC591ABA6C87 /* NstBoardBmc31in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 813D0026660BC9FA9BE9781E84D1F4A9 /* NstBoardBmc31in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D13C492B14BA0EB2DC0783DB4150ED4 /* L3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C35BC9F77F23B687515FC8958549CA1 /* L3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D3F6F6AF8ED6A7D7EC99CD1C094A779 /* TxQuantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 164BA6410D467508F284ED6B400D342C /* TxQuantize.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D42DA555697670FC84BBAB5492696FA /* pcap.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D27F1218FFC3EC9D27CAC71BCFD4925 /* pcap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D6640DB587F29263DFD54F344B9AE8B /* NstCartridgeInes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 00DC15146753301043922CC27C6DB1EC /* NstCartridgeInes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7D9D60386306B439551BB071CA066817 /* DropboxTeamClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8364432B8E72D0344D921A2164F73693 /* DropboxTeamClient.swift */; }; - 7D9FFE5C38B92C9509830FA62BDCF8E8 /* cp0.h in Headers */ = {isa = PBXBuildFile; fileRef = D4AAED9CBF41BDAFF1EE1D4E400FDF87 /* cp0.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7DB35723D0CC13AE137CAE668924723F /* BitmapProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7AB9F8A6F41A6BF238E1816BF6ADAE9 /* BitmapProcessor.swift */; }; - 7DE7708815D0EA629D5716B9F1A6809E /* Thread.inl in Headers */ = {isa = PBXBuildFile; fileRef = AF9B8513D3E4438D5136203FCF9D99E5 /* Thread.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D9FFE5C38B92C9509830FA62BDCF8E8 /* cp0.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C8F13E35C588F34CD7F1A313360A79 /* cp0.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7DB35723D0CC13AE137CAE668924723F /* BitmapProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3949595D020E5A3DAB73E06EEB13CF19 /* BitmapProcessor.swift */; }; + 7DE7708815D0EA629D5716B9F1A6809E /* Thread.inl in Headers */ = {isa = PBXBuildFile; fileRef = 6F88E235E4438225B920C3FD4F4FA99E /* Thread.inl */; settings = {ATTRIBUTES = (Project, ); }; }; 7DFAE2171F7DF71CBFDAAB36126503A5 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9E8347629FB94F0A3A23F8ACE7DF87 /* Team.swift */; }; - 7E22B821DD9D7D2D539E9F0C66C15013 /* ftlzw.h in Headers */ = {isa = PBXBuildFile; fileRef = 89308C156B65EB233E0F8E7B01291775 /* ftlzw.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E2636950C8A8517A78941A3FC7A214B /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = B2535F7B0EEFF2878AFFC407BE7821EC /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E27C0AA8C72EE528649523D6A240305 /* NstRam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DFFBD37FBE84B1A972546ABBEE2067BF /* NstRam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E5EB7A39652E32E3CA0F3D93856E2EC /* ConflictRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73B5114410208E3603B7C257E4448663 /* ConflictRecordsOperation.swift */; }; - 7F01651585FCAE415EBDFC808DDFB5F7 /* TextureFilters_2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32CD48452BE99C82FE043939384E2531 /* TextureFilters_2xsai.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7F184462B0587A9FA3F4976A6E306DBD /* Parameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 1968B2F2911EF5F0444088854F57F746 /* Parameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F3CDB6BD153FE92FC5A758E12830D3B /* NstIoMap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E2A4BC7BE1DB4773E50DD8B7E967C51D /* NstIoMap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E22B821DD9D7D2D539E9F0C66C15013 /* ftlzw.h in Headers */ = {isa = PBXBuildFile; fileRef = 157434C4FA16895B0C6EBC0D02FAECF0 /* ftlzw.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E2636950C8A8517A78941A3FC7A214B /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A5439881B47C2E816AF6F014B4832 /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E27C0AA8C72EE528649523D6A240305 /* NstRam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B584A470AF957ABEDF9EC1339C950355 /* NstRam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E5EB7A39652E32E3CA0F3D93856E2EC /* ConflictRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4DB7F5247E41A8DF960FAFF4F52DF47 /* ConflictRecordsOperation.swift */; }; + 7F01651585FCAE415EBDFC808DDFB5F7 /* TextureFilters_2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4848223D118C90C9C8D28CB320ECD889 /* TextureFilters_2xsai.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7F184462B0587A9FA3F4976A6E306DBD /* Parameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 772DEEE3A8A1AA94502EF6098107740C /* Parameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F3CDB6BD153FE92FC5A758E12830D3B /* NstIoMap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5033ACF3304F791248B9A86346AD675C /* NstIoMap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7F6E6984730D00B2BAB26E09C2B6F51E /* GTLRFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ABB33F6C316C0D9CF3E24882D926C51 /* GTLRFramework.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F6EF2CA1770F1DE0026ECAA0E521101 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D467F2C39B4E1301A6A2824147175DE /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F8FA5EECEFA49B54B06466750976AF8 /* NstBoardBmcGolden190in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9CBFEF3D09E24FAC21E3A14CCC923AF /* NstBoardBmcGolden190in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7FAE093FA0A7715EE8D0C26E07586588 /* NstTrackerRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 09BF210597386722D5D7051B20C7BE0A /* NstTrackerRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7FBC6E3BDC4800C426640309DF2CBEE2 /* UICollectionView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 790495A40D459F66C420A40CFAFB042D /* UICollectionView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7FBEC1C86E145CE63217FB4A282FCF85 /* svxf86nm.h in Headers */ = {isa = PBXBuildFile; fileRef = 25FCB0ABC4939495F4D8023884606D3C /* svxf86nm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F6EF2CA1770F1DE0026ECAA0E521101 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 16606104B7D23C541D75E1D9CACB2862 /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F8FA5EECEFA49B54B06466750976AF8 /* NstBoardBmcGolden190in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A39CE9386E2F879AC7F871D7209746FA /* NstBoardBmcGolden190in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FAE093FA0A7715EE8D0C26E07586588 /* NstTrackerRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 71C2F464A8210B73F02BF45EDE6E1EDC /* NstTrackerRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FBC6E3BDC4800C426640309DF2CBEE2 /* UICollectionView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 966650603C914F8788C0B0BF65D7516D /* UICollectionView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7FBEC1C86E145CE63217FB4A282FCF85 /* svxf86nm.h in Headers */ = {isa = PBXBuildFile; fileRef = 593847BA38E9D8A068903E6A731921D5 /* svxf86nm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7FD577E22B1E9D0B660E3F5F0945EC97 /* GoogleAPIClientForREST-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C943FB0B36A40A6ED1622A947B642B5 /* GoogleAPIClientForREST-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8041BC3728BD95C119B6B152758FF890 /* NstApi.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCE1167568421B515DDBA963CC2FD777 /* NstApi.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 803D47C1EAB8100785D866D0E5579DD1 /* ARMInterpreter_Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CE1063F98D054EF4717F2C3004607F5 /* ARMInterpreter_Branch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8041BC3728BD95C119B6B152758FF890 /* NstApi.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EC1B871004801A1E40D5F78C6B08A719 /* NstApi.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8043A7E0B334D03CF18AF57B63B8B407 /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848F3AD32B7A8F7F08945CA3643BE446 /* CoreFunctions.swift */; }; - 80490FACDFDD5058FE342448A90F6124 /* F3DBETA.h in Headers */ = {isa = PBXBuildFile; fileRef = A471F1FD870B327EA215A186F1B4B401 /* F3DBETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80531DF27FAEB5E6120BDDD6681434C2 /* NstBoardTengen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B770765D40D57151EF4C7C13D2101E87 /* NstBoardTengen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 80569522185880531BB8F1FD08C52940 /* rumble_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CAA385DC1EC815011FECBC1CD5ADF32 /* rumble_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 805A1E28389AF5FB29FC09BE6C8B1F0A /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD9C5507CE8EEB9255EC26821F186A30 /* Account.swift */; }; - 80857C1D971EB5C3A2DEB08EBB6A26A9 /* flashram.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BFECFA92DE1F1B2ECD7449CA0DE9389 /* flashram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 809CC541557F42747F35E56C4A8BA2E2 /* NstBoardNxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 27DF122CB5EB6951E6B147BC0F24D64E /* NstBoardNxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 80C3AE20C10237C9D0BEE1E040703645 /* FIFO.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CCF50735B54E7E32704485AE919ABB5 /* FIFO.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80CD4343EDC4946D43FB62BCE1E7D8FC /* tima.h in Headers */ = {isa = PBXBuildFile; fileRef = 60925EDCF9318CAB1FA3938859111AE0 /* tima.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 80D63236D264DBFE454A62486C2EF1DF /* Glsl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3BBF510C2B0603EAC41E2079FEFC6A95 /* Glsl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 80E2A90DF2C7F5D8D36F4A37F0F6CE03 /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = 31C2319F7A8D58BEC41843BD13637729 /* pngread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 813791FFAE99F2EA31D525DCF0B0DACC /* Performance.h in Headers */ = {isa = PBXBuildFile; fileRef = AF84C91D866F235841A37FBDD3F32FDC /* Performance.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 815861D1FCD25665B078C7ED9E6D2A6A /* NstBoardBenshengBs5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 355A8C024A46DB2BE1763B0F3971FFEB /* NstBoardBenshengBs5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8171418ED78BE2744E4E374105338AEF /* NstBoardTxc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CB811B30D58FF4024455D5E5CC17947B /* NstBoardTxc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 81C902564DEED03987D81EB5EC4E2C21 /* F3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 292C26E214699339AAE80215F482F9BF /* F3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8229184EC4951470007A0AF03871F122 /* pngmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 06B3B77EA189E0778856F0A800AD3B73 /* pngmem.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 822C8AF6FE4E429A7E3DDE28BF009AAB /* NstBoardTaitoX1005.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B71756B40C4BB780F974D844D1D446CB /* NstBoardTaitoX1005.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8245550C4876E05DB7BB650B1FB1A8B0 /* TextureFilters_xbrz.h in Headers */ = {isa = PBXBuildFile; fileRef = 452F83D3A133C01B2A14268F26D6EB29 /* TextureFilters_xbrz.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82665248F8E77B7253C5F018E0B1DC5F /* NstStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 21B08C108927AB621B0EB7F908CDC81C /* NstStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 826BE1A486465868CED022ED981B0BEC /* UIAlertAction+Actions.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DDDB2DB5582729DFD3B142A0841B180 /* UIAlertAction+Actions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82BA8911072FAC8A89CE76596ECECAED /* pif.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C032B7F3EF8BBC968A5EB242CD96FDF /* pif.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82BD5D188A75988826E7379FEB58DCDE /* NstBoardIremLrog017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0760F68BF4270075015FF0EF76C307A4 /* NstBoardIremLrog017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 80490FACDFDD5058FE342448A90F6124 /* F3DBETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 398B0C10962B06603D1218A0BFEFDE41 /* F3DBETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80531DF27FAEB5E6120BDDD6681434C2 /* NstBoardTengen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 53B591BF7B60187B760A42DB71431BB9 /* NstBoardTengen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 80569522185880531BB8F1FD08C52940 /* rumble_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 55532BC2B4B4E3B9BF96424544F7A510 /* rumble_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 805A1E28389AF5FB29FC09BE6C8B1F0A /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099938FEDA9E30DB8F316FD35D3A7E39 /* Account.swift */; }; + 80857C1D971EB5C3A2DEB08EBB6A26A9 /* flashram.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE08C498FFB93AC32DDE6D957B5E24F /* flashram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 809CC541557F42747F35E56C4A8BA2E2 /* NstBoardNxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E42E5A99DAE876C1FA977F57560BA47B /* NstBoardNxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 80C3AE20C10237C9D0BEE1E040703645 /* FIFO.h in Headers */ = {isa = PBXBuildFile; fileRef = EBBD46833EA1A4C5282B0F087FA83437 /* FIFO.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80CD4343EDC4946D43FB62BCE1E7D8FC /* tima.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D5641AF5A10D2A2EBB4AADA120BAC12 /* tima.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80D63236D264DBFE454A62486C2EF1DF /* Glsl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1004AE0C4739724244ADA46A913108CB /* Glsl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 80E2A90DF2C7F5D8D36F4A37F0F6CE03 /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FA37688E22E33D15DFB26A4571F6EF /* pngread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 813791FFAE99F2EA31D525DCF0B0DACC /* Performance.h in Headers */ = {isa = PBXBuildFile; fileRef = D80E4A5FDBC780E4358E55866C35218A /* Performance.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 815861D1FCD25665B078C7ED9E6D2A6A /* NstBoardBenshengBs5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B129D85783E2A83AB72F44B1BF92B9D9 /* NstBoardBenshengBs5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8171418ED78BE2744E4E374105338AEF /* NstBoardTxc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 64B42722A5333410D786C90D454E41C8 /* NstBoardTxc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 81C902564DEED03987D81EB5EC4E2C21 /* F3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE4827A1488FD5FE6F356A0EE7D96A3 /* F3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8229184EC4951470007A0AF03871F122 /* pngmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 0056ECA9D4904EC555DDDB7A44A29B9D /* pngmem.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 822C8AF6FE4E429A7E3DDE28BF009AAB /* NstBoardTaitoX1005.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94AE1145010E024A90A0B90A56727300 /* NstBoardTaitoX1005.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8245550C4876E05DB7BB650B1FB1A8B0 /* TextureFilters_xbrz.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E950B4BF47AC526A4464F3994CA0BB /* TextureFilters_xbrz.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 825DF2D1ADB787B6BBAACFA7182B3325 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D7821E2CE79FC4E3BED960866CD961 /* types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82665248F8E77B7253C5F018E0B1DC5F /* NstStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94393ABA91B101430546FBAF247742E1 /* NstStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 826BE1A486465868CED022ED981B0BEC /* UIAlertAction+Actions.h in Headers */ = {isa = PBXBuildFile; fileRef = 47D78517301F4912E4BBA2A056C253E1 /* UIAlertAction+Actions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82BA8911072FAC8A89CE76596ECECAED /* pif.h in Headers */ = {isa = PBXBuildFile; fileRef = AD18B91FAC4B2CA8C394D0D1EF24808E /* pif.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82BD5D188A75988826E7379FEB58DCDE /* NstBoardIremLrog017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 00B03766966DBCB90906DC6BD97E2035 /* NstBoardIremLrog017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 82E1A8D140FD2E1A30BC5F8F4B19F8BF /* SwiftyDropbox-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1549464F3E4C6E80951115BA80C87C /* SwiftyDropbox-dummy.m */; }; - 8306FBE58766AD3DB7FC24A48C822C5E /* ftmodapi.h in Headers */ = {isa = PBXBuildFile; fileRef = A63610BE12A6654FC18CCA215237F733 /* ftmodapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 830F5B7567E178151EC0E882FA0ECB5A /* hermite_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = E303B73D343B4496C9C1319F3E187317 /* hermite_resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8306FBE58766AD3DB7FC24A48C822C5E /* ftmodapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A23D7BFCABFEC33689D884FE6CAB2A /* ftmodapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 830F5B7567E178151EC0E882FA0ECB5A /* hermite_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA71E73B1A809C3FFD98BD1BDA46314D /* hermite_resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8310901E730FB822677EDAAF25893BE6 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D49431EEA4AD3FC2E04F7F24D666EA6 /* DispatchQueue+Alamofire.swift */; }; - 83241BC0C8359ABCBDE971CD11FFE9DD /* mupen64plus.ini in Resources */ = {isa = PBXBuildFile; fileRef = DFD30F6DE5762FE7D5CEA0AFE95ACACB /* mupen64plus.ini */; }; - 83569BB6A8281FBF8632670B28C33C98 /* mbc3_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = 89AD69668AA33B36799179839B4578DB /* mbc3_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8386BA8A923E2E72C8229BF7CF7C20FA /* cheats.h in Headers */ = {isa = PBXBuildFile; fileRef = 17878ECFAC417AC4ABE2928837CDE2B3 /* cheats.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8396AC5DE2BB1D261F147086BBBEE743 /* GBI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 482F462D88C4B5F90023E215B10AD635 /* GBI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 83241BC0C8359ABCBDE971CD11FFE9DD /* mupen64plus.ini in Resources */ = {isa = PBXBuildFile; fileRef = CAC68C48D5AACE9BF20D8B880DA33BB2 /* mupen64plus.ini */; }; + 83569BB6A8281FBF8632670B28C33C98 /* mbc3_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B4031DF8DC8C7AA073B8FAD5893715CA /* mbc3_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8386BA8A923E2E72C8229BF7CF7C20FA /* cheats.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C0F1623BBDB08363E8394AFBD38B87E /* cheats.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8396AC5DE2BB1D261F147086BBBEE743 /* GBI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCF3F649DFE2BBABB7DD4DB64169C38C /* GBI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 83A09D122123E6C2815459DADEF9729F /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = 883B872956FB7C28FDBB574888357A62 /* GTMNSString+URLArguments.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 840C6DD7629F231D0F45DD20C031A6FC /* glcorearb.h in Headers */ = {isa = PBXBuildFile; fileRef = 9678A9FCA9931D354FE7CC755CB6541F /* glcorearb.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 840DC676DBE4407A3E68353CEF3B3BCB /* NstBoardWaixingZs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 303639D060EE4ABC8F9B28FD68B7F98C /* NstBoardWaixingZs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 842560FEB95F73A3E10F716061E361A6 /* ftsynth.h in Headers */ = {isa = PBXBuildFile; fileRef = DE2D5223B53CBDDEEFCC21BFCF9AB205 /* ftsynth.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8433AA2398A8DBAAF7B367AEF3C636C0 /* UserDefaults+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65B9EE37937D4417CCF0576098C38148 /* UserDefaults+Harmony.swift */; }; - 8434E5B141D1791B363651A182CA1B5E /* RSTCellContentDataSource_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 10F4B87C9C8B821D0D8D4EF510CA04D7 /* RSTCellContentDataSource_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 845473EEBCE88EFF348390D4C70EDA4E /* NstBoardBandaiKaraokeStudio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 55D03E3855F24EC46248235CA4AB84AE /* NstBoardBandaiKaraokeStudio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 840C6DD7629F231D0F45DD20C031A6FC /* glcorearb.h in Headers */ = {isa = PBXBuildFile; fileRef = 068F16B4A783E37E5CD5C1D3B713CEF0 /* glcorearb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 840DC676DBE4407A3E68353CEF3B3BCB /* NstBoardWaixingZs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 13A6DB004300A60DA3D2A6DFE73CCDAC /* NstBoardWaixingZs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 842560FEB95F73A3E10F716061E361A6 /* ftsynth.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE800F01854521394EAADE8A06F1AA1 /* ftsynth.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8433AA2398A8DBAAF7B367AEF3C636C0 /* UserDefaults+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = D030FA73AD1DA503048D364090F865A1 /* UserDefaults+Harmony.swift */; }; + 8434E5B141D1791B363651A182CA1B5E /* RSTCellContentDataSource_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0CBABFAE419A9E2AB84F2A8EE7B71A /* RSTCellContentDataSource_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 845473EEBCE88EFF348390D4C70EDA4E /* NstBoardBandaiKaraokeStudio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 97F73835395FF3DB0096CD155B20FB9F /* NstBoardBandaiKaraokeStudio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8457755D991B9AC856F2AD154BCF4A34 /* TeamCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 244DCF4A8FC46E79A6101C49202C0DBD /* TeamCommon.swift */; }; - 846C1F6DB0F553F276ECB598E7A84AF8 /* RSTSearchController.h in Headers */ = {isa = PBXBuildFile; fileRef = 03655DDFBA2609D8DEA72FDDF988AD58 /* RSTSearchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8477A8F693A9336DD44C78F069BAC322 /* RSTNibView.m in Sources */ = {isa = PBXBuildFile; fileRef = B02A3AF52CA1E696B30BDE9A844D4D97 /* RSTNibView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8486CE333AF98530F574C3B55DC565D8 /* TouchInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D2FEA2156756F729E3BD6869EBAA42E /* TouchInputView.swift */; }; - 85168B84D1BC8AC3215522F298FB08B9 /* opengl_GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 50FBE486AFEBB34A067A593F41720663 /* opengl_GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 846C1F6DB0F553F276ECB598E7A84AF8 /* RSTSearchController.h in Headers */ = {isa = PBXBuildFile; fileRef = EEF4C54780B7CB8C5DD1FE7BFC88A8D5 /* RSTSearchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8477A8F693A9336DD44C78F069BAC322 /* RSTNibView.m in Sources */ = {isa = PBXBuildFile; fileRef = 65DF8E0913BA8941185496F1B74F7D4E /* RSTNibView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8486CE333AF98530F574C3B55DC565D8 /* TouchInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D5205D694ADD50234921E3DEB5D957D /* TouchInputView.swift */; }; + 85168B84D1BC8AC3215522F298FB08B9 /* opengl_GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C3DAEC5A0976AE04AE5AC97395DF48 /* opengl_GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 85290514199956D820FB90C92DBD0002 /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B7A2F207266496310F9415852A1EBD7 /* Collation.swift */; }; - 853712F7ADE0542EB49AB2971C13F4EF /* RSTArrayDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 50CB5AEC945198AAFCB4B3596F9CC624 /* RSTArrayDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 853B3CB7F2FCF1BEC65857D83C521D64 /* m64p_vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CCF7001F83E60B5C530A3D02B918FE9 /* m64p_vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 857B3B04B9AB4B94CC5BB714EACC9290 /* RSTCellContentChangeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF77E5F8A0CCA93C17ABAB60C658334 /* RSTCellContentChangeOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 85CCCE40DF1323C9A271D20D29AD279F /* ClipPolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B549F21788F17AE386F9C9F83BACC06 /* ClipPolygon.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 85D1D258236F9752FEFC767F65EEB5EC /* statemanager.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E9E01B822B1A73A97B8C2E46EDEF08A /* statemanager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 860AC74038BF3ED5C0549CBE407D8710 /* snes9x.h in Headers */ = {isa = PBXBuildFile; fileRef = AF827FC48147DE18B9FB7A80EA33C3FD /* snes9x.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 86248453B902ACEF5B80A6573B49E002 /* spc7110emu.h in Headers */ = {isa = PBXBuildFile; fileRef = 2773A5A159F5DFA0A928E49F68CC6E2D /* spc7110emu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 863BE8D5FDEE2E01FB3BEEE491392492 /* NstVideoFilterNtsc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B7229404AFA84F6E9DB4337E6CCCFD47 /* NstVideoFilterNtsc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 86518CFE08809DFF384BF8C39CD7D1F1 /* Main.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83D5EF55975A2BFBB9FF14D9389BFBB6 /* Main.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 867358F09BCD4400D1CA1EE0BA100FB8 /* NstBoardKayPandaPrince.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0BE607429888D1CA21C1751ECA041494 /* NstBoardKayPandaPrince.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8680F8EF0BBCDBEEE5A53366BB0E471A /* svmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 22E35E02382F4B1E5D0995608B8BCCB7 /* svmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 853712F7ADE0542EB49AB2971C13F4EF /* RSTArrayDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BABD1CEB4B6CA6AEBC4C4B2ED3B1C53E /* RSTArrayDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 853B3CB7F2FCF1BEC65857D83C521D64 /* m64p_vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = E813BC0822BCCFFC9C89EBE5DAAD7F24 /* m64p_vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 857B3B04B9AB4B94CC5BB714EACC9290 /* RSTCellContentChangeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F188C4FE40251B362A44718243733E /* RSTCellContentChangeOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 85CCCE40DF1323C9A271D20D29AD279F /* ClipPolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 414687B042C1DA8223948CAE5D99FFA8 /* ClipPolygon.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 85D1D258236F9752FEFC767F65EEB5EC /* statemanager.h in Headers */ = {isa = PBXBuildFile; fileRef = C32EC5252A036254058CB744DABBE87E /* statemanager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 860AC74038BF3ED5C0549CBE407D8710 /* snes9x.h in Headers */ = {isa = PBXBuildFile; fileRef = D10EF252E11807FB1EF1F7E9A2AA502E /* snes9x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86248453B902ACEF5B80A6573B49E002 /* spc7110emu.h in Headers */ = {isa = PBXBuildFile; fileRef = DFBFAD2A751915C945CC42E5F0F6D525 /* spc7110emu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 863BE8D5FDEE2E01FB3BEEE491392492 /* NstVideoFilterNtsc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04129B9A3BF487A2771D1CC76731FB37 /* NstVideoFilterNtsc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8645182969B64EFC83F6741F12385172 /* GPU3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D6B90D539713A20256FCDF0A27805C /* GPU3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86518CFE08809DFF384BF8C39CD7D1F1 /* Main.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B0518B00315F12AA09635E19BCD35156 /* Main.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 867358F09BCD4400D1CA1EE0BA100FB8 /* NstBoardKayPandaPrince.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4E6419448B960F583D9AD9ECC8EC8B7D /* NstBoardKayPandaPrince.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8680F8EF0BBCDBEEE5A53366BB0E471A /* svmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F261E13B1AC030CBAE70448ABC2DD8F /* svmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8681FBFF0D1EDDB882F392AE4E41A6F1 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA7EC2EE415DCFBE44F9DBD4F92DB34E /* Archive.swift */; }; - 86B1481F42CED72563EF3D695ED06174 /* NstCore.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AE5CA9C3251B37CB412B002F2B18CD26 /* NstCore.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 86C51CEFFE9BBEB96F4AB6BFE68CF66F /* NstPatcher.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4F5BF7EF7AAE901FB3EF08FEB9603AEE /* NstPatcher.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 86CD84B7CB8FEBF8D8D1A612608F9A59 /* Roxas-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7112AF9DF88E284F7F0D82E3379A2B7D /* Roxas-dummy.m */; }; - 86F7500498987E83E102E0A54716CFDE /* opengl_Attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 469D6302B5E25E6593C1E213ED0B446A /* opengl_Attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8715A171D63746B26EFEB4E6A617D39D /* WindowHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 593CF251B99826ECC39AE11BE6568BFF /* WindowHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8734FEEFA6AB0AADF18FC751440B6BB0 /* SoundFileFactory.inl in Headers */ = {isa = PBXBuildFile; fileRef = 8A624FFF16B311D8F1A19BE7C8EC0DAE /* SoundFileFactory.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - 877E7F8058EB4C948ACEBBD1A9285067 /* sa1.h in Headers */ = {isa = PBXBuildFile; fileRef = B0652246947AE2743F7B21B7464BAB5E /* sa1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8794B9E7B8EB7EC0B49CE452CF778FC1 /* re2.c in Sources */ = {isa = PBXBuildFile; fileRef = 2A7484DF86BAC6712F444A8FFBF23277 /* re2.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 87B6A15FF7D44269D8790FCF8C5CF865 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = E43D760A416FD46145902A92E018E58F /* SDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86B1481F42CED72563EF3D695ED06174 /* NstCore.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3985853293A865E5A5336745DE4139F2 /* NstCore.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 86C51CEFFE9BBEB96F4AB6BFE68CF66F /* NstPatcher.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D532E4E7993FC7D9C8EFA78B07605D3 /* NstPatcher.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 86CD84B7CB8FEBF8D8D1A612608F9A59 /* Roxas-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DC0FD4C8DB0253E8CE8EAF9C64DBD0EB /* Roxas-dummy.m */; }; + 86F7500498987E83E102E0A54716CFDE /* opengl_Attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 26E70D021ACF47CEAF06F4E652E5E81A /* opengl_Attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8715A171D63746B26EFEB4E6A617D39D /* WindowHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 195C083DB9E3337E066A78F5268E1222 /* WindowHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8734FEEFA6AB0AADF18FC751440B6BB0 /* SoundFileFactory.inl in Headers */ = {isa = PBXBuildFile; fileRef = 3489DA9596EA467FDF1E825220781E20 /* SoundFileFactory.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 877E7F8058EB4C948ACEBBD1A9285067 /* sa1.h in Headers */ = {isa = PBXBuildFile; fileRef = E12444C1B56F3412CF521B329577DC7D /* sa1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8794B9E7B8EB7EC0B49CE452CF778FC1 /* re2.c in Sources */ = {isa = PBXBuildFile; fileRef = BF31C2CB59DFB2355DA7BB8112A5D5C0 /* re2.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 87B6A15FF7D44269D8790FCF8C5CF865 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5267A220D47D998845DB51485386A8 /* SDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; 87FA058DD97C42DA27925CAD2E938C2C /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5246923E4069138B8F38B3EF8C4EE4D /* Users.swift */; }; - 87FFB6022D77762DFF612FCA46DADA4A /* NstBoardBmcSuperBig7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 241D65B94A34B15AB354A6901D592045 /* NstBoardBmcSuperBig7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 87FFB6022D77762DFF612FCA46DADA4A /* NstBoardBmcSuperBig7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EF7A8D3A9BE30CD2125BDFF488D22A25 /* NstBoardBmcSuperBig7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 880A3366BA936A92BBD568462B09612F /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76762292E978FDAACA63D856A9CD4F5F /* Async.swift */; }; - 8822BE90BB2456E06F40F8E1A71F45C1 /* NstBoardCne.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1C0F31C6E082D6432390150C57691513 /* NstBoardCne.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 882DCF4B991615D8A07BC2EF7E84A5FC /* TxFilterExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A0CC765A71526F79EBBC52C4FF79559D /* TxFilterExport.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7DB030D93B94677288CC4FB4807455C3 /* Export.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 886A18799553A19E810D2F7D688A4126 /* N64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D30A1BC3FBD53F3033F0C28438BE7BD0 /* N64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 886D71BD1595A610E2D69A83AE6A70AE /* Input.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D27110A6DD067C15FC032BAF9BEE99E /* Input.swift */; }; - 8876A72AAE903A9038ECE97EB584FF67 /* dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = 76098B9B168291C93114F349AF883D6F /* dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 88BABCA3D1E4F2390E0378A2B5228631 /* NstBoardDiscrete.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B2CBDD74EE4025870C9ACEC038645C28 /* NstBoardDiscrete.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8822BE90BB2456E06F40F8E1A71F45C1 /* NstBoardCne.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2BAAE966AB05A1DCC9AA7B693D69F0D0 /* NstBoardCne.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 882DCF4B991615D8A07BC2EF7E84A5FC /* TxFilterExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8DC89DB8BDA2642C42D9CE6C493AC371 /* TxFilterExport.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8EB12D179F66D53718BBF3591DC3E8BA /* Export.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 886A18799553A19E810D2F7D688A4126 /* N64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAB9AA348D576D9AF8A76D798AF0A209 /* N64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 886D71BD1595A610E2D69A83AE6A70AE /* Input.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F0ED4F854563D55D1126B811F3E869 /* Input.swift */; }; + 8876A72AAE903A9038ECE97EB584FF67 /* dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = D407D2A6DD08097D10D2B1117A8635F6 /* dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 88BABCA3D1E4F2390E0378A2B5228631 /* NstBoardDiscrete.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F3748CCE76F2C007B8EF3A629BF5C282 /* NstBoardDiscrete.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 88D0FB6855DF889BF0C5BE417F016C3E /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 0402C21751DF9B30592DAA2E4DEAB0A6 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8902DF0908579FE08E35AD6DD47CBC77 /* NstBoardBmcVrc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 77369FE791F1E575CF67D2E88660AB54 /* NstBoardBmcVrc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8912B1F9BD9142C96BE6E0B401AC9C40 /* NstBoardNRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E70A7D8AB9B5D506BDFCB3A14DE9ACD8 /* NstBoardNRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 89163481E7F96A33F9E183759BD7D51D /* DebugDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46026D348B650E6C7D5C37EC52B80A8F /* DebugDump.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 892EF00353110A3E726F1D521FE0F452 /* WindowStyle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FEF7570E80D78FE6F43CCD5722434683 /* WindowStyle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8957E0BA7E9FF05452AE65211EFCD859 /* NstApiConfig.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B9A1298C2392965F68B9AE60DBE0B247 /* NstApiConfig.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 897E17C6F6C366137126E12E5EDC926A /* NSBundle+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = BB54FA85A4EFEF73DED9795E55139B78 /* NSBundle+Extensions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89BAB96483B0B0EEDE12680A875F57A7 /* Time.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6339330C707D1D8177B1FCDB213946EB /* Time.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 89C3FEC2C51AC7DFCCAB05615111CD6D /* NstCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9D3400B3B03C1E9DC1A3F7B5E3EB7B4A /* NstCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8902DF0908579FE08E35AD6DD47CBC77 /* NstBoardBmcVrc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9469FE680E41D7D8C8AD938E3450532A /* NstBoardBmcVrc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8912B1F9BD9142C96BE6E0B401AC9C40 /* NstBoardNRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 37B489A0DEA4487857DEFF8A6A5237D9 /* NstBoardNRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 89163481E7F96A33F9E183759BD7D51D /* DebugDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A65DF9779DF20125011DEFB944B15926 /* DebugDump.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 892EF00353110A3E726F1D521FE0F452 /* WindowStyle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F01B391F7634E62F67997507B08A12B8 /* WindowStyle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8957E0BA7E9FF05452AE65211EFCD859 /* NstApiConfig.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3F7732EEA99B052D2425B1972ECED982 /* NstApiConfig.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 897E17C6F6C366137126E12E5EDC926A /* NSBundle+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BEF6E27DC400F7587941CD3E2668F89 /* NSBundle+Extensions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89BAB96483B0B0EEDE12680A875F57A7 /* Time.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E84054BA6CBE0DAB191CCF09288DEF80 /* Time.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 89C3FEC2C51AC7DFCCAB05615111CD6D /* NstCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D24E88AD3320735A8600F142B16FD580 /* NstCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 89F637B6A72C84461E7E5E6395896B4B /* GTMReadMonitorInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D501AB9335B46D77142394E47A29319A /* GTMReadMonitorInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89FEB422E33FEDC7C1C20B9D953193F4 /* conffile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CD922BCE2DF46F11E7202475E037EF6 /* conffile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89FF6BA500EA4247A328E6A82D4B4065 /* N64EmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0C4019F40D94124274D599DD260980 /* N64EmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8A2C15A083A63FC24761FE568CD44915 /* insertion_sort.h in Headers */ = {isa = PBXBuildFile; fileRef = 26DDDA2E6D5D939969B8FDD448F57499 /* insertion_sort.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8A5CB6F7F72B063E995EC0B2C2AF52E5 /* opengl_BufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E7C1D17194F0A8C85CD8A755AC2B8670 /* opengl_BufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8A6D9CDABBDF499C01CC1189E80A9D9F /* NstBoardUnlMortalKombat2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 770AA55D81A4A9A0174FC18A4DB7DC41 /* NstBoardUnlMortalKombat2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8AAC1B35CF4637F59F66E00C58F04177 /* ftmm.h in Headers */ = {isa = PBXBuildFile; fileRef = F94939473F3DAB308B9B66A4722AEA61 /* ftmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89FEB422E33FEDC7C1C20B9D953193F4 /* conffile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A54517246C22B36712CBF7B02E3BED /* conffile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89FF6BA500EA4247A328E6A82D4B4065 /* N64EmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 124A9AA8BD80FF606241A3E34CBF4039 /* N64EmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A2C15A083A63FC24761FE568CD44915 /* insertion_sort.h in Headers */ = {isa = PBXBuildFile; fileRef = C3FFB989E3545149939D3E8C7F5F16B1 /* insertion_sort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8A5CB6F7F72B063E995EC0B2C2AF52E5 /* opengl_BufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24ED56596D00F9B9AD800B7FF30622F5 /* opengl_BufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8A6D9CDABBDF499C01CC1189E80A9D9F /* NstBoardUnlMortalKombat2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2DF776088C2711052EEF4C793C2B806A /* NstBoardUnlMortalKombat2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AAC1B35CF4637F59F66E00C58F04177 /* ftmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 94CD261951849F1D22579127673F3769 /* ftmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8AD3B7AB59719794E86F41BA43AA9BB7 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C71C064E0F8E2D6A2B6E0CB4849BFC5B /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8AD7ED3262070702EA2D7772A7576F70 /* RSTCollectionViewGridLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 337EA8CD424B4FAA1210613EA7BEE5FF /* RSTCollectionViewGridLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8AF999E503CB06FBD4EEA0903D672F5A /* Textures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99EC0BF92D7121A56829D9702EB42CAE /* Textures.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8B3242772776AB021A4F1971280E29A3 /* NstInpDevice.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3082C32F34B1C6E7F0F4DC785F328B7E /* NstInpDevice.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8B66EA933E91DB3C1A2F60A1E6839556 /* Graphics.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EDF739733FCF6284240B795ECD2EFFB3 /* Graphics.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8B9F702DA0D9696A233593D88691564B /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 696FB5C2FDDB6402D85459020872DE22 /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8BC24B9D0B902A90526475618DFEB023 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92238392EDEE95FD2FBE52D9471C5264 /* Version.swift */; }; - 8BD82471835BF88ECAF163D6FCA9A762 /* RSTCellContentChange.h in Headers */ = {isa = PBXBuildFile; fileRef = 83C98EC2B9B01038DDBDF79833E8FA12 /* RSTCellContentChange.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8BE90823E820E693FF7804C8FF1F62E1 /* TextureFilters.h in Headers */ = {isa = PBXBuildFile; fileRef = F01F27F2E59C49CFECBCF50045F0021C /* TextureFilters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C24EE5BC4C18A93BCC1C9AE6FAC8F7F /* ftcache.h in Headers */ = {isa = PBXBuildFile; fileRef = C8A78AF718D2553FAE9A19AC2F865BA3 /* ftcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C3F0D16D8ECCB7869ABCC3F8F3969B3 /* NstInpBandaiHyperShot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C6513BE3B8C4EE62832D30F3B73EE32 /* NstInpBandaiHyperShot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C6E70C9C229A2E14969674B13510C6C /* rhash.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7206B56B9ED9A2B4822DC503DF31D7 /* rhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8CD64FD841EA7CD073DB1D91F67E5F83 /* NstBoardCony.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 60E307E020BBFAC21769EFBA79153CCD /* NstBoardCony.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D16050EF95747AAFACD9E5B43C71181 /* N64Types.h in Headers */ = {isa = PBXBuildFile; fileRef = B47C40F3651700B51A70D5B9000D2FD3 /* N64Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D2017BE0B60704C8CB8E34DE6093D3A /* NstBoardSunsoftDcs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 90DE8F7A964963C67D9A493018E6E24C /* NstBoardSunsoftDcs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AD7ED3262070702EA2D7772A7576F70 /* RSTCollectionViewGridLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F33D3A6F44894D367D99FF4F1A9DD9C /* RSTCollectionViewGridLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8AF999E503CB06FBD4EEA0903D672F5A /* Textures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C888A9E68F5D9C40535BB25A042E10F /* Textures.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8B3242772776AB021A4F1971280E29A3 /* NstInpDevice.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BB9F74C7D96B11B6D1DA5E2E0B149EC4 /* NstInpDevice.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8B66EA933E91DB3C1A2F60A1E6839556 /* Graphics.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAF16778F14BDA46D135E62DF52FD5B3 /* Graphics.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8B9F702DA0D9696A233593D88691564B /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EB450DCC75AB9928F547A4793F046EC /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BC24B9D0B902A90526475618DFEB023 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDCA85256EA26CE4DC88337487128581 /* Version.swift */; }; + 8BD82471835BF88ECAF163D6FCA9A762 /* RSTCellContentChange.h in Headers */ = {isa = PBXBuildFile; fileRef = A490B0EA1911CAE566D521752DB9B643 /* RSTCellContentChange.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BE90823E820E693FF7804C8FF1F62E1 /* TextureFilters.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D14FEABF918A24804DDF7627C4C6E4 /* TextureFilters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C24EE5BC4C18A93BCC1C9AE6FAC8F7F /* ftcache.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D32A452E67E305E30D5F18EE62B91D /* ftcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C3F0D16D8ECCB7869ABCC3F8F3969B3 /* NstInpBandaiHyperShot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BBE04DD449B8ADC33C274C03D42334D4 /* NstInpBandaiHyperShot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C6E70C9C229A2E14969674B13510C6C /* rhash.h in Headers */ = {isa = PBXBuildFile; fileRef = 9870FEA24CF3B1C5A3F888CBE2149CD4 /* rhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CD64FD841EA7CD073DB1D91F67E5F83 /* NstBoardCony.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9E7BF5046B171FA0104A3B0A7F9DD407 /* NstBoardCony.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D16050EF95747AAFACD9E5B43C71181 /* N64Types.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1A1A0732B5E3F46EFB5131FEC1279B /* N64Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D2017BE0B60704C8CB8E34DE6093D3A /* NstBoardSunsoftDcs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 23044889E5A6DCEE916A2658C83A085B /* NstBoardSunsoftDcs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8D7002BA4BF48E276D34405B85D636DC /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D72CEA77A8089188A57FDD92DB3E21 /* AFError.swift */; }; - 8D83B5DF22CE26FF06D3084540F77E1B /* cp15.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BF45B3F1647C84F90A4C140F217F89D /* cp15.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8DA6413B75C737288165A6B7CAD2820A /* NstBoardSunsoft.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F774B85B1C91BBD1B28A7FDAEE5812F6 /* NstBoardSunsoft.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8DB3CACE9224D13C1BD3C176BC5427D1 /* NstSha1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 03724046BA5C3704C4607F3025370078 /* NstSha1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8DD51BE5C43C2B1D3E7A605D95C974C6 /* L3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9ABF020B63EDEC52E2B78074AFB454B1 /* L3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8E8094562D01EDB93C41846A50926BD5 /* OutputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6E03BC1605808403D83828FBCFBE7F28 /* OutputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8EA421026DD522744405C37C9DFD1AC2 /* NstApiNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DBE05472ED5AAEBB0CA13B43E5496F2F /* NstApiNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8ECBE7000B4A9F6E088C74D397024BA2 /* BlendMode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AF38F08C7B6C05C9E6E483C522CB166A /* BlendMode.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F682A984C8CB6F8AF671756445C613B /* memgzio.h in Headers */ = {isa = PBXBuildFile; fileRef = 867A52819D0036A2C45DFD094D11F381 /* memgzio.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F6BB90B38CCD6C919AB656FB5EC04C3 /* Performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB2E42B839949FC64A2002C5BF39CD4D /* Performance.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8D83B5DF22CE26FF06D3084540F77E1B /* cp15.h in Headers */ = {isa = PBXBuildFile; fileRef = 05A59AB3426F5F9258B25B7746D83CAC /* cp15.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8DA6413B75C737288165A6B7CAD2820A /* NstBoardSunsoft.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73166C752BA3D0BEFE30CD25680CA1E8 /* NstBoardSunsoft.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8DB3CACE9224D13C1BD3C176BC5427D1 /* NstSha1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5231969A4CEB871747903C8249FAAB98 /* NstSha1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8DD51BE5C43C2B1D3E7A605D95C974C6 /* L3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9531D676E6CBCD44E92FD1148601D0F9 /* L3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8E8094562D01EDB93C41846A50926BD5 /* OutputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BC8528536BD3799BBE6CA5C956B29930 /* OutputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8EA421026DD522744405C37C9DFD1AC2 /* NstApiNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8FE7624D239D6E6FDDCBDC31458E790E /* NstApiNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8ECBE7000B4A9F6E088C74D397024BA2 /* BlendMode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CDC394F06B879F234E7D901D7FFBA813 /* BlendMode.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F682A984C8CB6F8AF671756445C613B /* memgzio.h in Headers */ = {isa = PBXBuildFile; fileRef = 148E5E7E1B8AE5F14D3C61541210F769 /* memgzio.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F6BB90B38CCD6C919AB656FB5EC04C3 /* Performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53E9D1B37411CE1669CA533059362960 /* Performance.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8F9E3145DED94EC48DF53CBDD6F6D9D2 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED22F3BA7E83E1DC36113EFA2D24588C /* FileManager+ZIP.swift */; }; - 8FBE42C6E7A4A5028537D4734CCCEB5E /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E72A33A7110D63CBC89C70E51F608C9 /* SDL_thread.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8FBEAF2C349397639534DA6996F1794A /* ZilmarGFX_1_3.h in Headers */ = {isa = PBXBuildFile; fileRef = C1D6EFEC4C64645B1CD5E8A6C7E9C97F /* ZilmarGFX_1_3.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 90217BC322211710F6A8909DC9CB2E59 /* NstBoardBtlSmb2b.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EC65A0F4796E627B80569AAB463DCD61 /* NstBoardBtlSmb2b.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 903A61727B196C0BF6AD7D55E406829E /* View.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B8982524E4ACBEBF47DD97748097DE96 /* View.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8FBE42C6E7A4A5028537D4734CCCEB5E /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FBEA1458597421280682E90821C05C /* SDL_thread.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8FBEAF2C349397639534DA6996F1794A /* ZilmarGFX_1_3.h in Headers */ = {isa = PBXBuildFile; fileRef = CA7FFC847A5DDF0337FD944CC08D1D35 /* ZilmarGFX_1_3.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 90217BC322211710F6A8909DC9CB2E59 /* NstBoardBtlSmb2b.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A339C9C5BFA6F1000B405E8BE54F026C /* NstBoardBtlSmb2b.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 903A61727B196C0BF6AD7D55E406829E /* View.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7DA17A4830B0A7833A2BFF7E43EFE310 /* View.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 90761841E15818195AE0E6F9C6B1F2A3 /* GTLRDriveQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 5117CC789D8C47E9B0F2888AB14F3E74 /* GTLRDriveQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 90A332D78357408A4893241BAA3FCEF7 /* NstApiTapeRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E2407FBC4681D02CEDB01BEEC0AC171 /* NstApiTapeRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 90C74CB62F0300013754489565EA44ED /* NstInpTurboFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CA84B8D0950FD10163E23797CEABFE2C /* NstInpTurboFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 90D2435B8A05AD9EA89B333FD06A470E /* NstBoardTaito.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 51A794B9A074BF2025C358E236D42F05 /* NstBoardTaito.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 90A332D78357408A4893241BAA3FCEF7 /* NstApiTapeRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8DEF68BFA723483A3C9540DE5D2B9CD6 /* NstApiTapeRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 90C74CB62F0300013754489565EA44ED /* NstInpTurboFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A4A18683962DB3D821CC4DCBB8A6E9B9 /* NstInpTurboFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 90D2435B8A05AD9EA89B333FD06A470E /* NstBoardTaito.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C9FC5FCE0B5F88A589CF0363028B43C /* NstBoardTaito.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 912EEA493E0A08FC711CF6864C3DB36F /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DC45D7DB5CFA98660E39905809A298A /* Auth.swift */; }; - 9169B8668918831122A0CD580F6972E3 /* NstBoardSunsoft1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 02C1BEECEC397F5E91934D66DFFF7686 /* NstBoardSunsoft1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9174937A3251A2ACDEEB1E350B983F7F /* NstBoardBmc150in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4277D9CD49D8F32314F512361BE4B690 /* NstBoardBmc150in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9169B8668918831122A0CD580F6972E3 /* NstBoardSunsoft1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCC7AEE83CB780E73856EB51DA7F5363 /* NstBoardSunsoft1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9174937A3251A2ACDEEB1E350B983F7F /* NstBoardBmc150in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1195B6998FE8421EBA77EB210A43B4B4 /* NstBoardBmc150in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 920D6388A019BAE183B76F28E00899AB /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 72224C07100B6D8A8371BBAC83840304 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 921C1F239586B4E7118399375F45BAB5 /* DateAndTimeFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736E24DAB59401834EC1B3DBAEF4EEF6 /* DateAndTimeFunctions.swift */; }; + 922957171D68783E3E3A4DC0D4A9D0D9 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5DA6597370C51EB0AF58AA6075130F /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; 922B6EFC5C130149705BC82D0BB9D57D /* GTLRBatchResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B555E9059530B6964B3908B22140C42 /* GTLRBatchResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9247277F4A5BF7A33FD393DED9BF677E /* svotval.h in Headers */ = {isa = PBXBuildFile; fileRef = F97F1DFA4F57F5E203007254CF9BE0A9 /* svotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 926C22B256A40C76B6C8FBDCC7D1900E /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = 6A36744D626ECD3743CA4F297A98EA19 /* memory.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 928393A965417058371B8D82CF1F8173 /* txWidestringWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = DC46D472713AEC4054D4A5794AAC802C /* txWidestringWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 92A4B9F5C0254706401940A8171D746A /* NstBoardTxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0558C6E8EE1D9B61043E335254B75955 /* NstBoardTxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 92A942CE7F29E460BB7E6C1564923F70 /* path.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C685CAEC8DE104E2770BA81F4B87316 /* path.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 92F8229DBD6462B1D86671903966D443 /* libretro.h in Headers */ = {isa = PBXBuildFile; fileRef = 91D82360E170EAD9A1C2BFF9FB3ACF33 /* libretro.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93049C2EA7F1F12ECE2A989EC457904D /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = 75BC588551AB21D7B8D2F7CEC5387DE8 /* png.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9306DF595EB74F925D40BC8F70C11F7E /* statesaver.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BD3541718061A90921DC7BAA43765B2 /* statesaver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93180A48A4201719F7F9CFDBB8B86D4F /* arm_cpu_features.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FD22484CAFD9D6D7EDB3732DE4A047D /* arm_cpu_features.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 931A0C0A7D091176AFB87B18C0F7B40B /* TextureFilters_hq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B0ECFFCE6A9F6387533730061A1A7A /* TextureFilters_hq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 932FE517D424EB24ECA60FCF308A7F5E /* expr.cpp.h in Headers */ = {isa = PBXBuildFile; fileRef = B7D405FFFFAD99E717267886418DECCE /* expr.cpp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93353F0A21F136C22AD7F0B6183B5952 /* Bundle+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = E296E015D17F062AF04EB6010FF3D61E /* Bundle+Resources.swift */; }; - 93A9497637F202D29E0EC51208B725A8 /* RectangleShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 398E01AED7FF75385A50FDC67155A9A0 /* RectangleShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 93AB3DCEF6FAB25507A0D57EB46F15D6 /* Utf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 187D4D612762D2AF1FECAFF87EFEA7CA /* Utf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 93E2A69BE77D64F60D12257FF81954F4 /* RSP_LoadMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB26B910FF9586D0BBEEF8B7B3FCC55A /* RSP_LoadMatrix.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 93E4A8D744F5FA2F32485D5992491BA5 /* m64p_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 260430D1061CEEA26EE73673BC86F350 /* m64p_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93ECEC40EB5571AC01CDB1C56EE6AFBA /* pixform.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D90CE2D6B95B2AA99812247EC3691B /* pixform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 940ECFA7ED45FC491E7E3BA8526B7C2B /* ftglyph.h in Headers */ = {isa = PBXBuildFile; fileRef = 75CC5A3EB0061070CE3340A72D9B1240 /* ftglyph.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94209528F5A3C88236DE5DC50BAD5D7F /* ThreadLocal.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F586E6135CA6E3F0C67A2EAE0344D88F /* ThreadLocal.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 943577E181B1B6706D2107ECD728B015 /* DownloadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CDC4E9BA921F71C2DE81D711D002178 /* DownloadRecordOperation.swift */; }; - 943A7FEF7443174C9AC78E67A5868A92 /* NstBoardFukutake.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 72EF249EE7E9290384CEF4D02C6444B0 /* NstBoardFukutake.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9463C53B6DDD72C64400E314D9AAB04A /* plugin_delta.c in Sources */ = {isa = PBXBuildFile; fileRef = FA255603CDB62A95F35F477E2F0D208F /* plugin_delta.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 94868DBC2F7CB341ECBBDC311392ABC9 /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = FE62BC22E0353D209B86497B9841EB46 /* System.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9247277F4A5BF7A33FD393DED9BF677E /* svotval.h in Headers */ = {isa = PBXBuildFile; fileRef = 898591A3CC8C587571FA098CCC20AADF /* svotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 926C22B256A40C76B6C8FBDCC7D1900E /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = C68E5B53D8D5CA28D433B92E58B5C931 /* memory.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 928393A965417058371B8D82CF1F8173 /* txWidestringWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 89F66807040C88F86F074A7DE8D84643 /* txWidestringWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92A4B9F5C0254706401940A8171D746A /* NstBoardTxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 725E5E4B6601C9A79B9D7A82DF839C25 /* NstBoardTxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 92A942CE7F29E460BB7E6C1564923F70 /* path.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C11311A957A87232355B6B0AFFEB8F2 /* path.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92F8229DBD6462B1D86671903966D443 /* libretro.h in Headers */ = {isa = PBXBuildFile; fileRef = 42884C54AC2951F6A1140B6F12823A61 /* libretro.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93049C2EA7F1F12ECE2A989EC457904D /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C8267F7387923110B7E4D691528634F /* png.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9306DF595EB74F925D40BC8F70C11F7E /* statesaver.h in Headers */ = {isa = PBXBuildFile; fileRef = DDAB24C8DF7DA2BB3D67FC4A2C669BEF /* statesaver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93180A48A4201719F7F9CFDBB8B86D4F /* arm_cpu_features.h in Headers */ = {isa = PBXBuildFile; fileRef = 25DEDA1290E18DBA7242DCF9680B37DA /* arm_cpu_features.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 931A0C0A7D091176AFB87B18C0F7B40B /* TextureFilters_hq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = AEAC4A2D514CEA5F884C8B989B177FE5 /* TextureFilters_hq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 932FE517D424EB24ECA60FCF308A7F5E /* expr.cpp.h in Headers */ = {isa = PBXBuildFile; fileRef = 166B7D7F68333A9915F7970F9FB547C0 /* expr.cpp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93353F0A21F136C22AD7F0B6183B5952 /* Bundle+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 500E8615D96CF177F4C3273482988B11 /* Bundle+Resources.swift */; }; + 93A9497637F202D29E0EC51208B725A8 /* RectangleShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 00B52487B5EE514818470AEDEFA85967 /* RectangleShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 93AB3DCEF6FAB25507A0D57EB46F15D6 /* Utf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF1BBDF3D7D54D8C1E001FC042148D06 /* Utf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 93E2A69BE77D64F60D12257FF81954F4 /* RSP_LoadMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDA72CEB6E2DC0981A908E0F6C1BF56D /* RSP_LoadMatrix.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 93E4A8D744F5FA2F32485D5992491BA5 /* m64p_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 155B6867D0BF5AD02F1B9394F4C2C8B9 /* m64p_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93ECEC40EB5571AC01CDB1C56EE6AFBA /* pixform.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A4EF2A1B3DE6523F4B1132FD5CF4A75 /* pixform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 93FFCE2514097792D1F5E38E988F1513 /* Wifi.h in Headers */ = {isa = PBXBuildFile; fileRef = A5CE53451F1210BC9BA0C024038C9865 /* Wifi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 940ECFA7ED45FC491E7E3BA8526B7C2B /* ftglyph.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FE228B9F6593F99674B619FAD43A040 /* ftglyph.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 94209528F5A3C88236DE5DC50BAD5D7F /* ThreadLocal.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF7CEB7CE925B8996AD28292550EBFB2 /* ThreadLocal.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 943577E181B1B6706D2107ECD728B015 /* DownloadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C643171D31A2715E757D5F42F63F495 /* DownloadRecordOperation.swift */; }; + 943A7FEF7443174C9AC78E67A5868A92 /* NstBoardFukutake.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DDDDABB6EB20FCEABADC4F4B42F10D74 /* NstBoardFukutake.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9463C53B6DDD72C64400E314D9AAB04A /* plugin_delta.c in Sources */ = {isa = PBXBuildFile; fileRef = B2688E7DF0591DC8789862F774C74BF6 /* plugin_delta.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 94868DBC2F7CB341ECBBDC311392ABC9 /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = 2889DF4390F5E2FFDA11CCE9E534746E /* System.h */; settings = {ATTRIBUTES = (Project, ); }; }; 94BCC7749EDC3ADB6EB5811CA50D58F7 /* FileRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA07C9DEC9FD13724174A7D6794AD7B /* FileRequests.swift */; }; - 94CDC16CABC912819C497850CE4F1489 /* NstBoardKonamiVrc7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3E46BEA7461AFEDDCEC478DB8D3425C3 /* NstBoardKonamiVrc7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 94CDC16CABC912819C497850CE4F1489 /* NstBoardKonamiVrc7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16A6E4F9D5B593AB01D5A49340300BCF /* NstBoardKonamiVrc7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 94D28595353D013C0530A91A7AA81FCF /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C998AB9300BCC4AD6368CB1FA675F29 /* Query.swift */; }; - 94D28819338E33AFF9EDDFB94DE0E526 /* NstVideoRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3B6CCD65AA48EE2EC4FE44F3D0C21376 /* NstVideoRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 95023508CFDE2C9943D4E510526A14A3 /* S2DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C581DB34643779E6E697D493C316D48 /* S2DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 94D28819338E33AFF9EDDFB94DE0E526 /* NstVideoRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4753C1496FC2EDB1151EF16865D566B5 /* NstVideoRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 95023508CFDE2C9943D4E510526A14A3 /* S2DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF4AC25F29497FA32921E869185CFB9 /* S2DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 953B0BA08374FEB6F8BA47C9EE30878C /* SMClassicCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B5A75174DE7C7B4A535B3A42D6239C /* SMClassicCalloutView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9543AAF856988A714C41706FF2A5AEAC /* svttglyf.h in Headers */ = {isa = PBXBuildFile; fileRef = 440D7ACB57B622DFF74C66B788D3B238 /* svttglyf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 95927DE3B446FB2A897EEE03A3B0E292 /* ObjectHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C1AEA30A7ED0128954BF3C163D0526F /* ObjectHandle.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 95BD2BAD38E37D6E2B67EDF5344BA723 /* NstInpHoriTrack.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6259A047C58B19EAEDC1BA8DC19B918E /* NstInpHoriTrack.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9543AAF856988A714C41706FF2A5AEAC /* svttglyf.h in Headers */ = {isa = PBXBuildFile; fileRef = 224EC23CB708246C666EA6D597EF0933 /* svttglyf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 95927DE3B446FB2A897EEE03A3B0E292 /* ObjectHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B879AB2ADEE0B7AD62F37F492D81FEC6 /* ObjectHandle.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 95BD2BAD38E37D6E2B67EDF5344BA723 /* NstInpHoriTrack.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 633BFEBA4D6E889B3BD3E8EC2A8D9AAF /* NstInpHoriTrack.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 95C86E907FED4E215620A31FA5CAFD42 /* DropboxClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5456371B4D7DC880854562F4F53807C1 /* DropboxClient.swift */; }; - 95EF975803B95C02EE458E32DB43C1D2 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = D26E750E5A5772E0667870225E0F7C1B /* port.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 96009988E1AD37AD3F245D803DC0ACE7 /* CharacterSet+Hexadecimals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D0235C98A504B6ACCDF616BA0368556 /* CharacterSet+Hexadecimals.swift */; }; - 9603A4274C8A74E47EDE5C96E6F3A289 /* NstBoardMxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 627617EFA316732258422811C97719BF /* NstBoardMxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9614CDE379DB3C8A330397F9BE0AEE69 /* Sprite.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C90C25C12E9E9489A474A496C47B38AF /* Sprite.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9631EB3716707DF75A79D5497DF4392C /* dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = FF46137EDAAC9DD905A8E9D0602099DB /* dsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 964DD3973B1820BDFFCA6F92B9C9705B /* NstSoundRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8B0132D8F45B4B5666CBF5652A345F0F /* NstSoundRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 967B79C9BBE288D04AE77C7D95A294F1 /* ftbbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D93A1FA4EBA67EA2A7C3149D8776FF0 /* ftbbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 968CD734D31C79FB896F2B5840E81816 /* sRGB.h in Headers */ = {isa = PBXBuildFile; fileRef = CF6CFBF5D3D08E7081D6FE7FC32A40AE /* sRGB.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 96A155D5BB7094AC0D4DB6C7CBDEA3DB /* NstInpSuborKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B2B24BB63436EBA04A7F12707D9B8161 /* NstInpSuborKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 96C74431D5A2F68C56AB62BBF1A75D35 /* NstBoardBmcSuper24in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FDD8C2628C20169F27F847F6618B2626 /* NstBoardBmcSuper24in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 96D4E9BF589FAEAAE225B88A6CC68214 /* DepthBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4983F070F9A339A50561C5253106964 /* DepthBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 96E84431E12BB8ADA8E145AAC1ADFB66 /* fxp.h in Headers */ = {isa = PBXBuildFile; fileRef = 9264D4DA6A66BA54A811C0AC60576BC4 /* fxp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 96EDAB5DAB64B77966807FAA4FBEA19E /* NstBoardAgci.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A031F15C9AA6495C554D8421DDCD6B2E /* NstBoardAgci.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 96F221FEFB1BDFEEDF3D78ECBD3693BB /* NSPredicate+Search.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E418A7738B016688EC222EB837069D0 /* NSPredicate+Search.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 96F4B4E72231C96CA0010A82E8459431 /* m64p_frontend.h in Headers */ = {isa = PBXBuildFile; fileRef = ADD476D53B05AEB62DBF869AA71DBE2E /* m64p_frontend.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9719913DBA52DDA7B45760943EB9BEEC /* RSTOperation_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = BBB89BF0F048332F70DF3BCD3A833DA2 /* RSTOperation_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 95EF975803B95C02EE458E32DB43C1D2 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = 9213596C3CA0E060FC0617A361F98FCE /* port.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96009988E1AD37AD3F245D803DC0ACE7 /* CharacterSet+Hexadecimals.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9A99432B3A77A17C67102784C21DAAF /* CharacterSet+Hexadecimals.swift */; }; + 9603A4274C8A74E47EDE5C96E6F3A289 /* NstBoardMxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4C59CCAD19BF6E186912BBD6E16E4AF4 /* NstBoardMxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9614CDE379DB3C8A330397F9BE0AEE69 /* Sprite.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3712F3330F9F788DA08004D45DC308FB /* Sprite.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9631EB3716707DF75A79D5497DF4392C /* dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = F69FBA7A038D20EABCA39B35AB3B040D /* dsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 964D97F8D77342CEF0BDB0A9813AC087 /* DMA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A691959318D99E3BFEED5DF0D2582494 /* DMA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 964DD3973B1820BDFFCA6F92B9C9705B /* NstSoundRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DFC688B75792FBFBB3B452084CA3837C /* NstSoundRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 967B79C9BBE288D04AE77C7D95A294F1 /* ftbbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 85237BE80E426B918024FFAC9251A50C /* ftbbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 968CD734D31C79FB896F2B5840E81816 /* sRGB.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EBF0A8640326E2F901DF86C21C060DB /* sRGB.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96A155D5BB7094AC0D4DB6C7CBDEA3DB /* NstInpSuborKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D41AF32FC52E17D1A0A5BA99D695DD30 /* NstInpSuborKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 96C74431D5A2F68C56AB62BBF1A75D35 /* NstBoardBmcSuper24in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 29E044818E33EA28D605B83708C47299 /* NstBoardBmcSuper24in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 96D4E9BF589FAEAAE225B88A6CC68214 /* DepthBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 472F4C1130957742B23FCBEAD0FC6E61 /* DepthBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 96E84431E12BB8ADA8E145AAC1ADFB66 /* fxp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4702731F2DEC76D99FCE88986919F6AC /* fxp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96EDAB5DAB64B77966807FAA4FBEA19E /* NstBoardAgci.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 190388E1589C7BC638B1410EA970D133 /* NstBoardAgci.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 96F221FEFB1BDFEEDF3D78ECBD3693BB /* NSPredicate+Search.h in Headers */ = {isa = PBXBuildFile; fileRef = ED33C93DD7E38C3D447A4941CDA4F4C7 /* NSPredicate+Search.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 96F4B4E72231C96CA0010A82E8459431 /* m64p_frontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 104AE23A6B9AE10B8672C3AC578993CA /* m64p_frontend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9719913DBA52DDA7B45760943EB9BEEC /* RSTOperation_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = DBB12A893E1A139B63450DDE9A309CC4 /* RSTOperation_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; 972A37B03DCA40E3914A116E31179F3F /* GTLRBatchQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = C88860D669B74A0154AA887269E28475 /* GTLRBatchQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 979368E44B8B7C8615822815141CD054 /* GameControllerStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2898E99C918654A8574FBA694F5AA190 /* GameControllerStateManager.swift */; }; - 97ACB19F84123FA36372CAEFB3F69700 /* RSTHelperFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 142A476F4B29FD9BEA6D18199D4AD340 /* RSTHelperFile.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 97BC1C5E6F8786531212D326F22B5A0F /* cstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = E5AD860D37EB94791316D63AD7049D43 /* cstdint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 97C65359994F792189FCBC1C79079A96 /* gambatte.h in Headers */ = {isa = PBXBuildFile; fileRef = F77EA33E6AF316AA6F7640C7E3F3D1D4 /* gambatte.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 985B7DDD2DD31218D8E7367F76FD2D69 /* gbint.h in Headers */ = {isa = PBXBuildFile; fileRef = 14DA14245966E2AC6FF59548E765006C /* gbint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9866CCB407CB626700130C62BCE45A29 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 587FE8C376C86B170BA2C85960B06B3F /* Sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98D31D2DCD90B13AF37086E4750BA838 /* mi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 914481AFB63938A5A293F3B322F5FD91 /* mi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98D8951889A284316C8473C141B05BF5 /* F3DEX2CBFD.h in Headers */ = {isa = PBXBuildFile; fileRef = 0413511727F62ED4EE7013A2B65E6D60 /* F3DEX2CBFD.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98E164F9F904A6584A61420EE9FD1A7E /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = E411C55BF728DAE87580EC144C599C2A /* pngwutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 990D025FACA7671D88A13F092F6A87C5 /* GBCDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = DA034BCB2E1E7F757B0973F79CA6BD70 /* GBCDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 991670A9BE0E2AD87F211F289998813D /* af_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = 82B290FA3AD7AE40209494B966FF4B3B /* af_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 997BE94A31FB10C25F97750D5D0C73E1 /* pshints.h in Headers */ = {isa = PBXBuildFile; fileRef = 367BD3702DCBBD382022788A89524217 /* pshints.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 99834BC27CF8939DCA6DB984DB44F44D /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = EF589F6EBD2EE6D830CD99CA788543A7 /* Standard.deltaskin */; }; - 99B6F8CEDEB6DB72964EFBD31E1EDD8A /* NstChecksum.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 88DE70070F082BF2437581BD7BB91BDB /* NstChecksum.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 99DE9961F6F88EA4545A05AD359747C6 /* UIView+AnimatedHide.m in Sources */ = {isa = PBXBuildFile; fileRef = ECD06B0653616CEE4A2EAB78B71D5A06 /* UIView+AnimatedHide.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9A1BE2EF2BF2B41278CFF95856596E4C /* Log.h in Headers */ = {isa = PBXBuildFile; fileRef = B36363E6798FB6B3F40354BBE7374A01 /* Log.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A2C2E1BFEC2A7F8FE2BF3C40365472A /* tttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F2C2DADC78B40086474AB8DAA997C070 /* tttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A453C07C6CB23BBC0923625A37ED39C /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = B4621F5E2074F440324D7C9E0D8C9D88 /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A4C2D5C397861A9572A20C1F8A36028 /* ManagedRecord+Predicates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A684FB9EF326DE42BC2EDF06D0D6126 /* ManagedRecord+Predicates.swift */; }; - 9AC1AB764E31934D162F26C8484C21E6 /* gDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE5E01263F3833C2C56EBB4B61F7CA32 /* gDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9AC1C1C11717294A0BC92C368F6A3C43 /* GBI.h in Headers */ = {isa = PBXBuildFile; fileRef = F14770DFA2F0FBE712A351494EC459C7 /* GBI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 979368E44B8B7C8615822815141CD054 /* GameControllerStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43650F984E0D62C7EB21DB9C43B8CAD /* GameControllerStateManager.swift */; }; + 97ACB19F84123FA36372CAEFB3F69700 /* RSTHelperFile.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AB79AE80A36131240B0204640F0474 /* RSTHelperFile.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 97BC1C5E6F8786531212D326F22B5A0F /* cstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = D21047E7540C7E4A5E2197B158C84D3B /* cstdint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 97C65359994F792189FCBC1C79079A96 /* gambatte.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DCDABB34A5BDA633CA1B6972D7D76E1 /* gambatte.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 985B7DDD2DD31218D8E7367F76FD2D69 /* gbint.h in Headers */ = {isa = PBXBuildFile; fileRef = B307C39B5BCD16F9563103326BB8C58A /* gbint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9866CCB407CB626700130C62BCE45A29 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 2036AE04F921EB54A23BE7D3307D5B57 /* Sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 98D31D2DCD90B13AF37086E4750BA838 /* mi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = FCE15B7CBF75268739FB87C1E0C6AC09 /* mi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 98D8951889A284316C8473C141B05BF5 /* F3DEX2CBFD.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD20790AB990ACC80BB8996D8F6E7CF /* F3DEX2CBFD.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 98E164F9F904A6584A61420EE9FD1A7E /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 87CC302B1B1C6F71828303A524C51690 /* pngwutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 990D025FACA7671D88A13F092F6A87C5 /* GBCDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D9E4AA51EA6166FE8A05D803D4DFCF2 /* GBCDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 991670A9BE0E2AD87F211F289998813D /* af_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B73776B063CE08E7361FDE4C26CF904F /* af_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 997BE94A31FB10C25F97750D5D0C73E1 /* pshints.h in Headers */ = {isa = PBXBuildFile; fileRef = E95A0C3C6E26DB4E26E12433BE937DB1 /* pshints.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 99834BC27CF8939DCA6DB984DB44F44D /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 387F3E450269A9E3EF2EA6A10AD8C879 /* Standard.deltaskin */; }; + 99B6F8CEDEB6DB72964EFBD31E1EDD8A /* NstChecksum.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 35735087EA4B8B9922B5CAF03314D85D /* NstChecksum.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 99DE9961F6F88EA4545A05AD359747C6 /* UIView+AnimatedHide.m in Sources */ = {isa = PBXBuildFile; fileRef = 632F100822F31BF07C7CD07CAD8F2329 /* UIView+AnimatedHide.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9A1BE2EF2BF2B41278CFF95856596E4C /* Log.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D08A94E7C3746163340B4EA95824507 /* Log.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A2C2E1BFEC2A7F8FE2BF3C40365472A /* tttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 021A9462364AFC38855FC545DCD6A6B0 /* tttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A453C07C6CB23BBC0923625A37ED39C /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = 50942AB189B9EA5A4CCBCC5F4E94B58C /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A4C2D5C397861A9572A20C1F8A36028 /* ManagedRecord+Predicates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FF9B4A3C5693A9C7DC7179EB1F138 /* ManagedRecord+Predicates.swift */; }; + 9AC1AB764E31934D162F26C8484C21E6 /* gDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F52A10407276576D7E69215069A05CD5 /* gDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9AC1C1C11717294A0BC92C368F6A3C43 /* GBI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB6E71C991DC4BD501F509F16B2DFDF /* GBI.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9AC5F54FB242288D0C0BEE5FE51BE7F6 /* AuthRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E2C78A8799FD3F430CD405874430028 /* AuthRoutes.swift */; }; - 9ACECB5B9423B032EFEF6184E7E6112E /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = 2007B1419082E90090305FCD84393B06 /* SDL_opengl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9ADC5E80C66896CD28992B319DBAAFDA /* glext.h in Headers */ = {isa = PBXBuildFile; fileRef = 801A6C2440FD328341E6550569C3A232 /* glext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9AF689676F4557DB4290ABA38A21BECA /* MMU_timing.h in Headers */ = {isa = PBXBuildFile; fileRef = FC781DAF311B76B2BBAA2DDD268A94CD /* MMU_timing.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B00930BE1823F676F5035796C25C2E0 /* GraphicBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 442216A823D794BB8E292F6B3A6BB793 /* GraphicBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B3E47CAB17EEAEEA7252FDAD1228FED /* svtteng.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D07B62C2930860C9FC0DB9D497C72D7 /* svtteng.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B40F6B2B7F12F1A13A367E599764867 /* TxImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3B05FC42F83ADA41DEED532540CD7174 /* TxImage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B434AD18DC064B8C04942252F58E534 /* regcache.h in Headers */ = {isa = PBXBuildFile; fileRef = 94AAA4870A47F9FA1AE9463A83E81CB5 /* regcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B46DF6F7D385A76CC7419F2CA029080 /* NstBoardCneShlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BFF96050C458E84686F588B9793FEC9C /* NstBoardCneShlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B6DAACFBF34F39F85BDE66C85C41FF3 /* UISpringTimingParameters+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 46A7952AAD31367ED9BE353AA63C8C99 /* UISpringTimingParameters+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B704453F791C3CAA8F55E7BA3D0C581 /* Vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB8457DAFF531CDDEB4D1854B8B8BDD0 /* Vertex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B75C40E8889FD932BCFF196C4F35E57 /* ColorBufferReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5FBF0DA69F6371EE6C6D63D8001D8D95 /* ColorBufferReader.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B785841DB7BEA68999C1CA3F487ECF1 /* DisplayLoadProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0DCFE89D247EB41DF04E4B210CD083F3 /* DisplayLoadProgress.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B89D3260B3CBDF8B3A37E4C79BE88B5 /* NstBoardNamcot34xx.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F35BDFB9D3E727256E9CD866CDA4B105 /* NstBoardNamcot34xx.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9BDB8F38002847FBD5C1F1C023A5F8D3 /* eventloop.h in Headers */ = {isa = PBXBuildFile; fileRef = FA12B422FB3250E2E3FF60847D9714BB /* eventloop.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C4DE97E009F6FD9F96D47382A323F8D /* Sensor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D116902F224A7C6DCFCD3121EA7E0745 /* Sensor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C56D975902024C142C35CBA998C6E8D /* cpuexec.h in Headers */ = {isa = PBXBuildFile; fileRef = 1427093FF23F46B310155A7F63393171 /* cpuexec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9C7C23E76D82621C265FFC52430EC02C /* Ftp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EE47B1882C5096303AD365307905B712 /* Ftp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9ACECB5B9423B032EFEF6184E7E6112E /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = E8274D72B068FDD5B8433E16806FBEB8 /* SDL_opengl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9ADC5E80C66896CD28992B319DBAAFDA /* glext.h in Headers */ = {isa = PBXBuildFile; fileRef = F52405E64C06D130B0AAD913D760D8C8 /* glext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9AF689676F4557DB4290ABA38A21BECA /* MMU_timing.h in Headers */ = {isa = PBXBuildFile; fileRef = 17B5799944A0DCB74E38C5E3E5C164EB /* MMU_timing.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B00930BE1823F676F5035796C25C2E0 /* GraphicBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 877821421C3883E9EC8A19BABE97DA2D /* GraphicBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B3E47CAB17EEAEEA7252FDAD1228FED /* svtteng.h in Headers */ = {isa = PBXBuildFile; fileRef = F1AD374BED968FBCE790AA433A78D057 /* svtteng.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B40F6B2B7F12F1A13A367E599764867 /* TxImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE1843CA9E6FD7C78006C01BE4BD5C55 /* TxImage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B434AD18DC064B8C04942252F58E534 /* regcache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EBDA149FC9D979E9EB1846B7E68B274 /* regcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B46DF6F7D385A76CC7419F2CA029080 /* NstBoardCneShlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04131E906A312EC3EC8E75626EEA8233 /* NstBoardCneShlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B6DAACFBF34F39F85BDE66C85C41FF3 /* UISpringTimingParameters+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EEAB40C86D49852ED6EB7A6AFF904B0 /* UISpringTimingParameters+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B704453F791C3CAA8F55E7BA3D0C581 /* Vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0A780AF639D642BAFDB60533800E36E5 /* Vertex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B75C40E8889FD932BCFF196C4F35E57 /* ColorBufferReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0576D7E597D37BAAB587DB83FE8CB161 /* ColorBufferReader.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B785841DB7BEA68999C1CA3F487ECF1 /* DisplayLoadProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DEC0821C3D8852D66B08A0002AB2F015 /* DisplayLoadProgress.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9B89D3260B3CBDF8B3A37E4C79BE88B5 /* NstBoardNamcot34xx.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E70D8FFEBC5CD9356B8F48E495CF4C54 /* NstBoardNamcot34xx.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9BDB8F38002847FBD5C1F1C023A5F8D3 /* eventloop.h in Headers */ = {isa = PBXBuildFile; fileRef = 761CB13BA65C677D14B6D3A3F75A9A73 /* eventloop.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C4DE97E009F6FD9F96D47382A323F8D /* Sensor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAD07D9524FA2A12D63FCF045E3C71B6 /* Sensor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C56D975902024C142C35CBA998C6E8D /* cpuexec.h in Headers */ = {isa = PBXBuildFile; fileRef = A96FC77ABA88D5836FF081611CD8F5E7 /* cpuexec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C7C23E76D82621C265FFC52430EC02C /* Ftp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 25783A066C7388BF58AF665E9697C17B /* Ftp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9C8A0C2204C091124D6C64F86A690F9F /* SMCalloutView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 014989F31F4E364C9128F07C0637CA70 /* SMCalloutView-dummy.m */; }; - 9CEA93893B050B53483834892692E40B /* ftautoh.h in Headers */ = {isa = PBXBuildFile; fileRef = 4673DE422676A6A6E7634A30B5B9E722 /* ftautoh.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9CEE21D31B9461DB729129E357679163 /* F3DEX2ACCLAIM.h in Headers */ = {isa = PBXBuildFile; fileRef = 73D96244D69D5586A7CEBA91D3674E96 /* F3DEX2ACCLAIM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CEA93893B050B53483834892692E40B /* ftautoh.h in Headers */ = {isa = PBXBuildFile; fileRef = 607EE7A62CEA324021137035A39115DC /* ftautoh.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CEE21D31B9461DB729129E357679163 /* F3DEX2ACCLAIM.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A57A0F7B6EFB30D8800FFBC3A0FD7A /* F3DEX2ACCLAIM.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9CF692BD464C27BA082BE1DCA7A9D45C /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E6736AEAB28DFE73C9BD1605B0863D /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D0FD356D97CD52D34960911A8298298 /* NstBoardCamerica.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D6D2B3F2E952A338D1128CD5D724862D /* NstBoardCamerica.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D37E2CB2398BE97697FE7719B77FFB2 /* NstBoardJalecoJf16.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0E3FADE2512B784AFCE2DFE09B9ECE6D /* NstBoardJalecoJf16.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D7F1DA302776DB06BB6428657036442 /* NstBase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 116918731DA7188F3EA9C2361B3A4FE5 /* NstBase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9DCA03AF7E63F208B7C61C8EE8B41AF4 /* RecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 638C5EE8459794EA00003C69343C4289 /* RecordOperation.swift */; }; - 9DE53B2F87039E798D26BE8696AEA4CF /* GBCCheat.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B149C977427CB869997B3FA4DF71F80 /* GBCCheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E31B03247471F3BD90655550384FDA2 /* SoundFileWriter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D9BE76A56BCD866A71FD891640A0940C /* SoundFileWriter.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E35E296D32157150508356B61DBFC67 /* ttunpat.h in Headers */ = {isa = PBXBuildFile; fileRef = F7DA08D829FA42A2C69604D3B70D3967 /* ttunpat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E37FB7914BDFC8D3294D18B7942AC8C /* NstBoardBmc72in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 612BF149D2E48CC9950BEEB2FC03B60F /* NstBoardBmc72in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E565B2CEB1389604BE252478801A1E5 /* defined_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 85DD22654F689D365C8835281CEB8F13 /* defined_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E94A3F6B300F60BE8D7C36F49EADC25 /* NstBoardBandaiAerobicsStudio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 524FD8CB9B96FEC42DEBFF4F6485E0C0 /* NstBoardBandaiAerobicsStudio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EB8EFEEEEE29B8A08B90A5968DD254D /* Rect.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8837E67069B10F42A5536F61DD3DD225 /* Rect.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EBD2981D2C95F47A2CC47ABE9DF341E /* S2DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 190E396AF2951D7E331A9B5B8276EAF4 /* S2DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EE2A24548BFD782A76FA331067BA3FC /* svcid.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C7AE6607FC679EA4767E48ADD80B0C /* svcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EF9EFE4000A70AE76A75376E6E95870 /* ftlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A2F89C405DCAF9349F68843D8672A87 /* ftlist.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9F133B0D521E411CDF94B9631A73D275 /* NstBoardTxcPoliceman.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B24B02D04D4F08EFCBE0B8D8503C30E8 /* NstBoardTxcPoliceman.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9FCADB0CF0AFBD4F3F0ABFED93FB82A1 /* SyncCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A542F20E7647EA7B36CB7C0565E279A /* SyncCoordinator.swift */; }; - 9FE64AB67B279FBE1047117752075A4E /* UIResponder+FirstResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C912B946BDF259EF135410F6A5237EA /* UIResponder+FirstResponder.swift */; }; - 9FEFB36A938CC33AAA28777285A2D6D3 /* VI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C46940B6EC0F54D23A4A771525673E4 /* VI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A0120835F1172F64AFA98DDB669167CE /* scmrev.h in Headers */ = {isa = PBXBuildFile; fileRef = 04B1ECC7EA8EA09AD63D4DE11E338332 /* scmrev.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A086B96EE66A0AF59654CB9D50DAABD7 /* NstBoardKonamiVrc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 261762E049C9653D1341EB811E42E338 /* NstBoardKonamiVrc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A10612911C9EA6DD14FB853233F82007 /* files.h in Headers */ = {isa = PBXBuildFile; fileRef = 269F29EF8D9E4E7D9A20913AFBB84BA9 /* files.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A131157FDDCA174BD8C7F663486E890A /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = 931FABEC117CE8C4B00CF9281008FAC6 /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A152CC24E7DF395160707521223E96F6 /* agbprint.h in Headers */ = {isa = PBXBuildFile; fileRef = F5CBD60FC0FF5C423C847C962880F76C /* agbprint.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1544544E0BC9AB6958029C77298E2D9 /* GBASoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = B4344D31A95675A878EB6C78C263B86A /* GBASoundDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1AE18411CA8A80C75D039119DED8CFE /* NstBoardMmc2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 23EDB5113AECD1DF0B90F3E16139D1D6 /* NstBoardMmc2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A1C4AE3CF237BFD611EBF5E86DD2C09E /* FIRFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 77934694A34ABBAE5B4157E7F028F45C /* FIRFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1FDFF2AD1EBC97A47F35961A2C71109 /* F3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3522EC7585D646CAA3673DB9D55FB21 /* F3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A211E6013CB96A83529583B085B6B370 /* NstBoardUnlCc21.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EC91456BE16B5A70B8034583667C1DB2 /* NstBoardUnlCc21.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D0FD356D97CD52D34960911A8298298 /* NstBoardCamerica.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4FD9C6FE532DA80FB560837003DB3F08 /* NstBoardCamerica.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D37E2CB2398BE97697FE7719B77FFB2 /* NstBoardJalecoJf16.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 50D957B423EE92BE50F11FBFBB2F7951 /* NstBoardJalecoJf16.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D7F1DA302776DB06BB6428657036442 /* NstBase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D54FDB83A8048619B7C58407A8302609 /* NstBase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9DCA03AF7E63F208B7C61C8EE8B41AF4 /* RecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87039339C5C272F9501B594DB154C3A4 /* RecordOperation.swift */; }; + 9DE53B2F87039E798D26BE8696AEA4CF /* GBCCheat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A71F2279611250A8163A19A68C100B6 /* GBCCheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E31B03247471F3BD90655550384FDA2 /* SoundFileWriter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 07E188F1C0F1D9982F9D7E2B4BF63A77 /* SoundFileWriter.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E35E296D32157150508356B61DBFC67 /* ttunpat.h in Headers */ = {isa = PBXBuildFile; fileRef = E1210995B1881C4C2239A38E329170E0 /* ttunpat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E37FB7914BDFC8D3294D18B7942AC8C /* NstBoardBmc72in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E34BFCB88D5BE82E1084754358F46958 /* NstBoardBmc72in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E565B2CEB1389604BE252478801A1E5 /* defined_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = A3901E50A71458B91C7F98B9202F5AA2 /* defined_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E94A3F6B300F60BE8D7C36F49EADC25 /* NstBoardBandaiAerobicsStudio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7E503925F21124A66FEEC07D1E779631 /* NstBoardBandaiAerobicsStudio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EB8EFEEEEE29B8A08B90A5968DD254D /* Rect.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 867EE1D22093A5E26C0604E46F43DE5B /* Rect.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EBD2981D2C95F47A2CC47ABE9DF341E /* S2DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4333506EF373E1D2841A18039C8379 /* S2DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EE2A24548BFD782A76FA331067BA3FC /* svcid.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E9C9E58EFFC6846E01B3B75A4595B21 /* svcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9EF9EFE4000A70AE76A75376E6E95870 /* ftlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FF5B91527E584477B10719112BEA1B6 /* ftlist.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9F133B0D521E411CDF94B9631A73D275 /* NstBoardTxcPoliceman.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7A09B431279F323517C8EF6B08DBA5D0 /* NstBoardTxcPoliceman.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9FCADB0CF0AFBD4F3F0ABFED93FB82A1 /* SyncCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0D8C051806BA9A8817550D4A2D2B252 /* SyncCoordinator.swift */; }; + 9FE64AB67B279FBE1047117752075A4E /* UIResponder+FirstResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72F6FF7C88B7AD41EC3870C4DE94973E /* UIResponder+FirstResponder.swift */; }; + 9FEFB36A938CC33AAA28777285A2D6D3 /* VI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEF8E98B3647EDE8533C51A14A31D99F /* VI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A0120835F1172F64AFA98DDB669167CE /* scmrev.h in Headers */ = {isa = PBXBuildFile; fileRef = 42FC26095E2CF8823B3A9B88453B3901 /* scmrev.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A086B96EE66A0AF59654CB9D50DAABD7 /* NstBoardKonamiVrc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A6A4DBE5C518B74416FB8A4EB9D967ED /* NstBoardKonamiVrc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A10612911C9EA6DD14FB853233F82007 /* files.h in Headers */ = {isa = PBXBuildFile; fileRef = B5D0F2204128CF6B384D5E2619FCFA0F /* files.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A131157FDDCA174BD8C7F663486E890A /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7DDDE511D2FFCEBAC65BD6D2225FF /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A152CC24E7DF395160707521223E96F6 /* agbprint.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E001A6FF56533ACBC3F6E950D52560 /* agbprint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1544544E0BC9AB6958029C77298E2D9 /* GBASoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = F058115223339AF17A2DA555639642A1 /* GBASoundDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1AE18411CA8A80C75D039119DED8CFE /* NstBoardMmc2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 13B7FFD0C9DAEC7BACA3614D558B1227 /* NstBoardMmc2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A1C4AE3CF237BFD611EBF5E86DD2C09E /* FIRFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 77999DE4BEEF8B78706A76C68622603E /* FIRFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1FDFF2AD1EBC97A47F35961A2C71109 /* F3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E1156572BD531C3316B572C296BCF01 /* F3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A211E6013CB96A83529583B085B6B370 /* NstBoardUnlCc21.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7C5579DAAF54EF825979925DDD065815 /* NstBoardUnlCc21.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A212566BC13F73E1F56D4584670E0D22 /* GTLRUploadParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = AE757EB203915A0BFBB4F3FA8E8F9A77 /* GTLRUploadParameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A22D9092E39C894919D1BAB027CDF0D5 /* GBASoundDriver.mm in Sources */ = {isa = PBXBuildFile; fileRef = FB0C2D29320490068714E3A307C890F3 /* GBASoundDriver.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A26E82669EC4D325656E6B8EA01E2D01 /* Drawable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A51106A45BF114A687DB7DB755B0D25D /* Drawable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A275BEEC646144350744D504FBFEA961 /* ControllerSkinTraits.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47EEB210C3F983E3F97BA5C90AEAE80C /* ControllerSkinTraits.swift */; }; - A2A854D06578D5120F0B8474EA0073C4 /* NstInpFamilyTrainer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 76A9709715FDD329C46A920FFC9D9209 /* NstInpFamilyTrainer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A22D9092E39C894919D1BAB027CDF0D5 /* GBASoundDriver.mm in Sources */ = {isa = PBXBuildFile; fileRef = D549AA5A39E931E9F3F53DC8DC0F8E2A /* GBASoundDriver.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A26E82669EC4D325656E6B8EA01E2D01 /* Drawable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8A731410071DE76AAF5149412AEC57ED /* Drawable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A275BEEC646144350744D504FBFEA961 /* ControllerSkinTraits.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CFE24E78C00465C933205823C6591C2 /* ControllerSkinTraits.swift */; }; + A2A854D06578D5120F0B8474EA0073C4 /* NstInpFamilyTrainer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4A30748039EF71CC3D3BC9D7293442A7 /* NstInpFamilyTrainer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A2ADFBA34707939EDDDA8DDFCBAF4500 /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = B178CE5FC4BC30D17B77BB64F1C9D912 /* GTMNSDictionary+URLArguments.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A2CF5336CF94746DA1F92A04941AF2C4 /* NSFileManager+URLs.m in Sources */ = {isa = PBXBuildFile; fileRef = 707293F0FD9EBD1A0C126D2597D63C1E /* NSFileManager+URLs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A2E5ECADA6FD38BB0829678577875EC3 /* OpenGLESProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E80277EFECC528835574F12FD313326 /* OpenGLESProcessor.swift */; }; - A2FBF339AF1E1FDD65B6EF4158DE51AF /* workqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC8A38B9BE9E17E5E15E98583898082 /* workqueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A3057CCA3036D83546A8CD03B63F433D /* NstInpCrazyClimber.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EE739F4111402555B8330C94DC934B22 /* NstInpCrazyClimber.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A32EDE9B3422EEA2F7F3C931A32A8AD7 /* NstBoardBmcSuperHiK4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83DEFE6EC2B2AF94239CCEA8D9F36C59 /* NstBoardBmcSuperHiK4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A34924ED816441F1DFC1ECEDFFE962DC /* RSTNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B430FF2043C1D359980E0C002B66913 /* RSTNavigationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A35CEA97C5A89CA2AD61EA4049407002 /* NonCopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56359FB46FDD3587DC048FBE0BC7E9E1 /* NonCopyable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A369A8888AA50BDBB82B59E1D48134D4 /* NstBoardBmcT262.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9106F296AA7B0EA373050E2222387718 /* NstBoardBmcT262.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A432DBBFA6CF4F59033CEE3B63EFE557 /* m64p_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A02908B90AD54C8C621F1E9A36CB18 /* m64p_plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A45581F3A08C2C1C52E7988FF7BDE252 /* osal_files.h in Headers */ = {isa = PBXBuildFile; fileRef = 6487DFB243D65653DF7438DCBA67EB91 /* osal_files.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A45F47289CB2ED953F6CD191275DB3F2 /* TextureFilters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6AA8B9D838C07E38061D4BB84F3D8B62 /* TextureFilters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A48911932ED356D95D7CB9A9A8000E40 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = D0869A5AC273020F28A83BEFF3F355D3 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A493B150D94171B74C1FF5E7933FA3F1 /* elf.h in Headers */ = {isa = PBXBuildFile; fileRef = 86059796C87D909C7319742A6AD185D9 /* elf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A495BA6FF010BD3CC899768E09C49CDC /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = 7BBB06A85B5F1D7854ECDB59E80B5B70 /* pngpread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A4AE6BE50FE7D09FA862A51966B680C7 /* NstZlib.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 72EC1BB681A1EE53852B18D9C14B635B /* NstZlib.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A2CF5336CF94746DA1F92A04941AF2C4 /* NSFileManager+URLs.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CD097CFE02D8169FF5FC3721CC0AEFF /* NSFileManager+URLs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A2E5ECADA6FD38BB0829678577875EC3 /* OpenGLESProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7BA8D8D1E9E2CDAB97C30A5A502156 /* OpenGLESProcessor.swift */; }; + A2FBF339AF1E1FDD65B6EF4158DE51AF /* workqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D398DE570B23AC84F4DA4086B43F5E /* workqueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A3057CCA3036D83546A8CD03B63F433D /* NstInpCrazyClimber.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8A65C030A8CB605B689A888D7DED867A /* NstInpCrazyClimber.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A32EDE9B3422EEA2F7F3C931A32A8AD7 /* NstBoardBmcSuperHiK4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 253F6A4732CDD605581DABD45CD0B43F /* NstBoardBmcSuperHiK4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A34924ED816441F1DFC1ECEDFFE962DC /* RSTNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D0F4C76483E71C2F01319F14942730 /* RSTNavigationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A35CEA97C5A89CA2AD61EA4049407002 /* NonCopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB813FC7BFFACFEAB984E045534C0DCC /* NonCopyable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A369A8888AA50BDBB82B59E1D48134D4 /* NstBoardBmcT262.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8A25DA0D46D9C9C287A50225828AB7C6 /* NstBoardBmcT262.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A432DBBFA6CF4F59033CEE3B63EFE557 /* m64p_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DB69BA777DA2D7FE96274A0B4EB4BB5 /* m64p_plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A45581F3A08C2C1C52E7988FF7BDE252 /* osal_files.h in Headers */ = {isa = PBXBuildFile; fileRef = 8346ECC5A3AFD14F0746FD2871ECDA43 /* osal_files.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A45F47289CB2ED953F6CD191275DB3F2 /* TextureFilters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D993982D3AADF41E465498E329FEBD9B /* TextureFilters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A48911932ED356D95D7CB9A9A8000E40 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = C53D9591F4B5C55AE48D566EAEA25FD1 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A493B150D94171B74C1FF5E7933FA3F1 /* elf.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D345212AEDE1FC050CD40AF657590D /* elf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A495BA6FF010BD3CC899768E09C49CDC /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = 3E352201B46848355CB326FC4BF1FF47 /* pngpread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A4AE6BE50FE7D09FA862A51966B680C7 /* NstZlib.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347FF7946245CC6482030C5BCDAF89D0 /* NstZlib.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A4CDAB56ED7EA775F1A4AF9BC6C5E712 /* GTMReadMonitorInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D575B29FCC81FA8F72EC3CC12A581A5 /* GTMReadMonitorInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A4E7AF6547FDAE1BCA941C5C55972386 /* NstBoardBtlTobidaseDaisakusen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA1E7066C788AF166D3819EA304B9C30 /* NstBoardBtlTobidaseDaisakusen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A4FFC4C6F5F2FBF2A4714D4E98634935 /* opengl_ColorBufferReaderWithReadPixels.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A679691AAA47A28EF1E1E5A6BA88E4 /* opengl_ColorBufferReaderWithReadPixels.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A5037807FB7A1D0D4B693C55BF20B762 /* GBCCheat.m in Sources */ = {isa = PBXBuildFile; fileRef = 03B446FCDA488875B28D8F29A5A054B5 /* GBCCheat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A4E7AF6547FDAE1BCA941C5C55972386 /* NstBoardBtlTobidaseDaisakusen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 056855D6563613F5941E73E167520BEE /* NstBoardBtlTobidaseDaisakusen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A4FFC4C6F5F2FBF2A4714D4E98634935 /* opengl_ColorBufferReaderWithReadPixels.h in Headers */ = {isa = PBXBuildFile; fileRef = A463F67D31F18A3E8817C9388BDDEADD /* opengl_ColorBufferReaderWithReadPixels.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A5037807FB7A1D0D4B693C55BF20B762 /* GBCCheat.m in Sources */ = {isa = PBXBuildFile; fileRef = 66FC5067060EC57040E657A1F216A5E7 /* GBCCheat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A5651EF221F23607DCC7F0AFEEC5CA8E /* SharingRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8888D8043BC735B8831AE2FB72C5DCE4 /* SharingRoutes.swift */; }; - A5726C481C20F8D8E40DCC9AF9D0CF34 /* fttrigon.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DF7E6D80CBC58876AC10154A9D6A141 /* fttrigon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A5A600842203DF1E3A7A326C8C22C683 /* ConvexShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3676C1EE5D5DE26D9C445B36939E922C /* ConvexShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A5A84A4DD8A5E89E5AB0C7733B613CE4 /* NstAssert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 380AB1A1F7D98ACA91271E7BD163EEB5 /* NstAssert.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A5F30E43D79777F683DA8086E856314C /* osal_files_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 66814AC3B3C466A4870833B7CC41BE34 /* osal_files_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A5726C481C20F8D8E40DCC9AF9D0CF34 /* fttrigon.h in Headers */ = {isa = PBXBuildFile; fileRef = F5AFC909F4746C3FA127FCDAAC1D471C /* fttrigon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A5A600842203DF1E3A7A326C8C22C683 /* ConvexShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3DA525BCCFDCF518525E5C7B8B11DBBA /* ConvexShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A5A84A4DD8A5E89E5AB0C7733B613CE4 /* NstAssert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 68472F20D32A525A0FA8C6D283E05655 /* NstAssert.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A5F30E43D79777F683DA8086E856314C /* osal_files_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33FF8A61B13EE6F6CE800CB771D90EAC /* osal_files_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A6173C5A991255ED8E9DF5B7A8B26CA7 /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA1F428AFD84BF440CD3E1D14DE8168 /* GTMSessionFetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A6257B7E52832880771B2BB200A4C1D8 /* interrupter.h in Headers */ = {isa = PBXBuildFile; fileRef = 92D57715B2185B75E5396245FFBAE48E /* interrupter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A670352ECAEE4E7A1DF6A8D8A9BD2220 /* Combiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D32B6BBDAE1D1E3EAA27A408B03C8A6 /* Combiner.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A69AA86EDA31C24B28D06718893F218C /* winlnxdefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 719867C7F45388063CEC3252848F288D /* winlnxdefs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A6B315E94A6CEF669095A376A8B78BF0 /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 74F7F494A747DB09275C9A959DC103CC /* pngwrite.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A6DF3C1F361F1F1CE700FA15AE09FE32 /* F5Rogue.h in Headers */ = {isa = PBXBuildFile; fileRef = F4FF030A171DC28CB5454BA2D75DDCDA /* F5Rogue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A70E823723F2AE05B1BAFE430143EE81 /* ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = B7B0EC3A43195D2E933C1849423260A4 /* ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A71F672BACBEE53FD4851582F9A71450 /* RecordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FFF2C8BA989A2993AF7181B8C71DCEA /* RecordController.swift */; }; - A72CE00953BEAC5C78106460D334E3F6 /* CheatSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AEA4696FF630389674F9A479B343F8E /* CheatSearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A72E4695B60D35E8D8BFAA0FF9051520 /* OpenGL.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 112CF20D5FD3FC49E46B68E39C3831B1 /* OpenGL.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A7367943BD56320D9A2A6192A8A3D770 /* N64.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAF3FD6676FB908497318168CA250E29 /* N64.swift */; }; - A7610ADD4D3B95C8ECDCF6ED0324632C /* RSTDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 15D53B5540090674367F2034C42E0C1C /* RSTDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A78C159B2F3CA3444E738F57CCB464A5 /* Dialogs.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EE59BD5CCE08A1257054978F5F52E22 /* Dialogs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A7B6493DBC037E2F8C5BCDDE7EF3121A /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = E07E6F8E20C9B8DBDB6086A2080574B0 /* Standard.deltaskin */; }; - A7EB0D099CBAA6C310A263AC395DEEF4 /* GBADeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 31C592DC38E9487D52E30F0FFC654460 /* GBADeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A7EF2BC7C091E4282D581EBF80E9EFEC /* RSTFetchedResultsDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E69FA508FAFD1015760B7C3395B4805 /* RSTFetchedResultsDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A7F0206CCDED3DF4FC1C456649013B1F /* RenderStates.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A922DEE8CDD64405F21CFA9916068DA8 /* RenderStates.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A8551A96FDD516BD37037B818AE7BC7C /* GBCDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 26D67EB75107A8E731DFD2A5B2EC86F0 /* GBCDeltaCore-dummy.m */; }; - A87DA7AA81BB75957343DA7D33B3D148 /* NstBoardBmc22Games.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DDDBA9705C6D9A716771C1B745289787 /* NstBoardBmc22Games.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A8AA31971602F635B0B2F46C6BB1F07C /* spc7110.h in Headers */ = {isa = PBXBuildFile; fileRef = A05A1526F5B055B18305FA115EF3E9A1 /* spc7110.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A8F08EEE11D3748876598813DF8BDA17 /* NstBoardSuperGameBoogerman.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2A9BAD126F66B1D6249DC44FE38555BB /* NstBoardSuperGameBoogerman.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A6257B7E52832880771B2BB200A4C1D8 /* interrupter.h in Headers */ = {isa = PBXBuildFile; fileRef = FEE4DFCA2E800BD0E79D7425672042CC /* interrupter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A670352ECAEE4E7A1DF6A8D8A9BD2220 /* Combiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 608FE25E87FF01D7345789C49881295A /* Combiner.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A69AA86EDA31C24B28D06718893F218C /* winlnxdefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC3502E8ED4D5961B6483AA4C0E4E65 /* winlnxdefs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A6B315E94A6CEF669095A376A8B78BF0 /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 58B3B095F9C98257ED03FF6BA75F6CC6 /* pngwrite.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A6DF3C1F361F1F1CE700FA15AE09FE32 /* F5Rogue.h in Headers */ = {isa = PBXBuildFile; fileRef = FC8BE3C9EFF69072F0F385CD784639A2 /* F5Rogue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A70E823723F2AE05B1BAFE430143EE81 /* ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B344A1563D4DD7818E0D6A1BC8076EE /* ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A71F672BACBEE53FD4851582F9A71450 /* RecordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8058D48F8CF8A2D21FE0EEF65FE6BFF6 /* RecordController.swift */; }; + A72CE00953BEAC5C78106460D334E3F6 /* CheatSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4BF92FD0BDB1CA2D2C3D91B8F13226 /* CheatSearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A72E4695B60D35E8D8BFAA0FF9051520 /* OpenGL.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2597239B8799F016700A89F4C2178031 /* OpenGL.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A7367943BD56320D9A2A6192A8A3D770 /* N64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47967D3CF2D6A2095CD6438231F82260 /* N64.swift */; }; + A7610ADD4D3B95C8ECDCF6ED0324632C /* RSTDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DE36CB10C4A8DCF72BE7B88CB003698 /* RSTDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A78C159B2F3CA3444E738F57CCB464A5 /* Dialogs.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFD819549B79EF6F6533D7333213048 /* Dialogs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7B6493DBC037E2F8C5BCDDE7EF3121A /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 676903B714C5F565B51ED126D715A4B4 /* Standard.deltaskin */; }; + A7EB0D099CBAA6C310A263AC395DEEF4 /* GBADeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C2DFC00C454B4A6E486685A3B85653 /* GBADeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7EF2BC7C091E4282D581EBF80E9EFEC /* RSTFetchedResultsDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3354FC02362F1AAC06FABFDAB6FC1E92 /* RSTFetchedResultsDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A7F0206CCDED3DF4FC1C456649013B1F /* RenderStates.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9A28F307BB7A2BFFBDABD41D7562DBF9 /* RenderStates.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A8551A96FDD516BD37037B818AE7BC7C /* GBCDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C274755E3C4177DD8B90B0B96F055CDE /* GBCDeltaCore-dummy.m */; }; + A87DA7AA81BB75957343DA7D33B3D148 /* NstBoardBmc22Games.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56CCBC3C2C82EBF029DCEE7C08413CD2 /* NstBoardBmc22Games.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A8AA31971602F635B0B2F46C6BB1F07C /* spc7110.h in Headers */ = {isa = PBXBuildFile; fileRef = EAC8946446770DB79B1DE4821B8C753F /* spc7110.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A8F08EEE11D3748876598813DF8BDA17 /* NstBoardSuperGameBoogerman.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0B34BDCE67F7297CE2E1F3FBE65E622C /* NstBoardSuperGameBoogerman.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A902E94BC79F6FA99E9BB0300EA305B3 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2B5384F92FD40CB28071138A07D6BBC /* CustomFunctions.swift */; }; - A960256FE7F887C3B4128D1F696E2D90 /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = C46B41859C836F92F71776FC13FD640A /* pngrtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A978E1A561722F15D4C545AEA3FB3001 /* Clock.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52CF632514D6A787809AE4E842F41C5E /* Clock.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A9AEDDC1D58C38A7CC8DC9F486965D56 /* Sram.h in Headers */ = {isa = PBXBuildFile; fileRef = A1F4F491B0BC25A23355012F46D89DAF /* Sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A9B698FBFC78110FB1851447D93A2CD9 /* F3DAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 026AA711C2DD33D8830708741F80F0D5 /* F3DAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A9F981EDC073C433341A5F4025D46216 /* DriveService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00982E0E1F8B1E95963CDA563EA3D799 /* DriveService+Records.swift */; }; + A960256FE7F887C3B4128D1F696E2D90 /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 3626FD0512609CFE865D492929315B1E /* pngrtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A978E1A561722F15D4C545AEA3FB3001 /* Clock.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 88C14FED0FDEBE31AAA6DE08EFA9B83D /* Clock.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A9AEDDC1D58C38A7CC8DC9F486965D56 /* Sram.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E98AF28DEE4396FAC50A659A97D1F7 /* Sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9B698FBFC78110FB1851447D93A2CD9 /* F3DAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 5874E00381FC42362866EFFB712A5697 /* F3DAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A9F981EDC073C433341A5F4025D46216 /* DriveService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E4DCE2A6F12D890D38A83939413D307 /* DriveService+Records.swift */; }; AA3241DCAEBD138A49F1A1B79CFE3F40 /* BaseTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFADC4424D377B458AE08BE73A8876B0 /* BaseTeam.swift */; }; - AA3339D66B1B8D9E4FDA3A7B1DD4EE4E /* RSTOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = E194EEE9A16263CD0FDB5BFF52765777 /* RSTOperationQueue.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AA5B1AEF7BFFC092A1A177F7B83F5EF5 /* recomp_types.h in Headers */ = {isa = PBXBuildFile; fileRef = B95AF3A3928659911B5866BCB18F168F /* recomp_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AA615360C6D1A302957FBF37E2684533 /* F3DAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E2E93BB84159ECED9476CD991992C8 /* F3DAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AB123914A6198728826EAF5A6AB03906 /* lirc.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E38F730D5EC5C9EF41311D289592151 /* lirc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB1E3DEF678EB7000A95D5337728318D /* SNESTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 087E76CC675F0056172F689E3EB38F3D /* SNESTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AB558010971A1205D40B5288EA916AF8 /* NstBoardWaixingSh2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B595CA4CE436B20EE775744443119153 /* NstBoardWaixingSh2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - ABA544F4FB1E7074FD3DC41616D225E0 /* TexrectDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FD06664B1E05662499252D81EE4BDD5 /* TexrectDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ABCF35B61F0EAC2A3D2328B942D32BD8 /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F22453696F4302900B9871992F9215 /* util.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ABDDB6C221DFAE4AAA785817F3446E6B /* NstBoardBmcY2k64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 739C9A35C56A321A5F6DEC9276C9A451 /* NstBoardBmcY2k64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AA3339D66B1B8D9E4FDA3A7B1DD4EE4E /* RSTOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D3D57B0A12B1AA1AEA896FD02062F18D /* RSTOperationQueue.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AA5B1AEF7BFFC092A1A177F7B83F5EF5 /* recomp_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B399358B256320203E685F8FC809959 /* recomp_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA615360C6D1A302957FBF37E2684533 /* F3DAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 535D5DA336441168AC8B025DD167FF5A /* F3DAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB123914A6198728826EAF5A6AB03906 /* lirc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C95081CDA9074D9730BD45D716C934D /* lirc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AB1E3DEF678EB7000A95D5337728318D /* SNESTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = FE6F693BD8934FF6A88E20FF29157CFF /* SNESTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB558010971A1205D40B5288EA916AF8 /* NstBoardWaixingSh2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CA9FEB0150AF6AC5451F53D2F5EF6259 /* NstBoardWaixingSh2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ABA544F4FB1E7074FD3DC41616D225E0 /* TexrectDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C0B90253B6F200AB5E78C107875E7B /* TexrectDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABCF35B61F0EAC2A3D2328B942D32BD8 /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B9715EFF4CB742F4153FF865BFAE0B /* util.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ABDDB6C221DFAE4AAA785817F3446E6B /* NstBoardBmcY2k64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DF4AAA0AF5429BDB84A1B9464A02940C /* NstBoardBmcY2k64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; AC4C2943071E6F4EFE6F3CDED9F75289 /* CustomTasks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37497E9D4A4AD3D7DBDCBD661F3B23B8 /* CustomTasks.swift */; }; - AC5786BFBB7B51AF3B5D003E3F943335 /* lua-engine.h in Headers */ = {isa = PBXBuildFile; fileRef = 41BA2F4E4D2870FCE74225CB5BAA4CE5 /* lua-engine.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC5C7C37725492D17220C640C6B10B47 /* minkeeper.h in Headers */ = {isa = PBXBuildFile; fileRef = BDBC8749B7239FFE93E87463C75D3321 /* minkeeper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC7F07736D60C170ADF5347103C06706 /* NstApiMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D600C41025FD98A039F6974280BC9059 /* NstApiMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - AC809FC49956C0CEF8D81ECB57D34E1E /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = AA827D717ECF37F1C8268040AAFBAE46 /* pngrutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AC88AE5A5EF6C2D974226145DF29720B /* NstBoardSachenTcu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8E110C092AEF72EDB7C33791CA0BCBEF /* NstBoardSachenTcu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - ACA04F1A522EC18A1D9CF1A1A0ECE722 /* interruptrequester.h in Headers */ = {isa = PBXBuildFile; fileRef = 0017998E6980B0ABDB2A24D94074549C /* interruptrequester.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACB848453661249CFEDE957E0BC5AFCF /* RSTBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 866D05F9B3FED97151B776FED3394283 /* RSTBlockOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ACE261F0845AE7032EE10EED8352D14A /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = D4E18A027874D0E4F2D09A1492E7FC02 /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC5786BFBB7B51AF3B5D003E3F943335 /* lua-engine.h in Headers */ = {isa = PBXBuildFile; fileRef = A14075A6CB82B5B0A2CF0B5F3B60E096 /* lua-engine.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC5C7C37725492D17220C640C6B10B47 /* minkeeper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E82D9E0415F24E9559D27759ACC7218 /* minkeeper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AC7F07736D60C170ADF5347103C06706 /* NstApiMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 86CEE581D78B9E9138136F67D7ADF345 /* NstApiMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AC809FC49956C0CEF8D81ECB57D34E1E /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = B9B009A6587C3A1C6BB0A1C024A18D38 /* pngrutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AC88AE5A5EF6C2D974226145DF29720B /* NstBoardSachenTcu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CE7A2A4BC98670AD316ABDBE9EC069B7 /* NstBoardSachenTcu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ACA04F1A522EC18A1D9CF1A1A0ECE722 /* interruptrequester.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E0A94CCCC0D97F634E74FA3103B29F1 /* interruptrequester.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACB848453661249CFEDE957E0BC5AFCF /* RSTBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 76ACCEF09480010D5EA9E6D031D289AC /* RSTBlockOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ACE261F0845AE7032EE10EED8352D14A /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D6A333E30962F5423F826B733E702F /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; ACEE8B31B20BE08B7468DB090AC3A159 /* GTLRDriveObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B22551CE150F70C85739F2994DE4F75 /* GTLRDriveObjects.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACFDB59EFB14D11FDAA6C885CF2ADB9E /* dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = D425AE3E5ED390C5A8846F791DD166FE /* dictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACFDB59EFB14D11FDAA6C885CF2ADB9E /* dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 580A41D76B6A843244232FFC7D187FF1 /* dictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; AD6656B872B98CDE4BAC39B6E10CF595 /* GTMMIMEDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 0753A2F2127F76F50CD3A7E3FCDF1F60 /* GTMMIMEDocument.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD77BEE717454B68BF56D30CBAAEB761 /* spc7110dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 539542F40794BD9C9D5856536A7CA2EC /* spc7110dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD7D53389EE6FBD882ED47A69EA528BC /* retro_common_api.h in Headers */ = {isa = PBXBuildFile; fileRef = EE4ED05DEFBED1E0F613E2EEE0E8500C /* retro_common_api.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD77BEE717454B68BF56D30CBAAEB761 /* spc7110dec.h in Headers */ = {isa = PBXBuildFile; fileRef = F10C56C1DD0DBC1297C6FA4D55986B04 /* spc7110dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD7D53389EE6FBD882ED47A69EA528BC /* retro_common_api.h in Headers */ = {isa = PBXBuildFile; fileRef = B636371B292E5B16402AE89C9B512E16 /* retro_common_api.h */; settings = {ATTRIBUTES = (Project, ); }; }; AD95435739025FAAFEF2B5911CCAA4B7 /* StoneValidators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E4A59F776B62FE5D7D647BF19F07F8E /* StoneValidators.swift */; }; - AD9ED143C77CB1599C53004811B576C6 /* ucodes.h in Headers */ = {isa = PBXBuildFile; fileRef = D1AF2289C82F924BD674E01C203E7B6F /* ucodes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ADBA2EA8F4CF15587337BCDC2F645BB0 /* retro_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = A14800DC259C96954AE16116EC0E310D /* retro_assert.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE1A359FB304361E950FBAFB413D972B /* ZSort.h in Headers */ = {isa = PBXBuildFile; fileRef = D2CD9D7750784D7D9E924E0E0357EC76 /* ZSort.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE2B65C3F228FA7D15103DAB814EC3BE /* exprNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 521E061C02DD904E7838383DE2E1B0CF /* exprNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE769713E049B84B57453032779D836E /* ftdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 8127AEC9343CDF5FA184EEAB2A4E598F /* ftdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AEAF60DA9CCFF57F8FBCEDFFFC09436E /* ConflictRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D47FC12A026C951220B49A834F51276 /* ConflictRecordOperation.swift */; }; - AEBBDC54DB66E473CA4D2CA762AD90A1 /* svwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = BAB2153E188978ED7096999E36B0E1D7 /* svwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD9ED143C77CB1599C53004811B576C6 /* ucodes.h in Headers */ = {isa = PBXBuildFile; fileRef = EF0B5A83CEA7719FDAE73CD9B61BF813 /* ucodes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ADBA2EA8F4CF15587337BCDC2F645BB0 /* retro_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF80C228030940A34A433995ABD6250 /* retro_assert.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE1A359FB304361E950FBAFB413D972B /* ZSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F80CF610BCA1225E6F34A2505B12C005 /* ZSort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE2B65C3F228FA7D15103DAB814EC3BE /* exprNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F88144124FBA971D0634C19257E4725C /* exprNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE769713E049B84B57453032779D836E /* ftdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C045A31E9EBE0F4CFBE198690BA4782 /* ftdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AEAF60DA9CCFF57F8FBCEDFFFC09436E /* ConflictRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE3F53289236C150F14F4B85B876D904 /* ConflictRecordOperation.swift */; }; + AEBBDC54DB66E473CA4D2CA762AD90A1 /* svwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA42FF0995A2ECDE8654C66A329FEEA /* svwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; AECB1619CFCEF7A7234852F00CB0C5C0 /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = D9E62A3E87A152D8A5A4747A0E88F317 /* SMCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AF02EA0DAD3FAC51CB5E859F81786EC6 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD38673C0296A73B42D147E647C1937 /* SessionDelegate.swift */; }; - AF0DCE9655B9FD35BC9D0A18E30C0A57 /* alist_nead.c in Sources */ = {isa = PBXBuildFile; fileRef = 5844DE373A9FE031984BEA797C1C7A39 /* alist_nead.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AF384C3F516776514598AB608BF28CEA /* RSTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 43449379BD1A98A6E5C5169A5F74E9AA /* RSTError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AF57DF3FC4B0368E92B51C386ADE38CB /* NstInpZapper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C906D0B80F5FF86C1D338A347708D05 /* NstInpZapper.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - AF71438F7AEA2FDF0A4B8132FC6ADB97 /* NstBoardWaixingSgz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3BFF77F72AE6211AD9D42FD2E18375EF /* NstBoardWaixingSgz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - AF75C6505DD091382DDF3792EB91B958 /* GLideN64_mupenplus.h in Headers */ = {isa = PBXBuildFile; fileRef = C704B47C4D3D001EC83BB8F7C1E8D2E5 /* GLideN64_mupenplus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF0DCE9655B9FD35BC9D0A18E30C0A57 /* alist_nead.c in Sources */ = {isa = PBXBuildFile; fileRef = BBF2CF6F66F587AFDA21E30888FC7210 /* alist_nead.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF384C3F516776514598AB608BF28CEA /* RSTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B3F0409CEA697951ADECD54AABFC17 /* RSTError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AF3B145662403775AE286362BD64CE15 /* SPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 00ECD1D300178CB98731BDB344274AF6 /* SPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF57DF3FC4B0368E92B51C386ADE38CB /* NstInpZapper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95DAC95CF90CC293BB4C45375EC16E36 /* NstInpZapper.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AF71438F7AEA2FDF0A4B8132FC6ADB97 /* NstBoardWaixingSgz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8C90F98584A8B4B3D48149088FD57C77 /* NstBoardWaixingSgz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AF75C6505DD091382DDF3792EB91B958 /* GLideN64_mupenplus.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F557085D0365AECB4077B82DE76E12 /* GLideN64_mupenplus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AFB0BE8A36022E71E1739AFFA0DD2DD5 /* ARCodeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 72866AD3D95B81BC911D7A67CEBC69CB /* ARCodeList.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AFD5F72E1203590BAF3FF051AC1D4A1B /* GTLRDriveService.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EB7FA5DB62956C49A473DF02AE5456 /* GTLRDriveService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AFD96D371E8D60B2143D73E312E24BD9 /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA67DD1AC07C6365F72FCAE6272760D2 /* Entry.swift */; }; - B011E9394F81876D07949F6C4247ECA0 /* SoundFileFactory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A03596855FA5527E9DFD553107E7283A /* SoundFileFactory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B02E655D31D677E01F8A4E796936311C /* NstInpTopRider.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BC670362843998DA1AF5EB24E32647D3 /* NstInpTopRider.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B047CED3CE820B6D442A496BFE713A34 /* IpAddress.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34E1D0D9185BAD35EFFEE1914BE57762 /* IpAddress.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B09052B271013EFD3E592D4E87ADC3D7 /* UIImage+Manipulation.h in Headers */ = {isa = PBXBuildFile; fileRef = D52092A71CADBC93153EE571AB2672B0 /* UIImage+Manipulation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B0B08B97A524F8D48FDDA2249AEAD6ED /* Harmony.h in Headers */ = {isa = PBXBuildFile; fileRef = C2A44DFFD1971B44F0D03A3B9D7CEC57 /* Harmony.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B0B1C045C677C89BF5B9C28280948EFF /* TextDrawerStub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 087B0A1E2A0C286B3F21988E2886E415 /* TextDrawerStub.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B0CB31DCAFF38374A10B45E212587713 /* NstInpDoremikkoKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1B7C97918240DAD198A118B7B00B0E24 /* NstInpDoremikkoKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B128E8E439A9E5BDD9CE64F4EEDA1AEE /* audio.c in Sources */ = {isa = PBXBuildFile; fileRef = F7095B17BD490C5C3C946BF5CE387A22 /* audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B158F6C6F5B890AF5A00D8492705CB38 /* matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 810C174C92F9D6B39CFFD8CDEA0902A6 /* matrix.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B1766B3E76519CAB435EBB97EEF315DD /* GameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15D24BE6CA6E45ECB6DCBA6B450424E6 /* GameController.swift */; }; - B17C1766C96792D8E4702F83155E438A /* NstSoundPlayer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 657EC94D6685264E5B97804EFAAB8145 /* NstSoundPlayer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B18BDE9F23964986DC1C252B20A2B80F /* RSTCollectionViewGridLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A046E883CFCEC84A20788D73991DD42 /* RSTCollectionViewGridLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B1B404D70676CCCFE3325E089DDCAD9D /* loadres.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C5B370D97DA31DD1B20EE2895770F31 /* loadres.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B1FA10A1E7A8D914849E2F9982C44D07 /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54254E0189355E5C8E760E6CEB171480 /* Record.swift */; }; - B219C7FCFC30F49A2B96B301127F71A7 /* NSError+LocalizedFailureDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = F62AC62ED831B8389E68C8BC69676157 /* NSError+LocalizedFailureDescription.swift */; }; - B23FB033A07C66C2629201D7878FA1FF /* SoftwareRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC6C6859EF93F3A711C5AA163C55425 /* SoftwareRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B011E9394F81876D07949F6C4247ECA0 /* SoundFileFactory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6F76413369DEBF1203E4F23F42C0D065 /* SoundFileFactory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B02E655D31D677E01F8A4E796936311C /* NstInpTopRider.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 610FBE2B211DCC4D12F3F435021489B9 /* NstInpTopRider.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B047CED3CE820B6D442A496BFE713A34 /* IpAddress.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3C7AC7D01BEAA298AE2E5122EB24308E /* IpAddress.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B09052B271013EFD3E592D4E87ADC3D7 /* UIImage+Manipulation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D545FA281C697B8D7BEEC43C6652189 /* UIImage+Manipulation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B0B08B97A524F8D48FDDA2249AEAD6ED /* Harmony.h in Headers */ = {isa = PBXBuildFile; fileRef = 94188727366A8D8FB099D152B9B5514A /* Harmony.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B0B1C045C677C89BF5B9C28280948EFF /* TextDrawerStub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 406313DF7E94297A75C613BDD3988DC7 /* TextDrawerStub.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B0CB31DCAFF38374A10B45E212587713 /* NstInpDoremikkoKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4ACD840C16D41B8494693E00BF6094C9 /* NstInpDoremikkoKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B128E8E439A9E5BDD9CE64F4EEDA1AEE /* audio.c in Sources */ = {isa = PBXBuildFile; fileRef = D96CE517678765B006B018E340F3198C /* audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B158F6C6F5B890AF5A00D8492705CB38 /* matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C50053E5D39FB4F4F1BA560C86E2311 /* matrix.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1766B3E76519CAB435EBB97EEF315DD /* GameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7BC2C79D27AA4D45DBAED609878B0BF /* GameController.swift */; }; + B17C1766C96792D8E4702F83155E438A /* NstSoundPlayer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 31E520FC3E469009B4F65BACFD5C14C3 /* NstSoundPlayer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B18BDE9F23964986DC1C252B20A2B80F /* RSTCollectionViewGridLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ABD8BA817A5B6DB4C5828318ED97014 /* RSTCollectionViewGridLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1B404D70676CCCFE3325E089DDCAD9D /* loadres.h in Headers */ = {isa = PBXBuildFile; fileRef = B29A8EB5AC9C464A3E9D1DE0A0715E97 /* loadres.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1FA10A1E7A8D914849E2F9982C44D07 /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = 831586913D802CF0F3BD70D6BB259E5B /* Record.swift */; }; + B219C7FCFC30F49A2B96B301127F71A7 /* NSError+LocalizedFailureDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B7E86F1B639A123C10CF5C402F415B2 /* NSError+LocalizedFailureDescription.swift */; }; + B23FB033A07C66C2629201D7878FA1FF /* SoftwareRender.h in Headers */ = {isa = PBXBuildFile; fileRef = F687CDE1CC73F1023FA06367B7621C39 /* SoftwareRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; B2413D48BE65FF8FD294A53D5C5B760D /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C17445D591C8EC78950717FD3D5F77B1 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B272AC71D7ACB699920703161A1752AC /* RSTSeparatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BEE4619527C9F9B1FE35C99D23CC654 /* RSTSeparatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B30D82E85429187E9C74F971CECAFD0F /* RecordRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988D4B1A89D40408B7ABF72F05B65950 /* RecordRepresentation.swift */; }; - B3279DD4DDA04F5DCA2F5B03E29B9A6D /* NSUserDefaults+DynamicProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 44B96F7B857F663A80AED6CFBCED2EE1 /* NSUserDefaults+DynamicProperties.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B34FFF478B816C21FA1425DAB52AD1BA /* NstBoardBmcGoldenGame260in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BA6C6054CE8555D1822133E74F7E920F /* NstBoardBmcGoldenGame260in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B3B0CAB964F5C903A859882947D5A72E /* NstBoardZz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E79FA977AAA30AD5B0ACFC45BB5967B /* NstBoardZz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B3C63A4395449B36D761122AC4A51AAF /* NstBoardSubor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1F028EDFAB102669AF0739608CE6CC3F /* NstBoardSubor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B3D38E5D11BC50709CA52D6FFC2B9864 /* NstBoardBmc76in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 31FCE4C32E3EF5DE398B4E770A89EBF5 /* NstBoardBmc76in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B3E4E3424C67ED018CA0EF4B73795A17 /* ftcid.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1D49FEC1690DC33D84B0AF284CE88B /* ftcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B272AC71D7ACB699920703161A1752AC /* RSTSeparatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 329C5C85AFC08890DFDEC9E233470EF0 /* RSTSeparatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B30D82E85429187E9C74F971CECAFD0F /* RecordRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA7701E75D51BBB26AF25CB686CB48A8 /* RecordRepresentation.swift */; }; + B3279DD4DDA04F5DCA2F5B03E29B9A6D /* NSUserDefaults+DynamicProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = B49CF1CC01CA6A0D613EA0862C7F450E /* NSUserDefaults+DynamicProperties.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B34FFF478B816C21FA1425DAB52AD1BA /* NstBoardBmcGoldenGame260in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0E4E5A811FD38FBBF35D0F783DD6B5D9 /* NstBoardBmcGoldenGame260in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B3B0CAB964F5C903A859882947D5A72E /* NstBoardZz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F59EB83ED791F8F1742B8C9049F05E99 /* NstBoardZz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B3C63A4395449B36D761122AC4A51AAF /* NstBoardSubor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0BA3AC744A6D8C4122D7F2407E0AEE17 /* NstBoardSubor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B3D38E5D11BC50709CA52D6FFC2B9864 /* NstBoardBmc76in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 491A54EEB06C94D08F280F0DE9437646 /* NstBoardBmc76in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B3E4E3424C67ED018CA0EF4B73795A17 /* ftcid.h in Headers */ = {isa = PBXBuildFile; fileRef = D6FF04411B9686AB60189647F155133B /* ftcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; B422DCB989FF675D287C579D280F8253 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ECC57680ECCFDA6CFA7FED355B4F3AD /* TaskDelegate.swift */; }; - B425DF73F64609FA542BBFB0BE9EDF03 /* PostProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07F929AA3ED898A910A9BC1A1D86B9EA /* PostProcessor.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B435171F5FA2EBAC3C23A866769BE557 /* r4300_core.h in Headers */ = {isa = PBXBuildFile; fileRef = C65A2F325C6EA118286DBBC4484E5404 /* r4300_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B435EECA15AF195F0828E24958F90C6F /* SoundBuffer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6A6E6BA6F73F029637AC87BB994DE38D /* SoundBuffer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B43FA418644B4522331BB3C00F854B24 /* si_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A9548EBDD461D42A4F3BBAEA839E3DA /* si_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B445DE84FFD95F74DE320679C420C280 /* F3DEX2ACCLAIM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 06A10A0C91C261CE6EB6C49882F13804 /* F3DEX2ACCLAIM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B47F87DC8093788C4F7F5FAA80E88648 /* S2DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B115DAD8B8CBC0649AA6BCCBDDF47E7F /* S2DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B4B9606F74B2AE01213BCB4FBAEE6F6B /* RecordEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C7CDBA93C7797D9E83FBA84FAE7FD2 /* RecordEntry.swift */; }; - B4EB521CC2E0002F09E6D89D72C05EF4 /* RSTHasher.h in Headers */ = {isa = PBXBuildFile; fileRef = FCED81571811A98DF752E236C102EB15 /* RSTHasher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B51466218A72A889E8E988A7DB33701F /* NstTrackerMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C20B18CFE6A85C50A5E43ECF4C69D309 /* NstTrackerMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B53E55152ACF5185856AA85EFFC3B4B8 /* NstBoardCnePsb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DCB3B443E61EDD2CC071DAE04B2C1F0C /* NstBoardCnePsb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B425DF73F64609FA542BBFB0BE9EDF03 /* PostProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5370103F49292571EE10317A74B0B2 /* PostProcessor.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B435171F5FA2EBAC3C23A866769BE557 /* r4300_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 3223712696A5DC7DDD4D4DE6BD2C95A2 /* r4300_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B435EECA15AF195F0828E24958F90C6F /* SoundBuffer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 59A2650A6455EC2EFC3FA9F2C0886519 /* SoundBuffer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B43FA418644B4522331BB3C00F854B24 /* si_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = F48DAA56FC916AB087B5D26A104F31E0 /* si_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B445DE84FFD95F74DE320679C420C280 /* F3DEX2ACCLAIM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81D97BEB994C55C6EFABAC633B5D0966 /* F3DEX2ACCLAIM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B47F87DC8093788C4F7F5FAA80E88648 /* S2DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 078EC48CFDCED61DA3CE896FA2BC1477 /* S2DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B4B9606F74B2AE01213BCB4FBAEE6F6B /* RecordEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 699F79983949D91377333D55142CEB7E /* RecordEntry.swift */; }; + B4EB521CC2E0002F09E6D89D72C05EF4 /* RSTHasher.h in Headers */ = {isa = PBXBuildFile; fileRef = BF8EBB70E09CAD5AD9E5BB36757BDD4E /* RSTHasher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B51466218A72A889E8E988A7DB33701F /* NstTrackerMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8009E402564A24AC35F53518E984813D /* NstTrackerMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B53E55152ACF5185856AA85EFFC3B4B8 /* NstBoardCnePsb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8D03641E7133709402578F9CCAF2CFA6 /* NstBoardCnePsb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B560A089A1D47EC1F0B26533258C7317 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18B035B874A3872AE52466285EDB74ED /* SessionManager.swift */; }; - B56D331A25A771CAD8AAA58BCCF4FEC5 /* DisplayWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = E07FCD55ADD3EACB05945CD2DAA45704 /* DisplayWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B56D331A25A771CAD8AAA58BCCF4FEC5 /* DisplayWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 91F00C1F0698F991A6DDB258AD21774B /* DisplayWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; B56E07AC98E8D928C9E900BEAB1E5D9E /* GoogleAPIClientForREST-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5217968080F1594E30A54230FEEE2E88 /* GoogleAPIClientForREST-dummy.m */; }; - B589CDAD880DE2B506BB8EF95CA2CBD2 /* autohint.h in Headers */ = {isa = PBXBuildFile; fileRef = A82BEA8F12430E795A88BB379EFE3536 /* autohint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B589CDAD880DE2B506BB8EF95CA2CBD2 /* autohint.h in Headers */ = {isa = PBXBuildFile; fileRef = 29100634EB1C2E5E9877D238B86CDBB4 /* autohint.h */; settings = {ATTRIBUTES = (Project, ); }; }; B592BEA6F00B6CB2A68FF21EE18DCCE5 /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399303C061E83D38C607412717024931 /* FTS4.swift */; }; - B5C71F73361EF8A4F64FD74A6E1F9560 /* BPMDetect.h in Headers */ = {isa = PBXBuildFile; fileRef = 912A34EEAB2393779814319C7BDDC198 /* BPMDetect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5E129441B9A582B280D6CB490CC9B18 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D7EE0A3C63E9181CA23F2A4EE2C188E /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5E9F103B89A4D65F3C103264D8F0075 /* F3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D1A18FFCFB5674E197BFC4BFA0584F6E /* F3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B607C73513457E83CDF3A4552A8819C2 /* FileInputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FCC13C918B0DF97D6202A60A3DC17CF5 /* FileInputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B624009110AE452CBA01D50AD9CF2E24 /* snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = F1B217B4E1DE3906B3076571296DFF09 /* snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B642F97A1B4740DADB75F4DF9357776B /* NstBoardSachen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4935C2E2603C529A316EE9E50C953CA3 /* NstBoardSachen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B5C71F73361EF8A4F64FD74A6E1F9560 /* BPMDetect.h in Headers */ = {isa = PBXBuildFile; fileRef = 274CDB9B8AA8BAECD4E2BB3670A376D4 /* BPMDetect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B5E129441B9A582B280D6CB490CC9B18 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 523D82D262DC8E536D345567D04FF3F5 /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B5E9F103B89A4D65F3C103264D8F0075 /* F3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347EB9305F4E36DD5D07096703DFAC24 /* F3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B607C73513457E83CDF3A4552A8819C2 /* FileInputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = ADA9C40834B8789246B849280056B7BB /* FileInputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B624009110AE452CBA01D50AD9CF2E24 /* snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = BDD0219A0927AFD5212597224C8C9A18 /* snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B642F97A1B4740DADB75F4DF9357776B /* NstBoardSachen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 294CF6CD997D9E587A99F6DFE61FEC0F /* NstBoardSachen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B6758D43CD69D4728C2DEE14394F151C /* GTLRDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B98EACC45CEADA2FC73EB069E37FC7 /* GTLRDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B6D3A3FFEE078C60C5964AFC10A2BA8F /* assemble_struct.h in Headers */ = {isa = PBXBuildFile; fileRef = 7680621D7EA37B25BD6FAFEB184DD97B /* assemble_struct.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B6EBE57D0E21E77897AE81B558932730 /* TxImage.h in Headers */ = {isa = PBXBuildFile; fileRef = BAC79183F81C91B3272AAD8FC4B608B5 /* TxImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B70168F7C469666BF680C64C641ED1AA /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 99AFB601E975D6655D2A52B959891047 /* opengl_ColorBufferReaderWithPixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6D3A3FFEE078C60C5964AFC10A2BA8F /* assemble_struct.h in Headers */ = {isa = PBXBuildFile; fileRef = D91D509E04E52EB1EF2C6CE6325D63E0 /* assemble_struct.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6EBE57D0E21E77897AE81B558932730 /* TxImage.h in Headers */ = {isa = PBXBuildFile; fileRef = A5234D695ADE2B2BAE15139F5B2FD0BA /* TxImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B70168F7C469666BF680C64C641ED1AA /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 16A28BF70DE7AAE9C02DF33216F1076A /* opengl_ColorBufferReaderWithPixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; B72829BC0D61AF2E97C134A12BB5387C /* GTLRQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E64591CCE82CAC6775DAB365A75A8BC /* GTLRQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B73AB37F8B742739EDA3C074F536FBC5 /* DropboxService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 142B2CFFAF6692BC41348D5B5B30FDA1 /* DropboxService+Files.swift */; }; - B769CDC513B5AC715C708F8414DE98BE /* SPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C0FCDFCC71457C2596AFCEC1DE6839A /* SPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B843BC65B5755CDFCC2133CAB6614090 /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F8D603EBE941AC871B0A2F47AD5B6D5 /* Pods-Delta-dummy.m */; }; - B848793866F0C67ED92B0308CCB9D6F2 /* NstBoardAveD1012.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E480CACA0E81501CCBB98149C48584AD /* NstBoardAveD1012.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B8955C9472B44FCEE652CFFAB57AA5A8 /* Http.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6FBD67C48E00871A2582075478C8DA5B /* Http.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B89DFCAD50363CFBDC53931F4F370234 /* Result+Drive.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC23CE2DB6C5AA34154506F2401B1F8B /* Result+Drive.swift */; }; - B8C2E560CCEB5C574511691807B9D8EA /* glsl_FXAA.h in Headers */ = {isa = PBXBuildFile; fileRef = 9ACA4CA8AE2D83BA8AB58439FC360D38 /* glsl_FXAA.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B8EED4F04562CE0F560AE123C1F737E1 /* UIViewController+TransitionState.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BFDD39FA42BC2644FD2FC2A33412FFD /* UIViewController+TransitionState.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B94304C605E21C38958D8B2399F806E4 /* ManagedRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10788548DAFD98FFF15969586412798C /* ManagedRecord.swift */; }; - B951E2150D8C56060DDD22AACC1F0A12 /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 47DCB70C7A85BDDF58BAF31BC42404A1 /* md5.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B97F1A94FF1030E195B110D8EEBCAA83 /* NstBoardSuperGame.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CFF26FC15D5CF0C1D2FDC8A0DF023F02 /* NstBoardSuperGame.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B9805A1656378AAA93AADAA09D5122C1 /* NstBoardAxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C3EC67AFC76D160DAF406F83FB32F372 /* NstBoardAxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B9D617B5B5EAF1315D131DBCE295ACD2 /* TextureFilterHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9B3F61B1E686EE8232FF7D4423DA7AE5 /* TextureFilterHandler.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B9E14DD387C8FE6CD9A8A29DF12A8ADD /* getset.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D713472AF6AAB8E1D9ABC6D7A61B49B /* getset.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B9F145E126048938862BB1034A7EA013 /* ai_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = CFB8F56FBC758AE2588C1DD814A5F9D6 /* ai_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA2D57760A3C386F7C1C547729E1A472 /* NstBoardFutureMedia.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C0BCFCB348564B9EB1473238677BB354 /* NstBoardFutureMedia.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BA530F1422205725B02895445DDF0F3E /* alist.c in Sources */ = {isa = PBXBuildFile; fileRef = 4903CFCCF14E60B4FC1C1EFCB86ECE55 /* alist.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BA5700A31EB47A427F8C75099C99FD06 /* rdp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = E5E0E7F22F5068FCBB7C8E4EE92F086F /* rdp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA6F2DEA63EEA27BFAEDA2A35BB85F6A /* GBADeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A43F1D8E9F0EE020CB6D17932CE6292 /* GBADeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA8DAE2B382564F0C1EAFA4E759CADAD /* NSConstraintConflict+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = 480AE324EBF43D4B5582909423B482B4 /* NSConstraintConflict+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BAA4E74335AA7B36F2454711A5B55698 /* Audio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F30187F95C53F4957E71ED8DDDC23CC3 /* Audio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BAA7B0396C8963E3E7324FE70900B64E /* Cheat.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF58C9A94CDE343BACE56F4E13E201C8 /* Cheat.swift */; }; - BAAAB1B9FEE1E71EB834788C59B174C4 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B412A3E753F75718995BBB767197FD /* File.swift */; }; - BB0BB79A9140C13066DC7B7C8B203B78 /* Network.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92B20D8D80FF2DF35DE5BB67277F01FB /* Network.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BB191EC60D3AC3D5EB56CB411B128BEE /* Touch.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9900B0D2CD9872165A1705598445975C /* Touch.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BB43B32DD16801C9214E36739BD6D080 /* GPU.h in Headers */ = {isa = PBXBuildFile; fileRef = BECCB76E1F55FC84F3E9C1EBD272E746 /* GPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB62119EA148C79F62F0ACBD9EB0C565 /* interrupt.h in Headers */ = {isa = PBXBuildFile; fileRef = AA0028E9A2FCB06AF3C4FF32FF90DA06 /* interrupt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB961476561437CC41E703E25E767FD7 /* GBCInputGetter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8A840F202469E60C39538CC467177CA /* GBCInputGetter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BBC683E778EBD7924866C7857B19D11A /* NSString+Localization.h in Headers */ = {isa = PBXBuildFile; fileRef = 620CBB9D49ED951D7497FDB4C115660B /* NSString+Localization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B73AB37F8B742739EDA3C074F536FBC5 /* DropboxService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46A2C9BD6F58478A775BFC3629531415 /* DropboxService+Files.swift */; }; + B769CDC513B5AC715C708F8414DE98BE /* SPU.h in Headers */ = {isa = PBXBuildFile; fileRef = F08C08AAB29244E9A786468ABCA8B758 /* SPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B848793866F0C67ED92B0308CCB9D6F2 /* NstBoardAveD1012.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D164ECEA35ACB2EFAF45DFBDE6086CD3 /* NstBoardAveD1012.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B8955C9472B44FCEE652CFFAB57AA5A8 /* Http.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BD91AF2C48D679F07CCC9B6D62701470 /* Http.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B89DFCAD50363CFBDC53931F4F370234 /* Result+Drive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D7AE2A6BB60EE680F208CA7652859A /* Result+Drive.swift */; }; + B8C2E560CCEB5C574511691807B9D8EA /* glsl_FXAA.h in Headers */ = {isa = PBXBuildFile; fileRef = DC2E2AF3A950FAF5326EEE74CDCD4D10 /* glsl_FXAA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B8EED4F04562CE0F560AE123C1F737E1 /* UIViewController+TransitionState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A0BDC53FD9A10612B34F36860479885 /* UIViewController+TransitionState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B94304C605E21C38958D8B2399F806E4 /* ManagedRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BE21537778C287EB7835EE5A1CEA97 /* ManagedRecord.swift */; }; + B951E2150D8C56060DDD22AACC1F0A12 /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 325E8BBC08F3C0C7CC6EE4B27346E532 /* md5.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B97F1A94FF1030E195B110D8EEBCAA83 /* NstBoardSuperGame.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1FBDF4ACD90B4DED1F33312B991DB618 /* NstBoardSuperGame.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B9805A1656378AAA93AADAA09D5122C1 /* NstBoardAxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7BEE27F7FF7F6E7CA6DBDA14F15340BC /* NstBoardAxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B9D617B5B5EAF1315D131DBCE295ACD2 /* TextureFilterHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FC5602035B9E19D656976E460F7F90A /* TextureFilterHandler.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B9E14DD387C8FE6CD9A8A29DF12A8ADD /* getset.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B98706F4E48F8908BCD401802253AB6 /* getset.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B9F145E126048938862BB1034A7EA013 /* ai_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D58E3495B9E3434BF573543720CB50E /* ai_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BA2D57760A3C386F7C1C547729E1A472 /* NstBoardFutureMedia.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 459B516EA16454D8B783A5E6A1106CDD /* NstBoardFutureMedia.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BA530F1422205725B02895445DDF0F3E /* alist.c in Sources */ = {isa = PBXBuildFile; fileRef = ED722AEBC29811FBDB707822E79E137C /* alist.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BA5700A31EB47A427F8C75099C99FD06 /* rdp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 193B9E904D8FA162F2935AE2242E5DD4 /* rdp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BA6F2DEA63EEA27BFAEDA2A35BB85F6A /* GBADeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B38944C4991CE901210237BE9D90369 /* GBADeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BA8DAE2B382564F0C1EAFA4E759CADAD /* NSConstraintConflict+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EC1A7B808C5E2E304C086081DB1796C /* NSConstraintConflict+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BAA4E74335AA7B36F2454711A5B55698 /* Audio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C789F35DF9D922934F14887196EADCFA /* Audio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BAA7B0396C8963E3E7324FE70900B64E /* Cheat.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BDD61DD53EB66909667FDEF0E033B1 /* Cheat.swift */; }; + BAAAB1B9FEE1E71EB834788C59B174C4 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC22A3208696A410615506A968BEF /* File.swift */; }; + BB0BB79A9140C13066DC7B7C8B203B78 /* Network.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D2AC56C3AE1F0BBCE09D6CE758D402CE /* Network.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BB191EC60D3AC3D5EB56CB411B128BEE /* Touch.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 66879FEB993CFA8011AE164C2E88927A /* Touch.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BB43B32DD16801C9214E36739BD6D080 /* GPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E028AD93ED1F6C5A46A56195C2CF756 /* GPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB62119EA148C79F62F0ACBD9EB0C565 /* interrupt.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD4F5AA816AA91F1CA362FFF3B5C93C /* interrupt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BB961476561437CC41E703E25E767FD7 /* GBCInputGetter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8310F880B7CC9B1650278B22FEEA7A2B /* GBCInputGetter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BBC683E778EBD7924866C7857B19D11A /* NSString+Localization.h in Headers */ = {isa = PBXBuildFile; fileRef = 1363B01A18856DBE22D21EBF8088D06C /* NSString+Localization.h */; settings = {ATTRIBUTES = (Project, ); }; }; BBE93C6E95E356BE54C337E86C774BED /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14057D1AEA66E65BED2117946518BB10 /* Common.swift */; }; - BBF6C4CF1FF711166B74A992339230EE /* NstBoardBmc64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7F66CA249330A41FAC70007D5C650CD6 /* NstBoardBmc64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BBF6C4CF1FF711166B74A992339230EE /* NstBoardBmc64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B1E6115DADF781FBC5286DC05270CFDF /* NstBoardBmc64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BC4EB746D2E13352424A93FDC7A52F78 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEC812792FD886E7BB2776C793B6BEEB /* Errors.swift */; }; - BCBDF12AD11385D21AD3AA103D8B4EB6 /* RSTCellContentDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = DC3FCFF553A82968D13B5EB86CA60675 /* RSTCellContentDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC8C1CD0ADEE21D2C320F00B6ABD9DC8 /* GPU2D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F1439A262C75F30F451CE2F5AC4E9 /* GPU2D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BCBDF12AD11385D21AD3AA103D8B4EB6 /* RSTCellContentDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3827013A64806EC421D988347B05D5EB /* RSTCellContentDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; BCC3B83B11F726387F8C0A3568E470D1 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = DE7BED3E5E48EB3660BE48EE00FA7AFB /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; BCCF0B9F15A1651547EADC31A6CEB5C2 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = C87526B5C0AF75FA4CE41AA42D172B0B /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BCEFBAE2DC02775E49A13027909408F2 /* TxReSample.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AA904F6B4EABFBD175084421003EB09 /* TxReSample.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD016C62B0056C15B63A5A9396AB93F4 /* KeyboardResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCA09C91A2EF02A01FA5D74C5F06804 /* KeyboardResponder.swift */; }; - BD0CC9162B585EAC4F9D324068AC0A14 /* firmware.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C7AF11CE5076877102C9C295769C622 /* firmware.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD0D6665CD9A3B3C0AEDC4347A0BEBA6 /* NstInpBarcodeWorld.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92004DFFAF89F721D5477783E22161B9 /* NstInpBarcodeWorld.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BD21247A32EF0C2EACBF439E6C4B9209 /* NSFileManager+URLs.h in Headers */ = {isa = PBXBuildFile; fileRef = 24A1F04C9D66439C073E518F9C2519E1 /* NSFileManager+URLs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BCEFBAE2DC02775E49A13027909408F2 /* TxReSample.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F5F6218B59F2A6BF7EC220A625C8AB8 /* TxReSample.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BD016C62B0056C15B63A5A9396AB93F4 /* KeyboardResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45CF5051C61E98E1D10FDAE36FED44A /* KeyboardResponder.swift */; }; + BD0CC9162B585EAC4F9D324068AC0A14 /* firmware.h in Headers */ = {isa = PBXBuildFile; fileRef = F20B25B2356078687C26B25825E487A2 /* firmware.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BD0D6665CD9A3B3C0AEDC4347A0BEBA6 /* NstInpBarcodeWorld.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8566DFE3C9D864188FAC41FB8316C1B0 /* NstInpBarcodeWorld.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BD21247A32EF0C2EACBF439E6C4B9209 /* NSFileManager+URLs.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E3B9E17CE51387A5C31A3D4D020CB3 /* NSFileManager+URLs.h */; settings = {ATTRIBUTES = (Project, ); }; }; BD76AF44C34DBCA99DBC73D5ED61FE7F /* GTLRDriveObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = 650B17EB11403844F72B9E0117949D63 /* GTLRDriveObjects.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BD98350191E37E34886D92370CDB8174 /* NstBoardBtlGeniusMerioBros.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2FB72B0C0BDEEEA75B2233F8A0F9C0CB /* NstBoardBtlGeniusMerioBros.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BDE0EF415A3093440376B4D04914BBAF /* UITableView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C752AF5BCDF4EC788FBE60B79732508 /* UITableView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BD98350191E37E34886D92370CDB8174 /* NstBoardBtlGeniusMerioBros.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 004BF1A3CCAB8016603DA7935B203E8B /* NstBoardBtlGeniusMerioBros.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BDE0EF415A3093440376B4D04914BBAF /* UITableView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45D29114CAD3548F307C7BA691260F25 /* UITableView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BE4BD4C475FD682FA5F5A75F1CCB4940 /* GTLRBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = C977FFA5FDFB893A5DAB65AE680DA461 /* GTLRBase64.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BE73142C363020BAD22706DDB199D35A /* NstFpuPrecision.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9039BACE3570843851BBD1B1CD4E8944 /* NstFpuPrecision.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BE75DD1EED6E0D0B3AADC2A777C7D9CA /* NstBoardSuperGameLionKing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 33F61CAFA96E0983ACC82B25ADD6DA19 /* NstBoardSuperGameLionKing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BE7A4ED43FCAC3814C10C9D5B3A68D18 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FA995B71ECEE202B9688EBD65B7788A /* opengl_ColorBufferReaderWithReadPixels.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BE8930A97F9D476C9A93D870A62B3D11 /* NstBoardRexSoftDb5z.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B21034826F7C6098BB4DBFE00B2498C /* NstBoardRexSoftDb5z.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BEA3DB63075DE883B2C9506C483877DF /* UIDevice+Vibration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78323C76AFE569F46E583A2E3461F6E8 /* UIDevice+Vibration.swift */; }; - BED24F03394D6879BAFB6D521219899C /* RSTCellContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = B2549B66FD3CB3110FA065042ED1999F /* RSTCellContentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BED6D68A786DBE5B331C32D88E209282 /* NstBoardPxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 041DD83CE8B7122C23DB4EA6557E0B8D /* NstBoardPxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BF2705ACCDBE29A8E3C665CBB877B64E /* NstBoardWaixingSgzlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75CBA626F95FBBAD154F3774DF8F9152 /* NstBoardWaixingSgzlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BF3835EC0C608435A5068BD7DA290723 /* NstBoardUxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FE0B56AC8DF03F3940CB2C0117DF20DA /* NstBoardUxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BF68218EA9CB72C37A86A7DC97330040 /* retro_miscellaneous.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FA46629ADE6C1B6415FE547479F78E9 /* retro_miscellaneous.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFAE59F52F18BE2C9796FA97184A813D /* TcpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 396CAC416CA887F60CA5BB303E7782BE /* TcpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BFCB75257F3782795D068C01593C193C /* FullscreenResolutions.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B2D8F8859A064B41E83B36809CD1EE /* FullscreenResolutions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BE73142C363020BAD22706DDB199D35A /* NstFpuPrecision.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 63180C4F702A63C80A6A6C9888B52876 /* NstFpuPrecision.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BE75DD1EED6E0D0B3AADC2A777C7D9CA /* NstBoardSuperGameLionKing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DD7037B9236081F8835FD977759FC372 /* NstBoardSuperGameLionKing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BE7A4ED43FCAC3814C10C9D5B3A68D18 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4876241413E9B62B9F4FF4FCBFBC93B /* opengl_ColorBufferReaderWithReadPixels.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + BE8930A97F9D476C9A93D870A62B3D11 /* NstBoardRexSoftDb5z.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5F83D55C13FB6E1F63B5492848583340 /* NstBoardRexSoftDb5z.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BEA3DB63075DE883B2C9506C483877DF /* UIDevice+Vibration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6DC5BD2D6B77CA14C62D6FF5EA327DB /* UIDevice+Vibration.swift */; }; + BED24F03394D6879BAFB6D521219899C /* RSTCellContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = BBBD8731E43D4030EDC2B0655C688CD3 /* RSTCellContentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BED6D68A786DBE5B331C32D88E209282 /* NstBoardPxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6792E65AE4C83CBE644B193BBA1E52DC /* NstBoardPxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BF2705ACCDBE29A8E3C665CBB877B64E /* NstBoardWaixingSgzlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2507A2AAACF2F3D12826D941CB970BEE /* NstBoardWaixingSgzlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BF3835EC0C608435A5068BD7DA290723 /* NstBoardUxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 45DE5EDAEF814543E00692730C996AC5 /* NstBoardUxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BF68218EA9CB72C37A86A7DC97330040 /* retro_miscellaneous.h in Headers */ = {isa = PBXBuildFile; fileRef = FECEA5EC0D42D4421643583D74C8F676 /* retro_miscellaneous.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFAE59F52F18BE2C9796FA97184A813D /* TcpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 939A37FF787B2929926C6A99E612A7AD /* TcpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BFCB75257F3782795D068C01593C193C /* FullscreenResolutions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4730257B4F5FB617F71989B24D9EF907 /* FullscreenResolutions.h */; settings = {ATTRIBUTES = (Project, ); }; }; BFEDB3C71543B01C462D3562B179DA30 /* SDKConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95CCDA31768B63EA9440181D3FB6DD17 /* SDKConstants.swift */; }; - BFF00FA2CA9BCB91036CC7F37B8878C8 /* gSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 72E7904615D88779CADD558D3456DD5F /* gSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFF00FA2CA9BCB91036CC7F37B8878C8 /* gSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C1361ED1C7AC536E50CC4A7BA396F6B /* gSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; BFF536B78DC4850A4A285C1D03F56057 /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 007B238BA4CBDD19AB8422150260B200 /* SQLite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C094CBCC986DF1C6C0A3379FCA09D462 /* biopak.c in Sources */ = {isa = PBXBuildFile; fileRef = 715964B79C52F9A32AC5669D6D1A75E9 /* biopak.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C09ACD857947A188924A57EB95E3A3EC /* glsl_CombinerProgramImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 747E5693480F6B6F20690DB12E236F86 /* glsl_CombinerProgramImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C0D9BA8FBC5E1F537EBE6CC92AB31AEA /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A3F0FDFBE86AC5763C0A89166EFC859 /* Game.swift */; }; - C0E0B72CFF04ABCCDBC10213DE784979 /* Cheats.h in Headers */ = {isa = PBXBuildFile; fileRef = CA2F2C7F1257D8E558E768DAD7B2D74B /* Cheats.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C101B03ACD6D46D16A8FAEFB5BB281CF /* NstBoardBandai.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2DB986F9C1D693A55F7B3373502F3EA2 /* NstBoardBandai.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C1BC2E5368700E239EF29C36CE3B9839 /* GameProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C70E38FCA082D826611BFD1F0EC58613 /* GameProtocol.swift */; }; - C1BF92EE9B78C154547D891F8156FD79 /* uncopyable.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA41F9CCF4B088FD860DE0A9D8B8D17 /* uncopyable.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1C5E0B49268CB4DB6B4B7CF63412FF5 /* F3DDKR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B93D7E35A62A2F50B4C38BF9A76E4C4 /* F3DDKR.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C21855C2E5D6487AC2B921AD79922E14 /* ExternalGameControllerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93910D17E45B6F0DD31F72703A5A2651 /* ExternalGameControllerManager.swift */; }; - C2A7BEF4712B927F676D5521BA4CDE03 /* Vector2.inl in Headers */ = {isa = PBXBuildFile; fileRef = 32498379B364CA72F850FD7D3200CF6B /* Vector2.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - C2BE25EB20537FCA2EE93FC27875B382 /* RSTTintedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = F3AAD7F4A60C4A7E5B5877476953BA04 /* RSTTintedImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2C42639F8B8C99AE470FFC772F27320 /* NstBoardNanjing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D24B8100E3100D72F4874FB079F78F54 /* NstBoardNanjing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C2CDA8FD21D4EABCF46E596D822C87D5 /* GameControllerInputMappingProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F09C29C5169EDE2BFAE9F9E6B95F48 /* GameControllerInputMappingProtocol.swift */; }; - C2CE2BF3BF9FE6464EFA9299139418C1 /* fb.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B2001812085959BA9C558864721110A /* fb.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C2CF08E68D39B2B25982B6AD4BE22708 /* FinishDownloadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9078D2E6A526B27EFAB78F4949C2039E /* FinishDownloadingRecordsOperation.swift */; }; + BFFFA37AA09F05D1D780084020C36569 /* ARMInterpreter_Branch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB6F1EA645B2A93AB915AD7BC3EAD8E1 /* ARMInterpreter_Branch.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C094CBCC986DF1C6C0A3379FCA09D462 /* biopak.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C84A3CF371C057839A68C574D020120 /* biopak.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C09ACD857947A188924A57EB95E3A3EC /* glsl_CombinerProgramImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 630D82E8861EDF03C0AE64781235E207 /* glsl_CombinerProgramImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0A46DD2A0BD6922A1E0CE926C0202B3 /* MelonDS.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB701508E5E2F9D08F436931CD05696C /* MelonDS.swift */; }; + C0D9BA8FBC5E1F537EBE6CC92AB31AEA /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = 213FC7540DB4DF3F90B89035F984BD7C /* Game.swift */; }; + C0E0B72CFF04ABCCDBC10213DE784979 /* Cheats.h in Headers */ = {isa = PBXBuildFile; fileRef = C64D454F5583AA5EC3D926CB2248F4F8 /* Cheats.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C101B03ACD6D46D16A8FAEFB5BB281CF /* NstBoardBandai.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C35789A01031A859DE9488BAE0FC99C9 /* NstBoardBandai.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C1BC2E5368700E239EF29C36CE3B9839 /* GameProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E336CAB35F1041C04DA2A4B22DF0D4FD /* GameProtocol.swift */; }; + C1BF92EE9B78C154547D891F8156FD79 /* uncopyable.h in Headers */ = {isa = PBXBuildFile; fileRef = 034ECDF2709AB785B480F4DEBECA1C8A /* uncopyable.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C1C5E0B49268CB4DB6B4B7CF63412FF5 /* F3DDKR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDC971E53465BFFF543E22C621BB9660 /* F3DDKR.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C21855C2E5D6487AC2B921AD79922E14 /* ExternalGameControllerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B73E9E04EC1D9DC2F189BC9DC0A68ADB /* ExternalGameControllerManager.swift */; }; + C2992FB2C5EA630CD93BB356A0364AB5 /* AREngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CC64C89DA860743FE62F576D82428F1 /* AREngine.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C2A7BEF4712B927F676D5521BA4CDE03 /* Vector2.inl in Headers */ = {isa = PBXBuildFile; fileRef = 26980C04667AAE6697AC84486BB012FF /* Vector2.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + C2BE25EB20537FCA2EE93FC27875B382 /* RSTTintedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = B31BC317B925949D8F6F764866AECFAE /* RSTTintedImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C2C42639F8B8C99AE470FFC772F27320 /* NstBoardNanjing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FD63E3F134804425401C1B74686EDF48 /* NstBoardNanjing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C2CDA8FD21D4EABCF46E596D822C87D5 /* GameControllerInputMappingProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2985A6A24D313B24B3A42ED617C00464 /* GameControllerInputMappingProtocol.swift */; }; + C2CE2BF3BF9FE6464EFA9299139418C1 /* fb.h in Headers */ = {isa = PBXBuildFile; fileRef = F650B1818D017BD4A14C1415647FCDEB /* fb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C2CF08E68D39B2B25982B6AD4BE22708 /* FinishDownloadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B914A55A521830F330AED535B8835A5 /* FinishDownloadingRecordsOperation.swift */; }; C2D45C2E6F31EA9735644BA45EDC472C /* GTLRObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A171E0701260ECA35983A32816DB522 /* GTLRObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C2E179FB02E7F0CD7231AEF5DF00CCB4 /* CRC32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59F8B6172F22E2155F8670897E6C81D6 /* CRC32.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C2EB4CB575EA9821E30A317574865D17 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC73A05080E7163BE6F8E9426032C82 /* MultipartFormData.swift */; }; - C34D51CEB4E00C5A195C5FF17A900866 /* glsl_CombinerProgramImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F40644EDA82AEFA7C2C89C6CBC2D581C /* glsl_CombinerProgramImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C36CC682F07B3FEA5A1B00C139CCB3EC /* NESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = DF48B54B85EDEF813D05CDF5146FBCF7 /* NESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C38E914D8F66B0BD258C83D7C35C2726 /* opengl_TextureManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C8F960573035AFFC3CDC1DEBA1E6BD4 /* opengl_TextureManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C394492C7C415D251CED3A19FC797560 /* ftgzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 63E5FFFBD052DA0F226FA6C644365420 /* ftgzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3ADA5023FC1C283152E2C1813982117 /* TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AA718DD7968CE1C58CD34313E5FA869 /* TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3B11E4AA028617D0B3134BF96B451DF /* usec.h in Headers */ = {isa = PBXBuildFile; fileRef = AE0C7BFBF72D47F44B5150F9AD1D5E20 /* usec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3CB14A07161497CA6FAA6858EFF4F4F /* Thread+RealTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A3B202DC9824A439BA7432E3C5B9DB8 /* Thread+RealTime.swift */; }; + C34D51CEB4E00C5A195C5FF17A900866 /* glsl_CombinerProgramImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2815B1907C011A39DFB5DA9B3B93A230 /* glsl_CombinerProgramImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C36CC682F07B3FEA5A1B00C139CCB3EC /* NESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7647C29F1EB2BC67142E821D427D0865 /* NESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C38E914D8F66B0BD258C83D7C35C2726 /* opengl_TextureManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A52EF817DA55C490E46C80C1AF0F283 /* opengl_TextureManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C394492C7C415D251CED3A19FC797560 /* ftgzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 22528395152B5ECC856B25BADDACB3F9 /* ftgzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3ADA5023FC1C283152E2C1813982117 /* TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 36B21AD2A8F390B23FB0A538F357E4D0 /* TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3B11E4AA028617D0B3134BF96B451DF /* usec.h in Headers */ = {isa = PBXBuildFile; fileRef = 797293ABB0B561C6FE9D15E812E45081 /* usec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3CB14A07161497CA6FAA6858EFF4F4F /* Thread+RealTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD21182E096CF262039B0C3A26E9769 /* Thread+RealTime.swift */; }; C40257B054B827F15814443893FE2D5C /* GTMDebugThreadValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 026273C8CD9BD9384803DD59CB45DF96 /* GTMDebugThreadValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C455219A8550223E4C8003DD899834B7 /* TxInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = B0A321F5CF3FAD29047B4FF624618004 /* TxInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4552D4F06F08287FB112E8B10CFC47C /* Revision.h in Headers */ = {isa = PBXBuildFile; fileRef = CEC07F295EF65A94DD75B4B6F79D0A83 /* Revision.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C45537121E620342F23894864D721C8D /* GBATypes.h in Headers */ = {isa = PBXBuildFile; fileRef = E1E783A2C239C16F0FB68CDC920FB0A8 /* GBATypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4561DB72CCEBA4FF6445D4738B7C7DE /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39CE46E8947CA82B26FFDA66DEED2417 /* opengl_ContextImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C4AFBF63C66D464CB5BF0FEE936B0A14 /* bootrom_hle.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D3835A82BC331577B14F9F444CD9367 /* bootrom_hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4CD30F775B2D8F7ADB0CDAF05C03983 /* Glyph.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 920F6CCBFE16A29B89A155E099306B56 /* Glyph.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C4D651A1DA5790D9EB95954015D606B3 /* NstBoardKonamiVrc3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5221F56A802033E50A6CA3492E382A3C /* NstBoardKonamiVrc3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C51A52DF29F0F1A14A3C4A2435A027DB /* NstBoardTaitoTc0190fmc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F6A4D024EFBD821E10B8C4249832F774 /* NstBoardTaitoTc0190fmc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C564BC767458B4CC26E9A5D4DA650B4A /* FrameBufferInfoAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B93E54A61BB91C9C1DB668CB22B8E22 /* FrameBufferInfoAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C57FA8AFDD52EE6417A2E0C1274059E3 /* NstBoardHenggedianzi.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 32810DC0220801D0627369038B90903F /* NstBoardHenggedianzi.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C593D8CC9F1A9B223285B2E986CD444C /* NstBoardWaixingFfv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4E0870820E6458DC946E91A74E0DB8E /* NstBoardWaixingFfv.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C5A1264CC2E10DC15FD86C842D770914 /* PaletteTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 359183005A45F4DEB5018AB89576E560 /* PaletteTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5AB49D57E3EF7CD32C4E07A1A2DC017 /* ThumbstickInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC9DD621FC3DC24A24E27BD8B1C292AE /* ThumbstickInputView.swift */; }; - C5ADB3E8439A575CB85F2DC37DD3ADE2 /* NstVideoFilterxBR.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 39DE70D20BB766FDECB1A17965101839 /* NstVideoFilterxBR.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C5BDCB21A3BAADFBD6ECC0E1BF2B15F5 /* Context.h in Headers */ = {isa = PBXBuildFile; fileRef = A0F5D17654F47036B94A567F870E2CFF /* Context.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5F1C4A446D8769AF9535D1036A3E0E3 /* memalign.h in Headers */ = {isa = PBXBuildFile; fileRef = 63E04C5EE8B5C9B04E756F888630E85E /* memalign.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */ = {isa = PBXBuildFile; fileRef = 2446C10AA94654AF8E1C4ADEB9142AD5 /* pngusr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C64C503EB6132EC922D43AB0B27FD21A /* DepthBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = E2BAB81C3D77DEA7A2AE15BE082DFA95 /* DepthBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C669D2A2AEB5C8351795BD1BD61EC908 /* UIImage+Manipulation.m in Sources */ = {isa = PBXBuildFile; fileRef = CDA1A181F550D672CE3A7A747A0DCB7E /* UIImage+Manipulation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C67F326A6AF0E3C1047D6DC2008B71AE /* Event.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 19C0D312CBF5347DB0447CBF56BF1D75 /* Event.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C6B8C839FA0BF0A1AE168CC27EC12FB7 /* ftpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C52587C427298A7375DC3C3DADBC541 /* ftpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C6E4FBCFEF73B36D1A8501B5939B6484 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B121A5474D97495A9D2594CBE9B2C38 /* profile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C455219A8550223E4C8003DD899834B7 /* TxInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D02F91DD08301C06A04A0C6273FC0114 /* TxInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C4552D4F06F08287FB112E8B10CFC47C /* Revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D4A9FA09D0CE373E943419685E8D514 /* Revision.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C45537121E620342F23894864D721C8D /* GBATypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6528F5BD6DE6044B356E5ABAC6FAC340 /* GBATypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C4561DB72CCEBA4FF6445D4738B7C7DE /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C18B2ECEE548A1C91E8FE550A347BFB /* opengl_ContextImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C4AFBF63C66D464CB5BF0FEE936B0A14 /* bootrom_hle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D2AF58B1BA6D02D19EAE80F80E4CA9D /* bootrom_hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C4CD30F775B2D8F7ADB0CDAF05C03983 /* Glyph.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D4443534BC214F7BD24E7115ECFAD056 /* Glyph.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C4D651A1DA5790D9EB95954015D606B3 /* NstBoardKonamiVrc3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 237AEE8BB0BEDA0F90CBA83BE3E11B81 /* NstBoardKonamiVrc3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C51A52DF29F0F1A14A3C4A2435A027DB /* NstBoardTaitoTc0190fmc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E73487409C40B8A2E9B7483BFF193799 /* NstBoardTaitoTc0190fmc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C564BC767458B4CC26E9A5D4DA650B4A /* FrameBufferInfoAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 120C5D8AF966C09C6ECCB59508E8C8A2 /* FrameBufferInfoAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C57FA8AFDD52EE6417A2E0C1274059E3 /* NstBoardHenggedianzi.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 63F723BED507FF2FF061CFBDA2D2DC5D /* NstBoardHenggedianzi.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C593D8CC9F1A9B223285B2E986CD444C /* NstBoardWaixingFfv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93A4D0810FAC23701F57EE4E6CA1A7C6 /* NstBoardWaixingFfv.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C5A1264CC2E10DC15FD86C842D770914 /* PaletteTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = A0430F33B2F349ADD6CDB6AF35310BC9 /* PaletteTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5AB49D57E3EF7CD32C4E07A1A2DC017 /* ThumbstickInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1AAAF56DFDC2516C9F0F82DEA17511B /* ThumbstickInputView.swift */; }; + C5ADB3E8439A575CB85F2DC37DD3ADE2 /* NstVideoFilterxBR.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 867F308297D845E4AB0774374BB3EFB4 /* NstVideoFilterxBR.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C5BDCB21A3BAADFBD6ECC0E1BF2B15F5 /* Context.h in Headers */ = {isa = PBXBuildFile; fileRef = CE641ADC83B5D0F02766689E3A81B2B1 /* Context.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5F1C4A446D8769AF9535D1036A3E0E3 /* memalign.h in Headers */ = {isa = PBXBuildFile; fileRef = FE67AEDDB46071185B8EF236FD149EA7 /* memalign.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */ = {isa = PBXBuildFile; fileRef = F20F4C74BB8804B518393DCFC21CB9FB /* pngusr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C64C503EB6132EC922D43AB0B27FD21A /* DepthBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 033421C4854AC34E9F0A5215AE7F3AE4 /* DepthBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C669D2A2AEB5C8351795BD1BD61EC908 /* UIImage+Manipulation.m in Sources */ = {isa = PBXBuildFile; fileRef = 97B9144AB8468E437ABB41803974D033 /* UIImage+Manipulation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C67F326A6AF0E3C1047D6DC2008B71AE /* Event.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F013766E35198FF97F65503319E09993 /* Event.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C6B8C839FA0BF0A1AE168CC27EC12FB7 /* ftpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C47A891929053596B4282BC5DDB0A7 /* ftpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C6E4FBCFEF73B36D1A8501B5939B6484 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E69C29F29CC024AF25B51D0D32627EE /* profile.h */; settings = {ATTRIBUTES = (Project, ); }; }; C72087EDCF1BAE223A1BB8C94BA87329 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BB44A4386C6A18D5BEA9F5AF2E1EF0 /* Statement.swift */; }; - C794D4B738B15C7F096A903C21D39FC2 /* pngset.c in Sources */ = {isa = PBXBuildFile; fileRef = DD7C52A8979058368290D45755488F97 /* pngset.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C794D4B738B15C7F096A903C21D39FC2 /* pngset.c in Sources */ = {isa = PBXBuildFile; fileRef = 259F2453A2569EB3489497BFC04DC6EC /* pngset.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C7CB102CC0A1B62D7A956BD46BC0C8FF /* GTLRDateTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BA56585EDD13E71C58B7B7C64DDB53C /* GTLRDateTime.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C7D9222C5D58945DF45292909C3A16B0 /* glsl_SpecialShadersFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = BEEFBD2A07C30B4B56078B86605B2E66 /* glsl_SpecialShadersFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C7D9C03D29D663952B0B97466F107D12 /* GBADeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BB04C06267FD84AED09F6E677B3B3BF /* GBADeltaCore-dummy.m */; }; - C7DD70EC49EC3FC47CF6D741BF54B670 /* NstApiCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B02EEBF1E035A24BDB6410BAA13782B /* NstApiCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C8065BE8E7EE0A002B995608EA590F05 /* getopt.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BB52CE6A9BF6A1CFA75A61E1AFEDA7B /* getopt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7D9222C5D58945DF45292909C3A16B0 /* glsl_SpecialShadersFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D763E69CEADEDB375FE897F8EAC5BA0 /* glsl_SpecialShadersFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7D9C03D29D663952B0B97466F107D12 /* GBADeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EBF414719FAD26FBA9B9AB0E2F855F3 /* GBADeltaCore-dummy.m */; }; + C7DD70EC49EC3FC47CF6D741BF54B670 /* NstApiCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 114921A6CAF20904FE9B8E29537F98A4 /* NstApiCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C8065BE8E7EE0A002B995608EA590F05 /* getopt.h in Headers */ = {isa = PBXBuildFile; fileRef = A872D0AF2F86BA70FF401F6898E09D33 /* getopt.h */; settings = {ATTRIBUTES = (Project, ); }; }; C82B4ECAC9F24ABC6EFAB56B0CDEDBDC /* GTLRUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2119D6748E380E5815A3831CA3977A /* GTLRUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C87DC4532FB4EDA639952BE7DB5EA0A4 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 0011F0531529E83F54AAEB2C8A2969F1 /* Standard.deltamapping */; }; + C87DC4532FB4EDA639952BE7DB5EA0A4 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 5FA683FD9CEB1F0629D3586B5C0D5276 /* Standard.deltamapping */; }; C8938F662C069F5F0A31F1853DC14D2E /* GTLRDrive.h in Headers */ = {isa = PBXBuildFile; fileRef = 3144D27552079845BF5B0637FC88D62B /* GTLRDrive.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C8963BB26817BCC33E40F9AE8652DE31 /* NstBoardMagicSeries.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 62948F129BEF321213BDE3AC38E0CBDC /* NstBoardMagicSeries.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C96524CDB423028248FE52A069C84B94 /* RSTFetchedResultsDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 27AFE501DA9EA6202B3EE72F7468987C /* RSTFetchedResultsDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C8963BB26817BCC33E40F9AE8652DE31 /* NstBoardMagicSeries.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DB36295AA4074B36829063D11A8BDC98 /* NstBoardMagicSeries.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C96524CDB423028248FE52A069C84B94 /* RSTFetchedResultsDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 2090E7B6074A480B545986DD5394BCEC /* RSTFetchedResultsDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; C9898D393FDF7E17C404424E76078E76 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51271E29C0A54F7A1326245A7BE21051 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C98B4D02BC0E57B4BCBF55318C7991CE /* RSTSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = D6619CB5190C33CD4AF481F84D29F75F /* RSTSearchController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CA52FE953A256B3FA7D63719284CDD4B /* Dictionary+Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1045871F90D4D454EDB4A2C75FE2404F /* Dictionary+Sequence.swift */; }; - CA76BE843896592E98D70D4C9937477E /* transferpak.h in Headers */ = {isa = PBXBuildFile; fileRef = 706DA94E13FDA915B64893FE9918C85F /* transferpak.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CAA19D846835105188A3CCC602CFF800 /* InputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FC1CF3E36F8504F4DCC758CF61B97CAE /* InputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CAB565C736064CE66F49FC2F9939F653 /* oglft_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 58ADB3F7E23F3C6F3AEB1D5017488FDC /* oglft_c.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB0762ECE40307553CD674252738DE2C /* glsl_CombinerProgramUniformFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CC140E1F857FD727024B376FACB6D15 /* glsl_CombinerProgramUniformFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CB4D7CCAB208A3DB446872AD7C63A241 /* NstBoardIremKaiketsu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AAA8DF67E8C538AF865BB2D983391817 /* NstBoardIremKaiketsu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C98B4D02BC0E57B4BCBF55318C7991CE /* RSTSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1EB2114C929E81D171083B106C71103 /* RSTSearchController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CA52FE953A256B3FA7D63719284CDD4B /* Dictionary+Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F6407C6FBA4E320D564FF013EBEDCF4 /* Dictionary+Sequence.swift */; }; + CA76BE843896592E98D70D4C9937477E /* transferpak.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D36FB1E125F6A30F7E99925C34CD64 /* transferpak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CAA19D846835105188A3CCC602CFF800 /* InputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 502A6CD60EBBE6E5ABFA9CD22B78AEE5 /* InputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CAB565C736064CE66F49FC2F9939F653 /* oglft_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 33BD33AF73BEEF1769230AAB1B73B0F8 /* oglft_c.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CB0762ECE40307553CD674252738DE2C /* glsl_CombinerProgramUniformFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4126A8BF1768F9983511F2926680B88C /* glsl_CombinerProgramUniformFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CB4D7CCAB208A3DB446872AD7C63A241 /* NstBoardIremKaiketsu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 71AB68FE56ED4BF2433BBC850D1026C5 /* NstBoardIremKaiketsu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; CB7A5FD2D111FB945D4C60F8F9CEB90A /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60E75825D0C5BBF73C1EE33565BACBF /* RTree.swift */; }; CBD00AD2D050E606B432EF764F0443EF /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E672A1C13EE353B0AC39DE0F84A4323 /* FTS5.swift */; }; - CBFE788323DBFFF81708B579E642C550 /* plugin_delta.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7174246F378A58D37BD4927CEE3799A4 /* plugin_delta.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CC0725ACB5A40F203229C0A25D761B23 /* NstBoardSunsoft5b.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B5FF87A66DB9785A1AFFD395C49E2A88 /* NstBoardSunsoft5b.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CC26D87FA28610D70B4991837FDCAE5D /* NstBoardMmc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 87F4B88C0892C297B31AE94A0E93539C /* NstBoardMmc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CC71B7C78DFBA5A59F4A9F1260B6AD64 /* System.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1E5AC9B7C27792EF938FCB5C74BC658F /* System.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CC99BBC4FFD7CDDC2649600E0FA37564 /* check.h in Headers */ = {isa = PBXBuildFile; fileRef = 7887B596C85B88D5126C1D115B8C9582 /* check.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CCB42259A3740417E34809B42683CC18 /* ZlutTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 469D72AF2CB4C2BC1AEBC6D96997F695 /* ZlutTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD26AC8863B99B1389D09F13D85DC363 /* NstBoardSachenSa72008.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D58C0FE9AF63F39A0E7990E8ABEAA707 /* NstBoardSachenSa72008.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CD34FCE9FB88953FDCD13328912591F0 /* GBAinline.h in Headers */ = {isa = PBXBuildFile; fileRef = C32EC4E1163CB30B4250829CC8FCC1BA /* GBAinline.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CD43E632D8B976AAF6B22A9A83594BD8 /* NstBoardBmc800in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E350E01066A73585D9DE99D4C11B7C7A /* NstBoardBmc800in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CD4EB69FB76C000ACAC265440D164A30 /* ThreadLocalPtr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F1ED211A27FC73A088DC43D3FF931A16 /* ThreadLocalPtr.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CD80F55F2EB0D1ED46CA0003EF8683F3 /* NstInpPowerGlove.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D10088E315F5123F3D327A06066E206B /* NstInpPowerGlove.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CD819361F1900AD6FB43579B9DCAA9BF /* NstBoardTaitoX1017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 34347E5F18F11A1CEF5D0D59279705D2 /* NstBoardTaitoX1017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CD821C3D00A559E41113DAF03124B0FF /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = B3703612D238CE733DA02FE1314443CB /* array.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CBFE788323DBFFF81708B579E642C550 /* plugin_delta.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9579AB2737FD12BDDCDEDB9799737C0 /* plugin_delta.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CC0725ACB5A40F203229C0A25D761B23 /* NstBoardSunsoft5b.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF0FD474F9FEB46BE9E7E78E2AC5A906 /* NstBoardSunsoft5b.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CC26D87FA28610D70B4991837FDCAE5D /* NstBoardMmc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 10A0472CDCFE1CC45A359E5838CAB872 /* NstBoardMmc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CC71B7C78DFBA5A59F4A9F1260B6AD64 /* System.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BEE8A481C346821332E9ADE7236FB066 /* System.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CC99BBC4FFD7CDDC2649600E0FA37564 /* check.h in Headers */ = {isa = PBXBuildFile; fileRef = EF146F5F4C23AB7CC20D0F4F40286379 /* check.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CCB42259A3740417E34809B42683CC18 /* ZlutTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C680EA14E1BCE635BDC66F5CEF30F4B /* ZlutTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD26AC8863B99B1389D09F13D85DC363 /* NstBoardSachenSa72008.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 19ED46C78502A6DECB9188858E546EFC /* NstBoardSachenSa72008.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD34FCE9FB88953FDCD13328912591F0 /* GBAinline.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CE24F478FF46EBF0A19AD377B420DF /* GBAinline.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD43E632D8B976AAF6B22A9A83594BD8 /* NstBoardBmc800in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E2B96FEA76E92236E75F0848DE0D7ADD /* NstBoardBmc800in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD4EB69FB76C000ACAC265440D164A30 /* ThreadLocalPtr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9EDD646DD6348EE1AA653B68E3D0B306 /* ThreadLocalPtr.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD80F55F2EB0D1ED46CA0003EF8683F3 /* NstInpPowerGlove.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 820605CE2F2AA8CECEF751B81CDC1F0B /* NstInpPowerGlove.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD819361F1900AD6FB43579B9DCAA9BF /* NstBoardTaitoX1017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B8A07AF8FA08DD189EA38E162C486A42 /* NstBoardTaitoX1017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CD821C3D00A559E41113DAF03124B0FF /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C82EFB2F13ACDF594E201C36E2BE936 /* array.h */; settings = {ATTRIBUTES = (Project, ); }; }; CDD28AC1BB0F07E4991F10641F3B3ACD /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 73BCCFACB97ADF9811932D4767D83953 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CDF6E0B6206AF9A35A78A3C6D7E50BCE /* ftstdlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 70CFA30438DAE2DBE32611495D872EB6 /* ftstdlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE10DDDAE7EAF229186F72415E877A1F /* RSTLoadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 850505914251942B1C511C89AAFFF578 /* RSTLoadOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE77541D89641C7165E9A0A56ACC5B13 /* NoiseTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDEEF3EE5DBC5E579DE48E15CE14565 /* NoiseTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE8D08D29BB0A4769D2C276605AFB50F /* Harmony-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B551B63369A33A731AE3B25B4C7E772 /* Harmony-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CEAD3645EFC4389694E75CF1068CC91F /* HarmonyMetadataKey+Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BBE3A12499742BD09D9EBD2B293371C /* HarmonyMetadataKey+Keys.swift */; }; - CED63E1AB568688A1C00CA58D790243D /* DSTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D61A2E3D2CCD4FD36DF6278A7CFE46A /* DSTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CDF6E0B6206AF9A35A78A3C6D7E50BCE /* ftstdlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 487DD8DC7317E0C36210DD3B701C4E0C /* ftstdlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE10DDDAE7EAF229186F72415E877A1F /* RSTLoadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 451CFB17CBEBD52220C6B8E9777016CB /* RSTLoadOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE77541D89641C7165E9A0A56ACC5B13 /* NoiseTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 49C63527B0BFABA381E737722D9FCB11 /* NoiseTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE8D08D29BB0A4769D2C276605AFB50F /* Harmony-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C84F53DDEC96ABDB4E99816C838005FD /* Harmony-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CEAD3645EFC4389694E75CF1068CC91F /* HarmonyMetadataKey+Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7995A2AC9E3D083B7373FC9209B625BD /* HarmonyMetadataKey+Keys.swift */; }; + CED63E1AB568688A1C00CA58D790243D /* DSTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 6572AD0AF91A5CC97E1F7CEB62ED94A0 /* DSTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CF14CB07724E28C9AA37889A92FFD645 /* GTLRURITemplate.h in Headers */ = {isa = PBXBuildFile; fileRef = D27C9AEA920B8065DC8FB0F6F92A6E26 /* GTLRURITemplate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF15A4FD0438274D29A83992C4D7A186 /* Result+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 707D301E564B6E14192946179A6F87F5 /* Result+Dropbox.swift */; }; - CF250F8607C7E5B37247613578134177 /* DriveService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A3C156BDEC9D98DB4C0821812B71351 /* DriveService+Files.swift */; }; - CF31DD15B783DC030C99042424B72681 /* NstBoardBtlAx5705.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8FE991842BF4F0D0508BF1CDC5290400 /* NstBoardBtlAx5705.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CF652780A826660EF98D71D7CBD05BC2 /* GameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6DD6DB7B47787A5A8EA1D3325598F6 /* GameView.swift */; }; - CF85240AFAAECCEC4EED6E2AE3F565B9 /* F3DTEXA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF0DF7AF00BD39B06D1EDE5AD5FAF7AB /* F3DTEXA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CFB692A4993E0C91F447057DF39648E0 /* NstImageDatabase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1BCB1BC674B34EBE5044A5F4AC65BA67 /* NstImageDatabase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D0025BF44968B8EBA153B16DF6A7783B /* assem_x86.h in Headers */ = {isa = PBXBuildFile; fileRef = ADDD949ACAFD888D4958D62325464FC2 /* assem_x86.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D027F8D4E880D7092DB8AA5A02D7AAC9 /* CGGeometry+Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB52AEE6F8BD7BDA6E88E263AE184CC3 /* CGGeometry+Dictionary.swift */; }; - D0C55D7F18D9A49A467F0E0B8669B0B8 /* srtc.h in Headers */ = {isa = PBXBuildFile; fileRef = C790529DABD6E54A2BA3E56B1C845F12 /* srtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D10C97C4AB425B976ACAAE1D9CF6D55E /* NstBoardBandaiOekaKids.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 13CF8AB5A64D04015282404D80256EA0 /* NstBoardBandaiOekaKids.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CF15A4FD0438274D29A83992C4D7A186 /* Result+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439530753701672255509E76BB1AC1D7 /* Result+Dropbox.swift */; }; + CF250F8607C7E5B37247613578134177 /* DriveService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83EAB31E2D8E6844C8AD8F3F95F9ABB1 /* DriveService+Files.swift */; }; + CF31DD15B783DC030C99042424B72681 /* NstBoardBtlAx5705.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DF5405AEB7C1FBC155A415D86594377C /* NstBoardBtlAx5705.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CF652780A826660EF98D71D7CBD05BC2 /* GameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65E0BB76F563A560B6025A701C5B300C /* GameView.swift */; }; + CF85240AFAAECCEC4EED6E2AE3F565B9 /* F3DTEXA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F491BE89CC65EDBFCEB3B214D06C7200 /* F3DTEXA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CFB692A4993E0C91F447057DF39648E0 /* NstImageDatabase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83C151DB4B297DC753E27E2E0F3C3BC4 /* NstImageDatabase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D0025BF44968B8EBA153B16DF6A7783B /* assem_x86.h in Headers */ = {isa = PBXBuildFile; fileRef = D2188A915972865B5AF5C68B8B6D05B3 /* assem_x86.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D027F8D4E880D7092DB8AA5A02D7AAC9 /* CGGeometry+Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEDA901FE973732B0B1E37BD243D43BB /* CGGeometry+Dictionary.swift */; }; + D0C55D7F18D9A49A467F0E0B8669B0B8 /* srtc.h in Headers */ = {isa = PBXBuildFile; fileRef = 291D59A8B427D100ED229874D4D9C1A4 /* srtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1014816F973C67639F5622AAA455B97 /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 95E5CEA8D238911F127A409B1C8C507E /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D10C97C4AB425B976ACAAE1D9CF6D55E /* NstBoardBandaiOekaKids.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16334C263B60314F60B061077457ED0F /* NstBoardBandaiOekaKids.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D181DC3438FCD7E645A072E81889876A /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 882DA4CFDB38488363DB6FA79E5CF3BE /* ZIPFoundation-dummy.m */; }; D1872BEC18A09543B94BFE0EAD273D61 /* GTLRDriveQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = A0A504E08A6B298395CDE7E0BC7FBA95 /* GTLRDriveQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D1D87A24D37112C4AE2EB188C51C053F /* OGLFT.h in Headers */ = {isa = PBXBuildFile; fileRef = C27BB3E37D9E25626486536CA6D1890B /* OGLFT.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1FDBA676483451ED77786AFE5AF47EA /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 618949190C9EE4497D8F00EDA7A856E7 /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D27C34B3B39EBA92E9B725D3797B698A /* cheatSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 79B10B2722F1132312871D229953F2DA /* cheatSystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D27F755D124E238008EB400F04D2E040 /* fxemu.h in Headers */ = {isa = PBXBuildFile; fileRef = 24E1A25642D89F5B30A1BB2FB864AFA7 /* fxemu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D27F8F70A73867B450D3D9CEF4B923E8 /* GBAEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B46E429745DDFCAA08E329F0BBAD9911 /* GBAEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D298FA6F6D28DD13D771BC71411D5851 /* NstBoardJalecoJf19.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 994237033CE941B5B49F4E0EC30ADD01 /* NstBoardJalecoJf19.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D299CCB9A5A6574C3B9776B6B7065208 /* NstBoardAcclaim.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6ADD780B3EFDC84E892E216A11E12B84 /* NstBoardAcclaim.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D2A37DEFD55B0BA864F27119BE974CB0 /* BatchRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0883789E4810C71ABF67BD6770636C52 /* BatchRecordOperation.swift */; }; - D2A71E3AD54E049A5C1DDBF12C93A2AD /* hle_external.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7D780A13B2915F46EF4226090CBCC5 /* hle_external.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2E7A94DA4EB51A3145F965B880B6F2F /* ContextSettings.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E10172E8D8CCCF9773BF6EA4BEBC7E05 /* ContextSettings.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D2F1CDE15B2375C94A421A1564AF13D4 /* eeprom.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E9F261B8796880679ECD1AF1FDC584 /* eeprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D31C73EFFED048D38F9F383BD0098DA3 /* DepthBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = DBCF759085E40951D39485BB214BB25C /* DepthBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1D87A24D37112C4AE2EB188C51C053F /* OGLFT.h in Headers */ = {isa = PBXBuildFile; fileRef = 2511FA9F98FE3FCC75E29A21D78C7943 /* OGLFT.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1FDBA676483451ED77786AFE5AF47EA /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 46834904D33267E3CBEE319642FFC703 /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D27C34B3B39EBA92E9B725D3797B698A /* cheatSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 8466D7DB1CB791A44DECBDED6290F796 /* cheatSystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D27F755D124E238008EB400F04D2E040 /* fxemu.h in Headers */ = {isa = PBXBuildFile; fileRef = 6944EA8E8CC44D97F089057D5BBB67A6 /* fxemu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D27F8F70A73867B450D3D9CEF4B923E8 /* GBAEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 35CA6F1D8D4FD82291C1148088DDB220 /* GBAEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D298FA6F6D28DD13D771BC71411D5851 /* NstBoardJalecoJf19.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6FEE36BBE5119D88DE64B64D975EC87B /* NstBoardJalecoJf19.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D299CCB9A5A6574C3B9776B6B7065208 /* NstBoardAcclaim.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4C6BE6BA9CC949F3EDA941ED2CBEB38 /* NstBoardAcclaim.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D2A37DEFD55B0BA864F27119BE974CB0 /* BatchRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5967CB93E1B68FCF175E97CD13D10CFD /* BatchRecordOperation.swift */; }; + D2A71E3AD54E049A5C1DDBF12C93A2AD /* hle_external.h in Headers */ = {isa = PBXBuildFile; fileRef = 5277A427B540B8A971E15DE8732388E9 /* hle_external.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2E7A94DA4EB51A3145F965B880B6F2F /* ContextSettings.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 725B23CE4361DD6771F70C91256E286B /* ContextSettings.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D2F1CDE15B2375C94A421A1564AF13D4 /* eeprom.h in Headers */ = {isa = PBXBuildFile; fileRef = 6750964B0895F740D52DD97CAE8B5099 /* eeprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D31C73EFFED048D38F9F383BD0098DA3 /* DepthBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5735CEBEDBCB212533CE2D0112224D5C /* DepthBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; D324B3C6609ABF310B5E1436F17C2BF3 /* GTMDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = FC141D48A65D77B26B9922807BD281CC /* GTMDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D386CE84965DC46DB052B5BE658BEB2A /* ControllerSkinProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DADD8386C8821177B764FB59ACB6859 /* ControllerSkinProtocol.swift */; }; - D3A01F05B185083B517E4626FDF3C57D /* RSTCellContentChangeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E57A55642D58F21D06BBD64DEA5CA1DC /* RSTCellContentChangeOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D3ABAE47C410AFEFE62EFF0A4B01988B /* NstBoardUnlSuperFighter3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4BD0DDE5441618EF592651345A1BB212 /* NstBoardUnlSuperFighter3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D386CE84965DC46DB052B5BE658BEB2A /* ControllerSkinProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F4FE55BE08EA38FF320E4286A4C43C7 /* ControllerSkinProtocol.swift */; }; + D3A01F05B185083B517E4626FDF3C57D /* RSTCellContentChangeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = FCADC95CE36A81554A4E95CD8996C26C /* RSTCellContentChangeOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D3ABAE47C410AFEFE62EFF0A4B01988B /* NstBoardUnlSuperFighter3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0971A5E1176766915B5C63ECBAF0E9A1 /* NstBoardUnlSuperFighter3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D3DEAD4C77A168D67D3EC458661D424E /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = F10F7750064142DE73F6F7454CC2983E /* GTMSessionFetcherLogging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D3E635DF7C5A3F831C0ED826B7EF3045 /* ftincrem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A5D80F4652B7C7C71549D654A6F22B0 /* ftincrem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3FF3FDEA482BBCE33A46B4F848933D8 /* TextureFilters_2xsai.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F714F0736F9866EDD6871679177CF33 /* TextureFilters_2xsai.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D409C376103600BCF90AEA2463CCEF6D /* m64p_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 38ADDB2045DD7DB1E4811DC4854871C1 /* m64p_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D409FD1F1DD00E6994F0308A8E0C0D3D /* svttcmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD4D6B9E5A8C737F812D9FE05776374 /* svttcmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D453E0EF8D2BCC7A9FADF4856AB23D42 /* glsl_ShaderStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 90696DCC98EAADB42AE7018A27D415F5 /* glsl_ShaderStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D47799D2FEF7EBAF1EEC0D02D279AE11 /* SoundSource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D17E68802F2F252D95693D1AA5ADC144 /* SoundSource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D4BBFE50425065DFEBA634F40C1E480E /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA62E018BD55A8B1DBF638C1BDE2C3B /* types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4E54F8583E6BD0B7E8D5C37D0268831 /* TextDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F8EFA2C77C87A2217F6683EB75926B9 /* TextDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4F4CED77BC0C96F563776174E66E619 /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = A0FED83361E402BB0547DB052277ECCD /* cpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D52D782E8B77295F31DAAEF79BFBABD0 /* NoiseTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD6C840F168CC0216273566943F214F5 /* NoiseTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D5AAE75D370FC24FD284ADBB1EEC5445 /* sar.h in Headers */ = {isa = PBXBuildFile; fileRef = 15EAE2283516A3200D537010AA0BBCF9 /* sar.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6501B43E8C5A97BD005573C1BF291EE /* UIApplication+AppExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D529199D3F461EACEE4D0D45FA961BF4 /* UIApplication+AppExtension.swift */; }; - D6A44C024915094BD0A87D4DFC412F6A /* cpuops.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DBAD979C7A7D60BB2463567CEF807D0 /* cpuops.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6AB41F528E0CBE33F26C2ECABEB070B /* NstInpPad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EBB1A01E856D7D91BD846C278311FFB7 /* NstInpPad.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D3E635DF7C5A3F831C0ED826B7EF3045 /* ftincrem.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3622A7449225751220AF6FE10DD230 /* ftincrem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3FF3FDEA482BBCE33A46B4F848933D8 /* TextureFilters_2xsai.h in Headers */ = {isa = PBXBuildFile; fileRef = 91E7D2C0AB72AAC3471B7798B8B29960 /* TextureFilters_2xsai.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D409C376103600BCF90AEA2463CCEF6D /* m64p_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 422A7E950D9644BA89560B6CC1EA1194 /* m64p_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D409FD1F1DD00E6994F0308A8E0C0D3D /* svttcmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 478F2C8230CA263EC0A07EBCB8012403 /* svttcmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D453E0EF8D2BCC7A9FADF4856AB23D42 /* glsl_ShaderStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E986068DD96944D1D5B4F242C7C4976 /* glsl_ShaderStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D47799D2FEF7EBAF1EEC0D02D279AE11 /* SoundSource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 904DA70530378048CC4E91EB8EF417B8 /* SoundSource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D4BBFE50425065DFEBA634F40C1E480E /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C8CA8E12823E49115A148B8AF4C1682 /* types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4E54F8583E6BD0B7E8D5C37D0268831 /* TextDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = A992E878783FEF42B0A952857F40B4CE /* TextDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4EF0B9C680FAABDFBF23493217BEBEA /* ARMInterpreter.h in Headers */ = {isa = PBXBuildFile; fileRef = 55823D54327ED2C23F433C3F864E151A /* ARMInterpreter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4F4CED77BC0C96F563776174E66E619 /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = D29AAFD2CFE6FB0F7D7946F037550722 /* cpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D52D782E8B77295F31DAAEF79BFBABD0 /* NoiseTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD6FBA65BDE1FCB431C91C3080423E1E /* NoiseTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D563CBCD51C3113785FB38FE63262495 /* WifiAP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91B3FF1A239E6CDBA01D3586039A9C7E /* WifiAP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D56F29E45DD478816308DCF5288A13E1 /* ARCodeList.h in Headers */ = {isa = PBXBuildFile; fileRef = 34AF57CCCC40097CEBC29D385D24E7AB /* ARCodeList.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D5AAE75D370FC24FD284ADBB1EEC5445 /* sar.h in Headers */ = {isa = PBXBuildFile; fileRef = 9165270C982D16BF84A0C0FC722EF7F0 /* sar.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6501B43E8C5A97BD005573C1BF291EE /* UIApplication+AppExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98985DB2B0E10E3D6C992708741C684A /* UIApplication+AppExtension.swift */; }; + D6A44C024915094BD0A87D4DFC412F6A /* cpuops.h in Headers */ = {isa = PBXBuildFile; fileRef = 53E9A117D241958D71059796ACCE24C6 /* cpuops.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6AB41F528E0CBE33F26C2ECABEB070B /* NstInpPad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 23D60DF4C8C979E59877EE0BC1BA7C94 /* NstInpPad.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D6B9F611C6D9C0C8CD854D4E488E6AB5 /* GTLRQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 4607BD69102AF97F0A85D6512B3409CD /* GTLRQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D6E2B0F609F10E48830213BA053DB040 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 31C90C17DE46AAD6D2786B0098B71196 /* Standard.deltamapping */; }; - D721B239753D7F7FDDE916AFE3FCB235 /* opengl_Parameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EC841F694F3A53D5F5B027513353CD6 /* opengl_Parameters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D7374BAD47CD61AA924220F7A5043F63 /* cpuaddr.h in Headers */ = {isa = PBXBuildFile; fileRef = BABB271F3BD66B98A48FF2230E57E168 /* cpuaddr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D753580473283FA203738466F2939B6A /* AnyKeyPath+StringValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FF38B518700B0B715F71F0BA0F88F21 /* AnyKeyPath+StringValue.swift */; }; - D79A7F006A37B1D450F1B4520E3145D0 /* TxTexCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FB4CA94B76B2411E5EE78414D82B20E /* TxTexCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D808972D53AC615EC3DBB96E9B7517C7 /* TxDbg.h in Headers */ = {isa = PBXBuildFile; fileRef = EA340C7B4D3388A8450F9A24994AB881 /* TxDbg.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D808ED025C15643A9FD4FD11530825C7 /* missing.h in Headers */ = {isa = PBXBuildFile; fileRef = C8A210C3B60C6D8D12F6F8820EF28589 /* missing.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6E2B0F609F10E48830213BA053DB040 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 101B4E4EEFA447219922363435CA78CF /* Standard.deltamapping */; }; + D721B239753D7F7FDDE916AFE3FCB235 /* opengl_Parameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A35B20685D6B2F22C568D23E73C3E50 /* opengl_Parameters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D7374BAD47CD61AA924220F7A5043F63 /* cpuaddr.h in Headers */ = {isa = PBXBuildFile; fileRef = AB71B3A5AD08C7FD7FFA348B2DCEA559 /* cpuaddr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D753580473283FA203738466F2939B6A /* AnyKeyPath+StringValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 723AFC03DAB1F2E32CB45A4F3ED5FD35 /* AnyKeyPath+StringValue.swift */; }; + D79A7F006A37B1D450F1B4520E3145D0 /* TxTexCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 508153374379761825956DE2D625E976 /* TxTexCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D808972D53AC615EC3DBB96E9B7517C7 /* TxDbg.h in Headers */ = {isa = PBXBuildFile; fileRef = 951AF961D61C1C3B55D7700D57143D91 /* TxDbg.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D808ED025C15643A9FD4FD11530825C7 /* missing.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B57B3A4300861FCBCF153277342957 /* missing.h */; settings = {ATTRIBUTES = (Project, ); }; }; D81057F2081420DC4B25CDA39DBC3B96 /* GTLRRuntimeCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DEDD6511A23A74FFB52233C54AB8E03 /* GTLRRuntimeCommon.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D840CD895C00C5B1FF24F78ED7A72681 /* DSDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 712761EE4481E36BC7DD29218D12A6CF /* DSDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D840CD895C00C5B1FF24F78ED7A72681 /* DSDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C7136242783A97DD4FA174D6AD000A7 /* DSDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; D8524A5C842C0580F42718FE94C8F791 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42A9F4072A21C2D6095C0971EEC3FC1A /* Alamofire.swift */; }; - D853F1F532071DE2D4AED3E6608F2ED8 /* cic.h in Headers */ = {isa = PBXBuildFile; fileRef = C2ED97BD0F13C57ECCE6851D581326EB /* cic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D8889A6910820C522D9EC5AE0F105B7B /* UICollectionViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = A706F5A8614DC9AF3A7BAF5EE08D7A37 /* UICollectionViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D896BE2637D4D0EE60FE67FB5B01F686 /* RemoteRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F994DCAAF05A0E4ADF9D352FAB0A16E /* RemoteRecord.swift */; }; - D8BEDCF49E6864FFFCE6F10F633F3500 /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = C73137BF8F38B56D677038CAFECF2A56 /* pngwtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D8CCD6B044F74A8D1C4DC7569527A1C8 /* F3DSETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 362727B8448D5ACBAA6199388904E6EE /* F3DSETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D8E9FCCA464240BD9F53DE1BA3C90BB1 /* messages.h in Headers */ = {isa = PBXBuildFile; fileRef = CE46BF9BB2E03B58F53E69C87B3A1564 /* messages.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D853F1F532071DE2D4AED3E6608F2ED8 /* cic.h in Headers */ = {isa = PBXBuildFile; fileRef = 34B01107A2C96AA02DBB861B4B38041C /* cic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8889A6910820C522D9EC5AE0F105B7B /* UICollectionViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 142265A2DED24A866633D72B79145B0B /* UICollectionViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D896BE2637D4D0EE60FE67FB5B01F686 /* RemoteRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD29A29166068991BD1FCD1B5147A8F9 /* RemoteRecord.swift */; }; + D8BEDCF49E6864FFFCE6F10F633F3500 /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = ED6B167EAADE8506F1864999731E6AD6 /* pngwtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D8CCD6B044F74A8D1C4DC7569527A1C8 /* F3DSETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 9147D9287688D6DBCB391FCFFB5E8CD9 /* F3DSETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8E9FCCA464240BD9F53DE1BA3C90BB1 /* messages.h in Headers */ = {isa = PBXBuildFile; fileRef = 037E3F75B195945C62D341A82A439502 /* messages.h */; settings = {ATTRIBUTES = (Project, ); }; }; D8F09E6FFEAEFBFFA69546C6F36EF74F /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998BCE1BFCDA316A894F5BE77EF92AD4 /* Coding.swift */; }; - D90EC0383E3C3CC3B40EFEA3EDD6169C /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = CD4250629F8C1D5652E021E52A3F196C /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D9D4A8CFD5AEC9CB6CD5E416F08C8B65 /* svbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = D0CE7BCBDFB3A9A4EBEA78CB70BFFB3E /* svbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D90EC0383E3C3CC3B40EFEA3EDD6169C /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = AC7A3157CBEE276869625E60733756D9 /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D917430D486E5BD25A2CA0B8B4F237B9 /* GPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EACF9BBDC13D732E0443F9F9FCC5743 /* GPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D956507314E15EB55215F3587C359E4B /* MelonDSTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 99F0DA991B4249223E7D8A9CA0767BA2 /* MelonDSTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9D4A8CFD5AEC9CB6CD5E416F08C8B65 /* svbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7AF9FE08D2F6576462E7ECCC9C6E89 /* svbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; D9D678A3261AB86A7637EB79F73B0D27 /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1089BC73E36C74AEF372EEED122EFC /* GTMSessionFetcher-dummy.m */; }; - D9EEECDA4CC74FEDE82B29E37FF2C225 /* pnginfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8844375C652ED43B6CF8305EA32D5488 /* pnginfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA2B760E4D6E2D31F977E72C22441865 /* JSONDecoder+ManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9A3509FC2D34122712EB62CE66B6845 /* JSONDecoder+ManagedObjectContext.swift */; }; - DA2DA6C00C0EB1612EEEF2C30A494919 /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B69ECEA6865A9F1815D0B371F50D01E /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA9EC56A8CABDE13F39C9D32BC8F37F5 /* N64DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F84345A499EAE58FE864424329CC0465 /* N64DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9EEECDA4CC74FEDE82B29E37FF2C225 /* pnginfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C31FD97E461D0628F310200A8D3B403 /* pnginfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA2B760E4D6E2D31F977E72C22441865 /* JSONDecoder+ManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 103B62F4A02A6FB81B5873123E3E4EAE /* JSONDecoder+ManagedObjectContext.swift */; }; + DA2DA6C00C0EB1612EEEF2C30A494919 /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F9BFBF397EFF80B8131726E9C9A62C9 /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA9EC56A8CABDE13F39C9D32BC8F37F5 /* N64DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D9D073E172499FE0BA408392C89173 /* N64DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; DB02626D12C516C4CD6A9EA98D20A50A /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F298C5D309EDC6DEBD36255472EF52C /* SQLite.swift-dummy.m */; }; - DB271162188B9FCB78E0150B0D2B6917 /* NstBoardWaixingSecurity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 61C1E3F8AE5D758C9D04B1A80F1A6C85 /* NstBoardWaixingSecurity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - DB37D974F8E6FB9101F45E79F9AC3858 /* FinishUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 276E27532E9C2ADF0C058B16208B439C /* FinishUploadingRecordsOperation.swift */; }; - DB41B47B5BEAA2503BCEF6C2AAD2ED01 /* NstInpMouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6EC6A1A3D10181EB3D7A3F51FFA233C6 /* NstInpMouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - DB4B31BA9A8CC6D815BB4F31E455EBA3 /* NstBoardSachenSa0036.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A4100365716D2689894AEB6AEEE7DDE0 /* NstBoardSachenSa0036.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DB271162188B9FCB78E0150B0D2B6917 /* NstBoardWaixingSecurity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9E96797E03C6BA19B7B506E463067AD1 /* NstBoardWaixingSecurity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DB37D974F8E6FB9101F45E79F9AC3858 /* FinishUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86E0555011765103678D4A46B0D7CD30 /* FinishUploadingRecordsOperation.swift */; }; + DB41B47B5BEAA2503BCEF6C2AAD2ED01 /* NstInpMouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4E1E1F9090B631F29A327D322AFF5B4E /* NstInpMouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DB4B31BA9A8CC6D815BB4F31E455EBA3 /* NstBoardSachenSa0036.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6004CD9FBFF76F6C36F2C167315443BA /* NstBoardSachenSa0036.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; DB5891014AF5583F4CE70D67063FEBF4 /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BED699E7391C1CA0477C2735B758007E /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB663E8C81B503B69E519340CFD0C66B /* NES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 963237A63667F4DD10B901754C2F8AB2 /* NES.swift */; }; - DBB21494E4A3EA8A6FF8B3085A328E46 /* render3D.h in Headers */ = {isa = PBXBuildFile; fileRef = BD2858200C2A47FC9A917133A7D25353 /* render3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB663E8C81B503B69E519340CFD0C66B /* NES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 188673BC9859FF22057D8B552AA23087 /* NES.swift */; }; + DBB21494E4A3EA8A6FF8B3085A328E46 /* render3D.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7D9B45C83FAE5CBAA7610FA983D9EF /* render3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; DBF0A6C0BE990638F43CB71209C4E731 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 83433F387FADB6F93585B15C45F26C41 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC2B5FAE55CCDB0BAF6EC9CC3F2F95EC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5A838589A5289E842980290C10BFF17 /* RingBuffer.swift */; }; - DC55F0600EEC5E8DDFB1E3A6E633E92C /* device.h in Headers */ = {isa = PBXBuildFile; fileRef = 687441E742910C0DF7081813BECD4638 /* device.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC6D980DA6070C8E0E652312C90A57D0 /* svgldict.h in Headers */ = {isa = PBXBuildFile; fileRef = 77E4E93A1AA6AEE3A862BF83964C18B4 /* svgldict.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD439A1182CBF12FE98F8D4FB2B1F65D /* ftstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 821E332423194BD75B70F229D0992A67 /* ftstream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD4937FAD87A66D3E6AF7320226ADDB6 /* NstBoardSachenSa72007.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92E86921655A3432DD8E836D484C63DB /* NstBoardSachenSa72007.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - DD620D1ACC965F9F33B8EE775A1C2929 /* NstInpRob.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52EF51E3091C9D586B56E01C7A9F0C53 /* NstInpRob.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - DD965F38F3926F23D15FF807E4486928 /* RSTCompositeDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C1CD631F0A847D6AFABB4216480B7556 /* RSTCompositeDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DDCED74F45A4D745CCD7F319429DAD10 /* c4.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B7FEA4E81066CF6432FBD99B31C13B8 /* c4.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DDCFF8BD823EB8F9837DF1B4034FF1E8 /* F3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 22E13ACA822EB61BEEF5DF35BDB4B13E /* F3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DE128C6384EFDCB0627D9980E76E9E20 /* N64EmulatorBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FA41CF9BC943DB28A21577ABD2D7C6E /* N64EmulatorBridge.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DEA2456E9F8C9B4F29D544BFCF3E332F /* NstBoardTengenRambo1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 25F7A6B233074D6DD97705181306F479 /* NstBoardTengenRambo1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - DF266745A6B1E11185D36EF99E10B829 /* F5Indi_Naboo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBF793539672A386F6C337B8667AE813 /* F5Indi_Naboo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DF7E34A9447E1503AAD895111E3BCBF3 /* bsx.h in Headers */ = {isa = PBXBuildFile; fileRef = 23C48688B8A512FFB646E121E3FD49DF /* bsx.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF99C4FED01516A806E69CEFC02A63B3 /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B33477F335E1B6177EC8672F22289C /* pngconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFAE2CDC207F2309CBB7EB0926066FDC /* TxCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C0B76FEDF3385F8F3AF9A682EC0E276 /* TxCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFBC1B62E183576C5A9FB35846F46CAB /* cp1.h in Headers */ = {isa = PBXBuildFile; fileRef = 254CC3AD77C6322C8CA4B65F52B9F198 /* cp1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFDD4A619790FBB12996A1A6A144E116 /* netplay.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E7E27D5ACEAA8A8DA1B1BD200ED75A2 /* netplay.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFE47A6A5129454BBE6488DA6493348A /* NstBoardAcclaimMcAcc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B137B57F8091633EB513C60304ED2C7C /* NstBoardAcclaimMcAcc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E028E6BB5BF11783165428AFB4371D2D /* ereader.h in Headers */ = {isa = PBXBuildFile; fileRef = BE88F0656454261D53E5BE768654A774 /* ereader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E045AEFAFAB999408460996561247AFF /* ftimage.h in Headers */ = {isa = PBXBuildFile; fileRef = 043B3C37DAA8DA3F93EF9856913625DF /* ftimage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC2B5FAE55CCDB0BAF6EC9CC3F2F95EC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26169D7A10310A0CE0A585A679CB5736 /* RingBuffer.swift */; }; + DC55F0600EEC5E8DDFB1E3A6E633E92C /* device.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BB6F43FE56F847084FF20D1BCB4BFAF /* device.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC6D980DA6070C8E0E652312C90A57D0 /* svgldict.h in Headers */ = {isa = PBXBuildFile; fileRef = B290CCC059154476A70C27D7890B7036 /* svgldict.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD439A1182CBF12FE98F8D4FB2B1F65D /* ftstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ADEEFFAB7CD01EA4E844F0F78DBC0E1 /* ftstream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD4937FAD87A66D3E6AF7320226ADDB6 /* NstBoardSachenSa72007.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 026C9449D2CD7E3C08836E3B3C86F709 /* NstBoardSachenSa72007.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DD620D1ACC965F9F33B8EE775A1C2929 /* NstInpRob.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E53076134FC473CEAF27FC2CFCDC3C7F /* NstInpRob.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DD965F38F3926F23D15FF807E4486928 /* RSTCompositeDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A4CBD7EC311541871920C24EA2D9548 /* RSTCompositeDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DDCED74F45A4D745CCD7F319429DAD10 /* c4.h in Headers */ = {isa = PBXBuildFile; fileRef = C57031E8B6DD0EBAC4E35185FB93794C /* c4.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DDCFF8BD823EB8F9837DF1B4034FF1E8 /* F3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDB291BF8A6C2C5E7A503B53159F5FFE /* F3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE128C6384EFDCB0627D9980E76E9E20 /* N64EmulatorBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FFB36B4D0570AD68F47D94918FDE579 /* N64EmulatorBridge.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE2C177F1F0790310E321F30BF5FEEB6 /* GPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4D5FBCFDF444CE792F8C8209C5606CC /* GPU.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DEA2456E9F8C9B4F29D544BFCF3E332F /* NstBoardTengenRambo1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 59DA3AD3BCE17B64234F6C8CDB4FAA0A /* NstBoardTengenRambo1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DF266745A6B1E11185D36EF99E10B829 /* F5Indi_Naboo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D35DC1DC3A814BF1FDEBF8BA115A3C0 /* F5Indi_Naboo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DF7E34A9447E1503AAD895111E3BCBF3 /* bsx.h in Headers */ = {isa = PBXBuildFile; fileRef = 985EAE9972B33CF9F927C6F483A4B357 /* bsx.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF99C4FED01516A806E69CEFC02A63B3 /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7E6516A5BEBD6103C2071A1BA86E73 /* pngconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFAE2CDC207F2309CBB7EB0926066FDC /* TxCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6154AA0F4F3D72A490406941DDA56ECF /* TxCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFBC1B62E183576C5A9FB35846F46CAB /* cp1.h in Headers */ = {isa = PBXBuildFile; fileRef = F0308817B700E8598B67B8DC04CB453E /* cp1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFDD4A619790FBB12996A1A6A144E116 /* netplay.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C1BA9EB80CFC347F52BD3EC8F1856C4 /* netplay.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DFE47A6A5129454BBE6488DA6493348A /* NstBoardAcclaimMcAcc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73AFCBDE3C3C3422A99EE597CEF40C70 /* NstBoardAcclaimMcAcc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E028E6BB5BF11783165428AFB4371D2D /* ereader.h in Headers */ = {isa = PBXBuildFile; fileRef = 52F99D4811CD8DBB2B4EDC0AB616E6B4 /* ereader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E045AEFAFAB999408460996561247AFF /* ftimage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DD7EE7BA4F30F6178A84660D851DE0B /* ftimage.h */; settings = {ATTRIBUTES = (Project, ); }; }; E0584F089FB27ABA38D5D355721DE37C /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EEADA9A5C4C5EF8A88BBC09B95C5F62 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; E0B3B5EFD0E958737E6D09B5135C5ED9 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E51C90A9B7B35AEE09669310AB15BED0 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E0C7D4449AA8C5D15535E79C43CAAA19 /* NstBoardBmcSuper22Games.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0A0F6D5E39D8F599381FA5E8BB34178E /* NstBoardBmcSuper22Games.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E0CD89ED735B076967D48760C0A1BFE1 /* sdd1.h in Headers */ = {isa = PBXBuildFile; fileRef = 99EB232B4913EA46C51277C86DF16B8D /* sdd1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E100B6C29C8EC1E8BFAE2435884A3FC0 /* tttags.h in Headers */ = {isa = PBXBuildFile; fileRef = 61596E997AFE32646B435FCBF43BA32F /* tttags.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E10B2C2CC334BEF5895DC4C950250177 /* Texture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 44D209BABFBAEF92A3A476D1046B160F /* Texture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E11B7AAF1933D8FF81EC1A4AA3B01862 /* L3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8AA9AC2951C819D3D589F82FAD7F5A65 /* L3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E12B8F200ECEFDDF5544EFCFD880324B /* retro_environment.h in Headers */ = {isa = PBXBuildFile; fileRef = D1212ABF80224A615FAA8D5EA7127F55 /* retro_environment.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E19486EB42DE44DE94BA6D8BA26ADCD5 /* RSTRelationshipPreservingMergePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DF27D7E65CA1A9DC28C57F4FE6BD1B3 /* RSTRelationshipPreservingMergePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E1A2DFE668E3513F0D9B7761FEACB3A3 /* NstIoAccessor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0C9A66906E90E69652DE559EF77F4E9C /* NstIoAccessor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E0C7D4449AA8C5D15535E79C43CAAA19 /* NstBoardBmcSuper22Games.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B3F49F00CD6F1E7B2934D5D66A3DED6C /* NstBoardBmcSuper22Games.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E0CD89ED735B076967D48760C0A1BFE1 /* sdd1.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C927AD9499B9097EC14BFB7DAAB353A /* sdd1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0D3FCAEAEA0ACEA63F32A34AA72B9DD /* GPU3D_OpenGL_shaders.h in Headers */ = {isa = PBXBuildFile; fileRef = 89BCCB329ED94B86E8C48CB481557F79 /* GPU3D_OpenGL_shaders.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E100B6C29C8EC1E8BFAE2435884A3FC0 /* tttags.h in Headers */ = {isa = PBXBuildFile; fileRef = FBB09720E5E561800A0A26EC646F3678 /* tttags.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E10B2C2CC334BEF5895DC4C950250177 /* Texture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 21FF5A1389969C1EED92B8D6155554D5 /* Texture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E11B7AAF1933D8FF81EC1A4AA3B01862 /* L3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 280A5539EBE87BEA10C7C1654D729DCC /* L3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E12B8F200ECEFDDF5544EFCFD880324B /* retro_environment.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A147B56E0C3491FF27162D46C95BDD2 /* retro_environment.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E19486EB42DE44DE94BA6D8BA26ADCD5 /* RSTRelationshipPreservingMergePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4070FFD16B4FA23902478F9D6197345C /* RSTRelationshipPreservingMergePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E1A2DFE668E3513F0D9B7761FEACB3A3 /* NstIoAccessor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6BFD0F656B9079094013712B8261B5E1 /* NstIoAccessor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E21F9E3675CE2A5C2910F409DB690497 /* DBChunkInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A52DF3CA0011FA99AF644362B09A598 /* DBChunkInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E240D32BDB49F8E26000117E1792DA24 /* NstApiDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8C20A4261AAB5D4731891122D5059BB1 /* NstApiDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E240D32BDB49F8E26000117E1792DA24 /* NstApiDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DC6964261E4DD7BE99FB445FC8757345 /* NstApiDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E24C77E406D608D65CF44CC758D79AA2 /* SwiftyDropbox.h in Headers */ = {isa = PBXBuildFile; fileRef = E248CA8F99CCB2FEEDCE6967354F7FB4 /* SwiftyDropbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E255C62B0C6D845C74DF1CFD04F0E7F6 /* F3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = DBC2FE16691E41109D7168B4B47BC729 /* F3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E25E5FB3CA97B41662F326DC6DFFFC0B /* DriveService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BA47FDD506E39A2EC6B9965BF416961 /* DriveService+Versions.swift */; }; + E255C62B0C6D845C74DF1CFD04F0E7F6 /* F3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC10C4E5FDC7C7C25A7DAC7A2FB11BB /* F3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E25E5FB3CA97B41662F326DC6DFFFC0B /* DriveService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABE1F0BA1ED297C8F6D7E93A5DA90FAA /* DriveService+Versions.swift */; }; + E2DF8E621CBBBD441DE3FDF670B7AAC2 /* AREngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24A40AF418C2457D3920E3BF8F07B147 /* AREngine.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E30AE4CE714FCC551A4A3B0516BBC707 /* GTMMethodCheck.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C47011115A00E9556AC311099987E7 /* GTMMethodCheck.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E31D2295622D14AFDD069E14F5195C13 /* AudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62653D6633FD230F25923698824EFA8E /* AudioManager.swift */; }; - E35B0A7D23FC7611AAEEED1AF19073BE /* NstInpPachinko.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5A73FCE0E18FBE8EBCCEB74397FEC76A /* NstInpPachinko.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E36C54619AD747C9D5825D0F555BB156 /* N64Types.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ECDF285F3E093B02D0B6A530686B0BF /* N64Types.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E393EE012D54F6BB208480E720AE5752 /* GBCDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C838A28075396ED66AEF6F512BA0446 /* GBCDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E31D2295622D14AFDD069E14F5195C13 /* AudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6DFC3B7AD060F43D4AFFBCD3F06AA6 /* AudioManager.swift */; }; + E35B0A7D23FC7611AAEEED1AF19073BE /* NstInpPachinko.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C05E3B2663EB9FC3F88BC0AF00C603AC /* NstInpPachinko.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E36C54619AD747C9D5825D0F555BB156 /* N64Types.m in Sources */ = {isa = PBXBuildFile; fileRef = B9645A97F892996BB5BF51B8D0D43A0B /* N64Types.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E3760F1B277D93ADB9423C1C79590845 /* GBACart.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA2C169265FC922C39733E381863E7 /* GBACart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E393EE012D54F6BB208480E720AE5752 /* GBCDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A823D93C54BF9183AB990B267E0FBF5 /* GBCDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; E3C4CC0E44B8054138477E9731B4E454 /* ContactsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77CE0C99378A2FDADC3F70471D336C79 /* ContactsRoutes.swift */; }; - E46D10AADB66A01A9490A813CA496DCE /* NstBoardBmcResetBased4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 18EC95A3A3E3430E185F60F3BA643D4B /* NstBoardBmcResetBased4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E473810AFA4985FDC030B75DAB7E86A9 /* new_dynarec.h in Headers */ = {isa = PBXBuildFile; fileRef = 252CCD4194A312D6A647E0B27A002330 /* new_dynarec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E47A977F4840A1287E1A8645E6E560B7 /* ShaderProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = 74FAEBE92C3B0B35D90248D577885466 /* ShaderProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E4D06B0BA213CA79BD97BB9B611A2EB5 /* N64.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E9673A8687B4C246AFECBFC5FA4C2C2 /* N64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E512749AF7921ECA10C99B7DDADA916F /* NstBoardSxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E0B30CE96C7B045BFDBA33EE166DBFFB /* NstBoardSxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E5CE54C441C27992BB36CBA9A435245E /* KeyboardGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4185D8E6FDFC3750E4E3DCF897B9D2F /* KeyboardGameController.swift */; }; - E614C5D1F40EC77DAF23006BCBA8523B /* txWidestringWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E721311C13AE68B2699A1D4C03214451 /* txWidestringWrapper.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E64D998EAED81F2EA7850A2CDF71929A /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 972EE27803ACA015B384716D967BB02E /* Thread.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E6529D9E72DE5E7B788DDC6C3E148468 /* UIKit+ActivityIndicating.m in Sources */ = {isa = PBXBuildFile; fileRef = 136E40DAC7C29CAC860561C37A54FE9C /* UIKit+ActivityIndicating.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E66700479EBBBA79432AE1635603F5BB /* Socket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 14F79C2A5CD47627B9F83711162D50E0 /* Socket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E699C3C45914E11FE8A12647B4835CD7 /* saves.h in Headers */ = {isa = PBXBuildFile; fileRef = DD5EE72E5D4DEF927BEEE94D86725DC0 /* saves.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6A4553281DA2987F949740F277ACA3D /* DepthBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D6B56FEC107675FBE484E18FB0578E5F /* DepthBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E46D10AADB66A01A9490A813CA496DCE /* NstBoardBmcResetBased4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95C3DB2A71F9C27A5D2A146D6247E970 /* NstBoardBmcResetBased4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E473810AFA4985FDC030B75DAB7E86A9 /* new_dynarec.h in Headers */ = {isa = PBXBuildFile; fileRef = 62CF8182659AC61B46F3EE64308E7BA7 /* new_dynarec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E47A977F4840A1287E1A8645E6E560B7 /* ShaderProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = FBAE8914742053CB6ADCEC14737596F0 /* ShaderProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E4D06B0BA213CA79BD97BB9B611A2EB5 /* N64.h in Headers */ = {isa = PBXBuildFile; fileRef = AB7ED6F2E514469E5640A93ED3622401 /* N64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E512749AF7921ECA10C99B7DDADA916F /* NstBoardSxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D0643302DC4E42474BC7E1B5E9903519 /* NstBoardSxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E5CE54C441C27992BB36CBA9A435245E /* KeyboardGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31AFF7B6567C46BCD1D5FF5A40AFEFD /* KeyboardGameController.swift */; }; + E614C5D1F40EC77DAF23006BCBA8523B /* txWidestringWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18DCE91DC2FF6AC9626641A56F1ECCF2 /* txWidestringWrapper.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E64D998EAED81F2EA7850A2CDF71929A /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 96DDCB6416566CEEB9D8CE0B491F6242 /* Thread.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E6529D9E72DE5E7B788DDC6C3E148468 /* UIKit+ActivityIndicating.m in Sources */ = {isa = PBXBuildFile; fileRef = 684E9E69891E8CAEBF1DC5CFDC48856E /* UIKit+ActivityIndicating.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E66700479EBBBA79432AE1635603F5BB /* Socket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3720B67C88F2DE8BCAE0EDD0D02B5F98 /* Socket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E699C3C45914E11FE8A12647B4835CD7 /* saves.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF34391A06AF7754A090E44B9245C06 /* saves.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E6A4553281DA2987F949740F277ACA3D /* DepthBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA35E04DC90CDF3E5C69140C495709F6 /* DepthBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E6C3A0FCAFD428E5CFAA722D3F6190DE /* Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E38834C7999CFB2670ABDAE5FC71FEB /* Sharing.swift */; }; E705953BCBCD13E17C23B588C4FD0457 /* FilesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2799783940A21EC2EE44D1A48F5758 /* FilesRoutes.swift */; }; - E73A1CF4FDEAF251CF9E242867E9E0FB /* state_osd_elements.h in Headers */ = {isa = PBXBuildFile; fileRef = 57934C5612E8312E8D46FB26A52FE946 /* state_osd_elements.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E73B665DFEE5B1EF941B915C2DB4D1EA /* savestate.h in Headers */ = {isa = PBXBuildFile; fileRef = D1BA7EA1AD9736CD11003C39C000C9C9 /* savestate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E75071EFE211B5377D34AB8A5893DCD7 /* NstCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 911F72B30958B16B6FC132BEFBD9544B /* NstCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E75F2EA53D0EE6628D5361A907AE8CEA /* UIAlertAction+Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = A7351AF200A2FE4130E42D7A321DA075 /* UIAlertAction+Actions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E7637A711A78C8610C039170BE3A235E /* ftrender.h in Headers */ = {isa = PBXBuildFile; fileRef = A9509066B63C4D1361D0CA4EA29B954B /* ftrender.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E76913D63F4D790D0D10268C80819BC9 /* NstBoardBtlSmb3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7B7537D8181FB7C0E5B50CB7680E9967 /* NstBoardBtlSmb3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E7713FF7D1DDD0B5457A3DDC07D7CB64 /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DE84C1C459F13BAD44A6B87EDA3189E /* zconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E73A1CF4FDEAF251CF9E242867E9E0FB /* state_osd_elements.h in Headers */ = {isa = PBXBuildFile; fileRef = A56369DCFB6DD06F4761C0C4900B2401 /* state_osd_elements.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E73B665DFEE5B1EF941B915C2DB4D1EA /* savestate.h in Headers */ = {isa = PBXBuildFile; fileRef = 07352595BD173B37D1FBCAC265DC1C57 /* savestate.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E75071EFE211B5377D34AB8A5893DCD7 /* NstCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 51AE0D8A1BA524D7E3E2B194F7CE4A37 /* NstCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E75F2EA53D0EE6628D5361A907AE8CEA /* UIAlertAction+Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F8715F2E1CC86C7F667183E1D9CD888 /* UIAlertAction+Actions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7637A711A78C8610C039170BE3A235E /* ftrender.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E612D889BCF639940A7B442ED45DC84 /* ftrender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E76913D63F4D790D0D10268C80819BC9 /* NstBoardBtlSmb3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 58E06EE5B6AC0AC69AFF39EDEB578E6E /* NstBoardBtlSmb3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E7713FF7D1DDD0B5457A3DDC07D7CB64 /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = F231C512D2B9D8E1FA081E1059B3D3E0 /* zconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; E78529FBA5C035888371AE6EE12276A8 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4E004174F5A12104EA6702A90AC6D9 /* Helpers.swift */; }; - E7BADFB958A5706854C044DDFEE718DD /* RSTOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A51C15D398D2803874EB7297A0340BE /* RSTOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E7DAB97FF4BB02EB9E4D2D45AD1CA9E4 /* arithmetics.h in Headers */ = {isa = PBXBuildFile; fileRef = C88191C64D7E8CE0EE4B4033CCB6D0FA /* arithmetics.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E7EC3140EF159F74774806784FFF92BC /* NstBoardWhirlwind.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 27B1FE69B14E33A7E6603FF648B30DFB /* NstBoardWhirlwind.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E7F970F940518CACBA50E29DA4566EE5 /* TextureFilters_xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 48CCDAD2D88669095B44ED625F56D7D0 /* TextureFilters_xbrz.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E805858A4CBFC1A168C9A8320D1E4EF8 /* NstBoardIremHolyDiver.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0E65B447ACD8C0AD8B9540F69DD78D01 /* NstBoardIremHolyDiver.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E88A86B85AFFB8A723243AE866FDCFC1 /* NstBoardWaixingPs2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AB7866FC433C97398B3963C2270D52D4 /* NstBoardWaixingPs2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E8AD899B2BF52E2A3E657CD7A3A055E2 /* NstTimer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 315FF0E989ED5094C01E5CC2AA1F9C5A /* NstTimer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E8C165293B36E2F95AD7CBF511CDEA47 /* GBCEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9AF937DC01474311A2109AFB0EDA7D8B /* GBCEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E91BE4D2EB8ED606C86AEF158A993193 /* NstBoardOpenCorp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 160DE59B03218F24C3937D38923481FF /* NstBoardOpenCorp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E96D00DC7B3AE3762117697EF950BF00 /* mempak.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ED7DC207EA838F7ED17B7E0373391E2 /* mempak.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E9A4231EDE43DDF753AA878AFE8078EB /* complex.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D72B8F3909167EBE56E1BF0E3108516 /* complex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E9B012F6B7FFEF993DEC81040FF08B81 /* TextureFilters_hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C95F862EEE33E2358C6B0273BBF456D1 /* TextureFilters_hq2x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7BADFB958A5706854C044DDFEE718DD /* RSTOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F84B5FC88D5A5A682A7E079337CD3D1C /* RSTOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7DAB97FF4BB02EB9E4D2D45AD1CA9E4 /* arithmetics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA748DD06BB0F87B2D3FCBBCB21BB582 /* arithmetics.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E7EC3140EF159F74774806784FFF92BC /* NstBoardWhirlwind.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D02AD2D93D711FC49FACBCEA4547D87D /* NstBoardWhirlwind.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E7F970F940518CACBA50E29DA4566EE5 /* TextureFilters_xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D7DDAE335C54604826A3ECBD79CFED3E /* TextureFilters_xbrz.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E805858A4CBFC1A168C9A8320D1E4EF8 /* NstBoardIremHolyDiver.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A85F73017A0A333E87CA16A1492A235D /* NstBoardIremHolyDiver.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E88A86B85AFFB8A723243AE866FDCFC1 /* NstBoardWaixingPs2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F0427833F381047484915D313051018B /* NstBoardWaixingPs2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E8AD899B2BF52E2A3E657CD7A3A055E2 /* NstTimer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1F076350328D4154B3E88F3C4B2D80CD /* NstTimer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E8C165293B36E2F95AD7CBF511CDEA47 /* GBCEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = E5598BF7199B8F30327DBDD42DA18CA4 /* GBCEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E91BE4D2EB8ED606C86AEF158A993193 /* NstBoardOpenCorp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B0ACCB9EC30550BEF619382B31BE43A /* NstBoardOpenCorp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E96D00DC7B3AE3762117697EF950BF00 /* mempak.h in Headers */ = {isa = PBXBuildFile; fileRef = A81D595F5493BB4BD6C6AED2B993C0B6 /* mempak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9A4231EDE43DDF753AA878AFE8078EB /* complex.h in Headers */ = {isa = PBXBuildFile; fileRef = AFF85B9517592B8C0C0F604D1FB43836 /* complex.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9B012F6B7FFEF993DEC81040FF08B81 /* TextureFilters_hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEAA6B8E9680ACB06BA0279C3ED990AE /* TextureFilters_hq2x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E9D90305973DEDEC0F4BFB33B4281876 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 285001A3E16D55354667EDFD2BF69729 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA259B2E1D0BB10750FC2236B155EAB2 /* Context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D95AA79C2C5088E9B27BAAA9444850C2 /* Context.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EA3590DCCB30731B77907052E26D846C /* cexcept.h in Headers */ = {isa = PBXBuildFile; fileRef = 36E1F6E94EA1CBCCBD240A2819F591AD /* cexcept.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA4B8C2B008C444AA0A6467EE33FDEE8 /* NstVideoFilterHqX.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FC91AA5FEFEE911BEE1FE8CBF90DC619 /* NstVideoFilterHqX.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - EA4BF15425C5527848AAD727B8E2A587 /* EmulatorCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE235836DD079740208A4AF1D7DB9F35 /* EmulatorCore.swift */; }; - EA7C86A456431D6BFDA337EBDA60E97E /* preproc.h in Headers */ = {isa = PBXBuildFile; fileRef = 72FFB39A7A98F30C88D79B8E0A8EAEE5 /* preproc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EAC867D60DB729E55A1ED540BD330F09 /* video_capture_backend.c in Sources */ = {isa = PBXBuildFile; fileRef = CF70FBCB7AE2CE5D532C4D3DDF618D72 /* video_capture_backend.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA259B2E1D0BB10750FC2236B155EAB2 /* Context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 313C6B8D05DFD20F664BA3744351BC9C /* Context.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA3590DCCB30731B77907052E26D846C /* cexcept.h in Headers */ = {isa = PBXBuildFile; fileRef = BE9ACCFEEB68EE550B45A78C99E79C3E /* cexcept.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EA4B8C2B008C444AA0A6467EE33FDEE8 /* NstVideoFilterHqX.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92FE3ED203451DF6D2875541FE82FE35 /* NstVideoFilterHqX.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + EA4BF15425C5527848AAD727B8E2A587 /* EmulatorCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 494D29438728759A64CEF3DAFF79CE8A /* EmulatorCore.swift */; }; + EA7C86A456431D6BFDA337EBDA60E97E /* preproc.h in Headers */ = {isa = PBXBuildFile; fileRef = A77309856ECBE8FE95C26ADD933333D1 /* preproc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EAC867D60DB729E55A1ED540BD330F09 /* video_capture_backend.c in Sources */ = {isa = PBXBuildFile; fileRef = F074B8ED12CB119F2AD98DE96C9D1E1B /* video_capture_backend.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EAFAB542A9C64CFCE6CE22241E05F94A /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E793979C109E7302877C7903D7ED408 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EB3650269076DC4FC7CA23EF31B4A160 /* Glsl.inl in Headers */ = {isa = PBXBuildFile; fileRef = 3BCF0A222961A427CD39D1C78BD6A993 /* Glsl.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - EB57719B60503ADE6D81243AA7B99301 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 4805F8BC438B0132B2F50C26602B8DFA /* Standard.deltamapping */; }; + EB3650269076DC4FC7CA23EF31B4A160 /* Glsl.inl in Headers */ = {isa = PBXBuildFile; fileRef = 0E8746F05B78C10D0D9D8098224A1D60 /* Glsl.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + EB57719B60503ADE6D81243AA7B99301 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 9CC748D2AFF9AC9A78EA9982425EBACD /* Standard.deltamapping */; }; EBC516586457D8BA8B838FF0A74F6192 /* SMClassicCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = A6490A0F3B24176875D7C923ED9E0958 /* SMClassicCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EBE9D4C81C76E7547598DAB991A21C34 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = C9015E1D86DF0B2A7A1D22814920641A /* Standard.deltaskin */; }; - EBEBA0DA070991E8C4CA134F9FBFE535 /* UIImage+PDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00CE3BB55A661517FBF455927EB5D945 /* UIImage+PDF.swift */; }; - EBF46D8060558FA58B2E5CAE42467A6E /* ft2build.h in Headers */ = {isa = PBXBuildFile; fileRef = DB3A0F2D56E5C2399EC70F3417641DDA /* ft2build.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC0E44AC75CBA610CFBDB23601E6772B /* NstBoardSachenStreetHeroes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8F52AAB71856AE2D876485F77504BCE5 /* NstBoardSachenStreetHeroes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - EC22AD88F08651F1E9F9D07F1C6CDEE0 /* display.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1C41ECAFCB4B62AC6DB322A26DDBCB /* display.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC28DAD95829E5C9E6307A77F8F517FF /* NSLayoutConstraint+Edges.h in Headers */ = {isa = PBXBuildFile; fileRef = CF7ECEAEDCF30C5FD13208AF855EEF47 /* NSLayoutConstraint+Edges.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC4892F521D296F8A687A076AA68F1AB /* VideoFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB6C6046F5260896D182C1590701A4C2 /* VideoFormat.swift */; }; - ECAB49B60B49C63B1566F162F02177CA /* NstApiInput.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9EF3AB85099AAD5C4A46D49D93BB46D8 /* NstApiInput.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - ECCC47B233216A74153F147DE44615C7 /* NstBoardRexSoftSl1632.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D4E854B6ACFFE4EA1EDD318476D024D0 /* NstBoardRexSoftSl1632.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - ECD62CC37167C9C1675F6D68D64E05C6 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EDC9128CC8CDBCC9CCCD7AA3E759AA2 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBE9D4C81C76E7547598DAB991A21C34 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 7C0B98385921997315465A09CF1CB184 /* Standard.deltaskin */; }; + EBEBA0DA070991E8C4CA134F9FBFE535 /* UIImage+PDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E7C0C33B47A7D708AB3CF66AF1137D /* UIImage+PDF.swift */; }; + EBF46D8060558FA58B2E5CAE42467A6E /* ft2build.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E088DA0C031536321CA95D00470F534 /* ft2build.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC0E44AC75CBA610CFBDB23601E6772B /* NstBoardSachenStreetHeroes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8E52E44669D74069EC4BCEB20D5BBB02 /* NstBoardSachenStreetHeroes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + EC22AD88F08651F1E9F9D07F1C6CDEE0 /* display.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9EB574A8B1D8BC0B0BEDF16D62D5E3 /* display.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC28DAD95829E5C9E6307A77F8F517FF /* NSLayoutConstraint+Edges.h in Headers */ = {isa = PBXBuildFile; fileRef = CC70680EAE5C40484D98F7B84A2B1CAE /* NSLayoutConstraint+Edges.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EC4892F521D296F8A687A076AA68F1AB /* VideoFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4947A8614B4C6559E330C41CE046A147 /* VideoFormat.swift */; }; + ECAB49B60B49C63B1566F162F02177CA /* NstApiInput.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6C13FD7FA77A5769F400B5BF15BC2F34 /* NstApiInput.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ECCC47B233216A74153F147DE44615C7 /* NstBoardRexSoftSl1632.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA9FA4481CDEC88D482598485C447447 /* NstBoardRexSoftSl1632.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ECD62CC37167C9C1675F6D68D64E05C6 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = ED9FC408E7E37A99A42E690455015732 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; ECE457DD05BEBE57CFEB9DD0D6A9B21D /* FilePropertiesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40E721AC96D7B1BD5F1609F94C46FB1 /* FilePropertiesRoutes.swift */; }; - ECE94BF77F79C48917F76CFABFF51D4E /* F3DZEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36962E0BFCDEF7E1ED3272745C0620BB /* F3DZEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - ED000A6A2C0F27F589D2F9F3F0454387 /* rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = 40FF365F801C636BEE21293A877B902E /* rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED1EED4992202FB7CF07EFE464320E04 /* NstBoardAe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CFA8EEA9986267DD4C9222F8013EB169 /* NstBoardAe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - ED41FDC898B11C9B4481ECA58EBE978F /* wglext.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F83AE270F6F4A14D5507A9E883EFA01 /* wglext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED60DEB3E6681250967195F1EE82081D /* NstBoardFb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 504F1B8F7739C07C121A17267D9DC80F /* NstBoardFb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - ED62B5E63342691AD8CA0BE9B1BF09B0 /* RenderWindow.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EACB3541C7C31D9C894C73A0F43BCD38 /* RenderWindow.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ECE94BF77F79C48917F76CFABFF51D4E /* F3DZEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24C9EC3456B0473415C7E2A4BFE6D619 /* F3DZEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + ED000A6A2C0F27F589D2F9F3F0454387 /* rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B97CBE1F36B669152AE6F475CCEB508D /* rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED1EED4992202FB7CF07EFE464320E04 /* NstBoardAe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A5F66A556F030CD38AA0B3F7B66C5FE1 /* NstBoardAe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ED41FDC898B11C9B4481ECA58EBE978F /* wglext.h in Headers */ = {isa = PBXBuildFile; fileRef = FE48EE5ECA5693381EB62AA0D741E0E8 /* wglext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ED60DEB3E6681250967195F1EE82081D /* NstBoardFb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 24BD46060B81FB987DC76C420D9D0434 /* NstBoardFb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ED62B5E63342691AD8CA0BE9B1BF09B0 /* RenderWindow.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AE0F7B08A9D4CA4E032A55F5910B7FC4 /* RenderWindow.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; EDC281DAD5A8204DB2E18A3FB2B5D725 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4871776B4C704E222EB93D062575DC5A /* Base.swift */; }; - EDE37315A04F24B57508A4D6EE128BE6 /* controller_input_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = F88461BA4787937B3DB690FE3C4F6561 /* controller_input_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EDEA3AD87DDC71ECD0952ABD1368A95D /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = 496FED89B31EF5869368A5EC4A3DE18E /* Service.swift */; }; - EDECCD20635BC41EB02BEF704D740AF4 /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = 4AA3FD3271A56236EDAF6E49599021BA /* pngwio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EE15E85924677183CEF51B41FA195E3B /* ftsizes.h in Headers */ = {isa = PBXBuildFile; fileRef = D04DC78D5A74516CF2BAD79E947302B5 /* ftsizes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EDE37315A04F24B57508A4D6EE128BE6 /* controller_input_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C1BC49685F5EE8CD682028D49698258 /* controller_input_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EDEA3AD87DDC71ECD0952ABD1368A95D /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA61FA6FDF258367C544BA1A701348F /* Service.swift */; }; + EDECCD20635BC41EB02BEF704D740AF4 /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = 39366E2F73CC4159EE18FFD5AF80A0F3 /* pngwio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE15E85924677183CEF51B41FA195E3B /* ftsizes.h in Headers */ = {isa = PBXBuildFile; fileRef = A5D1F6229274C89A198E70560F58BE3C /* ftsizes.h */; settings = {ATTRIBUTES = (Project, ); }; }; EE2019BF5CB64FFF4F1A0E423383637C /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = C538C31B2DE4BC6BA5C964106E5E3F6B /* GTMSessionUploadFetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EE3023766DCA56C999E1855124ED9B49 /* GBAcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = C48EADCAA3A0151BF5347F5EE447CBD1 /* GBAcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EE33CD64FEAC466A7824C75D33623961 /* mp3.c in Sources */ = {isa = PBXBuildFile; fileRef = D79C4564600E16C5D3087362DA9FB91E /* mp3.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EE3023766DCA56C999E1855124ED9B49 /* GBAcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 1575109B49D2770633104AF8986A3F36 /* GBAcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE33CD64FEAC466A7824C75D33623961 /* mp3.c in Sources */ = {isa = PBXBuildFile; fileRef = 9622F656638DFB246B7A638CCF468156 /* mp3.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EE4994A811223017B6C5EE3AC8A4FDAF /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = 39319E8C5681BB472007926F7AAC4580 /* GTMSessionFetcherService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EE4B56A8FD2098F2F49C84B564BDD404 /* PrepareUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61B9452797C7F91FF8966E5CB4C041E0 /* PrepareUploadingRecordsOperation.swift */; }; - EE6944AB9BC075F13C9B3948E6280260 /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 603DD39C57569C32BD836469768B346F /* String.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EEB84D1AB735724A00357534155CBAD1 /* EmulatorBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78B946BC5D71400B19D26F799662F808 /* EmulatorBridging.swift */; }; - EEEAE72A65DE128B59CA501731003600 /* crosshairs.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BD2DEDB678D75D5ACAAB02F7DA550CA /* crosshairs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EEFFD918B4E699ED2974C0B2F35E9932 /* UICollectionViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = FBB4322FF7B456423D12A82C9A36F624 /* UICollectionViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF255A27386D9491CC62288BD9B6CCFB /* ftmemory.h in Headers */ = {isa = PBXBuildFile; fileRef = E9B7E1EDF3E36A1AE901C6599B744E37 /* ftmemory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF5F3C860891664625225F32C4399ADF /* UIView+AnimatedHide.h in Headers */ = {isa = PBXBuildFile; fileRef = 276B3F3CC31F539687CB5B6AD102438A /* UIView+AnimatedHide.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF9C7D853BDDA0BCC0F895D47AA7437C /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 0DB5686AC4A3B7C73DBEBCB221B94109 /* png.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EFA0DC841E9880CDA5B1507E29E2E545 /* NstApiEmulator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 06F9614E94FCE209A55C8C7298C28ACF /* NstApiEmulator.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - EFA81C37AB1F59EE3DC9500238D24A10 /* Turbo3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 3745BEDDA1C724568FBE3D2E2D7E1A45 /* Turbo3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EFD770F15B52B41E2DBEEEECAD735D98 /* RSTBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 75AB94233F995F253DFE0C50EE6C02A2 /* RSTBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EFDB58D53DCA43CA1A9A175952CC0AFB /* RDP.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ED616369FCB01DA566D1197932686D0 /* RDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EFEDD19659E080B7972B6EC2113D02A1 /* TxUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50A10752DB4054391124647027696A55 /* TxUtil.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F00226D59B11A277EA50376813104098 /* tlb.h in Headers */ = {isa = PBXBuildFile; fileRef = C9F883F7F8E0CC8223971F5D3F4E6D89 /* tlb.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F007EE3D67A49DC33FE2A74392FEEE44 /* NESDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 75EA00FDDC420CBEEF57749EB105D75B /* NESDeltaCore-dummy.m */; }; - F01AD38461447D0079DFD168C66DB6C6 /* AAFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = F57889A91C00957E173557D366708F01 /* AAFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F03A441C530590BF7C1DF4B3D4BD675C /* NstApiRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6D3563437D8960176CEF09AD9B1291B0 /* NstApiRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F03CF428C71FCFA033C24776E54BA798 /* UIViewController+TransitionState.m in Sources */ = {isa = PBXBuildFile; fileRef = 400B965700434B3B4E0F9FAC08AD895A /* UIViewController+TransitionState.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F059D06F724A8A8C7BBDE111D491A11D /* t1types.h in Headers */ = {isa = PBXBuildFile; fileRef = B417E49B5B743092F1356B5AB9E555E0 /* t1types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F08F5F4EDAD9842D1AB41C448FD7ED97 /* NstApiSound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 447F33D4AC9DCC18BA8E7C821EB936A8 /* NstApiSound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F0C15DA7F5002FC0639540515DB2A332 /* NstApiVideo.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C7561F25DF5A13A37A67CFD89590E68A /* NstApiVideo.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F0C6CE8A84BFC2F818EA2389B0E54944 /* S2DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1D2F36F994B2A734DE7746BB61880D92 /* S2DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F0D1F35D36D80879500D7BC755F861C0 /* F3DBETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2E42A2A695A512EFB1CAFA94A99A0F8A /* F3DBETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F0E5B9CCB6926463DE3B74D3085F7A39 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 850B3AEB1917875997484AA3953B926F /* Standard.deltamapping */; }; - F1089B4808327FEC6230C3D66D26E64A /* NstBoardEvent.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C64FD116A93B9A66533D1BA551BF885 /* NstBoardEvent.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F12B7D9CA9CB9FB6C292DAB35BC315E7 /* StandardGameControllerInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DA0672F627BE87C2B50295FDE1FE14F /* StandardGameControllerInput.swift */; }; - F12C21D84E31915404415E94619EC735 /* BreakpointStructures.h in Headers */ = {isa = PBXBuildFile; fileRef = 37EAE6D3D608C9A5504D237AEFF46B37 /* BreakpointStructures.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EE4B56A8FD2098F2F49C84B564BDD404 /* PrepareUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7959936C4C72BFF6C57D269BD58A6A92 /* PrepareUploadingRecordsOperation.swift */; }; + EE6944AB9BC075F13C9B3948E6280260 /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E9620B66C79B5072CD182C1D80819C8 /* String.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EEB84D1AB735724A00357534155CBAD1 /* EmulatorBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = A22889DC853EDD8E7FCC52CA013A82BB /* EmulatorBridging.swift */; }; + EEEAE72A65DE128B59CA501731003600 /* crosshairs.h in Headers */ = {isa = PBXBuildFile; fileRef = 567D8A08CDBDC5DA06BFD1DC70DF4E1C /* crosshairs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EEFFD918B4E699ED2974C0B2F35E9932 /* UICollectionViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1AC475F3EBD28D40D55EE72FC5AB07 /* UICollectionViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF255A27386D9491CC62288BD9B6CCFB /* ftmemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FADAD20817CF7C88C8300D762D5C633 /* ftmemory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF5F3C860891664625225F32C4399ADF /* UIView+AnimatedHide.h in Headers */ = {isa = PBXBuildFile; fileRef = 250AF154A10D578764C0BBBB190A8554 /* UIView+AnimatedHide.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF9C7D853BDDA0BCC0F895D47AA7437C /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 81586D54535F45B193EF58A3F9A1B704 /* png.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EFA0DC841E9880CDA5B1507E29E2E545 /* NstApiEmulator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5CC102BAEF4C8D771A86539CC220A5A5 /* NstApiEmulator.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + EFA81C37AB1F59EE3DC9500238D24A10 /* Turbo3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FDB5E5AA46D38CB2E47E5E6DF9A5645 /* Turbo3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFAE2C3B6A6696B52B10F87013319EE4 /* ARM.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD7894C9422E5309EB6A4FE9A80D055 /* ARM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFD770F15B52B41E2DBEEEECAD735D98 /* RSTBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FB822E90029BFEA20B117487DC27A04D /* RSTBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFDB58D53DCA43CA1A9A175952CC0AFB /* RDP.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EF1745163AD82481D56DE9A59BA24BA /* RDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFEDD19659E080B7972B6EC2113D02A1 /* TxUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5131F9EE375D77DAA9870F13B4698A6C /* TxUtil.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F00226D59B11A277EA50376813104098 /* tlb.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B888530E83F42860A13FCEBBC74F753 /* tlb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F007EE3D67A49DC33FE2A74392FEEE44 /* NESDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D2A1CDF2D6BFF1EF9D9061C663EE16F9 /* NESDeltaCore-dummy.m */; }; + F01AD38461447D0079DFD168C66DB6C6 /* AAFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 77AC9809E47F480ACB8F5F50E124AEC6 /* AAFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F03A441C530590BF7C1DF4B3D4BD675C /* NstApiRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9C6144633B0DE1C8B971A2728903B95 /* NstApiRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F03CF428C71FCFA033C24776E54BA798 /* UIViewController+TransitionState.m in Sources */ = {isa = PBXBuildFile; fileRef = F74135D2566C066E0B9F4F851E06A12A /* UIViewController+TransitionState.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F059D06F724A8A8C7BBDE111D491A11D /* t1types.h in Headers */ = {isa = PBXBuildFile; fileRef = 819239301CC1811B87F438BAF1B0EED6 /* t1types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F08F5F4EDAD9842D1AB41C448FD7ED97 /* NstApiSound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8D629AE3BF67DAB06622670203476B43 /* NstApiSound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F0C15DA7F5002FC0639540515DB2A332 /* NstApiVideo.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 97B1BF27F91C777F9330B2027409CED1 /* NstApiVideo.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F0C6CE8A84BFC2F818EA2389B0E54944 /* S2DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 915FAE52C5A766087CB6E4CB6D7ABE8D /* S2DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0D1F35D36D80879500D7BC755F861C0 /* F3DBETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8548E8B79648F224295606EFFF726D52 /* F3DBETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0E5B9CCB6926463DE3B74D3085F7A39 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 4A182802B17188F847B92490A82541B0 /* Standard.deltamapping */; }; + F1089B4808327FEC6230C3D66D26E64A /* NstBoardEvent.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 29AEB4740EA971386FE4B6750AA2EB59 /* NstBoardEvent.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F12B7D9CA9CB9FB6C292DAB35BC315E7 /* StandardGameControllerInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B0B083A9E33A408380E6933367C443E /* StandardGameControllerInput.swift */; }; + F12C21D84E31915404415E94619EC735 /* BreakpointStructures.h in Headers */ = {isa = PBXBuildFile; fileRef = 512C4AAABBC20D346C24998DFEE5AFA1 /* BreakpointStructures.h */; settings = {ATTRIBUTES = (Project, ); }; }; F167CCE2838CD4DF3161F75877A2858C /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FC26E46646A054862FD9FA6A118709 /* Value.swift */; }; - F1A9E20B5E2A3EDA6E681DE782F1334D /* ControllerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE17B4BADFE9DF6A6CCAF0CF0BE25D9F /* ControllerView.swift */; }; + F1A9E20B5E2A3EDA6E681DE782F1334D /* ControllerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C5CBC5126812FD2065CDBAEA94BF976 /* ControllerView.swift */; }; F1DCBDDEE6EC2B1512E4A288D7ADF679 /* GTMSessionFetcherService.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC5310CC574B1695D106EA4A1306618 /* GTMSessionFetcherService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F22E08070AFC46B32347B32B2504F0AE /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 525B2A3CC0AB6E54AFD0C4CAE7B17B9D /* SDL_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F264D06A3A46BD2D13A1B902FF3D4B82 /* NstSoundPcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CDC648448D2BD63C7FA72EBB05BD53BD /* NstSoundPcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F28DDFAB4A2E61C4361B1F25F9FC031C /* RSTError.h in Headers */ = {isa = PBXBuildFile; fileRef = E5B960D0D3388F94E7D3FB7BA36C85C3 /* RSTError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F28EC2465A217A0417AE60E418AA1C70 /* RSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FFC7F34F90AC81DD006C798B7C5936F /* RSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F297900BE7AA8C84345754611015F8D1 /* NstBoardBmcSuperHiK300in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4DDEBD072685DD4E5D03FC470004711B /* NstBoardBmcSuperHiK300in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F22E08070AFC46B32347B32B2504F0AE /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF571FDBAF68294C828B93CF7AB2606 /* SDL_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F264D06A3A46BD2D13A1B902FF3D4B82 /* NstSoundPcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CB66A3376ED296C661FFEAA36063E7A5 /* NstSoundPcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F28DDFAB4A2E61C4361B1F25F9FC031C /* RSTError.h in Headers */ = {isa = PBXBuildFile; fileRef = DB18069D26E35C1BEFE5C4A0262422E8 /* RSTError.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F28EC2465A217A0417AE60E418AA1C70 /* RSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0263597CCE16095F0BA7CA33F49B26BA /* RSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F297900BE7AA8C84345754611015F8D1 /* NstBoardBmcSuperHiK300in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9B772B195955E19223C5D696AF8E884E /* NstBoardBmcSuperHiK300in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F298E311AEDA130784E1ED9899B35D3E /* GTLRErrorObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 68263C62DDF9F51529551BECBBD26620 /* GTLRErrorObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F2C3D5F056E937891CBDC532EAEE1987 /* NstBoardKonami.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 86A843DB560CD6D81B7EF3A9F6D8F5FB /* NstBoardKonami.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F33586928CCCB162321E60496A3DCA3B /* NSUserDefaults+DynamicProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = CABA30017D9761CD2D49BCA9F53E923B /* NSUserDefaults+DynamicProperties.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F35E35BAE2395E393B54B5F41F61F31E /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = ED84FF00BB1C75891DB73E5EC2DC19CC /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F3C54A16E279E2FDD60FBA58FBB2B4AB /* F3DSETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4DB5EBAC052F23A23935BC01F0F3BD13 /* F3DSETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F3EB20A92D49B9ED4E75EC8DBCD5AE92 /* FrameBufferInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 906947FD8A5D4B956AF6B2AB2C50E677 /* FrameBufferInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F3F92D728EEA58B31C1366A8C3D2592F /* opengl_BufferManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6E755BD7B9E84110CD165AA817987A71 /* opengl_BufferManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F461C36F53ED47D40DC15FB88FB3ADB5 /* ftdriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 546B78B239F8467F1682E4319F7B44FB /* ftdriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F473DE6E2DF0BA57A56F780ACA3D9E94 /* NstBoardNamcot175.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA04D2400A0F699B8568525360B9DF75 /* NstBoardNamcot175.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F2C3D5F056E937891CBDC532EAEE1987 /* NstBoardKonami.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D5FBF61FEAA24AC5DFA51366F3A14D23 /* NstBoardKonami.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F33586928CCCB162321E60496A3DCA3B /* NSUserDefaults+DynamicProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = E45EB56BC48BE16046055CF4A8D52558 /* NSUserDefaults+DynamicProperties.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F35E35BAE2395E393B54B5F41F61F31E /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5414A0A2C2B0F58D727F258C7536FAEC /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3C54A16E279E2FDD60FBA58FBB2B4AB /* F3DSETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DBA884F6C11AC7F591FA518903604B3 /* F3DSETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F3EB20A92D49B9ED4E75EC8DBCD5AE92 /* FrameBufferInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A7607CB2BCFE4453A1188585644330 /* FrameBufferInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3F92D728EEA58B31C1366A8C3D2592F /* opengl_BufferManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8CD1F5D1FB7A2951D65FA4A322294D1 /* opengl_BufferManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F461C36F53ED47D40DC15FB88FB3ADB5 /* ftdriver.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8D045A4BAB5806465552F9EAD05287 /* ftdriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F473DE6E2DF0BA57A56F780ACA3D9E94 /* NstBoardNamcot175.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4777A754C8B992D16F19E6669E3983F8 /* NstBoardNamcot175.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F47DE4860ED00EA4CDC661D662F1681B /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F77D5D789D6454A73C3D19E2727B786 /* SMCalloutView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F4808FD70D3BA8559604594D5674A324 /* ManagedRecord+Uploading.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1F489088240F6C610B83E8F77CB5B7C /* ManagedRecord+Uploading.swift */; }; - F4EF7512EED07AE5D1BAD5341F1F119B /* Lock.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A0C45B1398394AA1FEB5A3FCD517E92D /* Lock.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F4808FD70D3BA8559604594D5674A324 /* ManagedRecord+Uploading.swift in Sources */ = {isa = PBXBuildFile; fileRef = E04D3872EDD7D06663BEBFB1BB899C3E /* ManagedRecord+Uploading.swift */; }; + F4EF7512EED07AE5D1BAD5341F1F119B /* Lock.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DE3C56A00DE19DC466C925A15112774C /* Lock.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F54EE04CAD7C3199596833B62C4C5955 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DD00852D37B01767D028ED9AA2DDAD /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F565CC28410967B9FC16083B01E52FA8 /* NstBoardNihon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 96AF49FA9F387DAB2B33D0FB432E8FC7 /* NstBoardNihon.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F5872A78E0CA44A471473CFF9123D560 /* GBATypes.m in Sources */ = {isa = PBXBuildFile; fileRef = FD58112E62968E573B43DA1A9C5C1212 /* GBATypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F5A1CC355CA69B7DB624218176781D44 /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ECC067B82E66713A45C44F973FA04EA /* list.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F5A792629C2A69A6ACE4916D514C5A1D /* clock_ctime_plus_delta.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D88D4AF63AF5783792687FAE3AD2BCB /* clock_ctime_plus_delta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F5B0959C767055FB7465D5703EC70D68 /* NstBoardVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16A5B2FF145529F1248A848F882C8403 /* NstBoardVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F5D6D35D7781479FB2D95F3856A26F31 /* NstBoardBtlMarioBaby.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 89D77AD643D660EF8D5D89B0A70F143B /* NstBoardBtlMarioBaby.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F565CC28410967B9FC16083B01E52FA8 /* NstBoardNihon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F517002D199922653B78176FE67DCA6E /* NstBoardNihon.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F5872A78E0CA44A471473CFF9123D560 /* GBATypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 01BB302ADFA2AECE433F8364E67758FA /* GBATypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F59CAF83B152BF1D5B4B3BD272054564 /* Savestate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97584AF9C663217B6EF9C0EC7EAE247B /* Savestate.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F5A1CC355CA69B7DB624218176781D44 /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = 582F8C63B9BF01FB8537FCBB2196C589 /* list.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5A792629C2A69A6ACE4916D514C5A1D /* clock_ctime_plus_delta.h in Headers */ = {isa = PBXBuildFile; fileRef = 886FBFDCA7FC1D72F001F3E9535B924A /* clock_ctime_plus_delta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5B0959C767055FB7465D5703EC70D68 /* NstBoardVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 959E0E9212C0B69B99187171C13A47B2 /* NstBoardVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F5D6D35D7781479FB2D95F3856A26F31 /* NstBoardBtlMarioBaby.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BDFE520B92F8D1422A24E28BA575C2F0 /* NstBoardBtlMarioBaby.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F5D9DCDC448615EEC0C90DAF2C5C7E76 /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C79D85ABB10589F765DD64715EEEAD3 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F5EB7545B62578D96DD78196C4A4261D /* mc.h in Headers */ = {isa = PBXBuildFile; fileRef = A495E80F9829E07964438D8A564E126A /* mc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F6022F4248018E1F466DE6310CC41E2C /* NstBoardBtl6035052.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 044F71625A7716601EAADFE8C6D579CA /* NstBoardBtl6035052.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F73B09692A1D8FBD4A33D1322CB8C4F8 /* UITableViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4659690ED156FCE3705F0C2B0C5811A4 /* UITableViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F7594B37B464285DF07D893F8BB3F61C /* NstApu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 18341B6F300F8B0BA009FD1B1F7945DD /* NstApu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F7702D2569122119783ECBECBF0893F7 /* Textures.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AE64FC0F8676B00CF470337F5C202A9 /* Textures.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F5EB7545B62578D96DD78196C4A4261D /* mc.h in Headers */ = {isa = PBXBuildFile; fileRef = D9223E826A52C67763ED0B1CB113EDBC /* mc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F6022F4248018E1F466DE6310CC41E2C /* NstBoardBtl6035052.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8854FB70C2F1990688897351E465107C /* NstBoardBtl6035052.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F73B09692A1D8FBD4A33D1322CB8C4F8 /* UITableViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4455D697CDC2A6441EDD561195EFE9DB /* UITableViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7594B37B464285DF07D893F8BB3F61C /* NstApu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F1A146BC0741538EE96C0E759582B337 /* NstApu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F7702D2569122119783ECBECBF0893F7 /* Textures.h in Headers */ = {isa = PBXBuildFile; fileRef = 1563D8DEE08EAA92574952B8B395A8AA /* Textures.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F78014F7507926EF6233B8D9C37FDCF7 /* GPU3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8F6D0F53FB1FDC036DDE39C228B2207 /* GPU3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F7AF82D1660F78BE791EF27F2F3D2938 /* PaperRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D72BB4EABA02D0C40C9847B11342161 /* PaperRoutes.swift */; }; - F7DFC08D8BF3B75E5D6DDE750D641962 /* resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 75A920E2918B272736AC688F14B6F096 /* resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F88F53D89C8D0B6EB6512F6FAE96128A /* pngpriv.h in Headers */ = {isa = PBXBuildFile; fileRef = A882E5AEFB5708D397E1EA06B9F5964C /* pngpriv.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F8A64A92EC039B20A16655B109BBF437 /* ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B442DF315B83F5A22C5AC0D52DC6F788 /* ControllerSkin.swift */; }; - F8B9B69D4EE4EB38FF98385CD92BD358 /* Music.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 412BAE19C4FAEF8D92FCDC3FF9A59FED /* Music.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F984AA7029A105CBC169C0E24725E036 /* RSTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = C7BC48F551C51325F8E971D1377D2A8B /* RSTConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F98FA998AC2986864A31A3383D9F6757 /* NLS.h in Headers */ = {isa = PBXBuildFile; fileRef = 035FBCDBD0BE435F0A0EB32A2C22FAD3 /* NLS.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7DFC08D8BF3B75E5D6DDE750D641962 /* resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6969D1558B782C4F58F0AB947B3E22 /* resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F88F53D89C8D0B6EB6512F6FAE96128A /* pngpriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 486AA33DBD077F14429174C280495E58 /* pngpriv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F8A64A92EC039B20A16655B109BBF437 /* ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6888D502C932A8931592CA8315E0F44 /* ControllerSkin.swift */; }; + F8B9B69D4EE4EB38FF98385CD92BD358 /* Music.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C8B01F60E394BFF06046341D779E4CB4 /* Music.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F984AA7029A105CBC169C0E24725E036 /* RSTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 609716320CE93EE5720BD73EE4666B18 /* RSTConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F98FA998AC2986864A31A3383D9F6757 /* NLS.h in Headers */ = {isa = PBXBuildFile; fileRef = 8854B895A2B698DDB8BD5A2748BC1885 /* NLS.h */; settings = {ATTRIBUTES = (Project, ); }; }; F9F08CA61836853CAE7455D76939D98B /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6A19232BD176F1842FA9413EF58EAFB /* ParameterEncoding.swift */; }; - F9FF13C1512AE6877E9661CF438EC88F /* ftwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 8ECA7AB7A3076AA6E4705CB0523A2472 /* ftwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FA05D0CC05B23D7027D8C3FEE24C690D /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = D91579E22C2EC7BD86DF031990A153A9 /* opengl_ColorBufferReaderWithBufferStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9FF13C1512AE6877E9661CF438EC88F /* ftwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 11D8E3490D52F64122D1E83DF8178D41 /* ftwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FA05D0CC05B23D7027D8C3FEE24C690D /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E2BB78721D4C6515E5DED30486B26C2 /* opengl_ColorBufferReaderWithBufferStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; FA577995260851815A34580C95A493FE /* GTMMIMEDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 013B228892127D085A9A12736D33F540 /* GTMMIMEDocument.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FA7E71D6ABC8350D6902714609D30179 /* N64DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EA3DF2BEE5BA3A560AB2D24010A1910 /* N64DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FA71E7212A583BF178A9718178962E06 /* MelonDSDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FB5B955EED3BCE73AA95E7D1F60EF62 /* MelonDSDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FA7E71D6ABC8350D6902714609D30179 /* N64DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C1093F4879EA7F32702CA47E35814B /* N64DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; FA9B5DF268C458C80AA79A7FBD2A08BD /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 930C6159C2738B8427010914FE6F8715 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FAC36F11FCA18D96655C0EC43BA109EC /* UICollectionViewCell+Nibs.h in Headers */ = {isa = PBXBuildFile; fileRef = 57D0C008F4F6ABB93A720C171837F7EA /* UICollectionViewCell+Nibs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FAEE64ADE6B20CAADC50E71E09808DD4 /* slot2.h in Headers */ = {isa = PBXBuildFile; fileRef = A17100E42D3DFDAD4EC4195E2444448D /* slot2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FB429DE7183465EA3908DC0EFC0E55B8 /* NstChips.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 703D2463A2508D59FAA3694C995EBC4E /* NstChips.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FB431B0FE84CE918B28A6CEC02DF7FEA /* RSTActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E75AFF4F05B942A1BEDA96CDD1D5F6E /* RSTActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FB52AF561DF1EA42175BB097A4ACC4CE /* F3DEX2CBFD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49EA3FD213D039FCC91628BD8DD260CA /* F3DEX2CBFD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FB53448735C698828655BAC4D9CD8EEB /* NstHook.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E4DF6912B7B427759D8C33E248753DBD /* NstHook.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FB7693DF35B3F75D556BADB4277A204D /* NESDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 46306F32408FC6EFC5F89D8105542A30 /* NESDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FBB46230897F3CE417083A50F260DC62 /* NstBoardBandaiDatach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2FE159CB1A275ED4531A3B1AEA807772 /* NstBoardBandaiDatach.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FBDC8F8F17CA21DD799A231ED4C63221 /* glsl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F9D3C122510252E5BCC49CBC78D15C1 /* glsl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FBE89F87882A3EF8E629A5FF5CA465AD /* Vector3.inl in Headers */ = {isa = PBXBuildFile; fileRef = BF94EC77DBC5DFAC5751843F5F04C129 /* Vector3.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - FC17266254EDD27F76B52F2DFAE02BEB /* NstBoardKonamiVrc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 14D21BDF50EDC8CCA4B82562FA4EC1E1 /* NstBoardKonamiVrc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FC4AFADABFECA8B929C84039869A806B /* NSLayoutConstraint+Edges.m in Sources */ = {isa = PBXBuildFile; fileRef = 80D87DDEE1CB809E00A47151D677F57F /* NSLayoutConstraint+Edges.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FC7830E121F5F72FCCBB725FFB1955EF /* clamping.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EEE51D19958A4CD2ECFD5DA1245966E /* clamping.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FAC36F11FCA18D96655C0EC43BA109EC /* UICollectionViewCell+Nibs.h in Headers */ = {isa = PBXBuildFile; fileRef = D190B41F4CB5ED20A79688D063A88168 /* UICollectionViewCell+Nibs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FAEE64ADE6B20CAADC50E71E09808DD4 /* slot2.h in Headers */ = {isa = PBXBuildFile; fileRef = 2098169177E986CAD8BED07A181041DC /* slot2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB429DE7183465EA3908DC0EFC0E55B8 /* NstChips.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1437D26717ED40A8C5CDAC510546F0AE /* NstChips.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FB431B0FE84CE918B28A6CEC02DF7FEA /* RSTActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E88C1E79B3436FD1C098E8D3CA9C3B1 /* RSTActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB52AF561DF1EA42175BB097A4ACC4CE /* F3DEX2CBFD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99096141FF8112FF26903D5255091329 /* F3DEX2CBFD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB53448735C698828655BAC4D9CD8EEB /* NstHook.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CC3FC4F8CAD332D94FED0C7DA4BE5251 /* NstHook.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FB7693DF35B3F75D556BADB4277A204D /* NESDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 07202C173B00EB72E2B76512AB36D1FF /* NESDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBB46230897F3CE417083A50F260DC62 /* NstBoardBandaiDatach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04884C74271D3DFEF181C2C3A302F1EA /* NstBoardBandaiDatach.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FBDC8F8F17CA21DD799A231ED4C63221 /* glsl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A01EE3AE9A9EC3F97E1D65778521BE4 /* glsl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBE89F87882A3EF8E629A5FF5CA465AD /* Vector3.inl in Headers */ = {isa = PBXBuildFile; fileRef = 1ECD6095FEBED6549E4EE623A0FC3431 /* Vector3.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + FC17266254EDD27F76B52F2DFAE02BEB /* NstBoardKonamiVrc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 36B43C04D7CC65CE9AD7C42E09A75A07 /* NstBoardKonamiVrc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FC4AFADABFECA8B929C84039869A806B /* NSLayoutConstraint+Edges.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B960281116744CE51DCCFCE5C6B616C /* NSLayoutConstraint+Edges.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FC7830E121F5F72FCCBB725FFB1955EF /* clamping.h in Headers */ = {isa = PBXBuildFile; fileRef = 508001DB6BE4336BE73C646FCBC54782 /* clamping.h */; settings = {ATTRIBUTES = (Project, ); }; }; FC88917194482589C32FDDE107659F9B /* DropboxClientsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4CE4627B8A26D8EBCF531C808BA677F /* DropboxClientsManager.swift */; }; FC88DE967A3DA743DC5161E747CDC20C /* GTLRService.m in Sources */ = {isa = PBXBuildFile; fileRef = D1221EDCBBEDA9035D0C95CAE7F9D52A /* GTLRService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FC901AE65E0FBF69936AE0909DE7C2FB /* glxext.h in Headers */ = {isa = PBXBuildFile; fileRef = A270C7CB63DDB996D27A472D7B07D460 /* glxext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FCCF2FA5A8D8593F791CD74984F915F5 /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = C5E44048879A0504939654F65166654C /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FCFB664196AEF0AB4F9D49044093DACA /* Text.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9995950583E5F1398CF81E042701C6E9 /* Text.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FD2F6B87B0C2E2B0F286279E623668D9 /* NstBoardJxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FE1983B3232B47585D4F61AB506D3B3A /* NstBoardJxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FD6339A963EAC26477FD04D0BFAD9996 /* srtcemu.h in Headers */ = {isa = PBXBuildFile; fileRef = BF56520AA924EF4F971217A9D8F49143 /* srtcemu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD8858F32C89A15506CDE5FEEED204A6 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = D77D2A132FCC17A3824D7EE83B27B431 /* plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD9074443C03E8B90BBED9A42541D442 /* UdpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C2A0EC04B2612AA6AB035B6AB1B3FAE8 /* UdpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FDAED0747D841ECFEF580516B968E938 /* F3DFLX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C3928A50878B4620930E776643F68B21 /* F3DFLX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FDEE9F98E235CE8E3A2A29186FD3901A /* NstInpFamilyKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8CC8FD6332B53E6AEADA551A3042A681 /* NstInpFamilyKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FDF30A650ADF0FF5E6748D29AA81A2BE /* sdl_key_converter.h in Headers */ = {isa = PBXBuildFile; fileRef = 595E9C1882A362C695C4D22B2193663E /* sdl_key_converter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FC901AE65E0FBF69936AE0909DE7C2FB /* glxext.h in Headers */ = {isa = PBXBuildFile; fileRef = 46E7ACB3EEB07EF50F5C2B657C683EC7 /* glxext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FCCF2FA5A8D8593F791CD74984F915F5 /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = A72FCF0B1E569ACF2DA4B0AE86704717 /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FCFB664196AEF0AB4F9D49044093DACA /* Text.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E6160492F9D1405C748988282E22619 /* Text.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FD2F6B87B0C2E2B0F286279E623668D9 /* NstBoardJxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3479E4ABC7EA56616AD7804B53308F24 /* NstBoardJxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FD6339A963EAC26477FD04D0BFAD9996 /* srtcemu.h in Headers */ = {isa = PBXBuildFile; fileRef = 20636B35E9114D9C339486FC80D17633 /* srtcemu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD8858F32C89A15506CDE5FEEED204A6 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AB7E24DF9D482B653684A4CB3373DAE /* plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD9074443C03E8B90BBED9A42541D442 /* UdpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 50AE585204C42DE0E82204B2336C8C73 /* UdpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FDAED0747D841ECFEF580516B968E938 /* F3DFLX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A59426906D18823BC9AD4B26A1EC66C /* F3DFLX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FDEE9F98E235CE8E3A2A29186FD3901A /* NstInpFamilyKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EFB09061F5EC38F78019E5DE2971B3BB /* NstInpFamilyKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FDF30A650ADF0FF5E6748D29AA81A2BE /* sdl_key_converter.h in Headers */ = {isa = PBXBuildFile; fileRef = D4F21465E42C4A8071CA88DDA2952DAA /* sdl_key_converter.h */; settings = {ATTRIBUTES = (Project, ); }; }; FDFC423A4243CFA179481946B523C999 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6822483789D6B6BB133ABB5446BCFF2D /* Setter.swift */; }; - FDFEFE7BFC83D62ECBF5728AA1F5CD7F /* osd.h in Headers */ = {isa = PBXBuildFile; fileRef = 114C1CE8166C1D5EE54BAA6E9086C965 /* osd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE0FA27784515E14FED461B1ACB0D5AB /* ZlutTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B61F4F596E3EE98C9853A96F05AFA5BD /* ZlutTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FE66ACE5CA4F217211189D67E353E0E3 /* Err.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FDCE262FF472DECC637657F3849A293C /* Err.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FE6E40D309F0B3DD2EC97258D2B80C79 /* Keys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 372F8BF3EFD0B4F1ADF3AB6EDDFDEB86 /* Keys.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FEA640DE0115214A9C6F9F674F56194E /* RemoteRecord+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F2667D8C1F3EC7F5E7989CBAD0B8281 /* RemoteRecord+File.swift */; }; - FEAB30060313E7D45EDA78B37A4A860C /* Log_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = E8F9CE0B18CCD8E71B4B5EDEB0D0C864 /* Log_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FECF1DF017DE2F169EBA719FD4D6AC21 /* cart.h in Headers */ = {isa = PBXBuildFile; fileRef = E0F23910DDA9040638B4A63EABA0CE82 /* cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FDFEFE7BFC83D62ECBF5728AA1F5CD7F /* osd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AD3368B2D5D7E97A29573C83ED07A59 /* osd.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FE0FA27784515E14FED461B1ACB0D5AB /* ZlutTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05767382F7FDD0945BB7F7F65461307C /* ZlutTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FE333082650A337F417E1CF08EF9503A /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 37221D699E77B16EA4FE6C376B827730 /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FE66ACE5CA4F217211189D67E353E0E3 /* Err.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3AB1EF926C51DFF7D92DC2A88CBEF231 /* Err.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FE6E40D309F0B3DD2EC97258D2B80C79 /* Keys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14603BADCCE95A5E507021ACEF7693F /* Keys.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FEA640DE0115214A9C6F9F674F56194E /* RemoteRecord+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = D347B9730DA2524DAF8E0C7AEDC8EEEA /* RemoteRecord+File.swift */; }; + FEAB30060313E7D45EDA78B37A4A860C /* Log_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB8CD619182507E4AEFF0FD1231295 /* Log_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FECF1DF017DE2F169EBA719FD4D6AC21 /* cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 28CBF616EB776A5C5D2F9A737B72AA74 /* cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FED373516448B1419731F783A3F890E8 /* ARM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 19481227163F7CACC6C2B1E0A8B6A008 /* ARM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FF31B5BBE13193F204040DE66FF15F02 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = F48A69F12EAD2BE3BAAF57DC1FBC2F40 /* Request.swift */; }; - FF3F43F568A4324F4CFCA6034F0EFE72 /* vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E1BF418C0437A40B1C3B3582AB50F3E /* vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF3F43F568A4324F4CFCA6034F0EFE72 /* vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E1FCF713C18921783474BD5B489966 /* vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; FF47124336E697A518CE2C93B8E88C2C /* GTMGatherInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = E0987B780D382225AE82D80ECA8C0641 /* GTMGatherInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FF52A333ED5E1B6EBA938D3B010BCB0B /* UIScreen+ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 422BF12649973F5EF2DBFD89FD150DC9 /* UIScreen+ControllerSkin.swift */; }; - FF60E30A8C317F1FB539F1A815BBF38F /* NstBoardBmcGamestarB.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C8B1D8C461900C12369DB3E2AA13C08E /* NstBoardBmcGamestarB.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FF64C067DBF8F76E97824763C8259B99 /* RSTCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D0054F15C9016C2A58C9AD3B1E55E4 /* RSTCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FF971B9F9F993B9F74611546EF606135 /* NstBoardBxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 12D394DD2EB99C510D854AD5F7D8D01B /* NstBoardBxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FFA9968DD49CF535DFA48AC9E948F1AE /* NstBoard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 82DC27EAD4860B5C690A7972067D9F11 /* NstBoard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FFB1135FEFD4153A7DB3BC2BDD598710 /* String.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4DC0729F6C80B77D9248BFEFE0B0F039 /* String.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FF52A333ED5E1B6EBA938D3B010BCB0B /* UIScreen+ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32999EF608D52E8EBF47AEF2D05024FB /* UIScreen+ControllerSkin.swift */; }; + FF60E30A8C317F1FB539F1A815BBF38F /* NstBoardBmcGamestarB.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 47FFA445106E8AEF055315EC32F6416C /* NstBoardBmcGamestarB.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FF64C067DBF8F76E97824763C8259B99 /* RSTCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D324452F2442968D429ED7A0718561D /* RSTCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF971B9F9F993B9F74611546EF606135 /* NstBoardBxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E6E22BF5B1C689D0C6A59216C3AF5E74 /* NstBoardBxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FFA9968DD49CF535DFA48AC9E948F1AE /* NstBoard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AE6A38985CB70BB9472E2EB009DD360E /* NstBoard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FFB1135FEFD4153A7DB3BC2BDD598710 /* String.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52AFA2BBC1A97735195FCE0F072444DD /* String.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FFB60CE26BC4B7CC1FB0A8E9DA386F70 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 85CA254539B604E12B65C0315AD84D21 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FFC60D90E8A926004701D722087AB6F1 /* RSTSeparatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 163295C6CCD961D42E5E5F2EED6E2FD0 /* RSTSeparatorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FFC60D90E8A926004701D722087AB6F1 /* RSTSeparatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 932ED892F2C78B795C9514E800D066F3 /* RSTSeparatorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FFE3DB6ABAAAF0F990D802469CE319C5 /* GoogleToolboxForMac-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E60A18A1E9B1D77A5D5CAA1444A18D /* GoogleToolboxForMac-dummy.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 08E49A14C0B820DC65E9EBEDC8FD26D2 /* PBXContainerItemProxy */ = { + 0AB8D582EE9A1B6BF2BC703095D392A0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 141E2D29C29A1BC1ABA3483321DF3C88; - remoteInfo = SNESDeltaCore; + remoteGlobalIDString = D676E21115185671D7258A56944ABE98; + remoteInfo = GTMSessionFetcher; + }; + 15E4ADDCC69DB2AEB2E21EC85874D1C6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 126073BF5D2BF3A4BDD22FE9062C9D20; + remoteInfo = N64DeltaCore; }; 19192073D8CD75A03CE029974259BDE9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1713,12 +1786,12 @@ remoteGlobalIDString = 530F469AED058B94728C278CCA514500; remoteInfo = DeltaCore; }; - 208F89A2FB20B32BE8EFC4DCFB94C0F4 /* PBXContainerItemProxy */ = { + 23176F3FC53EE946611A046850CBD012 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C0E41540D6862472ED7F2FA11669BE1F; - remoteInfo = Crashlytics; + remoteGlobalIDString = D7958E869B6C0073DB3025514393D7A3; + remoteInfo = GoogleAPIClientForREST; }; 298D76CD321EB0D6C48A27C84D848723 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1727,6 +1800,13 @@ remoteGlobalIDString = D7958E869B6C0073DB3025514393D7A3; remoteInfo = GoogleAPIClientForREST; }; + 2B99EACE928A9F500BF9C764B2238EB4 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; + }; 34B215C21519BEE50F2B57C914617CDD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1734,19 +1814,12 @@ remoteGlobalIDString = 530F469AED058B94728C278CCA514500; remoteInfo = DeltaCore; }; - 392DBE454CBCA00260718AED61FE380D /* PBXContainerItemProxy */ = { + 3CD814616B670B8CE5088FBD7C0E1762 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = FF39B7A1D9F00620D9F56635ABBB2C03; - remoteInfo = SwiftyDropbox; - }; - 3B8363B7FD833F1636CD3973BC69E237 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0FAC8C4777DBD31221FE57848CB5F759; - remoteInfo = NESDeltaCore; + remoteGlobalIDString = D47C581D39D227080F83B16A22A56664; + remoteInfo = GoogleToolboxForMac; }; 4385B12AA0B20D01F6C776AB3FDDF01A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1755,6 +1828,20 @@ remoteGlobalIDString = 530F469AED058B94728C278CCA514500; remoteInfo = DeltaCore; }; + 597855F01FDAB40A3CF62BCD3AEA5D72 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; + remoteInfo = GoogleSignIn; + }; + 5C258FF92B6679B47B49335CC372C90F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7056A67459B0B8B62FACACCE167546B8; + remoteInfo = GBADeltaCore; + }; 5C8E1AC123E1190B28C3D74EC312A900 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1769,13 +1856,6 @@ remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; remoteInfo = ZIPFoundation; }; - 659353ED4A7AB491D7F388255FDB55AD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B5D1BA64AC676FF46408FCDE19A05767; - remoteInfo = Roxas; - }; 66BE2C6B403019BF36ABAD1493446E37 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1783,19 +1863,19 @@ remoteGlobalIDString = D47C581D39D227080F83B16A22A56664; remoteInfo = GoogleToolboxForMac; }; - 69A8B982C834715530BA23F9E542717F /* PBXContainerItemProxy */ = { + 6A5DB238A47BCA0BFA418E35F69CB27F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = ABB048B191245233986A7CD75FE412A5; - remoteInfo = Fabric; + remoteGlobalIDString = 5B32FEE5AD13CB944235C9158BECB929; + remoteInfo = "MelonDSDeltaCore-melonDS"; }; - 6F0190E1AA86749B64954DAE1DF61FD8 /* PBXContainerItemProxy */ = { + 72992287F7446AB7BE779D00335800FE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5CB4163F0A6D4BDE0A490758A78BA43D; - remoteInfo = Harmony; + remoteGlobalIDString = 141E2D29C29A1BC1ABA3483321DF3C88; + remoteInfo = SNESDeltaCore; }; 7BFA61EA67CFFA199F2E37A65BA0FFFD /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1811,19 +1891,33 @@ remoteGlobalIDString = E5449403CBE67599315B4D26019FA175; remoteInfo = "DSDeltaCore-DSDeltaCore"; }; - 85A4548E1EA8661D090B8346F0C0C747 /* PBXContainerItemProxy */ = { + 7F76089DD889A286421580F486DABD30 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = DCBC8D45C727B1472F26E79661AF11B0; - remoteInfo = DSDeltaCore; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; }; - 916694214CC7D40B5C688E8E1B8BD383 /* PBXContainerItemProxy */ = { + 80B90246215F8B20A9C96642F2666C46 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3F2C1776D90B62B156DB52C41A5C419C; - remoteInfo = SQLite.swift; + remoteGlobalIDString = 5CB4163F0A6D4BDE0A490758A78BA43D; + remoteInfo = Harmony; + }; + 81A23D2771EF2CB058EBCB7273C6ECE9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; + }; + 86534420E32682EC48291AA6F93F24F8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D20492B6476142DCA0C455340876BB98; + remoteInfo = SMCalloutView; }; 917C63D909EFB5E156F1D8438E1DBF3E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1832,33 +1926,19 @@ remoteGlobalIDString = 6538136F848A07F507372CCFB40CEB88; remoteInfo = "SNESDeltaCore-SNESDeltaCore"; }; - 91865C2EEFB2A47CB3B4902798E4771F /* PBXContainerItemProxy */ = { + 96D9FD5E94FA86A4829461B45553DF6D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = D47C581D39D227080F83B16A22A56664; - remoteInfo = GoogleToolboxForMac; + remoteGlobalIDString = 0FAC8C4777DBD31221FE57848CB5F759; + remoteInfo = NESDeltaCore; }; - 918A60A2153F498B0B255F27E3B94F69 /* PBXContainerItemProxy */ = { + 9B7CE23FABAB20B2C7AF16AB48B1E85A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = DB59C68809324297BEDAF0CC3F931B27; - remoteInfo = GBCDeltaCore; - }; - 955F4B2D4BC59033DF863D57B227851C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 530F469AED058B94728C278CCA514500; - remoteInfo = DeltaCore; - }; - 96E675967EBB0C7F8B3627784533133A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D20492B6476142DCA0C455340876BB98; - remoteInfo = SMCalloutView; + remoteGlobalIDString = 38A7AA32705A9662332E76FA75B50858; + remoteInfo = MelonDSDeltaCore; }; A3FED02D30B0F4EBB6DC19236150B5C3 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1874,6 +1954,13 @@ remoteGlobalIDString = 890229DC8DCC9C43917568A0C4502FCA; remoteInfo = "GBADeltaCore-GBADeltaCore"; }; + AFA5F041EC98759BCF2991209AA8B647 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B5D1BA64AC676FF46408FCDE19A05767; + remoteInfo = Roxas; + }; B0BF40D28D6E234E553A0ED8A549FD38 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1881,6 +1968,13 @@ remoteGlobalIDString = 530F469AED058B94728C278CCA514500; remoteInfo = DeltaCore; }; + B8692181C6057BB8A463EBCE606FACEA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = ABB048B191245233986A7CD75FE412A5; + remoteInfo = Fabric; + }; BA76C622BDB4235F75B294BF13275ABE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1888,12 +1982,19 @@ remoteGlobalIDString = 530F469AED058B94728C278CCA514500; remoteInfo = DeltaCore; }; - BE77B86928874033E4E09D8C9ADD66A9 /* PBXContainerItemProxy */ = { + BE687E136D56B4102FB9880EDB33703D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 126073BF5D2BF3A4BDD22FE9062C9D20; - remoteInfo = N64DeltaCore; + remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; + remoteInfo = ZIPFoundation; + }; + BFDC128DE7D388CEE4AC40C434366C9A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; }; C253B6663FD70B1548A43C630EFBD147 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1909,13 +2010,6 @@ remoteGlobalIDString = 7F839870ECBE0065B4BCC02E5F98F48A; remoteInfo = "NESDeltaCore-NESDeltaCore"; }; - C6636E070B3DEB95C17EA6632E29A801 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = AA15C8469D67684160CC2A7098EB841C; - remoteInfo = ZIPFoundation; - }; C8E5EBBA48A65677D814EA8555DD214D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1930,13 +2024,6 @@ remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; remoteInfo = Alamofire; }; - CD68A8251278E73BF058DE4CAF902C13 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7056A67459B0B8B62FACACCE167546B8; - remoteInfo = GBADeltaCore; - }; D465047540D12FD9D95291AE82A76DB9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1944,33 +2031,19 @@ remoteGlobalIDString = ABB048B191245233986A7CD75FE412A5; remoteInfo = Fabric; }; - D9246DA49C6124866A85E13C049C425F /* PBXContainerItemProxy */ = { + DB94964017865AC74B32D329D41ACD22 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; - remoteInfo = GoogleSignIn; + remoteGlobalIDString = 3F2C1776D90B62B156DB52C41A5C419C; + remoteInfo = SQLite.swift; }; - DF19AABA87BA7620652F0602A1A445EC /* PBXContainerItemProxy */ = { + ED320D1490699A682E638D0CB51867F5 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = D676E21115185671D7258A56944ABE98; - remoteInfo = GTMSessionFetcher; - }; - E00034F4E269D670A3F53FB95161556D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; - }; - E055DEA7C7938B0F8B215158723BCFAC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D7958E869B6C0073DB3025514393D7A3; - remoteInfo = GoogleAPIClientForREST; + remoteGlobalIDString = DCBC8D45C727B1472F26E79661AF11B0; + remoteInfo = DSDeltaCore; }; EF595E5FB07F405B2D9F4C94D4560005 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1979,6 +2052,20 @@ remoteGlobalIDString = 38A3E6A4A13E8C4E975336840145C119; remoteInfo = "N64DeltaCore-N64DeltaCore"; }; + F1EB0B745F438243447388F899A86F78 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C0E41540D6862472ED7F2FA11669BE1F; + remoteInfo = Crashlytics; + }; + F1F6EE2728A32549B1D7705737A01D88 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = DB59C68809324297BEDAF0CC3F931B27; + remoteInfo = GBCDeltaCore; + }; F67700E89740C8E29D211A0AB1F167FB /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1986,12 +2073,12 @@ remoteGlobalIDString = D676E21115185671D7258A56944ABE98; remoteInfo = GTMSessionFetcher; }; - FACAEB8C576AA15FABFC8222548EEC2A /* PBXContainerItemProxy */ = { + FBB42449A24CCDAAA448A4594FEA4A7E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; + remoteGlobalIDString = FF39B7A1D9F00620D9F56635ABBB2C03; + remoteInfo = SwiftyDropbox; }; FC9F6032803826BC09AF6A35BD043AF6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -2010,1810 +2097,1883 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 000CEE30E84D661F89DA9650593A2099 /* PaletteTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PaletteTexture.cpp; sourceTree = ""; }; - 0011F0531529E83F54AAEB2C8A2969F1 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = GBCDeltaCore/Standard.deltamapping; sourceTree = ""; }; - 0017998E6980B0ABDB2A24D94074549C /* interruptrequester.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interruptrequester.h; sourceTree = ""; }; 003176C08AC98F4C379054630CCC40FD /* Crashlytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Crashlytics.h; path = iOS/Crashlytics.framework/Headers/Crashlytics.h; sourceTree = ""; }; + 004BF1A3CCAB8016603DA7935B203E8B /* NstBoardBtlGeniusMerioBros.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlGeniusMerioBros.hpp; sourceTree = ""; }; + 0056ECA9D4904EC555DDDB7A44A29B9D /* pngmem.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngmem.c; sourceTree = ""; }; 007B238BA4CBDD19AB8422150260B200 /* SQLite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLite.h; path = Sources/SQLite/SQLite.h; sourceTree = ""; }; - 00982E0E1F8B1E95963CDA563EA3D799 /* DriveService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Records.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Records.swift"; sourceTree = ""; }; - 0098D6E2E55E4CB590673ABF30CBCFF6 /* RSTPersistentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTPersistentContainer.m; path = Roxas/RSTPersistentContainer.m; sourceTree = ""; }; - 00CE3BB55A661517FBF455927EB5D945 /* UIImage+PDF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIImage+PDF.swift"; sourceTree = ""; }; - 00DDAF44FCEF1DAE01680CB1290E8DA6 /* osd_element.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osd_element.h; sourceTree = ""; }; - 00E1CE975F5DF9EF52286A091470CE4D /* audio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = audio.h; sourceTree = ""; }; - 00E83FB8FE257D431296C57164DBCE71 /* FetchRemoteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FetchRemoteRecordsOperation.swift; sourceTree = ""; }; - 00EA19D2D4A64B523C65C5C29699ADC6 /* SaveState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SaveState.swift; sourceTree = ""; }; + 0089D9FB88A0BFD7C81E2BBAD71BEFBF /* opengl_CachedFunctions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_CachedFunctions.cpp; sourceTree = ""; }; + 009F86808D0C8EA68A833D33755CD232 /* TextureFilters_hq4x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_hq4x.h; sourceTree = ""; }; + 00B03766966DBCB90906DC6BD97E2035 /* NstBoardIremLrog017.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremLrog017.hpp; sourceTree = ""; }; + 00B52487B5EE514818470AEDEFA85967 /* RectangleShape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RectangleShape.hpp; sourceTree = ""; }; + 00B7E4CE889EFFA5F1F5DAF6C3BD013A /* L3DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3DEX2.h; sourceTree = ""; }; + 00DC15146753301043922CC27C6DB1EC /* NstCartridgeInes.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeInes.hpp; sourceTree = ""; }; + 00ECD1D300178CB98731BDB344274AF6 /* SPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPU.h; sourceTree = ""; }; 01082497DDFB3641F47D167E3C3EB389 /* GTLRDateTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDateTime.h; path = Source/Objects/GTLRDateTime.h; sourceTree = ""; }; 013B228892127D085A9A12736D33F540 /* GTMMIMEDocument.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMMIMEDocument.m; path = Source/GTMMIMEDocument.m; sourceTree = ""; }; 014989F31F4E364C9128F07C0637CA70 /* SMCalloutView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SMCalloutView-dummy.m"; sourceTree = ""; }; - 01B378B099C14E4E827FCBA843C08674 /* Color.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Color.hpp; sourceTree = ""; }; - 020829DABC4B34F0B103CB44A86B1E02 /* NstInpExcitingBoxing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpExcitingBoxing.hpp; sourceTree = ""; }; - 021152EF65B7FECE3238545205BFBB9F /* ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist"; sourceTree = ""; }; - 0236ACAAE07BD9A1FA670BDBDADC0D30 /* N64DeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "N64DeltaCore-dummy.m"; sourceTree = ""; }; - 024F3CDD3E74EDB4AB9DEC89AC1A8D5E /* NstVsRbiBaseball.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsRbiBaseball.hpp; sourceTree = ""; }; - 025953BB492B1D55BDA573CAC6CE9000 /* boolean.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = boolean.h; sourceTree = ""; }; + 01BB302ADFA2AECE433F8364E67758FA /* GBATypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBATypes.m; sourceTree = ""; }; + 01BC5E003AE565B6B711436BFBF86BF4 /* ROMReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ROMReader.h; sourceTree = ""; }; + 01D14FEABF918A24804DDF7627C4C6E4 /* TextureFilters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters.h; sourceTree = ""; }; + 0218E1BBADD080E67F9220EDFDF90EF3 /* WriteToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WriteToRDRAM.h; sourceTree = ""; }; + 021A9462364AFC38855FC545DCD6A6B0 /* tttypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tttypes.h; sourceTree = ""; }; + 021DE75321784D55780486DCF5510498 /* text.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = ""; }; + 022DB7F76D90A69E8472052BB6DAF7F7 /* sram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sram.h; sourceTree = ""; }; 026273C8CD9BD9384803DD59CB45DF96 /* GTMDebugThreadValidation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMDebugThreadValidation.h; path = DebugUtils/GTMDebugThreadValidation.h; sourceTree = ""; }; - 026AA711C2DD33D8830708741F80F0D5 /* F3DAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DAM.h; sourceTree = ""; }; - 02871D18AA28905E1FE181B4AEDAE388 /* AboutDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AboutDialog.h; sourceTree = ""; }; - 02C1BEECEC397F5E91934D66DFFF7686 /* NstBoardSunsoft1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft1.hpp; sourceTree = ""; }; - 02F79C936D7C91B742192824860F638C /* recomp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = recomp.h; sourceTree = ""; }; - 0307F4D94070F2E4674AD03B8CE79D58 /* SyncProgress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncProgress.swift; sourceTree = ""; }; - 035FBCDBD0BE435F0A0EB32A2C22FAD3 /* NLS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NLS.h; sourceTree = ""; }; - 03655DDFBA2609D8DEA72FDDF988AD58 /* RSTSearchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTSearchController.h; path = Roxas/RSTSearchController.h; sourceTree = ""; }; - 03724046BA5C3704C4607F3025370078 /* NstSha1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSha1.hpp; sourceTree = ""; }; - 03792829FDEFEBCD237AD95762EF484D /* RSTPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTPlaceholderView.h; path = Roxas/RSTPlaceholderView.h; sourceTree = ""; }; + 0263597CCE16095F0BA7CA33F49B26BA /* RSP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RSP.cpp; sourceTree = ""; }; + 026C9449D2CD7E3C08836E3B3C86F709 /* NstBoardSachenSa72007.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa72007.hpp; sourceTree = ""; }; + 0275BCD590CD9EDAE776A4F66B072CD5 /* Combiner.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Combiner.cpp; sourceTree = ""; }; + 027FB4C6CC71DADB243F4D75F54D49E2 /* SaveState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SaveState.swift; sourceTree = ""; }; + 028754304C5C372FE9E27565F32DD4FC /* RSTCollectionViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = RSTCollectionViewCell.xib; path = Roxas/RSTCollectionViewCell.xib; sourceTree = ""; }; + 02BCDAEC84EB90FED96E1A7812F1B9CC /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; + 030B53DF4264E1E4E75E737FC9B5B696 /* t1tables.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = t1tables.h; sourceTree = ""; }; + 03152EFD6359667DF578CCCE3CAF648E /* retro_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_common.h; sourceTree = ""; }; + 033421C4854AC34E9F0A5215AE7F3AE4 /* DepthBufferToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBufferToRDRAM.h; sourceTree = ""; }; + 034ECDF2709AB785B480F4DEBECA1C8A /* uncopyable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = uncopyable.h; sourceTree = ""; }; + 037E3F75B195945C62D341A82A439502 /* messages.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = messages.h; sourceTree = ""; }; 039A7DC666394A7FCDA8D0587DD80EAD /* Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Files.swift; path = Source/SwiftyDropbox/Shared/Generated/Files.swift; sourceTree = ""; }; + 03A2EA6E13FD790527F86EB2CDB1E402 /* FilterChain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FilterChain.swift; sourceTree = ""; }; 03B0FDD916BDF1DA5F04BD8928F42F24 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - 03B446FCDA488875B28D8F29A5A054B5 /* GBCCheat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBCCheat.m; sourceTree = ""; }; + 03D0F6F861896F902FD904A5CA166856 /* Flash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Flash.h; sourceTree = ""; }; 0402C21751DF9B30592DAA2E4DEAB0A6 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/SDWebImageCompat.m; sourceTree = ""; }; 040EDE19207F90BFBF015280544EC415 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; - 0413511727F62ED4EE7013A2B65E6D60 /* F3DEX2CBFD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2CBFD.h; sourceTree = ""; }; - 041DD83CE8B7122C23DB4EA6557E0B8D /* NstBoardPxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardPxRom.hpp; sourceTree = ""; }; - 042D259A0DE7C5C64344E6F6C921F2F4 /* iniparser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = iniparser.h; sourceTree = ""; }; - 043B3C37DAA8DA3F93EF9856913625DF /* ftimage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftimage.h; sourceTree = ""; }; - 04432A140C95AD3E4476D54108D6800F /* NstPatcherUps.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcherUps.hpp; sourceTree = ""; }; - 044F71625A7716601EAADFE8C6D579CA /* NstBoardBtl6035052.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtl6035052.hpp; sourceTree = ""; }; - 0482ED34CE1A01F70FEB8B861E2E8E09 /* GLideN64.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GLideN64.cpp; sourceTree = ""; }; - 04B1ECC7EA8EA09AD63D4DE11E338332 /* scmrev.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = scmrev.h; sourceTree = ""; }; - 04CB77BB25701FFB2038A7D45251EC20 /* ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist"; sourceTree = ""; }; - 04CC6EBCEC394DA0E803BBA27F7D98C0 /* LocalRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocalRecord.swift; sourceTree = ""; }; - 04E947092A258CFB57EB84AFAB619A18 /* readpng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = readpng.h; sourceTree = ""; }; - 04F25CB32F102ED6A7598D66E7BC9443 /* NstBoardCneDecathlon.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCneDecathlon.hpp; sourceTree = ""; }; - 04FA9510648C9DD5A3436B2139DA560F /* NstBoardBmcSuper40in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper40in1.hpp; sourceTree = ""; }; - 050EF16DAA3290D00AA4795AD24E1921 /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; - 0553C664A9287732CFEA939623E83E70 /* GraphicsDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GraphicsDrawer.cpp; sourceTree = ""; }; - 0558C6E8EE1D9B61043E335254B75955 /* NstBoardTxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxRom.hpp; sourceTree = ""; }; - 05E18E206FE5E3ECC0A0F7DE2BFF3CB9 /* NstBoardJaleco.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJaleco.hpp; sourceTree = ""; }; - 069FDF1510D1EE57999D9EEFA42DCFAC /* GBA.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GBA.swift; sourceTree = ""; }; - 06A10A0C91C261CE6EB6C49882F13804 /* F3DEX2ACCLAIM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2ACCLAIM.cpp; sourceTree = ""; }; - 06B3B77EA189E0778856F0A800AD3B73 /* pngmem.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngmem.c; sourceTree = ""; }; - 06D710973353A358D86E72C355EAB4A5 /* NstInpPokkunMoguraa.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPokkunMoguraa.hpp; sourceTree = ""; }; - 06E118D0678F9057E5942E1C06792221 /* Debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Debugger.h; sourceTree = ""; }; - 06F9614E94FCE209A55C8C7298C28ACF /* NstApiEmulator.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiEmulator.hpp; sourceTree = ""; }; - 071BA5C258DCD29E5B2DDCC021A6B4F7 /* ZSortBOSS.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZSortBOSS.cpp; sourceTree = ""; }; + 04129B9A3BF487A2771D1CC76731FB37 /* NstVideoFilterNtsc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterNtsc.hpp; sourceTree = ""; }; + 04131E906A312EC3EC8E75626EEA8233 /* NstBoardCneShlz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCneShlz.hpp; sourceTree = ""; }; + 04884C74271D3DFEF181C2C3A302F1EA /* NstBoardBandaiDatach.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiDatach.hpp; sourceTree = ""; }; + 04CE2E235B10188704B563E18E7D532A /* GBCEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCEmulatorBridge.h; sourceTree = ""; }; + 051DD45485937EBA4AEB4D55FB230DCB /* RSTPersistentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTPersistentContainer.m; path = Roxas/RSTPersistentContainer.m; sourceTree = ""; }; + 0556A2BF839B0F53563F8D71873A9029 /* Config.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Config.hpp; sourceTree = ""; }; + 056855D6563613F5941E73E167520BEE /* NstBoardBtlTobidaseDaisakusen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlTobidaseDaisakusen.hpp; sourceTree = ""; }; + 05767382F7FDD0945BB7F7F65461307C /* ZlutTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZlutTexture.cpp; sourceTree = ""; }; + 0576D7E597D37BAAB587DB83FE8CB161 /* ColorBufferReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ColorBufferReader.cpp; sourceTree = ""; }; + 05A59AB3426F5F9258B25B7746D83CAC /* cp15.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp15.h; sourceTree = ""; }; + 062F18B3DCFB2719520C631367293BC3 /* plugins_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = plugins_compat.h; sourceTree = ""; }; + 0636E7B8F2E8F376A9BF6CEC67B0B615 /* NstBoardKonamiVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVsSystem.hpp; sourceTree = ""; }; + 0663F28B78D5B488BBD1158305953BF2 /* MemoryStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MemoryStatus.h; sourceTree = ""; }; + 068F16B4A783E37E5CD5C1D3B713CEF0 /* glcorearb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glcorearb.h; sourceTree = ""; }; + 06A49EC7BA9A5FD79AC2FE0923FBCF54 /* NstBoardFxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFxRom.hpp; sourceTree = ""; }; + 06C47AD06BB9C0BD7738A8444AB1B3FF /* Types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = ""; }; + 06E98AF28DEE4396FAC50A659A97D1F7 /* Sram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Sram.h; sourceTree = ""; }; + 07202C173B00EB72E2B76512AB36D1FF /* NESDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NESDeltaCore-umbrella.h"; sourceTree = ""; }; + 07352595BD173B37D1FBCAC265DC1C57 /* savestate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = savestate.h; sourceTree = ""; }; 0753A2F2127F76F50CD3A7E3FCDF1F60 /* GTMMIMEDocument.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMMIMEDocument.h; path = Source/GTMMIMEDocument.h; sourceTree = ""; }; - 0760F68BF4270075015FF0EF76C307A4 /* NstBoardIremLrog017.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremLrog017.hpp; sourceTree = ""; }; - 0798506C053FB81EBDF4F4EF5E7C226A /* arm_jit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = arm_jit.h; sourceTree = ""; }; - 07BDCD6B6C9579E41B46804763B13582 /* VideoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoManager.swift; sourceTree = ""; }; - 07F929AA3ED898A910A9BC1A1D86B9EA /* PostProcessor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PostProcessor.cpp; sourceTree = ""; }; - 086ADF754FD807B796DAED4D2797BAA7 /* pngtrans.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngtrans.c; sourceTree = ""; }; - 087B0A1E2A0C286B3F21988E2886E415 /* TextDrawerStub.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextDrawerStub.cpp; sourceTree = ""; }; - 087E76CC675F0056172F689E3EB38F3D /* SNESTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SNESTypes.m; sourceTree = ""; }; - 0883789E4810C71ABF67BD6770636C52 /* BatchRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BatchRecordOperation.swift; sourceTree = ""; }; + 078E27968A4F0A9279BF48A15BCFF4B8 /* Ext_TxFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Ext_TxFilter.h; sourceTree = ""; }; + 078EC48CFDCED61DA3CE896FA2BC1477 /* S2DEX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = S2DEX.cpp; sourceTree = ""; }; + 07A24856C0FCE10AA34185E05096752B /* RSTNibView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTNibView.h; path = Roxas/RSTNibView.h; sourceTree = ""; }; + 07CA97CCF4C09704E6DE0E7275915BD2 /* ThreadImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadImpl.cpp; sourceTree = ""; }; + 07D0EF9DC873BCE8C132664936AA4D2C /* ColorBufferToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferToRDRAM.h; sourceTree = ""; }; + 07E188F1C0F1D9982F9D7E2B4BF63A77 /* SoundFileWriter.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileWriter.hpp; sourceTree = ""; }; + 086BC7A1837005C56E8908CBF2465274 /* SoundTouch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundTouch.h; sourceTree = ""; }; + 0893F87C0C44883CFA0FF8BD37E0CB50 /* GBAGfx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAGfx.h; sourceTree = ""; }; 089558003E4B67B701B403001320A7EC /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; - 08A7738B63C4EF018D66094588BB33F2 /* wifi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wifi.h; sourceTree = ""; }; - 08B17046C01595A0433E18CDE7B926A2 /* m64p_debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_debugger.h; sourceTree = ""; }; - 08B8560CC6F18BF32453AAB35DA2A0FE /* ftsnames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsnames.h; sourceTree = ""; }; - 092D5916BAD725E2BD181241814AD72A /* opengl_Attributes.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Attributes.cpp; sourceTree = ""; }; - 09764ED9B10646101C0CA4C1EC479B47 /* ConfigDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ConfigDialog.h; sourceTree = ""; }; - 09BF210597386722D5D7051B20C7BE0A /* NstTrackerRewinder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTrackerRewinder.hpp; sourceTree = ""; }; - 0A031E1BD1EAC694520C66D56F10F34E /* Roxas-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Roxas-umbrella.h"; sourceTree = ""; }; - 0A0F6D5E39D8F599381FA5E8BB34178E /* NstBoardBmcSuper22Games.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper22Games.hpp; sourceTree = ""; }; + 08EEF87CE7D5964AB34DCF33763BB099 /* AutoBuild.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AutoBuild.h; sourceTree = ""; }; + 092C6EE9873F269B8DF55D311028DF6F /* F5Rogue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F5Rogue.cpp; sourceTree = ""; }; + 0971A5E1176766915B5C63ECBAF0E9A1 /* NstBoardUnlSuperFighter3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlSuperFighter3.hpp; sourceTree = ""; }; + 099938FEDA9E30DB8F316FD35D3A7E39 /* Account.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; + 09A719B1C418B5A4A8184B6EC22CE504 /* ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist"; sourceTree = ""; }; + 0A01EE3AE9A9EC3F97E1D65778521BE4 /* glsl_Utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_Utils.h; sourceTree = ""; }; + 0A0BDC53FD9A10612B34F36860479885 /* UIViewController+TransitionState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+TransitionState.h"; path = "Roxas/UIViewController+TransitionState.h"; sourceTree = ""; }; + 0A35B20685D6B2F22C568D23E73C3E50 /* opengl_Parameters.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Parameters.cpp; sourceTree = ""; }; 0A552ADFE847FA0B9435F038FD25C6AB /* OAuthMobile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuthMobile.swift; path = Source/SwiftyDropbox/Platform/SwiftyDropbox_iOS/OAuthMobile.swift; sourceTree = ""; }; + 0A59426906D18823BC9AD4B26A1EC66C /* F3DFLX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DFLX2.cpp; sourceTree = ""; }; + 0A780AF639D642BAFDB60533800E36E5 /* Vertex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Vertex.hpp; sourceTree = ""; }; + 0A7BA8D8D1E9E2CDAB97C30A5A502156 /* OpenGLESProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OpenGLESProcessor.swift; sourceTree = ""; }; + 0A823D93C54BF9183AB990B267E0FBF5 /* GBCDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBCDeltaCore-umbrella.h"; sourceTree = ""; }; + 0A854F4317FA28AEE4189EE7FF42C9E3 /* NDS.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NDS.cpp; sourceTree = ""; }; 0ABB33F6C316C0D9CF3E24882D926C51 /* GTLRFramework.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRFramework.h; path = Source/Utilities/GTLRFramework.h; sourceTree = ""; }; - 0ACF8573E12E7CE6FC8382B1C7A28827 /* metaspu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = metaspu.h; sourceTree = ""; }; - 0AEA4696FF630389674F9A479B343F8E /* CheatSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CheatSearch.h; sourceTree = ""; }; - 0B149C977427CB869997B3FA4DF71F80 /* GBCCheat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCCheat.h; sourceTree = ""; }; - 0B7FEA4E81066CF6432FBD99B31C13B8 /* c4.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = c4.h; sourceTree = ""; }; - 0BB04C06267FD84AED09F6E677B3B3BF /* GBADeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GBADeltaCore-dummy.m"; sourceTree = ""; }; - 0BE607429888D1CA21C1751ECA041494 /* NstBoardKayPandaPrince.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKayPandaPrince.hpp; sourceTree = ""; }; - 0BE9A850D36C7373D36DB707F1F2FD8D /* Settings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = ""; }; - 0BFECFA92DE1F1B2ECD7449CA0DE9389 /* flashram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = flashram.h; sourceTree = ""; }; - 0C27F2E27F1106463E57DFEED760FFA8 /* SoundBufferRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundBufferRecorder.hpp; sourceTree = ""; }; - 0C369537653C1D3D646427D235DA8800 /* pngdebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngdebug.h; sourceTree = ""; }; - 0C46940B6EC0F54D23A4A771525673E4 /* VI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = VI.cpp; sourceTree = ""; }; - 0C752AF5BCDF4EC788FBE60B79732508 /* UITableView+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+CellContent.m"; path = "Roxas/UITableView+CellContent.m"; sourceTree = ""; }; - 0C8F960573035AFFC3CDC1DEBA1E6BD4 /* opengl_TextureManipulationObjectFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_TextureManipulationObjectFactory.cpp; sourceTree = ""; }; - 0C9A66906E90E69652DE559EF77F4E9C /* NstIoAccessor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoAccessor.hpp; sourceTree = ""; }; - 0CD4D6B9E5A8C737F812D9FE05776374 /* svttcmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svttcmap.h; sourceTree = ""; }; - 0CDD7B173B5F39A57867ED110A1FCA3A /* ri_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ri_controller.h; sourceTree = ""; }; - 0D2FEA2156756F729E3BD6869EBAA42E /* TouchInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TouchInputView.swift; sourceTree = ""; }; + 0B0AD671A8AD882845CE216B6821E50B /* opengl_ColorBufferReaderWithEGLImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithEGLImage.h; sourceTree = ""; }; + 0B25891B457EEC5EC2A639DA8DAE0EBE /* Harmony.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Harmony.xcconfig; sourceTree = ""; }; + 0B34BDCE67F7297CE2E1F3FBE65E622C /* NstBoardSuperGameBoogerman.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGameBoogerman.hpp; sourceTree = ""; }; + 0B399358B256320203E685F8FC809959 /* recomp_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = recomp_types.h; sourceTree = ""; }; + 0B960281116744CE51DCCFCE5C6B616C /* NSLayoutConstraint+Edges.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+Edges.m"; path = "Roxas/NSLayoutConstraint+Edges.m"; sourceTree = ""; }; + 0BA3AC744A6D8C4122D7F2407E0AEE17 /* NstBoardSubor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSubor.hpp; sourceTree = ""; }; + 0BB6E71C991DC4BD501F509F16B2DFDF /* GBI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBI.h; sourceTree = ""; }; + 0BE4827A1488FD5FE6F356A0EE7D96A3 /* F3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3D.h; sourceTree = ""; }; + 0C1361ED1C7AC536E50CC4A7BA396F6B /* gSP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gSP.h; sourceTree = ""; }; + 0C3381B8A55051B7129CC78CA0231C2D /* MelonDSDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MelonDSDeltaCore-dummy.m"; sourceTree = ""; }; + 0C864A48A744E0C4E9B10806107515B8 /* NstBoardMmc5.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc5.hpp; sourceTree = ""; }; + 0CD0F23869E4370E465AE1C8597D8843 /* readpng2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = readpng2.h; sourceTree = ""; }; + 0D12A00DD051835A984A58D6DD44BDD4 /* SNESDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESDeltaCore.h; sourceTree = ""; }; + 0D13CE77F2679DAE2B0BD39A25C2A0DE /* NstBoardUnlA9746.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlA9746.hpp; sourceTree = ""; }; + 0D2603FBE6D0E88895754984334C87D0 /* NstBoardBtlDragonNinja.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlDragonNinja.hpp; sourceTree = ""; }; + 0D27F1218FFC3EC9D27CAC71BCFD4925 /* pcap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pcap.h; sourceTree = ""; }; + 0D29D1C963E32AFCD9DF5F87C6BA90D9 /* N64DeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = N64DeltaCore.modulemap; sourceTree = ""; }; 0D3974A0FEF480847BBD90477C1A1D10 /* GoogleAPIClientForREST-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleAPIClientForREST-prefix.pch"; sourceTree = ""; }; - 0D713472AF6AAB8E1D9ABC6D7A61B49B /* getset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = getset.h; sourceTree = ""; }; - 0DB5686AC4A3B7C73DBEBCB221B94109 /* png.c */ = {isa = PBXFileReference; includeInIndex = 1; path = png.c; sourceTree = ""; }; + 0D6CBC1B60FADA9D18C705CC48D37B27 /* SNESDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SNESDeltaCore-umbrella.h"; sourceTree = ""; }; + 0D9E4AA51EA6166FE8A05D803D4DFCF2 /* GBCDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCDeltaCore.h; sourceTree = ""; }; + 0DB69BA777DA2D7FE96274A0B4EB4BB5 /* m64p_plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_plugin.h; sourceTree = ""; }; 0DC45D7DB5CFA98660E39905809A298A /* Auth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Auth.swift; path = Source/SwiftyDropbox/Shared/Generated/Auth.swift; sourceTree = ""; }; - 0DCFE89D247EB41DF04E4B210CD083F3 /* DisplayLoadProgress.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DisplayLoadProgress.cpp; sourceTree = ""; }; - 0DEC322B85B93540CD7F53F2185164D6 /* NstBoardUnlKingOfFighters96.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlKingOfFighters96.hpp; sourceTree = ""; }; + 0DD7EE7BA4F30F6178A84660D851DE0B /* ftimage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftimage.h; sourceTree = ""; }; + 0E058DDD738AC1B8E1A7C13BC1DF630A /* ARM_InstrTable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARM_InstrTable.h; sourceTree = ""; }; + 0E0A94CCCC0D97F634E74FA3103B29F1 /* interruptrequester.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interruptrequester.h; sourceTree = ""; }; 0E2C78A8799FD3F430CD405874430028 /* AuthRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/AuthRoutes.swift; sourceTree = ""; }; 0E38834C7999CFB2670ABDAE5FC71FEB /* Sharing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sharing.swift; path = Source/SwiftyDropbox/Shared/Generated/Sharing.swift; sourceTree = ""; }; - 0E3FADE2512B784AFCE2DFE09B9ECE6D /* NstBoardJalecoJf16.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf16.hpp; sourceTree = ""; }; - 0E65B447ACD8C0AD8B9540F69DD78D01 /* NstBoardIremHolyDiver.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremHolyDiver.hpp; sourceTree = ""; }; - 0E80277EFECC528835574F12FD313326 /* OpenGLESProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = OpenGLESProcessor.swift; sourceTree = ""; }; - 0E9121D9B12531DC426945BA216F72E0 /* gSP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = gSP.cpp; sourceTree = ""; }; - 0E992CA8B2DD446EF5D166F52EB6ED50 /* NstBoardUnlKingOfFighters97.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlKingOfFighters97.hpp; sourceTree = ""; }; - 0ECE608D60C05AB0625906E8A6493CB1 /* pngget.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngget.c; sourceTree = ""; }; - 0ECF374B07795E7E2A151E2B4D8D2A29 /* RenderTarget.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderTarget.hpp; sourceTree = ""; }; - 0ED12F95712B43803C58FF2D53075392 /* video.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = video.h; sourceTree = ""; }; - 0EEE51D19958A4CD2ECFD5DA1245966E /* clamping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clamping.h; sourceTree = ""; }; - 0F09391CC528737E038858DA43278244 /* opengl_ContextImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ContextImpl.h; sourceTree = ""; }; - 0F88A26F6B6CF0CB98D87C013543A190 /* NstPatcherIps.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcherIps.hpp; sourceTree = ""; }; - 0FA995B71ECEE202B9688EBD65B7788A /* opengl_ColorBufferReaderWithReadPixels.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithReadPixels.cpp; sourceTree = ""; }; - 0FFC7F34F90AC81DD006C798B7C5936F /* RSP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RSP.cpp; sourceTree = ""; }; - 0FFF2C8BA989A2993AF7181B8C71DCEA /* RecordController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordController.swift; sourceTree = ""; }; - 100C0377584270DDE41906A45ED3FE84 /* ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist"; sourceTree = ""; }; - 1045871F90D4D454EDB4A2C75FE2404F /* Dictionary+Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Dictionary+Sequence.swift"; sourceTree = ""; }; - 10788548DAFD98FFF15969586412798C /* ManagedRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedRecord.swift; sourceTree = ""; }; - 10F4B87C9C8B821D0D8D4EF510CA04D7 /* RSTCellContentDataSource_Subclasses.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentDataSource_Subclasses.h; path = Roxas/RSTCellContentDataSource_Subclasses.h; sourceTree = ""; }; - 112CF20D5FD3FC49E46B68E39C3831B1 /* OpenGL.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = OpenGL.hpp; sourceTree = ""; }; + 0E49EBED49055AAF839B8A99FC0D76C9 /* gfx3d.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gfx3d.h; sourceTree = ""; }; + 0E4DCE2A6F12D890D38A83939413D307 /* DriveService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Records.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Records.swift"; sourceTree = ""; }; + 0E4E5A811FD38FBBF35D0F783DD6B5D9 /* NstBoardBmcGoldenGame260in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGoldenGame260in1.hpp; sourceTree = ""; }; + 0E8746F05B78C10D0D9D8098224A1D60 /* Glsl.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Glsl.inl; sourceTree = ""; }; + 0EA337C872D00B3A247FF40858C6BF1F /* gSP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = gSP.cpp; sourceTree = ""; }; + 0EBF0A8640326E2F901DF86C21C060DB /* sRGB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sRGB.h; sourceTree = ""; }; + 0EFD819549B79EF6F6533D7333213048 /* Dialogs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Dialogs.h; sourceTree = ""; }; + 0EFF7521BE73EED39D6F3DAC41584A38 /* DepthBufferRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBufferRender.h; sourceTree = ""; }; + 0F261E13B1AC030CBAE70448ABC2DD8F /* svmm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svmm.h; sourceTree = ""; }; + 0F279CB05ABD733ECA41FFA2F19A00B6 /* wst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wst.h; sourceTree = ""; }; + 0F3622A7449225751220AF6FE10DD230 /* ftincrem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftincrem.h; sourceTree = ""; }; + 0F82BADF1B128B29E800481350228566 /* Syncable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Syncable.swift; sourceTree = ""; }; + 0FC5602035B9E19D656976E460F7F90A /* TextureFilterHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilterHandler.cpp; sourceTree = ""; }; + 1004AE0C4739724244ADA46A913108CB /* Glsl.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Glsl.hpp; sourceTree = ""; }; + 101B4E4EEFA447219922363435CA78CF /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; + 103B62F4A02A6FB81B5873123E3E4EAE /* JSONDecoder+ManagedObjectContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoder+ManagedObjectContext.swift"; sourceTree = ""; }; + 104AE23A6B9AE10B8672C3AC578993CA /* m64p_frontend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_frontend.h; sourceTree = ""; }; + 108D3937640AD5EF672C23E5C9F1D052 /* Context.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Context.hpp; sourceTree = ""; }; + 10A0472CDCFE1CC45A359E5838CAB872 /* NstBoardMmc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc4.hpp; sourceTree = ""; }; + 11142D8FFFBE27CBCDA599BAC4229CE3 /* MelonDSTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MelonDSTypes.m; sourceTree = ""; }; + 112637F718E98C3499172684DAB993A0 /* n64_cic_nus_6105.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = n64_cic_nus_6105.h; sourceTree = ""; }; 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = N64DeltaCore.bundle; path = "N64DeltaCore-N64DeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; - 114C1CE8166C1D5EE54BAA6E9086C965 /* osd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osd.h; sourceTree = ""; }; - 115E4BA52EDB4A7B8117F27B828EF3DC /* vi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vi_controller.h; sourceTree = ""; }; - 116918731DA7188F3EA9C2361B3A4FE5 /* NstBase.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBase.hpp; sourceTree = ""; }; - 11C5EB86C8B5D063931113BD696A449D /* TxCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxCache.cpp; sourceTree = ""; }; - 11CDF3492A5E59C765F2232102DA540C /* RSTToastView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTToastView.h; path = Roxas/RSTToastView.h; sourceTree = ""; }; - 12060A6DBBD12A6E816E1B753273DD7A /* RDRAMtoColorBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RDRAMtoColorBuffer.cpp; sourceTree = ""; }; - 1227B98A9F28F7732433A1CA68F8F875 /* NstApiUser.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiUser.hpp; sourceTree = ""; }; - 12D394DD2EB99C510D854AD5F7D8D01B /* NstBoardBxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBxRom.hpp; sourceTree = ""; }; - 133A1237CF59770626D5E03A5FDF58FB /* Keys.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Keys.h; sourceTree = ""; }; - 133FFF074C7375B30FD28DFF38BE260D /* dcheck.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dcheck.h; sourceTree = ""; }; - 1340B180649533E638F85761755DDEFC /* ftttdrv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftttdrv.h; sourceTree = ""; }; - 136E40DAC7C29CAC860561C37A54FE9C /* UIKit+ActivityIndicating.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIKit+ActivityIndicating.m"; path = "Roxas/UIKit+ActivityIndicating.m"; sourceTree = ""; }; - 13766CCFB7D97DABE91EFE46F07D098C /* ftlcdfil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlcdfil.h; sourceTree = ""; }; + 114921A6CAF20904FE9B8E29537F98A4 /* NstApiCartridge.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiCartridge.hpp; sourceTree = ""; }; + 1168E68918E5BF84E08E11C7B371ABED /* ftxf86.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftxf86.h; sourceTree = ""; }; + 1195B6998FE8421EBA77EB210A43B4B4 /* NstBoardBmc150in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc150in1.hpp; sourceTree = ""; }; + 11D8E3490D52F64122D1E83DF8178D41 /* ftwinfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftwinfnt.h; sourceTree = ""; }; + 11F0ED4F854563D55D1126B811F3E869 /* Input.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Input.swift; sourceTree = ""; }; + 12046753C25C05BEB8D3B91D9C84AFE9 /* pnglibconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pnglibconf.h; sourceTree = ""; }; + 120C5D8AF966C09C6ECCB59508E8C8A2 /* FrameBufferInfoAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FrameBufferInfoAPI.h; sourceTree = ""; }; + 122B792B0EAAF896926591B297C9D30D /* filters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = ""; }; + 123BC6ACD39EEA715F0A93879B490B14 /* mem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; }; + 124A9AA8BD80FF606241A3E34CBF4039 /* N64EmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64EmulatorBridge.h; sourceTree = ""; }; + 12535108C24D1C6BADF6FB802CB39A5F /* SPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPI.h; sourceTree = ""; }; + 12E9FF9AEEDE68C957B7D04E8966667F /* GLideN64.custom.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = GLideN64.custom.ini; sourceTree = ""; }; + 1363B01A18856DBE22D21EBF8088D06C /* NSString+Localization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Localization.h"; path = "Roxas/NSString+Localization.h"; sourceTree = ""; }; 1393F6F0A0F928C49105FCA78288193B /* FileRequestsRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileRequestsRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/FileRequestsRoutes.swift; sourceTree = ""; }; - 13AB3B953E50263BB51D1FB9AE869E8E /* NstCpu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCpu.hpp; sourceTree = ""; }; - 13CF8AB5A64D04015282404D80256EA0 /* NstBoardBandaiOekaKids.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiOekaKids.hpp; sourceTree = ""; }; - 13D0054F15C9016C2A58C9AD3B1E55E4 /* RSTCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCollectionViewCell.h; path = Roxas/RSTCollectionViewCell.h; sourceTree = ""; }; + 13A6DB004300A60DA3D2A6DFE73CCDAC /* NstBoardWaixingZs.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingZs.hpp; sourceTree = ""; }; + 13B3F0409CEA697951ADECD54AABFC17 /* RSTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTError.m; path = Roxas/RSTError.m; sourceTree = ""; }; + 13B7FFD0C9DAEC7BACA3614D558B1227 /* NstBoardMmc2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc2.hpp; sourceTree = ""; }; + 13D3D42973146D80916E32B3BBE3D0A1 /* ExtensibleEnums.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExtensibleEnums.swift; sourceTree = ""; }; + 13D9D073E172499FE0BA408392C89173 /* N64DeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-umbrella.h"; sourceTree = ""; }; + 13E354663056D2C09F9EBDE7F3F20EF4 /* PropertyGroup+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "PropertyGroup+Harmony.swift"; sourceTree = ""; }; 14057D1AEA66E65BED2117946518BB10 /* Common.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Common.swift; path = Source/SwiftyDropbox/Shared/Generated/Common.swift; sourceTree = ""; }; - 1427093FF23F46B310155A7F63393171 /* cpuexec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuexec.h; sourceTree = ""; }; - 142A476F4B29FD9BEA6D18199D4AD340 /* RSTHelperFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTHelperFile.m; path = Roxas/RSTHelperFile.m; sourceTree = ""; }; - 142B2CFFAF6692BC41348D5B5B30FDA1 /* DropboxService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Files.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Files.swift"; sourceTree = ""; }; - 146B44A557A13EB3BBE8A5C53D94BC9E /* SNESEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = SNESEmulatorBridge.mm; sourceTree = ""; }; - 14D21BDF50EDC8CCA4B82562FA4EC1E1 /* NstBoardKonamiVrc1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc1.hpp; sourceTree = ""; }; - 14DA14245966E2AC6FF59548E765006C /* gbint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gbint.h; sourceTree = ""; }; - 14F79C2A5CD47627B9F83711162D50E0 /* Socket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Socket.hpp; sourceTree = ""; }; - 153DE0DE16595A04ED8966B393EF2468 /* screenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = screenshot.h; sourceTree = ""; }; - 15B06D5EC0A84D413A97D791A09DD4C0 /* L3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3D.h; sourceTree = ""; }; - 15D24BE6CA6E45ECB6DCBA6B450424E6 /* GameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameController.swift; sourceTree = ""; }; - 15D53B5540090674367F2034C42E0C1C /* RSTDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTDefines.h; path = Roxas/RSTDefines.h; sourceTree = ""; }; - 15EAE2283516A3200D537010AA0BBCF9 /* sar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sar.h; sourceTree = ""; }; - 160DE59B03218F24C3937D38923481FF /* NstBoardOpenCorp.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardOpenCorp.hpp; sourceTree = ""; }; - 1631DF20959AF33BB911DE604C526934 /* retro_stat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_stat.h; sourceTree = ""; }; - 163295C6CCD961D42E5E5F2EED6E2FD0 /* RSTSeparatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTSeparatorView.m; path = Roxas/RSTSeparatorView.m; sourceTree = ""; }; + 1406F5851ECA113961E420930E44400E /* ftpic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftpic.h; sourceTree = ""; }; + 142265A2DED24A866633D72B79145B0B /* UICollectionViewCell+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewCell+CellContent.m"; path = "Roxas/UICollectionViewCell+CellContent.m"; sourceTree = ""; }; + 1437D26717ED40A8C5CDAC510546F0AE /* NstChips.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstChips.hpp; sourceTree = ""; }; + 148E5E7E1B8AE5F14D3C61541210F769 /* memgzio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memgzio.h; sourceTree = ""; }; + 14B432CCBAD2A0A59F5EFB878191A511 /* F3DZEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DZEX2.h; sourceTree = ""; }; + 14C71D27630335B15939DD0664CE76D0 /* Joystick.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Joystick.hpp; sourceTree = ""; }; + 14D158A352A8BBA396519A2C6CDC67FD /* PaletteTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PaletteTexture.cpp; sourceTree = ""; }; + 14FE86A7AE75D5AB202DCEB5C676F51B /* wifi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wifi.h; sourceTree = ""; }; + 151BCB966AF2F384786C0254DF3B4844 /* ResourceBundle-DeltaCore-DeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-DeltaCore-DeltaCore-Info.plist"; sourceTree = ""; }; + 1559231E2BE01D21A0445943D40BD8B9 /* NstBoardJyCompany.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJyCompany.hpp; sourceTree = ""; }; + 155B6867D0BF5AD02F1B9394F4C2C8B9 /* m64p_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_types.h; sourceTree = ""; }; + 1563D8DEE08EAA92574952B8B395A8AA /* Textures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Textures.h; sourceTree = ""; }; + 157434C4FA16895B0C6EBC0D02FAECF0 /* ftlzw.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlzw.h; sourceTree = ""; }; + 1575109B49D2770633104AF8986A3F36 /* GBAcpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAcpu.h; sourceTree = ""; }; + 15A5B47B39157696DDBC56DF53AEFE81 /* ring_buffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ring_buffer.h; sourceTree = ""; }; + 15E4E1022555EFD22260B7C32AE9BCEF /* retro_inline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_inline.h; sourceTree = ""; }; + 15E65EB68D56E7366BC886E0DF3F4369 /* biopak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = biopak.h; sourceTree = ""; }; + 160A1FB76516D2D1FABCA5F0A6795568 /* N64DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-prefix.pch"; sourceTree = ""; }; + 1615D09DB3F681C62200592953856E68 /* armcpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = armcpu.h; sourceTree = ""; }; + 162D4D53C68E5F2542C1898C9D356FB1 /* pngtrans.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngtrans.c; sourceTree = ""; }; + 16334C263B60314F60B061077457ED0F /* NstBoardBandaiOekaKids.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiOekaKids.hpp; sourceTree = ""; }; 16344678459C378BCDF429E32F898CC2 /* GoogleSignIn.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = GoogleSignIn.bundle; path = Resources/GoogleSignIn.bundle; sourceTree = ""; }; - 16493B09A57A9904E0843D5268271785 /* NESEmulatorBridge.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NESEmulatorBridge.cpp; sourceTree = ""; }; - 1649F44ED2BD21529BA16B7B2A429793 /* SocketHandle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SocketHandle.hpp; sourceTree = ""; }; - 165095C0F2AC162D9A03CCCE15E06D7A /* DisplayLoadProgress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DisplayLoadProgress.h; sourceTree = ""; }; - 16A5B2FF145529F1248A848F882C8403 /* NstBoardVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardVsSystem.hpp; sourceTree = ""; }; - 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GBADeltaCore.xcconfig; sourceTree = ""; }; - 16EC811CB549CE7395A41A2FD9C4BE80 /* NstCartridgeInes.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeInes.hpp; sourceTree = ""; }; - 1708CC47B44B29F11E1399CFC0321DC7 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = GBADeltaCore/Standard.deltamapping; sourceTree = ""; }; - 173C3BCDE823B84D23477806EC2CF1EB /* initstate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = initstate.h; sourceTree = ""; }; - 173F53675D53F79BED6F8E8D2FB1D09C /* MemoryInputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = MemoryInputStream.hpp; sourceTree = ""; }; - 17878ECFAC417AC4ABE2928837CDE2B3 /* cheats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheats.h; sourceTree = ""; }; - 179CA20387AC394361693DD1CD2E4572 /* NstBoardBmc35in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc35in1.hpp; sourceTree = ""; }; - 17AE63368464F283CA60EB477B2EAC1B /* dummy_video.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_video.h; sourceTree = ""; }; - 17D76ED9F3E5D01C1E48424DA204220B /* RSTCompositeDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCompositeDataSource.m; path = Roxas/RSTCompositeDataSource.m; sourceTree = ""; }; - 18341B6F300F8B0BA009FD1B1F7945DD /* NstApu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApu.hpp; sourceTree = ""; }; - 1841A00CFBD8BE33D1C7736E94E929AE /* opengl_BufferManipulationObjectFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_BufferManipulationObjectFactory.h; sourceTree = ""; }; - 1848F23A934DCF2922E385DA2CFEDB81 /* retro_endianness.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_endianness.h; sourceTree = ""; }; - 185D80DA8DB94398379D2CBC6CB4E814 /* retro_inline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_inline.h; sourceTree = ""; }; - 187D4D612762D2AF1FECAFF87EFEA7CA /* Utf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Utf.hpp; sourceTree = ""; }; + 164BA6410D467508F284ED6B400D342C /* TxQuantize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxQuantize.h; sourceTree = ""; }; + 165B7915A8914F93AA1A0D7D45181074 /* InputSoundFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = InputSoundFile.hpp; sourceTree = ""; }; + 16606104B7D23C541D75E1D9CACB2862 /* memory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = ""; }; + 166B7D7F68333A9915F7970F9FB547C0 /* expr.cpp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = expr.cpp.h; sourceTree = ""; }; + 169291B84BEFD54121E345D556B0F9F8 /* rasterize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rasterize.h; sourceTree = ""; }; + 16A28BF70DE7AAE9C02DF33216F1076A /* opengl_ColorBufferReaderWithPixelBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithPixelBuffer.h; sourceTree = ""; }; + 16A6E4F9D5B593AB01D5A49340300BCF /* NstBoardKonamiVrc7.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc7.hpp; sourceTree = ""; }; + 16C1FB014388E9D1E47EB7DCC0CD0682 /* Parameter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Parameter.h; sourceTree = ""; }; + 16C765B40106664E143CBFFBDA5A104A /* Vector3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector3.hpp; sourceTree = ""; }; + 16F999D1DA5FF8502A180736C3C54BFB /* pngstest-errors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pngstest-errors.h"; sourceTree = ""; }; + 176F2C264C99888772BBC8A3F018B128 /* GraphicsDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GraphicsDrawer.cpp; sourceTree = ""; }; + 17B5799944A0DCB74E38C5E3E5C164EB /* MMU_timing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MMU_timing.h; sourceTree = ""; }; + 18185E2750AF215989A1C8875DDD67B4 /* NstBoardBmcGamestarA.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGamestarA.hpp; sourceTree = ""; }; + 183E1BFA0F57AF969EEA014FEB426220 /* NstBoardHxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHxRom.hpp; sourceTree = ""; }; + 1865831C43CE3EF4294B9B1C9A3523CA /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + 188673BC9859FF22057D8B552AA23087 /* NES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NES.swift; sourceTree = ""; }; + 18A21C316835DD316654A070B9E838EF /* RSTToastView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTToastView.m; path = Roxas/RSTToastView.m; sourceTree = ""; }; 18B035B874A3872AE52466285EDB74ED /* SessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionManager.swift; path = Source/SessionManager.swift; sourceTree = ""; }; - 18EC95A3A3E3430E185F60F3BA643D4B /* NstBoardBmcResetBased4in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcResetBased4in1.hpp; sourceTree = ""; }; - 190E396AF2951D7E331A9B5B8276EAF4 /* S2DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = S2DEX.h; sourceTree = ""; }; - 1968B2F2911EF5F0444088854F57F746 /* Parameters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Parameters.h; sourceTree = ""; }; - 19C0D312CBF5347DB0447CBF56BF1D75 /* Event.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Event.hpp; sourceTree = ""; }; - 19CC725F77A1590AFC450371B084F35C /* joybus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = joybus.h; sourceTree = ""; }; - 1A79E77382CDD0991EC1FF3A9416D1E8 /* F3DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2.h; sourceTree = ""; }; - 1A9086E824EFB7B7B14B240188DF62CE /* Types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = ""; }; + 18BB33D23E1407CA689F462EB7799485 /* ppu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ppu.h; sourceTree = ""; }; + 18DCE91DC2FF6AC9626641A56F1ECCF2 /* txWidestringWrapper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = txWidestringWrapper.cpp; sourceTree = ""; }; + 18F557085D0365AECB4077B82DE76E12 /* GLideN64_mupenplus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideN64_mupenplus.h; sourceTree = ""; }; + 18F94CD2A593A3820ECA68A3AD91377F /* opengl_Utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_Utils.h; sourceTree = ""; }; + 190388E1589C7BC638B1410EA970D133 /* NstBoardAgci.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAgci.hpp; sourceTree = ""; }; + 191702D253506FDF5363FBCC895772FA /* ftvalid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftvalid.h; sourceTree = ""; }; + 1939C13EF032EAB42CBC6C921ECE7AD8 /* ZSortBOSS.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZSortBOSS.cpp; sourceTree = ""; }; + 193B9E904D8FA162F2935AE2242E5DD4 /* rdp_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rdp_core.h; sourceTree = ""; }; + 19481227163F7CACC6C2B1E0A8B6A008 /* ARM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ARM.cpp; sourceTree = ""; }; + 195C083DB9E3337E066A78F5268E1222 /* WindowHandle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = WindowHandle.hpp; sourceTree = ""; }; + 19B404312BCFE831CA10C0C54C6D0B58 /* svgxval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svgxval.h; sourceTree = ""; }; + 19ED46C78502A6DECB9188858E546EFC /* NstBoardSachenSa72008.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa72008.hpp; sourceTree = ""; }; 1AC5310CC574B1695D106EA4A1306618 /* GTMSessionFetcherService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherService.h; path = Source/GTMSessionFetcherService.h; sourceTree = ""; }; - 1ACB84EDA396FC32A38EF2E80F2E78D5 /* assemble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble.h; sourceTree = ""; }; - 1AE7C6AEDB1B177BEA97EAFF75DCDAF4 /* GBCEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCEmulatorBridge.h; sourceTree = ""; }; 1B222E309AC91E1D67F520A0BF59B834 /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = ""; }; - 1B22B42E3A2ED5293029A56068CA8061 /* NSBundle+Extensions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+Extensions.m"; path = "Roxas/NSBundle+Extensions.m"; sourceTree = ""; }; - 1B60BE30FA309328A9F8DEECADF5B276 /* NstBoardSunsoftFme7.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoftFme7.hpp; sourceTree = ""; }; - 1B69ECEA6865A9F1815D0B371F50D01E /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; - 1B7C97918240DAD198A118B7B00B0E24 /* NstInpDoremikkoKeyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpDoremikkoKeyboard.hpp; sourceTree = ""; }; + 1B344A1563D4DD7818E0D6A1BC8076EE /* ContextImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ContextImpl.h; sourceTree = ""; }; 1B8AF793D67661D01A11B1A56931BA03 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/NSData+ImageContentType.m"; sourceTree = ""; }; - 1BC03A069A547EB736D558AC237B614A /* NstBoardSachenTca01.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenTca01.hpp; sourceTree = ""; }; - 1BCB1BC674B34EBE5044A5F4AC65BA67 /* NstImageDatabase.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstImageDatabase.hpp; sourceTree = ""; }; - 1C0F31C6E082D6432390150C57691513 /* NstBoardCne.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCne.hpp; sourceTree = ""; }; - 1C0FCDFCC71457C2596AFCEC1DE6839A /* SPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPU.h; sourceTree = ""; }; + 1B9E0F2F6641A295442D13F0770261B5 /* OpenGLSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OpenGLSupport.h; sourceTree = ""; }; + 1BBFA95BE33AC04B65DD7AF6C54B92DD /* ftsystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsystem.h; sourceTree = ""; }; + 1C201E20BCDCB9769F243F9E93782C06 /* pngusr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngusr.h; sourceTree = ""; }; 1C490BE7A4301170F339101D64A47136 /* GTMSessionFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcher.h; path = Source/GTMSessionFetcher.h; sourceTree = ""; }; - 1C5B370D97DA31DD1B20EE2895770F31 /* loadres.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = loadres.h; sourceTree = ""; }; - 1C829F5E801FB46F0C66DA77EB247349 /* Globals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Globals.h; sourceTree = ""; }; + 1C50053E5D39FB4F4F1BA560C86E2311 /* matrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = matrix.h; sourceTree = ""; }; 1CA66F879B24C5B420988EA67B2A3FB0 /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; - 1CA6BD5A93F759A947F93E294905013E /* DeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DeltaCore.modulemap; sourceTree = ""; }; 1CBA76EDD27FA2D20B1EA0F0BF7F082C /* libSwiftyDropbox.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSwiftyDropbox.a; path = libSwiftyDropbox.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 1CC140E1F857FD727024B376FACB6D15 /* glsl_CombinerProgramUniformFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramUniformFactory.cpp; sourceTree = ""; }; - 1CDF0C8D349B858C9D5F6C48C36605C4 /* pngusr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngusr.h; sourceTree = ""; }; - 1D1E6C0B74E1FAEE75DA38BD38CEBDCE /* F3DGOLDEN.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DGOLDEN.cpp; sourceTree = ""; }; - 1D2F36F994B2A734DE7746BB61880D92 /* S2DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = S2DEX2.cpp; sourceTree = ""; }; - 1D88D4AF63AF5783792687FAE3AD2BCB /* clock_ctime_plus_delta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clock_ctime_plus_delta.h; sourceTree = ""; }; - 1DA0672F627BE87C2B50295FDE1FE14F /* StandardGameControllerInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StandardGameControllerInput.swift; sourceTree = ""; }; - 1DA85D3012B6718655D78006E60A7A61 /* glsl_CombinerProgramBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramBuilder.h; sourceTree = ""; }; - 1DD967DC3CDB801FA186F97CA836B2E5 /* libhardware.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libhardware.h; sourceTree = ""; }; - 1DDB6A675F59026DAB0306340D41A1BE /* xxhash.c */ = {isa = PBXFileReference; includeInIndex = 1; path = xxhash.c; sourceTree = ""; }; - 1DF27D7E65CA1A9DC28C57F4FE6BD1B3 /* RSTRelationshipPreservingMergePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTRelationshipPreservingMergePolicy.h; path = Roxas/RSTRelationshipPreservingMergePolicy.h; sourceTree = ""; }; - 1E0332A877FA8632655267F892A4868D /* SNESDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SNESDeltaCore.modulemap; sourceTree = ""; }; - 1E2FFD68EF928DFACE9371D8AAC65F52 /* glsl_Utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_Utils.cpp; sourceTree = ""; }; + 1CFCC0E9B1069C5E4DE9B21620D39BEE /* NstBoardSunsoft4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft4.hpp; sourceTree = ""; }; + 1D2B3BDB29EB37DAEDCBC3179FAA6100 /* gdbstub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gdbstub.h; sourceTree = ""; }; + 1D48E1464F25EE094AB21C99E9CDC8BF /* NstBoardHosenkan.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHosenkan.hpp; sourceTree = ""; }; + 1D545FA281C697B8D7BEEC43C6652189 /* UIImage+Manipulation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Manipulation.h"; path = "Roxas/UIImage+Manipulation.h"; sourceTree = ""; }; + 1D7AF9FE08D2F6576462E7ECCC9C6E89 /* svbdf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svbdf.h; sourceTree = ""; }; + 1D8AA62CF8EE1D7BD51C30F2874CC2D2 /* NstBoardBmcA65as.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcA65as.hpp; sourceTree = ""; }; + 1DF37E36CD72A2D07A3FCAD216576B53 /* SoundRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundRecorder.hpp; sourceTree = ""; }; + 1E090AE4D2EB3F7EBC12F7527F8C83A7 /* F3DGOLDEN.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DGOLDEN.cpp; sourceTree = ""; }; 1E5356E04E92615CFF0666E5987CE594 /* libNESDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libNESDeltaCore.a; path = libNESDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 1E5AC9B7C27792EF938FCB5C74BC658F /* System.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = System.hpp; sourceTree = ""; }; - 1E62A12C767331BC621336E59054040F /* tile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tile.h; sourceTree = ""; }; - 1E6A8F6B9B3B7B25C7C87F8B3C7CDE37 /* Roxas.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Roxas.xcconfig; sourceTree = ""; }; - 1E9673A8687B4C246AFECBFC5FA4C2C2 /* N64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64.h; sourceTree = ""; }; - 1EA3DF2BEE5BA3A560AB2D24010A1910 /* N64DeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64DeltaCore.h; sourceTree = ""; }; - 1EA5F7D97C9AB37E20A715D3398E9330 /* NSConstraintConflict+Conveniences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSConstraintConflict+Conveniences.m"; path = "Roxas/NSConstraintConflict+Conveniences.m"; sourceTree = ""; }; - 1EDEFED9C09EB37D2B09A2EE84A2BA70 /* RSTCellContentPrefetchingDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentPrefetchingDataSource.h; path = Roxas/RSTCellContentPrefetchingDataSource.h; sourceTree = ""; }; - 1EE7F9057B40115EF146A96035510405 /* Mouse.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Mouse.hpp; sourceTree = ""; }; + 1E9620B66C79B5072CD182C1D80819C8 /* String.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = String.cpp; sourceTree = ""; }; + 1ECD6095FEBED6549E4EE623A0FC3431 /* Vector3.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector3.inl; sourceTree = ""; }; 1EEADA9A5C4C5EF8A88BBC09B95C5F62 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/SDWebImagePrefetcher.h; sourceTree = ""; }; - 1F028EDFAB102669AF0739608CE6CC3F /* NstBoardSubor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSubor.hpp; sourceTree = ""; }; + 1EFE9AE79EBD67A282DE349ECDBA9D52 /* ftotval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftotval.h; sourceTree = ""; }; + 1F076350328D4154B3E88F3C4B2D80CD /* NstTimer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTimer.hpp; sourceTree = ""; }; + 1F0E6B2352802896ACECD64204A6113D /* SndOut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SndOut.h; sourceTree = ""; }; 1F23DBC67505E77BE77552D6D84A3DAA /* GBCDeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = GBCDeltaCore.bundle; path = "GBCDeltaCore-GBCDeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1F5F6218B59F2A6BF7EC220A625C8AB8 /* TxReSample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxReSample.h; sourceTree = ""; }; 1F77D5D789D6454A73C3D19E2727B786 /* SMCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMCalloutView.h; sourceTree = ""; }; - 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DeltaCore.xcconfig; sourceTree = ""; }; - 1F83AE270F6F4A14D5507A9E883EFA01 /* wglext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wglext.h; sourceTree = ""; }; - 1F9D3C122510252E5BCC49CBC78D15C1 /* glsl_Utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_Utils.h; sourceTree = ""; }; - 1FA26C4FB0D6E27B0C9E9607D02D8E25 /* alist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = alist.h; sourceTree = ""; }; - 1FA41CF9BC943DB28A21577ABD2D7C6E /* N64EmulatorBridge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = N64EmulatorBridge.m; sourceTree = ""; }; - 1FCDA1FB74E4C4092E5F8A5BC8289630 /* RSTCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCollectionViewCell.m; path = Roxas/RSTCollectionViewCell.m; sourceTree = ""; }; - 1FF86939139DCD92059F8AFE38FCB116 /* NstCartridgeRomset.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeRomset.hpp; sourceTree = ""; }; - 2007B1419082E90090305FCD84393B06 /* SDL_opengl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_opengl.h; sourceTree = ""; }; - 2008405A1930372A338506F2E4FA20BA /* opengl_TextureManipulationObjectFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_TextureManipulationObjectFactory.h; sourceTree = ""; }; - 2013712F504FC10A75B32DB78638B56B /* STTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = STTypes.h; sourceTree = ""; }; - 205369CAD1E4D0EB34E3DAA176117F19 /* readpng2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = readpng2.h; sourceTree = ""; }; - 205D59098479C96A36856ACF72D6AF7C /* TxReSample.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxReSample.cpp; sourceTree = ""; }; - 20738B0979F88177809FB593F753139B /* NESDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = NESDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 1FBDF4ACD90B4DED1F33312B991DB618 /* NstBoardSuperGame.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGame.hpp; sourceTree = ""; }; + 1FBFEDA648CA302663BC0A53CD4C4444 /* ControllerDebugView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerDebugView.swift; sourceTree = ""; }; + 1FD4F5AA816AA91F1CA362FFF3B5C93C /* interrupt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interrupt.h; sourceTree = ""; }; + 1FE4B65AFEE414DDF2934ED450332C42 /* Types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = ""; }; + 1FEB473929021F04D0B2259A61CE3883 /* RTC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RTC.h; sourceTree = ""; }; + 1FF571FDBAF68294C828B93CF7AB2606 /* SDL_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_config.h; sourceTree = ""; }; + 1FFF20A5E29BABF9B99B4C36366F9A7B /* cached_interp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cached_interp.h; sourceTree = ""; }; + 202473EE9351AD87378741BBD152C958 /* DSDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DSDeltaCore-dummy.m"; sourceTree = ""; }; + 2036AE04F921EB54A23BE7D3307D5B57 /* Sound.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; }; + 20636B35E9114D9C339486FC80D17633 /* srtcemu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = srtcemu.h; sourceTree = ""; }; + 20855F4A8AE76A4363C4DE75B53963FA /* NstFds.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFds.hpp; sourceTree = ""; }; + 2090E7B6074A480B545986DD5394BCEC /* RSTFetchedResultsDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTFetchedResultsDataSource.h; path = Roxas/RSTFetchedResultsDataSource.h; sourceTree = ""; }; + 2098169177E986CAD8BED07A181041DC /* slot2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = slot2.h; sourceTree = ""; }; + 2098A1D3BBCAAFB3A5D52959C3751342 /* NstBoardBmcSuperVision16in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperVision16in1.hpp; sourceTree = ""; }; 20BCD689A6CAE5B82E9CC42375BA7AE7 /* Blob.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Blob.swift; path = Sources/SQLite/Core/Blob.swift; sourceTree = ""; }; - 20E6DC27E3CD5270C16AC4F9F2E0D3B5 /* GLideN64.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = GLideN64.ini; sourceTree = ""; }; - 215635C653FC2F3689E27136178F6166 /* NstBoardRumbleStation.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRumbleStation.hpp; sourceTree = ""; }; - 215F41B527253A671A97637E35BDC2EA /* alist_audio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_audio.c; sourceTree = ""; }; + 20D9584841AECE27BBC056E45740941F /* NstBoardIrem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIrem.hpp; sourceTree = ""; }; + 2135E69E6A4F906CD35BBC26E511A87E /* NstBoardNamcot.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot.hpp; sourceTree = ""; }; + 213E27CCA1F2F1BE726697432009E2C9 /* NstInpAdapter.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpAdapter.hpp; sourceTree = ""; }; + 213FC7540DB4DF3F90B89035F984BD7C /* Game.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Game.swift; sourceTree = ""; }; 21697728431980C8C5C6925AA9856DFA /* CLSLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSLogging.h; path = iOS/Crashlytics.framework/Headers/CLSLogging.h; sourceTree = ""; }; - 21A038DB12C94476C404398950A88C8D /* NSString+Localization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Localization.m"; path = "Roxas/NSString+Localization.m"; sourceTree = ""; }; - 21B08C108927AB621B0EB7F908CDC81C /* NstStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstStream.hpp; sourceTree = ""; }; + 21A623E3F7E900942F5A6AD1E693832D /* Platform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Platform.h; sourceTree = ""; }; + 21AFB40E9F20886BAC51721D47518A42 /* NstApiFds.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiFds.hpp; sourceTree = ""; }; 21D6D1EB35E3D74EDEA3C2CD85A05F52 /* Pods-Delta-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Delta-acknowledgements.markdown"; sourceTree = ""; }; - 222369BCAE458E6A21F1C9AEE03983ED /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = ""; }; - 22925124C257896E19766BEE921A074A /* UIKit+ActivityIndicating.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+ActivityIndicating.h"; path = "Roxas/UIKit+ActivityIndicating.h"; sourceTree = ""; }; - 22D727FF73EDD7D66A073041A47B0DE6 /* NstInpPartyTap.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPartyTap.hpp; sourceTree = ""; }; - 22E13ACA822EB61BEEF5DF35BDB4B13E /* F3DEX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX.cpp; sourceTree = ""; }; - 22E35E02382F4B1E5D0995608B8BCCB7 /* svmm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svmm.h; sourceTree = ""; }; - 22F22453696F4302900B9871992F9215 /* util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; - 2312F596695044513C4F58CD3E2960D0 /* UICollectionViewCell+Nibs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewCell+Nibs.m"; path = "Roxas/UICollectionViewCell+Nibs.m"; sourceTree = ""; }; - 231C3B1815030738C172F8C3A61AB598 /* NstBoardMmc5.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc5.hpp; sourceTree = ""; }; - 232E1FD2069448A4B7FA73B378A48EDC /* fttrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fttrace.h; sourceTree = ""; }; - 237B84F01B49BFC3E63C9FE3F3D458FC /* emufile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = emufile.h; sourceTree = ""; }; - 23AFAE86E4F0EDD062DB46895DAF5251 /* GLideN64.custom.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = GLideN64.custom.ini; sourceTree = ""; }; - 23B2C2ADF3521E6B7DFB9C17A4247A3B /* gralloc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gralloc.h; sourceTree = ""; }; + 21FF5A1389969C1EED92B8D6155554D5 /* Texture.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Texture.hpp; sourceTree = ""; }; + 2212C1BF0C50BC7C98BA6A5202DD8DFC /* audio_out_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = audio_out_backend.h; sourceTree = ""; }; + 224EC23CB708246C666EA6D597EF0933 /* svttglyf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svttglyf.h; sourceTree = ""; }; + 22515475C0A7E9BD8FD4145526FBC353 /* clock_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clock_backend.h; sourceTree = ""; }; + 22528395152B5ECC856B25BADDACB3F9 /* ftgzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgzip.h; sourceTree = ""; }; + 226C662B43ECEB12F37DFF9C36643D0B /* MFiGameController.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = MFiGameController.deltamapping; path = "DeltaCore/Supporting Files/MFiGameController.deltamapping"; sourceTree = ""; }; + 229289C6AEBA126CD4AF9033E65834CC /* Keyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Keyboard.hpp; sourceTree = ""; }; + 22F188C4FE40251B362A44718243733E /* RSTCellContentChangeOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentChangeOperation.h; path = Roxas/RSTCellContentChangeOperation.h; sourceTree = ""; }; + 23044889E5A6DCEE916A2658C83A085B /* NstBoardSunsoftDcs.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoftDcs.hpp; sourceTree = ""; }; + 232881DB5B781BEF87FE7B6665883476 /* 3DMath.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = 3DMath.cpp; sourceTree = ""; }; + 237AEE8BB0BEDA0F90CBA83BE3E11B81 /* NstBoardKonamiVrc3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc3.hpp; sourceTree = ""; }; + 238AA279772C644CC943D63E37C7AA3A /* Harmony-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Harmony-dummy.m"; sourceTree = ""; }; 23B56F8A99B549137872A3667B98CBAB /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; - 23C48688B8A512FFB646E121E3FD49DF /* bsx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bsx.h; sourceTree = ""; }; + 23B74C9DADB72CF0883D582488B13ED6 /* tile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tile.h; sourceTree = ""; }; 23C9343FC4FB0FD507A750B3EF697747 /* Contacts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contacts.swift; path = Source/SwiftyDropbox/Shared/Generated/Contacts.swift; sourceTree = ""; }; - 23EDB5113AECD1DF0B90F3E16139D1D6 /* NstBoardMmc2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc2.hpp; sourceTree = ""; }; - 241D65B94A34B15AB354A6901D592045 /* NstBoardBmcSuperBig7in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperBig7in1.hpp; sourceTree = ""; }; - 2446BE6FAF88E2295DA4D857C1DC7C16 /* NstBoardJalecoSs88006.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoSs88006.hpp; sourceTree = ""; }; - 2446C10AA94654AF8E1C4ADEB9142AD5 /* pngusr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngusr.h; sourceTree = ""; }; + 23D60DF4C8C979E59877EE0BC1BA7C94 /* NstInpPad.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPad.hpp; sourceTree = ""; }; + 23EDAE362454CA4518FE66BD4A8A27BE /* GBADeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBADeltaCore-prefix.pch"; sourceTree = ""; }; + 24443F50309F188F0D359B49C0F136CB /* pngerror.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngerror.c; sourceTree = ""; }; 244DCF4A8FC46E79A6101C49202C0DBD /* TeamCommon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamCommon.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamCommon.swift; sourceTree = ""; }; - 2470D300240FF936891A6DA2EBE0164B /* OGLRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLRender.h; sourceTree = ""; }; - 24A1F04C9D66439C073E518F9C2519E1 /* NSFileManager+URLs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileManager+URLs.h"; path = "Roxas/NSFileManager+URLs.h"; sourceTree = ""; }; - 24ADD77C9E459763B52BB8DD8BA8DE7C /* fterrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fterrors.h; sourceTree = ""; }; - 24C0E7C293EBDFEBA516E17AD1564246 /* PACKED.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PACKED.h; sourceTree = ""; }; - 24DCB8F3924D4B8E723EDE7D9E36EE1C /* NstBoardMmc6.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc6.hpp; sourceTree = ""; }; - 24E1A25642D89F5B30A1BB2FB864AFA7 /* fxemu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxemu.h; sourceTree = ""; }; - 24F185C35417DF1B6626AAC2D1E5E538 /* MemoryStatus_mupenplus.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = MemoryStatus_mupenplus.cpp; sourceTree = ""; }; + 24A40AF418C2457D3920E3BF8F07B147 /* AREngine.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = AREngine.cpp; sourceTree = ""; }; + 24BD46060B81FB987DC76C420D9D0434 /* NstBoardFb.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFb.hpp; sourceTree = ""; }; + 24C9EC3456B0473415C7E2A4BFE6D619 /* F3DZEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DZEX2.cpp; sourceTree = ""; }; + 24CA32513A0AE3E1229D4189D3F40C32 /* NstBoardSachenTca01.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenTca01.hpp; sourceTree = ""; }; + 24D32A452E67E305E30D5F18EE62B91D /* ftcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcache.h; sourceTree = ""; }; + 24ED56596D00F9B9AD800B7FF30622F5 /* opengl_BufferedDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_BufferedDrawer.cpp; sourceTree = ""; }; + 2507A2AAACF2F3D12826D941CB970BEE /* NstBoardWaixingSgzlz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSgzlz.hpp; sourceTree = ""; }; + 250AF154A10D578764C0BBBB190A8554 /* UIView+AnimatedHide.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+AnimatedHide.h"; path = "Roxas/UIView+AnimatedHide.h"; sourceTree = ""; }; + 2511FA9F98FE3FCC75E29A21D78C7943 /* OGLFT.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLFT.h; sourceTree = ""; }; 251C6319AD50CB50F18D50CBF727F8B2 /* libGoogleToolboxForMac.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGoogleToolboxForMac.a; path = libGoogleToolboxForMac.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 252CCD4194A312D6A647E0B27A002330 /* new_dynarec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = new_dynarec.h; sourceTree = ""; }; - 254168DB44BEBEB68F731713E971B912 /* ColorBufferToRDRAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ColorBufferToRDRAM.cpp; sourceTree = ""; }; - 2545337131DCB550937E1BA985A7CFB7 /* rdram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rdram.h; sourceTree = ""; }; - 254CC3AD77C6322C8CA4B65F52B9F198 /* cp1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp1.h; sourceTree = ""; }; - 25F7A6B233074D6DD97705181306F479 /* NstBoardTengenRambo1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTengenRambo1.hpp; sourceTree = ""; }; - 25FCB0ABC4939495F4D8023884606D3C /* svxf86nm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svxf86nm.h; sourceTree = ""; }; - 260430D1061CEEA26EE73673BC86F350 /* m64p_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_types.h; sourceTree = ""; }; - 261762E049C9653D1341EB811E42E338 /* NstBoardKonamiVrc6.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc6.hpp; sourceTree = ""; }; - 269F29EF8D9E4E7D9A20913AFBB84BA9 /* files.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = files.h; sourceTree = ""; }; - 26CE0005068BFE608A1C540A882BA5FB /* transfer_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = transfer_ptr.h; sourceTree = ""; }; - 26D67EB75107A8E731DFD2A5B2EC86F0 /* GBCDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GBCDeltaCore-dummy.m"; sourceTree = ""; }; - 26DDDA2E6D5D939969B8FDD448F57499 /* insertion_sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = insertion_sort.h; sourceTree = ""; }; - 276B3F3CC31F539687CB5B6AD102438A /* UIView+AnimatedHide.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+AnimatedHide.h"; path = "Roxas/UIView+AnimatedHide.h"; sourceTree = ""; }; - 276E27532E9C2ADF0C058B16208B439C /* FinishUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishUploadingRecordsOperation.swift; sourceTree = ""; }; - 2773A5A159F5DFA0A928E49F68CC6E2D /* spc7110emu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110emu.h; sourceTree = ""; }; - 27A2677C576835F3B4E792D1223B0C84 /* GBADeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBADeltaCore-prefix.pch"; sourceTree = ""; }; - 27AFE501DA9EA6202B3EE72F7468987C /* RSTFetchedResultsDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTFetchedResultsDataSource.h; path = Roxas/RSTFetchedResultsDataSource.h; sourceTree = ""; }; - 27B1FE69B14E33A7E6603FF648B30DFB /* NstBoardWhirlwind.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWhirlwind.hpp; sourceTree = ""; }; - 27CAFC4023101EB518BF390FBCBDAC6C /* NstBoardTxcTw.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcTw.hpp; sourceTree = ""; }; - 27CF12F82D7FC895B714C5F31C07E905 /* GBASockClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBASockClient.h; sourceTree = ""; }; - 27D3E954F1B9259AA8BFF0453108844D /* NstBoardBmcGoldenCard6in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGoldenCard6in1.hpp; sourceTree = ""; }; - 27DF122CB5EB6951E6B147BC0F24D64E /* NstBoardNxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNxRom.hpp; sourceTree = ""; }; + 253F6A4732CDD605581DABD45CD0B43F /* NstBoardBmcSuperHiK4in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperHiK4in1.hpp; sourceTree = ""; }; + 2541FACE6856FBF20F718BF93515A799 /* NstCartridgeUnif.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeUnif.hpp; sourceTree = ""; }; + 25783A066C7388BF58AF665E9697C17B /* Ftp.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Ftp.hpp; sourceTree = ""; }; + 258092907C70394268136103C022FEE8 /* SocketSelector.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SocketSelector.hpp; sourceTree = ""; }; + 2597239B8799F016700A89F4C2178031 /* OpenGL.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = OpenGL.hpp; sourceTree = ""; }; + 259F2453A2569EB3489497BFC04DC6EC /* pngset.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngset.c; sourceTree = ""; }; + 25DEDA1290E18DBA7242DCF9680B37DA /* arm_cpu_features.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = arm_cpu_features.h; sourceTree = ""; }; + 26031A010DCC281450512C72B41CD425 /* Packet.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Packet.hpp; sourceTree = ""; }; + 26169D7A10310A0CE0A585A679CB5736 /* RingBuffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RingBuffer.swift; sourceTree = ""; }; + 26539A58480363BAF74C49F66717AAE3 /* NstState.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstState.hpp; sourceTree = ""; }; + 26980C04667AAE6697AC84486BB012FF /* Vector2.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector2.inl; sourceTree = ""; }; + 26E70D021ACF47CEAF06F4E652E5E81A /* opengl_Attributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_Attributes.h; sourceTree = ""; }; + 274CDB9B8AA8BAECD4E2BB3670A376D4 /* BPMDetect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BPMDetect.h; sourceTree = ""; }; + 275B73A10051D1457DB5A4D25F97ABB1 /* ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist"; sourceTree = ""; }; + 275D08AF3E80D1A5B843C23F36F20FE6 /* RSTToastView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTToastView.h; path = Roxas/RSTToastView.h; sourceTree = ""; }; + 2769336E22CE289D3CE9EC20CBF91610 /* NstPpu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPpu.hpp; sourceTree = ""; }; + 280A5539EBE87BEA10C7C1654D729DCC /* L3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3D.cpp; sourceTree = ""; }; + 2815B1907C011A39DFB5DA9B3B93A230 /* glsl_CombinerProgramImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramImpl.cpp; sourceTree = ""; }; 285001A3E16D55354667EDFD2BF69729 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; - 288D4255C025E9AE120B756ED3D79848 /* SoundStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundStream.hpp; sourceTree = ""; }; - 2898E99C918654A8574FBA694F5AA190 /* GameControllerStateManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerStateManager.swift; sourceTree = ""; }; - 28A32492091FA65B2E25F38BDB5EE070 /* cheat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheat.h; sourceTree = ""; }; - 292C26E214699339AAE80215F482F9BF /* F3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3D.h; sourceTree = ""; }; - 294C23E97C15AE68F25128C115C99270 /* AnyInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnyInput.swift; sourceTree = ""; }; - 29ABF3EFA4F58F7434261260A0FCC2A5 /* L3DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3DEX.h; sourceTree = ""; }; - 2A0298053CF49C68092396B42DD55D37 /* ftoption.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftoption.h; sourceTree = ""; }; - 2A046E883CFCEC84A20788D73991DD42 /* RSTCollectionViewGridLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCollectionViewGridLayout.h; path = Roxas/RSTCollectionViewGridLayout.h; sourceTree = ""; }; - 2A2F8E82B85B6C622F315EBC51F857CC /* Context.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Context.hpp; sourceTree = ""; }; - 2A3C156BDEC9D98DB4C0821812B71351 /* DriveService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Files.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Files.swift"; sourceTree = ""; }; - 2A5D80F4652B7C7C71549D654A6F22B0 /* ftincrem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftincrem.h; sourceTree = ""; }; - 2A7484DF86BAC6712F444A8FFBF23277 /* re2.c */ = {isa = PBXFileReference; includeInIndex = 1; path = re2.c; sourceTree = ""; }; - 2A9BAD126F66B1D6249DC44FE38555BB /* NstBoardSuperGameBoogerman.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGameBoogerman.hpp; sourceTree = ""; }; + 287CF3209EFBA423F838FBAE494AB0C0 /* slot1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = slot1.h; sourceTree = ""; }; + 2889DF4390F5E2FFDA11CCE9E534746E /* System.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = ""; }; + 28CBF616EB776A5C5D2F9A737B72AA74 /* cart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cart.h; sourceTree = ""; }; + 290CD775EF514EB180E591FA1BBD9EE9 /* NstBoardAve.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAve.hpp; sourceTree = ""; }; + 29100634EB1C2E5E9877D238B86CDBB4 /* autohint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = autohint.h; sourceTree = ""; }; + 291D59A8B427D100ED229874D4D9C1A4 /* srtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = srtc.h; sourceTree = ""; }; + 294CF6CD997D9E587A99F6DFE61FEC0F /* NstBoardSachen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachen.hpp; sourceTree = ""; }; + 2985A6A24D313B24B3A42ED617C00464 /* GameControllerInputMappingProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerInputMappingProtocol.swift; sourceTree = ""; }; + 299389570253111A7FC0B2AD359D7A1A /* m64282fp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64282fp.h; sourceTree = ""; }; + 29AEB4740EA971386FE4B6750AA2EB59 /* NstBoardEvent.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardEvent.hpp; sourceTree = ""; }; + 29E044818E33EA28D605B83708C47299 /* NstBoardBmcSuper24in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper24in1.hpp; sourceTree = ""; }; + 29EB52E4D8EE749D56B951548307A0DE /* TxQuantize.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxQuantize.cpp; sourceTree = ""; }; + 2A147B56E0C3491FF27162D46C95BDD2 /* retro_environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_environment.h; sourceTree = ""; }; 2AA34CF8A01A306ECCE09A801585167F /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + 2ABD8BA817A5B6DB4C5828318ED97014 /* RSTCollectionViewGridLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCollectionViewGridLayout.h; path = Roxas/RSTCollectionViewGridLayout.h; sourceTree = ""; }; 2ABF32DB7C03DC858879C758E39AAD27 /* GTLRBase64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRBase64.h; path = Source/Utilities/GTLRBase64.h; sourceTree = ""; }; - 2B02EEBF1E035A24BDB6410BAA13782B /* NstApiCartridge.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiCartridge.hpp; sourceTree = ""; }; - 2B8B19BAF3A73578C62F6DA00164A175 /* pngstest-errors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "pngstest-errors.h"; sourceTree = ""; }; - 2B93D7E35A62A2F50B4C38BF9A76E4C4 /* F3DDKR.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DDKR.cpp; sourceTree = ""; }; - 2BC6C6859EF93F3A711C5AA163C55425 /* SoftwareRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoftwareRender.h; sourceTree = ""; }; - 2BCCA563115C1ABD0F6BE0FC0B3CE00B /* Sound.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sound.hpp; sourceTree = ""; }; - 2BFEAD74D75F957AC8D29DA74DAD189C /* RSTLaunchViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTLaunchViewController.h; path = Roxas/RSTLaunchViewController.h; sourceTree = ""; }; - 2C0286BB0302AD778CF29EECE712709B /* F3DTEXA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DTEXA.h; sourceTree = ""; }; - 2C0CA4A2A069453672147E331C600848 /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; - 2C685CAEC8DE104E2770BA81F4B87316 /* path.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = path.h; sourceTree = ""; }; + 2AD3368B2D5D7E97A29573C83ED07A59 /* osd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osd.h; sourceTree = ""; }; + 2B98706F4E48F8908BCD401802253AB6 /* getset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = getset.h; sourceTree = ""; }; + 2B9D8426DBFEF530DE2AC44162062396 /* ZSort.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZSort.cpp; sourceTree = ""; }; + 2BAAE966AB05A1DCC9AA7B693D69F0D0 /* NstBoardCne.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCne.hpp; sourceTree = ""; }; + 2BBF9E15124F307CDA19D3C2E2FEFCB6 /* NESDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NESDeltaCore-prefix.pch"; sourceTree = ""; }; 2C998AB9300BCC4AD6368CB1FA675F29 /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; }; 2C9E8347629FB94F0A3A23F8ACE7DF87 /* Team.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Team.swift; path = Source/SwiftyDropbox/Shared/Generated/Team.swift; sourceTree = ""; }; - 2CC9F125F98839707615EC7F6D62E31F /* commandline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = commandline.h; sourceTree = ""; }; + 2CC64C89DA860743FE62F576D82428F1 /* AREngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AREngine.h; sourceTree = ""; }; + 2CCBFD78ABFCD2FE1C22DA2F349D8520 /* font.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = ""; }; 2CCF0C455FDED16D55973E6A3073BB8D /* Fabric.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Fabric.h; path = iOS/Fabric.framework/Headers/Fabric.h; sourceTree = ""; }; - 2CCF7001F83E60B5C530A3D02B918FE9 /* m64p_vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_vidext.h; sourceTree = ""; }; + 2CE1063F98D054EF4717F2C3004607F5 /* ARMInterpreter_Branch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARMInterpreter_Branch.h; sourceTree = ""; }; 2CE8C779DBC210E95B624C15A6AEB6CA /* ZIPFoundation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ZIPFoundation.modulemap; sourceTree = ""; }; - 2D32B6BBDAE1D1E3EAA27A408B03C8A6 /* Combiner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Combiner.h; sourceTree = ""; }; - 2D3BDC0A83B15DB6FCC56F319C1AD6E8 /* NstBoardBtlSuperBros11.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSuperBros11.hpp; sourceTree = ""; }; - 2D61A2E3D2CCD4FD36DF6278A7CFE46A /* DSTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = DSTypes.m; sourceTree = ""; }; - 2DA2D2C771F4634211A5B88321499576 /* opengl_GLInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_GLInfo.cpp; sourceTree = ""; }; - 2DB53EA9D410D595711ED5EE029CAC60 /* Config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Config.cpp; sourceTree = ""; }; - 2DB986F9C1D693A55F7B3373502F3EA2 /* NstBoardBandai.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandai.hpp; sourceTree = ""; }; - 2E2407FBC4681D02CEDB01BEEC0AC171 /* NstApiTapeRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiTapeRecorder.hpp; sourceTree = ""; }; + 2D2882065898FB0E38AD32AA9BC8E931 /* NstLog.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstLog.hpp; sourceTree = ""; }; + 2D74E106D389811B1BA21826E9E3C690 /* rateest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rateest.h; sourceTree = ""; }; + 2DF776088C2711052EEF4C793C2B806A /* NstBoardUnlMortalKombat2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlMortalKombat2.hpp; sourceTree = ""; }; + 2E088DA0C031536321CA95D00470F534 /* ft2build.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ft2build.h; sourceTree = ""; }; + 2E2BB78721D4C6515E5DED30486B26C2 /* opengl_ColorBufferReaderWithBufferStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithBufferStorage.h; sourceTree = ""; }; 2E2D966C0A00ADF6CBAED222AD054CA8 /* Crashlytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.xcconfig; sourceTree = ""; }; - 2E42A2A695A512EFB1CAFA94A99A0F8A /* F3DBETA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DBETA.cpp; sourceTree = ""; }; - 2E57F66FFEB81B1218E882DC67DDCD97 /* TxUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxUtil.h; sourceTree = ""; }; - 2E6BE100ACC34617987896C070068D72 /* filters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = ""; }; - 2E79FA977AAA30AD5B0ACFC45BB5967B /* NstBoardZz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardZz.hpp; sourceTree = ""; }; - 2E8023826B8975C217D59F5E61A8DCEA /* MFiGameController.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = MFiGameController.deltamapping; path = "DeltaCore/Supporting Files/MFiGameController.deltamapping"; sourceTree = ""; }; - 2EC1909CF0C525687C49B17CBAC1003E /* text.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = text.h; sourceTree = ""; }; - 2ECDC95F1D25F3D0FDE01C632C5EEE7F /* TextureFilters_hq4x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_hq4x.h; sourceTree = ""; }; - 2ED8DCB8CB080AFAA17D199C268096E6 /* video_capture_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = video_capture_backend.h; sourceTree = ""; }; - 2F0727F553BF04882765DDB5CDA7D864 /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = internal.h; sourceTree = ""; }; + 2E5C87C85D80CEFECDBD846C5507C244 /* vi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vi_controller.h; sourceTree = ""; }; + 2E6160492F9D1405C748988282E22619 /* Text.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Text.hpp; sourceTree = ""; }; + 2E62533D6ADE3583F493484D3ABF1BB5 /* FIFOSamplePipe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFOSamplePipe.h; sourceTree = ""; }; + 2E7771F7C5B8F14F803F19FCEB39CD0B /* Transformable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Transformable.hpp; sourceTree = ""; }; + 2E9C9E58EFFC6846E01B3B75A4595B21 /* svcid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svcid.h; sourceTree = ""; }; + 2E9FF9B4A3C5693A9C7DC7179EB1F138 /* ManagedRecord+Predicates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Predicates.swift"; sourceTree = ""; }; + 2EB60A6D4ABEDA41E12908BFFBCBAD8D /* ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist"; sourceTree = ""; }; + 2EC10C4E5FDC7C7C25A7DAC7A2FB11BB /* F3DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX.h; sourceTree = ""; }; 2F298C5D309EDC6DEBD36255472EF52C /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; }; - 2F60B797411C7BEEEE57114981D1D5CE /* NstInpPaddle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPaddle.hpp; sourceTree = ""; }; - 2F6D552EFD0D0F0A9F5EEC068432F589 /* RSTLaunchViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTLaunchViewController.m; path = Roxas/RSTLaunchViewController.m; sourceTree = ""; }; - 2FB72B0C0BDEEEA75B2233F8A0F9C0CB /* NstBoardBtlGeniusMerioBros.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlGeniusMerioBros.hpp; sourceTree = ""; }; - 2FD0F2986CF92C82ADF825EBEADF3727 /* inputgetter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = inputgetter.h; sourceTree = ""; }; - 2FE159CB1A275ED4531A3B1AEA807772 /* NstBoardBandaiDatach.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiDatach.hpp; sourceTree = ""; }; + 2FADAD20817CF7C88C8300D762D5C633 /* ftmemory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmemory.h; sourceTree = ""; }; 30131336E11D11700AC99D314BDC275C /* GBADeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = GBADeltaCore.bundle; path = "GBADeltaCore-GBADeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; - 301D690D8387625CECE00F7DFC975BD1 /* NstBoardBmc1200in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc1200in1.hpp; sourceTree = ""; }; - 303639D060EE4ABC8F9B28FD68B7F98C /* NstBoardWaixingZs.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingZs.hpp; sourceTree = ""; }; - 3082C32F34B1C6E7F0F4DC785F328B7E /* NstInpDevice.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpDevice.hpp; sourceTree = ""; }; - 30DCADC540C43841BB69ADBF07E2D033 /* Packet.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Packet.hpp; sourceTree = ""; }; + 3077BDF790EB52605DBA99AE8089C2FA /* Settings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = ""; }; + 3086277C9B80D3FC1C3FFC747784942B /* Roxas.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Roxas.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 308BAF6C3BE086BDB26EFE72FA9E48A6 /* pngtest.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngtest.c; sourceTree = ""; }; + 30E950B4BF47AC526A4464F3994CA0BB /* TextureFilters_xbrz.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_xbrz.h; sourceTree = ""; }; + 311F5E992C4184B1925C4E380CBBEFB5 /* RTC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RTC.h; sourceTree = ""; }; + 3139CDEFDF54874B3FE87D52FBEE63BB /* svsfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svsfnt.h; sourceTree = ""; }; + 313C6B8D05DFD20F664BA3744351BC9C /* Context.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Context.cpp; sourceTree = ""; }; 3144D27552079845BF5B0637FC88D62B /* GTLRDrive.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDrive.h; path = Source/GeneratedServices/Drive/GTLRDrive.h; sourceTree = ""; }; - 315FF0E989ED5094C01E5CC2AA1F9C5A /* NstTimer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTimer.hpp; sourceTree = ""; }; - 316C97172E998626A782DC7AB8C5416C /* NstBoardBandai24c0x.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandai24c0x.hpp; sourceTree = ""; }; + 316A846E58F0E27085A4330EE10E3B5F /* SPU.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SPU.cpp; sourceTree = ""; }; + 3197530A210649B738C6111BF7966B53 /* cpu_detect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpu_detect.h; sourceTree = ""; }; + 319773B795A71CD3057DB359C4AE5C38 /* m64p_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_config.h; sourceTree = ""; }; + 31B5A52F1F76F3224E54451C2B25CA8D /* Window.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Window.hpp; sourceTree = ""; }; 31BFB44B9B839260D03128AA298313F4 /* TransportConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransportConfig.swift; path = Source/SwiftyDropbox/Shared/Handwritten/TransportConfig.swift; sourceTree = ""; }; - 31C2319F7A8D58BEC41843BD13637729 /* pngread.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngread.c; sourceTree = ""; }; - 31C592DC38E9487D52E30F0FFC654460 /* GBADeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBADeltaCore-umbrella.h"; sourceTree = ""; }; - 31C90C17DE46AAD6D2786B0098B71196 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; - 31FCE4C32E3EF5DE398B4E770A89EBF5 /* NstBoardBmc76in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc76in1.hpp; sourceTree = ""; }; - 320B83F85351687CBC80A3C6FC74440B /* TxFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxFilter.cpp; sourceTree = ""; }; - 323BA7B73E9CB19F2E6792B339B711E1 /* NstBoardKay.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKay.hpp; sourceTree = ""; }; - 32498379B364CA72F850FD7D3200CF6B /* Vector2.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector2.inl; sourceTree = ""; }; - 325F0C3218801422F4A41352BE209C49 /* GBA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBA.h; sourceTree = ""; }; - 32810DC0220801D0627369038B90903F /* NstBoardHenggedianzi.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHenggedianzi.hpp; sourceTree = ""; }; - 3283EF596434B1D254E4719AEDDF2B9F /* 3DMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = 3DMath.h; sourceTree = ""; }; - 32C312AFD3D5355E34E5264A0D924E24 /* NstBoardBtlSmb2a.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2a.hpp; sourceTree = ""; }; - 32CD48452BE99C82FE043939384E2531 /* TextureFilters_2xsai.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_2xsai.cpp; sourceTree = ""; }; - 337E3DE6F767B4B0E0E8615F5A236955 /* CommonAPIImpl_common.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CommonAPIImpl_common.cpp; sourceTree = ""; }; - 337EA8CD424B4FAA1210613EA7BEE5FF /* RSTCollectionViewGridLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCollectionViewGridLayout.m; path = Roxas/RSTCollectionViewGridLayout.m; sourceTree = ""; }; - 339EF64DD9F7A5E35B3CA9B6E200C168 /* svpfr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpfr.h; sourceTree = ""; }; - 33A331134BE85F727CC5CCD89769383E /* RSTArrayDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTArrayDataSource.h; path = Roxas/RSTArrayDataSource.h; sourceTree = ""; }; - 33B4914FDB89C5B28445FE64AA86085E /* Sleep.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sleep.hpp; sourceTree = ""; }; - 33CC18E757DD735D6437685485DADD01 /* F5Rogue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F5Rogue.cpp; sourceTree = ""; }; - 33F61CAFA96E0983ACC82B25ADD6DA19 /* NstBoardSuperGameLionKing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGameLionKing.hpp; sourceTree = ""; }; - 34347E5F18F11A1CEF5D0D59279705D2 /* NstBoardTaitoX1017.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoX1017.hpp; sourceTree = ""; }; - 3443718CF69897A14D49B9C400E80C50 /* GraphicBufferWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicBufferWrapper.h; sourceTree = ""; }; - 3451D46815FC1E9C8DD13CA49D2186AF /* ftmodule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmodule.h; sourceTree = ""; }; - 34A215FA298A479379277FF73C2A596C /* NstBoardCxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCxRom.hpp; sourceTree = ""; }; - 34B58BB2F0C3289A22FE5DD2CA130C8D /* gDP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gDP.h; sourceTree = ""; }; - 34E1D0D9185BAD35EFFEE1914BE57762 /* IpAddress.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = IpAddress.hpp; sourceTree = ""; }; - 35465BE12D8260B15CC6BD3C5FEF813C /* ftsystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsystem.h; sourceTree = ""; }; - 35485E76FD48D810C5D7C95E2FD90D64 /* ColorBufferToRDRAMStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferToRDRAMStub.h; sourceTree = ""; }; - 3555155F2CD8E368BB6A27A9517ADC29 /* NstBoardSachenS8259.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenS8259.hpp; sourceTree = ""; }; - 355A8C024A46DB2BE1763B0F3971FFEB /* NstBoardBenshengBs5.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBenshengBs5.hpp; sourceTree = ""; }; - 359183005A45F4DEB5018AB89576E560 /* PaletteTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PaletteTexture.h; sourceTree = ""; }; + 31E520FC3E469009B4F65BACFD5C14C3 /* NstSoundPlayer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundPlayer.hpp; sourceTree = ""; }; + 3223712696A5DC7DDD4D4DE6BD2C95A2 /* r4300_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = r4300_core.h; sourceTree = ""; }; + 322C5837A63371E2F6F3AF970B00A736 /* GBADeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GBADeltaCore.xcconfig; sourceTree = ""; }; + 325E8BBC08F3C0C7CC6EE4B27346E532 /* md5.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; + 327910F0090992C6E3CBE5627E621EB3 /* RSTTintedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTTintedImageView.m; path = Roxas/RSTTintedImageView.m; sourceTree = ""; }; + 32999EF608D52E8EBF47AEF2D05024FB /* UIScreen+ControllerSkin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIScreen+ControllerSkin.swift"; sourceTree = ""; }; + 329C5C85AFC08890DFDEC9E233470EF0 /* RSTSeparatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTSeparatorView.h; path = Roxas/RSTSeparatorView.h; sourceTree = ""; }; + 32C0B90253B6F200AB5E78C107875E7B /* TexrectDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TexrectDrawer.h; sourceTree = ""; }; + 32C47A891929053596B4282BC5DDB0A7 /* ftpfr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftpfr.h; sourceTree = ""; }; + 32C661EFF23BB80E5CBC79C7B385920A /* RSTCompositeDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCompositeDataSource.m; path = Roxas/RSTCompositeDataSource.m; sourceTree = ""; }; + 32C6794E2F48E8D40B8DA4F984505F38 /* NstCpu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCpu.hpp; sourceTree = ""; }; + 32D7821E2CE79FC4E3BED960866CD961 /* types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; + 3300F6B66FF14313A41952BEDB638D10 /* bios.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bios.h; sourceTree = ""; }; + 3312E5853E083AE08720EFDF8EE603C0 /* NstDatabase.xml */ = {isa = PBXFileReference; includeInIndex = 1; path = NstDatabase.xml; sourceTree = ""; }; + 3347C3BDA90B90C1FA03156B774C2A1E /* NstBoardBmc36in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc36in1.hpp; sourceTree = ""; }; + 3354FC02362F1AAC06FABFDAB6FC1E92 /* RSTFetchedResultsDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTFetchedResultsDataSource.m; path = Roxas/RSTFetchedResultsDataSource.m; sourceTree = ""; }; + 33B331BB819B9C6CB76839045D4EF06B /* memory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = ""; }; + 33BD33AF73BEEF1769230AAB1B73B0F8 /* oglft_c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = oglft_c.h; sourceTree = ""; }; + 33FF8A61B13EE6F6CE800CB771D90EAC /* osal_files_ios.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = osal_files_ios.mm; sourceTree = ""; }; + 3457B930F9F78CBC2F52863D328D8DAC /* SNESDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SNESDeltaCore.modulemap; sourceTree = ""; }; + 3465DB1B610ECE37C91169B30B6FF528 /* NstPins.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPins.hpp; sourceTree = ""; }; + 3479E4ABC7EA56616AD7804B53308F24 /* NstBoardJxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJxRom.hpp; sourceTree = ""; }; + 347EB9305F4E36DD5D07096703DFAC24 /* F3DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2.cpp; sourceTree = ""; }; + 347FF7946245CC6482030C5BCDAF89D0 /* NstZlib.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstZlib.hpp; sourceTree = ""; }; + 34887E5016BAEE752E395334E79BDDFD /* m64p_frontend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_frontend.h; sourceTree = ""; }; + 3489DA9596EA467FDF1E825220781E20 /* SoundFileFactory.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileFactory.inl; sourceTree = ""; }; + 34AF57CCCC40097CEBC29D385D24E7AB /* ARCodeList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARCodeList.h; sourceTree = ""; }; + 34B01107A2C96AA02DBB861B4B38041C /* cic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cic.h; sourceTree = ""; }; + 34D7A85BF8A1C0DC2EE0B2F071F97445 /* ftgxval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgxval.h; sourceTree = ""; }; + 3538A2EB4EDA6929B5D32A095FD21C6E /* NSManagedObject+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Harmony.swift"; sourceTree = ""; }; + 35735087EA4B8B9922B5CAF03314D85D /* NstChecksum.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstChecksum.hpp; sourceTree = ""; }; 35A46DA9D7B9942345456BEF6DF7E8D1 /* GTLRURITemplate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRURITemplate.m; path = Source/Utilities/GTLRURITemplate.m; sourceTree = ""; }; - 35AD6B07396F00A51E9FE9F7F393FAE0 /* NstInpKonamiHyperShot.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpKonamiHyperShot.hpp; sourceTree = ""; }; - 35CFBA425AB64788F59985DF4294DCD2 /* NstBoardBmcCh001.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcCh001.hpp; sourceTree = ""; }; - 362727B8448D5ACBAA6199388904E6EE /* F3DSETA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DSETA.h; sourceTree = ""; }; - 3676C1EE5D5DE26D9C445B36939E922C /* ConvexShape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ConvexShape.hpp; sourceTree = ""; }; - 367BD3702DCBBD382022788A89524217 /* pshints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pshints.h; sourceTree = ""; }; - 36962E0BFCDEF7E1ED3272745C0620BB /* F3DZEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DZEX2.cpp; sourceTree = ""; }; - 36CB3E3F01D050A62BBD3A2DB25F6116 /* Roxas-Prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Roxas-Prefix.pch"; path = "Roxas/Roxas-Prefix.pch"; sourceTree = ""; }; - 36E1F6E94EA1CBCCBD240A2819F591AD /* cexcept.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cexcept.h; sourceTree = ""; }; + 35B53A6EBBDB14342ACBC6EF87C2FAFD /* glsl_CombinerProgramBuilder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramBuilder.cpp; sourceTree = ""; }; + 35C4D4998448EFC8D73C7526A9E0766B /* convert.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = convert.cpp; sourceTree = ""; }; + 35C53EC4A93175802A6008176A72A482 /* retro_stat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_stat.h; sourceTree = ""; }; + 35CA6F1D8D4FD82291C1148088DDB220 /* GBAEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAEmulatorBridge.h; sourceTree = ""; }; + 35E3B9E17CE51387A5C31A3D4D020CB3 /* NSFileManager+URLs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSFileManager+URLs.h"; path = "Roxas/NSFileManager+URLs.h"; sourceTree = ""; }; + 35E65C6009E97AD1F054B35476E2887A /* fterrdef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fterrdef.h; sourceTree = ""; }; + 35F02B0ECCDFC2E4E491C095B018680E /* DeltaTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DeltaTypes.m; path = DeltaCore/DeltaTypes.m; sourceTree = ""; }; + 360FE52BEEE04312C550B83F42CCF550 /* SNESTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESTypes.h; sourceTree = ""; }; + 3626FD0512609CFE865D492929315B1E /* pngrtran.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrtran.c; sourceTree = ""; }; + 36B21AD2A8F390B23FB0A538F357E4D0 /* TxFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxFilter.h; sourceTree = ""; }; + 36B43C04D7CC65CE9AD7C42E09A75A07 /* NstBoardKonamiVrc1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc1.hpp; sourceTree = ""; }; + 36D6B831A12A9A6161E3436E49D4113A /* NstCartridgeRomset.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeRomset.hpp; sourceTree = ""; }; + 36F0EA19BE634583B78B77F370DF9C88 /* NSPersistentStore+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSPersistentStore+Configuration.swift"; sourceTree = ""; }; + 3712F3330F9F788DA08004D45DC308FB /* Sprite.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sprite.hpp; sourceTree = ""; }; + 3720B67C88F2DE8BCAE0EDD0D02B5F98 /* Socket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Socket.hpp; sourceTree = ""; }; 37221D699E77B16EA4FE6C376B827730 /* Pods-Delta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Delta-umbrella.h"; sourceTree = ""; }; - 372F8BF3EFD0B4F1ADF3AB6EDDFDEB86 /* Keys.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Keys.cpp; sourceTree = ""; }; - 3745BEDDA1C724568FBE3D2E2D7E1A45 /* Turbo3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Turbo3D.h; sourceTree = ""; }; 37497E9D4A4AD3D7DBDCBD661F3B23B8 /* CustomTasks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomTasks.swift; path = Source/SwiftyDropbox/Shared/Handwritten/CustomTasks.swift; sourceTree = ""; }; - 3786BF5CD7F52FDF2EC2229D9387B2A8 /* Transformable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Transformable.hpp; sourceTree = ""; }; - 3791E485D89113AC4B25ADE046DEE5D1 /* SoundRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundRecorder.hpp; sourceTree = ""; }; - 37B8F5240077E10AD926217E581D56A6 /* xxhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; - 37EAE6D3D608C9A5504D237AEFF46B37 /* BreakpointStructures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BreakpointStructures.h; sourceTree = ""; }; - 37F6886809E07DA8D8DA791B7D5E700D /* RSTPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTPlaceholderView.m; path = Roxas/RSTPlaceholderView.m; sourceTree = ""; }; - 380AB1A1F7D98ACA91271E7BD163EEB5 /* NstAssert.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstAssert.hpp; sourceTree = ""; }; - 38670547E681F154E5A9A09F39390D14 /* DepthBufferRender.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBufferRender.cpp; sourceTree = ""; }; + 3762689E296E5EBA4CC56F2683522DF0 /* retro_endianness.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_endianness.h; sourceTree = ""; }; + 37B489A0DEA4487857DEFF8A6A5237D9 /* NstBoardNRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNRom.hpp; sourceTree = ""; }; + 3827013A64806EC421D988347B05D5EB /* RSTCellContentDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentDataSource.h; path = Roxas/RSTCellContentDataSource.h; sourceTree = ""; }; 3871D54EF3B7DA9555828F18A50129A9 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; }; - 3897ACD3EC356862F1521A3004290DFF /* m64p_frontend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_frontend.h; sourceTree = ""; }; - 38ADDB2045DD7DB1E4811DC4854871C1 /* m64p_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_config.h; sourceTree = ""; }; - 3919DEC2EE937226ECE6A9846B2DA0D4 /* FilterChain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FilterChain.swift; sourceTree = ""; }; + 387F3E450269A9E3EF2EA6A10AD8C879 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; 39319E8C5681BB472007926F7AAC4580 /* GTMSessionFetcherService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherService.m; path = Source/GTMSessionFetcherService.m; sourceTree = ""; }; - 3940CE8EE2A18C0E5B6BE8394499EEB9 /* bios.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bios.h; sourceTree = ""; }; - 396CAC416CA887F60CA5BB303E7782BE /* TcpSocket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TcpSocket.hpp; sourceTree = ""; }; - 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NESDeltaCore.xcconfig; sourceTree = ""; }; - 398E01AED7FF75385A50FDC67155A9A0 /* RectangleShape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RectangleShape.hpp; sourceTree = ""; }; - 399024492430E7258571697FBE41E931 /* ControllerInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerInputView.swift; sourceTree = ""; }; + 39366E2F73CC4159EE18FFD5AF80A0F3 /* pngwio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwio.c; sourceTree = ""; }; + 3949595D020E5A3DAB73E06EEB13CF19 /* BitmapProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BitmapProcessor.swift; sourceTree = ""; }; + 3985853293A865E5A5336745DE4139F2 /* NstCore.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCore.hpp; sourceTree = ""; }; + 398B0C10962B06603D1218A0BFEFDE41 /* F3DBETA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DBETA.h; sourceTree = ""; }; 399303C061E83D38C607412717024931 /* FTS4.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS4.swift; path = Sources/SQLite/Extensions/FTS4.swift; sourceTree = ""; }; - 3993143AF65CD570A58EFF32C95A56FD /* storage_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = storage_backend.h; sourceTree = ""; }; - 39CE46E8947CA82B26FFDA66DEED2417 /* opengl_ContextImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ContextImpl.cpp; sourceTree = ""; }; - 39DE70D20BB766FDECB1A17965101839 /* NstVideoFilterxBR.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterxBR.hpp; sourceTree = ""; }; - 3A3B202DC9824A439BA7432E3C5B9DB8 /* Thread+RealTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Thread+RealTime.swift"; sourceTree = ""; }; - 3A4016B959B9C2B70E21D27AA4439760 /* logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = logger.h; sourceTree = ""; }; - 3A8697A847DE43FFACD393D2A7A9B84E /* UploadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordOperation.swift; sourceTree = ""; }; - 3A9E10651AAF13257794A36D1EE6B48B /* F3DFLX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DFLX2.h; sourceTree = ""; }; - 3AE64FC0F8676B00CF470337F5C202A9 /* Textures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Textures.h; sourceTree = ""; }; - 3AF4B7019142B0E02BDE3089ED853C72 /* NstBoardBmcMarioParty7in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcMarioParty7in1.hpp; sourceTree = ""; }; - 3B05FC42F83ADA41DEED532540CD7174 /* TxImage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxImage.cpp; sourceTree = ""; }; + 39BF407461BE0D689AC655371DD416DE /* instruction_attributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instruction_attributes.h; sourceTree = ""; }; + 39C09D3911D40FDAEA431AB499EE712E /* RSTCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCollectionViewCell.m; path = Roxas/RSTCollectionViewCell.m; sourceTree = ""; }; + 3A13B4329882F5A80C1C1326BB560732 /* GLideN64.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = GLideN64.ini; sourceTree = ""; }; + 3A52EF817DA55C490E46C80C1AF0F283 /* opengl_TextureManipulationObjectFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_TextureManipulationObjectFactory.cpp; sourceTree = ""; }; + 3A7FFE29C3C4FE3726FAB1DB3F1C4F3F /* UICollectionViewCell+Nibs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewCell+Nibs.m"; path = "Roxas/UICollectionViewCell+Nibs.m"; sourceTree = ""; }; + 3A88ADF5CB822A0ABF0CDD1E4D68BAAE /* libretro_vulkan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libretro_vulkan.h; sourceTree = ""; }; + 3AB1EF926C51DFF7D92DC2A88CBEF231 /* Err.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Err.hpp; sourceTree = ""; }; + 3AC36AE82A4992804E6ECF7236E5ECA7 /* RSTLoadOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTLoadOperation.m; path = Roxas/RSTLoadOperation.m; sourceTree = ""; }; 3B22551CE150F70C85739F2994DE4F75 /* GTLRDriveObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDriveObjects.h; path = Source/GeneratedServices/Drive/GTLRDriveObjects.h; sourceTree = ""; }; - 3B254FADF7513993D3F7353F6B8F1395 /* msu1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = msu1.h; sourceTree = ""; }; - 3B430FF2043C1D359980E0C002B66913 /* RSTNavigationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTNavigationController.h; path = Roxas/RSTNavigationController.h; sourceTree = ""; }; - 3B6CCD65AA48EE2EC4FE44F3D0C21376 /* NstVideoRenderer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoRenderer.hpp; sourceTree = ""; }; - 3B72CA5846B888FBC7CF69D1C40C9AE7 /* NstInpAdapter.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpAdapter.hpp; sourceTree = ""; }; - 3B9808132CF6702DDD5DA9C2F9A0C253 /* Version+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Dropbox.swift"; sourceTree = ""; }; + 3B33F3D270F71B002370D6D901A9EC19 /* NstBoardBmcCtc65.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcCtc65.hpp; sourceTree = ""; }; + 3B8875D91FA20F49517CC1C5CB0BEA40 /* version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; 3BA56585EDD13E71C58B7B7C64DDB53C /* GTLRDateTime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDateTime.m; path = Source/Objects/GTLRDateTime.m; sourceTree = ""; }; - 3BBA1A4FC53D2DE892DE2B5AB5226E8B /* ColorBufferToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferToRDRAM.h; sourceTree = ""; }; - 3BBF510C2B0603EAC41E2079FEFC6A95 /* Glsl.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Glsl.hpp; sourceTree = ""; }; - 3BCF0A222961A427CD39D1C78BD6A993 /* Glsl.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Glsl.inl; sourceTree = ""; }; - 3BFF77F72AE6211AD9D42FD2E18375EF /* NstBoardWaixingSgz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSgz.hpp; sourceTree = ""; }; - 3C33E4A59D390AF25D605A289B4F902E /* AutoBuild.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AutoBuild.h; sourceTree = ""; }; - 3C4B8A5D7D056FB02966F159AFC5E9F4 /* DSEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = DSEmulatorBridge.mm; sourceTree = ""; }; - 3C581DB34643779E6E697D493C316D48 /* S2DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = S2DEX2.h; sourceTree = ""; }; - 3CE468B2DBAC6E3109B9A6E529ADACA1 /* PixelBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PixelBuffer.h; sourceTree = ""; }; - 3D0E61C75D78DD7A729364010BDBB106 /* gb_cart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gb_cart.h; sourceTree = ""; }; - 3D1A093309BA94F1AB20657C257070E2 /* RSTHelperFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTHelperFile.h; path = Roxas/RSTHelperFile.h; sourceTree = ""; }; - 3D27110A6DD067C15FC032BAF9BEE99E /* Input.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Input.swift; sourceTree = ""; }; - 3D3835A82BC331577B14F9F444CD9367 /* bootrom_hle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bootrom_hle.h; sourceTree = ""; }; + 3BECDD49D8123BEDD18D8163C335A153 /* RSTRelationshipPreservingMergePolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTRelationshipPreservingMergePolicy.m; path = Roxas/RSTRelationshipPreservingMergePolicy.m; sourceTree = ""; }; + 3C045A31E9EBE0F4CFBE198690BA4782 /* ftdebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftdebug.h; sourceTree = ""; }; + 3C11311A957A87232355B6B0AFFEB8F2 /* path.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = path.h; sourceTree = ""; }; + 3C136320E214AE8F3ECD371DECBC4849 /* glsl_Utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_Utils.cpp; sourceTree = ""; }; + 3C58AA463B08C4DE998C625EC48E91D1 /* m64p_plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_plugin.h; sourceTree = ""; }; + 3C7AC7D01BEAA298AE2E5122EB24308E /* IpAddress.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = IpAddress.hpp; sourceTree = ""; }; + 3C927AD9499B9097EC14BFB7DAAB353A /* sdd1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdd1.h; sourceTree = ""; }; + 3D532E4E7993FC7D9C8EFA78B07605D3 /* NstPatcher.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcher.hpp; sourceTree = ""; }; 3D5A8C2D0C4FF79FF4A82A7C02704490 /* UsersRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UsersRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/UsersRoutes.swift; sourceTree = ""; }; - 3D72B8F3909167EBE56E1BF0E3108516 /* complex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = complex.h; sourceTree = ""; }; - 3DA02F00ADA726E3CE0F82AA955FFB71 /* svsfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svsfnt.h; sourceTree = ""; }; - 3DADD8386C8821177B764FB59ACB6859 /* ControllerSkinProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkinProtocol.swift; sourceTree = ""; }; - 3DB4038AF1D67C948BF0ABB96BB0986E /* Harmony.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Harmony.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 3D98DA2B55C239E4E1EC147BC992F6F5 /* RenderTarget.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderTarget.hpp; sourceTree = ""; }; + 3D9DAB0BA1335AAA8FDA3EB6A06284D7 /* assem_arm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_arm.h; sourceTree = ""; }; + 3DA525BCCFDCF518525E5C7B8B11DBBA /* ConvexShape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ConvexShape.hpp; sourceTree = ""; }; + 3DBA884F6C11AC7F591FA518903604B3 /* F3DSETA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DSETA.cpp; sourceTree = ""; }; 3DEDD6511A23A74FFB52233C54AB8E03 /* GTLRRuntimeCommon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRRuntimeCommon.m; path = Source/Objects/GTLRRuntimeCommon.m; sourceTree = ""; }; - 3E46BEA7461AFEDDCEC478DB8D3425C3 /* NstBoardKonamiVrc7.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc7.hpp; sourceTree = ""; }; - 3E5950F1D94686CF45BF978347B71AA5 /* SaveStateProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SaveStateProtocol.swift; sourceTree = ""; }; + 3E352201B46848355CB326FC4BF1FF47 /* pngpread.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngpread.c; sourceTree = ""; }; + 3E4294CBF5BD945DE53BB04420F881C9 /* GraphicsDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicsDrawer.h; sourceTree = ""; }; + 3E468629CDCBD9A934833FB33710BC38 /* NstBoardKasing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKasing.hpp; sourceTree = ""; }; + 3E569C8B365BF92FAE9F87642393D402 /* Harmony.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Harmony.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyDropbox.xcconfig; sourceTree = ""; }; - 3E8F9415B50C5BE88ACC481C92800E41 /* ftvalid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftvalid.h; sourceTree = ""; }; - 3E9A8C85F702C4A1468F58BB906D4ED1 /* NstVideoFilterNone.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterNone.hpp; sourceTree = ""; }; - 3ECC067B82E66713A45C44F973FA04EA /* list.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; - 3ED7DC207EA838F7ED17B7E0373391E2 /* mempak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mempak.h; sourceTree = ""; }; + 3E986068DD96944D1D5B4F242C7C4976 /* glsl_ShaderStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_ShaderStorage.h; sourceTree = ""; }; + 3EB450DCC75AB9928F547A4793F046EC /* common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; 3EE0D71EAED7DDA51049859FE1209132 /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; - 3EEBB60E43F6C3B0B541EE72A7C426F9 /* VI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = VI.h; sourceTree = ""; }; - 3F3421F39C5B3686D06A4A47CFC049B7 /* NstBoardKonamiVrc2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc2.hpp; sourceTree = ""; }; - 3F67DC9F98BC9365BCA0C5FBE0E14C93 /* NstBarcodeReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBarcodeReader.hpp; sourceTree = ""; }; - 3F714F0736F9866EDD6871679177CF33 /* TextureFilters_2xsai.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_2xsai.h; sourceTree = ""; }; - 3FC4C12AAEC24F5791DDF9CF0F417BA0 /* RDP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RDP.cpp; sourceTree = ""; }; - 3FD22484CAFD9D6D7EDB3732DE4A047D /* arm_cpu_features.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = arm_cpu_features.h; sourceTree = ""; }; - 3FF38B518700B0B715F71F0BA0F88F21 /* AnyKeyPath+StringValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "AnyKeyPath+StringValue.swift"; sourceTree = ""; }; - 40018788A7B82BE36F7A4762218942C4 /* SNESEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESEmulatorBridge.h; sourceTree = ""; }; - 400B965700434B3B4E0F9FAC08AD895A /* UIViewController+TransitionState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+TransitionState.m"; path = "Roxas/UIViewController+TransitionState.m"; sourceTree = ""; }; - 40106E58B0E94346FDE0DC29003A577B /* NstState.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstState.hpp; sourceTree = ""; }; - 4060028836FDB7AAC525DB0819187A0C /* NstApiBarcodeReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiBarcodeReader.hpp; sourceTree = ""; }; - 406077526A3C40A99FE96076975E23CA /* PrimitiveType.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PrimitiveType.hpp; sourceTree = ""; }; + 3F7732EEA99B052D2425B1972ECED982 /* NstApiConfig.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiConfig.hpp; sourceTree = ""; }; + 3F9BFBF397EFF80B8131726E9C9A62C9 /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; + 3FDD8F100D97035ED26853CCF457F3B5 /* DeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = DeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 403F1EF9016E064303392CD24F59212D /* DeleteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordsOperation.swift; sourceTree = ""; }; + 406313DF7E94297A75C613BDD3988DC7 /* TextDrawerStub.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextDrawerStub.cpp; sourceTree = ""; }; + 406A09A4EB4DA79E27112B7E71A89701 /* NstBoardBtlShuiGuanPipe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlShuiGuanPipe.hpp; sourceTree = ""; }; + 4070FFD16B4FA23902478F9D6197345C /* RSTRelationshipPreservingMergePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTRelationshipPreservingMergePolicy.h; path = Roxas/RSTRelationshipPreservingMergePolicy.h; sourceTree = ""; }; + 4092859B09CAEEEE0D42CB4F4C93A062 /* GBCDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GBCDeltaCore.modulemap; sourceTree = ""; }; 409F0AD5337C7D82401596430BE50AB0 /* Pods-Delta-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Delta-resources.sh"; sourceTree = ""; }; - 40BF1C58E8788FDF52E4550CE38FFF13 /* pnglibconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pnglibconf.h; sourceTree = ""; }; - 40C24A38D0B2D424939FBE8FE393A00C /* FrameBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FrameBuffer.cpp; sourceTree = ""; }; - 40C9A47942EB199AC851986CB149BF7F /* Vector3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector3.hpp; sourceTree = ""; }; + 40B5D84ECD183C3EF78823E7CF938746 /* KeyboardGameController.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = KeyboardGameController.deltamapping; path = "DeltaCore/Supporting Files/KeyboardGameController.deltamapping"; sourceTree = ""; }; + 40D398DE570B23AC84F4DA4086B43F5E /* workqueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = workqueue.h; sourceTree = ""; }; 40D3DBD12BF6940FC1A2BE76A08E5471 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/SDWebImageManager.h; sourceTree = ""; }; - 40FF365F801C636BEE21293A877B902E /* rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rtc.h; sourceTree = ""; }; - 411D37B4E9D47D9CD8974A08B548DE8C /* Roxas.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Roxas.modulemap; sourceTree = ""; }; - 412BAE19C4FAEF8D92FCDC3FF9A59FED /* Music.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Music.hpp; sourceTree = ""; }; - 412DB502B74306CF8DF0466A42864A4E /* ServiceOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ServiceOperation.swift; sourceTree = ""; }; - 413E31D8C1624AEAC8EE7570F0551194 /* ftconfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftconfig.h; sourceTree = ""; }; - 414ABC5418ACBADFD1E0682648431076 /* mic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mic.h; sourceTree = ""; }; - 416A8E69A7929028B4EDF36F7813BCDA /* scoped_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = scoped_ptr.h; sourceTree = ""; }; - 416AB7C47B6BD20BDB570AFCF32DA07F /* Listener.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Listener.hpp; sourceTree = ""; }; - 41BA2F4E4D2870FCE74225CB5BAA4CE5 /* lua-engine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lua-engine.h"; sourceTree = ""; }; + 40F516E9DDCDFF55309BF56900D3A6CA /* CRC32.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CRC32.h; sourceTree = ""; }; + 4126A8BF1768F9983511F2926680B88C /* glsl_CombinerProgramUniformFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramUniformFactory.cpp; sourceTree = ""; }; + 414687B042C1DA8223948CAE5D99FFA8 /* ClipPolygon.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ClipPolygon.cpp; sourceTree = ""; }; + 4154C14E31E1F470D6189218AA154654 /* FIFO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFO.h; sourceTree = ""; }; 41D95E73EB648CA0896C3360092052A9 /* SDWebImage.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.xcconfig; sourceTree = ""; }; - 422BF12649973F5EF2DBFD89FD150DC9 /* UIScreen+ControllerSkin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIScreen+ControllerSkin.swift"; sourceTree = ""; }; - 4277D9CD49D8F32314F512361BE4B690 /* NstBoardBmc150in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc150in1.hpp; sourceTree = ""; }; + 42052734B8AE23EA17D468F6CABDCEB7 /* debug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; + 420E3047C00A76F43CBE5EDA68BCCEF1 /* logger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = logger.h; sourceTree = ""; }; + 421D4EF2D9F1B9B43F5F0ADBF9EC0732 /* DSDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = DSDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 422A7E950D9644BA89560B6CC1EA1194 /* m64p_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_config.h; sourceTree = ""; }; + 423425F5988743735EC12578B4A52F5F /* ftsnames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsnames.h; sourceTree = ""; }; + 424AB45294CF56320B355DCE7A0F8E81 /* ftoutln.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftoutln.h; sourceTree = ""; }; + 42877B5C59DA3CE7FFC800C308596589 /* commandline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = commandline.h; sourceTree = ""; }; + 42884C54AC2951F6A1140B6F12823A61 /* libretro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libretro.h; sourceTree = ""; }; + 4293F313CBA439948FBF2F6EC87D6390 /* Time.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Time.hpp; sourceTree = ""; }; 42A9F4072A21C2D6095C0971EEC3FC1A /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + 42B13B5F43FDB8941F1473AB0E24A54D /* video.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = video.h; sourceTree = ""; }; + 42C3DAEC5A0976AE04AE5AC97395DF48 /* opengl_GraphicsDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_GraphicsDrawer.h; sourceTree = ""; }; + 42E8911C9890E3A93DD7CE8A4B3A27CC /* Savestate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Savestate.h; sourceTree = ""; }; + 42FC26095E2CF8823B3A9B88453B3901 /* scmrev.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = scmrev.h; sourceTree = ""; }; 43006531368CEA05883D7AB4553B591A /* Answers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Answers.h; path = iOS/Crashlytics.framework/Headers/Answers.h; sourceTree = ""; }; + 430D8BC642B862DC5871DCA6D4D4B26A /* NstBoardBmcHero.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcHero.hpp; sourceTree = ""; }; + 431243B7F84E2298319F60EF40D02386 /* NstBoardKonamiVrc2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc2.hpp; sourceTree = ""; }; + 431779F5BA85EA4F476E69CF0D2AEFD3 /* libhardware.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libhardware.h; sourceTree = ""; }; + 43281994AE91BE3DCE9CD0F6A87B1273 /* SoundFileReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileReader.hpp; sourceTree = ""; }; 432A5751918B766667F9CD8866666085 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; - 43449379BD1A98A6E5C5169A5F74E9AA /* RSTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTError.m; path = Roxas/RSTError.m; sourceTree = ""; }; - 435368F303983E9CA139C506A1FEDEDB /* fterrdef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fterrdef.h; sourceTree = ""; }; - 437F2293962BC32124208AB59C25F268 /* Syncable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Syncable.swift; sourceTree = ""; }; - 43B52186D0ADE3F0F74317B7F542BF3E /* TcpListener.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TcpListener.hpp; sourceTree = ""; }; + 436B7542629ABF7B0FFD6BB9B072FC21 /* NstProperties.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstProperties.hpp; sourceTree = ""; }; + 439530753701672255509E76BB1AC1D7 /* Result+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Dropbox.swift"; sourceTree = ""; }; + 43A3F7C375F5059943E7A8DB77319414 /* metaspu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = metaspu.h; sourceTree = ""; }; + 43CE808CD1AE36F53CED9431BA461025 /* NstBoardUnlTf1201.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlTf1201.hpp; sourceTree = ""; }; + 43D27CBEDCDDFA5D7CB760B22CEA6D23 /* NstInpOekaKidsTablet.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpOekaKidsTablet.hpp; sourceTree = ""; }; 4405793D5AF1EFD9D2BDA30AA0D2E514 /* libRoxas.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libRoxas.a; path = libRoxas.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 440D7ACB57B622DFF74C66B788D3B238 /* svttglyf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svttglyf.h; sourceTree = ""; }; - 442216A823D794BB8E292F6B3A6BB793 /* GraphicBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicBuffer.h; sourceTree = ""; }; + 442FF940EB7C16C5DB47BE217B7EAC51 /* GLFunctions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GLFunctions.cpp; sourceTree = ""; }; + 4455D697CDC2A6441EDD561195EFE9DB /* UITableViewCell+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+CellContent.h"; path = "Roxas/UITableViewCell+CellContent.h"; sourceTree = ""; }; 4476D277BAC65A966CF97717AC7EC945 /* Archive+Writing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Writing.swift"; path = "Sources/ZIPFoundation/Archive+Writing.swift"; sourceTree = ""; }; - 447F33D4AC9DCC18BA8E7C821EB936A8 /* NstApiSound.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiSound.hpp; sourceTree = ""; }; - 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GBCDeltaCore.xcconfig; sourceTree = ""; }; - 44B96F7B857F663A80AED6CFBCED2EE1 /* NSUserDefaults+DynamicProperties.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSUserDefaults+DynamicProperties.h"; path = "Roxas/NSUserDefaults+DynamicProperties.h"; sourceTree = ""; }; - 44D209BABFBAEF92A3A476D1046B160F /* Texture.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Texture.hpp; sourceTree = ""; }; - 44F1BD582E0D3BBA64326BDB9B1D6DDD /* NstBoardCaltron.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCaltron.hpp; sourceTree = ""; }; - 451269EF812651EDABF4A20D0D0EC707 /* bios.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bios.h; sourceTree = ""; }; - 452F83D3A133C01B2A14268F26D6EB29 /* TextureFilters_xbrz.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_xbrz.h; sourceTree = ""; }; - 453A43AE3933FBE73C478E25DB5E476A /* RSTLoadOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTLoadOperation.m; path = Roxas/RSTLoadOperation.m; sourceTree = ""; }; - 455C3A1951DCCE758C8B38B0D96D1745 /* NstBoardMmc3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc3.hpp; sourceTree = ""; }; - 456C9F03B0C75358971F5599710FB4AC /* NstBoardIremH3001.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremH3001.hpp; sourceTree = ""; }; - 45E7411B04ED1D693EAE8865EB4AB4A8 /* RSTCellContentCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentCell.h; path = Roxas/RSTCellContentCell.h; sourceTree = ""; }; - 46026D348B650E6C7D5C37EC52B80A8F /* DebugDump.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DebugDump.cpp; sourceTree = ""; }; - 46068669BC91126FFFEA59576128CCDD /* NstBoardBmcGamestarA.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGamestarA.hpp; sourceTree = ""; }; + 4495365E36E72B1DF9F8324A09B6DCB1 /* joybus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = joybus.h; sourceTree = ""; }; + 449B71A4095E57DA96AFDEEE78EB922C /* interpret.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interpret.h; sourceTree = ""; }; + 44EC5F94EE5BFE7A785C5541E9210F90 /* bldno.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bldno.h; sourceTree = ""; }; + 44FAD07D80BFEE0D325168C079FABD94 /* AboutDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AboutDialog.h; sourceTree = ""; }; + 450775B09B5A404AD4A5910F22DD06C9 /* DownloadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordsOperation.swift; sourceTree = ""; }; + 451CFB17CBEBD52220C6B8E9777016CB /* RSTLoadOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTLoadOperation.h; path = Roxas/RSTLoadOperation.h; sourceTree = ""; }; + 452F3BC887D4177C15C6B566333C123E /* NstBoardGouder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardGouder.hpp; sourceTree = ""; }; + 4541F12B3B53C045767B87EFB73A1AF3 /* svkern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svkern.h; sourceTree = ""; }; + 45858FC63D79F8CB87FFC7F4E24B4A91 /* RSTLaunchViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTLaunchViewController.m; path = Roxas/RSTLaunchViewController.m; sourceTree = ""; }; + 459B516EA16454D8B783A5E6A1106CDD /* NstBoardFutureMedia.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFutureMedia.hpp; sourceTree = ""; }; + 45D29114CAD3548F307C7BA691260F25 /* UITableView+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+CellContent.m"; path = "Roxas/UITableView+CellContent.m"; sourceTree = ""; }; + 45DE5EDAEF814543E00692730C996AC5 /* NstBoardUxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUxRom.hpp; sourceTree = ""; }; 4607BD69102AF97F0A85D6512B3409CD /* GTLRQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRQuery.h; path = Source/Objects/GTLRQuery.h; sourceTree = ""; }; - 46306F32408FC6EFC5F89D8105542A30 /* NESDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NESDeltaCore-umbrella.h"; sourceTree = ""; }; - 464088003409FF077A690AF31D685656 /* opengl_ColorBufferReaderWithEGLImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithEGLImage.h; sourceTree = ""; }; - 4659690ED156FCE3705F0C2B0C5811A4 /* UITableViewCell+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableViewCell+CellContent.h"; path = "Roxas/UITableViewCell+CellContent.h"; sourceTree = ""; }; - 4673DE422676A6A6E7634A30B5B9E722 /* ftautoh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftautoh.h; sourceTree = ""; }; - 469D6302B5E25E6593C1E213ED0B446A /* opengl_Attributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_Attributes.h; sourceTree = ""; }; - 469D72AF2CB4C2BC1AEBC6D96997F695 /* ZlutTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZlutTexture.h; sourceTree = ""; }; - 46A7952AAD31367ED9BE353AA63C8C99 /* UISpringTimingParameters+Conveniences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISpringTimingParameters+Conveniences.m"; path = "Roxas/UISpringTimingParameters+Conveniences.m"; sourceTree = ""; }; - 46A81EB457DC21D9C21932C473EB359A /* NSManagedObject+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Harmony.swift"; sourceTree = ""; }; - 475A94434453EF6E1D44C3894F12A473 /* F3DGOLDEN.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DGOLDEN.h; sourceTree = ""; }; - 47DCB70C7A85BDDF58BAF31BC42404A1 /* md5.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = ""; }; - 47EEB210C3F983E3F97BA5C90AEAE80C /* ControllerSkinTraits.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkinTraits.swift; sourceTree = ""; }; - 4805F8BC438B0132B2F50C26602B8DFA /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; - 480AE324EBF43D4B5582909423B482B4 /* NSConstraintConflict+Conveniences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSConstraintConflict+Conveniences.h"; path = "Roxas/NSConstraintConflict+Conveniences.h"; sourceTree = ""; }; - 482F462D88C4B5F90023E215B10AD635 /* GBI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GBI.cpp; sourceTree = ""; }; - 485C835BCAC9FE9D2D7A0723CC28AE49 /* DebugDump.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DebugDump.h; sourceTree = ""; }; - 485C8F569695892A8BF25E965F61DDE1 /* n64_cic_nus_6105.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = n64_cic_nus_6105.h; sourceTree = ""; }; + 46639CDFB2B4FF61588F77A4A2FFD6FE /* NstIoPort.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoPort.hpp; sourceTree = ""; }; + 46834904D33267E3CBEE319642FFC703 /* Config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; + 468999824D8EE841754A3B910A80F137 /* rdram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rdram.h; sourceTree = ""; }; + 46A2C9BD6F58478A775BFC3629531415 /* DropboxService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Files.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Files.swift"; sourceTree = ""; }; + 46CC56588A9249D29F68E981CE6C8B54 /* SNESEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESEmulatorBridge.h; sourceTree = ""; }; + 46E7ACB3EEB07EF50F5C2B657C683EC7 /* glxext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glxext.h; sourceTree = ""; }; + 4702731F2DEC76D99FCE88986919F6AC /* fxp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxp.h; sourceTree = ""; }; + 470E793A95CB16C839EC368EEC677A7D /* Roxas-Prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Roxas-Prefix.pch"; path = "Roxas/Roxas-Prefix.pch"; sourceTree = ""; }; + 47179FBED9A19BF96E05BC6C9E3056FB /* TxHiResCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxHiResCache.h; sourceTree = ""; }; + 471C4997518A7042AE098438B7958754 /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; }; + 47298EADB145DA1C5DC8A5C800E652FD /* F3DDKR.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DDKR.h; sourceTree = ""; }; + 472F4C1130957742B23FCBEAD0FC6E61 /* DepthBufferToRDRAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBufferToRDRAM.cpp; sourceTree = ""; }; + 4730257B4F5FB617F71989B24D9EF907 /* FullscreenResolutions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FullscreenResolutions.h; sourceTree = ""; }; + 4753C1496FC2EDB1151EF16865D566B5 /* NstVideoRenderer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoRenderer.hpp; sourceTree = ""; }; + 4777A754C8B992D16F19E6669E3983F8 /* NstBoardNamcot175.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot175.hpp; sourceTree = ""; }; + 478F2C8230CA263EC0A07EBCB8012403 /* svttcmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svttcmap.h; sourceTree = ""; }; + 47967D3CF2D6A2095CD6438231F82260 /* N64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = N64.swift; sourceTree = ""; }; + 47D47AFCF1385842685E8C07121C8BE8 /* SyncRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncRecordsOperation.swift; sourceTree = ""; }; + 47D78517301F4912E4BBA2A056C253E1 /* UIAlertAction+Actions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertAction+Actions.h"; path = "Roxas/UIAlertAction+Actions.h"; sourceTree = ""; }; + 47FFA445106E8AEF055315EC32F6416C /* NstBoardBmcGamestarB.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGamestarB.hpp; sourceTree = ""; }; + 48316C3FF62C94776726A1CAD59F2C64 /* Listener.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Listener.hpp; sourceTree = ""; }; + 48362C4E645985DF12660BB2415B0487 /* NstBoardFfe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFfe.hpp; sourceTree = ""; }; + 4848223D118C90C9C8D28CB320ECD889 /* TextureFilters_2xsai.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_2xsai.cpp; sourceTree = ""; }; + 486AA33DBD077F14429174C280495E58 /* pngpriv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngpriv.h; sourceTree = ""; }; 4871776B4C704E222EB93D062575DC5A /* Base.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Base.swift; path = Source/SwiftyDropbox/Shared/Generated/Base.swift; sourceTree = ""; }; 4873713B2974A1B7D8CB492B8921D329 /* Fabric.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Fabric.xcconfig; sourceTree = ""; }; - 4875A5F2894B64D59ABA846310074DDD /* pngerror.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngerror.c; sourceTree = ""; }; 487C7DB0A7257F16983BEF8324BEF561 /* NESDeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = NESDeltaCore.bundle; path = "NESDeltaCore-NESDeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; - 48A397662316360402E0600E571AD262 /* ThreadImpl.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadImpl.hpp; sourceTree = ""; }; + 487DD8DC7317E0C36210DD3B701C4E0C /* ftstdlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftstdlib.h; sourceTree = ""; }; 48A4A6EDC08C8AC933D0DCD507E9D173 /* libZIPFoundation.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libZIPFoundation.a; path = libZIPFoundation.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 48A852C211E587038DA4AA46F7C9B164 /* NativeActivity.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NativeActivity.hpp; sourceTree = ""; }; - 48CCDAD2D88669095B44ED625F56D7D0 /* TextureFilters_xbrz.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_xbrz.cpp; sourceTree = ""; }; - 4903CFCCF14E60B4FC1C1EFCB86ECE55 /* alist.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist.c; sourceTree = ""; }; - 490A6AF86E771A7376AA1B58EDEAE7EC /* ffmpeg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ffmpeg.h; sourceTree = ""; }; - 4935C2E2603C529A316EE9E50C953CA3 /* NstBoardSachen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachen.hpp; sourceTree = ""; }; - 496FED89B31EF5869368A5EC4A3DE18E /* Service.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = ""; }; - 49A05F402834F289E25A1D2D8D31ADA5 /* memory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = ""; }; - 49E2E93BB84159ECED9476CD991992C8 /* F3DAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DAM.cpp; sourceTree = ""; }; - 49EA3FD213D039FCC91628BD8DD260CA /* F3DEX2CBFD.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2CBFD.cpp; sourceTree = ""; }; - 49F843099C865EF969075D9084E1EE49 /* GraphicsDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicsDrawer.h; sourceTree = ""; }; - 4A32B8F42EA9A1885D2B08250359F9FC /* NstBoardKayH2288.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKayH2288.hpp; sourceTree = ""; }; - 4A571DDF52B0DE6907D9648064F9C203 /* Roxas-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Roxas-prefix.pch"; sourceTree = ""; }; - 4A684FB9EF326DE42BC2EDF06D0D6126 /* ManagedRecord+Predicates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Predicates.swift"; sourceTree = ""; }; + 48B7D69EC414883941231476116906D7 /* SaveStateProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SaveStateProtocol.swift; sourceTree = ""; }; + 48BF55C9520932E61BA7E91D0DE78B47 /* SoundStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundStream.hpp; sourceTree = ""; }; + 48CE2ACA6C2A3B34E052EB69D646F08D /* GBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GBC.swift; sourceTree = ""; }; + 48EEB005F713F595AFABDEDD7B122D6F /* DeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DeltaCore.xcconfig; sourceTree = ""; }; + 491A54EEB06C94D08F280F0DE9437646 /* NstBoardBmc76in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc76in1.hpp; sourceTree = ""; }; + 49479F202B609744C82D4138F8FCD9CE /* NstBoardDxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDxRom.hpp; sourceTree = ""; }; + 4947A8614B4C6559E330C41CE046A147 /* VideoFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoFormat.swift; sourceTree = ""; }; + 494D29438728759A64CEF3DAFF79CE8A /* EmulatorCore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EmulatorCore.swift; sourceTree = ""; }; + 495697E3F178E65EB3DA72E358CB964A /* NstBoardBmc8157.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc8157.hpp; sourceTree = ""; }; + 4963CF582BB4AB9E1079BB9ACCA4C395 /* libco.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libco.h; sourceTree = ""; }; + 4964760304F643497DF38EA719CD28CA /* NstBoardExRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardExRom.hpp; sourceTree = ""; }; + 49C63527B0BFABA381E737722D9FCB11 /* NoiseTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NoiseTexture.h; sourceTree = ""; }; + 49F7BDDB3C4AACF9488005884AA49676 /* cpumacro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpumacro.h; sourceTree = ""; }; + 4A182802B17188F847B92490A82541B0 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = SNESDeltaCore/Standard.deltamapping; sourceTree = ""; }; + 4A1DFA16FF297CF6D496D8299BD6B3A4 /* ftrfork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftrfork.h; sourceTree = ""; }; + 4A2ED9639F26522F182428771C311F1A /* Sleep.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sleep.hpp; sourceTree = ""; }; + 4A30748039EF71CC3D3BC9D7293442A7 /* NstInpFamilyTrainer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpFamilyTrainer.hpp; sourceTree = ""; }; 4A6CEB53419EF6042E06B56676D1DAF8 /* DSDeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = DSDeltaCore.bundle; path = "DSDeltaCore-DSDeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; - 4AA3FD3271A56236EDAF6E49599021BA /* pngwio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwio.c; sourceTree = ""; }; - 4AAA4EBFA294D12114F5AAAB4941BFC2 /* NstBoardDreamtech.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDreamtech.hpp; sourceTree = ""; }; - 4B02B3B5A0036A6726FBD9167A2946A9 /* OGLRender_3_2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLRender_3_2.h; sourceTree = ""; }; + 4A71F2279611250A8163A19A68C100B6 /* GBCCheat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCCheat.h; sourceTree = ""; }; + 4A827256CC16710474531DFA7ECE526F /* alist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = alist.h; sourceTree = ""; }; + 4A835642A0FF668D9565F7122EDF06B1 /* musyx.c */ = {isa = PBXFileReference; includeInIndex = 1; path = musyx.c; sourceTree = ""; }; + 4AB8A827FC69B7712131051BF7CDAEBF /* assem_arm64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_arm64.h; sourceTree = ""; }; + 4ACD840C16D41B8494693E00BF6094C9 /* NstInpDoremikkoKeyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpDoremikkoKeyboard.hpp; sourceTree = ""; }; + 4ADEEFFAB7CD01EA4E844F0F78DBC0E1 /* ftstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftstream.h; sourceTree = ""; }; 4B0CD3AC5CF344D777C591A59C269664 /* SeenState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SeenState.swift; path = Source/SwiftyDropbox/Shared/Generated/SeenState.swift; sourceTree = ""; }; - 4B51F40AD66946C956A3C40AF6E4E5E6 /* Config.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Config.hpp; sourceTree = ""; }; - 4BBE3A12499742BD09D9EBD2B293371C /* HarmonyMetadataKey+Keys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "HarmonyMetadataKey+Keys.swift"; sourceTree = ""; }; - 4BD0DDE5441618EF592651345A1BB212 /* NstBoardUnlSuperFighter3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlSuperFighter3.hpp; sourceTree = ""; }; - 4BD2DEDB678D75D5ACAAB02F7DA550CA /* crosshairs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = crosshairs.h; sourceTree = ""; }; - 4BE2E896D06C7357E3D03BBCFA7DAC96 /* Platform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Platform.h; sourceTree = ""; }; - 4C032B7F3EF8BBC968A5EB242CD96FDF /* pif.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pif.h; sourceTree = ""; }; + 4BC3502E8ED4D5961B6483AA4C0E4E65 /* winlnxdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = winlnxdefs.h; sourceTree = ""; }; + 4BEF6E27DC400F7587941CD3E2668F89 /* NSBundle+Extensions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+Extensions.h"; path = "Roxas/NSBundle+Extensions.h"; sourceTree = ""; }; 4C0BA17B21F19930A3F7215B702D7372 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/SDWebImageManager.m; sourceTree = ""; }; - 4C1AEA30A7ED0128954BF3C163D0526F /* ObjectHandle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ObjectHandle.cpp; sourceTree = ""; }; - 4C269A9412FC718CE8C8E996630F5873 /* svpsinfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpsinfo.h; sourceTree = ""; }; - 4C7AF11CE5076877102C9C295769C622 /* firmware.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = firmware.h; sourceTree = ""; }; - 4CCF50735B54E7E32704485AE919ABB5 /* FIFO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFO.h; sourceTree = ""; }; - 4CEF1CF6322D0D33545A1E86B80C6505 /* assem_arm64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_arm64.h; sourceTree = ""; }; - 4D0235C98A504B6ACCDF616BA0368556 /* CharacterSet+Hexadecimals.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "CharacterSet+Hexadecimals.swift"; sourceTree = ""; }; - 4D42075157F824B1040606B316473092 /* Harmony-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Harmony-dummy.m"; sourceTree = ""; }; + 4C18B2ECEE548A1C91E8FE550A347BFB /* opengl_ContextImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ContextImpl.cpp; sourceTree = ""; }; + 4C22C82316853ABB688358B93486CF8E /* libMelonDSDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libMelonDSDeltaCore.a; path = libMelonDSDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C59CCAD19BF6E186912BBD6E16E4AF4 /* NstBoardMxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMxRom.hpp; sourceTree = ""; }; + 4C5BAA938FFA460E1B80ECB271C8B9D9 /* inputgetter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = inputgetter.h; sourceTree = ""; }; + 4C7136242783A97DD4FA174D6AD000A7 /* DSDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DSDeltaCore-umbrella.h"; sourceTree = ""; }; + 4C82EFB2F13ACDF594E201C36E2BE936 /* array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = ""; }; + 4D5205D694ADD50234921E3DEB5D957D /* TouchInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TouchInputView.swift; sourceTree = ""; }; + 4D58E3495B9E3434BF573543720CB50E /* ai_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ai_controller.h; sourceTree = ""; }; 4D625C34AD086F4A90C4372F2BED7491 /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; - 4DB5EBAC052F23A23935BC01F0F3BD13 /* F3DSETA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DSETA.cpp; sourceTree = ""; }; 4DB7F32ED8575A87699DF593661DBD4B /* Data+Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Compression.swift"; path = "Sources/ZIPFoundation/Data+Compression.swift"; sourceTree = ""; }; - 4DC0729F6C80B77D9248BFEFE0B0F039 /* String.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = String.hpp; sourceTree = ""; }; - 4DDA965CE8714B275AFFEDDF6DC053CB /* NstBoardGouder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardGouder.hpp; sourceTree = ""; }; - 4DDEBD072685DD4E5D03FC470004711B /* NstBoardBmcSuperHiK300in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperHiK300in1.hpp; sourceTree = ""; }; - 4DEB79CC55673435872F4AC4127BD0B0 /* RSTRelationshipPreservingMergePolicy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTRelationshipPreservingMergePolicy.m; path = Roxas/RSTRelationshipPreservingMergePolicy.m; sourceTree = ""; }; - 4E413CD260AC5D4938501D07A19728DF /* TxQuantize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxQuantize.h; sourceTree = ""; }; + 4DCDABB34A5BDA633CA1B6972D7D76E1 /* gambatte.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gambatte.h; sourceTree = ""; }; + 4E1E1F9090B631F29A327D322AFF5B4E /* NstInpMouse.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpMouse.hpp; sourceTree = ""; }; 4E4A59F776B62FE5D7D647BF19F07F8E /* StoneValidators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoneValidators.swift; path = Source/SwiftyDropbox/Shared/Generated/StoneValidators.swift; sourceTree = ""; }; 4E4A6FA078E5D38752214D65807E3B87 /* GTMSessionFetcherLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionFetcherLogging.h; path = Source/GTMSessionFetcherLogging.h; sourceTree = ""; }; - 4E669C711147F6173C46040444135A2D /* UISpringTimingParameters+Conveniences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISpringTimingParameters+Conveniences.h"; path = "Roxas/UISpringTimingParameters+Conveniences.h"; sourceTree = ""; }; - 4E7E27D5ACEAA8A8DA1B1BD200ED75A2 /* netplay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = netplay.h; sourceTree = ""; }; - 4E9E01B822B1A73A97B8C2E46EDEF08A /* statemanager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = statemanager.h; sourceTree = ""; }; - 4EC7300212B3C57CD396DDC7242519F3 /* apu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = apu.h; sourceTree = ""; }; - 4ED141EBC657EC07C8D65BCD12249B41 /* glsl_CombinerProgramUniformFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramUniformFactory.h; sourceTree = ""; }; - 4EDFE6FDF5489F61CF533AAB848DEC32 /* AlResource.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = AlResource.hpp; sourceTree = ""; }; - 4EFC0CB26048698A849DD6BD85E55424 /* Joystick.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Joystick.hpp; sourceTree = ""; }; - 4F5BF7EF7AAE901FB3EF08FEB9603AEE /* NstPatcher.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcher.hpp; sourceTree = ""; }; + 4E6419448B960F583D9AD9ECC8EC8B7D /* NstBoardKayPandaPrince.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKayPandaPrince.hpp; sourceTree = ""; }; + 4E6CEEF9383BEA7F879EA4F942833796 /* NstBoardNitra.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNitra.hpp; sourceTree = ""; }; + 4E75A6CD77FDC5730599F170C8A47DC0 /* retro_dirent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_dirent.h; sourceTree = ""; }; + 4F066AA72AF013DB424E69E221FDA626 /* stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = stream.h; sourceTree = ""; }; + 4F6407C6FBA4E320D564FF013EBEDCF4 /* Dictionary+Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Dictionary+Sequence.swift"; sourceTree = ""; }; 4F751BB6AC156EB594F059E95D44A853 /* GoogleToolboxForMac.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleToolboxForMac.modulemap; sourceTree = ""; }; 4F8D603EBE941AC871B0A2F47AD5B6D5 /* Pods-Delta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Delta-dummy.m"; sourceTree = ""; }; - 4FCA09C91A2EF02A01FA5D74C5F06804 /* KeyboardResponder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardResponder.swift; sourceTree = ""; }; - 504F1B8F7739C07C121A17267D9DC80F /* NstBoardFb.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFb.hpp; sourceTree = ""; }; - 5067F54BACFB55351717D53F24D5E781 /* pngstruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; - 50A10752DB4054391124647027696A55 /* TxUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxUtil.cpp; sourceTree = ""; }; - 50B2D8F8859A064B41E83B36809CD1EE /* FullscreenResolutions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FullscreenResolutions.h; sourceTree = ""; }; + 4FD9C6FE532DA80FB560837003DB3F08 /* NstBoardCamerica.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCamerica.hpp; sourceTree = ""; }; + 4FF5B91527E584477B10719112BEA1B6 /* ftlist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlist.h; sourceTree = ""; }; + 500E8615D96CF177F4C3273482988B11 /* Bundle+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Bundle+Resources.swift"; sourceTree = ""; }; + 502A6CD60EBBE6E5ABFA9CD22B78AEE5 /* InputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = InputStream.hpp; sourceTree = ""; }; + 5033ACF3304F791248B9A86346AD675C /* NstIoMap.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoMap.hpp; sourceTree = ""; }; + 5046B6E78EA1FD56CEB696532A667D56 /* controls.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = controls.h; sourceTree = ""; }; + 507AEE0DE905FE749721BA983355BC23 /* CombinerProgram.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CombinerProgram.cpp; sourceTree = ""; }; + 507E5C05C910EB9C2351B7FDAC89B9AE /* Mouse.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Mouse.hpp; sourceTree = ""; }; + 508001DB6BE4336BE73C646FCBC54782 /* clamping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clamping.h; sourceTree = ""; }; + 508153374379761825956DE2D625E976 /* TxTexCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxTexCache.h; sourceTree = ""; }; + 50820F9A436F4E4AA63F4442C71C4DBC /* Harmony.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Harmony.modulemap; sourceTree = ""; }; + 50942AB189B9EA5A4CCBCC5F4E94B58C /* movie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = movie.h; sourceTree = ""; }; + 50AE585204C42DE0E82204B2336C8C73 /* UdpSocket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = UdpSocket.hpp; sourceTree = ""; }; + 50B7464DE19879312AD16F0F9584E7C7 /* NstBoardSunsoft2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft2.hpp; sourceTree = ""; }; 50BD32E959F332B2734900E76DAB58D2 /* GTLRObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRObject.m; path = Source/Objects/GTLRObject.m; sourceTree = ""; }; - 50CB5AEC945198AAFCB4B3596F9CC624 /* RSTArrayDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTArrayDataSource.m; path = Roxas/RSTArrayDataSource.m; sourceTree = ""; }; - 50FBE486AFEBB34A067A593F41720663 /* opengl_GraphicsDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_GraphicsDrawer.h; sourceTree = ""; }; + 50CB8263181606A93C7C4DB62B954BCC /* GameViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = ""; }; + 50D957B423EE92BE50F11FBFBB2F7951 /* NstBoardJalecoJf16.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf16.hpp; sourceTree = ""; }; + 510A47958AB211D60455C0DBFCFF190A /* NstTracker.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTracker.hpp; sourceTree = ""; }; 5117CC789D8C47E9B0F2888AB14F3E74 /* GTLRDriveQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDriveQuery.h; path = Source/GeneratedServices/Drive/GTLRDriveQuery.h; sourceTree = ""; }; 51196ADA4CCEDC1501A36E7771844D40 /* CLSStackFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSStackFrame.h; path = iOS/Crashlytics.framework/Headers/CLSStackFrame.h; sourceTree = ""; }; 51271E29C0A54F7A1326245A7BE21051 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/NSData+ImageContentType.h"; sourceTree = ""; }; - 517688C527284043BBF5D64716B79E5E /* Roxas.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Roxas.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 51A794B9A074BF2025C358E236D42F05 /* NstBoardTaito.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaito.hpp; sourceTree = ""; }; - 51F387B6A186310DE8AB25011DB2D480 /* alist_naudio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_naudio.c; sourceTree = ""; }; + 512C4AAABBC20D346C24998DFEE5AFA1 /* BreakpointStructures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BreakpointStructures.h; sourceTree = ""; }; + 5131F9EE375D77DAA9870F13B4698A6C /* TxUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxUtil.cpp; sourceTree = ""; }; + 514762CD1DB6A2350BA5EE10914786CD /* NSBundle+Extensions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+Extensions.m"; path = "Roxas/NSBundle+Extensions.m"; sourceTree = ""; }; + 51AE0D8A1BA524D7E3E2B194F7CE4A37 /* NstCartridge.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridge.hpp; sourceTree = ""; }; + 51C536521365129A5FF9AE40DDF753F8 /* Debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Debugger.h; sourceTree = ""; }; + 51E7C0C33B47A7D708AB3CF66AF1137D /* UIImage+PDF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIImage+PDF.swift"; sourceTree = ""; }; 5217968080F1594E30A54230FEEE2E88 /* GoogleAPIClientForREST-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleAPIClientForREST-dummy.m"; sourceTree = ""; }; - 521E061C02DD904E7838383DE2E1B0CF /* exprNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = exprNode.h; sourceTree = ""; }; - 5221F56A802033E50A6CA3492E382A3C /* NstBoardKonamiVrc3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc3.hpp; sourceTree = ""; }; - 5233AE6CB42C097DA937081AB4814A39 /* NstBoardFujiya.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFujiya.hpp; sourceTree = ""; }; - 52373DA4A745FB2484B38C3DBF6F4512 /* NstBoardBmcFamily4646B.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcFamily4646B.hpp; sourceTree = ""; }; - 52468FE08B22885CDC155AF176219E41 /* NstBoardBmcFk23c.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcFk23c.hpp; sourceTree = ""; }; - 524FD8CB9B96FEC42DEBFF4F6485E0C0 /* NstBoardBandaiAerobicsStudio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiAerobicsStudio.hpp; sourceTree = ""; }; - 525B2A3CC0AB6E54AFD0C4CAE7B17B9D /* SDL_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_config.h; sourceTree = ""; }; + 5231969A4CEB871747903C8249FAAB98 /* NstSha1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSha1.hpp; sourceTree = ""; }; + 523D82D262DC8E536D345567D04FF3F5 /* SDL_opengles2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2.h; sourceTree = ""; }; + 5277A427B540B8A971E15DE8732388E9 /* hle_external.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle_external.h; sourceTree = ""; }; + 527AC22A3208696A410615506A968BEF /* File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = ""; }; 5291FC66BF51E30DA83DE18DA93737CB /* SwiftyDropbox.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyDropbox.modulemap; sourceTree = ""; }; 5294532669D6FD1AE4D2A9F8C4A86C90 /* GoogleToolboxForMac.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleToolboxForMac.xcconfig; sourceTree = ""; }; - 52CF632514D6A787809AE4E842F41C5E /* Clock.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Clock.hpp; sourceTree = ""; }; - 52EF51E3091C9D586B56E01C7A9F0C53 /* NstInpRob.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpRob.hpp; sourceTree = ""; }; - 5385CA919BFDAA02107CE76AD241472B /* NstBoardNamcot163.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot163.hpp; sourceTree = ""; }; - 538F7789F2608728E516881281A64037 /* glsl_SpecialShadersFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_SpecialShadersFactory.cpp; sourceTree = ""; }; - 539542F40794BD9C9D5856536A7CA2EC /* spc7110dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110dec.h; sourceTree = ""; }; - 53A3C2A5341545B46CCEF6C7DCCC3D12 /* callbacks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; + 52AFA2BBC1A97735195FCE0F072444DD /* String.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = String.hpp; sourceTree = ""; }; + 52D0F4C76483E71C2F01319F14942730 /* RSTNavigationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTNavigationController.h; path = Roxas/RSTNavigationController.h; sourceTree = ""; }; + 52F99D4811CD8DBB2B4EDC0AB616E6B4 /* ereader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ereader.h; sourceTree = ""; }; + 52FF008EAD8518503CF4BE5EDABF7FD3 /* N64DeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "N64DeltaCore-dummy.m"; sourceTree = ""; }; + 530422F5717AFED3153BFF2D2284D3E5 /* ColorBufferToRDRAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ColorBufferToRDRAM.cpp; sourceTree = ""; }; + 531E9AB4F828520F2368955170BA41BB /* ftobjs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftobjs.h; sourceTree = ""; }; + 535C2901C00E7283DD28013BBBC6CA4F /* GraphicBufferWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicBufferWrapper.h; sourceTree = ""; }; + 535D5DA336441168AC8B025DD167FF5A /* F3DAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DAM.cpp; sourceTree = ""; }; + 5393A36A3C22644206D6D5187A6B0285 /* DeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DeltaCore-dummy.m"; sourceTree = ""; }; 53A730F4F4248E7E3F38F8409A2DE97C /* libSMCalloutView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSMCalloutView.a; path = libSMCalloutView.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 53B591BF7B60187B760A42DB71431BB9 /* NstBoardTengen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTengen.hpp; sourceTree = ""; }; + 53E9A117D241958D71059796ACCE24C6 /* cpuops.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuops.h; sourceTree = ""; }; + 53E9D1B37411CE1669CA533059362960 /* Performance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Performance.cpp; sourceTree = ""; }; + 5414A0A2C2B0F58D727F258C7536FAEC /* ringbuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = ""; }; 542213FAAE95E6EA5E3E9392D8DD3B49 /* OAuth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OAuth.swift; path = Source/SwiftyDropbox/Shared/Handwritten/OAuth.swift; sourceTree = ""; }; - 54254E0189355E5C8E760E6CEB171480 /* Record.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Record.swift; sourceTree = ""; }; 5456371B4D7DC880854562F4F53807C1 /* DropboxClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxClient.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxClient.swift; sourceTree = ""; }; 5466366B9F12E1CFE3A59B79884E3E1D /* GoogleToolboxForMac-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleToolboxForMac-prefix.pch"; sourceTree = ""; }; - 546B78B239F8467F1682E4319F7B44FB /* ftdriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftdriver.h; sourceTree = ""; }; 54D7EAAB9EB13A07D24F1B8561B5C617 /* SQLite.swift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-prefix.pch"; sourceTree = ""; }; - 54EB6E02433DBB4599FF9FECA6F74BEC /* NstBoardWaixing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixing.hpp; sourceTree = ""; }; + 54E344C5AAB8C3DD6DD45E7BEA14951D /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; 54ECA01A22C32DC89AB39DF9BFFD5FB6 /* DeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = DeltaCore.bundle; path = "DeltaCore-DeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; - 555DB2B83943DAFAC8FBDB0E065CCC16 /* Util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Util.h; sourceTree = ""; }; - 55B412A3E753F75718995BBB767197FD /* File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = ""; }; - 55D03E3855F24EC46248235CA4AB84AE /* NstBoardBandaiKaraokeStudio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiKaraokeStudio.hpp; sourceTree = ""; }; + 54ED6F866B4324DFC72570435F1EBD41 /* dma.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dma.h; sourceTree = ""; }; + 5536CF5E11B5E15ED66757BB394C8694 /* game_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = game_controller.h; sourceTree = ""; }; + 55532BC2B4B4E3B9BF96424544F7A510 /* rumble_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rumble_backend.h; sourceTree = ""; }; + 55823D54327ED2C23F433C3F864E151A /* ARMInterpreter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARMInterpreter.h; sourceTree = ""; }; + 55871AB19F8B639CFD102F69EAED1E93 /* WavFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WavFile.h; sourceTree = ""; }; + 558ABB8E63AEB6155C40A551D88F9123 /* ConfigManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ConfigManager.h; sourceTree = ""; }; + 558BFA270FA2F23C320E11E090A7662E /* NSPredicate+Search.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSPredicate+Search.m"; path = "Roxas/NSPredicate+Search.m"; sourceTree = ""; }; + 55A7E5964AAB52C30CA7C4233CDB81F1 /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = ""; }; 55E6130B2C30062EF18AFC05336D16E6 /* ZIPFoundation-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-prefix.pch"; sourceTree = ""; }; - 56359FB46FDD3587DC048FBE0BC7E9E1 /* NonCopyable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NonCopyable.hpp; sourceTree = ""; }; - 56521BBB435C7A22CFF991B7B01066DE /* zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = zlib.h; sourceTree = ""; }; + 560CD792E13012FE41D46832508B9D30 /* NstBoardBtlPikachuY2k.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlPikachuY2k.hpp; sourceTree = ""; }; + 560F98A5E3D6842B976BE9CCD21AF72C /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + 56244C2165C1707D7E72E9B0F3441A1D /* PrimitiveType.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PrimitiveType.hpp; sourceTree = ""; }; + 567D8A08CDBDC5DA06BFD1DC70DF4E1C /* crosshairs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = crosshairs.h; sourceTree = ""; }; + 56CCBC3C2C82EBF029DCEE7C08413CD2 /* NstBoardBmc22Games.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc22Games.hpp; sourceTree = ""; }; + 56D472264507A3544C43D6606FB37390 /* NstBoardSomeriTeam.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSomeriTeam.hpp; sourceTree = ""; }; + 57067E8C28EB51D8DC120B70B3A966CF /* fttypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fttypes.h; sourceTree = ""; }; + 5735CEBEDBCB212533CE2D0112224D5C /* DepthBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBuffer.h; sourceTree = ""; }; + 5757E6631870746B4C21422C420F062C /* xxhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; 578F350CDE9D940384DFB5636F635219 /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/UIButton+WebCache.m"; sourceTree = ""; }; - 57934C5612E8312E8D46FB26A52FE946 /* state_osd_elements.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = state_osd_elements.h; sourceTree = ""; }; - 57D0C008F4F6ABB93A720C171837F7EA /* UICollectionViewCell+Nibs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+Nibs.h"; path = "Roxas/UICollectionViewCell+Nibs.h"; sourceTree = ""; }; - 57F1FC93C4F0049F6CC1DE462EAD9871 /* retro_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_common.h; sourceTree = ""; }; - 580B1B5358971578E8D067CD87CCA4EE /* convert.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = convert.cpp; sourceTree = ""; }; - 582940D574BD4B0474117DA6BE586566 /* resource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = ""; }; - 5844DE373A9FE031984BEA797C1C7A39 /* alist_nead.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_nead.c; sourceTree = ""; }; - 587FE8C376C86B170BA2C85960B06B3F /* Sound.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; }; - 58ADB3F7E23F3C6F3AEB1D5017488FDC /* oglft_c.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = oglft_c.h; sourceTree = ""; }; - 58B5E7D372F81123297C2A52505FD923 /* hle_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle_internal.h; sourceTree = ""; }; - 58E928D560BC439381C0BD2BAE388083 /* m64p_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_types.h; sourceTree = ""; }; - 58F426BB1C791A20225DADEEE031718A /* NstBoardQj.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardQj.hpp; sourceTree = ""; }; - 5901F945E4B7BD8E993A572C8320D4E8 /* NstBoardAveNina.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAveNina.hpp; sourceTree = ""; }; - 593CF251B99826ECC39AE11BE6568BFF /* WindowHandle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = WindowHandle.hpp; sourceTree = ""; }; - 595E9C1882A362C695C4D22B2193663E /* sdl_key_converter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdl_key_converter.h; sourceTree = ""; }; - 5974CDB2492B4BFA5566A1D118F12B98 /* bldno.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bldno.h; sourceTree = ""; }; - 59F17550D814845B484B295BDDA7E52E /* T3DUX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = T3DUX.cpp; sourceTree = ""; }; - 5A01843AE7F8A9690F749CE033E441E4 /* ftbzip2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbzip2.h; sourceTree = ""; }; - 5A0B7AABE64CE3CFD6CBD4F335F9FBE1 /* ftserv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftserv.h; sourceTree = ""; }; - 5A201B11504778569D1F2D7EB83668E6 /* DeltaCoreProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeltaCoreProtocol.swift; sourceTree = ""; }; - 5A43F1D8E9F0EE020CB6D17932CE6292 /* GBADeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBADeltaCore.h; sourceTree = ""; }; + 580A41D76B6A843244232FFC7D187FF1 /* dictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dictionary.h; sourceTree = ""; }; + 582F8C63B9BF01FB8537FCBB2196C589 /* list.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; + 585857562D0E1129BE114DD8982CFEAC /* Util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Util.h; sourceTree = ""; }; + 5874E00381FC42362866EFFB712A5697 /* F3DAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DAM.h; sourceTree = ""; }; + 5884B3D9687E41073D6AE9F4960640D8 /* NstBoardSuperGamePocahontas2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGamePocahontas2.hpp; sourceTree = ""; }; + 58B3B095F9C98257ED03FF6BA75F6CC6 /* pngwrite.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwrite.c; sourceTree = ""; }; + 58E06EE5B6AC0AC69AFF39EDEB578E6E /* NstBoardBtlSmb3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb3.hpp; sourceTree = ""; }; + 592333B6A8CE7E474E19C151AE976FBE /* skipsched.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = skipsched.h; sourceTree = ""; }; + 593847BA38E9D8A068903E6A731921D5 /* svxf86nm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svxf86nm.h; sourceTree = ""; }; + 5967CB93E1B68FCF175E97CD13D10CFD /* BatchRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BatchRecordOperation.swift; sourceTree = ""; }; + 5986D113E80DE6E1FCE1BF2079E6B442 /* pngrio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrio.c; sourceTree = ""; }; + 599BB76DE3FA8F63E0E23EA8BAFD278B /* NstBoardMmc3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc3.hpp; sourceTree = ""; }; + 59A2650A6455EC2EFC3FA9F2C0886519 /* SoundBuffer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundBuffer.hpp; sourceTree = ""; }; + 59DA3AD3BCE17B64234F6C8CDB4FAA0A /* NstBoardTengenRambo1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTengenRambo1.hpp; sourceTree = ""; }; + 59E4444E0AA576955C9370592EBB6D96 /* NstMachine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstMachine.hpp; sourceTree = ""; }; + 59F8B6172F22E2155F8670897E6C81D6 /* CRC32.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CRC32.cpp; sourceTree = ""; }; + 5A4CBD7EC311541871920C24EA2D9548 /* RSTCompositeDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCompositeDataSource.h; path = Roxas/RSTCompositeDataSource.h; sourceTree = ""; }; 5A52DF3CA0011FA99AF644362B09A598 /* DBChunkInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBChunkInputStream.h; path = Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.h; sourceTree = ""; }; - 5A73FCE0E18FBE8EBCCEB74397FEC76A /* NstInpPachinko.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPachinko.hpp; sourceTree = ""; }; + 5A674E3827F841F30D860E8844750409 /* m64p_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_common.h; sourceTree = ""; }; + 5A684B9BC0FD9B61CE70469E6CF6BA3C /* UploadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordsOperation.swift; sourceTree = ""; }; 5AB3CC30BCD19485A7A87DB2D78E2BA1 /* GTMSessionUploadFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionUploadFetcher.h; path = Source/GTMSessionUploadFetcher.h; sourceTree = ""; }; - 5AC3A6B0034D34F9209BBD58348B9047 /* Window.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Window.hpp; sourceTree = ""; }; - 5B314596089C9694EA48772E604953E9 /* Parameter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Parameter.h; sourceTree = ""; }; - 5B3906E0F867AD7DBE110BED3C71FCD8 /* NstBoardBmcNovelDiamond.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcNovelDiamond.hpp; sourceTree = ""; }; - 5B549F21788F17AE386F9C9F83BACC06 /* ClipPolygon.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ClipPolygon.cpp; sourceTree = ""; }; - 5B818731B433680AC0669D4C8ECB8E13 /* ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist"; sourceTree = ""; }; - 5BACFFAA0E0BD975E90FF29D6B33B0B3 /* clock_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clock_backend.h; sourceTree = ""; }; + 5AF44E99CDEC34FBD91AFEE4DACFD88A /* RemoteFile+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+File.swift"; sourceTree = ""; }; + 5B2E58A2772EA93AA7DC5A5022F51297 /* MelonDSDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MelonDSDeltaCore.xcconfig; sourceTree = ""; }; + 5B4B6B605F69B9997410194A1E0CB31D /* NstBoardBmcSuper700in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper700in1.hpp; sourceTree = ""; }; + 5B5206BC0DB3FB590107A53EBAE4647D /* opengl_UnbufferedDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_UnbufferedDrawer.cpp; sourceTree = ""; }; + 5B7D93006047AEA1B2086CF5FEC0FAEC /* ftttdrv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftttdrv.h; sourceTree = ""; }; + 5BADB99077105EDA2AC1C52C4AB7EFAE /* GBCDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GBCDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 5C1B35A10293013EB1FF554F7BEB76DC /* GTLRService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRService.h; path = Source/Objects/GTLRService.h; sourceTree = ""; }; - 5C44BBA15DF8CEE92A417577E4C1D5D9 /* NstBoardBandaiLz93d50ex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiLz93d50ex.hpp; sourceTree = ""; }; - 5C52587C427298A7375DC3C3DADBC541 /* ftpfr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftpfr.h; sourceTree = ""; }; - 5C64FD116A93B9A66533D1BA551BF885 /* NstBoardEvent.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardEvent.hpp; sourceTree = ""; }; - 5C6513BE3B8C4EE62832D30F3B73EE32 /* NstInpBandaiHyperShot.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpBandaiHyperShot.hpp; sourceTree = ""; }; + 5C31FD97E461D0628F310200A8D3B403 /* pnginfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pnginfo.h; sourceTree = ""; }; + 5C35BC9F77F23B687515FC8958549CA1 /* L3DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3DEX.h; sourceTree = ""; }; + 5C643171D31A2715E757D5F42F63F495 /* DownloadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordOperation.swift; sourceTree = ""; }; + 5C680EA14E1BCE635BDC66F5CEF30F4B /* ZlutTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZlutTexture.h; sourceTree = ""; }; + 5C84A3CF371C057839A68C574D020120 /* biopak.c */ = {isa = PBXFileReference; includeInIndex = 1; path = biopak.c; sourceTree = ""; }; + 5C888A9E68F5D9C40535BB25A042E10F /* Textures.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Textures.cpp; sourceTree = ""; }; 5C8D94F40BF63E8927B70BB024B0F136 /* Connection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Connection.swift; path = Sources/SQLite/Core/Connection.swift; sourceTree = ""; }; - 5C906D0B80F5FF86C1D338A347708D05 /* NstInpZapper.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpZapper.hpp; sourceTree = ""; }; - 5C912B946BDF259EF135410F6A5237EA /* UIResponder+FirstResponder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIResponder+FirstResponder.swift"; sourceTree = ""; }; - 5CD922BCE2DF46F11E7202475E037EF6 /* conffile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = conffile.h; sourceTree = ""; }; - 5D08BCF7193B533EB2AF5071C88F1E40 /* GLFunctions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GLFunctions.cpp; sourceTree = ""; }; - 5D2215E3C485C95C307BE07BC62D0E65 /* glsl_ShaderPart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_ShaderPart.h; sourceTree = ""; }; - 5D28BE3E5AFE58F245865607BE7171E8 /* PluginAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PluginAPI.h; sourceTree = ""; }; - 5D654A5B901E387BCEA877A4F4B1FC31 /* FrameBufferInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FrameBufferInfo.cpp; sourceTree = ""; }; + 5C9FC5FCE0B5F88A589CF0363028B43C /* NstBoardTaito.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaito.hpp; sourceTree = ""; }; + 5CC102BAEF4C8D771A86539CC220A5A5 /* NstApiEmulator.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiEmulator.hpp; sourceTree = ""; }; 5D72BB4EABA02D0C40C9847B11342161 /* PaperRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PaperRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/PaperRoutes.swift; sourceTree = ""; }; + 5D7960122A08AC82F9286C7A2E2275F2 /* NstBoardBmc15in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc15in1.hpp; sourceTree = ""; }; 5D797E9A5C5782CE845840781FA1CC81 /* libAlamofire.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libAlamofire.a; path = libAlamofire.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5DBAD979C7A7D60BB2463567CEF807D0 /* cpuops.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuops.h; sourceTree = ""; }; - 5DC0155465127BC9B36185F96DDCAB75 /* opengl_Utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Utils.cpp; sourceTree = ""; }; - 5DCDE4D17E50CB5CCFB03F65E6287BF0 /* F3DPD.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DPD.cpp; sourceTree = ""; }; - 5DE84C1C459F13BAD44A6B87EDA3189E /* zconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = zconf.h; sourceTree = ""; }; + 5DDB31BEBA1AF6B8AA83AFE0B4A2D7EE /* instructions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instructions.h; sourceTree = ""; }; + 5E0F87CCF191867B903270F7A2973CA2 /* NstBoardRexSoft.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRexSoft.hpp; sourceTree = ""; }; + 5E5267A220D47D998845DB51485386A8 /* SDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL.h; sourceTree = ""; }; 5E64591CCE82CAC6775DAB365A75A8BC /* GTLRQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRQuery.m; path = Source/Objects/GTLRQuery.m; sourceTree = ""; }; - 5E75AFF4F05B942A1BEDA96CDD1D5F6E /* RSTActivityIndicating.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTActivityIndicating.h; path = Roxas/RSTActivityIndicating.h; sourceTree = ""; }; - 5E81E563B519CB275A216BD3E5414DAA /* AudioRendering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioRendering.swift; sourceTree = ""; }; + 5E69C29F29CC024AF25B51D0D32627EE /* profile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = profile.h; sourceTree = ""; }; + 5E82D9E0415F24E9559D27759ACC7218 /* minkeeper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = minkeeper.h; sourceTree = ""; }; + 5EA6CE40033E7605CBA05FE256EA16DD /* T3DUX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = T3DUX.h; sourceTree = ""; }; 5EAB88E1F1D57B7D17D40ED0872DB766 /* GoogleSignIn.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleSignIn.xcconfig; sourceTree = ""; }; - 5EC841F694F3A53D5F5B027513353CD6 /* opengl_Parameters.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Parameters.cpp; sourceTree = ""; }; - 5EE59BD5CCE08A1257054978F5F52E22 /* Dialogs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Dialogs.h; sourceTree = ""; }; - 5F04014B383F64E12DE6C9129A85A7C5 /* Delta.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delta.swift; path = DeltaCore/Delta.swift; sourceTree = ""; }; - 5F38047E1651287DC3AA705DF9C06C72 /* NstBoardRcm.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRcm.hpp; sourceTree = ""; }; - 5F4BA7A7D97044CD5A2BE415D287BEC1 /* Time.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Time.hpp; sourceTree = ""; }; - 5F5D1223821815A7C2C130C5144F0006 /* N64DeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = N64DeltaCore.modulemap; sourceTree = ""; }; - 5F992EC4AD08ED4806E1B360451E1861 /* T3DUX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = T3DUX.h; sourceTree = ""; }; - 5F9A4CA2154481A63B5E58F37EBDA908 /* ftcffdrv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcffdrv.h; sourceTree = ""; }; - 5FBF0DA69F6371EE6C6D63D8001D8D95 /* ColorBufferReader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ColorBufferReader.cpp; sourceTree = ""; }; - 5FCE00327D6825CD6F2088A345690DCC /* RenderTexture.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderTexture.hpp; sourceTree = ""; }; - 600582314CC9166CC637A8451ADB1310 /* ZSort.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZSort.cpp; sourceTree = ""; }; - 603DD39C57569C32BD836469768B346F /* String.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = String.cpp; sourceTree = ""; }; - 60639E02A2579DF3195EEC16A0556CF6 /* SNESDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SNESDeltaCore-prefix.pch"; sourceTree = ""; }; - 60655F2593406B5777F801C875F02F75 /* font.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = font.h; sourceTree = ""; }; - 60925EDCF9318CAB1FA3938859111AE0 /* tima.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tima.h; sourceTree = ""; }; - 60C7CDBA93C7797D9E83FBA84FAE7FD2 /* RecordEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordEntry.swift; sourceTree = ""; }; - 60E307E020BBFAC21769EFBA79153CCD /* NstBoardCony.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCony.hpp; sourceTree = ""; }; - 610583D92AD551F88F44D66D964F1334 /* NstMemory.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstMemory.hpp; sourceTree = ""; }; - 612BF149D2E48CC9950BEEB2FC03B60F /* NstBoardBmc72in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc72in1.hpp; sourceTree = ""; }; - 61596E997AFE32646B435FCBF43BA32F /* tttags.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tttags.h; sourceTree = ""; }; - 618949190C9EE4497D8F00EDA7A856E7 /* Config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; + 5EBF9C7AF0DBEF9D5C106E02B9B28CE6 /* DriveService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DriveService.swift; path = "Backends/Drive/Harmony-Drive/DriveService.swift"; sourceTree = ""; }; + 5EEAB40C86D49852ED6EB7A6AFF904B0 /* UISpringTimingParameters+Conveniences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISpringTimingParameters+Conveniences.m"; path = "Roxas/UISpringTimingParameters+Conveniences.m"; sourceTree = ""; }; + 5F716F68D783146B202EC8FC938BC98B /* GBAEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBAEmulatorBridge.mm; sourceTree = ""; }; + 5F722266C08C5C1739772E3E72CEE17F /* TextureFilterHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilterHandler.h; sourceTree = ""; }; + 5F83D55C13FB6E1F63B5492848583340 /* NstBoardRexSoftDb5z.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRexSoftDb5z.hpp; sourceTree = ""; }; + 5F8643E93FD4508FE4A1F4CFE2588044 /* RSTPlaceholderView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTPlaceholderView.m; path = Roxas/RSTPlaceholderView.m; sourceTree = ""; }; + 5FA683FD9CEB1F0629D3586B5C0D5276 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = GBCDeltaCore/Standard.deltamapping; sourceTree = ""; }; + 5FA6C00DDDB9434F8C592657E4CF0E8D /* DSDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DSDeltaCore.xcconfig; sourceTree = ""; }; + 5FBF06615B56E55808CEBADD68B920BE /* RSTPersistentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTPersistentContainer.h; path = Roxas/RSTPersistentContainer.h; sourceTree = ""; }; + 5FE228B9F6593F99674B619FAD43A040 /* ftglyph.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftglyph.h; sourceTree = ""; }; + 6004CD9FBFF76F6C36F2C167315443BA /* NstBoardSachenSa0036.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa0036.hpp; sourceTree = ""; }; + 601F63C6825CC3B6550C9C4169033152 /* ftbdf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbdf.h; sourceTree = ""; }; + 607EE7A62CEA324021137035A39115DC /* ftautoh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftautoh.h; sourceTree = ""; }; + 608FE25E87FF01D7345789C49881295A /* Combiner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Combiner.h; sourceTree = ""; }; + 609716320CE93EE5720BD73EE4666B18 /* RSTConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTConstants.h; path = Roxas/RSTConstants.h; sourceTree = ""; }; + 60FB49D244425C934B22DB89FE9F68AB /* FetchRemoteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FetchRemoteRecordsOperation.swift; sourceTree = ""; }; + 61036065030A2D0CAFA57E52B4AEBBBB /* NstInpMahjong.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpMahjong.hpp; sourceTree = ""; }; + 610FBE2B211DCC4D12F3F435021489B9 /* NstInpTopRider.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpTopRider.hpp; sourceTree = ""; }; + 6118EFDD077B9EC964912181660B7A95 /* ServiceOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ServiceOperation.swift; sourceTree = ""; }; + 61394348571E8373817FFE9C2319D511 /* TextureFilters_hq4x.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_hq4x.cpp; sourceTree = ""; }; + 6154AA0F4F3D72A490406941DDA56ECF /* TxCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxCache.h; sourceTree = ""; }; 61922816ADB3E7C4600DF77D3B382727 /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; }; - 619F66C6C65A42C014C9700FAB9316F8 /* TextureFilters_hq4x.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_hq4x.cpp; sourceTree = ""; }; - 61B9452797C7F91FF8966E5CB4C041E0 /* PrepareUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrepareUploadingRecordsOperation.swift; sourceTree = ""; }; - 61C1E3F8AE5D758C9D04B1A80F1A6C85 /* NstBoardWaixingSecurity.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSecurity.hpp; sourceTree = ""; }; - 6207EF118B9280CEDE13421C4CF64C8B /* SocketSelector.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SocketSelector.hpp; sourceTree = ""; }; - 620CBB9D49ED951D7497FDB4C115660B /* NSString+Localization.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+Localization.h"; path = "Roxas/NSString+Localization.h"; sourceTree = ""; }; - 6249457A28CDE33CCE657105EDBF5C7C /* armcpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = armcpu.h; sourceTree = ""; }; - 624F9323E74C2F61AB1277993C89EBD7 /* DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DeltaCore-prefix.pch"; sourceTree = ""; }; - 6259A047C58B19EAEDC1BA8DC19B918E /* NstInpHoriTrack.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpHoriTrack.hpp; sourceTree = ""; }; - 62653D6633FD230F25923698824EFA8E /* AudioManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioManager.swift; sourceTree = ""; }; - 6270AB27CBF8BA6CBBAF402530B111BF /* NstBoardSomeriTeamSl12.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSomeriTeamSl12.hpp; sourceTree = ""; }; - 627617EFA316732258422811C97719BF /* NstBoardMxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMxRom.hpp; sourceTree = ""; }; - 62945616EBEA8F7DB40A59C37964637B /* NstBoardBmcVt5201.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcVt5201.hpp; sourceTree = ""; }; - 62948F129BEF321213BDE3AC38E0CBDC /* NstBoardMagicSeries.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMagicSeries.hpp; sourceTree = ""; }; - 62CFF0059E7E0AE9B9B20A8DBAE51D16 /* NstBoardSomeriTeam.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSomeriTeam.hpp; sourceTree = ""; }; - 62F06888B27D96F21A3D53797DD35725 /* Err.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Err.cpp; sourceTree = ""; }; - 631827F8F7F53171DBE8CFA596562B76 /* NESEmulatorBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NESEmulatorBridge.swift; sourceTree = ""; }; - 6339330C707D1D8177B1FCDB213946EB /* Time.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Time.cpp; sourceTree = ""; }; - 634114A0217955A80057DD03929C6053 /* screenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = screenshot.h; sourceTree = ""; }; - 635101CB7845320BEBBEE9E499DCF372 /* Rect.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Rect.inl; sourceTree = ""; }; + 62CF24548323CEDA7F6C62DDD4E4970E /* main.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = main.h; sourceTree = ""; }; + 62CF8182659AC61B46F3EE64308E7BA7 /* new_dynarec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = new_dynarec.h; sourceTree = ""; }; + 62D7AE2A6BB60EE680F208CA7652859A /* Result+Drive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Drive.swift"; sourceTree = ""; }; + 630D82E8861EDF03C0AE64781235E207 /* glsl_CombinerProgramImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramImpl.h; sourceTree = ""; }; + 63180C4F702A63C80A6A6C9888B52876 /* NstFpuPrecision.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFpuPrecision.hpp; sourceTree = ""; }; + 6329A4701FAEB80F4C84BEAC1AC5FE31 /* MelonDSDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = MelonDSDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 632F100822F31BF07C7CD07CAD8F2329 /* UIView+AnimatedHide.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+AnimatedHide.m"; path = "Roxas/UIView+AnimatedHide.m"; sourceTree = ""; }; + 633BFEBA4D6E889B3BD3E8EC2A8D9AAF /* NstInpHoriTrack.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpHoriTrack.hpp; sourceTree = ""; }; + 636321611157247A4B100E3ACC431B70 /* DropboxService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Versions.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Versions.swift"; sourceTree = ""; }; 6365C9968A510968784A08051605D583 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; - 636BCAA16AC311A2A310C344BD9FBCB8 /* DisplayWindow.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DisplayWindow.cpp; sourceTree = ""; }; - 638C5EE8459794EA00003C69343C4289 /* RecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordOperation.swift; sourceTree = ""; }; - 63BABDED98CDB1DC811FC1832968CE5D /* EEprom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = EEprom.h; sourceTree = ""; }; - 63E04C5EE8B5C9B04E756F888630E85E /* memalign.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memalign.h; sourceTree = ""; }; 63E486C49EB5CD189D8E3D136D388F32 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; - 63E5FFFBD052DA0F226FA6C644365420 /* ftgzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgzip.h; sourceTree = ""; }; - 6487DFB243D65653DF7438DCBA67EB91 /* osal_files.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osal_files.h; sourceTree = ""; }; - 64B255C31BCB0FDD8AB113CF71D128C3 /* DS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DS.swift; sourceTree = ""; }; - 64F52923D2670C65E03D742EF710218A /* NstBoardHosenkan.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHosenkan.hpp; sourceTree = ""; }; - 64F5E353543E813AE8499F0415496364 /* GBALink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBALink.h; sourceTree = ""; }; + 63F723BED507FF2FF061CFBDA2D2DC5D /* NstBoardHenggedianzi.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHenggedianzi.hpp; sourceTree = ""; }; + 649A8676EC984C0C8FDF1CCA5D3FF80D /* GBACart.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GBACart.cpp; sourceTree = ""; }; + 64A23D7BFCABFEC33689D884FE6CAB2A /* ftmodapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmodapi.h; sourceTree = ""; }; + 64B42722A5333410D786C90D454E41C8 /* NstBoardTxc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxc.hpp; sourceTree = ""; }; 650B17EB11403844F72B9E0117949D63 /* GTLRDriveObjects.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDriveObjects.m; path = Source/GeneratedServices/Drive/GTLRDriveObjects.m; sourceTree = ""; }; - 657EC94D6685264E5B97804EFAAB8145 /* NstSoundPlayer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundPlayer.hpp; sourceTree = ""; }; - 65B9EE37937D4417CCF0576098C38148 /* UserDefaults+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UserDefaults+Harmony.swift"; sourceTree = ""; }; - 6630BB30C19291FAB71F19904132A2FB /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; - 66403032D229EFE419B1F624D8E3A6AE /* game_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = game_controller.h; sourceTree = ""; }; - 6653BEF078E8146300FE0A11A7E562B9 /* NstBoardBmc20in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc20in1.hpp; sourceTree = ""; }; - 66814AC3B3C466A4870833B7CC41BE34 /* osal_files_ios.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = osal_files_ios.mm; sourceTree = ""; }; - 67464BB3B17BCC0986DEB6DD52C604A5 /* osal_dynamiclib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osal_dynamiclib.h; sourceTree = ""; }; - 6768756BD63AFB81ABEB6934A427CA39 /* UploadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordsOperation.swift; sourceTree = ""; }; - 678B4D33461C1C6B1A1DAD8189F4BEB2 /* UICollectionView+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionView+CellContent.h"; path = "Roxas/UICollectionView+CellContent.h"; sourceTree = ""; }; - 67AB883A36469191BFD529D65D8810A1 /* CheatProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CheatProtocol.swift; sourceTree = ""; }; + 6528F5BD6DE6044B356E5ABAC6FAC340 /* GBATypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBATypes.h; sourceTree = ""; }; + 6572AD0AF91A5CC97E1F7CEB62ED94A0 /* DSTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = DSTypes.m; sourceTree = ""; }; + 65A31956BBF79B889849828770076815 /* alist_audio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_audio.c; sourceTree = ""; }; + 65C8737805E86FA67C1579855D59CB64 /* NstBoardCaltron.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCaltron.hpp; sourceTree = ""; }; + 65DF8E0913BA8941185496F1B74F7D4E /* RSTNibView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTNibView.m; path = Roxas/RSTNibView.m; sourceTree = ""; }; + 65E0BB76F563A560B6025A701C5B300C /* GameView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = ""; }; + 6658EE9B0A19441E97A1284103D6A0A2 /* CombinerKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CombinerKey.h; sourceTree = ""; }; + 66879FEB993CFA8011AE164C2E88927A /* Touch.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Touch.hpp; sourceTree = ""; }; + 66E2F83711E351CACFF208148B544CB1 /* VI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = VI.h; sourceTree = ""; }; + 66FC5067060EC57040E657A1F216A5E7 /* GBCCheat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBCCheat.m; sourceTree = ""; }; + 6750964B0895F740D52DD97CAE8B5099 /* eeprom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = eeprom.h; sourceTree = ""; }; + 676903B714C5F565B51ED126D715A4B4 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + 6792E65AE4C83CBE644B193BBA1E52DC /* NstBoardPxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardPxRom.hpp; sourceTree = ""; }; 6822483789D6B6BB133ABB5446BCFF2D /* Setter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Setter.swift; path = Sources/SQLite/Typed/Setter.swift; sourceTree = ""; }; 68263C62DDF9F51529551BECBBD26620 /* GTLRErrorObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRErrorObject.m; path = Source/Objects/GTLRErrorObject.m; sourceTree = ""; }; - 684FBE5FB16F9A9B0FC3DD78F607C946 /* KeyedContainers+ManagedValues.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "KeyedContainers+ManagedValues.swift"; sourceTree = ""; }; - 6871DA21F2195F33706882F64D12E1D8 /* svpscmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpscmap.h; sourceTree = ""; }; - 687441E742910C0DF7081813BECD4638 /* device.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = device.h; sourceTree = ""; }; - 68753DE722C0980098E0081FA7664AD1 /* NstBoardNitra.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNitra.hpp; sourceTree = ""; }; - 6878BE119742EC0C21A2CB0F923D256C /* NstBoardUnlXzy.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlXzy.hpp; sourceTree = ""; }; - 695EC8428ABF7B3AF98FDB33DD69DB98 /* NstBoardBmcCtc65.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcCtc65.hpp; sourceTree = ""; }; - 696FB5C2FDDB6402D85459020872DE22 /* common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; - 69ABB3390625B7C34F4619CCD4F218E2 /* RemoteFile+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+Dropbox.swift"; sourceTree = ""; }; + 68472F20D32A525A0FA8C6D283E05655 /* NstAssert.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstAssert.hpp; sourceTree = ""; }; + 684E9E69891E8CAEBF1DC5CFDC48856E /* UIKit+ActivityIndicating.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIKit+ActivityIndicating.m"; path = "Roxas/UIKit+ActivityIndicating.m"; sourceTree = ""; }; + 68776D658C9400B8766FD395BBD08F63 /* Platform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Platform.h; sourceTree = ""; }; + 68A229662DE33DC9840D7CCB41582EA9 /* encrypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = encrypt.h; sourceTree = ""; }; + 6944EA8E8CC44D97F089057D5BBB67A6 /* fxemu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxemu.h; sourceTree = ""; }; + 698C748E342E77F1EA0CBA79A28CAC0B /* NstBoardCxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCxRom.hpp; sourceTree = ""; }; + 699F79983949D91377333D55142CEB7E /* RecordEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordEntry.swift; sourceTree = ""; }; 69C6B83D4542C5716F38FE2C2C2E343E /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; - 69CFD44724961B202086D65543370D05 /* NstPins.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPins.hpp; sourceTree = ""; }; + 69F05BD9CB2FBF76E6BDDB0F64BEDA8F /* NstBoardSunsoftFme7.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoftFme7.hpp; sourceTree = ""; }; 6A2CACDB9FCC4BFBF7C2F672657367FF /* GTLRDriveService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDriveService.h; path = Source/GeneratedServices/Drive/GTLRDriveService.h; sourceTree = ""; }; - 6A32869D90E7BAC47B25D2F8E75F7856 /* Roxas.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Roxas.h; path = Roxas/Roxas.h; sourceTree = ""; }; - 6A36744D626ECD3743CA4F297A98EA19 /* memory.c */ = {isa = PBXFileReference; includeInIndex = 1; path = memory.c; sourceTree = ""; }; - 6A3C6439C7D592FA721C9BF78D5CF6BC /* savestates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = savestates.h; sourceTree = ""; }; 6A4B7B6EB4DB8A673532771B4AA8B264 /* TeamPolicies.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamPolicies.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamPolicies.swift; sourceTree = ""; }; - 6A6E6BA6F73F029637AC87BB994DE38D /* SoundBuffer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundBuffer.hpp; sourceTree = ""; }; - 6A8950AA257A8E57DB3C9539DBCCC980 /* Flash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Flash.h; sourceTree = ""; }; - 6AA8B9D838C07E38061D4BB84F3D8B62 /* TextureFilters.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters.cpp; sourceTree = ""; }; - 6AA904F6B4EABFBD175084421003EB09 /* TxReSample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxReSample.h; sourceTree = ""; }; - 6ADD780B3EFDC84E892E216A11E12B84 /* NstBoardAcclaim.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAcclaim.hpp; sourceTree = ""; }; - 6AF623F3493038D6261BFE6D75F9E9D3 /* m64p_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_common.h; sourceTree = ""; }; - 6B121A5474D97495A9D2594CBE9B2C38 /* profile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = profile.h; sourceTree = ""; }; - 6B139C8BFA41616549DEEAA545317F7F /* NstBoardBmcSuperVision16in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperVision16in1.hpp; sourceTree = ""; }; - 6B21034826F7C6098BB4DBFE00B2498C /* NstBoardRexSoftDb5z.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRexSoftDb5z.hpp; sourceTree = ""; }; - 6B2D3B45DE97EE84171CC1A90FD17872 /* plugins_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = plugins_compat.h; sourceTree = ""; }; - 6B525F9D23FEA3BE925293A80FEC7DCC /* InputSoundFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = InputSoundFile.hpp; sourceTree = ""; }; - 6B551B63369A33A731AE3B25B4C7E772 /* Harmony-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-umbrella.h"; sourceTree = ""; }; + 6A4E086533D156DB8CB90B68CFB34011 /* seta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = seta.h; sourceTree = ""; }; + 6A720235BC5442B027233F68A35C4613 /* GBASockClient.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBASockClient.h; sourceTree = ""; }; + 6A98E587E6533A6DF4F4624F83C3BD14 /* ThreadLocalPtr.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocalPtr.inl; sourceTree = ""; }; + 6AA43E914AB86898557D6FEDC791C933 /* xxhash.c */ = {isa = PBXFileReference; includeInIndex = 1; path = xxhash.c; sourceTree = ""; }; + 6AB7E24DF9D482B653684A4CB3373DAE /* plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = plugin.h; sourceTree = ""; }; + 6ABC265715DD434AE88383B1CAD97215 /* RSTHasher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTHasher.m; path = Roxas/RSTHasher.m; sourceTree = ""; }; + 6AE7E3B37D390409F4ECEA14098EE0F7 /* vidext_sdl2_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vidext_sdl2_compat.h; sourceTree = ""; }; + 6B0ACCB9EC30550BEF619382B31BE43A /* NstBoardOpenCorp.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardOpenCorp.hpp; sourceTree = ""; }; + 6B0B083A9E33A408380E6933367C443E /* StandardGameControllerInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = StandardGameControllerInput.swift; sourceTree = ""; }; + 6B0B9BFF156565987763A09CCD986B38 /* sfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sfnt.h; sourceTree = ""; }; + 6B0CBABFAE419A9E2AB84F2A8EE7B71A /* RSTCellContentDataSource_Subclasses.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentDataSource_Subclasses.h; path = Roxas/RSTCellContentDataSource_Subclasses.h; sourceTree = ""; }; + 6B341B464E13F5C77115D01AF3A303C0 /* NstBoardBtlSmb2c.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2c.hpp; sourceTree = ""; }; 6B555E9059530B6964B3908B22140C42 /* GTLRBatchResult.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRBatchResult.h; path = Source/Objects/GTLRBatchResult.h; sourceTree = ""; }; - 6B58A269231B9317967B84F433CD1F14 /* NstVsSuperXevious.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsSuperXevious.hpp; sourceTree = ""; }; + 6BD20790AB990ACC80BB8996D8F6E7CF /* F3DEX2CBFD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2CBFD.h; sourceTree = ""; }; + 6BF4AC25F29497FA32921E869185CFB9 /* S2DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = S2DEX2.h; sourceTree = ""; }; + 6BFD0F656B9079094013712B8261B5E1 /* NstIoAccessor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoAccessor.hpp; sourceTree = ""; }; + 6C0978994ADA13ACDD55B35B73CF516B /* ClipPolygon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ClipPolygon.h; sourceTree = ""; }; + 6C13FD7FA77A5769F400B5BF15BC2F34 /* NstApiInput.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiInput.hpp; sourceTree = ""; }; + 6C5307A8FB0BC0FF445E3DABBD956EB9 /* Roxas.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Roxas.modulemap; sourceTree = ""; }; 6C79D85ABB10589F765DD64715EEEAD3 /* ZIPFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-umbrella.h"; sourceTree = ""; }; - 6C7AA36ACFE2AD062803B5CC90965154 /* NstPpu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPpu.hpp; sourceTree = ""; }; - 6C86335713D20D759954CBB00EC6AEC3 /* FramebufferTextureFormats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FramebufferTextureFormats.h; sourceTree = ""; }; - 6C87A284686A358CFAC958B264749422 /* NstBoardJalecoJf11.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf11.hpp; sourceTree = ""; }; + 6C8267F7387923110B7E4D691528634F /* png.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = ""; }; 6CD2701346D82207B53CC9EC541F8AB0 /* Schema.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Schema.swift; path = Sources/SQLite/Typed/Schema.swift; sourceTree = ""; }; 6CDA9A78863460869F150386B089AF8F /* AggregateFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AggregateFunctions.swift; path = Sources/SQLite/Typed/AggregateFunctions.swift; sourceTree = ""; }; - 6D3563437D8960176CEF09AD9B1291B0 /* NstApiRewinder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiRewinder.hpp; sourceTree = ""; }; - 6D9291C6142C075D49A0EDDA11CC4A78 /* NstFds.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFds.hpp; sourceTree = ""; }; + 6CE8685D1C71D8EB010FB3B97ECE0634 /* audio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = audio.h; sourceTree = ""; }; + 6CFE24E78C00465C933205823C6591C2 /* ControllerSkinTraits.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkinTraits.swift; sourceTree = ""; }; + 6D0B8740C1A5A02C3EBF2D3FF634FACF /* gbafilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gbafilter.h; sourceTree = ""; }; + 6D14F298DDA814B5FF6C73CC765C8186 /* GBCDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GBCDeltaCore.xcconfig; sourceTree = ""; }; + 6D4A9FA09D0CE373E943419685E8D514 /* Revision.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Revision.h; sourceTree = ""; }; + 6D5641AF5A10D2A2EBB4AADA120BAC12 /* tima.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tima.h; sourceTree = ""; }; + 6D709C9141E75CC5376CABB8ED0406AF /* DisplayLoadProgress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DisplayLoadProgress.h; sourceTree = ""; }; + 6D90A2363F7995BE9713375802DBDF16 /* Roxas.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Roxas.xcconfig; sourceTree = ""; }; 6D98E76BA27C3752F885C66312189CB2 /* SMCalloutView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SMCalloutView.modulemap; sourceTree = ""; }; - 6DDEEF3EE5DBC5E579DE48E15CE14565 /* NoiseTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NoiseTexture.h; sourceTree = ""; }; - 6DF0969A7AD1D99F4FACAB29DD35412A /* m64p_debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_debugger.h; sourceTree = ""; }; - 6DF6C3B7940689905856C5444F2A0E35 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; - 6E03BC1605808403D83828FBCFBE7F28 /* OutputSoundFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = OutputSoundFile.hpp; sourceTree = ""; }; + 6D9EAB15090D2390809047688EF8E815 /* GBCInputGetter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCInputGetter.h; sourceTree = ""; }; + 6E028AD93ED1F6C5A46A56195C2CF756 /* GPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GPU.h; sourceTree = ""; }; + 6E1E1C9F6B0A62DA55FDEB54FB33235C /* opengl_TextureManipulationObjectFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_TextureManipulationObjectFactory.h; sourceTree = ""; }; 6E2C328E034800C2CB26F5B94B12DDF6 /* DropboxTransportClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxTransportClient.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxTransportClient.swift; sourceTree = ""; }; - 6E65D162B8D927702A508BF68B07EF7D /* GLideN64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideN64.h; sourceTree = ""; }; - 6E6ABC72122793A5F3381924CC2D9BE8 /* Harmony.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Harmony.xcconfig; sourceTree = ""; }; - 6E7206B56B9ED9A2B4822DC503DF31D7 /* rhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rhash.h; sourceTree = ""; }; - 6E755BD7B9E84110CD165AA817987A71 /* opengl_BufferManipulationObjectFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_BufferManipulationObjectFactory.cpp; sourceTree = ""; }; - 6E7AAD31402E31872C9054EB4185634A /* android_hardware_buffer_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = android_hardware_buffer_compat.h; sourceTree = ""; }; - 6E7D780A13B2915F46EF4226090CBCC5 /* hle_external.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle_external.h; sourceTree = ""; }; + 6E3F8E9A443CB8805EFE8175563E893E /* NstPatcherIps.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcherIps.hpp; sourceTree = ""; }; + 6E5761EB37D9B48C3780E3C7C5C40100 /* DSTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DSTypes.h; sourceTree = ""; }; + 6E612D889BCF639940A7B442ED45DC84 /* ftrender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftrender.h; sourceTree = ""; }; 6EC397E433E2CCBB38824AB04FAAC26C /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = ""; }; - 6EC6A1A3D10181EB3D7A3F51FFA233C6 /* NstInpMouse.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpMouse.hpp; sourceTree = ""; }; + 6EDFEABAE45559F46811B55AFB37E632 /* Window.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Window.hpp; sourceTree = ""; }; 6F2799783940A21EC2EE44D1A48F5758 /* FilesRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilesRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/FilesRoutes.swift; sourceTree = ""; }; - 6F994DCAAF05A0E4ADF9D352FAB0A16E /* RemoteRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteRecord.swift; sourceTree = ""; }; - 6FBD67C48E00871A2582075478C8DA5B /* Http.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Http.hpp; sourceTree = ""; }; - 6FD06664B1E05662499252D81EE4BDD5 /* TexrectDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TexrectDrawer.h; sourceTree = ""; }; - 6FD1CD254FC9810DC969445799C4AC02 /* fpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fpu.h; sourceTree = ""; }; + 6F58E0B7D553A24812938BBCA1D73D71 /* NstBoardFujiya.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFujiya.hpp; sourceTree = ""; }; + 6F76413369DEBF1203E4F23F42C0D065 /* SoundFileFactory.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileFactory.hpp; sourceTree = ""; }; + 6F88E235E4438225B920C3FD4F4FA99E /* Thread.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.inl; sourceTree = ""; }; + 6FB5B955EED3BCE73AA95E7D1F60EF62 /* MelonDSDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MelonDSDeltaCore.h; sourceTree = ""; }; 6FE77E68F4303153680AF10EC9A30266 /* FABAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FABAttributes.h; path = iOS/Fabric.framework/Headers/FABAttributes.h; sourceTree = ""; }; - 703D2463A2508D59FAA3694C995EBC4E /* NstChips.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstChips.hpp; sourceTree = ""; }; - 706DA94E13FDA915B64893FE9918C85F /* transferpak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = transferpak.h; sourceTree = ""; }; - 707293F0FD9EBD1A0C126D2597D63C1E /* NSFileManager+URLs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileManager+URLs.m"; path = "Roxas/NSFileManager+URLs.m"; sourceTree = ""; }; - 707D301E564B6E14192946179A6F87F5 /* Result+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Dropbox.swift"; sourceTree = ""; }; - 70CFA30438DAE2DBE32611495D872EB6 /* ftstdlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftstdlib.h; sourceTree = ""; }; + 6FEE36BBE5119D88DE64B64D975EC87B /* NstBoardJalecoJf19.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf19.hpp; sourceTree = ""; }; + 7001F35121D79E891B1BD2B4C133B505 /* gralloc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gralloc.h; sourceTree = ""; }; + 705D7689B51FCCF53E9C703400B0DFC4 /* RSTDynamicDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTDynamicDataSource.h; path = Roxas/RSTDynamicDataSource.h; sourceTree = ""; }; + 708D9E956CB287CC2879FE1061D1F6C5 /* GBCTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCTypes.h; sourceTree = ""; }; + 70DABB5ACFBF2E1DA35CD42F620E46F1 /* UITableViewCell+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+CellContent.m"; path = "Roxas/UITableViewCell+CellContent.m"; sourceTree = ""; }; 70DD00852D37B01767D028ED9AA2DDAD /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - 70E06F935BCC172832EAFB66DF8A22AF /* RemoteRecord+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+Dropbox.swift"; sourceTree = ""; }; - 7112AF9DF88E284F7F0D82E3379A2B7D /* Roxas-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Roxas-dummy.m"; sourceTree = ""; }; - 712761EE4481E36BC7DD29218D12A6CF /* DSDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DSDeltaCore-umbrella.h"; sourceTree = ""; }; - 715964B79C52F9A32AC5669D6D1A75E9 /* biopak.c */ = {isa = PBXFileReference; includeInIndex = 1; path = biopak.c; sourceTree = ""; }; - 7174246F378A58D37BD4927CEE3799A4 /* plugin_delta.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = plugin_delta.cpp; sourceTree = ""; }; - 719867C7F45388063CEC3252848F288D /* winlnxdefs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = winlnxdefs.h; sourceTree = ""; }; + 7103DD1615CC67B6239304B8B4BE2F06 /* NstBoardBandaiLz93d50.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiLz93d50.hpp; sourceTree = ""; }; + 71AB68FE56ED4BF2433BBC850D1026C5 /* NstBoardIremKaiketsu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremKaiketsu.hpp; sourceTree = ""; }; 71BB6834A4E68AEDDD4B95D4E80B0672 /* GTMSessionFetcher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-prefix.pch"; sourceTree = ""; }; - 71E464E228C2FFB740BCB0AF049E4332 /* NstBoardNamcot.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot.hpp; sourceTree = ""; }; - 71F6E550519668062C1B78FCF1BBCEA0 /* debug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; - 71FBFADC850B449A9B9A5C0D9F8BFD67 /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + 71C2F464A8210B73F02BF45EDE6E1EDC /* NstTrackerRewinder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTrackerRewinder.hpp; sourceTree = ""; }; + 71CB328D9397310D6DF21B68E80E7672 /* fterrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fterrors.h; sourceTree = ""; }; 71FF835F27DBABBE447A40E51AF4AC68 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; 72224C07100B6D8A8371BBAC83840304 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - 72248A001C60C8B9DD1CCDC9D78DAE0B /* NstBoardKaiser.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKaiser.hpp; sourceTree = ""; }; - 72E7904615D88779CADD558D3456DD5F /* gSP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gSP.h; sourceTree = ""; }; - 72EC1BB681A1EE53852B18D9C14B635B /* NstZlib.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstZlib.hpp; sourceTree = ""; }; - 72EF249EE7E9290384CEF4D02C6444B0 /* NstBoardFukutake.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFukutake.hpp; sourceTree = ""; }; - 72FFB39A7A98F30C88D79B8E0A8EAEE5 /* preproc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = preproc.h; sourceTree = ""; }; - 73006DC6C1509BB82F83AC8D88F0481E /* NstBoardBmc31in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc31in1.hpp; sourceTree = ""; }; - 73427BAA44C8216F08EDAC6A0CAD0190 /* NstBoardSachen74x374.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachen74x374.hpp; sourceTree = ""; }; - 7362D3AF48B22723885E66B0D25420E5 /* encrypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = encrypt.h; sourceTree = ""; }; + 723AFC03DAB1F2E32CB45A4F3ED5FD35 /* AnyKeyPath+StringValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "AnyKeyPath+StringValue.swift"; sourceTree = ""; }; + 725B23CE4361DD6771F70C91256E286B /* ContextSettings.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ContextSettings.hpp; sourceTree = ""; }; + 725E5E4B6601C9A79B9D7A82DF839C25 /* NstBoardTxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxRom.hpp; sourceTree = ""; }; + 72866AD3D95B81BC911D7A67CEBC69CB /* ARCodeList.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ARCodeList.cpp; sourceTree = ""; }; + 72B1BA0104CB37793A0BEBF5E0F3FFB8 /* UpdateRecordMetadataOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UpdateRecordMetadataOperation.swift; sourceTree = ""; }; + 72DF6D71D0B2650FA29881ABB3113610 /* DMA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DMA.h; sourceTree = ""; }; + 72F6FF7C88B7AD41EC3870C4DE94973E /* UIResponder+FirstResponder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIResponder+FirstResponder.swift"; sourceTree = ""; }; + 73166C752BA3D0BEFE30CD25680CA1E8 /* NstBoardSunsoft.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft.hpp; sourceTree = ""; }; + 73490B7869EFEC11975B85243D0CA66D /* Keys.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Keys.h; sourceTree = ""; }; + 73594F3371FE49C0D1356C423974A617 /* RDP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RDP.cpp; sourceTree = ""; }; 736E24DAB59401834EC1B3DBAEF4EEF6 /* DateAndTimeFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateAndTimeFunctions.swift; path = Sources/SQLite/Typed/DateAndTimeFunctions.swift; sourceTree = ""; }; - 739C9A35C56A321A5F6DEC9276C9A451 /* NstBoardBmcY2k64in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcY2k64in1.hpp; sourceTree = ""; }; - 73B5114410208E3603B7C257E4448663 /* ConflictRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordsOperation.swift; sourceTree = ""; }; + 73AFCBDE3C3C3422A99EE597CEF40C70 /* NstBoardAcclaimMcAcc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAcclaimMcAcc.hpp; sourceTree = ""; }; 73BCCFACB97ADF9811932D4767D83953 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/SDWebImagePrefetcher.m; sourceTree = ""; }; - 73D96244D69D5586A7CEBA91D3674E96 /* F3DEX2ACCLAIM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2ACCLAIM.h; sourceTree = ""; }; - 747E5693480F6B6F20690DB12E236F86 /* glsl_CombinerProgramImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramImpl.h; sourceTree = ""; }; + 73DC986430887FFB58433385B29BACE2 /* boolean.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = boolean.h; sourceTree = ""; }; + 73ECDB6212A48398010C7457141CC1B2 /* NstBoardBtlSuperBros11.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSuperBros11.hpp; sourceTree = ""; }; + 743D60A80C02E747A93C054B7CE7F1E9 /* NstBoardBandaiLz93d50ex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiLz93d50ex.hpp; sourceTree = ""; }; 74853BDEC32A6CFF7D0D323E406FE7A9 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/SDImageCache.h; sourceTree = ""; }; - 74A1A47D0674A91258AD7D9DAB661740 /* NstBoardBtlT230.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlT230.hpp; sourceTree = ""; }; - 74B33477F335E1B6177EC8672F22289C /* pngconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngconf.h; sourceTree = ""; }; - 74F470E8DD823ED4FE7D10FB84B4ABD8 /* hle.c */ = {isa = PBXFileReference; includeInIndex = 1; path = hle.c; sourceTree = ""; }; - 74F4788A316A4AEC8FB746C3AF3DE933 /* m64p_vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_vidext.h; sourceTree = ""; }; - 74F7F494A747DB09275C9A959DC103CC /* pngwrite.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwrite.c; sourceTree = ""; }; - 74FAEBE92C3B0B35D90248D577885466 /* ShaderProgram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ShaderProgram.h; sourceTree = ""; }; - 7502471AA27312AF107E971A67EC58C6 /* psaux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = psaux.h; sourceTree = ""; }; - 7537CE11495993BB05FE9EAA5BFED976 /* NstBoardSuperGamePocahontas2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGamePocahontas2.hpp; sourceTree = ""; }; - 75A920E2918B272736AC688F14B6F096 /* resampler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = resampler.h; sourceTree = ""; }; - 75AB94233F995F253DFE0C50EE6C02A2 /* RSTBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTBlockOperation.h; path = Roxas/RSTBlockOperation.h; sourceTree = ""; }; - 75BC588551AB21D7B8D2F7CEC5387DE8 /* png.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = ""; }; - 75CBA626F95FBBAD154F3774DF8F9152 /* NstBoardWaixingSgzlz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSgzlz.hpp; sourceTree = ""; }; - 75CC5A3EB0061070CE3340A72D9B1240 /* ftglyph.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftglyph.h; sourceTree = ""; }; - 75EA00FDDC420CBEEF57749EB105D75B /* NESDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NESDeltaCore-dummy.m"; sourceTree = ""; }; - 75F57C00E99D0261142E905420B1FDA7 /* CRC_OPT.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CRC_OPT.cpp; sourceTree = ""; }; + 74AE18E946FD9E7EED304826119E6AE0 /* pngusr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngusr.h; sourceTree = ""; }; + 74B57B3A4300861FCBCF153277342957 /* missing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = missing.h; sourceTree = ""; }; + 7550F86AC04930B4F25BF5030BE49B93 /* pakinfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pakinfo.h; sourceTree = ""; }; + 75A5C15DC18E79C28375E74324A85E26 /* NstBoardKaiser.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKaiser.hpp; sourceTree = ""; }; + 75A75028AFBA185D5D391D73DC4FE6AB /* NstBoardBandai24c0x.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandai24c0x.hpp; sourceTree = ""; }; + 75C6CA9B6DE6420B9DC5F198E990FC25 /* 3DMath.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = 3DMath.h; sourceTree = ""; }; + 75C95A2D2A55102279FEBE572C7A8FB0 /* NstVideoScreen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoScreen.hpp; sourceTree = ""; }; + 75D39CF0AC7F91D702958292DA91F30D /* FrameBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FrameBuffer.h; sourceTree = ""; }; + 75D6B90D539713A20256FCDF0A27805C /* GPU3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GPU3D.h; sourceTree = ""; }; 75F9C1E6A3EFB7439D016876D6537610 /* Paper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Paper.swift; path = Source/SwiftyDropbox/Shared/Generated/Paper.swift; sourceTree = ""; }; - 76098B9B168291C93114F349AF883D6F /* dynamiclib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dynamiclib.h; sourceTree = ""; }; - 7637F69AFE4440D79912C03BC0E864AE /* CRC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CRC.h; sourceTree = ""; }; - 763AE2EACA7FF8898176F552273EFF1C /* version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + 761CB13BA65C677D14B6D3A3F75A9A73 /* eventloop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = eventloop.h; sourceTree = ""; }; + 7647C29F1EB2BC67142E821D427D0865 /* NESDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NESDeltaCore.h; sourceTree = ""; }; 76762292E978FDAACA63D856A9CD4F5F /* Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Async.swift; path = Source/SwiftyDropbox/Shared/Generated/Async.swift; sourceTree = ""; }; - 7680621D7EA37B25BD6FAFEB184DD97B /* assemble_struct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble_struct.h; sourceTree = ""; }; - 76A9709715FDD329C46A920FFC9D9209 /* NstInpFamilyTrainer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpFamilyTrainer.hpp; sourceTree = ""; }; + 76ACCEF09480010D5EA9E6D031D289AC /* RSTBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTBlockOperation.m; path = Roxas/RSTBlockOperation.m; sourceTree = ""; }; 76C85069E5F2ED830B22D7D1AB4A529C /* GTMDebugSelectorValidation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMDebugSelectorValidation.h; path = DebugUtils/GTMDebugSelectorValidation.h; sourceTree = ""; }; - 770AA55D81A4A9A0174FC18A4DB7DC41 /* NstBoardUnlMortalKombat2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlMortalKombat2.hpp; sourceTree = ""; }; - 770FB112F840EA62E9A6C88008B7C1D7 /* dummy_audio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_audio.h; sourceTree = ""; }; - 77369FE791F1E575CF67D2E88660AB54 /* NstBoardBmcVrc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcVrc4.hpp; sourceTree = ""; }; - 7745EBDA352FAAAD04827718AFC2DDD0 /* interpret.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interpret.h; sourceTree = ""; }; - 77934694A34ABBAE5B4157E7F028F45C /* FIRFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIRFilter.h; sourceTree = ""; }; + 76C92A047E2902F98A561866E68DFBD1 /* F3DTEXA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DTEXA.h; sourceTree = ""; }; + 772DEEE3A8A1AA94502EF6098107740C /* Parameters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Parameters.h; sourceTree = ""; }; + 77423E6CCB3B1A7C499FEC5ADF73561A /* PluginAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PluginAPI.h; sourceTree = ""; }; + 77999DE4BEEF8B78706A76C68622603E /* FIRFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIRFilter.h; sourceTree = ""; }; + 77AC9809E47F480ACB8F5F50E124AEC6 /* AAFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AAFilter.h; sourceTree = ""; }; 77CE0C99378A2FDADC3F70471D336C79 /* ContactsRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContactsRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/ContactsRoutes.swift; sourceTree = ""; }; - 77D3B3A913E0D9BC6F044C9D89CB8D96 /* ftheader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftheader.h; sourceTree = ""; }; - 77E4E93A1AA6AEE3A862BF83964C18B4 /* svgldict.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svgldict.h; sourceTree = ""; }; - 782EAF069DEB44E112D5056BEF8C3DE2 /* ftbitmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbitmap.h; sourceTree = ""; }; - 78323C76AFE569F46E583A2E3461F6E8 /* UIDevice+Vibration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIDevice+Vibration.swift"; sourceTree = ""; }; + 781ED3B4A8386F32B835E424BE6D24AD /* xxhash.c */ = {isa = PBXFileReference; includeInIndex = 1; path = xxhash.c; sourceTree = ""; }; 783A65AE17A33F0C1C242F5B30F01680 /* Archive+Reading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Reading.swift"; path = "Sources/ZIPFoundation/Archive+Reading.swift"; sourceTree = ""; }; - 784FA935740E152532499A73DA5AA3DB /* VertexArray.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = VertexArray.hpp; sourceTree = ""; }; - 7853737E5530C7A19E57F3534054E328 /* ftcalc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcalc.h; sourceTree = ""; }; - 7887B596C85B88D5126C1D115B8C9582 /* check.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = check.h; sourceTree = ""; }; - 78B946BC5D71400B19D26F799662F808 /* EmulatorBridging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EmulatorBridging.swift; sourceTree = ""; }; - 790495A40D459F66C420A40CFAFB042D /* UICollectionView+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionView+CellContent.m"; path = "Roxas/UICollectionView+CellContent.m"; sourceTree = ""; }; + 789D5CFDF81A92162003BEBF18BA3C20 /* NstBoardKayH2288.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKayH2288.hpp; sourceTree = ""; }; 792056404E543D00399F5986E8B3812F /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = N64DeltaCore.xcconfig; sourceTree = ""; }; - 798A8C02C208746867C1899AE83B7EF3 /* rom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rom.h; sourceTree = ""; }; - 79B10B2722F1132312871D229953F2DA /* cheatSystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheatSystem.h; sourceTree = ""; }; - 79F9B2D9EDAEB550A921B5D3884D6D19 /* m64p_plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_plugin.h; sourceTree = ""; }; - 7A51C15D398D2803874EB7297A0340BE /* RSTOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTOperation.m; path = Roxas/RSTOperation.m; sourceTree = ""; }; - 7A65C5E1DB73B52B64C8509098509B77 /* pngusr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngusr.h; sourceTree = ""; }; - 7A8C9A3E803EF09830C30971C4D0333D /* NstInpMahjong.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpMahjong.hpp; sourceTree = ""; }; - 7A9548EBDD461D42A4F3BBAEA839E3DA /* si_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = si_controller.h; sourceTree = ""; }; - 7B2001812085959BA9C558864721110A /* fb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fb.h; sourceTree = ""; }; + 7934E37DFF6BB49A4E11E78A63B5CD51 /* MelonDSDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MelonDSDeltaCore-umbrella.h"; sourceTree = ""; }; + 7959936C4C72BFF6C57D269BD58A6A92 /* PrepareUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrepareUploadingRecordsOperation.swift; sourceTree = ""; }; + 795C12A193997827B4ADD870D87BDF8C /* CheatFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CheatFormat.swift; sourceTree = ""; }; + 797293ABB0B561C6FE9D15E812E45081 /* usec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = usec.h; sourceTree = ""; }; + 7995A2AC9E3D083B7373FC9209B625BD /* HarmonyMetadataKey+Keys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "HarmonyMetadataKey+Keys.swift"; sourceTree = ""; }; + 7A09B431279F323517C8EF6B08DBA5D0 /* NstBoardTxcPoliceman.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcPoliceman.hpp; sourceTree = ""; }; + 7A23A59045CAA0A03697397632CF3A5B /* NstApiCheats.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiCheats.hpp; sourceTree = ""; }; + 7A4769F49E16CB7DA2C80A4AE0AB75CA /* Turbo3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Turbo3D.cpp; sourceTree = ""; }; + 7A95544E49AAD44E88BF2C9268C9BF94 /* RemoteRecord+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+Dropbox.swift"; sourceTree = ""; }; + 7ACDAD920571F82F0FDFF413996C187F /* FramebufferTextureFormats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FramebufferTextureFormats.h; sourceTree = ""; }; + 7AD9520272152BEF938AC2E8A1E5961D /* registers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = registers.h; sourceTree = ""; }; + 7AFD09F14D0DA01868F50B237A0B76B1 /* Patch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Patch.h; sourceTree = ""; }; + 7B0E56A4DBE284273ED40732FDB073C9 /* pngdebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngdebug.h; sourceTree = ""; }; 7B4E004174F5A12104EA6702A90AC6D9 /* Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Helpers.swift; path = Sources/SQLite/Helpers.swift; sourceTree = ""; }; - 7B55E01B937143BE70ADC92C259EA847 /* sound.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sound.h; sourceTree = ""; }; - 7B7537D8181FB7C0E5B50CB7680E9967 /* NstBoardBtlSmb3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb3.hpp; sourceTree = ""; }; - 7B99B417F7B87ED84AC94DA16A254477 /* glsl_FXAA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_FXAA.cpp; sourceTree = ""; }; - 7BBA8B55E8468DDF3F3DCACBEC6CC1E2 /* RSTDynamicDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTDynamicDataSource.h; path = Roxas/RSTDynamicDataSource.h; sourceTree = ""; }; - 7BBB06A85B5F1D7854ECDB59E80B5B70 /* pngpread.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngpread.c; sourceTree = ""; }; - 7BFDD39FA42BC2644FD2FC2A33412FFD /* UIViewController+TransitionState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+TransitionState.h"; path = "Roxas/UIViewController+TransitionState.h"; sourceTree = ""; }; + 7B799B0BED0EB9D4351BA9CBC630C918 /* android_hardware_buffer_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = android_hardware_buffer_compat.h; sourceTree = ""; }; + 7BEE27F7FF7F6E7CA6DBDA14F15340BC /* NstBoardAxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAxRom.hpp; sourceTree = ""; }; + 7C0B98385921997315465A09CF1CB184 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; 7C1089BC73E36C74AEF372EEED122EFC /* GTMSessionFetcher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GTMSessionFetcher-dummy.m"; sourceTree = ""; }; - 7C71AA7A6480E27C964B8F797CDFC89B /* pakinfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pakinfo.h; sourceTree = ""; }; - 7CD4252EE7412B7E97A7FA9F6EB9095D /* opengl_UnbufferedDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_UnbufferedDrawer.h; sourceTree = ""; }; - 7CF779051F3316DCCCAAB71AF25F906C /* NstBoardFxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFxRom.hpp; sourceTree = ""; }; - 7D29EE04287C192700BAA7D8E7068B20 /* FrameBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FrameBuffer.h; sourceTree = ""; }; - 7D467F2C39B4E1301A6A2824147175DE /* memory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = ""; }; + 7C1BA9EB80CFC347F52BD3EC8F1856C4 /* netplay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = netplay.h; sourceTree = ""; }; + 7C336BB83B448CA034099BF3E7B12D55 /* ARMInterpreter_LoadStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARMInterpreter_LoadStore.h; sourceTree = ""; }; + 7C4240EE1FE35FE23E5975F8DCB23A33 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + 7C4333506EF373E1D2841A18039C8379 /* S2DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = S2DEX.h; sourceTree = ""; }; + 7C5579DAAF54EF825979925DDD065815 /* NstBoardUnlCc21.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlCc21.hpp; sourceTree = ""; }; + 7C65583B30F5CE8CB3A417DCFB648306 /* Mutex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Mutex.hpp; sourceTree = ""; }; + 7C7894842679F86AEA25BABD02717D75 /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; + 7C7EB4C3A9DB67B4B73C20A18B53EA47 /* Transform.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Transform.hpp; sourceTree = ""; }; + 7C8CA8E12823E49115A148B8AF4C1682 /* types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; + 7C95081CDA9074D9730BD45D716C934D /* lirc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = lirc.h; sourceTree = ""; }; + 7CD097CFE02D8169FF5FC3721CC0AEFF /* NSFileManager+URLs.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSFileManager+URLs.m"; path = "Roxas/NSFileManager+URLs.m"; sourceTree = ""; }; + 7CD443BDF938671B3B442333D9A63ED0 /* NstBoardQj.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardQj.hpp; sourceTree = ""; }; + 7D08A94E7C3746163340B4EA95824507 /* Log.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Log.h; sourceTree = ""; }; + 7D35DC1DC3A814BF1FDEBF8BA115A3C0 /* F5Indi_Naboo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F5Indi_Naboo.cpp; sourceTree = ""; }; 7D49431EEA4AD3FC2E04F7F24D666EA6 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; 7D751206A951D9727B38F71A2BB990AA /* SNESDeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = SNESDeltaCore.bundle; path = "SNESDeltaCore-SNESDeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7D8592309610FD7BF2ECC3EF7A2F045F /* pngstruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; - 7D93A1FA4EBA67EA2A7C3149D8776FF0 /* ftbbox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbbox.h; sourceTree = ""; }; - 7DB030D93B94677288CC4FB4807455C3 /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; - 7DB43450886939FC8E10313F46E479D1 /* mem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; }; - 7DD54C4B2A034B3E5694E1C6C3916D18 /* freetype.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = freetype.h; sourceTree = ""; }; - 7DE608CD51BCBB2191371758B7C8E134 /* NstVector.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVector.hpp; sourceTree = ""; }; - 7DE820C181248C292881B0298B0F1F90 /* Font.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Font.hpp; sourceTree = ""; }; - 7E0F32F5D4B36915598F0AD7BB83F6A3 /* pcap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pcap.h; sourceTree = ""; }; - 7E6B9B56EA3BE92F4A8798B0D43526B2 /* SndOut.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SndOut.h; sourceTree = ""; }; + 7D978ADE4F6407467C63202A3628BB80 /* Color.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Color.hpp; sourceTree = ""; }; + 7D9ACA67CBB81C221D9E4E05F8646744 /* RSTCellContentCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentCell.h; path = Roxas/RSTCellContentCell.h; sourceTree = ""; }; + 7DA17A4830B0A7833A2BFF7E43EFE310 /* View.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = View.hpp; sourceTree = ""; }; + 7DE36CB10C4A8DCF72BE7B88CB003698 /* RSTDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTDefines.h; path = Roxas/RSTDefines.h; sourceTree = ""; }; + 7DFFCF1CDD169427B033DBE318C4EECA /* pi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pi_controller.h; sourceTree = ""; }; + 7E0AC0D5AF34E7D36AEA71DF98E8EC9C /* Vector2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector2.hpp; sourceTree = ""; }; + 7E503925F21124A66FEEC07D1E779631 /* NstBoardBandaiAerobicsStudio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiAerobicsStudio.hpp; sourceTree = ""; }; + 7E5A3A24EB4B9ABCAF94937C5D6C5E88 /* ARMInterpreter_ALU.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ARMInterpreter_ALU.cpp; sourceTree = ""; }; 7E793979C109E7302877C7903D7ED408 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/UIImage+GIF.m"; sourceTree = ""; }; + 7E8024B293C9555F3BBBE264D95E1A8D /* TxCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxCache.cpp; sourceTree = ""; }; + 7E88C1E79B3436FD1C098E8D3CA9C3B1 /* RSTActivityIndicating.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTActivityIndicating.h; path = Roxas/RSTActivityIndicating.h; sourceTree = ""; }; + 7E97EB0C49F861BC8AC2D75CE54C4EB4 /* NstBoardWaixing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixing.hpp; sourceTree = ""; }; + 7EACF9BBDC13D732E0443F9F9FCC5743 /* GPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GPU.h; sourceTree = ""; }; + 7EBF937249B34B9B7F90C9FF04ADE6B7 /* m64p_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_types.h; sourceTree = ""; }; 7ECC57680ECCFDA6CFA7FED355B4F3AD /* TaskDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskDelegate.swift; path = Source/TaskDelegate.swift; sourceTree = ""; }; - 7F2667D8C1F3EC7F5E7989CBAD0B8281 /* RemoteRecord+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+File.swift"; sourceTree = ""; }; - 7F657EAC00204AF30C7E4EA0B4518AC5 /* NstBoardUnlA9746.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlA9746.hpp; sourceTree = ""; }; - 7F66CA249330A41FAC70007D5C650CD6 /* NstBoardBmc64in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc64in1.hpp; sourceTree = ""; }; + 7EF1745163AD82481D56DE9A59BA24BA /* RDP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RDP.h; sourceTree = ""; }; + 7F0C88099340B4BDDC86A5E8AF05C183 /* ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist"; sourceTree = ""; }; + 7F445EA81E198A163B9A40E5A2E7653A /* NstBarcodeReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBarcodeReader.hpp; sourceTree = ""; }; + 7F8715F2E1CC86C7F667183E1D9CD888 /* UIAlertAction+Actions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertAction+Actions.m"; path = "Roxas/UIAlertAction+Actions.m"; sourceTree = ""; }; 7FC76FBFEFEF12E5FDF51209753949E3 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = ""; }; - 801A6C2440FD328341E6550569C3A232 /* glext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glext.h; sourceTree = ""; }; - 80D87DDEE1CB809E00A47151D677F57F /* NSLayoutConstraint+Edges.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+Edges.m"; path = "Roxas/NSLayoutConstraint+Edges.m"; sourceTree = ""; }; - 810C174C92F9D6B39CFFD8CDEA0902A6 /* matrix.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = matrix.h; sourceTree = ""; }; - 8110229A2612B6ADEB790CF3A880D7F8 /* DriveService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DriveService.swift; path = "Backends/Drive/Harmony-Drive/DriveService.swift"; sourceTree = ""; }; - 8127AEC9343CDF5FA184EEAB2A4E598F /* ftdebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftdebug.h; sourceTree = ""; }; - 814013939A450B54B81B83B1EDB7A650 /* RSTNibView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTNibView.h; path = Roxas/RSTNibView.h; sourceTree = ""; }; - 81699BBB7E4A8A98AF2985A53BE0E791 /* MMU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MMU.h; sourceTree = ""; }; - 816D92F12BC3698BEE8F45620FB157CC /* 65c816.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = 65c816.h; sourceTree = ""; }; - 81A8FD9E119F896E60B2564D9D8761CD /* GBCTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCTypes.h; sourceTree = ""; }; - 81ACB985C1F71D0FC6DF2A0CBEC3C3D6 /* NstFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFile.hpp; sourceTree = ""; }; + 7FFB36B4D0570AD68F47D94918FDE579 /* N64EmulatorBridge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = N64EmulatorBridge.m; sourceTree = ""; }; + 8000DA34B53DFAB07C0D683921D81892 /* NstBoardBmcNovelDiamond.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcNovelDiamond.hpp; sourceTree = ""; }; + 80019774B54716FABF7DEFCCD68E75C2 /* Debugger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Debugger.cpp; sourceTree = ""; }; + 8009E402564A24AC35F53518E984813D /* NstTrackerMovie.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTrackerMovie.hpp; sourceTree = ""; }; + 8058D48F8CF8A2D21FE0EEF65FE6BFF6 /* RecordController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordController.swift; sourceTree = ""; }; + 80C066584D91192C2CB5B4E7606E8F20 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = DSDeltaCore/Standard.deltamapping; sourceTree = ""; }; + 80E83F0F41410406BC51FD2A72523649 /* STTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = STTypes.h; sourceTree = ""; }; + 813D0026660BC9FA9BE9781E84D1F4A9 /* NstBoardBmc31in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc31in1.hpp; sourceTree = ""; }; + 81586D54535F45B193EF58A3F9A1B704 /* png.c */ = {isa = PBXFileReference; includeInIndex = 1; path = png.c; sourceTree = ""; }; + 816CBA26E3940C8402B8EFE63E169294 /* RSTLaunchViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTLaunchViewController.h; path = Roxas/RSTLaunchViewController.h; sourceTree = ""; }; + 816DCE1C4957B5B87AF4A2EA4D7451FF /* glsl_FXAA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_FXAA.cpp; sourceTree = ""; }; + 819239301CC1811B87F438BAF1B0EED6 /* t1types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = t1types.h; sourceTree = ""; }; + 81D97BEB994C55C6EFABAC633B5D0966 /* F3DEX2ACCLAIM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2ACCLAIM.cpp; sourceTree = ""; }; 81FFA4A03112CF74DC8BA775C6B4E3AC /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SQLite.swift.modulemap; sourceTree = ""; }; - 821E332423194BD75B70F229D0992A67 /* ftstream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftstream.h; sourceTree = ""; }; - 82B290FA3AD7AE40209494B966FF4B3B /* af_rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = af_rtc.h; sourceTree = ""; }; - 82C27E6DA6F13A8BFDE148AF1AEB92CD /* Debugger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Debugger.cpp; sourceTree = ""; }; - 82DC27EAD4860B5C690A7972067D9F11 /* NstBoard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoard.hpp; sourceTree = ""; }; - 83189ADFB9F73F46FCE23B3CE9012A77 /* dummy_input.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_input.h; sourceTree = ""; }; - 8326EAB88C81EB3273CE84BFBE30C290 /* m64282fp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64282fp.h; sourceTree = ""; }; + 8200E4FD4C7E3CC1AF2E0385FF61B65A /* NstBoardSachen74x374.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachen74x374.hpp; sourceTree = ""; }; + 820605CE2F2AA8CECEF751B81CDC1F0B /* NstInpPowerGlove.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPowerGlove.hpp; sourceTree = ""; }; + 82C8F13E35C588F34CD7F1A313360A79 /* cp0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp0.h; sourceTree = ""; }; + 8310F880B7CC9B1650278B22FEEA7A2B /* GBCInputGetter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GBCInputGetter.cpp; sourceTree = ""; }; + 831586913D802CF0F3BD70D6BB259E5B /* Record.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Record.swift; sourceTree = ""; }; 83433F387FADB6F93585B15C45F26C41 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; + 8346ECC5A3AFD14F0746FD2871ECDA43 /* osal_files.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osal_files.h; sourceTree = ""; }; 8364432B8E72D0344D921A2164F73693 /* DropboxTeamClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxTeamClient.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxTeamClient.swift; sourceTree = ""; }; - 838D80A959C5C766EFB33104D72194AF /* RTC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RTC.h; sourceTree = ""; }; - 83C196FE4CF60A03565B95B1C9C0217C /* NstBoardBmc36in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc36in1.hpp; sourceTree = ""; }; - 83C98EC2B9B01038DDBDF79833E8FA12 /* RSTCellContentChange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentChange.h; path = Roxas/RSTCellContentChange.h; sourceTree = ""; }; + 838F667D353D92B49C6150D47D8E5C4D /* TxTexCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxTexCache.cpp; sourceTree = ""; }; + 83C151DB4B297DC753E27E2E0F3C3BC4 /* NstImageDatabase.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstImageDatabase.hpp; sourceTree = ""; }; 83D5738F79EFF74666BE041EC76ACDFA /* GTLRErrorObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRErrorObject.h; path = Source/Objects/GTLRErrorObject.h; sourceTree = ""; }; - 83D5EF55975A2BFBB9FF14D9389BFBB6 /* Main.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Main.hpp; sourceTree = ""; }; - 83DAD8759111F18B4EDD79709EA9C168 /* L3DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3DEX2.h; sourceTree = ""; }; - 83DEFE6EC2B2AF94239CCEA8D9F36C59 /* NstBoardBmcSuperHiK4in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperHiK4in1.hpp; sourceTree = ""; }; + 83EAB31E2D8E6844C8AD8F3F95F9ABB1 /* DriveService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Files.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Files.swift"; sourceTree = ""; }; + 83F4160DB27DAF789E0C84F4BE223EAD /* NstBoardIremH3001.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremH3001.hpp; sourceTree = ""; }; + 8466D7DB1CB791A44DECBDED6290F796 /* cheatSystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheatSystem.h; sourceTree = ""; }; + 84758A5917B6274B633D5B6A3A3E91F9 /* ftmac.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmac.h; sourceTree = ""; }; 848F3AD32B7A8F7F08945CA3643BE446 /* CoreFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreFunctions.swift; path = Sources/SQLite/Typed/CoreFunctions.swift; sourceTree = ""; }; - 84E73D7D5D1F2FA41BD8181D33BA65D2 /* ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist"; sourceTree = ""; }; - 850505914251942B1C511C89AAFFF578 /* RSTLoadOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTLoadOperation.h; path = Roxas/RSTLoadOperation.h; sourceTree = ""; }; - 850B3AEB1917875997484AA3953B926F /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = SNESDeltaCore/Standard.deltamapping; sourceTree = ""; }; - 85384C51860DF6A3AB223E1B8439C471 /* pure_interp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pure_interp.h; sourceTree = ""; }; + 84A54517246C22B36712CBF7B02E3BED /* conffile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = conffile.h; sourceTree = ""; }; + 84CB3FC8544B28E9203C07151D44AC01 /* AudioRendering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioRendering.swift; sourceTree = ""; }; + 85237BE80E426B918024FFAC9251A50C /* ftbbox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbbox.h; sourceTree = ""; }; + 8523ACBE5D20530D62699515CC0C275A /* NstBoardSachenS8259.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenS8259.hpp; sourceTree = ""; }; + 85245105BDC64E12FADEF30BE855FEC1 /* NstBoardTxcMxmdhtwo.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcMxmdhtwo.hpp; sourceTree = ""; }; + 8548E8B79648F224295606EFFF726D52 /* F3DBETA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DBETA.cpp; sourceTree = ""; }; + 85522F84ED70DA2A5D98CB751A79DB2E /* NstCrc32.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCrc32.hpp; sourceTree = ""; }; + 8566DFE3C9D864188FAC41FB8316C1B0 /* NstInpBarcodeWorld.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpBarcodeWorld.hpp; sourceTree = ""; }; 85A4BD81985AEDB6D9BA5E50804225D0 /* libGBADeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGBADeltaCore.a; path = libGBADeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 85B0ECFFCE6A9F6387533730061A1A7A /* TextureFilters_hq2x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_hq2x.h; sourceTree = ""; }; 85B98EACC45CEADA2FC73EB069E37FC7 /* GTLRDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDefines.h; path = Source/GTLRDefines.h; sourceTree = ""; }; 85CA254539B604E12B65C0315AD84D21 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; 85D72CEA77A8089188A57FDD92DB3E21 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; - 85DD22654F689D365C8835281CEB8F13 /* defined_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = defined_ptr.h; sourceTree = ""; }; - 86059796C87D909C7319742A6AD185D9 /* elf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = elf.h; sourceTree = ""; }; - 866D05F9B3FED97151B776FED3394283 /* RSTBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTBlockOperation.m; path = Roxas/RSTBlockOperation.m; sourceTree = ""; }; - 867A52819D0036A2C45DFD094D11F381 /* memgzio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memgzio.h; sourceTree = ""; }; - 86A843DB560CD6D81B7EF3A9F6D8F5FB /* NstBoardKonami.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonami.hpp; sourceTree = ""; }; - 86D90CE2D6B95B2AA99812247EC3691B /* pixform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pixform.h; sourceTree = ""; }; - 8715DB110EE34E0C96E7C74313A7A89A /* ttnameid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ttnameid.h; sourceTree = ""; }; + 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = N64DeltaCore.xcconfig; sourceTree = ""; }; + 867EE1D22093A5E26C0604E46F43DE5B /* Rect.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Rect.hpp; sourceTree = ""; }; + 867F308297D845E4AB0774374BB3EFB4 /* NstVideoFilterxBR.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterxBR.hpp; sourceTree = ""; }; + 8693CF6D0BA1054AECDB9EBCB129A363 /* NstBoardBmc110in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc110in1.hpp; sourceTree = ""; }; + 86BF9E53BBD7D649033BB1F156870DE2 /* svpscmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpscmap.h; sourceTree = ""; }; + 86CEE581D78B9E9138136F67D7ADF345 /* NstApiMachine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiMachine.hpp; sourceTree = ""; }; + 86E0555011765103678D4A46B0D7CD30 /* FinishUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishUploadingRecordsOperation.swift; sourceTree = ""; }; + 86EF6CED706D9CF50812AACFBA3D3205 /* opengl_GLInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_GLInfo.h; sourceTree = ""; }; + 87039339C5C272F9501B594DB154C3A4 /* RecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordOperation.swift; sourceTree = ""; }; + 87263EF46CC8CB36CF6CC2C7E1D63E62 /* Result+Success.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Success.swift"; sourceTree = ""; }; + 873C9B1C70581E3ACE0CEA93EA9568DB /* NstBoardBmc9999999in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc9999999in1.hpp; sourceTree = ""; }; 8760D486359333F01A58D9A3E6965D9E /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; }; - 87F4B88C0892C297B31AE94A0E93539C /* NstBoardMmc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc4.hpp; sourceTree = ""; }; + 876C8D28D439902E84EF476C79F7E2C8 /* MemoryStatus_mupenplus.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = MemoryStatus_mupenplus.cpp; sourceTree = ""; }; + 877821421C3883E9EC8A19BABE97DA2D /* GraphicBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicBuffer.h; sourceTree = ""; }; + 879E33D39DED7A856D086D3BB622C65A /* NstBoardUnlWorldHero.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlWorldHero.hpp; sourceTree = ""; }; + 87CC302B1B1C6F71828303A524C51690 /* pngwutil.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwutil.c; sourceTree = ""; }; 882DA4CFDB38488363DB6FA79E5CF3BE /* ZIPFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZIPFoundation-dummy.m"; sourceTree = ""; }; - 8837E67069B10F42A5536F61DD3DD225 /* Rect.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Rect.hpp; sourceTree = ""; }; 883B872956FB7C28FDBB574888357A62 /* GTMNSString+URLArguments.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMNSString+URLArguments.m"; path = "Foundation/GTMNSString+URLArguments.m"; sourceTree = ""; }; - 8844375C652ED43B6CF8305EA32D5488 /* pnginfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pnginfo.h; sourceTree = ""; }; - 887068F06A80B516F5DE95AE14158D3F /* SoundDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundDriver.h; sourceTree = ""; }; - 888803D1EF43D58657C5732AFAC576BC /* F5Indi_Naboo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F5Indi_Naboo.h; sourceTree = ""; }; + 8854B895A2B698DDB8BD5A2748BC1885 /* NLS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NLS.h; sourceTree = ""; }; + 8854FB70C2F1990688897351E465107C /* NstBoardBtl6035052.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtl6035052.hpp; sourceTree = ""; }; + 886A3E189B577FD6E4F71CFF3F0C163C /* ftgasp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgasp.h; sourceTree = ""; }; + 886FBFDCA7FC1D72F001F3E9535B924A /* clock_ctime_plus_delta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clock_ctime_plus_delta.h; sourceTree = ""; }; 8888D8043BC735B8831AE2FB72C5DCE4 /* SharingRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SharingRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/SharingRoutes.swift; sourceTree = ""; }; - 88DE70070F082BF2437581BD7BB91BDB /* NstChecksum.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstChecksum.hpp; sourceTree = ""; }; + 888E98C361E5C340C2DFB6D6D1029392 /* hle.c */ = {isa = PBXFileReference; includeInIndex = 1; path = hle.c; sourceTree = ""; }; + 88C14FED0FDEBE31AAA6DE08EFA9B83D /* Clock.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Clock.hpp; sourceTree = ""; }; + 88C31AF11910728A45F6A72A4BF44968 /* MMU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MMU.h; sourceTree = ""; }; + 88EF2BA95EB1E18CBC11B6130EC55E16 /* fttrace.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fttrace.h; sourceTree = ""; }; + 88F8AB3F41F84C94BBEED8C22E4E61BC /* gb_cart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gb_cart.h; sourceTree = ""; }; 89132F0647F462DF7B2532346D3447EE /* SQLiteObjc.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SQLiteObjc.m; path = Sources/SQLiteObjc/SQLiteObjc.m; sourceTree = ""; }; - 89308C156B65EB233E0F8E7B01291775 /* ftlzw.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlzw.h; sourceTree = ""; }; - 894545843DCDE3856F3A5F4BA90A2227 /* dummy_video_capture.c */ = {isa = PBXFileReference; includeInIndex = 1; path = dummy_video_capture.c; sourceTree = ""; }; - 89A7A6CB88FF9F00BD89DB332B5BDA1D /* svpostnm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpostnm.h; sourceTree = ""; }; - 89AD69668AA33B36799179839B4578DB /* mbc3_rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mbc3_rtc.h; sourceTree = ""; }; - 89C8E96993FFE0F04D42EF2FC57593F3 /* idec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = idec.h; sourceTree = ""; }; - 89D77AD643D660EF8D5D89B0A70F143B /* NstBoardBtlMarioBaby.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlMarioBaby.hpp; sourceTree = ""; }; + 8958320DAE6D887ED9E5A519C025718B /* TexrectDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TexrectDrawer.cpp; sourceTree = ""; }; + 898591A3CC8C587571FA098CCC20AADF /* svotval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svotval.h; sourceTree = ""; }; + 89ACBACFE5506B98A5A01C05D96A32A6 /* m64p_vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_vidext.h; sourceTree = ""; }; + 89BCCB329ED94B86E8C48CB481557F79 /* GPU3D_OpenGL_shaders.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GPU3D_OpenGL_shaders.h; sourceTree = ""; }; + 89E0ED605D7C2BAE8463AEB4ADEDF371 /* ftstroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftstroke.h; sourceTree = ""; }; + 89E570CBAF755D32B62B2B5506AE1CB8 /* psaux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = psaux.h; sourceTree = ""; }; + 89F66807040C88F86F074A7DE8D84643 /* txWidestringWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = txWidestringWrapper.h; sourceTree = ""; }; 8A171E0701260ECA35983A32816DB522 /* GTLRObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRObject.h; path = Source/Objects/GTLRObject.h; sourceTree = ""; }; - 8A2F89C405DCAF9349F68843D8672A87 /* ftlist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlist.h; sourceTree = ""; }; - 8A3F0FDFBE86AC5763C0A89166EFC859 /* Game.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Game.swift; sourceTree = ""; }; - 8A542F20E7647EA7B36CB7C0565E279A /* SyncCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SyncCoordinator.swift; path = Harmony/SyncCoordinator.swift; sourceTree = ""; }; - 8A624FFF16B311D8F1A19BE7C8EC0DAE /* SoundFileFactory.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileFactory.inl; sourceTree = ""; }; - 8AA718DD7968CE1C58CD34313E5FA869 /* TxFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxFilter.h; sourceTree = ""; }; - 8AA9AC2951C819D3D589F82FAD7F5A65 /* L3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3D.cpp; sourceTree = ""; }; - 8B0132D8F45B4B5666CBF5652A345F0F /* NstSoundRenderer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundRenderer.hpp; sourceTree = ""; }; + 8A25DA0D46D9C9C287A50225828AB7C6 /* NstBoardBmcT262.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcT262.hpp; sourceTree = ""; }; + 8A65C030A8CB605B689A888D7DED867A /* NstInpCrazyClimber.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpCrazyClimber.hpp; sourceTree = ""; }; + 8A731410071DE76AAF5149412AEC57ED /* Drawable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Drawable.hpp; sourceTree = ""; }; + 8AE46FAE84F979857B31ACDC50F71617 /* Sound.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sound.hpp; sourceTree = ""; }; + 8B38944C4991CE901210237BE9D90369 /* GBADeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBADeltaCore.h; sourceTree = ""; }; 8B7A2F207266496310F9415852A1EBD7 /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; - 8B8B22C2F3B453B4853E09852C790FFB /* instruction_attributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instruction_attributes.h; sourceTree = ""; }; - 8BA47FDD506E39A2EC6B9965BF416961 /* DriveService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Versions.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Versions.swift"; sourceTree = ""; }; - 8BA5B2EC8B8F0A5D59CC97B40A380CA8 /* counterdef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = counterdef.h; sourceTree = ""; }; - 8BA8D788852783316C1BE135C3ADC92B /* sfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sfnt.h; sourceTree = ""; }; - 8BD3541718061A90921DC7BAA43765B2 /* statesaver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = statesaver.h; sourceTree = ""; }; - 8C0B76FEDF3385F8F3AF9A682EC0E276 /* TxCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxCache.h; sourceTree = ""; }; - 8C1C055B90B4594009DB00C4694AD0E8 /* ZSortBOSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZSortBOSS.h; sourceTree = ""; }; - 8C20A4261AAB5D4731891122D5059BB1 /* NstApiDipSwitches.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiDipSwitches.hpp; sourceTree = ""; }; + 8B888530E83F42860A13FCEBBC74F753 /* tlb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tlb.h; sourceTree = ""; }; + 8B9083EB242665508C97535A7311874C /* RSTOperationQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperationQueue.h; path = Roxas/RSTOperationQueue.h; sourceTree = ""; }; + 8B914A55A521830F330AED535B8835A5 /* FinishDownloadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishDownloadingRecordsOperation.swift; sourceTree = ""; }; + 8BB6F43FE56F847084FF20D1BCB4BFAF /* device.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = device.h; sourceTree = ""; }; + 8BD21182E096CF262039B0C3A26E9769 /* Thread+RealTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Thread+RealTime.swift"; sourceTree = ""; }; + 8C1BC49685F5EE8CD682028D49698258 /* controller_input_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = controller_input_backend.h; sourceTree = ""; }; + 8C393F6D77A263F418781F717B7AA90D /* storage_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = storage_backend.h; sourceTree = ""; }; + 8C5CBC5126812FD2065CDBAEA94BF976 /* ControllerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerView.swift; sourceTree = ""; }; + 8C62C2A7373598D1D87C3F00E90A7722 /* array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = ""; }; + 8C655B71EB6A742DCE13DFA6D245D51A /* MelonDSDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MelonDSDeltaCore-prefix.pch"; sourceTree = ""; }; + 8C7B436FC2BE106D5FAF2A5FE73A0CEB /* instr_counters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instr_counters.h; sourceTree = ""; }; + 8C90F98584A8B4B3D48149088FD57C77 /* NstBoardWaixingSgz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSgz.hpp; sourceTree = ""; }; 8C943FB0B36A40A6ED1622A947B642B5 /* GoogleAPIClientForREST-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleAPIClientForREST-umbrella.h"; sourceTree = ""; }; - 8CC4973A6BF6AFF9D8562E7A4E9AE4D8 /* CombinerProgram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CombinerProgram.h; sourceTree = ""; }; - 8CC8FD6332B53E6AEADA551A3042A681 /* NstInpFamilyKeyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpFamilyKeyboard.hpp; sourceTree = ""; }; - 8CD89764ACCFBF65BFF14776DAB37EA9 /* DSTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DSTypes.h; sourceTree = ""; }; - 8CE5B0A31ACD87513F0942D9E71F9BD6 /* DeleteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordsOperation.swift; sourceTree = ""; }; - 8D296A26945CFBCEEA746096B5AFC66D /* png.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = ""; }; - 8D564037F9192979A0BA63A5F9545CDE /* UpdateRecordMetadataOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UpdateRecordMetadataOperation.swift; sourceTree = ""; }; - 8DB91BFF06E8641AEB9DAF85B4EAEF79 /* GBCDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GBCDeltaCore.modulemap; sourceTree = ""; }; - 8DC46E7D667B05E526897085BDA6A68F /* KeyboardGameController.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = KeyboardGameController.deltamapping; path = "DeltaCore/Supporting Files/KeyboardGameController.deltamapping"; sourceTree = ""; }; - 8DDA3FCC5B59298F8FF38E7914D03FB0 /* Utf.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Utf.inl; sourceTree = ""; }; - 8DDDB2DB5582729DFD3B142A0841B180 /* UIAlertAction+Actions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertAction+Actions.h"; path = "Roxas/UIAlertAction+Actions.h"; sourceTree = ""; }; + 8D03641E7133709402578F9CCAF2CFA6 /* NstBoardCnePsb.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCnePsb.hpp; sourceTree = ""; }; + 8D2AF58B1BA6D02D19EAE80F80E4CA9D /* bootrom_hle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bootrom_hle.h; sourceTree = ""; }; + 8D330D00A36CAD5DB271066627735CA4 /* m64p_debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_debugger.h; sourceTree = ""; }; + 8D3AABE38A819F833123F47E08B8F6F8 /* KeyedContainers+ManagedValues.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "KeyedContainers+ManagedValues.swift"; sourceTree = ""; }; + 8D629AE3BF67DAB06622670203476B43 /* NstApiSound.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiSound.hpp; sourceTree = ""; }; + 8DA8A3992CF991EF375A78B56D07EF09 /* GPU3D_Soft.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GPU3D_Soft.cpp; sourceTree = ""; }; + 8DC71414A1C59E302D19045860C86F3D /* counterdef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = counterdef.h; sourceTree = ""; }; + 8DC89DB8BDA2642C42D9CE6C493AC371 /* TxFilterExport.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxFilterExport.cpp; sourceTree = ""; }; + 8DE3498D124753251241C3DCDB5CB194 /* RSTOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperation.h; path = Roxas/RSTOperation.h; sourceTree = ""; }; + 8DEF68BFA723483A3C9540DE5D2B9CD6 /* NstApiTapeRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiTapeRecorder.hpp; sourceTree = ""; }; 8DF503EB5BF2CD824792BFD2BBC0992F /* libDSDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libDSDeltaCore.a; path = libDSDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 8DF7E6D80CBC58876AC10154A9D6A141 /* fttrigon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fttrigon.h; sourceTree = ""; }; - 8E0EF6B3B03ADAA45342D1E3EC169D8E /* GBCDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GBCDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 8E110C092AEF72EDB7C33791CA0BCBEF /* NstBoardSachenTcu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenTcu.hpp; sourceTree = ""; }; - 8E38F730D5EC5C9EF41311D289592151 /* lirc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = lirc.h; sourceTree = ""; }; - 8E80A2591A2367572B4E5468FB72C0B0 /* opengl_Utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_Utils.h; sourceTree = ""; }; - 8ECA7AB7A3076AA6E4705CB0523A2472 /* ftwinfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftwinfnt.h; sourceTree = ""; }; - 8ECDF285F3E093B02D0B6A530686B0BF /* N64Types.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = N64Types.m; sourceTree = ""; }; - 8ED616369FCB01DA566D1197932686D0 /* RDP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RDP.h; sourceTree = ""; }; - 8EE05B7A52F5A35ED15F9580C4144EC6 /* ButtonsInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ButtonsInputView.swift; sourceTree = ""; }; + 8E28B73D51B4BAB2720A6765199517D2 /* VertexArray.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = VertexArray.hpp; sourceTree = ""; }; + 8E319DE75A7A4BF735167A2B78A55635 /* SPI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SPI.cpp; sourceTree = ""; }; + 8E52E44669D74069EC4BCEB20D5BBB02 /* NstBoardSachenStreetHeroes.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenStreetHeroes.hpp; sourceTree = ""; }; + 8E5F937130AAF165D6DC4D8C10E22FC7 /* regcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = regcache.h; sourceTree = ""; }; + 8EB12D179F66D53718BBF3591DC3E8BA /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + 8EB59526DBBF1B92F1C18D793F09DF21 /* Utf.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Utf.inl; sourceTree = ""; }; + 8EE40C178D686A2BE9C93C6CF7FAE736 /* RSTHelperFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTHelperFile.h; path = Roxas/RSTHelperFile.h; sourceTree = ""; }; + 8EE4DF888D759F8A1EFC289D72E1DF95 /* GameControllerInputMapping.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerInputMapping.swift; sourceTree = ""; }; + 8EEE2D5A7CAE13A6BDB9042F46420270 /* UICollectionView+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionView+CellContent.h"; path = "Roxas/UICollectionView+CellContent.h"; sourceTree = ""; }; 8EF02F520CDA87AF4813D4764ECD43F5 /* CustomRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomRoutes.swift; path = Source/SwiftyDropbox/Shared/Handwritten/CustomRoutes.swift; sourceTree = ""; }; - 8F44D6F54A29F5DC917F8C94CFA28050 /* Harmony.xcdatamodel */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.xcdatamodel; path = Harmony.xcdatamodel; sourceTree = ""; }; - 8F52AAB71856AE2D876485F77504BCE5 /* NstBoardSachenStreetHeroes.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenStreetHeroes.hpp; sourceTree = ""; }; - 8F8EFA2C77C87A2217F6683EB75926B9 /* TextDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextDrawer.h; sourceTree = ""; }; - 8FA72104E6FCAFAAAE36DA0189E9CB62 /* NstBoardIremG101.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremG101.hpp; sourceTree = ""; }; - 8FB4CA94B76B2411E5EE78414D82B20E /* TxTexCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxTexCache.h; sourceTree = ""; }; - 8FE991842BF4F0D0508BF1CDC5290400 /* NstBoardBtlAx5705.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlAx5705.hpp; sourceTree = ""; }; - 9039BACE3570843851BBD1B1CD4E8944 /* NstFpuPrecision.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFpuPrecision.hpp; sourceTree = ""; }; - 906947FD8A5D4B956AF6B2AB2C50E677 /* FrameBufferInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FrameBufferInfo.h; sourceTree = ""; }; - 90696DCC98EAADB42AE7018A27D415F5 /* glsl_ShaderStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_ShaderStorage.h; sourceTree = ""; }; - 9078D2E6A526B27EFAB78F4949C2039E /* FinishDownloadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishDownloadingRecordsOperation.swift; sourceTree = ""; }; - 90DE8F7A964963C67D9A493018E6E24C /* NstBoardSunsoftDcs.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoftDcs.hpp; sourceTree = ""; }; - 90E20CF10E66ADE35B580C23C72D76A4 /* Thread.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.hpp; sourceTree = ""; }; - 9106F296AA7B0EA373050E2222387718 /* NstBoardBmcT262.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcT262.hpp; sourceTree = ""; }; - 911F72B30958B16B6FC132BEFBD9544B /* NstCartridge.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridge.hpp; sourceTree = ""; }; - 912A34EEAB2393779814319C7BDDC198 /* BPMDetect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BPMDetect.h; sourceTree = ""; }; - 9140DC01C356F980A0A4E04F1CCC3636 /* DropboxService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Records.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Records.swift"; sourceTree = ""; }; - 914481AFB63938A5A293F3B322F5FD91 /* mi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mi_controller.h; sourceTree = ""; }; - 916788F0642B21A136DE8950DB47B018 /* instructions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instructions.h; sourceTree = ""; }; - 91D82360E170EAD9A1C2BFF9FB3ACF33 /* libretro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libretro.h; sourceTree = ""; }; - 92004DFFAF89F721D5477783E22161B9 /* NstInpBarcodeWorld.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpBarcodeWorld.hpp; sourceTree = ""; }; + 8F33D3A6F44894D367D99FF4F1A9DD9C /* RSTCollectionViewGridLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCollectionViewGridLayout.m; path = Roxas/RSTCollectionViewGridLayout.m; sourceTree = ""; }; + 8F3A9DEA75F75C3ECC9442042F92E484 /* NstFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFile.hpp; sourceTree = ""; }; + 8FACC0B21FDAA0F253D9BB7A5062C4B0 /* ftbzip2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbzip2.h; sourceTree = ""; }; + 8FE7624D239D6E6FDDCBDC31458E790E /* NstApiNsf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiNsf.hpp; sourceTree = ""; }; + 8FEBC190192DF7DAD9E802180C71E395 /* rsp_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rsp_core.h; sourceTree = ""; }; + 8FF9B56C14F9DA7D4C860A76893C21C5 /* remote.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = remote.h; sourceTree = ""; }; + 904DA70530378048CC4E91EB8EF417B8 /* SoundSource.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundSource.hpp; sourceTree = ""; }; + 90564B99F2C2EF43FEC4BA55EEF618FB /* AnyInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnyInput.swift; sourceTree = ""; }; + 91142883C9B61CDABD669F132E23BA6B /* glsl_SpecialShadersFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_SpecialShadersFactory.cpp; sourceTree = ""; }; + 9147D9287688D6DBCB391FCFFB5E8CD9 /* F3DSETA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DSETA.h; sourceTree = ""; }; + 915FAE52C5A766087CB6E4CB6D7ABE8D /* S2DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = S2DEX2.cpp; sourceTree = ""; }; + 9165270C982D16BF84A0C0FC722EF7F0 /* sar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sar.h; sourceTree = ""; }; + 91B3FF1A239E6CDBA01D3586039A9C7E /* WifiAP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = WifiAP.cpp; sourceTree = ""; }; + 91E7D2C0AB72AAC3471B7798B8B29960 /* TextureFilters_2xsai.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_2xsai.h; sourceTree = ""; }; + 91F00C1F0698F991A6DDB258AD21774B /* DisplayWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DisplayWindow.h; sourceTree = ""; }; 9209A157558D6C7A57364B029B93BF01 /* GTLRUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRUtilities.m; path = Source/Utilities/GTLRUtilities.m; sourceTree = ""; }; - 920F6CCBFE16A29B89A155E099306B56 /* Glyph.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Glyph.hpp; sourceTree = ""; }; - 92238392EDEE95FD2FBE52D9471C5264 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; }; - 9264D4DA6A66BA54A811C0AC60576BC4 /* fxp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxp.h; sourceTree = ""; }; - 926DE74AEC8B4A89CE303E7D15837382 /* xxhash.c */ = {isa = PBXFileReference; includeInIndex = 1; path = xxhash.c; sourceTree = ""; }; - 92B20D8D80FF2DF35DE5BB67277F01FB /* Network.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Network.hpp; sourceTree = ""; }; - 92B94EAC848FCE04BDC76F2D0CC75878 /* file_storage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = file_storage.h; sourceTree = ""; }; - 92BF79F8CEE5F58CD7F29CAF0AED592D /* hle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle.h; sourceTree = ""; }; - 92D57715B2185B75E5396245FFBAE48E /* interrupter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interrupter.h; sourceTree = ""; }; - 92E86921655A3432DD8E836D484C63DB /* NstBoardSachenSa72007.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa72007.hpp; sourceTree = ""; }; - 92F06EFCC636BAAC527CE6543D3ABA5E /* NstBoardBmc8157.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc8157.hpp; sourceTree = ""; }; - 9300FDAE5D36EBEB31F93D3C7215E806 /* SoundTouch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundTouch.h; sourceTree = ""; }; + 9213596C3CA0E060FC0617A361F98FCE /* port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = port.h; sourceTree = ""; }; + 923B6C52E65298DE9941024CC376A04A /* Config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Config.cpp; sourceTree = ""; }; + 92BC65E8B857820DDE5B77199E9852C4 /* PlatformConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PlatformConfig.h; sourceTree = ""; }; + 92C0056228C548EC5C0C4574520A559A /* GLideN64.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GLideN64.cpp; sourceTree = ""; }; + 92F0DF6F9D8A1A4D8748ADB82258371D /* Shader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Shader.hpp; sourceTree = ""; }; + 92FE3ED203451DF6D2875541FE82FE35 /* NstVideoFilterHqX.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterHqX.hpp; sourceTree = ""; }; + 93025F4FEFDBE0D027E4CD70D1951BF9 /* DSDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DSDeltaCore.modulemap; sourceTree = ""; }; + 93058B797119FD95E8232C8C7B7BE0AA /* mupen64plus_DisplayWindow.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = mupen64plus_DisplayWindow.cpp; sourceTree = ""; }; 930C6159C2738B8427010914FE6F8715 /* SDWebImageDecoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDecoder.m; path = SDWebImage/SDWebImageDecoder.m; sourceTree = ""; }; - 931FABEC117CE8C4B00CF9281008FAC6 /* movie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = movie.h; sourceTree = ""; }; - 93307F759AE55916EE4F5A828F7C4E89 /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; - 933F52FD6D2B1895EB6774DAEDF6A159 /* inputSDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = inputSDL.h; sourceTree = ""; }; - 93910D17E45B6F0DD31F72703A5A2651 /* ExternalGameControllerManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExternalGameControllerManager.swift; sourceTree = ""; }; - 93B1E65A642EA1EAA4D3043EE455F0DA /* version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; - 93D8D16485DDCB1B9E14A3ECABF683B8 /* GBCDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBCDeltaCore-prefix.pch"; sourceTree = ""; }; - 94228059341CBA18109047D570DAEA1A /* seta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = seta.h; sourceTree = ""; }; + 931ECBBA73F768F5570C9A96C3F2C003 /* T3DUX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = T3DUX.cpp; sourceTree = ""; }; + 932A9FB4261665509630DF314C0698B4 /* NSConstraintConflict+Conveniences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSConstraintConflict+Conveniences.m"; path = "Roxas/NSConstraintConflict+Conveniences.m"; sourceTree = ""; }; + 932ED892F2C78B795C9514E800D066F3 /* RSTSeparatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTSeparatorView.m; path = Roxas/RSTSeparatorView.m; sourceTree = ""; }; + 933D69C235D50794635AA2A58BC23D85 /* NDS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NDS.h; sourceTree = ""; }; + 9378D679A1407D0B1973322B7BC01CC6 /* ftchapters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftchapters.h; sourceTree = ""; }; + 939A37FF787B2929926C6A99E612A7AD /* TcpSocket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TcpSocket.hpp; sourceTree = ""; }; + 93A4D0810FAC23701F57EE4E6CA1A7C6 /* NstBoardWaixingFfv.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingFfv.hpp; sourceTree = ""; }; + 93BDAC11CA2A4DE08DB5A3ACAFE90787 /* NstInpKonamiHyperShot.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpKonamiHyperShot.hpp; sourceTree = ""; }; + 93D345212AEDE1FC050CD40AF657590D /* elf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = elf.h; sourceTree = ""; }; + 93D36FB1E125F6A30F7E99925C34CD64 /* transferpak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = transferpak.h; sourceTree = ""; }; + 93D6A333E30962F5423F826B733E702F /* memmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memmap.h; sourceTree = ""; }; + 93DB6CBD9964A538F778E19D3832F2B9 /* L3DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3DEX2.cpp; sourceTree = ""; }; + 94188727366A8D8FB099D152B9B5514A /* Harmony.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Harmony.h; path = Harmony/Harmony.h; sourceTree = ""; }; + 94393ABA91B101430546FBAF247742E1 /* NstStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstStream.hpp; sourceTree = ""; }; + 944052D0ED4C8624EF4485EE37D7898C /* opengl_ColorBufferReaderWithPixelBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithPixelBuffer.cpp; sourceTree = ""; }; + 9469FE680E41D7D8C8AD938E3450532A /* NstBoardBmcVrc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcVrc4.hpp; sourceTree = ""; }; 947D4308D4F2D06F37BC4881F1637F48 /* GTLRFramework.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRFramework.m; path = Source/Utilities/GTLRFramework.m; sourceTree = ""; }; - 949120606BFB2FD67DC4240028FEB398 /* SoundSDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundSDL.h; sourceTree = ""; }; - 94AAA4870A47F9FA1AE9463A83E81CB5 /* regcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = regcache.h; sourceTree = ""; }; - 94C8A461D47DE4DDB1AEE7830B56ADAC /* NstApiMovie.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiMovie.hpp; sourceTree = ""; }; - 94D11622874CFF7D4685E506F182E85B /* convert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = convert.h; sourceTree = ""; }; + 949E3958BCE1694E83B41187962E38E9 /* obc1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = obc1.h; sourceTree = ""; }; + 94A3287DE1F597EEEB81597618FA9901 /* NstBoardCneDecathlon.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCneDecathlon.hpp; sourceTree = ""; }; + 94AE1145010E024A90A0B90A56727300 /* NstBoardTaitoX1005.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoX1005.hpp; sourceTree = ""; }; + 94CD261951849F1D22579127673F3769 /* ftmm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmm.h; sourceTree = ""; }; 94D367DD0D99FF2FCAE661017295657C /* GoogleAPIClientForREST.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleAPIClientForREST.xcconfig; sourceTree = ""; }; - 9524C7CAEA9B69DE45AEF5526465F6C0 /* ClipPolygon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ClipPolygon.h; sourceTree = ""; }; - 955407B1C8467036B4E43CAD531EECB3 /* NstVsTkoBoxing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsTkoBoxing.hpp; sourceTree = ""; }; - 95B34037E8B652335969759E49B0F3B4 /* SoundFileReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileReader.hpp; sourceTree = ""; }; + 94D43A3C12E2607439AFFC8A1D1CDE41 /* ftoption.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftoption.h; sourceTree = ""; }; + 951AF961D61C1C3B55D7700D57143D91 /* TxDbg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxDbg.h; sourceTree = ""; }; + 9531D676E6CBCD44E92FD1148601D0F9 /* L3DEX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3DEX.cpp; sourceTree = ""; }; + 9537E6C2A66052A73DC48C9A51A85FCA /* ftgloadr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgloadr.h; sourceTree = ""; }; + 956202907723788FB190BB389EFFDB25 /* ARMInterpreter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ARMInterpreter.cpp; sourceTree = ""; }; + 957167DFF15F649697598EB9E605462A /* DeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DeltaCore-umbrella.h"; sourceTree = ""; }; + 959C8F76FF4E413331083F4B7271A79D /* video_capture_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = video_capture_backend.h; sourceTree = ""; }; + 959E0E9212C0B69B99187171C13A47B2 /* NstBoardVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardVsSystem.hpp; sourceTree = ""; }; + 95C3DB2A71F9C27A5D2A146D6247E970 /* NstBoardBmcResetBased4in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcResetBased4in1.hpp; sourceTree = ""; }; 95CCDA31768B63EA9440181D3FB6DD17 /* SDKConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SDKConstants.swift; path = Source/SwiftyDropbox/Shared/Handwritten/SDKConstants.swift; sourceTree = ""; }; - 95CD1D48C38E182BA0C36253C2422B8A /* NstVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsSystem.hpp; sourceTree = ""; }; - 963237A63667F4DD10B901754C2F8AB2 /* NES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NES.swift; sourceTree = ""; }; - 9678A9FCA9931D354FE7CC755CB6541F /* glcorearb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glcorearb.h; sourceTree = ""; }; - 9688C4994A8E7E8C3EFC291E37D8B050 /* RemoteFile+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+File.swift"; sourceTree = ""; }; - 96AF49FA9F387DAB2B33D0FB432E8FC7 /* NstBoardNihon.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNihon.hpp; sourceTree = ""; }; + 95DAC95CF90CC293BB4C45375EC16E36 /* NstInpZapper.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpZapper.hpp; sourceTree = ""; }; + 95E5CEA8D238911F127A409B1C8C507E /* Config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; + 96095127DE4F08650D82A0815DD6DB1D /* glsl_ShaderPart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_ShaderPart.h; sourceTree = ""; }; + 961ACD2164700D5FD67F6014EB6E2CCF /* VideoRendering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoRendering.swift; sourceTree = ""; }; + 9622F656638DFB246B7A638CCF468156 /* mp3.c */ = {isa = PBXFileReference; includeInIndex = 1; path = mp3.c; sourceTree = ""; }; + 966650603C914F8788C0B0BF65D7516D /* UICollectionView+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionView+CellContent.m"; path = "Roxas/UICollectionView+CellContent.m"; sourceTree = ""; }; + 967EFE5245A453AF9AA01C58AA47CA6F /* GPU2D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GPU2D.h; sourceTree = ""; }; + 96A5F0CC9425A669A2FB1790D3BDAABD /* ftserv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftserv.h; sourceTree = ""; }; 96BB44A4386C6A18D5BEA9F5AF2E1EF0 /* Statement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Statement.swift; path = Sources/SQLite/Core/Statement.swift; sourceTree = ""; }; - 972EE27803ACA015B384716D967BB02E /* Thread.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.cpp; sourceTree = ""; }; - 9750F2298895C6CB0021A8776937EC4B /* PACKED_END.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PACKED_END.h; sourceTree = ""; }; - 98429553652599A6220233E3F8D224FD /* TxHiResCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxHiResCache.cpp; sourceTree = ""; }; - 9863A0F82AE9292BB81384ECFD45AABF /* CombinerKey.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CombinerKey.cpp; sourceTree = ""; }; - 988D4B1A89D40408B7ABF72F05B65950 /* RecordRepresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordRepresentation.swift; sourceTree = ""; }; - 9900B0D2CD9872165A1705598445975C /* Touch.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Touch.hpp; sourceTree = ""; }; - 994237033CE941B5B49F4E0EC30ADD01 /* NstBoardJalecoJf19.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf19.hpp; sourceTree = ""; }; + 96DDCB6416566CEEB9D8CE0B491F6242 /* Thread.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.cpp; sourceTree = ""; }; + 96E4AAD82240CB7384572BAC20D31685 /* GLideN64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideN64.h; sourceTree = ""; }; + 97584AF9C663217B6EF9C0EC7EAE247B /* Savestate.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Savestate.cpp; sourceTree = ""; }; + 97A529B5224544C993C7547C6A313CCC /* ftadvanc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftadvanc.h; sourceTree = ""; }; + 97B1BF27F91C777F9330B2027409CED1 /* NstApiVideo.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiVideo.hpp; sourceTree = ""; }; + 97B9144AB8468E437ABB41803974D033 /* UIImage+Manipulation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Manipulation.m"; path = "Roxas/UIImage+Manipulation.m"; sourceTree = ""; }; + 97F73835395FF3DB0096CD155B20FB9F /* NstBoardBandaiKaraokeStudio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiKaraokeStudio.hpp; sourceTree = ""; }; + 985EAE9972B33CF9F927C6F483A4B357 /* bsx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bsx.h; sourceTree = ""; }; + 9870FEA24CF3B1C5A3F888CBE2149CD4 /* rhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rhash.h; sourceTree = ""; }; + 98985DB2B0E10E3D6C992708741C684A /* UIApplication+AppExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIApplication+AppExtension.swift"; sourceTree = ""; }; + 99096141FF8112FF26903D5255091329 /* F3DEX2CBFD.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2CBFD.cpp; sourceTree = ""; }; + 9925E412F176DF45C332321285001A55 /* DS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DS.swift; sourceTree = ""; }; 998BCE1BFCDA316A894F5BE77EF92AD4 /* Coding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Coding.swift; path = Sources/SQLite/Typed/Coding.swift; sourceTree = ""; }; - 998F169B2153317C97A738B28A48F66C /* Window.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Window.hpp; sourceTree = ""; }; - 9995950583E5F1398CF81E042701C6E9 /* Text.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Text.hpp; sourceTree = ""; }; - 99AFB601E975D6655D2A52B959891047 /* opengl_ColorBufferReaderWithPixelBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithPixelBuffer.h; sourceTree = ""; }; - 99D799A06F3A84C7D777C9A3BD9BE511 /* ManagedAccount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedAccount.swift; sourceTree = ""; }; - 99EB232B4913EA46C51277C86DF16B8D /* sdd1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdd1.h; sourceTree = ""; }; - 99EC0BF92D7121A56829D9702EB42CAE /* Textures.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Textures.cpp; sourceTree = ""; }; + 99AFEBCD0E127C34321505B630C49E92 /* NstImage.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstImage.hpp; sourceTree = ""; }; + 99F0DA991B4249223E7D8A9CA0767BA2 /* MelonDSTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MelonDSTypes.h; sourceTree = ""; }; 9A2119D6748E380E5815A3831CA3977A /* GTLRUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRUtilities.h; path = Source/Utilities/GTLRUtilities.h; sourceTree = ""; }; - 9A435B10C22B22C7734A3E5913E53474 /* RSTToastView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTToastView.m; path = Roxas/RSTToastView.m; sourceTree = ""; }; - 9A6B0D2942B8BAF98B09DC10EDD20618 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; - 9ABF020B63EDEC52E2B78074AFB454B1 /* L3DEX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3DEX.cpp; sourceTree = ""; }; - 9ACA4CA8AE2D83BA8AB58439FC360D38 /* glsl_FXAA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_FXAA.h; sourceTree = ""; }; - 9AD6579FF3326133D973B8178ED12CEB /* NstXml.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstXml.hpp; sourceTree = ""; }; + 9A22E94D129FB402325A388CC5DF7FDD /* ftmodule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmodule.h; sourceTree = ""; }; + 9A28F307BB7A2BFFBDABD41D7562DBF9 /* RenderStates.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderStates.hpp; sourceTree = ""; }; + 9A4EF2A1B3DE6523F4B1132FD5CF4A75 /* pixform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pixform.h; sourceTree = ""; }; + 9A5F48AC24E5F5063217D8867869BDEB /* GBADeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GBADeltaCore.modulemap; sourceTree = ""; }; + 9A6407C4FE9D4F3E62ECF1C9CABE92A0 /* NstVsRbiBaseball.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsRbiBaseball.hpp; sourceTree = ""; }; + 9A8B2E0208C481115411CF2ED0F5D7C4 /* assemble_struct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble_struct.h; sourceTree = ""; }; + 9A933B1B324B43BC6E0CEBB638211EBA /* ri_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ri_controller.h; sourceTree = ""; }; + 9AA8A343F392F57FB9A603A5E4378309 /* RSP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RSP.h; sourceTree = ""; }; + 9AB2C2CCEC496A1EE69FB5F1EF214B1A /* NstBoardJalecoJf17.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf17.hpp; sourceTree = ""; }; 9AE215D47AD4C3E4C2C354C0C591C34C /* SwiftyDropbox-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyDropbox-umbrella.h"; sourceTree = ""; }; - 9AF937DC01474311A2109AFB0EDA7D8B /* GBCEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBCEmulatorBridge.mm; sourceTree = ""; }; - 9AFAB5260C27DEE351813C7122CD4AF4 /* RateTransposer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RateTransposer.h; sourceTree = ""; }; - 9B3F61B1E686EE8232FF7D4423DA7AE5 /* TextureFilterHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilterHandler.cpp; sourceTree = ""; }; - 9B75443503A9FFE2C23D1ACE270C81B1 /* ColorBufferReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferReader.h; sourceTree = ""; }; - 9B93E54A61BB91C9C1DB668CB22B8E22 /* FrameBufferInfoAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FrameBufferInfoAPI.h; sourceTree = ""; }; - 9BB52CE6A9BF6A1CFA75A61E1AFEDA7B /* getopt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = getopt.h; sourceTree = ""; }; - 9BEE4619527C9F9B1FE35C99D23CC654 /* RSTSeparatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTSeparatorView.h; path = Roxas/RSTSeparatorView.h; sourceTree = ""; }; - 9BF45B3F1647C84F90A4C140F217F89D /* cp15.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp15.h; sourceTree = ""; }; - 9C3466A9256511834DC5E817CC21AE91 /* writepng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = writepng.h; sourceTree = ""; }; - 9C6F3AAA06C293FC9A91CD7A5FE7D65A /* NstBoardKonamiVrc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc4.hpp; sourceTree = ""; }; - 9C838A28075396ED66AEF6F512BA0446 /* GBCDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBCDeltaCore-umbrella.h"; sourceTree = ""; }; - 9C8507D47BD97C259CB67E95B0055BCC /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = DSDeltaCore/Standard.deltamapping; sourceTree = ""; }; - 9C9E1AF02B3EAB5EEF41A090B1D93CA6 /* PostProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PostProcessor.h; sourceTree = ""; }; + 9AE76E7D656F9FC63729D2FE6CF2EE4B /* NstApiUser.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiUser.hpp; sourceTree = ""; }; + 9B772B195955E19223C5D696AF8E884E /* NstBoardBmcSuperHiK300in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperHiK300in1.hpp; sourceTree = ""; }; + 9B7E86F1B639A123C10CF5C402F415B2 /* NSError+LocalizedFailureDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSError+LocalizedFailureDescription.swift"; sourceTree = ""; }; + 9BBE274343E5120686BB2D52C486B98F /* Delta.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delta.swift; path = DeltaCore/Delta.swift; sourceTree = ""; }; + 9C0F1623BBDB08363E8394AFBD38B87E /* cheats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheats.h; sourceTree = ""; }; 9CA80A61ABF26FA89F4E22A30284B0DD /* libPods-Delta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-Delta.a"; path = "libPods-Delta.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 9CA88B3A2BBE2EA0112C360B061B10B9 /* audio_out_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = audio_out_backend.h; sourceTree = ""; }; - 9CAA385DC1EC815011FECBC1CD5ADF32 /* rumble_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rumble_backend.h; sourceTree = ""; }; - 9CD3F5DB69B6C64C0A6692B58AFD0B17 /* SNESDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SNESDeltaCore-umbrella.h"; sourceTree = ""; }; - 9CDC4E9BA921F71C2DE81D711D002178 /* DownloadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordOperation.swift; sourceTree = ""; }; - 9D07B62C2930860C9FC0DB9D497C72D7 /* svtteng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svtteng.h; sourceTree = ""; }; - 9D3400B3B03C1E9DC1A3F7B5E3EB7B4A /* NstCheats.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCheats.hpp; sourceTree = ""; }; - 9D47FC12A026C951220B49A834F51276 /* ConflictRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordOperation.swift; sourceTree = ""; }; + 9CC748D2AFF9AC9A78EA9982425EBACD /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; + 9D324452F2442968D429ED7A0718561D /* RSTCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCollectionViewCell.h; path = Roxas/RSTCollectionViewCell.h; sourceTree = ""; }; + 9D3F865CEA5A8DDF0E5A48DF76EFC326 /* MelonDSEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = MelonDSEmulatorBridge.mm; sourceTree = ""; }; 9D575B29FCC81FA8F72EC3CC12A581A5 /* GTMReadMonitorInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMReadMonitorInputStream.m; path = Source/GTMReadMonitorInputStream.m; sourceTree = ""; }; 9D71AD94F1DE85C71287112E838A7581 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/UIButton+WebCache.h"; sourceTree = ""; }; - 9D7EE0A3C63E9181CA23F2A4EE2C188E /* SDL_opengles2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2.h; sourceTree = ""; }; - 9D85665615A489DF6583D7E19CC9D2B4 /* Harmony-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-prefix.pch"; sourceTree = ""; }; - 9D8C6B600EB0F6E81ED97BC1F30272D4 /* CombinerProgram.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CombinerProgram.cpp; sourceTree = ""; }; + 9D763E69CEADEDB375FE897F8EAC5BA0 /* glsl_SpecialShadersFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_SpecialShadersFactory.h; sourceTree = ""; }; + 9D8F9B8A6D48D5044338BCB2BA139DA1 /* ffmpeg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ffmpeg.h; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9DD38673C0296A73B42D147E647C1937 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; - 9DD623E462036E417A6C1BF38166141C /* biopak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = biopak.h; sourceTree = ""; }; - 9DFC0EF480A5361B80E075558EEDEDEE /* TxDbg_ios.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = TxDbg_ios.mm; sourceTree = ""; }; - 9E0ECBB02BB69E04F4F0E29EDA00B847 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; - 9E132A030504CB91FC153F9A62C74870 /* ConfigManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ConfigManager.h; sourceTree = ""; }; - 9E1BF418C0437A40B1C3B3582AB50F3E /* vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vidext.h; sourceTree = ""; }; - 9E418A7738B016688EC222EB837069D0 /* NSPredicate+Search.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSPredicate+Search.h"; path = "Roxas/NSPredicate+Search.h"; sourceTree = ""; }; - 9E493AB01A18F0DA9F384ACB5CBD5C5A /* NstBoardBtlSmb2c.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2c.hpp; sourceTree = ""; }; + 9DD6E96B0D1C5E0989F7B0041FA8E00A /* MergePolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MergePolicy.swift; sourceTree = ""; }; + 9E1156572BD531C3316B572C296BCF01 /* F3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3D.cpp; sourceTree = ""; }; + 9E3627E2B352D880C38B219494E20A52 /* GLideNUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideNUI.h; sourceTree = ""; }; 9E672A1C13EE353B0AC39DE0F84A4323 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; }; - 9E69FA508FAFD1015760B7C3395B4805 /* RSTFetchedResultsDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTFetchedResultsDataSource.m; path = Roxas/RSTFetchedResultsDataSource.m; sourceTree = ""; }; - 9E72A33A7110D63CBC89C70E51F608C9 /* SDL_thread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_thread.h; sourceTree = ""; }; - 9EA024415809AA543311AA9FE4454F1E /* RSTDynamicDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTDynamicDataSource.m; path = Roxas/RSTDynamicDataSource.m; sourceTree = ""; }; - 9EA41F9CCF4B088FD860DE0A9D8B8D17 /* uncopyable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = uncopyable.h; sourceTree = ""; }; - 9EDC9128CC8CDBCC9CCCD7AA3E759AA2 /* debug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; - 9EF3AB85099AAD5C4A46D49D93BB46D8 /* NstApiInput.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiInput.hpp; sourceTree = ""; }; - 9EFA3B9D1B35DA0B89C71DA1D01B3B45 /* SyncRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncRecordsOperation.swift; sourceTree = ""; }; - 9F97A82B4B62F88A9ABDCB471BD4E255 /* Mutex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Mutex.hpp; sourceTree = ""; }; - 9FA46629ADE6C1B6415FE547479F78E9 /* retro_miscellaneous.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_miscellaneous.h; sourceTree = ""; }; - 9FB473C586C6C3957FB7196F5D749297 /* NSPersistentStore+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSPersistentStore+Configuration.swift"; sourceTree = ""; }; - 9FDC34A806C43FEC8AEFDE037CBB3624 /* NstBoardSunsoft3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft3.hpp; sourceTree = ""; }; - 9FEB67420285B4BA71A2144A190F4A60 /* DSDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DSDeltaCore-prefix.pch"; sourceTree = ""; }; - 9FF916A03FC9114DF6807EC4AE2F131C /* Combiner.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Combiner.cpp; sourceTree = ""; }; - A031F15C9AA6495C554D8421DDCD6B2E /* NstBoardAgci.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAgci.hpp; sourceTree = ""; }; - A03596855FA5527E9DFD553107E7283A /* SoundFileFactory.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileFactory.hpp; sourceTree = ""; }; - A03F65FB47279C40083D17F181821336 /* NstMachine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstMachine.hpp; sourceTree = ""; }; - A05A1526F5B055B18305FA115EF3E9A1 /* spc7110.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110.h; sourceTree = ""; }; - A0879BEED84AB0514D697AD37CCE88A3 /* GBADeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GBADeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 9E7BF5046B171FA0104A3B0A7F9DD407 /* NstBoardCony.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCony.hpp; sourceTree = ""; }; + 9E96797E03C6BA19B7B506E463067AD1 /* NstBoardWaixingSecurity.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSecurity.hpp; sourceTree = ""; }; + 9EA61FA6FDF258367C544BA1A701348F /* Service.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = ""; }; + 9EBDA149FC9D979E9EB1846B7E68B274 /* regcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = regcache.h; sourceTree = ""; }; + 9EBF414719FAD26FBA9B9AB0E2F855F3 /* GBADeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GBADeltaCore-dummy.m"; sourceTree = ""; }; + 9EC1A7B808C5E2E304C086081DB1796C /* NSConstraintConflict+Conveniences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSConstraintConflict+Conveniences.h"; path = "Roxas/NSConstraintConflict+Conveniences.h"; sourceTree = ""; }; + 9EDD646DD6348EE1AA653B68E3D0B306 /* ThreadLocalPtr.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocalPtr.hpp; sourceTree = ""; }; + 9EF34391A06AF7754A090E44B9245C06 /* saves.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = saves.h; sourceTree = ""; }; + 9F014A83DEF4F355ED7E7CBACE0FBE07 /* MelonDSEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MelonDSEmulatorBridge.h; sourceTree = ""; }; + 9F3152F7F819F4D7C0199707F1F5A9B8 /* ObjectHandle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ObjectHandle.h; sourceTree = ""; }; + 9F4FE55BE08EA38FF320E4286A4C43C7 /* ControllerSkinProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkinProtocol.swift; sourceTree = ""; }; + 9F58A45C3A6F2E0C9EE2FB2DCD85BDF1 /* PngFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PngFile.h; sourceTree = ""; }; + 9FDB5E5AA46D38CB2E47E5E6DF9A5645 /* Turbo3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Turbo3D.h; sourceTree = ""; }; + A0430F33B2F349ADD6CDB6AF35310BC9 /* PaletteTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PaletteTexture.h; sourceTree = ""; }; + A088B6DC0DF984AFEA200E3D0824458F /* pngstruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; A0A504E08A6B298395CDE7E0BC7FBA95 /* GTLRDriveQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDriveQuery.m; path = Source/GeneratedServices/Drive/GTLRDriveQuery.m; sourceTree = ""; }; - A0C45B1398394AA1FEB5A3FCD517E92D /* Lock.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Lock.hpp; sourceTree = ""; }; - A0CC765A71526F79EBBC52C4FF79559D /* TxFilterExport.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxFilterExport.cpp; sourceTree = ""; }; - A0E180FFBDDF6AD6D35795FD64A7222B /* GBCTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBCTypes.m; sourceTree = ""; }; - A0F5D17654F47036B94A567F870E2CFF /* Context.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Context.h; sourceTree = ""; }; - A0FED83361E402BB0547DB052277ECCD /* cpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; - A1054468B8504A0284F550663CC44349 /* ftmoderr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmoderr.h; sourceTree = ""; }; - A14800DC259C96954AE16116EC0E310D /* retro_assert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_assert.h; sourceTree = ""; }; - A17100E42D3DFDAD4EC4195E2444448D /* slot2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = slot2.h; sourceTree = ""; }; - A1817B7D536070DB0693E3627DEE3C0E /* DepthBufferRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBufferRender.h; sourceTree = ""; }; - A19E4DF8BAF4F0082185FA6315D2B6B7 /* sram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sram.h; sourceTree = ""; }; + A14075A6CB82B5B0A2CF0B5F3B60E096 /* lua-engine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lua-engine.h"; sourceTree = ""; }; + A159872320887E8CBF6333094E374F4F /* SoundSDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundSDL.h; sourceTree = ""; }; + A186ECF08D2A70ABCC190016123FC2D7 /* ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist"; sourceTree = ""; }; A1B735B269B158DE4B7075B7EB181EAF /* Crashlytics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Crashlytics.framework; path = iOS/Crashlytics.framework; sourceTree = ""; }; - A1C9D65BEDC2366AB15142DA01309E46 /* tttables.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tttables.h; sourceTree = ""; }; - A1E8AC977ABBC00002A2FD5C18CF395A /* armdis.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = armdis.h; sourceTree = ""; }; - A1F4F491B0BC25A23355012F46D89DAF /* Sram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Sram.h; sourceTree = ""; }; + A1EB2114C929E81D171083B106C71103 /* RSTSearchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTSearchController.m; path = Roxas/RSTSearchController.m; sourceTree = ""; }; A222C0427237AEDD558FEFA410B5E021 /* TeamRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamRoutes.swift; sourceTree = ""; }; + A22889DC853EDD8E7FCC52CA013A82BB /* EmulatorBridging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EmulatorBridging.swift; sourceTree = ""; }; A2319DE32527E564C37C8B426E810445 /* GTMSessionFetcher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GTMSessionFetcher.modulemap; sourceTree = ""; }; - A270C7CB63DDB996D27A472D7B07D460 /* glxext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glxext.h; sourceTree = ""; }; + A24C851DBA65EF8E8469317673E6CCF4 /* pure_interp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pure_interp.h; sourceTree = ""; }; A2B5384F92FD40CB28071138A07D6BBC /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; }; - A2E8E678B7D4B407202D422C8CE42DA0 /* Database.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Database.h; sourceTree = ""; }; + A2D4C88AAB9529011A0BC78A5F8FB349 /* bitmap_font.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bitmap_font.h; sourceTree = ""; }; + A3112617A51AF6A36EACF9C3379C4BED /* NstVsSuperXevious.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsSuperXevious.hpp; sourceTree = ""; }; A3131038BAA6204AECC770BDD176F81C /* ZIPFoundation.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.xcconfig; sourceTree = ""; }; + A339C9C5BFA6F1000B405E8BE54F026C /* NstBoardBtlSmb2b.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2b.hpp; sourceTree = ""; }; + A33B3B4BD1E78794258F5AD6D999C880 /* FrameBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FrameBuffer.cpp; sourceTree = ""; }; A34489EBF25913D7D0197EFF7FA146A3 /* Pods-Delta.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.debug.xcconfig"; sourceTree = ""; }; - A37542A2D1F6B0496F72D1B87245F461 /* ObjectHandle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ObjectHandle.h; sourceTree = ""; }; - A3B60534D5E0521E52D17D41457801B7 /* cached_interp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cached_interp.h; sourceTree = ""; }; - A3DDC9D77AA62AA058CD07A50BE2E396 /* mupen64plus_DisplayWindow.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = mupen64plus_DisplayWindow.cpp; sourceTree = ""; }; - A3F6E644CFB6C961D9227F005A276743 /* NstBoardHxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHxRom.hpp; sourceTree = ""; }; - A4100365716D2689894AEB6AEEE7DDE0 /* NstBoardSachenSa0036.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa0036.hpp; sourceTree = ""; }; - A471F1FD870B327EA215A186F1B4B401 /* F3DBETA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DBETA.h; sourceTree = ""; }; - A4813A1A35350AA88E9F2BDD45AF68E1 /* N64DeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = N64DeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - A48812FF7D0B803D29C9CE12B0F74926 /* NstIoPort.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoPort.hpp; sourceTree = ""; }; - A495E80F9829E07964438D8A564E126A /* mc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mc.h; sourceTree = ""; }; - A4BC2C14AAA86B73D6B28FED8975C3F4 /* bitmap_font.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bitmap_font.h; sourceTree = ""; }; - A51106A45BF114A687DB7DB755B0D25D /* Drawable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Drawable.hpp; sourceTree = ""; }; - A5549F772937B547424E53A87C4959B4 /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; }; - A57B57432BC4D00AD43EB6687F06197C /* ftotval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftotval.h; sourceTree = ""; }; - A5D27BA453130BFB47F360AB69AE7A74 /* pngtest.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngtest.c; sourceTree = ""; }; - A5E4840045EBB8FE5E794C6DAEFF0CE7 /* NstBoardKasing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKasing.hpp; sourceTree = ""; }; - A5EB56E07F663B5DB04E4B9B6C85C4B6 /* NstBoardGxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardGxRom.hpp; sourceTree = ""; }; - A63610BE12A6654FC18CCA215237F733 /* ftmodapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmodapi.h; sourceTree = ""; }; + A36271D99C74D00F39DEEE122842B93E /* NstVsTkoBoxing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsTkoBoxing.hpp; sourceTree = ""; }; + A3901E50A71458B91C7F98B9202F5AA2 /* defined_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = defined_ptr.h; sourceTree = ""; }; + A391671858B2C18AC2A7795F92FD3F03 /* AlResource.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = AlResource.hpp; sourceTree = ""; }; + A39CE9386E2F879AC7F871D7209746FA /* NstBoardBmcGolden190in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGolden190in1.hpp; sourceTree = ""; }; + A3AB79AE80A36131240B0204640F0474 /* RSTHelperFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTHelperFile.m; path = Roxas/RSTHelperFile.m; sourceTree = ""; }; + A3B3DA7E38DD3305FA49B067BBEE2BBC /* GBCTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBCTypes.m; sourceTree = ""; }; + A3CA2C169265FC922C39733E381863E7 /* GBACart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBACart.h; sourceTree = ""; }; + A3CE24F478FF46EBF0A19AD377B420DF /* GBAinline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAinline.h; sourceTree = ""; }; + A428ACD6852B72482C8570B4E49B15B4 /* VideoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoManager.swift; sourceTree = ""; }; + A463F67D31F18A3E8817C9388BDDEADD /* opengl_ColorBufferReaderWithReadPixels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithReadPixels.h; sourceTree = ""; }; + A490B0EA1911CAE566D521752DB9B643 /* RSTCellContentChange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentChange.h; path = Roxas/RSTCellContentChange.h; sourceTree = ""; }; + A493D236FBEDB31AE7799E82580CE1E6 /* armdis.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = armdis.h; sourceTree = ""; }; + A4A18683962DB3D821CC4DCBB8A6E9B9 /* NstInpTurboFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpTurboFile.hpp; sourceTree = ""; }; + A52143F41FF59A51CFA9789F6A96A1F3 /* ZSortBOSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZSortBOSS.h; sourceTree = ""; }; + A5234D695ADE2B2BAE15139F5B2FD0BA /* TxImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxImage.h; sourceTree = ""; }; + A56369DCFB6DD06F4761C0C4900B2401 /* state_osd_elements.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = state_osd_elements.h; sourceTree = ""; }; + A586DA6049F657DBEA1D6CB398378C21 /* PixelBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PixelBuffer.h; sourceTree = ""; }; + A590F12D65E6986C2D6F38990BFE02DD /* ConfigDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ConfigDialog.h; sourceTree = ""; }; + A5CE53451F1210BC9BA0C024038C9865 /* Wifi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Wifi.h; sourceTree = ""; }; + A5D1F6229274C89A198E70560F58BE3C /* ftsizes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsizes.h; sourceTree = ""; }; + A5E001A6FF56533ACBC3F6E950D52560 /* agbprint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = agbprint.h; sourceTree = ""; }; + A5F66A556F030CD38AA0B3F7B66C5FE1 /* NstBoardAe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAe.hpp; sourceTree = ""; }; A6490A0F3B24176875D7C923ED9E0958 /* SMClassicCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMClassicCalloutView.m; sourceTree = ""; }; - A6652070A07FC48369CD2D2D93B812AB /* F3DPD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DPD.h; sourceTree = ""; }; - A6A34D0C07503E7FFFE1FC9EE96553BB /* ftobjs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftobjs.h; sourceTree = ""; }; + A65DF9779DF20125011DEFB944B15926 /* DebugDump.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DebugDump.cpp; sourceTree = ""; }; + A664ED590168019449C1E8A60B996A1D /* PostProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PostProcessor.h; sourceTree = ""; }; + A691959318D99E3BFEED5DF0D2582494 /* DMA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DMA.cpp; sourceTree = ""; }; + A69F666C61BC56F0C8F6DA00E957E5AE /* fxinst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxinst.h; sourceTree = ""; }; + A6A4DBE5C518B74416FB8A4EB9D967ED /* NstBoardKonamiVrc6.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc6.hpp; sourceTree = ""; }; A6FC26E46646A054862FD9FA6A118709 /* Value.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Value.swift; path = Sources/SQLite/Core/Value.swift; sourceTree = ""; }; - A706F5A8614DC9AF3A7BAF5EE08D7A37 /* UICollectionViewCell+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewCell+CellContent.m"; path = "Roxas/UICollectionViewCell+CellContent.m"; sourceTree = ""; }; - A71446C1AC97FB34D26841347BA3E583 /* ftchapters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftchapters.h; sourceTree = ""; }; - A7351AF200A2FE4130E42D7A321DA075 /* UIAlertAction+Actions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIAlertAction+Actions.m"; path = "Roxas/UIAlertAction+Actions.m"; sourceTree = ""; }; + A72FCF0B1E569ACF2DA4B0AE86704717 /* memmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memmap.h; sourceTree = ""; }; A73E1E700670A66A2AE2A03B799E23EF /* GTLRDuration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDuration.h; path = Source/Objects/GTLRDuration.h; sourceTree = ""; }; - A7449C167D753EB017EF503CF6D7DBF5 /* array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = ""; }; - A7FA6F5EFA3E03E39BBF032A32482DBE /* NstBoardFfe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFfe.hpp; sourceTree = ""; }; - A82BEA8F12430E795A88BB379EFE3536 /* autohint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = autohint.h; sourceTree = ""; }; - A833E7EBCC4497CD94712AAEB129AFEF /* SoftwareRender.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoftwareRender.cpp; sourceTree = ""; }; - A882E5AEFB5708D397E1EA06B9F5964C /* pngpriv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngpriv.h; sourceTree = ""; }; - A922DEE8CDD64405F21CFA9916068DA8 /* RenderStates.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderStates.hpp; sourceTree = ""; }; - A9509066B63C4D1361D0CA4EA29B954B /* ftrender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftrender.h; sourceTree = ""; }; - A9749B925BF718E50CBCEE6B82F21925 /* jpeg.c */ = {isa = PBXFileReference; includeInIndex = 1; path = jpeg.c; sourceTree = ""; }; - A999E4DD49AD8CA4E0FB85985E53D97E /* cicx105.c */ = {isa = PBXFileReference; includeInIndex = 1; path = cicx105.c; sourceTree = ""; }; - AA0028E9A2FCB06AF3C4FF32FF90DA06 /* interrupt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interrupt.h; sourceTree = ""; }; - AA04D2400A0F699B8568525360B9DF75 /* NstBoardNamcot175.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot175.hpp; sourceTree = ""; }; - AA0B0C7FCCE7AFC841BEE7048A093B70 /* dummy_rsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_rsp.h; sourceTree = ""; }; - AA1D49FEC1690DC33D84B0AF284CE88B /* ftcid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcid.h; sourceTree = ""; }; - AA1E7066C788AF166D3819EA304B9C30 /* NstBoardBtlTobidaseDaisakusen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlTobidaseDaisakusen.hpp; sourceTree = ""; }; - AA827D717ECF37F1C8268040AAFBAE46 /* pngrutil.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrutil.c; sourceTree = ""; }; - AAA8DF67E8C538AF865BB2D983391817 /* NstBoardIremKaiketsu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremKaiketsu.hpp; sourceTree = ""; }; - AAF3FD6676FB908497318168CA250E29 /* N64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = N64.swift; sourceTree = ""; }; - AB065A0FEDAFF486E7DA04E1936E82A1 /* FIFOSampleBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFOSampleBuffer.h; sourceTree = ""; }; - AB2E42B839949FC64A2002C5BF39CD4D /* Performance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Performance.cpp; sourceTree = ""; }; - AB3A5F6A3985C524CE62D3D188B41912 /* ROMReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ROMReader.h; sourceTree = ""; }; - AB4067DCD2A73B47C583FB56E3239688 /* RSTCellContentChange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCellContentChange.m; path = Roxas/RSTCellContentChange.m; sourceTree = ""; }; - AB7866FC433C97398B3963C2270D52D4 /* NstBoardWaixingPs2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingPs2.hpp; sourceTree = ""; }; - AB93D8ED4B2543F199979AA5F4CDF7EE /* gfx3d.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gfx3d.h; sourceTree = ""; }; - AB9A44C4015E688182AFC5CE81179187 /* pngrio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrio.c; sourceTree = ""; }; - ABDD0D043967D1CF64FE87292AD3328B /* glsl_CombinerInputs.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerInputs.cpp; sourceTree = ""; }; + A77309856ECBE8FE95C26ADD933333D1 /* preproc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = preproc.h; sourceTree = ""; }; + A7FA37688E22E33D15DFB26A4571F6EF /* pngread.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngread.c; sourceTree = ""; }; + A81D595F5493BB4BD6C6AED2B993C0B6 /* mempak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mempak.h; sourceTree = ""; }; + A855A24013B4807694DE373F6612044D /* transfer_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = transfer_ptr.h; sourceTree = ""; }; + A85F73017A0A333E87CA16A1492A235D /* NstBoardIremHolyDiver.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremHolyDiver.hpp; sourceTree = ""; }; + A872D0AF2F86BA70FF401F6898E09D33 /* getopt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = getopt.h; sourceTree = ""; }; + A8939FA4EA41B857876F33812D829B63 /* GBA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBA.h; sourceTree = ""; }; + A89B727AD2054C85E070A4271B58CC41 /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + A8E224696F035B298DBC6B2B425DB4D9 /* NstBoardUnlEdu2000.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlEdu2000.hpp; sourceTree = ""; }; + A96FC77ABA88D5836FF081611CD8F5E7 /* cpuexec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuexec.h; sourceTree = ""; }; + A992E878783FEF42B0A952857F40B4CE /* TextDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextDrawer.h; sourceTree = ""; }; + A9A7607CB2BCFE4453A1188585644330 /* FrameBufferInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FrameBufferInfo.h; sourceTree = ""; }; + A9B8FEC06D5E475FC88E23200F3F9604 /* NstBoardSachenSa0037.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa0037.hpp; sourceTree = ""; }; + A9C65F0AD8F6ACAD0EA3F1D732708E85 /* DeltaCoreProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeltaCoreProtocol.swift; sourceTree = ""; }; + AA4BF92FD0BDB1CA2D2C3D91B8F13226 /* CheatSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CheatSearch.h; sourceTree = ""; }; + AA6969D1558B782C4F58F0AB947B3E22 /* resampler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = resampler.h; sourceTree = ""; }; + AA792B0E18A3BA4548FB2C386287DD46 /* glsl_CombinerProgramBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramBuilder.h; sourceTree = ""; }; + AA7B07F6922A453BFCB66757611F7273 /* Image.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Image.hpp; sourceTree = ""; }; + AA9FA4481CDEC88D482598485C447447 /* NstBoardRexSoftSl1632.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRexSoftSl1632.hpp; sourceTree = ""; }; + AAD25B7136752E5F978B2EA8A9F1B2C7 /* SocketHandle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SocketHandle.hpp; sourceTree = ""; }; + AB71B3A5AD08C7FD7FFA348B2DCEA559 /* cpuaddr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuaddr.h; sourceTree = ""; }; + AB7ED6F2E514469E5640A93ED3622401 /* N64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64.h; sourceTree = ""; }; + ABE1F0BA1ED297C8F6D7E93A5DA90FAA /* DriveService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Versions.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Versions.swift"; sourceTree = ""; }; + ABF2E1030F06335CAB068D719C129216 /* DeltaTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DeltaTypes.h; path = DeltaCore/DeltaTypes.h; sourceTree = ""; }; + AC0AC4268C0D1BD94A77EF3153291D5A /* DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DeltaCore-prefix.pch"; sourceTree = ""; }; AC1B770F09F0C669234396A39BFF6BB9 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - AC44908E2E42851E70850DD854945391 /* pi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pi_controller.h; sourceTree = ""; }; - ACD2694A63AA0B70E91DAF193E7B4425 /* DeltaTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DeltaTypes.h; path = DeltaCore/DeltaTypes.h; sourceTree = ""; }; - AD3187200380A3FB25170D5B9EE0F5DF /* texcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = texcache.h; sourceTree = ""; }; - AD521670C6D7CBA41733C054C293541C /* glsl_CombinerProgramBuilder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramBuilder.cpp; sourceTree = ""; }; - ADC9542E96F656BB89C5311EEBDA9E2F /* VideoMode.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = VideoMode.hpp; sourceTree = ""; }; - ADD476D53B05AEB62DBF869AA71DBE2E /* m64p_frontend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_frontend.h; sourceTree = ""; }; - ADDD949ACAFD888D4958D62325464FC2 /* assem_x86.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_x86.h; sourceTree = ""; }; - AE06F95AF0928716E10E432596BE6C68 /* opengl_CachedFunctions.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_CachedFunctions.cpp; sourceTree = ""; }; - AE0C7BFBF72D47F44B5150F9AD1D5E20 /* usec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = usec.h; sourceTree = ""; }; + AC7A3157CBEE276869625E60733756D9 /* common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; + AC89CB7A34B3B2FF8DBF5BB0E234D8A9 /* scoped_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = scoped_ptr.h; sourceTree = ""; }; + AD18B91FAC4B2CA8C394D0D1EF24808E /* pif.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pif.h; sourceTree = ""; }; + AD29A29166068991BD1FCD1B5147A8F9 /* RemoteRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteRecord.swift; sourceTree = ""; }; + AD6FBA65BDE1FCB431C91C3080423E1E /* NoiseTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NoiseTexture.cpp; sourceTree = ""; }; + ADA9C40834B8789246B849280056B7BB /* FileInputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FileInputStream.hpp; sourceTree = ""; }; + ADFD98373A9BA6422C60F09ADCB69852 /* apu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = apu.h; sourceTree = ""; }; + AE0F7B08A9D4CA4E032A55F5910B7FC4 /* RenderWindow.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderWindow.hpp; sourceTree = ""; }; AE1179D5EA23BDBED2AEC4F50068090B /* Pods-Delta.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Delta.modulemap"; sourceTree = ""; }; - AE5CA9C3251B37CB412B002F2B18CD26 /* NstCore.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCore.hpp; sourceTree = ""; }; + AE319AE2C2040F374241D90E84825723 /* fpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fpu.h; sourceTree = ""; }; + AE3364FCB045C19E649AAFBEB1B1A950 /* opengl_BufferManipulationObjectFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_BufferManipulationObjectFactory.h; sourceTree = ""; }; + AE6A38985CB70BB9472E2EB009DD360E /* NstBoard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoard.hpp; sourceTree = ""; }; + AE6AED1C735BB477D425F99206A28D87 /* Roxas-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Roxas-umbrella.h"; sourceTree = ""; }; AE757EB203915A0BFBB4F3FA8E8F9A77 /* GTLRUploadParameters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRUploadParameters.h; path = Source/Objects/GTLRUploadParameters.h; sourceTree = ""; }; AE8DDA1C621BC7547ED906A580F98278 /* GTMSessionFetcher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GTMSessionFetcher-umbrella.h"; sourceTree = ""; }; - AF16DF495D40774F62F549F44383A37B /* Turbo3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Turbo3D.cpp; sourceTree = ""; }; - AF38F08C7B6C05C9E6E483C522CB166A /* BlendMode.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = BlendMode.hpp; sourceTree = ""; }; - AF55BE85D1766A85D542E06F8CB64DAA /* NstProperties.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstProperties.hpp; sourceTree = ""; }; - AF58C9A94CDE343BACE56F4E13E201C8 /* Cheat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Cheat.swift; sourceTree = ""; }; - AF827FC48147DE18B9FB7A80EA33C3FD /* snes9x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = snes9x.h; sourceTree = ""; }; - AF84C91D866F235841A37FBDD3F32FDC /* Performance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Performance.h; sourceTree = ""; }; - AF9B8513D3E4438D5136203FCF9D99E5 /* Thread.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.inl; sourceTree = ""; }; + AEAC4A2D514CEA5F884C8B989B177FE5 /* TextureFilters_hq2x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_hq2x.h; sourceTree = ""; }; + AEB306B4037EA4CACDF06823F9F7AAAE /* NstBoardKonamiVrc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc4.hpp; sourceTree = ""; }; + AEBCD05077A7A9D50A99D05DDFABD57D /* cicx105.c */ = {isa = PBXFileReference; includeInIndex = 1; path = cicx105.c; sourceTree = ""; }; + AF1A1A0732B5E3F46EFB5131FEC1279B /* N64Types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64Types.h; sourceTree = ""; }; + AF7DB0A4354868150C48B6B6E2D4FE4D /* cheat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheat.h; sourceTree = ""; }; AFADC4424D377B458AE08BE73A8876B0 /* BaseTeam.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseTeam.swift; path = Source/SwiftyDropbox/Shared/Generated/BaseTeam.swift; sourceTree = ""; }; - B009C33CC7DA7BB144CBFC37BB96FADA /* rateest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rateest.h; sourceTree = ""; }; - B02A3AF52CA1E696B30BDE9A844D4D97 /* RSTNibView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTNibView.m; path = Roxas/RSTNibView.m; sourceTree = ""; }; + AFF3C3B618AFF0BDD1845467EA4D5341 /* emufile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = emufile.h; sourceTree = ""; }; + AFF85B9517592B8C0C0F604D1FB43836 /* complex.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = complex.h; sourceTree = ""; }; + B01AC6DC482963FB6A18796241C0A542 /* NstBoardRumbleStation.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRumbleStation.hpp; sourceTree = ""; }; + B0518B00315F12AA09635E19BCD35156 /* Main.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Main.hpp; sourceTree = ""; }; B06418EA2C5657C3621FE94DE245B06B /* GTLRBatchQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRBatchQuery.m; path = Source/Objects/GTLRBatchQuery.m; sourceTree = ""; }; - B0652246947AE2743F7B21B7464BAB5E /* sa1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sa1.h; sourceTree = ""; }; - B0720305184D6498023330012901935C /* remote.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = remote.h; sourceTree = ""; }; - B0A321F5CF3FAD29047B4FF624618004 /* TxInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxInternal.h; sourceTree = ""; }; B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSDWebImage.a; path = libSDWebImage.a; sourceTree = BUILT_PRODUCTS_DIR; }; - B115DAD8B8CBC0649AA6BCCBDDF47E7F /* S2DEX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = S2DEX.cpp; sourceTree = ""; }; - B137B57F8091633EB513C60304ED2C7C /* NstBoardAcclaimMcAcc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAcclaimMcAcc.hpp; sourceTree = ""; }; + B1080C9D0AB5BC601BD4F16A50CC842F /* svprop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svprop.h; sourceTree = ""; }; + B129D85783E2A83AB72F44B1BF92B9D9 /* NstBoardBenshengBs5.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBenshengBs5.hpp; sourceTree = ""; }; B178CE5FC4BC30D17B77BB64F1C9D912 /* GTMNSDictionary+URLArguments.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMNSDictionary+URLArguments.m"; path = "Foundation/GTMNSDictionary+URLArguments.m"; sourceTree = ""; }; - B1F489088240F6C610B83E8F77CB5B7C /* ManagedRecord+Uploading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Uploading.swift"; sourceTree = ""; }; - B227CD071A5B88861CA260BED0FBE3D8 /* NstBoardUnlTf1201.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlTf1201.hpp; sourceTree = ""; }; - B24B02D04D4F08EFCBE0B8D8503C30E8 /* NstBoardTxcPoliceman.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcPoliceman.hpp; sourceTree = ""; }; - B2535F7B0EEFF2878AFFC407BE7821EC /* ringbuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = ""; }; - B2549B66FD3CB3110FA065042ED1999F /* RSTCellContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentView.h; path = Roxas/RSTCellContentView.h; sourceTree = ""; }; - B270BDDBFC6E00BB3C7D20C485D51558 /* DeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DeltaCore-dummy.m"; sourceTree = ""; }; - B2A2C9E40FB41F12D2820E3BC07998FC /* gbafilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gbafilter.h; sourceTree = ""; }; - B2B24BB63436EBA04A7F12707D9B8161 /* NstInpSuborKeyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpSuborKeyboard.hpp; sourceTree = ""; }; - B2C7AE6607FC679EA4767E48ADD80B0C /* svcid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svcid.h; sourceTree = ""; }; - B2CBDD74EE4025870C9ACEC038645C28 /* NstBoardDiscrete.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDiscrete.hpp; sourceTree = ""; }; - B3010613943E28048D5313FE665F01EE /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; - B3475FAD5B489B5292E3D459A64A3417 /* Types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Types.h; sourceTree = ""; }; - B36363E6798FB6B3F40354BBE7374A01 /* Log.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Log.h; sourceTree = ""; }; - B3701068412FCD905D962E33387C2680 /* RSTPlaceholderView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = RSTPlaceholderView.xib; path = Roxas/RSTPlaceholderView.xib; sourceTree = ""; }; - B3703612D238CE733DA02FE1314443CB /* array.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = ""; }; - B3D974A96D201E7E1B93CC578D3AC323 /* VideoRendering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoRendering.swift; sourceTree = ""; }; - B417E49B5B743092F1356B5AB9E555E0 /* t1types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = t1types.h; sourceTree = ""; }; - B4344D31A95675A878EB6C78C263B86A /* GBASoundDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBASoundDriver.h; sourceTree = ""; }; - B442DF315B83F5A22C5AC0D52DC6F788 /* ControllerSkin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkin.swift; sourceTree = ""; }; - B442E052E2E964ADC9111C8C691F1F49 /* NstCrc32.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCrc32.hpp; sourceTree = ""; }; - B4621F5E2074F440324D7C9E0D8C9D88 /* movie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = movie.h; sourceTree = ""; }; - B4649DC9403189EF7D8B5F740147BCBF /* opengl_ColorBufferReaderWithBufferStorage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithBufferStorage.cpp; sourceTree = ""; }; - B46E429745DDFCAA08E329F0BBAD9911 /* GBAEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAEmulatorBridge.h; sourceTree = ""; }; - B47C40F3651700B51A70D5B9000D2FD3 /* N64Types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64Types.h; sourceTree = ""; }; - B4983F070F9A339A50561C5253106964 /* DepthBufferToRDRAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBufferToRDRAM.cpp; sourceTree = ""; }; + B197402D582AEC5BAF8E914AC32CF998 /* Roxas-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Roxas-prefix.pch"; sourceTree = ""; }; + B1A991CECAB9DD46D6515EF84919F6D0 /* ftmoderr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmoderr.h; sourceTree = ""; }; + B1AAAF56DFDC2516C9F0F82DEA17511B /* ThumbstickInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ThumbstickInputView.swift; sourceTree = ""; }; + B1E6115DADF781FBC5286DC05270CFDF /* NstBoardBmc64in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc64in1.hpp; sourceTree = ""; }; + B206694C6233FEB2036FF9E2C8D5C7A9 /* ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist"; sourceTree = ""; }; + B236B2DB89B26DE7B16E762CF3080C5A /* UploadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordOperation.swift; sourceTree = ""; }; + B2688E7DF0591DC8789862F774C74BF6 /* plugin_delta.c */ = {isa = PBXFileReference; includeInIndex = 1; path = plugin_delta.c; sourceTree = ""; }; + B2723BE48759EFEE2711364010F06BAF /* RSTPlaceholderView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = RSTPlaceholderView.xib; path = Roxas/RSTPlaceholderView.xib; sourceTree = ""; }; + B290CCC059154476A70C27D7890B7036 /* svgldict.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svgldict.h; sourceTree = ""; }; + B29A8EB5AC9C464A3E9D1DE0A0715E97 /* loadres.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = loadres.h; sourceTree = ""; }; + B2C1C0E46794ACCFA1D49F4F9F7418C1 /* TextureFilters_lq2x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_lq2x.h; sourceTree = ""; }; + B30081991D15EDA28B670E4E8B5B46F5 /* Port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Port.h; sourceTree = ""; }; + B307C39B5BCD16F9563103326BB8C58A /* gbint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gbint.h; sourceTree = ""; }; + B31BC317B925949D8F6F764866AECFAE /* RSTTintedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTTintedImageView.h; path = Roxas/RSTTintedImageView.h; sourceTree = ""; }; + B331F7660FB59081A99ADBA1AF706462 /* dummy_video_capture.c */ = {isa = PBXFileReference; includeInIndex = 1; path = dummy_video_capture.c; sourceTree = ""; }; + B399BA8CED66B7B4AB724D2D580D4943 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + B3AEB39C358F48D203125CAFE9D03E22 /* pngstruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; + B3C33417B33F751208C5BF623D85A06D /* GBCDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBCDeltaCore-prefix.pch"; sourceTree = ""; }; + B3F49F00CD6F1E7B2934D5D66A3DED6C /* NstBoardBmcSuper22Games.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper22Games.hpp; sourceTree = ""; }; + B4031DF8DC8C7AA073B8FAD5893715CA /* mbc3_rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mbc3_rtc.h; sourceTree = ""; }; + B41ADAC311E8AD6F6A31A14C3ACCF208 /* glsl_CombinerProgramUniformFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramUniformFactory.h; sourceTree = ""; }; + B426B703A1D05906A76F9144E7FA0433 /* PlatformConfig.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PlatformConfig.cpp; sourceTree = ""; }; + B49CF1CC01CA6A0D613EA0862C7F450E /* NSUserDefaults+DynamicProperties.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSUserDefaults+DynamicProperties.h"; path = "Roxas/NSUserDefaults+DynamicProperties.h"; sourceTree = ""; }; + B4A650EA7BBC2B23A0D479A0DA4FB270 /* opengl_Utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Utils.cpp; sourceTree = ""; }; B5246923E4069138B8F38B3EF8C4EE4D /* Users.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Users.swift; path = Source/SwiftyDropbox/Shared/Generated/Users.swift; sourceTree = ""; }; - B55404E8B2117F5FA8444F1ADD1A5039 /* GameViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = ""; }; - B56303B13A0444FFC586E198F58DAFAB /* NstBoardBmcA65as.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcA65as.hpp; sourceTree = ""; }; - B57DE6F8DC52A0DF6FA63026114732E6 /* ThreadLocalPtr.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocalPtr.inl; sourceTree = ""; }; - B595CA4CE436B20EE775744443119153 /* NstBoardWaixingSh2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSh2.hpp; sourceTree = ""; }; + B54D71F0A9EE62F2B238B985FFE6C460 /* GLFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLFunctions.h; sourceTree = ""; }; + B584A470AF957ABEDF9EC1339C950355 /* NstRam.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstRam.hpp; sourceTree = ""; }; + B5984855E15D790E1B69A1BD578ABC85 /* NESEmulatorBridge.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NESEmulatorBridge.cpp; sourceTree = ""; }; + B5A0DE104CFED381B5A6268A32DA5C06 /* NstInpExcitingBoxing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpExcitingBoxing.hpp; sourceTree = ""; }; + B5AE816827C6AA5796CDFC4C7E83D492 /* NstBoardBmcSuper40in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper40in1.hpp; sourceTree = ""; }; + B5D0F2204128CF6B384D5E2619FCFA0F /* files.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = files.h; sourceTree = ""; }; B5E6736AEAB28DFE73C9BD1605B0863D /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; - B5E9F261B8796880679ECD1AF1FDC584 /* eeprom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = eeprom.h; sourceTree = ""; }; B5EB7FA5DB62956C49A473DF02AE5456 /* GTLRDriveService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDriveService.m; path = Source/GeneratedServices/Drive/GTLRDriveService.m; sourceTree = ""; }; - B5FF87A66DB9785A1AFFD395C49E2A88 /* NstBoardSunsoft5b.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft5b.hpp; sourceTree = ""; }; - B61327FFC19D6334ACBC6C66C2BC2BF5 /* ftgloadr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgloadr.h; sourceTree = ""; }; - B61F4F596E3EE98C9853A96F05AFA5BD /* ZlutTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZlutTexture.cpp; sourceTree = ""; }; - B686582878B4BC8A27AD99BE25411842 /* NstBoardAve.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAve.hpp; sourceTree = ""; }; - B6CDC4DC2E9754CD3DA34C6A091F6E53 /* NstVideoFilterScaleX.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterScaleX.hpp; sourceTree = ""; }; - B6DF6A81ED3CF21DF9B51DF914D08077 /* musyx.c */ = {isa = PBXFileReference; includeInIndex = 1; path = musyx.c; sourceTree = ""; }; + B5FBEA1458597421280682E90821C05C /* SDL_thread.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_thread.h; sourceTree = ""; }; + B636371B292E5B16402AE89C9B512E16 /* retro_common_api.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_common_api.h; sourceTree = ""; }; + B6460A6DCAB66445786D1832B9B7D54A /* NstVideoFilterNone.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterNone.hpp; sourceTree = ""; }; + B67B97B22BF6E290CE3176CF648D18EC /* NstBoardUnlN625092.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlN625092.hpp; sourceTree = ""; }; + B6888D502C932A8931592CA8315E0F44 /* ControllerSkin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkin.swift; sourceTree = ""; }; B70989044B91229B1C51B5758D9F96E5 /* SMCalloutView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-umbrella.h"; sourceTree = ""; }; - B71756B40C4BB780F974D844D1D446CB /* NstBoardTaitoX1005.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoX1005.hpp; sourceTree = ""; }; - B7229404AFA84F6E9DB4337E6CCCFD47 /* NstVideoFilterNtsc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterNtsc.hpp; sourceTree = ""; }; - B770765D40D57151EF4C7C13D2101E87 /* NstBoardTengen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTengen.hpp; sourceTree = ""; }; - B7B0EC3A43195D2E933C1849423260A4 /* ContextImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ContextImpl.h; sourceTree = ""; }; - B7D405FFFFAD99E717267886418DECCE /* expr.cpp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = expr.cpp.h; sourceTree = ""; }; - B7F7B276E6C1803265F573539F0A3704 /* NstDipSwitches.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstDipSwitches.hpp; sourceTree = ""; }; - B83F5B2E3006BD12D60CA06E677E7EE6 /* dd_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dd_controller.h; sourceTree = ""; }; + B72A5A5016919006907A70C26E61B891 /* NstBoardDreamtech.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDreamtech.hpp; sourceTree = ""; }; + B73776B063CE08E7361FDE4C26CF904F /* af_rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = af_rtc.h; sourceTree = ""; }; + B73E9E04EC1D9DC2F189BC9DC0A68ADB /* ExternalGameControllerManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExternalGameControllerManager.swift; sourceTree = ""; }; + B7835A1CFAD26F5CED24394F9EB07DBD /* Version+Revision.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Revision.swift"; sourceTree = ""; }; + B7BC2C79D27AA4D45DBAED609878B0BF /* GameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameController.swift; sourceTree = ""; }; + B82F7DDA166E0646F0D0CF3136098E6C /* SNESDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SNESDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + B83651383886121680F6529DF69B391E /* assemble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble.h; sourceTree = ""; }; B8494C070246CC8BED190E092A370B3C /* GoogleToolboxForMac-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleToolboxForMac-umbrella.h"; sourceTree = ""; }; - B87260587307761413DE023873BF047A /* ftgasp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgasp.h; sourceTree = ""; }; - B8982524E4ACBEBF47DD97748097DE96 /* View.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = View.hpp; sourceTree = ""; }; - B8A840F202469E60C39538CC467177CA /* GBCInputGetter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GBCInputGetter.cpp; sourceTree = ""; }; - B8B3A29AED934B0B3AC6171E49F11E8D /* ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist"; sourceTree = ""; }; - B95AF3A3928659911B5866BCB18F168F /* recomp_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = recomp_types.h; sourceTree = ""; }; - B98E48490885483AD070534BE31BBED4 /* regcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = regcache.h; sourceTree = ""; }; - B9A1298C2392965F68B9AE60DBE0B247 /* NstApiConfig.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiConfig.hpp; sourceTree = ""; }; - B9FB554080990194873F4A54006A5E02 /* TexrectDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TexrectDrawer.cpp; sourceTree = ""; }; - BA46D0D247C2A97E0EBAEF9B67F430BF /* cart_rom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cart_rom.h; sourceTree = ""; }; + B879AB2ADEE0B7AD62F37F492D81FEC6 /* ObjectHandle.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ObjectHandle.cpp; sourceTree = ""; }; + B8A07AF8FA08DD189EA38E162C486A42 /* NstBoardTaitoX1017.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoX1017.hpp; sourceTree = ""; }; + B8CD1F5D1FB7A2951D65FA4A322294D1 /* opengl_BufferManipulationObjectFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_BufferManipulationObjectFactory.cpp; sourceTree = ""; }; + B8F6D0F53FB1FDC036DDE39C228B2207 /* GPU3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GPU3D.cpp; sourceTree = ""; }; + B93E69089ACE58953005A5382B2ADAAD /* dummy_audio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_audio.h; sourceTree = ""; }; + B950CCD1428D808B7F6E616FB430883A /* NESDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NESDeltaCore.modulemap; sourceTree = ""; }; + B9645A97F892996BB5BF51B8D0D43A0B /* N64Types.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = N64Types.m; sourceTree = ""; }; + B97CBE1F36B669152AE6F475CCEB508D /* rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rtc.h; sourceTree = ""; }; + B9A99432B3A77A17C67102784C21DAAF /* CharacterSet+Hexadecimals.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "CharacterSet+Hexadecimals.swift"; sourceTree = ""; }; + B9B009A6587C3A1C6BB0A1C024A18D38 /* pngrutil.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrutil.c; sourceTree = ""; }; + B9BFC6434EFC695B07E4DF1FB6E56F95 /* CP15.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CP15.cpp; sourceTree = ""; }; BA5332776FCBF3B75CDD7168F2B8E2C4 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/SDWebImageOperation.h; sourceTree = ""; }; - BA6C6054CE8555D1822133E74F7E920F /* NstBoardBmcGoldenGame260in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGoldenGame260in1.hpp; sourceTree = ""; }; - BAB2153E188978ED7096999E36B0E1D7 /* svwinfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svwinfnt.h; sourceTree = ""; }; - BABB271F3BD66B98A48FF2230E57E168 /* cpuaddr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuaddr.h; sourceTree = ""; }; - BAC79183F81C91B3272AAD8FC4B608B5 /* TxImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxImage.h; sourceTree = ""; }; + BABD1CEB4B6CA6AEBC4C4B2ED3B1C53E /* RSTArrayDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTArrayDataSource.m; path = Roxas/RSTArrayDataSource.m; sourceTree = ""; }; + BB01FC8167E6C6B4469AC59E3C3DF146 /* CRC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CRC.h; sourceTree = ""; }; BB060E9B70D07FF358DD8F33001FD5C6 /* Custom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Custom.swift; path = Source/SwiftyDropbox/Shared/Handwritten/Custom.swift; sourceTree = ""; }; - BB26B910FF9586D0BBEEF8B7B3FCC55A /* RSP_LoadMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RSP_LoadMatrix.cpp; sourceTree = ""; }; - BB40DF340E3D23ACCF742C2B72217324 /* Image.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Image.hpp; sourceTree = ""; }; - BB52AEE6F8BD7BDA6E88E263AE184CC3 /* CGGeometry+Dictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "CGGeometry+Dictionary.swift"; sourceTree = ""; }; - BB534F82994E35C0556962CEB04EAF6E /* slot1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = slot1.h; sourceTree = ""; }; - BB54FA85A4EFEF73DED9795E55139B78 /* NSBundle+Extensions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+Extensions.h"; path = "Roxas/NSBundle+Extensions.h"; sourceTree = ""; }; - BB711F8EFE31B0F681D314A46FEA8398 /* svkern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svkern.h; sourceTree = ""; }; - BB995585BB8CD0FC8EA0EC91CA17BBC4 /* ResourceBundle-DeltaCore-DeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-DeltaCore-DeltaCore-Info.plist"; sourceTree = ""; }; - BBAEA04DA00E792104BDE8F6F66BBE09 /* CheatFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CheatFormat.swift; sourceTree = ""; }; - BBB89BF0F048332F70DF3BCD3A833DA2 /* RSTOperation_Subclasses.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperation_Subclasses.h; path = Roxas/RSTOperation_Subclasses.h; sourceTree = ""; }; + BB0BAFB133BDEB7D65DF75481E4669DE /* ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist"; sourceTree = ""; }; + BB49743C9C35F2C946022473E1E84595 /* Globals.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Globals.h; sourceTree = ""; }; + BB5727401E6F6A0439D8F333FA838602 /* GBA.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GBA.swift; sourceTree = ""; }; + BB701508E5E2F9D08F436931CD05696C /* MelonDS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MelonDS.swift; sourceTree = ""; }; + BB9F74C7D96B11B6D1DA5E2E0B149EC4 /* NstInpDevice.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpDevice.hpp; sourceTree = ""; }; + BBA755EA895635E0475A6DE1D6B83070 /* DeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DeltaCore.modulemap; sourceTree = ""; }; + BBBD8731E43D4030EDC2B0655C688CD3 /* RSTCellContentView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentView.h; path = Roxas/RSTCellContentView.h; sourceTree = ""; }; + BBD164DBFFAA1294217B9F595993108D /* NstBoardTaitoTc0190fmcPal16r4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoTc0190fmcPal16r4.hpp; sourceTree = ""; }; + BBE04DD449B8ADC33C274C03D42334D4 /* NstInpBandaiHyperShot.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpBandaiHyperShot.hpp; sourceTree = ""; }; BBE10799564D3547139EFF5CE894CF5A /* GTMNSString+URLArguments.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMNSString+URLArguments.h"; path = "Foundation/GTMNSString+URLArguments.h"; sourceTree = ""; }; - BC6023BC6F5B2433CF51C57DEE9E331A /* NstBoardJyCompany.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJyCompany.hpp; sourceTree = ""; }; - BC60B5824BD4DA2AB25BA85A4C586886 /* readwrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = readwrite.h; sourceTree = ""; }; - BC670362843998DA1AF5EB24E32647D3 /* NstInpTopRider.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpTopRider.hpp; sourceTree = ""; }; - BC93DB5E5A61F3C883D37793C77CDF2A /* GBADeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GBADeltaCore.modulemap; sourceTree = ""; }; + BBF2CF6F66F587AFDA21E30888FC7210 /* alist_nead.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_nead.c; sourceTree = ""; }; + BBF6A7EF37190036ACC153A560EC7279 /* initstate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = initstate.h; sourceTree = ""; }; + BC5370103F49292571EE10317A74B0B2 /* PostProcessor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PostProcessor.cpp; sourceTree = ""; }; + BC8528536BD3799BBE6CA5C956B29930 /* OutputSoundFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = OutputSoundFile.hpp; sourceTree = ""; }; BCA1F428AFD84BF440CD3E1D14DE8168 /* GTMSessionFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcher.m; path = Source/GTMSessionFetcher.m; sourceTree = ""; }; + BCB1D2FFB53452577990FA3D356A4DD7 /* NstVector.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVector.hpp; sourceTree = ""; }; BCBE6B3F37DD42BA03F9A43F4FBE4F4D /* TeamLog.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamLog.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamLog.swift; sourceTree = ""; }; - BCD06FDE6C4BF266F270034784E23776 /* Transform.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Transform.hpp; sourceTree = ""; }; - BCE1167568421B515DDBA963CC2FD777 /* NstApi.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApi.hpp; sourceTree = ""; }; - BD1D6B58318EF86DA5951706280EB3DC /* interpret.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interpret.h; sourceTree = ""; }; - BD2858200C2A47FC9A917133A7D25353 /* render3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = render3D.h; sourceTree = ""; }; - BD629D406305184DD39F018AC48C58E7 /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; }; - BD71FA05AF33D2016379AB441E9DA7FD /* GBAEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBAEmulatorBridge.mm; sourceTree = ""; }; - BDBC8749B7239FFE93E87463C75D3321 /* minkeeper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = minkeeper.h; sourceTree = ""; }; - BE12392094B01C972B9C0018E1869E29 /* RemoteFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteFile.swift; sourceTree = ""; }; - BE235836DD079740208A4AF1D7DB9F35 /* EmulatorCore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EmulatorCore.swift; sourceTree = ""; }; - BE3BB976C21C71194C0B3D42717A0917 /* TxHiResCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxHiResCache.h; sourceTree = ""; }; - BE5E01263F3833C2C56EBB4B61F7CA32 /* gDP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = gDP.cpp; sourceTree = ""; }; - BE88F0656454261D53E5BE768654A774 /* ereader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ereader.h; sourceTree = ""; }; + BCC7AEE83CB780E73856EB51DA7F5363 /* NstBoardSunsoft1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft1.hpp; sourceTree = ""; }; + BCF3F649DFE2BBABB7DD4DB64169C38C /* GBI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GBI.cpp; sourceTree = ""; }; + BD12836DFFA0899682ECB705F36AD40F /* Database.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Database.h; sourceTree = ""; }; + BD74931B096C1E1F3A72E00B9A1B4861 /* NstVideoFilterScaleX.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterScaleX.hpp; sourceTree = ""; }; + BD7F218037A6C72ADDD5F262DAFE2D1C /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; }; + BD84F06A10C7F36232CEC327446C64C9 /* readpng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = readpng.h; sourceTree = ""; }; + BD91AF2C48D679F07CCC9B6D62701470 /* Http.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Http.hpp; sourceTree = ""; }; + BDB291BF8A6C2C5E7A503B53159F5FFE /* F3DEX.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX.cpp; sourceTree = ""; }; + BDD0219A0927AFD5212597224C8C9A18 /* snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = snapshot.h; sourceTree = ""; }; + BDF03E49537AAB42B11FC2BE2DA3821B /* opengl_ColorBufferReaderWithBufferStorage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithBufferStorage.cpp; sourceTree = ""; }; + BDFE520B92F8D1422A24E28BA575C2F0 /* NstBoardBtlMarioBaby.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlMarioBaby.hpp; sourceTree = ""; }; + BE0C7306F2F560B898301521B0E951DA /* NstIoLine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoLine.hpp; sourceTree = ""; }; + BE1843CA9E6FD7C78006C01BE4BD5C55 /* TxImage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxImage.cpp; sourceTree = ""; }; + BE736221B155C2514D9D36EB4FBAEEEF /* CombinerKey.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CombinerKey.cpp; sourceTree = ""; }; + BE9ACCFEEB68EE550B45A78C99E79C3E /* cexcept.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cexcept.h; sourceTree = ""; }; BEC812792FD886E7BB2776C793B6BEEB /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/SQLite/Core/Errors.swift; sourceTree = ""; }; - BECCB76E1F55FC84F3E9C1EBD272E746 /* GPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GPU.h; sourceTree = ""; }; BED699E7391C1CA0477C2735B758007E /* SQLite.swift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SQLite.swift-umbrella.h"; sourceTree = ""; }; - BEEFBD2A07C30B4B56078B86605B2E66 /* glsl_SpecialShadersFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_SpecialShadersFactory.h; sourceTree = ""; }; - BF4CCC593653835948DE2077F515DDF3 /* rasterize.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rasterize.h; sourceTree = ""; }; - BF56520AA924EF4F971217A9D8F49143 /* srtcemu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = srtcemu.h; sourceTree = ""; }; - BF609625DC6D6DCA4E18292A7309D441 /* assem_arm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_arm.h; sourceTree = ""; }; - BF84BC955CB33F2AF3685A48B39D12AC /* 3DMath.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = 3DMath.cpp; sourceTree = ""; }; - BF8FF38768C4E80A0EA1F613D38541E5 /* NstApiFds.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiFds.hpp; sourceTree = ""; }; - BF94EC77DBC5DFAC5751843F5F04C129 /* Vector3.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector3.inl; sourceTree = ""; }; - BFD0CAB74C45D6B1CA49B94505E8E762 /* NSPredicate+Search.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSPredicate+Search.m"; path = "Roxas/NSPredicate+Search.m"; sourceTree = ""; }; - BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DSDeltaCore.xcconfig; sourceTree = ""; }; - BFF96050C458E84686F588B9793FEC9C /* NstBoardCneShlz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCneShlz.hpp; sourceTree = ""; }; - C09575AF57FFD4D7C7A04FC133E63156 /* MergePolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MergePolicy.swift; sourceTree = ""; }; - C0BCFCB348564B9EB1473238677BB354 /* NstBoardFutureMedia.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFutureMedia.hpp; sourceTree = ""; }; - C0C395FEF300FE2DAB4AB70FDFBE9A0F /* RSTCellContentDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCellContentDataSource.m; path = Roxas/RSTCellContentDataSource.m; sourceTree = ""; }; - C12493BE66E89A1BAFEC4C49A5D0F399 /* DSDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = DSDeltaCore.modulemap; sourceTree = ""; }; - C1651CF80D05D97DB390C5D66D51F25C /* F3DZEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DZEX2.h; sourceTree = ""; }; + BEDA7F12E500CF17988D000DA2BF93E7 /* idec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = idec.h; sourceTree = ""; }; + BEDC2F9C531F5A7B59C13110C977C309 /* NDSCart.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NDSCart.cpp; sourceTree = ""; }; + BEE8A481C346821332E9ADE7236FB066 /* System.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = System.hpp; sourceTree = ""; }; + BF0FD474F9FEB46BE9E7E78E2AC5A906 /* NstBoardSunsoft5b.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft5b.hpp; sourceTree = ""; }; + BF1BBDF3D7D54D8C1E001FC042148D06 /* Utf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Utf.hpp; sourceTree = ""; }; + BF2D25C87184C7CB6292C194EBA05335 /* texcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = texcache.h; sourceTree = ""; }; + BF31C2CB59DFB2355DA7BB8112A5D5C0 /* re2.c */ = {isa = PBXFileReference; includeInIndex = 1; path = re2.c; sourceTree = ""; }; + BF7CEB7CE925B8996AD28292550EBFB2 /* ThreadLocal.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocal.hpp; sourceTree = ""; }; + BF8EBB70E09CAD5AD9E5BB36757BDD4E /* RSTHasher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTHasher.h; path = Roxas/RSTHasher.h; sourceTree = ""; }; + BF9EB574A8B1D8BC0B0BEDF16D62D5E3 /* display.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = display.h; sourceTree = ""; }; + BFE1D65673DECE7D6E2A1B6B529D5CAE /* Wifi.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Wifi.cpp; sourceTree = ""; }; + BFF9BE4B997D71AFFD82B6E8CBC06B97 /* 65c816.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = 65c816.h; sourceTree = ""; }; + C00543EF4F06FBFA511049B6A2E2638E /* pngget.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngget.c; sourceTree = ""; }; + C021C2B8A573225A193057ADC5D4155F /* NstBoardSunsoft3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft3.hpp; sourceTree = ""; }; + C05B8BD653DEFD31F1ED3C6A5C8033EA /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; + C05E3B2663EB9FC3F88BC0AF00C603AC /* NstInpPachinko.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPachinko.hpp; sourceTree = ""; }; + C08D3CFD628192FDB9B9FD5A63E531B4 /* NstApiMovie.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiMovie.hpp; sourceTree = ""; }; + C0BD20FF1A75F7E688073AEAC0E0E421 /* dummy_rsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_rsp.h; sourceTree = ""; }; + C0F453A50C9E6D70D2C15CD2F4D9BE68 /* Version+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Dropbox.swift"; sourceTree = ""; }; + C129B80E9CC6B64D0600B9A46648ED8B /* opengl_BufferedDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_BufferedDrawer.h; sourceTree = ""; }; + C14603BADCCE95A5E507021ACEF7693F /* Keys.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Keys.cpp; sourceTree = ""; }; + C14F1439A262C75F30F451CE2F5AC4E9 /* GPU2D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GPU2D.cpp; sourceTree = ""; }; + C159885D11F51EC41D84186D52DC4483 /* RDRAMtoColorBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RDRAMtoColorBuffer.h; sourceTree = ""; }; C17445D591C8EC78950717FD3D5F77B1 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; + C17FD4E3456BB23320C0E9F652CC29D1 /* DropboxService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Records.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Records.swift"; sourceTree = ""; }; C1998E0D8085221AD87F89B614C10E52 /* libGTMSessionFetcher.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGTMSessionFetcher.a; path = libGTMSessionFetcher.a; sourceTree = BUILT_PRODUCTS_DIR; }; - C1CD631F0A847D6AFABB4216480B7556 /* RSTCompositeDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCompositeDataSource.h; path = Roxas/RSTCompositeDataSource.h; sourceTree = ""; }; - C1D6EFEC4C64645B1CD5E8A6C7E9C97F /* ZilmarGFX_1_3.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZilmarGFX_1_3.h; sourceTree = ""; }; - C1E54260AFD798B02F4283ECF16E444F /* t1tables.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = t1tables.h; sourceTree = ""; }; - C1F9B4F1AC4BEBB6F3B839EDBD9E5F8C /* adaptivesleep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = adaptivesleep.h; sourceTree = ""; }; - C20B18CFE6A85C50A5E43ECF4C69D309 /* NstTrackerMovie.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTrackerMovie.hpp; sourceTree = ""; }; - C2472287C41451AFFEC020183BD042A3 /* ControllerDebugView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerDebugView.swift; sourceTree = ""; }; - C2480C7048FB3B86DEDC127B883F6323 /* RSP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RSP.h; sourceTree = ""; }; - C24EA8E380769E668B40D2C5025505CB /* opengl_ColorBufferReaderWithPixelBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithPixelBuffer.cpp; sourceTree = ""; }; + C2095BD846E0E2918CC6C26E739E147E /* language.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = language.h; sourceTree = ""; }; + C24FF4FB306EA08CFD23D4A8DD8B6C7F /* NstInpPowerPad.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPowerPad.hpp; sourceTree = ""; }; C268076A13ECC0F130B5A406C2A1E22A /* GTMSessionFetcher.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMSessionFetcher.xcconfig; sourceTree = ""; }; - C26FEA9C82A62549EEEB21A953C0F6DF /* ftxf86.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftxf86.h; sourceTree = ""; }; - C27BB3E37D9E25626486536CA6D1890B /* OGLFT.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLFT.h; sourceTree = ""; }; - C2A0EC04B2612AA6AB035B6AB1B3FAE8 /* UdpSocket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = UdpSocket.hpp; sourceTree = ""; }; - C2A44DFFD1971B44F0D03A3B9D7CEC57 /* Harmony.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Harmony.h; path = Harmony/Harmony.h; sourceTree = ""; }; - C2B84B3955DE3CC74FD9418BE74C2896 /* GBCInputGetter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCInputGetter.h; sourceTree = ""; }; - C2C58B3E3B8C36120F560F859D6D98F7 /* NstBoardMmc1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc1.hpp; sourceTree = ""; }; - C2ED97BD0F13C57ECCE6851D581326EB /* cic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cic.h; sourceTree = ""; }; + C274755E3C4177DD8B90B0B96F055CDE /* GBCDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GBCDeltaCore-dummy.m"; sourceTree = ""; }; + C2E4AC6AECB49B5169763DE58C30FCF1 /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; + C2F9A0594B477E44DA3CB74E54DD67ED /* ButtonsInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ButtonsInputView.swift; sourceTree = ""; }; C2FE893CBC159403181F3126C6C7917D /* StoneBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoneBase.swift; path = Source/SwiftyDropbox/Shared/Generated/StoneBase.swift; sourceTree = ""; }; - C32EC4E1163CB30B4250829CC8FCC1BA /* GBAinline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAinline.h; sourceTree = ""; }; - C3522EC7585D646CAA3673DB9D55FB21 /* F3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3D.cpp; sourceTree = ""; }; - C37DA4AD186CBA7132359E75E98431E8 /* Port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Port.h; sourceTree = ""; }; - C3928A50878B4620930E776643F68B21 /* F3DFLX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DFLX2.cpp; sourceTree = ""; }; - C3EC67AFC76D160DAF406F83FB32F372 /* NstBoardAxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAxRom.hpp; sourceTree = ""; }; + C31AFF7B6567C46BCD1D5FF5A40AFEFD /* KeyboardGameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardGameController.swift; sourceTree = ""; }; + C32EC5252A036254058CB744DABBE87E /* statemanager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = statemanager.h; sourceTree = ""; }; + C35789A01031A859DE9488BAE0FC99C9 /* NstBoardBandai.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandai.hpp; sourceTree = ""; }; + C3BEC3A5E5A6DF3FF717E11AF5286D93 /* UISpringTimingParameters+Conveniences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UISpringTimingParameters+Conveniences.h"; path = "Roxas/UISpringTimingParameters+Conveniences.h"; sourceTree = ""; }; + C3E5F4DAB8AE8D24960DF1E5DB3F6DE5 /* screenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = screenshot.h; sourceTree = ""; }; + C3F23CEC53278E0CEB1614056B5D4F8C /* RSTPlaceholderView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTPlaceholderView.h; path = Roxas/RSTPlaceholderView.h; sourceTree = ""; }; + C3FFB989E3545149939D3E8C7F5F16B1 /* insertion_sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = insertion_sort.h; sourceTree = ""; }; C41D62EAA75E3627EE9D9B3527E8DFFB /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; - C43B2C1E1A9F88A7EEAE044E22A0CDC6 /* opengl_UnbufferedDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_UnbufferedDrawer.cpp; sourceTree = ""; }; - C46B41859C836F92F71776FC13FD640A /* pngrtran.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrtran.c; sourceTree = ""; }; - C48EADCAA3A0151BF5347F5EE447CBD1 /* GBAcpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAcpu.h; sourceTree = ""; }; - C4DEF759B31F98EC3A0C7C1538495611 /* NstBoardBmc110in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc110in1.hpp; sourceTree = ""; }; - C4F09C29C5169EDE2BFAE9F9E6B95F48 /* GameControllerInputMappingProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerInputMappingProtocol.swift; sourceTree = ""; }; + C43650F984E0D62C7EB21DB9C43B8CAD /* GameControllerStateManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerStateManager.swift; sourceTree = ""; }; + C45CF5051C61E98E1D10FDAE36FED44A /* KeyboardResponder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardResponder.swift; sourceTree = ""; }; + C4B900A4DF59414221BA4B0965A47C7C /* Thread.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.hpp; sourceTree = ""; }; + C4D7382D1D8B2EAAEDEC4E420FAC72E6 /* svpfr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpfr.h; sourceTree = ""; }; + C4F2063F71920535B22EF7E3FF01117B /* GlResource.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GlResource.hpp; sourceTree = ""; }; C538C31B2DE4BC6BA5C964106E5E3F6B /* GTMSessionUploadFetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionUploadFetcher.m; path = Source/GTMSessionUploadFetcher.m; sourceTree = ""; }; - C55A28A051F1189A5E169C1AE35F08E6 /* NstBoardBandaiLz93d50.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiLz93d50.hpp; sourceTree = ""; }; - C5A02908B90AD54C8C621F1E9A36CB18 /* m64p_plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_plugin.h; sourceTree = ""; }; - C5A679691AAA47A28EF1E1E5A6BA88E4 /* opengl_ColorBufferReaderWithReadPixels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithReadPixels.h; sourceTree = ""; }; - C5AA082D0701AB3A2B49F4AA865B5021 /* sdl2_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdl2_compat.h; sourceTree = ""; }; - C5D68576CC0EE04A78AE791897AFD780 /* TxQuantize.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxQuantize.cpp; sourceTree = ""; }; - C5E44048879A0504939654F65166654C /* memmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memmap.h; sourceTree = ""; }; - C65A2F325C6EA118286DBBC4484E5404 /* r4300_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = r4300_core.h; sourceTree = ""; }; - C6794551744F79F117DF19850F503283 /* MFiGameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MFiGameController.swift; sourceTree = ""; }; - C704B47C4D3D001EC83BB8F7C1E8D2E5 /* GLideN64_mupenplus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideN64_mupenplus.h; sourceTree = ""; }; - C70E38FCA082D826611BFD1F0EC58613 /* GameProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameProtocol.swift; sourceTree = ""; }; - C718FF2F26B50069B14C6107F86F877B /* SNES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SNES.swift; sourceTree = ""; }; + C53D6C2BECC25796BBBD554B17692783 /* opengl_CachedFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_CachedFunctions.h; sourceTree = ""; }; + C53D9591F4B5C55AE48D566EAEA25FD1 /* crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; }; + C57031E8B6DD0EBAC4E35185FB93794C /* c4.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = c4.h; sourceTree = ""; }; + C5A57A0F7B6EFB30D8800FFBC3A0FD7A /* F3DEX2ACCLAIM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2ACCLAIM.h; sourceTree = ""; }; + C5A8B0D1C08B6C55E4CA098FCE620178 /* RDRAMtoColorBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RDRAMtoColorBuffer.cpp; sourceTree = ""; }; + C5B9715EFF4CB742F4153FF865BFAE0B /* util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; + C5BE21537778C287EB7835EE5A1CEA97 /* ManagedRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedRecord.swift; sourceTree = ""; }; + C64A7F2FDE6DF6B64B3CFFEE19102859 /* PACKED.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PACKED.h; sourceTree = ""; }; + C64D454F5583AA5EC3D926CB2248F4F8 /* Cheats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Cheats.h; sourceTree = ""; }; + C6615F5A71F8DCD1E426F1118FC5F17A /* NstXml.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstXml.hpp; sourceTree = ""; }; + C68E5B53D8D5CA28D433B92E58B5C931 /* memory.c */ = {isa = PBXFileReference; includeInIndex = 1; path = memory.c; sourceTree = ""; }; + C6AEBD66201582E2F018DBD9D692F239 /* SNESDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SNESDeltaCore.xcconfig; sourceTree = ""; }; + C6BBE5B4E442F86207E88DDD286857CF /* NstBoardUnlKingOfFighters97.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlKingOfFighters97.hpp; sourceTree = ""; }; + C6D50BD15001580ABEF75FEE0D3BF80F /* NstInpPartyTap.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPartyTap.hpp; sourceTree = ""; }; + C6E1F81ACE1C72D6F43ECBBE4EB03E7C /* m64p_debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_debugger.h; sourceTree = ""; }; + C6EB8CD619182507E4AEFF0FD1231295 /* Log_ios.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = Log_ios.mm; sourceTree = ""; }; + C7042544A83B2C65E8D67FFD6DBACCD4 /* resource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = resource.h; sourceTree = ""; }; C71C064E0F8E2D6A2B6E0CB4849BFC5B /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/UIView+WebCacheOperation.h"; sourceTree = ""; }; - C73137BF8F38B56D677038CAFECF2A56 /* pngwtran.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwtran.c; sourceTree = ""; }; - C7361C449C785F93C554BF35D3475E03 /* assem_x64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_x64.h; sourceTree = ""; }; - C7561F25DF5A13A37A67CFD89590E68A /* NstApiVideo.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiVideo.hpp; sourceTree = ""; }; - C77DD7055BE2E940CB49A8B0F10A472F /* String.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = String.inl; sourceTree = ""; }; - C790529DABD6E54A2BA3E56B1C845F12 /* srtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = srtc.h; sourceTree = ""; }; - C7AB9F8A6F41A6BF238E1816BF6ADAE9 /* BitmapProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BitmapProcessor.swift; sourceTree = ""; }; - C7BC48F551C51325F8E971D1377D2A8B /* RSTConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTConstants.h; path = Roxas/RSTConstants.h; sourceTree = ""; }; + C730E5915747302EDF3EC772425E5899 /* RSTDynamicDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTDynamicDataSource.m; path = Roxas/RSTDynamicDataSource.m; sourceTree = ""; }; + C74DB15319EBC3307C2EB1ECF5912CD9 /* NstBoardBmcVt5201.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcVt5201.hpp; sourceTree = ""; }; + C75D9ED3389A6C4CBF7EE16167967675 /* NDSSystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NDSSystem.h; sourceTree = ""; }; + C769B8DF9FD73419F7A8CE7F4C7192F4 /* EEprom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = EEprom.h; sourceTree = ""; }; + C786A086E27CBD3229EFD85CE7497EC8 /* NstNsf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstNsf.hpp; sourceTree = ""; }; + C789F35DF9D922934F14887196EADCFA /* Audio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Audio.hpp; sourceTree = ""; }; C7E40DB865F641E4AB32B64D3F93E22C /* GoogleAPIClientForREST.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleAPIClientForREST.modulemap; sourceTree = ""; }; + C82F87697475573C237F91B5498957A0 /* adaptivesleep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = adaptivesleep.h; sourceTree = ""; }; + C84F53DDEC96ABDB4E99816C838005FD /* Harmony-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-umbrella.h"; sourceTree = ""; }; C87526B5C0AF75FA4CE41AA42D172B0B /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; - C88191C64D7E8CE0EE4B4033CCB6D0FA /* arithmetics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = arithmetics.h; sourceTree = ""; }; C88860D669B74A0154AA887269E28475 /* GTLRBatchQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRBatchQuery.h; path = Source/Objects/GTLRBatchQuery.h; sourceTree = ""; }; - C8A210C3B60C6D8D12F6F8820EF28589 /* missing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = missing.h; sourceTree = ""; }; - C8A78AF718D2553FAE9A19AC2F865BA3 /* ftcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcache.h; sourceTree = ""; }; - C8B1D8C461900C12369DB3E2AA13C08E /* NstBoardBmcGamestarB.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGamestarB.hpp; sourceTree = ""; }; + C8B01F60E394BFF06046341D779E4CB4 /* Music.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Music.hpp; sourceTree = ""; }; C8D6AC695498645EEE4A66FCEF97D848 /* libN64DeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libN64DeltaCore.a; path = libN64DeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; - C9015E1D86DF0B2A7A1D22814920641A /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; - C90C25C12E9E9489A474A496C47B38AF /* Sprite.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sprite.hpp; sourceTree = ""; }; - C91AB35D0843E8B6D4267700DA3291F0 /* NstBoardBmcBallgames11in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcBallgames11in1.hpp; sourceTree = ""; }; - C95F862EEE33E2358C6B0273BBF456D1 /* TextureFilters_hq2x.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_hq2x.cpp; sourceTree = ""; }; + C94926745D8A006AA0A950A854249A42 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = GBADeltaCore/Standard.deltamapping; sourceTree = ""; }; + C9579AB2737FD12BDDCDEDB9799737C0 /* plugin_delta.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = plugin_delta.cpp; sourceTree = ""; }; + C96DE12BB01FD7E95F041A594A9910CC /* NstBoardMmc6.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc6.hpp; sourceTree = ""; }; C977FFA5FDFB893A5DAB65AE680DA461 /* GTLRBase64.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRBase64.m; path = Source/Utilities/GTLRBase64.m; sourceTree = ""; }; + C982B805086D1D5E4EF8373EF7E777A3 /* RSTCellContentDataSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCellContentDataSource.m; path = Roxas/RSTCellContentDataSource.m; sourceTree = ""; }; + C9B0886627D79927053695B7F4472719 /* CircleShape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CircleShape.hpp; sourceTree = ""; }; C9B5A75174DE7C7B4A535B3A42D6239C /* SMClassicCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SMClassicCalloutView.h; sourceTree = ""; }; - C9C35DC64C3A93740937D3C3964F9200 /* F3DDKR.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DDKR.h; sourceTree = ""; }; - C9C3B7DA45835B08897BC091AEF1EEB6 /* RDRAMtoColorBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RDRAMtoColorBuffer.h; sourceTree = ""; }; - C9D7F4E7EB78574E9BE5E912032A3DFF /* NstBoardBtlDragonNinja.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlDragonNinja.hpp; sourceTree = ""; }; - C9E53CDEE3FB0C997231AFF0EA62A9F4 /* gfx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gfx.h; sourceTree = ""; }; - C9F883F7F8E0CC8223971F5D3F4E6D89 /* tlb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tlb.h; sourceTree = ""; }; - CA005FCDCBF549105B1691D698AFFE18 /* L3DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3DEX2.cpp; sourceTree = ""; }; - CA2F2C7F1257D8E558E768DAD7B2D74B /* Cheats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Cheats.h; sourceTree = ""; }; - CA84B8D0950FD10163E23797CEABFE2C /* NstInpTurboFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpTurboFile.hpp; sourceTree = ""; }; - CA99918A66499B3FD57B4BE6A2985044 /* cpumacro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpumacro.h; sourceTree = ""; }; - CABA30017D9761CD2D49BCA9F53E923B /* NSUserDefaults+DynamicProperties.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSUserDefaults+DynamicProperties.m"; path = "Roxas/NSUserDefaults+DynamicProperties.m"; sourceTree = ""; }; - CAE0F839C3C1E4DB9E2519345C397A21 /* RSTNavigationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTNavigationController.m; path = Roxas/RSTNavigationController.m; sourceTree = ""; }; - CB3301D4A5FED38AEE41ED07A6C502BE /* Shader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Shader.hpp; sourceTree = ""; }; - CB608FA02B2FC02737ED821505210FEC /* GLideNUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideNUI.h; sourceTree = ""; }; - CB69BAB4143D6BB19DEF090F3256A990 /* SNESDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SNESDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - CB7525C73F421F5A18034AF27880A67F /* callbacks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; - CB811B30D58FF4024455D5E5CC17947B /* NstBoardTxc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxc.hpp; sourceTree = ""; }; + C9ED0B41AF5C196E6858B6DA26EAAC68 /* NstApiBarcodeReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiBarcodeReader.hpp; sourceTree = ""; }; + CA31C817FA32BF3FA44E8F3FD7273A2B /* assem_x64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_x64.h; sourceTree = ""; }; + CA3B33FD961F7E04608908F29394499A /* NESEmulatorBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NESEmulatorBridge.swift; sourceTree = ""; }; + CA7701E75D51BBB26AF25CB686CB48A8 /* RecordRepresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordRepresentation.swift; sourceTree = ""; }; + CA7F161EA390DDDF6ECB71EE876B89D9 /* ThreadImpl.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadImpl.hpp; sourceTree = ""; }; + CA7FFC847A5DDF0337FD944CC08D1D35 /* ZilmarGFX_1_3.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZilmarGFX_1_3.h; sourceTree = ""; }; + CA9FEB0150AF6AC5451F53D2F5EF6259 /* NstBoardWaixingSh2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSh2.hpp; sourceTree = ""; }; + CAA5774FC0B40EC779613DB64E15C046 /* LocalRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocalRecord.swift; sourceTree = ""; }; + CAAEE81FB5DFAF21D63A74329E6F4E9C /* NstVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsSystem.hpp; sourceTree = ""; }; + CAC68C48D5AACE9BF20D8B880DA33BB2 /* mupen64plus.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = mupen64plus.ini; sourceTree = ""; }; + CB043895CFC330790DEDECC0C41BFEBE /* SoftwareRender.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoftwareRender.cpp; sourceTree = ""; }; + CB66A3376ED296C661FFEAA36063E7A5 /* NstSoundPcm.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundPcm.hpp; sourceTree = ""; }; CB8D4802A5F80BBA2E31C377A7C9689F /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; }; - CBC8A38B9BE9E17E5E15E98583898082 /* workqueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = workqueue.h; sourceTree = ""; }; - CBE1D5062813EDF33B5FBD108CA1A88C /* dma.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dma.h; sourceTree = ""; }; - CBECAF1300D5AE6D87DDEBE18A8D1C3C /* GLFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLFunctions.h; sourceTree = ""; }; - CD01747A1D135D8C97DBC34B3BADEEA8 /* ExtensibleEnums.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExtensibleEnums.swift; sourceTree = ""; }; + CBD7894C9422E5309EB6A4FE9A80D055 /* ARM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARM.h; sourceTree = ""; }; + CBE09CFE7E4A642AC1B56EC89FADDFFE /* dcheck.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dcheck.h; sourceTree = ""; }; + CC08FCCCC5D573865D7ADF9FB0838E1D /* sound.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sound.h; sourceTree = ""; }; + CC29261FDE2973B2D6B6F1E62024A0A9 /* CheatProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CheatProtocol.swift; sourceTree = ""; }; + CC339C9C59B65A4D6483598A6451971E /* TxFilter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxFilter.cpp; sourceTree = ""; }; + CC3FC4F8CAD332D94FED0C7DA4BE5251 /* NstHook.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstHook.hpp; sourceTree = ""; }; + CC438CAEA107E0F60CF6B6A8FBD21763 /* UITableView+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+CellContent.h"; path = "Roxas/UITableView+CellContent.h"; sourceTree = ""; }; + CC70680EAE5C40484D98F7B84A2B1CAE /* NSLayoutConstraint+Edges.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+Edges.h"; path = "Roxas/NSLayoutConstraint+Edges.h"; sourceTree = ""; }; + CCA63F92FA1AA67CA403E2E475DF92B3 /* NstInpPaddle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPaddle.hpp; sourceTree = ""; }; + CD3467F0683A726E7FA99570996471C2 /* SNES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SNES.swift; sourceTree = ""; }; CD370B63C73F83203B239D65A10BF44A /* GTLRDuration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDuration.m; path = Source/Objects/GTLRDuration.m; sourceTree = ""; }; - CD40FB9904EBC64F4CB21A6062A4FFC8 /* NstBoardBmcSuperGun20in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperGun20in1.hpp; sourceTree = ""; }; - CD4250629F8C1D5652E021E52A3F196C /* common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; + CD3757C91C65FB4E4EBAB668470109FE /* NstBoardBtlSmb2a.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2a.hpp; sourceTree = ""; }; + CD4A28E12A0F4CA5FB5F949171A2104B /* NSManagedObject+Conveniences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Conveniences.swift"; sourceTree = ""; }; + CD746E8386BFDF6E8F7B293E9EA93E17 /* NstBoardNtdec.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNtdec.hpp; sourceTree = ""; }; + CD957EF417E4ED855F413792CFADBB28 /* NstBoardBtlT230.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlT230.hpp; sourceTree = ""; }; CDA07C9DEC9FD13724174A7D6794AD7B /* FileRequests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileRequests.swift; path = Source/SwiftyDropbox/Shared/Generated/FileRequests.swift; sourceTree = ""; }; - CDA1A181F550D672CE3A7A747A0DCB7E /* UIImage+Manipulation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Manipulation.m"; path = "Roxas/UIImage+Manipulation.m"; sourceTree = ""; }; - CDC648448D2BD63C7FA72EBB05BD53BD /* NstSoundPcm.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundPcm.hpp; sourceTree = ""; }; - CDE5597A73178118289A5342B56A5EFB /* NstBoardRexSoft.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRexSoft.hpp; sourceTree = ""; }; - CE46BF9BB2E03B58F53E69C87B3A1564 /* messages.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = messages.h; sourceTree = ""; }; - CE6C7C0BB4E1D92107DD8D623F8F45E5 /* WriteToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WriteToRDRAM.h; sourceTree = ""; }; - CEC07F295EF65A94DD75B4B6F79D0A83 /* Revision.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Revision.h; sourceTree = ""; }; - CF0DF7AF00BD39B06D1EDE5AD5FAF7AB /* F3DTEXA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DTEXA.cpp; sourceTree = ""; }; - CF6CFBF5D3D08E7081D6FE7FC32A40AE /* sRGB.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sRGB.h; sourceTree = ""; }; - CF70FBCB7AE2CE5D532C4D3DDF618D72 /* video_capture_backend.c */ = {isa = PBXFileReference; includeInIndex = 1; path = video_capture_backend.c; sourceTree = ""; }; - CF7ECEAEDCF30C5FD13208AF855EEF47 /* NSLayoutConstraint+Edges.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+Edges.h"; path = "Roxas/NSLayoutConstraint+Edges.h"; sourceTree = ""; }; - CFA8EEA9986267DD4C9222F8013EB169 /* NstBoardAe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAe.hpp; sourceTree = ""; }; - CFB8F56FBC758AE2588C1DD814A5F9D6 /* ai_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ai_controller.h; sourceTree = ""; }; - CFE10B16B0C4C7D24E899A604244116E /* TDStretch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TDStretch.h; sourceTree = ""; }; - CFF26FC15D5CF0C1D2FDC8A0DF023F02 /* NstBoardSuperGame.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGame.hpp; sourceTree = ""; }; - CFF9DBD50FF109AB529096538EAC3BE3 /* TextureFilterHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilterHandler.h; sourceTree = ""; }; - D04DC78D5A74516CF2BAD79E947302B5 /* ftsizes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsizes.h; sourceTree = ""; }; - D0869A5AC273020F28A83BEFF3F355D3 /* crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = crypt.h; sourceTree = ""; }; - D0CE7BCBDFB3A9A4EBEA78CB70BFFB3E /* svbdf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svbdf.h; sourceTree = ""; }; - D10088E315F5123F3D327A06066E206B /* NstInpPowerGlove.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPowerGlove.hpp; sourceTree = ""; }; + CDC394F06B879F234E7D901D7FFBA813 /* BlendMode.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = BlendMode.hpp; sourceTree = ""; }; + CDCA56A230FEF11250C8907E001346C3 /* NstBoardBmcBallgames11in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcBallgames11in1.hpp; sourceTree = ""; }; + CE2627D52C27F26A3779CDAD7756E356 /* FIFOSampleBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFOSampleBuffer.h; sourceTree = ""; }; + CE641ADC83B5D0F02766689E3A81B2B1 /* Context.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Context.h; sourceTree = ""; }; + CE7A2A4BC98670AD316ABDBE9EC069B7 /* NstBoardSachenTcu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenTcu.hpp; sourceTree = ""; }; + CEAA6B8E9680ACB06BA0279C3ED990AE /* TextureFilters_hq2x.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_hq2x.cpp; sourceTree = ""; }; + CEE9C147D673E0F634134990DBE79A6F /* callbacks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; + CEEC5CCF9E4EF348B674F43D7BC193AD /* MelonDSDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MelonDSDeltaCore.modulemap; sourceTree = ""; }; + CEF3CC6501A56EB934F1F25AEB77A985 /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = internal.h; sourceTree = ""; }; + CF4CB213C78DA27A2EF987CB656BA480 /* file_storage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = file_storage.h; sourceTree = ""; }; + CF5ED3F5DA210F1A19B3FCA09E19F679 /* NstBoardUnlXzy.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlXzy.hpp; sourceTree = ""; }; + D02AD2D93D711FC49FACBCEA4547D87D /* NstBoardWhirlwind.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWhirlwind.hpp; sourceTree = ""; }; + D02F91DD08301C06A04A0C6273FC0114 /* TxInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxInternal.h; sourceTree = ""; }; + D030FA73AD1DA503048D364090F865A1 /* UserDefaults+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UserDefaults+Harmony.swift"; sourceTree = ""; }; + D0643302DC4E42474BC7E1B5E9903519 /* NstBoardSxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSxRom.hpp; sourceTree = ""; }; + D10EF252E11807FB1EF1F7E9A2AA502E /* snes9x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = snes9x.h; sourceTree = ""; }; D113E482EBF7C096302CD382067ECB51 /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; }; - D116902F224A7C6DCFCD3121EA7E0745 /* Sensor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sensor.hpp; sourceTree = ""; }; - D1212ABF80224A615FAA8D5EA7127F55 /* retro_environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_environment.h; sourceTree = ""; }; D1221EDCBBEDA9035D0C95CAE7F9D52A /* GTLRService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRService.m; path = Source/Objects/GTLRService.m; sourceTree = ""; }; - D159D83AA74847EB95659739517DA8FE /* registers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = registers.h; sourceTree = ""; }; + D13626EE69FD1C7B6C4F9D290D2A71BD /* Shape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Shape.hpp; sourceTree = ""; }; + D14C427796C3B67D5F822717322045B9 /* DisplayWindow.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DisplayWindow.cpp; sourceTree = ""; }; + D14E9FD4E7425DDD45906CDB6CEB7EF9 /* NstPatcherUps.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcherUps.hpp; sourceTree = ""; }; + D164ECEA35ACB2EFAF45DFBDE6086CD3 /* NstBoardAveD1012.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAveD1012.hpp; sourceTree = ""; }; D16849E97B5D5B6449F8627DD2DCBAF2 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; - D17E68802F2F252D95693D1AA5ADC144 /* SoundSource.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundSource.hpp; sourceTree = ""; }; - D18007DF21DF9CDE2EA3A14D00C050DA /* NstBoardBmcSuper700in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper700in1.hpp; sourceTree = ""; }; - D1A18FFCFB5674E197BFC4BFA0584F6E /* F3DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2.cpp; sourceTree = ""; }; - D1AF2289C82F924BD674E01C203E7B6F /* ucodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ucodes.h; sourceTree = ""; }; - D1BA7EA1AD9736CD11003C39C000C9C9 /* savestate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = savestate.h; sourceTree = ""; }; - D1E6CF2256BF01CFCB8C7C6BB1D101FE /* RSTCollectionViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = RSTCollectionViewCell.xib; path = Roxas/RSTCollectionViewCell.xib; sourceTree = ""; }; - D24B8100E3100D72F4874FB079F78F54 /* NstBoardNanjing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNanjing.hpp; sourceTree = ""; }; - D25FEE0C7F00C1F35CA79D7416F11407 /* DSDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = DSDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - D26E750E5A5772E0667870225E0F7C1B /* port.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = port.h; sourceTree = ""; }; - D2787BB38A3A6EE118F7DC347429E78F /* gdbstub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gdbstub.h; sourceTree = ""; }; + D18D98DFBFA469D8509A1C9BFB85042E /* DebugDump.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DebugDump.h; sourceTree = ""; }; + D18DB696A2F92208CB6C8BE6F624B70D /* Harmony.xcdatamodel */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.xcdatamodel; path = Harmony.xcdatamodel; sourceTree = ""; }; + D190B41F4CB5ED20A79688D063A88168 /* UICollectionViewCell+Nibs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+Nibs.h"; path = "Roxas/UICollectionViewCell+Nibs.h"; sourceTree = ""; }; + D1975814ACD46FECD8CEDFCE0706FFF0 /* m64p_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_common.h; sourceTree = ""; }; + D1B6EF297830BCAD6D884EED97389BCF /* PACKED_END.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PACKED_END.h; sourceTree = ""; }; + D21047E7540C7E4A5E2197B158C84D3B /* cstdint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cstdint.h; sourceTree = ""; }; + D2188A915972865B5AF5C68B8B6D05B3 /* assem_x86.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_x86.h; sourceTree = ""; }; + D23E1E808E48E9849AB52E92FEE110B2 /* NstBoardBmcPowerjoy84in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcPowerjoy84in1.hpp; sourceTree = ""; }; + D24E88AD3320735A8600F142B16FD580 /* NstCheats.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCheats.hpp; sourceTree = ""; }; + D254660B89B2DF06F349F2BC87B3FEFA /* DropboxService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxService.swift; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService.swift"; sourceTree = ""; }; D27C9AEA920B8065DC8FB0F6F92A6E26 /* GTLRURITemplate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRURITemplate.h; path = Source/Utilities/GTLRURITemplate.h; sourceTree = ""; }; - D282E9AC180F6200BA4B724CC7918B06 /* NstBoardBtlPikachuY2k.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlPikachuY2k.hpp; sourceTree = ""; }; - D2CD9D7750784D7D9E924E0E0357EC76 /* ZSort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZSort.h; sourceTree = ""; }; - D2F39CB2B6042785A3E5F2C40320DD2C /* main.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = main.h; sourceTree = ""; }; - D2F66324134D7EB7894E23D64D5D292B /* ftgxval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgxval.h; sourceTree = ""; }; + D29AAFD2CFE6FB0F7D7946F037550722 /* cpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; + D2A1CDF2D6BFF1EF9D9061C663EE16F9 /* NESDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NESDeltaCore-dummy.m"; sourceTree = ""; }; + D2AC56C3AE1F0BBCE09D6CE758D402CE /* Network.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Network.hpp; sourceTree = ""; }; D300A5B7805C13ACEEB33CFECE9235DD /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; - D30A1BC3FBD53F3033F0C28438BE7BD0 /* N64.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = N64.cpp; sourceTree = ""; }; - D31F9464D26C84F4303F9214852E0259 /* NstBoardBtlShuiGuanPipe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlShuiGuanPipe.hpp; sourceTree = ""; }; - D344F505862E745C78F15C36F91D7325 /* CombinerKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CombinerKey.h; sourceTree = ""; }; - D39C48316E5E36755CF1BA3B4E16F5DA /* DeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = DeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - D41C7731EC1A1866FC9B20D1EFC8D2ED /* NstInpPowerPad.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPowerPad.hpp; sourceTree = ""; }; - D425AE3E5ED390C5A8846F791DD166FE /* dictionary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dictionary.h; sourceTree = ""; }; - D4AAED9CBF41BDAFF1EE1D4E400FDF87 /* cp0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp0.h; sourceTree = ""; }; + D347B9730DA2524DAF8E0C7AEDC8EEEA /* RemoteRecord+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+File.swift"; sourceTree = ""; }; + D3D57B0A12B1AA1AEA896FD02062F18D /* RSTOperationQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTOperationQueue.m; path = Roxas/RSTOperationQueue.m; sourceTree = ""; }; + D3FF2CD92B642B01EE1206B628894B5C /* NstInpPokkunMoguraa.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPokkunMoguraa.hpp; sourceTree = ""; }; + D407D2A6DD08097D10D2B1117A8635F6 /* dynamiclib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dynamiclib.h; sourceTree = ""; }; + D41AF32FC52E17D1A0A5BA99D695DD30 /* NstInpSuborKeyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpSuborKeyboard.hpp; sourceTree = ""; }; + D4443534BC214F7BD24E7115ECFAD056 /* Glyph.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Glyph.hpp; sourceTree = ""; }; + D446F7C2C98C47BB376AA4DC92FF956D /* RSTCellContentChange.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCellContentChange.m; path = Roxas/RSTCellContentChange.m; sourceTree = ""; }; + D4557C24D5CC84F9F3B2999C33F9DE91 /* NstBoardRcm.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRcm.hpp; sourceTree = ""; }; + D4876241413E9B62B9F4FF4FCBFBC93B /* opengl_ColorBufferReaderWithReadPixels.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithReadPixels.cpp; sourceTree = ""; }; D4C010E8572FAE8B51DFDBF2300ECF30 /* libGBCDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGBCDeltaCore.a; path = libGBCDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; - D4E18A027874D0E4F2D09A1492E7FC02 /* memmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memmap.h; sourceTree = ""; }; - D4E854B6ACFFE4EA1EDD318476D024D0 /* NstBoardRexSoftSl1632.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardRexSoftSl1632.hpp; sourceTree = ""; }; + D4D5FBCFDF444CE792F8C8209C5606CC /* GPU.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GPU.cpp; sourceTree = ""; }; + D4F21465E42C4A8071CA88DDA2952DAA /* sdl_key_converter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdl_key_converter.h; sourceTree = ""; }; D501AB9335B46D77142394E47A29319A /* GTMReadMonitorInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMReadMonitorInputStream.h; path = Source/GTMReadMonitorInputStream.h; sourceTree = ""; }; - D52092A71CADBC93153EE571AB2672B0 /* UIImage+Manipulation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Manipulation.h"; path = "Roxas/UIImage+Manipulation.h"; sourceTree = ""; }; - D529199D3F461EACEE4D0D45FA961BF4 /* UIApplication+AppExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIApplication+AppExtension.swift"; sourceTree = ""; }; - D587573F39534790FBF56E7EEC8232B0 /* assemble_struct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble_struct.h; sourceTree = ""; }; - D58C0FE9AF63F39A0E7990E8ABEAA707 /* NstBoardSachenSa72008.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa72008.hpp; sourceTree = ""; }; - D5918BE30019D1A9AFEAA94298952245 /* UITableViewCell+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+CellContent.m"; path = "Roxas/UITableViewCell+CellContent.m"; sourceTree = ""; }; - D5F7B6EF99FCD4BF1F3869F8D73FE95B /* RSTOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperation.h; path = Roxas/RSTOperation.h; sourceTree = ""; }; - D600C41025FD98A039F6974280BC9059 /* NstApiMachine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiMachine.hpp; sourceTree = ""; }; - D64D70EE0AECCCED6FF32F99E14D58BF /* svgxval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svgxval.h; sourceTree = ""; }; - D6619CB5190C33CD4AF481F84D29F75F /* RSTSearchController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTSearchController.m; path = Roxas/RSTSearchController.m; sourceTree = ""; }; + D549AA5A39E931E9F3F53DC8DC0F8E2A /* GBASoundDriver.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBASoundDriver.mm; sourceTree = ""; }; + D54FDB83A8048619B7C58407A8302609 /* NstBase.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBase.hpp; sourceTree = ""; }; + D5643A5674D32FE8D35CE78AF0B30F39 /* NstMemory.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstMemory.hpp; sourceTree = ""; }; + D5BACB869529C8A58764FBF51E5D7BB8 /* driver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = driver.h; sourceTree = ""; }; + D5D7C859DA53707D68A0C6096E4FD656 /* NstBoardAveNina.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAveNina.hpp; sourceTree = ""; }; + D5E9FD5A3371067E608C6FF32C3E1179 /* RSTNavigationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTNavigationController.m; path = Roxas/RSTNavigationController.m; sourceTree = ""; }; + D5FBF61FEAA24AC5DFA51366F3A14D23 /* NstBoardKonami.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonami.hpp; sourceTree = ""; }; + D6152F7397477BE4F0ED9C7788792005 /* WifiAP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WifiAP.h; sourceTree = ""; }; D686BB86CE4E75B4F320164A9EC1B404 /* GTLRUploadParameters.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRUploadParameters.m; path = Source/Objects/GTLRUploadParameters.m; sourceTree = ""; }; - D69B8F7EC4A4B64E7B7E790A6DCF62C4 /* ftoutln.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftoutln.h; sourceTree = ""; }; - D6B56FEC107675FBE484E18FB0578E5F /* DepthBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBuffer.cpp; sourceTree = ""; }; - D6BFD334CCCF9EBCBC3A6ABCF03BF295 /* UITableView+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UITableView+CellContent.h"; path = "Roxas/UITableView+CellContent.h"; sourceTree = ""; }; - D6CAAD3D41D505A55D4926BAF41AF958 /* obc1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = obc1.h; sourceTree = ""; }; - D6D2B3F2E952A338D1128CD5D724862D /* NstBoardCamerica.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCamerica.hpp; sourceTree = ""; }; - D73DBD374EA8AF257C963ADA5CED3C29 /* m64p_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_config.h; sourceTree = ""; }; - D761EA5C2004DE520EE6E3DA7CD4F6C3 /* xxhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; - D77D2A132FCC17A3824D7EE83B27B431 /* plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = plugin.h; sourceTree = ""; }; - D79C4564600E16C5D3087362DA9FB91E /* mp3.c */ = {isa = PBXFileReference; includeInIndex = 1; path = mp3.c; sourceTree = ""; }; - D8CFE89245F633014BBDF6E8AF4985D1 /* DSDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DSDeltaCore-dummy.m"; sourceTree = ""; }; - D8D32EAB45D5BEE636521CB06DB71FF9 /* NstBoardJalecoJf17.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf17.hpp; sourceTree = ""; }; - D8D7F2571154753B11327E7B624A795A /* dd_controller.c */ = {isa = PBXFileReference; includeInIndex = 1; path = dd_controller.c; sourceTree = ""; }; - D8E275522B55AF9B007FC628DA27411C /* WavFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WavFile.h; sourceTree = ""; }; - D8EB194138EAB03A1BAF77804381385D /* DeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DeltaCore-umbrella.h"; sourceTree = ""; }; - D91579E22C2EC7BD86DF031990A153A9 /* opengl_ColorBufferReaderWithBufferStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithBufferStorage.h; sourceTree = ""; }; - D9191356F40229DDA60488AC64805339 /* ftpic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftpic.h; sourceTree = ""; }; - D9445B158497F7C69D8E9D2443A33739 /* NstDatabase.xml */ = {isa = PBXFileReference; includeInIndex = 1; path = NstDatabase.xml; sourceTree = ""; }; - D95AA79C2C5088E9B27BAAA9444850C2 /* Context.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Context.cpp; sourceTree = ""; }; - D98981D944CEC9F56A1D909EFAB4FB16 /* PropertyGroup+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "PropertyGroup+Harmony.swift"; sourceTree = ""; }; - D98EC38E106371722A01A73B3CD4D54B /* NstBoardKonamiVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVsSystem.hpp; sourceTree = ""; }; - D9BE76A56BCD866A71FD891640A0940C /* SoundFileWriter.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileWriter.hpp; sourceTree = ""; }; + D6965C029B17596D166CA7C061E5AFA6 /* pngconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngconf.h; sourceTree = ""; }; + D6A4C76DED9C21C388F39532BDFE1609 /* writepng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = writepng.h; sourceTree = ""; }; + D6C840B3C97CEC304F49384CCAA446AA /* RTC.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RTC.cpp; sourceTree = ""; }; + D6FF04411B9686AB60189647F155133B /* ftcid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcid.h; sourceTree = ""; }; + D709E423B3398EC39A98F76319C9374B /* convert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = convert.h; sourceTree = ""; }; + D72335FEE7B69D06AC33B707144B50DE /* jpeg.c */ = {isa = PBXFileReference; includeInIndex = 1; path = jpeg.c; sourceTree = ""; }; + D7DDAE335C54604826A3ECBD79CFED3E /* TextureFilters_xbrz.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_xbrz.cpp; sourceTree = ""; }; + D80E4A5FDBC780E4358E55866C35218A /* Performance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Performance.h; sourceTree = ""; }; + D81B0A638756575C41CA82842260A641 /* NstBoardIremG101.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremG101.hpp; sourceTree = ""; }; + D86A59B7F6D5BB8BCCA5F180F29A6656 /* MemoryInputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = MemoryInputStream.hpp; sourceTree = ""; }; + D91D509E04E52EB1EF2C6CE6325D63E0 /* assemble_struct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble_struct.h; sourceTree = ""; }; + D9223E826A52C67763ED0B1CB113EDBC /* mc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mc.h; sourceTree = ""; }; + D96CE517678765B006B018E340F3198C /* audio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = audio.c; sourceTree = ""; }; + D993982D3AADF41E465498E329FEBD9B /* TextureFilters.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters.cpp; sourceTree = ""; }; D9CA1BA4B1C7EB05BD412CB7895C1658 /* GTMGatherInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMGatherInputStream.h; path = Source/GTMGatherInputStream.h; sourceTree = ""; }; D9E62A3E87A152D8A5A4747A0E88F317 /* SMCalloutView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SMCalloutView.m; sourceTree = ""; }; - D9ED4C71C3016ED3FC4BA58AD0F23387 /* ppu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ppu.h; sourceTree = ""; }; - DA034BCB2E1E7F757B0973F79CA6BD70 /* GBCDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCDeltaCore.h; sourceTree = ""; }; + DA35E04DC90CDF3E5C69140C495709F6 /* DepthBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBuffer.cpp; sourceTree = ""; }; DA67DD1AC07C6365F72FCAE6272760D2 /* Entry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entry.swift; path = Sources/ZIPFoundation/Entry.swift; sourceTree = ""; }; DA78D0D081686B5372F0FFAABDF5733A /* Pods-Delta-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Delta-acknowledgements.plist"; sourceTree = ""; }; - DA87C06EA55D40BF0BACCC63B7F0FA76 /* NstBoardHes.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHes.hpp; sourceTree = ""; }; - DAC19450998BD4D56C3C2C86AE5687C6 /* rumblepak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rumblepak.h; sourceTree = ""; }; - DACC10FFB04DCEFEA489925006B8311D /* fttypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fttypes.h; sourceTree = ""; }; - DB3A0F2D56E5C2399EC70F3417641DDA /* ft2build.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ft2build.h; sourceTree = ""; }; - DB6C6046F5260896D182C1590701A4C2 /* VideoFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoFormat.swift; sourceTree = ""; }; - DB6DD6DB7B47787A5A8EA1D3325598F6 /* GameView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = ""; }; - DB916A39387B7212EE06E2DA467A8D51 /* NstBoardTaitoTc0190fmcPal16r4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoTc0190fmcPal16r4.hpp; sourceTree = ""; }; - DBAA90C42D53B3B86801C3ADD7C2CC2A /* stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = stream.h; sourceTree = ""; }; - DBB26A9F3AD2F7159A0C7E893521DBCA /* Vector2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector2.hpp; sourceTree = ""; }; + DA9C9A6D30671F1FB5F50BFBC1D1DF0B /* OGLRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLRender.h; sourceTree = ""; }; + DB18069D26E35C1BEFE5C4A0262422E8 /* RSTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTError.h; path = Roxas/RSTError.h; sourceTree = ""; }; + DB20DDFBF1AF645CE61ADF09F5974137 /* osd_element.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osd_element.h; sourceTree = ""; }; + DB36295AA4074B36829063D11A8BDC98 /* NstBoardMagicSeries.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMagicSeries.hpp; sourceTree = ""; }; + DB540D974E938108678097CB0FEB8A5E /* RateTransposer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RateTransposer.h; sourceTree = ""; }; + DB6A84DCE2259D650CA6872E7BC6A3C9 /* GBALink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBALink.h; sourceTree = ""; }; + DB8FE8CE43E3908EA8654AD9FBFC9667 /* NstBoardBmcCh001.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcCh001.hpp; sourceTree = ""; }; + DBB12A893E1A139B63450DDE9A309CC4 /* RSTOperation_Subclasses.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperation_Subclasses.h; path = Roxas/RSTOperation_Subclasses.h; sourceTree = ""; }; DBBA083D62798DCA02FE935019980CCF /* GoogleSignIn.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleSignIn.framework; path = Frameworks/GoogleSignIn.framework; sourceTree = ""; }; DBC0113CF73BE24525E670D024A85BE7 /* libHarmony.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libHarmony.a; path = libHarmony.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DBC2FE16691E41109D7168B4B47BC729 /* F3DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX.h; sourceTree = ""; }; - DBCF759085E40951D39485BB214BB25C /* DepthBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBuffer.h; sourceTree = ""; }; - DBE05472ED5AAEBB0CA13B43E5496F2F /* NstApiNsf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiNsf.hpp; sourceTree = ""; }; - DBFD59116F5FC54AE4428271A6BB1CAA /* filters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = ""; }; - DC3FCFF553A82968D13B5EB86CA60675 /* RSTCellContentDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentDataSource.h; path = Roxas/RSTCellContentDataSource.h; sourceTree = ""; }; - DC46D472713AEC4054D4A5794AAC802C /* txWidestringWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = txWidestringWrapper.h; sourceTree = ""; }; - DCA41822F3659F65C03D6B0D418F612B /* TxTexCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxTexCache.cpp; sourceTree = ""; }; - DCA611BC3AFEC2780F5ED5167FEFBACF /* ftbdf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbdf.h; sourceTree = ""; }; - DCB3B443E61EDD2CC071DAE04B2C1F0C /* NstBoardCnePsb.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCnePsb.hpp; sourceTree = ""; }; - DCBEFF02673A4D0CD9185C6100D7E963 /* NstTracker.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTracker.hpp; sourceTree = ""; }; - DD5EE72E5D4DEF927BEEE94D86725DC0 /* saves.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = saves.h; sourceTree = ""; }; - DD6C840F168CC0216273566943F214F5 /* NoiseTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NoiseTexture.cpp; sourceTree = ""; }; - DD7C52A8979058368290D45755488F97 /* pngset.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngset.c; sourceTree = ""; }; - DDDBA9705C6D9A716771C1B745289787 /* NstBoardBmc22Games.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc22Games.hpp; sourceTree = ""; }; - DDE3998515C1E572211C2A5EEE7EF068 /* m64p_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_common.h; sourceTree = ""; }; - DE2D5223B53CBDDEEFCC21BFCF9AB205 /* ftsynth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsynth.h; sourceTree = ""; }; + DBD80F21182531F3EA2504E53691367A /* FrameBufferInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FrameBufferInfo.cpp; sourceTree = ""; }; + DC0FD4C8DB0253E8CE8EAF9C64DBD0EB /* Roxas-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Roxas-dummy.m"; sourceTree = ""; }; + DC240B06FEB31AD03CBC7B80148A3097 /* Harmony-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-prefix.pch"; sourceTree = ""; }; + DC2E2AF3A950FAF5326EEE74CDCD4D10 /* glsl_FXAA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_FXAA.h; sourceTree = ""; }; + DC6964261E4DD7BE99FB445FC8757345 /* NstApiDipSwitches.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiDipSwitches.hpp; sourceTree = ""; }; + DD7037B9236081F8835FD977759FC372 /* NstBoardSuperGameLionKing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGameLionKing.hpp; sourceTree = ""; }; + DD81DFC2C331976AE715C460849BA6F6 /* NDSCart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NDSCart.h; sourceTree = ""; }; + DD855AE6412C0DD63FC4D79544883DB2 /* ImmediatePanGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ImmediatePanGestureRecognizer.swift; sourceTree = ""; }; + DDAB24C8DF7DA2BB3D67FC4A2C669BEF /* statesaver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = statesaver.h; sourceTree = ""; }; + DDB2184F0999EE882B67DEFADE1B4A63 /* L3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3D.h; sourceTree = ""; }; + DDDDABB6EB20FCEABADC4F4B42F10D74 /* NstBoardFukutake.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardFukutake.hpp; sourceTree = ""; }; + DDE800F01854521394EAADE8A06F1AA1 /* ftsynth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsynth.h; sourceTree = ""; }; + DE1CD0A14598D55B1CD56BD77F8073C9 /* bios.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bios.h; sourceTree = ""; }; + DE3C56A00DE19DC466C925A15112774C /* Lock.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Lock.hpp; sourceTree = ""; }; + DE3F53289236C150F14F4B85B876D904 /* ConflictRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordOperation.swift; sourceTree = ""; }; + DE50DAF15EC75FA249C291622A4739DE /* ManagedAccount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedAccount.swift; sourceTree = ""; }; DE7BED3E5E48EB3660BE48EE00FA7AFB /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; DEBCE82463719FE6476D577E1F4423FD /* TeamLogRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamLogRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamLogRoutes.swift; sourceTree = ""; }; - DF48B54B85EDEF813D05CDF5146FBCF7 /* NESDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NESDeltaCore.h; sourceTree = ""; }; - DF6E047B23D9FBAF2DB48EC4B655B82B /* DeleteRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordOperation.swift; sourceTree = ""; }; - DF75CDA06A2F599F32A8F0E05EEF39FA /* controls.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = controls.h; sourceTree = ""; }; - DFD30F6DE5762FE7D5CEA0AFE95ACACB /* mupen64plus.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = mupen64plus.ini; sourceTree = ""; }; - DFD8974B1F72F3E8D3FB1FC240A1ABD1 /* Keyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Keyboard.hpp; sourceTree = ""; }; - DFFBD37FBE84B1A972546ABBEE2067BF /* NstRam.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstRam.hpp; sourceTree = ""; }; - E009A78A05503277A11995657704C090 /* ftrfork.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftrfork.h; sourceTree = ""; }; - E042969907A8F89D42D0992DE8D4804B /* NstBoardJalecoJf13.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf13.hpp; sourceTree = ""; }; - E07E6F8E20C9B8DBDB6086A2080574B0 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; - E07FCD55ADD3EACB05945CD2DAA45704 /* DisplayWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DisplayWindow.h; sourceTree = ""; }; + DEC0821C3D8852D66B08A0002AB2F015 /* DisplayLoadProgress.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DisplayLoadProgress.cpp; sourceTree = ""; }; + DEDA901FE973732B0B1E37BD243D43BB /* CGGeometry+Dictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "CGGeometry+Dictionary.swift"; sourceTree = ""; }; + DF2DD4169A9A5CEA5319C794BD888975 /* hle_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle_internal.h; sourceTree = ""; }; + DF4AAA0AF5429BDB84A1B9464A02940C /* NstBoardBmcY2k64in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcY2k64in1.hpp; sourceTree = ""; }; + DF5405AEB7C1FBC155A415D86594377C /* NstBoardBtlAx5705.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlAx5705.hpp; sourceTree = ""; }; + DF5DA6597370C51EB0AF58AA6075130F /* version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + DF93E143D1E16A5D0994F45965CDDB74 /* F5Indi_Naboo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F5Indi_Naboo.h; sourceTree = ""; }; + DFBFAD2A751915C945CC42E5F0F6D525 /* spc7110emu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110emu.h; sourceTree = ""; }; + DFC688B75792FBFBB3B452084CA3837C /* NstSoundRenderer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundRenderer.hpp; sourceTree = ""; }; + DFDA1E12C63A8E139E0F5F52E6F63F9D /* opengl_UnbufferedDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_UnbufferedDrawer.h; sourceTree = ""; }; + E04D3872EDD7D06663BEBFB1BB899C3E /* ManagedRecord+Uploading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Uploading.swift"; sourceTree = ""; }; + E07126E3FC357870F5EAEC48FB308C9A /* NstBoardTxcTw.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcTw.hpp; sourceTree = ""; }; + E077F3008801C506785266DF63C1EA19 /* romlist.bin */ = {isa = PBXFileReference; includeInIndex = 1; path = romlist.bin; sourceTree = ""; }; E0987B780D382225AE82D80ECA8C0641 /* GTMGatherInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMGatherInputStream.m; path = Source/GTMGatherInputStream.m; sourceTree = ""; }; - E0B30CE96C7B045BFDBA33EE166DBFFB /* NstBoardSxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSxRom.hpp; sourceTree = ""; }; + E0D8C051806BA9A8817550D4A2D2B252 /* SyncCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SyncCoordinator.swift; path = Harmony/SyncCoordinator.swift; sourceTree = ""; }; + E0F150BFDEE45BE9AA4D0FDF4D91815E /* gfx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gfx.h; sourceTree = ""; }; E0F1902545FB22A0EF0B1A987A6C9D43 /* SMCalloutView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-prefix.pch"; sourceTree = ""; }; - E0F23910DDA9040638B4A63EABA0CE82 /* cart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cart.h; sourceTree = ""; }; - E10172E8D8CCCF9773BF6EA4BEBC7E05 /* ContextSettings.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ContextSettings.hpp; sourceTree = ""; }; - E11C4236342FA8398AE626DB3274772D /* NstCartridgeUnif.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeUnif.hpp; sourceTree = ""; }; + E0FE60C5CC43E6BEE71A9295033B18F2 /* MFiGameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MFiGameController.swift; sourceTree = ""; }; + E10F919F295AF23B2D729F89AA44145D /* NstBoardJalecoJf13.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf13.hpp; sourceTree = ""; }; + E1210995B1881C4C2239A38E329170E0 /* ttunpat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ttunpat.h; sourceTree = ""; }; + E12444C1B56F3412CF521B329577DC7D /* sa1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sa1.h; sourceTree = ""; }; + E149E90D3011EE5DD380C62CC073BF20 /* Rect.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Rect.inl; sourceTree = ""; }; E17A40A5122F984FE431D21753C8CF06 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; - E194EEE9A16263CD0FDB5BFF52765777 /* RSTOperationQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTOperationQueue.m; path = Roxas/RSTOperationQueue.m; sourceTree = ""; }; - E1E783A2C239C16F0FB68CDC920FB0A8 /* GBATypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBATypes.h; sourceTree = ""; }; - E21A90A7C4C571865F8859DE15FB6A94 /* cpu_detect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpu_detect.h; sourceTree = ""; }; + E216C0C45BCA364953D3D8851490070E /* SNESEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = SNESEmulatorBridge.mm; sourceTree = ""; }; E248CA8F99CCB2FEEDCE6967354F7FB4 /* SwiftyDropbox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SwiftyDropbox.h; path = Source/SwiftyDropbox/Shared/Handwritten/SwiftyDropbox.h; sourceTree = ""; }; - E269D644BF08F4B053F036687791157F /* Patch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Patch.h; sourceTree = ""; }; - E296E015D17F062AF04EB6010FF3D61E /* Bundle+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Bundle+Resources.swift"; sourceTree = ""; }; - E2A4BC7BE1DB4773E50DD8B7E967C51D /* NstIoMap.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoMap.hpp; sourceTree = ""; }; - E2BAB81C3D77DEA7A2AE15BE082DFA95 /* DepthBufferToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBufferToRDRAM.h; sourceTree = ""; }; - E303B73D343B4496C9C1319F3E187317 /* hermite_resampler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hermite_resampler.h; sourceTree = ""; }; - E33793CEFFD0F60ECF7785770DBCE9F3 /* NstBoardUnlWorldHero.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlWorldHero.hpp; sourceTree = ""; }; - E350E01066A73585D9DE99D4C11B7C7A /* NstBoardBmc800in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc800in1.hpp; sourceTree = ""; }; - E3A6EC0B470AAD78C4D5550BBDA4A73E /* NstBoardSunsoft2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft2.hpp; sourceTree = ""; }; - E3F52E4EF9D56259B6359336A7D98C0A /* NstBoardBmc9999999in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc9999999in1.hpp; sourceTree = ""; }; - E411C55BF728DAE87580EC144C599C2A /* pngwutil.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwutil.c; sourceTree = ""; }; - E4185D8E6FDFC3750E4E3DCF897B9D2F /* KeyboardGameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardGameController.swift; sourceTree = ""; }; - E43D760A416FD46145902A92E018E58F /* SDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL.h; sourceTree = ""; }; - E44669EDF7D46C5AEA1F287C0BCB9E65 /* Harmony.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Harmony.modulemap; sourceTree = ""; }; - E464A7D70176B62BFF57B34C448A9023 /* opengl_GLInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_GLInfo.h; sourceTree = ""; }; + E264A0D34041EEDB230760A4DF155023 /* NstBoardBtl2708.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtl2708.hpp; sourceTree = ""; }; + E2736204110643A558D3FFB355216B2E /* version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; + E284FFF9015A2937CE2CA1509C92B65C /* zlib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = zlib.h; sourceTree = ""; }; + E29595D0B8DD5D154897A066190504AB /* DepthBufferRender.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBufferRender.cpp; sourceTree = ""; }; + E2B96FEA76E92236E75F0848DE0D7ADD /* NstBoardBmc800in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc800in1.hpp; sourceTree = ""; }; + E2C410EBF08C1B76FDAC71A27419D38B /* ARMInterpreter_ALU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARMInterpreter_ALU.h; sourceTree = ""; }; + E2FDB4BB627C5ED4C383AB3D3EB64DA2 /* dummy_video.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_video.h; sourceTree = ""; }; + E332D1A2E036E2DF42439D6ABAD4A55C /* tttables.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tttables.h; sourceTree = ""; }; + E336CAB35F1041C04DA2A4B22DF0D4FD /* GameProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameProtocol.swift; sourceTree = ""; }; + E33F73E03E8DBCB9A561F9D7082C8EB3 /* sdd1emu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdd1emu.h; sourceTree = ""; }; + E34BFCB88D5BE82E1084754358F46958 /* NstBoardBmc72in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc72in1.hpp; sourceTree = ""; }; + E3E937AC710B3BDEE100401BE7BEFD62 /* RenderTexture.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderTexture.hpp; sourceTree = ""; }; + E3E9EE093E08EF6C06AEBAFED90F5FDC /* TDStretch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TDStretch.h; sourceTree = ""; }; + E42E5A99DAE876C1FA977F57560BA47B /* NstBoardNxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNxRom.hpp; sourceTree = ""; }; + E45EB56BC48BE16046055CF4A8D52558 /* NSUserDefaults+DynamicProperties.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSUserDefaults+DynamicProperties.m"; path = "Roxas/NSUserDefaults+DynamicProperties.m"; sourceTree = ""; }; E474FB45FC3DD9C8E04C72D076AC8DFC /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/ZIPFoundation/Data+Serialization.swift"; sourceTree = ""; }; - E480CACA0E81501CCBB98149C48584AD /* NstBoardAveD1012.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAveD1012.hpp; sourceTree = ""; }; - E4DF6912B7B427759D8C33E248753DBD /* NstHook.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstHook.hpp; sourceTree = ""; }; + E4DB7F5247E41A8DF960FAFF4F52DF47 /* ConflictRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordsOperation.swift; sourceTree = ""; }; E51C90A9B7B35AEE09669310AB15BED0 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - E525D21EBF75A723E18A33533D504F6B /* NstVideoScreen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoScreen.hpp; sourceTree = ""; }; - E57A55642D58F21D06BBD64DEA5CA1DC /* RSTCellContentChangeOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCellContentChangeOperation.m; path = Roxas/RSTCellContentChangeOperation.m; sourceTree = ""; }; - E5A838589A5289E842980290C10BFF17 /* RingBuffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RingBuffer.swift; sourceTree = ""; }; - E5AD860D37EB94791316D63AD7049D43 /* cstdint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cstdint.h; sourceTree = ""; }; - E5B960D0D3388F94E7D3FB7BA36C85C3 /* RSTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTError.h; path = Roxas/RSTError.h; sourceTree = ""; }; - E5E0E7F22F5068FCBB7C8E4EE92F086F /* rdp_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rdp_core.h; sourceTree = ""; }; + E53076134FC473CEAF27FC2CFCDC3C7F /* NstInpRob.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpRob.hpp; sourceTree = ""; }; + E535808FC30F7474AE914FD2270A2715 /* CRC_OPT.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CRC_OPT.cpp; sourceTree = ""; }; + E551214789CB8350262743FF9EF95629 /* NstBoardJaleco.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJaleco.hpp; sourceTree = ""; }; + E5598BF7199B8F30327DBDD42DA18CA4 /* GBCEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBCEmulatorBridge.mm; sourceTree = ""; }; + E56992DF458AE190EF8B6FDBB9A4DE70 /* String.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = String.inl; sourceTree = ""; }; + E5C78C628E0A4C0BA6411600CC689510 /* dd_controller.c */ = {isa = PBXFileReference; includeInIndex = 1; path = dd_controller.c; sourceTree = ""; }; E60E75825D0C5BBF73C1EE33565BACBF /* RTree.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RTree.swift; path = Sources/SQLite/Extensions/RTree.swift; sourceTree = ""; }; E61D432E6DBF6C5A037F5AD976FAD93C /* SwiftyDropbox-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyDropbox-prefix.pch"; sourceTree = ""; }; - E644A28566DC640498573CF1E665C045 /* DropboxService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxService.swift; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService.swift"; sourceTree = ""; }; - E64DA6F38CE5BF6A1B8B85644BF421A8 /* NstBoardIrem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIrem.hpp; sourceTree = ""; }; - E66CD7AF3945F7CDD842E817ACEA39E8 /* NstVideoFilter2xSaI.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilter2xSaI.hpp; sourceTree = ""; }; + E66B9B91DB7E04516C8FF716DE48D701 /* CombinerProgram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = CombinerProgram.h; sourceTree = ""; }; E6A19232BD176F1842FA9413EF58EAFB /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = ""; }; - E6ECAD64E54D551CAC63388B1E3FBB33 /* ThreadImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadImpl.cpp; sourceTree = ""; }; - E70A7D8AB9B5D506BDFCB3A14DE9ACD8 /* NstBoardNRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNRom.hpp; sourceTree = ""; }; - E721311C13AE68B2699A1D4C03214451 /* txWidestringWrapper.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = txWidestringWrapper.cpp; sourceTree = ""; }; + E6DC5BD2D6B77CA14C62D6FF5EA327DB /* UIDevice+Vibration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIDevice+Vibration.swift"; sourceTree = ""; }; + E6E22BF5B1C689D0C6A59216C3AF5E74 /* NstBoardBxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBxRom.hpp; sourceTree = ""; }; + E70D8FFEBC5CD9356B8F48E495CF4C54 /* NstBoardNamcot34xx.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot34xx.hpp; sourceTree = ""; }; + E726879448FBC69F09C3868AEAA3AE81 /* ColorBufferReader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferReader.h; sourceTree = ""; }; + E73487409C40B8A2E9B7483BFF193799 /* NstBoardTaitoTc0190fmc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoTc0190fmc.hpp; sourceTree = ""; }; E7774915A9F77830DE8F037188D1A4F7 /* SMCalloutView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SMCalloutView.xcconfig; sourceTree = ""; }; - E79FC4B64B0151C5D97016FE705608F2 /* NstImage.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstImage.hpp; sourceTree = ""; }; - E7BCCABE84D92A4A7AB4A427BB8558AE /* NSManagedObject+Conveniences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Conveniences.swift"; sourceTree = ""; }; - E7C1D17194F0A8C85CD8A755AC2B8670 /* opengl_BufferedDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_BufferedDrawer.cpp; sourceTree = ""; }; - E7CFE992FA2A4ABDEAADC452BA0C39D5 /* SNESDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SNESDeltaCore-dummy.m"; sourceTree = ""; }; - E82E5BAA08ADC037E1F7765FE77042C5 /* ftmac.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmac.h; sourceTree = ""; }; + E7A6E2D2600BE5C4EEA5BD6FF1BD0175 /* glsl_ShaderStorage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_ShaderStorage.cpp; sourceTree = ""; }; + E813BC0822BCCFFC9C89EBE5DAAD7F24 /* m64p_vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_vidext.h; sourceTree = ""; }; + E816325429AF71A41869B7E6AAAFDF90 /* N64DeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = N64DeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + E8274D72B068FDD5B8433E16806FBEB8 /* SDL_opengl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_opengl.h; sourceTree = ""; }; + E84054BA6CBE0DAB191CCF09288DEF80 /* Time.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Time.cpp; sourceTree = ""; }; + E8ADEC5003627F607F9CB7482F3C79DD /* NativeActivity.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NativeActivity.hpp; sourceTree = ""; }; + E8CBF48F4162BE550454D36F2B379AE4 /* NESDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NESDeltaCore.xcconfig; sourceTree = ""; }; + E8D1644FE6C9B9EA40479CBCFD2D7CC0 /* NstBoardJalecoJf11.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf11.hpp; sourceTree = ""; }; E8E60A18A1E9B1D77A5D5CAA1444A18D /* GoogleToolboxForMac-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleToolboxForMac-dummy.m"; sourceTree = ""; }; - E8F9CE0B18CCD8E71B4B5EDEB0D0C864 /* Log_ios.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = Log_ios.mm; sourceTree = ""; }; - E936FF10A7FD12B81B6130E8D750F73A /* GlResource.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GlResource.hpp; sourceTree = ""; }; - E94066EEBFDC68DAC8ABD344BE20C393 /* NstLog.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstLog.hpp; sourceTree = ""; }; - E988413B416CBB252A2093E604B1CBEA /* glsl_ShaderStorage.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_ShaderStorage.cpp; sourceTree = ""; }; - E9B2829EE8FD1B61E4880C2DDA961706 /* opengl_BufferedDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_BufferedDrawer.h; sourceTree = ""; }; - E9B7E1EDF3E36A1AE901C6599B744E37 /* ftmemory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmemory.h; sourceTree = ""; }; - EA340C7B4D3388A8450F9A24994AB881 /* TxDbg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxDbg.h; sourceTree = ""; }; + E90308ECF32EF009E33F9EEBA9B7C84A /* NSManagedObjectContext+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Harmony.swift"; sourceTree = ""; }; + E94F624FEBCECA3D447A42E223613A20 /* ftbitmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbitmap.h; sourceTree = ""; }; + E95A0C3C6E26DB4E26E12433BE937DB1 /* pshints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pshints.h; sourceTree = ""; }; + E963BB1D802954605DE54BEAEAA046C0 /* ftlcdfil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlcdfil.h; sourceTree = ""; }; + E98E9898FE20472841A8D1A0EF9806EF /* cart_rom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cart_rom.h; sourceTree = ""; }; + E9A5EDA091E457F4BF1FF9D5715E8EF2 /* RemoteFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteFile.swift; sourceTree = ""; }; + E9B5611EF6F1B6A753A3169A802B611A /* NstBoardBmc1200in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc1200in1.hpp; sourceTree = ""; }; + EA23C36C890553725FA9BBEBC0789829 /* Operation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Operation.swift; sourceTree = ""; }; EA7EC2EE415DCFBE44F9DBD4F92DB34E /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/ZIPFoundation/Archive.swift; sourceTree = ""; }; - EACB3541C7C31D9C894C73A0F43BCD38 /* RenderWindow.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderWindow.hpp; sourceTree = ""; }; - EAD0D53A51B076CD685814AD012D9855 /* NstIoLine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoLine.hpp; sourceTree = ""; }; - EB023C27C2E7EBAB1EBA4B6CE2CB82B8 /* NstBoardDxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDxRom.hpp; sourceTree = ""; }; - EB1C41ECAFCB4B62AC6DB322A26DDBCB /* display.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = display.h; sourceTree = ""; }; - EB1DC75CE747381BA8AA66BC31541BCF /* ImmediatePanGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ImmediatePanGestureRecognizer.swift; sourceTree = ""; }; - EB24131FB6C69C2CA2374DF4C6A91A71 /* NstBoardBtl2708.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtl2708.hpp; sourceTree = ""; }; - EB8457DAFF531CDDEB4D1854B8B8BDD0 /* Vertex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Vertex.hpp; sourceTree = ""; }; - EB9627220FFF83CC1F4AAE5DCC667ADD /* MemoryStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MemoryStatus.h; sourceTree = ""; }; - EBA62E018BD55A8B1DBF638C1BDE2C3B /* types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; - EBB1A01E856D7D91BD846C278311FFB7 /* NstInpPad.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPad.hpp; sourceTree = ""; }; - EBCC2D85473B037A5DD49F1E35B5D218 /* ftadvanc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftadvanc.h; sourceTree = ""; }; - EBF793539672A386F6C337B8667AE813 /* F5Indi_Naboo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F5Indi_Naboo.cpp; sourceTree = ""; }; - EBFB410CFC7528D974AC5C39C85ED086 /* SNESDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESDeltaCore.h; sourceTree = ""; }; - EC16A6C9E22D1924AE516F38A6DBFE58 /* instr_counters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instr_counters.h; sourceTree = ""; }; - EC23CE2DB6C5AA34154506F2401B1F8B /* Result+Drive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Drive.swift"; sourceTree = ""; }; - EC65A0F4796E627B80569AAB463DCD61 /* NstBoardBtlSmb2b.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2b.hpp; sourceTree = ""; }; - EC91456BE16B5A70B8034583667C1DB2 /* NstBoardUnlCc21.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlCc21.hpp; sourceTree = ""; }; - EC9DD621FC3DC24A24E27BD8B1C292AE /* ThumbstickInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ThumbstickInputView.swift; sourceTree = ""; }; - ECAA6C5363B0FC690064E077812D9EF0 /* Version+Revision.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Revision.swift"; sourceTree = ""; }; - ECD06B0653616CEE4A2EAB78B71D5A06 /* UIView+AnimatedHide.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+AnimatedHide.m"; path = "Roxas/UIView+AnimatedHide.m"; sourceTree = ""; }; - ECDCC3E94D5101F61796B3E89290013D /* Result+Success.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Success.swift"; sourceTree = ""; }; - ED04A2B8DBDC30DD89B8DB99DD186974 /* sdd1emu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdd1emu.h; sourceTree = ""; }; + EA8D045A4BAB5806465552F9EAD05287 /* ftdriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftdriver.h; sourceTree = ""; }; + EAA06CA70E6579DA7013F9BF0C6148C7 /* SoundDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundDriver.h; sourceTree = ""; }; + EAA42FF0995A2ECDE8654C66A329FEEA /* svwinfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svwinfnt.h; sourceTree = ""; }; + EAB9AA348D576D9AF8A76D798AF0A209 /* N64.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = N64.cpp; sourceTree = ""; }; + EAC8946446770DB79B1DE4821B8C753F /* spc7110.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110.h; sourceTree = ""; }; + EAEC7554802DE0A7D1588B6403024167 /* iniparser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = iniparser.h; sourceTree = ""; }; + EAED976AA4A2603D8DF8C50E40CEB1CE /* png.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = ""; }; + EAFE7943BDC2A2EA16E70C5B9E8335BE /* opengl_ContextImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ContextImpl.h; sourceTree = ""; }; + EB05D37130F5C1E54F68ECD8CDDC22EC /* svpostnm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpostnm.h; sourceTree = ""; }; + EB480F86E824BBF3F976C29F3F518408 /* NstVideoFilter2xSaI.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilter2xSaI.hpp; sourceTree = ""; }; + EB813FC7BFFACFEAB984E045534C0DCC /* NonCopyable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NonCopyable.hpp; sourceTree = ""; }; + EB870F4AD39D4A4E00866F16DBDCEE49 /* RemoteFile+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+Dropbox.swift"; sourceTree = ""; }; + EBBD46833EA1A4C5282B0F087FA83437 /* FIFO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFO.h; sourceTree = ""; }; + EBF0BB22A90E877C1E14A623DE51DD25 /* OGLRender_3_2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLRender_3_2.h; sourceTree = ""; }; + EC1B871004801A1E40D5F78C6B08A719 /* NstApi.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApi.hpp; sourceTree = ""; }; + EC30A57562ACA7D0725AAD7A0C184376 /* SNESDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SNESDeltaCore-dummy.m"; sourceTree = ""; }; + EC9403FE981B76C994D3645B33292EE8 /* readwrite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = readwrite.h; sourceTree = ""; }; + EC9634B3B11790E21D1DD4B3D06D4A1A /* F3DFLX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DFLX2.h; sourceTree = ""; }; + EC9A5439881B47C2E816AF6F014B4832 /* ringbuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = ""; }; + ECD0868BC2D1CFC2A22DDD56F79CF4B1 /* melonDS.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = melonDS.bundle; path = "MelonDSDeltaCore-melonDS.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; ED22F3BA7E83E1DC36113EFA2D24588C /* FileManager+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIP.swift"; path = "Sources/ZIPFoundation/FileManager+ZIP.swift"; sourceTree = ""; }; - ED768209E20E3298713767938BD05B35 /* NstApiCheats.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiCheats.hpp; sourceTree = ""; }; - ED84FF00BB1C75891DB73E5EC2DC19CC /* ringbuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ringbuffer.h; sourceTree = ""; }; - EDC16124014E8BE9A723398676F8E95D /* vidext_sdl2_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vidext_sdl2_compat.h; sourceTree = ""; }; - EDCD39BFA98723F034DF29BDED0067EC /* NstBoardSunsoft4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft4.hpp; sourceTree = ""; }; - EDF739733FCF6284240B795ECD2EFFB3 /* Graphics.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Graphics.hpp; sourceTree = ""; }; - EE3F927B7F58D93B1C98460B28559AE7 /* NstBoardNtdec.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNtdec.hpp; sourceTree = ""; }; - EE4444EAFD33EB8BAB4FCBCD65A8446A /* language.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = language.h; sourceTree = ""; }; - EE47B1882C5096303AD365307905B712 /* Ftp.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Ftp.hpp; sourceTree = ""; }; - EE4ED05DEFBED1E0F613E2EEE0E8500C /* retro_common_api.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_common_api.h; sourceTree = ""; }; - EE739F4111402555B8330C94DC934B22 /* NstInpCrazyClimber.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpCrazyClimber.hpp; sourceTree = ""; }; - EF589F6EBD2EE6D830CD99CA788543A7 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; - EF6779B78D5B9B6019F29579F2C1C894 /* FIFOSamplePipe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFOSamplePipe.h; sourceTree = ""; }; - EF96AD8DFCE6CD9FF8E28E8AED9E829B /* PngFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PngFile.h; sourceTree = ""; }; - F01F27F2E59C49CFECBCF50045F0021C /* TextureFilters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters.h; sourceTree = ""; }; - F0220951E1C5853626F63AA3472A9F71 /* GBAGfx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAGfx.h; sourceTree = ""; }; - F0EF51BD6A873328F443F48E06B74BF8 /* DownloadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordsOperation.swift; sourceTree = ""; }; + ED33C93DD7E38C3D447A4941CDA4F4C7 /* NSPredicate+Search.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSPredicate+Search.h"; path = "Roxas/NSPredicate+Search.h"; sourceTree = ""; }; + ED6B167EAADE8506F1864999731E6AD6 /* pngwtran.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwtran.c; sourceTree = ""; }; + ED722AEBC29811FBDB707822E79E137C /* alist.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist.c; sourceTree = ""; }; + ED915D94AD96A862B32BB7B60A454CF2 /* NstBoardKay.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKay.hpp; sourceTree = ""; }; + ED9FC408E7E37A99A42E690455015732 /* debug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; + EDCA85256EA26CE4DC88337487128581 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; }; + EE1AC475F3EBD28D40D55EE72FC5AB07 /* UICollectionViewCell+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+CellContent.h"; path = "Roxas/UICollectionViewCell+CellContent.h"; sourceTree = ""; }; + EE1BB2C196F721EAE216A16D2C28F108 /* NstBoardMmc1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc1.hpp; sourceTree = ""; }; + EE72931824332E351A9F7197A02E23BD /* gDP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gDP.h; sourceTree = ""; }; + EE94484CFDB733F9B6B76E0416EB735F /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + EEAE0F78E10C6AB8250B4FCF2FBB074F /* F3DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2.h; sourceTree = ""; }; + EEC4678594429BB9CEE4C8F14CE8FB18 /* NstBoardBmcFk23c.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcFk23c.hpp; sourceTree = ""; }; + EEF4C54780B7CB8C5DD1FE7BFC88A8D5 /* RSTSearchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTSearchController.h; path = Roxas/RSTSearchController.h; sourceTree = ""; }; + EEF6D1011DA5B2381B452C7A4A848E70 /* NstBoardBmcGoldenCard6in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGoldenCard6in1.hpp; sourceTree = ""; }; + EF0B5A83CEA7719FDAE73CD9B61BF813 /* ucodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ucodes.h; sourceTree = ""; }; + EF146F5F4C23AB7CC20D0F4F40286379 /* check.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = check.h; sourceTree = ""; }; + EF6DFC3B7AD060F43D4AFFBCD3F06AA6 /* AudioManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioManager.swift; sourceTree = ""; }; + EF7A8D3A9BE30CD2125BDFF488D22A25 /* NstBoardBmcSuperBig7in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperBig7in1.hpp; sourceTree = ""; }; + EFB09061F5EC38F78019E5DE2971B3BB /* NstInpFamilyKeyboard.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpFamilyKeyboard.hpp; sourceTree = ""; }; + EFDB6C6F57F2A3D44F48F431F3C13B71 /* NstBoardJalecoSs88006.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoSs88006.hpp; sourceTree = ""; }; + EFFE70745486E1FF21AEAF435A71FBB3 /* DSEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = DSEmulatorBridge.mm; sourceTree = ""; }; + F013766E35198FF97F65503319E09993 /* Event.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Event.hpp; sourceTree = ""; }; + F01B391F7634E62F67997507B08A12B8 /* WindowStyle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = WindowStyle.hpp; sourceTree = ""; }; + F021EBB9B583D41D119B66FBC95F7F2C /* NstBoardBmcSuperGun20in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperGun20in1.hpp; sourceTree = ""; }; + F0308817B700E8598B67B8DC04CB453E /* cp1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp1.h; sourceTree = ""; }; + F04169937EFDD63A68B6EE345F1D4B17 /* ARMInterpreter_LoadStore.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ARMInterpreter_LoadStore.cpp; sourceTree = ""; }; + F0427833F381047484915D313051018B /* NstBoardWaixingPs2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingPs2.hpp; sourceTree = ""; }; + F058115223339AF17A2DA555639642A1 /* GBASoundDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBASoundDriver.h; sourceTree = ""; }; + F074B8ED12CB119F2AD98DE96C9D1E1B /* video_capture_backend.c */ = {isa = PBXFileReference; includeInIndex = 1; path = video_capture_backend.c; sourceTree = ""; }; + F07E76FD0A048E88C13AD72461D1A8A5 /* F3DPD.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DPD.cpp; sourceTree = ""; }; + F08C08AAB29244E9A786468ABCA8B758 /* SPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPU.h; sourceTree = ""; }; + F0D3C6982EBE0EAC53FAA7E37AFA9496 /* F3DPD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DPD.h; sourceTree = ""; }; + F10C56C1DD0DBC1297C6FA4D55986B04 /* spc7110dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110dec.h; sourceTree = ""; }; F10F7750064142DE73F6F7454CC2983E /* GTMSessionFetcherLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherLogging.m; path = Source/GTMSessionFetcherLogging.m; sourceTree = ""; }; - F11F1CCE5B53125548AF2C84DC90CF96 /* NstBoardBmcPowerjoy84in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcPowerjoy84in1.hpp; sourceTree = ""; }; + F11EA13357D6F351A1A191DA33451B01 /* NstBoardBmc21in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc21in1.hpp; sourceTree = ""; }; F12EC1D77781095125E901DEFF622F36 /* FileProperties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileProperties.swift; path = Source/SwiftyDropbox/Shared/Generated/FileProperties.swift; sourceTree = ""; }; - F1313708F536AEEAB3F8FE444AACB097 /* NESDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NESDeltaCore-prefix.pch"; sourceTree = ""; }; - F1420029FD3C40F200795462E463C362 /* RSTOperationQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperationQueue.h; path = Roxas/RSTOperationQueue.h; sourceTree = ""; }; - F14770DFA2F0FBE712A351494EC459C7 /* GBI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBI.h; sourceTree = ""; }; - F14AE82C6F3F1E53A7B148B891178E59 /* ftstroke.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftstroke.h; sourceTree = ""; }; - F17010739364C5C3A5C00A7849EDF47C /* ring_buffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ring_buffer.h; sourceTree = ""; }; - F1B217B4E1DE3906B3076571296DFF09 /* snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = snapshot.h; sourceTree = ""; }; - F1ED211A27FC73A088DC43D3FF931A16 /* ThreadLocalPtr.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocalPtr.hpp; sourceTree = ""; }; - F203A19460529D13E8FCE2A540485658 /* rsp_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rsp_core.h; sourceTree = ""; }; + F15930486D7F45DD18CFBA9BD8800E92 /* sdl2_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdl2_compat.h; sourceTree = ""; }; + F1A146BC0741538EE96C0E759582B337 /* NstApu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApu.hpp; sourceTree = ""; }; + F1AD374BED968FBCE790AA433A78D057 /* svtteng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svtteng.h; sourceTree = ""; }; + F1BABB17270A0A3966333B7C327BF0CA /* ColorBufferToRDRAMStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferToRDRAMStub.h; sourceTree = ""; }; + F1CFEE2E88E05706A2CB9A382C9447D7 /* NstBoardUnlKingOfFighters96.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlKingOfFighters96.hpp; sourceTree = ""; }; F2087F209824BFEA65167BC5408CF95A /* GTMNSDictionary+URLArguments.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "GTMNSDictionary+URLArguments.h"; path = "Foundation/GTMNSDictionary+URLArguments.h"; sourceTree = ""; }; - F2257CE5C9B676C063600BAA94CA562D /* glsl_CombinerInputs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerInputs.h; sourceTree = ""; }; - F27A0FAE014100246C0E1DAC5E1E38DF /* NSManagedObjectContext+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Harmony.swift"; sourceTree = ""; }; - F2AB56328583FAAF95D7D3FFD81FEB33 /* NDSSystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NDSSystem.h; sourceTree = ""; }; + F20B25B2356078687C26B25825E487A2 /* firmware.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = firmware.h; sourceTree = ""; }; + F20F4C74BB8804B518393DCFC21CB9FB /* pngusr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngusr.h; sourceTree = ""; }; + F231C512D2B9D8E1FA081E1059B3D3E0 /* zconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = zconf.h; sourceTree = ""; }; + F27E0BB08CA9AA99087CB49B95D5A051 /* savestates.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = savestates.h; sourceTree = ""; }; F2AC6B33D1F207C23351293A0A281146 /* DBChunkInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DBChunkInputStream.m; path = Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.m; sourceTree = ""; }; - F2C2DADC78B40086474AB8DAA997C070 /* tttypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tttypes.h; sourceTree = ""; }; - F30187F95C53F4957E71ED8DDDC23CC3 /* Audio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Audio.hpp; sourceTree = ""; }; - F31355AD8ECDC7A336C4AC45A5CD2FDE /* libco.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libco.h; sourceTree = ""; }; - F33297D97FD3A5157D3125AA0D30D1CC /* svprop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svprop.h; sourceTree = ""; }; - F35BDFB9D3E727256E9CD866CDA4B105 /* NstBoardNamcot34xx.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot34xx.hpp; sourceTree = ""; }; + F3104A99F1E2E5DCD9FCE463C1BCD842 /* ControllerInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerInputView.swift; sourceTree = ""; }; + F336E2D3C53A29FF9A360C8ECDF43F2E /* RSTArrayDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTArrayDataSource.h; path = Roxas/RSTArrayDataSource.h; sourceTree = ""; }; + F361E120BFFD12C4731934DEC8344968 /* RSTCellContentPrefetchingDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentPrefetchingDataSource.h; path = Roxas/RSTCellContentPrefetchingDataSource.h; sourceTree = ""; }; + F3748CCE76F2C007B8EF3A629BF5C282 /* NstBoardDiscrete.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDiscrete.hpp; sourceTree = ""; }; + F376A1194EDAFFBDE131906336FB08BB /* NstBoardBmc20in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc20in1.hpp; sourceTree = ""; }; F381603DE2011262E9A2C37926028861 /* Pods-Delta.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Delta.release.xcconfig"; sourceTree = ""; }; - F3AAD7F4A60C4A7E5B5877476953BA04 /* RSTTintedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTTintedImageView.h; path = Roxas/RSTTintedImageView.h; sourceTree = ""; }; - F40644EDA82AEFA7C2C89C6CBC2D581C /* glsl_CombinerProgramImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramImpl.cpp; sourceTree = ""; }; + F3922596938CC3AC96994BC5EBAEC217 /* NstBoardSomeriTeamSl12.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSomeriTeamSl12.hpp; sourceTree = ""; }; + F3A334ACFE0D3AC3FE96307D138436AB /* xxhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; + F3F7DDDE511D2FFCEBAC65BD6D2225FF /* movie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = movie.h; sourceTree = ""; }; F40E721AC96D7B1BD5F1609F94C46FB1 /* FilePropertiesRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilePropertiesRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/FilePropertiesRoutes.swift; sourceTree = ""; }; - F43AF02D4A3D45AB4C91449083C04623 /* retro_dirent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_dirent.h; sourceTree = ""; }; - F458848778BD2CA388B2DC820968AECB /* GBC.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GBC.swift; sourceTree = ""; }; + F42E220EA589F02ED66B2844BC537B1B /* opengl_Attributes.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Attributes.cpp; sourceTree = ""; }; F48A69F12EAD2BE3BAAF57DC1FBC2F40 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = ""; }; + F48DAA56FC916AB087B5D26A104F31E0 /* si_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = si_controller.h; sourceTree = ""; }; + F491BE89CC65EDBFCEB3B214D06C7200 /* F3DTEXA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DTEXA.cpp; sourceTree = ""; }; + F493D9ECA469065557E25536C96A24F6 /* NESDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = NESDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + F4BFC00E618DE0EF34A6FA01F88AA209 /* freetype.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = freetype.h; sourceTree = ""; }; + F4C1093F4879EA7F32702CA47E35814B /* N64DeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64DeltaCore.h; sourceTree = ""; }; + F4C6BE6BA9CC949F3EDA941ED2CBEB38 /* NstBoardAcclaim.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAcclaim.hpp; sourceTree = ""; }; F4CE4627B8A26D8EBCF531C808BA677F /* DropboxClientsManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxClientsManager.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxClientsManager.swift; sourceTree = ""; }; - F4E0870820E6458DC946E91A74E0DB8E /* NstBoardWaixingFfv.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingFfv.hpp; sourceTree = ""; }; - F4FF030A171DC28CB5454BA2D75DDCDA /* F5Rogue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F5Rogue.h; sourceTree = ""; }; - F506F9CB88905A0006F9CBDBB8EBCA31 /* NstInpOekaKidsTablet.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpOekaKidsTablet.hpp; sourceTree = ""; }; + F4D26635313FF0E89E645E701C664260 /* SoundBufferRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundBufferRecorder.hpp; sourceTree = ""; }; + F4E1FCF713C18921783474BD5B489966 /* vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vidext.h; sourceTree = ""; }; + F512DCC7821D8E2620E88EDC969A6116 /* DeleteRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordOperation.swift; sourceTree = ""; }; + F517002D199922653B78176FE67DCA6E /* NstBoardNihon.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNihon.hpp; sourceTree = ""; }; + F52217DDA56116C4579A60B66E239C62 /* alist_naudio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_naudio.c; sourceTree = ""; }; + F52405E64C06D130B0AAD913D760D8C8 /* glext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glext.h; sourceTree = ""; }; + F52A10407276576D7E69215069A05CD5 /* gDP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = gDP.cpp; sourceTree = ""; }; F53A98CDF1BC90A1B45D603F7DC3BC7F /* UsersCommon.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UsersCommon.swift; path = Source/SwiftyDropbox/Shared/Generated/UsersCommon.swift; sourceTree = ""; }; - F571DFD58990674E824384F544CF9CD1 /* SNESTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESTypes.h; sourceTree = ""; }; - F57889A91C00957E173557D366708F01 /* AAFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AAFilter.h; sourceTree = ""; }; - F586E6135CA6E3F0C67A2EAE0344D88F /* ThreadLocal.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocal.hpp; sourceTree = ""; }; - F590A4FDC0A63C530D1734FD50B7078E /* skipsched.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = skipsched.h; sourceTree = ""; }; - F5CBD60FC0FF5C423C847C962880F76C /* agbprint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = agbprint.h; sourceTree = ""; }; + F59EB83ED791F8F1742B8C9049F05E99 /* NstBoardZz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardZz.hpp; sourceTree = ""; }; + F5AFC909F4746C3FA127FCDAAC1D471C /* fttrigon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fttrigon.h; sourceTree = ""; }; F5FA45A44C42CC2CA3A324A3E914CE19 /* libSQLite.swift.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSQLite.swift.a; path = libSQLite.swift.a; sourceTree = BUILT_PRODUCTS_DIR; }; - F62AC62ED831B8389E68C8BC69676157 /* NSError+LocalizedFailureDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSError+LocalizedFailureDescription.swift"; sourceTree = ""; }; - F67940E7C50D7A614B939AD60E078097 /* NstNsf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstNsf.hpp; sourceTree = ""; }; - F6A4D024EFBD821E10B8C4249832F774 /* NstBoardTaitoTc0190fmc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoTc0190fmc.hpp; sourceTree = ""; }; - F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SNESDeltaCore.xcconfig; sourceTree = ""; }; + F6225E475A9B0FB7A6AD9A1B3E32D764 /* UIKit+ActivityIndicating.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIKit+ActivityIndicating.h"; path = "Roxas/UIKit+ActivityIndicating.h"; sourceTree = ""; }; + F650B1818D017BD4A14C1415647FCDEB /* fb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fb.h; sourceTree = ""; }; + F67250F16C56E5B1A4484C31368E4BB1 /* GBADeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GBADeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + F686DB132322EBC65182C37F284A25F3 /* Font.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Font.hpp; sourceTree = ""; }; + F68723D87D569E987F572CCD08093F61 /* SyncProgress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncProgress.swift; sourceTree = ""; }; + F687CDE1CC73F1023FA06367B7621C39 /* SoftwareRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoftwareRender.h; sourceTree = ""; }; + F69FBA7A038D20EABCA39B35AB3B040D /* dsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dsp.h; sourceTree = ""; }; F6C874D560C2ECE9A78595318F449292 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; F6D110BCE90D1CF941FD0145CBB7DD6C /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/SDImageCache.m; sourceTree = ""; }; - F7095B17BD490C5C3C946BF5CE387A22 /* audio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = audio.c; sourceTree = ""; }; - F712A25B70E2BECE91A60F3F2CDBC6D6 /* NstBoardBmcHero.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcHero.hpp; sourceTree = ""; }; - F714A4D1AA8175D9A02FDB1EB0AC9E0B /* Export.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Export.hpp; sourceTree = ""; }; - F76D8AFD80E7A4DAACF521163CC4B26C /* driver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = driver.h; sourceTree = ""; }; - F76E3967E1E2834EA49B2FFB6117AEEB /* RSTTintedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTTintedImageView.m; path = Roxas/RSTTintedImageView.m; sourceTree = ""; }; - F76EE1EB3D0BD20599E9210AA395F4F5 /* NstBoardUnlN625092.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlN625092.hpp; sourceTree = ""; }; - F774B85B1C91BBD1B28A7FDAEE5812F6 /* NstBoardSunsoft.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft.hpp; sourceTree = ""; }; - F779EEE5715D3C32E844758058351CE8 /* GameControllerInputMapping.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerInputMapping.swift; sourceTree = ""; }; - F77EA33E6AF316AA6F7640C7E3F3D1D4 /* gambatte.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gambatte.h; sourceTree = ""; }; + F6EC76AAFEB4EFCCAA67C1913C4F3FB1 /* screenshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = screenshot.h; sourceTree = ""; }; + F70E93212D39D1D9645D5BBE0CFB4A26 /* filters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = ""; }; + F74135D2566C066E0B9F4F851E06A12A /* UIViewController+TransitionState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+TransitionState.m"; path = "Roxas/UIViewController+TransitionState.m"; sourceTree = ""; }; + F764C420914578158ED027BC44B8591B /* callbacks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; + F7BDD61DD53EB66909667FDEF0E033B1 /* Cheat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Cheat.swift; sourceTree = ""; }; + F7C2DFC00C454B4A6E486685A3B85653 /* GBADeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBADeltaCore-umbrella.h"; sourceTree = ""; }; F7C47011115A00E9556AC311099987E7 /* GTMMethodCheck.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMMethodCheck.h; path = DebugUtils/GTMMethodCheck.h; sourceTree = ""; }; - F7DA08D829FA42A2C69604D3B70D3967 /* ttunpat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ttunpat.h; sourceTree = ""; }; - F7E8CC2CC4A372DB06C3A4DDF7BD00C2 /* RSTHasher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTHasher.m; path = Roxas/RSTHasher.m; sourceTree = ""; }; - F81D2A992DCD611FF9C080137C990E31 /* NstBoardBmc15in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc15in1.hpp; sourceTree = ""; }; - F832E6227B7F9677B7AF38BFB58A5A09 /* TextureFilters_lq2x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_lq2x.h; sourceTree = ""; }; - F84345A499EAE58FE864424329CC0465 /* N64DeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-umbrella.h"; sourceTree = ""; }; - F88461BA4787937B3DB690FE3C4F6561 /* controller_input_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = controller_input_backend.h; sourceTree = ""; }; + F7FA66BA44508C8E1B3BC97E5590E2EC /* opengl_GLInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_GLInfo.cpp; sourceTree = ""; }; + F80CF610BCA1225E6F34A2505B12C005 /* ZSort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZSort.h; sourceTree = ""; }; + F8211C9AAFD5EAFF6AE32CAF702CC376 /* arm_jit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = arm_jit.h; sourceTree = ""; }; + F84B5FC88D5A5A682A7E079337CD3D1C /* RSTOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTOperation.m; path = Roxas/RSTOperation.m; sourceTree = ""; }; + F857371D3F5B8E4318217720FD868368 /* TcpListener.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TcpListener.hpp; sourceTree = ""; }; + F85A845F1619F7A0F0BB1F552B74AA0E /* interpret.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interpret.h; sourceTree = ""; }; + F872C43256DB5C1C7D80F3F0E8E9CE0A /* NstBoardBmcFamily4646B.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcFamily4646B.hpp; sourceTree = ""; }; + F87EFA6D54FDC38E1D796063498DB67B /* ftcalc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcalc.h; sourceTree = ""; }; + F88144124FBA971D0634C19257E4725C /* exprNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = exprNode.h; sourceTree = ""; }; F88BB2DC2D2059BC24702E5033B1FA18 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - F8D137604EE39A80F050CC3248514E8F /* opengl_CachedFunctions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_CachedFunctions.h; sourceTree = ""; }; - F92CC3DB4FB3E1C8CB02FF550968E5DD /* fxinst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxinst.h; sourceTree = ""; }; + F8D9AB238C0D8C37F7486D77CC4E9BF4 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; + F8E2DF4FE7FA12D11F9519C050CBAE82 /* ttnameid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ttnameid.h; sourceTree = ""; }; + F8E695BDE117DE11C2A9816B243CE8D2 /* recomp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = recomp.h; sourceTree = ""; }; + F8EB681067B1016B70AE4047A7C916B9 /* ftconfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftconfig.h; sourceTree = ""; }; + F931544B104EDCB547B089F7B0707ED8 /* NstBoardBmc35in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc35in1.hpp; sourceTree = ""; }; F93477FBF1E4488E506F9BB79AF57D38 /* libDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libDeltaCore.a; path = libDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; - F94939473F3DAB308B9B66A4722AEA61 /* ftmm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmm.h; sourceTree = ""; }; - F96385E0EAB3EFE69A0C198645BE3F02 /* CircleShape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CircleShape.hpp; sourceTree = ""; }; + F93CCC48091B82BDE2E10023D5C4990A /* mic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mic.h; sourceTree = ""; }; F97E0802AC94B24B1FB03E55CD9A2FAC /* GTLRRuntimeCommon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRRuntimeCommon.h; path = Source/Objects/GTLRRuntimeCommon.h; sourceTree = ""; }; - F97F1DFA4F57F5E203007254CF9BE0A9 /* svotval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svotval.h; sourceTree = ""; }; - F9A3509FC2D34122712EB62CE66B6845 /* JSONDecoder+ManagedObjectContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoder+ManagedObjectContext.swift"; sourceTree = ""; }; - F9CBFEF3D09E24FAC21E3A14CCC923AF /* NstBoardBmcGolden190in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGolden190in1.hpp; sourceTree = ""; }; + F9A208B7D6A17B5E6210F640474730F8 /* NstBoardHes.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHes.hpp; sourceTree = ""; }; + F9AC4EDED962C7496D2538B9A6128954 /* TxDbg_ios.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = TxDbg_ios.mm; sourceTree = ""; }; + F9C6144633B0DE1C8B971A2728903B95 /* NstApiRewinder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiRewinder.hpp; sourceTree = ""; }; F9D42A4393C5EA5D2C2E7F5B2D175FE0 /* GTLRBatchResult.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRBatchResult.m; path = Source/Objects/GTLRBatchResult.m; sourceTree = ""; }; F9F5190AC3B7EA2777CF3CE3A3E7986B /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - FA12B422FB3250E2E3FF60847D9714BB /* eventloop.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = eventloop.h; sourceTree = ""; }; - FA1B820118906800A592F7AEC27C0DFF /* NstBoardBmc21in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc21in1.hpp; sourceTree = ""; }; - FA255603CDB62A95F35F477E2F0D208F /* plugin_delta.c */ = {isa = PBXFileReference; includeInIndex = 1; path = plugin_delta.c; sourceTree = ""; }; + FA3CDDB5072744264D4A7519AE6D6A63 /* DeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DeltaCore.h; path = DeltaCore/DeltaCore.h; sourceTree = ""; }; FA400832D3E46B39D5EC83D09A7572FC /* libSNESDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSNESDeltaCore.a; path = libSNESDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; - FA6F6DCD09DADEC4F87458FB70013D1B /* NstBoardSachenSa0037.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachenSa0037.hpp; sourceTree = ""; }; - FA7FE2BBE843B46F88B62F9D98574BCC /* libretro_vulkan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libretro_vulkan.h; sourceTree = ""; }; - FAABB4AF34B608AA851191DA7195AC03 /* NstBoardUnlEdu2000.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlEdu2000.hpp; sourceTree = ""; }; + FA40AAF8BCF7B04694A0037FB3760458 /* dd_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dd_controller.h; sourceTree = ""; }; + FA571B46E66CC61957A2EC9659B40B5F /* ftcffdrv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcffdrv.h; sourceTree = ""; }; + FA71E73B1A809C3FFD98BD1BDA46314D /* hermite_resampler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hermite_resampler.h; sourceTree = ""; }; + FA748DD06BB0F87B2D3FCBBCB21BB582 /* arithmetics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = arithmetics.h; sourceTree = ""; }; FAC73A05080E7163BE6F8E9426032C82 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = ""; }; - FAE71BC8FD40F93BEB90C2ED42088A99 /* Shape.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Shape.hpp; sourceTree = ""; }; - FB0C2D29320490068714E3A307C890F3 /* GBASoundDriver.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBASoundDriver.mm; sourceTree = ""; }; + FACC5CB26B7294708491B46F0397D3DD /* rumblepak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rumblepak.h; sourceTree = ""; }; + FAD07D9524FA2A12D63FCF045E3C71B6 /* Sensor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sensor.hpp; sourceTree = ""; }; + FAE08C498FFB93AC32DDE6D957B5E24F /* flashram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = flashram.h; sourceTree = ""; }; + FAF16778F14BDA46D135E62DF52FD5B3 /* Graphics.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Graphics.hpp; sourceTree = ""; }; FB1549464F3E4C6E80951115BA80C87C /* SwiftyDropbox-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyDropbox-dummy.m"; sourceTree = ""; }; FB1AC80F9908EC458F2880C5D2B25C33 /* SQLiteObjc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SQLiteObjc.h; path = Sources/SQLiteObjc/include/SQLiteObjc.h; sourceTree = ""; }; - FB49300C86877DD38ED8922A53CA96E1 /* pngconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngconf.h; sourceTree = ""; }; - FB4B3A1CE88E9FF6475854D98A52A5DD /* DeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DeltaCore.h; path = DeltaCore/DeltaCore.h; sourceTree = ""; }; - FB78D889B9AEF0455BFA9A0731B00CE4 /* wst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wst.h; sourceTree = ""; }; - FB9C709F559518962C652F5BBA13E865 /* DropboxService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Versions.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Versions.swift"; sourceTree = ""; }; - FBB4322FF7B456423D12A82C9A36F624 /* UICollectionViewCell+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+CellContent.h"; path = "Roxas/UICollectionViewCell+CellContent.h"; sourceTree = ""; }; - FBEB0C887336CD9006A57A0852F915DA /* Operation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Operation.swift; sourceTree = ""; }; + FB1D4DE902DAAC0A8831F7A63906AE6B /* NstBoardGxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardGxRom.hpp; sourceTree = ""; }; + FB3BB654A06CE0DED1C9C6F934367DDF /* rom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rom.h; sourceTree = ""; }; + FB50DB0D94A17BD483732F8CF157CACE /* dummy_input.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_input.h; sourceTree = ""; }; + FB5B6F86BFE8AFABADAFCCC745D013FE /* Err.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Err.cpp; sourceTree = ""; }; + FB5E73C8C7F0D5AB282E9A29954B036F /* NSString+Localization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Localization.m"; path = "Roxas/NSString+Localization.m"; sourceTree = ""; }; + FB6F1EA645B2A93AB915AD7BC3EAD8E1 /* ARMInterpreter_Branch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ARMInterpreter_Branch.cpp; sourceTree = ""; }; + FB822E90029BFEA20B117487DC27A04D /* RSTBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTBlockOperation.h; path = Roxas/RSTBlockOperation.h; sourceTree = ""; }; + FB9EE7B4A2F519FCFB65900960419A5F /* F3DGOLDEN.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DGOLDEN.h; sourceTree = ""; }; + FBAE8914742053CB6ADCEC14737596F0 /* ShaderProgram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ShaderProgram.h; sourceTree = ""; }; + FBB09720E5E561800A0A26EC646F3678 /* tttags.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tttags.h; sourceTree = ""; }; + FBE1F9090B5DA68190D7B03CCE5E4629 /* hle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle.h; sourceTree = ""; }; + FBE57A68E189FBFDCA39ADF0FAB28195 /* Roxas.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Roxas.h; path = Roxas/Roxas.h; sourceTree = ""; }; FC141D48A65D77B26B9922807BD281CC /* GTMDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = ""; }; - FC1899B3A2064A321C87961972F926A9 /* Ext_TxFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Ext_TxFilter.h; sourceTree = ""; }; - FC1CF3E36F8504F4DCC758CF61B97CAE /* InputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = InputStream.hpp; sourceTree = ""; }; - FC1E9CD449F2D3C5D045DFEBF6BBE3C2 /* NstBoardExRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardExRom.hpp; sourceTree = ""; }; - FC781DAF311B76B2BBAA2DDD268A94CD /* MMU_timing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MMU_timing.h; sourceTree = ""; }; - FC91AA5FEFEE911BEE1FE8CBF90DC619 /* NstVideoFilterHqX.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterHqX.hpp; sourceTree = ""; }; - FCC13C918B0DF97D6202A60A3DC17CF5 /* FileInputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FileInputStream.hpp; sourceTree = ""; }; - FCED81571811A98DF752E236C102EB15 /* RSTHasher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTHasher.h; path = Roxas/RSTHasher.h; sourceTree = ""; }; + FC26AD726BEA827DE29E8369FB6303C6 /* msu1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = msu1.h; sourceTree = ""; }; + FC30BD70C930E58720D8025E77346710 /* assemble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble.h; sourceTree = ""; }; + FC3273B92BA8458C348A8240AB0C67AE /* glsl_CombinerInputs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerInputs.h; sourceTree = ""; }; + FC77FD154105FF5182FC0B3EB06431FE /* NstDipSwitches.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstDipSwitches.hpp; sourceTree = ""; }; + FC8BE3C9EFF69072F0F385CD784639A2 /* F5Rogue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F5Rogue.h; sourceTree = ""; }; + FCA829A51AC7996EB15AC022B591C7AE /* TxHiResCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxHiResCache.cpp; sourceTree = ""; }; + FCADC95CE36A81554A4E95CD8996C26C /* RSTCellContentChangeOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCellContentChangeOperation.m; path = Roxas/RSTCellContentChangeOperation.m; sourceTree = ""; }; + FCE15B7CBF75268739FB87C1E0C6AC09 /* mi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mi_controller.h; sourceTree = ""; }; + FD26BD355F8C9C43A997914155B54C75 /* glsl_CombinerInputs.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerInputs.cpp; sourceTree = ""; }; FD519882861480B93B563B477CE1FA29 /* libGoogleAPIClientForREST.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGoogleAPIClientForREST.a; path = libGoogleAPIClientForREST.a; sourceTree = BUILT_PRODUCTS_DIR; }; - FD58112E62968E573B43DA1A9C5C1212 /* GBATypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBATypes.m; sourceTree = ""; }; - FD9C5507CE8EEB9255EC26821F186A30 /* Account.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; - FDCE262FF472DECC637657F3849A293C /* Err.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Err.hpp; sourceTree = ""; }; - FDD8C2628C20169F27F847F6618B2626 /* NstBoardBmcSuper24in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper24in1.hpp; sourceTree = ""; }; - FDDAF9CF6EC0B13BC80E76560EA70449 /* N64DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-prefix.pch"; sourceTree = ""; }; + FD63E3F134804425401C1B74686EDF48 /* NstBoardNanjing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNanjing.hpp; sourceTree = ""; }; + FDA72CEB6E2DC0981A908E0F6C1BF56D /* RSP_LoadMatrix.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RSP_LoadMatrix.cpp; sourceTree = ""; }; + FDBCAC7AE4C298FE4646BD7005AEE4F8 /* CommonAPIImpl_common.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CommonAPIImpl_common.cpp; sourceTree = ""; }; + FDBE09509A57E9C26585D21FA1FB381C /* NstBoardNamcot163.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot163.hpp; sourceTree = ""; }; + FDC971E53465BFFF543E22C621BB9660 /* F3DDKR.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DDKR.cpp; sourceTree = ""; }; FDEA401B77A227622E55445028991383 /* StoneSerializers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StoneSerializers.swift; path = Source/SwiftyDropbox/Shared/Generated/StoneSerializers.swift; sourceTree = ""; }; - FDF77E5F8A0CCA93C17ABAB60C658334 /* RSTCellContentChangeOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentChangeOperation.h; path = Roxas/RSTCellContentChangeOperation.h; sourceTree = ""; }; - FE0B56AC8DF03F3940CB2C0117DF20DA /* NstBoardUxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUxRom.hpp; sourceTree = ""; }; - FE0C4019F40D94124274D599DD260980 /* N64EmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64EmulatorBridge.h; sourceTree = ""; }; - FE17B4BADFE9DF6A6CCAF0CF0BE25D9F /* ControllerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerView.swift; sourceTree = ""; }; - FE1983B3232B47585D4F61AB506D3B3A /* NstBoardJxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJxRom.hpp; sourceTree = ""; }; - FE29186D1D3230A6DE7D814702F201F5 /* NESDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NESDeltaCore.modulemap; sourceTree = ""; }; - FE45DB19ABFD58A4D2DCCB58292ABED4 /* NstBoardTxcMxmdhtwo.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcMxmdhtwo.hpp; sourceTree = ""; }; - FE62BC22E0353D209B86497B9841EB46 /* System.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = ""; }; - FEA0ACC910F13E9D6B8C51CFE1B8EDA4 /* DeltaTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DeltaTypes.m; path = DeltaCore/DeltaTypes.m; sourceTree = ""; }; - FEF7570E80D78FE6F43CCD5722434683 /* WindowStyle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = WindowStyle.hpp; sourceTree = ""; }; - FF46137EDAAC9DD905A8E9D0602099DB /* dsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dsp.h; sourceTree = ""; }; - FF74B4BEF4D07BBAE9D9AEC6720AA7C7 /* assemble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble.h; sourceTree = ""; }; - FFEC014D2C956093FFE28CD534E23741 /* RSTPersistentContainer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTPersistentContainer.h; path = Roxas/RSTPersistentContainer.h; sourceTree = ""; }; + FDF22CB647ADB3D529D1C542345BB178 /* ftheader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftheader.h; sourceTree = ""; }; + FDF80C228030940A34A433995ABD6250 /* retro_assert.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_assert.h; sourceTree = ""; }; + FE17ACA9391DAFCA51DA8FE4929D2B86 /* osal_dynamiclib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osal_dynamiclib.h; sourceTree = ""; }; + FE3A4F7E48FD2C3751CCD26689C1353D /* TxReSample.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxReSample.cpp; sourceTree = ""; }; + FE48EE5ECA5693381EB62AA0D741E0E8 /* wglext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wglext.h; sourceTree = ""; }; + FE67AEDDB46071185B8EF236FD149EA7 /* memalign.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memalign.h; sourceTree = ""; }; + FE6F693BD8934FF6A88E20FF29157CFF /* SNESTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = SNESTypes.m; sourceTree = ""; }; + FEAD68FCF789AFC94A1EB313FDE68B6F /* SNESDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SNESDeltaCore-prefix.pch"; sourceTree = ""; }; + FEAE71533C82C752E7F1D21A99698CD1 /* TxUtil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxUtil.h; sourceTree = ""; }; + FECEA5EC0D42D4421643583D74C8F676 /* retro_miscellaneous.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_miscellaneous.h; sourceTree = ""; }; + FEDAB7B8B80BCC8BB405F1C556A4E36E /* Config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Config.cpp; sourceTree = ""; }; + FEE4DFCA2E800BD0E79D7425672042CC /* interrupter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interrupter.h; sourceTree = ""; }; + FEF8E98B3647EDE8533C51A14A31D99F /* VI.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = VI.cpp; sourceTree = ""; }; + FF0C7BE73DA19DD12046FF44E95DC7E7 /* NstBoardBmcMarioParty7in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcMarioParty7in1.hpp; sourceTree = ""; }; + FF4871EEC174D41700409C80284E7FD5 /* VideoMode.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = VideoMode.hpp; sourceTree = ""; }; + FF62ADB0969A5BAF88DAF079C924AD01 /* svpsinfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpsinfo.h; sourceTree = ""; }; + FF7D9B45C83FAE5CBAA7610FA983D9EF /* render3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = render3D.h; sourceTree = ""; }; + FF7E6516A5BEBD6103C2071A1BA86E73 /* pngconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngconf.h; sourceTree = ""; }; + FF90EA24CCB5A6F5E8833E1F961EF519 /* DSDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DSDeltaCore-prefix.pch"; sourceTree = ""; }; + FFB86879ED24825EDEC6F479F7EAA0DA /* inputSDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = inputSDL.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -3838,6 +3998,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 18A021CDA30ED3449A80C3DC020221A1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 1DCD7F8F7581F31788ECAD25138905A4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -3887,13 +4054,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 48D215C02B17AE962C42A70069BFED0A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 55CD572E462904EA6C9905761349C14C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -3915,6 +4075,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 6B8CBC6C90ECA9B3D6C787B5950C6E2A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7493E42190EBEAA740FD633B30B8DE50 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -3999,41 +4166,79 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F0620DD145118A9F244DF58C7E79C346 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 025C8C08D530FF619B68E7567ECAB514 /* x64 */ = { + 028977E75ED73C330A7CC24AEBCD6BF9 /* Mupen64Plus */ = { isa = PBXGroup; children = ( - C7361C449C785F93C554BF35D3475E03 /* assem_x64.h */, + 0BE974F8173202F6266136C7243D70EF /* mupen64plus-core */, ); - name = x64; - path = x64; + name = Mupen64Plus; + path = Mupen64Plus; sourceTree = ""; }; - 03156EC920E6D8F5346B5F3F354FAFAB /* api */ = { + 0346F465D0A39A57D28E54E194A025BB /* libgambatte */ = { isa = PBXGroup; children = ( - 9CA88B3A2BBE2EA0112C360B061B10B9 /* audio_out_backend.h */, - 5BACFFAA0E0BD975E90FF29D6B33B0B3 /* clock_backend.h */, - F88461BA4787937B3DB690FE3C4F6561 /* controller_input_backend.h */, - 19CC725F77A1590AFC450371B084F35C /* joybus.h */, - 9CAA385DC1EC815011FECBC1CD5ADF32 /* rumble_backend.h */, - 3993143AF65CD570A58EFF32C95A56FD /* storage_backend.h */, - CF70FBCB7AE2CE5D532C4D3DDF618D72 /* video_capture_backend.c */, - 2ED8DCB8CB080AFAA17D199C268096E6 /* video_capture_backend.h */, + F557A2C8F49E28F3458FAC7554BDD29F /* include */, + E6C64748BC5815EB74091BE83763E640 /* src */, ); - name = api; - path = api; + name = libgambatte; + path = libgambatte; sourceTree = ""; }; - 0396E6F488E454AEA132CC2941CD243F /* libtests */ = { + 03FD5788ECA6B9A68F2212115FCFC591 /* Products */ = { isa = PBXGroup; children = ( - 2B8B19BAF3A73578C62F6DA00164A175 /* pngstest-errors.h */, + 54ECA01A22C32DC89AB39DF9BFFD5FB6 /* DeltaCore.bundle */, + 4A6CEB53419EF6042E06B56676D1DAF8 /* DSDeltaCore.bundle */, + 30131336E11D11700AC99D314BDC275C /* GBADeltaCore.bundle */, + 1F23DBC67505E77BE77552D6D84A3DAA /* GBCDeltaCore.bundle */, + 5D797E9A5C5782CE845840781FA1CC81 /* libAlamofire.a */, + F93477FBF1E4488E506F9BB79AF57D38 /* libDeltaCore.a */, + 8DF503EB5BF2CD824792BFD2BBC0992F /* libDSDeltaCore.a */, + 85A4BD81985AEDB6D9BA5E50804225D0 /* libGBADeltaCore.a */, + D4C010E8572FAE8B51DFDBF2300ECF30 /* libGBCDeltaCore.a */, + FD519882861480B93B563B477CE1FA29 /* libGoogleAPIClientForREST.a */, + 251C6319AD50CB50F18D50CBF727F8B2 /* libGoogleToolboxForMac.a */, + C1998E0D8085221AD87F89B614C10E52 /* libGTMSessionFetcher.a */, + DBC0113CF73BE24525E670D024A85BE7 /* libHarmony.a */, + 4C22C82316853ABB688358B93486CF8E /* libMelonDSDeltaCore.a */, + C8D6AC695498645EEE4A66FCEF97D848 /* libN64DeltaCore.a */, + 1E5356E04E92615CFF0666E5987CE594 /* libNESDeltaCore.a */, + 9CA80A61ABF26FA89F4E22A30284B0DD /* libPods-Delta.a */, + 4405793D5AF1EFD9D2BDA30AA0D2E514 /* libRoxas.a */, + B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */, + 53A730F4F4248E7E3F38F8409A2DE97C /* libSMCalloutView.a */, + FA400832D3E46B39D5EC83D09A7572FC /* libSNESDeltaCore.a */, + F5FA45A44C42CC2CA3A324A3E914CE19 /* libSQLite.swift.a */, + 1CBA76EDD27FA2D20B1EA0F0BF7F082C /* libSwiftyDropbox.a */, + 48A4A6EDC08C8AC933D0DCD507E9D173 /* libZIPFoundation.a */, + ECD0868BC2D1CFC2A22DDD56F79CF4B1 /* melonDS.bundle */, + 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */, + 487C7DB0A7257F16983BEF8324BEF561 /* NESDeltaCore.bundle */, + 7D751206A951D9727B38F71A2BB990AA /* SNESDeltaCore.bundle */, ); - name = libtests; - path = libtests; + name = Products; + sourceTree = ""; + }; + 04385EC426A3C43A5929D27B1678A4D1 /* Mupen64Plus */ = { + isa = PBXGroup; + children = ( + 1BE81ECBF6361B3E4208FAF47EF2AA9B /* GLideN64 */, + 81D33E35E18D99B775471DC4DCFC6572 /* libpng */, + FAA2C4FCD01669618E30C8D2C5B68BEF /* mupen64plus-core */, + ); + name = Mupen64Plus; + path = Mupen64Plus; sourceTree = ""; }; 0440A98D7604CC8535F9CEA5EDA8CF08 /* Support Files */ = { @@ -4049,13 +4254,13 @@ path = "../Target Support Files/GTMSessionFetcher"; sourceTree = ""; }; - 047498B4224A2C3DF5E40D05044F721F /* mupen64plus-rsp-hle */ = { + 0451DA13B96F8C373342139605C4C0C2 /* x86 */ = { isa = PBXGroup; children = ( - DF3B22F60265FDA8A0BDFE0524F0C13D /* src */, + D2188A915972865B5AF5C68B8B6D05B3 /* assem_x86.h */, ); - name = "mupen64plus-rsp-hle"; - path = "mupen64plus-rsp-hle"; + name = x86; + path = x86; sourceTree = ""; }; 050D00D7D27F91B40E00BE7757B5529C /* NSDictionary+URLArguments */ = { @@ -4067,23 +4272,33 @@ name = "NSDictionary+URLArguments"; sourceTree = ""; }; - 05E5AFDEEBC0414DCD46B75C1E7B13F1 /* Rendering */ = { + 0559896741A18CCAC53724CBD5BC9DC7 /* xxhash */ = { isa = PBXGroup; children = ( - 5E81E563B519CB275A216BD3E5414DAA /* AudioRendering.swift */, - B3D974A96D201E7E1B93CC578D3AC323 /* VideoRendering.swift */, + 6AA43E914AB86898557D6FEDC791C933 /* xxhash.c */, ); - name = Rendering; - path = Rendering; + name = xxhash; + path = xxhash; sourceTree = ""; }; - 085C87B06F454385CDE8CA11CD18D9EF /* Controller Skin */ = { + 07C5E7E52DA074AB4D079EE3E3328C33 /* visupng */ = { isa = PBXGroup; children = ( - EF589F6EBD2EE6D830CD99CA788543A7 /* Standard.deltaskin */, + BE9ACCFEEB68EE550B45A78C99E79C3E /* cexcept.h */, + 9F58A45C3A6F2E0C9EE2FB2DCD85BDF1 /* PngFile.h */, + C7042544A83B2C65E8D67FFD6DBACCD4 /* resource.h */, ); - name = "Controller Skin"; - path = "GBCDeltaCore/Controller Skin"; + name = visupng; + path = visupng; + sourceTree = ""; + }; + 07F691241FBD71981877F3B34D76DB6E /* MelonDSDeltaCore */ = { + isa = PBXGroup; + children = ( + 47980AAB520B7D2038E8EBB2BBB843E1 /* Controller Skin */, + ); + name = MelonDSDeltaCore; + path = MelonDSDeltaCore; sourceTree = ""; }; 08C58CF73AB8BFBF56E0EB8B4D727EE1 /* Pods-Delta */ = { @@ -4102,50 +4317,13 @@ path = "Target Support Files/Pods-Delta"; sourceTree = ""; }; - 09AD5B7BEEC9BEC81F8C4EC1A23A9BBB /* Support Files */ = { + 0A1D7008E52048FFD35468EEC839BB57 /* Controller Skin */ = { isa = PBXGroup; children = ( - 5F5D1223821815A7C2C130C5144F0006 /* N64DeltaCore.modulemap */, - 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */, - 0236ACAAE07BD9A1FA670BDBDADC0D30 /* N64DeltaCore-dummy.m */, - FDDAF9CF6EC0B13BC80E76560EA70449 /* N64DeltaCore-prefix.pch */, - F84345A499EAE58FE864424329CC0465 /* N64DeltaCore-umbrella.h */, - 100C0377584270DDE41906A45ED3FE84 /* ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist */, + 387F3E450269A9E3EF2EA6A10AD8C879 /* Standard.deltaskin */, ); - name = "Support Files"; - path = "../../Pods/Target Support Files/N64DeltaCore"; - sourceTree = ""; - }; - 0A5C4548757D4029BFE66F8F2912470E /* Unix */ = { - isa = PBXGroup; - children = ( - E6ECAD64E54D551CAC63388B1E3FBB33 /* ThreadImpl.cpp */, - 48A397662316360402E0600E571AD262 /* ThreadImpl.hpp */, - ); - name = Unix; - path = Unix; - sourceTree = ""; - }; - 0AA3EE06807AD3A1C73AC30588796437 /* config */ = { - isa = PBXGroup; - children = ( - 413E31D8C1624AEAC8EE7570F0551194 /* ftconfig.h */, - 77D3B3A913E0D9BC6F044C9D89CB8D96 /* ftheader.h */, - 3451D46815FC1E9C8DD13CA49D2186AF /* ftmodule.h */, - 2A0298053CF49C68092396B42DD55D37 /* ftoption.h */, - 70CFA30438DAE2DBE32611495D872EB6 /* ftstdlib.h */, - ); - name = config; - path = config; - sourceTree = ""; - }; - 0AB0646DD833AD6334AF13552DF365D2 /* plugins_compat */ = { - isa = PBXGroup; - children = ( - 6B2D3B45DE97EE84171CC1A90FD17872 /* plugins_compat.h */, - ); - name = plugins_compat; - path = plugins_compat; + name = "Controller Skin"; + path = "GBCDeltaCore/Controller Skin"; sourceTree = ""; }; 0ADE917FC3C2CDD395AFC7E009EF576B /* Core */ = { @@ -4193,188 +4371,78 @@ path = "../Target Support Files/GoogleSignIn"; sourceTree = ""; }; - 0BE2BAA0FC86CCF09B884AC5526B1B85 /* Roxas */ = { + 0BE974F8173202F6266136C7243D70EF /* mupen64plus-core */ = { isa = PBXGroup; children = ( - BB54FA85A4EFEF73DED9795E55139B78 /* NSBundle+Extensions.h */, - 1B22B42E3A2ED5293029A56068CA8061 /* NSBundle+Extensions.m */, - 480AE324EBF43D4B5582909423B482B4 /* NSConstraintConflict+Conveniences.h */, - 1EA5F7D97C9AB37E20A715D3398E9330 /* NSConstraintConflict+Conveniences.m */, - 24A1F04C9D66439C073E518F9C2519E1 /* NSFileManager+URLs.h */, - 707293F0FD9EBD1A0C126D2597D63C1E /* NSFileManager+URLs.m */, - CF7ECEAEDCF30C5FD13208AF855EEF47 /* NSLayoutConstraint+Edges.h */, - 80D87DDEE1CB809E00A47151D677F57F /* NSLayoutConstraint+Edges.m */, - 9E418A7738B016688EC222EB837069D0 /* NSPredicate+Search.h */, - BFD0CAB74C45D6B1CA49B94505E8E762 /* NSPredicate+Search.m */, - 620CBB9D49ED951D7497FDB4C115660B /* NSString+Localization.h */, - 21A038DB12C94476C404398950A88C8D /* NSString+Localization.m */, - 44B96F7B857F663A80AED6CFBCED2EE1 /* NSUserDefaults+DynamicProperties.h */, - CABA30017D9761CD2D49BCA9F53E923B /* NSUserDefaults+DynamicProperties.m */, - 6A32869D90E7BAC47B25D2F8E75F7856 /* Roxas.h */, - 5E75AFF4F05B942A1BEDA96CDD1D5F6E /* RSTActivityIndicating.h */, - 33A331134BE85F727CC5CCD89769383E /* RSTArrayDataSource.h */, - 50CB5AEC945198AAFCB4B3596F9CC624 /* RSTArrayDataSource.m */, - 75AB94233F995F253DFE0C50EE6C02A2 /* RSTBlockOperation.h */, - 866D05F9B3FED97151B776FED3394283 /* RSTBlockOperation.m */, - 45E7411B04ED1D693EAE8865EB4AB4A8 /* RSTCellContentCell.h */, - 83C98EC2B9B01038DDBDF79833E8FA12 /* RSTCellContentChange.h */, - AB4067DCD2A73B47C583FB56E3239688 /* RSTCellContentChange.m */, - FDF77E5F8A0CCA93C17ABAB60C658334 /* RSTCellContentChangeOperation.h */, - E57A55642D58F21D06BBD64DEA5CA1DC /* RSTCellContentChangeOperation.m */, - DC3FCFF553A82968D13B5EB86CA60675 /* RSTCellContentDataSource.h */, - C0C395FEF300FE2DAB4AB70FDFBE9A0F /* RSTCellContentDataSource.m */, - 10F4B87C9C8B821D0D8D4EF510CA04D7 /* RSTCellContentDataSource_Subclasses.h */, - 1EDEFED9C09EB37D2B09A2EE84A2BA70 /* RSTCellContentPrefetchingDataSource.h */, - B2549B66FD3CB3110FA065042ED1999F /* RSTCellContentView.h */, - 13D0054F15C9016C2A58C9AD3B1E55E4 /* RSTCollectionViewCell.h */, - 1FCDA1FB74E4C4092E5F8A5BC8289630 /* RSTCollectionViewCell.m */, - 2A046E883CFCEC84A20788D73991DD42 /* RSTCollectionViewGridLayout.h */, - 337EA8CD424B4FAA1210613EA7BEE5FF /* RSTCollectionViewGridLayout.m */, - C1CD631F0A847D6AFABB4216480B7556 /* RSTCompositeDataSource.h */, - 17D76ED9F3E5D01C1E48424DA204220B /* RSTCompositeDataSource.m */, - C7BC48F551C51325F8E971D1377D2A8B /* RSTConstants.h */, - 15D53B5540090674367F2034C42E0C1C /* RSTDefines.h */, - 7BBA8B55E8468DDF3F3DCACBEC6CC1E2 /* RSTDynamicDataSource.h */, - 9EA024415809AA543311AA9FE4454F1E /* RSTDynamicDataSource.m */, - E5B960D0D3388F94E7D3FB7BA36C85C3 /* RSTError.h */, - 43449379BD1A98A6E5C5169A5F74E9AA /* RSTError.m */, - 27AFE501DA9EA6202B3EE72F7468987C /* RSTFetchedResultsDataSource.h */, - 9E69FA508FAFD1015760B7C3395B4805 /* RSTFetchedResultsDataSource.m */, - FCED81571811A98DF752E236C102EB15 /* RSTHasher.h */, - F7E8CC2CC4A372DB06C3A4DDF7BD00C2 /* RSTHasher.m */, - 3D1A093309BA94F1AB20657C257070E2 /* RSTHelperFile.h */, - 142A476F4B29FD9BEA6D18199D4AD340 /* RSTHelperFile.m */, - 2BFEAD74D75F957AC8D29DA74DAD189C /* RSTLaunchViewController.h */, - 2F6D552EFD0D0F0A9F5EEC068432F589 /* RSTLaunchViewController.m */, - 850505914251942B1C511C89AAFFF578 /* RSTLoadOperation.h */, - 453A43AE3933FBE73C478E25DB5E476A /* RSTLoadOperation.m */, - 3B430FF2043C1D359980E0C002B66913 /* RSTNavigationController.h */, - CAE0F839C3C1E4DB9E2519345C397A21 /* RSTNavigationController.m */, - 814013939A450B54B81B83B1EDB7A650 /* RSTNibView.h */, - B02A3AF52CA1E696B30BDE9A844D4D97 /* RSTNibView.m */, - D5F7B6EF99FCD4BF1F3869F8D73FE95B /* RSTOperation.h */, - 7A51C15D398D2803874EB7297A0340BE /* RSTOperation.m */, - BBB89BF0F048332F70DF3BCD3A833DA2 /* RSTOperation_Subclasses.h */, - F1420029FD3C40F200795462E463C362 /* RSTOperationQueue.h */, - E194EEE9A16263CD0FDB5BFF52765777 /* RSTOperationQueue.m */, - FFEC014D2C956093FFE28CD534E23741 /* RSTPersistentContainer.h */, - 0098D6E2E55E4CB590673ABF30CBCFF6 /* RSTPersistentContainer.m */, - 03792829FDEFEBCD237AD95762EF484D /* RSTPlaceholderView.h */, - 37F6886809E07DA8D8DA791B7D5E700D /* RSTPlaceholderView.m */, - 1DF27D7E65CA1A9DC28C57F4FE6BD1B3 /* RSTRelationshipPreservingMergePolicy.h */, - 4DEB79CC55673435872F4AC4127BD0B0 /* RSTRelationshipPreservingMergePolicy.m */, - 03655DDFBA2609D8DEA72FDDF988AD58 /* RSTSearchController.h */, - D6619CB5190C33CD4AF481F84D29F75F /* RSTSearchController.m */, - 9BEE4619527C9F9B1FE35C99D23CC654 /* RSTSeparatorView.h */, - 163295C6CCD961D42E5E5F2EED6E2FD0 /* RSTSeparatorView.m */, - F3AAD7F4A60C4A7E5B5877476953BA04 /* RSTTintedImageView.h */, - F76E3967E1E2834EA49B2FFB6117AEEB /* RSTTintedImageView.m */, - 11CDF3492A5E59C765F2232102DA540C /* RSTToastView.h */, - 9A435B10C22B22C7734A3E5913E53474 /* RSTToastView.m */, - 8DDDB2DB5582729DFD3B142A0841B180 /* UIAlertAction+Actions.h */, - A7351AF200A2FE4130E42D7A321DA075 /* UIAlertAction+Actions.m */, - 678B4D33461C1C6B1A1DAD8189F4BEB2 /* UICollectionView+CellContent.h */, - 790495A40D459F66C420A40CFAFB042D /* UICollectionView+CellContent.m */, - FBB4322FF7B456423D12A82C9A36F624 /* UICollectionViewCell+CellContent.h */, - A706F5A8614DC9AF3A7BAF5EE08D7A37 /* UICollectionViewCell+CellContent.m */, - 57D0C008F4F6ABB93A720C171837F7EA /* UICollectionViewCell+Nibs.h */, - 2312F596695044513C4F58CD3E2960D0 /* UICollectionViewCell+Nibs.m */, - D52092A71CADBC93153EE571AB2672B0 /* UIImage+Manipulation.h */, - CDA1A181F550D672CE3A7A747A0DCB7E /* UIImage+Manipulation.m */, - 22925124C257896E19766BEE921A074A /* UIKit+ActivityIndicating.h */, - 136E40DAC7C29CAC860561C37A54FE9C /* UIKit+ActivityIndicating.m */, - 4E669C711147F6173C46040444135A2D /* UISpringTimingParameters+Conveniences.h */, - 46A7952AAD31367ED9BE353AA63C8C99 /* UISpringTimingParameters+Conveniences.m */, - D6BFD334CCCF9EBCBC3A6ABCF03BF295 /* UITableView+CellContent.h */, - 0C752AF5BCDF4EC788FBE60B79732508 /* UITableView+CellContent.m */, - 4659690ED156FCE3705F0C2B0C5811A4 /* UITableViewCell+CellContent.h */, - D5918BE30019D1A9AFEAA94298952245 /* UITableViewCell+CellContent.m */, - 276B3F3CC31F539687CB5B6AD102438A /* UIView+AnimatedHide.h */, - ECD06B0653616CEE4A2EAB78B71D5A06 /* UIView+AnimatedHide.m */, - 7BFDD39FA42BC2644FD2FC2A33412FFD /* UIViewController+TransitionState.h */, - 400B965700434B3B4E0F9FAC08AD895A /* UIViewController+TransitionState.m */, - E4AE1D2B784C4526230863F51855AD4D /* Pod */, - 7312C81CEF3F2AB59009C8D0DBCA6307 /* Resources */, - 1BD366D5C9BFE407F1BAF1DD14DF14DD /* Support Files */, - ); - name = Roxas; - path = ../External/Roxas; - sourceTree = ""; - }; - 0E57A818B9F9286B7451FBD334254A8E /* Types */ = { - isa = PBXGroup; - children = ( - B47C40F3651700B51A70D5B9000D2FD3 /* N64Types.h */, - 8ECDF285F3E093B02D0B6A530686B0BF /* N64Types.m */, - ); - name = Types; - path = Types; - sourceTree = ""; - }; - 0EFECB3C25EF213B3AF98FD9EDEFAA66 /* mupen64plus-core */ = { - isa = PBXGroup; - children = ( - A32A21E8F7145DAE99E82C2886356FC1 /* subprojects */, + 4990D6B3900063DB8611305F48B6C27F /* src */, + 4E52507BB6CC79CEF05FE900D2498D6D /* subprojects */, ); name = "mupen64plus-core"; path = "mupen64plus-core"; sourceTree = ""; }; - 0F893A73178BB4F682C866738A74BFBF /* plugin */ = { + 0C712C8C7BD3A3BA52CD0F4A84F011CE /* Misc. */ = { isa = PBXGroup; children = ( - 770FB112F840EA62E9A6C88008B7C1D7 /* dummy_audio.h */, - 83189ADFB9F73F46FCE23B3CE9012A77 /* dummy_input.h */, - AA0B0C7FCCE7AFC841BEE7048A093B70 /* dummy_rsp.h */, - 17AE63368464F283CA60EB477B2EAC1B /* dummy_video.h */, - D77D2A132FCC17A3824D7EE83B27B431 /* plugin.h */, + 60FB49D244425C934B22DB89FE9F68AB /* FetchRemoteRecordsOperation.swift */, + 72B1BA0104CB37793A0BEBF5E0F3FFB8 /* UpdateRecordMetadataOperation.swift */, ); - name = plugin; - path = plugin; + name = Misc.; + path = Misc.; sourceTree = ""; }; - 0FE2CA473270D4D1205B3EEFC9ECD797 /* main */ = { + 0E1D35D03C7FAADE495608D5046D0A18 /* api */ = { isa = PBXGroup; children = ( - 28A32492091FA65B2E25F38BDB5EE070 /* cheat.h */, - FA12B422FB3250E2E3FF60847D9714BB /* eventloop.h */, - 8E38F730D5EC5C9EF41311D289592151 /* lirc.h */, - 3ECC067B82E66713A45C44F973FA04EA /* list.h */, - D2F39CB2B6042785A3E5F2C40320DD2C /* main.h */, - 6B121A5474D97495A9D2594CBE9B2C38 /* profile.h */, - 798A8C02C208746867C1899AE83B7EF3 /* rom.h */, - 6A3C6439C7D592FA721C9BF78D5CF6BC /* savestates.h */, - 153DE0DE16595A04ED8966B393EF2468 /* screenshot.h */, - 595E9C1882A362C695C4D22B2193663E /* sdl_key_converter.h */, - 22F22453696F4302900B9871992F9215 /* util.h */, - 763AE2EACA7FF8898176F552273EFF1C /* version.h */, - CBC8A38B9BE9E17E5E15E98583898082 /* workqueue.h */, + EC1B871004801A1E40D5F78C6B08A719 /* NstApi.hpp */, + C9ED0B41AF5C196E6858B6DA26EAAC68 /* NstApiBarcodeReader.hpp */, + 114921A6CAF20904FE9B8E29537F98A4 /* NstApiCartridge.hpp */, + 7A23A59045CAA0A03697397632CF3A5B /* NstApiCheats.hpp */, + 3F7732EEA99B052D2425B1972ECED982 /* NstApiConfig.hpp */, + DC6964261E4DD7BE99FB445FC8757345 /* NstApiDipSwitches.hpp */, + 5CC102BAEF4C8D771A86539CC220A5A5 /* NstApiEmulator.hpp */, + 21AFB40E9F20886BAC51721D47518A42 /* NstApiFds.hpp */, + 6C13FD7FA77A5769F400B5BF15BC2F34 /* NstApiInput.hpp */, + 86CEE581D78B9E9138136F67D7ADF345 /* NstApiMachine.hpp */, + C08D3CFD628192FDB9B9FD5A63E531B4 /* NstApiMovie.hpp */, + 8FE7624D239D6E6FDDCBDC31458E790E /* NstApiNsf.hpp */, + F9C6144633B0DE1C8B971A2728903B95 /* NstApiRewinder.hpp */, + 8D629AE3BF67DAB06622670203476B43 /* NstApiSound.hpp */, + 8DEF68BFA723483A3C9540DE5D2B9CD6 /* NstApiTapeRecorder.hpp */, + 9AE76E7D656F9FC63729D2FE6CF2EE4B /* NstApiUser.hpp */, + 97B1BF27F91C777F9330B2027409CED1 /* NstApiVideo.hpp */, ); - name = main; - path = main; + name = api; + path = api; sourceTree = ""; }; - 104401E321E18AD99134ED58CE50DFAA /* visupng */ = { + 0E674E5D7F8B6BB20B13C09221BFEC5A /* NestopiaJS */ = { isa = PBXGroup; children = ( - 36E1F6E94EA1CBCCBD240A2819F591AD /* cexcept.h */, - EF96AD8DFCE6CD9FF8E28E8AED9E829B /* PngFile.h */, - 582940D574BD4B0474117DA6BE586566 /* resource.h */, + 3312E5853E083AE08720EFDF8EE603C0 /* NstDatabase.xml */, ); - name = visupng; - path = visupng; + name = NestopiaJS; + path = NestopiaJS; sourceTree = ""; }; - 10C2CD51180AFA21BD554BBADFAC9630 /* metaspu */ = { + 0E99AAB0073C58E2C37B88FD78102676 /* melonDS */ = { isa = PBXGroup; children = ( - 0ACF8573E12E7CE6FC8382B1C7A28827 /* metaspu.h */, - 7E6B9B56EA3BE92F4A8798B0D43526B2 /* SndOut.h */, - 78D34056D179147F7BC9585C1F1EF02A /* SoundTouch */, - 764CBED5851C0D2B20C8C32A1379B406 /* win32 */, + 282FEE588F67ADABABCD03C813FBD859 /* src */, ); - name = metaspu; - path = metaspu; + name = melonDS; + path = melonDS; + sourceTree = ""; + }; + 0FC9A6A4F28B9F544365006F544B8DFC /* NESDeltaCore */ = { + isa = PBXGroup; + children = ( + 188673BC9859FF22057D8B552AA23087 /* NES.swift */, + 7647C29F1EB2BC67142E821D427D0865 /* NESDeltaCore.h */, + 5161CDF69B4AAA22DCF3258FAE5F87A4 /* Bridge */, + ); + name = NESDeltaCore; + path = NESDeltaCore; sourceTree = ""; }; 10C5A63DFF5B6476CE409931492CA3D0 /* Pods */ = { @@ -4396,409 +4464,504 @@ name = Pods; sourceTree = ""; }; - 1190BD6F5A77F0F9E5AF42E5A07B4366 /* visualboyadvance-m */ = { + 10DCFCCDBB07D546E07683EDFC3CA36B /* common */ = { isa = PBXGroup; children = ( - 37C8E97EA413DC80A7D0F4C499EC79CF /* src */, + FDBCAC7AE4C298FE4646BD7005AEE4F8 /* CommonAPIImpl_common.cpp */, ); - name = "visualboyadvance-m"; - path = "visualboyadvance-m"; + name = common; + path = common; sourceTree = ""; }; - 11AE318CBF1950592491D3ACDEC304CE /* Parent Operations */ = { + 11A597BF832E8961EA3D9A46BDCB6BDA /* GraphicBuffer */ = { isa = PBXGroup; children = ( - 0883789E4810C71ABF67BD6770636C52 /* BatchRecordOperation.swift */, - 638C5EE8459794EA00003C69343C4289 /* RecordOperation.swift */, + 535C2901C00E7283DD28013BBBC6CA4F /* GraphicBufferWrapper.h */, + 85219B6071D90E9EA98CA1840453F830 /* PrivateApi */, + B5738FB74828225A8498F9552ADF80ED /* PublicApi */, ); - name = "Parent Operations"; - path = "Parent Operations"; + name = GraphicBuffer; + path = GraphicBuffer; sourceTree = ""; }; - 13F4C791B31AB8ED0AEC8F876A024121 /* decoder */ = { + 12FA5A7251F9C4989164C912C5A03C17 /* mupenplus */ = { isa = PBXGroup; children = ( - 1CDF0C8D349B858C9D5F6C48C36605C4 /* pngusr.h */, + 18F557085D0365AECB4077B82DE76E12 /* GLideN64_mupenplus.h */, + 876C8D28D439902E84EF476C79F7E2C8 /* MemoryStatus_mupenplus.cpp */, ); - name = decoder; - path = decoder; + name = mupenplus; + path = mupenplus; sourceTree = ""; }; - 143C0F8B6FB554B8F3D7C2A274CC8DE0 /* src */ = { + 1440E41899A0C9C36C54538F903B01C9 /* Bridge */ = { isa = PBXGroup; children = ( - BF84BC955CB33F2AF3685A48B39D12AC /* 3DMath.cpp */, - 3283EF596434B1D254E4719AEDDF2B9F /* 3DMath.h */, - 9FF916A03FC9114DF6807EC4AE2F131C /* Combiner.cpp */, - 2D32B6BBDAE1D1E3EAA27A408B03C8A6 /* Combiner.h */, - 9863A0F82AE9292BB81384ECFD45AABF /* CombinerKey.cpp */, - D344F505862E745C78F15C36F91D7325 /* CombinerKey.h */, - 2DB53EA9D410D595711ED5EE029CAC60 /* Config.cpp */, - 618949190C9EE4497D8F00EDA7A856E7 /* Config.h */, - 580B1B5358971578E8D067CD87CCA4EE /* convert.cpp */, - 94D11622874CFF7D4685E506F182E85B /* convert.h */, - 7637F69AFE4440D79912C03BC0E864AE /* CRC.h */, - 75F57C00E99D0261142E905420B1FDA7 /* CRC_OPT.cpp */, - 46026D348B650E6C7D5C37EC52B80A8F /* DebugDump.cpp */, - 485C835BCAC9FE9D2D7A0723CC28AE49 /* DebugDump.h */, - 82C27E6DA6F13A8BFDE148AF1AEB92CD /* Debugger.cpp */, - 06E118D0678F9057E5942E1C06792221 /* Debugger.h */, - D6B56FEC107675FBE484E18FB0578E5F /* DepthBuffer.cpp */, - DBCF759085E40951D39485BB214BB25C /* DepthBuffer.h */, - 0DCFE89D247EB41DF04E4B210CD083F3 /* DisplayLoadProgress.cpp */, - 165095C0F2AC162D9A03CCCE15E06D7A /* DisplayLoadProgress.h */, - 636BCAA16AC311A2A310C344BD9FBCB8 /* DisplayWindow.cpp */, - E07FCD55ADD3EACB05945CD2DAA45704 /* DisplayWindow.h */, - 40C24A38D0B2D424939FBE8FE393A00C /* FrameBuffer.cpp */, - 7D29EE04287C192700BAA7D8E7068B20 /* FrameBuffer.h */, - 5D654A5B901E387BCEA877A4F4B1FC31 /* FrameBufferInfo.cpp */, - 906947FD8A5D4B956AF6B2AB2C50E677 /* FrameBufferInfo.h */, - 9B93E54A61BB91C9C1DB668CB22B8E22 /* FrameBufferInfoAPI.h */, - 482F462D88C4B5F90023E215B10AD635 /* GBI.cpp */, - F14770DFA2F0FBE712A351494EC459C7 /* GBI.h */, - BE5E01263F3833C2C56EBB4B61F7CA32 /* gDP.cpp */, - 34B58BB2F0C3289A22FE5DD2CA130C8D /* gDP.h */, - 0482ED34CE1A01F70FEB8B861E2E8E09 /* GLideN64.cpp */, - 6E65D162B8D927702A508BF68B07EF7D /* GLideN64.h */, - 0553C664A9287732CFEA939623E83E70 /* GraphicsDrawer.cpp */, - 49F843099C865EF969075D9084E1EE49 /* GraphicsDrawer.h */, - 0E9121D9B12531DC426945BA216F72E0 /* gSP.cpp */, - 72E7904615D88779CADD558D3456DD5F /* gSP.h */, - 372F8BF3EFD0B4F1ADF3AB6EDDFDEB86 /* Keys.cpp */, - 133A1237CF59770626D5E03A5FDF58FB /* Keys.h */, - B36363E6798FB6B3F40354BBE7374A01 /* Log.h */, - E8F9CE0B18CCD8E71B4B5EDEB0D0C864 /* Log_ios.mm */, - EB9627220FFF83CC1F4AAE5DCC667ADD /* MemoryStatus.h */, - D30A1BC3FBD53F3033F0C28438BE7BD0 /* N64.cpp */, - 1E9673A8687B4C246AFECBFC5FA4C2C2 /* N64.h */, - DD6C840F168CC0216273566943F214F5 /* NoiseTexture.cpp */, - 6DDEEF3EE5DBC5E579DE48E15CE14565 /* NoiseTexture.h */, - 000CEE30E84D661F89DA9650593A2099 /* PaletteTexture.cpp */, - 359183005A45F4DEB5018AB89576E560 /* PaletteTexture.h */, - AB2E42B839949FC64A2002C5BF39CD4D /* Performance.cpp */, - AF84C91D866F235841A37FBDD3F32FDC /* Performance.h */, - 4BE2E896D06C7357E3D03BBCFA7DAC96 /* Platform.h */, - 5D28BE3E5AFE58F245865607BE7171E8 /* PluginAPI.h */, - 07F929AA3ED898A910A9BC1A1D86B9EA /* PostProcessor.cpp */, - 9C9E1AF02B3EAB5EEF41A090B1D93CA6 /* PostProcessor.h */, - 3FC4C12AAEC24F5791DDF9CF0F417BA0 /* RDP.cpp */, - 8ED616369FCB01DA566D1197932686D0 /* RDP.h */, - CEC07F295EF65A94DD75B4B6F79D0A83 /* Revision.h */, - 0FFC7F34F90AC81DD006C798B7C5936F /* RSP.cpp */, - C2480C7048FB3B86DEDC127B883F6323 /* RSP.h */, - BB26B910FF9586D0BBEEF8B7B3FCC55A /* RSP_LoadMatrix.cpp */, - C5AA082D0701AB3A2B49F4AA865B5021 /* sdl2_compat.h */, - A833E7EBCC4497CD94712AAEB129AFEF /* SoftwareRender.cpp */, - 2BC6C6859EF93F3A711C5AA163C55425 /* SoftwareRender.h */, - B9FB554080990194873F4A54006A5E02 /* TexrectDrawer.cpp */, - 6FD06664B1E05662499252D81EE4BDD5 /* TexrectDrawer.h */, - 8F8EFA2C77C87A2217F6683EB75926B9 /* TextDrawer.h */, - 087B0A1E2A0C286B3F21988E2886E415 /* TextDrawerStub.cpp */, - 9B3F61B1E686EE8232FF7D4423DA7AE5 /* TextureFilterHandler.cpp */, - CFF9DBD50FF109AB529096538EAC3BE3 /* TextureFilterHandler.h */, - 99EC0BF92D7121A56829D9702EB42CAE /* Textures.cpp */, - 3AE64FC0F8676B00CF470337F5C202A9 /* Textures.h */, - B3475FAD5B489B5292E3D459A64A3417 /* Types.h */, - 0C46940B6EC0F54D23A4A771525673E4 /* VI.cpp */, - 3EEBB60E43F6C3B0B541EE72A7C426F9 /* VI.h */, - 719867C7F45388063CEC3252848F288D /* winlnxdefs.h */, - FB78D889B9AEF0455BFA9A0731B00CE4 /* wst.h */, - C1D6EFEC4C64645B1CD5E8A6C7E9C97F /* ZilmarGFX_1_3.h */, - B61F4F596E3EE98C9853A96F05AFA5BD /* ZlutTexture.cpp */, - 469D72AF2CB4C2BC1AEBC6D96997F695 /* ZlutTexture.h */, - 2237D71C322E58F02AED5FF6EC817972 /* BufferCopy */, - 377224A4013DE56D58B13CD8F5DCB672 /* common */, - E9008238CB64036A4BE0ADA65490F1AA /* DepthBufferRender */, - 5B48C5A139E2AF535B4363EC8D3369C2 /* GLideNHQ */, - 3AEBAEFF2CF8E49D6B051634DB4A599D /* GLideNUI */, - 84DF79C3FE14B70A40597DED4FFC8BFB /* Graphics */, - 59F4B66B2826CD0DDB1EB45197BD17E0 /* inc */, - 3ABF8C52D1D6470681859867551BF5CB /* mupenplus */, - 580EBE0D599F965BCD5FEA6B94CC9EB1 /* osal */, - CCF8ECCA8A47403B9790B2173996E8DD /* uCodes */, - CE2B8EBCA8AAE11803FB13F94633A7E6 /* xxHash */, + 04CE2E235B10188704B563E18E7D532A /* GBCEmulatorBridge.h */, + E5598BF7199B8F30327DBDD42DA18CA4 /* GBCEmulatorBridge.mm */, + 8310F880B7CC9B1650278B22FEEA7A2B /* GBCInputGetter.cpp */, + 6D9EAB15090D2390809047688EF8E815 /* GBCInputGetter.h */, ); - name = src; - path = src; + name = Bridge; + path = Bridge; sourceTree = ""; }; - 145E8C7A14549DB8E770BFCD75153494 /* memory */ = { + 1790A5B168DBA0E9FBC4C741974F9F2C /* uCodes */ = { isa = PBXGroup; children = ( - 7D467F2C39B4E1301A6A2824147175DE /* memory.h */, + 9E1156572BD531C3316B572C296BCF01 /* F3D.cpp */, + 0BE4827A1488FD5FE6F356A0EE7D96A3 /* F3D.h */, + 535D5DA336441168AC8B025DD167FF5A /* F3DAM.cpp */, + 5874E00381FC42362866EFFB712A5697 /* F3DAM.h */, + 8548E8B79648F224295606EFFF726D52 /* F3DBETA.cpp */, + 398B0C10962B06603D1218A0BFEFDE41 /* F3DBETA.h */, + FDC971E53465BFFF543E22C621BB9660 /* F3DDKR.cpp */, + 47298EADB145DA1C5DC8A5C800E652FD /* F3DDKR.h */, + BDB291BF8A6C2C5E7A503B53159F5FFE /* F3DEX.cpp */, + 2EC10C4E5FDC7C7C25A7DAC7A2FB11BB /* F3DEX.h */, + 347EB9305F4E36DD5D07096703DFAC24 /* F3DEX2.cpp */, + EEAE0F78E10C6AB8250B4FCF2FBB074F /* F3DEX2.h */, + 81D97BEB994C55C6EFABAC633B5D0966 /* F3DEX2ACCLAIM.cpp */, + C5A57A0F7B6EFB30D8800FFBC3A0FD7A /* F3DEX2ACCLAIM.h */, + 99096141FF8112FF26903D5255091329 /* F3DEX2CBFD.cpp */, + 6BD20790AB990ACC80BB8996D8F6E7CF /* F3DEX2CBFD.h */, + 0A59426906D18823BC9AD4B26A1EC66C /* F3DFLX2.cpp */, + EC9634B3B11790E21D1DD4B3D06D4A1A /* F3DFLX2.h */, + 1E090AE4D2EB3F7EBC12F7527F8C83A7 /* F3DGOLDEN.cpp */, + FB9EE7B4A2F519FCFB65900960419A5F /* F3DGOLDEN.h */, + F07E76FD0A048E88C13AD72461D1A8A5 /* F3DPD.cpp */, + F0D3C6982EBE0EAC53FAA7E37AFA9496 /* F3DPD.h */, + 3DBA884F6C11AC7F591FA518903604B3 /* F3DSETA.cpp */, + 9147D9287688D6DBCB391FCFFB5E8CD9 /* F3DSETA.h */, + F491BE89CC65EDBFCEB3B214D06C7200 /* F3DTEXA.cpp */, + 76C92A047E2902F98A561866E68DFBD1 /* F3DTEXA.h */, + 24C9EC3456B0473415C7E2A4BFE6D619 /* F3DZEX2.cpp */, + 14B432CCBAD2A0A59F5EFB878191A511 /* F3DZEX2.h */, + 7D35DC1DC3A814BF1FDEBF8BA115A3C0 /* F5Indi_Naboo.cpp */, + DF93E143D1E16A5D0994F45965CDDB74 /* F5Indi_Naboo.h */, + 092C6EE9873F269B8DF55D311028DF6F /* F5Rogue.cpp */, + FC8BE3C9EFF69072F0F385CD784639A2 /* F5Rogue.h */, + 280A5539EBE87BEA10C7C1654D729DCC /* L3D.cpp */, + DDB2184F0999EE882B67DEFADE1B4A63 /* L3D.h */, + 9531D676E6CBCD44E92FD1148601D0F9 /* L3DEX.cpp */, + 5C35BC9F77F23B687515FC8958549CA1 /* L3DEX.h */, + 93DB6CBD9964A538F778E19D3832F2B9 /* L3DEX2.cpp */, + 00B7E4CE889EFFA5F1F5DAF6C3BD013A /* L3DEX2.h */, + 078EC48CFDCED61DA3CE896FA2BC1477 /* S2DEX.cpp */, + 7C4333506EF373E1D2841A18039C8379 /* S2DEX.h */, + 915FAE52C5A766087CB6E4CB6D7ABE8D /* S2DEX2.cpp */, + 6BF4AC25F29497FA32921E869185CFB9 /* S2DEX2.h */, + 931ECBBA73F768F5570C9A96C3F2C003 /* T3DUX.cpp */, + 5EA6CE40033E7605CBA05FE256EA16DD /* T3DUX.h */, + 7A4769F49E16CB7DA2C80A4AE0AB75CA /* Turbo3D.cpp */, + 9FDB5E5AA46D38CB2E47E5E6DF9A5645 /* Turbo3D.h */, + 2B9D8426DBFEF530DE2AC44162062396 /* ZSort.cpp */, + F80CF610BCA1225E6F34A2505B12C005 /* ZSort.h */, + 1939C13EF032EAB42CBC6C921ECE7AD8 /* ZSortBOSS.cpp */, + A52143F41FF59A51CFA9789F6A96A1F3 /* ZSortBOSS.h */, ); - name = memory; - path = memory; + name = uCodes; + path = uCodes; sourceTree = ""; }; - 17640D3E9C581A1DA4B2DFB2666646C9 /* libpng */ = { + 17D56112446A3990E9D47221D20D86FD /* melonDS */ = { isa = PBXGroup; children = ( - 0DB5686AC4A3B7C73DBEBCB221B94109 /* png.c */, - 75BC588551AB21D7B8D2F7CEC5387DE8 /* png.h */, - 74B33477F335E1B6177EC8672F22289C /* pngconf.h */, - 0C369537653C1D3D646427D235DA8800 /* pngdebug.h */, - 4875A5F2894B64D59ABA846310074DDD /* pngerror.c */, - 0ECE608D60C05AB0625906E8A6493CB1 /* pngget.c */, - 8844375C652ED43B6CF8305EA32D5488 /* pnginfo.h */, - 06B3B77EA189E0778856F0A800AD3B73 /* pngmem.c */, - 7BBB06A85B5F1D7854ECDB59E80B5B70 /* pngpread.c */, - A882E5AEFB5708D397E1EA06B9F5964C /* pngpriv.h */, - 31C2319F7A8D58BEC41843BD13637729 /* pngread.c */, - AB9A44C4015E688182AFC5CE81179187 /* pngrio.c */, - C46B41859C836F92F71776FC13FD640A /* pngrtran.c */, - AA827D717ECF37F1C8268040AAFBAE46 /* pngrutil.c */, - DD7C52A8979058368290D45755488F97 /* pngset.c */, - 7D8592309610FD7BF2ECC3EF7A2F045F /* pngstruct.h */, - A5D27BA453130BFB47F360AB69AE7A74 /* pngtest.c */, - 086ADF754FD807B796DAED4D2797BAA7 /* pngtrans.c */, - 4AA3FD3271A56236EDAF6E49599021BA /* pngwio.c */, - 74F7F494A747DB09275C9A959DC103CC /* pngwrite.c */, - C73137BF8F38B56D677038CAFECF2A56 /* pngwtran.c */, - E411C55BF728DAE87580EC144C599C2A /* pngwutil.c */, - BEE053A077D5B0152B87C64B9E854C3D /* contrib */, + E077F3008801C506785266DF63C1EA19 /* romlist.bin */, ); - name = libpng; - path = libpng; + name = melonDS; + path = melonDS; sourceTree = ""; }; - 18D40F06BD28A8C162D5C5ADE9315294 /* osd */ = { + 18349F28E095F5DD3D13A569936BC79C /* Model */ = { isa = PBXGroup; children = ( - 58ADB3F7E23F3C6F3AEB1D5017488FDC /* oglft_c.h */, - 114C1CE8166C1D5EE54BAA6E9086C965 /* osd.h */, - ); - name = osd; - path = osd; - sourceTree = ""; - }; - 195200B355430B200AB0DBC8B4ABC0FE /* Harmony-Drive */ = { - isa = PBXGroup; - children = ( - 8110229A2612B6ADEB790CF3A880D7F8 /* DriveService.swift */, - 2A3C156BDEC9D98DB4C0821812B71351 /* DriveService+Files.swift */, - 00982E0E1F8B1E95963CDA563EA3D799 /* DriveService+Records.swift */, - 8BA47FDD506E39A2EC6B9965BF416961 /* DriveService+Versions.swift */, - D7565F65FCF097E9EA040326E27D0210 /* Extensions */, - ); - name = "Harmony-Drive"; - sourceTree = ""; - }; - 1BCC1AB3348B9592350C28DB2607FA04 /* include */ = { - isa = PBXGroup; - children = ( - F77EA33E6AF316AA6F7640C7E3F3D1D4 /* gambatte.h */, - 14DA14245966E2AC6FF59548E765006C /* gbint.h */, - 2FD0F2986CF92C82ADF825EBEADF3727 /* inputgetter.h */, - 1C5B370D97DA31DD1B20EE2895770F31 /* loadres.h */, - 7C71AA7A6480E27C964B8F797CDFC89B /* pakinfo.h */, - ); - name = include; - path = include; - sourceTree = ""; - }; - 1BD366D5C9BFE407F1BAF1DD14DF14DD /* Support Files */ = { - isa = PBXGroup; - children = ( - 411D37B4E9D47D9CD8974A08B548DE8C /* Roxas.modulemap */, - 1E6A8F6B9B3B7B25C7C87F8B3C7CDE37 /* Roxas.xcconfig */, - 7112AF9DF88E284F7F0D82E3379A2B7D /* Roxas-dummy.m */, - 4A571DDF52B0DE6907D9648064F9C203 /* Roxas-prefix.pch */, - 0A031E1BD1EAC694520C66D56F10F34E /* Roxas-umbrella.h */, - ); - name = "Support Files"; - path = "../../Pods/Target Support Files/Roxas"; - sourceTree = ""; - }; - 1F87499C4FD451910C5CFDFD3AAA47D7 /* RSP */ = { - isa = PBXGroup; - children = ( - C9CF25A97B140A7A408C88D4E580E637 /* Mupen64Plus */, - 7F5D6DC3FB853BF3A979D7FD9ABC1979 /* N64DeltaCore-RSP */, - ); - name = RSP; - sourceTree = ""; - }; - 20866A2BE0BCA7D1C914AC07CD1C0CE5 /* mupen64plus-core */ = { - isa = PBXGroup; - children = ( - 25071E100A8F997199865EF0AA220F49 /* src */, - 7A56E1DB35E017BCAE6D16398994B424 /* subprojects */, - ); - name = "mupen64plus-core"; - path = "mupen64plus-core"; - sourceTree = ""; - }; - 2237D71C322E58F02AED5FF6EC817972 /* BufferCopy */ = { - isa = PBXGroup; - children = ( - 254168DB44BEBEB68F731713E971B912 /* ColorBufferToRDRAM.cpp */, - 3BBA1A4FC53D2DE892DE2B5AB5226E8B /* ColorBufferToRDRAM.h */, - 35485E76FD48D810C5D7C95E2FD90D64 /* ColorBufferToRDRAMStub.h */, - B4983F070F9A339A50561C5253106964 /* DepthBufferToRDRAM.cpp */, - E2BAB81C3D77DEA7A2AE15BE082DFA95 /* DepthBufferToRDRAM.h */, - 12060A6DBBD12A6E816E1B753273DD7A /* RDRAMtoColorBuffer.cpp */, - C9C3B7DA45835B08897BC091AEF1EEB6 /* RDRAMtoColorBuffer.h */, - CE6C7C0BB4E1D92107DD8D623F8F45E5 /* WriteToRDRAM.h */, - ); - name = BufferCopy; - path = BufferCopy; - sourceTree = ""; - }; - 23D8FA654377883445CD0B0B1A2468DD /* Model */ = { - isa = PBXGroup; - children = ( - 0B149C977427CB869997B3FA4DF71F80 /* GBCCheat.h */, - 03B446FCDA488875B28D8F29A5A054B5 /* GBCCheat.m */, + CC29261FDE2973B2D6B6F1E62024A0A9 /* CheatProtocol.swift */, + 9F4FE55BE08EA38FF320E4286A4C43C7 /* ControllerSkinProtocol.swift */, + 2985A6A24D313B24B3A42ED617C00464 /* GameControllerInputMappingProtocol.swift */, + E336CAB35F1041C04DA2A4B22DF0D4FD /* GameProtocol.swift */, + 48B7D69EC414883941231476116906D7 /* SaveStateProtocol.swift */, ); name = Model; path = Model; sourceTree = ""; }; - 25071E100A8F997199865EF0AA220F49 /* src */ = { + 18727D12B38DBE263195F41504FA8D5C /* Harmony-Dropbox */ = { isa = PBXGroup; children = ( - 464BDB10421F8F548E3FE464860697C4 /* api */, - C78FC44C8B7F1A8AEB30433AD0440A12 /* backends */, - 8DF6E9EDB238B7AEA4F57F5DE0790D80 /* device */, - 0FE2CA473270D4D1205B3EEFC9ECD797 /* main */, - 27B3E72596EE3E0B615CEA5ABD16DBD4 /* osal */, - 18D40F06BD28A8C162D5C5ADE9315294 /* osd */, - 0F893A73178BB4F682C866738A74BFBF /* plugin */, + D254660B89B2DF06F349F2BC87B3FEFA /* DropboxService.swift */, + 46A2C9BD6F58478A775BFC3629531415 /* DropboxService+Files.swift */, + C17FD4E3456BB23320C0E9F652CC29D1 /* DropboxService+Records.swift */, + 636321611157247A4B100E3ACC431B70 /* DropboxService+Versions.swift */, + 73A22CCBEF19B1B200ADA20DA0EAD4C7 /* Extensions */, + ); + name = "Harmony-Dropbox"; + sourceTree = ""; + }; + 1B00D1A6F79AF84381503C8C22D20EA3 /* Cores */ = { + isa = PBXGroup; + children = ( + A9C65F0AD8F6ACAD0EA3F1D732708E85 /* DeltaCoreProtocol.swift */, + A22889DC853EDD8E7FCC52CA013A82BB /* EmulatorBridging.swift */, + ); + name = Cores; + path = DeltaCore/Cores; + sourceTree = ""; + }; + 1BE81ECBF6361B3E4208FAF47EF2AA9B /* GLideN64 */ = { + isa = PBXGroup; + children = ( + 294FC665838BF3B91F74C338A847D6B9 /* src */, + ); + name = GLideN64; + path = GLideN64; + sourceTree = ""; + }; + 1C81893C6C5CA0C0114A2862C96E34B0 /* cart */ = { + isa = PBXGroup; + children = ( + B73776B063CE08E7361FDE4C26CF904F /* af_rtc.h */, + 28CBF616EB776A5C5D2F9A737B72AA74 /* cart.h */, + E98E9898FE20472841A8D1A0EF9806EF /* cart_rom.h */, + 6750964B0895F740D52DD97CAE8B5099 /* eeprom.h */, + FAE08C498FFB93AC32DDE6D957B5E24F /* flashram.h */, + 022DB7F76D90A69E8472052BB6DAF7F7 /* sram.h */, + ); + name = cart; + path = cart; + sourceTree = ""; + }; + 1CE4961F35CE8C86E7101C8A5C6BA5E9 /* Resources */ = { + isa = PBXGroup; + children = ( + 40B5D84ECD183C3EF78823E7CF938746 /* KeyboardGameController.deltamapping */, + 226C662B43ECEB12F37DFF9C36643D0B /* MFiGameController.deltamapping */, + ); + name = Resources; + sourceTree = ""; + }; + 1DCE735EC678094DC6A2D328A8329692 /* Model */ = { + isa = PBXGroup; + children = ( + F7BDD61DD53EB66909667FDEF0E033B1 /* Cheat.swift */, + 795C12A193997827B4ADD870D87BDF8C /* CheatFormat.swift */, + B6888D502C932A8931592CA8315E0F44 /* ControllerSkin.swift */, + 6CFE24E78C00465C933205823C6591C2 /* ControllerSkinTraits.swift */, + 213FC7540DB4DF3F90B89035F984BD7C /* Game.swift */, + 8EE4DF888D759F8A1EFC289D72E1DF95 /* GameControllerInputMapping.swift */, + C43650F984E0D62C7EB21DB9C43B8CAD /* GameControllerStateManager.swift */, + 027FB4C6CC71DADB243F4D75F54D49E2 /* SaveState.swift */, + B66E092380775AE85650268CD7A51DBF /* Inputs */, + ); + name = Model; + path = DeltaCore/Model; + sourceTree = ""; + }; + 1DE3C5EF04F04E81DE98254DC953CE87 /* main */ = { + isa = PBXGroup; + children = ( + AF7DB0A4354868150C48B6B6E2D4FE4D /* cheat.h */, + 761CB13BA65C677D14B6D3A3F75A9A73 /* eventloop.h */, + 7C95081CDA9074D9730BD45D716C934D /* lirc.h */, + 582F8C63B9BF01FB8537FCBB2196C589 /* list.h */, + 62CF24548323CEDA7F6C62DDD4E4970E /* main.h */, + 5E69C29F29CC024AF25B51D0D32627EE /* profile.h */, + FB3BB654A06CE0DED1C9C6F934367DDF /* rom.h */, + F27E0BB08CA9AA99087CB49B95D5A051 /* savestates.h */, + F6EC76AAFEB4EFCCAA67C1913C4F3FB1 /* screenshot.h */, + D4F21465E42C4A8071CA88DDA2952DAA /* sdl_key_converter.h */, + C5B9715EFF4CB742F4153FF865BFAE0B /* util.h */, + E2736204110643A558D3FFB355216B2E /* version.h */, + 40D398DE570B23AC84F4DA4086B43F5E /* workqueue.h */, + ); + name = main; + path = main; + sourceTree = ""; + }; + 1DE59D00C959CB3E163D3732A583A644 /* x86_64 */ = { + isa = PBXGroup; + children = ( + FC30BD70C930E58720D8025E77346710 /* assemble.h */, + D91D509E04E52EB1EF2C6CE6325D63E0 /* assemble_struct.h */, + F85A845F1619F7A0F0BB1F552B74AA0E /* interpret.h */, + 9EBDA149FC9D979E9EB1846B7E68B274 /* regcache.h */, + ); + name = x86_64; + path = x86_64; + sourceTree = ""; + }; + 1EB1AC2AB2C378551CD37458FB961332 /* Resources */ = { + isa = PBXGroup; + children = ( + 13024863EABD5877B9E214D03434D254 /* Harmony.xcdatamodeld */, + ); + name = Resources; + sourceTree = ""; + }; + 1FC29672D386809D776C8BBED048F2A9 /* decoder */ = { + isa = PBXGroup; + children = ( + 1C201E20BCDCB9769F243F9E93782C06 /* pngusr.h */, + ); + name = decoder; + path = decoder; + sourceTree = ""; + }; + 2020B1298393D2B38287E9F78A832934 /* preader */ = { + isa = PBXGroup; + children = ( + F20F4C74BB8804B518393DCFC21CB9FB /* pngusr.h */, + ); + name = preader; + path = preader; + sourceTree = ""; + }; + 22243998D279477C46CB3187FEFB5BE2 /* Video */ = { + isa = PBXGroup; + children = ( + 3949595D020E5A3DAB73E06EEB13CF19 /* BitmapProcessor.swift */, + 0A7BA8D8D1E9E2CDAB97C30A5A502156 /* OpenGLESProcessor.swift */, + 4947A8614B4C6559E330C41CE046A147 /* VideoFormat.swift */, + A428ACD6852B72482C8570B4E49B15B4 /* VideoManager.swift */, + ); + name = Video; + path = Video; + sourceTree = ""; + }; + 22567F834DFA419A07D7E3214BEC2733 /* Delete */ = { + isa = PBXGroup; + children = ( + F512DCC7821D8E2620E88EDC969A6116 /* DeleteRecordOperation.swift */, + 403F1EF9016E064303392CD24F59212D /* DeleteRecordsOperation.swift */, + ); + name = Delete; + path = Delete; + sourceTree = ""; + }; + 22DE5B6EE14741DE1391CCA0302DC3F5 /* backends */ = { + isa = PBXGroup; + children = ( + 886FBFDCA7FC1D72F001F3E9535B924A /* clock_ctime_plus_delta.h */, + B331F7660FB59081A99ADBA1AF706462 /* dummy_video_capture.c */, + CF4CB213C78DA27A2EF987CB656BA480 /* file_storage.h */, + AD034E818D3FE0DD4770D45AB010C825 /* api */, + C87974DE4A4F914A1E04668AA8FD21D3 /* plugins_compat */, + ); + name = backends; + path = backends; + sourceTree = ""; + }; + 22F301FA3A283EF1501271F83DF62E07 /* rcp */ = { + isa = PBXGroup; + children = ( + B7BD75CB6D50E2F1B2A595347E8D3990 /* ai */, + 52161E4212C2337185C0A204E0BD5DAF /* mi */, + 9A10FC8DF08119CCCA29CA90D3724073 /* pi */, + 40C29E2CDFA90EA6D8C7A604F630643C /* rdp */, + 91769F9E871F0AE4A731112A23DC2539 /* ri */, + 71D8AD7C8C41F7B003216134D839C51B /* rsp */, + 90D1B4D0C2003248BEC35654A4959C9C /* si */, + E86AD79800B93FE2A28E4CEA4F227677 /* vi */, + ); + name = rcp; + path = rcp; + sourceTree = ""; + }; + 254AE138BE28881446262856C8CBC585 /* Resources */ = { + isa = PBXGroup; + children = ( + 5FA683FD9CEB1F0629D3586B5C0D5276 /* Standard.deltamapping */, + 0A1D7008E52048FFD35468EEC839BB57 /* Controller Skin */, + ); + name = Resources; + sourceTree = ""; + }; + 282FEE588F67ADABABCD03C813FBD859 /* src */ = { + isa = PBXGroup; + children = ( + 72866AD3D95B81BC911D7A67CEBC69CB /* ARCodeList.cpp */, + 34AF57CCCC40097CEBC29D385D24E7AB /* ARCodeList.h */, + 24A40AF418C2457D3920E3BF8F07B147 /* AREngine.cpp */, + 2CC64C89DA860743FE62F576D82428F1 /* AREngine.h */, + 19481227163F7CACC6C2B1E0A8B6A008 /* ARM.cpp */, + CBD7894C9422E5309EB6A4FE9A80D055 /* ARM.h */, + 0E058DDD738AC1B8E1A7C13BC1DF630A /* ARM_InstrTable.h */, + 956202907723788FB190BB389EFFDB25 /* ARMInterpreter.cpp */, + 55823D54327ED2C23F433C3F864E151A /* ARMInterpreter.h */, + 7E5A3A24EB4B9ABCAF94937C5D6C5E88 /* ARMInterpreter_ALU.cpp */, + E2C410EBF08C1B76FDAC71A27419D38B /* ARMInterpreter_ALU.h */, + FB6F1EA645B2A93AB915AD7BC3EAD8E1 /* ARMInterpreter_Branch.cpp */, + 2CE1063F98D054EF4717F2C3004607F5 /* ARMInterpreter_Branch.h */, + F04169937EFDD63A68B6EE345F1D4B17 /* ARMInterpreter_LoadStore.cpp */, + 7C336BB83B448CA034099BF3E7B12D55 /* ARMInterpreter_LoadStore.h */, + FEDAB7B8B80BCC8BB405F1C556A4E36E /* Config.cpp */, + 95E5CEA8D238911F127A409B1C8C507E /* Config.h */, + B9BFC6434EFC695B07E4DF1FB6E56F95 /* CP15.cpp */, + 59F8B6172F22E2155F8670897E6C81D6 /* CRC32.cpp */, + 40F516E9DDCDFF55309BF56900D3A6CA /* CRC32.h */, + A691959318D99E3BFEED5DF0D2582494 /* DMA.cpp */, + 72DF6D71D0B2650FA29881ABB3113610 /* DMA.h */, + 4154C14E31E1F470D6189218AA154654 /* FIFO.h */, + 649A8676EC984C0C8FDF1CCA5D3FF80D /* GBACart.cpp */, + A3CA2C169265FC922C39733E381863E7 /* GBACart.h */, + D4D5FBCFDF444CE792F8C8209C5606CC /* GPU.cpp */, + 7EACF9BBDC13D732E0443F9F9FCC5743 /* GPU.h */, + C14F1439A262C75F30F451CE2F5AC4E9 /* GPU2D.cpp */, + 967EFE5245A453AF9AA01C58AA47CA6F /* GPU2D.h */, + B8F6D0F53FB1FDC036DDE39C228B2207 /* GPU3D.cpp */, + 75D6B90D539713A20256FCDF0A27805C /* GPU3D.h */, + 89BCCB329ED94B86E8C48CB481557F79 /* GPU3D_OpenGL_shaders.h */, + 8DA8A3992CF991EF375A78B56D07EF09 /* GPU3D_Soft.cpp */, + 0A854F4317FA28AEE4189EE7FF42C9E3 /* NDS.cpp */, + 933D69C235D50794635AA2A58BC23D85 /* NDS.h */, + BEDC2F9C531F5A7B59C13110C977C309 /* NDSCart.cpp */, + DD81DFC2C331976AE715C460849BA6F6 /* NDSCart.h */, + 1B9E0F2F6641A295442D13F0770261B5 /* OpenGLSupport.h */, + 21A623E3F7E900942F5A6AD1E693832D /* Platform.h */, + D6C840B3C97CEC304F49384CCAA446AA /* RTC.cpp */, + 1FEB473929021F04D0B2259A61CE3883 /* RTC.h */, + 97584AF9C663217B6EF9C0EC7EAE247B /* Savestate.cpp */, + 42E8911C9890E3A93DD7CE8A4B3A27CC /* Savestate.h */, + 8E319DE75A7A4BF735167A2B78A55635 /* SPI.cpp */, + 12535108C24D1C6BADF6FB802CB39A5F /* SPI.h */, + 316A846E58F0E27085A4330EE10E3B5F /* SPU.cpp */, + 00ECD1D300178CB98731BDB344274AF6 /* SPU.h */, + 32D7821E2CE79FC4E3BED960866CD961 /* types.h */, + DF5DA6597370C51EB0AF58AA6075130F /* version.h */, + BFE1D65673DECE7D6E2A1B6B529D5CAE /* Wifi.cpp */, + A5CE53451F1210BC9BA0C024038C9865 /* Wifi.h */, + 91B3FF1A239E6CDBA01D3586039A9C7E /* WifiAP.cpp */, + D6152F7397477BE4F0ED9C7788792005 /* WifiAP.h */, + FA2FD0DE304F878673ABC90EA0A709F7 /* libui_sdl */, ); name = src; path = src; sourceTree = ""; }; - 255F9E88E31CB0CC2B35AAE7E87F8203 /* SNESDeltaCore */ = { + 294FC665838BF3B91F74C338A847D6B9 /* src */ = { isa = PBXGroup; children = ( - C718FF2F26B50069B14C6107F86F877B /* SNES.swift */, - EBFB410CFC7528D974AC5C39C85ED086 /* SNESDeltaCore.h */, - B7AF17E48E146E0297BD756594390881 /* Bridge */, - F250106D2FB2610EB9843ED15080AA12 /* Types */, + 232881DB5B781BEF87FE7B6665883476 /* 3DMath.cpp */, + 75C6CA9B6DE6420B9DC5F198E990FC25 /* 3DMath.h */, + 0275BCD590CD9EDAE776A4F66B072CD5 /* Combiner.cpp */, + 608FE25E87FF01D7345789C49881295A /* Combiner.h */, + BE736221B155C2514D9D36EB4FBAEEEF /* CombinerKey.cpp */, + 6658EE9B0A19441E97A1284103D6A0A2 /* CombinerKey.h */, + 923B6C52E65298DE9941024CC376A04A /* Config.cpp */, + 46834904D33267E3CBEE319642FFC703 /* Config.h */, + 35C4D4998448EFC8D73C7526A9E0766B /* convert.cpp */, + D709E423B3398EC39A98F76319C9374B /* convert.h */, + BB01FC8167E6C6B4469AC59E3C3DF146 /* CRC.h */, + E535808FC30F7474AE914FD2270A2715 /* CRC_OPT.cpp */, + A65DF9779DF20125011DEFB944B15926 /* DebugDump.cpp */, + D18D98DFBFA469D8509A1C9BFB85042E /* DebugDump.h */, + 80019774B54716FABF7DEFCCD68E75C2 /* Debugger.cpp */, + 51C536521365129A5FF9AE40DDF753F8 /* Debugger.h */, + DA35E04DC90CDF3E5C69140C495709F6 /* DepthBuffer.cpp */, + 5735CEBEDBCB212533CE2D0112224D5C /* DepthBuffer.h */, + DEC0821C3D8852D66B08A0002AB2F015 /* DisplayLoadProgress.cpp */, + 6D709C9141E75CC5376CABB8ED0406AF /* DisplayLoadProgress.h */, + D14C427796C3B67D5F822717322045B9 /* DisplayWindow.cpp */, + 91F00C1F0698F991A6DDB258AD21774B /* DisplayWindow.h */, + A33B3B4BD1E78794258F5AD6D999C880 /* FrameBuffer.cpp */, + 75D39CF0AC7F91D702958292DA91F30D /* FrameBuffer.h */, + DBD80F21182531F3EA2504E53691367A /* FrameBufferInfo.cpp */, + A9A7607CB2BCFE4453A1188585644330 /* FrameBufferInfo.h */, + 120C5D8AF966C09C6ECCB59508E8C8A2 /* FrameBufferInfoAPI.h */, + BCF3F649DFE2BBABB7DD4DB64169C38C /* GBI.cpp */, + 0BB6E71C991DC4BD501F509F16B2DFDF /* GBI.h */, + F52A10407276576D7E69215069A05CD5 /* gDP.cpp */, + EE72931824332E351A9F7197A02E23BD /* gDP.h */, + 92C0056228C548EC5C0C4574520A559A /* GLideN64.cpp */, + 96E4AAD82240CB7384572BAC20D31685 /* GLideN64.h */, + 176F2C264C99888772BBC8A3F018B128 /* GraphicsDrawer.cpp */, + 3E4294CBF5BD945DE53BB04420F881C9 /* GraphicsDrawer.h */, + 0EA337C872D00B3A247FF40858C6BF1F /* gSP.cpp */, + 0C1361ED1C7AC536E50CC4A7BA396F6B /* gSP.h */, + C14603BADCCE95A5E507021ACEF7693F /* Keys.cpp */, + 73490B7869EFEC11975B85243D0CA66D /* Keys.h */, + 7D08A94E7C3746163340B4EA95824507 /* Log.h */, + C6EB8CD619182507E4AEFF0FD1231295 /* Log_ios.mm */, + 0663F28B78D5B488BBD1158305953BF2 /* MemoryStatus.h */, + EAB9AA348D576D9AF8A76D798AF0A209 /* N64.cpp */, + AB7ED6F2E514469E5640A93ED3622401 /* N64.h */, + AD6FBA65BDE1FCB431C91C3080423E1E /* NoiseTexture.cpp */, + 49C63527B0BFABA381E737722D9FCB11 /* NoiseTexture.h */, + 14D158A352A8BBA396519A2C6CDC67FD /* PaletteTexture.cpp */, + A0430F33B2F349ADD6CDB6AF35310BC9 /* PaletteTexture.h */, + 53E9D1B37411CE1669CA533059362960 /* Performance.cpp */, + D80E4A5FDBC780E4358E55866C35218A /* Performance.h */, + 68776D658C9400B8766FD395BBD08F63 /* Platform.h */, + 77423E6CCB3B1A7C499FEC5ADF73561A /* PluginAPI.h */, + BC5370103F49292571EE10317A74B0B2 /* PostProcessor.cpp */, + A664ED590168019449C1E8A60B996A1D /* PostProcessor.h */, + 73594F3371FE49C0D1356C423974A617 /* RDP.cpp */, + 7EF1745163AD82481D56DE9A59BA24BA /* RDP.h */, + 6D4A9FA09D0CE373E943419685E8D514 /* Revision.h */, + 0263597CCE16095F0BA7CA33F49B26BA /* RSP.cpp */, + 9AA8A343F392F57FB9A603A5E4378309 /* RSP.h */, + FDA72CEB6E2DC0981A908E0F6C1BF56D /* RSP_LoadMatrix.cpp */, + F15930486D7F45DD18CFBA9BD8800E92 /* sdl2_compat.h */, + CB043895CFC330790DEDECC0C41BFEBE /* SoftwareRender.cpp */, + F687CDE1CC73F1023FA06367B7621C39 /* SoftwareRender.h */, + 8958320DAE6D887ED9E5A519C025718B /* TexrectDrawer.cpp */, + 32C0B90253B6F200AB5E78C107875E7B /* TexrectDrawer.h */, + A992E878783FEF42B0A952857F40B4CE /* TextDrawer.h */, + 406313DF7E94297A75C613BDD3988DC7 /* TextDrawerStub.cpp */, + 0FC5602035B9E19D656976E460F7F90A /* TextureFilterHandler.cpp */, + 5F722266C08C5C1739772E3E72CEE17F /* TextureFilterHandler.h */, + 5C888A9E68F5D9C40535BB25A042E10F /* Textures.cpp */, + 1563D8DEE08EAA92574952B8B395A8AA /* Textures.h */, + 06C47AD06BB9C0BD7738A8444AB1B3FF /* Types.h */, + FEF8E98B3647EDE8533C51A14A31D99F /* VI.cpp */, + 66E2F83711E351CACFF208148B544CB1 /* VI.h */, + 4BC3502E8ED4D5961B6483AA4C0E4E65 /* winlnxdefs.h */, + 0F279CB05ABD733ECA41FFA2F19A00B6 /* wst.h */, + CA7FFC847A5DDF0337FD944CC08D1D35 /* ZilmarGFX_1_3.h */, + 05767382F7FDD0945BB7F7F65461307C /* ZlutTexture.cpp */, + 5C680EA14E1BCE635BDC66F5CEF30F4B /* ZlutTexture.h */, + 8B06BABF42DF8EFD71F6EB03B156B0BC /* BufferCopy */, + 10DCFCCDBB07D546E07683EDFC3CA36B /* common */, + 40A84AA27DDEF94E5A8D58F51C2BA1FB /* DepthBufferRender */, + C1A3D24E4F2DDADE499D71DE02447D5F /* GLideNHQ */, + AECF96E7F30FA9F52E2F9CCA0F286C7F /* GLideNUI */, + AF9CF7E8B86C1E09202C17BD86BA5EC4 /* Graphics */, + FC68D86C65D89C9B913CBA0D9BC6F35C /* inc */, + 12FA5A7251F9C4989164C912C5A03C17 /* mupenplus */, + AADAFBFD69FC84E875D7A00CA0188FDE /* osal */, + 1790A5B168DBA0E9FBC4C741974F9F2C /* uCodes */, + 2A0986718FE67A6E47C14AB064EB3463 /* xxHash */, ); - name = SNESDeltaCore; - path = SNESDeltaCore; + name = src; + path = src; sourceTree = ""; }; - 27404E771822F8CE1A70EDB526C8D2C8 /* MFi */ = { + 2A0986718FE67A6E47C14AB064EB3463 /* xxHash */ = { isa = PBXGroup; children = ( - C6794551744F79F117DF19850F503283 /* MFiGameController.swift */, + 781ED3B4A8386F32B835E424BE6D24AD /* xxhash.c */, + F3A334ACFE0D3AC3FE96307D138436AB /* xxhash.h */, ); - name = MFi; - path = MFi; + name = xxHash; + path = xxHash; sourceTree = ""; }; - 2758670028842E564ADF1466623CA744 /* DSDeltaCore */ = { + 2ADDFE53CB14149EA0FF19210E668B03 /* Resources */ = { isa = PBXGroup; children = ( - 64B255C31BCB0FDD8AB113CF71D128C3 /* DS.swift */, - 8450BA83ACAB8B4A0AF901068ECB6A39 /* Bridge */, - 4C0FD18A12989B7A4F6A75FA2EFE414F /* Types */, + 4A182802B17188F847B92490A82541B0 /* Standard.deltamapping */, + 366AC8E4EE8EEC45E40DA1F8B08F3A38 /* Controller Skin */, ); - name = DSDeltaCore; - path = DSDeltaCore; + name = Resources; sourceTree = ""; }; - 27B3E72596EE3E0B615CEA5ABD16DBD4 /* osal */ = { + 2B78391A49DA84D556C32F50A37C1975 /* freetype */ = { isa = PBXGroup; children = ( - 76098B9B168291C93114F349AF883D6F /* dynamiclib.h */, - 269F29EF8D9E4E7D9A20913AFBB84BA9 /* files.h */, - 72FFB39A7A98F30C88D79B8E0A8EAEE5 /* preproc.h */, + F51CAE289BD309394F2FE1C2AB090189 /* include */, ); - name = osal; - path = osal; - sourceTree = ""; - }; - 2AC083D17ED5739B5B211543714C6C2D /* xxhash */ = { - isa = PBXGroup; - children = ( - 926DE74AEC8B4A89CE303E7D15837382 /* xxhash.c */, - ); - name = xxhash; - path = xxhash; - sourceTree = ""; - }; - 2AE3D62272543AE755E38D66B0FE1577 /* Inputs */ = { - isa = PBXGroup; - children = ( - 15D24BE6CA6E45ECB6DCBA6B450424E6 /* GameController.swift */, - 3D27110A6DD067C15FC032BAF9BEE99E /* Input.swift */, - ); - name = Inputs; - path = Inputs; - sourceTree = ""; - }; - 2C5DC4F17D3440F8CFAFB9138AE99311 /* include */ = { - isa = PBXGroup; - children = ( - 7DD54C4B2A034B3E5694E1C6C3916D18 /* freetype.h */, - DB3A0F2D56E5C2399EC70F3417641DDA /* ft2build.h */, - EBCC2D85473B037A5DD49F1E35B5D218 /* ftadvanc.h */, - 4673DE422676A6A6E7634A30B5B9E722 /* ftautoh.h */, - 7D93A1FA4EBA67EA2A7C3149D8776FF0 /* ftbbox.h */, - DCA611BC3AFEC2780F5ED5167FEFBACF /* ftbdf.h */, - 782EAF069DEB44E112D5056BEF8C3DE2 /* ftbitmap.h */, - 5A01843AE7F8A9690F749CE033E441E4 /* ftbzip2.h */, - C8A78AF718D2553FAE9A19AC2F865BA3 /* ftcache.h */, - 5F9A4CA2154481A63B5E58F37EBDA908 /* ftcffdrv.h */, - A71446C1AC97FB34D26841347BA3E583 /* ftchapters.h */, - AA1D49FEC1690DC33D84B0AF284CE88B /* ftcid.h */, - 435368F303983E9CA139C506A1FEDEDB /* fterrdef.h */, - 24ADD77C9E459763B52BB8DD8BA8DE7C /* fterrors.h */, - B87260587307761413DE023873BF047A /* ftgasp.h */, - 75CC5A3EB0061070CE3340A72D9B1240 /* ftglyph.h */, - D2F66324134D7EB7894E23D64D5D292B /* ftgxval.h */, - 63E5FFFBD052DA0F226FA6C644365420 /* ftgzip.h */, - 043B3C37DAA8DA3F93EF9856913625DF /* ftimage.h */, - 2A5D80F4652B7C7C71549D654A6F22B0 /* ftincrem.h */, - 13766CCFB7D97DABE91EFE46F07D098C /* ftlcdfil.h */, - 8A2F89C405DCAF9349F68843D8672A87 /* ftlist.h */, - 89308C156B65EB233E0F8E7B01291775 /* ftlzw.h */, - E82E5BAA08ADC037E1F7765FE77042C5 /* ftmac.h */, - F94939473F3DAB308B9B66A4722AEA61 /* ftmm.h */, - A63610BE12A6654FC18CCA215237F733 /* ftmodapi.h */, - A1054468B8504A0284F550663CC44349 /* ftmoderr.h */, - A57B57432BC4D00AD43EB6687F06197C /* ftotval.h */, - D69B8F7EC4A4B64E7B7E790A6DCF62C4 /* ftoutln.h */, - 5C52587C427298A7375DC3C3DADBC541 /* ftpfr.h */, - A9509066B63C4D1361D0CA4EA29B954B /* ftrender.h */, - D04DC78D5A74516CF2BAD79E947302B5 /* ftsizes.h */, - 08B8560CC6F18BF32453AAB35DA2A0FE /* ftsnames.h */, - F14AE82C6F3F1E53A7B148B891178E59 /* ftstroke.h */, - DE2D5223B53CBDDEEFCC21BFCF9AB205 /* ftsynth.h */, - 35465BE12D8260B15CC6BD3C5FEF813C /* ftsystem.h */, - 8DF7E6D80CBC58876AC10154A9D6A141 /* fttrigon.h */, - 1340B180649533E638F85761755DDEFC /* ftttdrv.h */, - DACC10FFB04DCEFEA489925006B8311D /* fttypes.h */, - 8ECA7AB7A3076AA6E4705CB0523A2472 /* ftwinfnt.h */, - C26FEA9C82A62549EEEB21A953C0F6DF /* ftxf86.h */, - C1E54260AFD798B02F4283ECF16E444F /* t1tables.h */, - 8715DB110EE34E0C96E7C74313A7A89A /* ttnameid.h */, - A1C9D65BEDC2366AB15142DA01309E46 /* tttables.h */, - 61596E997AFE32646B435FCBF43BA32F /* tttags.h */, - F7DA08D829FA42A2C69604D3B70D3967 /* ttunpat.h */, - 0AA3EE06807AD3A1C73AC30588796437 /* config */, - D58652A0F8AA7A68433AC33F2767D21A /* internal */, - ); - name = include; - path = include; - sourceTree = ""; - }; - 2C9B9652A353883F8A6CF2689D99A328 /* new_dynarec */ = { - isa = PBXGroup; - children = ( - 252CCD4194A312D6A647E0B27A002330 /* new_dynarec.h */, - B35BFC446ACA2A3AC49953F7912C8D74 /* arm */, - 89B06523494BD8523F81518C3886BFD2 /* arm64 */, - 025C8C08D530FF619B68E7567ECAB514 /* x64 */, - 9BEEEA655826D740F8EBC247A333EB7F /* x86 */, - ); - name = new_dynarec; - path = new_dynarec; + name = freetype; + path = freetype; sourceTree = ""; }; 2D451E944AAC47528C47C0687234DE60 /* Fabric */ = { @@ -4813,267 +4976,503 @@ path = Fabric; sourceTree = ""; }; - 304255FE83E88222A8624B2298155DDB /* ri */ = { + 2EB6FA4A225204F037A8883D88789CE8 /* mupen64plus */ = { isa = PBXGroup; children = ( - 0CDD7B173B5F39A57867ED110A1FCA3A /* ri_controller.h */, + 93058B797119FD95E8232C8C7B7BE0AA /* mupen64plus_DisplayWindow.cpp */, ); - name = ri; - path = ri; + name = mupen64plus; + path = mupen64plus; sourceTree = ""; }; - 3075365372BC210E9C1E4F40E26C5BFC /* Audio */ = { + 2EF8319FB7BC57D7AD40FF9EA981762E /* GBCDeltaCore */ = { isa = PBXGroup; children = ( - 62653D6633FD230F25923698824EFA8E /* AudioManager.swift */, - E5A838589A5289E842980290C10BFF17 /* RingBuffer.swift */, + B525AD713D91C6B384F9F0E9879AD4E7 /* gambatte */, + FB473862404C143624849EAAD703AF4D /* GBCDeltaCore */, + 49FE79C70586782C755EE0F4C1E54873 /* Pod */, + 254AE138BE28881446262856C8CBC585 /* Resources */, + F7846C993A87BD62DE267F5EF2FC2868 /* Support Files */, ); - name = Audio; - path = Audio; + name = GBCDeltaCore; + path = ../Cores/GBCDeltaCore; sourceTree = ""; }; - 32A3234E75ED687D7B90A6A982CC126A /* GBADeltaCore */ = { + 2F0EE6FCF6D8D0B16B4BCB67BFB864DC /* Harmony-Drive */ = { isa = PBXGroup; children = ( - CC1EEA402511AA159D872BBCB22E1C61 /* GBADeltaCore */, - 5311A1683EA053E58F93ED80896A38DD /* Pod */, - 756FE505CC37B6C3C2393B16D9FB6318 /* Resources */, - 379EDBEE1FDEF89DA0644E2AB949F551 /* SFML */, - BF15A943982DF0036D7E9AB6A541BB5B /* Support Files */, - 1190BD6F5A77F0F9E5AF42E5A07B4366 /* visualboyadvance-m */, + 5EBF9C7AF0DBEF9D5C106E02B9B28CE6 /* DriveService.swift */, + 83EAB31E2D8E6844C8AD8F3F95F9ABB1 /* DriveService+Files.swift */, + 0E4DCE2A6F12D890D38A83939413D307 /* DriveService+Records.swift */, + ABE1F0BA1ED297C8F6D7E93A5DA90FAA /* DriveService+Versions.swift */, + BF572ED34716178595A4BF25353FDAFF /* Extensions */, ); - name = GBADeltaCore; - path = ../Cores/GBADeltaCore; + name = "Harmony-Drive"; sourceTree = ""; }; - 3343777CA6E0AF2C9DF08C3AB68705DE /* Resources */ = { + 2F5BCA25C3A0B1615A98335051871A9D /* SoundTouch */ = { isa = PBXGroup; children = ( - C2D181987F7A462D06051D6F298B60FD /* NESDeltaCore */, - 9E1B908F1DB3ECDD4CA5B911E7C85B08 /* NestopiaJS */, + 77AC9809E47F480ACB8F5F50E124AEC6 /* AAFilter.h */, + 274CDB9B8AA8BAECD4E2BB3670A376D4 /* BPMDetect.h */, + 3197530A210649B738C6111BF7966B53 /* cpu_detect.h */, + CE2627D52C27F26A3779CDAD7756E356 /* FIFOSampleBuffer.h */, + 2E62533D6ADE3583F493484D3ABF1BB5 /* FIFOSamplePipe.h */, + 77999DE4BEEF8B78706A76C68622603E /* FIRFilter.h */, + DB540D974E938108678097CB0FEB8A5E /* RateTransposer.h */, + 086BC7A1837005C56E8908CBF2465274 /* SoundTouch.h */, + 80E83F0F41410406BC51FD2A72523649 /* STTypes.h */, + E3E9EE093E08EF6C06AEBAFED90F5FDC /* TDStretch.h */, + 55871AB19F8B639CFD102F69EAED1E93 /* WavFile.h */, ); - name = Resources; + name = SoundTouch; + path = SoundTouch; sourceTree = ""; }; - 377224A4013DE56D58B13CD8F5DCB672 /* common */ = { + 2F758774649CB3657B8850BCADB834F3 /* OpenGLContext */ = { isa = PBXGroup; children = ( - 337E3DE6F767B4B0E0E8615F5A236955 /* CommonAPIImpl_common.cpp */, + 442FF940EB7C16C5DB47BE217B7EAC51 /* GLFunctions.cpp */, + B54D71F0A9EE62F2B238B985FFE6C460 /* GLFunctions.h */, + F42E220EA589F02ED66B2844BC537B1B /* opengl_Attributes.cpp */, + 26E70D021ACF47CEAF06F4E652E5E81A /* opengl_Attributes.h */, + 24ED56596D00F9B9AD800B7FF30622F5 /* opengl_BufferedDrawer.cpp */, + C129B80E9CC6B64D0600B9A46648ED8B /* opengl_BufferedDrawer.h */, + B8CD1F5D1FB7A2951D65FA4A322294D1 /* opengl_BufferManipulationObjectFactory.cpp */, + AE3364FCB045C19E649AAFBEB1B1A950 /* opengl_BufferManipulationObjectFactory.h */, + 0089D9FB88A0BFD7C81E2BBAD71BEFBF /* opengl_CachedFunctions.cpp */, + C53D6C2BECC25796BBBD554B17692783 /* opengl_CachedFunctions.h */, + BDF03E49537AAB42B11FC2BE2DA3821B /* opengl_ColorBufferReaderWithBufferStorage.cpp */, + 2E2BB78721D4C6515E5DED30486B26C2 /* opengl_ColorBufferReaderWithBufferStorage.h */, + 0B0AD671A8AD882845CE216B6821E50B /* opengl_ColorBufferReaderWithEGLImage.h */, + 944052D0ED4C8624EF4485EE37D7898C /* opengl_ColorBufferReaderWithPixelBuffer.cpp */, + 16A28BF70DE7AAE9C02DF33216F1076A /* opengl_ColorBufferReaderWithPixelBuffer.h */, + D4876241413E9B62B9F4FF4FCBFBC93B /* opengl_ColorBufferReaderWithReadPixels.cpp */, + A463F67D31F18A3E8817C9388BDDEADD /* opengl_ColorBufferReaderWithReadPixels.h */, + 4C18B2ECEE548A1C91E8FE550A347BFB /* opengl_ContextImpl.cpp */, + EAFE7943BDC2A2EA16E70C5B9E8335BE /* opengl_ContextImpl.h */, + F7FA66BA44508C8E1B3BC97E5590E2EC /* opengl_GLInfo.cpp */, + 86EF6CED706D9CF50812AACFBA3D3205 /* opengl_GLInfo.h */, + 42C3DAEC5A0976AE04AE5AC97395DF48 /* opengl_GraphicsDrawer.h */, + 0A35B20685D6B2F22C568D23E73C3E50 /* opengl_Parameters.cpp */, + 3A52EF817DA55C490E46C80C1AF0F283 /* opengl_TextureManipulationObjectFactory.cpp */, + 6E1E1C9F6B0A62DA55FDEB54FB33235C /* opengl_TextureManipulationObjectFactory.h */, + 5B5206BC0DB3FB590107A53EBAE4647D /* opengl_UnbufferedDrawer.cpp */, + DFDA1E12C63A8E139E0F5F52E6F63F9D /* opengl_UnbufferedDrawer.h */, + B4A650EA7BBC2B23A0D479A0DA4FB270 /* opengl_Utils.cpp */, + 18F94CD2A593A3820ECA68A3AD91377F /* opengl_Utils.h */, + 8E93063E13A4FFF1034612F432FE1CB8 /* GLSL */, + 11A597BF832E8961EA3D9A46BDCB6BDA /* GraphicBuffer */, + 2EB6FA4A225204F037A8883D88789CE8 /* mupen64plus */, ); - name = common; - path = common; + name = OpenGLContext; + path = OpenGLContext; sourceTree = ""; }; - 379EDBEE1FDEF89DA0644E2AB949F551 /* SFML */ = { + 3039EA92A7CC3597A09418CA6DCCE487 /* gba */ = { isa = PBXGroup; children = ( - 5AFAA8FA90B64741C5F3169D7938790B /* include */, - DE17DF46EF74082FE7270E1C29484DB8 /* src */, + A5E001A6FF56533ACBC3F6E950D52560 /* agbprint.h */, + A493D236FBEDB31AE7799E82580CE1E6 /* armdis.h */, + 3300F6B66FF14313A41952BEDB638D10 /* bios.h */, + 512C4AAABBC20D346C24998DFEE5AFA1 /* BreakpointStructures.h */, + C64D454F5583AA5EC3D926CB2248F4F8 /* Cheats.h */, + AA4BF92FD0BDB1CA2D2C3D91B8F13226 /* CheatSearch.h */, + C769B8DF9FD73419F7A8CE7F4C7192F4 /* EEprom.h */, + 93D345212AEDE1FC050CD40AF657590D /* elf.h */, + 52F99D4811CD8DBB2B4EDC0AB616E6B4 /* ereader.h */, + 03D0F6F861896F902FD904A5CA166856 /* Flash.h */, + A8939FA4EA41B857876F33812D829B63 /* GBA.h */, + 1575109B49D2770633104AF8986A3F36 /* GBAcpu.h */, + 6D0B8740C1A5A02C3EBF2D3FF634FACF /* gbafilter.h */, + 0893F87C0C44883CFA0FF8BD37E0CB50 /* GBAGfx.h */, + A3CE24F478FF46EBF0A19AD377B420DF /* GBAinline.h */, + DB6A84DCE2259D650CA6872E7BC6A3C9 /* GBALink.h */, + 6A720235BC5442B027233F68A35C4613 /* GBASockClient.h */, + BB49743C9C35F2C946022473E1E84595 /* Globals.h */, + 8FF9B56C14F9DA7D4C860A76893C21C5 /* remote.h */, + 311F5E992C4184B1925C4E380CBBEFB5 /* RTC.h */, + 2036AE04F921EB54A23BE7D3307D5B57 /* Sound.h */, + 06E98AF28DEE4396FAC50A659A97D1F7 /* Sram.h */, + ); + name = gba; + path = gba; + sourceTree = ""; + }; + 30CBD890C0BCC858BDF5624DA689435D /* SFML */ = { + isa = PBXGroup; + children = ( + B31234679B2E5605E7B76D119E18D1EA /* System */, ); name = SFML; path = SFML; sourceTree = ""; }; - 37C8E97EA413DC80A7D0F4C499EC79CF /* src */ = { + 3124B06ECBF78C8E27AF52B1E91B7A97 /* Resources */ = { isa = PBXGroup; children = ( - 3C33E4A59D390AF25D605A289B4F902E /* AutoBuild.h */, - 035FBCDBD0BE435F0A0EB32A2C22FAD3 /* NLS.h */, - FE62BC22E0353D209B86497B9841EB46 /* System.h */, - 555DB2B83943DAFAC8FBDB0E065CCC16 /* Util.h */, - 981655FB7820A023EE5286842289AB18 /* common */, - EC2170727E87969CEE48058554CEE957 /* gba */, - F8BFD89AC7030A2275F68E37537F7FBC /* sdl */, + 028754304C5C372FE9E27565F32DD4FC /* RSTCollectionViewCell.xib */, + B2723BE48759EFEE2711364010F06BAF /* RSTPlaceholderView.xib */, ); - name = src; - path = src; + name = Resources; sourceTree = ""; }; - 37F897955AA49811B78966F0084F182B /* Support Files */ = { + 317F2209193ECAC1400B252623ABB9E8 /* Download */ = { isa = PBXGroup; children = ( - E44669EDF7D46C5AEA1F287C0BCB9E65 /* Harmony.modulemap */, - 6E6ABC72122793A5F3381924CC2D9BE8 /* Harmony.xcconfig */, - 4D42075157F824B1040606B316473092 /* Harmony-dummy.m */, - 9D85665615A489DF6583D7E19CC9D2B4 /* Harmony-prefix.pch */, - 6B551B63369A33A731AE3B25B4C7E772 /* Harmony-umbrella.h */, + 5C643171D31A2715E757D5F42F63F495 /* DownloadRecordOperation.swift */, + 450775B09B5A404AD4A5910F22DD06C9 /* DownloadRecordsOperation.swift */, + 8B914A55A521830F330AED535B8835A5 /* FinishDownloadingRecordsOperation.swift */, + ); + name = Download; + path = Download; + sourceTree = ""; + }; + 31DA7F6969B04ECA08F4A532B26E06E2 /* Game */ = { + isa = PBXGroup; + children = ( + 65E0BB76F563A560B6025A701C5B300C /* GameView.swift */, + 50CB8263181606A93C7C4DB62B954BCC /* GameViewController.swift */, + ); + name = Game; + path = Game; + sourceTree = ""; + }; + 31EB90F0FBC5F6103FA7CBBB49146EA4 /* GL */ = { + isa = PBXGroup; + children = ( + 068F16B4A783E37E5CD5C1D3B713CEF0 /* glcorearb.h */, + F52405E64C06D130B0AAD913D760D8C8 /* glext.h */, + 46E7ACB3EEB07EF50F5C2B657C683EC7 /* glxext.h */, + FE48EE5ECA5693381EB62AA0D741E0E8 /* wglext.h */, + ); + name = GL; + path = GL; + sourceTree = ""; + }; + 322843645E16A218E3E21F7F1031B2EA /* include */ = { + isa = PBXGroup; + children = ( + 7D30CEF36E3AA4864FFBED8A11EDFD63 /* SFML */, + ); + name = include; + path = include; + sourceTree = ""; + }; + 34F07BD4211F96BC77CF6DA127F4E746 /* x86 */ = { + isa = PBXGroup; + children = ( + B83651383886121680F6529DF69B391E /* assemble.h */, + 9A8B2E0208C481115411CF2ED0F5D7C4 /* assemble_struct.h */, + 449B71A4095E57DA96AFDEEE78EB922C /* interpret.h */, + 8E5F937130AAF165D6DC4D8C10E22FC7 /* regcache.h */, + ); + name = x86; + path = x86; + sourceTree = ""; + }; + 3521A84F3F4AAF5546D9FF8E217DCBD3 /* N64DeltaCore */ = { + isa = PBXGroup; + children = ( + 726D24F1EA7CAFABF7D076481DDCA9CD /* libMupen64Plus */, + 028977E75ED73C330A7CC24AEBCD6BF9 /* Mupen64Plus */, + 8D18321862CF2DC555EBA43EF95699B8 /* N64DeltaCore */, + E8DC4BF07D5A34F18CC5352183BAF19F /* Pod */, + EEFD942E572DB2BDACD223532A635ED7 /* Resources */, + CD7BB577140F671088CB14E3EA3B920F /* RSP */, + 50EE9B6B5490169EB9B67375D97F0486 /* Support Files */, + 7CCE505326AA63497CACBA1133203D26 /* Video */, + ); + name = N64DeltaCore; + path = ../Cores/N64DeltaCore; + sourceTree = ""; + }; + 366AC8E4EE8EEC45E40DA1F8B08F3A38 /* Controller Skin */ = { + isa = PBXGroup; + children = ( + 7C0B98385921997315465A09CF1CB184 /* Standard.deltaskin */, + ); + name = "Controller Skin"; + path = "SNESDeltaCore/Controller Skin"; + sourceTree = ""; + }; + 398DEDE00FCE7A23BCCBAFD53B0CCC44 /* Support Files */ = { + isa = PBXGroup; + children = ( + 93025F4FEFDBE0D027E4CD70D1951BF9 /* DSDeltaCore.modulemap */, + 5FA6C00DDDB9434F8C592657E4CF0E8D /* DSDeltaCore.xcconfig */, + 202473EE9351AD87378741BBD152C958 /* DSDeltaCore-dummy.m */, + FF90EA24CCB5A6F5E8833E1F961EF519 /* DSDeltaCore-prefix.pch */, + 4C7136242783A97DD4FA174D6AD000A7 /* DSDeltaCore-umbrella.h */, + 7F0C88099340B4BDDC86A5E8AF05C183 /* ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist */, ); name = "Support Files"; - path = "../../Pods/Target Support Files/Harmony"; + path = "../../Pods/Target Support Files/DSDeltaCore"; sourceTree = ""; }; - 3940BB7F493B1F4452B0290020CCEB56 /* Protocols */ = { + 39C38054717088C7ED491162FDF48493 /* xxhash */ = { isa = PBXGroup; children = ( - 60C7CDBA93C7797D9E83FBA84FAE7FD2 /* RecordEntry.swift */, - 496FED89B31EF5869368A5EC4A3DE18E /* Service.swift */, - 437F2293962BC32124208AB59C25F268 /* Syncable.swift */, + 5757E6631870746B4C21422C420F062C /* xxhash.h */, ); - name = Protocols; - path = Harmony/Protocols; + name = xxhash; + path = xxhash; sourceTree = ""; }; - 3947B40AEF7771B4A4C8CB9580BFE4B9 /* src */ = { + 3C7EB2136671F3B59680E97AAC3BD696 /* Types */ = { isa = PBXGroup; children = ( - 0798506C053FB81EBDF4F4EF5E7C226A /* arm_jit.h */, - 6249457A28CDE33CCE657105EDBF5C7C /* armcpu.h */, - 451269EF812651EDABF4A20D0D0EC707 /* bios.h */, - 79B10B2722F1132312871D229953F2DA /* cheatSystem.h */, - 2CC9F125F98839707615EC7F6D62E31F /* commandline.h */, - 696FB5C2FDDB6402D85459020872DE22 /* common.h */, - 9BF45B3F1647C84F90A4C140F217F89D /* cp15.h */, - A2E8E678B7D4B407202D422C8CE42DA0 /* Database.h */, - 9EDC9128CC8CDBCC9CCCD7AA3E759AA2 /* debug.h */, - F76D8AFD80E7A4DAACF521163CC4B26C /* driver.h */, - 237B84F01B49BFC3E63C9FE3F3D458FC /* emufile.h */, - 7362D3AF48B22723885E66B0D25420E5 /* encrypt.h */, - 4CCF50735B54E7E32704485AE919ABB5 /* FIFO.h */, - 4C7AF11CE5076877102C9C295769C622 /* firmware.h */, - D2787BB38A3A6EE118F7DC347429E78F /* gdbstub.h */, - AB93D8ED4B2543F199979AA5F4CDF7EE /* gfx3d.h */, - BECCB76E1F55FC84F3E9C1EBD272E746 /* GPU.h */, - 8B8B22C2F3B453B4853E09852C790FFB /* instruction_attributes.h */, - 916788F0642B21A136DE8950DB47B018 /* instructions.h */, - 41BA2F4E4D2870FCE74225CB5BAA4CE5 /* lua-engine.h */, - 810C174C92F9D6B39CFFD8CDEA0902A6 /* matrix.h */, - A495E80F9829E07964438D8A564E126A /* mc.h */, - 7DB43450886939FC8E10313F46E479D1 /* mem.h */, - 414ABC5418ACBADFD1E0682648431076 /* mic.h */, - 81699BBB7E4A8A98AF2985A53BE0E791 /* MMU.h */, - FC781DAF311B76B2BBAA2DDD268A94CD /* MMU_timing.h */, - B4621F5E2074F440324D7C9E0D8C9D88 /* movie.h */, - F2AB56328583FAAF95D7D3FFD81FEB33 /* NDSSystem.h */, - 2470D300240FF936891A6DA2EBE0164B /* OGLRender.h */, - 4B02B3B5A0036A6726FBD9167A2946A9 /* OGLRender_3_2.h */, - 24C0E7C293EBDFEBA516E17AD1564246 /* PACKED.h */, - 9750F2298895C6CB0021A8776937EC4B /* PACKED_END.h */, - 2C685CAEC8DE104E2770BA81F4B87316 /* path.h */, - BF4CCC593653835948DE2077F515DDF3 /* rasterize.h */, - BC60B5824BD4DA2AB25BA85A4C586886 /* readwrite.h */, - D159D83AA74847EB95659739517DA8FE /* registers.h */, - BD2858200C2A47FC9A917133A7D25353 /* render3D.h */, - AB3A5F6A3985C524CE62D3D188B41912 /* ROMReader.h */, - 40FF365F801C636BEE21293A877B902E /* rtc.h */, - DD5EE72E5D4DEF927BEEE94D86725DC0 /* saves.h */, - 04B1ECC7EA8EA09AD63D4DE11E338332 /* scmrev.h */, - BB534F82994E35C0556962CEB04EAF6E /* slot1.h */, - A17100E42D3DFDAD4EC4195E2444448D /* slot2.h */, - 1C0FCDFCC71457C2596AFCEC1DE6839A /* SPU.h */, - AD3187200380A3FB25170D5B9EE0F5DF /* texcache.h */, - EBA62E018BD55A8B1DBF638C1BDE2C3B /* types.h */, - 93B1E65A642EA1EAA4D3043EE455F0DA /* version.h */, - 08A7738B63C4EF018D66094588BB33F2 /* wifi.h */, - CF847D0CDB6821E22995CD53B6D9B9A8 /* libretro-common */, - 10C2CD51180AFA21BD554BBADFAC9630 /* metaspu */, + 13D3D42973146D80916E32B3BBE3D0A1 /* ExtensibleEnums.swift */, ); - name = src; - path = src; + name = Types; + path = DeltaCore/Types; sourceTree = ""; }; - 3958CCBE1C4FE437EB8762E6E7E7CBB4 /* apu */ = { + 3CA154314EF9C5B78947397218A225E8 /* Resources */ = { isa = PBXGroup; children = ( - 4EC7300212B3C57CD396DDC7242519F3 /* apu.h */, - E303B73D343B4496C9C1319F3E187317 /* hermite_resampler.h */, - 75A920E2918B272736AC688F14B6F096 /* resampler.h */, - F17010739364C5C3A5C00A7849EDF47C /* ring_buffer.h */, + 80C066584D91192C2CB5B4E7606E8F20 /* Standard.deltamapping */, + CADEE429BD43EB9C7B8E0AB43967287A /* Controller Skin */, ); - name = apu; - path = apu; + name = Resources; sourceTree = ""; }; - 39DFDC165F70938594DE6987643A453E /* r4300 */ = { + 3CB2B35203C1BE5309CFD0B5D3E4AA68 /* board */ = { isa = PBXGroup; children = ( - A3B60534D5E0521E52D17D41457801B7 /* cached_interp.h */, - D4AAED9CBF41BDAFF1EE1D4E400FDF87 /* cp0.h */, - 254CC3AD77C6322C8CA4B65F52B9F198 /* cp1.h */, - 6FD1CD254FC9810DC969445799C4AC02 /* fpu.h */, - 89C8E96993FFE0F04D42EF2FC57593F3 /* idec.h */, - EC16A6C9E22D1924AE516F38A6DBFE58 /* instr_counters.h */, - AA0028E9A2FCB06AF3C4FF32FF90DA06 /* interrupt.h */, - 85384C51860DF6A3AB223E1B8439C471 /* pure_interp.h */, - C65A2F325C6EA118286DBBC4484E5404 /* r4300_core.h */, - 02F79C936D7C91B742192824860F638C /* recomp.h */, - B95AF3A3928659911B5866BCB18F168F /* recomp_types.h */, - C9F883F7F8E0CC8223971F5D3F4E6D89 /* tlb.h */, - 2C9B9652A353883F8A6CF2689D99A328 /* new_dynarec */, - EBB17EA90FE6634062678776E354459E /* x86 */, - C62148EE2C694AD9CB1B5035900C5E8E /* x86_64 */, + AE6A38985CB70BB9472E2EB009DD360E /* NstBoard.hpp */, + F4C6BE6BA9CC949F3EDA941ED2CBEB38 /* NstBoardAcclaim.hpp */, + 73AFCBDE3C3C3422A99EE597CEF40C70 /* NstBoardAcclaimMcAcc.hpp */, + A5F66A556F030CD38AA0B3F7B66C5FE1 /* NstBoardAe.hpp */, + 190388E1589C7BC638B1410EA970D133 /* NstBoardAgci.hpp */, + 290CD775EF514EB180E591FA1BBD9EE9 /* NstBoardAve.hpp */, + D164ECEA35ACB2EFAF45DFBDE6086CD3 /* NstBoardAveD1012.hpp */, + D5D7C859DA53707D68A0C6096E4FD656 /* NstBoardAveNina.hpp */, + 7BEE27F7FF7F6E7CA6DBDA14F15340BC /* NstBoardAxRom.hpp */, + C35789A01031A859DE9488BAE0FC99C9 /* NstBoardBandai.hpp */, + 75A75028AFBA185D5D391D73DC4FE6AB /* NstBoardBandai24c0x.hpp */, + 7E503925F21124A66FEEC07D1E779631 /* NstBoardBandaiAerobicsStudio.hpp */, + 04884C74271D3DFEF181C2C3A302F1EA /* NstBoardBandaiDatach.hpp */, + 97F73835395FF3DB0096CD155B20FB9F /* NstBoardBandaiKaraokeStudio.hpp */, + 7103DD1615CC67B6239304B8B4BE2F06 /* NstBoardBandaiLz93d50.hpp */, + 743D60A80C02E747A93C054B7CE7F1E9 /* NstBoardBandaiLz93d50ex.hpp */, + 16334C263B60314F60B061077457ED0F /* NstBoardBandaiOekaKids.hpp */, + B129D85783E2A83AB72F44B1BF92B9D9 /* NstBoardBenshengBs5.hpp */, + 8693CF6D0BA1054AECDB9EBCB129A363 /* NstBoardBmc110in1.hpp */, + E9B5611EF6F1B6A753A3169A802B611A /* NstBoardBmc1200in1.hpp */, + 1195B6998FE8421EBA77EB210A43B4B4 /* NstBoardBmc150in1.hpp */, + 5D7960122A08AC82F9286C7A2E2275F2 /* NstBoardBmc15in1.hpp */, + F376A1194EDAFFBDE131906336FB08BB /* NstBoardBmc20in1.hpp */, + F11EA13357D6F351A1A191DA33451B01 /* NstBoardBmc21in1.hpp */, + 56CCBC3C2C82EBF029DCEE7C08413CD2 /* NstBoardBmc22Games.hpp */, + 813D0026660BC9FA9BE9781E84D1F4A9 /* NstBoardBmc31in1.hpp */, + F931544B104EDCB547B089F7B0707ED8 /* NstBoardBmc35in1.hpp */, + 3347C3BDA90B90C1FA03156B774C2A1E /* NstBoardBmc36in1.hpp */, + B1E6115DADF781FBC5286DC05270CFDF /* NstBoardBmc64in1.hpp */, + E34BFCB88D5BE82E1084754358F46958 /* NstBoardBmc72in1.hpp */, + 491A54EEB06C94D08F280F0DE9437646 /* NstBoardBmc76in1.hpp */, + E2B96FEA76E92236E75F0848DE0D7ADD /* NstBoardBmc800in1.hpp */, + 495697E3F178E65EB3DA72E358CB964A /* NstBoardBmc8157.hpp */, + 873C9B1C70581E3ACE0CEA93EA9568DB /* NstBoardBmc9999999in1.hpp */, + 1D8AA62CF8EE1D7BD51C30F2874CC2D2 /* NstBoardBmcA65as.hpp */, + CDCA56A230FEF11250C8907E001346C3 /* NstBoardBmcBallgames11in1.hpp */, + DB8FE8CE43E3908EA8654AD9FBFC9667 /* NstBoardBmcCh001.hpp */, + 3B33F3D270F71B002370D6D901A9EC19 /* NstBoardBmcCtc65.hpp */, + F872C43256DB5C1C7D80F3F0E8E9CE0A /* NstBoardBmcFamily4646B.hpp */, + EEC4678594429BB9CEE4C8F14CE8FB18 /* NstBoardBmcFk23c.hpp */, + 18185E2750AF215989A1C8875DDD67B4 /* NstBoardBmcGamestarA.hpp */, + 47FFA445106E8AEF055315EC32F6416C /* NstBoardBmcGamestarB.hpp */, + A39CE9386E2F879AC7F871D7209746FA /* NstBoardBmcGolden190in1.hpp */, + EEF6D1011DA5B2381B452C7A4A848E70 /* NstBoardBmcGoldenCard6in1.hpp */, + 0E4E5A811FD38FBBF35D0F783DD6B5D9 /* NstBoardBmcGoldenGame260in1.hpp */, + 430D8BC642B862DC5871DCA6D4D4B26A /* NstBoardBmcHero.hpp */, + FF0C7BE73DA19DD12046FF44E95DC7E7 /* NstBoardBmcMarioParty7in1.hpp */, + 8000DA34B53DFAB07C0D683921D81892 /* NstBoardBmcNovelDiamond.hpp */, + D23E1E808E48E9849AB52E92FEE110B2 /* NstBoardBmcPowerjoy84in1.hpp */, + 95C3DB2A71F9C27A5D2A146D6247E970 /* NstBoardBmcResetBased4in1.hpp */, + B3F49F00CD6F1E7B2934D5D66A3DED6C /* NstBoardBmcSuper22Games.hpp */, + 29E044818E33EA28D605B83708C47299 /* NstBoardBmcSuper24in1.hpp */, + B5AE816827C6AA5796CDFC4C7E83D492 /* NstBoardBmcSuper40in1.hpp */, + 5B4B6B605F69B9997410194A1E0CB31D /* NstBoardBmcSuper700in1.hpp */, + EF7A8D3A9BE30CD2125BDFF488D22A25 /* NstBoardBmcSuperBig7in1.hpp */, + F021EBB9B583D41D119B66FBC95F7F2C /* NstBoardBmcSuperGun20in1.hpp */, + 9B772B195955E19223C5D696AF8E884E /* NstBoardBmcSuperHiK300in1.hpp */, + 253F6A4732CDD605581DABD45CD0B43F /* NstBoardBmcSuperHiK4in1.hpp */, + 2098A1D3BBCAAFB3A5D52959C3751342 /* NstBoardBmcSuperVision16in1.hpp */, + 8A25DA0D46D9C9C287A50225828AB7C6 /* NstBoardBmcT262.hpp */, + 9469FE680E41D7D8C8AD938E3450532A /* NstBoardBmcVrc4.hpp */, + C74DB15319EBC3307C2EB1ECF5912CD9 /* NstBoardBmcVt5201.hpp */, + DF4AAA0AF5429BDB84A1B9464A02940C /* NstBoardBmcY2k64in1.hpp */, + E264A0D34041EEDB230760A4DF155023 /* NstBoardBtl2708.hpp */, + 8854FB70C2F1990688897351E465107C /* NstBoardBtl6035052.hpp */, + DF5405AEB7C1FBC155A415D86594377C /* NstBoardBtlAx5705.hpp */, + 0D2603FBE6D0E88895754984334C87D0 /* NstBoardBtlDragonNinja.hpp */, + 004BF1A3CCAB8016603DA7935B203E8B /* NstBoardBtlGeniusMerioBros.hpp */, + BDFE520B92F8D1422A24E28BA575C2F0 /* NstBoardBtlMarioBaby.hpp */, + 560CD792E13012FE41D46832508B9D30 /* NstBoardBtlPikachuY2k.hpp */, + 406A09A4EB4DA79E27112B7E71A89701 /* NstBoardBtlShuiGuanPipe.hpp */, + CD3757C91C65FB4E4EBAB668470109FE /* NstBoardBtlSmb2a.hpp */, + A339C9C5BFA6F1000B405E8BE54F026C /* NstBoardBtlSmb2b.hpp */, + 6B341B464E13F5C77115D01AF3A303C0 /* NstBoardBtlSmb2c.hpp */, + 58E06EE5B6AC0AC69AFF39EDEB578E6E /* NstBoardBtlSmb3.hpp */, + 73ECDB6212A48398010C7457141CC1B2 /* NstBoardBtlSuperBros11.hpp */, + CD957EF417E4ED855F413792CFADBB28 /* NstBoardBtlT230.hpp */, + 056855D6563613F5941E73E167520BEE /* NstBoardBtlTobidaseDaisakusen.hpp */, + E6E22BF5B1C689D0C6A59216C3AF5E74 /* NstBoardBxRom.hpp */, + 65C8737805E86FA67C1579855D59CB64 /* NstBoardCaltron.hpp */, + 4FD9C6FE532DA80FB560837003DB3F08 /* NstBoardCamerica.hpp */, + 2BAAE966AB05A1DCC9AA7B693D69F0D0 /* NstBoardCne.hpp */, + 94A3287DE1F597EEEB81597618FA9901 /* NstBoardCneDecathlon.hpp */, + 8D03641E7133709402578F9CCAF2CFA6 /* NstBoardCnePsb.hpp */, + 04131E906A312EC3EC8E75626EEA8233 /* NstBoardCneShlz.hpp */, + 9E7BF5046B171FA0104A3B0A7F9DD407 /* NstBoardCony.hpp */, + 698C748E342E77F1EA0CBA79A28CAC0B /* NstBoardCxRom.hpp */, + F3748CCE76F2C007B8EF3A629BF5C282 /* NstBoardDiscrete.hpp */, + B72A5A5016919006907A70C26E61B891 /* NstBoardDreamtech.hpp */, + 49479F202B609744C82D4138F8FCD9CE /* NstBoardDxRom.hpp */, + 29AEB4740EA971386FE4B6750AA2EB59 /* NstBoardEvent.hpp */, + 4964760304F643497DF38EA719CD28CA /* NstBoardExRom.hpp */, + 24BD46060B81FB987DC76C420D9D0434 /* NstBoardFb.hpp */, + 48362C4E645985DF12660BB2415B0487 /* NstBoardFfe.hpp */, + 6F58E0B7D553A24812938BBCA1D73D71 /* NstBoardFujiya.hpp */, + DDDDABB6EB20FCEABADC4F4B42F10D74 /* NstBoardFukutake.hpp */, + 459B516EA16454D8B783A5E6A1106CDD /* NstBoardFutureMedia.hpp */, + 06A49EC7BA9A5FD79AC2FE0923FBCF54 /* NstBoardFxRom.hpp */, + 452F3BC887D4177C15C6B566333C123E /* NstBoardGouder.hpp */, + FB1D4DE902DAAC0A8831F7A63906AE6B /* NstBoardGxRom.hpp */, + 63F723BED507FF2FF061CFBDA2D2DC5D /* NstBoardHenggedianzi.hpp */, + F9A208B7D6A17B5E6210F640474730F8 /* NstBoardHes.hpp */, + 1D48E1464F25EE094AB21C99E9CDC8BF /* NstBoardHosenkan.hpp */, + 183E1BFA0F57AF969EEA014FEB426220 /* NstBoardHxRom.hpp */, + 20D9584841AECE27BBC056E45740941F /* NstBoardIrem.hpp */, + D81B0A638756575C41CA82842260A641 /* NstBoardIremG101.hpp */, + 83F4160DB27DAF789E0C84F4BE223EAD /* NstBoardIremH3001.hpp */, + A85F73017A0A333E87CA16A1492A235D /* NstBoardIremHolyDiver.hpp */, + 71AB68FE56ED4BF2433BBC850D1026C5 /* NstBoardIremKaiketsu.hpp */, + 00B03766966DBCB90906DC6BD97E2035 /* NstBoardIremLrog017.hpp */, + E551214789CB8350262743FF9EF95629 /* NstBoardJaleco.hpp */, + E8D1644FE6C9B9EA40479CBCFD2D7CC0 /* NstBoardJalecoJf11.hpp */, + E10F919F295AF23B2D729F89AA44145D /* NstBoardJalecoJf13.hpp */, + 50D957B423EE92BE50F11FBFBB2F7951 /* NstBoardJalecoJf16.hpp */, + 9AB2C2CCEC496A1EE69FB5F1EF214B1A /* NstBoardJalecoJf17.hpp */, + 6FEE36BBE5119D88DE64B64D975EC87B /* NstBoardJalecoJf19.hpp */, + EFDB6C6F57F2A3D44F48F431F3C13B71 /* NstBoardJalecoSs88006.hpp */, + 3479E4ABC7EA56616AD7804B53308F24 /* NstBoardJxRom.hpp */, + 1559231E2BE01D21A0445943D40BD8B9 /* NstBoardJyCompany.hpp */, + 75A5C15DC18E79C28375E74324A85E26 /* NstBoardKaiser.hpp */, + 3E468629CDCBD9A934833FB33710BC38 /* NstBoardKasing.hpp */, + ED915D94AD96A862B32BB7B60A454CF2 /* NstBoardKay.hpp */, + 789D5CFDF81A92162003BEBF18BA3C20 /* NstBoardKayH2288.hpp */, + 4E6419448B960F583D9AD9ECC8EC8B7D /* NstBoardKayPandaPrince.hpp */, + D5FBF61FEAA24AC5DFA51366F3A14D23 /* NstBoardKonami.hpp */, + 36B43C04D7CC65CE9AD7C42E09A75A07 /* NstBoardKonamiVrc1.hpp */, + 431243B7F84E2298319F60EF40D02386 /* NstBoardKonamiVrc2.hpp */, + 237AEE8BB0BEDA0F90CBA83BE3E11B81 /* NstBoardKonamiVrc3.hpp */, + AEB306B4037EA4CACDF06823F9F7AAAE /* NstBoardKonamiVrc4.hpp */, + A6A4DBE5C518B74416FB8A4EB9D967ED /* NstBoardKonamiVrc6.hpp */, + 16A6E4F9D5B593AB01D5A49340300BCF /* NstBoardKonamiVrc7.hpp */, + 0636E7B8F2E8F376A9BF6CEC67B0B615 /* NstBoardKonamiVsSystem.hpp */, + DB36295AA4074B36829063D11A8BDC98 /* NstBoardMagicSeries.hpp */, + EE1BB2C196F721EAE216A16D2C28F108 /* NstBoardMmc1.hpp */, + 13B7FFD0C9DAEC7BACA3614D558B1227 /* NstBoardMmc2.hpp */, + 599BB76DE3FA8F63E0E23EA8BAFD278B /* NstBoardMmc3.hpp */, + 10A0472CDCFE1CC45A359E5838CAB872 /* NstBoardMmc4.hpp */, + 0C864A48A744E0C4E9B10806107515B8 /* NstBoardMmc5.hpp */, + C96DE12BB01FD7E95F041A594A9910CC /* NstBoardMmc6.hpp */, + 4C59CCAD19BF6E186912BBD6E16E4AF4 /* NstBoardMxRom.hpp */, + 2135E69E6A4F906CD35BBC26E511A87E /* NstBoardNamcot.hpp */, + FDBE09509A57E9C26585D21FA1FB381C /* NstBoardNamcot163.hpp */, + 4777A754C8B992D16F19E6669E3983F8 /* NstBoardNamcot175.hpp */, + E70D8FFEBC5CD9356B8F48E495CF4C54 /* NstBoardNamcot34xx.hpp */, + FD63E3F134804425401C1B74686EDF48 /* NstBoardNanjing.hpp */, + F517002D199922653B78176FE67DCA6E /* NstBoardNihon.hpp */, + 4E6CEEF9383BEA7F879EA4F942833796 /* NstBoardNitra.hpp */, + 37B489A0DEA4487857DEFF8A6A5237D9 /* NstBoardNRom.hpp */, + CD746E8386BFDF6E8F7B293E9EA93E17 /* NstBoardNtdec.hpp */, + E42E5A99DAE876C1FA977F57560BA47B /* NstBoardNxRom.hpp */, + 6B0ACCB9EC30550BEF619382B31BE43A /* NstBoardOpenCorp.hpp */, + 6792E65AE4C83CBE644B193BBA1E52DC /* NstBoardPxRom.hpp */, + 7CD443BDF938671B3B442333D9A63ED0 /* NstBoardQj.hpp */, + D4557C24D5CC84F9F3B2999C33F9DE91 /* NstBoardRcm.hpp */, + 5E0F87CCF191867B903270F7A2973CA2 /* NstBoardRexSoft.hpp */, + 5F83D55C13FB6E1F63B5492848583340 /* NstBoardRexSoftDb5z.hpp */, + AA9FA4481CDEC88D482598485C447447 /* NstBoardRexSoftSl1632.hpp */, + B01AC6DC482963FB6A18796241C0A542 /* NstBoardRumbleStation.hpp */, + 294CF6CD997D9E587A99F6DFE61FEC0F /* NstBoardSachen.hpp */, + 8200E4FD4C7E3CC1AF2E0385FF61B65A /* NstBoardSachen74x374.hpp */, + 8523ACBE5D20530D62699515CC0C275A /* NstBoardSachenS8259.hpp */, + 6004CD9FBFF76F6C36F2C167315443BA /* NstBoardSachenSa0036.hpp */, + A9B8FEC06D5E475FC88E23200F3F9604 /* NstBoardSachenSa0037.hpp */, + 026C9449D2CD7E3C08836E3B3C86F709 /* NstBoardSachenSa72007.hpp */, + 19ED46C78502A6DECB9188858E546EFC /* NstBoardSachenSa72008.hpp */, + 8E52E44669D74069EC4BCEB20D5BBB02 /* NstBoardSachenStreetHeroes.hpp */, + 24CA32513A0AE3E1229D4189D3F40C32 /* NstBoardSachenTca01.hpp */, + CE7A2A4BC98670AD316ABDBE9EC069B7 /* NstBoardSachenTcu.hpp */, + 56D472264507A3544C43D6606FB37390 /* NstBoardSomeriTeam.hpp */, + F3922596938CC3AC96994BC5EBAEC217 /* NstBoardSomeriTeamSl12.hpp */, + 0BA3AC744A6D8C4122D7F2407E0AEE17 /* NstBoardSubor.hpp */, + 73166C752BA3D0BEFE30CD25680CA1E8 /* NstBoardSunsoft.hpp */, + BCC7AEE83CB780E73856EB51DA7F5363 /* NstBoardSunsoft1.hpp */, + 50B7464DE19879312AD16F0F9584E7C7 /* NstBoardSunsoft2.hpp */, + C021C2B8A573225A193057ADC5D4155F /* NstBoardSunsoft3.hpp */, + 1CFCC0E9B1069C5E4DE9B21620D39BEE /* NstBoardSunsoft4.hpp */, + BF0FD474F9FEB46BE9E7E78E2AC5A906 /* NstBoardSunsoft5b.hpp */, + 23044889E5A6DCEE916A2658C83A085B /* NstBoardSunsoftDcs.hpp */, + 69F05BD9CB2FBF76E6BDDB0F64BEDA8F /* NstBoardSunsoftFme7.hpp */, + 1FBDF4ACD90B4DED1F33312B991DB618 /* NstBoardSuperGame.hpp */, + 0B34BDCE67F7297CE2E1F3FBE65E622C /* NstBoardSuperGameBoogerman.hpp */, + DD7037B9236081F8835FD977759FC372 /* NstBoardSuperGameLionKing.hpp */, + 5884B3D9687E41073D6AE9F4960640D8 /* NstBoardSuperGamePocahontas2.hpp */, + D0643302DC4E42474BC7E1B5E9903519 /* NstBoardSxRom.hpp */, + 5C9FC5FCE0B5F88A589CF0363028B43C /* NstBoardTaito.hpp */, + E73487409C40B8A2E9B7483BFF193799 /* NstBoardTaitoTc0190fmc.hpp */, + BBD164DBFFAA1294217B9F595993108D /* NstBoardTaitoTc0190fmcPal16r4.hpp */, + 94AE1145010E024A90A0B90A56727300 /* NstBoardTaitoX1005.hpp */, + B8A07AF8FA08DD189EA38E162C486A42 /* NstBoardTaitoX1017.hpp */, + 53B591BF7B60187B760A42DB71431BB9 /* NstBoardTengen.hpp */, + 59DA3AD3BCE17B64234F6C8CDB4FAA0A /* NstBoardTengenRambo1.hpp */, + 64B42722A5333410D786C90D454E41C8 /* NstBoardTxc.hpp */, + 85245105BDC64E12FADEF30BE855FEC1 /* NstBoardTxcMxmdhtwo.hpp */, + 7A09B431279F323517C8EF6B08DBA5D0 /* NstBoardTxcPoliceman.hpp */, + E07126E3FC357870F5EAEC48FB308C9A /* NstBoardTxcTw.hpp */, + 725E5E4B6601C9A79B9D7A82DF839C25 /* NstBoardTxRom.hpp */, + 0D13CE77F2679DAE2B0BD39A25C2A0DE /* NstBoardUnlA9746.hpp */, + 7C5579DAAF54EF825979925DDD065815 /* NstBoardUnlCc21.hpp */, + A8E224696F035B298DBC6B2B425DB4D9 /* NstBoardUnlEdu2000.hpp */, + F1CFEE2E88E05706A2CB9A382C9447D7 /* NstBoardUnlKingOfFighters96.hpp */, + C6BBE5B4E442F86207E88DDD286857CF /* NstBoardUnlKingOfFighters97.hpp */, + 2DF776088C2711052EEF4C793C2B806A /* NstBoardUnlMortalKombat2.hpp */, + B67B97B22BF6E290CE3176CF648D18EC /* NstBoardUnlN625092.hpp */, + 0971A5E1176766915B5C63ECBAF0E9A1 /* NstBoardUnlSuperFighter3.hpp */, + 43CE808CD1AE36F53CED9431BA461025 /* NstBoardUnlTf1201.hpp */, + 879E33D39DED7A856D086D3BB622C65A /* NstBoardUnlWorldHero.hpp */, + CF5ED3F5DA210F1A19B3FCA09E19F679 /* NstBoardUnlXzy.hpp */, + 45DE5EDAEF814543E00692730C996AC5 /* NstBoardUxRom.hpp */, + 959E0E9212C0B69B99187171C13A47B2 /* NstBoardVsSystem.hpp */, + 7E97EB0C49F861BC8AC2D75CE54C4EB4 /* NstBoardWaixing.hpp */, + 93A4D0810FAC23701F57EE4E6CA1A7C6 /* NstBoardWaixingFfv.hpp */, + F0427833F381047484915D313051018B /* NstBoardWaixingPs2.hpp */, + 9E96797E03C6BA19B7B506E463067AD1 /* NstBoardWaixingSecurity.hpp */, + 8C90F98584A8B4B3D48149088FD57C77 /* NstBoardWaixingSgz.hpp */, + 2507A2AAACF2F3D12826D941CB970BEE /* NstBoardWaixingSgzlz.hpp */, + CA9FEB0150AF6AC5451F53D2F5EF6259 /* NstBoardWaixingSh2.hpp */, + 13A6DB004300A60DA3D2A6DFE73CCDAC /* NstBoardWaixingZs.hpp */, + D02AD2D93D711FC49FACBCEA4547D87D /* NstBoardWhirlwind.hpp */, + F59EB83ED791F8F1742B8C9049F05E99 /* NstBoardZz.hpp */, ); - name = r4300; - path = r4300; + name = board; + path = board; sourceTree = ""; }; - 3A48D7D6AC876F97FF54F36FA99BED65 /* Extensions */ = { + 3DA8BAA1BE0EAA2225C48F11FBA286FD /* gb */ = { isa = PBXGroup; children = ( - D98981D944CEC9F56A1D909EFAB4FB16 /* PropertyGroup+Harmony.swift */, - 69ABB3390625B7C34F4619CCD4F218E2 /* RemoteFile+Dropbox.swift */, - 70E06F935BCC172832EAFB66DF8A22AF /* RemoteRecord+Dropbox.swift */, - 707D301E564B6E14192946179A6F87F5 /* Result+Dropbox.swift */, - 3B9808132CF6702DDD5DA9C2F9A0C253 /* Version+Dropbox.swift */, + 88F8AB3F41F84C94BBEED8C22E4E61BC /* gb_cart.h */, + 299389570253111A7FC0B2AD359D7A1A /* m64282fp.h */, + B4031DF8DC8C7AA073B8FAD5893715CA /* mbc3_rtc.h */, ); - name = Extensions; - path = "Backends/Dropbox/Harmony-Dropbox/Extensions"; - sourceTree = ""; - }; - 3A728C123D2F42FBF533AE80BAFA1C11 /* vssystem */ = { - isa = PBXGroup; - children = ( - 024F3CDD3E74EDB4AB9DEC89AC1A8D5E /* NstVsRbiBaseball.hpp */, - 6B58A269231B9317967B84F433CD1F14 /* NstVsSuperXevious.hpp */, - 95CD1D48C38E182BA0C36253C2422B8A /* NstVsSystem.hpp */, - 955407B1C8467036B4E43CAD531EECB3 /* NstVsTkoBoxing.hpp */, - ); - name = vssystem; - path = vssystem; - sourceTree = ""; - }; - 3ABF8C52D1D6470681859867551BF5CB /* mupenplus */ = { - isa = PBXGroup; - children = ( - C704B47C4D3D001EC83BB8F7C1E8D2E5 /* GLideN64_mupenplus.h */, - 24F185C35417DF1B6626AAC2D1E5E538 /* MemoryStatus_mupenplus.cpp */, - ); - name = mupenplus; - path = mupenplus; - sourceTree = ""; - }; - 3AEBAEFF2CF8E49D6B051634DB4A599D /* GLideNUI */ = { - isa = PBXGroup; - children = ( - 02871D18AA28905E1FE181B4AEDAE388 /* AboutDialog.h */, - 09764ED9B10646101C0CA4C1EC479B47 /* ConfigDialog.h */, - 50B2D8F8859A064B41E83B36809CD1EE /* FullscreenResolutions.h */, - CB608FA02B2FC02737ED821505210FEC /* GLideNUI.h */, - 0BE9A850D36C7373D36DB707F1F2FD8D /* Settings.h */, - ); - name = GLideNUI; - path = GLideNUI; - sourceTree = ""; - }; - 3BADEEAFA5175C6FB1ACB5685B74FCEF /* Window */ = { - isa = PBXGroup; - children = ( - 2A2F8E82B85B6C622F315EBC51F857CC /* Context.hpp */, - E10172E8D8CCCF9773BF6EA4BEBC7E05 /* ContextSettings.hpp */, - 19C0D312CBF5347DB0447CBF56BF1D75 /* Event.hpp */, - 7DB030D93B94677288CC4FB4807455C3 /* Export.hpp */, - E936FF10A7FD12B81B6130E8D750F73A /* GlResource.hpp */, - 4EFC0CB26048698A849DD6BD85E55424 /* Joystick.hpp */, - DFD8974B1F72F3E8D3FB1FC240A1ABD1 /* Keyboard.hpp */, - 1EE7F9057B40115EF146A96035510405 /* Mouse.hpp */, - D116902F224A7C6DCFCD3121EA7E0745 /* Sensor.hpp */, - 9900B0D2CD9872165A1705598445975C /* Touch.hpp */, - ADC9542E96F656BB89C5311EEBDA9E2F /* VideoMode.hpp */, - 5AC3A6B0034D34F9209BBD58348B9047 /* Window.hpp */, - 593CF251B99826ECC39AE11BE6568BFF /* WindowHandle.hpp */, - FEF7570E80D78FE6F43CCD5722434683 /* WindowStyle.hpp */, - ); - name = Window; - path = Window; + name = gb; + path = gb; sourceTree = ""; }; 3E2CD961D608FA6BBFFBF004C33C5E21 /* Support Files */ = { @@ -5085,132 +5484,67 @@ path = "../Target Support Files/Fabric"; sourceTree = ""; }; - 3EAFDF2E9706DE038061C9E5CBE261F1 /* md5 */ = { + 3F700DBFA82D8C166CD3EC7325115263 /* Unix */ = { isa = PBXGroup; children = ( - 47DCB70C7A85BDDF58BAF31BC42404A1 /* md5.h */, + 07CA97CCF4C09704E6DE0E7275915BD2 /* ThreadImpl.cpp */, + CA7F161EA390DDDF6ECB71EE876B89D9 /* ThreadImpl.hpp */, ); - name = md5; - path = md5; + name = Unix; + path = Unix; sourceTree = ""; }; - 41041585F53BA6BD480438989A571EDC /* include */ = { + 4011A58C5A76E9F8A749065891C1F60D /* Extensions */ = { isa = PBXGroup; children = ( - 025953BB492B1D55BDA573CAC6CE9000 /* boolean.h */, - 0EEE51D19958A4CD2ECFD5DA1245966E /* clamping.h */, - 2E6BE100ACC34617987896C070068D72 /* filters.h */, - F31355AD8ECDC7A336C4AC45A5CD2FDE /* libco.h */, - 91D82360E170EAD9A1C2BFF9FB3ACF33 /* libretro.h */, - FA7FE2BBE843B46F88B62F9D98574BCC /* libretro_vulkan.h */, - 63E04C5EE8B5C9B04E756F888630E85E /* memalign.h */, - D4E18A027874D0E4F2D09A1492E7FC02 /* memmap.h */, - A14800DC259C96954AE16116EC0E310D /* retro_assert.h */, - 57F1FC93C4F0049F6CC1DE462EAD9871 /* retro_common.h */, - EE4ED05DEFBED1E0F613E2EEE0E8500C /* retro_common_api.h */, - F43AF02D4A3D45AB4C91449083C04623 /* retro_dirent.h */, - 1848F23A934DCF2922E385DA2CFEDB81 /* retro_endianness.h */, - D1212ABF80224A615FAA8D5EA7127F55 /* retro_environment.h */, - 185D80DA8DB94398379D2CBC6CB4E814 /* retro_inline.h */, - 9FA46629ADE6C1B6415FE547479F78E9 /* retro_miscellaneous.h */, - 1631DF20959AF33BB911DE604C526934 /* retro_stat.h */, - 6E7206B56B9ED9A2B4822DC503DF31D7 /* rhash.h */, - C37DDFC457F0FC0A072B645839965E55 /* math */, + 723AFC03DAB1F2E32CB45A4F3ED5FD35 /* AnyKeyPath+StringValue.swift */, + 4F6407C6FBA4E320D564FF013EBEDCF4 /* Dictionary+Sequence.swift */, + 7995A2AC9E3D083B7373FC9209B625BD /* HarmonyMetadataKey+Keys.swift */, + 103B62F4A02A6FB81B5873123E3E4EAE /* JSONDecoder+ManagedObjectContext.swift */, + 8D3AABE38A819F833123F47E08B8F6F8 /* KeyedContainers+ManagedValues.swift */, + 2E9FF9B4A3C5693A9C7DC7179EB1F138 /* ManagedRecord+Predicates.swift */, + E04D3872EDD7D06663BEBFB1BB899C3E /* ManagedRecord+Uploading.swift */, + 9B7E86F1B639A123C10CF5C402F415B2 /* NSError+LocalizedFailureDescription.swift */, + CD4A28E12A0F4CA5FB5F949171A2104B /* NSManagedObject+Conveniences.swift */, + 3538A2EB4EDA6929B5D32A095FD21C6E /* NSManagedObject+Harmony.swift */, + E90308ECF32EF009E33F9EEBA9B7C84A /* NSManagedObjectContext+Harmony.swift */, + 36F0EA19BE634583B78B77F370DF9C88 /* NSPersistentStore+Configuration.swift */, + 87263EF46CC8CB36CF6CC2C7E1D63E62 /* Result+Success.swift */, + D030FA73AD1DA503048D364090F865A1 /* UserDefaults+Harmony.swift */, ); - name = include; - path = include; + name = Extensions; + path = Harmony/Extensions; sourceTree = ""; }; - 424C8989A47713EDE517CF1CDBCE2747 /* SFML */ = { + 40A84AA27DDEF94E5A8D58F51C2BA1FB /* DepthBufferRender */ = { isa = PBXGroup; children = ( - F30187F95C53F4957E71ED8DDDC23CC3 /* Audio.hpp */, - 4B51F40AD66946C956A3C40AF6E4E5E6 /* Config.hpp */, - EDF739733FCF6284240B795ECD2EFFB3 /* Graphics.hpp */, - 83D5EF55975A2BFBB9FF14D9389BFBB6 /* Main.hpp */, - 92B20D8D80FF2DF35DE5BB67277F01FB /* Network.hpp */, - 112CF20D5FD3FC49E46B68E39C3831B1 /* OpenGL.hpp */, - 1E5AC9B7C27792EF938FCB5C74BC658F /* System.hpp */, - 998F169B2153317C97A738B28A48F66C /* Window.hpp */, - 84741B209E5F78CDFCE6328319563A75 /* Audio */, - 47357310CF707F619DEB3861008BF828 /* Graphics */, - 449B04AFDA3AF31AAFBA50F5B1031F64 /* Network */, - 6FEE718F6FFE5384C3777E89C1A2F82E /* System */, - 3BADEEAFA5175C6FB1ACB5685B74FCEF /* Window */, + 414687B042C1DA8223948CAE5D99FFA8 /* ClipPolygon.cpp */, + 6C0978994ADA13ACDD55B35B73CF516B /* ClipPolygon.h */, + E29595D0B8DD5D154897A066190504AB /* DepthBufferRender.cpp */, + 0EFF7521BE73EED39D6F3DAC41584A38 /* DepthBufferRender.h */, ); - name = SFML; - path = SFML; + name = DepthBufferRender; + path = DepthBufferRender; sourceTree = ""; }; - 42BA3372D0FA1F2A0881C0A15BB3C68B /* mupen64plus-core */ = { + 40C29E2CDFA90EA6D8C7A604F630643C /* rdp */ = { isa = PBXGroup; children = ( - 5A1EC0892B1F779E42BA265C6547D2BD /* data */, + F650B1818D017BD4A14C1415647FCDEB /* fb.h */, + 193B9E904D8FA162F2935AE2242E5DD4 /* rdp_core.h */, ); - name = "mupen64plus-core"; - path = "mupen64plus-core"; + name = rdp; + path = rdp; sourceTree = ""; }; - 43B8C16CA1C717105AD67D3449A6EA38 /* GL */ = { + 4548026C99C855F1FE979CC41F7447FB /* MFi */ = { isa = PBXGroup; children = ( - 9678A9FCA9931D354FE7CC755CB6541F /* glcorearb.h */, - 801A6C2440FD328341E6550569C3A232 /* glext.h */, - A270C7CB63DDB996D27A472D7B07D460 /* glxext.h */, - 1F83AE270F6F4A14D5507A9E883EFA01 /* wglext.h */, + E0FE60C5CC43E6BEE71A9295033B18F2 /* MFiGameController.swift */, ); - name = GL; - path = GL; - sourceTree = ""; - }; - 43FBF70E4A21562133E286C7860ACCE8 /* Pod */ = { - isa = PBXGroup; - children = ( - 8E0EF6B3B03ADAA45342D1E3EC169D8E /* GBCDeltaCore.podspec */, - ); - name = Pod; - sourceTree = ""; - }; - 44774FEADB9DBAB7FA8987857610D470 /* si */ = { - isa = PBXGroup; - children = ( - 7A9548EBDD461D42A4F3BBAEA839E3DA /* si_controller.h */, - ); - name = si; - path = si; - sourceTree = ""; - }; - 449B04AFDA3AF31AAFBA50F5B1031F64 /* Network */ = { - isa = PBXGroup; - children = ( - 71FBFADC850B449A9B9A5C0D9F8BFD67 /* Export.hpp */, - EE47B1882C5096303AD365307905B712 /* Ftp.hpp */, - 6FBD67C48E00871A2582075478C8DA5B /* Http.hpp */, - 34E1D0D9185BAD35EFFEE1914BE57762 /* IpAddress.hpp */, - 30DCADC540C43841BB69ADBF07E2D033 /* Packet.hpp */, - 14F79C2A5CD47627B9F83711162D50E0 /* Socket.hpp */, - 1649F44ED2BD21529BA16B7B2A429793 /* SocketHandle.hpp */, - 6207EF118B9280CEDE13421C4CF64C8B /* SocketSelector.hpp */, - 43B52186D0ADE3F0F74317B7F542BF3E /* TcpListener.hpp */, - 396CAC416CA887F60CA5BB303E7782BE /* TcpSocket.hpp */, - C2A0EC04B2612AA6AB035B6AB1B3FAE8 /* UdpSocket.hpp */, - ); - name = Network; - path = Network; - sourceTree = ""; - }; - 458060462E570AF0419D767088046F1D /* inc */ = { - isa = PBXGroup; - children = ( - 8D296A26945CFBCEEA746096B5AFC66D /* png.h */, - FB49300C86877DD38ED8922A53CA96E1 /* pngconf.h */, - 40BF1C58E8788FDF52E4550CE38FFF13 /* pnglibconf.h */, - 5067F54BACFB55351717D53F24D5E781 /* pngstruct.h */, - 5DE84C1C459F13BAD44A6B87EDA3189E /* zconf.h */, - 56521BBB435C7A22CFF991B7B01066DE /* zlib.h */, - ); - name = inc; - path = inc; + name = MFi; + path = MFi; sourceTree = ""; }; 4609DF28CCB5E8E7ABB759BA44F2CF64 /* Support Files */ = { @@ -5226,83 +5560,26 @@ path = "../Target Support Files/SQLite.swift"; sourceTree = ""; }; - 464BDB10421F8F548E3FE464860697C4 /* api */ = { + 46E6823192910AD82FBBDC0D0978297B /* vssystem */ = { isa = PBXGroup; children = ( - CB7525C73F421F5A18034AF27880A67F /* callbacks.h */, - 93307F759AE55916EE4F5A828F7C4E89 /* debugger.h */, - 6AF623F3493038D6261BFE6D75F9E9D3 /* m64p_common.h */, - D73DBD374EA8AF257C963ADA5CED3C29 /* m64p_config.h */, - 6DF0969A7AD1D99F4FACAB29DD35412A /* m64p_debugger.h */, - 3897ACD3EC356862F1521A3004290DFF /* m64p_frontend.h */, - 79F9B2D9EDAEB550A921B5D3884D6D19 /* m64p_plugin.h */, - 58E928D560BC439381C0BD2BAE388083 /* m64p_types.h */, - 74F4788A316A4AEC8FB746C3AF3DE933 /* m64p_vidext.h */, - 9E1BF418C0437A40B1C3B3582AB50F3E /* vidext.h */, - EDC16124014E8BE9A723398676F8E95D /* vidext_sdl2_compat.h */, + 9A6407C4FE9D4F3E62ECF1C9CABE92A0 /* NstVsRbiBaseball.hpp */, + A3112617A51AF6A36EACF9C3379C4BED /* NstVsSuperXevious.hpp */, + CAAEE81FB5DFAF21D63A74329E6F4E9C /* NstVsSystem.hpp */, + A36271D99C74D00F39DEEE122842B93E /* NstVsTkoBoxing.hpp */, ); - name = api; - path = api; + name = vssystem; + path = vssystem; sourceTree = ""; }; - 464E81739567397094C991C4ECB4AF83 /* Support Files */ = { + 47980AAB520B7D2038E8EBB2BBB843E1 /* Controller Skin */ = { isa = PBXGroup; children = ( - C12493BE66E89A1BAFEC4C49A5D0F399 /* DSDeltaCore.modulemap */, - BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */, - D8CFE89245F633014BBDF6E8AF4985D1 /* DSDeltaCore-dummy.m */, - 9FEB67420285B4BA71A2144A190F4A60 /* DSDeltaCore-prefix.pch */, - 712761EE4481E36BC7DD29218D12A6CF /* DSDeltaCore-umbrella.h */, - 84E73D7D5D1F2FA41BD8181D33BA65D2 /* ResourceBundle-DSDeltaCore-DSDeltaCore-Info.plist */, + 02BCDAEC84EB90FED96E1A7812F1B9CC /* Standard.deltamapping */, + B399BA8CED66B7B4AB724D2D580D4943 /* Standard.deltaskin */, ); - name = "Support Files"; - path = "../../Pods/Target Support Files/DSDeltaCore"; - sourceTree = ""; - }; - 47357310CF707F619DEB3861008BF828 /* Graphics */ = { - isa = PBXGroup; - children = ( - AF38F08C7B6C05C9E6E483C522CB166A /* BlendMode.hpp */, - F96385E0EAB3EFE69A0C198645BE3F02 /* CircleShape.hpp */, - 01B378B099C14E4E827FCBA843C08674 /* Color.hpp */, - 3676C1EE5D5DE26D9C445B36939E922C /* ConvexShape.hpp */, - A51106A45BF114A687DB7DB755B0D25D /* Drawable.hpp */, - B3010613943E28048D5313FE665F01EE /* Export.hpp */, - 7DE820C181248C292881B0298B0F1F90 /* Font.hpp */, - 3BBF510C2B0603EAC41E2079FEFC6A95 /* Glsl.hpp */, - 3BCF0A222961A427CD39D1C78BD6A993 /* Glsl.inl */, - 920F6CCBFE16A29B89A155E099306B56 /* Glyph.hpp */, - BB40DF340E3D23ACCF742C2B72217324 /* Image.hpp */, - 406077526A3C40A99FE96076975E23CA /* PrimitiveType.hpp */, - 8837E67069B10F42A5536F61DD3DD225 /* Rect.hpp */, - 635101CB7845320BEBBEE9E499DCF372 /* Rect.inl */, - 398E01AED7FF75385A50FDC67155A9A0 /* RectangleShape.hpp */, - A922DEE8CDD64405F21CFA9916068DA8 /* RenderStates.hpp */, - 0ECF374B07795E7E2A151E2B4D8D2A29 /* RenderTarget.hpp */, - 5FCE00327D6825CD6F2088A345690DCC /* RenderTexture.hpp */, - EACB3541C7C31D9C894C73A0F43BCD38 /* RenderWindow.hpp */, - CB3301D4A5FED38AEE41ED07A6C502BE /* Shader.hpp */, - FAE71BC8FD40F93BEB90C2ED42088A99 /* Shape.hpp */, - C90C25C12E9E9489A474A496C47B38AF /* Sprite.hpp */, - 9995950583E5F1398CF81E042701C6E9 /* Text.hpp */, - 44D209BABFBAEF92A3A476D1046B160F /* Texture.hpp */, - BCD06FDE6C4BF266F270034784E23776 /* Transform.hpp */, - 3786BF5CD7F52FDF2EC2229D9387B2A8 /* Transformable.hpp */, - EB8457DAFF531CDDEB4D1854B8B8BDD0 /* Vertex.hpp */, - 784FA935740E152532499A73DA5AA3DB /* VertexArray.hpp */, - B8982524E4ACBEBF47DD97748097DE96 /* View.hpp */, - ); - name = Graphics; - path = Graphics; - sourceTree = ""; - }; - 480A93CB7AB6C50FA045238E2B79FAC6 /* Resources */ = { - isa = PBXGroup; - children = ( - DD765E8C1F357163F0D20B44FC57054C /* Mupen64Plus */, - D2BED9DA807FAFF2162C70598CC64A97 /* N64DeltaCore */, - ); - name = Resources; + name = "Controller Skin"; + path = "Controller Skin"; sourceTree = ""; }; 48108D7847251652893F854B19A7370F /* Support Files */ = { @@ -5318,34 +5595,90 @@ path = "../Target Support Files/SwiftyDropbox"; sourceTree = ""; }; - 48DBBE06D8F38B54497656B8430DBB43 /* UI */ = { + 4990D6B3900063DB8611305F48B6C27F /* src */ = { isa = PBXGroup; children = ( - 5EDFFBA74A4D2E7501881A25047D5BD8 /* Controller */, - AE5BDACDA27265C8C5B46C0ABE431F76 /* Game */, + D71E7A6F9AAB7C75B1DD2144F0C3A2AE /* api */, + 22DE5B6EE14741DE1391CCA0302DC3F5 /* backends */, + 8A444B16E4F71DB6741EA5B3ED79300C /* device */, + 1DE3C5EF04F04E81DE98254DC953CE87 /* main */, + C8FDB5EB2CE474C0F1A3795E258C8005 /* osal */, + A52B8446C83E659A01CB5FF835BB66B6 /* osd */, + A25BC01B8E8FB25A64460D68672DC8D0 /* plugin */, ); - name = UI; - path = DeltaCore/UI; + name = src; + path = src; sourceTree = ""; }; - 4B7694700DA51621474EAD99AC285175 /* Cores */ = { + 499A4AEDC3F662B3D31D208A5B1814F3 /* Inputs */ = { isa = PBXGroup; children = ( - 5A201B11504778569D1F2D7EB83668E6 /* DeltaCoreProtocol.swift */, - 78B946BC5D71400B19D26F799662F808 /* EmulatorBridging.swift */, + B7BC2C79D27AA4D45DBAED609878B0BF /* GameController.swift */, + 11F0ED4F854563D55D1126B811F3E869 /* Input.swift */, ); - name = Cores; - path = DeltaCore/Cores; + name = Inputs; + path = Inputs; sourceTree = ""; }; - 4C0FD18A12989B7A4F6A75FA2EFE414F /* Types */ = { + 49FC0C20B7D56465BC518FD20FF306A4 /* Support Files */ = { isa = PBXGroup; children = ( - 8CD89764ACCFBF65BFF14776DAB37EA9 /* DSTypes.h */, - 2D61A2E3D2CCD4FD36DF6278A7CFE46A /* DSTypes.m */, + 9A5F48AC24E5F5063217D8867869BDEB /* GBADeltaCore.modulemap */, + 322C5837A63371E2F6F3AF970B00A736 /* GBADeltaCore.xcconfig */, + 9EBF414719FAD26FBA9B9AB0E2F855F3 /* GBADeltaCore-dummy.m */, + 23EDAE362454CA4518FE66BD4A8A27BE /* GBADeltaCore-prefix.pch */, + F7C2DFC00C454B4A6E486685A3B85653 /* GBADeltaCore-umbrella.h */, + 275B73A10051D1457DB5A4D25F97ABB1 /* ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist */, ); - name = Types; - path = Types; + name = "Support Files"; + path = "../../Pods/Target Support Files/GBADeltaCore"; + sourceTree = ""; + }; + 49FE79C70586782C755EE0F4C1E54873 /* Pod */ = { + isa = PBXGroup; + children = ( + 5BADB99077105EDA2AC1C52C4AB7EFAE /* GBCDeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 4B163E0E120BFA148B9934E2E1C970CB /* Mupen64Plus */ = { + isa = PBXGroup; + children = ( + 985A626901535F1CAAB0DF3082FFA4C7 /* GLideN64 */, + A5537D4A03CD7BCB221A6A5A9D0B5C54 /* mupen64plus-core */, + ); + name = Mupen64Plus; + path = Mupen64Plus; + sourceTree = ""; + }; + 4C425D86DABBA56A5D636531DF67B841 /* src */ = { + isa = PBXGroup; + children = ( + ED722AEBC29811FBDB707822E79E137C /* alist.c */, + 4A827256CC16710474531DFA7ECE526F /* alist.h */, + 65A31956BBF79B889849828770076815 /* alist_audio.c */, + F52217DDA56116C4579A60B66E239C62 /* alist_naudio.c */, + BBF2CF6F66F587AFDA21E30888FC7210 /* alist_nead.c */, + FA748DD06BB0F87B2D3FCBBCB21BB582 /* arithmetics.h */, + D96CE517678765B006B018E340F3198C /* audio.c */, + 6CE8685D1C71D8EB010FB3B97ECE0634 /* audio.h */, + AEBCD05077A7A9D50A99D05DDFABD57D /* cicx105.c */, + AC7A3157CBEE276869625E60733756D9 /* common.h */, + 888E98C361E5C340C2DFB6D6D1029392 /* hle.c */, + FBE1F9090B5DA68190D7B03CCE5E4629 /* hle.h */, + 5277A427B540B8A971E15DE8732388E9 /* hle_external.h */, + DF2DD4169A9A5CEA5319C794BD888975 /* hle_internal.h */, + D72335FEE7B69D06AC33B707144B50DE /* jpeg.c */, + C68E5B53D8D5CA28D433B92E58B5C931 /* memory.c */, + 9622F656638DFB246B7A638CCF468156 /* mp3.c */, + 4A835642A0FF668D9565F7122EDF06B1 /* musyx.c */, + FE17ACA9391DAFCA51DA8FE4929D2B86 /* osal_dynamiclib.h */, + BF31C2CB59DFB2355DA7BB8112A5D5C0 /* re2.c */, + EF0B5A83CEA7719FDAE73CD9B61BF813 /* ucodes.h */, + ); + name = src; + path = src; sourceTree = ""; }; 4CB096438D1D6504B19EF054D622999B /* Support Files */ = { @@ -5361,268 +5694,58 @@ path = "../Target Support Files/GoogleAPIClientForREST"; sourceTree = ""; }; - 4D05B91E3529B56406824FF9DA8149F2 /* Pod */ = { + 4DFFAC4CA66D2E2736BA76CDCCCF81C7 /* DSDeltaCore */ = { isa = PBXGroup; children = ( - 3DB4038AF1D67C948BF0ABB96BB0986E /* Harmony.podspec */, + F58085643FF3A73EC90BF4F105C971CB /* desmume */, + 6BA858087FE944A871442E1A6169B1DA /* DSDeltaCore */, + F2ACBCF1A239DDB0C05D074FE4F77CFC /* libDeSmuME */, + 7CB5474A87AAEBB783F6DA31AD82102D /* Pod */, + 3CA154314EF9C5B78947397218A225E8 /* Resources */, + 398DEDE00FCE7A23BCCBAFD53B0CCC44 /* Support Files */, ); - name = Pod; + name = DSDeltaCore; + path = ../Cores/DSDeltaCore; sourceTree = ""; }; - 4D9195AC400DB755A053EE8F3AF59DAA /* Controller Skin */ = { + 4E52507BB6CC79CEF05FE900D2498D6D /* subprojects */ = { isa = PBXGroup; children = ( - 9A6B0D2942B8BAF98B09DC10EDD20618 /* Standard.deltaskin */, + E50F13A090AF63EB61363DCB9120EE7D /* md5 */, + B5D3EDECBB050C70D08DA0E23FEBB52C /* minizip */, + E41307A3A7EBFB46175F52CD879A6226 /* oglft */, + 39C38054717088C7ED491162FDF48493 /* xxhash */, ); - name = "Controller Skin"; - path = "GBADeltaCore/Controller Skin"; + name = subprojects; + path = subprojects; sourceTree = ""; }; - 4D99497467047689EE0E51F25AD9B33F /* Controller Skin */ = { + 50DE83824292D486BF7980AE0DF0AE53 /* Support Files */ = { isa = PBXGroup; children = ( - C9015E1D86DF0B2A7A1D22814920641A /* Standard.deltaskin */, + BBA755EA895635E0475A6DE1D6B83070 /* DeltaCore.modulemap */, + 48EEB005F713F595AFABDEDD7B122D6F /* DeltaCore.xcconfig */, + 5393A36A3C22644206D6D5187A6B0285 /* DeltaCore-dummy.m */, + AC0AC4268C0D1BD94A77EF3153291D5A /* DeltaCore-prefix.pch */, + 957167DFF15F649697598EB9E605462A /* DeltaCore-umbrella.h */, + 151BCB966AF2F384786C0254DF3B4844 /* ResourceBundle-DeltaCore-DeltaCore-Info.plist */, ); - name = "Controller Skin"; - path = "SNESDeltaCore/Controller Skin"; + name = "Support Files"; + path = "../../Pods/Target Support Files/DeltaCore"; sourceTree = ""; }; - 4EB8E4515524B728C4520D910822C6D5 /* Protocols */ = { + 50EE9B6B5490169EB9B67375D97F0486 /* Support Files */ = { isa = PBXGroup; children = ( - 2AE3D62272543AE755E38D66B0FE1577 /* Inputs */, - CE7DAA8BB95D149C5B6CB0226DAED1B6 /* Model */, - 05E5AFDEEBC0414DCD46B75C1E7B13F1 /* Rendering */, + 0D29D1C963E32AFCD9DF5F87C6BA90D9 /* N64DeltaCore.modulemap */, + 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */, + 52FF008EAD8518503CF4BE5EDABF7FD3 /* N64DeltaCore-dummy.m */, + 160A1FB76516D2D1FABCA5F0A6795568 /* N64DeltaCore-prefix.pch */, + 13D9D073E172499FE0BA408392C89173 /* N64DeltaCore-umbrella.h */, + 09A719B1C418B5A4A8184B6EC22CE504 /* ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist */, ); - name = Protocols; - path = DeltaCore/Protocols; - sourceTree = ""; - }; - 502549B50925C18CAE6574440F514477 /* board */ = { - isa = PBXGroup; - children = ( - 82DC27EAD4860B5C690A7972067D9F11 /* NstBoard.hpp */, - 6ADD780B3EFDC84E892E216A11E12B84 /* NstBoardAcclaim.hpp */, - B137B57F8091633EB513C60304ED2C7C /* NstBoardAcclaimMcAcc.hpp */, - CFA8EEA9986267DD4C9222F8013EB169 /* NstBoardAe.hpp */, - A031F15C9AA6495C554D8421DDCD6B2E /* NstBoardAgci.hpp */, - B686582878B4BC8A27AD99BE25411842 /* NstBoardAve.hpp */, - E480CACA0E81501CCBB98149C48584AD /* NstBoardAveD1012.hpp */, - 5901F945E4B7BD8E993A572C8320D4E8 /* NstBoardAveNina.hpp */, - C3EC67AFC76D160DAF406F83FB32F372 /* NstBoardAxRom.hpp */, - 2DB986F9C1D693A55F7B3373502F3EA2 /* NstBoardBandai.hpp */, - 316C97172E998626A782DC7AB8C5416C /* NstBoardBandai24c0x.hpp */, - 524FD8CB9B96FEC42DEBFF4F6485E0C0 /* NstBoardBandaiAerobicsStudio.hpp */, - 2FE159CB1A275ED4531A3B1AEA807772 /* NstBoardBandaiDatach.hpp */, - 55D03E3855F24EC46248235CA4AB84AE /* NstBoardBandaiKaraokeStudio.hpp */, - C55A28A051F1189A5E169C1AE35F08E6 /* NstBoardBandaiLz93d50.hpp */, - 5C44BBA15DF8CEE92A417577E4C1D5D9 /* NstBoardBandaiLz93d50ex.hpp */, - 13CF8AB5A64D04015282404D80256EA0 /* NstBoardBandaiOekaKids.hpp */, - 355A8C024A46DB2BE1763B0F3971FFEB /* NstBoardBenshengBs5.hpp */, - C4DEF759B31F98EC3A0C7C1538495611 /* NstBoardBmc110in1.hpp */, - 301D690D8387625CECE00F7DFC975BD1 /* NstBoardBmc1200in1.hpp */, - 4277D9CD49D8F32314F512361BE4B690 /* NstBoardBmc150in1.hpp */, - F81D2A992DCD611FF9C080137C990E31 /* NstBoardBmc15in1.hpp */, - 6653BEF078E8146300FE0A11A7E562B9 /* NstBoardBmc20in1.hpp */, - FA1B820118906800A592F7AEC27C0DFF /* NstBoardBmc21in1.hpp */, - DDDBA9705C6D9A716771C1B745289787 /* NstBoardBmc22Games.hpp */, - 73006DC6C1509BB82F83AC8D88F0481E /* NstBoardBmc31in1.hpp */, - 179CA20387AC394361693DD1CD2E4572 /* NstBoardBmc35in1.hpp */, - 83C196FE4CF60A03565B95B1C9C0217C /* NstBoardBmc36in1.hpp */, - 7F66CA249330A41FAC70007D5C650CD6 /* NstBoardBmc64in1.hpp */, - 612BF149D2E48CC9950BEEB2FC03B60F /* NstBoardBmc72in1.hpp */, - 31FCE4C32E3EF5DE398B4E770A89EBF5 /* NstBoardBmc76in1.hpp */, - E350E01066A73585D9DE99D4C11B7C7A /* NstBoardBmc800in1.hpp */, - 92F06EFCC636BAAC527CE6543D3ABA5E /* NstBoardBmc8157.hpp */, - E3F52E4EF9D56259B6359336A7D98C0A /* NstBoardBmc9999999in1.hpp */, - B56303B13A0444FFC586E198F58DAFAB /* NstBoardBmcA65as.hpp */, - C91AB35D0843E8B6D4267700DA3291F0 /* NstBoardBmcBallgames11in1.hpp */, - 35CFBA425AB64788F59985DF4294DCD2 /* NstBoardBmcCh001.hpp */, - 695EC8428ABF7B3AF98FDB33DD69DB98 /* NstBoardBmcCtc65.hpp */, - 52373DA4A745FB2484B38C3DBF6F4512 /* NstBoardBmcFamily4646B.hpp */, - 52468FE08B22885CDC155AF176219E41 /* NstBoardBmcFk23c.hpp */, - 46068669BC91126FFFEA59576128CCDD /* NstBoardBmcGamestarA.hpp */, - C8B1D8C461900C12369DB3E2AA13C08E /* NstBoardBmcGamestarB.hpp */, - F9CBFEF3D09E24FAC21E3A14CCC923AF /* NstBoardBmcGolden190in1.hpp */, - 27D3E954F1B9259AA8BFF0453108844D /* NstBoardBmcGoldenCard6in1.hpp */, - BA6C6054CE8555D1822133E74F7E920F /* NstBoardBmcGoldenGame260in1.hpp */, - F712A25B70E2BECE91A60F3F2CDBC6D6 /* NstBoardBmcHero.hpp */, - 3AF4B7019142B0E02BDE3089ED853C72 /* NstBoardBmcMarioParty7in1.hpp */, - 5B3906E0F867AD7DBE110BED3C71FCD8 /* NstBoardBmcNovelDiamond.hpp */, - F11F1CCE5B53125548AF2C84DC90CF96 /* NstBoardBmcPowerjoy84in1.hpp */, - 18EC95A3A3E3430E185F60F3BA643D4B /* NstBoardBmcResetBased4in1.hpp */, - 0A0F6D5E39D8F599381FA5E8BB34178E /* NstBoardBmcSuper22Games.hpp */, - FDD8C2628C20169F27F847F6618B2626 /* NstBoardBmcSuper24in1.hpp */, - 04FA9510648C9DD5A3436B2139DA560F /* NstBoardBmcSuper40in1.hpp */, - D18007DF21DF9CDE2EA3A14D00C050DA /* NstBoardBmcSuper700in1.hpp */, - 241D65B94A34B15AB354A6901D592045 /* NstBoardBmcSuperBig7in1.hpp */, - CD40FB9904EBC64F4CB21A6062A4FFC8 /* NstBoardBmcSuperGun20in1.hpp */, - 4DDEBD072685DD4E5D03FC470004711B /* NstBoardBmcSuperHiK300in1.hpp */, - 83DEFE6EC2B2AF94239CCEA8D9F36C59 /* NstBoardBmcSuperHiK4in1.hpp */, - 6B139C8BFA41616549DEEAA545317F7F /* NstBoardBmcSuperVision16in1.hpp */, - 9106F296AA7B0EA373050E2222387718 /* NstBoardBmcT262.hpp */, - 77369FE791F1E575CF67D2E88660AB54 /* NstBoardBmcVrc4.hpp */, - 62945616EBEA8F7DB40A59C37964637B /* NstBoardBmcVt5201.hpp */, - 739C9A35C56A321A5F6DEC9276C9A451 /* NstBoardBmcY2k64in1.hpp */, - EB24131FB6C69C2CA2374DF4C6A91A71 /* NstBoardBtl2708.hpp */, - 044F71625A7716601EAADFE8C6D579CA /* NstBoardBtl6035052.hpp */, - 8FE991842BF4F0D0508BF1CDC5290400 /* NstBoardBtlAx5705.hpp */, - C9D7F4E7EB78574E9BE5E912032A3DFF /* NstBoardBtlDragonNinja.hpp */, - 2FB72B0C0BDEEEA75B2233F8A0F9C0CB /* NstBoardBtlGeniusMerioBros.hpp */, - 89D77AD643D660EF8D5D89B0A70F143B /* NstBoardBtlMarioBaby.hpp */, - D282E9AC180F6200BA4B724CC7918B06 /* NstBoardBtlPikachuY2k.hpp */, - D31F9464D26C84F4303F9214852E0259 /* NstBoardBtlShuiGuanPipe.hpp */, - 32C312AFD3D5355E34E5264A0D924E24 /* NstBoardBtlSmb2a.hpp */, - EC65A0F4796E627B80569AAB463DCD61 /* NstBoardBtlSmb2b.hpp */, - 9E493AB01A18F0DA9F384ACB5CBD5C5A /* NstBoardBtlSmb2c.hpp */, - 7B7537D8181FB7C0E5B50CB7680E9967 /* NstBoardBtlSmb3.hpp */, - 2D3BDC0A83B15DB6FCC56F319C1AD6E8 /* NstBoardBtlSuperBros11.hpp */, - 74A1A47D0674A91258AD7D9DAB661740 /* NstBoardBtlT230.hpp */, - AA1E7066C788AF166D3819EA304B9C30 /* NstBoardBtlTobidaseDaisakusen.hpp */, - 12D394DD2EB99C510D854AD5F7D8D01B /* NstBoardBxRom.hpp */, - 44F1BD582E0D3BBA64326BDB9B1D6DDD /* NstBoardCaltron.hpp */, - D6D2B3F2E952A338D1128CD5D724862D /* NstBoardCamerica.hpp */, - 1C0F31C6E082D6432390150C57691513 /* NstBoardCne.hpp */, - 04F25CB32F102ED6A7598D66E7BC9443 /* NstBoardCneDecathlon.hpp */, - DCB3B443E61EDD2CC071DAE04B2C1F0C /* NstBoardCnePsb.hpp */, - BFF96050C458E84686F588B9793FEC9C /* NstBoardCneShlz.hpp */, - 60E307E020BBFAC21769EFBA79153CCD /* NstBoardCony.hpp */, - 34A215FA298A479379277FF73C2A596C /* NstBoardCxRom.hpp */, - B2CBDD74EE4025870C9ACEC038645C28 /* NstBoardDiscrete.hpp */, - 4AAA4EBFA294D12114F5AAAB4941BFC2 /* NstBoardDreamtech.hpp */, - EB023C27C2E7EBAB1EBA4B6CE2CB82B8 /* NstBoardDxRom.hpp */, - 5C64FD116A93B9A66533D1BA551BF885 /* NstBoardEvent.hpp */, - FC1E9CD449F2D3C5D045DFEBF6BBE3C2 /* NstBoardExRom.hpp */, - 504F1B8F7739C07C121A17267D9DC80F /* NstBoardFb.hpp */, - A7FA6F5EFA3E03E39BBF032A32482DBE /* NstBoardFfe.hpp */, - 5233AE6CB42C097DA937081AB4814A39 /* NstBoardFujiya.hpp */, - 72EF249EE7E9290384CEF4D02C6444B0 /* NstBoardFukutake.hpp */, - C0BCFCB348564B9EB1473238677BB354 /* NstBoardFutureMedia.hpp */, - 7CF779051F3316DCCCAAB71AF25F906C /* NstBoardFxRom.hpp */, - 4DDA965CE8714B275AFFEDDF6DC053CB /* NstBoardGouder.hpp */, - A5EB56E07F663B5DB04E4B9B6C85C4B6 /* NstBoardGxRom.hpp */, - 32810DC0220801D0627369038B90903F /* NstBoardHenggedianzi.hpp */, - DA87C06EA55D40BF0BACCC63B7F0FA76 /* NstBoardHes.hpp */, - 64F52923D2670C65E03D742EF710218A /* NstBoardHosenkan.hpp */, - A3F6E644CFB6C961D9227F005A276743 /* NstBoardHxRom.hpp */, - E64DA6F38CE5BF6A1B8B85644BF421A8 /* NstBoardIrem.hpp */, - 8FA72104E6FCAFAAAE36DA0189E9CB62 /* NstBoardIremG101.hpp */, - 456C9F03B0C75358971F5599710FB4AC /* NstBoardIremH3001.hpp */, - 0E65B447ACD8C0AD8B9540F69DD78D01 /* NstBoardIremHolyDiver.hpp */, - AAA8DF67E8C538AF865BB2D983391817 /* NstBoardIremKaiketsu.hpp */, - 0760F68BF4270075015FF0EF76C307A4 /* NstBoardIremLrog017.hpp */, - 05E18E206FE5E3ECC0A0F7DE2BFF3CB9 /* NstBoardJaleco.hpp */, - 6C87A284686A358CFAC958B264749422 /* NstBoardJalecoJf11.hpp */, - E042969907A8F89D42D0992DE8D4804B /* NstBoardJalecoJf13.hpp */, - 0E3FADE2512B784AFCE2DFE09B9ECE6D /* NstBoardJalecoJf16.hpp */, - D8D32EAB45D5BEE636521CB06DB71FF9 /* NstBoardJalecoJf17.hpp */, - 994237033CE941B5B49F4E0EC30ADD01 /* NstBoardJalecoJf19.hpp */, - 2446BE6FAF88E2295DA4D857C1DC7C16 /* NstBoardJalecoSs88006.hpp */, - FE1983B3232B47585D4F61AB506D3B3A /* NstBoardJxRom.hpp */, - BC6023BC6F5B2433CF51C57DEE9E331A /* NstBoardJyCompany.hpp */, - 72248A001C60C8B9DD1CCDC9D78DAE0B /* NstBoardKaiser.hpp */, - A5E4840045EBB8FE5E794C6DAEFF0CE7 /* NstBoardKasing.hpp */, - 323BA7B73E9CB19F2E6792B339B711E1 /* NstBoardKay.hpp */, - 4A32B8F42EA9A1885D2B08250359F9FC /* NstBoardKayH2288.hpp */, - 0BE607429888D1CA21C1751ECA041494 /* NstBoardKayPandaPrince.hpp */, - 86A843DB560CD6D81B7EF3A9F6D8F5FB /* NstBoardKonami.hpp */, - 14D21BDF50EDC8CCA4B82562FA4EC1E1 /* NstBoardKonamiVrc1.hpp */, - 3F3421F39C5B3686D06A4A47CFC049B7 /* NstBoardKonamiVrc2.hpp */, - 5221F56A802033E50A6CA3492E382A3C /* NstBoardKonamiVrc3.hpp */, - 9C6F3AAA06C293FC9A91CD7A5FE7D65A /* NstBoardKonamiVrc4.hpp */, - 261762E049C9653D1341EB811E42E338 /* NstBoardKonamiVrc6.hpp */, - 3E46BEA7461AFEDDCEC478DB8D3425C3 /* NstBoardKonamiVrc7.hpp */, - D98EC38E106371722A01A73B3CD4D54B /* NstBoardKonamiVsSystem.hpp */, - 62948F129BEF321213BDE3AC38E0CBDC /* NstBoardMagicSeries.hpp */, - C2C58B3E3B8C36120F560F859D6D98F7 /* NstBoardMmc1.hpp */, - 23EDB5113AECD1DF0B90F3E16139D1D6 /* NstBoardMmc2.hpp */, - 455C3A1951DCCE758C8B38B0D96D1745 /* NstBoardMmc3.hpp */, - 87F4B88C0892C297B31AE94A0E93539C /* NstBoardMmc4.hpp */, - 231C3B1815030738C172F8C3A61AB598 /* NstBoardMmc5.hpp */, - 24DCB8F3924D4B8E723EDE7D9E36EE1C /* NstBoardMmc6.hpp */, - 627617EFA316732258422811C97719BF /* NstBoardMxRom.hpp */, - 71E464E228C2FFB740BCB0AF049E4332 /* NstBoardNamcot.hpp */, - 5385CA919BFDAA02107CE76AD241472B /* NstBoardNamcot163.hpp */, - AA04D2400A0F699B8568525360B9DF75 /* NstBoardNamcot175.hpp */, - F35BDFB9D3E727256E9CD866CDA4B105 /* NstBoardNamcot34xx.hpp */, - D24B8100E3100D72F4874FB079F78F54 /* NstBoardNanjing.hpp */, - 96AF49FA9F387DAB2B33D0FB432E8FC7 /* NstBoardNihon.hpp */, - 68753DE722C0980098E0081FA7664AD1 /* NstBoardNitra.hpp */, - E70A7D8AB9B5D506BDFCB3A14DE9ACD8 /* NstBoardNRom.hpp */, - EE3F927B7F58D93B1C98460B28559AE7 /* NstBoardNtdec.hpp */, - 27DF122CB5EB6951E6B147BC0F24D64E /* NstBoardNxRom.hpp */, - 160DE59B03218F24C3937D38923481FF /* NstBoardOpenCorp.hpp */, - 041DD83CE8B7122C23DB4EA6557E0B8D /* NstBoardPxRom.hpp */, - 58F426BB1C791A20225DADEEE031718A /* NstBoardQj.hpp */, - 5F38047E1651287DC3AA705DF9C06C72 /* NstBoardRcm.hpp */, - CDE5597A73178118289A5342B56A5EFB /* NstBoardRexSoft.hpp */, - 6B21034826F7C6098BB4DBFE00B2498C /* NstBoardRexSoftDb5z.hpp */, - D4E854B6ACFFE4EA1EDD318476D024D0 /* NstBoardRexSoftSl1632.hpp */, - 215635C653FC2F3689E27136178F6166 /* NstBoardRumbleStation.hpp */, - 4935C2E2603C529A316EE9E50C953CA3 /* NstBoardSachen.hpp */, - 73427BAA44C8216F08EDAC6A0CAD0190 /* NstBoardSachen74x374.hpp */, - 3555155F2CD8E368BB6A27A9517ADC29 /* NstBoardSachenS8259.hpp */, - A4100365716D2689894AEB6AEEE7DDE0 /* NstBoardSachenSa0036.hpp */, - FA6F6DCD09DADEC4F87458FB70013D1B /* NstBoardSachenSa0037.hpp */, - 92E86921655A3432DD8E836D484C63DB /* NstBoardSachenSa72007.hpp */, - D58C0FE9AF63F39A0E7990E8ABEAA707 /* NstBoardSachenSa72008.hpp */, - 8F52AAB71856AE2D876485F77504BCE5 /* NstBoardSachenStreetHeroes.hpp */, - 1BC03A069A547EB736D558AC237B614A /* NstBoardSachenTca01.hpp */, - 8E110C092AEF72EDB7C33791CA0BCBEF /* NstBoardSachenTcu.hpp */, - 62CFF0059E7E0AE9B9B20A8DBAE51D16 /* NstBoardSomeriTeam.hpp */, - 6270AB27CBF8BA6CBBAF402530B111BF /* NstBoardSomeriTeamSl12.hpp */, - 1F028EDFAB102669AF0739608CE6CC3F /* NstBoardSubor.hpp */, - F774B85B1C91BBD1B28A7FDAEE5812F6 /* NstBoardSunsoft.hpp */, - 02C1BEECEC397F5E91934D66DFFF7686 /* NstBoardSunsoft1.hpp */, - E3A6EC0B470AAD78C4D5550BBDA4A73E /* NstBoardSunsoft2.hpp */, - 9FDC34A806C43FEC8AEFDE037CBB3624 /* NstBoardSunsoft3.hpp */, - EDCD39BFA98723F034DF29BDED0067EC /* NstBoardSunsoft4.hpp */, - B5FF87A66DB9785A1AFFD395C49E2A88 /* NstBoardSunsoft5b.hpp */, - 90DE8F7A964963C67D9A493018E6E24C /* NstBoardSunsoftDcs.hpp */, - 1B60BE30FA309328A9F8DEECADF5B276 /* NstBoardSunsoftFme7.hpp */, - CFF26FC15D5CF0C1D2FDC8A0DF023F02 /* NstBoardSuperGame.hpp */, - 2A9BAD126F66B1D6249DC44FE38555BB /* NstBoardSuperGameBoogerman.hpp */, - 33F61CAFA96E0983ACC82B25ADD6DA19 /* NstBoardSuperGameLionKing.hpp */, - 7537CE11495993BB05FE9EAA5BFED976 /* NstBoardSuperGamePocahontas2.hpp */, - E0B30CE96C7B045BFDBA33EE166DBFFB /* NstBoardSxRom.hpp */, - 51A794B9A074BF2025C358E236D42F05 /* NstBoardTaito.hpp */, - F6A4D024EFBD821E10B8C4249832F774 /* NstBoardTaitoTc0190fmc.hpp */, - DB916A39387B7212EE06E2DA467A8D51 /* NstBoardTaitoTc0190fmcPal16r4.hpp */, - B71756B40C4BB780F974D844D1D446CB /* NstBoardTaitoX1005.hpp */, - 34347E5F18F11A1CEF5D0D59279705D2 /* NstBoardTaitoX1017.hpp */, - B770765D40D57151EF4C7C13D2101E87 /* NstBoardTengen.hpp */, - 25F7A6B233074D6DD97705181306F479 /* NstBoardTengenRambo1.hpp */, - CB811B30D58FF4024455D5E5CC17947B /* NstBoardTxc.hpp */, - FE45DB19ABFD58A4D2DCCB58292ABED4 /* NstBoardTxcMxmdhtwo.hpp */, - B24B02D04D4F08EFCBE0B8D8503C30E8 /* NstBoardTxcPoliceman.hpp */, - 27CAFC4023101EB518BF390FBCBDAC6C /* NstBoardTxcTw.hpp */, - 0558C6E8EE1D9B61043E335254B75955 /* NstBoardTxRom.hpp */, - 7F657EAC00204AF30C7E4EA0B4518AC5 /* NstBoardUnlA9746.hpp */, - EC91456BE16B5A70B8034583667C1DB2 /* NstBoardUnlCc21.hpp */, - FAABB4AF34B608AA851191DA7195AC03 /* NstBoardUnlEdu2000.hpp */, - 0DEC322B85B93540CD7F53F2185164D6 /* NstBoardUnlKingOfFighters96.hpp */, - 0E992CA8B2DD446EF5D166F52EB6ED50 /* NstBoardUnlKingOfFighters97.hpp */, - 770AA55D81A4A9A0174FC18A4DB7DC41 /* NstBoardUnlMortalKombat2.hpp */, - F76EE1EB3D0BD20599E9210AA395F4F5 /* NstBoardUnlN625092.hpp */, - 4BD0DDE5441618EF592651345A1BB212 /* NstBoardUnlSuperFighter3.hpp */, - B227CD071A5B88861CA260BED0FBE3D8 /* NstBoardUnlTf1201.hpp */, - E33793CEFFD0F60ECF7785770DBCE9F3 /* NstBoardUnlWorldHero.hpp */, - 6878BE119742EC0C21A2CB0F923D256C /* NstBoardUnlXzy.hpp */, - FE0B56AC8DF03F3940CB2C0117DF20DA /* NstBoardUxRom.hpp */, - 16A5B2FF145529F1248A848F882C8403 /* NstBoardVsSystem.hpp */, - 54EB6E02433DBB4599FF9FECA6F74BEC /* NstBoardWaixing.hpp */, - F4E0870820E6458DC946E91A74E0DB8E /* NstBoardWaixingFfv.hpp */, - AB7866FC433C97398B3963C2270D52D4 /* NstBoardWaixingPs2.hpp */, - 61C1E3F8AE5D758C9D04B1A80F1A6C85 /* NstBoardWaixingSecurity.hpp */, - 3BFF77F72AE6211AD9D42FD2E18375EF /* NstBoardWaixingSgz.hpp */, - 75CBA626F95FBBAD154F3774DF8F9152 /* NstBoardWaixingSgzlz.hpp */, - B595CA4CE436B20EE775744443119153 /* NstBoardWaixingSh2.hpp */, - 303639D060EE4ABC8F9B28FD68B7F98C /* NstBoardWaixingZs.hpp */, - 27B1FE69B14E33A7E6603FF648B30DFB /* NstBoardWhirlwind.hpp */, - 2E79FA977AAA30AD5B0ACFC45BB5967B /* NstBoardZz.hpp */, - ); - name = board; - path = board; + name = "Support Files"; + path = "../../Pods/Target Support Files/N64DeltaCore"; sourceTree = ""; }; 511C6B6CD7CABDDA64B217FB5587D474 /* SQLite.swift */ = { @@ -5635,77 +5758,88 @@ path = SQLite.swift; sourceTree = ""; }; - 52BA5412DADDFC606DA2615E62036938 /* DeltaCore */ = { + 5161CDF69B4AAA22DCF3258FAE5F87A4 /* Bridge */ = { isa = PBXGroup; children = ( - 5F04014B383F64E12DE6C9129A85A7C5 /* Delta.swift */, - FB4B3A1CE88E9FF6475854D98A52A5DD /* DeltaCore.h */, - ACD2694A63AA0B70E91DAF193E7B4425 /* DeltaTypes.h */, - FEA0ACC910F13E9D6B8C51CFE1B8EDA4 /* DeltaTypes.m */, - 4B7694700DA51621474EAD99AC285175 /* Cores */, - 6E3F94BFF62C194BE0258DBEB0D157F5 /* Emulator Core */, - 5A73536B2E3D5A586084E6316E2725FA /* Extensions */, - 7A0257A6FA12DDD23AEAE728454C6E89 /* Filters */, - 77DE8B3A59B3AEA94EA1936289EFD550 /* Game Controllers */, - C4D47ABBEA4B5A7F4CCBD4E0828F752B /* Model */, - 8DCC2B9382D5AFC79EE9929AC6B93E5D /* Pod */, - 4EB8E4515524B728C4520D910822C6D5 /* Protocols */, - 82D8A69FF325F605A136ADB6BAE9A4D2 /* Resources */, - E2620C3C1877C7DED9743652F9692A17 /* Support Files */, - 6E3B1B87720B12D224BBA827A8147857 /* Types */, - 48DBBE06D8F38B54497656B8430DBB43 /* UI */, - ); - name = DeltaCore; - path = ../Cores/DeltaCore; - sourceTree = ""; - }; - 5311A1683EA053E58F93ED80896A38DD /* Pod */ = { - isa = PBXGroup; - children = ( - A0879BEED84AB0514D697AD37CCE88A3 /* GBADeltaCore.podspec */, - ); - name = Pod; - sourceTree = ""; - }; - 577B01C70A6A38E4A14D8E2184A0A446 /* Bridge */ = { - isa = PBXGroup; - children = ( - B46E429745DDFCAA08E329F0BBAD9911 /* GBAEmulatorBridge.h */, - BD71FA05AF33D2016379AB441E9DA7FD /* GBAEmulatorBridge.mm */, - B4344D31A95675A878EB6C78C263B86A /* GBASoundDriver.h */, - FB0C2D29320490068714E3A307C890F3 /* GBASoundDriver.mm */, + CA3B33FD961F7E04608908F29394499A /* NESEmulatorBridge.swift */, ); name = Bridge; path = Bridge; sourceTree = ""; }; - 57BA860878D3D42DD09ED8AD2C301234 /* GLideN64 */ = { + 52161E4212C2337185C0A204E0BD5DAF /* mi */ = { isa = PBXGroup; children = ( - 143C0F8B6FB554B8F3D7C2A274CC8DE0 /* src */, + FCE15B7CBF75268739FB87C1E0C6AC09 /* mi_controller.h */, ); - name = GLideN64; - path = GLideN64; + name = mi; + path = mi; sourceTree = ""; }; - 580EBE0D599F965BCD5FEA6B94CC9EB1 /* osal */ = { + 5536845474246C9BD29434210C7EC760 /* arm */ = { isa = PBXGroup; children = ( - 6487DFB243D65653DF7438DCBA67EB91 /* osal_files.h */, - 66814AC3B3C466A4870833B7CC41BE34 /* osal_files_ios.mm */, + 25DEDA1290E18DBA7242DCF9680B37DA /* arm_cpu_features.h */, + 3D9DAB0BA1335AAA8FDA3EB6A06284D7 /* assem_arm.h */, ); - name = osal; - path = osal; + name = arm; + path = arm; sourceTree = ""; }; - 58F07D61FDE0834ED66502D65AC7EE55 /* Conflict */ = { + 574CDF4EB0D53F722AAC38570CBB99D8 /* Types */ = { isa = PBXGroup; children = ( - 9D47FC12A026C951220B49A834F51276 /* ConflictRecordOperation.swift */, - 73B5114410208E3603B7C257E4448663 /* ConflictRecordsOperation.swift */, + F8D9AB238C0D8C37F7486D77CC4E9BF4 /* Errors.swift */, + F68723D87D569E987F572CCD08093F61 /* SyncProgress.swift */, ); - name = Conflict; - path = Conflict; + name = Types; + path = Harmony/Types; + sourceTree = ""; + }; + 576D355E80184726B5E5617C78B495FA /* Support Files */ = { + isa = PBXGroup; + children = ( + B950CCD1428D808B7F6E616FB430883A /* NESDeltaCore.modulemap */, + E8CBF48F4162BE550454D36F2B379AE4 /* NESDeltaCore.xcconfig */, + D2A1CDF2D6BFF1EF9D9061C663EE16F9 /* NESDeltaCore-dummy.m */, + 2BBF9E15124F307CDA19D3C2E2FEFCB6 /* NESDeltaCore-prefix.pch */, + 07202C173B00EB72E2B76512AB36D1FF /* NESDeltaCore-umbrella.h */, + A186ECF08D2A70ABCC190016123FC2D7 /* ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/NESDeltaCore"; + sourceTree = ""; + }; + 57C41896AEC0DF12BB266881F03075EC /* Audio */ = { + isa = PBXGroup; + children = ( + A391671858B2C18AC2A7795F92FD3F03 /* AlResource.hpp */, + A89B727AD2054C85E070A4271B58CC41 /* Export.hpp */, + 165B7915A8914F93AA1A0D7D45181074 /* InputSoundFile.hpp */, + 48316C3FF62C94776726A1CAD59F2C64 /* Listener.hpp */, + C8B01F60E394BFF06046341D779E4CB4 /* Music.hpp */, + BC8528536BD3799BBE6CA5C956B29930 /* OutputSoundFile.hpp */, + 8AE46FAE84F979857B31ACDC50F71617 /* Sound.hpp */, + 59A2650A6455EC2EFC3FA9F2C0886519 /* SoundBuffer.hpp */, + F4D26635313FF0E89E645E701C664260 /* SoundBufferRecorder.hpp */, + 6F76413369DEBF1203E4F23F42C0D065 /* SoundFileFactory.hpp */, + 3489DA9596EA467FDF1E825220781E20 /* SoundFileFactory.inl */, + 43281994AE91BE3DCE9CD0F6A87B1273 /* SoundFileReader.hpp */, + 07E188F1C0F1D9982F9D7E2B4BF63A77 /* SoundFileWriter.hpp */, + 1DF37E36CD72A2D07A3FCAD216576B53 /* SoundRecorder.hpp */, + 904DA70530378048CC4E91EB8EF417B8 /* SoundSource.hpp */, + 48BF55C9520932E61BA7E91D0DE78B47 /* SoundStream.hpp */, + ); + name = Audio; + path = Audio; + sourceTree = ""; + }; + 58FF6D9DB0D1B03CB4B69021F6DAFDCC /* Pod */ = { + isa = PBXGroup; + children = ( + 6329A4701FAEB80F4C84BEAC1AC5FE31 /* MelonDSDeltaCore.podspec */, + ); + name = Pod; sourceTree = ""; }; 596535202E734026974895E0637AE168 /* Support Files */ = { @@ -5721,101 +5855,46 @@ path = "../Target Support Files/SMCalloutView"; sourceTree = ""; }; - 59F4B66B2826CD0DDB1EB45197BD17E0 /* inc */ = { + 5978A3E51B83BDC68F09D948901801C3 /* Core Data */ = { isa = PBXGroup; children = ( - 53A3C2A5341545B46CCEF6C7DCCC3D12 /* callbacks.h */, - 2C0CA4A2A069453672147E331C600848 /* debugger.h */, - DDE3998515C1E572211C2A5EEE7EF068 /* m64p_common.h */, - 38ADDB2045DD7DB1E4811DC4854871C1 /* m64p_config.h */, - 08B17046C01595A0433E18CDE7B926A2 /* m64p_debugger.h */, - ADD476D53B05AEB62DBF869AA71DBE2E /* m64p_frontend.h */, - C5A02908B90AD54C8C621F1E9A36CB18 /* m64p_plugin.h */, - 260430D1061CEEA26EE73673BC86F350 /* m64p_types.h */, - 2CCF7001F83E60B5C530A3D02B918FE9 /* m64p_vidext.h */, - F92F2C5B0F87637AD604C89BF6D32190 /* freetype */, - 43B8C16CA1C717105AD67D3449A6EA38 /* GL */, + 9DD6E96B0D1C5E0989F7B0041FA8E00A /* MergePolicy.swift */, + 8058D48F8CF8A2D21FE0EEF65FE6BFF6 /* RecordController.swift */, ); - name = inc; - path = inc; + name = "Core Data"; + path = "Harmony/Core Data"; sourceTree = ""; }; - 5A1EC0892B1F779E42BA265C6547D2BD /* data */ = { + 5AFFA1D176342C078F56607E981895BA /* src */ = { isa = PBXGroup; children = ( - DFD30F6DE5762FE7D5CEA0AFE95ACACB /* mupen64plus.ini */, + 08EEF87CE7D5964AB34DCF33763BB099 /* AutoBuild.h */, + 8854B895A2B698DDB8BD5A2748BC1885 /* NLS.h */, + 2889DF4390F5E2FFDA11CCE9E534746E /* System.h */, + 585857562D0E1129BE114DD8982CFEAC /* Util.h */, + 9A3B25E25408121CBE11C17CCE6D44F2 /* common */, + 3039EA92A7CC3597A09418CA6DCCE487 /* gba */, + D8849A54C10E36B94B9287E6691829B9 /* sdl */, ); - name = data; - path = data; + name = src; + path = src; sourceTree = ""; }; - 5A73536B2E3D5A586084E6316E2725FA /* Extensions */ = { + 5D9C7D399393F70BB3F1B702FF0907D4 /* Development Pods */ = { isa = PBXGroup; children = ( - E296E015D17F062AF04EB6010FF3D61E /* Bundle+Resources.swift */, - BB52AEE6F8BD7BDA6E88E263AE184CC3 /* CGGeometry+Dictionary.swift */, - 4D0235C98A504B6ACCDF616BA0368556 /* CharacterSet+Hexadecimals.swift */, - 3A3B202DC9824A439BA7432E3C5B9DB8 /* Thread+RealTime.swift */, - D529199D3F461EACEE4D0D45FA961BF4 /* UIApplication+AppExtension.swift */, - 78323C76AFE569F46E583A2E3461F6E8 /* UIDevice+Vibration.swift */, - 00CE3BB55A661517FBF455927EB5D945 /* UIImage+PDF.swift */, - 5C912B946BDF259EF135410F6A5237EA /* UIResponder+FirstResponder.swift */, - 422BF12649973F5EF2DBFD89FD150DC9 /* UIScreen+ControllerSkin.swift */, + F2CEDE3045C872653E6D887DD4398A2C /* DeltaCore */, + 4DFFAC4CA66D2E2736BA76CDCCCF81C7 /* DSDeltaCore */, + 64EC8A3CBA22A4108C7282FC346922D8 /* GBADeltaCore */, + 2EF8319FB7BC57D7AD40FF9EA981762E /* GBCDeltaCore */, + 7A9143EA978F2874CB0E86F210D8C6F7 /* Harmony */, + E7B2E4DD5F27C831FA39A6730358A66F /* MelonDSDeltaCore */, + 3521A84F3F4AAF5546D9FF8E217DCBD3 /* N64DeltaCore */, + 9CC3CFD66C24CB591DDBCE5BC51A0399 /* NESDeltaCore */, + A140B0F2037C3D4792FC8BF208A23E73 /* Roxas */, + B47FEFECF5B3AF2B5B8563948D539894 /* SNESDeltaCore */, ); - name = Extensions; - path = DeltaCore/Extensions; - sourceTree = ""; - }; - 5AFAA8FA90B64741C5F3169D7938790B /* include */ = { - isa = PBXGroup; - children = ( - 424C8989A47713EDE517CF1CDBCE2747 /* SFML */, - ); - name = include; - path = include; - sourceTree = ""; - }; - 5B48C5A139E2AF535B4363EC8D3369C2 /* GLideNHQ */ = { - isa = PBXGroup; - children = ( - 5974CDB2492B4BFA5566A1D118F12B98 /* bldno.h */, - FC1899B3A2064A321C87961972F926A9 /* Ext_TxFilter.h */, - 6AA8B9D838C07E38061D4BB84F3D8B62 /* TextureFilters.cpp */, - F01F27F2E59C49CFECBCF50045F0021C /* TextureFilters.h */, - 32CD48452BE99C82FE043939384E2531 /* TextureFilters_2xsai.cpp */, - 3F714F0736F9866EDD6871679177CF33 /* TextureFilters_2xsai.h */, - C95F862EEE33E2358C6B0273BBF456D1 /* TextureFilters_hq2x.cpp */, - 85B0ECFFCE6A9F6387533730061A1A7A /* TextureFilters_hq2x.h */, - 619F66C6C65A42C014C9700FAB9316F8 /* TextureFilters_hq4x.cpp */, - 2ECDC95F1D25F3D0FDE01C632C5EEE7F /* TextureFilters_hq4x.h */, - F832E6227B7F9677B7AF38BFB58A5A09 /* TextureFilters_lq2x.h */, - 48CCDAD2D88669095B44ED625F56D7D0 /* TextureFilters_xbrz.cpp */, - 452F83D3A133C01B2A14268F26D6EB29 /* TextureFilters_xbrz.h */, - 11C5EB86C8B5D063931113BD696A449D /* TxCache.cpp */, - 8C0B76FEDF3385F8F3AF9A682EC0E276 /* TxCache.h */, - EA340C7B4D3388A8450F9A24994AB881 /* TxDbg.h */, - 320B83F85351687CBC80A3C6FC74440B /* TxFilter.cpp */, - 8AA718DD7968CE1C58CD34313E5FA869 /* TxFilter.h */, - A0CC765A71526F79EBBC52C4FF79559D /* TxFilterExport.cpp */, - 98429553652599A6220233E3F8D224FD /* TxHiResCache.cpp */, - BE3BB976C21C71194C0B3D42717A0917 /* TxHiResCache.h */, - 3B05FC42F83ADA41DEED532540CD7174 /* TxImage.cpp */, - BAC79183F81C91B3272AAD8FC4B608B5 /* TxImage.h */, - B0A321F5CF3FAD29047B4FF624618004 /* TxInternal.h */, - C5D68576CC0EE04A78AE791897AFD780 /* TxQuantize.cpp */, - 4E413CD260AC5D4938501D07A19728DF /* TxQuantize.h */, - 205D59098479C96A36856ACF72D6AF7C /* TxReSample.cpp */, - 6AA904F6B4EABFBD175084421003EB09 /* TxReSample.h */, - DCA41822F3659F65C03D6B0D418F612B /* TxTexCache.cpp */, - 8FB4CA94B76B2411E5EE78414D82B20E /* TxTexCache.h */, - 50A10752DB4054391124647027696A55 /* TxUtil.cpp */, - 2E57F66FFEB81B1218E882DC67DDCD97 /* TxUtil.h */, - E721311C13AE68B2699A1D4C03214451 /* txWidestringWrapper.cpp */, - DC46D472713AEC4054D4A5794AAC802C /* txWidestringWrapper.h */, - 458060462E570AF0419D767088046F1D /* inc */, - ); - name = GLideNHQ; - path = GLideNHQ; + name = "Development Pods"; sourceTree = ""; }; 5E17B37210FA8ADA5462EB3753473933 /* GTMSessionFetcher */ = { @@ -5829,149 +5908,267 @@ path = GTMSessionFetcher; sourceTree = ""; }; - 5EDFFBA74A4D2E7501881A25047D5BD8 /* Controller */ = { + 605CB6DB9B1497A7E96E91A06EC63F85 /* Keyboard */ = { isa = PBXGroup; children = ( - 8EE05B7A52F5A35ED15F9580C4144EC6 /* ButtonsInputView.swift */, - C2472287C41451AFFEC020183BD042A3 /* ControllerDebugView.swift */, - 399024492430E7258571697FBE41E931 /* ControllerInputView.swift */, - FE17B4BADFE9DF6A6CCAF0CF0BE25D9F /* ControllerView.swift */, - EB1DC75CE747381BA8AA66BC31541BCF /* ImmediatePanGestureRecognizer.swift */, - EC9DD621FC3DC24A24E27BD8B1C292AE /* ThumbstickInputView.swift */, - 0D2FEA2156756F729E3BD6869EBAA42E /* TouchInputView.swift */, + C31AFF7B6567C46BCD1D5FF5A40AFEFD /* KeyboardGameController.swift */, + C45CF5051C61E98E1D10FDAE36FED44A /* KeyboardResponder.swift */, ); - name = Controller; - path = Controller; + name = Keyboard; + path = Keyboard; sourceTree = ""; }; - 5FC73EAD32863F7C79A708AF761CF3BD /* Types */ = { + 614943D8F926ADF04746BCD443ED3ACE /* Controller Skin */ = { isa = PBXGroup; children = ( - 81A8FD9E119F896E60B2564D9D8761CD /* GBCTypes.h */, - A0E180FFBDDF6AD6D35795FD64A7222B /* GBCTypes.m */, + 7C4240EE1FE35FE23E5975F8DCB23A33 /* Standard.deltaskin */, ); - name = Types; - path = Types; + name = "Controller Skin"; + path = "GBADeltaCore/Controller Skin"; sourceTree = ""; }; - 61E723CAF793205951264CB8D0EFB28E /* tools */ = { + 6182B0857A6FD441715CAA069BF904C3 /* SDL */ = { isa = PBXGroup; children = ( - CF6CFBF5D3D08E7081D6FE7FC32A40AE /* sRGB.h */, + 5E5267A220D47D998845DB51485386A8 /* SDL.h */, + 1FF571FDBAF68294C828B93CF7AB2606 /* SDL_config.h */, + E8274D72B068FDD5B8433E16806FBEB8 /* SDL_opengl.h */, + 523D82D262DC8E536D345567D04FF3F5 /* SDL_opengles2.h */, + B5FBEA1458597421280682E90821C05C /* SDL_thread.h */, ); - name = tools; - path = tools; + name = SDL; + path = SDL; sourceTree = ""; }; - 654415BCD38185588B5CEFEC6E03DA33 /* controllers */ = { + 61B139DDB65B01755197392AECC177E4 /* core */ = { isa = PBXGroup; children = ( - 66403032D229EFE419B1F624D8E3A6AE /* game_controller.h */, - 918A4DE28AA523D70FEF2E295C999644 /* paks */, + F1A146BC0741538EE96C0E759582B337 /* NstApu.hpp */, + 68472F20D32A525A0FA8C6D283E05655 /* NstAssert.hpp */, + 7F445EA81E198A163B9A40E5A2E7653A /* NstBarcodeReader.hpp */, + D54FDB83A8048619B7C58407A8302609 /* NstBase.hpp */, + 51AE0D8A1BA524D7E3E2B194F7CE4A37 /* NstCartridge.hpp */, + 00DC15146753301043922CC27C6DB1EC /* NstCartridgeInes.hpp */, + 36D6B831A12A9A6161E3436E49D4113A /* NstCartridgeRomset.hpp */, + 2541FACE6856FBF20F718BF93515A799 /* NstCartridgeUnif.hpp */, + D24E88AD3320735A8600F142B16FD580 /* NstCheats.hpp */, + 35735087EA4B8B9922B5CAF03314D85D /* NstChecksum.hpp */, + 1437D26717ED40A8C5CDAC510546F0AE /* NstChips.hpp */, + 3985853293A865E5A5336745DE4139F2 /* NstCore.hpp */, + 32C6794E2F48E8D40B8DA4F984505F38 /* NstCpu.hpp */, + 85522F84ED70DA2A5D98CB751A79DB2E /* NstCrc32.hpp */, + FC77FD154105FF5182FC0B3EB06431FE /* NstDipSwitches.hpp */, + 20855F4A8AE76A4363C4DE75B53963FA /* NstFds.hpp */, + 8F3A9DEA75F75C3ECC9442042F92E484 /* NstFile.hpp */, + 63180C4F702A63C80A6A6C9888B52876 /* NstFpuPrecision.hpp */, + CC3FC4F8CAD332D94FED0C7DA4BE5251 /* NstHook.hpp */, + 99AFEBCD0E127C34321505B630C49E92 /* NstImage.hpp */, + 83C151DB4B297DC753E27E2E0F3C3BC4 /* NstImageDatabase.hpp */, + 6BFD0F656B9079094013712B8261B5E1 /* NstIoAccessor.hpp */, + BE0C7306F2F560B898301521B0E951DA /* NstIoLine.hpp */, + 5033ACF3304F791248B9A86346AD675C /* NstIoMap.hpp */, + 46639CDFB2B4FF61588F77A4A2FFD6FE /* NstIoPort.hpp */, + 2D2882065898FB0E38AD32AA9BC8E931 /* NstLog.hpp */, + 59E4444E0AA576955C9370592EBB6D96 /* NstMachine.hpp */, + D5643A5674D32FE8D35CE78AF0B30F39 /* NstMemory.hpp */, + C786A086E27CBD3229EFD85CE7497EC8 /* NstNsf.hpp */, + 3D532E4E7993FC7D9C8EFA78B07605D3 /* NstPatcher.hpp */, + 6E3F8E9A443CB8805EFE8175563E893E /* NstPatcherIps.hpp */, + D14E9FD4E7425DDD45906CDB6CEB7EF9 /* NstPatcherUps.hpp */, + 3465DB1B610ECE37C91169B30B6FF528 /* NstPins.hpp */, + 2769336E22CE289D3CE9EC20CBF91610 /* NstPpu.hpp */, + 436B7542629ABF7B0FFD6BB9B072FC21 /* NstProperties.hpp */, + B584A470AF957ABEDF9EC1339C950355 /* NstRam.hpp */, + 5231969A4CEB871747903C8249FAAB98 /* NstSha1.hpp */, + CB66A3376ED296C661FFEAA36063E7A5 /* NstSoundPcm.hpp */, + 31E520FC3E469009B4F65BACFD5C14C3 /* NstSoundPlayer.hpp */, + DFC688B75792FBFBB3B452084CA3837C /* NstSoundRenderer.hpp */, + 26539A58480363BAF74C49F66717AAE3 /* NstState.hpp */, + 94393ABA91B101430546FBAF247742E1 /* NstStream.hpp */, + 1F076350328D4154B3E88F3C4B2D80CD /* NstTimer.hpp */, + 510A47958AB211D60455C0DBFCFF190A /* NstTracker.hpp */, + 8009E402564A24AC35F53518E984813D /* NstTrackerMovie.hpp */, + 71C2F464A8210B73F02BF45EDE6E1EDC /* NstTrackerRewinder.hpp */, + BCB1D2FFB53452577990FA3D356A4DD7 /* NstVector.hpp */, + EB480F86E824BBF3F976C29F3F518408 /* NstVideoFilter2xSaI.hpp */, + 92FE3ED203451DF6D2875541FE82FE35 /* NstVideoFilterHqX.hpp */, + B6460A6DCAB66445786D1832B9B7D54A /* NstVideoFilterNone.hpp */, + 04129B9A3BF487A2771D1CC76731FB37 /* NstVideoFilterNtsc.hpp */, + BD74931B096C1E1F3A72E00B9A1B4861 /* NstVideoFilterScaleX.hpp */, + 867F308297D845E4AB0774374BB3EFB4 /* NstVideoFilterxBR.hpp */, + 4753C1496FC2EDB1151EF16865D566B5 /* NstVideoRenderer.hpp */, + 75C95A2D2A55102279FEBE572C7A8FB0 /* NstVideoScreen.hpp */, + C6615F5A71F8DCD1E426F1118FC5F17A /* NstXml.hpp */, + 347FF7946245CC6482030C5BCDAF89D0 /* NstZlib.hpp */, + 0E1D35D03C7FAADE495608D5046D0A18 /* api */, + 3CB2B35203C1BE5309CFD0B5D3E4AA68 /* board */, + F3FAB28338DAB442AA642FA077588C12 /* input */, + 46E6823192910AD82FBBDC0D0978297B /* vssystem */, ); - name = controllers; - path = controllers; + name = core; + path = core; sourceTree = ""; }; - 67729C4B61A9E5087982AA63B6CE8345 /* PublicApi */ = { + 64EC8A3CBA22A4108C7282FC346922D8 /* GBADeltaCore */ = { isa = PBXGroup; children = ( - 6E7AAD31402E31872C9054EB4185634A /* android_hardware_buffer_compat.h */, - 7887B596C85B88D5126C1D115B8C9582 /* check.h */, - 133FFF074C7375B30FD28DFF38BE260D /* dcheck.h */, + A7D99A0C8471ED5A72EC714EB0E34577 /* GBADeltaCore */, + C50EC8B7A25F27641BEB6631E4FA28C2 /* Pod */, + 766178C737CCE1B1D4E3A5FA1919443E /* Resources */, + 6762DBCA93FC65CDC183149D19D8E6E0 /* SFML */, + 49FC0C20B7D56465BC518FD20FF306A4 /* Support Files */, + 77EC5712B07DECCA7AC20273239C074C /* visualboyadvance-m */, ); - name = PublicApi; - path = PublicApi; + name = GBADeltaCore; + path = ../Cores/GBADeltaCore; sourceTree = ""; }; - 6A9FECAC90D84DC9C2E44FC9199B87EB /* preader */ = { + 666CF51E00E65540C78ED2BCEDCB4DDA /* config */ = { isa = PBXGroup; children = ( - 2446C10AA94654AF8E1C4ADEB9142AD5 /* pngusr.h */, + F8EB681067B1016B70AE4047A7C916B9 /* ftconfig.h */, + FDF22CB647ADB3D529D1C542345BB178 /* ftheader.h */, + 9A22E94D129FB402325A388CC5DF7FDD /* ftmodule.h */, + 94D43A3C12E2607439AFFC8A1D1CDE41 /* ftoption.h */, + 487DD8DC7317E0C36210DD3B701C4E0C /* ftstdlib.h */, ); - name = preader; - path = preader; + name = config; + path = config; sourceTree = ""; }; - 6AAF9BCA07572C16100992B0162BB1E3 /* Operations */ = { + 67425911E69D42057DB264EDBE35E135 /* Upload */ = { isa = PBXGroup; children = ( - FBEB0C887336CD9006A57A0852F915DA /* Operation.swift */, - 412DB502B74306CF8DF0466A42864A4E /* ServiceOperation.swift */, - 9EFA3B9D1B35DA0B89C71DA1D01B3B45 /* SyncRecordsOperation.swift */, - 58F07D61FDE0834ED66502D65AC7EE55 /* Conflict */, - A3EA455CA1E4E1F9431E9263CF4851D4 /* Delete */, - A53A8976966BE4B7422DB18F3103BEA2 /* Download */, - B7610810046C36DD994B73E0DE4BBCD6 /* Misc. */, - 11AE318CBF1950592491D3ACDEC304CE /* Parent Operations */, - 7B4E56E8923910A3E4CEBB5E99DE0541 /* Upload */, + 86E0555011765103678D4A46B0D7CD30 /* FinishUploadingRecordsOperation.swift */, + 7959936C4C72BFF6C57D269BD58A6A92 /* PrepareUploadingRecordsOperation.swift */, + B236B2DB89B26DE7B16E762CF3080C5A /* UploadRecordOperation.swift */, + 5A684B9BC0FD9B61CE70469E6CF6BA3C /* UploadRecordsOperation.swift */, ); - name = Operations; - path = Harmony/Operations; + name = Upload; + path = Upload; sourceTree = ""; }; - 6BF38915B447FF940372C7FC2ED1EA2B /* Harmony */ = { + 6762DBCA93FC65CDC183149D19D8E6E0 /* SFML */ = { isa = PBXGroup; children = ( - C2A44DFFD1971B44F0D03A3B9D7CEC57 /* Harmony.h */, - 8A542F20E7647EA7B36CB7C0565E279A /* SyncCoordinator.swift */, - DB8A6C1671C08CF27B21D36E389F1DE9 /* Core Data */, - CB7244FAF13430D229B19F209370E22A /* Extensions */, - 195200B355430B200AB0DBC8B4ABC0FE /* Harmony-Drive */, - F91F7362204553708071F1921C34C1F1 /* Harmony-Dropbox */, - B5BCA0B7CD47A78DA5B1697D5B40975B /* Model */, - 6AAF9BCA07572C16100992B0162BB1E3 /* Operations */, - 4D05B91E3529B56406824FF9DA8149F2 /* Pod */, - 3940BB7F493B1F4452B0290020CCEB56 /* Protocols */, - FBC6B86C478D8F97A3E884A748B232F0 /* Resources */, - 37F897955AA49811B78966F0084F182B /* Support Files */, - 994080062D06BE26E947CF4A4A776626 /* Types */, + 322843645E16A218E3E21F7F1031B2EA /* include */, + 908A150019FEEB8573D847EE64E9BD60 /* src */, ); - name = Harmony; - path = ../External/Harmony; + name = SFML; + path = SFML; sourceTree = ""; }; - 6DC616D796514D50D411256803FA009E /* minizip */ = { + 68F91761F4B45747210D968A81C0AF84 /* Pod */ = { isa = PBXGroup; children = ( - D0869A5AC273020F28A83BEFF3F355D3 /* crypt.h */, - BD629D406305184DD39F018AC48C58E7 /* ioapi.h */, - A5549F772937B547424E53A87C4959B4 /* unzip.h */, - 222369BCAE458E6A21F1C9AEE03983ED /* zip.h */, + 3E569C8B365BF92FAE9F87642393D402 /* Harmony.podspec */, ); - name = minizip; - path = minizip; + name = Pod; sourceTree = ""; }; - 6E3B1B87720B12D224BBA827A8147857 /* Types */ = { + 691E8906036D2728DB1DF8BA55426C61 /* ini */ = { isa = PBXGroup; children = ( - CD01747A1D135D8C97DBC34B3BADEEA8 /* ExtensibleEnums.swift */, + 3A13B4329882F5A80C1C1326BB560732 /* GLideN64.ini */, + 12E9FF9AEEDE68C957B7D04E8966667F /* GLideN64.custom.ini */, ); - name = Types; - path = DeltaCore/Types; + name = ini; + path = ini; sourceTree = ""; }; - 6E3F94BFF62C194BE0258DBEB0D157F5 /* Emulator Core */ = { + 69E4E3FE2951C36B65E35D1387C96162 /* Controller Skin */ = { isa = PBXGroup; children = ( - BE235836DD079740208A4AF1D7DB9F35 /* EmulatorCore.swift */, - 3075365372BC210E9C1E4F40E26C5BFC /* Audio */, - DC3020A2448B8055BB5E80F16F525BE6 /* Video */, - ); - name = "Emulator Core"; - path = "DeltaCore/Emulator Core"; - sourceTree = ""; - }; - 6E412BAEDBF8A6DDC4DF29F84D4A7289 /* Controller Skin */ = { - isa = PBXGroup; - children = ( - 6630BB30C19291FAB71F19904132A2FB /* Standard.deltaskin */, + 560F98A5E3D6842B976BE9CCD21AF72C /* Standard.deltaskin */, ); name = "Controller Skin"; path = "Controller Skin"; sourceTree = ""; }; + 6A6E41D3669E6FD1B2E14AE70E799A53 /* internal */ = { + isa = PBXGroup; + children = ( + 29100634EB1C2E5E9877D238B86CDBB4 /* autohint.h */, + F87EFA6D54FDC38E1D796063498DB67B /* ftcalc.h */, + 3C045A31E9EBE0F4CFBE198690BA4782 /* ftdebug.h */, + EA8D045A4BAB5806465552F9EAD05287 /* ftdriver.h */, + 9537E6C2A66052A73DC48C9A51A85FCA /* ftgloadr.h */, + 2FADAD20817CF7C88C8300D762D5C633 /* ftmemory.h */, + 531E9AB4F828520F2368955170BA41BB /* ftobjs.h */, + 1406F5851ECA113961E420930E44400E /* ftpic.h */, + 4A1DFA16FF297CF6D496D8299BD6B3A4 /* ftrfork.h */, + 96A5F0CC9425A669A2FB1790D3BDAABD /* ftserv.h */, + 4ADEEFFAB7CD01EA4E844F0F78DBC0E1 /* ftstream.h */, + 88EF2BA95EB1E18CBC11B6130EC55E16 /* fttrace.h */, + 191702D253506FDF5363FBCC895772FA /* ftvalid.h */, + CEF3CC6501A56EB934F1F25AEB77A985 /* internal.h */, + 89E570CBAF755D32B62B2B5506AE1CB8 /* psaux.h */, + E95A0C3C6E26DB4E26E12433BE937DB1 /* pshints.h */, + 6B0B9BFF156565987763A09CCD986B38 /* sfnt.h */, + 819239301CC1811B87F438BAF1B0EED6 /* t1types.h */, + 021A9462364AFC38855FC545DCD6A6B0 /* tttypes.h */, + 6A85EC30AEDD1F66DAE27BB99E960948 /* services */, + ); + name = internal; + path = internal; + sourceTree = ""; + }; + 6A85EC30AEDD1F66DAE27BB99E960948 /* services */ = { + isa = PBXGroup; + children = ( + 1D7AF9FE08D2F6576462E7ECCC9C6E89 /* svbdf.h */, + 2E9C9E58EFFC6846E01B3B75A4595B21 /* svcid.h */, + B290CCC059154476A70C27D7890B7036 /* svgldict.h */, + 19B404312BCFE831CA10C0C54C6D0B58 /* svgxval.h */, + 4541F12B3B53C045767B87EFB73A1AF3 /* svkern.h */, + 0F261E13B1AC030CBAE70448ABC2DD8F /* svmm.h */, + 898591A3CC8C587571FA098CCC20AADF /* svotval.h */, + C4D7382D1D8B2EAAEDEC4E420FAC72E6 /* svpfr.h */, + EB05D37130F5C1E54F68ECD8CDDC22EC /* svpostnm.h */, + B1080C9D0AB5BC601BD4F16A50CC842F /* svprop.h */, + 86BF9E53BBD7D649033BB1F156870DE2 /* svpscmap.h */, + FF62ADB0969A5BAF88DAF079C924AD01 /* svpsinfo.h */, + 3139CDEFDF54874B3FE87D52FBEE63BB /* svsfnt.h */, + 478F2C8230CA263EC0A07EBCB8012403 /* svttcmap.h */, + F1AD374BED968FBCE790AA433A78D057 /* svtteng.h */, + 224EC23CB708246C666EA6D597EF0933 /* svttglyf.h */, + EAA42FF0995A2ECDE8654C66A329FEEA /* svwinfnt.h */, + 593847BA38E9D8A068903E6A731921D5 /* svxf86nm.h */, + ); + name = services; + path = services; + sourceTree = ""; + }; + 6BA858087FE944A871442E1A6169B1DA /* DSDeltaCore */ = { + isa = PBXGroup; + children = ( + 9925E412F176DF45C332321285001A55 /* DS.swift */, + F53638C24ACA94901DB9D57442F188F0 /* Bridge */, + D69D7D25F4E9A906F68D85671AB8DC5C /* Types */, + ); + name = DSDeltaCore; + path = DSDeltaCore; + sourceTree = ""; + }; + 6DE678F7BFF7FAD287319F59C6B676C7 /* N64DeltaCore */ = { + isa = PBXGroup; + children = ( + 9CC748D2AFF9AC9A78EA9982425EBACD /* Standard.deltamapping */, + 69E4E3FE2951C36B65E35D1387C96162 /* Controller Skin */, + ); + name = N64DeltaCore; + path = N64DeltaCore; + sourceTree = ""; + }; + 6E5A5972D2530E92EC6BBC93C20EEADA /* rdram */ = { + isa = PBXGroup; + children = ( + 468999824D8EE841754A3B910A80F137 /* rdram.h */, + ); + name = rdram; + path = rdram; + sourceTree = ""; + }; 6F0B83131829471EC8237B841FD21515 /* SMCalloutView */ = { isa = PBXGroup; children = ( @@ -5985,72 +6182,6 @@ path = SMCalloutView; sourceTree = ""; }; - 6F1AA42E253D4B3FE8E609EEB5631BBD /* snes9x */ = { - isa = PBXGroup; - children = ( - 816D92F12BC3698BEE8F45620FB157CC /* 65c816.h */, - 23C48688B8A512FFB646E121E3FD49DF /* bsx.h */, - 0B7FEA4E81066CF6432FBD99B31C13B8 /* c4.h */, - 17878ECFAC417AC4ABE2928837CDE2B3 /* cheats.h */, - 5CD922BCE2DF46F11E7202475E037EF6 /* conffile.h */, - DF75CDA06A2F599F32A8F0E05EEF39FA /* controls.h */, - BABB271F3BD66B98A48FF2230E57E168 /* cpuaddr.h */, - 1427093FF23F46B310155A7F63393171 /* cpuexec.h */, - CA99918A66499B3FD57B4BE6A2985044 /* cpumacro.h */, - 5DBAD979C7A7D60BB2463567CEF807D0 /* cpuops.h */, - 4BD2DEDB678D75D5ACAAB02F7DA550CA /* crosshairs.h */, - 71F6E550519668062C1B78FCF1BBCEA0 /* debug.h */, - EB1C41ECAFCB4B62AC6DB322A26DDBCB /* display.h */, - CBE1D5062813EDF33B5FBD108CA1A88C /* dma.h */, - FF46137EDAAC9DD905A8E9D0602099DB /* dsp.h */, - 60655F2593406B5777F801C875F02F75 /* font.h */, - 24E1A25642D89F5B30A1BB2FB864AFA7 /* fxemu.h */, - F92CC3DB4FB3E1C8CB02FF550968E5DD /* fxinst.h */, - 0D713472AF6AAB8E1D9ABC6D7A61B49B /* getset.h */, - C9E53CDEE3FB0C997231AFF0EA62A9F4 /* gfx.h */, - EE4444EAFD33EB8BAB4FCBCD65A8446A /* language.h */, - 3A4016B959B9C2B70E21D27AA4439760 /* logger.h */, - C5E44048879A0504939654F65166654C /* memmap.h */, - CE46BF9BB2E03B58F53E69C87B3A1564 /* messages.h */, - C8A210C3B60C6D8D12F6F8820EF28589 /* missing.h */, - 931FABEC117CE8C4B00CF9281008FAC6 /* movie.h */, - 3B254FADF7513993D3F7353F6B8F1395 /* msu1.h */, - 4E7E27D5ACEAA8A8DA1B1BD200ED75A2 /* netplay.h */, - D6CAAD3D41D505A55D4926BAF41AF958 /* obc1.h */, - 86D90CE2D6B95B2AA99812247EC3691B /* pixform.h */, - D26E750E5A5772E0667870225E0F7C1B /* port.h */, - D9ED4C71C3016ED3FC4BA58AD0F23387 /* ppu.h */, - B0652246947AE2743F7B21B7464BAB5E /* sa1.h */, - 15EAE2283516A3200D537010AA0BBCF9 /* sar.h */, - 634114A0217955A80057DD03929C6053 /* screenshot.h */, - 99EB232B4913EA46C51277C86DF16B8D /* sdd1.h */, - ED04A2B8DBDC30DD89B8DB99DD186974 /* sdd1emu.h */, - 94228059341CBA18109047D570DAEA1A /* seta.h */, - F1B217B4E1DE3906B3076571296DFF09 /* snapshot.h */, - AF827FC48147DE18B9FB7A80EA33C3FD /* snes9x.h */, - A05A1526F5B055B18305FA115EF3E9A1 /* spc7110.h */, - 539542F40794BD9C9D5856536A7CA2EC /* spc7110dec.h */, - 2773A5A159F5DFA0A928E49F68CC6E2D /* spc7110emu.h */, - C790529DABD6E54A2BA3E56B1C845F12 /* srtc.h */, - BF56520AA924EF4F971217A9D8F49143 /* srtcemu.h */, - 4E9E01B822B1A73A97B8C2E46EDEF08A /* statemanager.h */, - DBAA90C42D53B3B86801C3ADD7C2CC2A /* stream.h */, - 1E62A12C767331BC621336E59054040F /* tile.h */, - 3958CCBE1C4FE437EB8762E6E7E7CBB4 /* apu */, - ); - name = snes9x; - path = snes9x; - sourceTree = ""; - }; - 6FA6999353DEF6348ACBC4CE9C584F58 /* mi */ = { - isa = PBXGroup; - children = ( - 914481AFB63938A5A293F3B322F5FD91 /* mi_controller.h */, - ); - name = mi; - path = mi; - sourceTree = ""; - }; 6FBA49B1C6CAD3E9EDC15F4663849FC0 /* Support Files */ = { isa = PBXGroup; children = ( @@ -6060,234 +6191,288 @@ path = "../Target Support Files/Crashlytics"; sourceTree = ""; }; - 6FE57C2C800C9D78F2ED2F067BDED53E /* ai */ = { + 70CDD20DF7778DA641A8712E3B9525FF /* Filters */ = { isa = PBXGroup; children = ( - CFB8F56FBC758AE2588C1DD814A5F9D6 /* ai_controller.h */, - ); - name = ai; - path = ai; - sourceTree = ""; - }; - 6FEE718F6FFE5384C3777E89C1A2F82E /* System */ = { - isa = PBXGroup; - children = ( - 52CF632514D6A787809AE4E842F41C5E /* Clock.hpp */, - FDCE262FF472DECC637657F3849A293C /* Err.hpp */, - 050EF16DAA3290D00AA4795AD24E1921 /* Export.hpp */, - FCC13C918B0DF97D6202A60A3DC17CF5 /* FileInputStream.hpp */, - FC1CF3E36F8504F4DCC758CF61B97CAE /* InputStream.hpp */, - A0C45B1398394AA1FEB5A3FCD517E92D /* Lock.hpp */, - 173F53675D53F79BED6F8E8D2FB1D09C /* MemoryInputStream.hpp */, - 9F97A82B4B62F88A9ABDCB471BD4E255 /* Mutex.hpp */, - 48A852C211E587038DA4AA46F7C9B164 /* NativeActivity.hpp */, - 56359FB46FDD3587DC048FBE0BC7E9E1 /* NonCopyable.hpp */, - 33B4914FDB89C5B28445FE64AA86085E /* Sleep.hpp */, - 4DC0729F6C80B77D9248BFEFE0B0F039 /* String.hpp */, - C77DD7055BE2E940CB49A8B0F10A472F /* String.inl */, - 90E20CF10E66ADE35B580C23C72D76A4 /* Thread.hpp */, - AF9B8513D3E4438D5136203FCF9D99E5 /* Thread.inl */, - F586E6135CA6E3F0C67A2EAE0344D88F /* ThreadLocal.hpp */, - F1ED211A27FC73A088DC43D3FF931A16 /* ThreadLocalPtr.hpp */, - B57DE6F8DC52A0DF6FA63026114732E6 /* ThreadLocalPtr.inl */, - 5F4BA7A7D97044CD5A2BE415D287BEC1 /* Time.hpp */, - 187D4D612762D2AF1FECAFF87EFEA7CA /* Utf.hpp */, - 8DDA3FCC5B59298F8FF38E7914D03FB0 /* Utf.inl */, - DBB26A9F3AD2F7159A0C7E893521DBCA /* Vector2.hpp */, - 32498379B364CA72F850FD7D3200CF6B /* Vector2.inl */, - 40C9A47942EB199AC851986CB149BF7F /* Vector3.hpp */, - BF94EC77DBC5DFAC5751843F5F04C129 /* Vector3.inl */, - ); - name = System; - path = System; - sourceTree = ""; - }; - 7209A91034D3EFAFB68287C9E0860F8B /* desmume */ = { - isa = PBXGroup; - children = ( - 3947B40AEF7771B4A4C8CB9580BFE4B9 /* src */, - ); - name = desmume; - path = desmume; - sourceTree = ""; - }; - 7312C81CEF3F2AB59009C8D0DBCA6307 /* Resources */ = { - isa = PBXGroup; - children = ( - D1E6CF2256BF01CFCB8C7C6BB1D101FE /* RSTCollectionViewCell.xib */, - B3701068412FCD905D962E33387C2680 /* RSTPlaceholderView.xib */, - ); - name = Resources; - sourceTree = ""; - }; - 756FE505CC37B6C3C2393B16D9FB6318 /* Resources */ = { - isa = PBXGroup; - children = ( - 1708CC47B44B29F11E1399CFC0321DC7 /* Standard.deltamapping */, - 4D9195AC400DB755A053EE8F3AF59DAA /* Controller Skin */, - ); - name = Resources; - sourceTree = ""; - }; - 7575F2E08696B62C99622BDEFC7F139E /* NestopiaJS */ = { - isa = PBXGroup; - children = ( - 16493B09A57A9904E0843D5268271785 /* NESEmulatorBridge.cpp */, - ); - name = NestopiaJS; - path = NestopiaJS; - sourceTree = ""; - }; - 76188A77CA519378F94C4A102F002622 /* N64DeltaCore-Video */ = { - isa = PBXGroup; - children = ( - 7174246F378A58D37BD4927CEE3799A4 /* plugin_delta.cpp */, - 9DFC0EF480A5361B80E075558EEDEDEE /* TxDbg_ios.mm */, - ); - name = "N64DeltaCore-Video"; - path = "N64DeltaCore-Video"; - sourceTree = ""; - }; - 764CBED5851C0D2B20C8C32A1379B406 /* win32 */ = { - isa = PBXGroup; - children = ( - 5EE59BD5CCE08A1257054978F5F52E22 /* Dialogs.h */, - ); - name = win32; - path = win32; - sourceTree = ""; - }; - 77DE8B3A59B3AEA94EA1936289EFD550 /* Game Controllers */ = { - isa = PBXGroup; - children = ( - 93910D17E45B6F0DD31F72703A5A2651 /* ExternalGameControllerManager.swift */, - B7C961F0CF8CC2E98500C8E3DA3C6F56 /* Keyboard */, - 27404E771822F8CE1A70EDB526C8D2C8 /* MFi */, - ); - name = "Game Controllers"; - path = "DeltaCore/Game Controllers"; - sourceTree = ""; - }; - 77EC95F113FE3910D426C200FE0A8515 /* Mupen64Plus */ = { - isa = PBXGroup; - children = ( - 20866A2BE0BCA7D1C914AC07CD1C0CE5 /* mupen64plus-core */, - ); - name = Mupen64Plus; - path = Mupen64Plus; - sourceTree = ""; - }; - 78D34056D179147F7BC9585C1F1EF02A /* SoundTouch */ = { - isa = PBXGroup; - children = ( - F57889A91C00957E173557D366708F01 /* AAFilter.h */, - 912A34EEAB2393779814319C7BDDC198 /* BPMDetect.h */, - E21A90A7C4C571865F8859DE15FB6A94 /* cpu_detect.h */, - AB065A0FEDAFF486E7DA04E1936E82A1 /* FIFOSampleBuffer.h */, - EF6779B78D5B9B6019F29579F2C1C894 /* FIFOSamplePipe.h */, - 77934694A34ABBAE5B4157E7F028F45C /* FIRFilter.h */, - 9AFAB5260C27DEE351813C7122CD4AF4 /* RateTransposer.h */, - 9300FDAE5D36EBEB31F93D3C7215E806 /* SoundTouch.h */, - 2013712F504FC10A75B32DB78638B56B /* STTypes.h */, - CFE10B16B0C4C7D24E899A604244116E /* TDStretch.h */, - D8E275522B55AF9B007FC628DA27411C /* WavFile.h */, - ); - name = SoundTouch; - path = SoundTouch; - sourceTree = ""; - }; - 7926FD059B798BB1F06B8F20B9E7E4C0 /* vi */ = { - isa = PBXGroup; - children = ( - 115E4BA52EDB4A7B8117F27B828EF3DC /* vi_controller.h */, - ); - name = vi; - path = vi; - sourceTree = ""; - }; - 79E87841C009AFEB7C6BD7F59E5A607D /* Resources */ = { - isa = PBXGroup; - children = ( - 9C8507D47BD97C259CB67E95B0055BCC /* Standard.deltamapping */, - CC9B157823AAED29576D5EE732798383 /* Controller Skin */, - ); - name = Resources; - sourceTree = ""; - }; - 7A0257A6FA12DDD23AEAE728454C6E89 /* Filters */ = { - isa = PBXGroup; - children = ( - 3919DEC2EE937226ECE6A9846B2DA0D4 /* FilterChain.swift */, + 03A2EA6E13FD790527F86EB2CDB1E402 /* FilterChain.swift */, ); name = Filters; path = DeltaCore/Filters; sourceTree = ""; }; - 7A56E1DB35E017BCAE6D16398994B424 /* subprojects */ = { + 7154C2E8486E648D39AD98A5A92A3FB9 /* mupen64plus-rsp-hle */ = { isa = PBXGroup; children = ( - 3EAFDF2E9706DE038061C9E5CBE261F1 /* md5 */, - 6DC616D796514D50D411256803FA009E /* minizip */, - A27A1F5197BC2DC2E555618CFCF821AE /* oglft */, - C31EFB83C698738C5AE9C0BF6CC3B679 /* xxhash */, + 4C425D86DABBA56A5D636531DF67B841 /* src */, ); - name = subprojects; - path = subprojects; + name = "mupen64plus-rsp-hle"; + path = "mupen64plus-rsp-hle"; sourceTree = ""; }; - 7B4E56E8923910A3E4CEBB5E99DE0541 /* Upload */ = { + 71B1FD9F9F00BA57722EA122796FB70C /* NESDeltaCore */ = { isa = PBXGroup; children = ( - 276E27532E9C2ADF0C058B16208B439C /* FinishUploadingRecordsOperation.swift */, - 61B9452797C7F91FF8966E5CB4C041E0 /* PrepareUploadingRecordsOperation.swift */, - 3A8697A847DE43FFACD393D2A7A9B84E /* UploadRecordOperation.swift */, - 6768756BD63AFB81ABEB6934A427CA39 /* UploadRecordsOperation.swift */, + 101B4E4EEFA447219922363435CA78CF /* Standard.deltamapping */, + BE361C567DF42430A8134DD8E7E7CD3A /* Controller Skin */, ); - name = Upload; - path = Upload; + name = NESDeltaCore; + path = NESDeltaCore; sourceTree = ""; }; - 7D0D072173D1C15941C0153AB542E28D /* Controller Skin */ = { + 71D8AD7C8C41F7B003216134D839C51B /* rsp */ = { isa = PBXGroup; children = ( - 6DF6C3B7940689905856C5444F2A0E35 /* Standard.deltaskin */, + 8FEBC190192DF7DAD9E802180C71E395 /* rsp_core.h */, ); - name = "Controller Skin"; - path = "Controller Skin"; + name = rsp; + path = rsp; sourceTree = ""; }; - 7D413C8203E7C6174958FB2BE5ECF546 /* libDeSmuME */ = { + 726D24F1EA7CAFABF7D076481DDCA9CD /* libMupen64Plus */ = { isa = PBXGroup; children = ( - 7E0F32F5D4B36915598F0AD7BB83F6A3 /* pcap.h */, + 6182B0857A6FD441715CAA069BF904C3 /* SDL */, ); - name = libDeSmuME; - path = libDeSmuME; + name = libMupen64Plus; + path = libMupen64Plus; sourceTree = ""; }; - 7F5D6DC3FB853BF3A979D7FD9ABC1979 /* N64DeltaCore-RSP */ = { + 73A22CCBEF19B1B200ADA20DA0EAD4C7 /* Extensions */ = { isa = PBXGroup; children = ( - FA255603CDB62A95F35F477E2F0D208F /* plugin_delta.c */, + 13E354663056D2C09F9EBDE7F3F20EF4 /* PropertyGroup+Harmony.swift */, + EB870F4AD39D4A4E00866F16DBDCEE49 /* RemoteFile+Dropbox.swift */, + 7A95544E49AAD44E88BF2C9268C9BF94 /* RemoteRecord+Dropbox.swift */, + 439530753701672255509E76BB1AC1D7 /* Result+Dropbox.swift */, + C0F453A50C9E6D70D2C15CD2F4D9BE68 /* Version+Dropbox.swift */, ); - name = "N64DeltaCore-RSP"; - path = "N64DeltaCore-RSP"; + name = Extensions; + path = "Backends/Dropbox/Harmony-Dropbox/Extensions"; sourceTree = ""; }; - 80AEC6AD356F82726370FFA4422B0E6A /* rcp */ = { + 73AC65775484D790A4513276554D93B0 /* UI */ = { isa = PBXGroup; children = ( - 6FE57C2C800C9D78F2ED2F067BDED53E /* ai */, - 6FA6999353DEF6348ACBC4CE9C584F58 /* mi */, - D5418A693FAB0FDDC317EB3D01B003EC /* pi */, - F9061D0E4A60F9CAA6C2BAA0D3980F65 /* rdp */, - 304255FE83E88222A8624B2298155DDB /* ri */, - 90233FB8AF2436EC459CF5C8E6D51F94 /* rsp */, - 44774FEADB9DBAB7FA8987857610D470 /* si */, - 7926FD059B798BB1F06B8F20B9E7E4C0 /* vi */, + E060CDEFDAA623301C96D049520E1924 /* Controller */, + 31DA7F6969B04ECA08F4A532B26E06E2 /* Game */, ); - name = rcp; - path = rcp; + name = UI; + path = DeltaCore/UI; + sourceTree = ""; + }; + 75D48382A035E39E6AEADD37EB9378EA /* Types */ = { + isa = PBXGroup; + children = ( + 6528F5BD6DE6044B356E5ABAC6FAC340 /* GBATypes.h */, + 01BB302ADFA2AECE433F8364E67758FA /* GBATypes.m */, + ); + name = Types; + path = Types; + sourceTree = ""; + }; + 766178C737CCE1B1D4E3A5FA1919443E /* Resources */ = { + isa = PBXGroup; + children = ( + C94926745D8A006AA0A950A854249A42 /* Standard.deltamapping */, + 614943D8F926ADF04746BCD443ED3ACE /* Controller Skin */, + ); + name = Resources; + sourceTree = ""; + }; + 77EC5712B07DECCA7AC20273239C074C /* visualboyadvance-m */ = { + isa = PBXGroup; + children = ( + 5AFFA1D176342C078F56607E981895BA /* src */, + ); + name = "visualboyadvance-m"; + path = "visualboyadvance-m"; + sourceTree = ""; + }; + 7A9143EA978F2874CB0E86F210D8C6F7 /* Harmony */ = { + isa = PBXGroup; + children = ( + 94188727366A8D8FB099D152B9B5514A /* Harmony.h */, + E0D8C051806BA9A8817550D4A2D2B252 /* SyncCoordinator.swift */, + 5978A3E51B83BDC68F09D948901801C3 /* Core Data */, + 4011A58C5A76E9F8A749065891C1F60D /* Extensions */, + 2F0EE6FCF6D8D0B16B4BCB67BFB864DC /* Harmony-Drive */, + 18727D12B38DBE263195F41504FA8D5C /* Harmony-Dropbox */, + CD6F15D7637CCCEAC5C7E93368FACE0A /* Model */, + 9B2666DEE92A53F3397CF077560040FD /* Operations */, + 68F91761F4B45747210D968A81C0AF84 /* Pod */, + FE205864B17A0FD3D1D5764C22BA82AF /* Protocols */, + 1EB1AC2AB2C378551CD37458FB961332 /* Resources */, + DC206325D48CA7D2F7AA08D057B3E7A3 /* Support Files */, + 574CDF4EB0D53F722AAC38570CBB99D8 /* Types */, + ); + name = Harmony; + path = ../External/Harmony; + sourceTree = ""; + }; + 7C552940D03D37E9B617BAD120CF27AC /* Pod */ = { + isa = PBXGroup; + children = ( + F493D9ECA469065557E25536C96A24F6 /* NESDeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 7CB5474A87AAEBB783F6DA31AD82102D /* Pod */ = { + isa = PBXGroup; + children = ( + 421D4EF2D9F1B9B43F5F0ADBF9EC0732 /* DSDeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 7CCE505326AA63497CACBA1133203D26 /* Video */ = { + isa = PBXGroup; + children = ( + 04385EC426A3C43A5929D27B1678A4D1 /* Mupen64Plus */, + F208F16F6DEC98566E7A56F835A232E2 /* N64DeltaCore-Video */, + ); + name = Video; + sourceTree = ""; + }; + 7D30CEF36E3AA4864FFBED8A11EDFD63 /* SFML */ = { + isa = PBXGroup; + children = ( + C789F35DF9D922934F14887196EADCFA /* Audio.hpp */, + 0556A2BF839B0F53563F8D71873A9029 /* Config.hpp */, + FAF16778F14BDA46D135E62DF52FD5B3 /* Graphics.hpp */, + B0518B00315F12AA09635E19BCD35156 /* Main.hpp */, + D2AC56C3AE1F0BBCE09D6CE758D402CE /* Network.hpp */, + 2597239B8799F016700A89F4C2178031 /* OpenGL.hpp */, + BEE8A481C346821332E9ADE7236FB066 /* System.hpp */, + 6EDFEABAE45559F46811B55AFB37E632 /* Window.hpp */, + 57C41896AEC0DF12BB266881F03075EC /* Audio */, + 7DE52B4190F862AAAC858529E1CC5095 /* Graphics */, + 9EB66C10805301C308E5ED2C2872CA82 /* Network */, + 7D991220735508D0CBE7AF1526F8C279 /* System */, + BB527A7752C939F05A0A33967DAF5CE9 /* Window */, + ); + name = SFML; + path = SFML; + sourceTree = ""; + }; + 7D991220735508D0CBE7AF1526F8C279 /* System */ = { + isa = PBXGroup; + children = ( + 88C14FED0FDEBE31AAA6DE08EFA9B83D /* Clock.hpp */, + 3AB1EF926C51DFF7D92DC2A88CBEF231 /* Err.hpp */, + C2E4AC6AECB49B5169763DE58C30FCF1 /* Export.hpp */, + ADA9C40834B8789246B849280056B7BB /* FileInputStream.hpp */, + 502A6CD60EBBE6E5ABFA9CD22B78AEE5 /* InputStream.hpp */, + DE3C56A00DE19DC466C925A15112774C /* Lock.hpp */, + D86A59B7F6D5BB8BCCA5F180F29A6656 /* MemoryInputStream.hpp */, + 7C65583B30F5CE8CB3A417DCFB648306 /* Mutex.hpp */, + E8ADEC5003627F607F9CB7482F3C79DD /* NativeActivity.hpp */, + EB813FC7BFFACFEAB984E045534C0DCC /* NonCopyable.hpp */, + 4A2ED9639F26522F182428771C311F1A /* Sleep.hpp */, + 52AFA2BBC1A97735195FCE0F072444DD /* String.hpp */, + E56992DF458AE190EF8B6FDBB9A4DE70 /* String.inl */, + C4B900A4DF59414221BA4B0965A47C7C /* Thread.hpp */, + 6F88E235E4438225B920C3FD4F4FA99E /* Thread.inl */, + BF7CEB7CE925B8996AD28292550EBFB2 /* ThreadLocal.hpp */, + 9EDD646DD6348EE1AA653B68E3D0B306 /* ThreadLocalPtr.hpp */, + 6A98E587E6533A6DF4F4624F83C3BD14 /* ThreadLocalPtr.inl */, + 4293F313CBA439948FBF2F6EC87D6390 /* Time.hpp */, + BF1BBDF3D7D54D8C1E001FC042148D06 /* Utf.hpp */, + 8EB59526DBBF1B92F1C18D793F09DF21 /* Utf.inl */, + 7E0AC0D5AF34E7D36AEA71DF98E8EC9C /* Vector2.hpp */, + 26980C04667AAE6697AC84486BB012FF /* Vector2.inl */, + 16C765B40106664E143CBFFBDA5A104A /* Vector3.hpp */, + 1ECD6095FEBED6549E4EE623A0FC3431 /* Vector3.inl */, + ); + name = System; + path = System; + sourceTree = ""; + }; + 7DE52B4190F862AAAC858529E1CC5095 /* Graphics */ = { + isa = PBXGroup; + children = ( + CDC394F06B879F234E7D901D7FFBA813 /* BlendMode.hpp */, + C9B0886627D79927053695B7F4472719 /* CircleShape.hpp */, + 7D978ADE4F6407467C63202A3628BB80 /* Color.hpp */, + 3DA525BCCFDCF518525E5C7B8B11DBBA /* ConvexShape.hpp */, + 8A731410071DE76AAF5149412AEC57ED /* Drawable.hpp */, + 1865831C43CE3EF4294B9B1C9A3523CA /* Export.hpp */, + F686DB132322EBC65182C37F284A25F3 /* Font.hpp */, + 1004AE0C4739724244ADA46A913108CB /* Glsl.hpp */, + 0E8746F05B78C10D0D9D8098224A1D60 /* Glsl.inl */, + D4443534BC214F7BD24E7115ECFAD056 /* Glyph.hpp */, + AA7B07F6922A453BFCB66757611F7273 /* Image.hpp */, + 56244C2165C1707D7E72E9B0F3441A1D /* PrimitiveType.hpp */, + 867EE1D22093A5E26C0604E46F43DE5B /* Rect.hpp */, + E149E90D3011EE5DD380C62CC073BF20 /* Rect.inl */, + 00B52487B5EE514818470AEDEFA85967 /* RectangleShape.hpp */, + 9A28F307BB7A2BFFBDABD41D7562DBF9 /* RenderStates.hpp */, + 3D98DA2B55C239E4E1EC147BC992F6F5 /* RenderTarget.hpp */, + E3E937AC710B3BDEE100401BE7BEFD62 /* RenderTexture.hpp */, + AE0F7B08A9D4CA4E032A55F5910B7FC4 /* RenderWindow.hpp */, + 92F0DF6F9D8A1A4D8748ADB82258371D /* Shader.hpp */, + D13626EE69FD1C7B6C4F9D290D2A71BD /* Shape.hpp */, + 3712F3330F9F788DA08004D45DC308FB /* Sprite.hpp */, + 2E6160492F9D1405C748988282E22619 /* Text.hpp */, + 21FF5A1389969C1EED92B8D6155554D5 /* Texture.hpp */, + 7C7EB4C3A9DB67B4B73C20A18B53EA47 /* Transform.hpp */, + 2E7771F7C5B8F14F803F19FCEB39CD0B /* Transformable.hpp */, + 0A780AF639D642BAFDB60533800E36E5 /* Vertex.hpp */, + 8E28B73D51B4BAB2720A6765199517D2 /* VertexArray.hpp */, + 7DA17A4830B0A7833A2BFF7E43EFE310 /* View.hpp */, + ); + name = Graphics; + path = Graphics; + sourceTree = ""; + }; + 814EB8A751BF913CD6571515C4FE0191 /* arm64 */ = { + isa = PBXGroup; + children = ( + 4AB8A827FC69B7712131051BF7CDAEBF /* assem_arm64.h */, + ); + name = arm64; + path = arm64; + sourceTree = ""; + }; + 81D33E35E18D99B775471DC4DCFC6572 /* libpng */ = { + isa = PBXGroup; + children = ( + 81586D54535F45B193EF58A3F9A1B704 /* png.c */, + 6C8267F7387923110B7E4D691528634F /* png.h */, + FF7E6516A5BEBD6103C2071A1BA86E73 /* pngconf.h */, + 7B0E56A4DBE284273ED40732FDB073C9 /* pngdebug.h */, + 24443F50309F188F0D359B49C0F136CB /* pngerror.c */, + C00543EF4F06FBFA511049B6A2E2638E /* pngget.c */, + 5C31FD97E461D0628F310200A8D3B403 /* pnginfo.h */, + 0056ECA9D4904EC555DDDB7A44A29B9D /* pngmem.c */, + 3E352201B46848355CB326FC4BF1FF47 /* pngpread.c */, + 486AA33DBD077F14429174C280495E58 /* pngpriv.h */, + A7FA37688E22E33D15DFB26A4571F6EF /* pngread.c */, + 5986D113E80DE6E1FCE1BF2079E6B442 /* pngrio.c */, + 3626FD0512609CFE865D492929315B1E /* pngrtran.c */, + B9B009A6587C3A1C6BB0A1C024A18D38 /* pngrutil.c */, + 259F2453A2569EB3489497BFC04DC6EC /* pngset.c */, + A088B6DC0DF984AFEA200E3D0824458F /* pngstruct.h */, + 308BAF6C3BE086BDB26EFE72FA9E48A6 /* pngtest.c */, + 162D4D53C68E5F2542C1898C9D356FB1 /* pngtrans.c */, + 39366E2F73CC4159EE18FFD5AF80A0F3 /* pngwio.c */, + 58B3B095F9C98257ED03FF6BA75F6CC6 /* pngwrite.c */, + ED6B167EAADE8506F1864999731E6AD6 /* pngwtran.c */, + 87CC302B1B1C6F71828303A524C51690 /* pngwutil.c */, + C397AE0DB769B6BAA3CA59FD7636C6AB /* contrib */, + ); + name = libpng; + path = libpng; + sourceTree = ""; + }; + 81ED3EB61775497EBAAF8647837C8FEE /* Parent Operations */ = { + isa = PBXGroup; + children = ( + 5967CB93E1B68FCF175E97CD13D10CFD /* BatchRecordOperation.swift */, + 87039339C5C272F9501B594DB154C3A4 /* RecordOperation.swift */, + ); + name = "Parent Operations"; + path = "Parent Operations"; sourceTree = ""; }; 82A9E1362EC484F9CE92176528B57B01 /* GoogleSignIn */ = { @@ -6301,111 +6486,24 @@ path = GoogleSignIn; sourceTree = ""; }; - 82D8A69FF325F605A136ADB6BAE9A4D2 /* Resources */ = { + 834EE74031868842D6E521763DF2E810 /* data */ = { isa = PBXGroup; children = ( - 8DC46E7D667B05E526897085BDA6A68F /* KeyboardGameController.deltamapping */, - 2E8023826B8975C217D59F5E61A8DCEA /* MFiGameController.deltamapping */, + CAC68C48D5AACE9BF20D8B880DA33BB2 /* mupen64plus.ini */, ); - name = Resources; + name = data; + path = data; sourceTree = ""; }; - 82FBA2B67465A45C1675F8BEE3D6FAFB /* SFML */ = { + 85219B6071D90E9EA98CA1840453F830 /* PrivateApi */ = { isa = PBXGroup; children = ( - B0D3B6EE16BA2B820E0866B0FE4C20D1 /* System */, + 7001F35121D79E891B1BD2B4C133B505 /* gralloc.h */, + 877821421C3883E9EC8A19BABE97DA2D /* GraphicBuffer.h */, + 431779F5BA85EA4F476E69CF0D2AEFD3 /* libhardware.h */, ); - name = SFML; - path = SFML; - sourceTree = ""; - }; - 8450BA83ACAB8B4A0AF901068ECB6A39 /* Bridge */ = { - isa = PBXGroup; - children = ( - 3C4B8A5D7D056FB02966F159AFC5E9F4 /* DSEmulatorBridge.mm */, - ); - name = Bridge; - path = Bridge; - sourceTree = ""; - }; - 84741B209E5F78CDFCE6328319563A75 /* Audio */ = { - isa = PBXGroup; - children = ( - 4EDFE6FDF5489F61CF533AAB848DEC32 /* AlResource.hpp */, - F714A4D1AA8175D9A02FDB1EB0AC9E0B /* Export.hpp */, - 6B525F9D23FEA3BE925293A80FEC7DCC /* InputSoundFile.hpp */, - 416AB7C47B6BD20BDB570AFCF32DA07F /* Listener.hpp */, - 412BAE19C4FAEF8D92FCDC3FF9A59FED /* Music.hpp */, - 6E03BC1605808403D83828FBCFBE7F28 /* OutputSoundFile.hpp */, - 2BCCA563115C1ABD0F6BE0FC0B3CE00B /* Sound.hpp */, - 6A6E6BA6F73F029637AC87BB994DE38D /* SoundBuffer.hpp */, - 0C27F2E27F1106463E57DFEED760FFA8 /* SoundBufferRecorder.hpp */, - A03596855FA5527E9DFD553107E7283A /* SoundFileFactory.hpp */, - 8A624FFF16B311D8F1A19BE7C8EC0DAE /* SoundFileFactory.inl */, - 95B34037E8B652335969759E49B0F3B4 /* SoundFileReader.hpp */, - D9BE76A56BCD866A71FD891640A0940C /* SoundFileWriter.hpp */, - 3791E485D89113AC4B25ADE046DEE5D1 /* SoundRecorder.hpp */, - D17E68802F2F252D95693D1AA5ADC144 /* SoundSource.hpp */, - 288D4255C025E9AE120B756ED3D79848 /* SoundStream.hpp */, - ); - name = Audio; - path = Audio; - sourceTree = ""; - }; - 84DF79C3FE14B70A40597DED4FFC8BFB /* Graphics */ = { - isa = PBXGroup; - children = ( - 5FBF0DA69F6371EE6C6D63D8001D8D95 /* ColorBufferReader.cpp */, - 9B75443503A9FFE2C23D1ACE270C81B1 /* ColorBufferReader.h */, - 9D8C6B600EB0F6E81ED97BC1F30272D4 /* CombinerProgram.cpp */, - 8CC4973A6BF6AFF9D8562E7A4E9AE4D8 /* CombinerProgram.h */, - D95AA79C2C5088E9B27BAAA9444850C2 /* Context.cpp */, - A0F5D17654F47036B94A567F870E2CFF /* Context.h */, - B7B0EC3A43195D2E933C1849423260A4 /* ContextImpl.h */, - 6C86335713D20D759954CBB00EC6AEC3 /* FramebufferTextureFormats.h */, - 4C1AEA30A7ED0128954BF3C163D0526F /* ObjectHandle.cpp */, - A37542A2D1F6B0496F72D1B87245F461 /* ObjectHandle.h */, - 5B314596089C9694EA48772E604953E9 /* Parameter.h */, - 1968B2F2911EF5F0444088854F57F746 /* Parameters.h */, - 3CE468B2DBAC6E3109B9A6E529ADACA1 /* PixelBuffer.h */, - 74FAEBE92C3B0B35D90248D577885466 /* ShaderProgram.h */, - 9430AEFB4802252C34C1DB6B1C6A8C9E /* OpenGLContext */, - ); - name = Graphics; - path = Graphics; - sourceTree = ""; - }; - 852E660B5C556492569CAB8892FB9629 /* Products */ = { - isa = PBXGroup; - children = ( - 54ECA01A22C32DC89AB39DF9BFFD5FB6 /* DeltaCore.bundle */, - 4A6CEB53419EF6042E06B56676D1DAF8 /* DSDeltaCore.bundle */, - 30131336E11D11700AC99D314BDC275C /* GBADeltaCore.bundle */, - 1F23DBC67505E77BE77552D6D84A3DAA /* GBCDeltaCore.bundle */, - 5D797E9A5C5782CE845840781FA1CC81 /* libAlamofire.a */, - F93477FBF1E4488E506F9BB79AF57D38 /* libDeltaCore.a */, - 8DF503EB5BF2CD824792BFD2BBC0992F /* libDSDeltaCore.a */, - 85A4BD81985AEDB6D9BA5E50804225D0 /* libGBADeltaCore.a */, - D4C010E8572FAE8B51DFDBF2300ECF30 /* libGBCDeltaCore.a */, - FD519882861480B93B563B477CE1FA29 /* libGoogleAPIClientForREST.a */, - 251C6319AD50CB50F18D50CBF727F8B2 /* libGoogleToolboxForMac.a */, - C1998E0D8085221AD87F89B614C10E52 /* libGTMSessionFetcher.a */, - DBC0113CF73BE24525E670D024A85BE7 /* libHarmony.a */, - C8D6AC695498645EEE4A66FCEF97D848 /* libN64DeltaCore.a */, - 1E5356E04E92615CFF0666E5987CE594 /* libNESDeltaCore.a */, - 9CA80A61ABF26FA89F4E22A30284B0DD /* libPods-Delta.a */, - 4405793D5AF1EFD9D2BDA30AA0D2E514 /* libRoxas.a */, - B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */, - 53A730F4F4248E7E3F38F8409A2DE97C /* libSMCalloutView.a */, - FA400832D3E46B39D5EC83D09A7572FC /* libSNESDeltaCore.a */, - F5FA45A44C42CC2CA3A324A3E914CE19 /* libSQLite.swift.a */, - 1CBA76EDD27FA2D20B1EA0F0BF7F082C /* libSwiftyDropbox.a */, - 48A4A6EDC08C8AC933D0DCD507E9D173 /* libZIPFoundation.a */, - 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */, - 487C7DB0A7257F16983BEF8324BEF561 /* NESDeltaCore.bundle */, - 7D751206A951D9727B38F71A2BB990AA /* SNESDeltaCore.bundle */, - ); - name = Products; + name = PrivateApi; + path = PrivateApi; sourceTree = ""; }; 854984175C84061DD74B5A244FB3F9F0 /* Defines */ = { @@ -6416,17 +6514,21 @@ name = Defines; sourceTree = ""; }; - 864B75D4D6EE78F454DD5FB1109B02CB /* GBCDeltaCore */ = { + 86652B53F0250D8EC4D8F5C948869419 /* Extensions */ = { isa = PBXGroup; children = ( - F458848778BD2CA388B2DC820968AECB /* GBC.swift */, - DA034BCB2E1E7F757B0973F79CA6BD70 /* GBCDeltaCore.h */, - BB06181522252080746B32370099C5F0 /* Bridge */, - 23D8FA654377883445CD0B0B1A2468DD /* Model */, - 5FC73EAD32863F7C79A708AF761CF3BD /* Types */, + 500E8615D96CF177F4C3273482988B11 /* Bundle+Resources.swift */, + DEDA901FE973732B0B1E37BD243D43BB /* CGGeometry+Dictionary.swift */, + B9A99432B3A77A17C67102784C21DAAF /* CharacterSet+Hexadecimals.swift */, + 8BD21182E096CF262039B0C3A26E9769 /* Thread+RealTime.swift */, + 98985DB2B0E10E3D6C992708741C684A /* UIApplication+AppExtension.swift */, + E6DC5BD2D6B77CA14C62D6FF5EA327DB /* UIDevice+Vibration.swift */, + 51E7C0C33B47A7D708AB3CF66AF1137D /* UIImage+PDF.swift */, + 72F6FF7C88B7AD41EC3870C4DE94973E /* UIResponder+FirstResponder.swift */, + 32999EF608D52E8EBF47AEF2D05024FB /* UIScreen+ControllerSkin.swift */, ); - name = GBCDeltaCore; - path = GBCDeltaCore; + name = Extensions; + path = DeltaCore/Extensions; sourceTree = ""; }; 87679170C148493B95764D8305DB2180 /* GoogleAPIClientForREST */ = { @@ -6453,242 +6555,367 @@ path = "../Target Support Files/SDWebImage"; sourceTree = ""; }; - 89B06523494BD8523F81518C3886BFD2 /* arm64 */ = { + 896A0D6AF4398BF070903E1D92E6EBBD /* x64 */ = { isa = PBXGroup; children = ( - 4CEF1CF6322D0D33545A1E86B80C6505 /* assem_arm64.h */, + CA31C817FA32BF3FA44E8F3FD7273A2B /* assem_x64.h */, ); - name = arm64; - path = arm64; + name = x64; + path = x64; sourceTree = ""; }; - 8DCC2B9382D5AFC79EE9929AC6B93E5D /* Pod */ = { + 8A444B16E4F71DB6741EA5B3ED79300C /* device */ = { isa = PBXGroup; children = ( - D39C48316E5E36755CF1BA3B4E16F5DA /* DeltaCore.podspec */, - ); - name = Pod; - sourceTree = ""; - }; - 8DF6E9EDB238B7AEA4F57F5DE0790D80 /* device */ = { - isa = PBXGroup; - children = ( - 687441E742910C0DF7081813BECD4638 /* device.h */, - A45F7436BA1CFE801B1BCCEACBAC408C /* cart */, - 654415BCD38185588B5CEFEC6E03DA33 /* controllers */, - DE7D2CCFEE7555D473C60E1D9F28C57B /* dd */, - AB203E7AE9030A99FA4528182839FA95 /* gb */, - 145E8C7A14549DB8E770BFCD75153494 /* memory */, - D283EBBE834BDDBA4A87381477086CD4 /* pif */, - 39DFDC165F70938594DE6987643A453E /* r4300 */, - 80AEC6AD356F82726370FFA4422B0E6A /* rcp */, - F5390EEB6BEF003CADB12460CB4B2A7A /* rdram */, + 8BB6F43FE56F847084FF20D1BCB4BFAF /* device.h */, + 1C81893C6C5CA0C0114A2862C96E34B0 /* cart */, + A8CAE13FFEBD40226FCB91AFFD705615 /* controllers */, + DFA97086CB697A98BAFF963B09F9CF6C /* dd */, + 3DA8BAA1BE0EAA2225C48F11FBA286FD /* gb */, + CFE95C57864F656F78366F19E2024B46 /* memory */, + F03E8D4DEAFCAD4641EF428DA4131F23 /* pif */, + 8F0766B31B192B720354013FF43A1F2B /* r4300 */, + 22F301FA3A283EF1501271F83DF62E07 /* rcp */, + 6E5A5972D2530E92EC6BBC93C20EEADA /* rdram */, ); name = device; path = device; sourceTree = ""; }; - 90233FB8AF2436EC459CF5C8E6D51F94 /* rsp */ = { + 8B06BABF42DF8EFD71F6EB03B156B0BC /* BufferCopy */ = { isa = PBXGroup; children = ( - F203A19460529D13E8FCE2A540485658 /* rsp_core.h */, + 530422F5717AFED3153BFF2D2284D3E5 /* ColorBufferToRDRAM.cpp */, + 07D0EF9DC873BCE8C132664936AA4D2C /* ColorBufferToRDRAM.h */, + F1BABB17270A0A3966333B7C327BF0CA /* ColorBufferToRDRAMStub.h */, + 472F4C1130957742B23FCBEAD0FC6E61 /* DepthBufferToRDRAM.cpp */, + 033421C4854AC34E9F0A5215AE7F3AE4 /* DepthBufferToRDRAM.h */, + C5A8B0D1C08B6C55E4CA098FCE620178 /* RDRAMtoColorBuffer.cpp */, + C159885D11F51EC41D84186D52DC4483 /* RDRAMtoColorBuffer.h */, + 0218E1BBADD080E67F9220EDFDF90EF3 /* WriteToRDRAM.h */, ); - name = rsp; - path = rsp; + name = BufferCopy; + path = BufferCopy; sourceTree = ""; }; - 918A4DE28AA523D70FEF2E295C999644 /* paks */ = { + 8D18321862CF2DC555EBA43EF95699B8 /* N64DeltaCore */ = { isa = PBXGroup; children = ( - 715964B79C52F9A32AC5669D6D1A75E9 /* biopak.c */, - 9DD623E462036E417A6C1BF38166141C /* biopak.h */, - 3ED7DC207EA838F7ED17B7E0373391E2 /* mempak.h */, - DAC19450998BD4D56C3C2C86AE5687C6 /* rumblepak.h */, - 706DA94E13FDA915B64893FE9918C85F /* transferpak.h */, + 47967D3CF2D6A2095CD6438231F82260 /* N64.swift */, + F4C1093F4879EA7F32702CA47E35814B /* N64DeltaCore.h */, + A4F29DFA19002FD428FE685BC275BF0A /* Bridge */, + AE24BB40E6F61D754CD9410BA1F9CB7E /* Types */, ); - name = paks; - path = paks; + name = N64DeltaCore; + path = N64DeltaCore; sourceTree = ""; }; - 9430AEFB4802252C34C1DB6B1C6A8C9E /* OpenGLContext */ = { + 8E93063E13A4FFF1034612F432FE1CB8 /* GLSL */ = { isa = PBXGroup; children = ( - 5D08BCF7193B533EB2AF5071C88F1E40 /* GLFunctions.cpp */, - CBECAF1300D5AE6D87DDEBE18A8D1C3C /* GLFunctions.h */, - 092D5916BAD725E2BD181241814AD72A /* opengl_Attributes.cpp */, - 469D6302B5E25E6593C1E213ED0B446A /* opengl_Attributes.h */, - E7C1D17194F0A8C85CD8A755AC2B8670 /* opengl_BufferedDrawer.cpp */, - E9B2829EE8FD1B61E4880C2DDA961706 /* opengl_BufferedDrawer.h */, - 6E755BD7B9E84110CD165AA817987A71 /* opengl_BufferManipulationObjectFactory.cpp */, - 1841A00CFBD8BE33D1C7736E94E929AE /* opengl_BufferManipulationObjectFactory.h */, - AE06F95AF0928716E10E432596BE6C68 /* opengl_CachedFunctions.cpp */, - F8D137604EE39A80F050CC3248514E8F /* opengl_CachedFunctions.h */, - B4649DC9403189EF7D8B5F740147BCBF /* opengl_ColorBufferReaderWithBufferStorage.cpp */, - D91579E22C2EC7BD86DF031990A153A9 /* opengl_ColorBufferReaderWithBufferStorage.h */, - 464088003409FF077A690AF31D685656 /* opengl_ColorBufferReaderWithEGLImage.h */, - C24EA8E380769E668B40D2C5025505CB /* opengl_ColorBufferReaderWithPixelBuffer.cpp */, - 99AFB601E975D6655D2A52B959891047 /* opengl_ColorBufferReaderWithPixelBuffer.h */, - 0FA995B71ECEE202B9688EBD65B7788A /* opengl_ColorBufferReaderWithReadPixels.cpp */, - C5A679691AAA47A28EF1E1E5A6BA88E4 /* opengl_ColorBufferReaderWithReadPixels.h */, - 39CE46E8947CA82B26FFDA66DEED2417 /* opengl_ContextImpl.cpp */, - 0F09391CC528737E038858DA43278244 /* opengl_ContextImpl.h */, - 2DA2D2C771F4634211A5B88321499576 /* opengl_GLInfo.cpp */, - E464A7D70176B62BFF57B34C448A9023 /* opengl_GLInfo.h */, - 50FBE486AFEBB34A067A593F41720663 /* opengl_GraphicsDrawer.h */, - 5EC841F694F3A53D5F5B027513353CD6 /* opengl_Parameters.cpp */, - 0C8F960573035AFFC3CDC1DEBA1E6BD4 /* opengl_TextureManipulationObjectFactory.cpp */, - 2008405A1930372A338506F2E4FA20BA /* opengl_TextureManipulationObjectFactory.h */, - C43B2C1E1A9F88A7EEAE044E22A0CDC6 /* opengl_UnbufferedDrawer.cpp */, - 7CD4252EE7412B7E97A7FA9F6EB9095D /* opengl_UnbufferedDrawer.h */, - 5DC0155465127BC9B36185F96DDCAB75 /* opengl_Utils.cpp */, - 8E80A2591A2367572B4E5468FB72C0B0 /* opengl_Utils.h */, - CABE3D3138D99EF54CB4A98493F1950F /* GLSL */, - F8D98830EC41E3146B6BDD235AC0C269 /* GraphicBuffer */, - AE7115B65FD4A97A7870999E024B6356 /* mupen64plus */, + FD26BD355F8C9C43A997914155B54C75 /* glsl_CombinerInputs.cpp */, + FC3273B92BA8458C348A8240AB0C67AE /* glsl_CombinerInputs.h */, + 35B53A6EBBDB14342ACBC6EF87C2FAFD /* glsl_CombinerProgramBuilder.cpp */, + AA792B0E18A3BA4548FB2C386287DD46 /* glsl_CombinerProgramBuilder.h */, + 2815B1907C011A39DFB5DA9B3B93A230 /* glsl_CombinerProgramImpl.cpp */, + 630D82E8861EDF03C0AE64781235E207 /* glsl_CombinerProgramImpl.h */, + 4126A8BF1768F9983511F2926680B88C /* glsl_CombinerProgramUniformFactory.cpp */, + B41ADAC311E8AD6F6A31A14C3ACCF208 /* glsl_CombinerProgramUniformFactory.h */, + 816DCE1C4957B5B87AF4A2EA4D7451FF /* glsl_FXAA.cpp */, + DC2E2AF3A950FAF5326EEE74CDCD4D10 /* glsl_FXAA.h */, + 96095127DE4F08650D82A0815DD6DB1D /* glsl_ShaderPart.h */, + E7A6E2D2600BE5C4EEA5BD6FF1BD0175 /* glsl_ShaderStorage.cpp */, + 3E986068DD96944D1D5B4F242C7C4976 /* glsl_ShaderStorage.h */, + 91142883C9B61CDABD669F132E23BA6B /* glsl_SpecialShadersFactory.cpp */, + 9D763E69CEADEDB375FE897F8EAC5BA0 /* glsl_SpecialShadersFactory.h */, + 3C136320E214AE8F3ECD371DECBC4849 /* glsl_Utils.cpp */, + 0A01EE3AE9A9EC3F97E1D65778521BE4 /* glsl_Utils.h */, ); - name = OpenGLContext; - path = OpenGLContext; + name = GLSL; + path = GLSL; sourceTree = ""; }; - 97F09188D881AF9DF1B358DA6D957823 /* Types */ = { + 8F0766B31B192B720354013FF43A1F2B /* r4300 */ = { isa = PBXGroup; children = ( - E1E783A2C239C16F0FB68CDC920FB0A8 /* GBATypes.h */, - FD58112E62968E573B43DA1A9C5C1212 /* GBATypes.m */, + 1FFF20A5E29BABF9B99B4C36366F9A7B /* cached_interp.h */, + 82C8F13E35C588F34CD7F1A313360A79 /* cp0.h */, + F0308817B700E8598B67B8DC04CB453E /* cp1.h */, + AE319AE2C2040F374241D90E84825723 /* fpu.h */, + BEDA7F12E500CF17988D000DA2BF93E7 /* idec.h */, + 8C7B436FC2BE106D5FAF2A5FE73A0CEB /* instr_counters.h */, + 1FD4F5AA816AA91F1CA362FFF3B5C93C /* interrupt.h */, + A24C851DBA65EF8E8469317673E6CCF4 /* pure_interp.h */, + 3223712696A5DC7DDD4D4DE6BD2C95A2 /* r4300_core.h */, + F8E695BDE117DE11C2A9816B243CE8D2 /* recomp.h */, + 0B399358B256320203E685F8FC809959 /* recomp_types.h */, + 8B888530E83F42860A13FCEBBC74F753 /* tlb.h */, + E4C4AE9A4FF85CB9F7A83551B58C1A0E /* new_dynarec */, + 34F07BD4211F96BC77CF6DA127F4E746 /* x86 */, + 1DE59D00C959CB3E163D3732A583A644 /* x86_64 */, + ); + name = r4300; + path = r4300; + sourceTree = ""; + }; + 906B2E03CC852CDA8AA23633798484AD /* Resources */ = { + isa = PBXGroup; + children = ( + 71B1FD9F9F00BA57722EA122796FB70C /* NESDeltaCore */, + 0E674E5D7F8B6BB20B13C09221BFEC5A /* NestopiaJS */, + ); + name = Resources; + sourceTree = ""; + }; + 908A150019FEEB8573D847EE64E9BD60 /* src */ = { + isa = PBXGroup; + children = ( + 30CBD890C0BCC858BDF5624DA689435D /* SFML */, + ); + name = src; + path = src; + sourceTree = ""; + }; + 90D1B4D0C2003248BEC35654A4959C9C /* si */ = { + isa = PBXGroup; + children = ( + F48DAA56FC916AB087B5D26A104F31E0 /* si_controller.h */, + ); + name = si; + path = si; + sourceTree = ""; + }; + 91769F9E871F0AE4A731112A23DC2539 /* ri */ = { + isa = PBXGroup; + children = ( + 9A933B1B324B43BC6E0CEBB638211EBA /* ri_controller.h */, + ); + name = ri; + path = ri; + sourceTree = ""; + }; + 92B96D5A6CB68D8B0F7D263DD26BD49F /* src */ = { + isa = PBXGroup; + children = ( + F8211C9AAFD5EAFF6AE32CAF702CC376 /* arm_jit.h */, + 1615D09DB3F681C62200592953856E68 /* armcpu.h */, + DE1CD0A14598D55B1CD56BD77F8073C9 /* bios.h */, + 8466D7DB1CB791A44DECBDED6290F796 /* cheatSystem.h */, + 42877B5C59DA3CE7FFC800C308596589 /* commandline.h */, + 3EB450DCC75AB9928F547A4793F046EC /* common.h */, + 05A59AB3426F5F9258B25B7746D83CAC /* cp15.h */, + BD12836DFFA0899682ECB705F36AD40F /* Database.h */, + ED9FC408E7E37A99A42E690455015732 /* debug.h */, + D5BACB869529C8A58764FBF51E5D7BB8 /* driver.h */, + AFF3C3B618AFF0BDD1845467EA4D5341 /* emufile.h */, + 68A229662DE33DC9840D7CCB41582EA9 /* encrypt.h */, + EBBD46833EA1A4C5282B0F087FA83437 /* FIFO.h */, + F20B25B2356078687C26B25825E487A2 /* firmware.h */, + 1D2B3BDB29EB37DAEDCBC3179FAA6100 /* gdbstub.h */, + 0E49EBED49055AAF839B8A99FC0D76C9 /* gfx3d.h */, + 6E028AD93ED1F6C5A46A56195C2CF756 /* GPU.h */, + 39BF407461BE0D689AC655371DD416DE /* instruction_attributes.h */, + 5DDB31BEBA1AF6B8AA83AFE0B4A2D7EE /* instructions.h */, + A14075A6CB82B5B0A2CF0B5F3B60E096 /* lua-engine.h */, + 1C50053E5D39FB4F4F1BA560C86E2311 /* matrix.h */, + D9223E826A52C67763ED0B1CB113EDBC /* mc.h */, + 123BC6ACD39EEA715F0A93879B490B14 /* mem.h */, + F93CCC48091B82BDE2E10023D5C4990A /* mic.h */, + 88C31AF11910728A45F6A72A4BF44968 /* MMU.h */, + 17B5799944A0DCB74E38C5E3E5C164EB /* MMU_timing.h */, + 50942AB189B9EA5A4CCBCC5F4E94B58C /* movie.h */, + C75D9ED3389A6C4CBF7EE16167967675 /* NDSSystem.h */, + DA9C9A6D30671F1FB5F50BFBC1D1DF0B /* OGLRender.h */, + EBF0BB22A90E877C1E14A623DE51DD25 /* OGLRender_3_2.h */, + C64A7F2FDE6DF6B64B3CFFEE19102859 /* PACKED.h */, + D1B6EF297830BCAD6D884EED97389BCF /* PACKED_END.h */, + 3C11311A957A87232355B6B0AFFEB8F2 /* path.h */, + 169291B84BEFD54121E345D556B0F9F8 /* rasterize.h */, + EC9403FE981B76C994D3645B33292EE8 /* readwrite.h */, + 7AD9520272152BEF938AC2E8A1E5961D /* registers.h */, + FF7D9B45C83FAE5CBAA7610FA983D9EF /* render3D.h */, + 01BC5E003AE565B6B711436BFBF86BF4 /* ROMReader.h */, + B97CBE1F36B669152AE6F475CCEB508D /* rtc.h */, + 9EF34391A06AF7754A090E44B9245C06 /* saves.h */, + 42FC26095E2CF8823B3A9B88453B3901 /* scmrev.h */, + 287CF3209EFBA423F838FBAE494AB0C0 /* slot1.h */, + 2098169177E986CAD8BED07A181041DC /* slot2.h */, + F08C08AAB29244E9A786468ABCA8B758 /* SPU.h */, + BF2D25C87184C7CB6292C194EBA05335 /* texcache.h */, + 7C8CA8E12823E49115A148B8AF4C1682 /* types.h */, + 3B8875D91FA20F49517CC1C5CB0BEA40 /* version.h */, + 14FE86A7AE75D5AB202DCEB5C676F51B /* wifi.h */, + C0430F9AC3BFCFDD982064340CB1D928 /* libretro-common */, + 966E84A48F8E78706888B979A1DCB2E8 /* metaspu */, + ); + name = src; + path = src; + sourceTree = ""; + }; + 93D14626198EF3DDF825B7DCAE1B5EF6 /* Conflict */ = { + isa = PBXGroup; + children = ( + DE3F53289236C150F14F4B85B876D904 /* ConflictRecordOperation.swift */, + E4DB7F5247E41A8DF960FAFF4F52DF47 /* ConflictRecordsOperation.swift */, + ); + name = Conflict; + path = Conflict; + sourceTree = ""; + }; + 946600E193904C9DB5617CD40010FBF1 /* Types */ = { + isa = PBXGroup; + children = ( + 708D9E956CB287CC2879FE1061D1F6C5 /* GBCTypes.h */, + A3B3DA7E38DD3305FA49B067BBEE2BBC /* GBCTypes.m */, ); name = Types; path = Types; sourceTree = ""; }; - 981655FB7820A023EE5286842289AB18 /* common */ = { + 9546AC06F796FC02067E2270ABD9E978 /* Pod */ = { isa = PBXGroup; children = ( - B3703612D238CE733DA02FE1314443CB /* array.h */, - 9E132A030504CB91FC153F9A62C74870 /* ConfigManager.h */, - E5AD860D37EB94791316D63AD7049D43 /* cstdint.h */, - D425AE3E5ED390C5A8846F791DD166FE /* dictionary.h */, - 490A6AF86E771A7376AA1B58EDEAE7EC /* ffmpeg.h */, - 042D259A0DE7C5C64344E6F6C921F2F4 /* iniparser.h */, - 867A52819D0036A2C45DFD094D11F381 /* memgzio.h */, - E269D644BF08F4B053F036687791157F /* Patch.h */, - C37DA4AD186CBA7132359E75E98431E8 /* Port.h */, - B2535F7B0EEFF2878AFFC407BE7821EC /* ringbuffer.h */, - 887068F06A80B516F5DE95AE14158D3F /* SoundDriver.h */, - 949120606BFB2FD67DC4240028FEB398 /* SoundSDL.h */, - 1A9086E824EFB7B7B14B240188DF62CE /* Types.h */, + 3FDD8F100D97035ED26853CCF457F3B5 /* DeltaCore.podspec */, + ); + name = Pod; + sourceTree = ""; + }; + 966E84A48F8E78706888B979A1DCB2E8 /* metaspu */ = { + isa = PBXGroup; + children = ( + 43A3F7C375F5059943E7A8DB77319414 /* metaspu.h */, + 1F0E6B2352802896ACECD64204A6113D /* SndOut.h */, + 2F5BCA25C3A0B1615A98335051871A9D /* SoundTouch */, + E2C184A7035D0D9FC418CF9E7508CAAC /* win32 */, + ); + name = metaspu; + path = metaspu; + sourceTree = ""; + }; + 979BB8BD151656956ED74EC814A59603 /* Protocols */ = { + isa = PBXGroup; + children = ( + 499A4AEDC3F662B3D31D208A5B1814F3 /* Inputs */, + 18349F28E095F5DD3D13A569936BC79C /* Model */, + E91F2FE0BFFBCB0483DA2E3F9D70D2B3 /* Rendering */, + ); + name = Protocols; + path = DeltaCore/Protocols; + sourceTree = ""; + }; + 983A19665B91B487CA1409108B7C71BD /* Bridge */ = { + isa = PBXGroup; + children = ( + 35CA6F1D8D4FD82291C1148088DDB220 /* GBAEmulatorBridge.h */, + 5F716F68D783146B202EC8FC938BC98B /* GBAEmulatorBridge.mm */, + F058115223339AF17A2DA555639642A1 /* GBASoundDriver.h */, + D549AA5A39E931E9F3F53DC8DC0F8E2A /* GBASoundDriver.mm */, + ); + name = Bridge; + path = Bridge; + sourceTree = ""; + }; + 985A626901535F1CAAB0DF3082FFA4C7 /* GLideN64 */ = { + isa = PBXGroup; + children = ( + 691E8906036D2728DB1DF8BA55426C61 /* ini */, + ); + name = GLideN64; + path = GLideN64; + sourceTree = ""; + }; + 9A10FC8DF08119CCCA29CA90D3724073 /* pi */ = { + isa = PBXGroup; + children = ( + 7DFFCF1CDD169427B033DBE318C4EECA /* pi_controller.h */, + ); + name = pi; + path = pi; + sourceTree = ""; + }; + 9A3B25E25408121CBE11C17CCE6D44F2 /* common */ = { + isa = PBXGroup; + children = ( + 4C82EFB2F13ACDF594E201C36E2BE936 /* array.h */, + 558ABB8E63AEB6155C40A551D88F9123 /* ConfigManager.h */, + D21047E7540C7E4A5E2197B158C84D3B /* cstdint.h */, + 580A41D76B6A843244232FFC7D187FF1 /* dictionary.h */, + 9D8F9B8A6D48D5044338BCB2BA139DA1 /* ffmpeg.h */, + EAEC7554802DE0A7D1588B6403024167 /* iniparser.h */, + 148E5E7E1B8AE5F14D3C61541210F769 /* memgzio.h */, + 7AFD09F14D0DA01868F50B237A0B76B1 /* Patch.h */, + B30081991D15EDA28B670E4E8B5B46F5 /* Port.h */, + EC9A5439881B47C2E816AF6F014B4832 /* ringbuffer.h */, + EAA06CA70E6579DA7013F9BF0C6148C7 /* SoundDriver.h */, + A159872320887E8CBF6333094E374F4F /* SoundSDL.h */, + 1FE4B65AFEE414DDF2934ED450332C42 /* Types.h */, ); name = common; path = common; sourceTree = ""; }; - 9854CC5EAF3E4AAD4FA0B621ADF41826 /* input */ = { + 9B2666DEE92A53F3397CF077560040FD /* Operations */ = { isa = PBXGroup; children = ( - 3B72CA5846B888FBC7CF69D1C40C9AE7 /* NstInpAdapter.hpp */, - 5C6513BE3B8C4EE62832D30F3B73EE32 /* NstInpBandaiHyperShot.hpp */, - 92004DFFAF89F721D5477783E22161B9 /* NstInpBarcodeWorld.hpp */, - EE739F4111402555B8330C94DC934B22 /* NstInpCrazyClimber.hpp */, - 3082C32F34B1C6E7F0F4DC785F328B7E /* NstInpDevice.hpp */, - 1B7C97918240DAD198A118B7B00B0E24 /* NstInpDoremikkoKeyboard.hpp */, - 020829DABC4B34F0B103CB44A86B1E02 /* NstInpExcitingBoxing.hpp */, - 8CC8FD6332B53E6AEADA551A3042A681 /* NstInpFamilyKeyboard.hpp */, - 76A9709715FDD329C46A920FFC9D9209 /* NstInpFamilyTrainer.hpp */, - 6259A047C58B19EAEDC1BA8DC19B918E /* NstInpHoriTrack.hpp */, - 35AD6B07396F00A51E9FE9F7F393FAE0 /* NstInpKonamiHyperShot.hpp */, - 7A8C9A3E803EF09830C30971C4D0333D /* NstInpMahjong.hpp */, - 6EC6A1A3D10181EB3D7A3F51FFA233C6 /* NstInpMouse.hpp */, - F506F9CB88905A0006F9CBDBB8EBCA31 /* NstInpOekaKidsTablet.hpp */, - 5A73FCE0E18FBE8EBCCEB74397FEC76A /* NstInpPachinko.hpp */, - EBB1A01E856D7D91BD846C278311FFB7 /* NstInpPad.hpp */, - 2F60B797411C7BEEEE57114981D1D5CE /* NstInpPaddle.hpp */, - 22D727FF73EDD7D66A073041A47B0DE6 /* NstInpPartyTap.hpp */, - 06D710973353A358D86E72C355EAB4A5 /* NstInpPokkunMoguraa.hpp */, - D10088E315F5123F3D327A06066E206B /* NstInpPowerGlove.hpp */, - D41C7731EC1A1866FC9B20D1EFC8D2ED /* NstInpPowerPad.hpp */, - 52EF51E3091C9D586B56E01C7A9F0C53 /* NstInpRob.hpp */, - B2B24BB63436EBA04A7F12707D9B8161 /* NstInpSuborKeyboard.hpp */, - BC670362843998DA1AF5EB24E32647D3 /* NstInpTopRider.hpp */, - CA84B8D0950FD10163E23797CEABFE2C /* NstInpTurboFile.hpp */, - 5C906D0B80F5FF86C1D338A347708D05 /* NstInpZapper.hpp */, + EA23C36C890553725FA9BBEBC0789829 /* Operation.swift */, + 6118EFDD077B9EC964912181660B7A95 /* ServiceOperation.swift */, + 47D47AFCF1385842685E8C07121C8BE8 /* SyncRecordsOperation.swift */, + 93D14626198EF3DDF825B7DCAE1B5EF6 /* Conflict */, + 22567F834DFA419A07D7E3214BEC2733 /* Delete */, + 317F2209193ECAC1400B252623ABB9E8 /* Download */, + 0C712C8C7BD3A3BA52CD0F4A84F011CE /* Misc. */, + 81ED3EB61775497EBAAF8647837C8FEE /* Parent Operations */, + 67425911E69D42057DB264EDBE35E135 /* Upload */, ); - name = input; - path = input; + name = Operations; + path = Harmony/Operations; sourceTree = ""; }; - 994080062D06BE26E947CF4A4A776626 /* Types */ = { + 9CC3CFD66C24CB591DDBCE5BC51A0399 /* NESDeltaCore */ = { isa = PBXGroup; children = ( - 9E0ECBB02BB69E04F4F0E29EDA00B847 /* Errors.swift */, - 0307F4D94070F2E4674AD03B8CE79D58 /* SyncProgress.swift */, - ); - name = Types; - path = Harmony/Types; - sourceTree = ""; - }; - 9BEEEA655826D740F8EBC247A333EB7F /* x86 */ = { - isa = PBXGroup; - children = ( - ADDD949ACAFD888D4958D62325464FC2 /* assem_x86.h */, - ); - name = x86; - path = x86; - sourceTree = ""; - }; - 9BFEEE19ABD216833F8B7D5AAAB8E2F5 /* Development Pods */ = { - isa = PBXGroup; - children = ( - 52BA5412DADDFC606DA2615E62036938 /* DeltaCore */, - D699477F5BE68BF5AAA4EDE6169B0EE6 /* DSDeltaCore */, - 32A3234E75ED687D7B90A6A982CC126A /* GBADeltaCore */, - CFD9F489FE6F503D6C7F477239AD510E /* GBCDeltaCore */, - 6BF38915B447FF940372C7FC2ED1EA2B /* Harmony */, - A12479D80125772EAD14AC721A36F918 /* N64DeltaCore */, - 9CB6DAB8420B18C2A094CFE587C4F664 /* NESDeltaCore */, - 0BE2BAA0FC86CCF09B884AC5526B1B85 /* Roxas */, - DCECEB869B40FCFDA86A7ED95CD7DF6C /* SNESDeltaCore */, - ); - name = "Development Pods"; - sourceTree = ""; - }; - 9C74D698A05E7D758A311F2789115472 /* Video */ = { - isa = PBXGroup; - children = ( - A890AA73740FA33E0E2982CE873A83D6 /* Mupen64Plus */, - 76188A77CA519378F94C4A102F002622 /* N64DeltaCore-Video */, - ); - name = Video; - sourceTree = ""; - }; - 9CB6DAB8420B18C2A094CFE587C4F664 /* NESDeltaCore */ = { - isa = PBXGroup; - children = ( - FE63F8A52B96C1DBCBB2424EBC2DA3B9 /* NESDeltaCore */, - B3FE9E9CE6C1523AD6E4CB22CFEE0D64 /* nestopia */, - 7575F2E08696B62C99622BDEFC7F139E /* NestopiaJS */, - CFD93EF9E254BEBADC970D58902DE4EE /* Pod */, - 3343777CA6E0AF2C9DF08C3AB68705DE /* Resources */, - A3AF37A422008C2DE009C6D1EA22B77E /* Support Files */, + 0FC9A6A4F28B9F544365006F544B8DFC /* NESDeltaCore */, + B1AB89B778603F11896DF9AA4E72E808 /* nestopia */, + B32AE6E36C91075C57138E938E8D49BC /* NestopiaJS */, + 7C552940D03D37E9B617BAD120CF27AC /* Pod */, + 906B2E03CC852CDA8AA23633798484AD /* Resources */, + 576D355E80184726B5E5617C78B495FA /* Support Files */, ); name = NESDeltaCore; path = ../Cores/NESDeltaCore; sourceTree = ""; }; - 9E1B908F1DB3ECDD4CA5B911E7C85B08 /* NestopiaJS */ = { + 9E557AD5A2E8A98E7AB3378D22A4DFC5 /* Core Data */ = { isa = PBXGroup; children = ( - D9445B158497F7C69D8E9D2443A33739 /* NstDatabase.xml */, + CAA5774FC0B40EC779613DB64E15C046 /* LocalRecord.swift */, + DE50DAF15EC75FA249C291622A4739DE /* ManagedAccount.swift */, + C5BE21537778C287EB7835EE5A1CEA97 /* ManagedRecord.swift */, + CA7701E75D51BBB26AF25CB686CB48A8 /* RecordRepresentation.swift */, + E9A5EDA091E457F4BF1FF9D5715E8EF2 /* RemoteFile.swift */, + AD29A29166068991BD1FCD1B5147A8F9 /* RemoteRecord.swift */, ); - name = NestopiaJS; - path = NestopiaJS; + name = "Core Data"; + path = "Core Data"; sourceTree = ""; }; - 9F77AF9A3FC86D1CC84393B74FE050A0 /* desmume */ = { + 9EB66C10805301C308E5ED2C2872CA82 /* Network */ = { isa = PBXGroup; children = ( - 7209A91034D3EFAFB68287C9E0860F8B /* desmume */, + 54E344C5AAB8C3DD6DD45E7BEA14951D /* Export.hpp */, + 25783A066C7388BF58AF665E9697C17B /* Ftp.hpp */, + BD91AF2C48D679F07CCC9B6D62701470 /* Http.hpp */, + 3C7AC7D01BEAA298AE2E5122EB24308E /* IpAddress.hpp */, + 26031A010DCC281450512C72B41CD425 /* Packet.hpp */, + 3720B67C88F2DE8BCAE0EDD0D02B5F98 /* Socket.hpp */, + AAD25B7136752E5F978B2EA8A9F1B2C7 /* SocketHandle.hpp */, + 258092907C70394268136103C022FEE8 /* SocketSelector.hpp */, + F857371D3F5B8E4318217720FD868368 /* TcpListener.hpp */, + 939A37FF787B2929926C6A99E612A7AD /* TcpSocket.hpp */, + 50AE585204C42DE0E82204B2336C8C73 /* UdpSocket.hpp */, ); - name = desmume; - path = desmume; + name = Network; + path = Network; sourceTree = ""; }; A1183D7B11EDCF67C21F9C57E6950E26 /* SDWebImage */ = { @@ -6701,131 +6928,256 @@ path = SDWebImage; sourceTree = ""; }; - A12479D80125772EAD14AC721A36F918 /* N64DeltaCore */ = { + A140B0F2037C3D4792FC8BF208A23E73 /* Roxas */ = { isa = PBXGroup; children = ( - D201432F7BDC32037726CC405DABB56F /* libMupen64Plus */, - 77EC95F113FE3910D426C200FE0A8515 /* Mupen64Plus */, - E5AA6D816EF0CBE0828B2F5F2B9F3759 /* N64DeltaCore */, - A62F467592F1879676456773D47376B7 /* Pod */, - 480A93CB7AB6C50FA045238E2B79FAC6 /* Resources */, - 1F87499C4FD451910C5CFDFD3AAA47D7 /* RSP */, - 09AD5B7BEEC9BEC81F8C4EC1A23A9BBB /* Support Files */, - 9C74D698A05E7D758A311F2789115472 /* Video */, + 4BEF6E27DC400F7587941CD3E2668F89 /* NSBundle+Extensions.h */, + 514762CD1DB6A2350BA5EE10914786CD /* NSBundle+Extensions.m */, + 9EC1A7B808C5E2E304C086081DB1796C /* NSConstraintConflict+Conveniences.h */, + 932A9FB4261665509630DF314C0698B4 /* NSConstraintConflict+Conveniences.m */, + 35E3B9E17CE51387A5C31A3D4D020CB3 /* NSFileManager+URLs.h */, + 7CD097CFE02D8169FF5FC3721CC0AEFF /* NSFileManager+URLs.m */, + CC70680EAE5C40484D98F7B84A2B1CAE /* NSLayoutConstraint+Edges.h */, + 0B960281116744CE51DCCFCE5C6B616C /* NSLayoutConstraint+Edges.m */, + ED33C93DD7E38C3D447A4941CDA4F4C7 /* NSPredicate+Search.h */, + 558BFA270FA2F23C320E11E090A7662E /* NSPredicate+Search.m */, + 1363B01A18856DBE22D21EBF8088D06C /* NSString+Localization.h */, + FB5E73C8C7F0D5AB282E9A29954B036F /* NSString+Localization.m */, + B49CF1CC01CA6A0D613EA0862C7F450E /* NSUserDefaults+DynamicProperties.h */, + E45EB56BC48BE16046055CF4A8D52558 /* NSUserDefaults+DynamicProperties.m */, + FBE57A68E189FBFDCA39ADF0FAB28195 /* Roxas.h */, + 7E88C1E79B3436FD1C098E8D3CA9C3B1 /* RSTActivityIndicating.h */, + F336E2D3C53A29FF9A360C8ECDF43F2E /* RSTArrayDataSource.h */, + BABD1CEB4B6CA6AEBC4C4B2ED3B1C53E /* RSTArrayDataSource.m */, + FB822E90029BFEA20B117487DC27A04D /* RSTBlockOperation.h */, + 76ACCEF09480010D5EA9E6D031D289AC /* RSTBlockOperation.m */, + 7D9ACA67CBB81C221D9E4E05F8646744 /* RSTCellContentCell.h */, + A490B0EA1911CAE566D521752DB9B643 /* RSTCellContentChange.h */, + D446F7C2C98C47BB376AA4DC92FF956D /* RSTCellContentChange.m */, + 22F188C4FE40251B362A44718243733E /* RSTCellContentChangeOperation.h */, + FCADC95CE36A81554A4E95CD8996C26C /* RSTCellContentChangeOperation.m */, + 3827013A64806EC421D988347B05D5EB /* RSTCellContentDataSource.h */, + C982B805086D1D5E4EF8373EF7E777A3 /* RSTCellContentDataSource.m */, + 6B0CBABFAE419A9E2AB84F2A8EE7B71A /* RSTCellContentDataSource_Subclasses.h */, + F361E120BFFD12C4731934DEC8344968 /* RSTCellContentPrefetchingDataSource.h */, + BBBD8731E43D4030EDC2B0655C688CD3 /* RSTCellContentView.h */, + 9D324452F2442968D429ED7A0718561D /* RSTCollectionViewCell.h */, + 39C09D3911D40FDAEA431AB499EE712E /* RSTCollectionViewCell.m */, + 2ABD8BA817A5B6DB4C5828318ED97014 /* RSTCollectionViewGridLayout.h */, + 8F33D3A6F44894D367D99FF4F1A9DD9C /* RSTCollectionViewGridLayout.m */, + 5A4CBD7EC311541871920C24EA2D9548 /* RSTCompositeDataSource.h */, + 32C661EFF23BB80E5CBC79C7B385920A /* RSTCompositeDataSource.m */, + 609716320CE93EE5720BD73EE4666B18 /* RSTConstants.h */, + 7DE36CB10C4A8DCF72BE7B88CB003698 /* RSTDefines.h */, + 705D7689B51FCCF53E9C703400B0DFC4 /* RSTDynamicDataSource.h */, + C730E5915747302EDF3EC772425E5899 /* RSTDynamicDataSource.m */, + DB18069D26E35C1BEFE5C4A0262422E8 /* RSTError.h */, + 13B3F0409CEA697951ADECD54AABFC17 /* RSTError.m */, + 2090E7B6074A480B545986DD5394BCEC /* RSTFetchedResultsDataSource.h */, + 3354FC02362F1AAC06FABFDAB6FC1E92 /* RSTFetchedResultsDataSource.m */, + BF8EBB70E09CAD5AD9E5BB36757BDD4E /* RSTHasher.h */, + 6ABC265715DD434AE88383B1CAD97215 /* RSTHasher.m */, + 8EE40C178D686A2BE9C93C6CF7FAE736 /* RSTHelperFile.h */, + A3AB79AE80A36131240B0204640F0474 /* RSTHelperFile.m */, + 816CBA26E3940C8402B8EFE63E169294 /* RSTLaunchViewController.h */, + 45858FC63D79F8CB87FFC7F4E24B4A91 /* RSTLaunchViewController.m */, + 451CFB17CBEBD52220C6B8E9777016CB /* RSTLoadOperation.h */, + 3AC36AE82A4992804E6ECF7236E5ECA7 /* RSTLoadOperation.m */, + 52D0F4C76483E71C2F01319F14942730 /* RSTNavigationController.h */, + D5E9FD5A3371067E608C6FF32C3E1179 /* RSTNavigationController.m */, + 07A24856C0FCE10AA34185E05096752B /* RSTNibView.h */, + 65DF8E0913BA8941185496F1B74F7D4E /* RSTNibView.m */, + 8DE3498D124753251241C3DCDB5CB194 /* RSTOperation.h */, + F84B5FC88D5A5A682A7E079337CD3D1C /* RSTOperation.m */, + DBB12A893E1A139B63450DDE9A309CC4 /* RSTOperation_Subclasses.h */, + 8B9083EB242665508C97535A7311874C /* RSTOperationQueue.h */, + D3D57B0A12B1AA1AEA896FD02062F18D /* RSTOperationQueue.m */, + 5FBF06615B56E55808CEBADD68B920BE /* RSTPersistentContainer.h */, + 051DD45485937EBA4AEB4D55FB230DCB /* RSTPersistentContainer.m */, + C3F23CEC53278E0CEB1614056B5D4F8C /* RSTPlaceholderView.h */, + 5F8643E93FD4508FE4A1F4CFE2588044 /* RSTPlaceholderView.m */, + 4070FFD16B4FA23902478F9D6197345C /* RSTRelationshipPreservingMergePolicy.h */, + 3BECDD49D8123BEDD18D8163C335A153 /* RSTRelationshipPreservingMergePolicy.m */, + EEF4C54780B7CB8C5DD1FE7BFC88A8D5 /* RSTSearchController.h */, + A1EB2114C929E81D171083B106C71103 /* RSTSearchController.m */, + 329C5C85AFC08890DFDEC9E233470EF0 /* RSTSeparatorView.h */, + 932ED892F2C78B795C9514E800D066F3 /* RSTSeparatorView.m */, + B31BC317B925949D8F6F764866AECFAE /* RSTTintedImageView.h */, + 327910F0090992C6E3CBE5627E621EB3 /* RSTTintedImageView.m */, + 275D08AF3E80D1A5B843C23F36F20FE6 /* RSTToastView.h */, + 18A21C316835DD316654A070B9E838EF /* RSTToastView.m */, + 47D78517301F4912E4BBA2A056C253E1 /* UIAlertAction+Actions.h */, + 7F8715F2E1CC86C7F667183E1D9CD888 /* UIAlertAction+Actions.m */, + 8EEE2D5A7CAE13A6BDB9042F46420270 /* UICollectionView+CellContent.h */, + 966650603C914F8788C0B0BF65D7516D /* UICollectionView+CellContent.m */, + EE1AC475F3EBD28D40D55EE72FC5AB07 /* UICollectionViewCell+CellContent.h */, + 142265A2DED24A866633D72B79145B0B /* UICollectionViewCell+CellContent.m */, + D190B41F4CB5ED20A79688D063A88168 /* UICollectionViewCell+Nibs.h */, + 3A7FFE29C3C4FE3726FAB1DB3F1C4F3F /* UICollectionViewCell+Nibs.m */, + 1D545FA281C697B8D7BEEC43C6652189 /* UIImage+Manipulation.h */, + 97B9144AB8468E437ABB41803974D033 /* UIImage+Manipulation.m */, + F6225E475A9B0FB7A6AD9A1B3E32D764 /* UIKit+ActivityIndicating.h */, + 684E9E69891E8CAEBF1DC5CFDC48856E /* UIKit+ActivityIndicating.m */, + C3BEC3A5E5A6DF3FF717E11AF5286D93 /* UISpringTimingParameters+Conveniences.h */, + 5EEAB40C86D49852ED6EB7A6AFF904B0 /* UISpringTimingParameters+Conveniences.m */, + CC438CAEA107E0F60CF6B6A8FBD21763 /* UITableView+CellContent.h */, + 45D29114CAD3548F307C7BA691260F25 /* UITableView+CellContent.m */, + 4455D697CDC2A6441EDD561195EFE9DB /* UITableViewCell+CellContent.h */, + 70DABB5ACFBF2E1DA35CD42F620E46F1 /* UITableViewCell+CellContent.m */, + 250AF154A10D578764C0BBBB190A8554 /* UIView+AnimatedHide.h */, + 632F100822F31BF07C7CD07CAD8F2329 /* UIView+AnimatedHide.m */, + 0A0BDC53FD9A10612B34F36860479885 /* UIViewController+TransitionState.h */, + F74135D2566C066E0B9F4F851E06A12A /* UIViewController+TransitionState.m */, + AEE9EFE5620EE7AF0289EF61FBCA60C7 /* Pod */, + 3124B06ECBF78C8E27AF52B1E91B7A97 /* Resources */, + C8E3902A28AE5C2E3D9F0823F879EFCB /* Support Files */, ); - name = N64DeltaCore; - path = ../Cores/N64DeltaCore; + name = Roxas; + path = ../External/Roxas; sourceTree = ""; }; - A27A1F5197BC2DC2E555618CFCF821AE /* oglft */ = { + A25BC01B8E8FB25A64460D68672DC8D0 /* plugin */ = { isa = PBXGroup; children = ( - C27BB3E37D9E25626486536CA6D1890B /* OGLFT.h */, + B93E69089ACE58953005A5382B2ADAAD /* dummy_audio.h */, + FB50DB0D94A17BD483732F8CF157CACE /* dummy_input.h */, + C0BD20FF1A75F7E688073AEAC0E0E421 /* dummy_rsp.h */, + E2FDB4BB627C5ED4C383AB3D3EB64DA2 /* dummy_video.h */, + 6AB7E24DF9D482B653684A4CB3373DAE /* plugin.h */, ); - name = oglft; - path = oglft; + name = plugin; + path = plugin; sourceTree = ""; }; - A32A21E8F7145DAE99E82C2886356FC1 /* subprojects */ = { + A3EB517BD0CF9FC2F12C37737984F1A9 /* Emulator Core */ = { isa = PBXGroup; children = ( - 2AC083D17ED5739B5B211543714C6C2D /* xxhash */, + 494D29438728759A64CEF3DAFF79CE8A /* EmulatorCore.swift */, + B7710059AA92E539C980E122F099585A /* Audio */, + 22243998D279477C46CB3187FEFB5BE2 /* Video */, ); - name = subprojects; - path = subprojects; + name = "Emulator Core"; + path = "DeltaCore/Emulator Core"; sourceTree = ""; }; - A3AF37A422008C2DE009C6D1EA22B77E /* Support Files */ = { + A47C858A468F63C07F24FD81A9A449A9 /* Support Files */ = { isa = PBXGroup; children = ( - FE29186D1D3230A6DE7D814702F201F5 /* NESDeltaCore.modulemap */, - 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */, - 75EA00FDDC420CBEEF57749EB105D75B /* NESDeltaCore-dummy.m */, - F1313708F536AEEAB3F8FE444AACB097 /* NESDeltaCore-prefix.pch */, - 46306F32408FC6EFC5F89D8105542A30 /* NESDeltaCore-umbrella.h */, - 04CB77BB25701FFB2038A7D45251EC20 /* ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist */, + CEEC5CCF9E4EF348B674F43D7BC193AD /* MelonDSDeltaCore.modulemap */, + 5B2E58A2772EA93AA7DC5A5022F51297 /* MelonDSDeltaCore.xcconfig */, + 0C3381B8A55051B7129CC78CA0231C2D /* MelonDSDeltaCore-dummy.m */, + 8C655B71EB6A742DCE13DFA6D245D51A /* MelonDSDeltaCore-prefix.pch */, + 7934E37DFF6BB49A4E11E78A63B5CD51 /* MelonDSDeltaCore-umbrella.h */, + 2EB60A6D4ABEDA41E12908BFFBCBAD8D /* ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist */, ); name = "Support Files"; - path = "../../Pods/Target Support Files/NESDeltaCore"; + path = "../../Pods/Target Support Files/MelonDSDeltaCore"; sourceTree = ""; }; - A3EA455CA1E4E1F9431E9263CF4851D4 /* Delete */ = { + A4F29DFA19002FD428FE685BC275BF0A /* Bridge */ = { isa = PBXGroup; children = ( - DF6E047B23D9FBAF2DB48EC4B655B82B /* DeleteRecordOperation.swift */, - 8CE5B0A31ACD87513F0942D9E71F9BD6 /* DeleteRecordsOperation.swift */, + 124A9AA8BD80FF606241A3E34CBF4039 /* N64EmulatorBridge.h */, + 7FFB36B4D0570AD68F47D94918FDE579 /* N64EmulatorBridge.m */, ); - name = Delete; - path = Delete; + name = Bridge; + path = Bridge; sourceTree = ""; }; - A45F7436BA1CFE801B1BCCEACBAC408C /* cart */ = { + A52B8446C83E659A01CB5FF835BB66B6 /* osd */ = { isa = PBXGroup; children = ( - 82B290FA3AD7AE40209494B966FF4B3B /* af_rtc.h */, - E0F23910DDA9040638B4A63EABA0CE82 /* cart.h */, - BA46D0D247C2A97E0EBAEF9B67F430BF /* cart_rom.h */, - B5E9F261B8796880679ECD1AF1FDC584 /* eeprom.h */, - 0BFECFA92DE1F1B2ECD7449CA0DE9389 /* flashram.h */, - A19E4DF8BAF4F0082185FA6315D2B6B7 /* sram.h */, + 33BD33AF73BEEF1769230AAB1B73B0F8 /* oglft_c.h */, + 2AD3368B2D5D7E97A29573C83ED07A59 /* osd.h */, ); - name = cart; - path = cart; + name = osd; + path = osd; sourceTree = ""; }; - A53A8976966BE4B7422DB18F3103BEA2 /* Download */ = { + A5537D4A03CD7BCB221A6A5A9D0B5C54 /* mupen64plus-core */ = { isa = PBXGroup; children = ( - 9CDC4E9BA921F71C2DE81D711D002178 /* DownloadRecordOperation.swift */, - F0EF51BD6A873328F443F48E06B74BF8 /* DownloadRecordsOperation.swift */, - 9078D2E6A526B27EFAB78F4949C2039E /* FinishDownloadingRecordsOperation.swift */, + 834EE74031868842D6E521763DF2E810 /* data */, ); - name = Download; - path = Download; + name = "mupen64plus-core"; + path = "mupen64plus-core"; sourceTree = ""; }; - A62F467592F1879676456773D47376B7 /* Pod */ = { + A7D99A0C8471ED5A72EC714EB0E34577 /* GBADeltaCore */ = { isa = PBXGroup; children = ( - A4813A1A35350AA88E9F2BDD45AF68E1 /* N64DeltaCore.podspec */, + BB5727401E6F6A0439D8F333FA838602 /* GBA.swift */, + 8B38944C4991CE901210237BE9D90369 /* GBADeltaCore.h */, + 983A19665B91B487CA1409108B7C71BD /* Bridge */, + 75D48382A035E39E6AEADD37EB9378EA /* Types */, ); - name = Pod; + name = GBADeltaCore; + path = GBADeltaCore; sourceTree = ""; }; - A890AA73740FA33E0E2982CE873A83D6 /* Mupen64Plus */ = { + A8CAE13FFEBD40226FCB91AFFD705615 /* controllers */ = { isa = PBXGroup; children = ( - 57BA860878D3D42DD09ED8AD2C301234 /* GLideN64 */, - 17640D3E9C581A1DA4B2DFB2666646C9 /* libpng */, - 0EFECB3C25EF213B3AF98FD9EDEFAA66 /* mupen64plus-core */, + 5536CF5E11B5E15ED66757BB394C8694 /* game_controller.h */, + FBE3B4C3A36A4EB7113AD32FD439AAD5 /* paks */, ); - name = Mupen64Plus; - path = Mupen64Plus; + name = controllers; + path = controllers; sourceTree = ""; }; - AB203E7AE9030A99FA4528182839FA95 /* gb */ = { + A9B8727FF991FE2D654369C458F423A1 /* common */ = { isa = PBXGroup; children = ( - 3D0E61C75D78DD7A729364010BDBB106 /* gb_cart.h */, - 8326EAB88C81EB3273CE84BFBE30C290 /* m64282fp.h */, - 89AD69668AA33B36799179839B4578DB /* mbc3_rtc.h */, + C82F87697475573C237F91B5498957A0 /* adaptivesleep.h */, + 8C62C2A7373598D1D87C3F00E90A7722 /* array.h */, + A3901E50A71458B91C7F98B9202F5AA2 /* defined_ptr.h */, + 2D74E106D389811B1BA21826E9E3C690 /* rateest.h */, + 5414A0A2C2B0F58D727F258C7536FAEC /* ringbuffer.h */, + AC89CB7A34B3B2FF8DBF5BB0E234D8A9 /* scoped_ptr.h */, + 592333B6A8CE7E474E19C151AE976FBE /* skipsched.h */, + A855A24013B4807694DE373F6612044D /* transfer_ptr.h */, + 034ECDF2709AB785B480F4DEBECA1C8A /* uncopyable.h */, + 797293ABB0B561C6FE9D15E812E45081 /* usec.h */, ); - name = gb; - path = gb; + name = common; + path = common; sourceTree = ""; }; - AC4003DE81173BA37C3C2F94F058FEC9 /* Support Files */ = { + AA0E7F6134B7DC73DA4EECDD21A5700B /* Game Controllers */ = { isa = PBXGroup; children = ( - 8DB91BFF06E8641AEB9DAF85B4EAEF79 /* GBCDeltaCore.modulemap */, - 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */, - 26D67EB75107A8E731DFD2A5B2EC86F0 /* GBCDeltaCore-dummy.m */, - 93D8D16485DDCB1B9E14A3ECABF683B8 /* GBCDeltaCore-prefix.pch */, - 9C838A28075396ED66AEF6F512BA0446 /* GBCDeltaCore-umbrella.h */, - 5B818731B433680AC0669D4C8ECB8E13 /* ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist */, + B73E9E04EC1D9DC2F189BC9DC0A68ADB /* ExternalGameControllerManager.swift */, + 605CB6DB9B1497A7E96E91A06EC63F85 /* Keyboard */, + 4548026C99C855F1FE979CC41F7447FB /* MFi */, ); - name = "Support Files"; - path = "../../Pods/Target Support Files/GBCDeltaCore"; + name = "Game Controllers"; + path = "DeltaCore/Game Controllers"; + sourceTree = ""; + }; + AADAFBFD69FC84E875D7A00CA0188FDE /* osal */ = { + isa = PBXGroup; + children = ( + 8346ECC5A3AFD14F0746FD2871ECDA43 /* osal_files.h */, + 33FF8A61B13EE6F6CE800CB771D90EAC /* osal_files_ios.mm */, + ); + name = osal; + path = osal; + sourceTree = ""; + }; + AD034E818D3FE0DD4770D45AB010C825 /* api */ = { + isa = PBXGroup; + children = ( + 2212C1BF0C50BC7C98BA6A5202DD8DFC /* audio_out_backend.h */, + 22515475C0A7E9BD8FD4145526FBC353 /* clock_backend.h */, + 8C1BC49685F5EE8CD682028D49698258 /* controller_input_backend.h */, + 4495365E36E72B1DF9F8324A09B6DCB1 /* joybus.h */, + 55532BC2B4B4E3B9BF96424544F7A510 /* rumble_backend.h */, + 8C393F6D77A263F418781F717B7AA90D /* storage_backend.h */, + F074B8ED12CB119F2AD98DE96C9D1E1B /* video_capture_backend.c */, + 959C8F76FF4E413331083F4B7271A79D /* video_capture_backend.h */, + ); + name = api; + path = api; sourceTree = ""; }; ADEE4E317A718E12907787A717B015D5 /* DebugUtils */ = { @@ -6838,6 +7190,16 @@ name = DebugUtils; sourceTree = ""; }; + AE24BB40E6F61D754CD9410BA1F9CB7E /* Types */ = { + isa = PBXGroup; + children = ( + AF1A1A0732B5E3F46EFB5131FEC1279B /* N64Types.h */, + B9645A97F892996BB5BF51B8D0D43A0B /* N64Types.m */, + ); + name = Types; + path = Types; + sourceTree = ""; + }; AE354EB66CE6C885A5ADD3E361C6268F /* Support Files */ = { isa = PBXGroup; children = ( @@ -6851,23 +7213,82 @@ path = "../Target Support Files/ZIPFoundation"; sourceTree = ""; }; - AE5BDACDA27265C8C5B46C0ABE431F76 /* Game */ = { + AECF96E7F30FA9F52E2F9CCA0F286C7F /* GLideNUI */ = { isa = PBXGroup; children = ( - DB6DD6DB7B47787A5A8EA1D3325598F6 /* GameView.swift */, - B55404E8B2117F5FA8444F1ADD1A5039 /* GameViewController.swift */, + 44FAD07D80BFEE0D325168C079FABD94 /* AboutDialog.h */, + A590F12D65E6986C2D6F38990BFE02DD /* ConfigDialog.h */, + 4730257B4F5FB617F71989B24D9EF907 /* FullscreenResolutions.h */, + 9E3627E2B352D880C38B219494E20A52 /* GLideNUI.h */, + 3077BDF790EB52605DBA99AE8089C2FA /* Settings.h */, ); - name = Game; - path = Game; + name = GLideNUI; + path = GLideNUI; sourceTree = ""; }; - AE7115B65FD4A97A7870999E024B6356 /* mupen64plus */ = { + AED09EB0CF0D0E4BEE6843F3C010806E /* Resources */ = { isa = PBXGroup; children = ( - A3DDC9D77AA62AA058CD07A50BE2E396 /* mupen64plus_DisplayWindow.cpp */, + 17D56112446A3990E9D47221D20D86FD /* melonDS */, + 07F691241FBD71981877F3B34D76DB6E /* MelonDSDeltaCore */, ); - name = mupen64plus; - path = mupen64plus; + name = Resources; + sourceTree = ""; + }; + AEDE8715D20259E949AA770C030F17C1 /* Types */ = { + isa = PBXGroup; + children = ( + 360FE52BEEE04312C550B83F42CCF550 /* SNESTypes.h */, + FE6F693BD8934FF6A88E20FF29157CFF /* SNESTypes.m */, + ); + name = Types; + path = Types; + sourceTree = ""; + }; + AEE9EFE5620EE7AF0289EF61FBCA60C7 /* Pod */ = { + isa = PBXGroup; + children = ( + 3086277C9B80D3FC1C3FFC747784942B /* Roxas.podspec */, + 470E793A95CB16C839EC368EEC677A7D /* Roxas-Prefix.pch */, + ); + name = Pod; + sourceTree = ""; + }; + AF87F56CD8548DB91B40F9D9B8FE9D5E /* Support Files */ = { + isa = PBXGroup; + children = ( + B206694C6233FEB2036FF9E2C8D5C7A9 /* ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist */, + 3457B930F9F78CBC2F52863D328D8DAC /* SNESDeltaCore.modulemap */, + C6AEBD66201582E2F018DBD9D692F239 /* SNESDeltaCore.xcconfig */, + EC30A57562ACA7D0725AAD7A0C184376 /* SNESDeltaCore-dummy.m */, + FEAD68FCF789AFC94A1EB313FDE68B6F /* SNESDeltaCore-prefix.pch */, + 0D6CBC1B60FADA9D18C705CC48D37B27 /* SNESDeltaCore-umbrella.h */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/SNESDeltaCore"; + sourceTree = ""; + }; + AF9CF7E8B86C1E09202C17BD86BA5EC4 /* Graphics */ = { + isa = PBXGroup; + children = ( + 0576D7E597D37BAAB587DB83FE8CB161 /* ColorBufferReader.cpp */, + E726879448FBC69F09C3868AEAA3AE81 /* ColorBufferReader.h */, + 507AEE0DE905FE749721BA983355BC23 /* CombinerProgram.cpp */, + E66B9B91DB7E04516C8FF716DE48D701 /* CombinerProgram.h */, + 313C6B8D05DFD20F664BA3744351BC9C /* Context.cpp */, + CE641ADC83B5D0F02766689E3A81B2B1 /* Context.h */, + 1B344A1563D4DD7818E0D6A1BC8076EE /* ContextImpl.h */, + 7ACDAD920571F82F0FDFF413996C187F /* FramebufferTextureFormats.h */, + B879AB2ADEE0B7AD62F37F492D81FEC6 /* ObjectHandle.cpp */, + 9F3152F7F819F4D7C0199707F1F5A9B8 /* ObjectHandle.h */, + 16C1FB014388E9D1E47EB7DCC0CD0682 /* Parameter.h */, + 772DEEE3A8A1AA94502EF6098107740C /* Parameters.h */, + A586DA6049F657DBEA1D6CB398378C21 /* PixelBuffer.h */, + FBAE8914742053CB6ADCEC14737596F0 /* ShaderProgram.h */, + 2F758774649CB3657B8850BCADB834F3 /* OpenGLContext */, + ); + name = Graphics; + path = Graphics; sourceTree = ""; }; AFDC797217CD201CEA4BA73665645D2F /* Drive */ = { @@ -6884,31 +7305,24 @@ name = Drive; sourceTree = ""; }; - B0586A3F5DC5B637ADF9921EBB25472D /* Support Files */ = { + B0BE3EAABF018632B055A1F59EC0CBB5 /* pngminim */ = { isa = PBXGroup; children = ( - B8B3A29AED934B0B3AC6171E49F11E8D /* ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist */, - 1E0332A877FA8632655267F892A4868D /* SNESDeltaCore.modulemap */, - F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */, - E7CFE992FA2A4ABDEAADC452BA0C39D5 /* SNESDeltaCore-dummy.m */, - 60639E02A2579DF3195EEC16A0556CF6 /* SNESDeltaCore-prefix.pch */, - 9CD3F5DB69B6C64C0A6692B58AFD0B17 /* SNESDeltaCore-umbrella.h */, + 1FC29672D386809D776C8BBED048F2A9 /* decoder */, + F84AB436CF6B945442FE6EF3D05B73DA /* encoder */, + 2020B1298393D2B38287E9F78A832934 /* preader */, ); - name = "Support Files"; - path = "../../Pods/Target Support Files/SNESDeltaCore"; + name = pngminim; + path = pngminim; sourceTree = ""; }; - B0D3B6EE16BA2B820E0866B0FE4C20D1 /* System */ = { + B1AB89B778603F11896DF9AA4E72E808 /* nestopia */ = { isa = PBXGroup; children = ( - 62F06888B27D96F21A3D53797DD35725 /* Err.cpp */, - 603DD39C57569C32BD836469768B346F /* String.cpp */, - 972EE27803ACA015B384716D967BB02E /* Thread.cpp */, - 6339330C707D1D8177B1FCDB213946EB /* Time.cpp */, - 0A5C4548757D4029BFE66F8F2912470E /* Unix */, + F35021E84CD67F4A5269C60DA461D37B /* source */, ); - name = System; - path = System; + name = nestopia; + path = nestopia; sourceTree = ""; }; B281BE06734FFC663D472DB785580878 /* Frameworks */ = { @@ -6919,91 +7333,135 @@ name = Frameworks; sourceTree = ""; }; - B35BFC446ACA2A3AC49953F7912C8D74 /* arm */ = { + B31234679B2E5605E7B76D119E18D1EA /* System */ = { isa = PBXGroup; children = ( - 3FD22484CAFD9D6D7EDB3732DE4A047D /* arm_cpu_features.h */, - BF609625DC6D6DCA4E18292A7309D441 /* assem_arm.h */, + FB5B6F86BFE8AFABADAFCCC745D013FE /* Err.cpp */, + 1E9620B66C79B5072CD182C1D80819C8 /* String.cpp */, + 96DDCB6416566CEEB9D8CE0B491F6242 /* Thread.cpp */, + E84054BA6CBE0DAB191CCF09288DEF80 /* Time.cpp */, + 3F700DBFA82D8C166CD3EC7325115263 /* Unix */, ); - name = arm; - path = arm; + name = System; + path = System; sourceTree = ""; }; - B3FE9E9CE6C1523AD6E4CB22CFEE0D64 /* nestopia */ = { + B32AE6E36C91075C57138E938E8D49BC /* NestopiaJS */ = { isa = PBXGroup; children = ( - FAE3180D34498BCD31E17216B8C80BFE /* source */, + B5984855E15D790E1B69A1BD578ABC85 /* NESEmulatorBridge.cpp */, ); - name = nestopia; - path = nestopia; + name = NestopiaJS; + path = NestopiaJS; sourceTree = ""; }; - B5BCA0B7CD47A78DA5B1697D5B40975B /* Model */ = { + B47FEFECF5B3AF2B5B8563948D539894 /* SNESDeltaCore */ = { isa = PBXGroup; children = ( - FD9C5507CE8EEB9255EC26821F186A30 /* Account.swift */, - 55B412A3E753F75718995BBB767197FD /* File.swift */, - 54254E0189355E5C8E760E6CEB171480 /* Record.swift */, - 92238392EDEE95FD2FBE52D9471C5264 /* Version.swift */, - F417425CB2FA1D05BAD4C5F1DF071FED /* Core Data */, + C22DE4CDD047BCED0C6D3A063AE3CA47 /* Pod */, + 2ADDFE53CB14149EA0FF19210E668B03 /* Resources */, + FED68DD8032AAB116053C7ECE64534FC /* snes9x */, + BAA66CA815D89DE6043CC2331364E8B5 /* SNESDeltaCore */, + AF87F56CD8548DB91B40F9D9B8FE9D5E /* Support Files */, ); - name = Model; - path = Harmony/Model; + name = SNESDeltaCore; + path = ../Cores/SNESDeltaCore; sourceTree = ""; }; - B7610810046C36DD994B73E0DE4BBCD6 /* Misc. */ = { + B525AD713D91C6B384F9F0E9879AD4E7 /* gambatte */ = { isa = PBXGroup; children = ( - 00E83FB8FE257D431296C57164DBCE71 /* FetchRemoteRecordsOperation.swift */, - 8D564037F9192979A0BA63A5F9545CDE /* UpdateRecordMetadataOperation.swift */, + A9B8727FF991FE2D654369C458F423A1 /* common */, + 0346F465D0A39A57D28E54E194A025BB /* libgambatte */, ); - name = Misc.; - path = Misc.; + name = gambatte; + path = gambatte; sourceTree = ""; }; - B7AF17E48E146E0297BD756594390881 /* Bridge */ = { + B5738FB74828225A8498F9552ADF80ED /* PublicApi */ = { isa = PBXGroup; children = ( - 40018788A7B82BE36F7A4762218942C4 /* SNESEmulatorBridge.h */, - 146B44A557A13EB3BBE8A5C53D94BC9E /* SNESEmulatorBridge.mm */, + 7B799B0BED0EB9D4351BA9CBC630C918 /* android_hardware_buffer_compat.h */, + EF146F5F4C23AB7CC20D0F4F40286379 /* check.h */, + CBE09CFE7E4A642AC1B56EC89FADDFFE /* dcheck.h */, ); - name = Bridge; - path = Bridge; + name = PublicApi; + path = PublicApi; sourceTree = ""; }; - B7C961F0CF8CC2E98500C8E3DA3C6F56 /* Keyboard */ = { + B5D3EDECBB050C70D08DA0E23FEBB52C /* minizip */ = { isa = PBXGroup; children = ( - E4185D8E6FDFC3750E4E3DCF897B9D2F /* KeyboardGameController.swift */, - 4FCA09C91A2EF02A01FA5D74C5F06804 /* KeyboardResponder.swift */, + C53D9591F4B5C55AE48D566EAEA25FD1 /* crypt.h */, + 471C4997518A7042AE098438B7958754 /* ioapi.h */, + BD7F218037A6C72ADDD5F262DAFE2D1C /* unzip.h */, + 55A7E5964AAB52C30CA7C4233CDB81F1 /* zip.h */, ); - name = Keyboard; - path = Keyboard; + name = minizip; + path = minizip; sourceTree = ""; }; - B8846FB6AA67A85C0B966F024F149350 /* SDL */ = { + B66E092380775AE85650268CD7A51DBF /* Inputs */ = { isa = PBXGroup; children = ( - E43D760A416FD46145902A92E018E58F /* SDL.h */, - 525B2A3CC0AB6E54AFD0C4CAE7B17B9D /* SDL_config.h */, - 2007B1419082E90090305FCD84393B06 /* SDL_opengl.h */, - 9D7EE0A3C63E9181CA23F2A4EE2C188E /* SDL_opengles2.h */, - 9E72A33A7110D63CBC89C70E51F608C9 /* SDL_thread.h */, + 90564B99F2C2EF43FEC4BA55EEF618FB /* AnyInput.swift */, + 6B0B083A9E33A408380E6933367C443E /* StandardGameControllerInput.swift */, ); - name = SDL; - path = SDL; + name = Inputs; + path = Inputs; sourceTree = ""; }; - BB06181522252080746B32370099C5F0 /* Bridge */ = { + B7710059AA92E539C980E122F099585A /* Audio */ = { isa = PBXGroup; children = ( - 1AE7C6AEDB1B177BEA97EAFF75DCDAF4 /* GBCEmulatorBridge.h */, - 9AF937DC01474311A2109AFB0EDA7D8B /* GBCEmulatorBridge.mm */, - B8A840F202469E60C39538CC467177CA /* GBCInputGetter.cpp */, - C2B84B3955DE3CC74FD9418BE74C2896 /* GBCInputGetter.h */, + EF6DFC3B7AD060F43D4AFFBCD3F06AA6 /* AudioManager.swift */, + 26169D7A10310A0CE0A585A679CB5736 /* RingBuffer.swift */, ); - name = Bridge; - path = Bridge; + name = Audio; + path = Audio; + sourceTree = ""; + }; + B7BD75CB6D50E2F1B2A595347E8D3990 /* ai */ = { + isa = PBXGroup; + children = ( + 4D58E3495B9E3434BF573543720CB50E /* ai_controller.h */, + ); + name = ai; + path = ai; + sourceTree = ""; + }; + BAA66CA815D89DE6043CC2331364E8B5 /* SNESDeltaCore */ = { + isa = PBXGroup; + children = ( + CD3467F0683A726E7FA99570996471C2 /* SNES.swift */, + 0D12A00DD051835A984A58D6DD44BDD4 /* SNESDeltaCore.h */, + DDED638FFBBE24800262328FC7ABA5CC /* Bridge */, + AEDE8715D20259E949AA770C030F17C1 /* Types */, + ); + name = SNESDeltaCore; + path = SNESDeltaCore; + sourceTree = ""; + }; + BB527A7752C939F05A0A33967DAF5CE9 /* Window */ = { + isa = PBXGroup; + children = ( + 108D3937640AD5EF672C23E5C9F1D052 /* Context.hpp */, + 725B23CE4361DD6771F70C91256E286B /* ContextSettings.hpp */, + F013766E35198FF97F65503319E09993 /* Event.hpp */, + 8EB12D179F66D53718BBF3591DC3E8BA /* Export.hpp */, + C4F2063F71920535B22EF7E3FF01117B /* GlResource.hpp */, + 14C71D27630335B15939DD0664CE76D0 /* Joystick.hpp */, + 229289C6AEBA126CD4AF9033E65834CC /* Keyboard.hpp */, + 507E5C05C910EB9C2351B7FDAC89B9AE /* Mouse.hpp */, + FAD07D9524FA2A12D63FCF045E3C71B6 /* Sensor.hpp */, + 66879FEB993CFA8011AE164C2E88927A /* Touch.hpp */, + FF4871EEC174D41700409C80284E7FD5 /* VideoMode.hpp */, + 31B5A52F1F76F3224E54451C2B25CA8D /* Window.hpp */, + 195C083DB9E3337E066A78F5268E1222 /* WindowHandle.hpp */, + F01B391F7634E62F67997507B08A12B8 /* WindowStyle.hpp */, + ); + name = Window; + path = Window; sourceTree = ""; }; BDDCAA316B6C4E2A467D14C79E23372C /* Targets Support Files */ = { @@ -7014,41 +7472,72 @@ name = "Targets Support Files"; sourceTree = ""; }; - BEA4783459FBDB405F91C34373955400 /* Bridge */ = { + BE361C567DF42430A8134DD8E7E7CD3A /* Controller Skin */ = { isa = PBXGroup; children = ( - FE0C4019F40D94124274D599DD260980 /* N64EmulatorBridge.h */, - 1FA41CF9BC943DB28A21577ABD2D7C6E /* N64EmulatorBridge.m */, + EE94484CFDB733F9B6B76E0416EB735F /* Standard.deltaskin */, ); - name = Bridge; - path = Bridge; + name = "Controller Skin"; + path = "Controller Skin"; sourceTree = ""; }; - BEE053A077D5B0152B87C64B9E854C3D /* contrib */ = { + BE44974759F9B441197C89CD4CD09522 /* math */ = { isa = PBXGroup; children = ( - FB9B4CF7C92056F8465C3BC5744BEA23 /* gregbook */, - 0396E6F488E454AEA132CC2941CD243F /* libtests */, - E31275459F62FCFE7326250B9826CA9D /* pngminim */, - 61E723CAF793205951264CB8D0EFB28E /* tools */, - 104401E321E18AD99134ED58CE50DFAA /* visupng */, + AFF85B9517592B8C0C0F604D1FB43836 /* complex.h */, + 4702731F2DEC76D99FCE88986919F6AC /* fxp.h */, ); - name = contrib; - path = contrib; + name = math; + path = math; sourceTree = ""; }; - BF15A943982DF0036D7E9AB6A541BB5B /* Support Files */ = { + BEB87D5D9797CEC129F550AE00BEA955 /* desmume */ = { isa = PBXGroup; children = ( - BC93DB5E5A61F3C883D37793C77CDF2A /* GBADeltaCore.modulemap */, - 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */, - 0BB04C06267FD84AED09F6E677B3B3BF /* GBADeltaCore-dummy.m */, - 27A2677C576835F3B4E792D1223B0C84 /* GBADeltaCore-prefix.pch */, - 31C592DC38E9487D52E30F0FFC654460 /* GBADeltaCore-umbrella.h */, - 021152EF65B7FECE3238545205BFBB9F /* ResourceBundle-GBADeltaCore-GBADeltaCore-Info.plist */, + 92B96D5A6CB68D8B0F7D263DD26BD49F /* src */, ); - name = "Support Files"; - path = "../../Pods/Target Support Files/GBADeltaCore"; + name = desmume; + path = desmume; + sourceTree = ""; + }; + BF1C8A5FD149AA57A3ED92BF49143379 /* Model */ = { + isa = PBXGroup; + children = ( + 4A71F2279611250A8163A19A68C100B6 /* GBCCheat.h */, + 66FC5067060EC57040E657A1F216A5E7 /* GBCCheat.m */, + ); + name = Model; + path = Model; + sourceTree = ""; + }; + BF572ED34716178595A4BF25353FDAFF /* Extensions */ = { + isa = PBXGroup; + children = ( + 5AF44E99CDEC34FBD91AFEE4DACFD88A /* RemoteFile+File.swift */, + D347B9730DA2524DAF8E0C7AEDC8EEEA /* RemoteRecord+File.swift */, + 62D7AE2A6BB60EE680F208CA7652859A /* Result+Drive.swift */, + B7835A1CFAD26F5CED24394F9EB07DBD /* Version+Revision.swift */, + ); + name = Extensions; + path = "Backends/Drive/Harmony-Drive/Extensions"; + sourceTree = ""; + }; + BFBD0BD013524908700174DABA95B397 /* N64DeltaCore-RSP */ = { + isa = PBXGroup; + children = ( + B2688E7DF0591DC8789862F774C74BF6 /* plugin_delta.c */, + ); + name = "N64DeltaCore-RSP"; + path = "N64DeltaCore-RSP"; + sourceTree = ""; + }; + C0430F9AC3BFCFDD982064340CB1D928 /* libretro-common */ = { + isa = PBXGroup; + children = ( + D10CE56FBE511CBEAA1D1F6CC3E4977C /* include */, + ); + name = "libretro-common"; + path = "libretro-common"; sourceTree = ""; }; C0D343A3DF1A1ED3CBBC9AB812DAEEE8 /* Support Files */ = { @@ -7077,72 +7566,76 @@ path = "../Target Support Files/Alamofire"; sourceTree = ""; }; - C2D181987F7A462D06051D6F298B60FD /* NESDeltaCore */ = { + C1A3D24E4F2DDADE499D71DE02447D5F /* GLideNHQ */ = { isa = PBXGroup; children = ( - 31C90C17DE46AAD6D2786B0098B71196 /* Standard.deltamapping */, - 7D0D072173D1C15941C0153AB542E28D /* Controller Skin */, + 44EC5F94EE5BFE7A785C5541E9210F90 /* bldno.h */, + 078E27968A4F0A9279BF48A15BCFF4B8 /* Ext_TxFilter.h */, + D993982D3AADF41E465498E329FEBD9B /* TextureFilters.cpp */, + 01D14FEABF918A24804DDF7627C4C6E4 /* TextureFilters.h */, + 4848223D118C90C9C8D28CB320ECD889 /* TextureFilters_2xsai.cpp */, + 91E7D2C0AB72AAC3471B7798B8B29960 /* TextureFilters_2xsai.h */, + CEAA6B8E9680ACB06BA0279C3ED990AE /* TextureFilters_hq2x.cpp */, + AEAC4A2D514CEA5F884C8B989B177FE5 /* TextureFilters_hq2x.h */, + 61394348571E8373817FFE9C2319D511 /* TextureFilters_hq4x.cpp */, + 009F86808D0C8EA68A833D33755CD232 /* TextureFilters_hq4x.h */, + B2C1C0E46794ACCFA1D49F4F9F7418C1 /* TextureFilters_lq2x.h */, + D7DDAE335C54604826A3ECBD79CFED3E /* TextureFilters_xbrz.cpp */, + 30E950B4BF47AC526A4464F3994CA0BB /* TextureFilters_xbrz.h */, + 7E8024B293C9555F3BBBE264D95E1A8D /* TxCache.cpp */, + 6154AA0F4F3D72A490406941DDA56ECF /* TxCache.h */, + 951AF961D61C1C3B55D7700D57143D91 /* TxDbg.h */, + CC339C9C59B65A4D6483598A6451971E /* TxFilter.cpp */, + 36B21AD2A8F390B23FB0A538F357E4D0 /* TxFilter.h */, + 8DC89DB8BDA2642C42D9CE6C493AC371 /* TxFilterExport.cpp */, + FCA829A51AC7996EB15AC022B591C7AE /* TxHiResCache.cpp */, + 47179FBED9A19BF96E05BC6C9E3056FB /* TxHiResCache.h */, + BE1843CA9E6FD7C78006C01BE4BD5C55 /* TxImage.cpp */, + A5234D695ADE2B2BAE15139F5B2FD0BA /* TxImage.h */, + D02F91DD08301C06A04A0C6273FC0114 /* TxInternal.h */, + 29EB52E4D8EE749D56B951548307A0DE /* TxQuantize.cpp */, + 164BA6410D467508F284ED6B400D342C /* TxQuantize.h */, + FE3A4F7E48FD2C3751CCD26689C1353D /* TxReSample.cpp */, + 1F5F6218B59F2A6BF7EC220A625C8AB8 /* TxReSample.h */, + 838F667D353D92B49C6150D47D8E5C4D /* TxTexCache.cpp */, + 508153374379761825956DE2D625E976 /* TxTexCache.h */, + 5131F9EE375D77DAA9870F13B4698A6C /* TxUtil.cpp */, + FEAE71533C82C752E7F1D21A99698CD1 /* TxUtil.h */, + 18DCE91DC2FF6AC9626641A56F1ECCF2 /* txWidestringWrapper.cpp */, + 89F66807040C88F86F074A7DE8D84643 /* txWidestringWrapper.h */, + D6153909505D520DCB3029839F780792 /* inc */, ); - name = NESDeltaCore; - path = NESDeltaCore; + name = GLideNHQ; + path = GLideNHQ; sourceTree = ""; }; - C31EFB83C698738C5AE9C0BF6CC3B679 /* xxhash */ = { + C22DE4CDD047BCED0C6D3A063AE3CA47 /* Pod */ = { isa = PBXGroup; children = ( - 37B8F5240077E10AD926217E581D56A6 /* xxhash.h */, + B82F7DDA166E0646F0D0CF3136098E6C /* SNESDeltaCore.podspec */, ); - name = xxhash; - path = xxhash; + name = Pod; sourceTree = ""; }; - C37DDFC457F0FC0A072B645839965E55 /* math */ = { + C397AE0DB769B6BAA3CA59FD7636C6AB /* contrib */ = { isa = PBXGroup; children = ( - 3D72B8F3909167EBE56E1BF0E3108516 /* complex.h */, - 9264D4DA6A66BA54A811C0AC60576BC4 /* fxp.h */, + DBA0DEF976C37D70CB5C6220003AA58B /* gregbook */, + DD17A76DA46CC1E07FEFBDFF7D2504B6 /* libtests */, + B0BE3EAABF018632B055A1F59EC0CBB5 /* pngminim */, + CB092C27B92B289CE08ACD8E536D448D /* tools */, + 07C5E7E52DA074AB4D079EE3E3328C33 /* visupng */, ); - name = math; - path = math; + name = contrib; + path = contrib; sourceTree = ""; }; - C3EF978A151AE28C04A2AE18B57B9AA8 /* libgambatte */ = { + C50EC8B7A25F27641BEB6631E4FA28C2 /* Pod */ = { isa = PBXGroup; children = ( - 1BCC1AB3348B9592350C28DB2607FA04 /* include */, - E1AD09726E2CA3D30FD42BB13C9E60F8 /* src */, + F67250F16C56E5B1A4484C31368E4BB1 /* GBADeltaCore.podspec */, ); - name = libgambatte; - path = libgambatte; - sourceTree = ""; - }; - C4D47ABBEA4B5A7F4CCBD4E0828F752B /* Model */ = { - isa = PBXGroup; - children = ( - AF58C9A94CDE343BACE56F4E13E201C8 /* Cheat.swift */, - BBAEA04DA00E792104BDE8F6F66BBE09 /* CheatFormat.swift */, - B442DF315B83F5A22C5AC0D52DC6F788 /* ControllerSkin.swift */, - 47EEB210C3F983E3F97BA5C90AEAE80C /* ControllerSkinTraits.swift */, - 8A3F0FDFBE86AC5763C0A89166EFC859 /* Game.swift */, - F779EEE5715D3C32E844758058351CE8 /* GameControllerInputMapping.swift */, - 2898E99C918654A8574FBA694F5AA190 /* GameControllerStateManager.swift */, - 00EA19D2D4A64B523C65C5C29699ADC6 /* SaveState.swift */, - CBECC9F3DB04E6A5DEF0079A685A3E70 /* Inputs */, - ); - name = Model; - path = DeltaCore/Model; - sourceTree = ""; - }; - C62148EE2C694AD9CB1B5035900C5E8E /* x86_64 */ = { - isa = PBXGroup; - children = ( - 1ACB84EDA396FC32A38EF2E80F2E78D5 /* assemble.h */, - 7680621D7EA37B25BD6FAFEB184DD97B /* assemble_struct.h */, - 7745EBDA352FAAAD04827718AFC2DDD0 /* interpret.h */, - 94AAA4870A47F9FA1AE9463A83E81CB5 /* regcache.h */, - ); - name = x86_64; - path = x86_64; + name = Pod; sourceTree = ""; }; C64CB76ADEFD16E30906C74F992B3CCA /* NSString+URLArguments */ = { @@ -7162,60 +7655,55 @@ name = Resources; sourceTree = ""; }; - C78FC44C8B7F1A8AEB30433AD0440A12 /* backends */ = { + C87974DE4A4F914A1E04668AA8FD21D3 /* plugins_compat */ = { isa = PBXGroup; children = ( - 1D88D4AF63AF5783792687FAE3AD2BCB /* clock_ctime_plus_delta.h */, - 894545843DCDE3856F3A5F4BA90A2227 /* dummy_video_capture.c */, - 92B94EAC848FCE04BDC76F2D0CC75878 /* file_storage.h */, - 03156EC920E6D8F5346B5F3F354FAFAB /* api */, - 0AB0646DD833AD6334AF13552DF365D2 /* plugins_compat */, + 062F18B3DCFB2719520C631367293BC3 /* plugins_compat.h */, ); - name = backends; - path = backends; + name = plugins_compat; + path = plugins_compat; sourceTree = ""; }; - C9CF25A97B140A7A408C88D4E580E637 /* Mupen64Plus */ = { + C8E3902A28AE5C2E3D9F0823F879EFCB /* Support Files */ = { isa = PBXGroup; children = ( - 047498B4224A2C3DF5E40D05044F721F /* mupen64plus-rsp-hle */, + 6C5307A8FB0BC0FF445E3DABBD956EB9 /* Roxas.modulemap */, + 6D90A2363F7995BE9713375802DBDF16 /* Roxas.xcconfig */, + DC0FD4C8DB0253E8CE8EAF9C64DBD0EB /* Roxas-dummy.m */, + B197402D582AEC5BAF8E914AC32CF998 /* Roxas-prefix.pch */, + AE6AED1C735BB477D425F99206A28D87 /* Roxas-umbrella.h */, ); - name = Mupen64Plus; - path = Mupen64Plus; + name = "Support Files"; + path = "../../Pods/Target Support Files/Roxas"; sourceTree = ""; }; - CABE3D3138D99EF54CB4A98493F1950F /* GLSL */ = { + C8FDB5EB2CE474C0F1A3795E258C8005 /* osal */ = { isa = PBXGroup; children = ( - ABDD0D043967D1CF64FE87292AD3328B /* glsl_CombinerInputs.cpp */, - F2257CE5C9B676C063600BAA94CA562D /* glsl_CombinerInputs.h */, - AD521670C6D7CBA41733C054C293541C /* glsl_CombinerProgramBuilder.cpp */, - 1DA85D3012B6718655D78006E60A7A61 /* glsl_CombinerProgramBuilder.h */, - F40644EDA82AEFA7C2C89C6CBC2D581C /* glsl_CombinerProgramImpl.cpp */, - 747E5693480F6B6F20690DB12E236F86 /* glsl_CombinerProgramImpl.h */, - 1CC140E1F857FD727024B376FACB6D15 /* glsl_CombinerProgramUniformFactory.cpp */, - 4ED141EBC657EC07C8D65BCD12249B41 /* glsl_CombinerProgramUniformFactory.h */, - 7B99B417F7B87ED84AC94DA16A254477 /* glsl_FXAA.cpp */, - 9ACA4CA8AE2D83BA8AB58439FC360D38 /* glsl_FXAA.h */, - 5D2215E3C485C95C307BE07BC62D0E65 /* glsl_ShaderPart.h */, - E988413B416CBB252A2093E604B1CBEA /* glsl_ShaderStorage.cpp */, - 90696DCC98EAADB42AE7018A27D415F5 /* glsl_ShaderStorage.h */, - 538F7789F2608728E516881281A64037 /* glsl_SpecialShadersFactory.cpp */, - BEEFBD2A07C30B4B56078B86605B2E66 /* glsl_SpecialShadersFactory.h */, - 1E2FFD68EF928DFACE9371D8AAC65F52 /* glsl_Utils.cpp */, - 1F9D3C122510252E5BCC49CBC78D15C1 /* glsl_Utils.h */, + D407D2A6DD08097D10D2B1117A8635F6 /* dynamiclib.h */, + B5D0F2204128CF6B384D5E2619FCFA0F /* files.h */, + A77309856ECBE8FE95C26ADD933333D1 /* preproc.h */, ); - name = GLSL; - path = GLSL; + name = osal; + path = osal; sourceTree = ""; }; - CB4D937EB1CD8D9527E9DC1C2C3D8E87 /* Resources */ = { + CADEE429BD43EB9C7B8E0AB43967287A /* Controller Skin */ = { isa = PBXGroup; children = ( - 850B3AEB1917875997484AA3953B926F /* Standard.deltamapping */, - 4D99497467047689EE0E51F25AD9B33F /* Controller Skin */, + 676903B714C5F565B51ED126D715A4B4 /* Standard.deltaskin */, ); - name = Resources; + name = "Controller Skin"; + path = "DSDeltaCore/Controller Skin"; + sourceTree = ""; + }; + CB092C27B92B289CE08ACD8E536D448D /* tools */ = { + isa = PBXGroup; + children = ( + 0EBF0A8640326E2F901DF86C21C060DB /* sRGB.h */, + ); + name = tools; + path = tools; sourceTree = ""; }; CB68C9A1776173E92905B5A26E966B48 /* Crashlytics */ = { @@ -7235,162 +7723,6 @@ path = Crashlytics; sourceTree = ""; }; - CB7244FAF13430D229B19F209370E22A /* Extensions */ = { - isa = PBXGroup; - children = ( - 3FF38B518700B0B715F71F0BA0F88F21 /* AnyKeyPath+StringValue.swift */, - 1045871F90D4D454EDB4A2C75FE2404F /* Dictionary+Sequence.swift */, - 4BBE3A12499742BD09D9EBD2B293371C /* HarmonyMetadataKey+Keys.swift */, - F9A3509FC2D34122712EB62CE66B6845 /* JSONDecoder+ManagedObjectContext.swift */, - 684FBE5FB16F9A9B0FC3DD78F607C946 /* KeyedContainers+ManagedValues.swift */, - 4A684FB9EF326DE42BC2EDF06D0D6126 /* ManagedRecord+Predicates.swift */, - B1F489088240F6C610B83E8F77CB5B7C /* ManagedRecord+Uploading.swift */, - F62AC62ED831B8389E68C8BC69676157 /* NSError+LocalizedFailureDescription.swift */, - E7BCCABE84D92A4A7AB4A427BB8558AE /* NSManagedObject+Conveniences.swift */, - 46A81EB457DC21D9C21932C473EB359A /* NSManagedObject+Harmony.swift */, - F27A0FAE014100246C0E1DAC5E1E38DF /* NSManagedObjectContext+Harmony.swift */, - 9FB473C586C6C3957FB7196F5D749297 /* NSPersistentStore+Configuration.swift */, - ECDCC3E94D5101F61796B3E89290013D /* Result+Success.swift */, - 65B9EE37937D4417CCF0576098C38148 /* UserDefaults+Harmony.swift */, - ); - name = Extensions; - path = Harmony/Extensions; - sourceTree = ""; - }; - CBECC9F3DB04E6A5DEF0079A685A3E70 /* Inputs */ = { - isa = PBXGroup; - children = ( - 294C23E97C15AE68F25128C115C99270 /* AnyInput.swift */, - 1DA0672F627BE87C2B50295FDE1FE14F /* StandardGameControllerInput.swift */, - ); - name = Inputs; - path = Inputs; - sourceTree = ""; - }; - CC07376AABD939BDEBA79D5F2CBA2522 /* Pod */ = { - isa = PBXGroup; - children = ( - CB69BAB4143D6BB19DEF090F3256A990 /* SNESDeltaCore.podspec */, - ); - name = Pod; - sourceTree = ""; - }; - CC1EEA402511AA159D872BBCB22E1C61 /* GBADeltaCore */ = { - isa = PBXGroup; - children = ( - 069FDF1510D1EE57999D9EEFA42DCFAC /* GBA.swift */, - 5A43F1D8E9F0EE020CB6D17932CE6292 /* GBADeltaCore.h */, - 577B01C70A6A38E4A14D8E2184A0A446 /* Bridge */, - 97F09188D881AF9DF1B358DA6D957823 /* Types */, - ); - name = GBADeltaCore; - path = GBADeltaCore; - sourceTree = ""; - }; - CC4735CB3C09953ECC85CB3CC2A74DCB /* common */ = { - isa = PBXGroup; - children = ( - C1F9B4F1AC4BEBB6F3B839EDBD9E5F8C /* adaptivesleep.h */, - A7449C167D753EB017EF503CF6D7DBF5 /* array.h */, - 85DD22654F689D365C8835281CEB8F13 /* defined_ptr.h */, - B009C33CC7DA7BB144CBFC37BB96FADA /* rateest.h */, - ED84FF00BB1C75891DB73E5EC2DC19CC /* ringbuffer.h */, - 416A8E69A7929028B4EDF36F7813BCDA /* scoped_ptr.h */, - F590A4FDC0A63C530D1734FD50B7078E /* skipsched.h */, - 26CE0005068BFE608A1C540A882BA5FB /* transfer_ptr.h */, - 9EA41F9CCF4B088FD860DE0A9D8B8D17 /* uncopyable.h */, - AE0C7BFBF72D47F44B5150F9AD1D5E20 /* usec.h */, - ); - name = common; - path = common; - sourceTree = ""; - }; - CC7D68D1132C8D6ABCDC4CBDEA4D1DB5 /* PrivateApi */ = { - isa = PBXGroup; - children = ( - 23B2C2ADF3521E6B7DFB9C17A4247A3B /* gralloc.h */, - 442216A823D794BB8E292F6B3A6BB793 /* GraphicBuffer.h */, - 1DD967DC3CDB801FA186F97CA836B2E5 /* libhardware.h */, - ); - name = PrivateApi; - path = PrivateApi; - sourceTree = ""; - }; - CC9B157823AAED29576D5EE732798383 /* Controller Skin */ = { - isa = PBXGroup; - children = ( - E07E6F8E20C9B8DBDB6086A2080574B0 /* Standard.deltaskin */, - ); - name = "Controller Skin"; - path = "DSDeltaCore/Controller Skin"; - sourceTree = ""; - }; - CCAF359173F70036DDACE0B434B9FEC2 /* Pod */ = { - isa = PBXGroup; - children = ( - D25FEE0C7F00C1F35CA79D7416F11407 /* DSDeltaCore.podspec */, - ); - name = Pod; - sourceTree = ""; - }; - CCF8ECCA8A47403B9790B2173996E8DD /* uCodes */ = { - isa = PBXGroup; - children = ( - C3522EC7585D646CAA3673DB9D55FB21 /* F3D.cpp */, - 292C26E214699339AAE80215F482F9BF /* F3D.h */, - 49E2E93BB84159ECED9476CD991992C8 /* F3DAM.cpp */, - 026AA711C2DD33D8830708741F80F0D5 /* F3DAM.h */, - 2E42A2A695A512EFB1CAFA94A99A0F8A /* F3DBETA.cpp */, - A471F1FD870B327EA215A186F1B4B401 /* F3DBETA.h */, - 2B93D7E35A62A2F50B4C38BF9A76E4C4 /* F3DDKR.cpp */, - C9C35DC64C3A93740937D3C3964F9200 /* F3DDKR.h */, - 22E13ACA822EB61BEEF5DF35BDB4B13E /* F3DEX.cpp */, - DBC2FE16691E41109D7168B4B47BC729 /* F3DEX.h */, - D1A18FFCFB5674E197BFC4BFA0584F6E /* F3DEX2.cpp */, - 1A79E77382CDD0991EC1FF3A9416D1E8 /* F3DEX2.h */, - 06A10A0C91C261CE6EB6C49882F13804 /* F3DEX2ACCLAIM.cpp */, - 73D96244D69D5586A7CEBA91D3674E96 /* F3DEX2ACCLAIM.h */, - 49EA3FD213D039FCC91628BD8DD260CA /* F3DEX2CBFD.cpp */, - 0413511727F62ED4EE7013A2B65E6D60 /* F3DEX2CBFD.h */, - C3928A50878B4620930E776643F68B21 /* F3DFLX2.cpp */, - 3A9E10651AAF13257794A36D1EE6B48B /* F3DFLX2.h */, - 1D1E6C0B74E1FAEE75DA38BD38CEBDCE /* F3DGOLDEN.cpp */, - 475A94434453EF6E1D44C3894F12A473 /* F3DGOLDEN.h */, - 5DCDE4D17E50CB5CCFB03F65E6287BF0 /* F3DPD.cpp */, - A6652070A07FC48369CD2D2D93B812AB /* F3DPD.h */, - 4DB5EBAC052F23A23935BC01F0F3BD13 /* F3DSETA.cpp */, - 362727B8448D5ACBAA6199388904E6EE /* F3DSETA.h */, - CF0DF7AF00BD39B06D1EDE5AD5FAF7AB /* F3DTEXA.cpp */, - 2C0286BB0302AD778CF29EECE712709B /* F3DTEXA.h */, - 36962E0BFCDEF7E1ED3272745C0620BB /* F3DZEX2.cpp */, - C1651CF80D05D97DB390C5D66D51F25C /* F3DZEX2.h */, - EBF793539672A386F6C337B8667AE813 /* F5Indi_Naboo.cpp */, - 888803D1EF43D58657C5732AFAC576BC /* F5Indi_Naboo.h */, - 33CC18E757DD735D6437685485DADD01 /* F5Rogue.cpp */, - F4FF030A171DC28CB5454BA2D75DDCDA /* F5Rogue.h */, - 8AA9AC2951C819D3D589F82FAD7F5A65 /* L3D.cpp */, - 15B06D5EC0A84D413A97D791A09DD4C0 /* L3D.h */, - 9ABF020B63EDEC52E2B78074AFB454B1 /* L3DEX.cpp */, - 29ABF3EFA4F58F7434261260A0FCC2A5 /* L3DEX.h */, - CA005FCDCBF549105B1691D698AFFE18 /* L3DEX2.cpp */, - 83DAD8759111F18B4EDD79709EA9C168 /* L3DEX2.h */, - B115DAD8B8CBC0649AA6BCCBDDF47E7F /* S2DEX.cpp */, - 190E396AF2951D7E331A9B5B8276EAF4 /* S2DEX.h */, - 1D2F36F994B2A734DE7746BB61880D92 /* S2DEX2.cpp */, - 3C581DB34643779E6E697D493C316D48 /* S2DEX2.h */, - 59F17550D814845B484B295BDDA7E52E /* T3DUX.cpp */, - 5F992EC4AD08ED4806E1B360451E1861 /* T3DUX.h */, - AF16DF495D40774F62F549F44383A37B /* Turbo3D.cpp */, - 3745BEDDA1C724568FBE3D2E2D7E1A45 /* Turbo3D.h */, - 600582314CC9166CC637A8451ADB1310 /* ZSort.cpp */, - D2CD9D7750784D7D9E924E0E0357EC76 /* ZSort.h */, - 071BA5C258DCD29E5B2DDCC021A6B4F7 /* ZSortBOSS.cpp */, - 8C1C055B90B4594009DB00C4694AD0E8 /* ZSortBOSS.h */, - ); - name = uCodes; - path = uCodes; - sourceTree = ""; - }; CD560E543AC5643E5375BCCCDA698D91 /* Alamofire */ = { isa = PBXGroup; children = ( @@ -7417,241 +7749,144 @@ path = Alamofire; sourceTree = ""; }; - CE2B8EBCA8AAE11803FB13F94633A7E6 /* xxHash */ = { + CD6F15D7637CCCEAC5C7E93368FACE0A /* Model */ = { isa = PBXGroup; children = ( - 1DDB6A675F59026DAB0306340D41A1BE /* xxhash.c */, - D761EA5C2004DE520EE6E3DA7CD4F6C3 /* xxhash.h */, - ); - name = xxHash; - path = xxHash; - sourceTree = ""; - }; - CE7DAA8BB95D149C5B6CB0226DAED1B6 /* Model */ = { - isa = PBXGroup; - children = ( - 67AB883A36469191BFD529D65D8810A1 /* CheatProtocol.swift */, - 3DADD8386C8821177B764FB59ACB6859 /* ControllerSkinProtocol.swift */, - C4F09C29C5169EDE2BFAE9F9E6B95F48 /* GameControllerInputMappingProtocol.swift */, - C70E38FCA082D826611BFD1F0EC58613 /* GameProtocol.swift */, - 3E5950F1D94686CF45BF978347B71AA5 /* SaveStateProtocol.swift */, + 099938FEDA9E30DB8F316FD35D3A7E39 /* Account.swift */, + 527AC22A3208696A410615506A968BEF /* File.swift */, + 831586913D802CF0F3BD70D6BB259E5B /* Record.swift */, + EDCA85256EA26CE4DC88337487128581 /* Version.swift */, + 9E557AD5A2E8A98E7AB3378D22A4DFC5 /* Core Data */, ); name = Model; - path = Model; + path = Harmony/Model; + sourceTree = ""; + }; + CD7BB577140F671088CB14E3EA3B920F /* RSP */ = { + isa = PBXGroup; + children = ( + DA606ADA092290C5F851F2561EDAF9F5 /* Mupen64Plus */, + BFBD0BD013524908700174DABA95B397 /* N64DeltaCore-RSP */, + ); + name = RSP; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 9BFEEE19ABD216833F8B7D5AAAB8E2F5 /* Development Pods */, + 5D9C7D399393F70BB3F1B702FF0907D4 /* Development Pods */, D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, 10C5A63DFF5B6476CE409931492CA3D0 /* Pods */, - 852E660B5C556492569CAB8892FB9629 /* Products */, + 03FD5788ECA6B9A68F2212115FCFC591 /* Products */, BDDCAA316B6C4E2A467D14C79E23372C /* Targets Support Files */, ); sourceTree = ""; }; - CF847D0CDB6821E22995CD53B6D9B9A8 /* libretro-common */ = { + CFE95C57864F656F78366F19E2024B46 /* memory */ = { isa = PBXGroup; children = ( - 41041585F53BA6BD480438989A571EDC /* include */, + 16606104B7D23C541D75E1D9CACB2862 /* memory.h */, ); - name = "libretro-common"; - path = "libretro-common"; + name = memory; + path = memory; sourceTree = ""; }; - CFD93EF9E254BEBADC970D58902DE4EE /* Pod */ = { + D10CE56FBE511CBEAA1D1F6CC3E4977C /* include */ = { isa = PBXGroup; children = ( - 20738B0979F88177809FB593F753139B /* NESDeltaCore.podspec */, + 73DC986430887FFB58433385B29BACE2 /* boolean.h */, + 508001DB6BE4336BE73C646FCBC54782 /* clamping.h */, + F70E93212D39D1D9645D5BBE0CFB4A26 /* filters.h */, + 4963CF582BB4AB9E1079BB9ACCA4C395 /* libco.h */, + 42884C54AC2951F6A1140B6F12823A61 /* libretro.h */, + 3A88ADF5CB822A0ABF0CDD1E4D68BAAE /* libretro_vulkan.h */, + FE67AEDDB46071185B8EF236FD149EA7 /* memalign.h */, + 93D6A333E30962F5423F826B733E702F /* memmap.h */, + FDF80C228030940A34A433995ABD6250 /* retro_assert.h */, + 03152EFD6359667DF578CCCE3CAF648E /* retro_common.h */, + B636371B292E5B16402AE89C9B512E16 /* retro_common_api.h */, + 4E75A6CD77FDC5730599F170C8A47DC0 /* retro_dirent.h */, + 3762689E296E5EBA4CC56F2683522DF0 /* retro_endianness.h */, + 2A147B56E0C3491FF27162D46C95BDD2 /* retro_environment.h */, + 15E4E1022555EFD22260B7C32AE9BCEF /* retro_inline.h */, + FECEA5EC0D42D4421643583D74C8F676 /* retro_miscellaneous.h */, + 35C53EC4A93175802A6008176A72A482 /* retro_stat.h */, + 9870FEA24CF3B1C5A3F888CBE2149CD4 /* rhash.h */, + BE44974759F9B441197C89CD4CD09522 /* math */, ); - name = Pod; + name = include; + path = include; sourceTree = ""; }; - CFD9F489FE6F503D6C7F477239AD510E /* GBCDeltaCore */ = { + D57C29819F5C998665553943DA337E3D /* apu */ = { isa = PBXGroup; children = ( - ED91CE637F37121B420FEF20D0FBB875 /* gambatte */, - 864B75D4D6EE78F454DD5FB1109B02CB /* GBCDeltaCore */, - 43FBF70E4A21562133E286C7860ACCE8 /* Pod */, - F4403F4F7271CB18FFDA1C94D9E6D79B /* Resources */, - AC4003DE81173BA37C3C2F94F058FEC9 /* Support Files */, + ADFD98373A9BA6422C60F09ADCB69852 /* apu.h */, + FA71E73B1A809C3FFD98BD1BDA46314D /* hermite_resampler.h */, + AA6969D1558B782C4F58F0AB947B3E22 /* resampler.h */, + 15A5B47B39157696DDBC56DF53AEFE81 /* ring_buffer.h */, ); - name = GBCDeltaCore; - path = ../Cores/GBCDeltaCore; + name = apu; + path = apu; sourceTree = ""; }; - D0D398A9A595E744E5D60CE80391D74A /* Bridge */ = { + D6153909505D520DCB3029839F780792 /* inc */ = { isa = PBXGroup; children = ( - 631827F8F7F53171DBE8CFA596562B76 /* NESEmulatorBridge.swift */, + EAED976AA4A2603D8DF8C50E40CEB1CE /* png.h */, + D6965C029B17596D166CA7C061E5AFA6 /* pngconf.h */, + 12046753C25C05BEB8D3B91D9C84AFE9 /* pnglibconf.h */, + B3AEB39C358F48D203125CAFE9D03E22 /* pngstruct.h */, + F231C512D2B9D8E1FA081E1059B3D3E0 /* zconf.h */, + E284FFF9015A2937CE2CA1509C92B65C /* zlib.h */, ); - name = Bridge; - path = Bridge; + name = inc; + path = inc; sourceTree = ""; }; - D201432F7BDC32037726CC405DABB56F /* libMupen64Plus */ = { + D69D7D25F4E9A906F68D85671AB8DC5C /* Types */ = { isa = PBXGroup; children = ( - B8846FB6AA67A85C0B966F024F149350 /* SDL */, + 6E5761EB37D9B48C3780E3C7C5C40100 /* DSTypes.h */, + 6572AD0AF91A5CC97E1F7CEB62ED94A0 /* DSTypes.m */, ); - name = libMupen64Plus; - path = libMupen64Plus; + name = Types; + path = Types; sourceTree = ""; }; - D283EBBE834BDDBA4A87381477086CD4 /* pif */ = { + D71E7A6F9AAB7C75B1DD2144F0C3A2AE /* api */ = { isa = PBXGroup; children = ( - 3D3835A82BC331577B14F9F444CD9367 /* bootrom_hle.h */, - C2ED97BD0F13C57ECCE6851D581326EB /* cic.h */, - 485C8F569695892A8BF25E965F61DDE1 /* n64_cic_nus_6105.h */, - 4C032B7F3EF8BBC968A5EB242CD96FDF /* pif.h */, + CEE9C147D673E0F634134990DBE79A6F /* callbacks.h */, + C05B8BD653DEFD31F1ED3C6A5C8033EA /* debugger.h */, + 5A674E3827F841F30D860E8844750409 /* m64p_common.h */, + 319773B795A71CD3057DB359C4AE5C38 /* m64p_config.h */, + 8D330D00A36CAD5DB271066627735CA4 /* m64p_debugger.h */, + 34887E5016BAEE752E395334E79BDDFD /* m64p_frontend.h */, + 3C58AA463B08C4DE998C625EC48E91D1 /* m64p_plugin.h */, + 7EBF937249B34B9B7F90C9FF04ADE6B7 /* m64p_types.h */, + 89ACBACFE5506B98A5A01C05D96A32A6 /* m64p_vidext.h */, + F4E1FCF713C18921783474BD5B489966 /* vidext.h */, + 6AE7E3B37D390409F4ECEA14098EE0F7 /* vidext_sdl2_compat.h */, ); - name = pif; - path = pif; + name = api; + path = api; sourceTree = ""; }; - D2BED9DA807FAFF2162C70598CC64A97 /* N64DeltaCore */ = { + D8849A54C10E36B94B9287E6691829B9 /* sdl */ = { isa = PBXGroup; children = ( - 4805F8BC438B0132B2F50C26602B8DFA /* Standard.deltamapping */, - 6E412BAEDBF8A6DDC4DF29F84D4A7289 /* Controller Skin */, + 3F9BFBF397EFF80B8131726E9C9A62C9 /* debugger.h */, + 166B7D7F68333A9915F7970F9FB547C0 /* expr.cpp.h */, + F88144124FBA971D0634C19257E4725C /* exprNode.h */, + 122B792B0EAAF896926591B297C9D30D /* filters.h */, + A872D0AF2F86BA70FF401F6898E09D33 /* getopt.h */, + FFB86879ED24825EDEC6F479F7EAA0DA /* inputSDL.h */, + 021DE75321784D55780486DCF5510498 /* text.h */, ); - name = N64DeltaCore; - path = N64DeltaCore; - sourceTree = ""; - }; - D5418A693FAB0FDDC317EB3D01B003EC /* pi */ = { - isa = PBXGroup; - children = ( - AC44908E2E42851E70850DD854945391 /* pi_controller.h */, - ); - name = pi; - path = pi; - sourceTree = ""; - }; - D58652A0F8AA7A68433AC33F2767D21A /* internal */ = { - isa = PBXGroup; - children = ( - A82BEA8F12430E795A88BB379EFE3536 /* autohint.h */, - 7853737E5530C7A19E57F3534054E328 /* ftcalc.h */, - 8127AEC9343CDF5FA184EEAB2A4E598F /* ftdebug.h */, - 546B78B239F8467F1682E4319F7B44FB /* ftdriver.h */, - B61327FFC19D6334ACBC6C66C2BC2BF5 /* ftgloadr.h */, - E9B7E1EDF3E36A1AE901C6599B744E37 /* ftmemory.h */, - A6A34D0C07503E7FFFE1FC9EE96553BB /* ftobjs.h */, - D9191356F40229DDA60488AC64805339 /* ftpic.h */, - E009A78A05503277A11995657704C090 /* ftrfork.h */, - 5A0B7AABE64CE3CFD6CBD4F335F9FBE1 /* ftserv.h */, - 821E332423194BD75B70F229D0992A67 /* ftstream.h */, - 232E1FD2069448A4B7FA73B378A48EDC /* fttrace.h */, - 3E8F9415B50C5BE88ACC481C92800E41 /* ftvalid.h */, - 2F0727F553BF04882765DDB5CDA7D864 /* internal.h */, - 7502471AA27312AF107E971A67EC58C6 /* psaux.h */, - 367BD3702DCBBD382022788A89524217 /* pshints.h */, - 8BA8D788852783316C1BE135C3ADC92B /* sfnt.h */, - B417E49B5B743092F1356B5AB9E555E0 /* t1types.h */, - F2C2DADC78B40086474AB8DAA997C070 /* tttypes.h */, - E878750482CECD30C0B696DEC99BC4F5 /* services */, - ); - name = internal; - path = internal; - sourceTree = ""; - }; - D699477F5BE68BF5AAA4EDE6169B0EE6 /* DSDeltaCore */ = { - isa = PBXGroup; - children = ( - 9F77AF9A3FC86D1CC84393B74FE050A0 /* desmume */, - 2758670028842E564ADF1466623CA744 /* DSDeltaCore */, - 7D413C8203E7C6174958FB2BE5ECF546 /* libDeSmuME */, - CCAF359173F70036DDACE0B434B9FEC2 /* Pod */, - 79E87841C009AFEB7C6BD7F59E5A607D /* Resources */, - 464E81739567397094C991C4ECB4AF83 /* Support Files */, - ); - name = DSDeltaCore; - path = ../Cores/DSDeltaCore; - sourceTree = ""; - }; - D7195EC7FAC0A0F89F4AD142DB2823C5 /* core */ = { - isa = PBXGroup; - children = ( - 18341B6F300F8B0BA009FD1B1F7945DD /* NstApu.hpp */, - 380AB1A1F7D98ACA91271E7BD163EEB5 /* NstAssert.hpp */, - 3F67DC9F98BC9365BCA0C5FBE0E14C93 /* NstBarcodeReader.hpp */, - 116918731DA7188F3EA9C2361B3A4FE5 /* NstBase.hpp */, - 911F72B30958B16B6FC132BEFBD9544B /* NstCartridge.hpp */, - 16EC811CB549CE7395A41A2FD9C4BE80 /* NstCartridgeInes.hpp */, - 1FF86939139DCD92059F8AFE38FCB116 /* NstCartridgeRomset.hpp */, - E11C4236342FA8398AE626DB3274772D /* NstCartridgeUnif.hpp */, - 9D3400B3B03C1E9DC1A3F7B5E3EB7B4A /* NstCheats.hpp */, - 88DE70070F082BF2437581BD7BB91BDB /* NstChecksum.hpp */, - 703D2463A2508D59FAA3694C995EBC4E /* NstChips.hpp */, - AE5CA9C3251B37CB412B002F2B18CD26 /* NstCore.hpp */, - 13AB3B953E50263BB51D1FB9AE869E8E /* NstCpu.hpp */, - B442E052E2E964ADC9111C8C691F1F49 /* NstCrc32.hpp */, - B7F7B276E6C1803265F573539F0A3704 /* NstDipSwitches.hpp */, - 6D9291C6142C075D49A0EDDA11CC4A78 /* NstFds.hpp */, - 81ACB985C1F71D0FC6DF2A0CBEC3C3D6 /* NstFile.hpp */, - 9039BACE3570843851BBD1B1CD4E8944 /* NstFpuPrecision.hpp */, - E4DF6912B7B427759D8C33E248753DBD /* NstHook.hpp */, - E79FC4B64B0151C5D97016FE705608F2 /* NstImage.hpp */, - 1BCB1BC674B34EBE5044A5F4AC65BA67 /* NstImageDatabase.hpp */, - 0C9A66906E90E69652DE559EF77F4E9C /* NstIoAccessor.hpp */, - EAD0D53A51B076CD685814AD012D9855 /* NstIoLine.hpp */, - E2A4BC7BE1DB4773E50DD8B7E967C51D /* NstIoMap.hpp */, - A48812FF7D0B803D29C9CE12B0F74926 /* NstIoPort.hpp */, - E94066EEBFDC68DAC8ABD344BE20C393 /* NstLog.hpp */, - A03F65FB47279C40083D17F181821336 /* NstMachine.hpp */, - 610583D92AD551F88F44D66D964F1334 /* NstMemory.hpp */, - F67940E7C50D7A614B939AD60E078097 /* NstNsf.hpp */, - 4F5BF7EF7AAE901FB3EF08FEB9603AEE /* NstPatcher.hpp */, - 0F88A26F6B6CF0CB98D87C013543A190 /* NstPatcherIps.hpp */, - 04432A140C95AD3E4476D54108D6800F /* NstPatcherUps.hpp */, - 69CFD44724961B202086D65543370D05 /* NstPins.hpp */, - 6C7AA36ACFE2AD062803B5CC90965154 /* NstPpu.hpp */, - AF55BE85D1766A85D542E06F8CB64DAA /* NstProperties.hpp */, - DFFBD37FBE84B1A972546ABBEE2067BF /* NstRam.hpp */, - 03724046BA5C3704C4607F3025370078 /* NstSha1.hpp */, - CDC648448D2BD63C7FA72EBB05BD53BD /* NstSoundPcm.hpp */, - 657EC94D6685264E5B97804EFAAB8145 /* NstSoundPlayer.hpp */, - 8B0132D8F45B4B5666CBF5652A345F0F /* NstSoundRenderer.hpp */, - 40106E58B0E94346FDE0DC29003A577B /* NstState.hpp */, - 21B08C108927AB621B0EB7F908CDC81C /* NstStream.hpp */, - 315FF0E989ED5094C01E5CC2AA1F9C5A /* NstTimer.hpp */, - DCBEFF02673A4D0CD9185C6100D7E963 /* NstTracker.hpp */, - C20B18CFE6A85C50A5E43ECF4C69D309 /* NstTrackerMovie.hpp */, - 09BF210597386722D5D7051B20C7BE0A /* NstTrackerRewinder.hpp */, - 7DE608CD51BCBB2191371758B7C8E134 /* NstVector.hpp */, - E66CD7AF3945F7CDD842E817ACEA39E8 /* NstVideoFilter2xSaI.hpp */, - FC91AA5FEFEE911BEE1FE8CBF90DC619 /* NstVideoFilterHqX.hpp */, - 3E9A8C85F702C4A1468F58BB906D4ED1 /* NstVideoFilterNone.hpp */, - B7229404AFA84F6E9DB4337E6CCCFD47 /* NstVideoFilterNtsc.hpp */, - B6CDC4DC2E9754CD3DA34C6A091F6E53 /* NstVideoFilterScaleX.hpp */, - 39DE70D20BB766FDECB1A17965101839 /* NstVideoFilterxBR.hpp */, - 3B6CCD65AA48EE2EC4FE44F3D0C21376 /* NstVideoRenderer.hpp */, - E525D21EBF75A723E18A33533D504F6B /* NstVideoScreen.hpp */, - 9AD6579FF3326133D973B8178ED12CEB /* NstXml.hpp */, - 72EC1BB681A1EE53852B18D9C14B635B /* NstZlib.hpp */, - DA33963059370640E46736D22ED76029 /* api */, - 502549B50925C18CAE6574440F514477 /* board */, - 9854CC5EAF3E4AAD4FA0B621ADF41826 /* input */, - 3A728C123D2F42FBF533AE80BAFA1C11 /* vssystem */, - ); - name = core; - path = core; - sourceTree = ""; - }; - D7565F65FCF097E9EA040326E27D0210 /* Extensions */ = { - isa = PBXGroup; - children = ( - 9688C4994A8E7E8C3EFC291E37D8B050 /* RemoteFile+File.swift */, - 7F2667D8C1F3EC7F5E7989CBAD0B8281 /* RemoteRecord+File.swift */, - EC23CE2DB6C5AA34154506F2401B1F8B /* Result+Drive.swift */, - ECAA6C5363B0FC690064E077812D9EF0 /* Version+Revision.swift */, - ); - name = Extensions; - path = "Backends/Drive/Harmony-Drive/Extensions"; + name = sdl; + path = sdl; sourceTree = ""; }; D89477F20FB1DE18A04690586D7808C4 /* Frameworks */ = { @@ -7674,39 +7909,24 @@ name = Full; sourceTree = ""; }; - DA33963059370640E46736D22ED76029 /* api */ = { + DA606ADA092290C5F851F2561EDAF9F5 /* Mupen64Plus */ = { isa = PBXGroup; children = ( - BCE1167568421B515DDBA963CC2FD777 /* NstApi.hpp */, - 4060028836FDB7AAC525DB0819187A0C /* NstApiBarcodeReader.hpp */, - 2B02EEBF1E035A24BDB6410BAA13782B /* NstApiCartridge.hpp */, - ED768209E20E3298713767938BD05B35 /* NstApiCheats.hpp */, - B9A1298C2392965F68B9AE60DBE0B247 /* NstApiConfig.hpp */, - 8C20A4261AAB5D4731891122D5059BB1 /* NstApiDipSwitches.hpp */, - 06F9614E94FCE209A55C8C7298C28ACF /* NstApiEmulator.hpp */, - BF8FF38768C4E80A0EA1F613D38541E5 /* NstApiFds.hpp */, - 9EF3AB85099AAD5C4A46D49D93BB46D8 /* NstApiInput.hpp */, - D600C41025FD98A039F6974280BC9059 /* NstApiMachine.hpp */, - 94C8A461D47DE4DDB1AEE7830B56ADAC /* NstApiMovie.hpp */, - DBE05472ED5AAEBB0CA13B43E5496F2F /* NstApiNsf.hpp */, - 6D3563437D8960176CEF09AD9B1291B0 /* NstApiRewinder.hpp */, - 447F33D4AC9DCC18BA8E7C821EB936A8 /* NstApiSound.hpp */, - 2E2407FBC4681D02CEDB01BEEC0AC171 /* NstApiTapeRecorder.hpp */, - 1227B98A9F28F7732433A1CA68F8F875 /* NstApiUser.hpp */, - C7561F25DF5A13A37A67CFD89590E68A /* NstApiVideo.hpp */, + 7154C2E8486E648D39AD98A5A92A3FB9 /* mupen64plus-rsp-hle */, ); - name = api; - path = api; + name = Mupen64Plus; + path = Mupen64Plus; sourceTree = ""; }; - DB8A6C1671C08CF27B21D36E389F1DE9 /* Core Data */ = { + DBA0DEF976C37D70CB5C6220003AA58B /* gregbook */ = { isa = PBXGroup; children = ( - C09575AF57FFD4D7C7A04FC133E63156 /* MergePolicy.swift */, - 0FFF2C8BA989A2993AF7181B8C71DCEA /* RecordController.swift */, + BD84F06A10C7F36232CEC327446C64C9 /* readpng.h */, + 0CD0F23869E4370E465AE1C8597D8843 /* readpng2.h */, + D6A4C76DED9C21C388F39532BDFE1609 /* writepng.h */, ); - name = "Core Data"; - path = "Harmony/Core Data"; + name = gregbook; + path = gregbook; sourceTree = ""; }; DBCCD21D40533FA56554588F209F10D5 /* GoogleToolboxForMac */ = { @@ -7722,204 +7942,206 @@ path = GoogleToolboxForMac; sourceTree = ""; }; - DC3020A2448B8055BB5E80F16F525BE6 /* Video */ = { + DC206325D48CA7D2F7AA08D057B3E7A3 /* Support Files */ = { isa = PBXGroup; children = ( - C7AB9F8A6F41A6BF238E1816BF6ADAE9 /* BitmapProcessor.swift */, - 0E80277EFECC528835574F12FD313326 /* OpenGLESProcessor.swift */, - DB6C6046F5260896D182C1590701A4C2 /* VideoFormat.swift */, - 07BDCD6B6C9579E41B46804763B13582 /* VideoManager.swift */, + 50820F9A436F4E4AA63F4442C71C4DBC /* Harmony.modulemap */, + 0B25891B457EEC5EC2A639DA8DAE0EBE /* Harmony.xcconfig */, + 238AA279772C644CC943D63E37C7AA3A /* Harmony-dummy.m */, + DC240B06FEB31AD03CBC7B80148A3097 /* Harmony-prefix.pch */, + C84F53DDEC96ABDB4E99816C838005FD /* Harmony-umbrella.h */, ); - name = Video; - path = Video; + name = "Support Files"; + path = "../../Pods/Target Support Files/Harmony"; sourceTree = ""; }; - DCECEB869B40FCFDA86A7ED95CD7DF6C /* SNESDeltaCore */ = { + DD17A76DA46CC1E07FEFBDFF7D2504B6 /* libtests */ = { isa = PBXGroup; children = ( - CC07376AABD939BDEBA79D5F2CBA2522 /* Pod */, - CB4D937EB1CD8D9527E9DC1C2C3D8E87 /* Resources */, - 6F1AA42E253D4B3FE8E609EEB5631BBD /* snes9x */, - 255F9E88E31CB0CC2B35AAE7E87F8203 /* SNESDeltaCore */, - B0586A3F5DC5B637ADF9921EBB25472D /* Support Files */, + 16F999D1DA5FF8502A180736C3C54BFB /* pngstest-errors.h */, ); - name = SNESDeltaCore; - path = ../Cores/SNESDeltaCore; + name = libtests; + path = libtests; sourceTree = ""; }; - DD765E8C1F357163F0D20B44FC57054C /* Mupen64Plus */ = { + DDED638FFBBE24800262328FC7ABA5CC /* Bridge */ = { isa = PBXGroup; children = ( - E8722061C33778AE1F97FC49F3085673 /* GLideN64 */, - 42BA3372D0FA1F2A0881C0A15BB3C68B /* mupen64plus-core */, + 46CC56588A9249D29F68E981CE6C8B54 /* SNESEmulatorBridge.h */, + E216C0C45BCA364953D3D8851490070E /* SNESEmulatorBridge.mm */, ); - name = Mupen64Plus; - path = Mupen64Plus; + name = Bridge; + path = Bridge; sourceTree = ""; }; - DE17DF46EF74082FE7270E1C29484DB8 /* src */ = { + DF82D083D0075A0FFD010F0E3ABFAD15 /* Types */ = { isa = PBXGroup; children = ( - 82FBA2B67465A45C1675F8BEE3D6FAFB /* SFML */, + 99F0DA991B4249223E7D8A9CA0767BA2 /* MelonDSTypes.h */, + 11142D8FFFBE27CBCDA599BAC4229CE3 /* MelonDSTypes.m */, ); - name = src; - path = src; + name = Types; + path = Types; sourceTree = ""; }; - DE7D2CCFEE7555D473C60E1D9F28C57B /* dd */ = { + DFA97086CB697A98BAFF963B09F9CF6C /* dd */ = { isa = PBXGroup; children = ( - D8D7F2571154753B11327E7B624A795A /* dd_controller.c */, - B83F5B2E3006BD12D60CA06E677E7EE6 /* dd_controller.h */, + E5C78C628E0A4C0BA6411600CC689510 /* dd_controller.c */, + FA40AAF8BCF7B04694A0037FB3760458 /* dd_controller.h */, ); name = dd; path = dd; sourceTree = ""; }; - DF3B22F60265FDA8A0BDFE0524F0C13D /* src */ = { + DFC6BB9FEC353F31B6139E8A5658E24D /* MelonDSDeltaCore */ = { isa = PBXGroup; children = ( - 4903CFCCF14E60B4FC1C1EFCB86ECE55 /* alist.c */, - 1FA26C4FB0D6E27B0C9E9607D02D8E25 /* alist.h */, - 215F41B527253A671A97637E35BDC2EA /* alist_audio.c */, - 51F387B6A186310DE8AB25011DB2D480 /* alist_naudio.c */, - 5844DE373A9FE031984BEA797C1C7A39 /* alist_nead.c */, - C88191C64D7E8CE0EE4B4033CCB6D0FA /* arithmetics.h */, - F7095B17BD490C5C3C946BF5CE387A22 /* audio.c */, - 00E1CE975F5DF9EF52286A091470CE4D /* audio.h */, - A999E4DD49AD8CA4E0FB85985E53D97E /* cicx105.c */, - CD4250629F8C1D5652E021E52A3F196C /* common.h */, - 74F470E8DD823ED4FE7D10FB84B4ABD8 /* hle.c */, - 92BF79F8CEE5F58CD7F29CAF0AED592D /* hle.h */, - 6E7D780A13B2915F46EF4226090CBCC5 /* hle_external.h */, - 58B5E7D372F81123297C2A52505FD923 /* hle_internal.h */, - A9749B925BF718E50CBCEE6B82F21925 /* jpeg.c */, - 6A36744D626ECD3743CA4F297A98EA19 /* memory.c */, - D79C4564600E16C5D3087362DA9FB91E /* mp3.c */, - B6DF6A81ED3CF21DF9B51DF914D08077 /* musyx.c */, - 67464BB3B17BCC0986DEB6DD52C604A5 /* osal_dynamiclib.h */, - 2A7484DF86BAC6712F444A8FFBF23277 /* re2.c */, - D1AF2289C82F924BD674E01C203E7B6F /* ucodes.h */, + BB701508E5E2F9D08F436931CD05696C /* MelonDS.swift */, + 6FB5B955EED3BCE73AA95E7D1F60EF62 /* MelonDSDeltaCore.h */, + E46533C0D3A91B58191EC48E3C75833E /* Bridge */, + DF82D083D0075A0FFD010F0E3ABFAD15 /* Types */, + ); + name = MelonDSDeltaCore; + path = MelonDSDeltaCore; + sourceTree = ""; + }; + E060CDEFDAA623301C96D049520E1924 /* Controller */ = { + isa = PBXGroup; + children = ( + C2F9A0594B477E44DA3CB74E54DD67ED /* ButtonsInputView.swift */, + 1FBFEDA648CA302663BC0A53CD4C4444 /* ControllerDebugView.swift */, + F3104A99F1E2E5DCD9FCE463C1BCD842 /* ControllerInputView.swift */, + 8C5CBC5126812FD2065CDBAEA94BF976 /* ControllerView.swift */, + DD855AE6412C0DD63FC4D79544883DB2 /* ImmediatePanGestureRecognizer.swift */, + B1AAAF56DFDC2516C9F0F82DEA17511B /* ThumbstickInputView.swift */, + 4D5205D694ADD50234921E3DEB5D957D /* TouchInputView.swift */, + ); + name = Controller; + path = Controller; + sourceTree = ""; + }; + E129D4A58B555A31163124A19F018F71 /* subprojects */ = { + isa = PBXGroup; + children = ( + 0559896741A18CCAC53724CBD5BC9DC7 /* xxhash */, + ); + name = subprojects; + path = subprojects; + sourceTree = ""; + }; + E2C184A7035D0D9FC418CF9E7508CAAC /* win32 */ = { + isa = PBXGroup; + children = ( + 0EFD819549B79EF6F6533D7333213048 /* Dialogs.h */, + ); + name = win32; + path = win32; + sourceTree = ""; + }; + E41307A3A7EBFB46175F52CD879A6226 /* oglft */ = { + isa = PBXGroup; + children = ( + 2511FA9F98FE3FCC75E29A21D78C7943 /* OGLFT.h */, + ); + name = oglft; + path = oglft; + sourceTree = ""; + }; + E46533C0D3A91B58191EC48E3C75833E /* Bridge */ = { + isa = PBXGroup; + children = ( + 9F014A83DEF4F355ED7E7CBACE0FBE07 /* MelonDSEmulatorBridge.h */, + 9D3F865CEA5A8DDF0E5A48DF76EFC326 /* MelonDSEmulatorBridge.mm */, + ); + name = Bridge; + path = Bridge; + sourceTree = ""; + }; + E4C4AE9A4FF85CB9F7A83551B58C1A0E /* new_dynarec */ = { + isa = PBXGroup; + children = ( + 62CF8182659AC61B46F3EE64308E7BA7 /* new_dynarec.h */, + 5536845474246C9BD29434210C7EC760 /* arm */, + 814EB8A751BF913CD6571515C4FE0191 /* arm64 */, + 896A0D6AF4398BF070903E1D92E6EBBD /* x64 */, + 0451DA13B96F8C373342139605C4C0C2 /* x86 */, + ); + name = new_dynarec; + path = new_dynarec; + sourceTree = ""; + }; + E50F13A090AF63EB61363DCB9120EE7D /* md5 */ = { + isa = PBXGroup; + children = ( + 325E8BBC08F3C0C7CC6EE4B27346E532 /* md5.h */, + ); + name = md5; + path = md5; + sourceTree = ""; + }; + E6C64748BC5815EB74091BE83763E640 /* src */ = { + isa = PBXGroup; + children = ( + A2D4C88AAB9529011A0BC78A5F8FB349 /* bitmap_font.h */, + 8DC71414A1C59E302D19045860C86F3D /* counterdef.h */, + D29AAFD2CFE6FB0F7D7946F037550722 /* cpu.h */, + BBF6A7EF37190036ACC153A560EC7279 /* initstate.h */, + C3FFB989E3545149939D3E8C7F5F16B1 /* insertion_sort.h */, + FEE4DFCA2E800BD0E79D7425672042CC /* interrupter.h */, + 0E0A94CCCC0D97F634E74FA3103B29F1 /* interruptrequester.h */, + 33B331BB819B9C6CB76839045D4EF06B /* memory.h */, + 5E82D9E0415F24E9559D27759ACC7218 /* minkeeper.h */, + DB20DDFBF1AF645CE61ADF09F5974137 /* osd_element.h */, + 07352595BD173B37D1FBCAC265DC1C57 /* savestate.h */, + CC08FCCCC5D573865D7ADF9FB0838E1D /* sound.h */, + A56369DCFB6DD06F4761C0C4900B2401 /* state_osd_elements.h */, + DDAB24C8DF7DA2BB3D67FC4A2C669BEF /* statesaver.h */, + 6D5641AF5A10D2A2EBB4AADA120BAC12 /* tima.h */, + 42B13B5F43FDB8941F1473AB0E24A54D /* video.h */, ); name = src; path = src; sourceTree = ""; }; - E1AD09726E2CA3D30FD42BB13C9E60F8 /* src */ = { + E7B2E4DD5F27C831FA39A6730358A66F /* MelonDSDeltaCore */ = { isa = PBXGroup; children = ( - A4BC2C14AAA86B73D6B28FED8975C3F4 /* bitmap_font.h */, - 8BA5B2EC8B8F0A5D59CC97B40A380CA8 /* counterdef.h */, - A0FED83361E402BB0547DB052277ECCD /* cpu.h */, - 173C3BCDE823B84D23477806EC2CF1EB /* initstate.h */, - 26DDDA2E6D5D939969B8FDD448F57499 /* insertion_sort.h */, - 92D57715B2185B75E5396245FFBAE48E /* interrupter.h */, - 0017998E6980B0ABDB2A24D94074549C /* interruptrequester.h */, - 49A05F402834F289E25A1D2D8D31ADA5 /* memory.h */, - BDBC8749B7239FFE93E87463C75D3321 /* minkeeper.h */, - 00DDAF44FCEF1DAE01680CB1290E8DA6 /* osd_element.h */, - D1BA7EA1AD9736CD11003C39C000C9C9 /* savestate.h */, - 7B55E01B937143BE70ADC92C259EA847 /* sound.h */, - 57934C5612E8312E8D46FB26A52FE946 /* state_osd_elements.h */, - 8BD3541718061A90921DC7BAA43765B2 /* statesaver.h */, - 60925EDCF9318CAB1FA3938859111AE0 /* tima.h */, - 0ED12F95712B43803C58FF2D53075392 /* video.h */, + 0E99AAB0073C58E2C37B88FD78102676 /* melonDS */, + DFC6BB9FEC353F31B6139E8A5658E24D /* MelonDSDeltaCore */, + 58FF6D9DB0D1B03CB4B69021F6DAFDCC /* Pod */, + AED09EB0CF0D0E4BEE6843F3C010806E /* Resources */, + A47C858A468F63C07F24FD81A9A449A9 /* Support Files */, ); - name = src; - path = src; + name = MelonDSDeltaCore; + path = ../Cores/MelonDSDeltaCore; sourceTree = ""; }; - E2620C3C1877C7DED9743652F9692A17 /* Support Files */ = { + E86AD79800B93FE2A28E4CEA4F227677 /* vi */ = { isa = PBXGroup; children = ( - 1CA6BD5A93F759A947F93E294905013E /* DeltaCore.modulemap */, - 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */, - B270BDDBFC6E00BB3C7D20C485D51558 /* DeltaCore-dummy.m */, - 624F9323E74C2F61AB1277993C89EBD7 /* DeltaCore-prefix.pch */, - D8EB194138EAB03A1BAF77804381385D /* DeltaCore-umbrella.h */, - BB995585BB8CD0FC8EA0EC91CA17BBC4 /* ResourceBundle-DeltaCore-DeltaCore-Info.plist */, + 2E5C87C85D80CEFECDBD846C5507C244 /* vi_controller.h */, ); - name = "Support Files"; - path = "../../Pods/Target Support Files/DeltaCore"; + name = vi; + path = vi; sourceTree = ""; }; - E31275459F62FCFE7326250B9826CA9D /* pngminim */ = { + E8DC4BF07D5A34F18CC5352183BAF19F /* Pod */ = { isa = PBXGroup; children = ( - 13F4C791B31AB8ED0AEC8F876A024121 /* decoder */, - EFC7DDE06F914B061EFA081392745B7A /* encoder */, - 6A9FECAC90D84DC9C2E44FC9199B87EB /* preader */, - ); - name = pngminim; - path = pngminim; - sourceTree = ""; - }; - E4AE1D2B784C4526230863F51855AD4D /* Pod */ = { - isa = PBXGroup; - children = ( - 517688C527284043BBF5D64716B79E5E /* Roxas.podspec */, - 36CB3E3F01D050A62BBD3A2DB25F6116 /* Roxas-Prefix.pch */, + E816325429AF71A41869B7E6AAAFDF90 /* N64DeltaCore.podspec */, ); name = Pod; sourceTree = ""; }; - E5AA6D816EF0CBE0828B2F5F2B9F3759 /* N64DeltaCore */ = { + E91F2FE0BFFBCB0483DA2E3F9D70D2B3 /* Rendering */ = { isa = PBXGroup; children = ( - AAF3FD6676FB908497318168CA250E29 /* N64.swift */, - 1EA3DF2BEE5BA3A560AB2D24010A1910 /* N64DeltaCore.h */, - BEA4783459FBDB405F91C34373955400 /* Bridge */, - 0E57A818B9F9286B7451FBD334254A8E /* Types */, + 84CB3FC8544B28E9203C07151D44AC01 /* AudioRendering.swift */, + 961ACD2164700D5FD67F6014EB6E2CCF /* VideoRendering.swift */, ); - name = N64DeltaCore; - path = N64DeltaCore; - sourceTree = ""; - }; - E8722061C33778AE1F97FC49F3085673 /* GLideN64 */ = { - isa = PBXGroup; - children = ( - F8BC2DCA1F1031108D65E5DDE5D31B95 /* ini */, - ); - name = GLideN64; - path = GLideN64; - sourceTree = ""; - }; - E878750482CECD30C0B696DEC99BC4F5 /* services */ = { - isa = PBXGroup; - children = ( - D0CE7BCBDFB3A9A4EBEA78CB70BFFB3E /* svbdf.h */, - B2C7AE6607FC679EA4767E48ADD80B0C /* svcid.h */, - 77E4E93A1AA6AEE3A862BF83964C18B4 /* svgldict.h */, - D64D70EE0AECCCED6FF32F99E14D58BF /* svgxval.h */, - BB711F8EFE31B0F681D314A46FEA8398 /* svkern.h */, - 22E35E02382F4B1E5D0995608B8BCCB7 /* svmm.h */, - F97F1DFA4F57F5E203007254CF9BE0A9 /* svotval.h */, - 339EF64DD9F7A5E35B3CA9B6E200C168 /* svpfr.h */, - 89A7A6CB88FF9F00BD89DB332B5BDA1D /* svpostnm.h */, - F33297D97FD3A5157D3125AA0D30D1CC /* svprop.h */, - 6871DA21F2195F33706882F64D12E1D8 /* svpscmap.h */, - 4C269A9412FC718CE8C8E996630F5873 /* svpsinfo.h */, - 3DA02F00ADA726E3CE0F82AA955FFB71 /* svsfnt.h */, - 0CD4D6B9E5A8C737F812D9FE05776374 /* svttcmap.h */, - 9D07B62C2930860C9FC0DB9D497C72D7 /* svtteng.h */, - 440D7ACB57B622DFF74C66B788D3B238 /* svttglyf.h */, - BAB2153E188978ED7096999E36B0E1D7 /* svwinfnt.h */, - 25FCB0ABC4939495F4D8023884606D3C /* svxf86nm.h */, - ); - name = services; - path = services; - sourceTree = ""; - }; - E9008238CB64036A4BE0ADA65490F1AA /* DepthBufferRender */ = { - isa = PBXGroup; - children = ( - 5B549F21788F17AE386F9C9F83BACC06 /* ClipPolygon.cpp */, - 9524C7CAEA9B69DE45AEF5526465F6C0 /* ClipPolygon.h */, - 38670547E681F154E5A9A09F39390D14 /* DepthBufferRender.cpp */, - A1817B7D536070DB0693E3627DEE3C0E /* DepthBufferRender.h */, - ); - name = DepthBufferRender; - path = DepthBufferRender; + name = Rendering; + path = Rendering; sourceTree = ""; }; EA6454E318650211EB884DFD5405079F /* Frameworks */ = { @@ -7962,58 +8184,6 @@ name = standard; sourceTree = ""; }; - EBB17EA90FE6634062678776E354459E /* x86 */ = { - isa = PBXGroup; - children = ( - FF74B4BEF4D07BBAE9D9AEC6720AA7C7 /* assemble.h */, - D587573F39534790FBF56E7EEC8232B0 /* assemble_struct.h */, - BD1D6B58318EF86DA5951706280EB3DC /* interpret.h */, - B98E48490885483AD070534BE31BBED4 /* regcache.h */, - ); - name = x86; - path = x86; - sourceTree = ""; - }; - EC2170727E87969CEE48058554CEE957 /* gba */ = { - isa = PBXGroup; - children = ( - F5CBD60FC0FF5C423C847C962880F76C /* agbprint.h */, - A1E8AC977ABBC00002A2FD5C18CF395A /* armdis.h */, - 3940CE8EE2A18C0E5B6BE8394499EEB9 /* bios.h */, - 37EAE6D3D608C9A5504D237AEFF46B37 /* BreakpointStructures.h */, - CA2F2C7F1257D8E558E768DAD7B2D74B /* Cheats.h */, - 0AEA4696FF630389674F9A479B343F8E /* CheatSearch.h */, - 63BABDED98CDB1DC811FC1832968CE5D /* EEprom.h */, - 86059796C87D909C7319742A6AD185D9 /* elf.h */, - BE88F0656454261D53E5BE768654A774 /* ereader.h */, - 6A8950AA257A8E57DB3C9539DBCCC980 /* Flash.h */, - 325F0C3218801422F4A41352BE209C49 /* GBA.h */, - C48EADCAA3A0151BF5347F5EE447CBD1 /* GBAcpu.h */, - B2A2C9E40FB41F12D2820E3BC07998FC /* gbafilter.h */, - F0220951E1C5853626F63AA3472A9F71 /* GBAGfx.h */, - C32EC4E1163CB30B4250829CC8FCC1BA /* GBAinline.h */, - 64F5E353543E813AE8499F0415496364 /* GBALink.h */, - 27CF12F82D7FC895B714C5F31C07E905 /* GBASockClient.h */, - 1C829F5E801FB46F0C66DA77EB247349 /* Globals.h */, - B0720305184D6498023330012901935C /* remote.h */, - 838D80A959C5C766EFB33104D72194AF /* RTC.h */, - 587FE8C376C86B170BA2C85960B06B3F /* Sound.h */, - A1F4F491B0BC25A23355012F46D89DAF /* Sram.h */, - ); - name = gba; - path = gba; - sourceTree = ""; - }; - ED91CE637F37121B420FEF20D0FBB875 /* gambatte */ = { - isa = PBXGroup; - children = ( - CC4735CB3C09953ECC85CB3CC2A74DCB /* common */, - C3EF978A151AE28C04A2AE18B57B9AA8 /* libgambatte */, - ); - name = gambatte; - path = gambatte; - sourceTree = ""; - }; EDC59E6E374D3BBB0CB71D83DFF7341C /* Frameworks */ = { isa = PBXGroup; children = ( @@ -8022,13 +8192,13 @@ name = Frameworks; sourceTree = ""; }; - EFC7DDE06F914B061EFA081392745B7A /* encoder */ = { + EEFD942E572DB2BDACD223532A635ED7 /* Resources */ = { isa = PBXGroup; children = ( - 7A65C5E1DB73B52B64C8509098509B77 /* pngusr.h */, + 4B163E0E120BFA148B9934E2E1C970CB /* Mupen64Plus */, + 6DE678F7BFF7FAD287319F59C6B676C7 /* N64DeltaCore */, ); - name = encoder; - path = encoder; + name = Resources; sourceTree = ""; }; EFF9703FCB71789ACC30CF54E93AFA5B /* SwiftyDropbox */ = { @@ -8085,46 +8255,189 @@ path = SwiftyDropbox; sourceTree = ""; }; - F250106D2FB2610EB9843ED15080AA12 /* Types */ = { + F03E8D4DEAFCAD4641EF428DA4131F23 /* pif */ = { isa = PBXGroup; children = ( - F571DFD58990674E824384F544CF9CD1 /* SNESTypes.h */, - 087E76CC675F0056172F689E3EB38F3D /* SNESTypes.m */, + 8D2AF58B1BA6D02D19EAE80F80E4CA9D /* bootrom_hle.h */, + 34B01107A2C96AA02DBB861B4B38041C /* cic.h */, + 112637F718E98C3499172684DAB993A0 /* n64_cic_nus_6105.h */, + AD18B91FAC4B2CA8C394D0D1EF24808E /* pif.h */, ); - name = Types; - path = Types; + name = pif; + path = pif; sourceTree = ""; }; - F417425CB2FA1D05BAD4C5F1DF071FED /* Core Data */ = { + F208F16F6DEC98566E7A56F835A232E2 /* N64DeltaCore-Video */ = { isa = PBXGroup; children = ( - 04CC6EBCEC394DA0E803BBA27F7D98C0 /* LocalRecord.swift */, - 99D799A06F3A84C7D777C9A3BD9BE511 /* ManagedAccount.swift */, - 10788548DAFD98FFF15969586412798C /* ManagedRecord.swift */, - 988D4B1A89D40408B7ABF72F05B65950 /* RecordRepresentation.swift */, - BE12392094B01C972B9C0018E1869E29 /* RemoteFile.swift */, - 6F994DCAAF05A0E4ADF9D352FAB0A16E /* RemoteRecord.swift */, + C9579AB2737FD12BDDCDEDB9799737C0 /* plugin_delta.cpp */, + F9AC4EDED962C7496D2538B9A6128954 /* TxDbg_ios.mm */, ); - name = "Core Data"; - path = "Core Data"; + name = "N64DeltaCore-Video"; + path = "N64DeltaCore-Video"; sourceTree = ""; }; - F4403F4F7271CB18FFDA1C94D9E6D79B /* Resources */ = { + F2ACBCF1A239DDB0C05D074FE4F77CFC /* libDeSmuME */ = { isa = PBXGroup; children = ( - 0011F0531529E83F54AAEB2C8A2969F1 /* Standard.deltamapping */, - 085C87B06F454385CDE8CA11CD18D9EF /* Controller Skin */, + 0D27F1218FFC3EC9D27CAC71BCFD4925 /* pcap.h */, ); - name = Resources; + name = libDeSmuME; + path = libDeSmuME; sourceTree = ""; }; - F5390EEB6BEF003CADB12460CB4B2A7A /* rdram */ = { + F2CEDE3045C872653E6D887DD4398A2C /* DeltaCore */ = { isa = PBXGroup; children = ( - 2545337131DCB550937E1BA985A7CFB7 /* rdram.h */, + 9BBE274343E5120686BB2D52C486B98F /* Delta.swift */, + FA3CDDB5072744264D4A7519AE6D6A63 /* DeltaCore.h */, + ABF2E1030F06335CAB068D719C129216 /* DeltaTypes.h */, + 35F02B0ECCDFC2E4E491C095B018680E /* DeltaTypes.m */, + 1B00D1A6F79AF84381503C8C22D20EA3 /* Cores */, + A3EB517BD0CF9FC2F12C37737984F1A9 /* Emulator Core */, + 86652B53F0250D8EC4D8F5C948869419 /* Extensions */, + 70CDD20DF7778DA641A8712E3B9525FF /* Filters */, + AA0E7F6134B7DC73DA4EECDD21A5700B /* Game Controllers */, + 1DCE735EC678094DC6A2D328A8329692 /* Model */, + 9546AC06F796FC02067E2270ABD9E978 /* Pod */, + 979BB8BD151656956ED74EC814A59603 /* Protocols */, + 1CE4961F35CE8C86E7101C8A5C6BA5E9 /* Resources */, + 50DE83824292D486BF7980AE0DF0AE53 /* Support Files */, + 3C7EB2136671F3B59680E97AAC3BD696 /* Types */, + 73AC65775484D790A4513276554D93B0 /* UI */, ); - name = rdram; - path = rdram; + name = DeltaCore; + path = ../Cores/DeltaCore; + sourceTree = ""; + }; + F35021E84CD67F4A5269C60DA461D37B /* source */ = { + isa = PBXGroup; + children = ( + 61B139DDB65B01755197392AECC177E4 /* core */, + ); + name = source; + path = source; + sourceTree = ""; + }; + F3FAB28338DAB442AA642FA077588C12 /* input */ = { + isa = PBXGroup; + children = ( + 213E27CCA1F2F1BE726697432009E2C9 /* NstInpAdapter.hpp */, + BBE04DD449B8ADC33C274C03D42334D4 /* NstInpBandaiHyperShot.hpp */, + 8566DFE3C9D864188FAC41FB8316C1B0 /* NstInpBarcodeWorld.hpp */, + 8A65C030A8CB605B689A888D7DED867A /* NstInpCrazyClimber.hpp */, + BB9F74C7D96B11B6D1DA5E2E0B149EC4 /* NstInpDevice.hpp */, + 4ACD840C16D41B8494693E00BF6094C9 /* NstInpDoremikkoKeyboard.hpp */, + B5A0DE104CFED381B5A6268A32DA5C06 /* NstInpExcitingBoxing.hpp */, + EFB09061F5EC38F78019E5DE2971B3BB /* NstInpFamilyKeyboard.hpp */, + 4A30748039EF71CC3D3BC9D7293442A7 /* NstInpFamilyTrainer.hpp */, + 633BFEBA4D6E889B3BD3E8EC2A8D9AAF /* NstInpHoriTrack.hpp */, + 93BDAC11CA2A4DE08DB5A3ACAFE90787 /* NstInpKonamiHyperShot.hpp */, + 61036065030A2D0CAFA57E52B4AEBBBB /* NstInpMahjong.hpp */, + 4E1E1F9090B631F29A327D322AFF5B4E /* NstInpMouse.hpp */, + 43D27CBEDCDDFA5D7CB760B22CEA6D23 /* NstInpOekaKidsTablet.hpp */, + C05E3B2663EB9FC3F88BC0AF00C603AC /* NstInpPachinko.hpp */, + 23D60DF4C8C979E59877EE0BC1BA7C94 /* NstInpPad.hpp */, + CCA63F92FA1AA67CA403E2E475DF92B3 /* NstInpPaddle.hpp */, + C6D50BD15001580ABEF75FEE0D3BF80F /* NstInpPartyTap.hpp */, + D3FF2CD92B642B01EE1206B628894B5C /* NstInpPokkunMoguraa.hpp */, + 820605CE2F2AA8CECEF751B81CDC1F0B /* NstInpPowerGlove.hpp */, + C24FF4FB306EA08CFD23D4A8DD8B6C7F /* NstInpPowerPad.hpp */, + E53076134FC473CEAF27FC2CFCDC3C7F /* NstInpRob.hpp */, + D41AF32FC52E17D1A0A5BA99D695DD30 /* NstInpSuborKeyboard.hpp */, + 610FBE2B211DCC4D12F3F435021489B9 /* NstInpTopRider.hpp */, + A4A18683962DB3D821CC4DCBB8A6E9B9 /* NstInpTurboFile.hpp */, + 95DAC95CF90CC293BB4C45375EC16E36 /* NstInpZapper.hpp */, + ); + name = input; + path = input; + sourceTree = ""; + }; + F51CAE289BD309394F2FE1C2AB090189 /* include */ = { + isa = PBXGroup; + children = ( + F4BFC00E618DE0EF34A6FA01F88AA209 /* freetype.h */, + 2E088DA0C031536321CA95D00470F534 /* ft2build.h */, + 97A529B5224544C993C7547C6A313CCC /* ftadvanc.h */, + 607EE7A62CEA324021137035A39115DC /* ftautoh.h */, + 85237BE80E426B918024FFAC9251A50C /* ftbbox.h */, + 601F63C6825CC3B6550C9C4169033152 /* ftbdf.h */, + E94F624FEBCECA3D447A42E223613A20 /* ftbitmap.h */, + 8FACC0B21FDAA0F253D9BB7A5062C4B0 /* ftbzip2.h */, + 24D32A452E67E305E30D5F18EE62B91D /* ftcache.h */, + FA571B46E66CC61957A2EC9659B40B5F /* ftcffdrv.h */, + 9378D679A1407D0B1973322B7BC01CC6 /* ftchapters.h */, + D6FF04411B9686AB60189647F155133B /* ftcid.h */, + 35E65C6009E97AD1F054B35476E2887A /* fterrdef.h */, + 71CB328D9397310D6DF21B68E80E7672 /* fterrors.h */, + 886A3E189B577FD6E4F71CFF3F0C163C /* ftgasp.h */, + 5FE228B9F6593F99674B619FAD43A040 /* ftglyph.h */, + 34D7A85BF8A1C0DC2EE0B2F071F97445 /* ftgxval.h */, + 22528395152B5ECC856B25BADDACB3F9 /* ftgzip.h */, + 0DD7EE7BA4F30F6178A84660D851DE0B /* ftimage.h */, + 0F3622A7449225751220AF6FE10DD230 /* ftincrem.h */, + E963BB1D802954605DE54BEAEAA046C0 /* ftlcdfil.h */, + 4FF5B91527E584477B10719112BEA1B6 /* ftlist.h */, + 157434C4FA16895B0C6EBC0D02FAECF0 /* ftlzw.h */, + 84758A5917B6274B633D5B6A3A3E91F9 /* ftmac.h */, + 94CD261951849F1D22579127673F3769 /* ftmm.h */, + 64A23D7BFCABFEC33689D884FE6CAB2A /* ftmodapi.h */, + B1A991CECAB9DD46D6515EF84919F6D0 /* ftmoderr.h */, + 1EFE9AE79EBD67A282DE349ECDBA9D52 /* ftotval.h */, + 424AB45294CF56320B355DCE7A0F8E81 /* ftoutln.h */, + 32C47A891929053596B4282BC5DDB0A7 /* ftpfr.h */, + 6E612D889BCF639940A7B442ED45DC84 /* ftrender.h */, + A5D1F6229274C89A198E70560F58BE3C /* ftsizes.h */, + 423425F5988743735EC12578B4A52F5F /* ftsnames.h */, + 89E0ED605D7C2BAE8463AEB4ADEDF371 /* ftstroke.h */, + DDE800F01854521394EAADE8A06F1AA1 /* ftsynth.h */, + 1BBFA95BE33AC04B65DD7AF6C54B92DD /* ftsystem.h */, + F5AFC909F4746C3FA127FCDAAC1D471C /* fttrigon.h */, + 5B7D93006047AEA1B2086CF5FEC0FAEC /* ftttdrv.h */, + 57067E8C28EB51D8DC120B70B3A966CF /* fttypes.h */, + 11D8E3490D52F64122D1E83DF8178D41 /* ftwinfnt.h */, + 1168E68918E5BF84E08E11C7B371ABED /* ftxf86.h */, + 030B53DF4264E1E4E75E737FC9B5B696 /* t1tables.h */, + F8E2DF4FE7FA12D11F9519C050CBAE82 /* ttnameid.h */, + E332D1A2E036E2DF42439D6ABAD4A55C /* tttables.h */, + FBB09720E5E561800A0A26EC646F3678 /* tttags.h */, + E1210995B1881C4C2239A38E329170E0 /* ttunpat.h */, + 666CF51E00E65540C78ED2BCEDCB4DDA /* config */, + 6A6E41D3669E6FD1B2E14AE70E799A53 /* internal */, + ); + name = include; + path = include; + sourceTree = ""; + }; + F53638C24ACA94901DB9D57442F188F0 /* Bridge */ = { + isa = PBXGroup; + children = ( + EFFE70745486E1FF21AEAF435A71FBB3 /* DSEmulatorBridge.mm */, + ); + name = Bridge; + path = Bridge; + sourceTree = ""; + }; + F557A2C8F49E28F3458FAC7554BDD29F /* include */ = { + isa = PBXGroup; + children = ( + 4DCDABB34A5BDA633CA1B6972D7D76E1 /* gambatte.h */, + B307C39B5BCD16F9563103326BB8C58A /* gbint.h */, + 4C5BAA938FFA460E1B80ECB271C8B9D9 /* inputgetter.h */, + B29A8EB5AC9C464A3E9D1DE0A0715E97 /* loadres.h */, + 7550F86AC04930B4F25BF5030BE49B93 /* pakinfo.h */, + ); + name = include; + path = include; + sourceTree = ""; + }; + F58085643FF3A73EC90BF4F105C971CB /* desmume */ = { + isa = PBXGroup; + children = ( + BEB87D5D9797CEC129F550AE00BEA955 /* desmume */, + ); + name = desmume; + path = desmume; sourceTree = ""; }; F6A9098AC3B032DB857E0C78F0204F56 /* Core */ = { @@ -8142,71 +8455,27 @@ name = Core; sourceTree = ""; }; - F8BC2DCA1F1031108D65E5DDE5D31B95 /* ini */ = { + F7846C993A87BD62DE267F5EF2FC2868 /* Support Files */ = { isa = PBXGroup; children = ( - 20E6DC27E3CD5270C16AC4F9F2E0D3B5 /* GLideN64.ini */, - 23AFAE86E4F0EDD062DB46895DAF5251 /* GLideN64.custom.ini */, + 4092859B09CAEEEE0D42CB4F4C93A062 /* GBCDeltaCore.modulemap */, + 6D14F298DDA814B5FF6C73CC765C8186 /* GBCDeltaCore.xcconfig */, + C274755E3C4177DD8B90B0B96F055CDE /* GBCDeltaCore-dummy.m */, + B3C33417B33F751208C5BF623D85A06D /* GBCDeltaCore-prefix.pch */, + 0A823D93C54BF9183AB990B267E0FBF5 /* GBCDeltaCore-umbrella.h */, + BB0BAFB133BDEB7D65DF75481E4669DE /* ResourceBundle-GBCDeltaCore-GBCDeltaCore-Info.plist */, ); - name = ini; - path = ini; + name = "Support Files"; + path = "../../Pods/Target Support Files/GBCDeltaCore"; sourceTree = ""; }; - F8BFD89AC7030A2275F68E37537F7FBC /* sdl */ = { + F84AB436CF6B945442FE6EF3D05B73DA /* encoder */ = { isa = PBXGroup; children = ( - 1B69ECEA6865A9F1815D0B371F50D01E /* debugger.h */, - B7D405FFFFAD99E717267886418DECCE /* expr.cpp.h */, - 521E061C02DD904E7838383DE2E1B0CF /* exprNode.h */, - DBFD59116F5FC54AE4428271A6BB1CAA /* filters.h */, - 9BB52CE6A9BF6A1CFA75A61E1AFEDA7B /* getopt.h */, - 933F52FD6D2B1895EB6774DAEDF6A159 /* inputSDL.h */, - 2EC1909CF0C525687C49B17CBAC1003E /* text.h */, + 74AE18E946FD9E7EED304826119E6AE0 /* pngusr.h */, ); - name = sdl; - path = sdl; - sourceTree = ""; - }; - F8D98830EC41E3146B6BDD235AC0C269 /* GraphicBuffer */ = { - isa = PBXGroup; - children = ( - 3443718CF69897A14D49B9C400E80C50 /* GraphicBufferWrapper.h */, - CC7D68D1132C8D6ABCDC4CBDEA4D1DB5 /* PrivateApi */, - 67729C4B61A9E5087982AA63B6CE8345 /* PublicApi */, - ); - name = GraphicBuffer; - path = GraphicBuffer; - sourceTree = ""; - }; - F9061D0E4A60F9CAA6C2BAA0D3980F65 /* rdp */ = { - isa = PBXGroup; - children = ( - 7B2001812085959BA9C558864721110A /* fb.h */, - E5E0E7F22F5068FCBB7C8E4EE92F086F /* rdp_core.h */, - ); - name = rdp; - path = rdp; - sourceTree = ""; - }; - F91F7362204553708071F1921C34C1F1 /* Harmony-Dropbox */ = { - isa = PBXGroup; - children = ( - E644A28566DC640498573CF1E665C045 /* DropboxService.swift */, - 142B2CFFAF6692BC41348D5B5B30FDA1 /* DropboxService+Files.swift */, - 9140DC01C356F980A0A4E04F1CCC3636 /* DropboxService+Records.swift */, - FB9C709F559518962C652F5BBA13E865 /* DropboxService+Versions.swift */, - 3A48D7D6AC876F97FF54F36FA99BED65 /* Extensions */, - ); - name = "Harmony-Dropbox"; - sourceTree = ""; - }; - F92F2C5B0F87637AD604C89BF6D32190 /* freetype */ = { - isa = PBXGroup; - children = ( - 2C5DC4F17D3440F8CFAFB9138AE99311 /* include */, - ); - name = freetype; - path = freetype; + name = encoder; + path = encoder; sourceTree = ""; }; F9A6B2694D547CAC69F1722310556B77 /* Core */ = { @@ -8245,6 +8514,25 @@ name = Core; sourceTree = ""; }; + FA2FD0DE304F878673ABC90EA0A709F7 /* libui_sdl */ = { + isa = PBXGroup; + children = ( + B426B703A1D05906A76F9144E7FA0433 /* PlatformConfig.cpp */, + 92BC65E8B857820DDE5B77199E9852C4 /* PlatformConfig.h */, + ); + name = libui_sdl; + path = libui_sdl; + sourceTree = ""; + }; + FAA2C4FCD01669618E30C8D2C5B68BEF /* mupen64plus-core */ = { + isa = PBXGroup; + children = ( + E129D4A58B555A31163124A19F018F71 /* subprojects */, + ); + name = "mupen64plus-core"; + path = "mupen64plus-core"; + sourceTree = ""; + }; FACBD0B298A0ABD02B047E1D35541236 /* ZIPFoundation */ = { isa = PBXGroup; children = ( @@ -8261,43 +8549,117 @@ path = ZIPFoundation; sourceTree = ""; }; - FAE3180D34498BCD31E17216B8C80BFE /* source */ = { + FB473862404C143624849EAAD703AF4D /* GBCDeltaCore */ = { isa = PBXGroup; children = ( - D7195EC7FAC0A0F89F4AD142DB2823C5 /* core */, + 48CE2ACA6C2A3B34E052EB69D646F08D /* GBC.swift */, + 0D9E4AA51EA6166FE8A05D803D4DFCF2 /* GBCDeltaCore.h */, + 1440E41899A0C9C36C54538F903B01C9 /* Bridge */, + BF1C8A5FD149AA57A3ED92BF49143379 /* Model */, + 946600E193904C9DB5617CD40010FBF1 /* Types */, ); - name = source; - path = source; + name = GBCDeltaCore; + path = GBCDeltaCore; sourceTree = ""; }; - FB9B4CF7C92056F8465C3BC5744BEA23 /* gregbook */ = { + FBE3B4C3A36A4EB7113AD32FD439AAD5 /* paks */ = { isa = PBXGroup; children = ( - 04E947092A258CFB57EB84AFAB619A18 /* readpng.h */, - 205369CAD1E4D0EB34E3DAA176117F19 /* readpng2.h */, - 9C3466A9256511834DC5E817CC21AE91 /* writepng.h */, + 5C84A3CF371C057839A68C574D020120 /* biopak.c */, + 15E65EB68D56E7366BC886E0DF3F4369 /* biopak.h */, + A81D595F5493BB4BD6C6AED2B993C0B6 /* mempak.h */, + FACC5CB26B7294708491B46F0397D3DD /* rumblepak.h */, + 93D36FB1E125F6A30F7E99925C34CD64 /* transferpak.h */, ); - name = gregbook; - path = gregbook; + name = paks; + path = paks; sourceTree = ""; }; - FBC6B86C478D8F97A3E884A748B232F0 /* Resources */ = { + FC68D86C65D89C9B913CBA0D9BC6F35C /* inc */ = { isa = PBXGroup; children = ( - 5A95E2EE00E8BE996B0FFEBE598A34B7 /* Harmony.xcdatamodeld */, + F764C420914578158ED027BC44B8591B /* callbacks.h */, + 7C7894842679F86AEA25BABD02717D75 /* debugger.h */, + D1975814ACD46FECD8CEDFCE0706FFF0 /* m64p_common.h */, + 422A7E950D9644BA89560B6CC1EA1194 /* m64p_config.h */, + C6E1F81ACE1C72D6F43ECBBE4EB03E7C /* m64p_debugger.h */, + 104AE23A6B9AE10B8672C3AC578993CA /* m64p_frontend.h */, + 0DB69BA777DA2D7FE96274A0B4EB4BB5 /* m64p_plugin.h */, + 155B6867D0BF5AD02F1B9394F4C2C8B9 /* m64p_types.h */, + E813BC0822BCCFFC9C89EBE5DAAD7F24 /* m64p_vidext.h */, + 2B78391A49DA84D556C32F50A37C1975 /* freetype */, + 31EB90F0FBC5F6103FA7CBBB49146EA4 /* GL */, ); - name = Resources; + name = inc; + path = inc; sourceTree = ""; }; - FE63F8A52B96C1DBCBB2424EBC2DA3B9 /* NESDeltaCore */ = { + FE205864B17A0FD3D1D5764C22BA82AF /* Protocols */ = { isa = PBXGroup; children = ( - 963237A63667F4DD10B901754C2F8AB2 /* NES.swift */, - DF48B54B85EDEF813D05CDF5146FBCF7 /* NESDeltaCore.h */, - D0D398A9A595E744E5D60CE80391D74A /* Bridge */, + 699F79983949D91377333D55142CEB7E /* RecordEntry.swift */, + 9EA61FA6FDF258367C544BA1A701348F /* Service.swift */, + 0F82BADF1B128B29E800481350228566 /* Syncable.swift */, ); - name = NESDeltaCore; - path = NESDeltaCore; + name = Protocols; + path = Harmony/Protocols; + sourceTree = ""; + }; + FED68DD8032AAB116053C7ECE64534FC /* snes9x */ = { + isa = PBXGroup; + children = ( + BFF9BE4B997D71AFFD82B6E8CBC06B97 /* 65c816.h */, + 985EAE9972B33CF9F927C6F483A4B357 /* bsx.h */, + C57031E8B6DD0EBAC4E35185FB93794C /* c4.h */, + 9C0F1623BBDB08363E8394AFBD38B87E /* cheats.h */, + 84A54517246C22B36712CBF7B02E3BED /* conffile.h */, + 5046B6E78EA1FD56CEB696532A667D56 /* controls.h */, + AB71B3A5AD08C7FD7FFA348B2DCEA559 /* cpuaddr.h */, + A96FC77ABA88D5836FF081611CD8F5E7 /* cpuexec.h */, + 49F7BDDB3C4AACF9488005884AA49676 /* cpumacro.h */, + 53E9A117D241958D71059796ACCE24C6 /* cpuops.h */, + 567D8A08CDBDC5DA06BFD1DC70DF4E1C /* crosshairs.h */, + 42052734B8AE23EA17D468F6CABDCEB7 /* debug.h */, + BF9EB574A8B1D8BC0B0BEDF16D62D5E3 /* display.h */, + 54ED6F866B4324DFC72570435F1EBD41 /* dma.h */, + F69FBA7A038D20EABCA39B35AB3B040D /* dsp.h */, + 2CCBFD78ABFCD2FE1C22DA2F349D8520 /* font.h */, + 6944EA8E8CC44D97F089057D5BBB67A6 /* fxemu.h */, + A69F666C61BC56F0C8F6DA00E957E5AE /* fxinst.h */, + 2B98706F4E48F8908BCD401802253AB6 /* getset.h */, + E0F150BFDEE45BE9AA4D0FDF4D91815E /* gfx.h */, + C2095BD846E0E2918CC6C26E739E147E /* language.h */, + 420E3047C00A76F43CBE5EDA68BCCEF1 /* logger.h */, + A72FCF0B1E569ACF2DA4B0AE86704717 /* memmap.h */, + 037E3F75B195945C62D341A82A439502 /* messages.h */, + 74B57B3A4300861FCBCF153277342957 /* missing.h */, + F3F7DDDE511D2FFCEBAC65BD6D2225FF /* movie.h */, + FC26AD726BEA827DE29E8369FB6303C6 /* msu1.h */, + 7C1BA9EB80CFC347F52BD3EC8F1856C4 /* netplay.h */, + 949E3958BCE1694E83B41187962E38E9 /* obc1.h */, + 9A4EF2A1B3DE6523F4B1132FD5CF4A75 /* pixform.h */, + 9213596C3CA0E060FC0617A361F98FCE /* port.h */, + 18BB33D23E1407CA689F462EB7799485 /* ppu.h */, + E12444C1B56F3412CF521B329577DC7D /* sa1.h */, + 9165270C982D16BF84A0C0FC722EF7F0 /* sar.h */, + C3E5F4DAB8AE8D24960DF1E5DB3F6DE5 /* screenshot.h */, + 3C927AD9499B9097EC14BFB7DAAB353A /* sdd1.h */, + E33F73E03E8DBCB9A561F9D7082C8EB3 /* sdd1emu.h */, + 6A4E086533D156DB8CB90B68CFB34011 /* seta.h */, + BDD0219A0927AFD5212597224C8C9A18 /* snapshot.h */, + D10EF252E11807FB1EF1F7E9A2AA502E /* snes9x.h */, + EAC8946446770DB79B1DE4821B8C753F /* spc7110.h */, + F10C56C1DD0DBC1297C6FA4D55986B04 /* spc7110dec.h */, + DFBFAD2A751915C945CC42E5F0F6D525 /* spc7110emu.h */, + 291D59A8B427D100ED229874D4D9C1A4 /* srtc.h */, + 20636B35E9114D9C339486FC80D17633 /* srtcemu.h */, + C32EC5252A036254058CB744DABBE87E /* statemanager.h */, + 4F066AA72AF013DB424E69E221FDA626 /* stream.h */, + 23B74C9DADB72CF0883D582488B13ED6 /* tile.h */, + D57C29819F5C998665553943DA337E3D /* apu */, + ); + name = snes9x; + path = snes9x; sourceTree = ""; }; /* End PBXGroup section */ @@ -8366,6 +8728,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 1681D74CF9BEE347F4C5F349E864B7F7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + FE333082650A337F417E1CF08EF9503A /* Pods-Delta-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 1720941E471683DB933EABFBF20395A1 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -8375,6 +8745,47 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 21DE3D30C24360767305C1C5AB1AA508 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D56F29E45DD478816308DCF5288A13E1 /* ARCodeList.h in Headers */, + C2992FB2C5EA630CD93BB356A0364AB5 /* AREngine.h in Headers */, + EFAE2C3B6A6696B52B10F87013319EE4 /* ARM.h in Headers */, + 7B85E337A6D06E8012EC891088CEB9FA /* ARM_InstrTable.h in Headers */, + D4EF0B9C680FAABDFBF23493217BEBEA /* ARMInterpreter.h in Headers */, + 32835555CC71C9A1FD4C3765B72224E5 /* ARMInterpreter_ALU.h in Headers */, + 803D47C1EAB8100785D866D0E5579DD1 /* ARMInterpreter_Branch.h in Headers */, + 4A9F3B1885A725C767C559BD65A10935 /* ARMInterpreter_LoadStore.h in Headers */, + D1014816F973C67639F5622AAA455B97 /* Config.h in Headers */, + 354A8F40F5743D12518A0509EB8575FC /* CRC32.h in Headers */, + 1C47B242A0B80613D72DA6089181905C /* DMA.h in Headers */, + 37F81F0927DEAB2B067BB5BD8D29618B /* FIFO.h in Headers */, + E3760F1B277D93ADB9423C1C79590845 /* GBACart.h in Headers */, + D917430D486E5BD25A2CA0B8B4F237B9 /* GPU.h in Headers */, + 4FD50804BC7509091BA1DCBA69F8C306 /* GPU2D.h in Headers */, + 8645182969B64EFC83F6741F12385172 /* GPU3D.h in Headers */, + E0D3FCAEAEA0ACEA63F32A34AA72B9DD /* GPU3D_OpenGL_shaders.h in Headers */, + 40F75F4E2E7192A47FE6E9826664A8AE /* MelonDSDeltaCore-umbrella.h in Headers */, + FA71E7212A583BF178A9718178962E06 /* MelonDSDeltaCore.h in Headers */, + 6BD8B0E292B94BC9D8A9CBA583D4A79E /* MelonDSEmulatorBridge.h in Headers */, + D956507314E15EB55215F3587C359E4B /* MelonDSTypes.h in Headers */, + 08A1B982F9CD6EA5ECD5A442973A25AD /* NDS.h in Headers */, + 2202C76B0ACAFF39A84EE36584148743 /* NDSCart.h in Headers */, + 4AD9EE859F0DE01AF2C869C403FE8AD6 /* OpenGLSupport.h in Headers */, + 64AAC890C5FE81CDEA42957859B1A198 /* Platform.h in Headers */, + 49B42763E754035FF9813F47341292A8 /* PlatformConfig.h in Headers */, + 60958CC056A611C62497E3D2010A35CC /* RTC.h in Headers */, + 172D940DCB5435663DBA9C5B5E92D436 /* Savestate.h in Headers */, + 14363C965EF433EBD28CBF68938C6441 /* SPI.h in Headers */, + AF3B145662403775AE286362BD64CE15 /* SPU.h in Headers */, + 825DF2D1ADB787B6BBAACFA7182B3325 /* types.h in Headers */, + 922957171D68783E3E3A4DC0D4A9D0D9 /* version.h in Headers */, + 93FFCE2514097792D1F5E38E988F1513 /* Wifi.h in Headers */, + 128CFECF46B7047470D018C987584ACD /* WifiAP.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 26CD12A0A8FED394729931D851C1BDFE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -9603,14 +10014,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FD37510B091CEA1C8736943F45E2B6D7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 227EA8867B83F2F2978D06671A0A10CF /* Pods-Delta-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -9693,36 +10096,37 @@ }; 33C94426DAF58519DC6806AF4C44C9E7 /* Pods-Delta */ = { isa = PBXNativeTarget; - buildConfigurationList = 5E1FD0C2F1EE47BB4375104C033855F1 /* Build configuration list for PBXNativeTarget "Pods-Delta" */; + buildConfigurationList = 8EFB202E62BCFC8E2295AB415D91B995 /* Build configuration list for PBXNativeTarget "Pods-Delta" */; buildPhases = ( - FD37510B091CEA1C8736943F45E2B6D7 /* Headers */, - 05BC7ED38F0128CA453934D8D78F19AD /* Sources */, - 48D215C02B17AE962C42A70069BFED0A /* Frameworks */, + 1681D74CF9BEE347F4C5F349E864B7F7 /* Headers */, + 2DE8389FEB37083209C9256255790CB7 /* Sources */, + 18A021CDA30ED3449A80C3DC020221A1 /* Frameworks */, ); buildRules = ( ); dependencies = ( - EE6ABB82B8B97BD3E25ABA2C3DEB3128 /* PBXTargetDependency */, - 42193324C4D006B18C2B76243EED095D /* PBXTargetDependency */, - 9F5478313CF5775EC625C84D2D5D399F /* PBXTargetDependency */, - 94C1058A9AAA61AB7FD11B5FBCE6DFF8 /* PBXTargetDependency */, - C4FAAF75F43EE0D12E71D3E32AF204A2 /* PBXTargetDependency */, - 8AAE57B63A7B4C11709251F4EE10FB88 /* PBXTargetDependency */, - E4D87F7F65F696B017EA781E30A39A5B /* PBXTargetDependency */, - 27F1EA33C127149DA030B906F0F28448 /* PBXTargetDependency */, - 2B11DB4B71ED02E5B9B9788D1D26A53E /* PBXTargetDependency */, - A6A5A2CFDBD10C7F2D09F3F53B8F5FD7 /* PBXTargetDependency */, - 5D04385CC7E6917783C3F4F8EF9DDDB0 /* PBXTargetDependency */, - 99FDE882695E00A0F390EE607B268B52 /* PBXTargetDependency */, - BFAF65DA7D034599D4E5CFB20EFF5290 /* PBXTargetDependency */, - ABCD70BFE64CBAA49543AFA61813436A /* PBXTargetDependency */, - 5036207F0D0A8DEE49EC859CB26A3BE2 /* PBXTargetDependency */, - D31863FC462A085FA121105AC436D6DB /* PBXTargetDependency */, - 52FAFD51C4754410BE945A4088A5365B /* PBXTargetDependency */, - 2E13E041ACAB72B0D20161D1C91014D8 /* PBXTargetDependency */, - CB2DF911EC096412E04767CA494113A6 /* PBXTargetDependency */, - 0BE9490C890610C7DD3138962A6A97B2 /* PBXTargetDependency */, - 2470E0637AB079C1EA36776A56133D54 /* PBXTargetDependency */, + C883A390885069E75F7CCCFAF1CE9318 /* PBXTargetDependency */, + 5DFF66B39423909D69FFC67E306E3E5D /* PBXTargetDependency */, + C7AA40FE6618EB3EA862BD784D8444D0 /* PBXTargetDependency */, + 5F649E35C440C0F70199BEC2D8E172FF /* PBXTargetDependency */, + 8CF19D40C04C187755DF617BCB77FA8E /* PBXTargetDependency */, + 86B6EDFD1B8B67A0438522465A1C780A /* PBXTargetDependency */, + 4D142993FC52FA75D91F9FB4121F70AC /* PBXTargetDependency */, + AADA77C5E5F1A23245463C5709C20D7A /* PBXTargetDependency */, + D01D069B36315DB660B44B141C396BEC /* PBXTargetDependency */, + 928A06DB797D9435D4BCAFAE0078FBE7 /* PBXTargetDependency */, + ADA7D1725FF83A0AB52821217415B347 /* PBXTargetDependency */, + B7E68D3B056808A80C2252DFE10B6ACB /* PBXTargetDependency */, + 15364F69178421803B4D9618FCF82D19 /* PBXTargetDependency */, + 6D01D7784C683F0D93DD94082BAB0A4E /* PBXTargetDependency */, + 59485F9053606C4B308C35C439DCE5A9 /* PBXTargetDependency */, + 07E627BB28FBB62F3E6DC30187201518 /* PBXTargetDependency */, + 8341E67D3C3343E0BFC34385A15D6D5B /* PBXTargetDependency */, + 8D8A3B8D1EA1D39A13A70A2C5EB40BC9 /* PBXTargetDependency */, + 7AE2A0B8C5162CF0A80C9ECDC2BE67D4 /* PBXTargetDependency */, + A030A9436B8FECCE417AD24306433EAD /* PBXTargetDependency */, + 8EDE9A0E0F099441D022A2AD750D66A1 /* PBXTargetDependency */, + F0BBCFB846E0594BA5A5811C0A4F35DD /* PBXTargetDependency */, ); name = "Pods-Delta"; productName = "Pods-Delta"; @@ -9763,6 +10167,26 @@ productReference = 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */; productType = "com.apple.product-type.bundle"; }; + 38A7AA32705A9662332E76FA75B50858 /* MelonDSDeltaCore */ = { + isa = PBXNativeTarget; + buildConfigurationList = B60553E29392DE41ED40CB0EC15DFBCF /* Build configuration list for PBXNativeTarget "MelonDSDeltaCore" */; + buildPhases = ( + 21DE3D30C24360767305C1C5AB1AA508 /* Headers */, + BC865B7660440743952CF38E5547EAA7 /* Sources */, + F0620DD145118A9F244DF58C7E79C346 /* Frameworks */, + F1E314EA97D4BBB58B4A700FF5279CC6 /* Copy generated compatibility header */, + ); + buildRules = ( + ); + dependencies = ( + EADC3D9064B6BF83A5A9DD4E658F241E /* PBXTargetDependency */, + DC394804576414D1BEB225B627808AD9 /* PBXTargetDependency */, + ); + name = MelonDSDeltaCore; + productName = MelonDSDeltaCore; + productReference = 4C22C82316853ABB688358B93486CF8E /* libMelonDSDeltaCore.a */; + productType = "com.apple.product-type.library.static"; + }; 3F2C1776D90B62B156DB52C41A5C419C /* SQLite.swift */ = { isa = PBXNativeTarget; buildConfigurationList = 4831832D716DE9C50FF96385B6482F4A /* Build configuration list for PBXNativeTarget "SQLite.swift" */; @@ -9802,6 +10226,23 @@ productReference = F93477FBF1E4488E506F9BB79AF57D38 /* libDeltaCore.a */; productType = "com.apple.product-type.library.static"; }; + 5B32FEE5AD13CB944235C9158BECB929 /* MelonDSDeltaCore-melonDS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 769CCD015EEEB9388EA6D65752E1BB67 /* Build configuration list for PBXNativeTarget "MelonDSDeltaCore-melonDS" */; + buildPhases = ( + 7A53168B9562B1FC96B4C47CACB74811 /* Sources */, + 6B8CBC6C90ECA9B3D6C787B5950C6E2A /* Frameworks */, + 8948D4BC4545310C4D92BFB641B78E8E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "MelonDSDeltaCore-melonDS"; + productName = "MelonDSDeltaCore-melonDS"; + productReference = ECD0868BC2D1CFC2A22DDD56F79CF4B1 /* melonDS.bundle */; + productType = "com.apple.product-type.bundle"; + }; 5C36E65AEF44273E4AF0CBFADD00C090 /* GBCDeltaCore-GBCDeltaCore */ = { isa = PBXNativeTarget; buildConfigurationList = 41ADB7A6BF6874F8E5EB48DF7A168301 /* Build configuration list for PBXNativeTarget "GBCDeltaCore-GBCDeltaCore" */; @@ -10128,7 +10569,7 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 852E660B5C556492569CAB8892FB9629 /* Products */; + productRefGroup = 03FD5788ECA6B9A68F2212115FCFC591 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( @@ -10148,6 +10589,8 @@ D47C581D39D227080F83B16A22A56664 /* GoogleToolboxForMac */, D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */, 5CB4163F0A6D4BDE0A490758A78BA43D /* Harmony */, + 38A7AA32705A9662332E76FA75B50858 /* MelonDSDeltaCore */, + 5B32FEE5AD13CB944235C9158BECB929 /* MelonDSDeltaCore-melonDS */, 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */, 38A3E6A4A13E8C4E975336840145C119 /* N64DeltaCore-N64DeltaCore */, 0FAC8C4777DBD31221FE57848CB5F759 /* NESDeltaCore */, @@ -10184,6 +10627,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 8948D4BC4545310C4D92BFB641B78E8E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 50B180CFEAD01CDF7AE77F036B6AD4E3 /* romlist.bin in Resources */, + 26BD486C68EF5B079CF50F132FB6EAC5 /* Standard.deltamapping in Resources */, + 08B9F6148C2A49A570F33B4BF7163484 /* Standard.deltaskin in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A06B5CF2D3EF8320EFFE1AE6DB23FF53 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -10486,6 +10939,30 @@ shellPath = /bin/sh; shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DSDeltaCore/DSDeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/DSDeltaCore/DSDeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; }; + F1E314EA97D4BBB58B4A700FF5279CC6 /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore.modulemap", + "${PODS_ROOT}/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/MelonDSDeltaCore-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; F7BE234CBA2A214465171737981B36F2 /* Copy generated compatibility header */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -10537,14 +11014,6 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - 05BC7ED38F0128CA453934D8D78F19AD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B843BC65B5755CDFCC2133CAB6614090 /* Pods-Delta-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 0F356666BA38C004ACD3218C473661FF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -10587,6 +11056,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2DE8389FEB37083209C9256255790CB7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1A87A2F68523FA26D625BEC658965C81 /* Pods-Delta-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 3DC4139B1C0EA206BEB29EE8CA06ED7A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -10896,6 +11373,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7A53168B9562B1FC96B4C47CACB74811 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 811F13FE55E873CE6C1956757840D7C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -11011,6 +11495,42 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + BC865B7660440743952CF38E5547EAA7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + AFB0BE8A36022E71E1739AFFA0DD2DD5 /* ARCodeList.cpp in Sources */, + E2DF8E621CBBBD441DE3FDF670B7AAC2 /* AREngine.cpp in Sources */, + FED373516448B1419731F783A3F890E8 /* ARM.cpp in Sources */, + 310EE1EEE2F7EE1601F5B3BE385E9C1D /* ARMInterpreter.cpp in Sources */, + 2E8BB841572131183B17430DC86A4A5D /* ARMInterpreter_ALU.cpp in Sources */, + BFFFA37AA09F05D1D780084020C36569 /* ARMInterpreter_Branch.cpp in Sources */, + 236FE18B9A85308D24405A2A9ECF2840 /* ARMInterpreter_LoadStore.cpp in Sources */, + 549122D7AE98AC9764DE456E99B50AB9 /* Config.cpp in Sources */, + 71C0A367EA0BA6BF86EE30AD3006E1D0 /* CP15.cpp in Sources */, + C2E179FB02E7F0CD7231AEF5DF00CCB4 /* CRC32.cpp in Sources */, + 964D97F8D77342CEF0BDB0A9813AC087 /* DMA.cpp in Sources */, + 6556E55EE066A70B571AA0F6018B0988 /* GBACart.cpp in Sources */, + DE2C177F1F0790310E321F30BF5FEEB6 /* GPU.cpp in Sources */, + BC8C1CD0ADEE21D2C320F00B6ABD9DC8 /* GPU2D.cpp in Sources */, + F78014F7507926EF6233B8D9C37FDCF7 /* GPU3D.cpp in Sources */, + 5B0F1790A09DEAEED24FACF655B74D15 /* GPU3D_Soft.cpp in Sources */, + C0A46DD2A0BD6922A1E0CE926C0202B3 /* MelonDS.swift in Sources */, + 62340E0AED101FFE91C18C91AD9ACEEB /* MelonDSDeltaCore-dummy.m in Sources */, + 3A8E9E2BBC13E7A7D646DE95D3153B21 /* MelonDSEmulatorBridge.mm in Sources */, + 3A92EB7D29C472B745D4A5BA74BD53A6 /* MelonDSTypes.m in Sources */, + 644DA2A6ED8D65DD05C30EACC26425F5 /* NDS.cpp in Sources */, + 373BD9D2878032DC599159EE03FB8083 /* NDSCart.cpp in Sources */, + 76E9947CFB8C27CE5BC16E70BD417614 /* PlatformConfig.cpp in Sources */, + 55EA606F85ADCDB8455EE53A2F280B55 /* RTC.cpp in Sources */, + F59CAF83B152BF1D5B4B3BD272054564 /* Savestate.cpp in Sources */, + 6FC18CA0020117D5096CF72A20A94C68 /* SPI.cpp in Sources */, + 3BD5536C63EEDE95794066C869549BA1 /* SPU.cpp in Sources */, + 2B16AC9E3C87FF2EBD5E3AF7F7F4FB29 /* Wifi.cpp in Sources */, + D563CBCD51C3113785FB38FE63262495 /* WifiAP.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; BEB1EE0820D4CC88754367FD7B075D1A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -11216,11 +11736,11 @@ target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; targetProxy = 34B215C21519BEE50F2B57C914617CDD /* PBXContainerItemProxy */; }; - 0BE9490C890610C7DD3138962A6A97B2 /* PBXTargetDependency */ = { + 07E627BB28FBB62F3E6DC30187201518 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftyDropbox; - target = FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */; - targetProxy = 392DBE454CBCA00260718AED61FE380D /* PBXContainerItemProxy */; + name = Roxas; + target = B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */; + targetProxy = AFA5F041EC98759BCF2991209AA8B647 /* PBXContainerItemProxy */; }; 0F92DEB6B0EBCBC5C0F5B0BC9BE93B14 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11234,29 +11754,11 @@ target = B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */; targetProxy = FC9F6032803826BC09AF6A35BD043AF6 /* PBXContainerItemProxy */; }; - 2470E0637AB079C1EA36776A56133D54 /* PBXTargetDependency */ = { + 15364F69178421803B4D9618FCF82D19 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = ZIPFoundation; - target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; - targetProxy = C6636E070B3DEB95C17EA6632E29A801 /* PBXContainerItemProxy */; - }; - 27F1EA33C127149DA030B906F0F28448 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GTMSessionFetcher; - target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; - targetProxy = DF19AABA87BA7620652F0602A1A445EC /* PBXContainerItemProxy */; - }; - 2B11DB4B71ED02E5B9B9788D1D26A53E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleAPIClientForREST; - target = D7958E869B6C0073DB3025514393D7A3 /* GoogleAPIClientForREST */; - targetProxy = E055DEA7C7938B0F8B215158723BCFAC /* PBXContainerItemProxy */; - }; - 2E13E041ACAB72B0D20161D1C91014D8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SNESDeltaCore; - target = 141E2D29C29A1BC1ABA3483321DF3C88 /* SNESDeltaCore */; - targetProxy = 08E49A14C0B820DC65E9EBEDC8FD26D2 /* PBXContainerItemProxy */; + name = MelonDSDeltaCore; + target = 38A7AA32705A9662332E76FA75B50858 /* MelonDSDeltaCore */; + targetProxy = 9B7CE23FABAB20B2C7AF16AB48B1E85A /* PBXContainerItemProxy */; }; 3F1CB87EC87C55D1211C3D729391F3B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11264,29 +11766,17 @@ target = FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */; targetProxy = C8E5EBBA48A65677D814EA8555DD214D /* PBXContainerItemProxy */; }; - 42193324C4D006B18C2B76243EED095D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Crashlytics; - target = C0E41540D6862472ED7F2FA11669BE1F /* Crashlytics */; - targetProxy = 208F89A2FB20B32BE8EFC4DCFB94C0F4 /* PBXContainerItemProxy */; - }; 460FB3819A6A637FCD17AE2E8D48C7F1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "SNESDeltaCore-SNESDeltaCore"; target = 6538136F848A07F507372CCFB40CEB88 /* SNESDeltaCore-SNESDeltaCore */; targetProxy = 917C63D909EFB5E156F1D8438E1DBF3E /* PBXContainerItemProxy */; }; - 5036207F0D0A8DEE49EC859CB26A3BE2 /* PBXTargetDependency */ = { + 4D142993FC52FA75D91F9FB4121F70AC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Roxas; - target = B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */; - targetProxy = 659353ED4A7AB491D7F388255FDB55AD /* PBXContainerItemProxy */; - }; - 52FAFD51C4754410BE945A4088A5365B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SMCalloutView; - target = D20492B6476142DCA0C455340876BB98 /* SMCalloutView */; - targetProxy = 96E675967EBB0C7F8B3627784533133A /* PBXContainerItemProxy */; + name = GBCDeltaCore; + target = DB59C68809324297BEDAF0CC3F931B27 /* GBCDeltaCore */; + targetProxy = F1F6EE2728A32549B1D7705737A01D88 /* PBXContainerItemProxy */; }; 577A987593409C33649C46C3581BE270 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11294,11 +11784,23 @@ target = 5C36E65AEF44273E4AF0CBFADD00C090 /* GBCDeltaCore-GBCDeltaCore */; targetProxy = FE3183C8BBCDB1BDB2299370415670AE /* PBXContainerItemProxy */; }; - 5D04385CC7E6917783C3F4F8EF9DDDB0 /* PBXTargetDependency */ = { + 59485F9053606C4B308C35C439DCE5A9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GoogleToolboxForMac; - target = D47C581D39D227080F83B16A22A56664 /* GoogleToolboxForMac */; - targetProxy = 91865C2EEFB2A47CB3B4902798E4771F /* PBXContainerItemProxy */; + name = NESDeltaCore; + target = 0FAC8C4777DBD31221FE57848CB5F759 /* NESDeltaCore */; + targetProxy = 96D9FD5E94FA86A4829461B45553DF6D /* PBXContainerItemProxy */; + }; + 5DFF66B39423909D69FFC67E306E3E5D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Crashlytics; + target = C0E41540D6862472ED7F2FA11669BE1F /* Crashlytics */; + targetProxy = F1EB0B745F438243447388F899A86F78 /* PBXContainerItemProxy */; + }; + 5F649E35C440C0F70199BEC2D8E172FF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = 7F76089DD889A286421580F486DABD30 /* PBXContainerItemProxy */; }; 6A06A23778F35BD29819315F84EA7618 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11306,6 +11808,12 @@ target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; targetProxy = BA76C622BDB4235F75B294BF13275ABE /* PBXContainerItemProxy */; }; + 6D01D7784C683F0D93DD94082BAB0A4E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = N64DeltaCore; + target = 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */; + targetProxy = 15E4ADDCC69DB2AEB2E21EC85874D1C6 /* PBXContainerItemProxy */; + }; 6DE0745286D33113EC54EBA586F7ACB4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "N64DeltaCore-N64DeltaCore"; @@ -11318,29 +11826,47 @@ target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; targetProxy = CD579FC09454B036337FF5A32B4DBB2E /* PBXContainerItemProxy */; }; + 7AE2A0B8C5162CF0A80C9ECDC2BE67D4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SNESDeltaCore; + target = 141E2D29C29A1BC1ABA3483321DF3C88 /* SNESDeltaCore */; + targetProxy = 72992287F7446AB7BE779D00335800FE /* PBXContainerItemProxy */; + }; 8005293D86303BC2B82C3A79C1FBB6D1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DeltaCore; target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; targetProxy = 4385B12AA0B20D01F6C776AB3FDDF01A /* PBXContainerItemProxy */; }; + 8341E67D3C3343E0BFC34385A15D6D5B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = 81A23D2771EF2CB058EBCB7273C6ECE9 /* PBXContainerItemProxy */; + }; 85D6ACF2CBBCECECBBABA09B2EA5D168 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DeltaCore; target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; targetProxy = B0BF40D28D6E234E553A0ED8A549FD38 /* PBXContainerItemProxy */; }; + 86B6EDFD1B8B67A0438522465A1C780A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GBADeltaCore; + target = 7056A67459B0B8B62FACACCE167546B8 /* GBADeltaCore */; + targetProxy = 5C258FF92B6679B47B49335CC372C90F /* PBXContainerItemProxy */; + }; 881CFD1802642CF2190E153E20340D93 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GTMSessionFetcher; target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; targetProxy = 5C8E1AC123E1190B28C3D74EC312A900 /* PBXContainerItemProxy */; }; - 8AAE57B63A7B4C11709251F4EE10FB88 /* PBXTargetDependency */ = { + 8CF19D40C04C187755DF617BCB77FA8E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = GBADeltaCore; - target = 7056A67459B0B8B62FACACCE167546B8 /* GBADeltaCore */; - targetProxy = CD68A8251278E73BF058DE4CAF902C13 /* PBXContainerItemProxy */; + name = Fabric; + target = ABB048B191245233986A7CD75FE412A5 /* Fabric */; + targetProxy = B8692181C6057BB8A463EBCE606FACEA /* PBXContainerItemProxy */; }; 8D70B4086B79508F6199FF434AF5A42E /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11348,11 +11874,23 @@ target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; targetProxy = 607EED20C10A262BEE57DA6EAA244FAA /* PBXContainerItemProxy */; }; - 94C1058A9AAA61AB7FD11B5FBCE6DFF8 /* PBXTargetDependency */ = { + 8D8A3B8D1EA1D39A13A70A2C5EB40BC9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = DeltaCore; - target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; - targetProxy = 955F4B2D4BC59033DF863D57B227851C /* PBXContainerItemProxy */; + name = SMCalloutView; + target = D20492B6476142DCA0C455340876BB98 /* SMCalloutView */; + targetProxy = 86534420E32682EC48291AA6F93F24F8 /* PBXContainerItemProxy */; + }; + 8EDE9A0E0F099441D022A2AD750D66A1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SwiftyDropbox; + target = FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */; + targetProxy = FBB42449A24CCDAAA448A4594FEA4A7E /* PBXContainerItemProxy */; + }; + 928A06DB797D9435D4BCAFAE0078FBE7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleSignIn; + target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; + targetProxy = 597855F01FDAB40A3CF62BCD3AEA5D72 /* PBXContainerItemProxy */; }; 99877DBD7CEAFBE1DCD6450538B2DB20 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11360,23 +11898,11 @@ target = 890229DC8DCC9C43917568A0C4502FCA /* GBADeltaCore-GBADeltaCore */; targetProxy = A86E9AE4C08786BEAA77EF17CD90CB3B /* PBXContainerItemProxy */; }; - 99FDE882695E00A0F390EE607B268B52 /* PBXTargetDependency */ = { + A030A9436B8FECCE417AD24306433EAD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Harmony; - target = 5CB4163F0A6D4BDE0A490758A78BA43D /* Harmony */; - targetProxy = 6F0190E1AA86749B64954DAE1DF61FD8 /* PBXContainerItemProxy */; - }; - 9F5478313CF5775EC625C84D2D5D399F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DSDeltaCore; - target = DCBC8D45C727B1472F26E79661AF11B0 /* DSDeltaCore */; - targetProxy = 85A4548E1EA8661D090B8346F0C0C747 /* PBXContainerItemProxy */; - }; - A6A5A2CFDBD10C7F2D09F3F53B8F5FD7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleSignIn; - target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; - targetProxy = D9246DA49C6124866A85E13C049C425F /* PBXContainerItemProxy */; + name = SQLite.swift; + target = 3F2C1776D90B62B156DB52C41A5C419C /* SQLite.swift */; + targetProxy = DB94964017865AC74B32D329D41ACD22 /* PBXContainerItemProxy */; }; A7BA55FF6A51B067A5810C18839C07D2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11390,11 +11916,17 @@ target = D47C581D39D227080F83B16A22A56664 /* GoogleToolboxForMac */; targetProxy = 66BE2C6B403019BF36ABAD1493446E37 /* PBXContainerItemProxy */; }; - ABCD70BFE64CBAA49543AFA61813436A /* PBXTargetDependency */ = { + AADA77C5E5F1A23245463C5709C20D7A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = NESDeltaCore; - target = 0FAC8C4777DBD31221FE57848CB5F759 /* NESDeltaCore */; - targetProxy = 3B8363B7FD833F1636CD3973BC69E237 /* PBXContainerItemProxy */; + name = GTMSessionFetcher; + target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; + targetProxy = 0AB8D582EE9A1B6BF2BC703095D392A0 /* PBXContainerItemProxy */; + }; + ADA7D1725FF83A0AB52821217415B347 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleToolboxForMac; + target = D47C581D39D227080F83B16A22A56664 /* GoogleToolboxForMac */; + targetProxy = 3CD814616B670B8CE5088FBD7C0E1762 /* PBXContainerItemProxy */; }; B5FEC1EBE509FEB4C2E760EF1DC6A7BF /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11402,17 +11934,23 @@ target = 7F839870ECBE0065B4BCC02E5F98F48A /* NESDeltaCore-NESDeltaCore */; targetProxy = C362C591F7ECCE9A372B69F1B110636E /* PBXContainerItemProxy */; }; - BFAF65DA7D034599D4E5CFB20EFF5290 /* PBXTargetDependency */ = { + B7E68D3B056808A80C2252DFE10B6ACB /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = N64DeltaCore; - target = 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */; - targetProxy = BE77B86928874033E4E09D8C9ADD66A9 /* PBXContainerItemProxy */; + name = Harmony; + target = 5CB4163F0A6D4BDE0A490758A78BA43D /* Harmony */; + targetProxy = 80B90246215F8B20A9C96642F2666C46 /* PBXContainerItemProxy */; }; - C4FAAF75F43EE0D12E71D3E32AF204A2 /* PBXTargetDependency */ = { + C7AA40FE6618EB3EA862BD784D8444D0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Fabric; - target = ABB048B191245233986A7CD75FE412A5 /* Fabric */; - targetProxy = 69A8B982C834715530BA23F9E542717F /* PBXContainerItemProxy */; + name = DSDeltaCore; + target = DCBC8D45C727B1472F26E79661AF11B0 /* DSDeltaCore */; + targetProxy = ED320D1490699A682E638D0CB51867F5 /* PBXContainerItemProxy */; + }; + C883A390885069E75F7CCCFAF1CE9318 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = BFDC128DE7D388CEE4AC40C434366C9A /* PBXContainerItemProxy */; }; C9CEFEFAAAEDB8CD947737FA56C849D4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11420,17 +11958,11 @@ target = ABB048B191245233986A7CD75FE412A5 /* Fabric */; targetProxy = D465047540D12FD9D95291AE82A76DB9 /* PBXContainerItemProxy */; }; - CB2DF911EC096412E04767CA494113A6 /* PBXTargetDependency */ = { + D01D069B36315DB660B44B141C396BEC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SQLite.swift; - target = 3F2C1776D90B62B156DB52C41A5C419C /* SQLite.swift */; - targetProxy = 916694214CC7D40B5C688E8E1B8BD383 /* PBXContainerItemProxy */; - }; - D31863FC462A085FA121105AC436D6DB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SDWebImage; - target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = E00034F4E269D670A3F53FB95161556D /* PBXContainerItemProxy */; + name = GoogleAPIClientForREST; + target = D7958E869B6C0073DB3025514393D7A3 /* GoogleAPIClientForREST */; + targetProxy = 23176F3FC53EE946611A046850CBD012 /* PBXContainerItemProxy */; }; D37E815A435C967BECD1C4ED135E56DF /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11438,29 +11970,35 @@ target = E5449403CBE67599315B4D26019FA175 /* DSDeltaCore-DSDeltaCore */; targetProxy = 7E6CB180472EA40C403421180C2A18B7 /* PBXContainerItemProxy */; }; + DC394804576414D1BEB225B627808AD9 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MelonDSDeltaCore-melonDS"; + target = 5B32FEE5AD13CB944235C9158BECB929 /* MelonDSDeltaCore-melonDS */; + targetProxy = 6A5DB238A47BCA0BFA418E35F69CB27F /* PBXContainerItemProxy */; + }; DF50B746EF7C6DC9302CBF83E64A502C /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GoogleAPIClientForREST; target = D7958E869B6C0073DB3025514393D7A3 /* GoogleAPIClientForREST */; targetProxy = 298D76CD321EB0D6C48A27C84D848723 /* PBXContainerItemProxy */; }; - E4D87F7F65F696B017EA781E30A39A5B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GBCDeltaCore; - target = DB59C68809324297BEDAF0CC3F931B27 /* GBCDeltaCore */; - targetProxy = 918A60A2153F498B0B255F27E3B94F69 /* PBXContainerItemProxy */; - }; E56CE409A3455CD89DA5BA6DDDC40D3B /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GoogleSignIn; target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; targetProxy = 7BFA61EA67CFFA199F2E37A65BA0FFFD /* PBXContainerItemProxy */; }; - EE6ABB82B8B97BD3E25ABA2C3DEB3128 /* PBXTargetDependency */ = { + EADC3D9064B6BF83A5A9DD4E658F241E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Alamofire; - target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = FACAEB8C576AA15FABFC8222548EEC2A /* PBXContainerItemProxy */; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = 2B99EACE928A9F500BF9C764B2238EB4 /* PBXContainerItemProxy */; + }; + F0BBCFB846E0594BA5A5811C0A4F35DD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZIPFoundation; + target = AA15C8469D67684160CC2A7098EB841C /* ZIPFoundation */; + targetProxy = BE687E136D56B4102FB9880EDB33703D /* PBXContainerItemProxy */; }; FD085AE31E6041915F925532ECB3134A /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11479,7 +12017,7 @@ /* Begin XCBuildConfiguration section */ 07A8420FD39320EE33750A5A08B49B0C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */; + baseConfigurationReference = 322C5837A63371E2F6F3AF970B00A736 /* GBADeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -11506,7 +12044,7 @@ }; 0862528A404CA576B3A25AED3AB3D765 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */; + baseConfigurationReference = 5FA6C00DDDB9434F8C592657E4CF0E8D /* DSDeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -11638,7 +12176,7 @@ }; 157E49C46E51B2A4B3A0A92FF290CB97 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */; + baseConfigurationReference = 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/N64DeltaCore"; @@ -11655,7 +12193,7 @@ }; 19CA107CA126D0EAFCB2699D867C871D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */; + baseConfigurationReference = C6AEBD66201582E2F018DBD9D692F239 /* SNESDeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -11764,7 +12302,7 @@ }; 2D84D617B7857F3275843F18B59616C6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */; + baseConfigurationReference = 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -11805,7 +12343,7 @@ }; 2FDBCEC2FB6639C343014F7BAC7C584D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1E6A8F6B9B3B7B25C7C87F8B3C7CDE37 /* Roxas.xcconfig */; + baseConfigurationReference = 6D90A2363F7995BE9713375802DBDF16 /* Roxas.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -11830,9 +12368,34 @@ }; name = Debug; }; + 31FA331EF37060BA2DA347B02C99F7E1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F381603DE2011262E9A2C37926028861 /* Pods-Delta.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; 32DC95F7A92B1F3BAD2E0B2C88BA201C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */; + baseConfigurationReference = 48EEB005F713F595AFABDEDD7B122D6F /* DeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DeltaCore"; @@ -11899,9 +12462,26 @@ }; name = Debug; }; + 41F86BE7D3A6B2AA72EDBFE77BB7C36D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5B2E58A2772EA93AA7DC5A5022F51297 /* MelonDSDeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MelonDSDeltaCore"; + IBSC_MODULE = MelonDSDeltaCore; + INFOPLIST_FILE = "Target Support Files/MelonDSDeltaCore/ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = melonDS; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; 42AF8BA49D658326FC4E087EB60994D2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */; + baseConfigurationReference = 6D14F298DDA814B5FF6C73CC765C8186 /* GBCDeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GBCDeltaCore"; @@ -11918,7 +12498,7 @@ }; 43C7691D5E1F39EE39DA69D6A2E6F066 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */; + baseConfigurationReference = E8CBF48F4162BE550454D36F2B379AE4 /* NESDeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -11944,7 +12524,7 @@ }; 46E59AEA8F9BBFC46341D0AB0A41EEED /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */; + baseConfigurationReference = 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/N64DeltaCore"; @@ -11961,7 +12541,7 @@ }; 4ADE45E1DE4E87A43AFD7A55ED34225C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */; + baseConfigurationReference = 6D14F298DDA814B5FF6C73CC765C8186 /* GBCDeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12002,7 +12582,7 @@ }; 574691B854BD0460CABF1D1F3DE8D074 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */; + baseConfigurationReference = C6AEBD66201582E2F018DBD9D692F239 /* SNESDeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SNESDeltaCore"; @@ -12019,7 +12599,7 @@ }; 5E2B746830A1712B92EA62ADE50A75C8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1E6A8F6B9B3B7B25C7C87F8B3C7CDE37 /* Roxas.xcconfig */; + baseConfigurationReference = 6D90A2363F7995BE9713375802DBDF16 /* Roxas.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12047,7 +12627,7 @@ }; 692C1D9591DC249D0B1E5A07F4E6A57D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */; + baseConfigurationReference = 48EEB005F713F595AFABDEDD7B122D6F /* DeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12153,7 +12733,7 @@ }; 7865E6AC330368CA0E04D798F322E9E7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */; + baseConfigurationReference = 322C5837A63371E2F6F3AF970B00A736 /* GBADeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GBADeltaCore"; @@ -12170,7 +12750,7 @@ }; 84FAA2C3CD643AE5190D21FE40BE4687 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */; + baseConfigurationReference = E8CBF48F4162BE550454D36F2B379AE4 /* NESDeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12224,7 +12804,7 @@ }; 8BAC33A429758DA9ECFD01D0D582F876 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */; + baseConfigurationReference = 6D14F298DDA814B5FF6C73CC765C8186 /* GBCDeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12252,7 +12832,7 @@ }; 8D6E449A1CA49D9D78EBEF3F1AEBC0C6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6E6ABC72122793A5F3381924CC2D9BE8 /* Harmony.xcconfig */; + baseConfigurationReference = 0B25891B457EEC5EC2A639DA8DAE0EBE /* Harmony.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12280,7 +12860,7 @@ }; 940F0F7414B6817B24692D5D2F1986E5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */; + baseConfigurationReference = 5FA6C00DDDB9434F8C592657E4CF0E8D /* DSDeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DSDeltaCore"; @@ -12297,7 +12877,7 @@ }; 96FF12B9E1DD6E73F2E1D339E930D241 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */; + baseConfigurationReference = 322C5837A63371E2F6F3AF970B00A736 /* GBADeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12325,7 +12905,7 @@ }; 998C488F1BB7DEA095C04687D5325483 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */; + baseConfigurationReference = E8CBF48F4162BE550454D36F2B379AE4 /* NESDeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/NESDeltaCore"; @@ -12368,7 +12948,7 @@ }; 9F2AE22C275BF4F36C29E153F2ABEF3A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */; + baseConfigurationReference = 48EEB005F713F595AFABDEDD7B122D6F /* DeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DeltaCore"; @@ -12383,6 +12963,23 @@ }; name = Debug; }; + A3D260889E426E0CF5A44428D3AC4BE9 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5B2E58A2772EA93AA7DC5A5022F51297 /* MelonDSDeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MelonDSDeltaCore"; + IBSC_MODULE = MelonDSDeltaCore; + INFOPLIST_FILE = "Target Support Files/MelonDSDeltaCore/ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = melonDS; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; A685D56CBFCCBFF365407F2285B61DE6 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = C41D62EAA75E3627EE9D9B3527E8DFFB /* Alamofire.xcconfig */; @@ -12426,7 +13023,7 @@ }; A821AD9B9BD0E109A69C66B99C1EDA61 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */; + baseConfigurationReference = C6AEBD66201582E2F018DBD9D692F239 /* SNESDeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12451,6 +13048,57 @@ }; name = Debug; }; + ACA94C61EF25EF990BE463453FFA4515 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5B2E58A2772EA93AA7DC5A5022F51297 /* MelonDSDeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = MelonDSDeltaCore; + PRODUCT_NAME = MelonDSDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + B0D8C9482ED52E23E767EC02D845EA88 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A34489EBF25913D7D0197EFF7FA146A3 /* Pods-Delta.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; B26A6042F5303D35FED8E303406D03AC /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = E7774915A9F77830DE8F037188D1A4F7 /* SMCalloutView.xcconfig */; @@ -12506,7 +13154,7 @@ }; B3C9B7BC9A2AE9348D76B4FF142B3504 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */; + baseConfigurationReference = 5FA6C00DDDB9434F8C592657E4CF0E8D /* DSDeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/DSDeltaCore"; @@ -12523,7 +13171,7 @@ }; BDBAEEC10CD7FAF7547D33C2BF58EE75 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 44A20A02840B12DDBDC29C8A04BE924A /* GBCDeltaCore.xcconfig */; + baseConfigurationReference = 6D14F298DDA814B5FF6C73CC765C8186 /* GBCDeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GBCDeltaCore"; @@ -12567,7 +13215,7 @@ }; C8AD5D5C06EFC156475CECAFBA176513 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFE97C0C1D61E342888058CD91656DC5 /* DSDeltaCore.xcconfig */; + baseConfigurationReference = 5FA6C00DDDB9434F8C592657E4CF0E8D /* DSDeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12594,7 +13242,7 @@ }; CADF80636C01458D87773C2229F2F1CE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F6B0BD3FC7A113DE73BC199E77044191 /* SNESDeltaCore.xcconfig */; + baseConfigurationReference = C6AEBD66201582E2F018DBD9D692F239 /* SNESDeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SNESDeltaCore"; @@ -12609,33 +13257,9 @@ }; name = Debug; }; - CDA51C2B578ABB6EA13634C8B038FAC4 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A34489EBF25913D7D0197EFF7FA146A3 /* Pods-Delta.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; D0EF404FB24A776F9ABE044132237C74 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7937F5B56049A4BF85440BDC25E9A064 /* N64DeltaCore.xcconfig */; + baseConfigurationReference = 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12677,7 +13301,7 @@ }; D6BE1EDC212DD96249456F867B962C39 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F831B37A3F163816AD76C1946A4A498 /* DeltaCore.xcconfig */; + baseConfigurationReference = 48EEB005F713F595AFABDEDD7B122D6F /* DeltaCore.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12703,7 +13327,7 @@ }; DEE0DD3C9744C1FEB926B87B36D12561 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3981C456E5D51C52FF3AF8AF68D0E817 /* NESDeltaCore.xcconfig */; + baseConfigurationReference = E8CBF48F4162BE550454D36F2B379AE4 /* NESDeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/NESDeltaCore"; @@ -12745,26 +13369,29 @@ }; name = Release; }; - EC31D7B382E9F9A12A33BE594E85016B /* Release */ = { + E90EEF54ECEF66D2765179BAC03F1B21 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F381603DE2011262E9A2C37926028861 /* Pods-Delta.release.xcconfig */; + baseConfigurationReference = 5B2E58A2772EA93AA7DC5A5022F51297 /* MelonDSDeltaCore.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Delta/Pods-Delta.modulemap"; + MODULEMAP_FILE = Headers/Public/MelonDSDeltaCore/MelonDSDeltaCore.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = MelonDSDeltaCore; + PRODUCT_NAME = MelonDSDeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -12847,7 +13474,7 @@ }; F4DCB064B536143E1CCFE897D92FB98C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6E6ABC72122793A5F3381924CC2D9BE8 /* Harmony.xcconfig */; + baseConfigurationReference = 0B25891B457EEC5EC2A639DA8DAE0EBE /* Harmony.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -12900,7 +13527,7 @@ }; FA2F81A3908AAC4FFAFFA55616BE32F7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 16E840CEC825B68A401A402F2DA69C02 /* GBADeltaCore.xcconfig */; + baseConfigurationReference = 322C5837A63371E2F6F3AF970B00A736 /* GBADeltaCore.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/GBADeltaCore"; @@ -13061,11 +13688,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5E1FD0C2F1EE47BB4375104C033855F1 /* Build configuration list for PBXNativeTarget "Pods-Delta" */ = { + 769CCD015EEEB9388EA6D65752E1BB67 /* Build configuration list for PBXNativeTarget "MelonDSDeltaCore-melonDS" */ = { isa = XCConfigurationList; buildConfigurations = ( - CDA51C2B578ABB6EA13634C8B038FAC4 /* Debug */, - EC31D7B382E9F9A12A33BE594E85016B /* Release */, + 41F86BE7D3A6B2AA72EDBFE77BB7C36D /* Debug */, + A3D260889E426E0CF5A44428D3AC4BE9 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -13097,6 +13724,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 8EFB202E62BCFC8E2295AB415D91B995 /* Build configuration list for PBXNativeTarget "Pods-Delta" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B0D8C9482ED52E23E767EC02D845EA88 /* Debug */, + 31FA331EF37060BA2DA347B02C99F7E1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; A084C0089544D8EEE7DA4C6D8EEEF9ED /* Build configuration list for PBXAggregateTarget "Crashlytics" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -13142,6 +13778,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + B60553E29392DE41ED40CB0EC15DFBCF /* Build configuration list for PBXNativeTarget "MelonDSDeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ACA94C61EF25EF990BE463453FFA4515 /* Debug */, + E90EEF54ECEF66D2765179BAC03F1B21 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; BB07493EBFDFDB75360BF9DF17195333 /* Build configuration list for PBXNativeTarget "SMCalloutView" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -13217,10 +13862,10 @@ /* End XCConfigurationList section */ /* Begin XCVersionGroup section */ - 5A95E2EE00E8BE996B0FFEBE598A34B7 /* Harmony.xcdatamodeld */ = { + 13024863EABD5877B9E214D03434D254 /* Harmony.xcdatamodeld */ = { isa = XCVersionGroup; children = ( - 8F44D6F54A29F5DC917F8C94CFA28050 /* Harmony.xcdatamodel */, + D18DB696A2F92208CB6C8BE6F624B70D /* Harmony.xcdatamodel */, ); name = Harmony.xcdatamodeld; path = "Harmony/Model/Core Data/Harmony.xcdatamodeld"; diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/MelonDSDeltaCore.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/MelonDSDeltaCore.xcscheme new file mode 100644 index 0000000..571dd27 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/MelonDSDeltaCore.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-dummy.m b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-dummy.m new file mode 100644 index 0000000..bcb6cf5 --- /dev/null +++ b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MelonDSDeltaCore : NSObject +@end +@implementation PodsDummy_MelonDSDeltaCore +@end diff --git a/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-prefix.pch b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h new file mode 100644 index 0000000..0cffb4f --- /dev/null +++ b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore-umbrella.h @@ -0,0 +1,19 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "MelonDSDeltaCore/Types/MelonDSTypes.h" +#import "MelonDSDeltaCore/Bridge/MelonDSEmulatorBridge.h" +#import "MelonDSDeltaCore/MelonDSDeltaCore.h" + +FOUNDATION_EXPORT double MelonDSDeltaCoreVersionNumber; +FOUNDATION_EXPORT const unsigned char MelonDSDeltaCoreVersionString[]; + diff --git a/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore.modulemap b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore.modulemap new file mode 100644 index 0000000..d2b31b4 --- /dev/null +++ b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore.modulemap @@ -0,0 +1,6 @@ +module MelonDSDeltaCore { + umbrella header "MelonDSDeltaCore-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore.xcconfig b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore.xcconfig new file mode 100644 index 0000000..7d2ddb5 --- /dev/null +++ b/Pods/Target Support Files/MelonDSDeltaCore/MelonDSDeltaCore.xcconfig @@ -0,0 +1,15 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore +GCC_OPTIMIZATION_LEVEL = fast +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 STATIC_LIBRARY=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MelonDSDeltaCore" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MelonDSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/MelonDSDeltaCore/melonDS/src" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -suppress-warnings -import-underlying-module -Xcc -fmodule-map-file="${SRCROOT}/${MODULEMAP_FILE}" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../Cores/MelonDSDeltaCore +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/MelonDSDeltaCore/ResourceBundle-MelonDSDeltaCore-MelonDSDeltaCore-Info.plist b/Pods/Target Support Files/MelonDSDeltaCore/ResourceBundle-MelonDSDeltaCore-MelonDSDeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/MelonDSDeltaCore/ResourceBundle-MelonDSDeltaCore-MelonDSDeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/MelonDSDeltaCore/ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist b/Pods/Target Support Files/MelonDSDeltaCore/ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/MelonDSDeltaCore/ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh index c4b3537..aebe069 100755 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh @@ -103,6 +103,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then install_resource "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.bundle" install_resource "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle" install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/melonDS.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle" install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTCollectionViewCell.xib" @@ -116,6 +117,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then install_resource "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.bundle" install_resource "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle" install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/melonDS.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle" install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTCollectionViewCell.xib" diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig b/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig index a145057..476d699 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta.debug.xcconfig @@ -2,18 +2,17 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES ALWAYS_SEARCH_USER_PATHS = YES CLANG_ENABLE_MODULES = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleSignIn/Frameworks" -GCC_OPTIMIZATION_LEVEL = 3 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 STATIC_LIBRARY=1 STATIC_LIBRARY=1 MUPENPLUSAPI TXFILTER_LIB OS_IOS GLESX GL_ERROR_DEBUG GL_DEBUG GLESX PNG_ARM_NEON_OPT=0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DSDeltaCore" "${PODS_ROOT}/Headers/Public/DeltaCore" "${PODS_ROOT}/Headers/Public/GBADeltaCore" "${PODS_ROOT}/Headers/Public/GBCDeltaCore" "${PODS_ROOT}/Headers/Public/GTMSessionFetcher" "${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Harmony" "${PODS_ROOT}/Headers/Public/N64DeltaCore" "${PODS_ROOT}/Headers/Public/NESDeltaCore" "${PODS_ROOT}/Headers/Public/Roxas" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SMCalloutView" "${PODS_ROOT}/Headers/Public/SNESDeltaCore" "${PODS_ROOT}/Headers/Public/SQLite.swift" "${PODS_ROOT}/Headers/Public/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/include" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/src" "${PODS_CONFIGURATION_BUILD_DIR}" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleAPIClientForREST" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Roxas" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" -OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DSDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBADeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBCDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/Harmony" -isystem "${PODS_ROOT}/Headers/Public/N64DeltaCore" -isystem "${PODS_ROOT}/Headers/Public/NESDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/SNESDeltaCore" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/GoogleSignIn/Frameworks" -DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm -fvisibility=hidden -DHAVE_CSTDINT -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -D__VEC4_OPT -fvisibility=hidden -funsigned-char -ffast-math -finline -fno-builtin -fno-common -fomit-frame-pointer -funroll-loops -fstrict-aliasing -DHAVE_STDINT_H -DARM -OTHER_LDFLAGS = $(inherited) -ObjC -Wl,-exported_symbol,_Video_PluginStartup,-exported_symbol,_Video_PluginShutdown,-exported_symbol,_Video_PluginGetVersion,-exported_symbol,_Video_RomOpen,-exported_symbol,_Video_RomClosed,-exported_symbol,_ConfigGetSharedDataFilepath,-exported_symbol,_ConfigGetUserConfigPath,-exported_symbol,_ConfigGetUserCachePath,-exported_symbol,_ConfigGetUserDataPath,-exported_symbol,_ConfigOpenSection,-exported_symbol,_ConfigDeleteSection,-exported_symbol,_ConfigSaveSection,-exported_symbol,_ConfigSaveFile,-exported_symbol,_ConfigSetDefaultInt,-exported_symbol,_ConfigSetDefaultFloat,-exported_symbol,_ConfigSetDefaultBool,-exported_symbol,_ConfigSetDefaultString,-exported_symbol,_ConfigGetParamInt,-exported_symbol,_ConfigGetParamFloat,-exported_symbol,_ConfigGetParamBool,-exported_symbol,_ConfigGetParamString,-exported_symbol,_ConfigExternalGetParameter,-exported_symbol,_ConfigExternalOpen,-exported_symbol,_ConfigExternalClose,-exported_symbol,_VidExt_Init,-exported_symbol,_VidExt_Quit,-exported_symbol,_VidExt_ListFullscreenModes,-exported_symbol,_VidExt_SetVideoMode,-exported_symbol,_VidExt_SetCaption,-exported_symbol,_VidExt_ToggleFullScreen,-exported_symbol,_VidExt_ResizeWindow,-exported_symbol,_VidExt_GL_GetProcAddress,-exported_symbol,_VidExt_GL_SetAttribute,-exported_symbol,_VidExt_GL_GetAttribute,-exported_symbol,_VidExt_GL_SwapBuffers,-exported_symbol,_ChangeWindow,-exported_symbol,_InitiateGFX,-exported_symbol,_MoveScreen,-exported_symbol,_ProcessDList,-exported_symbol,_ProcessRDPList,-exported_symbol,_ShowCFB,-exported_symbol,_UpdateScreen,-exported_symbol,_ViStatusChanged,-exported_symbol,_ViWidthChanged,-exported_symbol,_ReadScreen2,-exported_symbol,_SetRenderingCallback,-exported_symbol,_FBRead,-exported_symbol,_FBWrite,-exported_symbol,_FBGetFrameBufferInfo,-exported_symbol,_ResizeVideoOutput,-exported_symbol,_RSP_PluginStartup,-exported_symbol,_RSP_PluginShutdown,-exported_symbol,_RSP_PluginGetVersion,-exported_symbol,_DoRspCycles,-exported_symbol,_InitiateRSP,-exported_symbol,_RSP_RomClosed,-exported_symbol,_CoreGetAPIVersions,-exported_symbol,_ConfigGetParameter,-exported_symbol,_ConfigSetParameter,-exported_symbol,_CoreDoCommand -l"Alamofire" -l"DSDeltaCore" -l"DeltaCore" -l"GBADeltaCore" -l"GBCDeltaCore" -l"GTMSessionFetcher" -l"GoogleAPIClientForREST" -l"GoogleToolboxForMac" -l"Harmony" -l"N64DeltaCore" -l"NESDeltaCore" -l"Roxas" -l"SDWebImage" -l"SMCalloutView" -l"SNESDeltaCore" -l"SQLite.swift" -l"SwiftyDropbox" -l"ZIPFoundation" -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "CoreText" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "GoogleSignIn" -framework "ImageIO" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DSDeltaCore" "${PODS_ROOT}/Headers/Public/DeltaCore" "${PODS_ROOT}/Headers/Public/GBADeltaCore" "${PODS_ROOT}/Headers/Public/GBCDeltaCore" "${PODS_ROOT}/Headers/Public/GTMSessionFetcher" "${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Harmony" "${PODS_ROOT}/Headers/Public/MelonDSDeltaCore" "${PODS_ROOT}/Headers/Public/N64DeltaCore" "${PODS_ROOT}/Headers/Public/NESDeltaCore" "${PODS_ROOT}/Headers/Public/Roxas" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SMCalloutView" "${PODS_ROOT}/Headers/Public/SNESDeltaCore" "${PODS_ROOT}/Headers/Public/SQLite.swift" "${PODS_ROOT}/Headers/Public/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/include" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/src" "${PODS_CONFIGURATION_BUILD_DIR}" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/MelonDSDeltaCore/melonDS/src" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleAPIClientForREST" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Roxas" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/MelonDSDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DSDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBADeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBCDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/Harmony" -isystem "${PODS_ROOT}/Headers/Public/MelonDSDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/N64DeltaCore" -isystem "${PODS_ROOT}/Headers/Public/NESDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/SNESDeltaCore" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/GoogleSignIn/Frameworks" -DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm -fvisibility=hidden -DHAVE_CSTDINT -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -D__VEC4_OPT -fvisibility=hidden -funsigned-char -ffast-math -finline -fno-builtin -fno-common -fomit-frame-pointer -funroll-loops -fstrict-aliasing -DHAVE_STDINT_H -DARM +OTHER_LDFLAGS = $(inherited) -ObjC -Wl,-exported_symbol,_Video_PluginStartup,-exported_symbol,_Video_PluginShutdown,-exported_symbol,_Video_PluginGetVersion,-exported_symbol,_Video_RomOpen,-exported_symbol,_Video_RomClosed,-exported_symbol,_ConfigGetSharedDataFilepath,-exported_symbol,_ConfigGetUserConfigPath,-exported_symbol,_ConfigGetUserCachePath,-exported_symbol,_ConfigGetUserDataPath,-exported_symbol,_ConfigOpenSection,-exported_symbol,_ConfigDeleteSection,-exported_symbol,_ConfigSaveSection,-exported_symbol,_ConfigSaveFile,-exported_symbol,_ConfigSetDefaultInt,-exported_symbol,_ConfigSetDefaultFloat,-exported_symbol,_ConfigSetDefaultBool,-exported_symbol,_ConfigSetDefaultString,-exported_symbol,_ConfigGetParamInt,-exported_symbol,_ConfigGetParamFloat,-exported_symbol,_ConfigGetParamBool,-exported_symbol,_ConfigGetParamString,-exported_symbol,_ConfigExternalGetParameter,-exported_symbol,_ConfigExternalOpen,-exported_symbol,_ConfigExternalClose,-exported_symbol,_VidExt_Init,-exported_symbol,_VidExt_Quit,-exported_symbol,_VidExt_ListFullscreenModes,-exported_symbol,_VidExt_SetVideoMode,-exported_symbol,_VidExt_SetCaption,-exported_symbol,_VidExt_ToggleFullScreen,-exported_symbol,_VidExt_ResizeWindow,-exported_symbol,_VidExt_GL_GetProcAddress,-exported_symbol,_VidExt_GL_SetAttribute,-exported_symbol,_VidExt_GL_GetAttribute,-exported_symbol,_VidExt_GL_SwapBuffers,-exported_symbol,_ChangeWindow,-exported_symbol,_InitiateGFX,-exported_symbol,_MoveScreen,-exported_symbol,_ProcessDList,-exported_symbol,_ProcessRDPList,-exported_symbol,_ShowCFB,-exported_symbol,_UpdateScreen,-exported_symbol,_ViStatusChanged,-exported_symbol,_ViWidthChanged,-exported_symbol,_ReadScreen2,-exported_symbol,_SetRenderingCallback,-exported_symbol,_FBRead,-exported_symbol,_FBWrite,-exported_symbol,_FBGetFrameBufferInfo,-exported_symbol,_ResizeVideoOutput,-exported_symbol,_RSP_PluginStartup,-exported_symbol,_RSP_PluginShutdown,-exported_symbol,_RSP_PluginGetVersion,-exported_symbol,_DoRspCycles,-exported_symbol,_InitiateRSP,-exported_symbol,_RSP_RomClosed,-exported_symbol,_CoreGetAPIVersions,-exported_symbol,_ConfigGetParameter,-exported_symbol,_ConfigSetParameter,-exported_symbol,_CoreDoCommand -l"Alamofire" -l"DSDeltaCore" -l"DeltaCore" -l"GBADeltaCore" -l"GBCDeltaCore" -l"GTMSessionFetcher" -l"GoogleAPIClientForREST" -l"GoogleToolboxForMac" -l"Harmony" -l"MelonDSDeltaCore" -l"N64DeltaCore" -l"NESDeltaCore" -l"Roxas" -l"SDWebImage" -l"SMCalloutView" -l"SNESDeltaCore" -l"SQLite.swift" -l"SwiftyDropbox" -l"ZIPFoundation" -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "CoreText" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "GoogleSignIn" -framework "ImageIO" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/MelonDSDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods SWIFT_ACTIVE_COMPILATION_CONDITIONS = STATIC_LIBRARY FRAMEWORK NATIVE -SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/fex" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/N64DeltaCore-Video/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/SNESDeltaCore/snes9x" USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig b/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig index a145057..476d699 100644 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta.release.xcconfig @@ -2,18 +2,17 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES ALWAYS_SEARCH_USER_PATHS = YES CLANG_ENABLE_MODULES = NO FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Crashlytics/iOS" "${PODS_ROOT}/Fabric/iOS" "${PODS_ROOT}/GoogleSignIn/Frameworks" -GCC_OPTIMIZATION_LEVEL = 3 GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 STATIC_LIBRARY=1 STATIC_LIBRARY=1 MUPENPLUSAPI TXFILTER_LIB OS_IOS GLESX GL_ERROR_DEBUG GL_DEBUG GLESX PNG_ARM_NEON_OPT=0 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DSDeltaCore" "${PODS_ROOT}/Headers/Public/DeltaCore" "${PODS_ROOT}/Headers/Public/GBADeltaCore" "${PODS_ROOT}/Headers/Public/GBCDeltaCore" "${PODS_ROOT}/Headers/Public/GTMSessionFetcher" "${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Harmony" "${PODS_ROOT}/Headers/Public/N64DeltaCore" "${PODS_ROOT}/Headers/Public/NESDeltaCore" "${PODS_ROOT}/Headers/Public/Roxas" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SMCalloutView" "${PODS_ROOT}/Headers/Public/SNESDeltaCore" "${PODS_ROOT}/Headers/Public/SQLite.swift" "${PODS_ROOT}/Headers/Public/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/include" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/src" "${PODS_CONFIGURATION_BUILD_DIR}" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleAPIClientForREST" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Roxas" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" -OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DSDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBADeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBCDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/Harmony" -isystem "${PODS_ROOT}/Headers/Public/N64DeltaCore" -isystem "${PODS_ROOT}/Headers/Public/NESDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/SNESDeltaCore" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/GoogleSignIn/Frameworks" -DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm -fvisibility=hidden -DHAVE_CSTDINT -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -D__VEC4_OPT -fvisibility=hidden -funsigned-char -ffast-math -finline -fno-builtin -fno-common -fomit-frame-pointer -funroll-loops -fstrict-aliasing -DHAVE_STDINT_H -DARM -OTHER_LDFLAGS = $(inherited) -ObjC -Wl,-exported_symbol,_Video_PluginStartup,-exported_symbol,_Video_PluginShutdown,-exported_symbol,_Video_PluginGetVersion,-exported_symbol,_Video_RomOpen,-exported_symbol,_Video_RomClosed,-exported_symbol,_ConfigGetSharedDataFilepath,-exported_symbol,_ConfigGetUserConfigPath,-exported_symbol,_ConfigGetUserCachePath,-exported_symbol,_ConfigGetUserDataPath,-exported_symbol,_ConfigOpenSection,-exported_symbol,_ConfigDeleteSection,-exported_symbol,_ConfigSaveSection,-exported_symbol,_ConfigSaveFile,-exported_symbol,_ConfigSetDefaultInt,-exported_symbol,_ConfigSetDefaultFloat,-exported_symbol,_ConfigSetDefaultBool,-exported_symbol,_ConfigSetDefaultString,-exported_symbol,_ConfigGetParamInt,-exported_symbol,_ConfigGetParamFloat,-exported_symbol,_ConfigGetParamBool,-exported_symbol,_ConfigGetParamString,-exported_symbol,_ConfigExternalGetParameter,-exported_symbol,_ConfigExternalOpen,-exported_symbol,_ConfigExternalClose,-exported_symbol,_VidExt_Init,-exported_symbol,_VidExt_Quit,-exported_symbol,_VidExt_ListFullscreenModes,-exported_symbol,_VidExt_SetVideoMode,-exported_symbol,_VidExt_SetCaption,-exported_symbol,_VidExt_ToggleFullScreen,-exported_symbol,_VidExt_ResizeWindow,-exported_symbol,_VidExt_GL_GetProcAddress,-exported_symbol,_VidExt_GL_SetAttribute,-exported_symbol,_VidExt_GL_GetAttribute,-exported_symbol,_VidExt_GL_SwapBuffers,-exported_symbol,_ChangeWindow,-exported_symbol,_InitiateGFX,-exported_symbol,_MoveScreen,-exported_symbol,_ProcessDList,-exported_symbol,_ProcessRDPList,-exported_symbol,_ShowCFB,-exported_symbol,_UpdateScreen,-exported_symbol,_ViStatusChanged,-exported_symbol,_ViWidthChanged,-exported_symbol,_ReadScreen2,-exported_symbol,_SetRenderingCallback,-exported_symbol,_FBRead,-exported_symbol,_FBWrite,-exported_symbol,_FBGetFrameBufferInfo,-exported_symbol,_ResizeVideoOutput,-exported_symbol,_RSP_PluginStartup,-exported_symbol,_RSP_PluginShutdown,-exported_symbol,_RSP_PluginGetVersion,-exported_symbol,_DoRspCycles,-exported_symbol,_InitiateRSP,-exported_symbol,_RSP_RomClosed,-exported_symbol,_CoreGetAPIVersions,-exported_symbol,_ConfigGetParameter,-exported_symbol,_ConfigSetParameter,-exported_symbol,_CoreDoCommand -l"Alamofire" -l"DSDeltaCore" -l"DeltaCore" -l"GBADeltaCore" -l"GBCDeltaCore" -l"GTMSessionFetcher" -l"GoogleAPIClientForREST" -l"GoogleToolboxForMac" -l"Harmony" -l"N64DeltaCore" -l"NESDeltaCore" -l"Roxas" -l"SDWebImage" -l"SMCalloutView" -l"SNESDeltaCore" -l"SQLite.swift" -l"SwiftyDropbox" -l"ZIPFoundation" -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "CoreText" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "GoogleSignIn" -framework "ImageIO" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" -OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DSDeltaCore" "${PODS_ROOT}/Headers/Public/DeltaCore" "${PODS_ROOT}/Headers/Public/GBADeltaCore" "${PODS_ROOT}/Headers/Public/GBCDeltaCore" "${PODS_ROOT}/Headers/Public/GTMSessionFetcher" "${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST" "${PODS_ROOT}/Headers/Public/GoogleToolboxForMac" "${PODS_ROOT}/Headers/Public/Harmony" "${PODS_ROOT}/Headers/Public/MelonDSDeltaCore" "${PODS_ROOT}/Headers/Public/N64DeltaCore" "${PODS_ROOT}/Headers/Public/NESDeltaCore" "${PODS_ROOT}/Headers/Public/Roxas" "${PODS_ROOT}/Headers/Public/SDWebImage" "${PODS_ROOT}/Headers/Public/SMCalloutView" "${PODS_ROOT}/Headers/Public/SNESDeltaCore" "${PODS_ROOT}/Headers/Public/SQLite.swift" "${PODS_ROOT}/Headers/Public/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/DSDeltaCore/desmume/desmume/src/libretro-common/include" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/include" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/SFML/src" "${PODS_CONFIGURATION_BUILD_DIR}" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/MelonDSDeltaCore/melonDS/src" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "${PODS_CONFIGURATION_BUILD_DIR}" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/subprojects/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/libMupen64Plus/SDL" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src/inc" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleAPIClientForREST" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleToolboxForMac" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Roxas" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SMCalloutView" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +OTHER_CFLAGS = $(inherited) -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/MelonDSDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/DSDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBADeltaCore" -isystem "${PODS_ROOT}/Headers/Public/GBCDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/Harmony" -isystem "${PODS_ROOT}/Headers/Public/MelonDSDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/N64DeltaCore" -isystem "${PODS_ROOT}/Headers/Public/NESDeltaCore" -isystem "${PODS_ROOT}/Headers/Public/SNESDeltaCore" -iframework "${PODS_ROOT}/Crashlytics/iOS" -iframework "${PODS_ROOT}/Fabric/iOS" -iframework "${PODS_ROOT}/GoogleSignIn/Frameworks" -DHOST_DARWIN -DDESMUME_COCOA -DHAVE_OPENGL -DHAVE_LIBZ -DANDROID -fexceptions -ftree-vectorize -DCOMPRESS_MT -DIOS -DOBJ_C -marm -fvisibility=hidden -DHAVE_CSTDINT -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -fno-strict-aliasing -DGCC -pthread -fPIC -D__unix__ -ffast-math -D__VEC4_OPT -fvisibility=hidden -funsigned-char -ffast-math -finline -fno-builtin -fno-common -fomit-frame-pointer -funroll-loops -fstrict-aliasing -DHAVE_STDINT_H -DARM +OTHER_LDFLAGS = $(inherited) -ObjC -Wl,-exported_symbol,_Video_PluginStartup,-exported_symbol,_Video_PluginShutdown,-exported_symbol,_Video_PluginGetVersion,-exported_symbol,_Video_RomOpen,-exported_symbol,_Video_RomClosed,-exported_symbol,_ConfigGetSharedDataFilepath,-exported_symbol,_ConfigGetUserConfigPath,-exported_symbol,_ConfigGetUserCachePath,-exported_symbol,_ConfigGetUserDataPath,-exported_symbol,_ConfigOpenSection,-exported_symbol,_ConfigDeleteSection,-exported_symbol,_ConfigSaveSection,-exported_symbol,_ConfigSaveFile,-exported_symbol,_ConfigSetDefaultInt,-exported_symbol,_ConfigSetDefaultFloat,-exported_symbol,_ConfigSetDefaultBool,-exported_symbol,_ConfigSetDefaultString,-exported_symbol,_ConfigGetParamInt,-exported_symbol,_ConfigGetParamFloat,-exported_symbol,_ConfigGetParamBool,-exported_symbol,_ConfigGetParamString,-exported_symbol,_ConfigExternalGetParameter,-exported_symbol,_ConfigExternalOpen,-exported_symbol,_ConfigExternalClose,-exported_symbol,_VidExt_Init,-exported_symbol,_VidExt_Quit,-exported_symbol,_VidExt_ListFullscreenModes,-exported_symbol,_VidExt_SetVideoMode,-exported_symbol,_VidExt_SetCaption,-exported_symbol,_VidExt_ToggleFullScreen,-exported_symbol,_VidExt_ResizeWindow,-exported_symbol,_VidExt_GL_GetProcAddress,-exported_symbol,_VidExt_GL_SetAttribute,-exported_symbol,_VidExt_GL_GetAttribute,-exported_symbol,_VidExt_GL_SwapBuffers,-exported_symbol,_ChangeWindow,-exported_symbol,_InitiateGFX,-exported_symbol,_MoveScreen,-exported_symbol,_ProcessDList,-exported_symbol,_ProcessRDPList,-exported_symbol,_ShowCFB,-exported_symbol,_UpdateScreen,-exported_symbol,_ViStatusChanged,-exported_symbol,_ViWidthChanged,-exported_symbol,_ReadScreen2,-exported_symbol,_SetRenderingCallback,-exported_symbol,_FBRead,-exported_symbol,_FBWrite,-exported_symbol,_FBGetFrameBufferInfo,-exported_symbol,_ResizeVideoOutput,-exported_symbol,_RSP_PluginStartup,-exported_symbol,_RSP_PluginShutdown,-exported_symbol,_RSP_PluginGetVersion,-exported_symbol,_DoRspCycles,-exported_symbol,_InitiateRSP,-exported_symbol,_RSP_RomClosed,-exported_symbol,_CoreGetAPIVersions,-exported_symbol,_ConfigGetParameter,-exported_symbol,_ConfigSetParameter,-exported_symbol,_CoreDoCommand -l"Alamofire" -l"DSDeltaCore" -l"DeltaCore" -l"GBADeltaCore" -l"GBCDeltaCore" -l"GTMSessionFetcher" -l"GoogleAPIClientForREST" -l"GoogleToolboxForMac" -l"Harmony" -l"MelonDSDeltaCore" -l"N64DeltaCore" -l"NESDeltaCore" -l"Roxas" -l"SDWebImage" -l"SMCalloutView" -l"SNESDeltaCore" -l"SQLite.swift" -l"SwiftyDropbox" -l"ZIPFoundation" -l"c++" -l"sqlite3" -l"z" -framework "CoreGraphics" -framework "CoreText" -framework "Crashlytics" -framework "Fabric" -framework "Foundation" -framework "GoogleSignIn" -framework "ImageIO" -framework "LocalAuthentication" -framework "SafariServices" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -framework "WebKit" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore/DSDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore/GBADeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/Harmony/Harmony.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/MelonDSDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore/SNESDeltaCore.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift/SQLite.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox/SwiftyDropbox.modulemap" -Xcc -fmodule-map-file="${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation/ZIPFoundation.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GTMSessionFetcher/GTMSessionFetcher.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleAPIClientForREST/GoogleAPIClientForREST.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/GoogleToolboxForMac/GoogleToolboxForMac.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/Roxas/Roxas.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SDWebImage/SDWebImage.modulemap" -Xcc -fmodule-map-file="${PODS_ROOT}/Headers/Public/SMCalloutView/SMCalloutView.modulemap" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods SWIFT_ACTIVE_COMPILATION_CONDITIONS = STATIC_LIBRARY FRAMEWORK NATIVE -SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" +SWIFT_INCLUDE_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/DSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBADeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/Harmony" "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SNESDeltaCore" "${PODS_CONFIGURATION_BUILD_DIR}/SQLite.swift" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyDropbox" "${PODS_CONFIGURATION_BUILD_DIR}/ZIPFoundation" USER_HEADER_SEARCH_PATHS = "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/fex" "$(PODS_ROOT)/Headers/Private/GBADeltaCore/visualboyadvance-m/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/api" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src/osd" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/N64DeltaCore-Video/**" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/GLideN64/src" "$(PODS_ROOT)/Headers/Private/N64DeltaCore/Mupen64Plus/mupen64plus-core/src" "${PODS_CONFIGURATION_BUILD_DIR}/DeltaCore/Swift Compatibility Header" "$(PODS_ROOT)/Headers/Private/SNESDeltaCore/snes9x" USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES From 6f336a82a5be26ff7c2d6b030b72d547d82eaf68 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 23 Apr 2020 17:12:07 -0700 Subject: [PATCH 018/105] Adds DS settings UI to import melonDS BIOS + switch DS cores --- Delta.xcodeproj/project.pbxproj | 14 +- Delta/Base.lproj/Main.storyboard | 37 +- Delta/Base.lproj/Settings.storyboard | 274 ++++++++++++- Delta/Emulation/GameViewController.swift | 40 +- .../Extensions/DeltaCoreProtocol+Delta.swift | 26 -- .../GameCollectionViewController.swift | 21 + .../Game Selection/GamesViewController.swift | 17 + .../MelonDSCoreSettingsViewController.swift | 362 ++++++++++++++++++ Delta/Settings/Settings.swift | 36 +- Delta/Settings/SettingsViewController.swift | 9 + Delta/Systems/DeltaCoreProtocol+Delta.swift | 93 +++++ Delta/Systems/System.swift | 7 + 12 files changed, 883 insertions(+), 53 deletions(-) delete mode 100644 Delta/Extensions/DeltaCoreProtocol+Delta.swift create mode 100644 Delta/Settings/Cores/MelonDSCoreSettingsViewController.swift create mode 100644 Delta/Systems/DeltaCoreProtocol+Delta.swift diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 29744c4..dbcbb81 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -133,6 +133,7 @@ BFE56E1923EB7BE00014FECD /* UIImage+SymbolFallback.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE56E1823EB7BE00014FECD /* UIImage+SymbolFallback.swift */; }; BFE593CA21F3F8B7003412A6 /* GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593C921F3F8B7003412A6 /* GameSave.swift */; }; BFE593CC21F3F8C2003412A6 /* _GameSave.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE593CB21F3F8C2003412A6 /* _GameSave.swift */; }; + BFE9908024451E15006409A7 /* MelonDSCoreSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE9907F24451E15006409A7 /* MelonDSCoreSettingsViewController.swift */; }; BFEE943D23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = BFEE943C23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel */; }; BFEF24F31F7DD4FD00454C62 /* SaveStateMigrationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */; }; BFF6452E1F7CC5060056533E /* GameControllerInputMappingTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF6B82A41F7CC2A300042BFB /* GameControllerInputMappingTransformer.swift */; }; @@ -293,6 +294,7 @@ BFE56E1823EB7BE00014FECD /* UIImage+SymbolFallback.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+SymbolFallback.swift"; sourceTree = ""; }; BFE593C921F3F8B7003412A6 /* GameSave.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameSave.swift; sourceTree = ""; }; BFE593CB21F3F8C2003412A6 /* _GameSave.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = _GameSave.swift; sourceTree = ""; }; + BFE9907F24451E15006409A7 /* MelonDSCoreSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MelonDSCoreSettingsViewController.swift; sourceTree = ""; }; BFEC732C1AAECC4A00650035 /* Roxas.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Roxas.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFEE943C23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Delta4ToDelta5.xcmappingmodel; sourceTree = ""; }; BFEF24F21F7DD4FB00454C62 /* SaveStateMigrationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveStateMigrationPolicy.swift; sourceTree = ""; }; @@ -348,7 +350,6 @@ BF5942901E09BD1A0051894B /* NSFetchedResultsController+Conveniences.m */, BF5942911E09BD1A0051894B /* NSManagedObject+Conveniences.swift */, BF5942921E09BD1A0051894B /* NSManagedObjectContext+Conveniences.swift */, - BFBAB2E21EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift */, BF18B61E1E2985F900F70067 /* UIAlertController+Importing.swift */, BFC6F7B71F435BC500221B96 /* Input+Display.swift */, BF6424841F5CBDC900D6AB44 /* UIView+ParentViewController.swift */, @@ -606,6 +607,7 @@ isa = PBXGroup; children = ( BF4828851F9028F500028B97 /* System.swift */, + BFBAB2E21EB685A2004E0B0E /* DeltaCoreProtocol+Delta.swift */, ); path = Systems; sourceTree = ""; @@ -666,6 +668,7 @@ BF5E7F451B9A652600AE44F8 /* Settings.storyboard */, BF5E7F431B9A650B00AE44F8 /* SettingsViewController.swift */, BFB3645723245A6000CD0EB1 /* LicensesViewController.swift */, + BFE9907E24451DE6006409A7 /* Cores */, BF71CF851FE8FFF1001F1613 /* App Icon Shortcuts */, BF11734E1DA32CEC00047DF8 /* Controllers */, BF1DAD5B1D9F574900E752A7 /* Controller Skins */, @@ -706,6 +709,14 @@ path = "Popover Menu"; sourceTree = ""; }; + BFE9907E24451DE6006409A7 /* Cores */ = { + isa = PBXGroup; + children = ( + BFE9907F24451E15006409A7 /* MelonDSCoreSettingsViewController.swift */, + ); + path = Cores; + sourceTree = ""; + }; BFEC732F1AAECCBD00650035 /* Resources */ = { isa = PBXGroup; children = ( @@ -1110,6 +1121,7 @@ BF1173501DA32CF600047DF8 /* ControllersSettingsViewController.swift in Sources */, BFFC461E1D59823500AF2CC6 /* GamesPresentationController.swift in Sources */, BF99A5971DC2F9C400468E9E /* ControllerSkinTableViewCell.swift in Sources */, + BFE9908024451E15006409A7 /* MelonDSCoreSettingsViewController.swift in Sources */, BF5942861E09BC8B0051894B /* _Cheat.swift in Sources */, BF5E7F441B9A650B00AE44F8 /* SettingsViewController.swift in Sources */, BF8CA9361F5F651900499FDD /* PopoverMenuController.swift in Sources */, diff --git a/Delta/Base.lproj/Main.storyboard b/Delta/Base.lproj/Main.storyboard index ec83268..f5f1dc9 100644 --- a/Delta/Base.lproj/Main.storyboard +++ b/Delta/Base.lproj/Main.storyboard @@ -1,9 +1,9 @@ - + - + @@ -84,6 +84,7 @@ + @@ -265,11 +266,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + diff --git a/Delta/Base.lproj/Settings.storyboard b/Delta/Base.lproj/Settings.storyboard index e97a4aa..8f55dd4 100644 --- a/Delta/Base.lproj/Settings.storyboard +++ b/Delta/Base.lproj/Settings.storyboard @@ -1,9 +1,9 @@ - + - + @@ -18,7 +18,7 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Delta/Emulation/GameViewController.swift b/Delta/Emulation/GameViewController.swift index f452190..d1db7cb 100644 --- a/Delta/Emulation/GameViewController.swift +++ b/Delta/Emulation/GameViewController.swift @@ -11,6 +11,8 @@ import UIKit import DeltaCore import GBADeltaCore +import struct DSDeltaCore.DS + import Roxas private var kvoContext = 0 @@ -309,6 +311,19 @@ extension GameViewController self.updateControllers() } + override func viewDidAppear(_ animated: Bool) + { + super.viewDidAppear(animated) + + if self.emulatorCore?.deltaCore == DS.core, UserDefaults.standard.desmumeDeprecatedAlertCount < 3 + { + let toastView = RSTToastView(text: NSLocalizedString("DeSmuME Core Deprecated", comment: ""), detailText: NSLocalizedString("Switch to the melonDS core in Settings for latest improvements.", comment: "")) + self.show(toastView, duration: 5.0) + + UserDefaults.standard.desmumeDeprecatedAlertCount += 1 + } + } + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { super.viewWillTransition(to: size, with: coordinator) @@ -1023,6 +1038,16 @@ extension GameViewController: GameViewControllerDelegate } } +private extension GameViewController +{ + func show(_ toastView: RSTToastView, duration: TimeInterval = 3.0) + { + toastView.textLabel.textAlignment = .center + toastView.presentationEdge = .top + toastView.show(in: self.view, duration: duration) + } +} + //MARK: - Notifications - private extension GameViewController { @@ -1121,16 +1146,7 @@ private extension GameViewController func presentToastView() { let toastView = RSTToastView(text: NSLocalizedString("Autorotation Disabled", comment: ""), detailText: NSLocalizedString("Pause game to change orientation.", comment: "")) - toastView.textLabel.textAlignment = .center - toastView.presentationEdge = .bottom - - if let traits = self.controllerView.controllerSkinTraits, traits.orientation == .landscape, self.controllerView?.controllerSkin?.gameScreenFrame(for: traits) == nil - { - // Only change landscape vertical offset if there is no custom game screen frame for the current controller skin. - toastView.edgeOffset.vertical = 30 - } - - toastView.show(in: self.gameView, duration: 3.0) + self.show(toastView) } DispatchQueue.main.async { @@ -1172,4 +1188,8 @@ private extension GameViewController } } } + +private extension UserDefaults +{ + @NSManaged var desmumeDeprecatedAlertCount: Int } diff --git a/Delta/Extensions/DeltaCoreProtocol+Delta.swift b/Delta/Extensions/DeltaCoreProtocol+Delta.swift deleted file mode 100644 index 662f511..0000000 --- a/Delta/Extensions/DeltaCoreProtocol+Delta.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// DeltaCoreProtocol+Delta.swift -// Delta -// -// Created by Riley Testut on 4/30/17. -// Copyright © 2017 Riley Testut. All rights reserved. -// - -import DeltaCore - -extension DeltaCoreProtocol -{ - var supportedRates: ClosedRange { - guard let system = System(gameType: self.gameType) else { return 1...1 } - - switch system - { - case .nes: return 1...4 - case .snes: return 1...4 - case .gbc: return 1...4 - case .gba: return 1...3 - case .n64: return 1...3 - case .ds: return 1...1 - } - } -} diff --git a/Delta/Game Selection/GameCollectionViewController.swift b/Delta/Game Selection/GameCollectionViewController.swift index eb2dc9e..31ffe34 100644 --- a/Delta/Game Selection/GameCollectionViewController.swift +++ b/Delta/Game Selection/GameCollectionViewController.swift @@ -11,6 +11,7 @@ import MobileCoreServices import AVFoundation import DeltaCore +import MelonDSDeltaCore import Roxas import Harmony @@ -23,6 +24,7 @@ extension GameCollectionViewController { case alreadyRunning case downloadingGameSave + case biosNotFound } } @@ -328,6 +330,16 @@ private extension GameCollectionViewController alertController.addAction(.ok) self.present(alertController, animated: true, completion: nil) } + catch LaunchError.biosNotFound + { + let alertController = UIAlertController(title: NSLocalizedString("Missing Required DS Files", comment: ""), message: NSLocalizedString("Delta requires certain files to play Nintendo DS games. Please import them to launch this game.", comment: ""), preferredStyle: .alert) + alertController.addAction(UIAlertAction(title: NSLocalizedString("Import Files", comment: ""), style: .default) { _ in + self.performSegue(withIdentifier: "showDSSettings", sender: nil) + }) + alertController.addAction(.cancel) + + self.present(alertController, animated: true, completion: nil) + } catch { let alertController = UIAlertController(title: NSLocalizedString("Unable to Launch Game", comment: ""), error: error) @@ -378,6 +390,15 @@ private extension GameCollectionViewController } } } + + if game.type == .ds && Settings.preferredCore(for: .ds) == MelonDS.core + { + guard + FileManager.default.fileExists(atPath: MelonDSEmulatorBridge.shared.bios7URL.path) && + FileManager.default.fileExists(atPath: MelonDSEmulatorBridge.shared.bios9URL.path) && + FileManager.default.fileExists(atPath: MelonDSEmulatorBridge.shared.firmwareURL.path) + else { throw LaunchError.biosNotFound } + } } } diff --git a/Delta/Game Selection/GamesViewController.swift b/Delta/Game Selection/GamesViewController.swift index 4a84687..ee7cd8b 100644 --- a/Delta/Game Selection/GamesViewController.swift +++ b/Delta/Game Selection/GamesViewController.swift @@ -75,6 +75,7 @@ class GamesViewController: UIViewController NotificationCenter.default.addObserver(self, selector: #selector(GamesViewController.syncingDidStart(_:)), name: SyncCoordinator.didStartSyncingNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(GamesViewController.syncingDidFinish(_:)), name: SyncCoordinator.didFinishSyncingNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(GamesViewController.settingsDidChange(_:)), name: .settingsDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(GamesViewController.emulationDidQuit(_:)), name: EmulatorCore.emulationDidQuitNotification, object: nil) } } @@ -529,6 +530,22 @@ private extension GamesViewController { self.quitEmulation() } + + @objc func settingsDidChange(_ notification: Notification) + { + guard let emulatorCore = self.activeEmulatorCore else { return } + guard let game = emulatorCore.game as? Game else { return } + + game.managedObjectContext?.performAndWait { + guard + let name = notification.userInfo?[Settings.NotificationUserInfoKey.name] as? String, name == Settings.preferredCoreSettingsKey(for: emulatorCore.game.type), + let core = notification.userInfo?[Settings.NotificationUserInfoKey.core] as? DeltaCoreProtocol, core != emulatorCore.deltaCore + else { return } + + emulatorCore.stop() + self.quitEmulation() + } + } } //MARK: - UIPageViewController - diff --git a/Delta/Settings/Cores/MelonDSCoreSettingsViewController.swift b/Delta/Settings/Cores/MelonDSCoreSettingsViewController.swift new file mode 100644 index 0000000..8b742af --- /dev/null +++ b/Delta/Settings/Cores/MelonDSCoreSettingsViewController.swift @@ -0,0 +1,362 @@ +// +// MelonDSCoreSettingsViewController.swift +// Delta +// +// Created by Riley Testut on 4/13/20. +// Copyright © 2020 Riley Testut. All rights reserved. +// + +import UIKit +import SafariServices +import MobileCoreServices + +import DeltaCore +import MelonDSDeltaCore + +import struct DSDeltaCore.DS + +import Roxas + +private extension MelonDSCoreSettingsViewController +{ + enum Section: Int + { + case general + case bios + case changeCore + } + + enum BIOS: Int + { + case bios7 + case bios9 + case firmware + + var fileURL: URL { + switch self + { + case .bios7: return MelonDSEmulatorBridge.shared.bios7URL + case .bios9: return MelonDSEmulatorBridge.shared.bios9URL + case .firmware: return MelonDSEmulatorBridge.shared.firmwareURL + } + } + } +} + +class MelonDSCoreSettingsViewController: UITableViewController +{ + private var importDestinationURL: URL? + + override func viewDidLoad() + { + super.viewDidLoad() + + if let navigationController = self.navigationController, navigationController.viewControllers.first != self + { + self.navigationItem.rightBarButtonItem = nil + } + + NotificationCenter.default.addObserver(self, selector: #selector(MelonDSCoreSettingsViewController.willEnterForeground(_:)), name: UIApplication.willEnterForegroundNotification, object: nil) + } + + override func viewWillAppear(_ animated: Bool) + { + super.viewWillAppear(animated) + + self.tableView.reloadData() + } + + override func viewDidDisappear(_ animated: Bool) + { + super.viewDidDisappear(animated) + + if let core = Delta.registeredCores[.ds] + { + DatabaseManager.shared.performBackgroundTask { (context) in + // Prepare database in case we changed/updated cores. + DatabaseManager.shared.prepare(core, in: context) + context.saveWithErrorLogging() + } + } + } +} + +private extension MelonDSCoreSettingsViewController +{ + func openMetadataURL(for key: DeltaCoreMetadata.Key) + { + guard let metadata = Settings.preferredCore(for: .ds)?.metadata else { return } + + let item = metadata[key] + guard let url = item?.url else { + if let indexPath = self.tableView.indexPathForSelectedRow + { + self.tableView.deselectRow(at: indexPath, animated: true) + } + + return + } + + let safariViewController = SFSafariViewController(url: url) + safariViewController.preferredControlTintColor = .deltaPurple + self.present(safariViewController, animated: true, completion: nil) + } + + func locate(_ bios: BIOS) + { + self.importDestinationURL = bios.fileURL + + var supportedTypes = [kUTTypeItem as String, kUTTypeContent as String, "com.apple.macbinary-archive" /* System UTI for .bin */] + + // Explicitly support files with .bin and .rom extensions. + if let binTypes = UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, "bin" as CFString, nil)?.takeRetainedValue() + { + let types = (binTypes as NSArray).map { $0 as! String } + supportedTypes.append(contentsOf: types) + } + + if let romTypes = UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, "rom" as CFString, nil)?.takeRetainedValue() + { + let types = (romTypes as NSArray).map { $0 as! String } + supportedTypes.append(contentsOf: types) + } + + let documentPicker = UIDocumentPickerViewController(documentTypes: supportedTypes, in: .import) + documentPicker.delegate = self + + if #available(iOS 13.0, *) + { + documentPicker.overrideUserInterfaceStyle = .dark + } + + self.present(documentPicker, animated: true, completion: nil) + } + + func changeCore() + { + let alertController = UIAlertController(title: NSLocalizedString("Change Emulator Core", comment: ""), message: NSLocalizedString("Save states are not compatible between different emulator cores. Make sure to use in-game saves in order to keep using your save data.\n\nYour existing save states will not be deleted and will be available whenever you switch cores again.", comment: ""), preferredStyle: .actionSheet) + + var desmumeActionTitle = DS.core.metadata?.name.value ?? DS.core.name + var melonDSActionTitle = MelonDS.core.metadata?.name.value ?? MelonDS.core.name + + if Settings.preferredCore(for: .ds) == DS.core + { + desmumeActionTitle += " ✓" + } + else + { + melonDSActionTitle += " ✓" + } + + alertController.addAction(UIAlertAction(title: desmumeActionTitle, style: .default, handler: { (action) in + Settings.setPreferredCore(DS.core, for: .ds) + self.tableView.reloadData() + })) + + alertController.addAction(UIAlertAction(title: melonDSActionTitle, style: .default, handler: { (action) in + Settings.setPreferredCore(MelonDS.core, for: .ds) + self.tableView.reloadData() + })) + alertController.addAction(.cancel) + self.present(alertController, animated: true, completion: nil) + + if let indexPath = self.tableView.indexPathForSelectedRow + { + self.tableView.deselectRow(at: indexPath, animated: true) + } + } + + @objc func willEnterForeground(_ notification: Notification) + { + self.tableView.reloadData() + } +} + +extension MelonDSCoreSettingsViewController +{ + override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell + { + let cell = super.tableView(tableView, cellForRowAt: indexPath) + + switch Section(rawValue: indexPath.section)! + { + case .general: + let key = DeltaCoreMetadata.Key.allCases[indexPath.row] + let item = Settings.preferredCore(for: .ds)?.metadata?[key] + + cell.detailTextLabel?.text = item?.value ?? NSLocalizedString("-", comment: "") + cell.detailTextLabel?.textColor = .gray + + if item?.url != nil + { + cell.accessoryType = .disclosureIndicator + cell.selectionStyle = .default + } + else + { + cell.accessoryType = .none + cell.selectionStyle = .none + } + + cell.contentView.isHidden = (item == nil) + + case .bios: + let bios = BIOS(rawValue: indexPath.row)! + + if FileManager.default.fileExists(atPath: bios.fileURL.path) + { + cell.accessoryType = .checkmark + cell.detailTextLabel?.text = nil + cell.detailTextLabel?.textColor = .gray + } + else + { + cell.accessoryType = .disclosureIndicator + cell.detailTextLabel?.text = NSLocalizedString("Required", comment: "") + cell.detailTextLabel?.textColor = .red + } + + cell.selectionStyle = .default + + case .changeCore: break + } + + return cell + } + + override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) + { + guard let core = Settings.preferredCore(for: .ds) else { return } + + let key = DeltaCoreMetadata.Key.allCases[indexPath.row] + let lastKey = DeltaCoreMetadata.Key.allCases.reversed().first { core.metadata?[$0] != nil } + + if key == lastKey + { + // Hide separator for last visible row in case we've hidden additional rows. + cell.separatorInset.left = 0 + } + else + { + cell.separatorInset.left = self.view.layoutMargins.left + } + } + + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) + { + switch Section(rawValue: indexPath.section)! + { + case .general: + let key = DeltaCoreMetadata.Key.allCases[indexPath.row] + self.openMetadataURL(for: key) + + case .bios: + let bios = BIOS(rawValue: indexPath.row)! + self.locate(bios) + + case .changeCore: + self.changeCore() + } + } + + override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? + { + switch Section(rawValue: section)! + { + case .bios: + guard Settings.preferredCore(for: .ds) == MelonDS.core else { return nil } + + default: break + } + + return super.tableView(tableView, titleForHeaderInSection: section) + } + + override func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? + { + switch Section(rawValue: section)! + { + case .bios: + guard Settings.preferredCore(for: .ds) == MelonDS.core else { return nil } + + default: break + } + + return super.tableView(tableView, titleForFooterInSection: section) + } + + override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat + { + switch Section(rawValue: indexPath.section)! + { + case .general: + let key = DeltaCoreMetadata.Key.allCases[indexPath.row] + guard Settings.preferredCore(for: .ds)?.metadata?[key] != nil else { return 0 } + + case .bios: + guard Settings.preferredCore(for: .ds) == MelonDS.core else { return 0 } + + default: break + } + + return super.tableView(tableView, heightForRowAt: indexPath) + } + + override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat + { + switch Section(rawValue: section)! + { + case .bios: + guard Settings.preferredCore(for: .ds) == MelonDS.core else { return 1 } + + default: break + } + + return super.tableView(tableView, heightForHeaderInSection: section) + } + + override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat + { + switch Section(rawValue: section)! + { + case .bios: + guard Settings.preferredCore(for: .ds) == MelonDS.core else { return 1 } + + default: break + } + + return super.tableView(tableView, heightForFooterInSection: section) + } +} + +extension MelonDSCoreSettingsViewController: UIDocumentPickerDelegate +{ + func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) + { + self.importDestinationURL = nil + self.tableView.reloadData() // Reloading index path causes cell to disappear... + } + + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) + { + defer { + self.importDestinationURL = nil + self.tableView.reloadData() // Reloading index path causes cell to disappear... + } + + guard let fileURL = urls.first, let destinationURL = self.importDestinationURL else { return } + + do + { + try FileManager.default.copyItem(at: fileURL, to: destinationURL, shouldReplace: true) + } + catch + { + let title = String(format: NSLocalizedString("Could not import %@.", comment: ""), fileURL.lastPathComponent) + + let alertController = UIAlertController(title: title, message: error.localizedDescription, preferredStyle: .alert) + alertController.addAction(.ok) + self.present(alertController, animated: true, completion: nil) + } + } +} diff --git a/Delta/Settings/Settings.swift b/Delta/Settings/Settings.swift index d88e11b..7e462f7 100644 --- a/Delta/Settings/Settings.swift +++ b/Delta/Settings/Settings.swift @@ -10,6 +10,8 @@ import Foundation import DeltaCore +import struct DSDeltaCore.DS + import Roxas extension Notification.Name @@ -25,6 +27,8 @@ extension Settings case system case traits + + case core } enum Name: String @@ -55,7 +59,8 @@ struct Settings #keyPath(UserDefaults.gameShortcutsMode): GameShortcutsMode.recent.rawValue, #keyPath(UserDefaults.isButtonHapticFeedbackEnabled): true, #keyPath(UserDefaults.isThumbstickHapticFeedbackEnabled): true, - #keyPath(UserDefaults.sortSaveStatesByOldestFirst): true] as [String : Any] + #keyPath(UserDefaults.sortSaveStatesByOldestFirst): true, + Settings.preferredCoreSettingsKey(for: .ds): DS.core.identifier] as [String : Any] UserDefaults.standard.register(defaults: defaults) } } @@ -177,6 +182,26 @@ extension Settings } } + static func preferredCore(for gameType: GameType) -> DeltaCoreProtocol? + { + let key = self.preferredCoreSettingsKey(for: gameType) + + let identifier = UserDefaults.standard.string(forKey: key) + + let core = System.allCores.first { $0.identifier == identifier } + return core + } + + static func setPreferredCore(_ core: DeltaCoreProtocol, for gameType: GameType) + { + Delta.register(core) + + let key = self.preferredCoreSettingsKey(for: gameType) + + UserDefaults.standard.set(core.identifier, forKey: key) + NotificationCenter.default.post(name: .settingsDidChange, object: nil, userInfo: [NotificationUserInfoKey.name: key, NotificationUserInfoKey.core: core]) + } + static func preferredControllerSkin(for system: System, traits: DeltaCore.ControllerSkin.Traits) -> ControllerSkin? { guard let userDefaultsKey = self.preferredControllerSkinKey(for: system, traits: traits) else { return nil } @@ -288,6 +313,15 @@ extension Settings } } +extension Settings +{ + static func preferredCoreSettingsKey(for gameType: GameType) -> String + { + let key = "core." + gameType.rawValue + return key + } +} + private extension Settings { static func preferredControllerSkinKey(for system: System, traits: DeltaCore.ControllerSkin.Traits) -> String? diff --git a/Delta/Settings/SettingsViewController.swift b/Delta/Settings/SettingsViewController.swift index 1cf116e..090688a 100644 --- a/Delta/Settings/SettingsViewController.swift +++ b/Delta/Settings/SettingsViewController.swift @@ -23,6 +23,7 @@ private extension SettingsViewController case hapticFeedback case syncing case threeDTouch + case cores case patreon case credits } @@ -31,6 +32,7 @@ private extension SettingsViewController { case controllers = "controllersSegue" case controllerSkins = "controllerSkinsSegue" + case dsSettings = "dsSettingsSegue" } enum SyncingRow: Int, CaseIterable @@ -143,6 +145,8 @@ class SettingsViewController: UITableViewController let system = System.registeredSystems[indexPath.row] preferredControllerSkinsViewController.system = system + + case Segue.dsSettings: break } } } @@ -341,6 +345,10 @@ extension SettingsViewController case .service: break } + case .cores: + let preferredCore = Settings.preferredCore(for: .ds) + cell.detailTextLabel?.text = preferredCore?.metadata?.name.value ?? preferredCore?.name ?? NSLocalizedString("Unknown", comment: "") + case .controllerOpacity, .hapticFeedback, .threeDTouch, .patreon, .credits: break } @@ -356,6 +364,7 @@ extension SettingsViewController { case .controllers: self.performSegue(withIdentifier: Segue.controllers.rawValue, sender: cell) case .controllerSkins: self.performSegue(withIdentifier: Segue.controllerSkins.rawValue, sender: cell) + case .cores: self.performSegue(withIdentifier: Segue.dsSettings.rawValue, sender: cell) case .controllerOpacity, .hapticFeedback, .threeDTouch, .syncing: break case .patreon: let patreonURL = URL(string: "altstore://patreon")! diff --git a/Delta/Systems/DeltaCoreProtocol+Delta.swift b/Delta/Systems/DeltaCoreProtocol+Delta.swift new file mode 100644 index 0000000..bad62a5 --- /dev/null +++ b/Delta/Systems/DeltaCoreProtocol+Delta.swift @@ -0,0 +1,93 @@ +// +// DeltaCoreProtocol+Delta.swift +// Delta +// +// Created by Riley Testut on 4/30/17. +// Copyright © 2017 Riley Testut. All rights reserved. +// + +import DeltaCore + +import NESDeltaCore +import SNESDeltaCore +import GBCDeltaCore +import GBADeltaCore +import N64DeltaCore +import MelonDSDeltaCore + +// Legacy Cores +import struct DSDeltaCore.DS + +@dynamicMemberLookup +struct DeltaCoreMetadata +{ + enum Key: CaseIterable + { + case name + case developer + case source + case donate + } + + struct Item + { + var value: String + var url: URL? + } + + var name: Item { self.items[.name]! } + private let items: [Key: Item] + + init?(_ items: [Key: Item]) + { + guard items.keys.contains(.name) else { return nil } + self.items = items + } + + subscript(dynamicMember keyPath: KeyPath) -> Item? + { + let key = Key.self[keyPath: keyPath] + return self[key] + } + + subscript(_ key: Key) -> Item? + { + let item = self.items[key] + return item + } +} + +extension DeltaCoreProtocol +{ + var supportedRates: ClosedRange { + switch self + { + case NES.core: return 1...4 + case SNES.core: return 1...4 + case GBC.core: return 1...4 + case GBA.core: return 1...3 + case N64.core: return 1...3 + case DS.core: return 1...3 + case MelonDS.core: return 1...2 + default: return 1...2 + } + } + + var metadata: DeltaCoreMetadata? { + switch self + { + case DS.core: + return DeltaCoreMetadata([.name: .init(value: NSLocalizedString("DeSmuME (Legacy)", comment: ""), url: URL(string: "http://desmume.org")), + .developer: .init(value: NSLocalizedString("DeSmuME team", comment: ""), url: URL(string: "https://wiki.desmume.org/index.php?title=DeSmuME:About")), + .source: .init(value: NSLocalizedString("GitHub", comment: ""), url: URL(string: "https://github.com/TASVideos/desmume"))]) + + case MelonDS.core: + return DeltaCoreMetadata([.name: .init(value: NSLocalizedString("melonDS", comment: ""), url: URL(string: "http://melonds.kuribo64.net")), + .developer: .init(value: NSLocalizedString("Arisotura", comment: ""), url: URL(string: "https://twitter.com/Arisotura")), + .source: .init(value: NSLocalizedString("GitHub", comment: ""), url: URL(string: "https://github.com/Arisotura/melonDS")), + .donate: .init(value: NSLocalizedString("Patreon", comment: ""), url: URL(string: "https://www.patreon.com/staplebutter"))]) + + default: return nil + } + } +} diff --git a/Delta/Systems/System.swift b/Delta/Systems/System.swift index 8b9ab6f..2ece7db 100644 --- a/Delta/Systems/System.swift +++ b/Delta/Systems/System.swift @@ -15,6 +15,9 @@ import NESDeltaCore import N64DeltaCore import MelonDSDeltaCore +// Legacy Cores +import struct DSDeltaCore.DS + enum System: CaseIterable { case nes @@ -28,6 +31,10 @@ enum System: CaseIterable let systems = System.allCases.filter { Delta.registeredCores.keys.contains($0.gameType) } return systems } + + static var allCores: [DeltaCoreProtocol] { + return [NES.core, SNES.core, N64.core, GBC.core, GBA.core, DS.core, MelonDS.core] + } } extension System From 77da71cd62a09da31e4dc31fa1d347da4740fb7e Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 23 Apr 2020 17:18:59 -0700 Subject: [PATCH 019/105] =?UTF-8?q?Adds=20=E2=80=9CHome=20Screen=E2=80=9D?= =?UTF-8?q?=20DS=20game=20to=20boot=20into=20DS=20main=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Delta.xcodeproj/project.pbxproj | 4 + Delta/Database/DatabaseManager.swift | 69 ++++++++++++++++-- Delta/Database/Model/Human/Game.swift | 9 +++ Delta/Database/Model/Human/GameSave.swift | 7 ++ Delta/Database/Model/Human/SaveState.swift | 6 +- .../ControllerSkin+Configuring.swift | 12 +++ .../GameCollectionViewController.swift | 1 + Resources/DS.png | Bin 0 -> 12511 bytes 8 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 Resources/DS.png diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index dbcbb81..2ba383d 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -125,6 +125,7 @@ BFCEA67E1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */; }; BFD097211D3A01B8005A44C2 /* SaveStatesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3540041C5DA70400C1184C /* SaveStatesViewController.swift */; }; BFD1EF402336BD8800D197CF /* UIDevice+Processor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFD1EF3F2336BD8800D197CF /* UIDevice+Processor.swift */; }; + BFDB0FEC24464758001C727C /* DS.png in Resources */ = {isa = PBXBuildFile; fileRef = BFDB0FEB24464757001C727C /* DS.png */; }; BFDB3418219E4B1700595A62 /* SyncStatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDB3417219E4B1700595A62 /* SyncStatusViewController.swift */; }; BFDCA1E6244EBAA900B8FBDB /* liblibDeSmuME.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BFDCA1E5244EBAA900B8FBDB /* liblibDeSmuME.a */; }; BFDD04F11D5E2C27002D450E /* GameCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */; }; @@ -281,6 +282,7 @@ BFC9B7381CEFCD34008629BB /* CheatsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheatsViewController.swift; sourceTree = ""; }; BFCEA67D1D56FF640061A534 /* UIViewControllerContextTransitioning+Conveniences.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIViewControllerContextTransitioning+Conveniences.swift"; sourceTree = ""; }; BFD1EF3F2336BD8800D197CF /* UIDevice+Processor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIDevice+Processor.swift"; sourceTree = ""; }; + BFDB0FEB24464757001C727C /* DS.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DS.png; sourceTree = ""; }; BFDB3417219E4B1700595A62 /* SyncStatusViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncStatusViewController.swift; sourceTree = ""; }; BFDCA1E5244EBAA900B8FBDB /* liblibDeSmuME.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liblibDeSmuME.a; sourceTree = BUILT_PRODUCTS_DIR; }; BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameCollectionViewController.swift; sourceTree = ""; }; @@ -721,6 +723,7 @@ isa = PBXGroup; children = ( BF6BB2451BB73FE800CCF94A /* Assets.xcassets */, + BFDB0FEB24464757001C727C /* DS.png */, BF02D5D91DDEBB3000A5E131 /* openvgdb.sqlite */, ); path = Resources; @@ -920,6 +923,7 @@ BF6BF3211EB82362008E83CD /* GamesDatabase.storyboard in Resources */, BFAB9F88219A4B670080EC7D /* GoogleService-Info.plist in Resources */, BF3540001C5DA3C500C1184C /* PausePresentationControllerContentView.xib in Resources */, + BFDB0FEC24464758001C727C /* DS.png in Resources */, BF5E7F461B9A652600AE44F8 /* Settings.storyboard in Resources */, BF02D5DA1DDEBB3000A5E131 /* openvgdb.sqlite in Resources */, BF71CF8A1FE904B1001F1613 /* GameTableViewCell.xib in Resources */, diff --git a/Delta/Database/DatabaseManager.swift b/Delta/Database/DatabaseManager.swift index e79c49d..1358e29 100644 --- a/Delta/Database/DatabaseManager.swift +++ b/Delta/Database/DatabaseManager.swift @@ -14,6 +14,7 @@ import DeltaCore import Harmony import Roxas import ZIPFoundation +import MelonDSDeltaCore extension DatabaseManager { @@ -74,6 +75,66 @@ extension DatabaseManager } } } + + func prepare(_ core: DeltaCoreProtocol, in context: NSManagedObjectContext) + { + guard let system = System(gameType: core.gameType) else { return } + + if let skin = ControllerSkin(system: system, context: context) + { + print("Updated default skin (\(skin.identifier)) for system:", system) + } + else + { + print("Failed to update default skin for system:", system) + } + + switch system + { + case .ds where core == MelonDS.core: + let predicate = NSPredicate(format: "%K == %@", #keyPath(Game.identifier), Game.melonDSBIOSIdentifier) + if let _ = Game.instancesWithPredicate(predicate, inManagedObjectContext: context, type: Game.self).first + { + // Game already exists, so don't do anything. + break + } + + let game = Game(context: context) + game.identifier = Game.melonDSBIOSIdentifier + game.type = .ds + game.filename = "melonDS-BIOS" + + game.name = NSLocalizedString("Home Screen", comment: "") + + if let sourceURL = Bundle.main.url(forResource: "DS", withExtension: "png") + { + do + { + let destinationURL = DatabaseManager.artworkURL(for: game) + try FileManager.default.copyItem(at: sourceURL, to: destinationURL, shouldReplace: true) + game.artworkURL = destinationURL + } + catch + { + print("Failed to copy default DS home screen artwork.", error) + } + } + + let gameCollection = GameCollection(context: context) + gameCollection.identifier = GameType.ds.rawValue + gameCollection.index = Int16(System.ds.year) + gameCollection.games.insert(game) + + case .ds: + let predicate = NSPredicate(format: "%K == %@", #keyPath(Game.identifier), Game.melonDSBIOSIdentifier) + if let game = Game.instancesWithPredicate(predicate, inManagedObjectContext: context, type: Game.self).first + { + context.delete(game) + } + + default: break + } + } } //MARK: - Update - @@ -113,13 +174,7 @@ private extension DatabaseManager for system in System.allCases { - guard let deltaControllerSkin = DeltaCore.ControllerSkin.standardControllerSkin(for: system.gameType) else { continue } - - let controllerSkin = ControllerSkin(context: context) - controllerSkin.isStandard = true - controllerSkin.filename = deltaControllerSkin.fileURL.lastPathComponent - - controllerSkin.configure(with: deltaControllerSkin) + self.prepare(system.deltaCore, in: context) } do diff --git a/Delta/Database/Model/Human/Game.swift b/Delta/Database/Model/Human/Game.swift index 77c4017..8dcc86a 100644 --- a/Delta/Database/Model/Human/Game.swift +++ b/Delta/Database/Model/Human/Game.swift @@ -11,6 +11,11 @@ import Foundation import DeltaCore import Harmony +public extension Game +{ + static let melonDSBIOSIdentifier = "com.rileytestut.MelonDSDeltaCore.BIOS" +} + @objc(Game) public class Game: _Game, GameProtocol { @@ -151,4 +156,8 @@ extension Game: Syncable public var syncableLocalizedName: String? { return self.name } + + public var isSyncingEnabled: Bool { + return self.identifier != Game.melonDSBIOSIdentifier + } } diff --git a/Delta/Database/Model/Human/GameSave.swift b/Delta/Database/Model/Human/GameSave.swift index da86b8b..caa122b 100644 --- a/Delta/Database/Model/Human/GameSave.swift +++ b/Delta/Database/Model/Human/GameSave.swift @@ -57,4 +57,11 @@ extension GameSave: Syncable public var syncableLocalizedName: String? { return self.game?.name } + + public var isSyncingEnabled: Bool { + // self.game may be nil if being downloaded, so don't enforce it. + // guard let identifier = self.game?.identifier else { return false } + + return self.game?.identifier != Game.melonDSBIOSIdentifier + } } diff --git a/Delta/Database/Model/Human/SaveState.swift b/Delta/Database/Model/Human/SaveState.swift index f676648..6456773 100644 --- a/Delta/Database/Model/Human/SaveState.swift +++ b/Delta/Database/Model/Human/SaveState.swift @@ -123,7 +123,11 @@ extension SaveState: Syncable } public var isSyncingEnabled: Bool { - return self.type != .auto && self.type != .quick + // self.game may be nil if being downloaded, so don't enforce it. + // guard let identifier = self.game?.identifier else { return false } + + let isSyncingEnabled = (self.type != .auto && self.type != .quick) && (self.game?.identifier != Game.melonDSBIOSIdentifier) + return isSyncingEnabled } public var syncableMetadata: [HarmonyMetadataKey : String] { diff --git a/Delta/Extensions/ControllerSkin+Configuring.swift b/Delta/Extensions/ControllerSkin+Configuring.swift index d715540..6dcecbf 100644 --- a/Delta/Extensions/ControllerSkin+Configuring.swift +++ b/Delta/Extensions/ControllerSkin+Configuring.swift @@ -10,6 +10,18 @@ import DeltaCore extension ControllerSkin { + convenience init?(system: System, context: NSManagedObjectContext) + { + guard let deltaControllerSkin = DeltaCore.ControllerSkin.standardControllerSkin(for: system.gameType) else { return nil } + + self.init(context: context) + + self.isStandard = true + self.filename = deltaControllerSkin.fileURL.lastPathComponent + + self.configure(with: deltaControllerSkin) + } + func configure(with skin: DeltaCore.ControllerSkin) { // Manually copy values to be stored in database. diff --git a/Delta/Game Selection/GameCollectionViewController.swift b/Delta/Game Selection/GameCollectionViewController.swift index 31ffe34..28709b4 100644 --- a/Delta/Game Selection/GameCollectionViewController.swift +++ b/Delta/Game Selection/GameCollectionViewController.swift @@ -440,6 +440,7 @@ private extension GameCollectionViewController switch game.type { case GameType.unknown: return [cancelAction, renameAction, changeArtworkAction, shareAction, deleteAction] + case .ds where game.identifier == Game.melonDSBIOSIdentifier: return [cancelAction, renameAction, changeArtworkAction, changeControllerSkinAction, saveStatesAction] default: return [cancelAction, renameAction, changeArtworkAction, changeControllerSkinAction, shareAction, saveStatesAction, importSaveFile, deleteAction] } } diff --git a/Resources/DS.png b/Resources/DS.png new file mode 100644 index 0000000000000000000000000000000000000000..2c36ce6c22b4fa804fa629b69d6e3fb9a5b4fb58 GIT binary patch literal 12511 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 literal 0 HcmV?d00001 From 01320b4dec867c02127a78ec89a5a0e6136f2410 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 23 Apr 2020 17:24:04 -0700 Subject: [PATCH 020/105] Adds SaveState.coreIdentifier to filter out save states from other cores Prevents DeSmuME save states from appearing while using melonDS core and vice versa. --- Delta.xcodeproj/project.pbxproj | 8 +- .../Delta.xcdatamodeld/.xccurrentversion | 2 +- .../Delta 6.xcdatamodel/contents | 160 ++++++++ Delta/Database/Model/Human/SaveState.swift | 16 +- Delta/Database/Model/Machine/_SaveState.swift | 2 + .../xcmapping.xml | 344 ++++++++++++++++++ .../Policies/SaveStateMigrationPolicy.swift | 20 + Delta/Emulation/GameViewController.swift | 1 + .../SaveStatesViewController.swift | 10 +- 9 files changed, 559 insertions(+), 4 deletions(-) create mode 100644 Delta/Database/Model/Delta.xcdatamodeld/Delta 6.xcdatamodel/contents create mode 100644 Delta/Database/Model/Migrations/Delta5ToDelta6.xcmappingmodel/xcmapping.xml diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 2ba383d..e32d815 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -128,6 +128,7 @@ BFDB0FEC24464758001C727C /* DS.png in Resources */ = {isa = PBXBuildFile; fileRef = BFDB0FEB24464757001C727C /* DS.png */; }; BFDB3418219E4B1700595A62 /* SyncStatusViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDB3417219E4B1700595A62 /* SyncStatusViewController.swift */; }; BFDCA1E6244EBAA900B8FBDB /* liblibDeSmuME.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BFDCA1E5244EBAA900B8FBDB /* liblibDeSmuME.a */; }; + BFDCA1E9244F7E1000B8FBDB /* Delta5ToDelta6.xcmappingmodel in Sources */ = {isa = PBXBuildFile; fileRef = BFDCA1E8244F7E1000B8FBDB /* Delta5ToDelta6.xcmappingmodel */; }; BFDD04F11D5E2C27002D450E /* GameCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */; }; BFE022A01F5B57FF0052D888 /* PopoverMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE0229F1F5B577D0052D888 /* PopoverMenuButton.swift */; }; BFE4269E1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFE4269D1D9C68E600DC913F /* SaveStatesStoryboardSegue.swift */; }; @@ -285,6 +286,8 @@ BFDB0FEB24464757001C727C /* DS.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DS.png; sourceTree = ""; }; BFDB3417219E4B1700595A62 /* SyncStatusViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SyncStatusViewController.swift; sourceTree = ""; }; BFDCA1E5244EBAA900B8FBDB /* liblibDeSmuME.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = liblibDeSmuME.a; sourceTree = BUILT_PRODUCTS_DIR; }; + BFDCA1E7244F7DB100B8FBDB /* Delta 6.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Delta 6.xcdatamodel"; sourceTree = ""; }; + BFDCA1E8244F7E1000B8FBDB /* Delta5ToDelta6.xcmappingmodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcmappingmodel; path = Delta5ToDelta6.xcmappingmodel; sourceTree = ""; }; BFDD04F01D5E2C27002D450E /* GameCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameCollectionViewController.swift; sourceTree = ""; }; BFDE2CC6222DF345008038E0 /* Harmony_Dropbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Harmony_Dropbox.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFDE2CC7222DF345008038E0 /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -736,6 +739,7 @@ BFEE943C23F2180200CDA07D /* Delta4ToDelta5.xcmappingmodel */, BF3D6C502202865F0083E05A /* Delta2ToDelta3.xcmappingmodel */, BF3D6C52220286750083E05A /* Delta3ToDelta4.xcmappingmodel */, + BFDCA1E8244F7E1000B8FBDB /* Delta5ToDelta6.xcmappingmodel */, BFEF24F11F7DD4BE00454C62 /* Policies */, ); path = Migrations; @@ -1107,6 +1111,7 @@ BF6EE5E91F7C5F860051AD6C /* _GameControllerInputMapping.swift in Sources */, BF5942871E09BC8B0051894B /* _ControllerSkin.swift in Sources */, BF95E2791E4982A10030E7AD /* GamesDatabaseBrowserViewController.swift in Sources */, + BFDCA1E9244F7E1000B8FBDB /* Delta5ToDelta6.xcmappingmodel in Sources */, BFD097211D3A01B8005A44C2 /* SaveStatesViewController.swift in Sources */, BF6EE5EB1F7C5F8F0051AD6C /* GameControllerInputMapping.swift in Sources */, BF8A333421A484A000A42FD4 /* BadgedTableViewCell.swift in Sources */, @@ -1399,13 +1404,14 @@ BF4828811F9027B600028B97 /* Delta.xcdatamodeld */ = { isa = XCVersionGroup; children = ( + BFDCA1E7244F7DB100B8FBDB /* Delta 6.xcdatamodel */, BFE4275223EDF75300E6B417 /* Delta 5.xcdatamodel */, BF0758DE2202827C005110F2 /* Delta 4.xcdatamodel */, BF5645092202381000A8EA26 /* Delta 3.xcdatamodel */, BF4828821F9027B600028B97 /* Delta 2.xcdatamodel */, BF4828831F9027B600028B97 /* Delta.xcdatamodel */, ); - currentVersion = BFE4275223EDF75300E6B417 /* Delta 5.xcdatamodel */; + currentVersion = BFDCA1E7244F7DB100B8FBDB /* Delta 6.xcdatamodel */; path = Delta.xcdatamodeld; sourceTree = ""; versionGroupType = wrapper.xcdatamodel; diff --git a/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion b/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion index a1764f4..96c490d 100644 --- a/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion +++ b/Delta/Database/Model/Delta.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - Delta 5.xcdatamodel + Delta 6.xcdatamodel diff --git a/Delta/Database/Model/Delta.xcdatamodeld/Delta 6.xcdatamodel/contents b/Delta/Database/Model/Delta.xcdatamodeld/Delta 6.xcdatamodel/contents new file mode 100644 index 0000000..5f52f6b --- /dev/null +++ b/Delta/Database/Model/Delta.xcdatamodeld/Delta 6.xcdatamodel/contents @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Delta/Database/Model/Human/SaveState.swift b/Delta/Database/Model/Human/SaveState.swift index 6456773..b44b4ad 100644 --- a/Delta/Database/Model/Human/SaveState.swift +++ b/Delta/Database/Model/Human/SaveState.swift @@ -11,6 +11,8 @@ import Foundation import DeltaCore import Harmony +import struct DSDeltaCore.DS + @objc public enum SaveStateType: Int16 { case auto @@ -111,7 +113,7 @@ extension SaveState: Syncable } public var syncableKeys: Set { - return [\SaveState.creationDate, \SaveState.filename, \SaveState.modifiedDate, \SaveState.name, \SaveState.type] + return [\SaveState.creationDate, \SaveState.filename, \SaveState.modifiedDate, \SaveState.name, \SaveState.type, \SaveState.coreIdentifier] } public var syncableFiles: Set { @@ -138,4 +140,16 @@ extension SaveState: Syncable public var syncableLocalizedName: String? { return self.localizedName } + + public func awakeFromSync(_ record: AnyRecord) + { + guard self.coreIdentifier == nil else { return } + guard let game = self.game, let system = System(gameType: game.type) else { return } + + switch system + { + case .ds: self.coreIdentifier = DS.core.identifier // Assume DS save state with nil coreIdentifier is from DeSmuME core. + default: self.coreIdentifier = system.deltaCore.identifier + } + } } diff --git a/Delta/Database/Model/Machine/_SaveState.swift b/Delta/Database/Model/Machine/_SaveState.swift index fe2d681..cc313ae 100644 --- a/Delta/Database/Model/Machine/_SaveState.swift +++ b/Delta/Database/Model/Machine/_SaveState.swift @@ -14,6 +14,8 @@ public class _SaveState: NSManagedObject // MARK: - Properties + @NSManaged public var coreIdentifier: String? + @NSManaged public var creationDate: Date @NSManaged public var filename: String diff --git a/Delta/Database/Model/Migrations/Delta5ToDelta6.xcmappingmodel/xcmapping.xml b/Delta/Database/Model/Migrations/Delta5ToDelta6.xcmappingmodel/xcmapping.xml new file mode 100644 index 0000000..04cad01 --- /dev/null +++ b/Delta/Database/Model/Migrations/Delta5ToDelta6.xcmappingmodel/xcmapping.xml @@ -0,0 +1,344 @@ + + + + + + 134481920 + CC4E834B-E0E6-44E7-BF1B-445A4496F47D + 158 + + + + NSPersistenceFrameworkVersion + 977 + NSStoreModelVersionHashes + + XDDevAttributeMapping + + 0plcXXRN7XHKl5CcF+fwriFmUpON3ZtcI/AfK748aWc= + + XDDevEntityMapping + + qeN1Ym3TkWN1G6dU9RfX6Kd2ccEvcDVWHpd3LpLgboI= + + XDDevMappingModel + + EqtMzvRnVZWkXwBHu4VeVGy8UyoOe+bi67KC79kphlQ= + + XDDevPropertyMapping + + XN33V44TTGY4JETlMoOB5yyTKxB+u4slvDIinv0rtGA= + + XDDevRelationshipMapping + + akYY9LhehVA/mCb4ATLWuI9XGLcjpm14wWL1oEBtIcs= + + + NSStoreModelVersionHashesDigest + +Hmc2uYZK6og+Pvx5GUJ7oW75UG4V/ksQanTjfTKUnxyGWJRMtB5tIRgVwGsrd7lz/QR57++wbvWsr6nxwyS0A== + NSStoreModelVersionHashesVersion + 3 + NSStoreModelVersionIdentifiers + + + + + + + + + 1 + preferredLandscapeSkin + + + + modifiedDate + + + + 1 + preferredPortraitSkin + + + + identifier + + + + YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8Q +D05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGvEBMLDBcYHR4mKzAxNDU5Pj9CRkpMVSRudWxs1Q0ODxAREhMUFRZZTlNPcGVyYW5kXk5TU2VsZWN0b3JOYW1lXxAQTlNFeHByZXNzaW9uVHlwZVtOU0FyZ3VtZW50c1YkY2xhc3OAA4ACEASABoASXxAhZGVmYXVsdENvcmVJZGVudGlmaWVyRm9yR2FtZVR5cGU60xkPERobHFpOU1ZhcmlhYmxlgAQQAoAFXGVudGl0eVBvbGljedIfICEiWiRjbGFzc25hbWVYJGNsYXNzZXNfEBROU1ZhcmlhYmxlRXhwcmVzc2lvbqMjJCVfEBROU1ZhcmlhYmxlRXhwcmVzc2lvblxOU0V4cHJlc3Npb25YTlNPYmplY3TSJxEoKlpOUy5vYmplY3RzoSmAB4AR1Q0ODxARLC0ULi+ACYAIgAuAEF8QEHZhbHVlRm9yS2V5UGF0aDrTGQ8RMhscgAqABVZzb3VyY2XSJxE2OKE3gAyAD9MRDzo7PD1ZTlNLZXlQYXRogA4QCoANWWdhbWUudHlwZdIfIEBBXxAcTlNLZXlQYXRoU3BlY2lmaWVyRXhwcmVzc2lvbqNAJCXSHyBDRF5OU011dGFibGVBcnJheaNDRSVXTlNBcnJhedIfIEdIXxATTlNLZXlQYXRoRXhwcmVzc2lvbqRHSSQlXxAUTlNGdW5jdGlvbkV4cHJlc3Npb27SHyBFS6JFJdIfIElNo0kkJQAIABEAGgAkACkAMgA3AEkATABRAFMAaQBvAHoAhACTAKYAsgC5ALsAvQC/AMEAwwDnAO4A+QD7AP0A/wEMAREBHAElATwBQAFXAWQBbQFyAX0BfwGBAYMBjgGQAZIBlAGWAakBsAGyAbQBuwHAAcIBxAHGAc0B1wHZAdsB3QHnAewCCwIPAhQCIwInAi8CNAJKAk8CZgJrAm4CcwAAAAAAAAIBAAAAAAAAAE4AAAAAAAAAAAAAAAAAAAJ3 + + coreIdentifier + + + + isStandard + + + + gameType + + + + GameCollection + Undefined + 7 + GameCollection + 1 + + + + + + 1 + games + + + + 1 + preferredPortraitSkinByGames + + + + modifiedDate + + + + SaveStateToSaveStateMigrationPolicy + SaveState + Undefined + 4 + SaveState + 1 + + + + + + Cheat + Undefined + 3 + Cheat + 1 + + + + + + name + + + + artworkURL + + + + Delta/Database/Model/Delta.xcdatamodeld/Delta 5.xcdatamodel + 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uQQBBD0EeQS1BPEFLQVpBW0FqQX9BgEGIQZRBqEG3QcZB1UHbQdxB3UHsQftCCkIZQihCNEJGQlVCZEJzQoJCkUKgQqFCsELFQsZCzkLaQu5C/UMMQxtDH0MuQz1DTENbQ2pDdkOIQ5dDpkO1Q8RD00PiQ/FD9EP4Q/xEAEQIRAtED0QQVSRudWxs1wANAA4ADwAQABEAEgATABQAFQAWABcAGAAXABpfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKBBXOBBXCAAIEFcYAAgQVy3gAcAB0AHgAfACAAIQAiAA4AIwAkACUAJgAnACgAKQAqACsACQApABcALwAwADEAMgAzACkAKQAXXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQVugQVsgAGABIAAgQVtgQVvEACABYADgASABIAAUFNZRVPTADoAOwAOADwARABMV05TLmtleXNaTlMub2JqZWN0c6cAPQA+AD8AQABBAEIAQ4AGgAeACIAJgAqAC4AMpwBFAEYARwBIAEkASgBLgA2BA82BAuOA/oEBkoBlgQTVgC5ZU2F2ZVN0YXRlWEdhbWVTYXZlVUNoZWF0XkdhbWVDb2xsZWN0aW9uXkNvbnRyb2xsZXJTa2luVEdhbWVfEBpHYW1lQ29udHJvbGxlcklucHV0TWFwcGluZ98QEABVAFYAVwBYACEAWQBaACMAWwBcAA4AJQBdAF4AKABfAGAAYQApACkAFABlAGYAMQApAGAAaQA9AGAAbABtAG5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2VbX2lzQWJzdHJhY3SAD4A1gASABIACgBCBAV2ABIAPgQFfgAaAD4EE1IAOCBJpmZOOV29yZGVyZWTTADoAOwAOAHIAdABMoQBzgBGhAHWAEoAuXlhEX1BTdGVyZW90eXBl2QAhACUAeQAOACgAegAjAF8AewBFAHMAYAB/ABcAKQAxAG4Ag18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYANgBGAD4A0gACABAiAE9MAOgA7AA4AhQCPAEypAIYAhwCIAIkAigCLAIwAjQCOgBSAFYAWgBeAGIAZgBqAG4AcqQCQAJEAkgCTAJQAlQCWAJcAmIAdgCGAIoAmgCiAKoAsgC+AM4AuXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3ZlcnNpb25IYXNoTW9kaWZpZXJfEBlYRF9QU0tfZmV0Y2hSZXF1ZXN0c0FycmF5XxA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vcmFnZV8QF1hEX1BBdHRLX21pblZhbHVlU3RyaW5nXxAWWERfUEF0dEtfYXR0cmlidXRlVHlwZV8QF1hEX1BBdHRLX21heFZhbHVlU3RyaW5nXxAdWERfUEF0dEtfdmFsdWVUcmFuc2Zvcm1lck5hbWVfECBYRF9QQXR0S19yZWd1bGFyRXhwcmVzc2lvblN0cmluZ98QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIAAbgBuABcAboAAgACAAICRCAgICIAggJMICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwPTAG4AbgBuADEAbgC2BIEAbgBuABcAboAAgCuAAICRCAgICIAggJQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIIAbgBuABcAboAAgACAAICRCAgICIAggJUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXBMYAFwPTAG4AbgBuADEAbgC2BIMAbgBuABcAboAAgJ6AAICRCAgICIAggJYICIAACBEDhN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIQAbgBuABcAboAAgACAAICRCAgICIAggJcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIUAbgBuABcAboAAgACAAICRCAgICIAggJgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPTAG4AbgBuADEAbgC2BIYAbgBuABcAboAAgACAAICRCAgICIAggJkICIAACNIAwADBBQIFA11YRFBNQXR0cmlidXRlpgUEBQUFBgUHBQgAxV1YRFBNQXR0cmlidXRlXFhEUE1Qcm9wZXJ0eV8QEFhEVU1MUHJvcGVydHlJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QEgCkAKUApgUKACEAqACpBQsAIwCnBQwAqgAOACUAqwCsACg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OBrYGtwBMoKCALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwZlAG4AbgBuADEAbgC2Ab4AbgBuABcAboAAgCuAAIC9CAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAhcAFwZlAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgFKAAIC9CAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwZlAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIC9CAgICIAggEkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwZlAG4AbgBuADEAbgC2AcEAbgBuABcAboAAgACAAIC9CAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwZlAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIC9CAgICIAggEsICIAACNkAIQAlBwUADgAoBwYAIwBfBwcBfgGmAGAAfwAXACkAMQBuBw9fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAuoBBgA+ANIAAgAQIgMnTADoAOwAOBxEHGQBMpwJgAmECYgJjAmQCZQJmgFiAWYBagFuAXIBdgF6nBxoHGwccBx0HHgcfByCAyoDLgMyAzYDOgM+A0IAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCeQAXBmYAbgBuAG4AMQBuALYCYABuAG4AFwBugACAYIAAgMgICAgIgCCAWAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCiAAXBmYAbgBuAG4AMQBuALYCYQBuAG4AFwBugACAYoAAgMgICAgIgCCAWQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCiAAXBmYAbgBuAG4AMQBuALYCYgBuAG4AFwBugACAYoAAgMgICAgIgCCAWggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcASgAXBmYAbgBuAG4AMQBuALYCYwBuAG4AFwBugACAZYAAgMgICAgIgCCAWwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXBmYAbgBuAG4AMQBuALYCZABuAG4AFwBugACAK4AAgMgICAgIgCCAXAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXBmYAbgBuAG4AMQBuALYCZQBuAG4AFwBugACAK4AAgMgICAgIgCCAXQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcDoQAXBmYAbgBuAG4AMQBuALYCZgBuAG4AFwBugACAo4AAgMgICAgIgCCAXggIgAAI0gDAAMEHjAeNXxAQWERQTVJlbGF0aW9uc2hpcKYHjgePB5AHkQeSAMVfEBBYRFBNUmVsYXRpb25zaGlwXFhEUE1Qcm9wZXJ0eV8QEFhEVU1MUHJvcGVydHlJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QEgCkAKUApgeUACEAqACpB5UAIwCnB5YAqgAOACUAqwCsACgArQAXABcAFwApAEoAbgBuB54AMQBuAGAAbgGcA5QAbgBuB6YAbl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgGUICIDUCIAPCIDRgHsICIDTCBMAAAABCosVb9MAOgA7AA4HqgetAEyiAaUBpoBAgEGiB64Hr4DVgOCALtkAIQAlB7IADgAoB7MAIwBfB7QDogGlAGAAfwAXACkAMQBuB7xfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA0oBAgA+ANIAAgAQIgNbTADoAOwAOB74HxwBMqAG7AbwBvQG+Ab8BwAHBAcKARIBFgEaAR4BIgEmASoBLqAfIB8kHygfLB8wHzQfOB8+A14DYgNmA24DcgN2A3oDfgC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcHrgBuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACA1QgICAiAIIBECAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcHrgBuAG4AbgAxAG4AtgG8AG4AbgAXAG6AAIAAgACA1QgICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwfxABcHrgBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIDagACA1QgICAiAIIBGCAiAAAjTADoAOwAOB/8IAABMoKCALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFweuAG4AbgBuADEAbgC2Ab4AbgBuABcAboAAgCuAAIDVCAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFweuAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIDVCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFweuAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIDVCAgICIAggEkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFweuAG4AbgBuADEAbgC2AcEAbgBuABcAboAAgACAAIDVCAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFweuAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIDVCAgICIAggEsICIAACNkAIQAlCE4ADgAoCE8AIwBfCFADogGmAGAAfwAXACkAMQBuCFhfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cml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AqgAOACUAqwCsACgArQAXARcAFxnQAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIECQAgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcZ0ABuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBAkAICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXGdAAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQJACAgICIAggEsICIAACNkAIQAlGnAADgAoGnEAIwBfGnISHAPQAGAAfwAXACkAMQBuGnpfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAj2AhYAPgDSAAIAECIECTNMAOgA7AA4afBqEAEynBIAEgQSCBIMEhASFBIaAk4CUgJWAloCXgJiAmacahRqGGocaiBqJGooai4ECTYECToECT4ECUIECUYECUoECU4Au3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXGdEAbgBuAG4AMQBuALYEgABuAG4AFwBugACAAIAAgQJLCAgICIAggJMICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxnRAG4AbgBuADEAbgC2BIEAbgBuABcAboAAgCuAAIECSwgICAiAIICUCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcZ0QBuAG4AbgAxAG4AtgSCAG4AbgAXAG6AAIAAgACBAksICAgIgCCAlQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcOXQAXGdEAbgBuAG4AMQBuALYEgwBuAG4AFwBugACBAVmAAIECSwgICAiAIICWCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcZ0QBuAG4AbgAxAG4AtgSEAG4AbgAXAG6AAIAAgACBAksICAgIgCC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CdIECdYECdoECd4ECeIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXHFIAbgBuAG4AMQBuALYBuwBuAG4AFwBugACAK4AAgQJuCAgICIAggEQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxxSAG4AbgBuADEAbgC2AbwAbgBuABcAboAAgACAAIECbggICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxyVABccUgBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIECc4AAgQJuCAgICIAggEYICIAACNMAOgA7AA4coxykAEygoIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXHFIAbgBuAG4AMQBuALYBvgBuAG4AFwBugACAK4AAgQJuCAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxxSAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIECbggICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABccUgBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBAm4ICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHFIAbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQJuCAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxxSAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIECbggICAiAIIBLCAiAAAjZACEAJRzyAA4AKBzzACMAXxz0Eh4D0ABgAH8AFwApADEAbhz8XxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQJrgIWAD4A0gACABAiBAnrTADoAOwAOHP4dBgBMpwSABIEEggSDBIQEhQSGgJOAlICVgJaAl4CYgJmnHQcdCB0JHQodCx0MHQ2BAnuBAnyBAn2BAn6BAn+BAoCBAoGALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxxTAG4AbgBuADEAbgC2BIAAbgBuABcAboAAgACAAIECeQgICAiAIICTCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABccUwBuAG4AbgAxAG4AtgSBAG4AbgAXAG6AAIArgACBAnkICAgIgCCAlAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHFMAbgBuAG4AMQBuALYEggBuAG4AFwBugACAAIAAgQJ5CAgICIAggJUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXDl0AFxxTAG4AbgBuADEAbgC2BIMAbgBuABcAboAAgQFZgACBAnkICAgIgCCAlggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHFMAbgBuAG4AMQBuALYEhABuAG4AFwBugACAAIAAgQJ5CAgICIAggJcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFxxTAG4AbgBuADEAbgC2BIUAbgBuABcAboAAgACAAIECeQgICAiAIICYCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABccUwBuAG4AbgAxAG4AtgSGAG4AbgAXAG6AAIAAgACBAnkICAgIgCCAmQgIgAAI0gA7AA4deQC+oIAf3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXEDUAbgBuAG4AMQBuALYCZABuAG4AFwBugACAK4AAgQGMCAgICIAggFwICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFxA1AG4AbgBuADEAbgC2AmUAbgBuABcAboAAgCuAAIEBjAgICAiAIIBdCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFxIXABcQNQBuAG4AbgAxAG4AtgJmAG4AbgAXAG6AAIEBrIAAgQGMCAgICIAggF4ICIAACN8QEgCkAKUAph2pACEAqACpHaoAIwCnHasAqgAOACUAqwCsACgArQAXABcAFwApAEoAbgBuHbMAMQBuAGAAbgPGAXkAbgBuHbsAbl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgGUICIECiAiADwiAooA6CAiBAocIEpDbS+3TADoAOwAOHb8dwgBMogGlA9CAQICFoh3DHcSBAomBApaALtkAIQAlHccADgAoHcgAIwBfHckDpgGlAGAAfwAXACkAMQBuHdFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAoaAQIAPgDSAAIAECIECitMAOgA7AA4d0x3cAEyoAbsBvAG9Ab4BvwHAAcEBwoBEgEWARoBHgEiASYBKgEuoHd0d3h3fHeAd4R3iHeMd5IECi4ECjIECjYECkYECkoECk4EClIEClYAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXHcMAbgBuAG4AMQBuALYBuwBuAG4AFwBugACAK4AAgQKJCAgICIAggEQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFx3DAG4AbgBuADEAbgC2AbwAbgBuABcAboAAgACAAIECiQgICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFx4GABcdwwBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIECjoAAgQKJCAgICIAggEYICIAACNMAOgA7AA4eFB4WAEyhHhWBAo+hHheBApCALl8QF2F0dHJpYnV0ZVZhbHVlQ2xhc3NOYW1lVU5TVVJM3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXHcMAbgBuAG4AMQBuALYBvgBuAG4AFwBugACAK4AAgQKJCAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFx3DAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIECiQgICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcdwwBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBAokICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHcMAbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQKJCAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFx3DAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIECiQgICAiAIIBLCAiAAAjZACEAJR5nAA4AKB5oACMAXx5pA6YD0ABgAH8AFwApADEAbh5xXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNvcmRlcmVkXxAkWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXN3YXNFbmNvZGVkXxAhWERCdWNrZXRGb3JPd25lZEF0dHJpYnV0ZXNzdG9yYWdlgQKGgIWAD4A0gACABAiBApfTADoAOwAOHnMeewBMpwSABIEEggSDBIQEhQSGgJOAlICVgJaAl4CYgJmnHnwefR5+Hn8egB6BHoKBApiBApmBApqBApuBApyBAp2BAp6ALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFx3EAG4AbgBuADEAbgC2BIAAbgBuABcAboAAgACAAIEClggICAiAIICTCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcdxABuAG4AbgAxAG4AtgSBAG4AbgAXAG6AAIArgACBApYICAgIgCCAlAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHcQAbgBuAG4AMQBuALYEggBuAG4AFwBugACAAIAAgQKWCAgICIAggJUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXDl0AFx3EAG4AbgBuADEAbgC2BIMAbgBuABcAboAAgQFZgACBApYICAgIgCCAlggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHcQAbgBuAG4AMQBuALYEhABuAG4AFwBugACAAIAAgQKWCAgICIAggJcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFx3EAG4AbgBuADEAbgC2BIUAbgBuABcAboAAgACAAIEClggICAiAIICYCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcdxABuAG4AbgAxAG4AtgSGAG4AbgAXAG6AAIAAgACBApYICAgIgCCAmQgIgAAI3xASAKQApQCmHu4AIQCoAKke7wAjAKce8ACqAA4AJQCrAKwAKACtABcAFwAXACkASgBuAG4e+AAxAG4AYABuA8YBegBuAG4fAABuXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzc3RvcmFnZV8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNvcmRlcmVkgACAAIAAgASAZQgIgQKhCIAPCICigDsICIECoAgSdfv5lNMAOgA7AA4fBB8HAEyiAaUD0IBAgIWiHwgfCYECooECroAu2QAhACUfDAAOACgfDQAjAF8fDgOnAaUAYAB/ABcAKQAxAG4fFl8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYECn4BAgA+ANIAAgAQIgQKj0wA6ADsADh8YHyEATKgBuwG8Ab0BvgG/AcABwQHCgESARYBGgEeASIBJgEqAS6gfIh8jHyQfJR8mHycfKB8pgQKkgQKlgQKmgQKpgQKqgQKrgQKsgQKtgC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcfCABuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBAqIICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHwgAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQKiCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXH0sAFx8IAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQKngACBAqIICAgIgCCARggIgAAI0wA6ADsADh9ZH1sATKEfWoECqKEY3oECLYAuXxAXYXR0cmlidXRlVmFsdWVDbGFzc05hbWXfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcfCABuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBAqIICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXHwgAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQKiCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFx8IAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIECoggICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcfCABuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBAqIICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXHwgAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQKiCAgICIAggEsICIAACNkAIQAlH6sADgAoH6wAIwBfH60DpwPQAGAAfwAXACkAMQBuH7VfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAp+AhYAPgDSAAIAECIECr9MAOgA7AA4ftx+/AEynBIAEgQSCBIMEhASFBIaAk4CUgJWAloCXgJiAmacfwB/BH8Ifwx/EH8UfxoECsIECsYECsoECs4ECtIECtYECt4Au3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHwkAbgBuAG4AMQBuALYEgABuAG4AFwBugACAAIAAgQKuCAgICIAggJMICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFx8JAG4AbgBuADEAbgC2BIEAbgBuABcAboAAgCuAAIECrggICAiAIICUCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcfCQBuAG4AbgAxAG4AtgSCAG4AbgAXAG6AAIAAgACBAq4ICAgIgCCAlQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcP3QAXHwkAbgBuAG4AMQBuALYEgwBuAG4AFwBugACBAXmAAIECrggICAiAIICWCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcfCQBuAG4AbgAxAG4AtgSEAG4AbgAXAG6AAIAAgACBAq4ICAgIgCCAlwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcgFQAXHwkAbgBuAG4AMQBuALYEhQBuAG4AFwBugACBAraAAIECrggICAiAIICYCAiAAAhfEBlOU1NlY3VyZVVuYXJjaGl2ZUZyb21EYXRh3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXHwkAbgBuAG4AMQBuALYEhgBuAG4AFwBugACAAIAAgQKuCAgICIAggJkICIAACN8QEgCkAKUApiAzACEAqACpIDQAIwCnIDUAqgAOACUAqwCsACgArQAXABcAFwApAEoAbgBuID0AMQBuAGAAbgPGAPAAbgBuIEUAbl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgGUICIECugiADwiAooAlCAiBArkIEvRrz1nTADoAOwAOIEkgTABMogGlA9CAQICFoiBNIE6BAruBAsaALtkAIQAlIFEADgAoIFIAIwBfIFMDqAGlAGAAfwAXACkAMQBuIFtfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBAriAQIAPgDSAAIAECIECvNMAOgA7AA4gXSBmAEyoAbsBvAG9Ab4BvwHAAcEBwoBEgEWARoBHgEiASYBKgEuoIGcgaCBpIGogayBsIG0gboECvYECvoECv4ECwYECwoECw4ECxIECxYAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXIE0AbgBuAG4AMQBuALYBuwBuAG4AFwBugACAK4AAgQK7CAgICIAggEQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFyBNAG4AbgBuADEAbgC2AbwAbgBuABcAboAAgACAAIECuwgICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFyCQABcgTQBuAG4AbgAxAG4AtgG9AG4AbgAXAG6AAIECwIAAgQK7CAgICIAggEYICIAACNMAOgA7AA4gniCfAEygoIAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXIE0AbgBuAG4AMQBuALYBvgBuAG4AFwBugACAK4AAgQK7CAgICIAggEcICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFyBNAG4AbgBuADEAbgC2Ab8AbgBuABcAboAAgCuAAIECuwgICAiAIIBICAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcgTQBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIArgACBArsICAgIgCCASQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXIE0AbgBuAG4AMQBuALYBwQBuAG4AFwBugACAAIAAgQK7CAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFyBNAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIECuwgICAiAIIBLCAiAAAjZACE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AS6grOis7KzwrPSs+Kz8rQCtBgQOMgQONgQOOgQOQgQORgQOSgQOTgQOUgC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcrIABuAG4AbgAxAG4AtgG7AG4AbgAXAG6AAIArgACBA4oICAgIgCCARAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXKyAAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQOKCAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXK2MAFysgAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQOPgACBA4oICAgIgCCARggIgAAI0wA6ADsADitxK3IATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcrIABuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBA4oICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXKyAAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQOKCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFysgAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIEDiggICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcrIABuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBA4oICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXKyAAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQOKCAgICIAggEsICIAACNkAIQAlK8AADgAoK8EAIwBfK8IjdAPQAGAAfwAXACkAMQBuK8pfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA4eAhYAPgDS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tABcAFwAXN7MAbgBuAG4AMQBuALYBvABuAG4AFwBugACAAIAAgQR3CAgICIAggEUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXN/YAFzezAG4AbgBuADEAbgC2Ab0AbgBuABcAboAAgQR8gACBBHcICAgIgCCARggIgAAI0wA6ADsADjgEOAUATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABc3swBuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACBBHcICAgIgCCARwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXN7MAbgBuAG4AMQBuALYBvwBuAG4AFwBugACAK4AAgQR3CAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFzezAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgCuAAIEEdwgICAiAIIBJCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABc3swBuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIAAgACBBHcICAgIgCCASggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXN7MAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQR3CAgICIAggEsICIAACNkAIQAlOFMADgAoOFQAIwBfOFUBgQPQAGAAfwAXACkAMQBuOF1fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBHSAhYAPgDSAAIAECIEEg9MAOgA7AA44XzhnAEynBIAEgQSCBIMEhASFBIaAk4CUgJWAloCXgJiAmac4aDhpOGo4azhsOG04boEEhIEEhYEEhoEEh4EEiIEEiYEEioAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXN7QAbgBuAG4AMQBuALYEgABuAG4AFwBugACAAIAAgQSCCAg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AF3MAABeIAAAXlwAAF6wAABe6AAAXzwAAF+MAABf6AAAYDAAAGBkAABgqAAAYLAAAGC4AABgwAAAYMgAAGDQAABg2AAAYOAAAGDoAABhLAAAYTQAAGE8AABhSAAAYVQAAGFgAABhbAAAYXgAAGGEAABhjAAAYaAAAGHQAABiBAAAYjgAAGJcAABicAAAYoQAAGOwAABkPAAAZLwAAGU8AABlRAAAZUwAAGVUAABlXAAAZWQAAGVoAABlbAAAZXQAAGV4AABlgAAAZYQAAGWMAABllAAAZZgAAGWcAABlpAAAZagAAGW8AABl8AAAZgQAAGYMAABmFAAAZigAAGYwAABmOAAAZkAAAGaUAABm4AAAZ3QAAGgEAABooAAAaTAAAGk4AABpQAAAaUgAAGlQAABpWAAAaWAAAGlkAABpbAAAaaAAAGnkAABp7AAAafQAAGn8AABqBAAAagwAAGoUAABqHAAAaiQAAGpoAABqcAAAangAAGqAAABqiAAAapAAAGqYAABqoAAAaqgAAGqwAABrKAAAa6AAAGvsAABsPAAAbJAAAG0EAABtVAAAbawAAG6oAABusAAAbrgAAG7AAABuyAAAbswAAG7QAABu1AAAbtgAAG7gAABu6AAAbuwAAG7wAABu+AAAbvwAAG/4AABwAAAAcAgAAHAQAABwGAAAcBwAAHAgAABwJAAAcCgAAHAwAABwOAAAcDwAAHBAAABwSAAAcEwAAHFIAABxUAAAcVgAAHFgAABxaAAAcWwAAHFwAABxdAAAcXgAAHGAAABxiAAAcYwAAHGQAABxmAAAcZwAAHHQAABx1AAAcdgAAHHgAABy3AAAcuQAAHLsAABy9AAAcvwAAHMAAABzBAAAcwgAAHMMAABzFAAAcxwAAHMgAABzJAAAcywAAHMwAAB0LAAAdDQAAHQ8AAB0RAAAdEwAAHRQAAB0VAAAdFgAAHRcAAB0ZAAAdGwAAHRwAAB0dAAAdHwAAHSAAAB0hAAAdYAAAHWIAAB1kAAAdZgAAHWgAAB1pAAAdagAAHWsAAB1sAAAdbgAAHXAAAB1xAAAdcgAAHXQAAB11AAAdtAAAHbYAAB24AAAdugAAHbwAAB29AAAdvgAAHb8AAB3AAAAdwgAAHcQAAB3FAAAdxgAAHcgAAB3JAAAeCAAAHgoAAB4MAAAeDgAAHhAAAB4RAAAeEgAAHhMAAB4UAAAeFgAAHhgAAB4ZAAAeGgAAHhwAAB4dAAAeQgAAHmYAAB6NAAAesQAAHrMAAB61AAAetwAAHrkAAB67AAAevQAAHr4AAB7AAAAezQAAHtwAAB7eAAAe4AAAHuIAAB7kAAAe5gAAHugAAB7qAAAe+QAAHvsAAB79AAAe/wAAHwEAAB8EAAAfBwAAHwoAAB8MAAAfHgAAHzIAAB9EAAAfWQAAH2sAAB96AAAflwAAH9YAAB/YAAAf2gAAH9wAAB/eAAAf3wAAH+AAAB/hAAAf4gAAH+QAAB/mAAAf5wAAH+gAAB/qAAAf6wAAICoAACAsAAAgLgAAIDAAACAyAAAgMwAAIDQAACA1AAAgNgAAIDgAACA6AAAgOwAAIDwAACA+AAAgPwAAIEEAACCAAAAgggAAIIQAACCGAAAgiAAAIIkAACCKAAAgiwAAIIwAACCOAAAgkAAAIJEAACCSAAAglAAAIJUAACDUAAAg1gAAINgAACDaAAAg3AAAIN0AACDeAAAg3wAAIOAAACDiAAAg5AAAIOUAACDmAAAg6AAAIOkAACEsAAAhUAAAIXQAACGXAAAhvgAAId4AACIFAAAiLAAAIkwAACJwAAAilAAAIpYAACKYAAAimgAAIpwAACKeAAAioAAAIqMAACKlAAAipwAAIqoAACKsAAAirgAAIrEAACKzAAAitAAAIrkAACLGAAAiyQAAIssAACLOAAAi0AAAItIAACL3AAAjGwAAI0IAACNmAAAjaAAAI2oAACNsAAAjbgAAI3AAACNyAAAjcwAAI3UAACOCAAAjlQAAI5cAACOZAAAjmwAAI50AACOfAAAjoQAAI6MAACOlAAAjpwAAI7oAACO8AAAjvgAAI8AAACPCAAAjxAAAI8YAACPIAAAjygAAI8wAACPOAAAkDQAAJA8AACQRAAAkEwAAJBUAACQWAAAkFwAAJBgAACQZAAAkGwAAJB0AACQeAAAkHwAAJCEAACQiAAAkKwAAJCwAACQuAAAkbQAAJG8AACRxAAAkcwAAJHUAACR2AAAkdwAAJHgAACR5AAAkewAAJH0AACR+AAAkfwAAJIEAACSCAAAkwQAAJMMAACTFAAAkxwAAJMkAACTKAAAkywAAJMwAACTNAAAkzwAAJNEAACTSAAAk0wAAJNUAACTWAAAk3wAAJOIAACTkAAAk5gAAJO8AACTyAAAk9AAAJPYAACU1AAAlNwAAJTkAACU7AAAlPQAAJT4AACU/AAAlQAAAJUEAACVDAAAlRQAAJUYAACVHAAAlSQAAJUoAACWJAAAliwAAJY0AACWPAAAlkQAAJZIAACWTAAAllAAAJZUAACWXAAAlmQAAJZoAACWbAAAlnQAAJZ4AACWnAAAlqAAAJaoAACXpAAAl6wAAJe0AACXvAAAl8QAAJfIAACXzAAAl9AAAJfUAACX3AAAl+QAAJfoAACX7AAAl/QAAJf4AACY9AAAmPwAAJkEAACZDAAAmRQAAJkYAACZHAAAmSAAAJkkAACZLAAAmTQAAJk4AACZPAAAmUQAAJlIAACZfAAAmYAAAJmEAACZjAAAmogAAJqQAACamAAAmqAAAJqoAACarAAAmrAAAJq0AACauAAAmsAAAJrIAACazAAAmtAAAJrYAACa3AAAm9gAAJvgAACb6AAAm/AAAJv4AACb/AAAnAAAAJwEAACcCAAAnBAAAJwYAACcHAAAnCAAAJwoAACcLAAAnGAAAJzMAACc1AAAnNwAAJzkAACc7AAAnPQAAJz8AACdBAAAnQwAAJ0UAACdHAAAnSQAAJ0sAACdNAAAnaAAAJ2oAACdsAAAnbgAAJ3AAACdzAAAndgAAJ3kAACd8AAAnfwAAJ4IAACeFAAAniAAAJ4sAACeNAAAnmAAAJ6sAACe2AAAnxQAAJ9AAACfpAAAoAQAAKAgAACgRAAAoXAAAKH8AACifAAAovwAAKMEAACjDAAAoxQAAKMcAACjJAAAoygAAKMsAACjNAAAozgAAKNAAACjRAAAo0wAAKNUAACjWAAAo1wAAKNkAACjaAAAo3wAAKOwAACjxAAAo8wAAKPUAACj6AAAo/AAAKP4AACkAAAApFQAAKToAACleAAAphQAAKakAACmrAAAprQAAKa8AACmxAAApswAAKbUAACm2AAApuAAAKcUAACnWAAAp2AAAKdoAACncAAAp3gAAKeAAACniAAAp5AAAKeYAACn3AAAp+QAAKfsAACn9AAAp/wAAKgEAACoDAAAqBQAAKgcAACoJAAAqSAAAKkoAACpMAAAqTgAAKlAAACpRAAAqUgAAKlMAACpUAAAqVgAAKlgAACpZAAAqWgAAKlwAACpdAAAqnAAAKp4AACqgAAAqogAAKqQAACqlAAAqpgAAKqcAACqoAAAqqgAAKqwAACqtAAAqrgAAKrAAACqxAAAq8AAAKvIAACr0AAAq9gAAKvgAACr5AAAq+gAAKvsAACr8AAAq/gAAKwAAACsBAAArAgAAKwQAACsFAAArEgAAKxMAACsUAAArFgAAK1UAACtXAAArWQAAK1sAACtdAAArXgAAK18AACtgAAArYQAAK2MAACtlAAArZgAAK2cAACtpAAAragAAK6kAACurAAArrQAAK68AACuxAAArsgAAK7MAACu0AAArtQAAK7cAACu5AAArugAAK7sAACu9AAArvgAAK/0AACv/AAAsAQAALAMAACwFAAAsBgAALAcAACwIAAAsCQAALAsAACwNAAAsDgAALA8AACwRAAAsEgAALFEAACxTAAAsVQAALFcAACxZAAAsWgAALFsAACxcAAAsXQAALF8AACxhAAAsYgAALGMAACxlAAAsZgAALKUAACynAAAsqQAALKsAACytAAAsrgAALK8AACywAAAssQAALLMAACy1AAAstgAALLcAACy5AAAsugAALN8AAC0DAAAtKgAALU4AAC1QAAAtUgAALVQAAC1WAAAtWAAALVoAAC1bAAAtXQAALWoAAC15AAAtewAALX0AAC1/AAAtgQAALYMAAC2FAAAthwAALZYAAC2YAAAtmgAALZwAAC2eAAAtoAAALaIAAC2kAAAtpgAALcYAAC3xAAAuCwAALiQAAC4+AAAuXgAALoEAAC7AAAAuwgAALsQAAC7GAAAuyAAALskAAC7KAAAuywAALswAAC7OAAAu0AAALtEAAC7SAAAu1AAALtUAAC8UAAAvFgAALxgAAC8aAAAvHAAALx0AAC8eAAAvHwAALyAAAC8iAAAvJAAALyUAAC8mAAAvKAAALykAAC9oAAAvagAAL2wAAC9uAAAvcAAAL3EAAC9yAAAvcwAAL3QAAC92AAAveAAAL3kAAC96AAAvfAAAL30AAC+8AAAvvgAAL8AAAC/CAAAvxAAAL8UAAC/GAAAvxwAAL8gAAC/KAAAvzAAAL80AAC/OAAAv0AAAL9EAAC/UAAAwEwAAMBUAADAXAAAwGQAAMBsAADAcAAAwHQAAMB4AADAfAAAwIQAAMCMAADAkAAAwJQAAMCcAADAoAAAwZwAAMGkAADBrAAAwbQAAMG8AADBwAAAwcQAAMHIAADBzAAAwdQAAMHcAADB4AAAweQAAMHsAADB8AAAwuwAAML0AADC/AAAwwQAAMMMAADDEAAAwxQAAMMYAADDHAAAwyQAAMMsAADDMAAAwzQAAMM8AADDQAAAw2QAAMOcAADD0AAAxAgAAMQ8AADEiAAAxOQAAMUsAADGWAAAxuQAAMdkAADH5AAAx+wAAMf0AADH/AAAyAQAAMgMAADIEAAAyBQAAMgcAADIIAAAyCgAAMgsAADINAAAyDwAAMhAAADIRAAAyEwAAMhQAADIZAAAyJgAAMisAADItAAAyLwAAMjQAADI2AAAyOAAAMjoAADJfAAAygwAAMqoAADLOAAAy0AAAMtIAADLUAAAy1gAAMtgAADLaAAAy2wAAMt0AADLqAAAy+wAAMv0AADL/AAAzAQAAMwMAADMFAAAzBwAAMwkAADMLAAAzHAAAMx4AADMgAAAzIgAAMyQAADMmAAAzKAAAMyoAADMsAAAzLgAAM20AADNvAAAzcQAAM3MAADN1AAAzdgAAM3cAADN4AAAzeQAAM3sAADN9AAAzfgAAM38AADOBAAAzggAAM8EAADPDAAAzxQAAM8cAADPJAAAzygAAM8sAADPMAAAzzQAAM88AADPRAAAz0gAAM9MAADPVAAAz1gAANBUAADQXAAA0GQAANBsAADQdAAA0HgAANB8AADQgAAA0IQAANCMAADQlAAA0JgAANCcAADQpAAA0KgAANDcAADQ4AAA0OQAANDsAADR6AAA0fAAANH4AADSAAAA0ggAANIMAADSEAAA0hQAANIYAADSIAAA0igAANIsAADSMAAA0jgAANI8AADTOAAA00AAANNIAADTUAAA01gAANNcAADTYAAA02QAANNoAADTcAAA03gAANN8AADTgAAA04gAANOMAADUiAAA1JAAANSYAADUoAAA1KgAANSsAADUsAAA1LQAANS4AADUwAAA1MgAANTMAADU0AAA1NgAANTcAADV2AAA1eAAANXoAADV8AAA1fgAANX8AADWAAAA1gQAANYIAADWEAAA1hgAANYcAADWIAAA1igAANYsAADXKAAA1zAAANc4AADXQAAA10gAANdMAADXUAAA11QAANdYAADXYAAA12gAANdsAADXcAAA13gAANd8AADYEAAA2KAAANk8AADZzAAA2dQAANncAADZ5AAA2ewAANn0AADZ/AAA2gAAANoIAADaPAAA2ngAANqAAADaiAAA2pAAANqYAADaoAAA2qgAANqwAADa7AAA2vQAANr8AADbBAAA2wwAANsUAADbHAAA2yQAANssAADcKAAA3DAAANw4AADcQAAA3EgAANxMAADcUAAA3FQAANxYAADcYAAA3GgAANxsAADccAAA3HgAANx8AADdeAAA3YAAAN2IAADdkAAA3ZgAAN2cAADdoAAA3aQAAN2oAADdsAAA3bgAAN28AADdwAAA3cgAAN3MAADeyAAA3tAAAN7YAADe4AAA3ugAAN7sAADe8AAA3vQAAN74AADfAAAA3wgAAN8MAADfEAAA3xgAAN8cAADgGAAA4CAAAOAoAADgMAAA4DgAAOA8AADgQAAA4EQAAOBIAADgUAAA4FgAAOBcAADgYAAA4GgAAOBsAADhaAAA4XAAAOF4AADhgAAA4YgAAOGMAADhkAAA4ZQAAOGYAADhoAAA4agAAOGsAADhsAAA4bgAAOG8AADiuAAA4sAAAOLIAADi0AAA4tgAAOLcAADi4AAA4uQAAOLoAADi8AAA4vgAAOL8AADjAAAA4wgAAOMMAADkCAAA5BAAAOQYAADkIAAA5CgAAOQsAADkMAAA5DQAAOQ4AADkQAAA5EgAAORMAADkUAAA5FgAAORcAADliAAA5hQAAOaUAADnFAAA5xwAAOckAADnLAAA5zQAAOc8AADnQAAA50QAAOdMAADnUAAA51gAAOdcAADnZAAA52wAAOdwAADndAAA53wAAOeAAADnlAAA58gAAOfcAADn5AAA5+wAAOgAAADoCAAA6BAAAOgYAADorAAA6TwAAOnYAADqaAAA6nAAAOp4AADqgAAA6ogAAOqQAADqmAAA6pwAAOqkAADq2AAA6xwAAOskAADrLAAA6zQAAOs8AADrRAAA60wAAOtUAADrXAAA66AAAOuoAADrsAAA67gAAOvAAADryAAA69AAAOvYAADr4AAA6+gAAOzkAADs7AAA7PQAAOz8AADtBAAA7QgAAO0MAADtEAAA7RQAAO0cAADtJAAA7SgAAO0sAADtNAAA7TgAAO40AADuPAAA7kQAAO5MAADuVAAA7lgAAO5cAADuYAAA7mQAAO5sAADudAAA7ngAAO58AADuhAAA7ogAAO+EAADvjAAA75QAAO+cAADvpAAA76gAAO+sAADvsAAA77QAAO+8AADvxAAA78gAAO/MAADv1AAA79gAAPAMAADwEAAA8BQAAPAcAADxGAAA8SAAAPEoAADxMAAA8TgAAPE8AADxQAAA8UQAAPFIAADxUAAA8VgAAPFcAADxYAAA8WgAAPFsAADyaAAA8nAAAPJ4AADygAAA8ogAAPKMAADykAAA8pQAAPKYAADyoAAA8qgAAPKsAADysAAA8rgAAPK8AADzuAAA88AAAPPIAADz0AAA89gAAPPcAADz4AAA8+QAAPPoAADz8AAA8/gAAPP8AAD0AAAA9AgAAPQMAAD1CAAA9RAAAPUYAAD1IAAA9SgAAPUsAAD1MAAA9TQAAPU4AAD1QAAA9UgAAPVMAAD1UAAA9VgAAPVcAAD2WAAA9mAAAPZoAAD2cAAA9ngAAPZ8AAD2gAAA9oQAAPaIAAD2kAAA9pgAAPacAAD2oAAA9qgAAPasAAD3QAAA99AAAPhsAAD4/AAA+QQAAPkMAAD5FAAA+RwAAPkkAAD5LAAA+TAAAPk4AAD5bAAA+agAAPmwAAD5uAAA+cAAAPnIAAD50AAA+dgAAPngAAD6HAAA+iQAAPosAAD6NAAA+jwAAPpEAAD6TAAA+lQAAPpcAAD7WAAA+2AAAPtoAAD7cAAA+3gAAPt8AAD7gAAA+4QAAPuIAAD7kAAA+5gAAPucAAD7oAAA+6gAAPusAAD8qAAA/LAAAPy4AAD8wAAA/MgAAPzMAAD80AAA/NQAAPzYAAD84AAA/OgAAPzsAAD88AAA/PgAAPz8AAD9+AAA/gAAAP4IAAD+EAAA/hgAAP4cAAD+IAAA/iQAAP4oAAD+MAAA/jgAAP48AAD+QAAA/kgAAP5MAAD/SAAA/1AAAP9YAAD/YAAA/2gAAP9sAAD/cAAA/3QAAP94AAD/gAAA/4gAAP+MAAD/kAAA/5gAAP+cAAEAmAABAKAAAQCoAAEAsAABALgAAQC8AAEAwAABAMQAAQDIAAEA0AABANgAAQDcAAEA4AABAOgAAQDsAAEB6AABAfAAAQH4AAECAAABAggAAQIMAAECEAABAhQAAQIYAAECIAABAigAAQIsAAECMAABAjgAAQI8AAEDOAABA0AAAQNIAAEDUAABA1gAAQNcAAEDYAABA2QAAQNoAAEDcAABA3gAAQN8AAEDgAABA4gAAQOMAAEDsAABA/wAAQQwAAEEfAABBLAAAQT8AAEFWAABBaAAAQbMAAEHWAABB9gAAQhYAAEIYAABCGgAAQhwAAEIeAABCIAAAQiEAAEIiAABCJAAAQiUAAEInAABCKAAAQioAAEIsAABCLQAAQi4AAEIwAABCMQAAQjoAAEJHAABCTAAAQk4AAEJQAABCVQAAQlcAAEJZAABCWwAAQoAAAEKkAABCywAAQu8AAELxAABC8wAAQvUAAEL3AABC+QAAQvsAAEL8AABC/gAAQwsAAEMcAABDHgAAQyAAAEMiAABDJAAAQyYAAEMoAABDKgAAQywAAEM9AABDPwAAQ0EAAENDAABDRQAAQ0cAAENJAABDSwAAQ00AAENPAABDjgAAQ5AAAEOSAABDlAAAQ5YAAEOXAABDmAAAQ5kAAEOaAABDnAAAQ54AAEOfAABDoAAAQ6IAAEOjAABD4gAAQ+QAAEPmAABD6AAAQ+oAAEPrAABD7AAAQ+0AAEPuAABD8AAAQ/IAAEPzAABD9AAAQ/YAAEP3AABENgAARDgAAEQ6AABEPAAARD4AAEQ/AABEQAAAREEAAERCAABERAAAREYAAERHAABESAAAREoAAERLAABEWAAARFkAAERaAABEXAAARJsAAESdAABEnwAARKEAAESjAABEpAAARKUAAESmAABEpwAARKkAAESrAABErAAARK0AAESvAABEsAAARO8AAETxAABE8wAARPUAAET3AABE+AAARPkAAET6AABE+wAARP0AAET/AABFAAAARQEAAEUDAABFBAAARUMAAEVFAABFRwAARUkAAEVLAABFTAAARU0AAEVOAABFTwAARVEAAEVTAABFVAAARVUAAEVXAABFWAAARZcAAEWZAABFmwAARZ0AAEWfAABFoAAARaEAAEWiAABFowAARaUAAEWnAABFqAAARakAAEWrAABFrAAAResAAEXtAABF7wAARfEAAEXzAABF9AAARfUAAEX2AABF9wAARfkAAEX7AABF/AAARf0AAEX/AABGAAAARiUAAEZJAABGcAAARpQAAEaWAABGmAAARpoAAEacAABGngAARqAAAEahAABGowAARrAAAEa/AABGwQAARsMAAEbFAABGxwAARskAAEbLAABGzQAARtwAAEbeAABG4AAARuIAAEbkAABG5gAARugAAEbqAABG7AAARysAAEctAABHLwAARzEAAEczAABHNAAARzUAAEc2AABHNwAARzkAAEc7AABHPAAARz0AAEc/AABHQAAAR38AAEeBAABHgwAAR4UAAEeHAABHiAAAR4kAAEeKAABHiwAAR40AAEePAABHkAAAR5EAAEeTAABHlAAAR5YAAEfVAABH1wAAR9kAAEfbAABH3QAAR94AAEffAABH4AAAR+EAAEfjAABH5QAAR+YAAEfnAABH6QAAR+oAAEgpAABIKwAASC0AAEgvAABIMQAASDIAAEgzAABINAAASDUAAEg3AABIOQAASDoAAEg7AABIPQAASD4AAEh9AABIfwAASIEAAEiDAABIhQAASIYAAEiHAABIiAAASIkAAEiLAABIjQAASI4AAEiPAABIkQAASJIAAEjRAABI0wAASNUAAEjXAABI2QAASNoAAEjbAABI3AAASN0AAEjfAABI4QAASOIAAEjjAABI5QAASOYAAEklAABJJwAASSkAAEkrAABJLQAASS4AAEkvAABJMAAASTEAAEkzAABJNQAASTYAAEk3AABJOQAASToAAEmFAABJqAAAScgAAEnoAABJ6gAASewAAEnuAABJ8AAASfIAAEnzAABJ9AAASfYAAEn3AABJ+QAASfoAAEn8AABJ/gAASf8AAEoAAABKAgAASgMAAEoIAABKFQAAShoAAEocAABKHgAASiMAAEolAABKJwAASikAAEpOAABKcgAASpkAAEq9AABKvwAASsEAAErDAABKxQAASscAAErJAABKygAASswAAErZAABK6gAASuwAAEruAABK8AAASvIAAEr0AABK9gAASvgAAEr6AABLCwAASw0AAEsPAABLEQAASxMAAEsVAABLFwAASxkAAEsbAABLHQAAS1wAAEteAABLYAAAS2IAAEtkAABLZQAAS2YAAEtnAABLaAAAS2oAAEtsAABLbQAAS24AAEtwAABLcQAAS7AAAEuyAABLtAAAS7YAAEu4AABLuQAAS7oAAEu7AABLvAAAS74AAEvAAABLwQAAS8IAAEvEAABLxQAATAQAAEwGAABMCAAATAoAAEwMAABMDQAATA4AAEwPAABMEAAATBIAAEwUAABMFQAATBYAAEwYAABMGQAATCYAAEwnAABMKAAATCoAAExpAABMawAATG0AAExvAABMcQAATHIAAExzAABMdAAATHUAAEx3AABMeQAATHoAAEx7AABMfQAATH4AAEy9AABMvwAATMEAAEzDAABMxQAATMYAAEzHAABMyAAATMkAAEzLAABMzQAATM4AAEzPAABM0QAATNIAAE0RAABNEwAATRUAAE0XAABNGQAATRoAAE0bAABNHAAATR0AAE0fAABNIQAATSIAAE0jAABNJQAATSYAAE1lAABNZwAATWkAAE1rAABNbQAATW4AAE1vAABNcAAATXEAAE1zAABNdQAATXYAAE13AABNeQAATXoAAE25AABNuwAATb0AAE2/AABNwQAATcIAAE3DAABNxAAATcUAAE3HAABNyQAATcoAAE3LAABNzQAATc4AAE3zAABOFwAATj4AAE5iAABOZAAATmYAAE5oAABOagAATmwAAE5uAABObwAATnEAAE5+AABOjQAATo8AAE6RAABOkwAATpUAAE6XAABOmQAATpsAAE6qAABOrAAATq4AAE6wAABOsgAATrUAAE64AABOuwAATr0AAE78AABO/gAATwAAAE8CAABPBAAATwUAAE8GAABPBwAATwgAAE8KAABPDAAATw0AAE8OAABPEAAATxEAAE9QAABPUgAAT1QAAE9WAABPWAAAT1kAAE9aAABPWwAAT1wAAE9eAABPYAAAT2EAAE9iAABPZAAAT2UAAE+kAABPpgAAT6gAAE+qAABPrAAAT60AAE+uAABPrwAAT7AAAE+yAABPtAAAT7UAAE+2AABPuAAAT7kAAE/4AABP+gAAT/wAAE/+AABQAAAAUAEAAFACAABQAwAAUAQAAFAGAABQCAAAUAkAAFAKAABQDAAAUA0AAFBQAABQdAAAUJgAAFC7AABQ4gAAUQIAAFEpAABRUAAAUXAAAFGUAABRuAAAUboAAFG9AABRvwAAUcEAAFHDAABRxgAAUckAAFHLAABRzQAAUdAAAFHSAABR1AAAUdcAAFHZAABR2gAAUd8AAFHsAABR7wAAUfEAAFH0AABR9wAAUfkAAFIeAABSQgAAUmkAAFKNAABSjwAAUpEAAFKTAABSlQAAUpcAAFKZAABSmgAAUp0AAFKqAABSvQAAUr8AAFLBAABSwwAAUsUAAFLHAABSyQAAUssAAFLNAABSzwAAUuIAAFLlAABS6AAAUusAAFLuAABS8QAAUvQAAFL3AABS+gAAUv0AAFL/AABTPgAAU0AAAFNDAABTRQAAU0gAAFNJAABTSgAAU0sAAFNMAABTTgAAU1AAAFNRAABTUgAAU1QAAFNVAABTXgAAU18AAFNhAABToAAAU6IAAFOkAABTpgAAU6kAAFOqAABTqwAAU6wAAFOtAABTrwAAU7EAAFOyAABTswAAU7UAAFO2AABT9QAAU/cAAFP6AABT/AAAU/8AAFQAAABUAQAAVAIAAFQDAABUBQAAVAcAAFQIAABUCQAAVAsAAFQMAABUFQAAVBgAAFQbAABUHQAAVCYAAFQpAABUKwAAVC0AAFRsAABUbgAAVHAAAFRyAABUdQAAVHYAAFR3AABUeAAAVHkAAFR7AABUfQAAVH4AAFR/AABUgQAAVIIAAFTBAABUwwAAVMYAAFTIAABUywAAVMwAAFTNAABUzgAAVM8AAFTRAABU0wAAVNQAAFTVAABU1wAAVNgAAFThAABU4gAAVOQAAFUjAABVJQAAVScAAFUpAABVLAAAVS0AAFUuAABVLwAAVTAAAFUyAABVNAAAVTUAAFU2AABVOAAAVTkAAFV4AABVegAAVX0AAFV/AABVggAAVYMAAFWEAABVhQAAVYYAAFWIAABVigAAVYsAAFWMAABVjgAAVY8AAFWcAABVnQAAVZ4AAFWgAABV3wAAVeEAAFXjAABV5QAAVegAAFXpAABV6gAAVesAAFXsAABV7gAAVfAAAFXxAABV8gAAVfQAAFX1AABWNAAAVjYAAFY5AABWOwAAVj4AAFY/AABWQAAAVkEAAFZCAABWRAAAVkYAAFZHAABWSAAAVkoAAFZLAABWWgAAVmcAAFZuAABWcQAAVnQAAFZ2AABWfQAAVoAAAFaDAABWhgAAVogAAFaOAABWlAAAVt8AAFcCAABXIgAAV0IAAFdEAABXRgAAV0gAAFdKAABXTAAAV00AAFdOAABXUQAAV1IAAFdUAABXVQAAV1cAAFdaAABXWwAAV1wAAFdfAABXYAAAV2UAAFdyAABXdwAAV3kAAFd7AABXgAAAV4MAAFeGAABXiAAAV60AAFfRAABX+AAAWBwAAFgfAABYIQAAWCMAAFglAABYJwAAWCkAAFgqAABYLQAAWDoAAFhLAABYTQAAWE8AAFhRAABYUwAAWFUAAFhXAABYWQAAWFsAAFhsAABYbwAAWHIAAFh1AABYeAAAWHsAAFh+AABYgQAAWIQAAFiGAABYxQAAWMcAAFjJAABYywAAWM4AAFjPAABY0AAAWNEAAFjSAABY1AAAWNYAAFjXAABY2AAAWNoAAFjbAABZGgAAWRwAAFkeAABZIAAAWSMAAFkkAABZJQAAWSYAAFknAABZKQAAWSsAAFksAABZLQAAWS8AAFkwAABZbwAAWXEAAFl0AABZdgAAWXkAAFl6AABZewAAWXwAAFl9AABZfwAAWYEAAFmCAABZgwAAWYUAAFmGAABZkwAAWZQAAFmVAABZlwAAWdYAAFnYAABZ2gAAWdwAAFnfAABZ4AAAWeEAAFniAABZ4wAAWeUAAFnnAABZ6AAAWekAAFnrAABZ7AAAWisAAFotAABaLwAAWjEAAFo0AABaNQAAWjYAAFo3AABaOAAAWjoAAFo8AABaPQAAWj4AAFpAAABaQQAAWoAAAFqCAABahAAAWoYAAFqJAABaigAAWosAAFqMAABajQAAWo8AAFqRAABakgAAWpMAAFqVAABalgAAWtUAAFrXAABa2QAAWtsAAFreAABa3wAAWuAAAFrhAABa4gAAWuQAAFrmAABa5wAAWugAAFrqAABa6wAAWyoAAFssAABbLgAAWzAAAFszAABbNAAAWzUAAFs2AABbNwAAWzkAAFs7AABbPAAAWz0AAFs/AABbQAAAW2UAAFuJAABbsAAAW9QAAFvXAABb2QAAW9sAAFvdAABb3wAAW+EAAFviAABb5QAAW/IAAFwBAABcAwAAXAUAAFwHAABcCQAAXAsAAFwNAABcDwAAXB4AAFwhAABcJAAAXCcAAFwqAABcLQAAXDAAAFwzAABcNQAAXHQAAFx2AABceQAAXHsAAFx+AABcfwAAXIAAAFyBAABcggAAXIQAAFyGAABchwAAXIgAAFyKAABciwAAXI0AAFzMAABczgAAXNAAAFzSAABc1QAAXNYAAFzXAABc2AAAXNkAAFzbAABc3QAAXN4AAFzfAABc4QAAXOIAAF0hAABdIwAAXSUAAF0nAABdKgAAXSsAAF0sAABdLQAAXS4AAF0wAABdMgAAXTMAAF00AABdNgAAXTcAAF12AABdeAAAXXsAAF19AABdgAAAXYEAAF2CAABdgwAAXYQAAF2GAABdiAAAXYkAAF2KAABdjAAAXY0AAF2PAABdzgAAXdAAAF3SAABd1AAAXdcAAF3YAABd2QAAXdoAAF3bAABd3QAAXd8AAF3gAABd4QAAXeMAAF3kAABeIwAAXiUAAF4nAABeKQAAXiwAAF4tAABeLgAAXi8AAF4wAABeMgAAXjQAAF41AABeNgAAXjgAAF45AABeeAAAXnoAAF58AABefgAAXoEAAF6CAABegwAAXoQAAF6FAABehwAAXokAAF6KAABeiwAAXo0AAF6OAABe2QAAXvwAAF8cAABfPAAAXz4AAF9AAABfQgAAX0QAAF9GAABfRwAAX0gAAF9LAABfTAAAX04AAF9PAABfUQAAX1QAAF9VAABfVgAAX1kAAF9aAABfXwAAX2wAAF9xAABfcwAAX3UAAF96AABffQAAX4AAAF+CAABfpwAAX8sAAF/yAABgFgAAYBkAAGAbAABgHQAAYB8AAGAhAABgIwAAYCQAAGAnAABgNAAAYEUAAGBHAABgSQAAYEsAAGBNAABgTwAAYFEAAGBTAABgVQAAYGYAAGBpAABgbAAAYG8AAGByAABgdQAAYHgAAGB7AABgfgAAYIAAAGC/AABgwQAAYMMAAGDFAABgyAAAYMkAAGDKAABgywAAYMwAAGDOAABg0AAAYNEAAGDSAABg1AAAYNUAAGEUAABhFgAAYRgAAGEaAABhHQAAYR4AAGEfAABhIAAAYSEAAGEjAABhJQAAYSYAAGEnAABhKQAAYSoAAGFpAABhawAAYW4AAGFwAABhcwAAYXQAAGF1AABhdgAAYXcAAGF5AABhewAAYXwAAGF9AABhfwAAYYAAAGGNAABhjgAAYY8AAGGRAABh0AAAYdIAAGHUAABh1gAAYdkAAGHaAABh2wAAYdwAAGHdAABh3wAAYeEAAGHiAABh4wAAYeUAAGHmAABiJQAAYicAAGIpAABiKwAAYi4AAGIvAABiMAAAYjEAAGIyAABiNAAAYjYAAGI3AABiOAAAYjoAAGI7AABiegAAYnwAAGJ+AABigAAAYoMAAGKEAABihQAAYoYAAGKHAABiiQAAYosAAGKMAABijQAAYo8AAGKQAABizwAAYtEAAGLTAABi1QAAYtgAAGLZAABi2gAAYtsAAGLcAABi3gAAYuAAAGLhAABi4gAAYuQAAGLlAABjJAAAYyYAAGMoAABjKgAAYy0AAGMuAABjLwAAYzAAAGMxAABjMwAAYzUAAGM2AABjNwAAYzkAAGM6AABjXwAAY4MAAGOqAABjzgAAY9EAAGPTAABj1QAAY9cAAGPZAABj2wAAY9wAAGPfAABj7AAAY/sAAGP9AABj/wAAZAEAAGQDAABkBQAAZAcAAGQJAABkGAAAZBsAAGQeAABkIQAAZCQAAGQnAABkKgAAZC0AAGQvAABkbgAAZHAAAGRyAABkdAAAZHcAAGR4AABkeQAAZHoAAGR7AABkfQAAZH8AAGSAAABkgQAAZIMAAGSEAABkwwAAZMUAAGTHAABkyQAAZMwAAGTNAABkzgAAZM8AAGTQAABk0gAAZNQAAGTVAABk1gAAZNgAAGTZAABlGAAAZRoAAGUcAABlHgAAZSEAAGUiAABlIwAAZSQAAGUlAABlJwAAZSkAAGUqAABlKwAAZS0AAGUuAABlbQAAZW8AAGVxAABlcwAAZXYAAGV3AABleAAAZXkAAGV6AABlfAAAZX4AAGV/AABlgAAAZYIAAGWDAABlwgAAZcQAAGXGAABlyAAAZcsAAGXMAABlzQAAZc4AAGXPAABl0QAAZdMAAGXUAABl1QAAZdcAAGXYAABmFwAAZhkAAGYbAABmHQAAZiAAAGYhAABmIgAAZiMAAGYkAABmJgAAZigAAGYpAABmKgAAZiwAAGYtAABmbAAAZm4AAGZwAABmcgAAZnUAAGZ2AABmdwAAZngAAGZ5AABmewAAZn0AAGZ+AABmfwAAZoEAAGaCAABmzQAAZvAAAGcQAABnMAAAZzIAAGc0AABnNgAAZzgAAGc6AABnOwAAZzwAAGc/AABnQAAAZ0IAAGdDAABnRQAAZ0cAAGdIAABnSQAAZ0wAAGdNAABnVgAAZ2MAAGdoAABnagAAZ2wAAGdxAABndAAAZ3cAAGd5AABnngAAZ8IAAGfpAABoDQAAaBAAAGgSAABoFAAAaBYAAGgYAABoGgAAaBsAAGgeAABoKwAAaDwAAGg+AABoQAAAaEIAAGhEAABoRgAAaEgAAGhKAABoTAAAaF0AAGhgAABoYwAAaGYAAGhpAABobAAAaG8AAGhyAABodQAAaHcAAGi2AABouAAAaLoAAGi8AABovwAAaMAAAGjBAABowgAAaMMAAGjFAABoxwAAaMgAAGjJAABoywAAaMwAAGkLAABpDQAAaQ8AAGkRAABpFAAAaRUAAGkWAABpFwAAaRgAAGkaAABpHAAAaR0AAGkeAABpIAAAaSEAAGlgAABpYgAAaWUAAGlnAABpagAAaWsAAGlsAABpbQAAaW4AAGlwAABpcgAAaXMAAGl0AABpdgAAaXcAAGmEAABphQAAaYYAAGmIAABpxwAAackAAGnLAABpzQAAadAAAGnRAABp0gAAadMAAGnUAABp1gAAadgAAGnZAABp2gAAadwAAGndAABqHAAAah4AAGogAABqIgAAaiUAAGomAABqJwAAaigAAGopAABqKwAAai0AAGouAABqLwAAajEAAGoyAABqcQAAanMAAGp1AABqdwAAanoAAGp7AABqfAAAan0AAGp+AABqgAAAaoIAAGqDAABqhAAAaoYAAGqHAABqxgAAasgAAGrKAABqzAAAas8AAGrQAABq0QAAatIAAGrTAABq1QAAatcAAGrYAABq2QAAatsAAGrcAABrGwAAax0AAGsfAABrIQAAayQAAGslAABrJgAAaycAAGsoAABrKgAAaywAAGstAABrLgAAazAAAGsxAABrVgAAa3oAAGuhAABrxQAAa8gAAGvKAABrzAAAa84AAGvQAABr0gAAa9MAAGvWAABr4wAAa/IAAGv0AABr9gAAa/gAAGv6AABr/AAAa/4AAGwAAABsDwAAbBIAAGwVAABsGAAAbBsAAGweAABsIQAAbCQAAGwmAABsZQAAbGcAAGxpAABsawAAbG4AAGxvAABscAAAbHEAAGxyAABsdAAAbHYAAGx3AABseAAAbHoAAGx7AABsugAAbLwAAGy+AABswAAAbMMAAGzEAABsxQAAbMYAAGzHAABsyQAAbMsAAGzMAABszQAAbM8AAGzQAABtDwAAbREAAG0TAABtFQAAbRgAAG0ZAABtGgAAbRsAAG0cAABtHgAAbSAAAG0hAABtIgAAbSQAAG0lAABtZAAAbWYAAG1pAABtawAAbW4AAG1vAABtcAAAbXEAAG1yAABtdAAAbXYAAG13AABteAAAbXoAAG17AABtfgAAbb0AAG2/AABtwQAAbcMAAG3GAABtxwAAbcgAAG3JAABtygAAbcwAAG3OAABtzwAAbdAAAG3SAABt0wAAbhIAAG4UAABuFgAAbhgAAG4bAABuHAAAbh0AAG4eAABuHwAAbiEAAG4jAABuJAAAbiUAAG4nAABuKAAAbmcAAG5pAABuawAAbm0AAG5wAABucQAAbnIAAG5zAABudAAAbnYAAG54AABueQAAbnoAAG58AABufQAAbogAAG6RAABukgAAbpQAAG6dAABuqAAAbrcAAG7CAABu0AAAbuUAAG75AABvEAAAbyIAAG9hAABvYwAAb2UAAG9nAABvaQAAb2oAAG9rAABvbAAAb20AAG9vAABvcQAAb3IAAG9zAABvdQAAb3YAAG+1AABvtwAAb7kAAG+7AABvvQAAb74AAG+/AABvwAAAb8EAAG/DAABvxQAAb8YAAG/HAABvyQAAb8oAAHAJAABwCwAAcA4AAHAQAABwEgAAcBMAAHAUAABwFQAAcBYAAHAYAABwGgAAcBsAAHAcAABwHgAAcB8AAHBqAABwjQAAcK0AAHDNAABwzwAAcNEAAHDTAABw1QAAcNcAAHDYAABw2QAAcNwAAHDdAABw3wAAcOAAAHDiAABw5AAAcOUAAHDmAABw6QAAcOoAAHDvAABw/AAAcQEAAHEDAABxBQAAcQoAAHENAABxEAAAcRIAAHE3AABxWwAAcYIAAHGmAABxqQAAcasAAHGtAABxrwAAcbEAAHGzAABxtAAAcbcAAHHEAABx1QAAcdcAAHHZAABx2wAAcd0AAHHfAABx4QAAceMAAHHlAABx9gAAcfkAAHH8AABx/wAAcgIAAHIFAAByCAAAcgsAAHIOAAByEAAAck8AAHJRAAByUwAAclUAAHJYAAByWQAAcloAAHJbAAByXAAAcl4AAHJgAAByYQAAcmIAAHJkAAByZQAAcqQAAHKmAAByqAAAcqoAAHKtAAByrgAAcq8AAHKwAABysQAAcrMAAHK1AABytgAAcrcAAHK5AAByugAAcvkAAHL7AABy/gAAcwAAAHMDAABzBAAAcwUAAHMGAABzBwAAcwkAAHMLAABzDAAAcw0AAHMPAABzEAAAcx0AAHMgAABzIwAAcyYAAHMpAABzKwAAc0UAAHNJAABziAAAc4oAAHOMAABzjgAAc5EAAHOSAABzkwAAc5QAAHOVAABzlwAAc5kAAHOaAABzmwAAc50AAHOeAABz3QAAc98AAHPhAABz4wAAc+YAAHPnAABz6AAAc+kAAHPqAABz7AAAc+4AAHPvAABz8AAAc/IAAHPzAAB0MgAAdDQAAHQ2AAB0OAAAdDsAAHQ8AAB0PQAAdD4AAHQ/AAB0QQAAdEMAAHREAAB0RQAAdEcAAHRIAAB0hwAAdIkAAHSLAAB0jQAAdJAAAHSRAAB0kgA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AhgMAAIYGAACGCQAAhgsAAIYrAACGRQAAhmQAAIZvAACGugAAht0AAIb9AACHHQAAhx8AAIchAACHIwAAhyUAAIcoAACHKQAAhyoAAIctAACHLgAAhzAAAIcxAACHMwAAhzYAAIc3AACHOAAAhzsAAIc8AACHQQAAh04AAIdTAACHVQAAh1cAAIdcAACHXwAAh2IAAIdkAACHiQAAh60AAIfUAACH+AAAh/sAAIf9AACH/wAAiAEAAIgDAACIBQAAiAYAAIgJAACIFgAAiCcAAIgpAACIKwAAiC0AAIgvAACIMQAAiDMAAIg1AACINwAAiEgAAIhLAACITgAAiFEAAIhUAACIVwAAiFoAAIhdAACIYAAAiGIAAIihAACIowAAiKUAAIinAACIqgAAiKsAAIisAACIrQAAiK4AAIiwAACIsgAAiLMAAIi0AACItgAAiLcAAIj2AACI+AAAiPoAAIj8AACI/wAAiQAAAIkBAACJAgAAiQMAAIkFAACJBwAAiQgAAIkJAACJCwAAiQwAAIlLAACJTQAAiVAAAIlSAACJVQAAiVYAAIlXAACJWAAAiVkAAIlbAACJXQAAiV4AAIlfAACJYQAAiWIAAIlvAACJcAAAiXEAAIlzAACJsgAAibQAAIm2AACJuAAAibsAAIm8AACJvQAAib4AAIm/AACJwQAAicMAAInEAACJxQAAiccAAInIAACKBwAAigkAAIoLAACKDQAAihAAAIoRAACKEgAAihMAAIoUAACKFgAAihgAAIoZAACKGgAAihwAAIodAACKXAAAil4AAIpgAACKYgAAimUAAIpmAACKZwAAimgAAIppAACKawAAim0AAIpuAACKbwAAinEAAIpyAACKsQAAirMAAIq1AACKtwAAiroAAIq7AACKvAAAir0AAIq+AACKwAAAisIAAIrDAACKxAAAisYAAIrHAACLBgAAiwgAAIsKAACLDAAAiw8AAIsQAACLEQAAixIAAIsTAACLFQAAixcAAIsYAACLGQAAixsAAIscAACLQQAAi2UAAIuMAACLsAAAi7MAAIu1AACLtwAAi7kAAIu7AACLvQAAi74AAIvBAACLzgAAi90AAIvfAACL4QAAi+MAAIvlAACL5wAAi+kAAIvrAACL+gAAi/0AAIwAAACMAwAAjAYAAIwJAACMDAAAjA8AAIwRAACMUAA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Al3IAAJd/AACXhAAAl4YAAJeIAACXjQAAl5AAAJeTAACXlQAAl7oAAJfeAACYBQAAmCkAAJgsAACYLgAAmDAAAJgyAACYNAAAmDYAAJg3AACYOgAAmEcAAJhYAACYWgAAmFwAAJheAACYYAAAmGIAAJhkAACYZgAAmGgAAJh5AACYfAAAmH8AAJiCAACYhQAAmIgAAJiLAACYjgAAmJEAAJiTAACY0gAAmNQAAJjWAACY2AAAmNsAAJjcAACY3QAAmN4AAJjfAACY4QAAmOMAAJjkAACY5QAAmOcAAJjoAACZJwAAmSkAAJkrAACZLQAAmTAAAJkxAACZMgAAmTMAAJk0AACZNgAAmTgAAJk5AACZOgAAmTwAAJk9AACZfAAAmX4AAJmBAACZgwAAmYYAAJmHAACZiAAAmYkAAJmKAACZjAAAmY4AAJmPAACZkAAAmZIAAJmTAACZoAAAmaEAAJmiAACZpAAAmeMAAJnlAACZ5wAAmekAAJnsAACZ7QAAme4AAJnvAACZ8AAAmfIAAJn0AACZ9QAAmfYAAJn4AACZ+QAAmjgAAJo6AACaPAAAmj4AAJpBAACaQgAAmkMAAJpEAACaRQAAmkcAAJpJAACaSgAAmksAAJpNAACaTgAAmo0AAJqPAACakQAAmpMAAJqWAACalwAAmpgAAJqZAACamgAAmpwAAJqeAACanwAAmqAAAJqiAACaowAAmuIAAJrkAACa5gAAmugAAJrrAACa7AAAmu0AAJruAACa7wAAmvEAAJrzAACa9AAAmvUAAJr3AACa+AAAmzcAAJs5AACbOwAAmz0AAJtAAACbQQAAm0IAAJtDAACbRAAAm0YAAJtIAACbSQAAm0oAAJtMAACbTQAAm3IAAJuWAACbvQAAm+EAAJvkAACb5gAAm+gAAJvqAACb7AAAm+4AAJvvAACb8gAAm/8AAJwOAACcEAAAnBIAAJwUAACcFgAAnBgAAJwaAACcHAAAnCsAAJwuAACcMQAAnDQAAJw3AACcOgAAnD0AAJxAAACcQgAAnIEAAJyDAACchQAAnIcAAJyKAACciwAAnIwAAJyNAACcjgAAnJAAAJySAACckwAAnJQAAJyWAACclwAAnNYAAJzYAACc2gAAnNwAAJzfAACc4AAAnOEAAJziAACc4wAAnOUAAJznAACc6AAAnOkAAJzrAACc7AAAnSsAAJ0tAACdLwAAnTEAAJ00AACdNQAAnTYAAJ03AACdOAAAnToAAJ08AACdPQAAnT4AAJ1AAACdQQAAnYAAAJ2CAACdhAAAnYYAAJ2JAACdigAAnYsAAJ2MAACdjQAAnY8AAJ2RAACdkgAAnZMAAJ2VAACdlgAAndUAAJ3XAACd2QAAndsAAJ3eAACd3wAAneAAAJ3hAACd4gAAneQAAJ3mAACd5wAAnegAAJ3qAACd6wAAnioAAJ4sAACeLgAAnjAAAJ4zAACeNAAAnjUAAJ42AACeNwAAnjkAAJ47AACePAAAnj0AAJ4/AACeQAAAnn8AAJ6BAACehAAAnoYAAJ6JAACeigAAnosAAJ6MAACejQAAno8AAJ6RAACekgAAnpMAAJ6VAACelgAAnuEAAJ8EAACfJAAAn0QAAJ9GAACfSAAAn0oAAJ9MAACfTgAAn08AAJ9QAACfUwAAn1QAAJ9WAACfVwAAn1kAAJ9bAACfXAAAn10AAJ9gAACfYQAAn2oAAJ93AACffAAAn34AAJ+AAACfhQAAn4gAAJ+LAACfjQAAn7IAAJ/WAACf/QAAoCEAAKAkAACgJgAAoCgAAKAqAACgLAAAoC4AAKAvAACgMgAAoD8AAKBQAACgUgAAoFQAAKBWAACgWAAAoFoAAKBcAACgXgAAoGAAAKBxAACgdAAAoHcAAKB6AACgfQAAoIAAAKCDAACghgAAoIkAAKCLAACgygAAoMwAAKDOAACg0AAAoNMAAKDUAACg1QAAoNYAAKDXAACg2QAAoNsAAKDcAACg3QAAoN8AAKDgAAChHwAAoSEAAKEjAAChJQAAoSgAAKEpAAChKgAAoSsAAKEsAAChLgAAoTAAAKExAAChMgAAoTQAAKE1AAChdAAAoXYAAKF5AAChewAAoX4AAKF/AAChgAAAoYEAAKGCAAChhAAAoYYAAKGHAAChiAAAoYoAAKGLAAChmAAAoZkAAKGaAAChnAAAodsAAKHdAACh3wAAoeEAAKHkAACh5QAAoeYAAKHnAACh6AAAoeoAAKHsAACh7QAAoe4AAKHwAACh8QAAojAAAKIyAACiNAAAojYAAKI5AACiOgAAojsAAKI8AACiPQAAoj8AAKJBAACiQgAAokMAAKJFAACiRgAAooUAAKKHAACiiQAAoosAAKKOAACijwAAopAAAKKRAACikgAAopQAAKKWAACilwAAopgAAKKaAACimwAAotoAAKLcAACi3gAAouAAAKLjAACi5AAAouUAAKLmAACi5wAAoukAAKLrAACi7AAAou0AAKLvAACi8AAAoy8AAKMxAACjMwAAozUAAKM4AACjOQAAozoAAKM7AACjPAAAoz4AAKNAAACjQQAAo0IAAKNEAACjRQAAo2oAAKOOAACjtQAAo9kAAKPcAACj3gAAo+AAAKPiAACj5AAAo+YAAKPnAACj6gAAo/cAAKQGAACkCAAApAoAAKQMAACkDgAApBAAAKQSAACkFAAApCMAAKQmAACkKQAApCwAAKQvAACkMgAApDUAAKQ4AACkOgAApHkAAKR7AACkfQAApH8AAKSCAACkgwAApIQAAKSFAACkhgAApIgAAKSKAACkiwAApIwAAKSOAACkjwAApM4AAKTQAACk0gAApNQAAKTXAACk2AAApNkAAKTaAACk2wAApN0AAKTfAACk4AAApOEAAKTjAACk5AAApSMAAKUlAAClJwAApSkAAKUsAAClLQAApS4AAKUvAAClMAAApTIAAKU0AAClNQAApTYAAKU4AAClOQAApXgAAKV6AAClfQAApX8AAKWCAAClgwAApYQAAKWFAAClhgAApYgAAKWKAACliwAApYwAAKWOAACljwAApc4AAKXQAACl0gAApdQAAKXXAACl2AAApdkAAKXaAACl2wAApd0AAKXfAACl4AAApeEAAKXjAACl5AAApiMAAKYlAACmJwAApikAAKYsAACmLQAApi4AAKYvAACmMAAApjIAAKY0AACmNQAApjYAAKY4AACmOQAApngAAKZ6AACmfQAApn8AAKaCAACmgwAApoQAAKaFAACmhgAApogAAKaKAACmiwAApowAAKaOAACmjwAAptoAAKb9AACnHQAApz0AAKc/AACnQQAAp0MAAKdFAACnSAAAp0kAAKdKAACnTQAAp04AAKdQAACnUQAAp1MAAKdWAACnVwAAp1gAAKdbAACnXAAAp2EAAKduAACncwAAp3UAAKd3AACnfAAAp38AAKeCAACnhAAAp6kAAKfNAACn9AAAqBgAAKgbAACoHQAAqB8AAKghAACoIwAAqCUAAKgmAACoKQAAqDYAAKhHAACoSQAAqEsAAKhNAACoTwAAqFEAAKhTAACoVQAAqFcAAKhoAACoawAAqG4AAKhxAACodAAAqHcAAKh6AACofQAAqIAAAKiCAACowQAAqMMAAKjFAACoxwAAqMoAAKjLAACozAAAqM0AAKjOAACo0AAAqNIAAKjTAACo1AAAqNYAAKjXAACpFgAAqRgAAKkaAACpHAAAqR8AAKkgAACpIQAAqSIAAKkjAACpJQAAqScAAKkoAACpKQAAqSsAAKksAACpawAAqW0AAKlwAACpcgAAqXUAAKl2AACpdwAAqXgAAKl5AACpewAAqX0AAKl+AACpfwAAqYEAAKmCAACpjwAAqZAAAKmRAACpkwAAqdIAAKnUAACp1gAAqdgAAKnbAACp3AAAqd0AAKneAACp3wAAqeEAAKnjAACp5AAAqeUAAKnnAACp6AAAqicAAKopAACqKwAAqi0AAKowAACqMQAAqjIAAKozAACqNAAAqjYAAKo4AACqOQAAqjoAAKo8AACqPQAAqnwAAKp+AACqgAAAqoIAAKqFAACqhgAAqocAAKqIAACqiQAAqosAAKqNAACqjgAAqo8AAKqRAACqkgAAqtEAAKrTAACq1QAAqtcAAKraAACq2wAAqtwAAKrdAACq3gAAquAAAKriAACq4wAAquQAAKrmAACq5wAAqyYAAKsoAACrKgAAqywAAKsvAACrMAAAqzEAAKsyAACrMwAAqzUAAKs3AACrOAAAqzkAAKs7AACrPAAAq2EAAKuFAACrrAAAq9AAAKvTAACr1QAAq9cAAKvZAACr2wAAq90AAKveAACr4QAAq+4AAKv9AACr/wAArAEAAKwDAACsBQAArAcAAKwJAACsCwAArBoAAKwdAACsIAAArCMAAKwmAACsKQAArCwAAKwvAACsMQAArHAAAKxyAACsdQAArHcAAKx6AACsewAArHwAAKx9AACsfgAArIAAAKyCAACsgwAArIQAAKyGAACshwAArIoAAKzJAACsywAArM0AAKzPAACs0gAArNMAAKzUAACs1QAArNYAAKzYAACs2gAArNsAAKzcAACs3gAArN8AAK0eAACtIAAArSIAAK0kAACtJwAArSgAAK0pAACtKgAArSsAAK0tAACtLwAArTAAAK0xAACtMwAArTQAAK1zAACtdQAArXgAAK16AACtfQAArX4AAK1/AACtgAAArYEAAK2DAACthQAArYYAAK2HAACtiQAArYoAAK2NAACtzAAArc4AAK3QAACt0gAArdUAAK3WAACt1wAArdgAAK3ZAACt2wAArd0AAK3eAACt3wAAreEAAK3iAACuIQAAriMAAK4lAACuJwAArioAAK4rAACuLAAAri0AAK4uAACuMAAArjIAAK4zAACuNAAArjYAAK43AACudgAArngAAK56AACufAAArn8AAK6AAACugQAAroIAAK6DAACuhQAArocAAK6IAACuiQAArosAAK6MAACu1wAArvoAAK8aAACvOgAArzwAAK8+AACvQAAAr0IAAK9FAACvRgAAr0cAAK9KAACvSwAAr00AAK9OAACvUAAAr1MAAK9UAACvVQAAr1gAAK9ZAACvXgAAr2sAAK9wAACvcgAAr3QAAK95AACvfAAAr38AAK+BAACvpgAAr8oAAK/xAACwFQAAsBgAALAaAACwHAAAsB4AALAgAACwIgAAsCMAALAmAACwMwAAsEQAALBGAACwSAAAsEoAALBMAACwTgAAsFAAALBSAACwVAAAsGUAALBoAACwawAAsG4AALBxAACwdAAAsHcAALB6AACwfQAAsH8AALC+AACwwAAAsMIAALDEAACwxwAAsMgAALDJAACwygAAsMsAALDNAACwzwAAsNAAALDRAACw0wAAsNQAALETAACxFQAAsRcAALEZAACxHAAAsR0AALEeAACxHwAAsSAAALEiAACxJAAAsSUAALEmAACxKAAAsSkAALFoAACxagAAsW0AALFvAACxcgAAsXMAALF0AACxdQAAsXYAALF4AACxegAAsXsAALF8AACxfgAAsX8AALGMAACxjwAAsZIAALGVAACxmAAAsZoAALG0AACxvQAAsfwAALH+AACyAAAAsgIAALIFAACyBgAAsgcAALIIAACyCQAAsgsAALINAACyDgAAsg8AALIRAACyEgAAslEAALJTAACyVQAAslcAALJaAACyWwAAslwAALJdAACyXgAAsmAAALJiAACyYwAAsmQAALJmAACyZwAAsqYAALKoAACyqgAAsqwAALKvAACysAAAsrEAALKyAACyswAAsrUAALK3AACyuAAAsrkAALK7AACyvAAAsvsAALL9AACy/wAAswEAALMEAACzBQAAswYAALMHAACzCAAAswoAALMMAACzDQAAsw4AALMQAACzEQAAs1AAALNSAACzVAAAs1YAALNZAACzWgA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AzxAAAM9PAADPUQAAz1MAAM9VAADPWAAAz1kAAM9aAADPWwAAz1wAAM9eAADPYAAAz2EAAM9iAADPZAAAz2UAAM+kAADPpgAAz6kAAM+rAADPrgAAz68AAM+wAADPsQAAz7IAAM+0AADPtgAAz7cAAM+4AADPugAAz7sAANAGAADQKQAA0EkAANBpAADQawAA0G0AANBvAADQcQAA0HMAANB0AADQdQAA0HgAANB5AADQewAA0HwAANB+AADQgAAA0IEAANCCAADQhQAA0IYAANCLAADQmAAA0J0AANCfAADQoQAA0KYAANCpAADQrAAA0K4AANDTAADQ9wAA0R4AANFCAADRRQAA0UcAANFJAADRSwAA0U0AANFPAADRUAAA0VMAANFgAADRcQAA0XMAANF1AADRdwAA0XkAANF7AADRfQAA0X8AANGBAADRkgAA0ZUAANGYAADRmwAA0Z4AANGhAADRpAAA0acAANGqAADRrAAA0esAANHtAADR7wAA0fEAANH0AADR9QAA0fYAANH3AADR+AAA0foAANH8AADR/QAA0f4AANIAAADSAQAA0kAAANJCAADSRAAA0kYAANJJAADSSgAA0ksAANJMAADSTQAA0k8AANJRAADSUgAA0lMAANJVAADSVgAA0pUAANKXAADSmgAA0pwAANKfAADSoAAA0qEAANKiAADSowAA0qUAANKnAADSqAAA0qkAANKrAADSrAAA0rkAANK8AADSvwAA0sIAANLFAADSxwAA0uEAANLnAADTJgAA0ygAANMqAADTLAAA0y8AANMwAADTMQAA0zIAANMzAADTNQAA0zcAANM4AADTOQAA0zsAANM8AADTewAA030AANN/AADTgQAA04QAANOFAADThgAA04cAANOIAADTigAA04wAANONAADTjgAA05AAANORAADT0AAA09IAANPUAADT1gAA09kAANPaAADT2wAA09wAANPdAADT3wAA0+EAANPiAADT4wAA0+UAANPmAADUJQAA1CcAANQpAADUKwAA1C4AANQvAADUMAAA1DEAANQyAADUNAAA1DYAANQ3AADUOAAA1DoAANQ7AADUegAA1HwAANR+AADUgAAA1IMAANSEAADUhQAA1IYAANSHAADUiQAA1IsAANSMAADUjQAA1I8AANSQAADUtQAA1NkAANUAAADVJAAA1ScAANUpAADVKwAA1S0AANUvAADVMQAA1TIAANU1AADVQgAA1VEAANVTAADVVQAA1VcAANVZAADVWwAA1V0AANVfAADVbgAA1XEAANV0AADVdwAA1XoAANV9AADVgAAA1YMAANWFAADVxAAA1cYAANXIAADVygAA1c0AANXOAADVzwAA1dAAANXRAADV0wAA1dUAANXWAADV1wAA1dkAANXaAADWGQAA1hsAANYdAADWHwAA1iIAANYjAADWJAAA1iUAANYmAADWKAAA1ioAANYrAADWLAAA1i4AANYvAADWbgAA1nAAANZyAADWdAAA1ncAANZ4AADWeQAA1noAANZ7AADWfQAA1n8AANaAAADWgQAA1oMAANaEAADWwwAA1sUAANbIAADWygAA1s0AANbOAADWzwAA1tAAANbRAADW0wAA1tUAANbWAADW1wAA1tkAANbaAADXGQAA1xsAANcdAADXHwAA1yIAANcjAADXJAAA1yUAANcmAADXKAAA1yoAANcrAADXLAAA1y4AANcvAADXbgAA13AAANdyAADXdAAA13cAANd4AADXeQAA13oAANd7AADXfQAA138AANeAAADXgQAA14MAANeEAADXwwAA18UAANfHAADXyQAA18wAANfNAADXzgAA188AANfQAADX0gAA19QAANfVAADX1gAA19gAANfZAADYJAAA2EcAANhnAADYhwAA2IkAANiLAADYjQAA2I8AANiRAADYkgAA2JMAANiWAADYlwAA2JkAANiaAADYnAAA2J4AANifAADYoAAA2KMAANikAADYqQAA2LYAANi7AADYvQAA2L8AANjEAADYxwAA2MoAANjMAADY8QAA2RUAANk8AADZYAAA2WMAANllAADZZwAA2WkAANlrAADZbQAA2W4AANlxAADZfgAA2Y8AANmRAADZkwAA2ZUAANmXAADZmQAA2ZsAANmdAADZnwAA2bAAANmzAADZtgAA2bkAANm8AADZvwAA2cIAANnFAADZyAAA2coAANoJAADaCwAA2g0AANoPAADaEgAA2hMAANoUAADaFQAA2hYAANoYAADaGgAA2hsAANocAADaHgAA2h8AANpeAADaYAAA2mIAANpkAADaZwAA2mgAANppAADaagAA2msAANptAADabwAA2nAAANpxAADacwAA2nQAANqzAADatQAA2rgAANq6AADavQAA2r4AANq/AADawAAA2sEAANrDAADaxQAA2sYAANrHAADayQAA2soAANrXAADa2gAA2t0AANrgAADa4wAA2uUAANr/AADbPgAA20AAANtCAADbRAAA20cAANtIAADbSQAA20oAANtLAADbTQAA208AANtQAADbUQAA21MAANtUAADbkwAA25UAANuXAADbmQAA25wAANudAADbngAA258AANugAADbogAA26QAANulAADbpgAA26gAANupAADb6AAA2+oAANvsAADb7gAA2/EAANvyAADb8wAA2/QAANv1AADb9wAA2/kAANv6AADb+wAA2/0AANv+AADcPQAA3D8AANxBAADcQwAA3EYAANxHAADcSAAA3EkAANxKAADcTAAA3E4AANxPAADcUAAA3FIAANxTAADckgAA3JQAANyWAADcmAAA3JsAANycAADcnQAA3J4AANyfAADcoQAA3KMAANykAADcpQAA3KcAANyoAADczQAA3PEAAN0YAADdPAAA3T8AAN1BAADdQwAA3UUAAN1HAADdSQAA3UoAAN1NAADdWgAA3WkAAN1rAADdbQAA3W8AAN1xAADdcwAA3XUAAN13AADdhgAA3YkAAN2MAADdjwAA3ZIAAN2VAADdmAAA3ZsAAN2dAADd3AAA3d4AAN3gAADd4gAA3eUAAN3mAADd5wAA3egAAN3pAADd6wAA3e0AAN3uAADd7wAA3fEAAN3yAADeMQAA3jMAAN41AADeNwAA3joAAN47AADePAAA3j0AAN4+AADeQAAA3kIAAN5DAADeRAAA3kYAAN5HAADehgAA3ogAAN6KAADejAAA3o8AAN6QAADekQAA3pIAAN6TAADelQAA3pcAAN6YAADemQAA3psAAN6cAADe2wAA3t0AAN7gAADe4gAA3uUAAN7mAADe5wAA3ugAAN7pAADe6wAA3u0AAN7uAADe7wAA3vEAAN7yAADfMQAA3zMAAN81AADfNwAA3zoAAN87AADfPAAA3z0AAN8+AADfQAAA30IAAN9DAADfRAAA30YAAN9HAADfhgAA34gAAN+LAADfjQAA35AAAN+RAADfkgAA35MAAN+UAADflgAA35gAAN+ZAADfmgAA35wAAN+dAADfuQAA3/gAAN/6AADf/AAA3/4AAOABAADgAgAA4AMAAOAEAADgBQAA4AcAAOAJAADgCgAA4AsAAOANAADgDgAA4FkAAOB8AADgnAAA4LwAAOC+AADgwAAA4MIAAODEAADgxgAA4McAAODIAADgywAA4MwAAODOAADgzwAA4NEAAODTAADg1AAA4NUAAODYAADg2QAA4N4AAODrAADg8AAA4PIAAOD0AADg+QAA4PwAAOD/AADhAQAA4SYAAOFKAADhcQAA4ZUAAOGYAADhmgAA4ZwAAOGeAADhoAAA4aIAAOGjAADhpgAA4bMAAOHEAADhxgAA4cgAAOHKAADhzAAA4c4AAOHQAADh0gAA4dQAAOHlAADh6AAA4esAAOHuAADh8QAA4fQAAOH3AADh+gAA4f0AAOH/AADiPgAA4kAAAOJCAADiRAAA4kcAAOJIAADiSQAA4koAAOJLAADiTQAA4k8AAOJQAADiUQAA4lMAAOJUAADikwAA4pUAAOKXAADimQAA4pwAAOKdAADingAA4p8AAOKgAADiogAA4qQAAOKlAADipgAA4qgAAOKpAADi6AAA4uoAAOLtAADi7wAA4vIAAOLzAADi9AAA4vUAAOL2AADi+AAA4voAAOL7AADi/AAA4v4AAOL/AADjDAAA4w0AAOMOAADjEAAA408AAONRAADjUwAA41UAAONYAADjWQAA41oAAONbAADjXAAA414AAONgAADjYQAA42IAAONkAADjZQAA46QAAOOmAADjqAAA46oAAOOtAADjrgAA468AAOOwAADjsQAA47MAAOO1AADjtgAA47cAAOO5AADjugAA4/kAAOP7AADj/QAA4/8AAOQCAADkAwAA5AQAAOQFAADkBgAA5AgAAOQKAADkCwAA5AwAAOQOAADkDwAA5E4AAORQAADkUgAA5FQAAORXAADkWAAA5FkAAORaAADkWwAA5F0AAORfAADkYAAA5GEAAORjAADkZAAA5KMAAOSlAADkpwAA5KkAAOSsAADkrQAA5K4AAOSvAADksAAA5LIAAOS0AADktQAA5LYAAOS4AADkuQAA5N4AAOUCAADlKQAA5U0AAOVQAADlUgAA5VQAAOVWAADlWAAA5VoAAOVbAADlXgAA5WsAAOV6AADlfAAA5X4AAOWAAADlggAA5YQAAOWGAADliAAA5ZcAAOWaAADlnQAA5aAAAOWjAADlpgAA5akAAOWsAADlrgAA5e0AAOXvAADl8QAA5fMAAOX2AADl9wAA5fgAAOX5AADl+gAA5fwAAOX+AADl/wAA5gAAAOYCAADmAwAA5kIAAOZEAADmRgAA5kgAAOZLAADmTAAA5k0AAOZOAADmTwAA5lEAAOZTAADmVAAA5lUAAOZXAADmWAAA5pcAAOaZAADmmwAA5p0AAOagAADmoQAA5qIAAOajAADmpAAA5qYAAOaoAADmqQAA5qoAAOasAADmrQAA5uwAAObuAADm8QAA5vMAAOb2AADm9wAA5vgAAOb5AADm+gAA5vwAAOb+AADm/wAA5wAAAOcCAADnAwAA50IAAOdEAADnRgAA50gAAOdLAADnTAAA500AAOdOAADnTwAA51EAAOdTAADnVAAA51UAAOdXAADnWAAA55cAAOeZAADnmwAA550AAOegAADnoQAA56IAAOejAADnpAAA56YAAOeoAADnqQAA56oAAOesAADnrQAA5+wAAOfuAADn8AAA5/IAAOf1AADn9gAA5/cAAOf4AADn+QAA5/sAAOf9AADn/gAA5/8AAOgBAADoAgAA6E0AAOhwAADokAAA6LAAAOiyAADotAAA6LYAAOi4AADougAA6LsAAOi8AADovwAA6MAAAOjCAADowwAA6MUAAOjHAADoyAAA6MkAAOjMAADozQAA6NYAAOjjAADo6AAA6OoAAOjsAADo8QAA6PQAAOj3AADo+QAA6R4AAOlCAADpaQAA6Y0AAOmQAADpkgAA6ZQAAOmWAADpmAAA6ZoAAOmbAADpngAA6asAAOm8AADpvgAA6cAAAOnCAADpxAAA6cYAAOnIAADpygAA6cwAAOndAADp4AAA6eMAAOnmAADp6QAA6ewAAOnvAADp8gAA6fUAAOn3AADqNgAA6jgAAOo6AADqPAAA6j8AAOpAAADqQQAA6kIAAOpDAADqRQAA6kcAAOpIAADqSQAA6ksAAOpMAADqiwAA6o0AAOqPAADqkQAA6pQAAOqVAADqlgAA6pcAAOqYAADqmgAA6pwAAOqdAADqngAA6qAAAOqhAADq4AAA6uIAAOrlAADq5wAA6uoAAOrrAADq7AAA6u0AAOruAADq8AAA6vIAAOrzAADq9AAA6vYAAOr3AADrBAAA6wUAAOsGAADrCAAA60cAAOtJAADrSwAA600AAOtQAADrUQAA61IAAOtTAADrVAAA61YAAOtYAADrWQAA61oAAOtcAADrXQAA65wAAOueAADroAAA66IAAOulAADrpgAA66cAAOuoAADrqQAA66sAAOutAADrrgAA668AAOuxAADrsgAA6/EAAOvzAADr9QAA6/cAAOv6AADr+wAA6/wAAOv9AADr/gAA7AAAAOwCAADsAwAA7AQAAOwGAADsBwAA7EYAAOxIAADsSgAA7EwAAOxPAADsUAAA7FEAAOxSAADsUwAA7FUAAOxXAADsWAAA7FkAAOxbAADsXAAA7JsAAOydAADsnwAA7KEAAOykAADspQAA7KYAAOynAADsqAAA7KoAAOysAADsrQAA7K4AAOywAADssQAA7NYAAOz6AADtIQAA7UUAAO1IAADtSgAA7UwAAO1OAADtUAAA7VIAAO1TAADtVgAA7WMAAO1yAADtdAAA7XYAAO14AADtegAA7XwAAO1+AADtgAAA7Y8AAO2SAADtlQAA7ZgAAO2bAADtngAA7aEAAO2kAADtpgAA7eUAAO3nAADt6QAA7esAAO3uAADt7wAA7fAAAO3xAADt8gAA7fQAAO32AADt9wAA7fgAAO36AADt+wAA7joAAO48AADuPgAA7kAAAO5DAADuRAAA7kUAAO5GAADuRwAA7kkAAO5LAADuTAAA7k0AAO5PAADuUAAA7o8AAO6RAADukwAA7pUAAO6YAADumQAA7poAAO6bAADunAAA7p4AAO6gAADuoQAA7qIAAO6kAADupQAA7uQAAO7mAADu6QAA7usAAO7uAADu7wAA7vAAAO7xAADu8gAA7vQAAO72AADu9wAA7vgAAO76AADu+wAA7z4AAO9iAADvhgAA76kAAO/QAADv8AAA8BcAAPA+AADwXgAA8IIAAPCmAADwqAAA8KsAAPCtAADwrwAA8LEAAPC0AADwtwAA8LkAAPC7AADwvgAA8MAAAPDCAADwxQAA8MgAAPDJAADwzgAA8NsAAPDeAADw4AAA8OMAAPDmAADw6AAA8Q0AAPExAADxWAAA8XwAAPF/AADxgQAA8YMAAPGFAADxhwAA8YkAAPGKAADxjQAA8ZoAAPGtAADxrwAA8bEAAPGzAADxtQAA8bcAAPG5AADxuwAA8b0AAPG/AADx0gAA8dUAAPHYAADx2wAA8d4AAPHhAADx5AAA8ecAAPHqAADx7QAA8e8AAPIuAADyMAAA8jMAAPI1AADyOAA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BDYkAAQ2KAAENiwABDY0AAQ2PAAENkAABDZEAAQ2TAAENlAABDd8AAQ4CAAEOIgABDkIAAQ5EAAEORgABDkgAAQ5KAAEOTQABDk4AAQ5PAAEOUgABDlMAAQ5VAAEOVgABDlgAAQ5bAAEOXAABDl0AAQ5gAAEOYQABDmoAAQ53AAEOfAABDn4AAQ6AAAEOhQABDogAAQ6LAAEOjQABDrIAAQ7WAAEO/QABDyEAAQ8kAAEPJgABDygAAQ8qAAEPLAABDy4AAQ8vAAEPMgABDz8AAQ9QAAEPUgABD1QAAQ9WAAEPWAABD1oAAQ9cAAEPXgABD2AAAQ9xAAEPdAABD3cAAQ96AAEPfQABD4AAAQ+DAAEPhgABD4kAAQ+LAAEPygABD8wAAQ/OAAEP0AABD9MAAQ/UAAEP1QABD9YAAQ/XAAEP2QABD9sAAQ/cAAEP3QABD98AAQ/gAAEQHwABECEAARAjAAEQJQABECgAARApAAEQKgABECsAARAsAAEQLgABEDAAARAxAAEQMgABEDQAARA1AAEQdAABEHYAARB5AAEQewABEH4AARB/AAEQgAABEIEAARCCAAEQhAABEIYAARCHAAEQiAABEIoAARCLAAEQmAABEJkAARCaAAEQnAABENsAARDdAAEQ3wABEOEAARDkAAEQ5QABEOYAARDnAAEQ6AABEOoAARDsAAEQ7QABEO4AARDwAAEQ8QABETAAAREyAAERNAABETYAARE5AAEROgABETsAARE8AAERPQABET8AARFBAAERQgABEUMAARFFAAERRgABEYUAARGHAAERiQABEYsAARGOAAERjwABEZAAARGRAAERkgABEZQAARGWAAERlwABEZgAARGaAAERmwABEdoAARHcAAER3gABEeAAARHjAAER5AABEeUAARHmAAER5wABEekAARHrAAER7AABEe0AARHvAAER8AABEi8AARIxAAESMwABEjUAARI4AAESOQABEjoAARI7AAESPAABEj4AARJAAAESQQABEkIAARJEAAESRQABEmoAARKOAAEStQABEtkAARLcAAES3gABEuAAARLiAAES5AABEuYAARLnAAES6gABEvcAARMGAAETCAABEwoAARMMAAETDgABExAAARMSAAETFAABEyMAARMmAAETKQABEywAARMvAAETMgABEzUAARM4AAETOgABE3kAARN7AAETfQABE38AAROCAAETgwABE4QAAROFAAEThgABE4gAAROKAAETiwABE4wAAROOAAETjwABE84AARPQAAET0gABE9QAARPXAAET2AABE9kAARPaAAET2wABE90AARPfAAET4AABE+EAARPjAAET5AABFCMAARQlAAEUJwABFCkAARQsAAEULQABFC4AARQvAAEUMAABFDIAARQ0AAEUNQABFDYAARQ4AAEUOQABFHgAARR6AAEUfQABFH8AARSCAAEUgwABFIQAARSFAAEUhgABFIgAARSKAAEUiwABFIwAARSOAAEUjwABFM4AARTQAAEU0gABFNQAARTXAAEU2AABFNkAARTaAAEU2wABFN0AARTfAAEU4AABFOEAARTjAAEU5AABFSMAARUlAAEVJwABFSkAARUsAAEVLQABFS4AARUvAAEVMAABFTIAARU0AAEVNQABFTYAARU4AAEVOQABFXgAARV6AAEVfAABFX4AARWBAAEVggABFYMAARWEAAEVhQABFYcAARWJAAEVigABFYsAARWNAAEVjgABFdkAARX8AAEWHAABFjwAARY+AAEWQAABFkIAARZEAAEWRwABFkgAARZJAAEWTAABFk0AARZPAAEWUAABFlIAARZUAAEWVQABFlYAARZZAAEWWgABFl8AARZsAAEWcQABFnMAARZ1AAEWegABFn0AARaAAAEWggABFqcAARbLAAEW8gABFxYAARcZAAEXGwABFx0AARcfAAEXIQABFyMAARckAAEXJwABFzQAARdFAAEXRwABF0kAARdLAAEXTQABF08AARdRAAEXUwABF1UAARdmAAEXaQABF2wAARdvAAEXcgABF3UAARd4AAEXewABF34AAReAAAEXvwABF8EAARfDAAEXxQABF8gAARfJAAEXygABF8sAARfMAAEXzgABF9AAARfRAAEX0gABF9QAARfVAAEYFAABGBYAARgYAAEYGgABGB0AARgeAAEYHwABGCAAARghAAEYIwABGCUAARgmAAEYJwABGCkAARgqAAEYaQABGGsAARhuAAEYcAABGHMAARh0AAEYdQABGHYAARh3AAEYeQABGHsAARh8AAEYfQABGH8AARiAAAEYjQABGI4AARiPAAEYkQABGNAAARjSAAEY1AABGNYAARjZAAEY2gABGNsAARjcAAEY3QABGN8AARjhAAEY4gABGOMAARjlAAEY5gABGSUAARknAAEZKQABGSsAARkuAAEZLwABGTAAARkxAAEZMgABGTQAARk2AAEZNwABGTgAARk6AAEZOwABGXoAARl8AAEZfgABGYAAARmDAAEZhAABGYUAARmGAAEZhwABGYkAARmLAAEZjAABGY0AARmPAAEZkAABGc8AARnRAAEZ0wABGdUAARnYAAEZ2QABGdoAARnbAAEZ3AABGd4AARngAAEZ4QABGeIAARnkAAEZ5QABGiQAARomAAEaKAABGioAARotAAEaLgABGi8AARowAAEaMQABGjMAARo1AAEaNgABGjcAARo5AAEaOgABGl8AARqDAAEaqgABGs4AARrRAAEa0wABGtUAARrXAAEa2QABGtsAARrcAAEa3wABGuwAARr7AAEa/QABGv8AARsBAAEbAwABGwUAARsHAAEbCQABGxgAARsbAAEbHgABGyEAARskAAEbJwABGyoAARstAAEbLwABG24AARtwAAEbcgABG3QAARt3AAEbeAABG3kAARt6AAEbewABG30AARt/AAEbgAABG4EAARuDAAEbhAABG8MAARvFAAEbxwABG8kAARvMAAEbzQABG84AARvPAAEb0AABG9IAARvUAAEb1QABG9YAARvYAAEb2QABHBgAARwaAAEcHAABHB4AARwhAAEcIgABHCMAARwkAAEcJQABHCcAARwpAAEcKgABHCsAARwtAAEcLgABHG0AARxvAAEccgABHHQAARx3AAEceAABHHkAARx6AAEcewABHH0AARx/AAEcgAABHIEAARyDAAEchAABHMMAARzFAAEcxwABHMkAARzMAAEczQABHM4AARzPAAEc0AABHNIAARzUAAEc1QABHNYAARzYAAEc2QABHRgAAR0aAAEdHAABHR4AAR0hAAEdIgABHSMAAR0kAAEdJQABHScAAR0pAAEdKgABHSsAAR0tAAEdLgABHW0AAR1vAAEdcQABHXMAAR12AAEddwABHXgAAR15AAEdegABHXwAAR1+AAEdfwABHYAAAR2CAAEdgwABHc4AAR3xAAEeEQABHjEAAR4zAAEeNQABHjcAAR45AAEePAABHj0AAR4+AAEeQQABHkIAAR5EAAEeRQABHkcAAR5JAAEeSgABHksAAR5OAAEeTwABHlQAAR5hAAEeZgABHmgAAR5qAAEebwABHnIAAR51AAEedwABHpwAAR7AAAEe5wABHwsAAR8OAAEfEAABHxIAAR8UAAEfFgABHxgAAR8ZAAEfHAABHykAAR86AAEfPAABHz4AAR9AAAEfQgABH0QAAR9GAAEfSAABH0oAAR9bAAEfXgABH2EAAR9kAAEfZwABH2oAAR9tAAEfcAABH3MAAR91AAEftAABH7YAAR+4AAEfugABH70AAR++AAEfvwABH8AAAR/BAAEfwwABH8UAAR/GAAEfxwABH8kAAR/KAAEgCQABIAsAASANAAEgDwABIBIAASATAAEgFAABIBUAASAWAAEgGAABIBoAASAbAAEgHAABIB4AASAfAAEgXgABIGAAASBjAAEgZQABIGgAASBpAAEgagABIGsAASBsAAEgbgABIHAAASBxAAEgcgABIHQAASB1AAEgggABIIUAASCIAAEgiwABII4AASCQAAEgqgABILQAASDzAAEg9QABIPcAASD5AAEg/AABIP0AASD+AAEg/wABIQAAASECAAEhBAABIQUAASEGAAEhCAABIQkAASFIAAEhSgABIUwAASFOAAEhUQABIVIAASFTAAEhVAABIVUAASFXAAEhWQABIVoAASFbAAEhXQABIV4AASGdAAEhnwABIaEAASGjAAEhpgABIacAASGoAAEhqQABIaoAASGsAAEhrgABIa8AASGwAAEhsgABIbMAASHyAAEh9AABIfYAASH4AAEh+wABIfwAASH9AAEh/gABIf8AASIBAAEiAwABIgQAASIFAAEiBwABIggAASJHAAEiSQABIksAASJNAAEiUAABIlEAASJSAAEiUwABIlQAASJWAAEiWAABIlkAASJaAAEiXAABIl0AASKCAAEipgABIs0AASLxAAEi9AABIvYAASL4AAEi+gABIvwAASL+AAEi/wABIwIAASMPAAEjHgABIyAAASMiAAEjJAABIyYAASMoAAEjKgABIywAASM7AAEjPgABI0EAASNEAAEjRwABI0oAASNNAAEjUAABI1IAASORAAEjkwABI5UAASOXAAEjmgABI5sAASOcAAEjnQABI54AASOgAAEjogABI6MAASOkAAEjpgABI6cAASPmAAEj6AABI+oAASPsAAEj7wABI/AAASPxAAEj8gABI/MAASP1AAEj9wABI/gAASP5AAEj+wABI/wAASQ7AAEkPQABJD8AASRBAAEkRAABJEUAASRGAAEkRwABJEgAASRKAAEkTAABJE0AASROAAEkUAABJFEAASSQAAEkkgABJJUAASSXAAEkmgABJJsAASScAAEknQABJJ4AASSgAAEkogABJKMAASSkAAEkpgABJKcAASTmAAEk6AABJOoAASTsAAEk7wABJPAAASTxAAEk8gABJPMAAST1AAEk9wABJPgAAST5AAEk+wABJPwAASU7AAElPQABJUAAASVCAAElRQABJUYAASVHAAElSAABJUkAASVLAAElTQABJU4AASVPAAElUQABJVIAASVuAAElrQABJa8AASWxAAElswABJbYAASW3AAEluAABJbkAASW6AAElvAABJb4AASW/AAElwAABJcIAASXDAAEmDgABJjEAASZRAAEmcQABJnMAASZ1AAEmdwABJnkAASZ8AAEmfQABJn4AASaBAAEmggABJoQAASaFAAEmhwABJokAASaKAAEmiwABJo4AASaPAAEmlAABJqEAASamAAEmqAABJqoAASavAAEmsgABJrUAASa3AAEm3AABJwAAAScnAAEnSwABJ04AASdQAAEnUgABJ1QAASdWAAEnWAABJ1kAASdcAAEnaQABJ3oAASd8AAEnfgABJ4AAASeCAAEnhAABJ4YAASeIAAEnigABJ5sAASeeAAEnoQABJ6QAASenAAEnqgABJ60AASewAAEnswABJ7UAASf0AAEn9gABJ/gAASf6AAEn/QABJ/4AASf/AAEoAAABKAEAASgDAAEoBQABKAYAASgHAAEoCQABKAoAAShJAAEoSwABKE0AAShPAAEoUgABKFMAAShUAAEoVQABKFYAAShYAAEoWgABKFsAAShcAAEoXgABKF8AASieAAEooAABKKMAASilAAEoqAABKKkAASiqAAEoqwABKKwAASiuAAEosAABKLEAASiyAAEotAABKLUAASjCAAEowwABKMQAASjGAAEpBQABKQcAASkJAAEpCwABKQ4AASkPAAEpEAABKREAASkSAAEpFAABKRYAASkXAAEpGAABKRoAASkbAAEpWgABKVwAASleAAEpYAABKWMAASlkAAEpZQABKWYAASlnAAEpaQABKWsAASlsAAEpbQABKW8AASlwAAEprwABKbEAASmzAAEptQABKbgAASm5AAEpugABKbsAASm8AAEpvgABKcAAASnBAAEpwgABKcQAASnFAAEqBAABKgYAASoIAAEqCgABKg0AASoOAAEqDwABKhAAASoRAAEqEwABKhUAASoWAAEqFwABKhkAASoaAAEqWQABKlsAASpdAAEqXwABKmIAASpjAAEqZAABKmUAASpmAAEqaAABKmoAASprAAEqbAABKm4AASpvAAEqlAABKrgAASrfAAErAwABKwYAASsIAAErCgABKwwAASsOAAErEAABKxEAASsUAAErIQABKzAAASsyAAErNAABKzYAASs4AAErOgABKzwAASs+AAErTQABK1AAAStTAAErVgABK1kAAStcAAErXwABK2IAAStkAAErowABK6UAASunAAErqQABK6wAASutAAErrgABK68AASuwAAErsgABK7QAASu1AAErtgABK7gAASu5AAEr+AABK/oAASv8AAEr/gABLAEAASwCAAEsAwABLAQAASwFAAEsBwABLAkAASwKAAEsCwABLA0AASwOAAEsTQABLE8AASxRAAEsUwABLFYAASxXAAEsWAABLFkAASxaAAEsXAABLF4AASxfAAEsYAABLGIAASxjAAEsogABLKQAASynAAEsqQABLKwAASytAAEsrgABLK8AASywAAEssgABLLQAASy1AAEstgABLLgAASy5AAEs+AABLPoAASz8AAEs/gABLQEAAS0CAAEtAwABLQQAAS0FAAEtBwABLQkAAS0KAAEtCwABLQ0AAS0OAAEtTQABLU8AAS1RAAEtUwABLVYAAS1XAAEtWAABLVkAAS1aAAEtXAABLV4AAS1fAAEtYAABLWIAAS1jAAEtogABLaQAAS2mAAEtqAABLasAAS2sAAEtrQABLa4AAS2vAAEtsQABLbMAAS20AAEttQABLbcAAS24AAEuAwABLiYAAS5GAAEuZgABLmgAAS5qAAEubAABLm4AAS5xAAEucgABLnMAAS52AAEudwABLnkAAS56AAEufAABLn8AAS6AAAEugQABLoQAAS6FAAEuigABLpcAAS6cAAEungABLqAAAS6lAAEuqAABLqsAAS6tAAEu0gABLvYAAS8dAAEvQQABL0QAAS9GAAEvSAABL0oAAS9MAAEvTgABL08AAS9SAAEvXwABL3AAAS9yAAEvdAABL3YAAS94AAEvegABL3wAAS9+AAEvgAABL5EAAS+UAAEvlwABL5oAAS+dAAEvoAABL6MAAS+mAAEvqQABL6sAAS/qAAEv7AABL+4AAS/wAAEv8wABL/QAAS/1AAEv9gABL/cAAS/5AAEv+wABL/wAAS/9AAEv/wABMAAAATA/AAEwQQABMEMAATBFAAEwSAABMEkAATBKAAEwSwABMEwAATBOAAEwUAABMFEAATBSAAEwVAABMFUAATCUAAEwlgABMJkAATCbAAEwngABMJ8AATCgAAEwoQABMKIAATCkAAEwpgABMKcAATCoAAEwqgABMKsAATC4AAEwuQABMLoAATC8AAEw+wABMP0AATD/AAExAQABMQQAATEFAAExBgABMQcAATEIAAExCgABMQwAATENAAExDgABMRAAATERAAExUAABMVIAATFUAAExVgABMVkAATFaAAExWwABMVwAATFdAAExXwABMWEAATFiAAExYwABMWUAATFmAAExpQABMacAATGpAAExqwABMa4AATGvAAExsAABMbEAATGyAAExtAABMbYAATG3AAExuAABMboAATG7AAEx+gABMfwAATH+AAEyAAABMgMAATIEAAEyBQABMgYAATIHAAEyCQABMgsAATIMAAEyDQABMg8AATIQAAEyTwABMlEAATJTAAEyVQABMlgAATJZAAEyWgABMlsAATJcAAEyXgABMmAAATJhAAEyYgABMmQAATJlAAEyigABMq4AATLVAAEy+QABMvwAATL+AAEzAAABMwIAATMEAAEzBgABMwcAATMKAAEzFwABMyYAATMoAAEzKgABMywAATMuAAEzMAABMzIAATM0AAEzQwABM0YAATNJAAEzTAABM08AATNSAAEzVQABM1gAATNaAAEzmQABM5sAATOeAAEzoAABM6MAATOkAAEzpQABM6YAATOnAAEzqQABM6sAATOsAAEzrQABM68AATOwAAEz7wABM/EAATPzAAEz9QABM/gAATP5AAEz+gABM/sAATP8AAEz/gABNAAAATQBAAE0AgABNAQAATQFAAE0RAABNEYAATRIAAE0SgABNE0AATROAAE0TwABNFAAATRRAAE0UwABNFUAATRWAAE0VwABNFkAATRaAAE0mQABNJsAATSeAAE0oAABNKMAATSkAAE0pQABNKYAATSnAAE0qQABNKsAATSsAAE0rQABNK8AATSwAAE07wABNPEAATTzAAE09QABNPgAATT5AAE0+gABNPsAATT8AAE0/gABNQAAATUBAAE1AgABNQQAATUFAAE1RAABNUYAATVIAAE1SgABNU0AATVOAAE1TwABNVAAATVRAAE1UwABNVUAATVWAAE1VwABNVkAATVaAAE1mQABNZsAATWdAAE1nwABNaIAATWjAAE1pAABNaUAATWmAAE1qAABNaoAATWrAAE1rAABNa4AATWvAAE1uAABNbkAATW7AAE1+gABNfwAATX+AAE2AAABNgMAATYEAAE2BQABNgYAATYHAAE2CQABNgsAATYMAAE2DQABNg8AATYQAAE2TwABNlEAATZTAAE2VQABNlgAATZZAAE2WgABNlsAATZcAAE2XgABNmAAATZhAAE2YgABNmQAATZlAAE2pAABNqYAATapAAE2qwABNq4AATavAAE2sAABNrEAATayAAE2tAABNrYAATa3AAE2uAABNroAATa7AAE3BgABNykAATdJAAE3aQABN2sAATdtAAE3bwABN3EAATdzAAE3dAABN3UAATd4AAE3eQABN3sAATd8AAE3fgABN4AAATeBAAE3ggABN4UAATeGAAE3iwABN5gAATedAAE3nwABN6EAATemAAE3qQABN6wAATeuAAE30wABN/cAATgeAAE4QgABOEUAAThHAAE4SQABOEsAAThNAAE4TwABOFAAAThTAAE4YAABOHEAAThzAAE4dQABOHcAATh5AAE4ewABOH0AATh/AAE4gQABOJIAATiVAAE4mAABOJsAATieAAE4oQABOKQAATinAAE4qgABOKwAATjrAAE47QABOO8AATjxAAE49AABOPUAATj2AAE49wABOPgAATj6AAE4/AABOP0AATj+AAE5AAABOQEAATlAAAE5QgABOUQAATlGAAE5SQABOUoAATlLAAE5TAABOU0AATlPAAE5UQABOVIAATlTAAE5VQABOVYAATmVAAE5lwABOZoAATmcAAE5nwABOaAAATmhAAE5ogABOaMAATmlAAE5pwABOagAATmpAAE5qwABOawAATm5AAE5ugABObsAATm9AAE5/AABOf4AAToAAAE6AgABOgUAAToGAAE6BwABOggAAToJAAE6CwABOg0AAToOAAE6DwABOhEAAToSAAE6UQABOlMAATpVAAE6VwABOloAATpbAAE6XAABOl0AATpeAAE6YAABOmIAATpjAAE6ZAABOmYAATpnAAE6pgABOqgAATqqAAE6rAABOq8AATqwAAE6sQABOrIAATqzAAE6tQABOrcAATq4AAE6uQABOrsAATq8AAE6+wABOv0AATr/AAE7AQABOwQAATsFAAE7BgABOwcAATsIAAE7CgABOwwAATsNAAE7DgABOxAAATsRAAE7UAABO1IAATtUAAE7VgABO1kAATtaAAE7WwABO1wAATtdAAE7XwABO2EAATtiAAE7YwABO2UAATtmAAE7iwABO68AATvWAAE7+gABO/0AATv/AAE8AQABPAMAATwFAAE8BwABPAgAATwLAAE8GAABPCcAATwpAAE8KwABPC0AATwvAAE8MQABPDMAATw1AAE8RAABPEcAATxKAAE8TQABPFAAATxTAAE8VgABPFkAATxbAAE8mgABPJwAATyeAAE8oAABPKMAATykAAE8pQABPKYAATynAAE8qQABPKsAATysAAE8rQABPK8AATywAAE87wABPPEAATzzAAE89QABPPgAATz5AAE8+gABPPsAATz8AAE8/gABPQAAAT0BAAE9AgABPQQAAT0FAAE9RAABPUYAAT1IAAE9SgABPU0AAT1OAAE9TwABPVAAAT1RAAE9UwABPVUAAT1WAAE9VwABPVkAAT1aAAE9mQABPZsAAT2eAAE9oAABPaMAAT2kAAE9pQABPaYAAT2nAAE9qQABPasAAT2sAAE9rQABPa8AAT2wAAE98wABPhcAAT47AAE+XgABPoUAAT6lAAE+zAABPvMAAT8TAAE/NwABP1sAAT9dAAE/YAABP2IAAT9kAAE/ZgABP2kAAT9sAAE/bgABP3AAAT9zAAE/dQABP3cAAT96AAE/fQABP34AAT+DAAE/kAABP5MAAT+VAAE/mAABP5sAAT+dAAE/wgABP+YAAUANAAFAMQABQDQAAUA2AAFAOAABQDoAAUA8AAFAPgABQD8AAUBCAAFATwABQGIAAUBkAAFAZgABQGgAAUBqAAFAbAABQG4AAUBwAAFAcgABQHQAAUCHAAFAigABQI0AAUCQAAFAkwABQJYAAUCZAAFAnAABQJ8AAUCiAAFApAABQOMAAUDlAAFA6AABQOoAAUDtAAFA7gABQO8AAUDwAAFA8QABQPMAAUD1AAFA9gABQPcAAUD5AAFA+gA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BVxgAAVcaAAFXWQABV1sAAVddAAFXXwABV2IAAVdjAAFXZAABV2UAAVdmAAFXaAABV2oAAVdrAAFXbAABV24AAVdvAAFXrgABV7AAAVeyAAFXtAABV7cAAVe4AAFXuQABV7oAAVe7AAFXvQABV78AAVfAAAFXwQABV8MAAVfEAAFYAwABWAUAAVgHAAFYCQABWAwAAVgNAAFYDgABWA8AAVgQAAFYEgABWBQAAVgVAAFYFgABWBgAAVgZAAFYWAABWFoAAVhcAAFYXgABWGEAAVhiAAFYYwABWGQAAVhlAAFYZwABWGkAAVhqAAFYawABWG0AAVhuAAFYrQABWK8AAVixAAFYswABWLYAAVi3AAFYuAABWLkAAVi6AAFYvAABWL4AAVi/AAFYwAABWMIAAVjDAAFY6AABWQwAAVkzAAFZVwABWVoAAVlcAAFZXgABWWAAAVliAAFZZAABWWUAAVloAAFZdQABWYQAAVmGAAFZiAABWYoAAVmMAAFZjgABWZAAAVmSAAFZoQABWaQAAVmnAAFZqgABWa0AAVmwAAFZswABWbYAAVm4AAFZ9wABWfkAAVn7AAFZ/QABWgAAAVoBAAFaAgABWgMAAVoEAAFaBgABWggAAVoJAAFaCgABWgwAAVoNAAFaTAABWk4AAVpQAAFaUgABWlUAAVpWAAFaVwABWlgAAVpZAAFaWwABWl0AAVpeAAFaXwABWmEAAVpiAAFaoQABWqMAAVqlAAFapwABWqoAAVqrAAFarAABWq0AAVquAAFasAABWrIAAVqzAAFatAABWrYAAVq3AAFa9gABWvgAAVr7AAFa/QABWwAAAVsBAAFbAgABWwMAAVsEAAFbBgABWwgAAVsJAAFbCgABWwwAAVsNAAFbTAABW04AAVtQAAFbUgABW1UAAVtWAAFbVwABW1gAAVtZAAFbWwABW10AAVteAAFbXwABW2EAAVtiAAFboQABW6MAAVulAAFbpwABW6oAAVurAAFbrAABW60AAVuuAAFbsAABW7IAAVuzAAFbtAABW7YAAVu3AAFb9gABW/gAAVv6AAFb/AABW/8AAVwAAAFcAQABXAIAAVwDAAFcBQABXAcAAVwIAAFcCQABXAsAAVwMAAFcFQABXBYAAVwYAAFcVwABXFkAAVxbAAFcXQABXGAAAVxhAAFcYgABXGMAAVxkAAFcZgABXGgAAVxpAAFcagABXGwAAVxtAAFcrAABXK4AAVywAAFcsgABXLUAAVy2AAFctwABXLgAAVy5AAFcuwABXL0AAVy+AAFcvwABXMEAAVzCAAFdAQABXQMAAV0GAAFdCAABXQsAAV0MAAFdDQABXQ4AAV0PAAFdEQABXRMAAV0UAAFdFQABXRcAAV0YAAFdYwABXYYAAV2mAAFdxgABXcgAAV3KAAFdzAABXc4AAV3QAAFd0QABXdIAAV3VAAFd1gABXdgAAV3ZAAFd2wABXd0AAV3eAAFd3wABXeIAAV3jAAFd7AABXfkAAV3+AAFeAAABXgIAAV4HAAFeCgABXg0AAV4PAAFeNAABXlgAAV5/AAFeowABXqYAAV6oAAFeqgABXqwAAV6uAAFesAABXrEAAV60AAFewQABXtIAAV7UAAFe1gABXtgAAV7aAAFe3AABXt4AAV7gAAFe4gABXvMAAV72AAFe+QABXvwAAV7/AAFfAgABXwUAAV8IAAFfCwABXw0AAV9MAAFfTgABX1AAAV9SAAFfVQABX1YAAV9XAAFfWAABX1kAAV9bAAFfXQABX14AAV9fAAFfYQABX2IAAV+hAAFfowABX6UAAV+nAAFfqgABX6sAAV+sAAFfrQABX64AAV+wAAFfsgABX7MAAV+0AAFftgABX7cAAV/2AAFf+AABX/sAAV/9AAFgAAABYAEAAWACAAFgAwABYAQAAWAGAAFgCAABYAkAAWAKAAFgDAABYA0AAWAaAAFgGwABYBwAAWAeAAFgXQABYF8AAWBhAAFgYwABYGYAAWBnAAFgaAABYGkAAWBqAAFgbAABYG4AAWBvAAFgcAABYHIAAWBzAAFgsgABYLQAAWC2AAFguAABYLsAAWC8AAFgvQABYL4AAWC/AAFgwQABYMMAAWDEAAFgxQABYMcAAWDIAAFhBwABYQkAAWELAAFhDQABYRAAAWERAAFhEgABYRMAAWEUAAFhFgABYRgAAWEZAAFhGgABYRwAAWEdAAFhXAABYV4AAWFgAAFhYgABYWUAAWFmAAFhZwABYWgAAWFpAAFhawABYW0AAWFuAAFhbwABYXEAAWFyAAFhsQABYbMAAWG1AAFhtwABYboAAWG7AAFhvAABYb0AAWG+AAFhwAABYcIAAWHDAAFhxAABYcYAAWHHAAFh7AABYhAAAWI3AAFiWwABYl4AAWJgAAFiYgABYmQAAWJmAAFiaAABYmkAAWJsAAFieQABYogAAWKKAAFijAABYo4AAWKQAAFikgABYpQAAWKWAAFipQABYqgAAWKrAAFirgABYrEAAWK0AAFitwABYroAAWK8AAFi+wABYv0AAWL/AAFjAQABYwQAAWMFAAFjBgABYwcAAWMIAAFjCgABYwwAAWMNAAFjDgABYxAAAWMRAAFjUAABY1IAAWNUAAFjVgABY1kAAWNaAAFjWwABY1wAAWNdAAFjXwABY2EAAWNiAAFjYwABY2UAAWNmAAFjpQABY6cAAWOpAAFjqwABY64AAWOvAAFjsAABY7EAAWOyAAFjtAABY7YAAWO3AAFjuAABY7oAAWO7AAFj+gABY/wAAWP/AAFkAQABZAQAAWQFAAFkBgABZAcAAWQIAAFkCgABZAwAAWQNAAFkDgABZBAAAWQRAAFkUAABZFIAAWRUAAFkVgABZFkAAWRaAAFkWwABZFwAAWRdAAFkXwABZGEAAWRiAAFkYwABZGUAAWRmAAFkpQABZKcAAWSpAAFkqwABZK4AAWSvAAFksAABZLEAAWSyAAFktAABZLYAAWS3AAFkuAABZLoAAWS7AAFk+gABZPwAAWT+AAFlAAABZQMAAWUEAAFlBQABZQYAAWUHAAFlCQABZQsAAWUMAAFlDQABZQ8AAWUQAAFlGQABZRoAAWUcAAFlWwABZV0AAWVfAAFlYQABZWMAAWVkAAFlZQABZWYAAWVnAAFlaQABZWsAAWVsAAFlbQABZW8AAWVwAAFlrwABZbEAAWWzAAFltQABZbcAAWW4AAFluQABZboAAWW7AAFlvQABZb8AAWXAAAFlwQABZcMAAWXEAAFmAwABZgUAAWYHAAFmCQABZgsAAWYMAAFmDQABZg4AAWYPAAFmEQABZhMAAWYUAAFmFQABZhcAAWYYAAFmYwABZoYAAWamAAFmxgABZsgAAWbKAAFmzAABZs4AAWbQAAFm0QABZtIAAWbVAAFm1gABZtgAAWbZAAFm2wABZt0AAWbeAAFm3wABZuIAAWbjAAFm6AABZvUAAWb6AAFm/AABZv4AAWcDAAFnBgABZwkAAWcLAAFnMAABZ1QAAWd7AAFnnwABZ6IAAWekAAFnpgABZ6gAAWeqAAFnrAABZ60AAWewAAFnvQABZ84AAWfQAAFn0gABZ9QAAWfWAAFn2AABZ9oAAWfcAAFn3gABZ+8AAWfyAAFn9QABZ/gAAWf7AAFn/gABaAEAAWgEAAFoBwABaAkAAWhIAAFoSgABaEwAAWhOAAFoUQABaFIAAWhTAAFoVAABaFUAAWhXAAFoWQABaFoAAWhbAAFoXQABaF4AAWidAAFonwABaKEAAWijAAFopgABaKcAAWioAAFoqQABaKoAAWisAAForgABaK8AAWiwAAFosgABaLMAAWjyAAFo9AABaPcAAWj5AAFo/AABaP0AAWj+AAFo/wABaQAAAWkCAAFpBAABaQUAAWkGAAFpCAABaQkAAWkWAAFpFwABaRgAAWkaAAFpWQABaVsAAWldAAFpXwABaWIAAWljAAFpZAABaWUAAWlmAAFpaAABaWoAAWlrAAFpbAABaW4AAWlvAAFprgABabAAAWmyAAFptAABabcAAWm4AAFpuQABaboAAWm7AAFpvQABab8AAWnAAAFpwQABacMAAWnEAAFqAwABagUAAWoHAAFqCQABagwAAWoNAAFqDgABag8AAWoQAAFqEgABahQAAWoVAAFqFgABahgAAWoZAAFqWAABaloAAWpcAAFqXgABamEAAWpiAAFqYwABamQAAWplAAFqZwABamkAAWpqAAFqawABam0AAWpuAAFqrQABaq8AAWqxAAFqswABarYAAWq3AAFquAABarkAAWq6AAFqvAABar4AAWq/AAFqwAABasIAAWrDAAFq6AABawwAAWszAAFrVwABa1oAAWtcAAFrXgABa2AAAWtiAAFrZAABa2UAAWtoAAFrdQABa4QAAWuGAAFriAABa4oAAWuMAAFrjgABa5AAAWuSAAFroQABa6QAAWunAAFrqgABa60AAWuwAAFrswABa7YAAWu4AAFr9wABa/kAAWv7AAFr/QABbAAAAWwBAAFsAgABbAMAAWwEAAFsBgABbAgAAWwJAAFsCgABbAwAAWwNAAFsTAABbE4AAWxQAAFsUgABbFUAAWxWAAFsVwABbFgAAWxZAAFsWwABbF0AAWxeAAFsXwABbGEAAWxiAAFsoQABbKMAAWylAAFspwABbKoAAWyrAAFsrAABbK0AAWyuAAFssAABbLIAAWyzAAFstAABbLYAAWy3AAFs9gABbPgAAWz6AAFs/AABbP8AAW0AAAFtAQABbQIAAW0DAAFtBQABbQcAAW0IAAFtCQABbQsAAW0MAAFtSwABbU0AAW1PAAFtUQABbVQAAW1VAAFtVgABbVcAAW1YAAFtWgABbVwAAW1dAAFtXgABbWAAAW1hAAFtoAABbaIAAW2kAAFtpgABbakAAW2qAAFtqwABbawAAW2tAAFtrwABbbEAAW2yAAFtswABbbUAAW22AAFt9QABbfcAAW35AAFt+wABbf4AAW3/AAFuAAABbgEAAW4CAAFuBAABbgYAAW4HAAFuCAABbgoAAW4LAAFuVgABbnkAAW6ZAAFuuQABbrsAAW69AAFuvwABbsEAAW7DAAFuxAABbsUAAW7IAAFuyQABbssAAW7MAAFuzgABbtAAAW7RAAFu0gABbtUAAW7WAAFu2wABbugAAW7tAAFu7wABbvEAAW72AAFu+QABbvwAAW7+AAFvIwABb0cAAW9uAAFvkgABb5UAAW+XAAFvmQABb5sAAW+dAAFvnwABb6AAAW+jAAFvsAABb8EAAW/DAAFvxQABb8cAAW/JAAFvywABb80AAW/PAAFv0QABb+IAAW/lAAFv6AABb+sAAW/uAAFv8QABb/QAAW/3AAFv+gABb/wAAXA7AAFwPQABcD8AAXBBAAFwRAABcEUAAXBGAAFwRwABcEgAAXBKAAFwTAABcE0AAXBOAAFwUAABcFEAAXCQAAFwkgABcJQAAXCWAAFwmQABcJoAAXCbAAFwnAABcJ0AAXCfAAFwoQABcKIAAXCjAAFwpQABcKYAAXDlAAFw5wABcOoAAXDsAAFw7wABcPAAAXDxAAFw8gABcPMAAXD1AAFw9wABcPgAAXD5AAFw+wABcPwAAXEJAAFxCgABcQsAAXENAAFxTAABcU4AAXFQAAFxUgABcVUAAXFWAAFxVwABcVgAAXFZAAFxWwABcV0AAXFeAAFxXwABcWEAAXFiAAFxoQABcaMAAXGlAAFxpwABcaoAAXGrAAFxrAABca0AAXGuAAFxsAABcbIAAXGzAAFxtAABcbYAAXG3AAFx9gABcfgAAXH6AAFx/AABcf8AAXIAAAFyAQABcgIAAXIDAAFyBQABcgcAAXIIAAFyCQABcgsAAXIMAAFySwABck0AAXJPAAFyUQABclQAAXJVAAFyVgABclcAAXJYAAFyWgABclwAAXJdAAFyXgABcmAAAXJhAAFyoAABcqIAAXKkAAFypgABcqkAAXKqAAFyqwABcqwAAXKtAAFyrwABcrEAAXKyAAFyswABcrUAAXK2AAFy2wABcv8AAXMmAAFzSgABc00AAXNPAAFzUQABc1MAAXNVAAFzVwABc1gAAXNbAAFzaAABc3cAAXN5AAFzewABc30AAXN/AAFzgQABc4MAAXOFAAFzlAABc5cAAXOaAAFznQABc6AAAXOjAAFzpgABc6kAAXOrAAFz6gABc+wAAXPuAAFz8AABc/MAAXP0AAFz9QABc/YAAXP3AAFz+QABc/sAAXP8AAFz/QABc/8AAXQAAAF0PwABdEEAAXRDAAF0RQABdEgAAXRJAAF0SgABdEsAAXRMAAF0TgABdFAAAXRRAAF0UgABdFQAAXRVAAF0lAABdJYAAXSYAAF0mgABdJ0AAXSeAAF0nwABdKAAAXShAAF0owABdKUAAXSmAAF0pwABdKkAAXSqAAF06QABdOsAAXTtAAF07wABdPIAAXTzAAF09AABdPUAAXT2AAF0+AABdPoAAXT7AAF0/AABdP4AAXT/AAF1PgABdUAAAXVCAAF1RAABdUcAAXVIAAF1SQABdUoAAXVLAAF1TQABdU8AAXVQAAF1UQABdVMAAXVUAAF1kwABdZUAAXWXAAF1mQABdZwAAXWdAAF1ngABdZ8AAXWgAAF1ogABdaQAAXWlAAF1pgABdagAAXWpAAF16AABdeoAAXXsAAF17gABdfEAAXXyAAF18wABdfQAAXX1AAF19wABdfkAAXX6AAF1+wABdf0AAXX+AAF2SQABdmwAAXaMAAF2rAABdq4AAXawAAF2sgABdrQAAXa2AAF2twABdrgAAXa7AAF2vAABdr4AAXa/AAF2wQABdsMAAXbEAAF2xQABdsgAAXbJAAF2zgABdtsAAXbgAAF24gABduQAAXbpAAF27AABdu8AAXbxAAF3FgABdzoAAXdhAAF3hQABd4gAAXeKAAF3jAABd44AAXeQAAF3kgABd5MAAXeWAAF3owABd7QAAXe2AAF3uAABd7oAAXe8AAF3vgABd8AAAXfCAAF3xAABd9UAAXfYAAF32wABd94AAXfhAAF35AABd+cAAXfqAAF37QABd+8AAXguAAF4MAABeDIAAXg0AAF4NwABeDgAAXg5AAF4OgABeDsAAXg9AAF4PwABeEAAAXhBAAF4QwABeEQAAXiDAAF4hQABeIcAAXiJAAF4jAABeI0AAXiOAAF4jwABeJAAAXiSAAF4lAABeJUAAXiWAAF4mAABeJkAAXjYAAF42gABeN0AAXjfAAF44gABeOMAAXjkAAF45QABeOYAAXjoAAF46gABeOsAAXjsAAF47gABeO8AAXj8AAF4/QABeP4AAXkAAAF5PwABeUEAAXlDAAF5RQABeUgAAXlJAAF5SgABeUsAAXlMAAF5TgABeVAAAXlRAAF5UgABeVQAAXlVAAF5lAABeZYAAXmYAAF5mgABeZ0AAXmeAAF5nwABeaAAAXmhAAF5owABeaUAAXmmAAF5pwABeakAAXmqAAF56QABeesAAXntAAF57wABefIAAXnzAAF59AABefUAAXn2AAF5+AABefoAAXn7AAF5/AABef4AAXn/AAF6PgABekAAAXpCAAF6RAABekcAAXpIAAF6SQABekoAAXpLAAF6TQABek8AAXpQAAF6UQABelMAAXpUAAF6kwABepUAAXqXAAF6mQABepwAAXqdAAF6ngABep8AAXqgAAF6ogABeqQAAXqlAAF6pgABeqgAAXqpAAF6zgABevIAAXsZAAF7PQABe0AAAXtCAAF7RAABe0YAAXtIAAF7SgABe0sAAXtOAAF7WwABe2oAAXtsAAF7bgABe3AAAXtyAAF7dAABe3YAAXt4AAF7hwABe4oAAXuNAAF7kAABe5MAAXuWAAF7mQABe5wAAXueAAF73QABe98AAXvhAAF74wABe+YAAXvnAAF76AABe+kAAXvqAAF77AABe+4AAXvvAAF78AABe/IAAXvzAAF8MgABfDQAAXw2AAF8OAABfDsAAXw8AAF8PQABfD4AAXw/AAF8QQABfEMAAXxEAAF8RQABfEcAAXxIAAF8hwABfIkAAXyLAAF8jQABfJAAAXyRAAF8kgABfJMAAXyUAAF8lgABfJgAAXyZAAF8mgABfJwAAXydAAF83AABfN4AAXzhAAF84wABfOYAAXznAAF86AABfOkAAXzqAAF87AABfO4AAXzvAAF88AABfPIAAXzzAAF9MgABfTQAAX02AAF9OAABfTsAAX08AAF9PQABfT4AAX0/AAF9QQABfUMAAX1EAAF9RQABfUcAAX1IAAF9hwABfYkAAX2LAAF9jQABfZAAAX2RAAF9kgABfZMAAX2UAAF9lgABfZgAAX2ZAAF9mgA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BlHAAAZRyAAGUdQABlHYAAZR3AAGUeAABlHkAAZR7AAGUfQABlH4AAZR/AAGUgQABlIIAAZTBAAGUwwABlMUAAZTHAAGUygABlMsAAZTMAAGUzQABlM4AAZTQAAGU0gABlNMAAZTUAAGU1gABlNcAAZUWAAGVGAABlRsAAZUdAAGVIAABlSEAAZUiAAGVIwABlSQAAZUmAAGVKAABlSkAAZUqAAGVLAABlS0AAZVsAAGVbgABlXAAAZVyAAGVdQABlXYAAZV3AAGVeAABlXkAAZV7AAGVfQABlX4AAZV/AAGVgQABlYIAAZXBAAGVwwABlcUAAZXHAAGVygABlcsAAZXMAAGVzQABlc4AAZXQAAGV0gABldMAAZXUAAGV1gABldcAAZYWAAGWGAABlhoAAZYcAAGWHwABliAAAZYhAAGWIgABliMAAZYlAAGWJwABligAAZYpAAGWKwABliwAAZY1AAGWNgABljgAAZZ7AAGWnwABlsMAAZbmAAGXDQABly0AAZdUAAGXewABl5sAAZe/AAGX4wABl+UAAZfoAAGX6gABl+wAAZfuAAGX8QABl/QAAZf2AAGX+AABl/sAAZf9AAGX/wABmAIAAZgFAAGYBgABmAsAAZgYAAGYGwABmB0AAZggAAGYIwABmCUAAZhKAAGYbgABmJUAAZi5AAGYvAABmL4AAZjAAAGYwgABmMQAAZjGAAGYxwABmMoAAZjXAAGY6gABmOwAAZjuAAGY8AABmPIAAZj0AAGY9gABmPgAAZj6AAGY/AABmQ8AAZkSAAGZFQABmRgAAZkbAAGZHgABmSEAAZkkAAGZJwABmSoAAZksAAGZawABmW0AAZlwAAGZcgABmXUAAZl2AAGZdwABmXgAAZl5AAGZewABmX0AAZl+AAGZfwABmYEAAZmCAAGZiwABmYwAAZmOAAGZzQABmc8AAZnRAAGZ0wABmdYAAZnXAAGZ2AABmdkAAZnaAAGZ3AABmd4AAZnfAAGZ4AABmeIAAZnjAAGaIgABmiQAAZonAAGaKQABmiwAAZotAAGaLgABmi8AAZowAAGaMgABmjQAAZo1AAGaNgABmjgAAZo5AAGaQgABmkcAAZpKAAGaTQABmk8AAZpYAAGaXwABmmIAAZplAAGaaAABmmoAAZqEAAGakAABmpkAAZqcAAGangABmqAAAZrfAAGa4QABmuMAAZrlAAGa6AABmukAAZrqAAGa6wABmuwAAZruAAGa8AABmvEAAZryAAGa9AABmvUAAZs0AAGbNgABmzkAAZs7AAGbPgABmz8AAZtAAAGbQQABm0IAAZtEAAGbRgABm0cAAZtIAAGbSgABm0sAAZtUAAGbVQABm1cAAZuWAAGbmAABm5oAAZucAAGbnwABm6AAAZuhAAGbogABm6MAAZulAAGbpwABm6gAAZupAAGbqwABm6wAAZvrAAGb7QABm/AAAZvyAAGb9QABm/YAAZv3AAGb+AABm/kAAZv7AAGb/QABm/4AAZv/AAGcAQABnAIAAZwPAAGcEAABnBEAAZwTAAGcUgABnFQAAZxWAAGcWAABnFsAAZxcAAGcXQABnF4AAZxfAAGcYQABnGMAAZxkAAGcZQABnGcAAZxoAAGcpwABnKkAAZysAAGcrgABnLEAAZyyAAGcswABnLQAAZy1AAGctwABnLkAAZy6AAGcuwABnL0AAZy+AAGc2wABnOgAAZzzAAGc9gABnPkAAZz8AAGc/wABnQEAAZ0MAAGdDwABnRIAAZ0VAAGdGAABnRsAAZ0dAAGdKQABnUMAAZ1bAAGdpgABnckAAZ3pAAGeCQABngsAAZ4NAAGeDwABnhEAAZ4UAAGeFQABnhYAAZ4ZAAGeGgABnhwAAZ4dAAGeHwABniIAAZ4jAAGeJAABnicAAZ4oAAGeLQABnjoAAZ4/AAGeQQABnkMAAZ5IAAGeSwABnk4AAZ5QAAGedQABnpkAAZ7AAAGe5AABnucAAZ7pAAGe6wABnu0AAZ7vAAGe8QABnvIAAZ71AAGfAgABnxMAAZ8VAAGfFwABnxkAAZ8bAAGfHQABnx8AAZ8hAAGfIwABnzQAAZ83AAGfOgABnz0AAZ9AAAGfQwABn0YAAZ9JAAGfTAABn04AAZ+NAAGfjwABn5EAAZ+TAAGflgABn5cAAZ+YAAGfmQABn5oAAZ+cAAGfngABn58AAZ+gAAGfogABn6MAAZ/iAAGf5AABn+YAAZ/oAAGf6wABn+wAAZ/tAAGf7gABn+8AAZ/xAAGf8wABn/QAAZ/1AAGf9wABn/gAAaA3AAGgOQABoDwAAaA+AAGgQQABoEIAAaBDAAGgRAABoEUAAaBHAAGgSQABoEoAAaBLAAGgTQABoE4AAaBbAAGgXAABoF0AAaBfAAGgngABoKAAAaCiAAGgpAABoKcAAaCoAAGgqQABoKoAAaCrAAGgrQABoK8AAaCwAAGgsQABoLMAAaC0AAGg8wABoPUAAaD3AAGg+QABoPwAAaD9AAGg/gABoP8AAaEAAAGhAgABoQQAAaEFAAGhBgABoQgAAaEJAAGhSAABoUoAAaFMAAGhTgABoVEAAaFSAAGhUwABoVQAAaFVAAGhVwABoVkAAaFaAAGhWwABoV0AAaFeAAGhnQABoZ8AAaGhAAGhowABoaYAAaGnAAGhqAABoakAAaGqAAGhrAABoa4AAaGvAAGhsAABobIAAaGzAAGh8gABofQAAaH2AAGh+AABofsAAaH8AAGh/QABof4AAaH/AAGiAQABogMAAaIEAAGiBQABogcAAaIIAAGiLQABolEAAaJ4AAGinAABop8AAaKhAAGiowABoqUAAaKnAAGiqQABoqoAAaKtAAGiugABoskAAaLLAAGizQABos8AAaLRAAGi0wABotUAAaLXAAGi5gABoukAAaLsAAGi7wABovIAAaL1AAGi+AABovsAAaL9AAGjPAABoz4AAaNBAAGjQwABo0YAAaNHAAGjSAABo0kAAaNKAAGjTAABo04AAaNPAAGjUAABo1IAAaNTAAGjkgABo5QAAaOWAAGjmAABo5sAAaOcAAGjnQABo54AAaOfAAGjoQABo6MAAaOkAAGjpQABo6cAAaOoAAGj5wABo+kAAaPrAAGj7QABo/AAAaPxAAGj8gABo/MAAaP0AAGj9gABo/gAAaP5AAGj+gABo/wAAaP9AAGkPAABpD4AAaRBAAGkQwABpEYAAaRHAAGkSAABpEkAAaRKAAGkTAABpE4AAaRPAAGkUAABpFIAAaRTAAGkkgABpJQAAaSWAAGkmAABpJsAAaScAAGknQABpJ4AAaSfAAGkoQABpKMAAaSkAAGkpQABpKcAAaSoAAGk5wABpOkAAaTrAAGk7QABpPAAAaTxAAGk8gABpPMAAaT0AAGk9gABpPgAAaT5AAGk+gABpPwAAaT9AAGlPAABpT4AAaVAAAGlQgABpUUAAaVGAAGlRwABpUgAAaVJAAGlSwABpU0AAaVOAAGlTwABpVEAAaVSAAGlnQABpcAAAaXgAAGmAAABpgIAAaYEAAGmBgABpggAAaYLAAGmDAABpg0AAaYQAAGmEQABphMAAaYUAAGmFgABphkAAaYaAAGmGwABph4AAaYfAAGmJAABpjEAAaY2AAGmOAABpjoAAaY/AAGmQgABpkUAAaZHAAGmbAABppAAAaa3AAGm2wABpt4AAabgAAGm4gABpuQAAabmAAGm6AABpukAAabsAAGm+QABpwoAAacMAAGnDgABpxAAAacSAAGnFAABpxYAAacYAAGnGgABpysAAacuAAGnMQABpzQAAac3AAGnOgABpz0AAadAAAGnQwABp0UAAaeEAAGnhgABp4gAAaeKAAGnjQABp44AAaePAAGnkAABp5EAAaeTAAGnlQABp5YAAaeXAAGnmQABp5oAAafZAAGn2wABp90AAaffAAGn4gABp+MAAafkAAGn5QABp+YAAafoAAGn6gABp+sAAafsAAGn7gABp+8AAaguAAGoMAABqDMAAag1AAGoOAABqDkAAag6AAGoOwABqDwAAag+AAGoQAABqEEAAahCAAGoRAABqEUAAahSAAGoVQABqFgAAahbAAGoXgABqGAAAah6AAGouQABqLsAAai9AAGovwABqMIAAajDAAGoxAABqMUAAajGAAGoyAABqMoAAajLAAGozAABqM4AAajPAAGpDgABqRAAAakSAAGpFAABqRcAAakYAAGpGQABqRoAAakbAAGpHQABqR8AAakgAAGpIQABqSMAAakkAAGpYwABqWUAAalnAAGpaQABqWwAAaltAAGpbgABqW8AAalwAAGpcgABqXQAAal1AAGpdgABqXgAAal5AAGpuAABqboAAam8AAGpvgABqcEAAanCAAGpwwABqcQAAanFAAGpxwABqckAAanKAAGpywABqc0AAanOAAGqDQABqg8AAaoRAAGqEwABqhYAAaoXAAGqGAABqhkAAaoaAAGqHAABqh4AAaofAAGqIAABqiIAAaojAAGqSAABqmwAAaqTAAGqtwABqroAAaq8AAGqvgABqsAAAarCAAGqxAABqsUAAarIAAGq1QABquQAAarmAAGq6AABquoAAarsAAGq7gABqvAAAaryAAGrAQABqwQAAasHAAGrCgABqw0AAasQAAGrEwABqxYAAasYAAGrVwABq1kAAatbAAGrXQABq2AAAathAAGrYgABq2MAAatkAAGrZgABq2gAAatpAAGragABq2wAAattAAGrrAABq64AAauwAAGrsgABq7UAAau2AAGrtwABq7gAAau5AAGruwABq70AAau+AAGrvwABq8EAAavCAAGsAQABrAMAAawFAAGsBwABrAoAAawLAAGsDAABrA0AAawOAAGsEAABrBIAAawTAAGsFAABrBYAAawXAAGsVgABrFgAAaxbAAGsXQABrGAAAaxhAAGsYgABrGMAAaxkAAGsZgABrGgAAaxpAAGsagABrGwAAaxtAAGsrAABrK4AAaywAAGssgABrLUAAay2AAGstwABrLgAAay5AAGsuwABrL0AAay+AAGsvwABrMEAAazCAAGtAQABrQMAAa0GAAGtCAABrQsAAa0MAAGtDQABrQ4AAa0PAAGtEQABrRMAAa0UAAGtFQABrRcAAa0YAAGtNAABrXMAAa11AAGtdwABrXkAAa18AAGtfQABrX4AAa1/AAGtgAABrYIAAa2EAAGthQABrYYAAa2IAAGtiQABrdQAAa33AAGuFwABrjcAAa45AAGuOwABrj0AAa4/AAGuQgABrkMAAa5EAAGuRwABrkgAAa5KAAGuSwABrk0AAa5QAAGuUQABrlIAAa5VAAGuVgABrlsAAa5oAAGubQABrm8AAa5xAAGudgABrnkAAa58AAGufgABrqMAAa7HAAGu7gABrxIAAa8VAAGvFwABrxkAAa8bAAGvHQABrx8AAa8gAAGvIwABrzAAAa9BAAGvQwABr0UAAa9HAAGvSQABr0sAAa9NAAGvTwABr1EAAa9iAAGvZQABr2gAAa9rAAGvbgABr3EAAa90AAGvdwABr3oAAa98AAGvuwABr70AAa+/AAGvwQABr8QAAa/FAAGvxgABr8cAAa/IAAGvygABr8wAAa/NAAGvzgABr9AAAa/RAAGwEAABsBIAAbAUAAGwFgABsBkAAbAaAAGwGwABsBwAAbAdAAGwHwABsCEAAbAiAAGwIwABsCUAAbAmAAGwZQABsGcAAbBqAAGwbAABsG8AAbBwAAGwcQABsHIAAbBzAAGwdQABsHcAAbB4AAGweQABsHsAAbB8AAGwiQABsIwAAbCPAAGwkgABsJUAAbCXAAGwsQABsMsAAbEKAAGxDAABsQ4AAbEQAAGxEwABsRQAAbEVAAGxFgABsRcAAbEZAAGxGwABsRwAAbEdAAGxHwABsSAAAbFfAAGxYQABsWMAAbFlAAGxaAABsWkAAbFqAAGxawABsWwAAbFuAAGxcAA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 + + Delta/Database/Model/Delta.xcdatamodeld/Delta 6.xcdatamodel + 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NQRxBK0E6QUlBWEFZQWhBfUF+QYZBkkGmQbVBxEHTQdlB2kHbQepB+UIIQhdCJkIyQkRCU0JiQnFCgEKPQp5Cn0KuQsNCxELMQthC7EL7QwpDGUMfQyBDIUMwQz9DTkNdQ2xDeEOKQ5lDqEO3Q8ZD1UPkQ+VD9EQJRApEEkQeRDJEQURQRF9EY0RyRIFEkESfRK5EukTMRNtE6kT5RQhFF0UmRTVFOEU8RUBFREVMRU9FU0VUVSRudWxs1wANAA4ADwAQABEAEgATABQAFQAWABcAGAAXABpfEA9feGRfcm9vdFBhY2thZ2VWJGNsYXNzXF94ZF9jb21tZW50c18QEF94ZF9tb2RlbE1hbmFnZXJfEBVfY29uZmlndXJhdGlvbnNCeU5hbWVdX3hkX21vZGVsTmFtZV8QF19tb2RlbFZlcnNpb25JZGVudGlmaWVygAKBBYuBBYiAAIEFiYAAgQWK3gAcAB0AHgAfACAAIQAiAA4AIwAkACUAJgAnACgAKQAqACsACQApABcALwAwADEAMgAzACkAKQAXXxAcWERCdWNrZXRGb3JDbGFzc2Vzd2FzRW5jb2RlZF8QGlhEQnVja2V0Rm9yUGFja2FnZXNzdG9yYWdlXxAcWERCdWNrZXRGb3JJbnRlcmZhY2Vzc3RvcmFnZV8QD194ZF9vd25pbmdNb2RlbF8QHVhEQnVja2V0Rm9yUGFja2FnZXN3YXNFbmNvZGVkVl9vd25lcl8QG1hEQnVja2V0Rm9yRGF0YVR5cGVzc3RvcmFnZVtfdmlzaWJpbGl0eV8QGVhEQnVja2V0Rm9yQ2xhc3Nlc3N0b3JhZ2VVX25hbWVfEB9YREJ1Y2tldEZvckludGVyZmFjZXN3YXNFbmNvZGVkXxAeWERCdWNrZXRGb3JEYXRhVHlwZXN3YXNFbmNvZGVkXxAQX3VuaXF1ZUVsZW1lbnRJRIAEgQWGgQWEgAGABIAAgQWFgQWHEACABYADgASABIAAUFNZRVPTADoAOwAOADwARABMV05TLmtleXNaTlMub2JqZWN0c6cAPQA+AD8AQABBAEIAQ4AGgAeACIAJgAqAC4AMpwBFAEYARwBIAEkASgBLgA2BA86BAuSA/4EBk4BmgQTtgC5ZU2F2ZVN0YXRlWEdhbWVTYXZlVUNoZWF0XkdhbWVDb2xsZWN0aW9uXkNvbnRyb2xsZXJTa2luVEdhbWVfEBpHYW1lQ29udHJvbGxlcklucHV0TWFwcGluZ98QEABVAFYAVwBYACEAWQBaACMAWwBcAA4AJQBdAF4AKABfAGAAYQApACkAFABlAGYAMQApAGAAaQA9AGAAbABtAG5fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2VfECBYREJ1Y2tldEZvclN0ZXJlb3R5cGVzd2FzRW5jb2RlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QHVhEQnVja2V0Rm9yU3RlcmVvdHlwZXNzdG9yYWdlXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnNkdXBsaWNhdGVzXxAkWERCdWNrZXRGb3JHZW5lcmFsaXphdGlvbnN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc29yZGVyZWRfECFYREJ1Y2tldEZvckdlbmVyYWxpemF0aW9uc3N0b3JhZ2VbX2lzQWJzdHJhY3SAD4A1gASABIACgBCBAV6ABIAPgQFggAaAD4EE7IAOCBLoG89HV29yZGVyZWTTADoAOwAOAHIAdABMoQBzgBGhAHWAEoAuXlhEX1BTdGVyZW90eXBl2QAhACUAeQAOACgAegAjAF8AewBFAHMAYAB/ABcAKQAxAG4Ag18QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzb3JkZXJlZF8QJFhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzd2FzRW5jb2RlZF8QIVhEQnVja2V0Rm9yT3duZWRBdHRyaWJ1dGVzc3RvcmFnZYANgBGAD4A0gACABAiAE9MAOgA7AA4AhQCPAEypAIYAhwCIAIkAigCLAIwAjQCOgBSAFYAWgBeAGIAZgBqAG4AcqQCQAJEAkgCTAJQAlQCWAJcAmIAdgCGAIoAmgCiAKoAsgC+AM4AuXxATWERQTUNvbXBvdW5kSW5kZXhlc18QEFhEX1BTS19lbGVtZW50SURfEBlYRFBNVW5pcXVlbmVzc0NvbnN0cmFpbnRzXxAaWERfUFNLX3Z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ALl8QHVhEX1BBdHRLX2RlZmF1bHRWYWx1ZUFzU3RyaW5nXxAoWERfUEF0dEtfYWxsb3dzRXh0ZXJuYWxCaW5hcnlEYXRhU3RvcmFnZV8QF1hEX1BBdHRLX21pblZhbHVlU3RyaW5nXxAWWERfUEF0dEtfYXR0cmlidXRlVHlwZV8QF1hEX1BBdHRLX21heFZhbHVlU3RyaW5nXxAdWERfUEF0dEtfdmFsdWVUcmFuc2Zvcm1lck5hbWVfECBYRF9QQXR0S19yZWd1bGFyRXhwcmVzc2lvblN0cmluZ98QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPWAG4AbgBuADEAbgC2BIMAbgBuABcAboAAgACAAICSCAgICIAggJQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwPWAG4AbgBuADEAbgC2BIQAbgBuABcAboAAgCuAAICSCAgICIAggJUICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPWAG4AbgBuADEAbgC2BIUAbgBuABcAboAAgACAAICSCAgICIAggJYICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXBMkAFwPWAG4AbgBuADEAbgC2BIYAbgBuABcAboAAgJ+AAICSCAgICIAggJcICIAACBEDhN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPWAG4AbgBuADEAbgC2BIcAbgBuABcAboAAgACAAICSCAgICIAggJgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPWAG4AbgBuADEAbgC2BIgAbgBuABcAboAAgACAAICSCAgICIAggJkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwPWAG4AbgBuADEAbgC2BIkAbgBuABcAboAAgACAAICSCAgICIAggJoICIAACNIAwADBBQUFBl1YRFBNQXR0cmlidXRlpgUHBQgFCQUKBQsAxV1YRFBNQXR0cmlidXRlXFhEUE1Qcm9wZXJ0eV8QEFhEVU1MUHJvcGVydHlJbXBfEBRYRFV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jAKoADgAlAKsArAAoAK0AFwarABcGaABuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIDDgACAvggICAiAIIBHCAiAAAjTADoAOwAOBrkGugBMoKCALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwZoAG4AbgBuADEAbgC2AcEAbgBuABcAboAAgCuAAIC+CAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXAhoAFwZoAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgFOAAIC+CAgICIAggEkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwZoAG4AbgBuADEAbgC2AcMAbgBuABcAboAAgCuAAIC+CAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwZoAG4AbgBuADEAbgC2AcQAbgBuABcAboAAgACAAIC+CAgICIAggEsICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwZoAG4AbgBuADEAbgC2AcUAbgBuABcAboAAgCuAAIC+CAgICIAggEwICIAACNkAIQAlBwgADgAoBwkAIwBfBwoBfwGpAGAAfwAXACkAMQBuBxJfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WAu4BCgA+ANIAAgAQIgMrTADoAOwAOBxQHHABMpwJjAmQCZQJmAmcCaAJpgFmAWoBbgFyAXYBegF+nBx0HHgcfByAHIQciByOAy4DMgM2AzoDPgNCA0YAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCfAAXBmkAbgBuAG4AMQBuALYCYwBuAG4AFwBugACAYYAAgMkICAgIgCCAWQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCiwAXBmkAbgBuAG4AMQBuALYCZABuAG4AFwBugACAY4AAgMkICAgIgCCAWggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcCiwAXBmkAbgBuAG4AMQBuALYCZQBuAG4AFwBugACAY4AAgMkICAgIgCCAWwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcASgAXBmkAbgBuAG4AMQBuALYCZgBuAG4AFwBugACAZoAAgMkICAgIgCCAXAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXBmkAbgBuAG4AMQBuALYCZwBuAG4AFwBugACAK4AAgMkICAgIgCCAXQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXBmkAbgBuAG4AMQBuALYCaABuAG4AFwBugACAK4AAgMkICAgIgCCAXggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcDpAAXBmkAbgBuAG4AMQBuALYCaQBuAG4AFwBugACApIAAgMkICAgIgCCAXwgIgAAI0gDAAMEHjweQXxAQWERQTVJlbGF0aW9uc2hpcKYHkQeSB5MHlAeVAMVfEBBYRFBNUmVsYXRpb25zaGlwXFhEUE1Qcm9wZXJ0eV8QEFhEVU1MUHJvcGVydHlJbXBfEBRYRFVNTE5hbWVkRWxlbWVudEltcF8QD1hEVU1MRWxlbWVudEltcN8QEgCkAKUApgeXACEAqACpB5gAIwCnB5kAqgAOACUAqwCsACgArQAXABcAFwApAEoAbgBuB6EAMQBuAGAAbgGfA5cAbgBuB6kAbl8QIFhEQnVja2V0Rm9yU3RlcmVvdHlwZXN3YXNFbmNvZGVkXxAdWERCdWNrZXRGb3JTdGVyZW90eXBlc3N0b3JhZ2VfEB1YREJ1Y2tldEZvclN0ZXJlb3R5cGVzb3JkZXJlZIAAgACAAIAEgGYICIDVCIAPCIDSgHwICIDUCBMAAAABD4/AztMAOgA7AA4HrQewAEyiAagBqYBBgEKiB7EHsoDWgOGALtkAIQAlB7UADgAoB7YAIwBfB7cDpQGoAGAAfwAXACkAMQBuB79fECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WA04BBgA+ANIAAgAQIgNfTADoAOwAOB8EHygBMqAG+Ab8BwAHBAcIBwwHEAcWARYBGgEeASIBJgEqAS4BMqAfLB8wHzQfOB88H0AfRB9KA2IDZgNqA3IDdgN6A34DggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcHsQBuAG4AbgAxAG4AtgG+AG4AbgAXAG6AAIArgACA1ggICAiAIIBFCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcHsQBuAG4AbgAxAG4AtgG/AG4AbgAXAG6AAIAAgACA1ggICAiAIIBGCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwf0ABcHsQBuAG4AbgAxAG4AtgHAAG4AbgAXAG6AAIDbgACA1ggICAiAIIBHCAiAAAjTADoAOwAOCAIIAwBMoKCALt8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwexAG4AbgBuADEAbgC2AcEAbgBuABcAboAAgCuAAIDWCAgICIAggEgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwexAG4AbgBuADEAbgC2AcIAbgBuABcAboAAgCuAAIDWCAgICIAggEkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwexAG4AbgBuADEAbgC2AcMAbgBuABcAboAAgCuAAIDWCAgICIAggEoICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFwexAG4AbgBuADEAbgC2AcQAbgBuABcAboAAgACAAIDWCAgICIAggEsICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFwexAG4AbgBuADEAbgC2AcUAbgBuABcAboAAgCuAAIDWCAgICIAggEwICIAACNkAIQAlCFEADgAoCFIAIwBfCFMDpQGpAGAAfwAXACkAMQBuCFtfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXR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AFy/QAG4AbgBuADEAbgC2AcAAbgBuABcAboAAgQPrgACBA+YICAgIgCCARwgIgAAI0wA6ADsADjAhMCIATKCggC7fEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABcv0ABuAG4AbgAxAG4AtgHBAG4AbgAXAG6AAIArgACBA+YICAgIgCCASAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXL9AAbgBuAG4AMQBuALYBwgBuAG4AFwBugACAK4AAgQPmCAgICIAggEkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFy/QAG4AbgBuADEAbgC2AcMAbgBuABcAboAAgCuAAIED5ggICAiAIIBKCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABcv0ABuAG4AbgAxAG4AtgHEAG4AbgAXAG6AAIAAgACBA+YICAgIgCCASwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXL9AAbgBuAG4AMQBuALYBxQBuAG4AFwBugACAK4AAgQPmCAgICIAggEwICIAACNkAIQAlMHAADgAoMHEAIwBfMHIvsAPTAGAAfwAXACkAMQBuMHpfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBA+OAhoAPgDSAAIAECIED8tMAOgA7AA4wfDCEAEynBIMEhASFBIYEhwSIBImAlICVgJaAl4CYgJmAmqcwhTCGMIcwiDCJMIowi4ED84ED9IED9YED9oED94ED+IED+YAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXL9EAbgBuAG4AMQBuALYEgwBuAG4AFwBugACAAIAAgQPxCAgICIAggJQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFy/RAG4AbgBuADEAbgC2BIQAbgBuABcAboAAgCuAAIED8QgICAiAIIC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UCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwEXABczxABuAG4AbgAxAG4AtgSEAG4AbgAXAG6AAIArgACBBDoICAgIgCCAlQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXM8QAbgBuAG4AMQBuALYEhQBuAG4AFwBugACAAIAAgQQ6CAgICIAggJYICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXDmAAFzPEAG4AbgBuADEAbgC2BIYAbgBuABcAboAAgQFagACBBDoICAgIgCCAlwgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXM8QAbgBuAG4AMQBuALYEhwBuAG4AFwBugACAAIAAgQQ6CAgICIAggJgICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFzPEAG4AbgBuADEAbgC2BIgAbgBuABcAboAAgACAAIEEOggICAiAIICZCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABczxABuAG4AbgAxAG4AtgSJAG4AbgAXAG6AAIAAgACBBDoICAgIgCCAmggIgAAI0gA7AA406gC+oIAf3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXAawAbgBuAG4AMQBuALYCZwBuAG4AFwBugACAK4AAgFcICAgIgCCAXQgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcBFwAXAawAbgBuAG4AMQBuALYCaABuAG4AFwBugACAK4AAgFcICAgIgCCAXggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcDpQAXAawAbgBuAG4AMQBuALYCaQBuAG4AFwBugACA04AAgFcICAgIgCCAXwgIgAAI3xASAKQApQCmNRoAIQCoAKk1GwAjAKc1HACqAA4AJQCrAKwAKACtABcAFwAXACkARQBuAG41JAAxAG4AYABuA8kBdgBuAG41LABuXxAgWERCdWNrZXRGb3JTdGVyZW90eXBlc3dhc0VuY29kZWRfEB1YREJ1Y2t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oOZgAIwBfOZkBgwPTAGAAfwAXACkAMQBuOaFfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc29yZGVyZWRfECRYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3dhc0VuY29kZWRfECFYREJ1Y2tldEZvck93bmVkQXR0cmlidXRlc3N0b3JhZ2WBBIyAhoAPgDSAAIAECIEEm9MAOgA7AA45ozmrAEynBIMEhASFBIYEhwSIBImAlICVgJaAl4CYgJmAmqc5rDmtOa45rzmwObE5soEEnIEEnYEEnoEEn4EEoIEEoYEEooAu3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXOPgAbgBuAG4AMQBuALYEgwBuAG4AFwBugACAAIAAgQSaCAgICIAggJQICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXARcAFzj4AG4AbgBuADEAbgC2BIQAbgBuABcAboAAgCuAAIEEmggICAiAIICVCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABc4+ABuAG4AbgAxAG4AtgSFAG4AbgAXAG6AAIAAgACBBJoICAgIgCCAlggIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcOYAAXOPgAbgBuAG4AMQBuALYEhgBuAG4AFwBugACBAVqAAIEEmggICAiAIICXCAiAAAjfEA8ApAClAKYAIQCnAKgAqQAjAKoADgAlAKsArAAoAK0AFwAXABc4+ABuAG4AbgAxAG4AtgSHAG4AbgAXAG6AAIAAgACBBJoICAgIgCCAmAgIgAAI3xAPAKQApQCmACEApwCoAKkAIwCqAA4AJQCrAKwAKACtABcAFwAXOPgAbgBuAG4AMQBuALYEiABuAG4AFwBugACAAIAAgQSaCAgICIAggJkICIAACN8QDwCkAKUApgAhAKcAqACpACMAqgAOACUAqwCsACgArQAXABcAFzj4AG4AbgBuADEAbgC2BIkAbgBuABcAboAAgACAAIEEmggICAiAIICaCAiAAAjfEBIApAClAKY6HgAhAKgAqTofACMApzogAKoADgAlAKsArAAoAK0AFwAXABcAKQBFAG4AbjooADEAbgBgAG4DyQF6AG4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AACkJAAApCwAAKQ0AACkPAAApEQAAKRIAACkTAAApFQAAKRYAACkYAAApGQAAKRsAACkdAAApHgAAKR8AACkhAAApIgAAKScAACk0AAApOQAAKTsAACk9AAApQgAAKUQAAClGAAApSAAAKV0AACmCAAAppgAAKc0AACnxAAAp8wAAKfUAACn3AAAp+QAAKfsAACn9AAAp/gAAKgAAACoNAAAqHgAAKiAAACoiAAAqJAAAKiYAACooAAAqKgAAKiwAACouAAAqPwAAKkEAACpDAAAqRQAAKkcAACpJAAAqSwAAKk0AACpPAAAqUQAAKpAAACqSAAAqlAAAKpYAACqYAAAqmQAAKpoAACqbAAAqnAAAKp4AACqgAAAqoQAAKqIAACqkAAAqpQAAKuQAACrmAAAq6AAAKuoAACrsAAAq7QAAKu4AACrvAAAq8AAAKvIAACr0AAAq9QAAKvYAACr4AAAq+QAAKzgAACs6AAArPAAAKz4AACtAAAArQQAAK0IAACtDAAArRAAAK0YAACtIAAArSQAAK0oAACtMAAArTQAAK1oAACtbAAArXAAAK14AACudAAArnwAAK6EAACujAAArpQAAK6YAACunAAArqAAAK6kAACurAAArrQAAK64AACuvAAArsQAAK7IAACvxAAAr8wAAK/UAACv3AAAr+QAAK/oAACv7AAAr/AAAK/0AACv/AAAsAQAALAIAACwDAAAsBQAALAYAACxFAAAsRwAALEkAACxLAAAsTQAALE4AACxPAAAsUAAALFEAACxTAAAsVQAALFYAACxXAAAsWQAALFoAACyZAAAsmwAALJ0AACyfAAAsoQAALKIAACyjAAAspAAALKUAACynAAAsqQAALKoAACyrAAAsrQAALK4AACztAAAs7wAALPEAACzzAAAs9QAALPYAACz3AAAs+AAALPkAACz7AAAs/QAALP4AACz/AAAtAQAALQIAAC0nAAAtSwAALXIAAC2WAAAtmAAALZoAAC2cAAAtngAALaAAAC2iAAAtowAALaUAAC2yAAAtwQAALcMAAC3FAAAtxwAALckAAC3LAAAtzQAALc8AAC3eAAAt4AAALeIAAC3kAAAt5gAALegAAC3qAAAt7AAALe4AAC4OAAAuOQAALlMAAC5sAAAuhgAALqYAAC7JAAAvCAAALwoAAC8MAAAvDgAALxAAAC8RAAAvEgAALxMAAC8UAAAvFgAALxgAAC8ZAAAvGgAALxwAAC8dAAAvXAAAL14AAC9gAAAvYgAAL2QAAC9lAAAvZgAAL2cAAC9oAAAvagAAL2wAAC9tAAAvbgAAL3AAAC9xAAAvsAAAL7IAAC+0AAAvtgAAL7gAAC+5AAAvugAAL7sAAC+8AAAvvgAAL8AAAC/BAAAvwgAAL8QAAC/FAAAwBAAAMAYAADAIAAAwCgAAMAwAADANAAAwDgAAMA8AADAQAAAwEgAAMBQAADAVAAAwFgAAMBgAADAZAAAwHAAAMFsAADBdAAAwXwAAMGEAADBjAAAwZAAAMGUAADBmAAAwZwAAMGkAADBrAAAwbAAAMG0AADBvAAAwcAAAMK8AADCxAAAwswAAMLUAADC3AAAwuAAAMLkAADC6AAAwuwAAML0AADC/AAAwwAAAMMEAADDDAAAwxAAAMQMAADEFAAAxBwAAMQkAADELAAAxDAAAMQ0AADEOAAAxDwAAMREAADETAAAxFAAAMRUAADEXAAAxGAAAMSEAADEvAAAxPAAAMUoAADFXAAAxagAAMYEAADGTAAAx3gAAMgEAADIhAAAyQQAAMkMAADJFAAAyRwAAMkkAADJLAAAyTAAAMk0AADJPAAAyUAAAMlIAADJTAAAyVQAAMlcAADJYAAAyWQAAMlsAADJcAAAyYQAAMm4AADJzAAAydQAAMncAADJ8AAAyfgAAMoAAADKCAAAypwAAMssAADLyAAAzFgAAMxgAADMaAAAzHAAAMx4AADMgAAAzIgAAMyMAADMlAAAzMgAAM0MAADNFAAAzRwAAM0kAADNLAAAzTQAAM08AADNRAAAzUwAAM2QAADNmAAAzaAAAM2oAADNsAAAzbgAAM3AAADNyAAAzdAAAM3YAADO1AAAztwAAM7kAADO7AAAzvQAAM74AADO/AAAzwAAAM8EAADPDAAAzxQAAM8YAADPHAAAzyQAAM8oAADQJAAA0CwAANA0AADQPAAA0EQAANBIAADQTAAA0FAAANBUAADQXAAA0GQAANBoAADQbAAA0HQAANB4AADRdAAA0XwAANGEAADRjAAA0ZQAANGYAADRnAAA0aAAANGkAADRrAAA0bQAANG4AADRvAAA0cQAANHIAADR/AAA0gAAANIEAADSDAAA0wgAANMQAADTGAAA0yAAANMoAADTLAAA0zAAANM0AADTOAAA00AAANNIAADTTAAA01AAANNYAADTXAAA1FgAANRgAADUaAAA1HAAANR4AADUfAAA1IAAANSEAADUiAAA1JAAANSYAADUnAAA1KAAANSoAADUrAAA1agAANWwAADVuAAA1cAAANXIAADVzAAA1dAAANXUAADV2AAA1eAAANXoAADV7AAA1fAAANX4AADV/AAA1vgAANcAAADXCAAA1xAAANcYAADXHAAA1yAAANckAADXKAAA1zAAANc4AADXPAAA10AAANdIAADXTAAA2EgAANhQAADYWAAA2GAAANhoAADYbAAA2HAAANh0AADYeAAA2IAAANiIAADYjAAA2JAAANiYAADYnAAA2TAAANnAAADaXAAA2uwAANr0AADa/AAA2wQAANsMAADbFAAA2xwAANsgAADbKAAA21wAANuYAADboAAA26gAANuwAADbuAAA28AAANvIAADb0AAA3AwAANwUAADcHAAA3CQAANwsAADcNAAA3DwAANxEAADcTAAA3UgAAN1QAADdWAAA3WAAAN1oAADdbAAA3XAAAN10AADdeAAA3YAAAN2IAADdjAAA3ZAAAN2YAADdnAAA3pgAAN6gAADeqAAA3rAAAN64AADevAAA3sAAAN7EAADeyAAA3tAAAN7YAADe3AAA3uAAAN7oAADe7AAA3+gAAN/wAADf+AAA4AAAAOAIAADgDAAA4BAAAOAUAADgGAAA4CAAAOAoAADgLAAA4DAAAOA4AADgPAAA4TgAAOFAAADhSAAA4VAAAOFYAADhXAAA4WAAAOFkAADhaAAA4XAAAOF4AADhfAAA4YAAAOGIAADhjAAA4ogAAOKQAADimAAA4qAAAOKoAADirAAA4rAAAOK0AADiuAAA4sAAAOLIAADizAAA4tAAAOLYAADi3AAA49gAAOPgAADj6AAA4/AAAOP4AADj/AAA5AAAAOQEAADkCAAA5BAAAOQYAADkHAAA5CAAAOQoAADkLAAA5SgAAOUwAADlOAAA5UAAAOVIAADlTAAA5VAAAOVUAADlWAAA5WAAAOVoAADlbAAA5XAAAOV4AADlfAAA5qgAAOc0AADntAAA6DQAAOg8AADoRAAA6EwAAOhUAADoXAAA6GAAAOhkAADobAAA6HAAAOh4AADofAAA6IQAAOiMAADokAAA6JQAAOicAADooAAA6LQAAOjoAADo/AAA6QQAAOkMAADpIAAA6SgAAOkwAADpOAAA6cwAAOpcAADq+AAA64gAAOuQAADrmAAA66AAAOuoAADrsAAA67gAAOu8AADrxAAA6/gAAOw8AADsRAAA7EwAAOxUAADsXAAA7GQAAOxsAADsdAAA7HwAAOzAAADsyAAA7NAAAOzYAADs4AAA7OgAAOzwAADs+AAA7QAAAO0IAADuBAAA7gwAAO4UAADuHAAA7iQAAO4oAADuLAAA7jAAAO40AADuPAAA7kQAAO5IAADuTAAA7lQAAO5YAADvVAAA71wAAO9kAADvbAAA73QAAO94AADvfAAA74AAAO+EAADvjAAA75QAAO+YAADvnAAA76QAAO+oAADwpAAA8KwAAPC0AADwvAAA8MQAAPDIAADwzAAA8NAAAPDUAADw3AAA8OQAAPDoAADw7AAA8PQAAPD4AADxLAAA8TAAAPE0AADxPAAA8jgAAPJAAADySAAA8lAAAPJYAADyXAAA8mAAAPJkAADyaAAA8nAAAPJ4AADyfAAA8oAAAPKIAADyjAAA84gAAPOQAADzmAAA86AAAPOoAADzrAAA87AAAPO0AADzuAAA88AAAPPIAADzzAAA89AAAPPYAADz3AAA9NgAAPTgAAD06AAA9PAAAPT4AAD0/AAA9QAAAPUEAAD1CAAA9RAAAPUYAAD1HAAA9SAAAPUoAAD1LAAA9igAAPYwAAD2OAAA9kAAAPZIAAD2TAAA9lAAAPZUAAD2WAAA9mAAAPZoAAD2bAAA9nAAAPZ4AAD2fAAA93gAAPeAAAD3iAAA95AAAPeYAAD3nAAA96AAAPekAAD3qAAA97AAAPe4AAD3vAAA98AAAPfIAAD3zAAA+GAAAPjwAAD5jAAA+hwAAPokAAD6LAAA+jQAAPo8AAD6RAAA+kwAAPpQAAD6WAAA+owAAPrIAAD60AAA+tgAAPrgAAD66AAA+vAAAPr4AAD7AAAA+zwAAPtEAAD7TAAA+1QAAPtcAAD7ZAAA+2wAAPt0AAD7fAAA/HgAAPyAAAD8iAAA/JAAAPyYAAD8nAAA/KAAAPykAAD8qAAA/LAAAPy4AAD8vAAA/MAAAPzIAAD8zAAA/cgAAP3QAAD92AAA/eAAAP3oAAD97AAA/fAAAP30AAD9+AAA/gAAAP4IAAD+DAAA/hAAAP4YAAD+HAAA/xgAAP8gAAD/KAAA/zAAAP84AAD/PAAA/0AAAP9EAAD/SAAA/1AAAP9YAAD/XAAA/2AAAP9oAAD/bAABAGgAAQBwAAEAeAABAIAAAQCIAAEAjAABAJAAAQCUAAEAmAABAKAAAQCoAAEArAABALAAAQC4AAEAvAABAbgAAQHAAAEByAABAdAAAQHYAAEB3AABAeAAAQHkAAEB6AABAfAAAQH4AAEB/AABAgAAAQIIAAECDAABAwgAAQMQAAEDGAABAyAAAQMoAAEDLAABAzAAAQM0AAEDOAABA0AAAQNIAAEDTAABA1AAAQNYAAEDXAABBFgAAQRgAAEEaAABBHAAAQR4AAEEfAABBIAAAQSEAAEEiAABBJAAAQSYAAEEnAABBKAAAQSoAAEErAABBNAAAQUcAAEFUAABBZwAAQXQAAEGHAABBngAAQbAAAEH7AABCHgAAQj4AAEJeAABCYAAAQmIAAEJkAABCZgAAQmgAAEJpAABCagAAQmwAAEJtAABCbwAAQnAAAEJyAABCdAAAQnUAAEJ2AABCeAAAQnkAAEKCAABCjwAAQpQAAEKWAABCmAAAQp0AAEKfAABCoQAAQqMAAELIAABC7AAAQxMAAEM3AABDOQAAQzsAAEM9AABDPwAAQ0EAAENDAABDRAAAQ0YAAENTAABDZAAAQ2YAAENoAABDagAAQ2wAAENuAABDcAAAQ3IAAEN0AABDhQAAQ4cAAEOJAABDiwAAQ40AAEOPAABDkQAAQ5MAAEOVAABDlwAAQ9YAAEPYAABD2gAAQ9wAAEPeAABD3wAAQ+AAAEPhAABD4gAAQ+QAAEPmAABD5wAAQ+gAAEPqAABD6wAARCoAAEQsAABELgAARDAAAEQyAABEMwAARDQAAEQ1AABENgAARDgAAEQ6AABEOwAARDwAAEQ+AABEPwAARH4AAESAAABEggAARIQAAESGAABEhwAARIgAAESJAABEigAARIwAAESOAABEjwAARJAAAESSAABEkwAARKAAAEShAABEogAARKQAAETjAABE5QAAROcAAETpAABE6wAAROwAAETtAABE7gAARO8AAETxAABE8wAARPQAAET1AABE9wAARPgAAEU3AABFOQAARTsAAEU9AABFPwAARUAAAEVBAABFQgAARUMAAEVFAABFRwAARUgAAEVJAABFSwAARUwAAEWLAABFjQAARY8AAEWRAABFkwAARZQAAEWVAABFlgAARZcAAEWZAABFmwAARZwAAEWdAABFnwAARaAAAEXfAABF4QAAReMAAEXlAABF5wAARegAAEXpAABF6gAAResAAEXtAABF7wAARfAAAEXxAABF8wAARfQAAEYzAABGNQAARjcAAEY5AABGOwAARjwAAEY9AABGPgAARj8AAEZBAABGQwAARkQAAEZFAABGRwAARkgAAEZtAABGkQAARrgAAEbcAABG3gAARuAAAEbiAABG5AAARuYAAEboAABG6QAARusAAEb4AABHBwAARwkAAEcLAABHDQAARw8AAEcRAABHEwAARxUAAEckAABHJgAARygAAEcqAABHLAAARy4AAEcwAABHMgAARzQAAEdzAABHdQAAR3cAAEd5AABHewAAR3wAAEd9AABHfgAAR38AAEeBAABHgwAAR4QAAEeFAABHhwAAR4gAAEfHAABHyQAAR8sAAEfNAABHzwAAR9AAAEfRAABH0gAAR9MAAEfVAABH1wAAR9gAAEfZAABH2wAAR9wAAEfeAABIHQAASB8AAEghAABIIwAASCUAAEgmAABIJwAASCgAAEgpAABIKwAASC0AAEguAABILwAASDEAAEgyAABIcQAASHMAAEh1AABIdwAASHkAAEh6AABIewAASHwAAEh9AABIfwAASIEAAEiCAABIgwAASIUAAEiGAABIxQAASMcAAEjJAABIywAASM0AAEjOAABIzwAASNAAAEjRAABI0wAASNUAAEjWAABI1wAASNkAAEjaAABJGQAASRsAAEkdAABJHwAASSEAAEkiAABJIwAASSQAAEklAABJJwAASSkAAEkqAABJKwAASS0AAEkuAABJbQAASW8AAElxAABJcwAASXUAAEl2AABJdwAASXgAAEl5AABJewAASX0AAEl+AABJfwAASYEAAEmCAABJzQAASfAAAEoQAABKMAAASjIAAEo0AABKNgAASjgAAEo6AABKOwAASjwAAEo+AABKPwAASkEAAEpCAABKRAAASkYAAEpHAABKSAAASkoAAEpLAABKUAAASl0AAEpiAABKZAAASmYAAEprAABKbQAASm8AAEpxAABKlgAASroAAErhAABLBQAASwcAAEsJAABLCwAASw0AAEsPAABLEQAASxIAAEsUAABLIQAASzIAAEs0AABLNgAASzgAAEs6AABLPAAASz4AAEtAAABLQgAAS1MAAEtVAABLVwAAS1kAAEtbAABLXQAAS18AAEthAABLYwAAS2UAAEukAABLpgAAS6gAAEuqAABLrAAAS60AAEuuAABLrwAAS7AAAEuyAABLtAAAS7UAAEu2AABLuAAAS7kAAEv4AABL+gAAS/wAAEv+AABMAAAATAEAAEwCAABMAwAATAQAAEwGAABMCAAATAkAAEwKAABMDAAATA0AAExMAABMTgAATFAAAExSAABMVAAATFUAAExWAABMVwAATFgAAExaAABMXAAATF0AAExeAABMYAAATGEAAExuAABMbwAATHAAAExyAABMsQAATLMAAEy1AABMtwAATLkAAEy6AABMuwAATLwAAEy9AABMvwAATMEAAEzCAABMwwAATMUAAEzGAABNBQAATQcAAE0JAABNCwAATQ0AAE0OAABNDwAATRAAAE0RAABNEwAATRUAAE0WAABNFwAATRkAAE0aAABNWQAATVsAAE1dAABNXwAATWEAAE1iAABNYwAATWQAAE1lAABNZwAATWkAAE1qAABNawAATW0AAE1uAABNrQAATa8AAE2xAABNswAATbUAAE22AABNtwAATbgAAE25AABNuwAATb0AAE2+AABNvwAATcEAAE3CAABOAQAATgMAAE4FAABOBwAATgkAAE4KAABOCwAATgwAAE4NAABODwAAThEAAE4SAABOEwAAThUAAE4WAABOOwAATl8AAE6GAABOqgAATqwAAE6uAABOsAAATrIAAE60AABOtgAATrcAAE65AABOxgAATtUAAE7XAABO2QAATtsAAE7dAABO3wAATuEAAE7jAABO8gAATvQAAE72AABO+AAATvoAAE79AABPAAAATwMAAE8FAABPRAAAT0YAAE9IAABPSgAAT0wAAE9NAABPTgAAT08AAE9QAABPUgAAT1QAAE9VAABPVgAAT1gAAE9ZAABPmAAAT5oAAE+cAABPngAAT6AAAE+hAABPogAAT6MAAE+kAABPpgAAT6gAAE+pAABPqgAAT6wAAE+tAABP7AAAT+4AAE/wAABP8gAAT/QAAE/1AABP9gAAT/cAAE/4AABP+gAAT/wAAE/9AABP/gAAUAAAAFABAABQQAAAUEIAAFBEAABQRgAAUEgAAFBJAABQSgAAUEsAAFBMAABQTgAAUFAAAFBRAABQUgAAUFQAAFBVAABQmAAAULwAAFDgAABRAwAAUSoAAFFKAABRcQAAUZgAAFG4AABR3AAAUgAAAFICAABSBQAAUgcAAFIJAABSCwAAUg4AAFIRAABSEwAAUhUAAFIYAABSGgAAUhwAAFIfAABSIgAAUiMAAFIoAABSNQAAUjgAAFI6AABSPQAAUkAAAFJCAABSZwAAUosAAFKyAABS1gAAUtgAAFLaAABS3AAAUt4AAFLgAABS4gAAUuMAAFLmAABS8wAAUwYAAFMIAABTCgAAUwwAAFMOAABTEAAAUxIAAFMUAABTFgAAUxgAAFMrAABTLgAAUzEAAFM0AABTNwAAUzoAAFM9AABTQAAAU0MAAFNGAABTSAAAU4cAAFOJAABTjAAAU44AAFORAABTkgAAU5MAAFOUAABTlQAAU5cAAFOZAABTmgAAU5sAAFOdAABTngAAU6cAAFOoAABTqgAAU+kAAFPrAABT7QAAU+8AAFPyAABT8wAAU/QAAFP1AABT9gAAU/gAAFP6AABT+wAAU/wAAFP+AABT/wAAVD4AAFRAAABUQwAAVEUAAFRIAABUSQAAVEoAAFRLAABUTAAAVE4AAFRQAABUUQAAVFIAAFRUAABUVQAAVF4AAFRhAABUZAAAVGYAAFRvAABUcgAAVHQAAFR2AABUtQAAVLcAAFS5AABUuwAAVL4AAFS/AABUwAAAVMEAAFTCAABUxAAAVMYAAFTHAABUyAAAVMoAAFTLAABVCgAAVQwAAFUPAABVEQAAVRQAAFUVAABVFgAAVRcAAFUYAABVGgAAVRwAAFUdAABVHgAAVSAAAFUhAABVKgAAVSsAAFUtAABVbAAAVW4AAFVwAABVcgAAVXUAAFV2AABVdwAAVXgAAFV5AABVewAAVX0AAFV+AABVfwAAVYEAAFWCAABVwQAAVcMAAFXGAABVyAAAVcsAAFXMAABVzQAAVc4AAFXPAABV0QAAVdMAAFXUAABV1QAAVdcAAFXYAABV5QAAVeYAAFXnAABV6QAAVigAAFYqAABWLAAAVi4AAFYxAABWMgAAVjMAAFY0AABWNQAAVjcAAFY5AABWOgAAVjsAAFY9AABWPgAAVn0AAFZ/AABWggAAVoQAAFaHAABWiAAAVokAAFaKAABWiwAAVo0AAFaPAABWkAAAVpEAAFaTAABWlAAAVqMAAFawAABWtwAAVroAAFa9AABWvwAAVsYAAFbJAABWzAAAVs8AAFbRAABW1wAAVt0AAFcoAABXSwAAV2sAAFeLAABXjQAAV48AAFeRAABXkwAAV5UAAFeWAABXlwAAV5oAAFebAABXnQAAV54AAFegAABXowAAV6QAAFelAABXqAAAV6kAAFeuAABXuwAAV8AAAFfCAABXxAAAV8kAAFfMAABXzwAAV9EAAFf2AABYGgAAWEEAAFhlAABYaAAAWGoAAFhsAABYbgAAWHAAAFhyAABYcwAAWHYAAFiDAABYlAAAWJYAAFiYAABYmgAAWJwAAFieAABYoAAAWKIAAFikAABYtQAAWLgAAFi7AABYvgAAWMEAAFjEAABYxwAAWMoAAFjNAABYzwAAWQ4AAFkQAABZEgAAWRQAAFkXAABZGAAAWRkAAFkaAABZGwAAWR0AAFkfAABZIAAAWSEAAFkjAABZJAAAWWMAAFllAABZZwAAWWkAAFlsAABZbQAAWW4AAFlvAABZcAAAWXIAAFl0AABZdQAAWXYAAFl4AABZeQAAWbgAAFm6AABZvQAAWb8AAFnCAABZwwAAWcQAAFnFAABZxgAAWcgAAFnKAABZywAAWcwAAFnOAABZzwAAWdwAAFndAABZ3gAAWeAAAFofAABaIQAAWiMAAFolAABaKAAAWikAAFoqAABaKwAAWiwAAFouAABaMAAAWjEAAFoyAABaNAAAWjUAAFp0AABadgAAWngAAFp6AABafQAAWn4AAFp/AABagAAAWoEAAFqDAABahQAAWoYAAFqHAABaiQAAWooAAFrJAABaywAAWs0AAFrPAABa0gAAWtMAAFrUAABa1QAAWtYAAFrYAABa2gAAWtsAAFrcAABa3gAAWt8AAFseAABbIAAAWyIAAFskAABbJwAAWygAAFspAABbKgAAWysAAFstAABbLwAAWzAAAFsxAABbMwAAWzQAAFtzAABbdQAAW3cAAFt5AABbfAAAW30AAFt+AABbfwAAW4AAAFuCAABbhAAAW4UAAFuGAABbiAAAW4kAAFuuAABb0gAAW/kAAFwdAABcIAAAXCIAAFwkAABcJgAAXCgAAFwqAABcKwAAXC4AAFw7AABcSgAAXEwAAFxOAABcUAAAXFIAAFxUAABcVgAAXFgAAFxnAABcagAAXG0AAFxwAABccwAAXHYAAFx5AABcfAAAXH4AAFy9AABcvwAAXMIAAFzEAABcxwAAXMgAAFzJAABcygAAXMsAAFzNAABczwAAXNAAAFzRAABc0wAAXNQAAFzWAABdFQAAXRcAAF0ZAABdGwAAXR4AAF0fAABdIAAAXSEAAF0iAABdJAAAXSYAAF0nAABdKAAAXSoAAF0rAABdagAAXWwAAF1uAABdcAAAXXMAAF10AABddQAAXXYAAF13AABdeQAAXXsAAF18AABdfQAAXX8AAF2AAABdvwAAXcEAAF3EAABdxgAAXckAAF3KAABdywAAXcwAAF3NAABdzwAAXdEAAF3SAABd0wAAXdUAAF3WAABd2AAAXhcAAF4ZAABeGwAAXh0AAF4gAABeIQAAXiIAAF4jAABeJAAAXiYAAF4oAABeKQAAXioAAF4sAABeLQAAXmwAAF5uAABecAAAXnIAAF51AABedgAAXncAAF54AABeeQAAXnsAAF59AABefgAAXn8AAF6BAABeggAAXsEAAF7DAABexQAAXscAAF7KAABeywAAXswAAF7NAABezgAAXtAAAF7SAABe0wAAXtQAAF7WAABe1wAAXyIAAF9FAABfZQAAX4UAAF+HAABfiQAAX4sAAF+NAABfjwAAX5AAAF+RAABflAAAX5UAAF+XAABfmAAAX5oAAF+dAABfngAAX58AAF+iAABfowAAX6gAAF+1AABfugAAX7wAAF++AABfwwAAX8YAAF/JAABfywAAX/AAAGAUAABgOwAAYF8AAGBiAABgZAAAYGYAAGBoAABgagAAYGwAAGBtAABgcAAAYH0AAGCOAABgkAAAYJIAAGCUAABglgAAYJgAAGCaAABgnAAAYJ4AAGCvAABgsgAAYLUAAGC4AABguwAAYL4AAGDBAABgxAAAYMcAAGDJAABhCAAAYQoAAGEMAABhDgAAYREAAGESAABhEwAAYRQAAGEVAABhFwAAYRkAAGEaAABhGwAAYR0AAGEeAABhXQAAYV8AAGFhAABhYwAAYWYAAGFnAABhaAAAYWkAAGFqAABhbAAAYW4AAGFvAABhcAAAYXIAAGFzAABhsgAAYbQAAGG3AABhuQAAYbwAAGG9AABhvgAAYb8AAGHAAABhwgAAYcQAAGHFAABhxgAAYcgAAGHJAABh1gAAYdcAAGHYAABh2gAAYhkAAGIbAABiHQAAYh8AAGIiAABiIwAAYiQAAGIlAABiJgAAYigAAGIqAABiKwAAYiwAAGIuAABiLwAAYm4AAGJwAABicgAAYnQAAGJ3AABieAAAYnkAAGJ6AABiewAAYn0AAGJ/AABigAAAYoEAAGKDAABihAAAYsMAAGLFAABixwAAYskAAGLMAABizQAAYs4AAGLPAABi0AAAYtIAAGLUAABi1QAAYtYAAGLYAABi2QAAYxgAAGMaAABjHAAAYx4AAGMhAABjIgAAYyMAAGMkAABjJQAAYycAAGMpAABjKgAAYysAAGMtAABjLgAAY20AAGNvAABjcQAAY3MAAGN2AABjdwAAY3gAAGN5AABjegAAY3wAAGN+AABjfwAAY4AAAGOCAABjgwAAY6gAAGPMAABj8wAAZBcAAGQaAABkHAAAZB4AAGQgAABkIgAAZCQAAGQlAABkKAAAZDUAAGREAABkRgAAZEgAAGRKAABkTAAAZE4AAGRQAABkUgAAZGEAAGRkAABkZwAAZGoAAGRtAABkcAAAZHMAAGR2AABkeAAAZLcAAGS5AABkuwAAZL0AAGTAAABkwQAAZMIAAGTDAABkxAAAZMYAAGTIAABkyQAAZMoAAGTMAABkzQAAZQwAAGUOAABlEAAAZRIAAGUVAABlFgAAZRcAAGUYAABlGQAAZRsAAGUdAABlHgAAZR8AAGUhAABlIgAAZWEAAGVjAABlZQAAZWcAAGVqAABlawAAZWwAAGVtAABlbgAAZXAAAGVyAABlcwAAZXQAAGV2AABldwAAZbYAAGW4AABlugAAZbwAAGW/AABlwAAAZcEAAGXCAABlwwAAZcUAAGXHAABlyAAAZckAAGXLAABlzAAAZgsAAGYNAABmDwAAZhEAAGYUAABmFQAAZhYAAGYXAABmGAAAZhoAAGYcAABmHQAAZh4AAGYgAABmIQAAZmAAAGZiAABmZAAAZmYAAGZpAABmagAAZmsAAGZsAABmbQAAZm8AAGZxAABmcgAAZnMAAGZ1AABmdgAAZrUAAGa3AABmuQAAZrsAAGa+AABmvwAAZsAAAGbBAABmwgAAZsQAAGbGAABmxwAAZsgAAGbKAABmywAAZxYAAGc5AABnWQAAZ3kAAGd7AABnfQAAZ38AAGeBAABngwAAZ4QAAGeFAABniAAAZ4kAAGeLAABnjAAAZ44AAGeQAABnkQAAZ5IAAGeVAABnlgAAZ58AAGesAABnsQAAZ7MAAGe1AABnugAAZ70AAGfAAABnwgAAZ+cAAGgLAABoMgAAaFYAAGhZAABoWwAAaF0AAGhfAABoYQAAaGMAAGhkAABoZwAAaHQAAGiFAABohwAAaIkAAGiLAABojQAAaI8AAGiRAABokwAAaJUAAGimAABoqQAAaKwAAGivAABosgAAaLUAAGi4AABouwAAaL4AAGjAAABo/wAAaQEAAGkDAABpBQAAaQgAAGkJAABpCgAAaQsAAGkMAABpDgAAaRAAAGkRAABpEgAAaRQAAGkVAABpVAAAaVYAAGlYAABpWgAAaV0AAGleAABpXwAAaWAAAGlhAABpYwAAaWUAAGlmAABpZwAAaWkAAGlqAABpqQAAaasAAGmuAABpsAAAabMAAGm0AABptQAAabYAAGm3AABpuQAAabsAAGm8AABpvQAAab8AAGnAAABpzQAAac4AAGnPAABp0QAAahAAAGoSAABqFAAAahYAAGoZAABqGgAAahsAAGocAABqHQAAah8AAGohAABqIgAAaiMAAGolAABqJgAAamUAAGpnAABqaQAAamsAAGpuAABqbwAAanAAAGpxAABqcgAAanQAAGp2AABqdwAAangAAGp6AABqewAAaroAAGq8AABqvgAAasAAAGrDAABqxAAAasUAAGrGAABqxwAAaskAAGrLAABqzAAAas0AAGrPAABq0AAAaw8AAGsRAABrEwAAaxUAAGsYAABrGQAAaxoAAGsbAABrHAAAax4AAGsgAABrIQAAayIAAGskAABrJQAAa2QAAGtmAABraAAAa2oAAGttAABrbgAAa28AAGtwAABrcQAAa3MAAGt1AABrdgAAa3cAAGt5AABregAAa58AAGvDAABr6gAAbA4AAGwRAABsEwAAbBUAAGwXAABsGQAAbBsAAGwcAABsHwAAbCwAAGw7AABsPQAAbD8AAGxBAABsQwAAbEUAAGxHAABsSQAAbFgAAGxbAABsXgAAbGEAAGxkAABsZwAAbGoAAGxtAABsbwAAbK4AAGywAABssgAAbLQAAGy3AABsuAAAbLkAAGy6AABsuwAAbL0AAGy/AABswAAAbMEAAGzDAABsxAAAbQMAAG0FAABtBwAAbQkAAG0MAABtDQAAbQ4AAG0PAABtEAAAbRIAAG0UAABtFQAAbRYAAG0YAABtGQAAbVgAAG1aAABtXAAAbV4AAG1hAABtYgAAbWMAAG1kAABtZQAAbWcAAG1pAABtagAAbWsAAG1tAABtbgAAba0AAG2vAABtsgAAbbQAAG23AABtuAAAbbkAAG26AABtuwAAbb0AAG2/AABtwAAAbcEAAG3DAABtxAAAbccAAG4GAABuCAAAbgoAAG4MAABuDwAAbhAAAG4RAABuEgAAbhMAAG4VAABuFwAAbhgAAG4ZAABuGwAAbhwAAG5bAABuXQAAbl8AAG5hAABuZAAAbmUAAG5mAABuZwAAbmgAAG5qAABubAAAbm0AAG5uAABucAAAbnEAAG6wAABusgAAbrQAAG62AABuuQAAbroAAG67AABuvAAAbr0AAG6/AABuwQAAbsIAAG7DAABuxQAAbsYAAG7RAABu2gAAbtsAAG7dAABu5gAAbvEAAG8AAABvCwAAbxkAAG8uAABvQgAAb1kAAG9rAABvqgAAb6wAAG+uAABvsAAAb7IAAG+zAABvtAAAb7UAAG+2AABvuAAAb7oAAG+7AABvvAAAb74AAG+/AABv/gAAcAAAAHACAABwBAAAcAYAAHAHAABwCAAAcAkAAHAKAABwDAAAcA4AAHAPAABwEAAAcBIAAHATAABwUgAAcFQAAHBXAABwWQAAcFsAAHBcAABwXQAAcF4AAHBfAABwYQAAcGMAAHBkAABwZQAAcGcAAHBoAABwswAAcNYAAHD2AABxFgAAcRgAAHEaAABxHAAAcR4AAHEgAABxIQAAcSIAAHElAABxJgAAcSgAAHEpAABxKwAAcS0AAHEuAABxLwAAcTIAAHEzAABxPAAAcUkAAHFOAABxUAAAcVIAAHFXAABxWgAAcV0AAHFfAABxhAAAcagAAHHPAABx8wAAcfYAAHH4AABx+gAAcfwAAHH+AAByAAAAcgEAAHIEAAByEQAAciIAAHIkAAByJgAAcigAAHIqAAByLAAAci4AAHIwAAByMgAAckMAAHJGAABySQAAckwAAHJPAAByUgAAclUAAHJYAAByWwAAcl0AAHKcAAByngAAcqAAAHKiAABypQAAcqYAAHKnAAByqAAAcqkAAHKrAAByrQAAcq4AAHKvAABysQAAcrIAAHLxAABy8wAAcvUAAHL3AABy+gAAcvsAAHL8AABy/QAAcv4AAHMAAABzAgAAcwMAAHMEAABzBgAAcwcAAHNGAABzSAAAc0sAAHNNAABzUAAAc1EAAHNSAABzUwAAc1QAAHNWAABzWAAAc1kAAHNaAABzXAAAc10AAHNqAABzbQAAc3AAAHNzAABzdgAAc3gAAHOSAABzlgAAc9UAAHPXAABz2QAAc9sAAHPeAABz3wAAc+AAAHPhAABz4gAAc+QAAHPmAABz5wAAc+gAAHPqAABz6wAAdCoAAHQsAAB0LgAAdDAAAHQzAAB0NAAAdDUAAHQ2AAB0NwAAdDkAAHQ7AAB0PAAAdD0AAHQ/AAB0QAAAdH8AAHSBAAB0gwAAdIUAAHSIAAB0iQAAdIoAAHSLAAB0jAAAdI4AAHSQAAB0kQAAdJIAAHSUAAB0lQAAdNQAAHTWAAB02AAAdNoAAHTdAAB03gAAdN8AAHTgAAB04QAAdOMAAHTlAAB05gAAdOcAAHTpAAB06gAAdSkAAHUrAAB1LQAAdS8AAHUyAAB1MwAAdTQAAHU1AAB1NgAAdTgAAHU6AAB1OwAAdTwAAHU+AAB1PwAAdWQAAHWIAAB1rwAAddMAAHXWAAB12AAAddoAAHXcAAB13gAAdeAAAHXhAAB15AAAdfEAAHYAAAB2AgAAdgQAAHYGAAB2CAAAdgoAAHYMAAB2DgAAdh0AAHYgAAB2IwAAdiYAAHYpAAB2LAAAdi8AAHYyAAB2NAAAdnMAAHZ1AAB2dwAAdnkAAHZ8AAB2fQAAdn4AAHZ/AAB2gAAAdoIAAHaEAAB2hQAAdoYAAHaIAAB2iQAAdsgAAHbKAAB2zAAAds4AAHbRAAB20gAAdtMAAHbUAAB21QAAdtcAAHbZAAB22gAAdtsAAHbdAAB23gAAdx0AAHcfAAB3IQAAdyMAAHcmAAB3JwAAdygAAHcpAAB3KgAAdywAAHcuAAB3LwAAdzAAAHcyAAB3MwAAd3IAAHd0AAB3dwAAd3kAAHd8AAB3fQAAd34AAHd/AAB3gAAAd4IAAHeEAAB3hQAAd4YAAHeIAAB3iQAAd4wAAHfLAAB3zQAAd88AAHfRAAB31AAAd9UAAHfWAAB31wAAd9gAAHfaAAB33AAAd90AAHfeAAB34AAAd+EAAHggAAB4IgAAeCUAAHgnAAB4KgAAeCsAAHgsAAB4LQAAeC4AAHgwAAB4MgAAeDMAAHg0AAB4NgAAeDcAAHhTAAB4kgAAeJQAAHiWAAB4mAAAeJsAAHicAAB4nQAAeJ4AAHifAAB4oQAAeKMAAHikAAB4pQAAeKcAAHioAAB48wAAeRYAAHk2AAB5VgAAeVgAAHlaAAB5XAAAeV4AAHlgAAB5YQAAeWIAAHllAAB5ZgAAeWgAAHlpAAB5awAAeW0AAHluAAB5bwAAeXIAAHlzAAB5eAAAeYUAAHmKAAB5jAAAeY4AAHmTAAB5lgAAeZkAAHmbAAB5wAAAeeQAAHoLAAB6LwAAejIAAHo0AAB6NgAAejgAAHo6AAB6PAAAej0AAHpAAAB6TQAAel4AAHpgAAB6YgAAemQAAHpmAAB6aAAAemoAAHpsAAB6bgAAen8AAHqCAAB6hQAAeogAAHqLAAB6jgAAepEAAHqUAAB6lwAAepkAAHrYAAB62gAAetwAAHreAAB64QAAeuIAAHrjAAB65AAAeuUAAHrnAAB66QAAeuoAAHrrAAB67QAAeu4AAHstAAB7LwAAezEAAHszAAB7NgAAezcAAHs4AAB7OQAAezoAAHs8AAB7PgAAez8AAHtAAAB7QgAAe0MAAHuCAAB7hAAAe4cAAHuJAAB7jAAAe40AAHuOAAB7jwAAe5AAAHuSAAB7lAAAe5UAAHuWAAB7mAAAe5kAAHumAAB7pwAAe6gAAHuqAAB76QAAe+sAAHvtAAB77wAAe/IAAHvzAAB79AAAe/UAAHv2AAB7+AAAe/oAAHv7AAB7/AAAe/4AAHv/AAB8PgAAfEAAAHxCAAB8RAAAfEcAAHxIAAB8SQAAfEoAAHxLAAB8TQAAfE8AAHxQAAB8UQAAfFMAAHxUAAB8kwAAfJUAAHyXAAB8mQAAfJwAAHydAAB8ngAAfJ8AAHygAAB8ogAAfKQAAHylAAB8pgAAfKgAAHypAAB86AAAfOoAAHzsAAB87gAAfPEAAHzyAAB88wAAfPQAAHz1AAB89wAAfPkAAHz6AAB8+wAAfP0AAHz+AAB9PQAAfT8AAH1BAAB9QwAAfUYAAH1HAAB9SAAAfUkAAH1KAAB9TAAAfU4AAH1PAAB9UAAAfVIAAH1TAAB9eAAAfZwAAH3DAAB95wAAfeoAAH3sAAB97gAAffAAAH3yAAB99AAAffUAAH34AAB+BQAAfhQAAH4WAAB+GAAAfhoAAH4cAAB+HgAAfiAAAH4iAAB+MQAAfjQAAH43AAB+OgAAfj0AAH5AAAB+QwAAfkYAAH5IAAB+hwAAfokAAH6LAAB+jQAAfpAAAH6RAAB+kgAAfpMAAH6UAAB+lgAAfpgAAH6ZAAB+mgAAfpwAAH6dAAB+3AAAft4AAH7gAAB+4gAAfuUAAH7mAAB+5wAAfugAAH7pAAB+6wAAfu0AAH7uAAB+7wAAfvEAAH7yAAB/MQAAfzMAAH81AAB/NwAAfzoAAH87AAB/PAAAfz0AAH8+AAB/QAAAf0IAAH9DAAB/RAAAf0YAAH9HAAB/hgAAf4gAAH+LAAB/jQAAf5AAAH+RAAB/kgAAf5MAAH+UAAB/lgAAf5gAAH+ZAAB/mgAAf5wAAH+dAAB/4AAAgAQAAIAoAACASwAAgHIAAICSAACAuQAAgOAAAIEAAACBJAAAgUgAAIFKAACBTQAAgU8AAIFRAACBUwAAgVYAAIFZAACBWwAAgV0AAIFgAACBYgAAgWQAAIFnAACBagAAgWsAAIFwAACBfQAAgYAAAIGCAACBhQAAgYgAAIGKAACBrwAAgdMAAIH6AACCHgAAgiEAAIIjAACCJQAAgicAAIIpAACCKwAAgiwAAIIvAACCPAAAgk8AAIJRAACCUwAAglUAAIJXAACCWQAAglsAAIJdAACCXwAAgmEAAIJ0AACCdwAAgnoAAIJ9AACCgAAAgoMAAIKGAACCiQAAgowAAIKPAACCkQAAgtAAAILSAACC1QAAgtcAAILaAACC2wAAgtwAAILdAACC3gAAguAAAILiAACC4wAAguQAAILmAACC5wAAgvAAAILxAACC8wAAgzIAAIM0AACDNgAAgzgAAIM7AACDPAAAgz0AAIM+AACDPwAAg0EAAINDAACDRAAAg0UAAINHAACDSAAAg4cAAIOJAACDjAAAg44AAIORAACDkgAAg5MAAIOUAACDlQAAg5cAAIOZAACDmgAAg5sAAIOdAACDngAAg6cAAIOqAACDrQAAg68AAIO4AACDvQAAg78AAIPCAACDxAAAg80AAIQMAACEDgAAhBAAAIQSAACEFQAAhBYAAIQXAACEGAAAhBkAAIQbAACEHQAAhB4AAIQfAACEIQAAhCIAAIRhAACEYwAAhGYAAIRoAACEawAAhGwAAIRtAACEbgAAhG8AAIRxAACEcwAAhHQAAIR1AACEdwAAhHgAAISBAACEggAAhIQAAITDAACExQAAhMcAAITJAACEzAAAhM0AAITOAACEzwAAhNAAAITSAACE1AAAhNUAAITWAACE2AAAhNkAAIUYAACFGgAAhR0AAIUfAACFIgAAhSMAAIUkAACFJQAAhSYAAIUoAACFKgAAhSsAAIUsAACFLgAAhS8AAIU8AACFPQAAhT4AAIVAAACFfwAAhYEAAIWDAACFhQAAhYgAAIWJAACFigAAhYsAAIWMAACFjgAAhZAAAIWRAACFkgAAhZQAAIWVAACF1AAAhdYAAIXZAACF2wAAhd4AAIXfAACF4AAAheEAAIXiAACF5AAAheYAAIXnAACF6AAAheoAAIXrAACF+gAAhgcAAIYYAACGGwAAhh4AAIYhAACGJAAAhicAAIYpAACGKwAAhi0AAIY+AACGQQAAhkQAAIZHAACGSgAAhk0AAIZQAACGUwAAhlYAAIZYAACGeAAAhpIAAIaxAACGvAAAhwcAAIcqAACHSgAAh2oAAIdsAACHbgAAh3AAAIdyAACHdQAAh3YAAId3AACHegAAh3sAAId9AACHfgAAh4AAAIeDAACHhAAAh4UAAIeIAACHiQAAh5IAAIefAACHpAAAh6YAAIeoAACHrQAAh7AAAIezAACHtQAAh9oAAIf+AACIJQAAiEkAAIhMAACITgAAiFAAAIhSAACIVAAAiFYAAIhXAACIWgAAiGcAAIh4AACIegAAiHwAAIh+AACIgAAAiIIAAIiEAACIhgAAiIgAAIiZAACInAAAiJ8AAIiiAACIpQAAiKgAAIirAACIrgAAiLEAAIizAACI8gAAiPQAAIj2AACI+AAAiPsAAIj8AACI/QAAiP4AAIj/AACJAQAAiQMAAIkEAACJBQAAiQcAAIkIAACJRwAAiUkAAIlLAACJTQAAiVAAAIlRAACJUgAAiVMAAIlUAACJVgAAiVgAAIlZAACJWgAAiVwAAIldAACJnAAAiZ4AAImhAACJowAAiaYAAImnAACJqAAAiakAAImqAACJrAAAia4AAImvAACJsAAAibIAAImzAACJwAAAicEAAInCAACJxAAAigMAAIoFAACKBwAAigkAAIoMAACKDQAAig4AAIoPAACKEAAAihIAAIoUAACKFQAAihYAAIoYAACKGQAAilgAAIpaAACKXAAAil4AAIphAACKYgAAimMAAIpkAACKZQAAimcAAIppAACKagAAimsAAIptAACKbgAAiq0AAIqvAACKsQAAirMAAIq2AACKtwAAirgAAIq5AACKugAAirwAAIq+AACKvwAAisAAAIrCAACKwwAAiwIAAIsEAACLBgAAiwgAAIsLAACLDAAAiw0AAIsOAACLDwAAixEAAIsTAACLFAAAixUAAIsXAACLGAAAi1cAAItZAACLWwAAi10AAItgAACLYQAAi2IAAItjAACLZAAAi2YAAItoAACLaQAAi2oAAItsAACLbQAAi5IAAIu2AACL3QAAjAEAAIwEAACMBgAAjAgAAIwKAACMDAAAjA4AAIwPAACMEgAAjB8AAIwuAACMMAAAjDIAAIw0AACMNgAAjDgAAIw6AACMPAAAjEsAAIxOAACMUQAAjFQAAIxXAACMWgAAjF0AAIxgAACMYgAAjKEAAIyjAACMpQAAjKcAAIyqAACMqwAAjKwAAIytAACMrgAAjLAAAIyyAACMswAAjLQAAIy2AACMtwAAjPYAAIz4AACM+gAAjPwAAIz/AACNAAAAjQEAAI0CAACNAwAAjQUAAI0HAACNCAAAjQkAAI0LAACNDAAAjUsAAI1NAACNTwAAjVEAAI1UAACNVQAAjVYAAI1XAACNWAAAjVoAAI1cAACNXQAAjV4AAI1gAACNYQAAjaAAAI2iAACNpAAAjaYAAI2pAACNqgAAjasAAI2sAACNrQAAja8AAI2xAACNsgAAjbMAAI21AACNtgAAjfUAAI33AACN+QAAjfsAAI3+AACN/wAAjgAAAI4BAACOAgAAjgQAAI4GAACOBwAAjggAAI4KAACOCwAAjkoAAI5MAACOTgAAjlAAAI5TAACOVAAAjlUAAI5WAACOVwAAjlkAAI5bAACOXAAAjl0AAI5fAACOYAAAjp8AAI6hAACOpAAAjqYAAI6pAACOqgAAjqsAAI6sAACOrQAAjq8AAI6xAACOsgAAjrMAAI61AACOtgAAjwEAAI8kAACPRAAAj2QAAI9mAACPaAAAj2oAAI9sAACPbwAAj3AAAI9xAACPdAAAj3UAAI93AACPeAAAj3oAAI99AACPfgAAj38AAI+CAACPgwAAj4gAAI+VAACPmgAAj5wAAI+eAACPowAAj6YAAI+pAACPqwAAj9AAAI/0AACQGwAAkD8AAJBCAACQRAAAkEYAAJBIAACQSgAAkEwAAJBNAACQUAAAkF0AAJBuAACQcAAAkHIAAJB0AACQdgAAkHgAAJB6AACQfAAAkH4AAJCPAACQkgAAkJUAAJCYAACQmwAAkJ4AAJChAACQpAAAkKcAAJCpAACQ6AAAkOoAAJDsAACQ7gAAkPEAAJDyAACQ8wAAkPQAAJD1AACQ9wAAkPkAAJD6AACQ+wAAkP0AAJD+AACRPQAAkT8AAJFBAACRQwAAkUYAAJFHAACRSAAAkUkAAJFKAACRTAAAkU4AAJFPAACRUAAAkVIAAJFTAACRkgAAkZQAAJGXAACRmQAAkZwAAJGdAACRngAAkZ8AAJGgAACRogAAkaQAAJGlAACRpgAAkagAAJGpAACRtgAAkbkAAJG8AACRvwAAkcIAAJHEAACR3wAAkf4AAJI9AACSPwAAkkEAAJJDAACSRgAAkkcAAJJIAACSSQAAkkoAAJJMAACSTgAAkk8AAJJQAACSUgAAklMAAJKSAACSlAAAkpYAAJKYAACSmwAAkpwAAJKdAACSngAAkp8AAJKhAACSowAAkqQAAJKlAACSpwAAkqgAAJLnAACS6QAAkusAAJLtAACS8AAAkvEAAJLyAACS8wAAkvQAAJL2AACS+AAAkvkAAJL6AACS/AAAkv0AAJM8AACTPgAAk0AAAJNCAACTRQAAk0YAAJNHAACTSAAAk0kAAJNLAACTTQAAk04AAJNPAACTUQAAk1IAAJORAACTkwAAk5UAAJOXAACTmgAAk5sAAJOcAACTnQAAk54AAJOgAACTogAAk6MAAJOkAACTpgAAk6cAAJPMAACT8AAAlBcAAJQ7AACUPgAAlEAAAJRCAACURAAAlEYAAJRIAACUSQAAlEwAAJRZAACUaAAAlGoAAJRsAACUbgAAlHAAAJRyAACUdAAAlHYAAJSFAACUiAAAlIsAAJSOAACUkQAAlJQAAJSXAACUmgAAlJwAAJTbAACU3QAAlOAAAJTiAACU5QAAlOYAAJTnAACU6AAAlOkAAJTrAACU7QAAlO4AAJTvAACU8QAAlPIAAJUxAACVMwAAlTUAAJU3AACVOgAAlTsAAJU8AACVPQAAlT4AAJVAAACVQgAAlUMAAJVEAACVRgAAlUcAAJWGAACViAAAlYoAAJWMAACVjwAAlZAAAJWRAACVkgAAlZMAAJWVAACVlwAAlZgAAJWZAACVmwAAlZwAAJXbAACV3QAAleAAAJXiAACV5QAAleYAAJXnAACV6AAAlekAAJXrAACV7QAAle4AAJXvAACV8QAAlfIAAJYxAACWMwAAljUAAJY3AACWOgAAljsAAJY8AACWPQAAlj4AAJZAAACWQgAAlkMAAJZEAACWRgAAlkcAAJaGAACWiAAAlooAAJaMAACWjwAAlpAAAJaRAACWkgAAlpMAAJaVAACWlwAAlpgAAJaZAACWmwAAlpwAAJbbAACW3QAAlt8AAJbhAACW5AAAluUAAJbmAACW5wAAlugAAJbqAACW7AAAlu0AAJbuAACW8AAAlvEAAJc8AACXXwAAl38AAJefAACXoQAAl6MAAJelAACXpwAAl6oAAJerAACXrAAAl68AAJewAACXsgAAl7MAAJe1AACXuAAAl7kAAJe6AACXvQAAl74AAJfDAACX0AAAl9UAAJfXAACX2QAAl94AAJfhAACX5AAAl+YAAJgLAACYLwAAmFYAAJh6AACYfQAAmH8AAJiBAACYgwAAmIUAAJiHAACYiAAAmIsAAJiYAACYqQAAmKsAAJitAACYrwAAmLEAAJizAACYtQAAmLcAAJi5AACYygAAmM0AAJjQAACY0wAAmNYAAJjZAACY3AAAmN8AAJjiAACY5AAAmSMAAJklAACZJwAAmSkAAJksAACZLQAAmS4AAJkvAACZMAAAmTIAAJk0AACZNQAAmTYAAJk4AACZOQAAmXgAAJl6AACZfAAAmX4AAJmBAACZggAAmYMAAJmEAACZhQAAmYcAAJmJAACZigAAmYsAAJmNAACZjgAAmc0AAJnPAACZ0gAAmdQAAJnXAACZ2AAAmdkAAJnaAACZ2wAAmd0AAJnfAACZ4AAAmeEAAJnjAACZ5AAAmfEAAJnyAACZ8wAAmfUAAJo0AACaNgAAmjgAAJo6AACaPQAAmj4AAJo/AACaQAAAmkEAAJpDAACaRQAAmkYAAJpHAACaSQAAmkoAAJqJAACaiwAAmo0AAJqPAACakgAAmpMAAJqUAACalQAAmpYAAJqYAACamgAAmpsAAJqcAACangAAmp8AAJreAACa4AAAmuIAAJrkAACa5wAAmugAAJrpAACa6gAAmusAAJrtAACa7wAAmvAAAJrxAACa8wAAmvQAAJszAACbNQAAmzcAAJs5AACbPAAAmz0AAJs+AACbPwAAm0AAAJtCAACbRAAAm0UAAJtGAACbSAAAm0kAAJuIAACbigAAm4wAAJuOAACbkQAAm5IAAJuTAACblAAAm5UAAJuXAACbmQAAm5oAAJubAACbnQAAm54AAJvDAACb5wAAnA4AAJwyAACcNQAAnDcAAJw5AACcOwAAnD0AAJw/AACcQAAAnEMAAJxQAACcXwAAnGEAAJxjAACcZQAAnGcAAJxpAACcawAAnG0AAJx8AACcfwAAnIIAAJyFAACciAAAnIsAAJyOAACckQAAnJMAAJzSAACc1AAAnNYAAJzYAACc2wAAnNwAAJzdAACc3gAAnN8AAJzhAACc4wAAnOQAAJzlAACc5wAAnOgAAJ0nAACdKQAAnSsAAJ0tAACdMAAAnTEAAJ0yAACdMwAAnTQAAJ02AACdOAAAnTkAAJ06AACdPAAAnT0AAJ18AACdfgAAnYAAAJ2CAACdhQAAnYYAAJ2HAACdiAAAnYkAAJ2LAACdjQAAnY4AAJ2PAACdkQAAnZIAAJ3RAACd0wAAndUAAJ3XAACd2gAAndsAAJ3cAACd3QAAnd4AAJ3gAACd4gAAneMAAJ3kAACd5gAAnecAAJ4mAACeKAAAnioAAJ4sAACeLwAAnjAAAJ4xAACeMgAAnjMAAJ41AACeNwAAnjgAAJ45AACeOwAAnjwAAJ57AACefQAAnn8AAJ6BAACehAAAnoUAAJ6GAACehwAAnogAAJ6KAACejAAAno0AAJ6OAACekAAAnpEAAJ7QAACe0gAAntUAAJ7XAACe2gAAntsAAJ7cAACe3QAAnt4AAJ7gAACe4gAAnuMAAJ7kAACe5gAAnucAAJ8yAACfVQAAn3UAAJ+VAACflwAAn5kAAJ+bAACfnQAAn58AAJ+gAACfoQAAn6QAAJ+lAACfpwAAn6gAAJ+qAACfrAAAn60AAJ+uAACfsQAAn7IAAJ+3AACfxAAAn8kAAJ/LAACfzQAAn9IAAJ/VAACf2AAAn9oAAJ//AACgIwAAoEoAAKBuAACgcQAAoHMAAKB1AACgdwAAoHkAAKB7AACgfAAAoH8AAKCMAACgnQAAoJ8AAKChAACgowAAoKUAAKCnAACgqQAAoKsAAKCtAACgvgAAoMEAAKDEAACgxwAAoMoAAKDNAACg0AAAoNMAAKDWAACg2AAAoRcAAKEZAAChGwAAoR0AAKEgAAChIQAAoSIAAKEjAAChJAAAoSYAAKEoAAChKQAAoSoAAKEsAAChLQAAoWwAAKFuAAChcAAAoXIAAKF1AAChdgAAoXcAAKF4AACheQAAoXsAAKF9AAChfgAAoX8AAKGBAAChggAAocEAAKHDAAChxgAAocgAAKHLAAChzAAAoc0AAKHOAAChzwAAodEAAKHTAACh1AAAodUAAKHXAACh2AAAoeUAAKHmAACh5wAAoekAAKIoAACiKgAAoiwAAKIuAACiMQAAojIAAKIzAACiNAAAojUAAKI3AACiOQAAojoAAKI7AACiPQAAoj4AAKJ9AACifwAAooEAAKKDAACihgAAoocAAKKIAACiiQAAoooAAKKMAACijgAAoo8AAKKQAACikgAAopMAAKLSAACi1AAAotYAAKLYAACi2wAAotwAAKLdAACi3gAAot8AAKLhAACi4wAAouQAAKLlAACi5wAAougAAKMnAACjKQAAoysAAKMtAACjMAAAozEAAKMyAACjMwAAozQAAKM2AACjOAAAozkAAKM6AACjPAAAoz0AAKN8AACjfgAAo4AAAKOCAACjhQAAo4YAAKOHAACjiAAAo4kAAKOLAACjjQAAo44AAKOPAACjkQAAo5IAAKO3AACj2wAApAIAAKQmAACkKQAApCsAAKQtAACkLwAApDEAAKQzAACkNAAApDcAAKREAACkUwAApFUAAKRXAACkWQAApFsAAKRdAACkXwAApGEAAKRwAACkcwAApHYAAKR5AACkfAAApH8AAKSCAACkhQAApIcAAKTGAACkyAAApMoAAKTMAACkzwAApNAAAKTRAACk0gAApNMAAKTVAACk1wAApNgAAKTZAACk2wAApNwAAKUbAAClHQAApR8AAKUhAAClJAAApSUAAKUmAAClJwAApSgAAKUqAAClLAAApS0AAKUuAAClMAAApTEAAKVwAAClcgAApXQAAKV2AACleQAApXoAAKV7AAClfAAApX0AAKV/AAClgQAApYIAAKWDAAClhQAApYYAAKXFAAClxwAApcoAAKXMAAClzwAApdAAAKXRAACl0gAApdMAAKXVAACl1wAApdgAAKXZAACl2wAApdwAAKYbAACmHQAAph8AAKYhAACmJAAApiUAAKYmAACmJwAApigAAKYqAACmLAAApi0AAKYuAACmMAAApjEAAKZwAACmcgAApnQAAKZ2AACmeQAApnoAAKZ7AACmfAAApn0AAKZ/AACmgQAApoIAAKaDAACmhQAApoYAAKbFAACmxwAApsoAAKbMAACmzwAAptAAAKbRAACm0gAAptMAAKbVAACm1wAAptgAAKbZAACm2wAAptwAAKcnAACnSgAAp2oAAKeKAACnjAAAp44AAKeQAACnkgAAp5UAAKeWAACnlwAAp5oAAKebAACnnQAAp54AAKegAACnowAAp6QAAKelAACnqAAAp6kAAKeuAACnuwAAp8AAAKfCAACnxAAAp8kAAKfMAACnzwAAp9EAAKf2AACoGgAAqEEAAKhlAACoaAAAqGoAAKhsAACobgAAqHAAAKhyAACocwAAqHYAAKiDAAColAAAqJYAAKiYAAComgAAqJwAAKieAACooAAAqKIAAKikAACotQAAqLgAAKi7AACovgAAqMEAAKjEAACoxwAAqMoAAKjNAACozwAAqQ4AAKkQAACpEgAAqRQAAKkXAACpGAAAqRkAAKkaAACpGwAAqR0AAKkfAACpIAAAqSEAAKkjAACpJAAAqWMAAKllAACpZwAAqWkAAKlsAACpbQAAqW4AAKlvAACpcAAAqXIAAKl0AACpdQAAqXYAAKl4AACpeQAAqbgAAKm6AACpvQAAqb8AAKnCAACpwwAAqcQAAKnFAACpxgAAqcgAAKnKAACpywAAqcwAAKnOAACpzwAAqdwAAKndAACp3gAAqeAAAKofAACqIQAAqiMAAKolAACqKAAAqikAAKoqAACqKwAAqiwAAKouAACqMAAAqjEAAKoyAACqNAAAqjUAAKp0AACqdgAAqngAAKp6AACqfQAAqn4AAKp/AACqgAAAqoEAAKqDAACqhQAAqoYAAKqHAACqiQAAqooAAKrJAACqywAAqs0AAKrPAACq0gAAqtMAAKrUAACq1QAAqtYAAKrYAACq2gAAqtsAAKrcAACq3gAAqt8AAKseAACrIAAAqyIAAKskAACrJwAAqygAAKspAACrKgAAqysAAKstAACrLwAAqzAAAKsxAACrMwAAqzQAAKtzAACrdQAAq3cAAKt5AACrfAAAq30AAKt+AACrfwAAq4AAAKuCAACrhAAAq4UAAKuGAACriAAAq4kAAKuuAACr0gAAq/kAAKwdAACsIAAArCIAAKwkAACsJgAArCgAAKwqAACsKwAArC4AAKw7AACsSgAArEwAAKxOAACsUAAArFIAAKxUAACsVgAArFgAAKxnAACsagAArG0AAKxwAACscwAArHYAAKx5AACsfAAArH4AAKy9AACsvwAArMIAAKzEAACsxwAArMgAAKzJAACsygAArMsAAKzNAACszwAArNAAAKzRAACs0wAArNQAAKzXAACtFgAArRgAAK0aAACtHAAArR8AAK0gAACtIQAArSIAAK0jAACtJQAArScAAK0oAACtKQAArSsAAK0sAACtawAArW0AAK1vAACtcQAArXQAAK11AACtdgAArXcAAK14AACtegAArXwAAK19AACtfgAArYAAAK2BAACtwAAArcIAAK3FAACtxwAArcoAAK3LAACtzAAArc0AAK3OAACt0AAArdIAAK3TAACt1AAArdYAAK3XAACt2gAArhkAAK4bAACuHQAArh8AAK4iAACuIwAAriQAAK4lAACuJgAArigAAK4qAACuKwAAriwAAK4uAACuLwAArm4AAK5wAACucgAArnQAAK53AACueAAArnkAAK56AACuewAArn0AAK5/AACugAAAroEAAK6DAACuhAAArsMAAK7FAACuxwAArskAAK7MAACuzQAArs4AAK7PAACu0AAArtIAAK7UAACu1QAArtYAAK7YAACu2QAAryQAAK9HAACvZwAAr4cAAK+JAACviwAAr40AAK+PAACvkgAAr5MAAK+UAACvlwAAr5gAAK+aAACvmwAAr50AAK+gAACvoQAAr6IAAK+lAACvpgAAr6sAAK+4AACvvQAAr78AAK/BAACvxgAAr8kAAK/MAACvzgAAr/MAALAXAACwPgAAsGIAALBlAACwZwAAsGkAALBrAACwbQAAsG8AALBwAACwcwAAsIAAALCRAACwkwAAsJUAALCXAACwmQAAsJsAALCdAACwnwAAsKEAALCyAACwtQAAsLgAALC7AACwvgAAsMEAALDEAACwxwAAsMoAALDMAACxCwAAsQ0AALEPAACxEQAAsRQAALEVAACxFgAAsRcAALEYAACxGgAAsRwAALEdAACxHgAAsSAAALEhAACxYAAAsWIAALFkAACxZgAAsWkAALFqAACxawAAsWwAALFtAACxbwAAsXEAALFyAACxcwAAsXUAALF2AACxtQAAsbcAALG6AACxvAAAsb8AALHAAACxwQAAscIAALHDAACxxQAAsccAALHIAACxyQAAscsAALHMAACx2QAAsdwAALHfAACx4gAAseUAALHnAACyAQAAsgoAALJJAACySwAAsk0AALJPAACyUgAAslMAALJUAACyVQAAslYAALJYAACyWgAAslsAALJcAACyXgAAsl8AALKeAACyoAAAsqIAALKkAACypwAAsqgAALKpAACyqgAAsqsAALKtAACyrwAAsrAAALKxAACyswAAsrQAALLzAACy9QAAsvcAALL5AACy/AAAsv0AALL+AACy/wAAswAAALMCAACzBAAAswUAALMGAACzCAAAswkAALNIAACzSgAAs0wAALNOAACzUQAAs1IAALNTAACzVAAAs1UAALNXAACzWQAAs1oAALNbAACzXQAAs14AALOdAACznwAAs6EAALOjAACzpgAAs6cAALOoAACzqQAAs6oAALOsAACzrgAAs68AALOwAACzsgAAs7MAALPYAACz/AAAtCMAALRHAAC0SgAAtEwAALROAAC0UAAAtFIAALRUAAC0VQAAtFgAALRlAAC0dAAAtHYAALR4AAC0egAAtHwAALR+AAC0gAAAtIIAALSRAAC0lAAAtJcAALSaAAC0nQAAtKAAALSjAAC0pgAAtKgAALTnAAC06QAAtOsAALTtAAC08AAAtPEAALTyAAC08wAAtPQAALT2AAC0+AAAtPkAALT6AAC0/AAAtP0AALU8AAC1PgAAtUAAALVCAAC1RQAAtUYAALVHAAC1SAAAtUkAALVLAAC1TQAAtU4AALVPAAC1UQAAtVIAALWRAAC1kwAAtZUAALWXAAC1mgAAtZsAALWcAAC1nQAAtZ4AALWgAAC1ogAAtaMAALWkAAC1pgAAtacAALXmAAC16AAAtesAALXtAAC18AAAtfEAALXyAAC18wAAtfQAALX2AAC1+AAAtfkAALX6AAC1/AAAtf0AALY8AAC2PgAAtkAAALZCAAC2RQAAtkYAALZHAAC2SAAAtkkAALZLAAC2TQAAtk4AALZPAAC2UQAAtlIAALaRAAC2kwAAtpYAALaYAAC2mwAAtpwAALadAAC2ngAAtp8AALahAAC2owAAtqQAALalAAC2pwAAtqgAALbEAAC3AwAAtwUAALcHAAC3CQAAtwwAALcNAAC3DgAAtw8AALcQAAC3EgAAtxQAALcVAAC3FgAAtxgAALcZAAC3ZAAAt4cAALenAAC3xwAAt8kAALfLAAC3zQAAt88AALfSAAC30wAAt9QAALfXAAC32AAAt9oAALfbAAC33QAAt98AALfgAAC34QAAt+QAALflAAC36gAAt/cAALf8AAC3/gAAuAAAALgFAAC4CAAAuAsAALgNAAC4MgAAuFYAALh9AAC4oQAAuKQAALimAAC4qAAAuKoAALisAAC4rgAAuK8AALiyAAC4vwAAuNAAALjSAAC41AAAuNYAALjYAAC42gAAuNwAALjeAAC44AAAuPEAALj0AAC49wAAuPoAALj9AAC5AAAAuQMAALkGAAC5CQAAuQsAALlKAAC5TAAAuU4AALlQAAC5UwAAuVQAALlVAAC5VgAAuVcAALlZAAC5WwAAuVwAALldAAC5XwAAuWAAALmfAAC5oQAAuaMAALmlAAC5qAAAuakAALmqAAC5qwAAuawAALmuAAC5sAAAubEAALmyAAC5tAAAubUAALn0AAC59gAAufkAALn7AAC5/gAAuf8AALoAAAC6AQAAugIAALoEAAC6BgAAugcAALoIAAC6CgAAugsAALoYAAC6GQAAuhoAALocAAC6WwAAul0AALpfAAC6YQAAumQAALplAAC6ZgAAumcAALpoAAC6agAAumwAALptAAC6bgAAunAAALpxAAC6sAAAurIAALq0AAC6tgAAurkAALq6AAC6uwAAurwAALq9AAC6vwAAusEAALrCAAC6wwAAusUAALrGAAC7BQAAuwcAALsJAAC7CwAAuw4AALsPAAC7EAAAuxEAALsSAAC7FAAAuxYAALsXAAC7GAAAuxoAALsbAAC7WgAAu1wAALteAAC7YAAAu2MAALtkAAC7ZQAAu2YAALtnAAC7aQAAu2sAALtsAAC7bQAAu28AALtwAAC7rwAAu7EAALuzAAC7tQAAu7gAALu5AAC7ugAAu7sAALu8AAC7vgAAu8AAALvBAAC7wgAAu8QAALvFAAC76gAAvA4AALw1AAC8WQAAvFwAALxeAAC8YAAAvGIAALxkAAC8ZgAAvGcAALxqAAC8dwAAvIYAALyIAAC8igAAvIwAALyOAAC8kAAAvJIAALyUAAC8owAAvKYAALypAAC8rAAAvK8AALyyAAC8tQAAvLgAALy6AAC8+QAAvPsAALz9AAC8/wAAvQIAAL0DAAC9BAAAvQUAAL0GAAC9CAAAvQoAAL0LAAC9DAAAvQ4AAL0PAAC9TgAAvVAAAL1SAAC9VAAAvVcAAL1YAAC9WQAAvVoAAL1bAAC9XQAAvV8AAL1gAAC9YQAAvWMAAL1kAAC9owAAvaUAAL2nAAC9qQAAvawAAL2tAAC9rgAAva8AAL2wAAC9sgAAvbQAAL21AAC9tgAAvbgAAL25AAC9+AAAvfoAAL39AAC9/wAAvgIAAL4DAAC+BAAAvgUAAL4GAAC+CAAAvgoAAL4LAAC+DAAAvg4AAL4PAAC+TgAAvlAAAL5SAAC+VAAAvlcAAL5YAAC+WQAAvloAAL5bAAC+XQAAvl8AAL5gAAC+YQAAvmMAAL5kAAC+owAAvqUAAL6nAAC+qQAAvqwAAL6tAAC+rgAAvq8AAL6wAAC+sgAAvrQAAL61AAC+tgAAvrgAAL65AAC++AAAvvoAAL78AAC+/gAAvwEAAL8CAAC/AwAAvwQAAL8FAAC/BwAAvwkAAL8KAAC/CwAAvw0AAL8OAAC/WQAAv3wAAL+cAAC/vAAAv74AAL/AAAC/wgAAv8QAAL/HAAC/yAAAv8kAAL/MAAC/zQAAv88AAL/QAAC/0gAAv9QAAL/VAAC/1gAAv9kAAL/aAAC/3wAAv+wAAL/xAAC/8wAAv/UAAL/6AAC//QAAwAAAAMACAADAJwAAwEsAAMByAADAlgAAwJkAAMCbAADAnQAAwJ8AAMChAADAowAAwKQAAMCnAADAtAAAwMUAAMDHAADAyQAAwMsAAMDNAADAzwAAwNEAAMDTAADA1QAAwOYAAMDpAADA7AAAwO8AAMDyAADA9QAAwPgAAMD7AADA/gAAwQAAAME/AADBQQAAwUMAAMFFAADBSAAAwUkAAMFKAADBSwAAwUwAAMFOAADBUAAAwVEAAMFSAADBVAAAwVUAAMGUAADBlgAAwZgAAMGaAADBnQAAwZ4AAMGfAADBoAAAwaEAAMGjAADBpQAAwaYAAMGnAADBqQAAwaoAAMHpAADB6wAAwe4AAMHwAADB8wAAwfQAAMH1AADB9gAAwfcAAMH5AADB+wAAwfwAAMH9AADB/wAAwgAAAMINAADCDgAAwg8AAMIRAADCUAAAwlIAAMJUAADCVgAAwlkAAMJaAADCWwAAwlwAAMJdAADCXwAAwmEAAMJiAADCYwAAwmUAAMJmAADCpQAAwqcAAMKpAADCqwAAwq4AAMKvAADCsAAAwrEAAMKyAADCtAAAwrYAAMK3AADCuAAAwroAAMK7AADC+gAAwvwAAML+AADDAAAAwwMAAMMEAADDBQAAwwYAAMMHAADDCQAAwwsAAMMMAADDDQAAww8AAMMQAADDTwAAw1EAAMNTAADDVQAAw1gAAMNZAADDWgAAw1sAAMNcAADDXgAAw2AAAMNhAADDYgAAw2QAAMNlAADDpAAAw6YAAMOoAADDqgAAw60AAMOuAADDrwAAw7AAAMOxAADDswAAw7UAAMO2AADDtwAAw7kAAMO6AADD3wAAxAMAAMQqAADETgAAxFEAAMRTAADEVQAAxFcAAMRZAADEWwAAxFwAAMRfAADEbAAAxHsAAMR9AADEfwAAxIEAAMSDAADEhQAAxIcAAMSJAADEmAAAxJsAAMSeAADEoQAAxKQAAMSnAADEqgAAxK0AAMSvAADE7gAAxPAAAMTyAADE9AAAxPcAAMT4AADE+QAAxPoAAMT7AADE/QAAxP8AAMUAAADFAQAAxQMAAMUEAADFQwAAxUUAAMVHAADFSQAAxUwAAMVNAADFTgAAxU8AAMVQAADFUgAAxVQAAMVVAADFVgAAxVgAAMVZAADFmAAAxZoAAMWcAADFngAAxaEAAMWiAADFowAAxaQAAMWlAADFpwAAxakAAMWqAADFqwAAxa0AAMWuAADF7QAAxe8AAMXyAADF9AAAxfcAAMX4AADF+QAAxfoAAMX7AADF/QAAxf8AAMYAAADGAQAAxgMAAMYEAADGQwAAxkUAAMZHAADGSQAAxkwAAMZNAADGTgAAxk8AAMZQAADGUgAAxlQAAMZVAADGVgAAxlgAAMZZAADGmAAAxpoAAMacAADGngAAxqEAAMaiAADGowAAxqQAAMalAADGpwAAxqkAAMaqAADGqwAAxq0AAMauAADG7QAAxu8AAMbxAADG8wAAxvYAAMb3AADG+AAAxvkAAMb6AADG/AAAxv4AAMb/AADHAAAAxwIAAMcDAADHTgAAx3EAAMeRAADHsQAAx7MAAMe1AADHtwAAx7kAAMe8AADHvQAAx74AAMfBAADHwgAAx8QAAMfFAADHxwAAx8kAAMfKAADHywAAx84AAMfPAADH1AAAx+EAAMfmAADH6AAAx+oAAMfvAADH8gAAx/UAAMf3AADIHAAAyEAAAMhnAADIiwAAyI4AAMiQAADIkgAAyJQAAMiWAADImAAAyJkAAMicAADIqQAAyLoAAMi8AADIvgAAyMAAAMjCAADIxAAAyMYAAMjIAADIygAAyNsAAMjeAADI4QAAyOQAAMjnAADI6gAAyO0AAMjwAADI8wAAyPUAAMk0AADJNgAAyTgAAMk6AADJPQAAyT4AAMk/AADJQAAAyUEAAMlDAADJRQAAyUYAAMlHAADJSQAAyUoAAMmJAADJiwAAyY0AAMmPAADJkgAAyZMAAMmUAADJlQAAyZYAAMmYAADJmgAAyZsAAMmcAADJngAAyZ8AAMneAADJ4AAAyeMAAMnlAADJ6AAAyekAAMnqAADJ6wAAyewAAMnuAADJ8AAAyfEAAMnyAADJ9AAAyfUAAMoCAADKAwAAygQAAMoGAADKRQAAykcAAMpJAADKSwAAyk4AAMpPAADKUAAAylEAAMpSAADKVAAAylYAAMpXAADKWAAAyloAAMpbAADKmgAAypwAAMqeAADKoAAAyqMAAMqkAADKpQAAyqYAAMqnAADKqQAAyqsAAMqsAADKrQAAyq8AAMqwAADK7wAAyvEAAMrzAADK9QAAyvgAAMr5AADK+gAAyvsAAMr8AADK/gAAywAAAMsBAADLAgAAywQAAMsFAADLRAAAy0YAAMtIAADLSgAAy00AAMtOAADLTwAAy1AAAMtRAADLUwAAy1UAAMtWAADLVwAAy1kAAMtaAADLmQAAy5sAAMudAADLnwAAy6IAAMujAADLpAAAy6UAAMumAADLqAAAy6oAAMurAADLrAAAy64AAMuvAADL1AAAy/gAAMwfAADMQwAAzEYAAMxIAADMSgAAzEwAAMxOAADMUAAAzFEAAMxUAADMYQAAzHAAAMxyAADMdAAAzHYAAMx4AADMegAAzHwAAMx+AADMjQAAzJAAAMyTAADMlgAAzJkAAMycAADMnwAAzKIAAMykAADM4wAAzOUAAMznAADM6QAAzOwAAMztAADM7gAAzO8AAMzwAADM8gAAzPQAAMz1AADM9gAAzPgAAMz5AADNOAAAzToAAM08AADNPgAAzUEAAM1CAADNQwAAzUQAAM1FAADNRwAAzUkAAM1KAADNSwAAzU0AAM1OAADNjQAAzY8AAM2RAADNkwAAzZYAAM2XAADNmAAAzZkAAM2aAADNnAAAzZ4AAM2fAADNoAAAzaIAAM2jAADN4gAAzeQAAM3nAADN6QAAzewAAM3tAADN7gAAze8AAM3wAADN8gAAzfQAAM31AADN9gAAzfgAAM35AADOOAAAzjoAAM48AADOPgAAzkEAAM5CAADOQwAAzkQAAM5FAADORwAAzkkAAM5KAADOSwAAzk0AAM5OAADOjQAAzo8AAM6RAADOkwAAzpYAAM6XAADOmAAAzpkAAM6aAADOnAAAzp4AAM6fAADOoAAAzqIAAM6jAADO4gAAzuQAAM7mAADO6AAAzusAAM7sAADO7QAAzu4AAM7vAADO8QAAzvMAAM70AADO9QAAzvcAAM74AADPAQAAzwIAAM8EAADPQwAAz0UAAM9HAADPSQAAz0wAAM9NAADPTgAAz08AAM9QAADPUgAAz1QAAM9VAADPVgAAz1gAAM9ZAADPmAAAz5oAAM+cAADPngAAz6EAAM+iAADPowAAz6QAAM+lAADPpwAAz6kAAM+qAADPqwAAz60AAM+uAADP7QAAz+8AAM/yAADP9AAAz/cAAM/4AADP+QAAz/oAAM/7AADP/QAAz/8AANAAAADQAQAA0AMAANAEAADQTwAA0HIAANCSAADQsgAA0LQAANC2AADQuAAA0LoAANC8AADQvQAA0L4AANDBAADQwgAA0MQAANDFAADQxwAA0MkAANDKAADQywAA0M4AANDPAADQ1AAA0OEAANDmAADQ6AAA0OoAANDvAADQ8gAA0PUAAND3AADRHAAA0UAAANFnAADRiwAA0Y4AANGQAADRkgAA0ZQAANGWAADRmAAA0ZkAANGcAADRqQAA0boAANG8AADRvgAA0cAAANHCAADRxAAA0cYAANHIAADRygAA0dsAANHeAADR4QAA0eQAANHnAADR6gAA0e0AANHwAADR8wAA0fUAANI0AADSNgAA0jgAANI6AADSPQAA0j4AANI/AADSQAAA0kEAANJDAADSRQAA0kYAANJHAADSSQAA0koAANKJAADSiwAA0o0AANKPAADSkgAA0pMAANKUAADSlQAA0pYAANKYAADSmgAA0psAANKcAADSngAA0p8AANLeAADS4AAA0uMAANLlAADS6AAA0ukAANLqAADS6wAA0uwAANLuAADS8AAA0vEAANLyAADS9AAA0vUAANMCAADTBQAA0wgAANMLAADTDgAA0xAAANMqAADTMAAA028AANNxAADTcwAA03UAANN4AADTeQAA03oAANN7AADTfAAA034AANOAAADTgQAA04IAANOEAADThQAA08QAANPGAADTyAAA08oAANPNAADTzgAA088AANPQAADT0QAA09MAANPVAADT1gAA09cAANPZAADT2gAA1BkAANQbAADUHQAA1B8AANQiAADUIwAA1CQAANQlAADUJgAA1CgAANQqAADUKwAA1CwAANQuAADULwAA1G4AANRwAADUcgAA1HQAANR3AADUeAAA1HkAANR6AADUewAA1H0AANR/AADUgAAA1IEAANSDAADUhAAA1MMAANTFAADUxwAA1MkAANTMAADUzQAA1M4AANTPAADU0AAA1NIAANTUAADU1QAA1NYAANTYAADU2QAA1P4AANUiAADVSQAA1W0AANVwAADVcgAA1XQAANV2AADVeAAA1XoAANV7AADVfgAA1YsAANWaAADVnAAA1Z4AANWgAADVogAA1aQAANWmAADVqAAA1bcAANW6AADVvQAA1cAAANXDAADVxgAA1ckAANXMAADVzgAA1g0AANYPAADWEQAA1hMAANYWAADWFwAA1hgAANYZAADWGgAA1hwAANYeAADWHwAA1iAAANYiAADWIwAA1mIAANZkAADWZgAA1mgAANZrAADWbAAA1m0AANZuAADWbwAA1nEAANZzAADWdAAA1nUAANZ3AADWeAAA1rcAANa5AADWuwAA1r0AANbAAADWwQAA1sIAANbDAADWxAAA1sYAANbIAADWyQAA1soAANbMAADWzQAA1wwAANcOAADXEQAA1xMAANcWAADXFwAA1xgAANcZAADXGgAA1xwAANceAADXHwAA1yAAANciAADXIwAA12IAANdkAADXZgAA12gAANdrAADXbAAA120AANduAADXbwAA13EAANdzAADXdAAA13UAANd3AADXeAAA17cAANe5AADXuwAA170AANfAAADXwQAA18IAANfDAADXxAAA18YAANfIAADXyQAA18oAANfMAADXzQAA2AwAANgOAADYEAAA2BIAANgVAADYFgAA2BcAANgYAADYGQAA2BsAANgdAADYHgAA2B8AANghAADYIgAA2G0AANiQAADYsAAA2NAAANjSAADY1AAA2NYAANjYAADY2gAA2NsAANjcAADY3wAA2OAAANjiAADY4wAA2OUAANjnAADY6AAA2OkAANjsAADY7QAA2PIAANj/AADZBAAA2QYAANkIAADZDQAA2RAAANkTAADZFQAA2ToAANleAADZhQAA2akAANmsAADZrgAA2bAAANmyAADZtAAA2bYAANm3AADZugAA2ccAANnYAADZ2gAA2dwAANneAADZ4AAA2eIAANnkAADZ5gAA2egAANn5AADZ/AAA2f8AANoCAADaBQAA2ggAANoLAADaDgAA2hEAANoTAADaUgAA2lQAANpWAADaWAAA2lsAANpcAADaXQAA2l4AANpfAADaYQAA2mMAANpkAADaZQAA2mcAANpoAADapwAA2qkAANqrAADarQAA2rAAANqxAADasgAA2rMAANq0AADatgAA2rgAANq5AADaugAA2rwAANq9AADa/AAA2v4AANsBAADbAwAA2wYAANsHAADbCAAA2wkAANsKAADbDAAA2w4AANsPAADbEAAA2xIAANsTAADbIAAA2yMAANsmAADbKQAA2ywAANsuAADbSAAA24cAANuJAADbiwAA240AANuQAADbkQAA25IAANuTAADblAAA25YAANuYAADbmQAA25oAANucAADbnQAA29wAANveAADb4AAA2+IAANvlAADb5gAA2+cAANvoAADb6QAA2+sAANvtAADb7gAA2+8AANvxAADb8gAA3DEAANwzAADcNQAA3DcAANw6AADcOwAA3DwAANw9AADcPgAA3EAAANxCAADcQwAA3EQAANxGAADcRwAA3IYAANyIAADcigAA3IwAANyPAADckAAA3JEAANySAADckwAA3JUAANyXAADcmAAA3JkAANybAADcnAAA3NsAANzdAADc3wAA3OEAANzkAADc5QAA3OYAANznAADc6AAA3OoAANzsAADc7QAA3O4AANzwAADc8QAA3RYAAN06AADdYQAA3YUAAN2IAADdigAA3YwAAN2OAADdkAAA3ZIAAN2TAADdlgAA3aMAAN2yAADdtAAA3bYAAN24AADdugAA3bwAAN2+AADdwAAA3c8AAN3SAADd1QAA3dgAAN3bAADd3gAA3eEAAN3kAADd5gAA3iUAAN4nAADeKQAA3isAAN4uAADeLwAA3jAAAN4xAADeMgAA3jQAAN42AADeNwAA3jgAAN46AADeOwAA3noAAN58AADefgAA3oAAAN6DAADehAAA3oUAAN6GAADehwAA3okAAN6LAADejAAA3o0AAN6PAADekAAA3s8AAN7RAADe0wAA3tUAAN7YAADe2QAA3toAAN7bAADe3AAA3t4AAN7gAADe4QAA3uIAAN7kAADe5QAA3yQAAN8mAADfKQAA3ysAAN8uAADfLwAA3zAAAN8xAADfMgAA3zQAAN82AADfNwAA3zgAAN86AADfOwAA33oAAN98AADffgAA34AAAN+DAADfhAAA34UAAN+GAADfhwAA34kAAN+LAADfjAAA340AAN+PAADfkAAA388AAN/RAADf1AAA39YAAN/ZAADf2gAA39sAAN/cAADf3QAA398AAN/hAADf4gAA3+MAAN/lAADf5gAA4AIAAOBBAADgQwAA4EUAAOBHAADgSgAA4EsAAOBMAADgTQAA4E4AAOBQAADgUgAA4FMAAOBUAADgVgAA4FcAAOCiAADgxQAA4OUAAOEFAADhBwAA4QkAAOELAADhDQAA4Q8AAOEQAADhEQAA4RQAAOEVAADhFwAA4RgAAOEaAADhHAAA4R0AAOEeAADhIQAA4SIAAOEnAADhNAAA4TkAAOE7AADhPQAA4UIAAOFFAADhSAAA4UoAAOFvAADhkwAA4boAAOHeAADh4QAA4eMAAOHlAADh5wAA4ekAAOHrAADh7AAA4e8AAOH8AADiDQAA4g8AAOIRAADiEwAA4hUAAOIXAADiGQAA4hsAAOIdAADiLgAA4jEAAOI0AADiNwAA4joAAOI9AADiQAAA4kMAAOJGAADiSAAA4ocAAOKJAADiiwAA4o0AAOKQAADikQAA4pIAAOKTAADilAAA4pYAAOKYAADimQAA4poAAOKcAADinQAA4twAAOLeAADi4AAA4uIAAOLlAADi5gAA4ucAAOLoAADi6QAA4usAAOLtAADi7gAA4u8AAOLxAADi8gAA4zEAAOMzAADjNgAA4zgAAOM7AADjPAAA4z0AAOM+AADjPwAA40EAAONDAADjRAAA40UAAONHAADjSAAA41UAAONWAADjVwAA41kAAOOYAADjmgAA45wAAOOeAADjoQAA46IAAOOjAADjpAAA46UAAOOnAADjqQAA46oAAOOrAADjrQAA464AAOPtAADj7wAA4/EAAOPzAADj9gAA4/cAAOP4AADj+QAA4/oAAOP8AADj/gAA4/8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AAQDeAAEA3wABAOAAAQDiAAEA4wABAPAAAQDxAAEA8gABAPQAAQEzAAEBNQABATcAAQE5AAEBPAABAT0AAQE+AAEBPwABAUAAAQFCAAEBRAABAUUAAQFGAAEBSAABAUkAAQGIAAEBigABAYwAAQGOAAEBkQABAZIAAQGTAAEBlAABAZUAAQGXAAEBmQABAZoAAQGbAAEBnQABAZ4AAQHdAAEB3wABAeEAAQHjAAEB5gABAecAAQHoAAEB6QABAeoAAQHsAAEB7gABAe8AAQHwAAEB8gABAfMAAQIyAAECNAABAjYAAQI4AAECOwABAjwAAQI9AAECPgABAj8AAQJBAAECQwABAkQAAQJFAAECRwABAkgAAQKHAAECiQABAosAAQKNAAECkAABApEAAQKSAAECkwABApQAAQKWAAECmAABApkAAQKaAAECnAABAp0AAQLCAAEC5gABAw0AAQMxAAEDNAABAzYAAQM4AAEDOgABAzwAAQM+AAEDPwABA0IAAQNPAAEDXgABA2AAAQNiAAEDZAABA2YAAQNoAAEDagABA2wAAQN7AAEDfgABA4EAAQOEAAEDhwABA4oAAQONAAEDkAABA5IAAQPRAAED0wABA9UAAQPXAAED2gABA9sAAQPcAAED3QABA94AAQPgAAED4gABA+MAAQPkAAED5gABA+cAAQQmAAEEKAABBCoAAQQsAAEELwABBDAAAQQxAAEEMgABBDMAAQQ1AAEENwABBDgAAQQ5AAEEOwABBDwAAQR7AAEEfQABBH8AAQSBAAEEhAABBIUAAQSGAAEEhwABBIgAAQSKAAEEjAABBI0AAQSOAAEEkAABBJEAAQTQAAEE0gABBNQAAQTWAAEE2QABBNoAAQTbAAEE3AABBN0AAQTfAAEE4QABBOIAAQTjAAEE5QABBOYAAQUlAAEFJwABBSkAAQUrAAEFLgABBS8AAQUwAAEFMQABBTIAAQU0AAEFNgABBTcAAQU4AAEFOgABBTsAAQV6AAEFfAABBX4AAQWAAAEFgwABBYQAAQWFAAEFhgABBYcAAQWJAAEFiwABBYwAAQWNAAEFjwABBZAAAQXPAAEF0QABBdMAAQXVAAEF2AABBdkAAQXaAAEF2wABBdwAAQXeAAEF4AABBeEAAQXiAAEF5AABBeUAAQYwAAEGUwABBnMAAQaTAAEGlQABBpcAAQaZAAEGmwABBp4AAQafAAEGoAABBqMAAQakAAEGpgABBqcAAQapAAEGqwABBqwAAQatAAEGsAABBrEAAQa2AAEGwwABBsgAAQbKAAEGzAABBtEAAQbUAAEG1wABBtkAAQb+AAEHIgABB0kAAQdtAAEHcAABB3IAAQd0AAEHdgABB3gAAQd6AAEHewABB34AAQeLAAEHnAABB54AAQegAAEHogABB6QAAQemAAEHqAABB6oAAQesAAEHvQABB8AAAQfDAAEHxgABB8kAAQfMAAEHzwABB9IAAQfVAAEH1wABCBYAAQgYAAEIGgABCBwAAQgfAAEIIAABCCEAAQgiAAEIIwABCCUAAQgnAAEIKAABCCkAAQgrAAEILAABCGsAAQhtAAEIbwABCHEAAQh0AAEIdQABCHYAAQh3AAEIeAABCHoAAQh8AAEIfQABCH4AAQiAAAEIgQABCMAAAQjCAAEIxQABCMcAAQjKAAEIywABCMwAAQjNAAEIzgABCNAAAQjSAAEI0wABCNQAAQjWAAEI1wABCOQAAQjlAAEI5gABCOgAAQknAAEJKQABCSsAAQktAAEJMAABCTEAAQkyAAEJMwABCTQAAQk2AAEJOAABCTkAAQk6AAEJPAABCT0AAQl8AAEJfgABCYAAAQmCAAEJhQABCYYAAQmHAAEJiAABCYkAAQmLAAEJjQABCY4AAQmPAAEJkQABCZIAAQnRAAEJ0wABCdUAAQnXAAEJ2gABCdsAAQncAAEJ3QABCd4AAQngAAEJ4gABCeMAAQnkAAEJ5gABCecAAQomAAEKKAABCioAAQosAAEKLwABCjAAAQoxAAEKMgABCjMAAQo1AAEKNwABCjgAAQo5AAEKOwABCjwAAQp7AAEKfQABCn8AAQqBAAEKhAABCoUAAQqGAAEKhwABCogAAQqKAAEKjAABCo0AAQqOAAEKkAABCpEAAQq2AAEK2gABCwEAAQslAAELKAABCyoAAQssAAELLgABCzAAAQsyAAELMwABCzYAAQtDAAELUgABC1QAAQtWAAELWAABC1oAAQtcAAELXgABC2AAAQtvAAELcgABC3UAAQt4AAELewABC34AAQuBAAELhAABC4YAAQvFAAELxwABC8kAAQvLAAELzgABC88AAQvQAAEL0QABC9IAAQvUAAEL1gABC9cAAQvYAAEL2gABC9sAAQwaAAEMHAABDB4AAQwgAAEMIwABDCQAAQwlAAEMJgABDCcAAQwpAAEMKwABDCwAAQwtAAEMLwABDDAAAQxvAAEMcQABDHMAAQx1AAEMeAABDHkAAQx6AAEMewABDHwAAQx+AAEMgAABDIEAAQyCAAEMhAABDIUAAQzEAAEMxgABDMgAAQzKAAEMzQABDM4AAQzPAAEM0AABDNEAAQzTAAEM1QABDNYAAQzXAAEM2QABDNoAAQ0ZAAENGwABDR0AAQ0fAAENIgABDSMAAQ0kAAENJQABDSYAAQ0oAAENKgABDSsAAQ0sAAENLgABDS8AAQ1uAAENcAABDXIAAQ10AAENdwABDXgAAQ15AAENegABDXsAAQ19AAENfwABDYAAAQ2BAAENgwABDYQAAQ3DAAENxQABDccAAQ3JAAENzAABDc0AAQ3OAAENzwABDdAAAQ3SAAEN1AABDdUAAQ3WAAEN2AABDdkAAQ4kAAEORwABDmcAAQ6HAAEOiQABDosAAQ6NAAEOjwABDpIAAQ6TAAEOlAABDpcAAQ6YAAEOmgABDpsAAQ6dAAEOoAABDqEAAQ6iAAEOpQABDqYAAQ6rAAEOuAABDr0AAQ6/AAEOwQABDsYAAQ7JAAEOzAABDs4AAQ7zAAEPFwABDz4AAQ9iAAEPZQABD2cAAQ9pAAEPawABD20AAQ9vAAEPcAABD3MAAQ+AAAEPkQABD5MAAQ+VAAEPlwABD5kAAQ+bAAEPnQABD58AAQ+hAAEPsgABD7UAAQ+4AAEPuwABD74AAQ/BAAEPxAABD8cAAQ/KAAEPzAABEAsAARANAAEQDwABEBEAARAUAAEQFQABEBYAARAXAAEQGAABEBoAARAcAAEQHQABEB4AARAgAAEQIQABEGAAARBiAAEQZAABEGYAARBpAAEQagABEGsAARBsAAEQbQABEG8AARBxAAEQcgABEHMAARB1AAEQdgABELUAARC3AAEQugABELwAARC/AAEQwAABEMEAARDCAAEQwwABEMUAARDHAAEQyAABEMkAARDLAAEQzAABENkAARDaAAEQ2wABEN0AAREcAAERHgABESAAAREiAAERJQABESYAAREnAAERKAABESkAARErAAERLQABES4AAREvAAERMQABETIAARFxAAERcwABEXUAARF3AAERegABEXsAARF8AAERfQABEX4AARGAAAERggABEYMAARGEAAERhgABEYcAARHGAAERyAABEcoAARHMAAERzwABEdAAARHRAAER0gABEdMAARHVAAER1wABEdgAARHZAAER2wABEdwAARIbAAESHQABEh8AARIhAAESJAABEiUAARImAAESJwABEigAARIqAAESLAABEi0AARIuAAESMAABEjEAARJwAAEScgABEnQAARJ2AAESeQABEnoAARJ7AAESfAABEn0AARJ/AAESgQABEoIAARKDAAEShQABEoYAARKrAAESzwABEvYAARMaAAETHQABEx8AARMhAAETIwABEyUAARMnAAETKAABEysAARM4AAETRwABE0kAARNLAAETTQABE08AARNRAAETUwABE1UAARNkAAETZwABE2oAARNtAAETcAABE3MAARN2AAETeQABE3sAARO6AAETvAABE74AARPAAAETwwABE8QAARPFAAETxgABE8cAARPJAAETywABE8wAARPNAAETzwABE9AAARQPAAEUEQABFBMAARQVAAEUGAABFBkAARQaAAEUGwABFBwAARQeAAEUIAABFCEAARQiAAEUJAABFCUAARRkAAEUZgABFGgAARRqAAEUbQABFG4AARRvAAEUcAABFHEAARRzAAEUdQABFHYAARR3AAEUeQABFHoAARS5AAEUuwABFL4AARTAAAEUwwABFMQAARTFAAEUxgABFMcAARTJAAEUywABFMwAARTNAAEUzwABFNAAARUPAAEVEQABFRMAARUVAAEVGAABFRkAARUaAAEVGwABFRwAARUeAAEVIAABFSEAARUiAAEVJAABFSUAARVkAAEVZgABFWgAARVqAAEVbQABFW4AARVvAAEVcAABFXEAARVzAAEVdQABFXYAARV3AAEVeQABFXoAARW5AAEVuwABFb0AARW/AAEVwgABFcMAARXEAAEVxQABFcYAARXIAAEVygABFcsAARXMAAEVzgABFc8AARYaAAEWPQABFl0AARZ9AAEWfwABFoEAARaDAAEWhQABFogAARaJAAEWigABFo0AARaOAAEWkAABFpEAARaTAAEWlQABFpYAARaXAAEWmgABFpsAARagAAEWrQABFrIAARa0AAEWtgABFrsAARa+AAEWwQABFsMAARboAAEXDAABFzMAARdXAAEXWgABF1wAARdeAAEXYAABF2IAARdkAAEXZQABF2gAARd1AAEXhgABF4gAAReKAAEXjAABF44AAReQAAEXkgABF5QAAReWAAEXpwABF6oAARetAAEXsAABF7MAARe2AAEXuQABF7wAARe/AAEXwQABGAAAARgCAAEYBAABGAYAARgJAAEYCgABGAsAARgMAAEYDQABGA8AARgRAAEYEgABGBMAARgVAAEYFgABGFUAARhXAAEYWQABGFsAARheAAEYXwABGGAAARhhAAEYYgABGGQAARhmAAEYZwABGGgAARhqAAEYawABGKoAARisAAEYrwABGLEAARi0AAEYtQABGLYAARi3AAEYuAABGLoAARi8AAEYvQABGL4AARjAAAEYwQABGM4AARjPAAEY0AABGNIAARkRAAEZEwABGRUAARkXAAEZGgABGRsAARkcAAEZHQABGR4AARkgAAEZIgABGSMAARkkAAEZJgABGScAARlmAAEZaAABGWoAARlsAAEZbwABGXAAARlxAAEZcgABGXMAARl1AAEZdwABGXgAARl5AAEZewABGXwAARm7AAEZvQABGb8AARnBAAEZxAABGcUAARnGAAEZxwABGcgAARnKAAEZzAABGc0AARnOAAEZ0AABGdEAARoQAAEaEgABGhQAARoWAAEaGQABGhoAARobAAEaHAABGh0AARofAAEaIQABGiIAARojAAEaJQABGiYAARplAAEaZwABGmkAARprAAEabgABGm8AARpwAAEacQABGnIAARp0AAEadgABGncAARp4AAEaegABGnsAARqgAAEaxAABGusAARsPAAEbEgABGxQAARsWAAEbGAABGxoAARscAAEbHQABGyAAARstAAEbPAABGz4AARtAAAEbQgABG0QAARtGAAEbSAABG0oAARtZAAEbXAABG18AARtiAAEbZQABG2gAARtrAAEbbgABG3AAARuvAAEbsQABG7MAARu1AAEbuAABG7kAARu6AAEbuwABG7wAARu+AAEbwAABG8EAARvCAAEbxAABG8UAARwEAAEcBgABHAgAARwKAAEcDQABHA4AARwPAAEcEAABHBEAARwTAAEcFQABHBYAARwXAAEcGQABHBoAARxZAAEcWwABHF0AARxfAAEcYgABHGMAARxkAAEcZQABHGYAARxoAAEcagABHGsAARxsAAEcbgABHG8AARyuAAEcsAABHLMAARy1AAEcuAABHLkAARy6AAEcuwABHLwAARy+AAEcwAABHMEAARzCAAEcxAABHMUAAR0EAAEdBgABHQgAAR0KAAEdDQABHQ4AAR0PAAEdEAABHREAAR0TAAEdFQABHRYAAR0XAAEdGQABHRoAAR1ZAAEdWwABHV0AAR1fAAEdYgABHWMAAR1kAAEdZQABHWYAAR1oAAEdagABHWsAAR1sAAEdbgABHW8AAR2uAAEdsAABHbIAAR20AAEdtwABHbgAAR25AAEdugABHbsAAR29AAEdvwABHcAAAR3BAAEdwwABHcQAAR4PAAEeMgABHlIAAR5yAAEedAABHnYAAR54AAEeegABHn0AAR5+AAEefwABHoIAAR6DAAEehQABHoYAAR6IAAEeigABHosAAR6MAAEejwABHpAAAR6VAAEeogABHqcAAR6pAAEeqwABHrAAAR6zAAEetgABHrgAAR7dAAEfAQABHygAAR9MAAEfTwABH1EAAR9TAAEfVQABH1cAAR9ZAAEfWgABH10AAR9qAAEfewABH30AAR9/AAEfgQABH4MAAR+FAAEfhwABH4kAAR+LAAEfnAABH58AAR+iAAEfpQABH6gAAR+rAAEfrgABH7EAAR+0AAEftgABH/UAAR/3AAEf+QABH/sAAR/+AAEf/wABIAAAASABAAEgAgABIAQAASAGAAEgBwABIAgAASAKAAEgCwABIEoAASBMAAEgTgABIFAAASBTAAEgVAABIFUAASBWAAEgVwABIFkAASBbAAEgXAABIF0AASBfAAEgYAABIJ8AASChAAEgpAABIKYAASCpAAEgqgABIKsAASCsAAEgrQABIK8AASCxAAEgsgABILMAASC1AAEgtgABIMMAASDGAAEgyQABIMwAASDPAAEg0QABIOsAASD1AAEhNAABITYAASE4AAEhOgABIT0AASE+AAEhPwABIUAAASFBAAEhQwABIUUAASFGAAEhRwABIUkAASFKAAEhiQABIYsAASGNAAEhjwABIZIAASGTAAEhlAABIZUAASGWAAEhmAABIZoAASGbAAEhnAABIZ4AASGfAAEh3gABIeAAASHiAAEh5AABIecAASHoAAEh6QABIeoAASHrAAEh7QABIe8AASHwAAEh8QABIfMAASH0AAEiMwABIjUAASI3AAEiOQABIjwAASI9AAEiPgABIj8AASJAAAEiQgABIkQAASJFAAEiRgABIkgAASJJAAEiiAABIooAASKMAAEijgABIpEAASKSAAEikwABIpQAASKVAAEilwABIpkAASKaAAEimwABIp0AASKeAAEiwwABIucAASMOAAEjMgABIzUAASM3AAEjOQABIzsAASM9AAEjPwABI0AAASNDAAEjUAABI18AASNhAAEjYwABI2UAASNnAAEjaQABI2sAASNtAAEjfAABI38AASOCAAEjhQABI4gAASOLAAEjjgABI5EAASOTAAEj0gABI9QAASPWAAEj2AABI9sAASPcAAEj3QABI94AASPfAAEj4QABI+MAASPkAAEj5QABI+cAASPoAAEkJwABJCkAASQrAAEkLQABJDAAASQxAAEkMgABJDMAASQ0AAEkNgABJDgAASQ5AAEkOgABJDwAASQ9AAEkfAABJH4AASSAAAEkggABJIUAASSGAAEkhwABJIgAASSJAAEkiwABJI0AASSOAAEkjwABJJEAASSSAAEk0QABJNMAASTWAAEk2AABJNsAASTcAAEk3QABJN4AASTfAAEk4QABJOMAASTkAAEk5QABJOcAASToAAElJwABJSkAASUrAAElLQABJTAAASUxAAElMgABJTMAASU0AAElNgABJTgAASU5AAElOgABJTwAASU9AAElfAABJX4AASWBAAElgwABJYYAASWHAAEliAABJYkAASWKAAEljAABJY4AASWPAAElkAABJZIAASWTAAElrwABJe4AASXwAAEl8gABJfQAASX3AAEl+AABJfkAASX6AAEl+wABJf0AASX/AAEmAAABJgEAASYDAAEmBAABJk8AASZyAAEmkgABJrIAASa0AAEmtgABJrgAASa6AAEmvQABJr4AASa/AAEmwgABJsMAASbFAAEmxgABJsgAASbKAAEmywABJswAASbPAAEm0AABJtUAASbiAAEm5wABJukAASbrAAEm8AABJvMAASb2AAEm+AABJx0AASdBAAEnaAABJ4wAASePAAEnkQABJ5MAASeVAAEnlwABJ5kAASeaAAEnnQABJ6oAASe7AAEnvQABJ78AASfBAAEnwwABJ8UAASfHAAEnyQABJ8sAASfcAAEn3wABJ+IAASflAAEn6AABJ+sAASfuAAEn8QABJ/QAASf2AAEoNQABKDcAASg5AAEoOwABKD4AASg/AAEoQAABKEEAAShCAAEoRAABKEYAAShHAAEoSAABKEoAAShLAAEoigABKIwAASiOAAEokAABKJMAASiUAAEolQABKJYAASiXAAEomQABKJsAASicAAEonQABKJ8AASigAAEo3wABKOEAASjkAAEo5gABKOkAASjqAAEo6wABKOwAASjtAAEo7wABKPEAASjyAAEo8wABKPUAASj2AAEpAwABKQQAASkFAAEpBwABKUYAASlIAAEpSgABKUwAASlPAAEpUAABKVEAASlSAAEpUwABKVUAASlXAAEpWAABKVkAASlbAAEpXAABKZsAASmdAAEpnwABKaEAASmkAAEppQABKaYAASmnAAEpqAABKaoAASmsAAEprQABKa4AASmwAAEpsQABKfAAASnyAAEp9AABKfYAASn5AAEp+gABKfsAASn8AAEp/QABKf8AASoBAAEqAgABKgMAASoFAAEqBgABKkUAASpHAAEqSQABKksAASpOAAEqTwABKlAAASpRAAEqUgABKlQAASpWAAEqVwABKlgAASpaAAEqWwABKpoAASqcAAEqngABKqAAASqjAAEqpAABKqUAASqmAAEqpwABKqkAASqrAAEqrAABKq0AASqvAAEqsAABKtUAASr5AAErIAABK0QAAStHAAErSQABK0sAAStNAAErTwABK1EAAStSAAErVQABK2IAAStxAAErcwABK3UAASt3AAEreQABK3sAASt9AAErfwABK44AASuRAAErlAABK5cAASuaAAErnQABK6AAASujAAErpQABK+QAASvmAAEr6AABK+oAASvtAAEr7gABK+8AASvwAAEr8QABK/MAASv1AAEr9gABK/cAASv5AAEr+gABLDkAASw7AAEsPQABLD8AASxCAAEsQwABLEQAASxFAAEsRgABLEgAASxKAAEsSwABLEwAASxOAAEsTwABLI4AASyQAAEskgABLJQAASyXAAEsmAABLJkAASyaAAEsmwABLJ0AASyfAAEsoAABLKEAASyjAAEspAABLOMAASzlAAEs6AABLOoAASztAAEs7gABLO8AASzwAAEs8QABLPMAASz1AAEs9gABLPcAASz5AAEs+gABLTkAAS07AAEtPQABLT8AAS1CAAEtQwABLUQAAS1FAAEtRgABLUgAAS1KAAEtSwABLUwAAS1OAAEtTwABLY4AAS2QAAEtkgABLZQAAS2XAAEtmAABLZkAAS2aAAEtmwABLZ0AAS2fAAEtoAABLaEAAS2jAAEtpAABLeMAAS3lAAEt5wABLekAAS3sAAEt7QABLe4AAS3vAAEt8AABLfIAAS30AAEt9QABLfYAAS34AAEt+QABLkQAAS5nAAEuhwABLqcAAS6pAAEuqwABLq0AAS6vAAEusgABLrMAAS60AAEutwABLrgAAS66AAEuuwABLr0AAS7AAAEuwQABLsIAAS7FAAEuxgABLssAAS7YAAEu3QABLt8AAS7hAAEu5gABLukAAS7sAAEu7gABLxMAAS83AAEvXgABL4IAAS+FAAEvhwABL4kAAS+LAAEvjQABL48AAS+QAAEvkwABL6AAAS+xAAEvswABL7UAAS+3AAEvuQABL7sAAS+9AAEvvwABL8EAAS/SAAEv1QABL9gAAS/bAAEv3gABL+EAAS/kAAEv5wABL+oAAS/sAAEwKwABMC0AATAvAAEwMQABMDQAATA1AAEwNgABMDcAATA4AAEwOgABMDwAATA9AAEwPgABMEAAATBBAAEwgAABMIIAATCEAAEwhgABMIkAATCKAAEwiwABMIwAATCNAAEwjwABMJEAATCSAAEwkwABMJUAATCWAAEw1QABMNcAATDaAAEw3AABMN8AATDgAAEw4QABMOIAATDjAAEw5QABMOcAATDoAAEw6QABMOsAATDsAAEw+QABMPoAATD7AAEw/QABMTwAATE+AAExQAABMUIAATFFAAExRgABMUcAATFIAAExSQABMUsAATFNAAExTgABMU8AATFRAAExUgABMZEAATGTAAExlQABMZcAATGaAAExmwABMZwAATGdAAExngABMaAAATGiAAExowABMaQAATGmAAExpwABMeYAATHoAAEx6gABMewAATHvAAEx8AABMfEAATHyAAEx8wABMfUAATH3AAEx+AABMfkAATH7AAEx/AABMjsAATI9AAEyPwABMkEAATJEAAEyRQABMkYAATJHAAEySAABMkoAATJMAAEyTQABMk4AATJQAAEyUQABMpAAATKSAAEylAABMpYAATKZAAEymgABMpsAATKcAAEynQABMp8AATKhAAEyogABMqMAATKlAAEypgABMssAATLvAAEzFgABMzoAATM9AAEzPwABM0EAATNDAAEzRQABM0cAATNIAAEzSwABM1gAATNnAAEzaQABM2sAATNtAAEzbwABM3EAATNzAAEzdQABM4QAATOHAAEzigABM40AATOQAAEzkwABM5YAATOZAAEzmwABM9oAATPcAAEz3wABM+EAATPkAAEz5QABM+YAATPnAAEz6AABM+oAATPsAAEz7QABM+4AATPwAAEz8QABNDAAATQyAAE0NAABNDYAATQ5AAE0OgABNDsAATQ8AAE0PQABND8AATRBAAE0QgABNEMAATRFAAE0RgABNIUAATSHAAE0iQABNIsAATSOAAE0jwABNJAAATSRAAE0kgABNJQAATSWAAE0lwABNJgAATSaAAE0mwABNNoAATTcAAE03wABNOEAATTkAAE05QABNOYAATTnAAE06AABNOoAATTsAAE07QABNO4AATTwAAE08QABNTAAATUyAAE1NAABNTYAATU5AAE1OgABNTsAATU8AAE1PQABNT8AATVBAAE1QgABNUMAATVFAAE1RgABNYUAATWHAAE1iQABNYsAATWOAAE1jwABNZAAATWRAAE1kgABNZQAATWWAAE1lwABNZgAATWaAAE1mwABNdoAATXcAAE13gABNeAAATXjAAE15AABNeUAATXmAAE15wABNekAATXrAAE17AABNe0AATXvAAE18AABNfkAATX6AAE1/AABNjsAATY9AAE2PwABNkEAATZEAAE2RQABNkYAATZHAAE2SAABNkoAATZMAAE2TQABNk4AATZQAAE2UQABNpAAATaSAAE2lAABNpYAATaZAAE2mgABNpsAATacAAE2nQABNp8AATahAAE2ogABNqMAATalAAE2pgABNuUAATbnAAE26gABNuwAATbvAAE28AABNvEAATbyAAE28wABNvUAATb3AAE2+AABNvkAATb7AAE2/AABN0cAATdqAAE3igABN6oAATesAAE3rgABN7AAATeyAAE3tAABN7UAATe2AAE3uQABN7oAATe8AAE3vQABN78AATfBAAE3wgABN8MAATfGAAE3xwABN8wAATfZAAE33gABN+AAATfiAAE35wABN+oAATftAAE37wABOBQAATg4AAE4XwABOIMAATiGAAE4iAABOIoAATiMAAE4jgABOJAAATiRAAE4lAABOKEAATiyAAE4tAABOLYAATi4AAE4ugABOLwAATi+AAE4wAABOMIAATjTAAE41gABONkAATjcAAE43wABOOIAATjlAAE46AABOOsAATjtAAE5LAABOS4AATkwAAE5MgABOTUAATk2AAE5NwABOTgAATk5AAE5OwABOT0AATk+AAE5PwABOUEAATlCAAE5gQABOYMAATmFAAE5hwABOYoAATmLAAE5jAABOY0AATmOAAE5kAABOZIAATmTAAE5lAABOZYAATmXAAE51gABOdgAATnbAAE53QABOeAAATnhAAE54gABOeMAATnkAAE55gABOegAATnpAAE56gABOewAATntAAE5+gABOfsAATn8AAE5/gABOj0AATo/AAE6QQABOkMAATpGAAE6RwABOkgAATpJAAE6SgABOkwAATpOAAE6TwABOlAAATpSAAE6UwABOpIAATqUAAE6lgABOpgAATqbAAE6nAABOp0AATqeAAE6nwABOqEAATqjAAE6pAABOqUAATqnAAE6qAABOucAATrpAAE66wABOu0AATrwAAE68QABOvIAATrzAAE69AABOvYAATr4AAE6+QABOvoAATr8AAE6/QABOzwAATs+AAE7QAABO0IAATtFAAE7RgABO0cAATtIAAE7SQABO0sAATtNAAE7TgABO08AATtRAAE7UgABO5EAATuTAAE7lQABO5cAATuaAAE7mwABO5wAATudAAE7ngABO6AAATuiAAE7owABO6QAATumAAE7pwABO8wAATvwAAE8FwABPDsAATw+AAE8QAABPEIAATxEAAE8RgABPEgAATxJAAE8TAABPFkAATxoAAE8agABPGwAATxuAAE8cAABPHIAATx0AAE8dgABPIUAATyIAAE8iwABPI4AATyRAAE8lAABPJcAATyaAAE8nAABPNsAATzdAAE83wABPOEAATzkAAE85QABPOYAATznAAE86AABPOoAATzsAAE87QABPO4AATzwAAE88QABPTAAAT0yAAE9NAABPTYAAT05AAE9OgABPTsAAT08AAE9PQABPT8AAT1BAAE9QgABPUMAAT1FAAE9RgABPYUAAT2HAAE9iQABPYsAAT2OAAE9jwABPZAAAT2RAAE9kgABPZQAAT2WAAE9lwABPZgAAT2aAAE9mwABPdoAAT3cAAE93wABPeEAAT3kAAE95QABPeYAAT3nAAE96AABPeoAAT3sAAE97QABPe4AAT3wAAE98QABPjQ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AAU+6AAFPuwABT/oAAU/8AAFP/gABUAAAAVADAAFQBAABUAUAAVAGAAFQBwABUAkAAVALAAFQDAABUA0AAVAPAAFQEAABUE8AAVBRAAFQUwABUFUAAVBYAAFQWQABUFoAAVBbAAFQXAABUF4AAVBgAAFQYQABUGIAAVBkAAFQZQABUKQAAVCmAAFQqAABUKoAAVCtAAFQrgABUK8AAVCwAAFQsQABULMAAVC1AAFQtgABULcAAVC5AAFQugABUPkAAVD7AAFQ/QABUP8AAVECAAFRAwABUQQAAVEFAAFRBgABUQgAAVEKAAFRCwABUQwAAVEOAAFRDwABUTQAAVFYAAFRfwABUaMAAVGmAAFRqAABUaoAAVGsAAFRrgABUbAAAVGxAAFRtAABUcEAAVHQAAFR0gABUdQAAVHWAAFR2AABUdoAAVHcAAFR3gABUe0AAVHwAAFR8wABUfYAAVH5AAFR/AABUf8AAVICAAFSBAABUkMAAVJFAAFSRwABUkkAAVJMAAFSTQABUk4AAVJPAAFSUAABUlIAAVJUAAFSVQABUlYAAVJYAAFSWQABUpgAAVKaAAFSnAABUp4AAVKhAAFSogABUqMAAVKkAAFSpQABUqcAAVKpAAFSqgABUqsAAVKtAAFSrgABUu0AAVLvAAFS8QABUvMAAVL2AAFS9wABUvgAAVL5AAFS+gABUvwAAVL+AAFS/wABUwAAAVMCAAFTAwABU0IAAVNEAAFTRgABU0gAAVNLAAFTTAABU00AAVNOAAFTTwABU1EAAVNTAAFTVAABU1UAAVNXAAFTWAABU5cAAVOZAAFTmwABU50AAVOgAAFToQABU6IAAVOjAAFTpAABU6YAAVOoAAFTqQABU6oAAVOsAAFTrQABU+wAAVPuAAFT8AABU/IAAVP1AAFT9gABU/cAAVP4AAFT+QABU/sAAVP9AAFT/gABU/8AAVQBAAFUAgABVEEAAVRDAAFURgABVEgAAVRLAAFUTAABVE0AAVROAAFUTwABVFEAAVRTAAFUVAABVFUAAVRXAAFUWAABVKMAAVTGAAFU5gABVQYAAVUIAAFVCgABVQwAAVUOAAFVEQABVRIAAVUTAAFVFgABVRcAAVUZAAFVGgABVRwAAVUeAAFVHwABVSAAAVUjAAFVJAABVS0AAVU6AAFVPwABVUEAAVVDAAFVSAABVUsAAVVOAAFVUAABVXUAAVWZAAFVwAABVeQAAVXnAAFV6QABVesAAVXtAAFV7wABVfEAAVXyAAFV9QABVgIAAVYTAAFWFQABVhcAAVYZAAFWGwABVh0AAVYfAAFWIQABViMAAVY0AAFWNwABVjoAAVY9AAFWQAABVkMAAVZGAAFWSQABVkwAAVZOAAFWjQABVo8AAVaRAAFWkwABVpYAAVaXAAFWmAABVpkAAVaaAAFWnAABVp4AAVafAAFWoAABVqIAAVajAAFW4gABVuQAAVbmAAFW6AABVusAAVbsAAFW7QABVu4AAVbvAAFW8QABVvMAAVb0AAFW9QABVvcAAVb4AAFXNwABVzkAAVc8AAFXPgABV0EAAVdCAAFXQwABV0QAAVdFAAFXRwABV0kAAVdKAAFXSwABV00AAVdOAAFXWwABV1wAAVddAAFXXwABV54AAVegAAFXogABV6QAAVenAAFXqAABV6kAAVeqAAFXqwABV60AAVevAAFXsAABV7EAAVezAAFXtAABV/MAAVf1AAFX9wABV/kAAVf8AAFX/QABV/4AAVf/AAFYAAABWAIAAVgEAAFYBQABWAYAAVgIAAFYCQABWEgAAVhKAAFYTAABWE4AAVhRAAFYUgABWFMAAVhUAAFYVQABWFcAAVhZAAFYWgABWFsAAVhdAAFYXgABWJ0AAVifAAFYoQABWKMAAVimAAFYpwABWKgAAVipAAFYqgABWKwAAViuAAFYrwABWLAAAViyAAFYswABWPIAAVj0AAFY9gABWPgAAVj7AAFY/AABWP0AAVj+AAFY/wABWQEAAVkDAAFZBAABWQUAAVkHAAFZCAABWS0AAVlRAAFZeAABWZwAAVmfAAFZoQABWaMAAVmlAAFZpwABWakAAVmqAAFZrQABWboAAVnJAAFZywABWc0AAVnPAAFZ0QABWdMAAVnVAAFZ1wABWeYAAVnpAAFZ7AABWe8AAVnyAAFZ9QABWfgAAVn7AAFZ/QABWjwAAVo+AAFaQAABWkIAAVpFAAFaRgABWkcAAVpIAAFaSQABWksAAVpNAAFaTgABWk8AAVpRAAFaUgABWpEAAVqTAAFalQABWpcAAVqaAAFamwABWpwAAVqdAAFangABWqAAAVqiAAFaowABWqQAAVqmAAFapwABWuYAAVroAAFa6gABWuwAAVrvAAFa8AABWvEAAVryAAFa8wABWvUAAVr3AAFa+AABWvkAAVr7AAFa/AABWzsAAVs9AAFbQAABW0IAAVtFAAFbRgABW0cAAVtIAAFbSQABW0sAAVtNAAFbTgABW08AAVtRAAFbUgABW5EAAVuTAAFblQABW5cAAVuaAAFbmwABW5wAAVudAAFbngABW6AAAVuiAAFbowABW6QAAVumAAFbpwABW+YAAVvoAAFb6gABW+wAAVvvAAFb8AABW/EAAVvyAAFb8wABW/UAAVv3AAFb+AABW/kAAVv7AAFb/AABXDsAAVw9AAFcPwABXEEAAVxEAAFcRQABXEYAAVxHAAFcSAABXEoAAVxMAAFcTQABXE4AAVxQAAFcUQABXFoAAVxbAAFcXQABXJwAAVyeAAFcoAABXKIAAVylAAFcpgABXKcAAVyoAAFcqQABXKsAAVytAAFcrgABXK8AAVyxAAFcsgABXPEAAVzzAAFc9QABXPcAAVz6AAFc+wABXPwAAVz9AAFc/gABXQAAAV0CAAFdAwABXQQAAV0GAAFdBwABXUYAAV1IAAFdSwABXU0AAV1QAAFdUQABXVIAAV1TAAFdVAABXVYAAV1YAAFdWQABXVoAAV1cAAFdXQABXagAAV3LAAFd6wABXgsAAV4NAAFeDwABXhEAAV4TAAFeFQABXhYAAV4XAAFeGgABXhsAAV4dAAFeHgABXiAAAV4iAAFeIwABXiQAAV4nAAFeKAABXi0AAV46AAFePwABXkEAAV5DAAFeSAABXksAAV5OAAFeUAABXnUAAV6ZAAFewAABXuQAAV7nAAFe6QABXusAAV7tAAFe7wABXvEAAV7yAAFe9QABXwIAAV8TAAFfFQABXxcAAV8ZAAFfGwABXx0AAV8fAAFfIQABXyMAAV80AAFfNwABXzoAAV89AAFfQAABX0MAAV9GAAFfSQABX0wAAV9OAAFfjQABX48AAV+RAAFfkwABX5YAAV+XAAFfmAABX5kAAV+aAAFfnAABX54AAV+fAAFfoAABX6IAAV+jAAFf4gABX+QAAV/mAAFf6AABX+sAAV/sAAFf7QABX+4AAV/vAAFf8QABX/MAAV/0AAFf9QABX/cAAV/4AAFgNwABYDkAAWA8AAFgPgABYEEAAWBCAAFgQwABYEQAAWBFAAFgRwABYEkAAWBKAAFgSwABYE0AAWBOAAFgWwABYFwAAWBdAAFgXwABYJ4AAWCgAAFgogABYKQAAWCnAAFgqAABYKkAAWCqAAFgqwABYK0AAWCvAAFgsAABYLEAAWCzAAFgtAABYPMAAWD1AAFg9wABYPkAAWD8AAFg/QABYP4AAWD/AAFhAAABYQIAAWEEAAFhBQABYQYAAWEIAAFhCQABYUgAAWFKAAFhTAABYU4AAWFRAAFhUgABYVMAAWFUAAFhVQABYVcAAWFZAAFhWgABYVsAAWFdAAFhXgABYZ0AAWGfAAFhoQABYaMAAWGmAAFhpwABYagAAWGpAAFhqgABYawAAWGuAAFhrwABYbAAAWGyAAFhswABYfIAAWH0AAFh9gABYfgAAWH7AAFh/AABYf0AAWH+AAFh/wABYgEAAWIDAAFiBAABYgUAAWIHAAFiCAABYi0AAWJRAAFieAABYpwAAWKfAAFioQABYqMAAWKlAAFipwABYqkAAWKqAAFirQABYroAAWLJAAFiywABYs0AAWLPAAFi0QABYtMAAWLVAAFi1wABYuYAAWLpAAFi7AABYu8AAWLyAAFi9QABYvgAAWL7AAFi/QABYzwAAWM+AAFjQAABY0IAAWNFAAFjRgABY0cAAWNIAAFjSQABY0sAAWNNAAFjTgABY08AAWNRAAFjUgABY5EAAWOTAAFjlQABY5cAAWOaAAFjmwABY5wAAWOdAAFjngABY6AAAWOiAAFjowABY6QAAWOmAAFjpwABY+YAAWPoAAFj6gABY+wAAWPvAAFj8AABY/EAAWPyAAFj8wABY/UAAWP3AAFj+AABY/kAAWP7AAFj/AABZDsAAWQ9AAFkQAABZEIAAWRFAAFkRgABZEcAAWRIAAFkSQABZEsAAWRNAAFkTgABZE8AAWRRAAFkUgABZJEAAWSTAAFklQABZJcAAWSaAAFkmwABZJwAAWSdAAFkngABZKAAAWSiAAFkowABZKQAAWSmAAFkpwABZOYAAWToAAFk6gABZOwAAWTvAAFk8AABZPEAAWTyAAFk8wABZPUAAWT3AAFk+AABZPkAAWT7AAFk/AABZTsAAWU9AAFlPwABZUEAAWVEAAFlRQABZUYAAWVHAAFlSAABZUoAAWVMAAFlTQABZU4AAWVQAAFlUQABZVoAAWVbAAFlXQABZZwAAWWeAAFloAABZaIAAWWkAAFlpQABZaYAAWWnAAFlqAABZaoAAWWsAAFlrQABZa4AAWWwAAFlsQABZfAAAWXyAAFl9AABZfYAAWX4AAFl+QABZfoAAWX7AAFl/AABZf4AAWYAAAFmAQABZgIAAWYEAAFmBQABZkQAAWZGAAFmSAABZkoAAWZMAAFmTQABZk4AAWZPAAFmUAABZlIAAWZUAAFmVQABZlYAAWZYAAFmWQABZqQAAWbHAAFm5wABZwcAAWcJAAFnCwABZw0AAWcPAAFnEQABZxIAAWcTAAFnFgABZxcAAWcZAAFnGgABZxwAAWceAAFnHwABZyAAAWcjAAFnJAABZykAAWc2AAFnOwABZz0AAWc/AAFnRAABZ0cAAWdKAAFnTAABZ3EAAWeVAAFnvAABZ+AAAWfjAAFn5QABZ+cAAWfpAAFn6wABZ+0AAWfuAAFn8QABZ/4AAWgPAAFoEQABaBMAAWgVAAFoFwABaBkAAWgbAAFoHQABaB8AAWgwAAFoMwABaDYAAWg5AAFoPAABaD8AAWhCAAFoRQABaEgAAWhKAAFoiQABaIsAAWiNAAFojwABaJIAAWiTAAFolAABaJUAAWiWAAFomAABaJoAAWibAAFonAABaJ4AAWifAAFo3gABaOAAAWjiAAFo5AABaOcAAWjoAAFo6QABaOoAAWjrAAFo7QABaO8AAWjwAAFo8QABaPMAAWj0AAFpMwABaTUAAWk4AAFpOgABaT0AAWk+AAFpPwABaUAAAWlBAAFpQwABaUUAAWlGAAFpRwABaUkAAWlKAAFpVwABaVgAAWlZAAFpWwABaZoAAWmcAAFpngABaaAAAWmjAAFppAABaaUAAWmmAAFppwABaakAAWmrAAFprAABaa0AAWmvAAFpsAABae8AAWnxAAFp8wABafUAAWn4AAFp+QABafoAAWn7AAFp/AABaf4AAWoAAAFqAQABagIAAWoEAAFqBQABakQAAWpGAAFqSAABakoAAWpNAAFqTgABak8AAWpQAAFqUQABalMAAWpVAAFqVgABalcAAWpZAAFqWgABapkAAWqbAAFqnQABap8AAWqiAAFqowABaqQAAWqlAAFqpgABaqgAAWqqAAFqqwABaqwAAWquAAFqrwABau4AAWrwAAFq8gABavQAAWr3AAFq+AABavkAAWr6AAFq+wABav0AAWr/AAFrAAABawEAAWsDAAFrBAABaykAAWtNAAFrdAABa5gAAWubAAFrnQABa58AAWuhAAFrowABa6UAAWumAAFrqQABa7YAAWvFAAFrxwABa8kAAWvLAAFrzQABa88AAWvRAAFr0wABa+IAAWvlAAFr6AABa+sAAWvuAAFr8QABa/QAAWv3AAFr+QABbDgAAWw6AAFsPAABbD4AAWxBAAFsQgABbEMAAWxEAAFsRQABbEcAAWxJAAFsSgABbEsAAWxNAAFsTgABbI0AAWyPAAFskQABbJMAAWyWAAFslwABbJgAAWyZAAFsmgABbJwAAWyeAAFsnwABbKAAAWyiAAFsowABbOIAAWzkAAFs5gABbOgAAWzrAAFs7AABbO0AAWzuAAFs7wABbPEAAWzzAAFs9AABbPUAAWz3AAFs+AABbTcAAW05AAFtPAABbT4AAW1BAAFtQgABbUMAAW1EAAFtRQABbUcAAW1JAAFtSgABbUsAAW1NAAFtTgABbY0AAW2PAAFtkQABbZMAAW2WAAFtlwABbZgAAW2ZAAFtmgABbZwAAW2eAAFtnwABbaAAAW2iAAFtowABbeIAAW3kAAFt5gABbegAAW3rAAFt7AABbe0AAW3uAAFt7wABbfEAAW3zAAFt9AABbfUAAW33AAFt+AABbjcAAW45AAFuOwABbj0AAW5AAAFuQQABbkIAAW5DAAFuRAABbkYAAW5IAAFuSQABbkoAAW5MAAFuTQABbpgAAW67AAFu2wABbvsAAW79AAFu/wABbwEAAW8DAAFvBQABbwYAAW8HAAFvCgABbwsAAW8NAAFvDgABbxAAAW8SAAFvEwABbxQAAW8XAAFvGAABbx0AAW8qAAFvLwABbzEAAW8zAAFvOAABbzsAAW8+AAFvQAABb2UAAW+JAAFvsAABb9QAAW/XAAFv2QABb9sAAW/dAAFv3wABb+EAAW/iAAFv5QABb/IAAXADAAFwBQABcAcAAXAJAAFwCwABcA0AAXAPAAFwEQABcBMAAXAkAAFwJwABcCoAAXAtAAFwMAABcDMAAXA2AAFwOQABcDwAAXA+AAFwfQABcH8AAXCBAAFwgwABcIYAAXCHAAFwiAABcIkAAXCKAAFwjAABcI4AAXCPAAFwkAABcJIAAXCTAAFw0gABcNQAAXDWAAFw2AABcNsAAXDcAAFw3QABcN4AAXDfAAFw4QABcOMAAXDkAAFw5QABcOcAAXDoAAFxJwABcSkAAXEsAAFxLgABcTEAAXEyAAFxMwABcTQAAXE1AAFxNwABcTkAAXE6AAFxOwABcT0AAXE+AAFxSwABcUwAAXFNAAFxTwABcY4AAXGQAAFxkgABcZQAAXGXAAFxmAABcZkAAXGaAAFxmwABcZ0AAXGfAAFxoAABcaEAAXGjAAFxpAABceMAAXHlAAFx5wABcekAAXHsAAFx7QABce4AAXHvAAFx8AABcfIAAXH0AAFx9QABcfYAAXH4AAFx+QABcjgAAXI6AAFyPAABcj4AAXJBAAFyQgABckMAAXJEAAFyRQABckcAAXJJAAFySgABcksAAXJNAAFyTgABco0AAXKPAAFykQABcpMAAXKWAAFylwABcpgAAXKZAAFymgABcpwAAXKeAAFynwABcqAAAXKiAAFyowABcuIAAXLkAAFy5gABcugAAXLrAAFy7AABcu0AAXLuAAFy7wABcvEAAXLzAAFy9AABcvUAAXL3AAFy+AABcx0AAXNBAAFzaAABc4wAAXOPAAFzkQABc5MAAXOVAAFzlwABc5kAAXOaAAFznQABc6oAAXO5AAFzuwABc70AAXO/AAFzwQABc8MAAXPFAAFzxwABc9YAAXPZAAFz3AABc98AAXPiAAFz5QABc+gAAXPrAAFz7QABdCwAAXQuAAF0MAABdDIAAXQ1AAF0NgABdDcAAXQ4AAF0OQABdDsAAXQ9AAF0PgABdD8AAXRBAAF0QgABdIEAAXSDAAF0hQABdIcAAXSKAAF0iwABdIwAAXSNAAF0jgABdJAAAXSSAAF0kwABdJQAAXSWAAF0lwABdNYAAXTYAAF02gABdNwAAXTfAAF04AABdOEAAXTiAAF04wABdOUAAXTnAAF06AABdOkAAXTrAAF07AABdSsAAXUtAAF1LwABdTEAAXU0AAF1NQABdTYAAXU3AAF1OAABdToAAXU8AAF1PQABdT4AAXVAAAF1QQABdYAAAXWCAAF1hAABdYYAAXWJAAF1igABdYsAAXWMAAF1jQABdY8AAXWRAAF1kgABdZMAAXWVAAF1lgABddUAAXXXAAF12QABddsAAXXeAAF13wABdeAAAXXhAAF14gABdeQAAXXmAAF15wABdegAAXXqAAF16wABdioAAXYsAAF2LgABdjAAAXYzAAF2NAABdjUAAXY2AAF2NwABdjkAAXY7AAF2PAABdj0AAXY/AAF2QAABdosAAXauAAF2zgABdu4AAXbwAAF28gABdvQAAXb2AAF2+AABdvkAAXb6AAF2/QABdv4AAXcAAAF3AQABdwMAAXcFAAF3BgABdwcAAXcKAAF3CwABdxQAAXchAAF3JgABdygAAXcqAAF3LwABdzIAAXc1AAF3NwABd1wAAXeAAAF3pwABd8sAAXfOAAF30AABd9IAAXfUAAF31gABd9gAAXfZAAF33AABd+kAAXf6AAF3/AABd/4AAXgAAAF4AgABeAQAAXgGAAF4CAABeAoAAXgbAAF4HgABeCEAAXgkAAF4JwABeCoAAXgtAAF4MAABeDMAAXg1AAF4dAABeHYAAXh4AAF4egABeH0AAXh+AAF4fwABeIAAAXiBAAF4gwABeIUAAXiGAAF4hwABeIkAAXiKAAF4yQABeMsAAXjNAAF4zwABeNIAAXjTAAF41AABeNUAAXjWAAF42AABeNoAAXjbAAF43AABeN4AAXjfAAF5HgABeSAAAXkjAAF5JQABeSgAAXkpAAF5KgABeSsAAXksAAF5LgABeTAAAXkxAAF5MgABeTQAAXk1AAF5QgABeUMAAXlEAAF5RgABeYUAAXmHAAF5iQABeYsAAXmOAAF5jwABeZAAAXmRAAF5kgABeZQAAXmWAAF5lwABeZgAAXmaAAF5mwABedoAAXncAAF53gABeeAAAXnjAAF55AABeeUAAXnmAAF55wABeekAAXnrAAF57AABee0AAXnvAAF58AABei8AAXoxAAF6MwABejUAAXo4AAF6OQABejoAAXo7AAF6PAABej4AAXpAAAF6QQABekIAAXpEAAF6RQABeoQAAXqGAAF6iAABeooAAXqNAAF6jgABeo8AAXqQAAF6kQABepMAAXqVAAF6lgABepcAAXqZAAF6mgABetkAAXrbAAF63QABet8AAXriAAF64wABeuQAAXrlAAF65gABeugAAXrqAAF66wABeuwAAXruAAF67wABexQAAXs4AAF7XwABe4MAAXuGAAF7iAABe4oAAXuMAAF7jgABe5AAAXuRAAF7lAABe6EAAXuwAAF7sgABe7QAAXu2AAF7uAABe7oAAXu8AAF7vgABe80AAXvQAAF70wABe9YAAXvZAAF73AABe98AAXviAAF75AABfCMAAXwlAAF8JwABfCkAAXwsAAF8LQABfC4AAXwvAAF8MAABfDIAAXw0AAF8NQABfDYAAXw4AAF8OQABfHgAAXx6AAF8fAABfH4AAXyBAAF8ggABfIMAAXyEAAF8hQABfIcAAXyJAAF8igABfIsAAXyNAAF8jgABfM0AAXzPAAF80QABfNMAAXzWAAF81wABfNgAAXzZAAF82gABfNwAAXzeAAF83wABfOAAAXziAAF84wABfSIAAX0kAAF9JgABfSgAAX0rAAF9LAABfS0AAX0uAAF9LwABfTEAAX0zAAF9NAABfTUAAX03AAF9OAABfXcAAX15AAF9ewABfX0AAX2AAAF9gQABfYIAAX2DAAF9hAABfYYAAX2IAAF9iQABfYoAAX2MAAF9jQABfcwAAX3OAAF90AABfdIAAX3VAAF91gABfdcAAX3YAAF92QABfdsAAX3dAAF93gABfd8AAX3hAAF94gABfiEAAX4jAAF+JQABficAAX4qAAF+KwABfiwAAX4tAAF+LgABfjAAAX4yAAF+MwABfjQAAX42AAF+NwABfoIAAX6lAAF+xQABfuUAAX7nAAF+6QABfusAAX7tAAF+7wABfvAAAX7xAAF+9AABfvUAAX73AAF++AABfvoAAX78AAF+/QABfv4AAX8BAAF/AgABfwsAAX8YAAF/HQABfx8AAX8hAAF/JgABfykAAX8sAAF/LgABf1MAAX93AAF/ngABf8IAAX/FAAF/xwABf8kAAX/LAAF/zQABf88AAX/QAAF/0wABf+AAAX/xAAF/8wABf/UAAX/3AAF/+QABf/sAAX/9AAF//wABgAEAAYASAAGAFQABgBgAAYAbAAGAHgABgCEAAYAkAAGAJwABgCoAAYAsAAGAawABgG0AAYBvAAGAcQABgHQAAYB1AAGAdgABgHcAAYB4AAGAegABgHwAAYB9AAGAfgABgIAAAYCBAAGAwAABgMIAAYDEAAGAxgABgMkAAYDKAAGAywABgMwAAYDNAAGAzwABgNEAAYDSAAGA0wABgNUAAYDWAAGBFQABgRcAAYEaAAGBHAABgR8AAYEgAAGBIQABgSIAAYEjAAGBJQABgScAAYEoAAGBKQABgSsAAYEsAAGBOQABgToAAYE7AAGBPQABgXwAAYF+AAGBgAABgYIAAYGFAAGBhgABgYcAAYGIAAGBiQABgYsAAYGNAAGBjgABgY8AAYGRAAGBkgABgdEAAYHTAAGB1QABgdcAAYHaAAGB2wABgdwAAYHdAAGB3gABgeAAAYHiAAGB4wABgeQAAYHmAAGB5wABgiYAAYIoAAGCKgABgiwAAYIvAAGCMAABgjEAAYIyAAGCMwABgjUAAYI3AAGCOAABgjkAAYI7AAGCPAABgnsAAYJ9AAGCfwABgoEAAYKEAAGChQABgoYAAYKHAAGCiAABgooAAYKMAAGCjQABgo4AAYKQAAGCkQABgtAAAYLSAAGC1AABgtYAAYLZAAGC2gABgtsAAYLcAAGC3QABgt8AAYLhAAGC4gABguMAAYLlAAGC5gABgwsAAYMvAAGDVgABg3oAAYN9AAGDfwABg4EAAYODAAGDhQABg4cAAYOIAAGDiwABg5gAAYOnAAGDqQABg6sAAYOtAAGDrwABg7EAAYOzAAGDtQABg8QAAYPHAAGDygABg80AAYPQAAGD0wABg9YAAYPZAAGD2wABhBoAAYQcAAGEHgABhCAAAYQjAAGEJAABhCUAAYQmAAGEJwABhCkAAYQrAAGELAABhC0AAYQvAAGEMAABhG8AAYRxAAGEcwABhHUAAYR4AAGEeQABhHoAAYR7AAGEfAABhH4AAYSAAAGEgQABhIIAAYSEAAGEhQABhMQAAYTGAAGEyAABhMoAAYTNAAGEzgABhM8AAYTQAAGE0QABhNMAAYTVAAGE1gABhNcAAYTZAAGE2gABhRkAAYUbAAGFHgABhSAAAYUjAAGFJAABhSUAAYUmAAGFJwABhSkAAYUrAAGFLAABhS0AAYUvAAGFMAABhW8AAYVxAAGFcwABhXUAAYV4AAGFeQABhXoAAYV7AAGFfAABhX4AAYWAAAGFgQABhYIAAYWEAAGFhQABhcQAAYXGAAGFyAABhcoAAYXNAAGFzgABhc8AAYXQAAGF0QABhdMAAYXVAAGF1gABhdcAAYXZAAGF2gABhhkAAYYbAAGGHQABhh8AAYYiAAGGIwABhiQAAYYlAAGGJgABhigAAYYqAAGGKwABhiwAAYYuAAGGLwABhnoAAYadAAGGvQABht0AAYbfAAGG4QABhuMAAYblAAGG5wABhugAAYbpAAGG7AABhu0AAYbvAAGG8AABhvIAAYb0AAGG9QABhvYAAYb5AAGG+gABhv8AAYcMAAGHEQABhxMAAYcVAAGHGgABhx0AAYcgAAGHIgABh0cAAYdrAAGHkgABh7YAAYe5AAGHuwABh70AAYe/AAGHwQABh8MAAYfEAAGHxwABh9QAAYflAAGH5wABh+kAAYfrAAGH7QABh+8AAYfxAAGH8wABh/UAAYgGAAGICQABiAwAAYgPAAGIEgABiBUAAYgYAAGIGwABiB4AAYggAAGIXwABiGEAAYhjAAGIZQABiGgAAYhpAAGIagABiGsAAYhsAAGIbgABiHAAAYhxAAGIcgABiHQAAYh1AAGItAABiLYAAYi4AAGIugABiL0AAYi+AAGIvwABiMAAAYjBAAGIwwABiMUAAYjGAAGIxwABiMkAAYjKAAGJCQABiQsAAYkOAAGJEAABiRMAAYkUAAGJFQABiRYAAYkXAAGJGQABiRsAAYkcAAGJHQABiR8AAYkgAAGJLQABiTAAAYkzAAGJNgABiTkAAYk7AAGJVQABiZQAAYmWAAGJmAABiZoAAYmdAAGJngABiZ8AAYmgAAGJoQABiaMAAYmlAAGJpgABiacAAYmpAAGJqgABiekAAYnrAAGJ7QABie8AAYnyAAGJ8wABifQAAYn1AAGJ9gABifgAAYn6AAGJ+wABifwAAYn+AAGJ/wABij4AAYpAAAGKQgABikQAAYpHAAGKSAABikkAAYpKAAGKSwABik0AAYpPAAGKUAABilEAAYpTAAGKVAABipMAAYqVAAGKlwABipkAAYqcAAGKnQABip4AAYqfAAGKoAABiqIAAYqkAAGKpQABiqYAAYqoAAGKqQABiugAAYrqAAGK7AABiu4AAYrxAAGK8gABivMAAYr0AAGK9QABivcAAYr5AAGK+gABivsAAYr9AAGK/gABiyMAAYtHAAGLbgABi5IAAYuVAAGLlwABi5kAAYubAAGLnQABi58AAYugAAGLowABi7AAAYu/AAGLwQABi8MAAYvFAAGLxwABi8kAAYvLAAGLzQABi9wAAYvfAAGL4gABi+UAAYvoAAGL6wABi+4AAYvxAAGL8wABjDIAAYw0AAGMNgABjDgAAYw7AAGMPAABjD0AAYw+AAGMPwABjEEAAYxDAAGMRAABjEUAAYxHAAGMSAABjIcAAYyJAAGMiwABjI0AAYyQAAGMkQABjJIAAYyTAAGMlAABjJYAAYyYAAGMmQABjJoAAYycAAGMnQABjNwAAYzeAAGM4AABjOIAAYzlAAGM5gABjOcAAYzoAAGM6QABjOsAAYztAAGM7gABjO8AAYzxAAGM8gABjTEAAY0zAAGNNgABjTgAAY07AAGNPAABjT0AAY0+AAGNPwABjUEAAY1DAAGNRAABjUUAAY1HAAGNSAABjYcAAY2JAAGNiwABjY0AAY2QAAGNkQABjZIAAY2TAAGNlAABjZYAAY2YAAGNmQABjZoAAY2cAAGNnQABjdwAAY3eAAGN4AABjeIAAY3lAAGN5gABjecAAY3oAAGN6QABjesAAY3tAAGN7gABje8AAY3xAAGN8gABjjEAAY4zAAGONQABjjcAAY46AAGOOwABjjwAAY49AAGOPgABjkAAAY5CAAGOQwABjkQAAY5GAAGORwABjpIAAY61AAGO1QABjvUAAY73AAGO+QABjvsAAY79AAGO/wABjwAAAY8BAAGPBAABjwUAAY8HAAGPCAABjwoAAY8MAAGPDQABjw4AAY8RAAGPEgABjxsAAY8oAAGPLQABjy8AAY8xAAGPNgABjzkAAY88AAGPPgABj2MAAY+HAAGPrgABj9IAAY/VAAGP1wABj9kAAY/bAAGP3QABj98AAY/gAAGP4wABj/AAAZABAAGQAwABkAUAAZAHAAGQCQABkAsAAZANAAGQDwABkBEAAZAiAAGQJQABkCgAAZArAAGQLgABkDEAAZA0AAGQNwABkDoAAZA8AAGQewABkH0AAZB/AAGQgQABkIQAAZCFAAGQhgABkIcAAZCIAAGQigABkIwAAZCNAAGQjgABkJAAAZCRAAGQ0AABkNIAAZDUAAGQ1gABkNkAAZDaAAGQ2wABkNwAAZDdAAGQ3wABkOEAAZDiAAGQ4wABkOUAAZDmAAGRJQABkScAAZEqAAGRLAABkS8AAZEwAAGRMQABkTIAAZEzAAGRNQABkTcAAZE4AAGROQABkTsAAZE8AAGRSQABkUwAAZFPAAGRUgABkVUAAZFXAAGRcgABkYAAAZG/AAGRwQABkcMAAZHFAAGRyAABkckAAZHKAAGRywABkcwAAZHOAAGR0AABkdEAAZHSAAGR1AABkdUAAZIUAAGSFgABkhgAAZIaAAGSHQABkh4AAZIfAAGSIAABkiEAAZIjAAGSJQABkiYAAZInAAGSKQABkioAAZJpAAGSawABkm0AAZJvAAGScgABknMAAZJ0AAGSdQABknYAAZJ4AAGSegABkns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AAaQtAAGkLwABpDIAAaQzAAGkNAABpDUAAaQ2AAGkOAABpDoAAaQ7AAGkPAABpD4AAaQ/AAGkTAABpE0AAaROAAGkUAABpI8AAaSRAAGkkwABpJUAAaSYAAGkmQABpJoAAaSbAAGknAABpJ4AAaSgAAGkoQABpKIAAaSkAAGkpQABpOQAAaTmAAGk6QABpOsAAaTuAAGk7wABpPAAAaTxAAGk8gABpPQAAaT2AAGk9wABpPgAAaT6AAGk+wABpRgAAaUlAAGlMAABpTMAAaU2AAGlOQABpTwAAaU+AAGlSQABpUwAAaVPAAGlUgABpVUAAaVYAAGlWgABpWYAAaWAAAGlmAABpeMAAaYGAAGmJgABpkYAAaZIAAGmSgABpkwAAaZOAAGmUQABplIAAaZTAAGmVgABplcAAaZZAAGmWgABplwAAaZfAAGmYAABpmEAAaZkAAGmZQABpmoAAaZ3AAGmfAABpn4AAaaAAAGmhQABpogAAaaLAAGmjQABprIAAabWAAGm/QABpyEAAackAAGnJgABpygAAacqAAGnLAABpy4AAacvAAGnMgABpz8AAadQAAGnUgABp1QAAadWAAGnWAABp1oAAadcAAGnXgABp2AAAadxAAGndAABp3cAAad6AAGnfQABp4AAAaeDAAGnhgABp4kAAaeLAAGnygABp8wAAafOAAGn0AABp9MAAafUAAGn1QABp9YAAafXAAGn2QABp9sAAafcAAGn3QABp98AAafgAAGoHwABqCEAAagjAAGoJQABqCgAAagpAAGoKgABqCsAAagsAAGoLgABqDAAAagxAAGoMgABqDQAAag1AAGodAABqHYAAah5AAGoewABqH4AAah/AAGogAABqIEAAaiCAAGohAABqIYAAaiHAAGoiAABqIoAAaiLAAGomAABqJkAAaiaAAGonAABqNsAAajdAAGo3wABqOEAAajkAAGo5QABqOYAAajnAAGo6AABqOoAAajsAAGo7QABqO4AAajwAAGo8QABqTAAAakyAAGpNAABqTYAAak5AAGpOgABqTsAAak8AAGpPQABqT8AAalBAAGpQgABqUMAAalFAAGpRgABqYUAAamHAAGpiQABqYsAAamOAAGpjwABqZAAAamRAAGpkgABqZQAAamWAAGplwABqZgAAamaAAGpmwABqdoAAancAAGp3gABqeAAAanjAAGp5AABqeUAAanmAAGp5wABqekAAanrAAGp7AABqe0AAanvAAGp8AABqi8AAaoxAAGqMwABqjUAAao4AAGqOQABqjoAAao7AAGqPAABqj4AAapAAAGqQQABqkIAAapEAAGqRQABqmoAAaqOAAGqtQABqtkAAarcAAGq3gABquAAAariAAGq5AABquYAAarnAAGq6gABqvcAAasGAAGrCAABqwoAAasMAAGrDgABqxAAAasSAAGrFAABqyMAAasmAAGrKQABqywAAasvAAGrMgABqzUAAas4AAGrOgABq3kAAat7AAGrfgABq4AAAauDAAGrhAABq4UAAauGAAGrhwABq4kAAauLAAGrjAABq40AAauPAAGrkAABq88AAavRAAGr0wABq9UAAavYAAGr2QABq9oAAavbAAGr3AABq94AAavgAAGr4QABq+IAAavkAAGr5QABrCQAAawmAAGsKAABrCoAAawtAAGsLgABrC8AAawwAAGsMQABrDMAAaw1AAGsNgABrDcAAaw5AAGsOgABrHkAAax7AAGsfgABrIAAAayDAAGshAABrIUAAayGAAGshwABrIkAAayLAAGsjAABrI0AAayPAAGskAABrM8AAazRAAGs0wABrNUAAazYAAGs2QABrNoAAazbAAGs3AABrN4AAazgAAGs4QABrOIAAazkAAGs5QABrSQAAa0mAAGtKAABrSoAAa0tAAGtLgABrS8AAa0wAAGtMQABrTMAAa01AAGtNgABrTcAAa05AAGtOgABrXkAAa17AAGtfQABrX8AAa2CAAGtgwABrYQAAa2FAAGthgABrYgAAa2KAAGtiwABrYwAAa2OAAGtjwABrdoAAa39AAGuHQABrj0AAa4/AAGuQQABrkMAAa5FAAGuSAABrkkAAa5KAAGuTQABrk4AAa5QAAGuUQABrlMAAa5WAAGuVwABrlgAAa5bAAGuXAABrmEAAa5uAAGucwABrnUAAa53AAGufAABrn8AAa6CAAGuhAABrqkAAa7NAAGu9AABrxgAAa8bAAGvHQABrx8AAa8hAAGvIwABryUAAa8mAAGvKQABrzYAAa9HAAGvSQABr0sAAa9NAAGvTwABr1EAAa9TAAGvVQABr1cAAa9oAAGvawABr24AAa9xAAGvdAABr3cAAa96AAGvfQABr4AAAa+CAAGvwQABr8MAAa/FAAGvxwABr8oAAa/LAAGvzAABr80AAa/OAAGv0AABr9IAAa/TAAGv1AABr9YAAa/XAAGwFgABsBgAAbAaAAGwHAABsB8AAbAgAAGwIQABsCIAAbAjAAGwJQABsCcAAbAoAAGwKQABsCsAAbAsAAGwawABsG0AAbBwAAGwcgABsHUAAbB2AAGwdwABsHgAAbB5AAGwewABsH0AAbB+AAGwfwABsIEAAbCCAAGwjwABsJIAAbCVAAGwmAABsJsAAbCdAAGwtwABsPYAAbD4AAGw+gABsPwAAbD/AAGxAAABsQEAAbECAAGxAwABsQUAAbEHAAGxCAABsQkAAbELAAGxDAABsUsAAbFNAAGxTwABsVEAAbFUAAGxVQABsVYAAbFXAAGxWAABsVoAAbFcAAGxXQABsV4AAbFgAAGxYQABsaAAAbGiAAGxpAABsaYAAbGpAAGxqgABsasAAbGsAAGxrQABsa8AAbGxAAGxsgABsbMAAbG1AAGxtgABsfUAAbH3AAGx+QABsfsAAbH+AAGx/wABsgAAAbIBAAGyAgABsgQAAbIGAAGyBwABsggAAbIKAAGyCwABskoAAbJMAAGyTgABslAAAbJTAAGyVAABslUAAbJWAAGyVwABslkAAbJbAAGyXAABsl0AAbJfAAGyYAABsoUAAbKpAAGy0AABsvQAAbL3AAGy+QABsvsAAbL9AAGy/wABswEAAbMCAAGzBQABsxIAAbMhAAGzIwABsyUAAbMnAAGzKQABsysAAbMtAAGzLwABsz4AAbNBAAGzRAABs0cAAbNKAAGzTQABs1AAAbNTAAGzVQABs5QAAbOWAAGzmAABs5oAAbOdAAGzngABs58AAbOgAAGzoQABs6MAAbOlAAGzpgABs6cAAbOpAAGzqgABs+kAAbPrAAGz7QABs+8AAbPyAAGz8wABs/QAAbP1AAGz9gABs/gAAbP6AAGz+wABs/wAAbP+AAGz/wABtD4AAbRAAAG0QgABtEQAAbRHAAG0SAABtEkAAbRKAAG0SwABtE0AAbRPAAG0UAABtFEAAbRTAAG0VAABtJMAAbSVAAG0mAABtJoAAbSdAAG0ngABtJ8AAbSgAAG0oQABtKMAAbSlAAG0pgABtKcAAbSpAAG0qgABtOkAAbTrAAG07QABtO8AAbTyAAG08wABtPQAAbT1AAG09gABtPgAAbT6AAG0+wABtPwAAbT+AAG0/wABtT4AAbVAAAG1QwABtUUAAbVIAAG1SQABtUoAAbVLAAG1TAABtU4AAbVQAAG1UQABtVIAAbVUAAG1VQABtXEAAbWwAAG1sgABtbQAAbW2AAG1uQABtboAAbW7AAG1vAABtb0AAbW/AAG1wQABtcIAAbXDAAG1xQABtcYAAbYRAAG2NAABtlQAAbZ0AAG2dgABtngAAbZ6AAG2fAABtn8AAbaAAAG2gQABtoQAAbaFAAG2hwABtogAAbaKAAG2jQABto4AAbaPAAG2kgABtpMAAbacAAG2qQABtq4AAbawAAG2sgABtrcAAba6AAG2vQABtr8AAbbkAAG3CAABty8AAbdTAAG3VgABt1gAAbdaAAG3XAABt14AAbdgAAG3YQABt2QAAbdxAAG3ggABt4QAAbeGAAG3iAABt4oAAbeMAAG3jgABt5AAAbeSAAG3owABt6YAAbepAAG3rAABt68AAbeyAAG3tQABt7gAAbe7AAG3vQABt/wAAbf+AAG4AAABuAIAAbgFAAG4BgABuAcAAbgIAAG4CQABuAsAAbgNAAG4DgABuA8AAbgRAAG4EgABuFEAAbhTAAG4VQABuFcAAbhaAAG4WwABuFwAAbhdAAG4XgABuGAAAbhiAAG4YwABuGQAAbhmAAG4ZwABuKYAAbioAAG4qwABuK0AAbiwAAG4sQABuLIAAbizAAG4tAABuLYAAbi4AAG4uQABuLoAAbi8AAG4vQABuMoAAbjNAAG40AABuNMAAbjWAAG42AABuPIAAbkMAAG5SwABuU0AAblPAAG5UQABuVQAAblVAAG5VgABuVcAAblYAAG5WgABuVwAAbldAAG5XgABuWAAAblhAAG5oAABuaIAAbmkAAG5pgABuakAAbmqAAG5qwABuawAAbmtAAG5rwABubEAAbmyAAG5swABubUAAbm2AAG59QABufcAAbn5AAG5+wABuf4AAbn/AAG6AAABugEAAboCAAG6BAABugYAAboHAAG6CAABugoAAboLAAG6SgABukwAAbpOAAG6UAABulMAAbpUAAG6VQABulYAAbpXAAG6WQABulsAAbpcAAG6XQABul8AAbpgAAG6nwABuqEAAbqjAAG6pQABuqgAAbqpAAG6qgABuqsAAbqsAAG6rgABurAAAbqxAAG6sgABurQAAbq1AAG62gABuv4AAbslAAG7SQABu0wAAbtOAAG7UAABu1IAAbtUAAG7VgABu1cAAbtaAAG7ZwABu3YAAbt4AAG7egABu3wAAbt+AAG7gAABu4IAAbuEAAG7kwABu5YAAbuZAAG7nAABu58AAbuiAAG7pQABu6gAAbuqAAG76QABu+sAAbvtAAG77wABu/IAAbvzAAG79AABu/UAAbv2AAG7+AABu/oAAbv7AAG7/AABu/4AAbv/AAG8PgABvEAAAbxCAAG8RAABvEcAAbxIAAG8SQABvEoAAbxLAAG8TQABvE8AAbxQAAG8UQABvFMAAbxUAAG8kwABvJUAAbyXAAG8mQABvJwAAbydAAG8ngABvJ8AAbygAAG8ogABvKQAAbylAAG8pgABvKgAAbypAAG86AABvOoAAbztAAG87wABvPIAAbzzAAG89AABvPUAAbz2AAG8+AABvPoAAbz7AAG8/AABvP4AAbz/AAG9PgABvUAAAb1CAAG9RAABvUcAAb1IAAG9SQABvUoAAb1LAAG9TQABvU8AAb1QAAG9UQABvVMAAb1UAAG9kwABvZUAAb2YAAG9mgABvZ0AAb2eAAG9nwABvaAAAb2hAAG9owABvaUAAb2mAAG9pwABvakAAb2qAAG9xgABvgUAAb4HAAG+CQABvgsAAb4OAAG+DwABvhAAAb4RAAG+EgABvhQAAb4WAAG+FwABvhgAAb4aAAG+GwABvmYAAb6JAAG+qQABvskAAb7LAAG+zQABvs8AAb7RAAG+1AABvtUAAb7WAAG+2QABvtoAAb7cAAG+3QABvt8AAb7iAAG+4wABvuQAAb7nAAG+6AABvu0AAb76AAG+/wABvwEAAb8DAAG/CAABvwsAAb8OAAG/EAABvzUAAb9ZAAG/gAABv6QAAb+nAAG/qQABv6sAAb+tAAG/rwABv7EAAb+yAAG/tQABv8IAAb/TAAG/1QABv9cAAb/ZAAG/2wABv90AAb/fAAG/4QABv+MAAb/0AAG/9wABv/oAAb/9AAHAAAABwAMAAcAGAAHACQABwAwAAcAOAAHATQABwE8AAcBRAAHAUwABwFYAAcBXAAHAWAABwFkAAcBaAAHAXAABwF4AAcBfAAHAYAABwGIAAcBjAAHAogABwKQAAcCmAAHAqAABwKsAAcCsAAHArQABwK4AAcCvAAHAsQABwLMAAcC0AAHAtQABwLcAAcC4AAHA9wABwPkAAcD8AAHA/gABwQEAAcECAAHBAwABwQQAAcEFAAHBBwABwQkAAcEKAAHBCwABwQ0AAcEOAAHBGwABwR4AAcEhAAHBJAABwScAAcEpAAHBQwABwUcAAcGGAAHBiAABwYoAAcGMAAHBjwABwZAAAcGRAAHBkgABwZMAAcGVAAHBlwABwZgAAcGZAAHBmwABwZwAAcHbAAHB3QABwd8AAcHhAAHB5AABweUAAcHmAAHB5wABwegAAcHqAAHB7AABwe0AAcHuAAHB8AABwfEAAcIwAAHCMgABwjQAAcI2AAHCOQABwjoAAcI7AAHCPAABwj0AAcI/AAHCQQABwkIAAcJDAAHCRQABwkYAAcKFAAHChwABwokAAcKLAAHCjgABwo8AAcKQAAHCkQABwpIAAcKUAAHClgABwpcAAcKYAAHCmgABwpsAAcLaAAHC3AABwt4AAcLgAAHC4wABwuQAAcLlAAHC5gABwucAAcLpAAHC6wABwuwAAcLtAAHC7wABwvAAAcMVAAHDOQABw2AAAcOEAAHDhwABw4kAAcOLAAHDjQABw48AAcORAAHDkgABw5UAAcOiAAHDsQABw7MAAcO1AAHDtwABw7kAAcO7AAHDvQABw78AAcPOAAHD0QABw9QAAcPXAAHD2gABw90AAcPgAAHD4wABw+UAAcQkAAHEJgABxCgAAcQqAAHELQABxC4AAcQvAAHEMAABxDEAAcQzAAHENQABxDYAAcQ3AAHEOQABxDoAAcR5AAHEewABxH0AAcR/AAHEggABxIMAAcSEAAHEhQABxIYAAcSIAAHEigABxIsAAcSMAAHEjgABxI8AAcTOAAHE0AABxNIAAcTUAAHE1wABxNgAAcTZAAHE2gABxNsAAcTdAAHE3wABxOAAAcThAAHE4wABxOQAAcUjAAHFJQABxSgAAcUqAAHFLQABxS4AAcUvAAHFMAABxTEAAcUzAAHFNQABxTYAAcU3AAHFOQABxToAAcV5AAHFewABxX0AAcV/AAHFggABxYMAAcWEAAHFhQABxYYAAcWIAAHFigABxYsAAcWMAAHFjgABxY8AAcXOAAHF0AABxdMAAcXVAAHF2AABxdkAAcXaAAHF2wABxdwAAcXeAAHF4AABxeEAAcXiAAHF5AABxeUAAcYNAAHGTAABxk4AAcZQAAHGUgABxlUAAcZWAAHGVwABxlgAAcZZAAHGWwABxl0AAcZeAAHGXwABxmEAAcZiAAHGrQABxtAAAcbwAAHHEAABxxIAAccUAAHHFgABxxgAAccbAAHHHAABxx0AAccgAAHHIQABxyMAAcckAAHHJgABxygAAccpAAHHKgABxy0AAccuAAHHMwABx0AAAcdFAAHHRwABx0kAAcdOAAHHUQABx1QAAcdWAAHHewABx58AAcfGAAHH6gABx+0AAcfvAAHH8QABx/MAAcf1AAHH9wABx/gAAcf7AAHICAAByBkAAcgbAAHIHQAByB8AAcghAAHIIwAByCUAAcgnAAHIKQAByDoAAcg9AAHIQAAByEMAAchGAAHISQAByEwAAchPAAHIUgAByFQAAciTAAHIlQAByJcAAciZAAHInAAByJ0AAcieAAHInwAByKAAAciiAAHIpAAByKUAAcimAAHIqAAByKkAAcjoAAHI6gAByOwAAcjuAAHI8QAByPIAAcjzAAHI9AAByPUAAcj3AAHI+QAByPoAAcj7AAHI/QAByP4AAck9AAHJPwAByUIAAclEAAHJRwAByUgAAclJAAHJSgAByUsAAclNAAHJTwAByVAAAclRAAHJUwAByVQAAclhAAHJYgAByWMAAcllAAHJpAAByaYAAcmoAAHJqgABya0AAcmuAAHJrwABybAAAcmxAAHJswABybUAAcm2AAHJtwABybkAAcm6AAHJ+QAByfsAAcn9AAHJ/wABygIAAcoDAAHKBAABygUAAcoGAAHKCAABygoAAcoLAAHKDAAByg4AAcoPAAHKTgABylAAAcpSAAHKVAABylcAAcpYAAHKWQAByloAAcpbAAHKXQAByl8AAcpgAAHKYQABymMAAcpkAAHKowAByqUAAcqnAAHKqQAByqwAAcqtAAHKrgAByq8AAcqwAAHKsgAByrQAAcq1AAHKtgAByrgAAcq5AAHK+AAByvoAAcr8AAHK/gABywEAAcsCAAHLAwABywQAAcsFAAHLBwABywkAAcsKAAHLCwAByw0AAcsOAAHLMwABy1cAAct+AAHLogABy6UAAcunAAHLqQABy6sAAcutAAHLrwABy7AAAcuzAAHLwAABy88AAcvRAAHL0wABy9UAAcvXAAHL2QABy9sAAcvdAAHL7AABy+8AAcvyAAHL9QABy/gAAcv7AAHL/gABzAEAAcwDAAHMQgABzEQAAcxGAAHMSAABzEsAAcxMAAHMTQABzE4AAcxPAAHMUQABzFMAAcxUAAHMVQABzFcAAcxYAAHMlwABzJkAAcybAAHMnQABzKAAAcyhAAHMogABzKMAAcykAAHMpgABzKgAAcypAAHMqgABzKwAAcytAAHM7AABzO4AAczwAAHM8gABzPUAAcz2AAHM9wABzPgAAcz5AAHM+wABzP0AAcz+AAHM/wABzQEAAc0CAAHNQQABzUMAAc1GAAHNSAABzUsAAc1MAAHNTQABzU4AAc1PAAHNUQABzVMAAc1UAAHNVQABzVcAAc1YAAHNlwABzZkAAc2bAAHNnQABzaAAAc2hAAHNogABzaMAAc2kAAHNpgABzagAAc2pAAHNqgABzawAAc2tAAHN7AABze4AAc3wAAHN8gABzfUAAc32AAHN9wABzfgAAc35AAHN+wABzf0AAc3+AAHN/wABzgEAAc4CAAHOQQABzkMAAc5FAAHORwABzkoAAc5LAAHOTAABzk0AAc5OAAHOUAABzlIAAc5TAAHOVAABzlYAAc5XAAHOYAABzmEAAc5jAAHOcAABznEAAc5yAAHOdAABzoEAAc6CAAHOgwABzoUAAc6SAAHOkwABzpQAAc6WAAHOnwABzq4AAc67AAHOygABztwAAc7wAAHPBwABzxkAAc8iAAHPIwABzyUAAc8yAAHPMwABzzQAAc82AAHPOgABz0MAAc9NAAHPVAAAAAAAAAQCAAAAAAAARVgAAAAAAAAAAAAAAAAAAc9c + + + + + ControllerSkin + Undefined + 1 + ControllerSkin + 1 + + + + + + name + + + + 1 + gameSave + + + + index + + + + GameSave + Undefined + 5 + GameSave + 1 + + + + + + creationDate + + + + type + + + + Game + Undefined + 2 + Game + 1 + + + + + + type + + + + identifier + + + + filename + + + + filename + + + + 1 + saveStates + + + + supportedConfigurations + + + + name + + + + gameType + + + + 1 + game + + + + 1 + previewGame + + + + gameControllerInputType + + + + identifier + + + + modifiedDate + + + + 1 + previewSaveState + + + + 1 + game + + + + name + + + + deltaCoreInputMapping + + + + 1 + preferredLandscapeSkinByGames + + + + playedDate + + + + identifier + + + + playerIndex + + + + 1 + cheats + + + + identifier + + + + 1 + gameCollection + + + + identifier + + + + code + + + + type + + + + creationDate + + + + filename + + + + GameControllerInputMapping + Undefined + 6 + GameControllerInputMapping + 1 + + + + + + identifier + + + + isEnabled + + + + 1 + game + + + \ No newline at end of file diff --git a/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift b/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift index 2e5290d..5bf53ff 100644 --- a/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift +++ b/Delta/Database/Model/Migrations/Policies/SaveStateMigrationPolicy.swift @@ -8,6 +8,10 @@ import UIKit +import DeltaCore + +import struct DSDeltaCore.DS + @objc(SaveStateToSaveStateMigrationPolicy) class SaveStateToSaveStateMigrationPolicy: NSEntityMigrationPolicy { @@ -23,3 +27,19 @@ class SaveStateToSaveStateMigrationPolicy: NSEntityMigrationPolicy } } } + +// Delta5 to Delta6 +extension SaveStateToSaveStateMigrationPolicy +{ + @objc(defaultCoreIdentifierForGameType:) + func defaultCoreIdentifier(for gameType: GameType) -> String? + { + guard let system = System(gameType: gameType) else { return nil } + + switch system + { + case .ds: return DS.core.identifier // Assume any existing save state is from DeSmuME. + default: return system.deltaCore.identifier + } + } +} diff --git a/Delta/Emulation/GameViewController.swift b/Delta/Emulation/GameViewController.swift index d1db7cb..0924338 100644 --- a/Delta/Emulation/GameViewController.swift +++ b/Delta/Emulation/GameViewController.swift @@ -770,6 +770,7 @@ extension GameViewController: SaveStatesViewControllerDelegate } saveState.modifiedDate = Date() + saveState.coreIdentifier = self.emulatorCore?.deltaCore.identifier if isRunning { diff --git a/Delta/Pause Menu/Save States/SaveStatesViewController.swift b/Delta/Pause Menu/Save States/SaveStatesViewController.swift index 53d3195..1040edd 100644 --- a/Delta/Pause Menu/Save States/SaveStatesViewController.swift +++ b/Delta/Pause Menu/Save States/SaveStatesViewController.swift @@ -202,9 +202,17 @@ private extension SaveStatesViewController { let fetchRequest: NSFetchRequest = SaveState.fetchRequest() fetchRequest.returnsObjectsAsFaults = false - fetchRequest.predicate = NSPredicate(format: "%K == %@", #keyPath(SaveState.game), self.game) fetchRequest.sortDescriptors = [NSSortDescriptor(key: #keyPath(SaveState.type), ascending: true), NSSortDescriptor(key: #keyPath(SaveState.creationDate), ascending: Settings.sortSaveStatesByOldestFirst)] + if let system = System(gameType: self.game.type) + { + fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K == %@", #keyPath(SaveState.game), self.game, #keyPath(SaveState.coreIdentifier), system.deltaCore.identifier) + } + else + { + fetchRequest.predicate = NSPredicate(format: "%K == %@", #keyPath(SaveState.game), self.game) + } + self.dataSource.fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: DatabaseManager.shared.viewContext, sectionNameKeyPath: #keyPath(SaveState.type), cacheName: nil) } From 0b6567d98f6a2f2131231a2aa493c7abac072ada Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 23 Apr 2020 17:25:09 -0700 Subject: [PATCH 021/105] Fixes incorrect game name color after quitting emulation --- Delta/Game Selection/GameCollectionViewController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Delta/Game Selection/GameCollectionViewController.swift b/Delta/Game Selection/GameCollectionViewController.swift index 28709b4..8e27091 100644 --- a/Delta/Game Selection/GameCollectionViewController.swift +++ b/Delta/Game Selection/GameCollectionViewController.swift @@ -270,6 +270,7 @@ private extension GameCollectionViewController cell.maximumImageSize = CGSize(width: 90, height: 90) cell.textLabel.text = game.name cell.textLabel.textColor = UIColor.gray + cell.tintColor = cell.textLabel.textColor } //MARK: - Emulation From 0e8c9fbc5c72afeb088579e61d4062b7af7ad211 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 23 Apr 2020 18:02:02 -0700 Subject: [PATCH 022/105] Exposes Documents directory in Files app --- Cores/N64DeltaCore | 2 +- Delta.xcodeproj/project.pbxproj | 4 +- Delta/Supporting Files/Info.plist | 2 + Podfile.lock | 2 +- .../N64DeltaCore/N64DeltaCore/N64DeltaCore.h | 1 + Pods/Local Podspecs/N64DeltaCore.podspec.json | 6 +- Pods/Manifest.lock | 2 +- Pods/Pods.xcodeproj/project.pbxproj | 2664 ++++++++--------- .../N64DeltaCore/N64DeltaCore-umbrella.h | 1 + ...Bundle-Mupen64Plus-N64DeltaCore-Info.plist | 24 + .../Pods-Delta/Pods-Delta-resources.sh | 4 +- 11 files changed, 1371 insertions(+), 1341 deletions(-) create mode 120000 Pods/Headers/Public/N64DeltaCore/N64DeltaCore/N64DeltaCore.h create mode 100644 Pods/Target Support Files/N64DeltaCore/ResourceBundle-Mupen64Plus-N64DeltaCore-Info.plist diff --git a/Cores/N64DeltaCore b/Cores/N64DeltaCore index d180057..d927467 160000 --- a/Cores/N64DeltaCore +++ b/Cores/N64DeltaCore @@ -1 +1 @@ -Subproject commit d180057161e2fb378f36a71b461de49c6c879b7f +Subproject commit d92746745d52ea255579c707e005cfd57c4c85b7 diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index e32d815..8674be4 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -955,7 +955,7 @@ "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle", "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld", "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/melonDS.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/Mupen64Plus.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle", "${PODS_ROOT}/../External/Roxas/Roxas/RSTCollectionViewCell.xib", "${PODS_ROOT}/../External/Roxas/Roxas/RSTPlaceholderView.xib", @@ -970,7 +970,7 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Harmony.momd", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/melonDS.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/N64DeltaCore.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Mupen64Plus.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/NESDeltaCore.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RSTCollectionViewCell.nib", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RSTPlaceholderView.nib", diff --git a/Delta/Supporting Files/Info.plist b/Delta/Supporting Files/Info.plist index 7ad58ea..f262d52 100644 --- a/Delta/Supporting Files/Info.plist +++ b/Delta/Supporting Files/Info.plist @@ -207,6 +207,8 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + UISupportsDocumentBrowser + UIUserInterfaceStyle Light UTExportedTypeDeclarations diff --git a/Podfile.lock b/Podfile.lock index 0bfdd03..dfaf3e2 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -138,7 +138,7 @@ SPEC CHECKSUMS: GTMSessionFetcher: cea130bbfe5a7edc8d06d3f0d17288c32ffe9925 Harmony: 1978345dcf69ce6cf4c94c07405ebf01b7d6fe28 MelonDSDeltaCore: d6e0953bd475a17848964b4fc48bf0e838617984 - N64DeltaCore: fd4823c300feae8d93ceea8aca2024a0be13c1d5 + N64DeltaCore: 7d176e01443fa138bdfc79ad908c78f271f3e0a7 NESDeltaCore: 41ab438dd78d51d4636aacb7d9a7336ea3d4728c Roxas: 1990039f843f5dc284918dc82375feb80020ef62 SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c diff --git a/Pods/Headers/Public/N64DeltaCore/N64DeltaCore/N64DeltaCore.h b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore/N64DeltaCore.h new file mode 120000 index 0000000..05ec03f --- /dev/null +++ b/Pods/Headers/Public/N64DeltaCore/N64DeltaCore/N64DeltaCore.h @@ -0,0 +1 @@ +../../../../../Cores/N64DeltaCore/N64DeltaCore/N64DeltaCore.h \ No newline at end of file diff --git a/Pods/Local Podspecs/N64DeltaCore.podspec.json b/Pods/Local Podspecs/N64DeltaCore.podspec.json index 8ddc44d..48c8416 100644 --- a/Pods/Local Podspecs/N64DeltaCore.podspec.json +++ b/Pods/Local Podspecs/N64DeltaCore.podspec.json @@ -16,6 +16,7 @@ "social_media_url": "https://twitter.com/rileytestut", "source_files": [ "N64DeltaCore/**/*.{h,m,mm,cpp,swift}", + "N64DeltaCore/N64DeltaCore.h", "Mupen64Plus/mupen64plus-core/src/backends/api/video_capture_backend.c", "Mupen64Plus/mupen64plus-core/src/device/dd/dd_controller.c", "Mupen64Plus/mupen64plus-core/src/device/controllers/paks/biopak.c", @@ -33,11 +34,12 @@ "exclude_files": "Mupen64Plus/mupen64plus-core/src/api/config.h", "public_header_files": [ "N64DeltaCore/Types/N64Types.h", - "N64DeltaCore/Bridge/N64EmulatorBridge.h" + "N64DeltaCore/Bridge/N64EmulatorBridge.h", + "N64DeltaCore/N64DeltaCore.h" ], "header_mappings_dir": "", "resource_bundles": { - "N64DeltaCore": [ + "Mupen64Plus": [ "N64DeltaCore/**/*.deltamapping", "N64DeltaCore/**/*.deltaskin", "Mupen64Plus/**/*.ini" diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index 0bfdd03..dfaf3e2 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -138,7 +138,7 @@ SPEC CHECKSUMS: GTMSessionFetcher: cea130bbfe5a7edc8d06d3f0d17288c32ffe9925 Harmony: 1978345dcf69ce6cf4c94c07405ebf01b7d6fe28 MelonDSDeltaCore: d6e0953bd475a17848964b4fc48bf0e838617984 - N64DeltaCore: fd4823c300feae8d93ceea8aca2024a0be13c1d5 + N64DeltaCore: 7d176e01443fa138bdfc79ad908c78f271f3e0a7 NESDeltaCore: 41ab438dd78d51d4636aacb7d9a7336ea3d4728c Roxas: 1990039f843f5dc284918dc82375feb80020ef62 SDWebImage: a72e880a8fe0f7fc31efe15aaed443c074d2a80c diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index fe92369..357eb0e 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -40,90 +40,89 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 001067059F900FD4F276F98ABA47822C /* ColorBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D0EF9DC873BCE8C132664936AA4D2C /* ColorBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0023451255D0B6A96551C6491BE4CB73 /* ConfigDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = A590F12D65E6986C2D6F38990BFE02DD /* ConfigDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 005390FF8907FBAF4496EC51AA641D1F /* ftttdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B7D93006047AEA1B2086CF5FEC0FAEC /* ftttdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 007BBAFEFCEE96B7DDF8EFA8934DEC0C /* ftbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = 601F63C6825CC3B6550C9C4169033152 /* ftbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0017F8090B9E1E809EDDE2BCE6950D86 /* ZSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F80CF610BCA1225E6F34A2505B12C005 /* ZSort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 003D66CF102522CCE1F947261EF6C225 /* clock_ctime_plus_delta.h in Headers */ = {isa = PBXBuildFile; fileRef = 886FBFDCA7FC1D72F001F3E9535B924A /* clock_ctime_plus_delta.h */; settings = {ATTRIBUTES = (Project, ); }; }; 00808122820CCB7D640A23AF2F851D96 /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6C874D560C2ECE9A78595318F449292 /* Notifications.swift */; }; 00CD0FD425B91AE7BB08048D06C70828 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50CB8263181606A93C7C4DB62B954BCC /* GameViewController.swift */; }; 00D6A91F2372896AFCBADBB569CB61B2 /* GTLRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 9209A157558D6C7A57364B029B93BF01 /* GTLRUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 00F5F28E77C7BB433873D883D32DA464 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E69C29F29CC024AF25B51D0D32627EE /* profile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 011A7D5944D78BBDB6D70E337DF496B9 /* UITableViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DABB5ACFBF2E1DA35CD42F620E46F1 /* UITableViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 011C0272A367FAF487C0387072D80C35 /* sound.h in Headers */ = {isa = PBXBuildFile; fileRef = CC08FCCCC5D573865D7ADF9FB0838E1D /* sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 01590745A24092830F564E1E91398F1B /* cp1.h in Headers */ = {isa = PBXBuildFile; fileRef = F0308817B700E8598B67B8DC04CB453E /* cp1.h */; settings = {ATTRIBUTES = (Project, ); }; }; 01A810DA28D4CD0190DB127527310019 /* Context.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 108D3937640AD5EF672C23E5C9F1D052 /* Context.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 01B175F9FA772FCB44596F79F8D00880 /* pure_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = A24C851DBA65EF8E8469317673E6CCF4 /* pure_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 01BA691B21BFCA4E9DD73F0D1DE67D2B /* SwiftyDropbox-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AE215D47AD4C3E4C2C354C0C591C34C /* SwiftyDropbox-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 01C4F158AD89AC4C39C5DBD7E869107D /* F3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDB291BF8A6C2C5E7A503B53159F5FFE /* F3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 01D25C020EDD6D8936111118CDB7CFA3 /* VertexArray.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8E28B73D51B4BAB2720A6765199517D2 /* VertexArray.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 02088785CF10C92191BD4C2A65A4A4EE /* gb_cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F8AB3F41F84C94BBEED8C22E4E61BC /* gb_cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02619B61469E1C06E2A30FF166068583 /* Combiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0275BCD590CD9EDAE776A4F66B072CD5 /* Combiner.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0268FE03E18EFF693689E074F11B96C1 /* opengl_Attributes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F42E220EA589F02ED66B2844BC537B1B /* opengl_Attributes.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 022D019E6C9832E777458A8455F88B85 /* ColorBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D0EF9DC873BCE8C132664936AA4D2C /* ColorBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 023363AF2CC96131696B58AD3ACA2A36 /* ftvalid.h in Headers */ = {isa = PBXBuildFile; fileRef = 191702D253506FDF5363FBCC895772FA /* ftvalid.h */; settings = {ATTRIBUTES = (Project, ); }; }; 02727D92764378FFAED7FA05551AB810 /* UsersCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F53A98CDF1BC90A1B45D603F7DC3BC7F /* UsersCommon.swift */; }; + 02C658DADAB5B70ABCF4CFE93FDFFEAD /* ClipPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C0978994ADA13ACDD55B35B73CF516B /* ClipPolygon.h */; settings = {ATTRIBUTES = (Project, ); }; }; 02D9C3D0F0992ED6738D080A0E1CC9E1 /* GTLRFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = 947D4308D4F2D06F37BC4881F1637F48 /* GTLRFramework.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 033870A05FAC3AAD229C5B42B6664AB5 /* readwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9403FE981B76C994D3645B33292EE8 /* readwrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; 03537729FA84F09053DE494116B627D6 /* NstBoardJalecoSs88006.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EFDB6C6F57F2A3D44F48F431F3C13B71 /* NstBoardJalecoSs88006.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 03798D6E6E597C6AFF6054A3EB904E8B /* NstBoardBmc15in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5D7960122A08AC82F9286C7A2E2275F2 /* NstBoardBmc15in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0413BC0701D41DE3070F47C36421EF7F /* NstBoardBmcSuper700in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5B4B6B605F69B9997410194A1E0CB31D /* NstBoardBmcSuper700in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0418874BC3FB8854951251864FB63C4E /* NstBoardIremH3001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83F4160DB27DAF789E0C84F4BE223EAD /* NstBoardIremH3001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0479E96052F30333A5AE51A1A5DD22C3 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 55A7E5964AAB52C30CA7C4233CDB81F1 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04451D76D26FCAEFCA0947C747AA0AEE /* FramebufferTextureFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ACDAD920571F82F0FDFF413996C187F /* FramebufferTextureFormats.h */; settings = {ATTRIBUTES = (Project, ); }; }; 04FA93674AA0B4947CA3DC85196D9EAC /* NstBoardBandai24c0x.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75A75028AFBA185D5D391D73DC4FE6AB /* NstBoardBandai24c0x.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 05013F5C3F8897B02CAC065EF3189E58 /* RSTRelationshipPreservingMergePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BECDD49D8123BEDD18D8163C335A153 /* RSTRelationshipPreservingMergePolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0514955DC0F673DF12A1317127CA45B3 /* Sound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8AE46FAE84F979857B31ACDC50F71617 /* Sound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 052787144BE4266A8166E4B0DF4ACCA3 /* dummy_input.h in Headers */ = {isa = PBXBuildFile; fileRef = FB50DB0D94A17BD483732F8CF157CACE /* dummy_input.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 053DB492720A3409C50E148E4AE4E0F1 /* cart_rom.h in Headers */ = {isa = PBXBuildFile; fileRef = E98E9898FE20472841A8D1A0EF9806EF /* cart_rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0555BA242BE40B037BBB86A360F7D572 /* ftheader.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF22CB647ADB3D529D1C542345BB178 /* ftheader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 058508664EDB764D3709A2AB6EF6B252 /* N64Types.m in Sources */ = {isa = PBXBuildFile; fileRef = B9645A97F892996BB5BF51B8D0D43A0B /* N64Types.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 05D3406A9CDB6F3CA3BA42733AD9B486 /* Sleep.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4A2ED9639F26522F182428771C311F1A /* Sleep.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 05E346049D925B2F24BFD812BB16EACE /* TextureFilters_hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61394348571E8373817FFE9C2319D511 /* TextureFilters_hq4x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 064F0446DD0F453314D4002599D238F5 /* RSTCellContentPrefetchingDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F361E120BFFD12C4731934DEC8344968 /* RSTCellContentPrefetchingDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 066C91AF87F745BB782958FD99EB410B /* writepng.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A4C76DED9C21C388F39532BDFE1609 /* writepng.h */; settings = {ATTRIBUTES = (Project, ); }; }; 067C84CE3338DB36FF1EC1A0D0D1A63F /* initstate.h in Headers */ = {isa = PBXBuildFile; fileRef = BBF6A7EF37190036ACC153A560EC7279 /* initstate.h */; settings = {ATTRIBUTES = (Project, ); }; }; 069E1D48DD81FE5B6A827810AD64B3F3 /* MFiGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0FE60C5CC43E6BEE71A9295033B18F2 /* MFiGameController.swift */; }; + 06C79C3AE46910C8B5587D50C1E2B7AB /* af_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B73776B063CE08E7361FDE4C26CF904F /* af_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 06DC2503AAF54FB4B5D3B4606EC66F81 /* UploadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A684B9BC0FD9B61CE70469E6CF6BA3C /* UploadRecordsOperation.swift */; }; 06E4B39B70500AB74C837D9F65505FE2 /* WavFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 55871AB19F8B639CFD102F69EAED1E93 /* WavFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 06F04214E1DFA5C3662A6901F65DD3F6 /* inputgetter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C5BAA938FFA460E1B80ECB271C8B9D9 /* inputgetter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 07061CB34749ECA222E5A23CC2437521 /* GTLRBatchQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = B06418EA2C5657C3621FE94DE245B06B /* GTLRBatchQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 07369772A8FB7F2ADA0FFA31B21ED050 /* T3DUX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 931ECBBA73F768F5570C9A96C3F2C003 /* T3DUX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 07498127BC05CF69795D53A3D8EB9340 /* Thread.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C4B900A4DF59414221BA4B0965A47C7C /* Thread.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 07B07C5C1845808BAC8BA53FA149C192 /* L3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B7E4CE889EFFA5F1F5DAF6C3BD013A /* L3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 075956C0E39C23AA9BA359E3FA85A5AA /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 58B3B095F9C98257ED03FF6BA75F6CC6 /* pngwrite.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0771B4342A39600197F77220990BCC1F /* sRGB.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EBF0A8640326E2F901DF86C21C060DB /* sRGB.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07B373F2AB6C4A270819E0ECD7920EA5 /* ZSortBOSS.h in Headers */ = {isa = PBXBuildFile; fileRef = A52143F41FF59A51CFA9789F6A96A1F3 /* ZSortBOSS.h */; settings = {ATTRIBUTES = (Project, ); }; }; 07BB377F31975D34EB8CCC8C3E05597F /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 792056404E543D00399F5986E8B3812F /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 07DF414393A0265559B74FF88238011A /* opengl_GLInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7FA66BA44508C8E1B3BC97E5590E2EC /* opengl_GLInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 08686CCC2A05E5818FECBD202DD69628 /* dummy_rsp.h in Headers */ = {isa = PBXBuildFile; fileRef = C0BD20FF1A75F7E688073AEAC0E0E421 /* dummy_rsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 088166778CBF92A59C6AEA8158CB7B56 /* ObjectHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3152F7F819F4D7C0199707F1F5A9B8 /* ObjectHandle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 07C9540E58A6035F779B84EDA2DA2205 /* clock_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 22515475C0A7E9BD8FD4145526FBC353 /* clock_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 08A1B982F9CD6EA5ECD5A442973A25AD /* NDS.h in Headers */ = {isa = PBXBuildFile; fileRef = 933D69C235D50794635AA2A58BC23D85 /* NDS.h */; settings = {ATTRIBUTES = (Project, ); }; }; 08B9F6148C2A49A570F33B4BF7163484 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = B399BA8CED66B7B4AB724D2D580D4943 /* Standard.deltaskin */; }; 08CBBE506F5F9C4F6B5FBA173182B627 /* NstBoardBtlDragonNinja.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0D2603FBE6D0E88895754984334C87D0 /* NstBoardBtlDragonNinja.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 08DB3EE7795392A4AD6CDA6911C4ADE8 /* NstBoardTaitoTc0190fmcPal16r4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BBD164DBFFAA1294217B9F595993108D /* NstBoardTaitoTc0190fmcPal16r4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0930988FAA51B3BFEFDDE01D83611CFE /* cheat.h in Headers */ = {isa = PBXBuildFile; fileRef = AF7DB0A4354868150C48B6B6E2D4FE4D /* cheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09317AE820EE6AC27E5564E6830A6B2B /* glsl_CombinerInputs.h in Headers */ = {isa = PBXBuildFile; fileRef = FC3273B92BA8458C348A8240AB0C67AE /* glsl_CombinerInputs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 093A5EF57A260B6E4066AA6FEFA72B0B /* freetype.h in Headers */ = {isa = PBXBuildFile; fileRef = F4BFC00E618DE0EF34A6FA01F88AA209 /* freetype.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 08F81E7ABB2B97675345FC04CA722FC8 /* TxCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6154AA0F4F3D72A490406941DDA56ECF /* TxCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; 095ECDF5BCBCCC825E489471C3556732 /* RSTLoadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AC36AE82A4992804E6ECF7236E5ECA7 /* RSTLoadOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 09712513CDD56B9AD1082FD253B210B0 /* TxFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC339C9C59B65A4D6483598A6451971E /* TxFilter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 09A56050F738852C24E48CAB1A12327F /* NstBoardKonamiVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0636E7B8F2E8F376A9BF6CEC67B0B615 /* NstBoardKonamiVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 09F83B8522313DF122E91C5E908CC256 /* dummy_video.h in Headers */ = {isa = PBXBuildFile; fileRef = E2FDB4BB627C5ED4C383AB3D3EB64DA2 /* dummy_video.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 09FC171FD71744C6F47D4CC3341BF102 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 6AA43E914AB86898557D6FEDC791C933 /* xxhash.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0A39D292E69CB8B887A05D02FACC6F9C /* eventloop.h in Headers */ = {isa = PBXBuildFile; fileRef = 761CB13BA65C677D14B6D3A3F75A9A73 /* eventloop.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0A3FA8250DCAA57E611E6433F084CE11 /* NstBoardFujiya.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6F58E0B7D553A24812938BBCA1D73D71 /* NstBoardFujiya.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0A689D0300DF61C54697C7A316AFF57C /* transferpak.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D36FB1E125F6A30F7E99925C34CD64 /* transferpak.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0A7F43CFFA49DD8651630CD5B766D2A3 /* NstImage.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 99AFEBCD0E127C34321505B630C49E92 /* NstImage.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A82B6C9EC4EA09A0C213ABAE1E08E9B /* FrameBufferInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DBD80F21182531F3EA2504E53691367A /* FrameBufferInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0AA09DE9241869ECCCC26D4E11F357FF /* GBCEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 04CE2E235B10188704B563E18E7D532A /* GBCEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0AE2AA9CFBAB73BA390B8AB2BD339DCC /* SoundFileReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43281994AE91BE3DCE9CD0F6A87B1273 /* SoundFileReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0AE68C487359922B30E80D82CD556435 /* NstBoardBmcSuperVision16in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2098A1D3BBCAAFB3A5D52959C3751342 /* NstBoardBmcSuperVision16in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0AE7EA1277618FFEC475AF5B709DE97C /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = 3300F6B66FF14313A41952BEDB638D10 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0B12EDB39B8EDFD03B311F9733108E6D /* opengl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F94CD2A593A3820ECA68A3AD91377F /* opengl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AF6C8D2C774E31DFF8C2F329C55027E /* freetype.h in Headers */ = {isa = PBXBuildFile; fileRef = F4BFC00E618DE0EF34A6FA01F88AA209 /* freetype.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0B8D0DF76E87D68894A0DC0C4DEF1911 /* KeyboardGameController.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 40B5D84ECD183C3EF78823E7CF938746 /* KeyboardGameController.deltamapping */; }; + 0B8F4F7E856D19C415D98385A3B30B56 /* plugins_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 062F18B3DCFB2719520C631367293BC3 /* plugins_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0B984B28675905FE99D500B13967A582 /* SNESEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = E216C0C45BCA364953D3D8851490070E /* SNESEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0BC29A4D141721CED777951AFB6285DC /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE8DDA1C621BC7547ED906A580F98278 /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C85C17E4ABD29F912F85A3579F2C13F /* n64_cic_nus_6105.h in Headers */ = {isa = PBXBuildFile; fileRef = 112637F718E98C3499172684DAB993A0 /* n64_cic_nus_6105.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0BD03ECE3582C9B7D5F6B0736FA9827E /* assem_arm.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D9DAB0BA1335AAA8FDA3EB6A06284D7 /* assem_arm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0BE698943DB014EA608C05BB9808B1D8 /* GLideN64.ini in Resources */ = {isa = PBXBuildFile; fileRef = 3A13B4329882F5A80C1C1326BB560732 /* GLideN64.ini */; }; + 0C31BE17D771F1D2E7A7CAF0ECDE6E10 /* CombinerProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = E66B9B91DB7E04516C8FF716DE48D701 /* CombinerProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C70B09E1F82E11FDD182E61DD98BFF2 /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = D709E423B3398EC39A98F76319C9374B /* convert.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0C8CEB39DBD171C39AD70F1D22B0D8F2 /* NstBoardMmc5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0C864A48A744E0C4E9B10806107515B8 /* NstBoardMmc5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0CC4033E6747ED10E9BC142192F6AD39 /* NSString+Localization.m in Sources */ = {isa = PBXBuildFile; fileRef = FB5E73C8C7F0D5AB282E9A29954B036F /* NSString+Localization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0D0CDD2D121FB16DD8061998BE122543 /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = C00543EF4F06FBFA511049B6A2E2638E /* pngget.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0D0DD77BB2692454B0600C393C56B3A8 /* rom.h in Headers */ = {isa = PBXBuildFile; fileRef = FB3BB654A06CE0DED1C9C6F934367DDF /* rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D3A7FEA753047DE31A6F81799F3190C /* TxDbg_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9AC4EDED962C7496D2538B9A6128954 /* TxDbg_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0CF5A2778ED0B5C3DCBD3B8E89222E3D /* CombinerKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 6658EE9B0A19441E97A1284103D6A0A2 /* CombinerKey.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0CFF34DB03E3EA22AFCA4CE58940B8CC /* RDP.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EF1745163AD82481D56DE9A59BA24BA /* RDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0D4B0761D98B1D32B5B34C414181316E /* DeltaCoreProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C65F0AD8F6ACAD0EA3F1D732708E85 /* DeltaCoreProtocol.swift */; }; 0D6BF9F58172028164D17C031B1FCFF6 /* GTMNSString+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = BBE10799564D3547139EFF5CE894CF5A /* GTMNSString+URLArguments.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0D97BC11BC4E1636F550EF6D331031AF /* DepthBufferRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E29595D0B8DD5D154897A066190504AB /* DepthBufferRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0DAA2A9EA3C7BE275C199CE4FC0F8660 /* RSTHasher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ABC265715DD434AE88383B1CAD97215 /* RSTHasher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0DBB61B8C2133BA49617D71CB72C59DC /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FE4B65AFEE414DDF2934ED450332C42 /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0DD2B79568FD5D7753E4220B0A700C96 /* svgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = 19B404312BCFE831CA10C0C54C6D0B58 /* svgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0DE37FB9E50E1562BF60D5BFA8252BA7 /* RSTArrayDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F336E2D3C53A29FF9A360C8ECDF43F2E /* RSTArrayDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DE448C2801C7EEC1F271518FEE0F2CA /* tttables.h in Headers */ = {isa = PBXBuildFile; fileRef = E332D1A2E036E2DF42439D6ABAD4A55C /* tttables.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DF5869D6226F5F40411590BD059BBC6 /* svprop.h in Headers */ = {isa = PBXBuildFile; fileRef = B1080C9D0AB5BC601BD4F16A50CC842F /* svprop.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0E1533213CE06AD25D7A467D0F3AC3F7 /* scoped_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = AC89CB7A34B3B2FF8DBF5BB0E234D8A9 /* scoped_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0E434E17E33AA0A6B8BB202C4684EDD8 /* osd_element.h in Headers */ = {isa = PBXBuildFile; fileRef = DB20DDFBF1AF645CE61ADF09F5974137 /* osd_element.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E62C30ACBFB8DC392E5CE59DDAA64A2 /* DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D14C427796C3B67D5F822717322045B9 /* DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0EA9A720C8B526235F11CD24A85DCB72 /* svmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F261E13B1AC030CBAE70448ABC2DD8F /* svmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0EC9CB34CA3F574AE5B715EB1DD9DF8C /* DropboxTransportClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E2C328E034800C2CB26F5B94B12DDF6 /* DropboxTransportClient.swift */; }; 0ECA6110DA3B0588B02D33C1E337CDF1 /* Result+Success.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87263EF46CC8CB36CF6CC2C7E1D63E62 /* Result+Success.swift */; }; 0EDDADFF86CE8E23349B8C17EAB86C98 /* SeenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0CD3AC5CF344D777C591A59C269664 /* SeenState.swift */; }; @@ -131,57 +130,53 @@ 0F1030089F00486F17ED78F7651056AE /* SNESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D12A00DD051835A984A58D6DD44BDD4 /* SNESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0F2AAC05FC0C90D1437629B2DD879D83 /* NstCartridgeUnif.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2541FACE6856FBF20F718BF93515A799 /* NstCartridgeUnif.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0F35EC2E4E3C5B5025464323CDA17109 /* NstBoardNtdec.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD746E8386BFDF6E8F7B293E9EA93E17 /* NstBoardNtdec.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0F6AD4EB188F8A35D985C14ED56521F5 /* ftmoderr.h in Headers */ = {isa = PBXBuildFile; fileRef = B1A991CECAB9DD46D6515EF84919F6D0 /* ftmoderr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0FCCD4B109AB22FC20A743AB750B95EC /* glsl_SpecialShadersFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91142883C9B61CDABD669F132E23BA6B /* glsl_SpecialShadersFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 0FCDAB60E00061A616936D080A17A72D /* FrameBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D39CF0AC7F91D702958292DA91F30D /* FrameBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 100055E823D8664CA3967CA7223DE414 /* 65c816.h in Headers */ = {isa = PBXBuildFile; fileRef = BFF9BE4B997D71AFFD82B6E8CBC06B97 /* 65c816.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 10558603C3F6732FEF6B1882CC605395 /* ftstroke.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E0ED605D7C2BAE8463AEB4ADEDF371 /* ftstroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 106923F11FA63A0A83DDFF28E6D682E6 /* TxTexCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 838F667D353D92B49C6150D47D8E5C4D /* TxTexCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 105D3D6F32BB8EBCAADCB34AEBDED112 /* glsl_FXAA.h in Headers */ = {isa = PBXBuildFile; fileRef = DC2E2AF3A950FAF5326EEE74CDCD4D10 /* glsl_FXAA.h */; settings = {ATTRIBUTES = (Project, ); }; }; 106D77956F70BC0E0A55EDAFE9264B53 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = E474FB45FC3DD9C8E04C72D076AC8DFC /* Data+Serialization.swift */; }; 109639DF3F0EF7199D502AE257551180 /* Harmony-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 238AA279772C644CC943D63E37C7AA3A /* Harmony-dummy.m */; }; - 10963C0B1643A34DF49E5FF651AEF1D8 /* main.h in Headers */ = {isa = PBXBuildFile; fileRef = 62CF24548323CEDA7F6C62DDD4E4970E /* main.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1096C2B586E2EA8769B5E346F337BD89 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 7C4240EE1FE35FE23E5975F8DCB23A33 /* Standard.deltaskin */; }; - 10B25A3E89F2BC948F600F93DFD2AEEE /* pngerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 24443F50309F188F0D359B49C0F136CB /* pngerror.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 113A3ADEA158094373E44C01E1443F61 /* CombinerProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 507AEE0DE905FE749721BA983355BC23 /* CombinerProgram.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 11536204ECDF7D9DB75EC2A0D9FE46A5 /* ftsnames.h in Headers */ = {isa = PBXBuildFile; fileRef = 423425F5988743735EC12578B4A52F5F /* ftsnames.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 114E51C1D45FB0F540E2AC73423548A6 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 68776D658C9400B8766FD395BBD08F63 /* Platform.h */; settings = {ATTRIBUTES = (Project, ); }; }; 11654A14DAFB94587890A4B673D7B7C9 /* SoundRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1DF37E36CD72A2D07A3FCAD216576B53 /* SoundRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 11999A3107D95813D7DE36E802941DF9 /* alist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A827256CC16710474531DFA7ECE526F /* alist.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1174921EF757A0343B72D1D8489028E2 /* tlb.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B888530E83F42860A13FCEBBC74F753 /* tlb.h */; settings = {ATTRIBUTES = (Project, ); }; }; 119EB4FFA02590EA2498963ECEC6707B /* RenderTexture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3E937AC710B3BDEE100401BE7BEFD62 /* RenderTexture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 11B1E455943227B7FDE64E7910BE6D76 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB7F32ED8575A87699DF593661DBD4B /* Data+Compression.swift */; }; 121447EDCD87D030260B53FA7E426098 /* ConfigManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 558ABB8E63AEB6155C40A551D88F9123 /* ConfigManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 122A53C6A8CE37059A0CF1D111472CDD /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D110BCE90D1CF941FD0145CBB7DD6C /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 124DCEE18B5406C095B74C9B178BD647 /* NstBoardTxcMxmdhtwo.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 85245105BDC64E12FADEF30BE855FEC1 /* NstBoardTxcMxmdhtwo.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 12642C40ECD4772D8E3C16F32834E565 /* GraphicsDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 176F2C264C99888772BBC8A3F018B128 /* GraphicsDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 12710C9A38DE181686AD45DE6BD9E19C /* pngset.c in Sources */ = {isa = PBXBuildFile; fileRef = 259F2453A2569EB3489497BFC04DC6EC /* pngset.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 128CFECF46B7047470D018C987584ACD /* WifiAP.h in Headers */ = {isa = PBXBuildFile; fileRef = D6152F7397477BE4F0ED9C7788792005 /* WifiAP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12A4214E2C9B796CA238022735B51FF6 /* FullscreenResolutions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4730257B4F5FB617F71989B24D9EF907 /* FullscreenResolutions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 12AEC0B4C35E8BDE4366D57CE6805481 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20BCD689A6CAE5B82E9CC42375BA7AE7 /* Blob.swift */; }; 12D7AFC87809B7DB47930F38ACBCF03E /* TeamLogRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEBCE82463719FE6476D577E1F4423FD /* TeamLogRoutes.swift */; }; 12EB6F66719644A22679C7B30EA4F9DA /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AB3CC30BCD19485A7A87DB2D78E2BA1 /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12FD0A784B96093568057FFB24752931 /* ftsystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBFA95BE33AC04B65DD7AF6C54B92DD /* ftsystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1320CB37F0E2606479AD7BAB5C56E7D3 /* RemoteFile+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AF44E99CDEC34FBD91AFEE4DACFD88A /* RemoteFile+File.swift */; }; 132DE130DC8D504D3672FE0A8438E82F /* GBCTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 708D9E956CB287CC2879FE1061D1F6C5 /* GBCTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 134D8E34601F861AC001CCDF57026CE4 /* NstBoardCxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 698C748E342E77F1EA0CBA79A28CAC0B /* NstBoardCxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 134DD842654C8C2FCB275A0F6FFE1526 /* opengl_ColorBufferReaderWithEGLImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B0AD671A8AD882845CE216B6821E50B /* opengl_ColorBufferReaderWithEGLImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1399567CFA56F981E650715560737DE4 /* text.h in Headers */ = {isa = PBXBuildFile; fileRef = 021DE75321784D55780486DCF5510498 /* text.h */; settings = {ATTRIBUTES = (Project, ); }; }; 13A70EB0D59A7AC78B914E7961428A3D /* NstBoardQj.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7CD443BDF938671B3B442333D9A63ED0 /* NstBoardQj.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 13BCB029A86A07D6CFAAED34C679E4DB /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7E6516A5BEBD6103C2071A1BA86E73 /* pngconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 13D16E5DE40CEFBC652A172492A4CE27 /* NoiseTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 49C63527B0BFABA381E737722D9FCB11 /* NoiseTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; 13DDDEE8E9A5F0E7D4767A7E2438F61E /* NSManagedObject+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD4A28E12A0F4CA5FB5F949171A2104B /* NSManagedObject+Conveniences.swift */; }; + 13F65C4323724B6C1BF73933A188685E /* mempak.h in Headers */ = {isa = PBXBuildFile; fileRef = A81D595F5493BB4BD6C6AED2B993C0B6 /* mempak.h */; settings = {ATTRIBUTES = (Project, ); }; }; 14275531D4F7CDD462D18A3DE8962F9D /* instructions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DDB31BEBA1AF6B8AA83AFE0B4A2D7EE /* instructions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 14363C965EF433EBD28CBF68938C6441 /* SPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 12535108C24D1C6BADF6FB802CB39A5F /* SPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 145D41EBB9C9985DBB3C476165DC7974 /* fpu.h in Headers */ = {isa = PBXBuildFile; fileRef = AE319AE2C2040F374241D90E84825723 /* fpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; 14814E514A0815D4CF25874DBA95BC79 /* NstBoardFxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 06A49EC7BA9A5FD79AC2FE0923FBCF54 /* NstBoardFxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 14890F4A609A98F54A7AE2FAA7A769BA /* dummy_video_capture.c in Sources */ = {isa = PBXBuildFile; fileRef = B331F7660FB59081A99ADBA1AF706462 /* dummy_video_capture.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 14A6A31A437EF94D756BC7E48CA08C0A /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 471C4997518A7042AE098438B7958754 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; 14C40CB2C689C2CEFFEEBC5D170379B1 /* Window.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 31B5A52F1F76F3224E54451C2B25CA8D /* Window.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 14D191D837FD7D431194C98BC575E356 /* GBCInputGetter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D9EAB15090D2390809047688EF8E815 /* GBCInputGetter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 14D448DCE42024011A61818D6536731E /* dd_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = E5C78C628E0A4C0BA6411600CC689510 /* dd_controller.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 14E4FB185F30A8C5DC3F1D4B9E0DE716 /* video_capture_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 959C8F76FF4E413331083F4B7271A79D /* video_capture_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1505FB7B20F25998D75A83A2147DF2F0 /* pngrio.c in Sources */ = {isa = PBXBuildFile; fileRef = 5986D113E80DE6E1FCE1BF2079E6B442 /* pngrio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 14D279089EEC3A6EF27788C15EB5CDD6 /* svttcmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 478F2C8230CA263EC0A07EBCB8012403 /* svttcmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1522B412F2369D9914CB39001A148BC8 /* glsl_CombinerInputs.h in Headers */ = {isa = PBXBuildFile; fileRef = FC3273B92BA8458C348A8240AB0C67AE /* glsl_CombinerInputs.h */; settings = {ATTRIBUTES = (Project, ); }; }; 153188A806D2A1F337D4F09283D8C8FD /* NstBoardBmcSuperGun20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F021EBB9B583D41D119B66FBC95F7F2C /* NstBoardBmcSuperGun20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1541CD75ED87DD98D3FB227978648F92 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B8AF793D67661D01A11B1A56931BA03 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 15631406F1349925694F775193DCE3B8 /* DropboxService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 636321611157247A4B100E3ACC431B70 /* DropboxService+Versions.swift */; }; 159AEB925F329623B682DF445F17309B /* SoundTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = 086BC7A1837005C56E8908CBF2465274 /* SoundTouch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 161DC98CB6404CA6989C81EAB0E1C3EE /* CombinerKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 6658EE9B0A19441E97A1284103D6A0A2 /* CombinerKey.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 165DA1CB4491C51A5BC65A8F519D53DD /* F3DGOLDEN.h in Headers */ = {isa = PBXBuildFile; fileRef = FB9EE7B4A2F519FCFB65900960419A5F /* F3DGOLDEN.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1673BDEF58AAD91E8E8136D14A6D92CC /* tttables.h in Headers */ = {isa = PBXBuildFile; fileRef = E332D1A2E036E2DF42439D6ABAD4A55C /* tttables.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 15BE84A95EAC7ED13036375B2BB3409C /* Log_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB8CD619182507E4AEFF0FD1231295 /* Log_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 15E662928B35B0C5E956E292F040EF08 /* RSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0263597CCE16095F0BA7CA33F49B26BA /* RSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1605FF922393682801258AC62F46DC1D /* ColorBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 530422F5717AFED3153BFF2D2284D3E5 /* ColorBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 1628DCBDC0391F546B31E0778C7884CA /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 06C47AD06BB9C0BD7738A8444AB1B3FF /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1641F9ED3784984505B73A40EABF20CF /* cart_rom.h in Headers */ = {isa = PBXBuildFile; fileRef = E98E9898FE20472841A8D1A0EF9806EF /* cart_rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; 16BA02E314DD1557E7856374C52DA346 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D71AD94F1DE85C71287112E838A7581 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 170BCE1D1B224FEBD40656BC4799B7A5 /* Combiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0275BCD590CD9EDAE776A4F66B072CD5 /* Combiner.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 172D940DCB5435663DBA9C5B5E92D436 /* Savestate.h in Headers */ = {isa = PBXBuildFile; fileRef = 42E8911C9890E3A93DD7CE8A4B3A27CC /* Savestate.h */; settings = {ATTRIBUTES = (Project, ); }; }; 174F4F23259306B5ECEB19D6FAE4FE93 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = 122B792B0EAAF896926591B297C9D30D /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; 175C9AE704D01C600031D567C80BB91A /* NstLog.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2D2882065898FB0E38AD32AA9BC8E931 /* NstLog.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -189,242 +184,219 @@ 188C27A5024641883B67EC17C1AA6995 /* FetchRemoteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60FB49D244425C934B22DB89FE9F68AB /* FetchRemoteRecordsOperation.swift */; }; 18A170DDE02E7B4C59A58B5C333487D5 /* NstApiCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7A23A59045CAA0A03697397632CF3A5B /* NstApiCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 18E5D24C8847A14DE25CC9E73B28CBD5 /* Globals.h in Headers */ = {isa = PBXBuildFile; fileRef = BB49743C9C35F2C946022473E1E84595 /* Globals.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 18FF637458B07675EF16BAECCF6AFDD7 /* ftotval.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EFE9AE79EBD67A282DE349ECDBA9D52 /* ftotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; 192D121D3A8C6AE6BA5A7AF2D0CDC952 /* SoundStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48BF55C9520932E61BA7E91D0DE78B47 /* SoundStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 193424E7818DE3CC415F1ABA7BDA5044 /* OGLRender_3_2.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF0BB22A90E877C1E14A623DE51DD25 /* OGLRender_3_2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1956E058934AF8327F7D63A7CF9FCD11 /* TxHiResCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FCA829A51AC7996EB15AC022B591C7AE /* TxHiResCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 195CAEC55D7B3D6D31D6DF39B4123E29 /* NstBoardAveNina.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D5D7C859DA53707D68A0C6096E4FD656 /* NstBoardAveNina.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 196B46FD2B40CE0CF8D6F681C1A9307B /* ftbzip2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FACC0B21FDAA0F253D9BB7A5062C4B0 /* ftbzip2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1980201958ED3367F3828BC226C5506A /* RSTTintedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 327910F0090992C6E3CBE5627E621EB3 /* RSTTintedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 1989138BFE55C51C2E1C1D1D3921CD01 /* libretro_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A88ADF5CB822A0ABF0CDD1E4D68BAAE /* libretro_vulkan.h */; settings = {ATTRIBUTES = (Project, ); }; }; 19A2BFBA669411936E7BDFC0D05C4701 /* rateest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D74E106D389811B1BA21826E9E3C690 /* rateest.h */; settings = {ATTRIBUTES = (Project, ); }; }; 19AE6DE6691A392520AF008719995124 /* armcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 1615D09DB3F681C62200592953856E68 /* armcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; 19C03E95F42417EF92D0D3EA03AE1E93 /* retro_stat.h in Headers */ = {isa = PBXBuildFile; fileRef = 35C53EC4A93175802A6008176A72A482 /* retro_stat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19DB2C9533367523333978531B0E4DD8 /* TxDbg_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = F9AC4EDED962C7496D2538B9A6128954 /* TxDbg_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 1A320DC3BB4F411FF18589AC2EF1C65D /* NstBoardKayH2288.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 789D5CFDF81A92162003BEBF18BA3C20 /* NstBoardKayH2288.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1A511E47EF74155034C3FD58A291B1CD /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C62C2A7373598D1D87C3F00E90A7722 /* array.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1A740EB1DC7E96D415A582212D8BD190 /* GTLRBatchResult.m in Sources */ = {isa = PBXBuildFile; fileRef = F9D42A4393C5EA5D2C2E7F5B2D175FE0 /* GTLRBatchResult.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 1A87A2F68523FA26D625BEC658965C81 /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F8D603EBE941AC871B0A2F47AD5B6D5 /* Pods-Delta-dummy.m */; }; 1A9E0A5933F001BD9AC823B4EEF7415A /* RTC.h in Headers */ = {isa = PBXBuildFile; fileRef = 311F5E992C4184B1925C4E380CBBEFB5 /* RTC.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1AAB4E66BB2F67D75ED31A969FB90445 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E17A40A5122F984FE431D21753C8CF06 /* Alamofire-dummy.m */; }; + 1AF7F4C36F9A40FA21DEFFBDDB324630 /* opengl_BufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = C129B80E9CC6B64D0600B9A46648ED8B /* opengl_BufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1AF87E34A2309B096AE662A3F0A54538 /* SocketHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AAD25B7136752E5F978B2EA8A9F1B2C7 /* SocketHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1B03CF4D7E9A0CF1B1A5C0DFAB8B0DD9 /* ButtonsInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F9A0594B477E44DA3CB74E54DD67ED /* ButtonsInputView.swift */; }; 1B09EC58FBD912A974C56A3F2BFE36D0 /* Keyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 229289C6AEBA126CD4AF9033E65834CC /* Keyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B0E862A80891D08A0C6F2E43AE8B356 /* TexrectDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8958320DAE6D887ED9E5A519C025718B /* TexrectDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 1B2B4C5155210EBDD0892BE184220A44 /* instruction_attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 39BF407461BE0D689AC655371DD416DE /* instruction_attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1B2BB2FEF328AF927516BB5185869A9E /* CheatProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC29261FDE2973B2D6B6F1E62024A0A9 /* CheatProtocol.swift */; }; 1B8E1324EF162AD35B1923FE3BC32753 /* NstBoardJalecoJf11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E8D1644FE6C9B9EA40479CBCFD2D7CC0 /* NstBoardJalecoJf11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B9C1EC85B450C90FA2A873635893FE8 /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 46834904D33267E3CBEE319642FFC703 /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1BA51CA49FF3BF6647ECEB45F30364BA /* NstBoardBtlT230.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD957EF417E4ED855F413792CFADBB28 /* NstBoardBtlT230.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1BD64B8159B5CAE972498CA344F46490 /* readpng2.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD0F23869E4370E465AE1C8597D8843 /* readpng2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1BF72388F9052C123EADC996D4D33C47 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F066AA72AF013DB424E69E221FDA626 /* stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1C47B242A0B80613D72DA6089181905C /* DMA.h in Headers */ = {isa = PBXBuildFile; fileRef = 72DF6D71D0B2650FA29881ABB3113610 /* DMA.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1C570DFFEE1F86736CC9E98C382D99B5 /* NstFds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 20855F4A8AE76A4363C4DE75B53963FA /* NstFds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D2B1F39203622F4CF4398DF89FA1D19 /* workqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D398DE570B23AC84F4DA4086B43F5E /* workqueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1D3D48B74FB7DC35F5A27D2E4F8EF530 /* NstInpPartyTap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C6D50BD15001580ABEF75FEE0D3BF80F /* NstInpPartyTap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D50F4D79058E4B1B5D465253CE3E893 /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = D709E423B3398EC39A98F76319C9374B /* convert.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D46D2D75449D644B538A6227E8E17B1 /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C7894842679F86AEA25BABD02717D75 /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1DB6F3BD942AB6C506FA3D02C3569721 /* RSTNibView.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A24856C0FCE10AA34185E05096752B /* RSTNibView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1DC7AB00CF86DEB9192BBD6BF1F049CB /* GTLRDuration.h in Headers */ = {isa = PBXBuildFile; fileRef = A73E1E700670A66A2AE2A03B799E23EF /* GTLRDuration.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1DC9D83D5C3C27C865626FDC47FFA727 /* NstBoardHes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9A208B7D6A17B5E6210F640474730F8 /* NstBoardHes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1E1F3E6F985575475CEC5C5627B10979 /* video.h in Headers */ = {isa = PBXBuildFile; fileRef = 42B13B5F43FDB8941F1473AB0E24A54D /* video.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1EE8CE815DB7AB1FE9B3284530CDE68B /* MemoryInputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D86A59B7F6D5BB8BCCA5F180F29A6656 /* MemoryInputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F1CCD14892B307D3C349F9C4117740C /* glsl_CombinerProgramUniformFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = B41ADAC311E8AD6F6A31A14C3ACCF208 /* glsl_CombinerProgramUniformFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1F30DD02CA191CAE3D0B657F89B4F11F /* RSTHelperFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EE40C178D686A2BE9C93C6CF7FAE736 /* RSTHelperFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1F5C43C6770674DE9AF51FC93CA86659 /* NstBoardBtlPikachuY2k.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 560CD792E13012FE41D46832508B9D30 /* NstBoardBtlPikachuY2k.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1F8209A656C45B0F07C3C1BF8E02279E /* MergePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD6E96B0D1C5E0989F7B0041FA8E00A /* MergePolicy.swift */; }; - 1FB0A954FA7AF8FE8D99D959DE9965B9 /* mupen64plus_DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93058B797119FD95E8232C8C7B7BE0AA /* mupen64plus_DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 1FEE8B5284DC3C2F7D3F0E28E62961C1 /* Version+Revision.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7835A1CFAD26F5CED24394F9EB07DBD /* Version+Revision.swift */; }; - 20456037EE6A29D63087BCDEABE7A543 /* cicx105.c in Sources */ = {isa = PBXBuildFile; fileRef = AEBCD05077A7A9D50A99D05DDFABD57D /* cicx105.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2095A394F1DB498633048FA6F4CF5B6B /* GLideN64.custom.ini in Resources */ = {isa = PBXBuildFile; fileRef = 12E9FF9AEEDE68C957B7D04E8966667F /* GLideN64.custom.ini */; }; + 20738A51ED2E18EA336CB7990C6E2695 /* RSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AA8A343F392F57FB9A603A5E4378309 /* RSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2082D2B8075D150DF4AD47BA78A7A383 /* m64p_frontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 104AE23A6B9AE10B8672C3AC578993CA /* m64p_frontend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 20963639D29C2627884D0C2039FA09D7 /* NstBoardUnlXzy.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CF5ED3F5DA210F1A19B3FCA09E19F679 /* NstBoardUnlXzy.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 20983A4E2B0967B542119114AB073BB7 /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 74853BDEC32A6CFF7D0D323E406FE7A9 /* SDImageCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 20F9B744BEFD8D7B6A31CAD347DA905B /* alist_naudio.c in Sources */ = {isa = PBXBuildFile; fileRef = F52217DDA56116C4579A60B66E239C62 /* alist_naudio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 20B63E21A974BFB0E1318A2D18C7EC9A /* GraphicsDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 176F2C264C99888772BBC8A3F018B128 /* GraphicsDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 20FA839518ED4413C10C26D0729B844E /* NstBoardMmc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C96DE12BB01FD7E95F041A594A9910CC /* NstBoardMmc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 211F41E155C9801313A5A9B60E42B528 /* GLFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = B54D71F0A9EE62F2B238B985FFE6C460 /* GLFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 211FCE1E2E68BD0DF187B3BF5E2C2FA3 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923B6C52E65298DE9941024CC376A04A /* Config.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 21939F9BD51F63E11D098AD04138814E /* NstBoardSachenSa0037.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9B8FEC06D5E475FC88E23200F3F9604 /* NstBoardSachenSa0037.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 219D418E6FEE74ABE4998946887B23F2 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 560F98A5E3D6842B976BE9CCD21AF72C /* Standard.deltaskin */; }; - 21D164D1A6501C153372290BE9A11509 /* android_hardware_buffer_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B799B0BED0EB9D4351BA9CBC630C918 /* android_hardware_buffer_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21E502D6891B860C977E695E0DC485BD /* ftheader.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF22CB647ADB3D529D1C542345BB178 /* ftheader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22004865065093B59F7DF41EAA0DEA79 /* RDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73594F3371FE49C0D1356C423974A617 /* RDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 21C32DAC350DB48E6E1F1BC1EF64B13F /* m64p_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 422A7E950D9644BA89560B6CC1EA1194 /* m64p_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 21DECE82ADC97C8D836542939B04DF0A /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = B9B009A6587C3A1C6BB0A1C024A18D38 /* pngrutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2202C76B0ACAFF39A84EE36584148743 /* NDSCart.h in Headers */ = {isa = PBXBuildFile; fileRef = DD81DFC2C331976AE715C460849BA6F6 /* NDSCart.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2230CED7C3633C3F5F473DF2EC5E50A7 /* ClipPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C0978994ADA13ACDD55B35B73CF516B /* ClipPolygon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22612E795DA2B4185DAEAB3DD73A2267 /* GLideN64.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E4AAD82240CB7384572BAC20D31685 /* GLideN64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 22A782478094510168B16DDC00EAD35B /* ColorBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 530422F5717AFED3153BFF2D2284D3E5 /* ColorBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 233D66440766BCC248853A39EDDFB1C5 /* ri_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A933B1B324B43BC6E0CEBB638211EBA /* ri_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; 23522007F1E5D00C56884454695C1C4D /* NstBoardCaltron.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 65C8737805E86FA67C1579855D59CB64 /* NstBoardCaltron.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2365E217AA5534FC880E18EF3CE9CA69 /* transfer_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = A855A24013B4807694DE373F6612044D /* transfer_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; 236FE18B9A85308D24405A2A9ECF2840 /* ARMInterpreter_LoadStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F04169937EFDD63A68B6EE345F1D4B17 /* ARMInterpreter_LoadStore.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2383152D6C4F84FD2EE8A437B924C1A5 /* NstBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7F445EA81E198A163B9A40E5A2E7653A /* NstBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 239B54D42D526085B60108A60B9A4787 /* TeamLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCBE6B3F37DD42BA03F9A43F4FBE4F4D /* TeamLog.swift */; }; 23BF54CE4938EDB1F46BFB0E71C0C87B /* Roxas-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE6AED1C735BB477D425F99206A28D87 /* Roxas-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 242DC7B7B8092DC35B88FD61DEE5EE36 /* ftgasp.h in Headers */ = {isa = PBXBuildFile; fileRef = 886A3E189B577FD6E4F71CFF3F0C163C /* ftgasp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 243487548FDE3E663997187437CAA558 /* storage_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C393F6D77A263F418781F717B7AA90D /* storage_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2445749976DF816DDE91EEB4096EFF8E /* rom.h in Headers */ = {isa = PBXBuildFile; fileRef = FB3BB654A06CE0DED1C9C6F934367DDF /* rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; 245707596236331BCA745BDF2CCD3A79 /* NstBoardUnlEdu2000.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A8E224696F035B298DBC6B2B425DB4D9 /* NstBoardUnlEdu2000.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 24681274F8D57A98446AD3E532DEFA17 /* NstBoardMmc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EE1BB2C196F721EAE216A16D2C28F108 /* NstBoardMmc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 24BAED760BC6B605CA667DBDA91632C2 /* NstBoardUnlWorldHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 879E33D39DED7A856D086D3BB622C65A /* NstBoardUnlWorldHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2518C27E9C6CDC038A72544E1448E6A8 /* rumblepak.h in Headers */ = {isa = PBXBuildFile; fileRef = FACC5CB26B7294708491B46F0397D3DD /* rumblepak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 24D0E194517BC0D2C60610DAEE83AD1F /* Textures.h in Headers */ = {isa = PBXBuildFile; fileRef = 1563D8DEE08EAA92574952B8B395A8AA /* Textures.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 24E48E4797697DEC9ADAE097FFFB2B06 /* TxQuantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 164BA6410D467508F284ED6B400D342C /* TxQuantize.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2512B98F1D9B1CA71D8A6B802E86AAE3 /* m64p_debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = C6E1F81ACE1C72D6F43ECBBE4EB03E7C /* m64p_debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 251309C65ABDD8242D058BB96CE242D0 /* ObjectHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3152F7F819F4D7C0199707F1F5A9B8 /* ObjectHandle.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2515B71C2BB7B912246009EBC495E634 /* opengl_TextureManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E1E1C9F6B0A62DA55FDEB54FB33235C /* opengl_TextureManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; 25254659998C756A3F648127FA733177 /* GTLRErrorObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D5738F79EFF74666BE041EC76ACDFA /* GTLRErrorObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 252C1358FFB378B360373F29EB870618 /* cexcept.h in Headers */ = {isa = PBXBuildFile; fileRef = BE9ACCFEEB68EE550B45A78C99E79C3E /* cexcept.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2531408651F267E3005C180FC7BBCA68 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 80C066584D91192C2CB5B4E7606E8F20 /* Standard.deltamapping */; }; 25323339A8211142EC7CBCF8BB9C62EE /* Color.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7D978ADE4F6407467C63202A3628BB80 /* Color.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 255E542635C421B59132F7D8010972EB /* N64EmulatorBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FFB36B4D0570AD68F47D94918FDE579 /* N64EmulatorBridge.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 256AB7604288ED1751C5EF0B1E7A789A /* NstVsSuperXevious.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A3112617A51AF6A36EACF9C3379C4BED /* NstVsSuperXevious.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 256D95458D9F853F472BD6467FF15C4B /* NDSSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = C75D9ED3389A6C4CBF7EE16167967675 /* NDSSystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 256EB8F51C5DADB16960C5DA3F3B7739 /* pngusr.h in Headers */ = {isa = PBXBuildFile; fileRef = F20F4C74BB8804B518393DCFC21CB9FB /* pngusr.h */; settings = {ATTRIBUTES = (Project, ); }; }; 258EC8380EB18D73BE4A95E0F6E76F6E /* GoogleToolboxForMac-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B8494C070246CC8BED190E092A370B3C /* GoogleToolboxForMac-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 25A38C9929C9AA2BF9B4C5EC01EB5100 /* NstBoardBmcNovelDiamond.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8000DA34B53DFAB07C0D683921D81892 /* NstBoardBmcNovelDiamond.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 25DA4338D845BE0E74C55BE243C7ED93 /* assemble.h in Headers */ = {isa = PBXBuildFile; fileRef = FC30BD70C930E58720D8025E77346710 /* assemble.h */; settings = {ATTRIBUTES = (Project, ); }; }; 25DC15B3C97C02EAC7A4363265E8FFC5 /* NstCartridgeRomset.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 36D6B831A12A9A6161E3436E49D4113A /* NstCartridgeRomset.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 25EDEFE8AA7FFB5C69FED296344DAEFE /* assem_x64.h in Headers */ = {isa = PBXBuildFile; fileRef = CA31C817FA32BF3FA44E8F3FD7273A2B /* assem_x64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25F9D19D9F8A5BA67FF2B729D05E1F2E /* hle.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE1F9090B5DA68190D7B03CCE5E4629 /* hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; 26067F53DD0AAA69124AF2F234C2B412 /* SocketSelector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 258092907C70394268136103C022FEE8 /* SocketSelector.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 264031FA160F74BD32D8EF9F30514C16 /* NstBoardSachen74x374.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8200E4FD4C7E3CC1AF2E0385FF61B65A /* NstBoardSachen74x374.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 265418D17A79E992D7091C6116D5D81E /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = C00543EF4F06FBFA511049B6A2E2638E /* pngget.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 269A8F0EF89DD3F63151C8785ABE7A51 /* GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE4DF888D759F8A1EFC289D72E1DF95 /* GameControllerInputMapping.swift */; }; 26BD486C68EF5B079CF50F132FB6EAC5 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 02BCDAEC84EB90FED96E1A7812F1B9CC /* Standard.deltamapping */; }; 26D84D2836C13B2D939D5A5E2B1BD47B /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD2701346D82207B53CC9EC541F8AB0 /* Schema.swift */; }; - 26EA8FC2F1D23AB23AE750AF18221843 /* pngtest.c in Sources */ = {isa = PBXBuildFile; fileRef = 308BAF6C3BE086BDB26EFE72FA9E48A6 /* pngtest.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2759C2F52CCBBBA9F7A243D31EC1D042 /* language.h in Headers */ = {isa = PBXBuildFile; fileRef = C2095BD846E0E2918CC6C26E739E147E /* language.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27A3816D5997640C9C2977E66280EBE6 /* TextureFilterHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F722266C08C5C1739772E3E72CEE17F /* TextureFilterHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; 27ABACC6A4783C9079079AD0599DB017 /* NstBoardSunsoft3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C021C2B8A573225A193057ADC5D4155F /* NstBoardSunsoft3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 27E12C031E1F193F89D7607F22242B8B /* NstBoardRexSoft.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5E0F87CCF191867B903270F7A2973CA2 /* NstBoardRexSoft.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 27E6E896B473FB2C6E22657C01C3F5C3 /* NstBoardBmcFk23c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EEC4678594429BB9CEE4C8F14CE8FB18 /* NstBoardBmcFk23c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 27E9618AB807EFBA9F6F713F8A3F9E38 /* TeamPolicies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A4B7B6EB4DB8A673532771B4AA8B264 /* TeamPolicies.swift */; }; - 27EA6C0692558952AA8164A66E618824 /* rdram.h in Headers */ = {isa = PBXBuildFile; fileRef = 468999824D8EE841754A3B910A80F137 /* rdram.h */; settings = {ATTRIBUTES = (Project, ); }; }; 28010A4E02AFF7CA653853E5B0F63621 /* encrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 68A229662DE33DC9840D7CCB41582EA9 /* encrypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2819DC98C607DE278124727BA384A637 /* NstBoardMmc3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 599BB76DE3FA8F63E0E23EA8BAFD278B /* NstBoardMmc3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2822DA4B1D3B2A11208116D17F88E2D4 /* gSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C1361ED1C7AC536E50CC4A7BA396F6B /* gSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 286192A6107B4208426E492B84A18EF1 /* osal_files.h in Headers */ = {isa = PBXBuildFile; fileRef = 8346ECC5A3AFD14F0746FD2871ECDA43 /* osal_files.h */; settings = {ATTRIBUTES = (Project, ); }; }; 28AEB1D89C9F02C00B767D2D95D68FB4 /* NstBoardSunsoftFme7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 69F05BD9CB2FBF76E6BDDB0F64BEDA8F /* NstBoardSunsoftFme7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 28B10CF2C882DC18EF20B1AA8E23AFE2 /* NstXml.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C6615F5A71F8DCD1E426F1118FC5F17A /* NstXml.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 28ED02C88B90C1B230F0D20D597ED49B /* NstBoardSunsoft4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1CFCC0E9B1069C5E4DE9B21620D39BEE /* NstBoardSunsoft4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2951A6A8F093CE2733377394E60F8575 /* cached_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FFF20A5E29BABF9B99B4C36366F9A7B /* cached_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2927B50D7C03836B5037835DE0C7E043 /* F3DFLX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A59426906D18823BC9AD4B26A1EC66C /* F3DFLX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 295238CB026C2D0DE66098E71D0CC261 /* Version+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F453A50C9E6D70D2C15CD2F4D9BE68 /* Version+Dropbox.swift */; }; - 296C11D713DA694BC95126E931781FAA /* ftrfork.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A1DFA16FF297CF6D496D8299BD6B3A4 /* ftrfork.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2976ECE53CBF19C1F27B45BF5CB09965 /* F3DEX2CBFD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99096141FF8112FF26903D5255091329 /* F3DEX2CBFD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 29962679E9012751AD784D26C64074A6 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B56F8A99B549137872A3667B98CBAB /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 299A3DFFDCF10D83F769BE40B7F8730F /* DSTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E5761EB37D9B48C3780E3C7C5C40100 /* DSTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 29F809E6C4D11C55843F619D51A88F05 /* SNESDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EC30A57562ACA7D0725AAD7A0C184376 /* SNESDeltaCore-dummy.m */; }; 29FCAF85FC12577CD5CFF57453594C65 /* GTLRDriveService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A2CACDB9FCC4BFBF7C2F672657367FF /* GTLRDriveService.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2A7DA941742FE42A2432F2776BBB4821 /* registers.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AD9520272152BEF938AC2E8A1E5961D /* registers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2AA72C64A1A864A039D5E3F085526F29 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923B6C52E65298DE9941024CC376A04A /* Config.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2ABF63D583A05522FC0E68E2A51246B3 /* gfx.h in Headers */ = {isa = PBXBuildFile; fileRef = E0F150BFDEE45BE9AA4D0FDF4D91815E /* gfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2ACBB459B58101305C15B9E93221B2D8 /* NSPersistentStore+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36F0EA19BE634583B78B77F370DF9C88 /* NSPersistentStore+Configuration.swift */; }; - 2AE4D610E02551D8EC4D51E4FED51ACD /* pngstest-errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 16F999D1DA5FF8502A180736C3C54BFB /* pngstest-errors.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2AE7A62010F0BD02BBED36CFF53BBF91 /* TDStretch.h in Headers */ = {isa = PBXBuildFile; fileRef = E3E9EE093E08EF6C06AEBAFED90F5FDC /* TDStretch.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2AFC27492C6A1CBD4483B8FF6F94B1DF /* ftgloadr.h in Headers */ = {isa = PBXBuildFile; fileRef = 9537E6C2A66052A73DC48C9A51A85FCA /* ftgloadr.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2B16AC9E3C87FF2EBD5E3AF7F7F4FB29 /* Wifi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BFE1D65673DECE7D6E2A1B6B529D5CAE /* Wifi.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2B4595B164B23A199766D1E6F5F27072 /* svkern.h in Headers */ = {isa = PBXBuildFile; fileRef = 4541F12B3B53C045767B87EFB73A1AF3 /* svkern.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B533915FBFC58A9851E3F92E296A5C4 /* F3DFLX2.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9634B3B11790E21D1DD4B3D06D4A1A /* F3DFLX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B3BC9E6AA5B18ABAEFCCDB39484FF5B /* TextureFilters_xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D7DDAE335C54604826A3ECBD79CFED3E /* TextureFilters_xbrz.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2BB3BA10CAF200D6F57AC5B7788326EE /* Ext_TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E27968A4F0A9279BF48A15BCFF4B8 /* Ext_TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2BB5DA0DB6B389E75E5ABD816506A72B /* ControllerDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FBFEDA648CA302663BC0A53CD4C4444 /* ControllerDebugView.swift */; }; - 2C5240B6436593A65C2120F7BABBE34B /* Keys.h in Headers */ = {isa = PBXBuildFile; fileRef = 73490B7869EFEC11975B85243D0CA66D /* Keys.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2C54BA2379A2C403F7B8D0C49FAACC25 /* InputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 165B7915A8914F93AA1A0D7D45181074 /* InputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2C793E39108FE340FC5BFCF448F6AC2F /* GTLRDateTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 01082497DDFB3641F47D167E3C3EB389 /* GTLRDateTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2C86F96F2A98EB8553F83501FAB77D58 /* NstBoardKonamiVrc2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 431243B7F84E2298319F60EF40D02386 /* NstBoardKonamiVrc2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2CC0B722492849CF64841AE7884A8948 /* RemoteRecord+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A95544E49AAD44E88BF2C9268C9BF94 /* RemoteRecord+Dropbox.swift */; }; - 2CCC882A4E5D781FCB474D22071FDB82 /* ZSortBOSS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1939C13EF032EAB42CBC6C921ECE7AD8 /* ZSortBOSS.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2CEEF7D75DDAFBAAF8E4106F54BDE731 /* opengl_CachedFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0089D9FB88A0BFD7C81E2BBAD71BEFBF /* opengl_CachedFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2CFB7E4AB44C35953034CE00C927B1F8 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FC76FBFEFEF12E5FDF51209753949E3 /* Response.swift */; }; + 2CFFEDD26B19606414785964AC1E7FD5 /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = 3E352201B46848355CB326FC4BF1FF47 /* pngpread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2D04068669A431A14A7C0876BF2BA0B7 /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C18B2ECEE548A1C91E8FE550A347BFB /* opengl_ContextImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2D1470711C87547A80BB9C982EB6B149 /* PACKED.h in Headers */ = {isa = PBXBuildFile; fileRef = C64A7F2FDE6DF6B64B3CFFEE19102859 /* PACKED.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D5FA06414DA007392294E443A9FA75B /* CombinerProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = E66B9B91DB7E04516C8FF716DE48D701 /* CombinerProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2D6BF11580E1CC47CF8280E5C4971155 /* clock_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 22515475C0A7E9BD8FD4145526FBC353 /* clock_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2D445BC93F75039A3BAA7CBA3A626E4C /* Debugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80019774B54716FABF7DEFCCD68E75C2 /* Debugger.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2D87E1AEC45003E3C2203D5A623DB6E1 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB8D4802A5F80BBA2E31C377A7C9689F /* Expression.swift */; }; - 2DB19BEF17C3D5BE1E0C85B25C931C43 /* Debugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80019774B54716FABF7DEFCCD68E75C2 /* Debugger.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2DC9C43A21C6350E567B14C11DDE7542 /* NstInpKonamiHyperShot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93BDAC11CA2A4DE08DB5A3ACAFE90787 /* NstInpKonamiHyperShot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2DE185B952A67810F78722837354F3EF /* RSTPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8643E93FD4508FE4A1F4CFE2588044 /* RSTPlaceholderView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2E0BAA7E2088EF73224C6693BDCCD485 /* PixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A586DA6049F657DBEA1D6CB398378C21 /* PixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2E17100758232DC76432B02A12EFAEC1 /* NstBoardDxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 49479F202B609744C82D4138F8FCD9CE /* NstBoardDxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2E1CE99F9F3BACCEBB2EE44E78B4D3F3 /* DeleteRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F512DCC7821D8E2620E88EDC969A6116 /* DeleteRecordOperation.swift */; }; - 2E4CB07EBF0D9A446F74DC8A81CA4EDE /* opengl_BufferManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = AE3364FCB045C19E649AAFBEB1B1A950 /* opengl_BufferManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2E249F499F9043C559D25049F768C9F9 /* ZSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B9D8426DBFEF530DE2AC44162062396 /* ZSort.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2E62C0D774A841E9ED7F5CE4E5B70E09 /* AutoBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 08EEF87CE7D5964AB34DCF33763BB099 /* AutoBuild.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E682F38F1F25EFF84F90ABADA51DB89 /* sram.h in Headers */ = {isa = PBXBuildFile; fileRef = 022DB7F76D90A69E8472052BB6DAF7F7 /* sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2E8BB841572131183B17430DC86A4A5D /* ARMInterpreter_ALU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E5A3A24EB4B9ABCAF94937C5D6C5E88 /* ARMInterpreter_ALU.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 2EF4938D66CE6DBAB9CA5E87DC5DA1D9 /* rsp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEBC190192DF7DAD9E802180C71E395 /* rsp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2EF7C84C951F326A18407145FF81F584 /* armdis.h in Headers */ = {isa = PBXBuildFile; fileRef = A493D236FBEDB31AE7799E82580CE1E6 /* armdis.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2F010DC7BBE382CA0729F3EBD313D9B9 /* NstDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FC77FD154105FF5182FC0B3EB06431FE /* NstDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2F47AFFD0CEB31CEC05058726214B60A /* RSTCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 39C09D3911D40FDAEA431AB499EE712E /* RSTCollectionViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2FA485B338CFEA42A781B8F21F09C050 /* writepng.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A4C76DED9C21C388F39532BDFE1609 /* writepng.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2FBA2E9BACD4FFD2BEAC5CAB997FBC99 /* NstApiMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C08D3CFD628192FDB9B9FD5A63E531B4 /* NstApiMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 2FFD8A4339DDF9E4162A2B228D700B00 /* hle.c in Sources */ = {isa = PBXBuildFile; fileRef = 888E98C361E5C340C2DFB6D6D1029392 /* hle.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 30360304FB3B07CC67CE7E12DDCD6AD8 /* NSPredicate+Search.m in Sources */ = {isa = PBXBuildFile; fileRef = 558BFA270FA2F23C320E11E090A7662E /* NSPredicate+Search.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 304A6957CBA97867455427624312350B /* ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 15A5B47B39157696DDBC56DF53AEFE81 /* ring_buffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 305114B6580952D1693DD539DEA79A62 /* NstBoardSachenTca01.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 24CA32513A0AE3E1229D4189D3F40C32 /* NstBoardSachenTca01.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 30A0140597B79FDE8AE504A40DDE901F /* ftchapters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9378D679A1407D0B1973322B7BC01CC6 /* ftchapters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3056EB896FBCCE8025B4F0BC1C61E470 /* TxUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5131F9EE375D77DAA9870F13B4698A6C /* TxUtil.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 30C13B34A3BE33BA757F87123E879893 /* NstBoardBmcPowerjoy84in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D23E1E808E48E9849AB52E92FEE110B2 /* NstBoardBmcPowerjoy84in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 30C7890A54FA46DF6071A8DF2496A9E0 /* opengl_UnbufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = DFDA1E12C63A8E139E0F5F52E6F63F9D /* opengl_UnbufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 30E3FF5DE72D56612993D499EBED8C9B /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDA9A78863460869F150386B089AF8F /* AggregateFunctions.swift */; }; 310EE1EEE2F7EE1601F5B3BE385E9C1D /* ARMInterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956202907723788FB190BB389EFFDB25 /* ARMInterpreter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3118030C5A979F122AACB2CBD58C4E56 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4476D277BAC65A966CF97717AC7EC945 /* Archive+Writing.swift */; }; 312AD7DE1453F9AD4A92963F384CF46C /* RSTCellContentChange.m in Sources */ = {isa = PBXBuildFile; fileRef = D446F7C2C98C47BB376AA4DC92FF956D /* RSTCellContentChange.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 313A7C9034C26D9940E7B65EFB88F57E /* CRC.h in Headers */ = {isa = PBXBuildFile; fileRef = BB01FC8167E6C6B4469AC59E3C3DF146 /* CRC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 314674AA478474E495700E5CA708BB6F /* opengl_Attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 26E70D021ACF47CEAF06F4E652E5E81A /* opengl_Attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 31697585FCCAF83D2BF44D087DA75CB8 /* StoneSerializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDEA401B77A227622E55445028991383 /* StoneSerializers.swift */; }; - 319D7327C17D7254FF4FBC0F1522DD04 /* svpsinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FF62ADB0969A5BAF88DAF079C924AD01 /* svpsinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 31C3355B5C3F3DBA2AE027298397ABFC /* svprop.h in Headers */ = {isa = PBXBuildFile; fileRef = B1080C9D0AB5BC601BD4F16A50CC842F /* svprop.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 31DF008DDC244721324E3AB3AEEBDB22 /* vidext_sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AE7E3B37D390409F4ECEA14098EE0F7 /* vidext_sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31E24CB31B609119C558C7927B909B73 /* rdram.h in Headers */ = {isa = PBXBuildFile; fileRef = 468999824D8EE841754A3B910A80F137 /* rdram.h */; settings = {ATTRIBUTES = (Project, ); }; }; 326048AB59E512995FA92BFB0D4005C9 /* Roxas.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE57A68E189FBFDCA39ADF0FAB28195 /* Roxas.h */; settings = {ATTRIBUTES = (Project, ); }; }; 32835555CC71C9A1FD4C3765B72224E5 /* ARMInterpreter_ALU.h in Headers */ = {isa = PBXBuildFile; fileRef = E2C410EBF08C1B76FDAC71A27419D38B /* ARMInterpreter_ALU.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 328973836A67F6C5B5D59A4EEC49C810 /* GLFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 442FF940EB7C16C5DB47BE217B7EAC51 /* GLFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 32B5C2CBFA681959F551BF129BD8DC00 /* NstApiBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9ED0B41AF5C196E6858B6DA26EAAC68 /* NstApiBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 32B869763DE524407E4EC13B5405C6CA /* NstBoardBmc20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F376A1194EDAFFBDE131906336FB08BB /* NstBoardBmc20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 32B8B962EEB709DEC0F2BAEB037A21B1 /* dd_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = FA40AAF8BCF7B04694A0037FB3760458 /* dd_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; 32C5649F56A9F2DE34AC6EF9FCA33323 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F9F5190AC3B7EA2777CF3CE3A3E7986B /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 32D70D7BB7F2A17F9C78F7AE99B2F7CC /* FileProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12EC1D77781095125E901DEFF622F36 /* FileProperties.swift */; }; 32F7E2ACCA4602AE9DE680A9D70EE36F /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D3DBD12BF6940FC1A2BE76A08E5471 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33005D6A6E94208A97F963B03EB5768F /* savestates.h in Headers */ = {isa = PBXBuildFile; fileRef = F27E0BB08CA9AA99087CB49B95D5A051 /* savestates.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 331922630D39F72EF28D8C51A385B8F6 /* ftttdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B7D93006047AEA1B2086CF5FEC0FAEC /* ftttdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; 332024B9AF30A07CE496CC11D9591023 /* SaveState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 027FB4C6CC71DADB243F4D75F54D49E2 /* SaveState.swift */; }; 3323FFE5A1367960FDB731C2D8B45870 /* SNESDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D6CBC1B60FADA9D18C705CC48D37B27 /* SNESDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 334648F3BE0F3EB894ED97C63BABFEA7 /* NstBoardUnlN625092.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B67B97B22BF6E290CE3176CF648D18EC /* NstBoardUnlN625092.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 337E5275965EC77007B11EADB625B015 /* FIFOSampleBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = CE2627D52C27F26A3779CDAD7756E356 /* FIFOSampleBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33869554EDBB14406B7BB9E8647E35A0 /* hle.c in Sources */ = {isa = PBXBuildFile; fileRef = 888E98C361E5C340C2DFB6D6D1029392 /* hle.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 338A23437E12CC5C72BBB54B8189E707 /* ftpic.h in Headers */ = {isa = PBXBuildFile; fileRef = 1406F5851ECA113961E420930E44400E /* ftpic.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3399E40819B47FC57D44FDBE3182620E /* fxinst.h in Headers */ = {isa = PBXBuildFile; fileRef = A69F666C61BC56F0C8F6DA00E957E5AE /* fxinst.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33D52FD746A6F4535B78B95B1949D628 /* ftoutln.h in Headers */ = {isa = PBXBuildFile; fileRef = 424AB45294CF56320B355DCE7A0F8E81 /* ftoutln.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33F513674BEFADB6CB760D6A81C2AA7B /* F3DPD.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D3C6982EBE0EAC53FAA7E37AFA9496 /* F3DPD.h */; settings = {ATTRIBUTES = (Project, ); }; }; 342FFC207143FFD0D02C8E58FD8765D9 /* ThreadImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07CA97CCF4C09704E6DE0E7275915BD2 /* ThreadImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3440F2E7C7091E968DCC8219C505A657 /* Config.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0556A2BF839B0F53563F8D71873A9029 /* Config.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3460068A5D0DD12FDA3671B80C40D25B /* Revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D4A9FA09D0CE373E943419685E8D514 /* Revision.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 34A2EA8A730D0B8FB6F5ABC0674DDADE /* ftautoh.h in Headers */ = {isa = PBXBuildFile; fileRef = 607EE7A62CEA324021137035A39115DC /* ftautoh.h */; settings = {ATTRIBUTES = (Project, ); }; }; 34AA63D390F044C33722CC2D9CC9B3D6 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 33B331BB819B9C6CB76839045D4EF06B /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; 34AE8851640DC6E16132178B877A21E0 /* RemoteFile+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB870F4AD39D4A4E00866F16DBDCEE49 /* RemoteFile+Dropbox.swift */; }; - 34B57DA227F4B2C65BB287D38D80ED9D /* opengl_ColorBufferReaderWithEGLImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B0AD671A8AD882845CE216B6821E50B /* opengl_ColorBufferReaderWithEGLImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; 34FBC7619CC07453CA4485178D84925C /* NstBoardKaiser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75A5C15DC18E79C28375E74324A85E26 /* NstBoardKaiser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3522984A23D0983D50F2F60CD2B9F2C9 /* SMCalloutView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B70989044B91229B1C51B5758D9F96E5 /* SMCalloutView-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35383CB99EAA9537E5158062A5DBC3DF /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = F764C420914578158ED027BC44B8591B /* callbacks.h */; settings = {ATTRIBUTES = (Project, ); }; }; 354A8F40F5743D12518A0509EB8575FC /* CRC32.h in Headers */ = {isa = PBXBuildFile; fileRef = 40F516E9DDCDFF55309BF56900D3A6CA /* CRC32.h */; settings = {ATTRIBUTES = (Project, ); }; }; 35722184127DCAE56E998143DD4FFE37 /* NstFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8F3A9DEA75F75C3ECC9442042F92E484 /* NstFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 357A8FB1CC3FD998F2F68DFDBD72ADB2 /* NstBoardBmcGamestarA.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 18185E2750AF215989A1C8875DDD67B4 /* NstBoardBmcGamestarA.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 35996A787DBDEE0A8DEFB1D49A75944F /* biopak.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E65EB68D56E7366BC886E0DF3F4369 /* biopak.h */; settings = {ATTRIBUTES = (Project, ); }; }; 35AF870E1B3A0DB7D735F735FA422C6F /* NstMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 59E4444E0AA576955C9370592EBB6D96 /* NstMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 35D2385FCC093615C3BA7B260E3E6CF0 /* TxQuantize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29EB52E4D8EE749D56B951548307A0DE /* TxQuantize.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 35EC8B4BFB120C69E99A260D786EAB16 /* NstBoardUnlTf1201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43CE808CD1AE36F53CED9431BA461025 /* NstBoardUnlTf1201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 362273378B1432EA72CB535B566D301C /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDF03E49537AAB42B11FC2BE2DA3821B /* opengl_ColorBufferReaderWithBufferStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 362D9AD5872E377FFDA39BFED5E02BA3 /* gralloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7001F35121D79E891B1BD2B4C133B505 /* gralloc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3610E0EF4BBB6CF3CF12645B71666CEE /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = C68E5B53D8D5CA28D433B92E58B5C931 /* memory.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 365E7E156C92209524A265BE63A05992 /* TransportConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BFB44B9B839260D03128AA298313F4 /* TransportConfig.swift */; }; - 36F12C2BEFEC26AF3FB64AE840F145B6 /* audio_out_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 2212C1BF0C50BC7C98BA6A5202DD8DFC /* audio_out_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 366262F212635879691A7CA07D4DA00A /* ftserv.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A5F0CC9425A669A2FB1790D3BDAABD /* ftserv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 36EC4FF8BB69E58C4636688ABCD5A263 /* audio.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CE8685D1C71D8EB010FB3B97ECE0634 /* audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; 37021E54EAB76D5B8FD8730232C11C87 /* NstBoardBmcCh001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DB8FE8CE43E3908EA8654AD9FBFC9667 /* NstBoardBmcCh001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3728D0F955C08DEE1B1E522B716EB724 /* TextureFilters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D993982D3AADF41E465498E329FEBD9B /* TextureFilters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 373BD9D2878032DC599159EE03FB8083 /* NDSCart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BEDC2F9C531F5A7B59C13110C977C309 /* NDSCart.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 375E255B89D6FC678440579E28CCB3F8 /* inputSDL.h in Headers */ = {isa = PBXBuildFile; fileRef = FFB86879ED24825EDEC6F479F7EAA0DA /* inputSDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; 37759BA8A77F128E6D2AF1A74F89F7B0 /* retro_inline.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E4E1022555EFD22260B7C32AE9BCEF /* retro_inline.h */; settings = {ATTRIBUTES = (Project, ); }; }; 37C6EC1C6E2FD686EDD84A12A42235C1 /* NstBoardRumbleStation.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B01AC6DC482963FB6A18796241C0A542 /* NstBoardRumbleStation.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 37F81F0927DEAB2B067BB5BD8D29618B /* FIFO.h in Headers */ = {isa = PBXBuildFile; fileRef = 4154C14E31E1F470D6189218AA154654 /* FIFO.h */; settings = {ATTRIBUTES = (Project, ); }; }; 37FF7BAE099FE3FA458DF38E809F974B /* RateTransposer.h in Headers */ = {isa = PBXBuildFile; fileRef = DB540D974E938108678097CB0FEB8A5E /* RateTransposer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38140579D6698DB3EC5D4D8348A639CE /* ttnameid.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E2DF4FE7FA12D11F9519C050CBAE82 /* ttnameid.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3826FDB208BDA2324262CC8F09622DA4 /* NstBoardKasing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3E468629CDCBD9A934833FB33710BC38 /* NstBoardKasing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 384996ED15655B92633B49BE2D2F508B /* 3DMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 75C6CA9B6DE6420B9DC5F198E990FC25 /* 3DMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 38645348CC5C592425C533EC8030013D /* F3DDKR.h in Headers */ = {isa = PBXBuildFile; fileRef = 47298EADB145DA1C5DC8A5C800E652FD /* F3DDKR.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3867303ED090C22C7B91F80D0D34877C /* NstBoardJaleco.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E551214789CB8350262743FF9EF95629 /* NstBoardJaleco.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 38C976A8DEE43222DFA6C54E16E79FFA /* jpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = D72335FEE7B69D06AC33B707144B50DE /* jpeg.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 38A88C1B5FBB3EE10BD8240A4F1DB3FD /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 55A7E5964AAB52C30CA7C4233CDB81F1 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; 38F6582226CA2808DF945CDE63DC5158 /* DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 957167DFF15F649697598EB9E605462A /* DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3914A75BEE189973A204BF332FFCEFA8 /* VideoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A428ACD6852B72482C8570B4E49B15B4 /* VideoManager.swift */; }; 3926A56C74A6C3AE66EF1745844B04BE /* NstBoardJalecoJf17.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9AB2C2CCEC496A1EE69FB5F1EF214B1A /* NstBoardJalecoJf17.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3947B44C7BD9B3882EB0AC7BC93A2723 /* RDRAMtoColorBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5A8B0D1C08B6C55E4CA098FCE620178 /* RDRAMtoColorBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 394E947ED5AECB6E6C373FCB5BC01756 /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = DE1CD0A14598D55B1CD56BD77F8073C9 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 39A8A5F1AC09F24DF124FA568B4BA9DE /* interpret.h in Headers */ = {isa = PBXBuildFile; fileRef = F85A845F1619F7A0F0BB1F552B74AA0E /* interpret.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39D6D6F6957023CA7529B2837BAFCC6B /* autohint.h in Headers */ = {isa = PBXBuildFile; fileRef = 29100634EB1C2E5E9877D238B86CDBB4 /* autohint.h */; settings = {ATTRIBUTES = (Project, ); }; }; 39E36E16FF2FAB77065F3E24D90D594B /* GTMGatherInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D9CA1BA4B1C7EB05BD412CB7895C1658 /* GTMGatherInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; 39F169D40F3D2217C030DF5C4AB9AEEA /* NstBoardBtlShuiGuanPipe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 406A09A4EB4DA79E27112B7E71A89701 /* NstBoardBtlShuiGuanPipe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 39F6310C0E2893433591C1FB861126CB /* fterrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 71CB328D9397310D6DF21B68E80E7672 /* fterrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A2C36BE4037A177800397DEBC20D3CB /* DebugDump.h in Headers */ = {isa = PBXBuildFile; fileRef = D18D98DFBFA469D8509A1C9BFB85042E /* DebugDump.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3A3EF780EA0DC5DAB4B04EEE425125F1 /* CircleShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9B0886627D79927053695B7F4472719 /* CircleShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3A6046B833F9FA6DCCD33FC3E30CCAAA /* opengl_GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C3DAEC5A0976AE04AE5AC97395DF48 /* opengl_GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3A629AE2A7756937510D8E4BF71DE816 /* NstBoardExRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4964760304F643497DF38EA719CD28CA /* NstBoardExRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A76CD8381C61DF00848DA207E173AE6 /* CommonAPIImpl_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDBCAC7AE4C298FE4646BD7005AEE4F8 /* CommonAPIImpl_common.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3A8E9E2BBC13E7A7D646DE95D3153B21 /* MelonDSEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9D3F865CEA5A8DDF0E5A48DF76EFC326 /* MelonDSEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3A92EB7D29C472B745D4A5BA74BD53A6 /* MelonDSTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 11142D8FFFBE27CBCDA599BAC4229CE3 /* MelonDSTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3AB819E705859C4B41819930E8681142 /* musyx.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A835642A0FF668D9565F7122EDF06B1 /* musyx.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3AB41F6902A749BE87B6ACD97D7DBA3C /* TextDrawerStub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 406313DF7E94297A75C613BDD3988DC7 /* TextDrawerStub.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3B0418DBDD07DC13468335213228CEA2 /* OGLFT.h in Headers */ = {isa = PBXBuildFile; fileRef = 2511FA9F98FE3FCC75E29A21D78C7943 /* OGLFT.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3B1BDA44ECDDE86E5A508EF8FA5CB3AB /* metaspu.h in Headers */ = {isa = PBXBuildFile; fileRef = 43A3F7C375F5059943E7A8DB77319414 /* metaspu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3B2297CC939F6D0B7512A5D0F8E91436 /* GLideN64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92C0056228C548EC5C0C4574520A559A /* GLideN64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3B46BB318BD31DA44FF7F2A0625EDD1B /* ftserv.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A5F0CC9425A669A2FB1790D3BDAABD /* ftserv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B42DD35D266E878DEA58A0F3CD151E2 /* musyx.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A835642A0FF668D9565F7122EDF06B1 /* musyx.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3B7DFAE0D5614D45A623F2BA17A8884D /* NstInpPaddle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CCA63F92FA1AA67CA403E2E475DF92B3 /* NstInpPaddle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3BD5536C63EEDE95794066C869549BA1 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 316A846E58F0E27085A4330EE10E3B5F /* SPU.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3BD8EFFCB0910051586FBF46AC5C55C8 /* NSBundle+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 514762CD1DB6A2350BA5EE10914786CD /* NSBundle+Extensions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3C0BD562ED5EA4DBCCE3A2FB7D940FF6 /* gfx3d.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E49EBED49055AAF839B8A99FC0D76C9 /* gfx3d.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3C0C34B66F4DE1573FAD3F67797849EC /* retro_dirent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E75A6CD77FDC5730599F170C8A47DC0 /* retro_dirent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C1277C9879849275BD4412E63547A9A /* PngFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F58A45C3A6F2E0C9EE2FB2DCD85BDF1 /* PngFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3C36E674426756F060D9479A78E5CB38 /* RSTCompositeDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 32C661EFF23BB80E5CBC79C7B385920A /* RSTCompositeDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3C42E2DF170FEEC1FEDCF257FBC59691 /* NstVideoFilter2xSaI.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB480F86E824BBF3F976C29F3F518408 /* NstVideoFilter2xSaI.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3C5A26E2B06FF1324498A5DAA75F2AFD /* texcache.h in Headers */ = {isa = PBXBuildFile; fileRef = BF2D25C87184C7CB6292C194EBA05335 /* texcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C75D97752958BB6E1068A79BBB78763 /* opengl_TextureManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E1E1C9F6B0A62DA55FDEB54FB33235C /* opengl_TextureManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3C78E4348B065F6A1F2E070E9C9AEA1F /* GBCTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = A3B3DA7E38DD3305FA49B067BBEE2BBC /* GBCTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3C832BE3E684CFF4E7D7C7D1104C63C7 /* UITableView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = CC438CAEA107E0F60CF6B6A8FBD21763 /* UITableView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3CCFF040F69A447BCC79C844C6E30412 /* DeleteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403F1EF9016E064303392CD24F59212D /* DeleteRecordsOperation.swift */; }; @@ -432,87 +404,82 @@ 3D38D3143F60F22FF8148BA31C508E73 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8760D486359333F01A58D9A3E6965D9E /* Operators.swift */; }; 3D66A31C8103A03FDF1F0E57C640C042 /* NSConstraintConflict+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 932A9FB4261665509630DF314C0698B4 /* NSConstraintConflict+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3D82BB8BB2ECF360078CE90C99E218A3 /* DSDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 202473EE9351AD87378741BBD152C958 /* DSDeltaCore-dummy.m */; }; - 3D8B6797F5BE3B29DE5D0560B6E485C5 /* glsl_CombinerProgramBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = AA792B0E18A3BA4548FB2C386287DD46 /* glsl_CombinerProgramBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3DA0789B294D0A4B0337D4849E79FFBC /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B8875D91FA20F49517CC1C5CB0BEA40 /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3DF05EBCA922A228ADAA6EF81BF2E18D /* AboutDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 44FAD07D80BFEE0D325168C079FABD94 /* AboutDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3DF3BF1A81EF709BFA95298AC8F1FEB0 /* NstBoardSomeriTeamSl12.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F3922596938CC3AC96994BC5EBAEC217 /* NstBoardSomeriTeamSl12.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3E03AD02DEC735901C06DBB467257AB5 /* Font.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F686DB132322EBC65182C37F284A25F3 /* Font.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3E1730D55849A497D872A47300530E33 /* VideoMode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FF4871EEC174D41700409C80284E7FD5 /* VideoMode.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E1934A6CC6D979EB860DA6C35B5E931 /* Turbo3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FDB5E5AA46D38CB2E47E5E6DF9A5645 /* Turbo3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3E1960795F1CDD5DA3D5234B649D9A64 /* GBA.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5727401E6F6A0439D8F333FA838602 /* GBA.swift */; }; 3E5EA4F51A82281DFE44955D6791C12D /* GTLRObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 50BD32E959F332B2734900E76DAB58D2 /* GTLRObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3E82C4D5935E02D385D773C59D424ADD /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D300A5B7805C13ACEEB33CFECE9235DD /* Validation.swift */; }; - 3EC2C605E7291B1BEC99AD3F06D54379 /* svpostnm.h in Headers */ = {isa = PBXBuildFile; fileRef = EB05D37130F5C1E54F68ECD8CDDC22EC /* svpostnm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3EEB2162999CE5EC7F850E4B1FAAF5A6 /* Port.h in Headers */ = {isa = PBXBuildFile; fileRef = B30081991D15EDA28B670E4E8B5B46F5 /* Port.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3F029746684D344355091865BDDE4121 /* NstBoardBmc9999999in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 873C9B1C70581E3ACE0CEA93EA9568DB /* NstBoardBmc9999999in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3F0EBD18ACD97785A90A6D0B4E723D03 /* NstInpExcitingBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B5A0DE104CFED381B5A6268A32DA5C06 /* NstInpExcitingBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3F29506C9C2F36B576E3C109F24238AD /* StoneBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FE893CBC159403181F3126C6C7917D /* StoneBase.swift */; }; - 3F4312485CA4E0E988DC0DEEBB2EA306 /* FramebufferTextureFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ACDAD920571F82F0FDFF413996C187F /* FramebufferTextureFormats.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FFE1AC1F70ED63623326CD9EB4732E7 /* DisplayLoadProgress.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D709C9141E75CC5376CABB8ED0406AF /* DisplayLoadProgress.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 405BFB74E64E523A84040C173A88A574 /* opengl_CachedFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C53D6C2BECC25796BBBD554B17692783 /* opengl_CachedFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 407B667E5FEB14F591611B01EFD52340 /* assem_arm64.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AB8A827FC69B7712131051BF7CDAEBF /* assem_arm64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F5A6187E39867D2D1D87C75ABFC4F05 /* opengl_GLInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7FA66BA44508C8E1B3BC97E5590E2EC /* opengl_GLInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3F69BBD7AA6D5BF55C92CFB3672A8BAF /* L3D.h in Headers */ = {isa = PBXBuildFile; fileRef = DDB2184F0999EE882B67DEFADE1B4A63 /* L3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; 407EC03D3DFF08A04296FC36CD38AF4D /* NstIoLine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BE0C7306F2F560B898301521B0E951DA /* NstIoLine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 408C9467A440ACF40ED221AF38A11CAB /* SaveStateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48B7D69EC414883941231476116906D7 /* SaveStateProtocol.swift */; }; - 40C0A2EC77F246C6770B772E8130A8C5 /* gDP.h in Headers */ = {isa = PBXBuildFile; fileRef = EE72931824332E351A9F7197A02E23BD /* gDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 40D0BB5787AC64B638416C9DC6ABA9C2 /* ObjectHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B879AB2ADEE0B7AD62F37F492D81FEC6 /* ObjectHandle.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 40D29AB1C0B1AE9D5A16D8A00CC5EC8A /* NstVsRbiBaseball.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9A6407C4FE9D4F3E62ECF1C9CABE92A0 /* NstVsRbiBaseball.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 40E672D9C0C98CD61AA5C3F0FBF0F91F /* dummy_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = B93E69089ACE58953005A5382B2ADAAD /* dummy_audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; 40F75F4E2E7192A47FE6E9826664A8AE /* MelonDSDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7934E37DFF6BB49A4E11E78A63B5CD51 /* MelonDSDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4117A58F736F3993A5D14CF4CC2D8924 /* NstBoardTxcTw.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E07126E3FC357870F5EAEC48FB308C9A /* NstBoardTxcTw.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4150E7B22E87E3E0A1677C4074AC5651 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 944052D0ED4C8624EF4485EE37D7898C /* opengl_ColorBufferReaderWithPixelBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 415C3AD46D4C5EF9970EC2575E98EDA0 /* Database.h in Headers */ = {isa = PBXBuildFile; fileRef = BD12836DFFA0899682ECB705F36AD40F /* Database.h */; settings = {ATTRIBUTES = (Project, ); }; }; 417CB1E153B4D573A3F86BC063262EBF /* UsersRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5A8C2D0C4FF79FF4A82A7C02704490 /* UsersRoutes.swift */; }; 41A7B51821FA9F73512BF747599C4C47 /* GTLRURITemplate.m in Sources */ = {isa = PBXBuildFile; fileRef = 35A46DA9D7B9942345456BEF6DF7E8D1 /* GTLRURITemplate.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 41AED5AF1633147BF20119FE09B88FD0 /* DeltaTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F02B0ECCDFC2E4E491C095B018680E /* DeltaTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 41F232CB3D23E3A6A1C5E4A4628FB79D /* T3DUX.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA6CE40033E7605CBA05FE256EA16DD /* T3DUX.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 41E9F83338345136034AEA044417C116 /* ftpic.h in Headers */ = {isa = PBXBuildFile; fileRef = 1406F5851ECA113961E420930E44400E /* ftpic.h */; settings = {ATTRIBUTES = (Project, ); }; }; 42486E8EA746BEC5D598F95DA726529D /* GlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C4F2063F71920535B22EF7E3FF01117B /* GlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 42607AF15A2E89DD92B0930C561F736F /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 06C47AD06BB9C0BD7738A8444AB1B3FF /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42B300BEBAFE6EE9B77570DA9F09BE1C /* ftoption.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D43A3C12E2607439AFFC8A1D1CDE41 /* ftoption.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42CE6348D210BC1705B97E3E33A03756 /* recomp.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E695BDE117DE11C2A9816B243CE8D2 /* recomp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 42D3004B9FAA6E6FC7F5C1FF64FC642E /* Image.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA7B07F6922A453BFCB66757611F7273 /* Image.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 42E0B2A0BDBDD8E3ECCFE991DD5E3C98 /* glext.h in Headers */ = {isa = PBXBuildFile; fileRef = F52405E64C06D130B0AAD913D760D8C8 /* glext.h */; settings = {ATTRIBUTES = (Project, ); }; }; 430806697BCF27E39D1755EBD50C2AD8 /* NstBoardBmc36in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3347C3BDA90B90C1FA03156B774C2A1E /* NstBoardBmc36in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4350BC2A7ED052D1A8C7322572F983FE /* Shader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92F0DF6F9D8A1A4D8748ADB82258371D /* Shader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4354E3A4466FF6B483F24CDCD89AD50B /* DebugDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A65DF9779DF20125011DEFB944B15926 /* DebugDump.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 43A6F36EC82583DFC3F1B2EB25F87C7E /* GTMSessionFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C490BE7A4301170F339101D64A47136 /* GTMSessionFetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 43B5E0E98AAF560F0241FC12684F8441 /* xxhash.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A334ACFE0D3AC3FE96307D138436AB /* xxhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; 43E9744B08213A6C8BEFAF6B70F435E4 /* NstPins.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3465DB1B610ECE37C91169B30B6FF528 /* NstPins.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 43F876E1F40CE874937E046A6E211731 /* convert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35C4D4998448EFC8D73C7526A9E0766B /* convert.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4404B6CEB79B295BDC094339D07BAAAF /* joybus.h in Headers */ = {isa = PBXBuildFile; fileRef = 4495365E36E72B1DF9F8324A09B6DCB1 /* joybus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 444053C71CF9C418328ABDA8B2528AFC /* plugins_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 062F18B3DCFB2719520C631367293BC3 /* plugins_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4417771FB0C9ACE3FA0583DA58B85DB4 /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 16A28BF70DE7AAE9C02DF33216F1076A /* opengl_ColorBufferReaderWithPixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 442D3A121AD9C02E66C68692A0200D7C /* TxQuantize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29EB52E4D8EE749D56B951548307A0DE /* TxQuantize.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4451F253919AC67A48CF16B0AAD79B09 /* TxInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D02F91DD08301C06A04A0C6273FC0114 /* TxInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 44574ABD35CB7C8E7308A753B541D666 /* RSTNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E9FD5A3371067E608C6FF32C3E1179 /* RSTNavigationController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4483660753264FD8120A2067CD6A13CF /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = E2736204110643A558D3FFB355216B2E /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; 44CEC7EA6296BDF52E6847748021D0F5 /* emufile.h in Headers */ = {isa = PBXBuildFile; fileRef = AFF3C3B618AFF0BDD1845467EA4D5341 /* emufile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44CF59CDE936F5CFD762DA0BCB0E94F0 /* RSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AA8A343F392F57FB9A603A5E4378309 /* RSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; 44DFF6AD46F4B1073CBE3E11FABF2CA4 /* NstBoardBmcBallgames11in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CDCA56A230FEF11250C8907E001346C3 /* NstBoardBmcBallgames11in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 453C841E0DDCE5508E5FD4DE0737E6ED /* ftlcdfil.h in Headers */ = {isa = PBXBuildFile; fileRef = E963BB1D802954605DE54BEAEAA046C0 /* ftlcdfil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44E2DD6BD4812BA86F693CC8552DD28F /* ftincrem.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3622A7449225751220AF6FE10DD230 /* ftincrem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44F9BC8CEDD8AFA192EE9AD5A63BAEF8 /* F5Rogue.h in Headers */ = {isa = PBXBuildFile; fileRef = FC8BE3C9EFF69072F0F385CD784639A2 /* F5Rogue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44FD2436016228AEB6E7E399C64CD7D6 /* TextureFilters_lq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C1C0E46794ACCFA1D49F4F9F7418C1 /* TextureFilters_lq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; 454435BAA1232B5BB55B7FA9E7B97C0D /* FileRequestsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1393F6F0A0F928C49105FCA78288193B /* FileRequestsRoutes.swift */; }; 4545BB25DC4B965622D16CF4D6506135 /* Mouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 507E5C05C910EB9C2351B7FDAC89B9AE /* Mouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 459005C8FDA84ADF202550615D20DE98 /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = F6EC76AAFEB4EFCCAA67C1913C4F3FB1 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; 459A931CCF39B8FB19164EFE3CF2D863 /* NstInpMahjong.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 61036065030A2D0CAFA57E52B4AEBBBB /* NstInpMahjong.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 45AD333FE1F9589DE61E55A1F9F12CF6 /* glsl_ShaderPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 96095127DE4F08650D82A0815DD6DB1D /* glsl_ShaderPart.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 45F9C2BE3D3D88B7333F8CCFB32B5442 /* glsl_CombinerInputs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD26BD355F8C9C43A997914155B54C75 /* glsl_CombinerInputs.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4619C7C20249E0D46A2D68E292D09BF4 /* alist_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 65A31956BBF79B889849828770076815 /* alist_audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4621F1AF007DEF733981FDC8CCE566E0 /* N64DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 52FF008EAD8518503CF4BE5EDABF7FD3 /* N64DeltaCore-dummy.m */; }; + 45C69142AED31E0A799F01018A2C9414 /* svtteng.h in Headers */ = {isa = PBXBuildFile; fileRef = F1AD374BED968FBCE790AA433A78D057 /* svtteng.h */; settings = {ATTRIBUTES = (Project, ); }; }; 462EC951E880EBF477C63C7C878DD3C3 /* NstBoardGxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FB1D4DE902DAAC0A8831F7A63906AE6B /* NstBoardGxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 46306BFF5D233EBDB4F8F1FEC8E1CE86 /* font.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CCBFD78ABFCD2FE1C22DA2F349D8520 /* font.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 469306CB7368CE64157615FF08A064DC /* ftobjs.h in Headers */ = {isa = PBXBuildFile; fileRef = 531E9AB4F828520F2368955170BA41BB /* ftobjs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 46621A84DC7D1AEAB3D4B2F076FFED5A /* controller_input_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C1BC49685F5EE8CD682028D49698258 /* controller_input_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 46D2FA65C1F7514FB5AF1B3AB540BD7A /* NstBoardUnlKingOfFighters97.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C6BBE5B4E442F86207E88DDD286857CF /* NstBoardUnlKingOfFighters97.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 46EE5AD399E232F78A784F6DCB08F5AA /* ClipPolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 414687B042C1DA8223948CAE5D99FFA8 /* ClipPolygon.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4712883E9233CBF125D350671054463F /* ServiceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6118EFDD077B9EC964912181660B7A95 /* ServiceOperation.swift */; }; - 4714EA370675DABB8EB39DFCC754B958 /* pnglibconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 12046753C25C05BEB8D3B91D9C84AFE9 /* pnglibconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; 471A75A7D62F9B14EB4441C630F660BF /* Util.h in Headers */ = {isa = PBXBuildFile; fileRef = 585857562D0E1129BE114DD8982CFEAC /* Util.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4727DC7D681E19904DFFAB1C46B76FE1 /* retro_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 03152EFD6359667DF578CCCE3CAF648E /* retro_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 47594914E8EA112593EFC6661444193C /* dummy_audio.h in Headers */ = {isa = PBXBuildFile; fileRef = B93E69089ACE58953005A5382B2ADAAD /* dummy_audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4793DB607E09DF311154B2909787E3C4 /* m64p_debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = C6E1F81ACE1C72D6F43ECBBE4EB03E7C /* m64p_debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47486F7F31F4FA955B61FB098EC26D06 /* ftmemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FADAD20817CF7C88C8300D762D5C633 /* ftmemory.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4799F1F6F4A15F207732F60601F39CB3 /* NstBoardBmcGoldenCard6in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EEF6D1011DA5B2381B452C7A4A848E70 /* NstBoardBmcGoldenCard6in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 480FB68E1413AE0DC7B8CE67383BF00F /* RDRAMtoColorBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5A8B0D1C08B6C55E4CA098FCE620178 /* RDRAMtoColorBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 481FDC02D816C4D6984B333CDD130B3D /* TextureFilters_hq4x.h in Headers */ = {isa = PBXBuildFile; fileRef = 009F86808D0C8EA68A833D33755CD232 /* TextureFilters_hq4x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47A5A80DFA1F9FCEDF4CE60F636ABDDD /* mupen64plus.ini in Resources */ = {isa = PBXBuildFile; fileRef = CAC68C48D5AACE9BF20D8B880DA33BB2 /* mupen64plus.ini */; }; + 47B90AD34D2D03C6A1D6638FAD3DD2DA /* instr_counters.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C7B436FC2BE106D5FAF2A5FE73A0CEB /* instr_counters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47C6F386A72302328A13032C0CED13AB /* ftgloadr.h in Headers */ = {isa = PBXBuildFile; fileRef = 9537E6C2A66052A73DC48C9A51A85FCA /* ftgloadr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4801291E14FFF8108E194C50DDA30831 /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C8267F7387923110B7E4D691528634F /* png.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4826CCCFC9FEA358F0FC255ABB00B2E0 /* NstBoardBmc8157.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 495697E3F178E65EB3DA72E358CB964A /* NstBoardBmc8157.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 488875F3618617406AB771502A10BE59 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = F88BB2DC2D2059BC24702E5033B1FA18 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 489FD286E54A8CF00552B82CBE154B85 /* glsl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C136320E214AE8F3ECD371DECBC4849 /* glsl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 48C37CCF88449880D62A12DCE1B313AB /* MemoryStatus_mupenplus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 876C8D28D439902E84EF476C79F7E2C8 /* MemoryStatus_mupenplus.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 48DD34EC238804715558E42A981112BB /* PACKED_END.h in Headers */ = {isa = PBXBuildFile; fileRef = D1B6EF297830BCAD6D884EED97389BCF /* PACKED_END.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48ED96922DB66BAC7D1C1C53B9E093C7 /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = 39366E2F73CC4159EE18FFD5AF80A0F3 /* pngwio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 48FE3ADC3F482FB1896BB017B2A60B4C /* RSTDynamicDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C730E5915747302EDF3EC772425E5899 /* RSTDynamicDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4913EF3B810EAA77A6E244D7F5672EFF /* Log.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D08A94E7C3746163340B4EA95824507 /* Log.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 491625B9D71AA1BD54EF222D6CF2156C /* opengl_Attributes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F42E220EA589F02ED66B2844BC537B1B /* opengl_Attributes.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 493D2606DF4B76687CCD0F48B2E76904 /* NstBoardBmcCtc65.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3B33F3D270F71B002370D6D901A9EC19 /* NstBoardBmcCtc65.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4948EB328DD7614DF746912086A18D65 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 578F350CDE9D940384DFB5636F635219 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 494BF218C4F917D55808751F21518F3F /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 432A5751918B766667F9CD8866666085 /* ResponseSerialization.swift */; }; 49518AAC1F6826215684B5499BF1E6BE /* NstBoardBmcFamily4646B.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F872C43256DB5C1C7D80F3F0E8E9CE0A /* NstBoardBmcFamily4646B.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4995851CA04E15BE62A4905F6212BB68 /* DriveService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EBF9C7AF0DBEF9D5C106E02B9B28CE6 /* DriveService.swift */; }; 499BFF148188191A810DEC5F4E739AB0 /* seta.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A4E086533D156DB8CB90B68CFB34011 /* seta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 49ABC99FE103B5AC8DBF4EAB13B19619 /* pngtest.c in Sources */ = {isa = PBXBuildFile; fileRef = 308BAF6C3BE086BDB26EFE72FA9E48A6 /* pngtest.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 49B42763E754035FF9813F47341292A8 /* PlatformConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BC65E8B857820DDE5B77199E9852C4 /* PlatformConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4A1F273145AC8A73006C32CCD1DCBECC /* RSTOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DE3498D124753251241C3DCDB5CB194 /* RSTOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4A235B8A8EB5A067D71258818BE0595D /* NstBoardNamcot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2135E69E6A4F906CD35BBC26E511A87E /* NstBoardNamcot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -520,37 +487,38 @@ 4A83924C5F211B90E03A8A227F460210 /* NstInpPokkunMoguraa.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D3FF2CD92B642B01EE1206B628894B5C /* NstInpPokkunMoguraa.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4A9F3B1885A725C767C559BD65A10935 /* ARMInterpreter_LoadStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C336BB83B448CA034099BF3E7B12D55 /* ARMInterpreter_LoadStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4AD9EE859F0DE01AF2C869C403FE8AD6 /* OpenGLSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B9E0F2F6641A295442D13F0770261B5 /* OpenGLSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B7AC54FDF87859ED298ABADF7043037 /* SoftwareRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB043895CFC330790DEDECC0C41BFEBE /* SoftwareRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4BB66E23280EEDDAB33FD3849235715C /* F3DTEXA.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C92A047E2902F98A561866E68DFBD1 /* F3DTEXA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4B1CEF5466C2493264B1E168A8B5A3C4 /* ftrfork.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A1DFA16FF297CF6D496D8299BD6B3A4 /* ftrfork.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4B4A17024DDE3F167EC3FFFADA8E3323 /* F3DAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 535D5DA336441168AC8B025DD167FF5A /* F3DAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4B6BCD8A5B83B616B302345DE1706B1F /* sfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0B9BFF156565987763A09CCD986B38 /* sfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4BE34CEBCADA7E00993E48F365D76C6F /* NstBoardNitra.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4E6CEEF9383BEA7F879EA4F942833796 /* NstBoardNitra.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4C2525168A2CC6EC7625B8AC550C92AB /* commandline.h in Headers */ = {isa = PBXBuildFile; fileRef = 42877B5C59DA3CE7FFC800C308596589 /* commandline.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C2666CEA93DF12E808B0748AA6C1F87 /* TxHiResCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 47179FBED9A19BF96E05BC6C9E3056FB /* TxHiResCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4C44ECF64FB6C4EDEF4ACD2236BA1545 /* UICollectionViewCell+Nibs.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7FFE29C3C4FE3726FAB1DB3F1C4F3F /* UICollectionViewCell+Nibs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4C4A649C2F5E44BC6753A9AF4066B5CD /* controls.h in Headers */ = {isa = PBXBuildFile; fileRef = 5046B6E78EA1FD56CEB696532A667D56 /* controls.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C5A26ACD5B7FB918191313A9F178EC8 /* 3DMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 232881DB5B781BEF87FE7B6665883476 /* 3DMath.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4C8972B658D801A7F3D8AC1ECE935C1F /* NstCrc32.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 85522F84ED70DA2A5D98CB751A79DB2E /* NstCrc32.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4C8EDFDEB5BE1B8740F01A75D78CC82F /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E5F4DAB8AE8D24960DF1E5DB3F6DE5 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4CEADE56BB2EF761D27E112FE7616D6E /* pngdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0E56A4DBE284273ED40732FDB073C9 /* pngdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4CB1A09E1EA833B734D8605C78479656 /* ZSortBOSS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1939C13EF032EAB42CBC6C921ECE7AD8 /* ZSortBOSS.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4D0BA6DDAECF3625D9D4F8884C396135 /* RSTToastView.h in Headers */ = {isa = PBXBuildFile; fileRef = 275D08AF3E80D1A5B843C23F36F20FE6 /* RSTToastView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D18844FC53DBD634580E3013793C936 /* ZSortBOSS.h in Headers */ = {isa = PBXBuildFile; fileRef = A52143F41FF59A51CFA9789F6A96A1F3 /* ZSortBOSS.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4D596A13AB85FB2666F860BA7D172A91 /* SNES.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3467F0683A726E7FA99570996471C2 /* SNES.swift */; }; + 4D7E5D55C153D68B40C4FC7602AC40BB /* GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E4294CBF5BD945DE53BB04420F881C9 /* GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4DC192EDBBB019B891988F7845182F51 /* RSTCellContentDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C982B805086D1D5E4EF8373EF7E777A3 /* RSTCellContentDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4DC1F5A681A0675066595FBC8231B4B2 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = F70E93212D39D1D9645D5BBE0CFB4A26 /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4DC3CE0782BBAC382A857CFEBFDE94BC /* Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB060E9B70D07FF358DD8F33001FD5C6 /* Custom.swift */; }; 4DC932B5F4D7AA22146806DD1090F1DF /* RSTDynamicDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 705D7689B51FCCF53E9C703400B0DFC4 /* RSTDynamicDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4DCBFFA1B95BE1BD4BFE5C963C7C81AA /* NstState.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 26539A58480363BAF74C49F66717AAE3 /* NstState.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4DDC8A1EF3EA4BE02FF0B695D582EF17 /* Settings.h in Headers */ = {isa = PBXBuildFile; fileRef = 3077BDF790EB52605DBA99AE8089C2FA /* Settings.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4DE607700A8319C6A9DF878F20C5A3A4 /* opengl_CachedFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C53D6C2BECC25796BBBD554B17692783 /* opengl_CachedFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4E2240017E2AF72AD8910D16B4ADBA96 /* SyncProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = F68723D87D569E987F572CCD08093F61 /* SyncProgress.swift */; }; 4E404863CC3B40582879E711E4216354 /* driver.h in Headers */ = {isa = PBXBuildFile; fileRef = D5BACB869529C8A58764FBF51E5D7BB8 /* driver.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4EB3ECBAB9FB0B1B2067EF0E1DC27E47 /* GTMNSDictionary+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = F2087F209824BFEA65167BC5408CF95A /* GTMNSDictionary+URLArguments.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F413DC26068AB7502D2ADE1EED949AA /* PaletteTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14D158A352A8BBA396519A2C6CDC67FD /* PaletteTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F483ADE9F4639BF875D6E84D02AEB80 /* opengl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4A650EA7BBC2B23A0D479A0DA4FB270 /* opengl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4F351D67B1A16C4D98EC44B4A91A8852 /* DepthBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5735CEBEDBCB212533CE2D0112224D5C /* DepthBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F6D72E65A184DC083161C6A3289D13F /* ZlutTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C680EA14E1BCE635BDC66F5CEF30F4B /* ZlutTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F75FC37FC518C828A165CEF4EAA8BDA /* opengl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4A650EA7BBC2B23A0D479A0DA4FB270 /* opengl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4F79FE245CDFD8041C639E51AD66DE39 /* cpumacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F7BDDB3C4AACF9488005884AA49676 /* cpumacro.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F8113B8B99AD98CDD9E3B137185F836 /* ftcalc.h in Headers */ = {isa = PBXBuildFile; fileRef = F87EFA6D54FDC38E1D796063498DB67B /* ftcalc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4F8D23620463D8FF135DC582B2B54D41 /* GTLRUploadParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = D686BB86CE4E75B4F320164A9EC1B404 /* GTLRUploadParameters.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4F9DEF5AB8980F5F6CBD545C902C6963 /* RSTPersistentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 051DD45485937EBA4AEB4D55FB230DCB /* RSTPersistentContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 4FA5CD6D42B05CAA056082B07A92E126 /* opengl_BufferManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8CD1F5D1FB7A2951D65FA4A322294D1 /* opengl_BufferManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4FD50804BC7509091BA1DCBA69F8C306 /* GPU2D.h in Headers */ = {isa = PBXBuildFile; fileRef = 967EFE5245A453AF9AA01C58AA47CA6F /* GPU2D.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4FE9D949CE1EA4D7AC2C0DC75BDC7D09 /* counterdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DC71414A1C59E302D19045860C86F3D /* counterdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5007FF5D9701A3394F5837CF3D949DC7 /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDF03E49537AAB42B11FC2BE2DA3821B /* opengl_ColorBufferReaderWithBufferStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 5028F30132D3D726A5BFEB6A45CE08F6 /* ManagedAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE50DAF15EC75FA249C291622A4739DE /* ManagedAccount.swift */; }; 505AF6CFE7AF897C939CE3F4893D79C7 /* NstBoardSunsoft2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 50B7464DE19879312AD16F0F9584E7C7 /* NstBoardSunsoft2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 505EA34BB63D4DA3E07D0BEAEA9CBBFE /* RenderTarget.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D98DA2B55C239E4E1EC147BC992F6F5 /* RenderTarget.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -559,119 +527,121 @@ 508F79BAF68E3B5A238FE6A3953A1D4D /* GBAGfx.h in Headers */ = {isa = PBXBuildFile; fileRef = 0893F87C0C44883CFA0FF8BD37E0CB50 /* GBAGfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; 50B180CFEAD01CDF7AE77F036B6AD4E3 /* romlist.bin in Resources */ = {isa = PBXBuildFile; fileRef = E077F3008801C506785266DF63C1EA19 /* romlist.bin */; }; 50FED56DA840079A313570E00101A9E0 /* Syncable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F82BADF1B128B29E800481350228566 /* Syncable.swift */; }; + 5109815A0F3215C9E58A3C986141C9DC /* F3DSETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 9147D9287688D6DBCB391FCFFB5E8CD9 /* F3DSETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5126155DEED6DE59D73E61CE415BDA1D /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 471C4997518A7042AE098438B7958754 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5158E74402D7498E84B1E75998347C9D /* UICollectionView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EEE2D5A7CAE13A6BDB9042F46420270 /* UICollectionView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 51609D055628917E36855CA6D559FCFD /* recomp_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B399358B256320203E685F8FC809959 /* recomp_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; 516599687587135EAF7497B4869D18AE /* NstBoardJyCompany.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1559231E2BE01D21A0445943D40BD8B9 /* NstBoardJyCompany.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 51882AB1BF2D64307CB26E25DB7A43C2 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B222E309AC91E1D67F520A0BF59B834 /* ServerTrustPolicy.swift */; }; - 51918AE90F48400669540D82E6FE3864 /* RDRAMtoColorBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = C159885D11F51EC41D84186D52DC4483 /* RDRAMtoColorBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5195E7AAFA38D697217C55041F29BC7B /* glsl_CombinerProgramUniformFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4126A8BF1768F9983511F2926680B88C /* glsl_CombinerProgramUniformFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 51BDAAC3AA2EF11A4E0777A032576AFA /* NstInpOekaKidsTablet.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43D27CBEDCDDFA5D7CB760B22CEA6D23 /* NstInpOekaKidsTablet.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 51CB2AF004A303202AC4E2E08B6DD4E4 /* SoundSDL.h in Headers */ = {isa = PBXBuildFile; fileRef = A159872320887E8CBF6333094E374F4F /* SoundSDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 51DEAECB55482F9EDCEA83C6A1068D6F /* assem_x64.h in Headers */ = {isa = PBXBuildFile; fileRef = CA31C817FA32BF3FA44E8F3FD7273A2B /* assem_x64.h */; settings = {ATTRIBUTES = (Project, ); }; }; 52323B8DDC717EBF29016585E2D8C524 /* GBASockClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A720235BC5442B027233F68A35C4613 /* GBASockClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; 523CB85DD9D51432DCC507568B4D3905 /* RSTLaunchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45858FC63D79F8CB87FFC7F4E24B4A91 /* RSTLaunchViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 524F9BFEF89FF358697E09E935BB0B98 /* Utf.inl in Headers */ = {isa = PBXBuildFile; fileRef = 8EB59526DBBF1B92F1C18D793F09DF21 /* Utf.inl */; settings = {ATTRIBUTES = (Project, ); }; }; 52722B0030C7E925E9C8304457491FFB /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BA5332776FCBF3B75CDD7168F2B8E2C4 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 527F7C5BC043908F70A5F76CF4A67D32 /* dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = D407D2A6DD08097D10D2B1117A8635F6 /* dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5284118A34B3FA1188F7A721E29FAA32 /* GLFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 442FF940EB7C16C5DB47BE217B7EAC51 /* GLFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 52B5034639D515440864918FFC5EEF97 /* ftxf86.h in Headers */ = {isa = PBXBuildFile; fileRef = 1168E68918E5BF84E08E11C7B371ABED /* ftxf86.h */; settings = {ATTRIBUTES = (Project, ); }; }; 52B893DB672E18029FA04807F0771F85 /* Vector2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7E0AC0D5AF34E7D36AEA71DF98E8EC9C /* Vector2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 52D74F7ECCC1DBF6E16DE1F12141B276 /* WriteToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 0218E1BBADD080E67F9220EDFDF90EF3 /* WriteToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; 52E4F3DFED11D9653AEC0B37BFCA708E /* RemoteFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A5EDA091E457F4BF1FF9D5715E8EF2 /* RemoteFile.swift */; }; 5312806A7BA82453F7A3E5C233835D29 /* GTMDebugSelectorValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C85069E5F2ED830B22D7D1AB4A529C /* GTMDebugSelectorValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 53D1203F37189E1B0B8854659A9345AE /* ftconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = F8EB681067B1016B70AE4047A7C916B9 /* ftconfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 539DA186960FDD99E9DEE3F703694141 /* m64p_vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = E813BC0822BCCFFC9C89EBE5DAAD7F24 /* m64p_vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; 53ECC6163FB5AF3BBA2F3FAE6A8F1BEF /* DS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9925E412F176DF45C332321285001A55 /* DS.swift */; }; 54035E7677B71E7D130E4E693B211B71 /* ImmediatePanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD855AE6412C0DD63FC4D79544883DB2 /* ImmediatePanGestureRecognizer.swift */; }; 5410DE9CCCA5B27BF32F53F10277BF94 /* TeamRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A222C0427237AEDD558FEFA410B5E021 /* TeamRoutes.swift */; }; 5433266A44831DC01F4FEF584030D6DA /* NstBoardBmc35in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F931544B104EDCB547B089F7B0707ED8 /* NstBoardBmc35in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 545FC6F90DB64D743272B9B6581C3A1D /* Performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53E9D1B37411CE1669CA533059362960 /* Performance.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 547CBA7A70425F4F04C4541BA2F06296 /* F3DTEXA.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C92A047E2902F98A561866E68DFBD1 /* F3DTEXA.h */; settings = {ATTRIBUTES = (Project, ); }; }; 549122D7AE98AC9764DE456E99B50AB9 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEDAB7B8B80BCC8BB405F1C556A4E36E /* Config.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 54B0F9C41BE6A78067881BEB750C1AF6 /* ThreadImpl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CA7F161EA390DDDF6ECB71EE876B89D9 /* ThreadImpl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 54B7FB35A2EDEB196FE50FF306656B62 /* NstBoardWaixing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7E97EB0C49F861BC8AC2D75CE54C4EB4 /* NstBoardWaixing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 556FF16A662F3C2DEBA50B9693599DE1 /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 162D4D53C68E5F2542C1898C9D356FB1 /* pngtrans.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 54DB5CB9D0EAC284EE6DEA8C04591BD7 /* F3DGOLDEN.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E090AE4D2EB3F7EBC12F7527F8C83A7 /* F3DGOLDEN.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 558A233C324EBAE74D567FDC751D1EB5 /* retro_endianness.h in Headers */ = {isa = PBXBuildFile; fileRef = 3762689E296E5EBA4CC56F2683522DF0 /* retro_endianness.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55BA63757D1E64C1BD4D132210364BBA /* biopak.h in Headers */ = {isa = PBXBuildFile; fileRef = 15E65EB68D56E7366BC886E0DF3F4369 /* biopak.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55BACBFD0A8A8EBD6EC8AA2002E6046D /* GraphicBufferWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 535C2901C00E7283DD28013BBBC6CA4F /* GraphicBufferWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55C3D30D20E39AA463F637012FA6E15D /* ColorBufferToRDRAMStub.h in Headers */ = {isa = PBXBuildFile; fileRef = F1BABB17270A0A3966333B7C327BF0CA /* ColorBufferToRDRAMStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55C4AA463699B788B9F18C0103D41C85 /* ftmodule.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A22E94D129FB402325A388CC5DF7FDD /* ftmodule.h */; settings = {ATTRIBUTES = (Project, ); }; }; 55E38E50C72F3898CD13D71706F1BBC4 /* NSManagedObjectContext+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = E90308ECF32EF009E33F9EEBA9B7C84A /* NSManagedObjectContext+Harmony.swift */; }; 55EA606F85ADCDB8455EE53A2F280B55 /* RTC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D6C840B3C97CEC304F49384CCAA446AA /* RTC.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 55EDEBBE5DBDC26F854CD44F45A475B4 /* svpscmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 86BF9E53BBD7D649033BB1F156870DE2 /* svpscmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; 56096E16210F97AF0E03EB7509C67B7E /* NSManagedObject+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3538A2EB4EDA6929B5D32A095FD21C6E /* NSManagedObject+Harmony.swift */; }; - 56192DB51F2A50C90569FF1BD1985C88 /* glsl_FXAA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 816DCE1C4957B5B87AF4A2EA4D7451FF /* glsl_FXAA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 5619A5DFD12F6FC67F5596883382EAA3 /* rasterize.h in Headers */ = {isa = PBXBuildFile; fileRef = 169291B84BEFD54121E345D556B0F9F8 /* rasterize.h */; settings = {ATTRIBUTES = (Project, ); }; }; 56487F87D42D4ABC274B99A23E38ED51 /* DSEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = EFFE70745486E1FF21AEAF435A71FBB3 /* DSEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 565B64F7F83F4F5FA29C34B97F0071ED /* mp3.c in Sources */ = {isa = PBXBuildFile; fileRef = 9622F656638DFB246B7A638CCF468156 /* mp3.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 566B02F81167FAAB363014E42ED15BFF /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D113E482EBF7C096302CD382067ECB51 /* Foundation.swift */; }; 5678ED8E60F31109D707A9CD20001EB6 /* Rect.inl in Headers */ = {isa = PBXBuildFile; fileRef = E149E90D3011EE5DD380C62CC073BF20 /* Rect.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - 56CC143D8E35F7C9A786111F8469E4AE /* L3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93DB6CBD9964A538F778E19D3832F2B9 /* L3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 56D815C1383B97B622D2C8A50156BBC4 /* ColorBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = E726879448FBC69F09C3868AEAA3AE81 /* ColorBufferReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 569FF6B41CF726CC1143ABFC7C69289B /* fb.h in Headers */ = {isa = PBXBuildFile; fileRef = F650B1818D017BD4A14C1415647FCDEB /* fb.h */; settings = {ATTRIBUTES = (Project, ); }; }; 56F2FD6BBD1FEDD660C763B74D0367B8 /* SNESEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 46CC56588A9249D29F68E981CE6C8B54 /* SNESEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; 574897C776D4A75F06D108C90308A36E /* UIKit+ActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = F6225E475A9B0FB7A6AD9A1B3E32D764 /* UIKit+ActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5788CF6580789EB32B111C2CEBE2FA98 /* NstProperties.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 436B7542629ABF7B0FFD6BB9B072FC21 /* NstProperties.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 57934F805FBD53511D97E2A813CCA304 /* GLideNUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E3627E2B352D880C38B219494E20A52 /* GLideNUI.h */; settings = {ATTRIBUTES = (Project, ); }; }; 57B0E2E5E730BB045DF85BD06E05F717 /* NstDatabase.xml in Resources */ = {isa = PBXBuildFile; fileRef = 3312E5853E083AE08720EFDF8EE603C0 /* NstDatabase.xml */; }; - 57D216129FDA337F9E3D3C3FA2B064AA /* pi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DFFCF1CDD169427B033DBE318C4EECA /* pi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57EE306DBB7BFA158EB2C32932C97AAB /* gDP.h in Headers */ = {isa = PBXBuildFile; fileRef = EE72931824332E351A9F7197A02E23BD /* gDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; 58502D5F6100ACE79187371096DD70CA /* mic.h in Headers */ = {isa = PBXBuildFile; fileRef = F93CCC48091B82BDE2E10023D5C4990A /* mic.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5858556236C0AD004276850A211BBBB2 /* Turbo3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A4769F49E16CB7DA2C80A4AE0AB75CA /* Turbo3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 585F0F53176BBD0133B388426F1871F1 /* ftsynth.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE800F01854521394EAADE8A06F1AA1 /* ftsynth.h */; settings = {ATTRIBUTES = (Project, ); }; }; 58670BDA59BC1476ECD1AE42A65DEDB4 /* SQLiteObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1AC80F9908EC458F2880C5D2B25C33 /* SQLiteObjc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5872138AFC456A4EFAF08719BB37464C /* opengl_UnbufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B5206BC0DB3FB590107A53EBAE4647D /* opengl_UnbufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 58766C2ABA1EA78EBFDA6358071598A6 /* NstVideoFilterScaleX.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BD74931B096C1E1F3A72E00B9A1B4861 /* NstVideoFilterScaleX.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 588857A888B8FB50B5729755048AF5BE /* MemoryStatus_mupenplus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 876C8D28D439902E84EF476C79F7E2C8 /* MemoryStatus_mupenplus.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 58A8D33FD84F62BA37B6B53109F22783 /* ROMReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 01BC5E003AE565B6B711436BFBF86BF4 /* ROMReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; 58B5EB01C16F961316330E4D251E7648 /* UploadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B236B2DB89B26DE7B16E762CF3080C5A /* UploadRecordOperation.swift */; }; 58BE7AF2705F2F19B2DBD0077245F46C /* Flash.h in Headers */ = {isa = PBXBuildFile; fileRef = 03D0F6F861896F902FD904A5CA166856 /* Flash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 58E498558486634EC0D30463A80E740B /* N64EmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 124A9AA8BD80FF606241A3E34CBF4039 /* N64EmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; 58EA70D5ACB9CC2718AEC1AEBADFB157 /* SndOut.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F0E6B2352802896ACECD64204A6113D /* SndOut.h */; settings = {ATTRIBUTES = (Project, ); }; }; 592095BB4B63DA9A913D330FFA26905F /* SyncRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47D47AFCF1385842685E8C07121C8BE8 /* SyncRecordsOperation.swift */; }; - 59337EDB4628FDAC6C07792E35AE0FFE /* PixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A586DA6049F657DBEA1D6CB398378C21 /* PixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 59462C1E4E16ACC6FD20C786FE5D2A1A /* DownloadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 450775B09B5A404AD4A5910F22DD06C9 /* DownloadRecordsOperation.swift */; }; - 5949B7253E6E1DB1793B5F8D17F6F095 /* PluginAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 77423E6CCB3B1A7C499FEC5ADF73561A /* PluginAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59580416DDB44B3A787BC982BC72F768 /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = E284FFF9015A2937CE2CA1509C92B65C /* zlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 595257C1536BA8947FF6874613BDCDB6 /* GLideN64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92C0056228C548EC5C0C4574520A559A /* GLideN64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 595D35169DF7A7E588E3506A701E1E5F /* device.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BB6F43FE56F847084FF20D1BCB4BFAF /* device.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 595D442EE6024B2BC9706D1C80ACA0E8 /* bootrom_hle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D2AF58B1BA6D02D19EAE80F80E4CA9D /* bootrom_hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5964FD1B899EE5FDD4F98F594BC29971 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D9AB238C0D8C37F7486D77CC4E9BF4 /* Errors.swift */; }; 599D552BADBF132BAA36F06CCCD06913 /* NstBoardBtlSmb2c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B341B464E13F5C77115D01AF3A303C0 /* NstBoardBtlSmb2c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 59C9DFBC77F345B4C89ECEDC869567AE /* sfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0B9BFF156565987763A09CCD986B38 /* sfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59E880502F8D50F9EE5D608A579F9BC0 /* wst.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F279CB05ABD733ECA41FFA2F19A00B6 /* wst.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59F9463AE8F8A4C77B2B7FE0E646026B /* F5Rogue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 092C6EE9873F269B8DF55D311028DF6F /* F5Rogue.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 59A3B9B600C967F014E52F7EAF8E5A7B /* ftcffdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = FA571B46E66CC61957A2EC9659B40B5F /* ftcffdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5A09E36B97C75FB76C579219F68AEEB9 /* NstVector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCB1D2FFB53452577990FA3D356A4DD7 /* NstVector.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5A0BF65D720FB2B9FADC78A474E6A81B /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783A65AE17A33F0C1C242F5B30F01680 /* Archive+Reading.swift */; }; 5A79C28FC58E9C640DFD7AAF04AF8827 /* NstBoardBmcA65as.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1D8AA62CF8EE1D7BD51C30F2874CC2D2 /* NstBoardBmcA65as.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5AA3255686819EB4DD24A1FE23CC6F28 /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23C9343FC4FB0FD507A750B3EF697747 /* Contacts.swift */; }; 5ABA51E69DCE967FCBED1A337D04F0A7 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = EE94484CFDB733F9B6B76E0416EB735F /* Standard.deltaskin */; }; 5ACC5FA32C77A54CBFEC08C34ACEACCB /* NstMemory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D5643A5674D32FE8D35CE78AF0B30F39 /* NstMemory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5AFA9AD616A22E16547326EF1CDA4C83 /* file_storage.h in Headers */ = {isa = PBXBuildFile; fileRef = CF4CB213C78DA27A2EF987CB656BA480 /* file_storage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B025E037D2C37021CA068050A2CA3B8 /* ftbitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = E94F624FEBCECA3D447A42E223613A20 /* ftbitmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5B0F1790A09DEAEED24FACF655B74D15 /* GPU3D_Soft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8DA8A3992CF991EF375A78B56D07EF09 /* GPU3D_Soft.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5B444B54168E8EDD6542DE7127EEF823 /* Debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C536521365129A5FF9AE40DDF753F8 /* Debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B19E1ABAC74B1777062C9A8CEB04376 /* F3DGOLDEN.h in Headers */ = {isa = PBXBuildFile; fileRef = FB9EE7B4A2F519FCFB65900960419A5F /* F3DGOLDEN.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B476B2AECD64CC755A6B90CB90B9530 /* readpng2.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD0F23869E4370E465AE1C8597D8843 /* readpng2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5B523F0E6CC4D851035C0FF668B53075 /* TcpListener.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F857371D3F5B8E4318217720FD868368 /* TcpListener.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B5FC4B8005630CE21B998A96C73D770 /* F3DGOLDEN.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E090AE4D2EB3F7EBC12F7527F8C83A7 /* F3DGOLDEN.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5B8015B7318B3B0B1F9EE8F7C50D32FD /* bldno.h in Headers */ = {isa = PBXBuildFile; fileRef = 44EC5F94EE5BFE7A785C5541E9210F90 /* bldno.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5BA647B9A69EDCD1595E3FEB8E6578FD /* game_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 5536CF5E11B5E15ED66757BB394C8694 /* game_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5BD8D84D6C59417A4EFF51A407BA04A5 /* NstBoardSomeriTeam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56D472264507A3544C43D6606FB37390 /* NstBoardSomeriTeam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5BDF97784CBEA46C26B454F806233B2C /* F3DZEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B432CCBAD2A0A59F5EFB878191A511 /* F3DZEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5BE7D6FBE9EB93D43C99935C48A966B7 /* GLideN64.ini in Resources */ = {isa = PBXBuildFile; fileRef = 3A13B4329882F5A80C1C1326BB560732 /* GLideN64.ini */; }; 5BEFEF83E88746F60EE96520C83CF8B1 /* RSTPersistentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FBF06615B56E55808CEBADD68B920BE /* RSTPersistentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C1E3DA8CF07041B9499F603C66261DE /* fttrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 88EF2BA95EB1E18CBC11B6130EC55E16 /* fttrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C28996B1131EFFAB4E75493D9F16B65 /* ftmac.h in Headers */ = {isa = PBXBuildFile; fileRef = 84758A5917B6274B633D5B6A3A3E91F9 /* ftmac.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C0E83E8F9A332A0387AD2B357F24AFA /* cached_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FFF20A5E29BABF9B99B4C36366F9A7B /* cached_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C1E536FA29DCD2CDE81FC2F6763DDBD /* n64_cic_nus_6105.h in Headers */ = {isa = PBXBuildFile; fileRef = 112637F718E98C3499172684DAB993A0 /* n64_cic_nus_6105.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5C2C50048DF9D8C1D128711187453A8D /* GTLRBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ABF32DB7C03DC858879C758E39AAD27 /* GTLRBase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5C3F628CF00E3CD05F3055BC14650779 /* String.inl in Headers */ = {isa = PBXBuildFile; fileRef = E56992DF458AE190EF8B6FDBB9A4DE70 /* String.inl */; settings = {ATTRIBUTES = (Project, ); }; }; 5C5F387309EC920C1D2F76769CE76897 /* Delta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BBE274343E5120686BB2D52C486B98F /* Delta.swift */; }; - 5CE430BB46B6B4C1B3051011D523753D /* DepthBufferRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFF7521BE73EED39D6F3DAC41584A38 /* DepthBufferRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5CEA0B264A2AC9222A69B62A1F0C7AF5 /* sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = F15930486D7F45DD18CFBA9BD8800E92 /* sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C9EFB5CB4D71D93488DB09DF4A3FCAB /* N64DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8037C3684A58B1EC85B083D0624A7117 /* N64DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5CBAABCEFDC66179124839AB147498F9 /* convert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35C4D4998448EFC8D73C7526A9E0766B /* convert.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 5D11ABFFC6008AB58F5E115BC314596B /* NstBoardGouder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 452F3BC887D4177C15C6B566333C123E /* NstBoardGouder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D1E6BE0A0E8D935882B998543A6F349 /* ftcache.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D32A452E67E305E30D5F18EE62B91D /* ftcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D4477D8A8EA4FFA5F4E8070AD083CB6 /* ftotval.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EFE9AE79EBD67A282DE349ECDBA9D52 /* ftotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5DBB580BC90D0C0893FC692F012A0B28 /* NstBoardCneDecathlon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94A3287DE1F597EEEB81597618FA9901 /* NstBoardCneDecathlon.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DCE35D43645F115E45047AF1C1A94B7 /* dummy_rsp.h in Headers */ = {isa = PBXBuildFile; fileRef = C0BD20FF1A75F7E688073AEAC0E0E421 /* dummy_rsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DD06D21128F42B70A68998A0DD6E549 /* assem_arm64.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AB8A827FC69B7712131051BF7CDAEBF /* assem_arm64.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5DE22207D1B1CD7A583F52895E942007 /* CustomRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF02F520CDA87AF4813D4764ECD43F5 /* CustomRoutes.swift */; }; 5DF0A3CA62FCFD5CB7345A9B97F10049 /* NstBoardSuperGamePocahontas2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5884B3D9687E41073D6AE9F4960640D8 /* NstBoardSuperGamePocahontas2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5DFA7B4B653B42D7A547C3A60EFD77CA /* Joystick.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 14C71D27630335B15939DD0664CE76D0 /* Joystick.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5E39903C4C3C854D8A8F52D82FF51ED2 /* bitmap_font.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D4C88AAB9529011A0BC78A5F8FB349 /* bitmap_font.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5E8C4F8137E41A59A3EE4DE28307BB64 /* DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3CDDB5072744264D4A7519AE6D6A63 /* DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5ED3D70CB705D6F29363340A8E1B314E /* ftxf86.h in Headers */ = {isa = PBXBuildFile; fileRef = 1168E68918E5BF84E08E11C7B371ABED /* ftxf86.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5F3811A8B4109BA4B752316B90429F4C /* OAuthMobile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A552ADFE847FA0B9435F038FD25C6AB /* OAuthMobile.swift */; }; 5F45A12D5CFF64756E09AD77EF5081E1 /* Transform.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7C7EB4C3A9DB67B4B73C20A18B53EA47 /* Transform.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5F89935F0D9FA301409E399D2B40B501 /* pakinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7550F86AC04930B4F25BF5030BE49B93 /* pakinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5FBC206C59F0020EFCEC4718EE86DF8A /* bldno.h in Headers */ = {isa = PBXBuildFile; fileRef = 44EC5F94EE5BFE7A785C5541E9210F90 /* bldno.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5FD5F0CF6C721D19713FF7C5E82F1829 /* NstBoardSachenS8259.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8523ACBE5D20530D62699515CC0C275A /* NstBoardSachenS8259.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5FF9738199FD4275E4CEF17EB2FD0E14 /* NstBoardBmcMarioParty7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FF0C7BE73DA19DD12046FF44E95DC7E7 /* NstBoardBmcMarioParty7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5FFED05405EB077DD3158D0203FEEF2E /* NstBoardDreamtech.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B72A5A5016919006907A70C26E61B891 /* NstBoardDreamtech.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 601B04A377C214C532FD3284085C6C4A /* Vector3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16C765B40106664E143CBFFBDA5A104A /* Vector3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 60253526607A110A8D0EE8069B3D101D /* NstBoardBmcSuper40in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B5AE816827C6AA5796CDFC4C7E83D492 /* NstBoardBmcSuper40in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 604E7D5387AE983CD3840B0C3DED6A8C /* ftdriver.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8D045A4BAB5806465552F9EAD05287 /* ftdriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6089ADD3A18C37299891649FF653A7C4 /* ftwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 11D8E3490D52F64122D1E83DF8178D41 /* ftwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; 60958CC056A611C62497E3D2010A35CC /* RTC.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FEB473929021F04D0B2259A61CE3883 /* RTC.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 609EC7DAD72D32A456A4585A411B0A7D /* ftstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ADEEFFAB7CD01EA4E844F0F78DBC0E1 /* ftstream.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6109531B72E4E232C02329870717C7EF /* NESEmulatorBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3B33FD961F7E04608908F29394499A /* NESEmulatorBridge.swift */; }; 612626E2EEFEF0B280A30622DFCB55C7 /* NstApiUser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9AE76E7D656F9FC63729D2FE6CF2EE4B /* NstApiUser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 61637EE91267F265A7F4EB3CECCFFA1F /* NstBoardBtl2708.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E264A0D34041EEDB230760A4DF155023 /* NstBoardBtl2708.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 61978EBDA8F0BEDE69E4CE4034FC960C /* m64p_common.h in Headers */ = {isa = PBXBuildFile; fileRef = D1975814ACD46FECD8CEDFCE0706FFF0 /* m64p_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61A0F8234682825C2206D9B58BE241DD /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = A088B6DC0DF984AFEA200E3D0824458F /* pngstruct.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 61A36B8525B5D1CA38CFC4C2564DA2C3 /* ftgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D7A85BF8A1C0DC2EE0B2F071F97445 /* ftgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; 61B583689DD2CFBD46FA3712A184E2E5 /* CheatFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 795C12A193997827B4ADD870D87BDF8C /* CheatFormat.swift */; }; - 61D1C0178CE6181A4877AD63422267AE /* VI.h in Headers */ = {isa = PBXBuildFile; fileRef = 66E2F83711E351CACFF208148B544CB1 /* VI.h */; settings = {ATTRIBUTES = (Project, ); }; }; 61EBB111287EDF6AE4ABF04DA5A396CF /* NstBoardIremG101.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D81B0A638756575C41CA82842260A641 /* NstBoardIremG101.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 61FA017D4AF7688298FF0FB9F4251FFF /* F5Indi_Naboo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D35DC1DC3A814BF1FDEBF8BA115A3C0 /* F5Indi_Naboo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6212289ABD96C811DCD8B09B9BCC1E9B /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA23C36C890553725FA9BBEBC0789829 /* Operation.swift */; }; 6212EBD634EBA7AC7214545989DC7AE0 /* dma.h in Headers */ = {isa = PBXBuildFile; fileRef = 54ED6F866B4324DFC72570435F1EBD41 /* dma.h */; settings = {ATTRIBUTES = (Project, ); }; }; 62340E0AED101FFE91C18C91AD9ACEEB /* MelonDSDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C3381B8A55051B7129CC78CA0231C2D /* MelonDSDeltaCore-dummy.m */; }; @@ -680,239 +650,230 @@ 6281A81C693739FBEEB99068ADE81F94 /* cpu_detect.h in Headers */ = {isa = PBXBuildFile; fileRef = 3197530A210649B738C6111BF7966B53 /* cpu_detect.h */; settings = {ATTRIBUTES = (Project, ); }; }; 62949FF9C1CBB808257B793D91067BD3 /* NstNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C786A086E27CBD3229EFD85CE7497EC8 /* NstNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 62A34A388C71F471F3585E7D042A16AC /* AlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A391671858B2C18AC2A7795F92FD3F03 /* AlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 62B7FBE67CF99461BEF5CE97C50FE424 /* file_storage.h in Headers */ = {isa = PBXBuildFile; fileRef = CF4CB213C78DA27A2EF987CB656BA480 /* file_storage.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6322A14CBDF57EF29695F820A403EDE2 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C0BA17B21F19930A3F7215B702D7372 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 63306BB36B1EE0257031B7113C64569F /* F3DPD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F07E76FD0A048E88C13AD72461D1A8A5 /* F3DPD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 63427690A77B2B5436666DAF5706611B /* Err.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB5B6F86BFE8AFABADAFCCC745D013FE /* Err.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 634773B1E340AACEAF3FE0D1F31F51D5 /* gbafilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D0B8740C1A5A02C3EBF2D3FF634FACF /* gbafilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6348E28B60143E90AC1BE0E53C58DC48 /* opengl_BufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = C129B80E9CC6B64D0600B9A46648ED8B /* opengl_BufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 636BA008A6D26E9CDAC0E0358AF55866 /* SoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA06CA70E6579DA7013F9BF0C6148C7 /* SoundDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6373AC1BC02916DA7A4727231D4E72E6 /* ControllerInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3104A99F1E2E5DCD9FCE463C1BCD842 /* ControllerInputView.swift */; }; - 6419BCC57C3D947320987D210C349675 /* instr_counters.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C7B436FC2BE106D5FAF2A5FE73A0CEB /* instr_counters.h */; settings = {ATTRIBUTES = (Project, ); }; }; 642FFA142ED6C17EF6E07F09CCB95DE2 /* ThreadLocalPtr.inl in Headers */ = {isa = PBXBuildFile; fileRef = 6A98E587E6533A6DF4F4624F83C3BD14 /* ThreadLocalPtr.inl */; settings = {ATTRIBUTES = (Project, ); }; }; 6446ABE3984EC295A073DDF259A3968B /* tile.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B74C9DADB72CF0883D582488B13ED6 /* tile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 644B2EA9FB3436835DEE0BA7DA47DAE1 /* t1tables.h in Headers */ = {isa = PBXBuildFile; fileRef = 030B53DF4264E1E4E75E737FC9B5B696 /* t1tables.h */; settings = {ATTRIBUTES = (Project, ); }; }; 644DA2A6ED8D65DD05C30EACC26425F5 /* NDS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A854F4317FA28AEE4189EE7FF42C9E3 /* NDS.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 64AAC890C5FE81CDEA42957859B1A198 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 21A623E3F7E900942F5A6AD1E693832D /* Platform.h */; settings = {ATTRIBUTES = (Project, ); }; }; 64C9989CD9A4F9A39D9599A0881F5655 /* GBALink.h in Headers */ = {isa = PBXBuildFile; fileRef = DB6A84DCE2259D650CA6872E7BC6A3C9 /* GBALink.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6502705CE8C9907BF33AEC009AAE49A6 /* NstBoardIrem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 20D9584841AECE27BBC056E45740941F /* NstBoardIrem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 65082519D0CAD54D4495C068E0E1CC75 /* ftrender.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E612D889BCF639940A7B442ED45DC84 /* ftrender.h */; settings = {ATTRIBUTES = (Project, ); }; }; 652A1D1BC29758EF8C914998DFAB0F96 /* Mutex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7C65583B30F5CE8CB3A417DCFB648306 /* Mutex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 6535B1B6AC3FBC20B9D1C2B6255A3708 /* fttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 57067E8C28EB51D8DC120B70B3A966CF /* fttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 653EFAF65992560FB2370C51780DB91C /* SoundBufferRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4D26635313FF0E89E645E701C664260 /* SoundBufferRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 6556E55EE066A70B571AA0F6018B0988 /* GBACart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 649A8676EC984C0C8FDF1CCA5D3FF80D /* GBACart.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 657244809950CE301AD70BDD7C2D4DE8 /* NstBoardFfe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48362C4E645985DF12660BB2415B0487 /* NstBoardFfe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 6572D4AD2CDA7C344092B902AE5E375D /* svpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = C4D7382D1D8B2EAAEDEC4E420FAC72E6 /* svpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65AB36D595CB07090A2AB42CFA4C4F96 /* L3D.h in Headers */ = {isa = PBXBuildFile; fileRef = DDB2184F0999EE882B67DEFADE1B4A63 /* L3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 65CBBDBDF701FB51569473462CF38DF8 /* svsfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3139CDEFDF54874B3FE87D52FBEE63BB /* svsfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 65A8A0E7D477668CE87C3793E034EE10 /* Turbo3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A4769F49E16CB7DA2C80A4AE0AB75CA /* Turbo3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 65F6CF9B8D1C8A1793457F1FCAFDB8C0 /* txWidestringWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 89F66807040C88F86F074A7DE8D84643 /* txWidestringWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6604303E9728F99EAFA8B202C3B06AAF /* apu.h in Headers */ = {isa = PBXBuildFile; fileRef = ADFD98373A9BA6422C60F09ADCB69852 /* apu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66AE47CDE09E8A95A29BB75F046C2B03 /* ftcffdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = FA571B46E66CC61957A2EC9659B40B5F /* ftcffdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 663955D8E80713D3598FBD622BD6D364 /* L3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B7E4CE889EFFA5F1F5DAF6C3BD013A /* L3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 666B4C38305E6C7B3EE71BBAD107E59A /* dummy_input.h in Headers */ = {isa = PBXBuildFile; fileRef = FB50DB0D94A17BD483732F8CF157CACE /* dummy_input.h */; settings = {ATTRIBUTES = (Project, ); }; }; 66D90649D3F20F5DA87EC0A5FD2168D3 /* NstBoardBmcHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 430D8BC642B862DC5871DCA6D4D4B26A /* NstBoardBmcHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 66E68D161A3E4F2F8CF51848F5E11C60 /* STTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 80E83F0F41410406BC51FD2A72523649 /* STTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 670B1515AB23AB6EF7AA6DE75DCD4BFA /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CEF3CC6501A56EB934F1F25AEB77A985 /* internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6728DD595016A88D0BE42E03C7F8FFCC /* GBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CE2ACA6C2A3B34E052EB69D646F08D /* GBC.swift */; }; - 6731CC4CED928FD83F4CEA695B5D6A78 /* CombinerKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE736221B155C2514D9D36EB4FBAEEEF /* CombinerKey.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 675105628714D68862DC480B2632FFC7 /* MMU.h in Headers */ = {isa = PBXBuildFile; fileRef = 88C31AF11910728A45F6A72A4BF44968 /* MMU.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 679942ACF8264152448A2861144849F9 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 944052D0ED4C8624EF4485EE37D7898C /* opengl_ColorBufferReaderWithPixelBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 67ECCA37061F91867BC2AEA13B836BDB /* SNESTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 360FE52BEEE04312C550B83F42CCF550 /* SNESTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6853624E43A5EB0CA069A0F55C3C315C /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC397E433E2CCBB38824AB04FAAC26C /* NetworkReachabilityManager.swift */; }; + 686D0B1F993B01BB1D5BC33F543DDDC5 /* files.h in Headers */ = {isa = PBXBuildFile; fileRef = B5D0F2204128CF6B384D5E2619FCFA0F /* files.h */; settings = {ATTRIBUTES = (Project, ); }; }; 687F1F311F418FE895B2D96BF3617B14 /* mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 123BC6ACD39EEA715F0A93879B490B14 /* mem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 68F7071AB87ED8CB4B8CF11F7BF9A78E /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C8D94F40BF63E8927B70BB024B0F136 /* Connection.swift */; }; 68F955348FE9A8B6BCE3113CE94A7DE3 /* remote.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FF9B56C14F9DA7D4C860A76893C21C5 /* remote.h */; settings = {ATTRIBUTES = (Project, ); }; }; 693CE9D53961CFDE9E0763B45047AA96 /* wifi.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FE86A7AE75D5AB202DCEB5C676F51B /* wifi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 695099FE2655BBE346F93075ABE6CF75 /* psaux.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E570CBAF755D32B62B2B5506AE1CB8 /* psaux.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 697CC0F8D19D045FDF352FC73316E75F /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 9CC748D2AFF9AC9A78EA9982425EBACD /* Standard.deltamapping */; }; + 699EABA247256C61B68FFFF60452188F /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = E284FFF9015A2937CE2CA1509C92B65C /* zlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 69F42D441E70A657FF8BF5E94B3D92AD /* ConfigDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = A590F12D65E6986C2D6F38990BFE02DD /* ConfigDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A026169417ABD0A23A1DC9340A243C9 /* audio_out_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 2212C1BF0C50BC7C98BA6A5202DD8DFC /* audio_out_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6A07D0503F964D4BA74E6F726D679DF7 /* NESEmulatorBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5984855E15D790E1B69A1BD578ABC85 /* NESEmulatorBridge.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6A245DCAC5A1FD3F8943F4FD3E1473EE /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 71FF835F27DBABBE447A40E51AF4AC68 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6A386F883B6F86FCA792C8C1134057CA /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6365C9968A510968784A08051605D583 /* Result.swift */; }; - 6A86407036458ED2BBE900F4A74A49A4 /* resource.h in Headers */ = {isa = PBXBuildFile; fileRef = C7042544A83B2C65E8D67FFD6DBACCD4 /* resource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6A4D554552A991D3E852728A46F11C6C /* jpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = D72335FEE7B69D06AC33B707144B50DE /* jpeg.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6A71F6621B7270DC4E9CC3469057DF8D /* video_capture_backend.c in Sources */ = {isa = PBXBuildFile; fileRef = F074B8ED12CB119F2AD98DE96C9D1E1B /* video_capture_backend.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6A90DB9252F5F4A3ECBB6AD4F22A1352 /* GTLRRuntimeCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = F97E0802AC94B24B1FB03E55CD9A2FAC /* GTLRRuntimeCommon.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6ACAD89B30AD04EE41D0ABDD3FB3A546 /* slot1.h in Headers */ = {isa = PBXBuildFile; fileRef = 287CF3209EFBA423F838FBAE494AB0C0 /* slot1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6AE5D505AB46EAC8A4CA2ACBE1EF0FC3 /* TxReSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE3A4F7E48FD2C3751CCD26689C1353D /* TxReSample.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6AE6261249D9E4BD068CD7091A136070 /* osal_dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = FE17ACA9391DAFCA51DA8FE4929D2B86 /* osal_dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6AF4C6E585CFF93B76EC9C45FE0F7CB1 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039A7DC666394A7FCDA8D0587DD80EAD /* Files.swift */; }; - 6B16C85148A68CC975DA7929304DF1B7 /* PostProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = A664ED590168019449C1E8A60B996A1D /* PostProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6B63836AD6E6BC9D03FB3AD4A534B6AC /* gSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0EA337C872D00B3A247FF40858C6BF1F /* gSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6B6B1242D265B7C549A4D6A341A1EEB0 /* dcheck.h in Headers */ = {isa = PBXBuildFile; fileRef = CBE09CFE7E4A642AC1B56EC89FADDFFE /* dcheck.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6BABA54BBEBA347D766C48087A4F87D0 /* Patch.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AFD09F14D0DA01868F50B237A0B76B1 /* Patch.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6BBCF5E1AC45FC48B7C6E6AA2A19E03D /* DeltaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = ABF2E1030F06335CAB068D719C129216 /* DeltaTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BC128BCDCE5AC608EA415377CCC78B8 /* libhardware.h in Headers */ = {isa = PBXBuildFile; fileRef = 431779F5BA85EA4F476E69CF0D2AEFD3 /* libhardware.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6BD8B0E292B94BC9D8A9CBA583D4A79E /* MelonDSEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F014A83DEF4F355ED7E7CBACE0FBE07 /* MelonDSEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6C01BBF8A1A21C9696500E148349BC14 /* AnyInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90564B99F2C2EF43FEC4BA55EEF618FB /* AnyInput.swift */; }; 6C138F122959D82C0E672FA0ACE8F007 /* ppu.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BB33D23E1407CA689F462EB7799485 /* ppu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6C3EDF35E292C976B60BC1E147F8DE93 /* ftoption.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D43A3C12E2607439AFFC8A1D1CDE41 /* ftoption.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6C6915CA122E8B4630061446128E2BCC /* Paper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F9C1E6A3EFB7439D016876D6537610 /* Paper.swift */; }; 6C87671F7C948E465D76853474A7F27E /* DropboxService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17FD4E3456BB23320C0E9F652CC29D1 /* DropboxService+Records.swift */; }; 6C98F3F29A1ACE6C91C20CE35EDA0261 /* NstBoardNamcot163.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FDBE09509A57E9C26585D21FA1FB381C /* NstBoardNamcot163.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CC46121EC9565CF4428346AAE080BA2 /* ai_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D58E3495B9E3434BF573543720CB50E /* ai_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6CCA5E08C0EE887CD4CF0DB92C7787C5 /* cp0.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C8F13E35C588F34CD7F1A313360A79 /* cp0.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6CCACC2383F5ADD7F92D95FF4C6CDD56 /* GBA.h in Headers */ = {isa = PBXBuildFile; fileRef = A8939FA4EA41B857876F33812D829B63 /* GBA.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6CD1DD53A424B153F6267EE63AFE1CDC /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C7894842679F86AEA25BABD02717D75 /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6CE7F4046BA417D2DF53E0C69D47B473 /* DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5393A36A3C22644206D6D5187A6B0285 /* DeltaCore-dummy.m */; }; 6D1CB98C0BB063D06CF4A3B13B4D21F3 /* OAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 542213FAAE95E6EA5E3E9392D8DD3B49 /* OAuth.swift */; }; 6D4FDCA328DD8D76500CEE55AA8663B6 /* adaptivesleep.h in Headers */ = {isa = PBXBuildFile; fileRef = C82F87697475573C237F91B5498957A0 /* adaptivesleep.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6D5F88F8EE3492C0AD55D6CD854681EA /* LocalRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA5774FC0B40EC779613DB64E15C046 /* LocalRecord.swift */; }; - 6D611D7DCB3F3FB551F06D363B0F6BC9 /* Parameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C1FB014388E9D1E47EB7DCC0CD0682 /* Parameter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6D72C6C57A885CD6E28DEA598592E6AB /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = C94926745D8A006AA0A950A854249A42 /* Standard.deltamapping */; }; - 6DE7BBDFA34C2573298F7441BBF3AB4A /* CRC_OPT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E535808FC30F7474AE914FD2270A2715 /* CRC_OPT.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6E50F30E4BECE7A6C3531020D1E5C59F /* msu1.h in Headers */ = {isa = PBXBuildFile; fileRef = FC26AD726BEA827DE29E8369FB6303C6 /* msu1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E5A067CD4797D3ABC2BC001B7005A84 /* ZSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B9D8426DBFEF530DE2AC44162062396 /* ZSort.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6E64571D846DA6B46DEF71405A2C71F7 /* GTLRService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1B35A10293013EB1FF554F7BEB76DC /* GTLRService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E775AD30672E29EEE6CC70D23A833C9 /* opengl_ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = EAFE7943BDC2A2EA16E70C5B9E8335BE /* opengl_ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6E77A5D834F1A5B81DFB7C1955085F93 /* RSTToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = 18A21C316835DD316654A070B9E838EF /* RSTToastView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6EA0A6FE9CCD2699B6BEF34376E9649F /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC1B770F09F0C669234396A39BFF6BB9 /* SDWebImage-dummy.m */; }; 6EAC3C9446063F09611B9BE55D8D34C1 /* SQLiteObjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 89132F0647F462DF7B2532346D3447EE /* SQLiteObjc.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6EB1210C8C6387994CFEDC61EF67F9CB /* osal_dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = FE17ACA9391DAFCA51DA8FE4929D2B86 /* osal_dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6EC906D378EF8ADEC5D7C2B04BE6C36B /* AudioRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84CB3FC8544B28E9203C07151D44AC01 /* AudioRendering.swift */; }; - 6EDBE3E2C2021F2A4DC6A5D4258AAB9A /* hle_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DF2DD4169A9A5CEA5319C794BD888975 /* hle_internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6EE9ACB0AB0E0CB81A490F499EBEFF29 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 040EDE19207F90BFBF015280544EC415 /* UIImage+MultiFormat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6F2BC09D000622A367F66D88714B1C38 /* NstBoardUnlA9746.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0D13CE77F2679DAE2B0BD39A25C2A0DE /* NstBoardUnlA9746.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 6F40472239FBE69B12BF5DA71C6F64BF /* sdl_key_converter.h in Headers */ = {isa = PBXBuildFile; fileRef = D4F21465E42C4A8071CA88DDA2952DAA /* sdl_key_converter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6F6937290D90CE905D719448A2AB750B /* readpng.h in Headers */ = {isa = PBXBuildFile; fileRef = BD84F06A10C7F36232CEC327446C64C9 /* readpng.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6F7B7F6E4DF7B31AC33A3A62461A2127 /* NstBoardHxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 183E1BFA0F57AF969EEA014FEB426220 /* NstBoardHxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 6FC18CA0020117D5096CF72A20A94C68 /* SPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E319DE75A7A4BF735167A2B78A55635 /* SPI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 700240FA8626FBCB8DD1E6A528883AEC /* GBAEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5F716F68D783146B202EC8FC938BC98B /* GBAEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 70035AF1D8DA93A9B0572D1D91051A47 /* gdbstub.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D2B3BDB29EB37DAEDCBC3179FAA6100 /* gdbstub.h */; settings = {ATTRIBUTES = (Project, ); }; }; 705E7B04E1FE3269939CC5C40D83CACE /* DBChunkInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F2AC6B33D1F207C23351293A0A281146 /* DBChunkInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7064D5DF4976B7F5D00D0B07734180B0 /* fterrdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E65C6009E97AD1F054B35476E2887A /* fterrdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; 70AFFCAC4CE322C09CE2DC0E3E7EA378 /* NstInpAdapter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 213E27CCA1F2F1BE726697432009E2C9 /* NstInpAdapter.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 70B5E10C6A4B9C465AC2BE6C2767396C /* Transformable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E7771F7C5B8F14F803F19FCEB39CD0B /* Transformable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 70E25FC6BCB677FCACF3974715396E5D /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 68776D658C9400B8766FD395BBD08F63 /* Platform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 70F8274ED7EAC15159077EA63E371A20 /* ftvalid.h in Headers */ = {isa = PBXBuildFile; fileRef = 191702D253506FDF5363FBCC895772FA /* ftvalid.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71090B7AF02512A3B3624247E31E7431 /* NstBoardBtlSuperBros11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73ECDB6212A48398010C7457141CC1B2 /* NstBoardBtlSuperBros11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7116D7C10DB23AB14A29E3E244C7D192 /* pshints.h in Headers */ = {isa = PBXBuildFile; fileRef = E95A0C3C6E26DB4E26E12433BE937DB1 /* pshints.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71818CFECCB549FFE9A56EFC73229B2B /* NstBoardKonamiVrc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AEB306B4037EA4CACDF06823F9F7AAAE /* NstBoardKonamiVrc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 71A5939665A6E80DDE1C1A3AE2CEBA27 /* F3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = EEAE0F78E10C6AB8250B4FCF2FBB074F /* F3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71899F8677CC515B1F31599325E0A396 /* GLideN64.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E4AAD82240CB7384572BAC20D31685 /* GLideN64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71AA41AE32E777F4B006FB4081D4861F /* ftlcdfil.h in Headers */ = {isa = PBXBuildFile; fileRef = E963BB1D802954605DE54BEAEAA046C0 /* ftlcdfil.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71C0A367EA0BA6BF86EE30AD3006E1D0 /* CP15.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9BFC6434EFC695B07E4DF1FB6E56F95 /* CP15.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 71F165CEF54AAF42E33E0A441214C7CF /* wst.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F279CB05ABD733ECA41FFA2F19A00B6 /* wst.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71F48A761E904B61058CFF99033FEA6F /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF571FDBAF68294C828B93CF7AB2606 /* SDL_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71F6A8B4B3856EB5415745A312B82590 /* NstBoardJalecoJf13.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E10F919F295AF23B2D729F89AA44145D /* NstBoardJalecoJf13.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7264B6C7620512CB91DD5A6E09E01DED /* TxUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = FEAE71533C82C752E7F1D21A99698CD1 /* TxUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 720FCA30A4C182ED051E744734F1C428 /* Parameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C1FB014388E9D1E47EB7DCC0CD0682 /* Parameter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 725659474D79DE81422134C09E0F1388 /* mbc3_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B4031DF8DC8C7AA073B8FAD5893715CA /* mbc3_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 72B1945C2E80532FCF4F8003F26CCC0A /* NstCpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 32C6794E2F48E8D40B8DA4F984505F38 /* NstCpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 72DD532BE9D0102D2688E11ACACFF362 /* libco.h in Headers */ = {isa = PBXBuildFile; fileRef = 4963CF582BB4AB9E1079BB9ACCA4C395 /* libco.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7324ED114581AE7281851FCD2DFE2220 /* audio.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CE8685D1C71D8EB010FB3B97ECE0634 /* audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; 73292E5A2AC3196B5409A496BB5C5541 /* PrimitiveType.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56244C2165C1707D7E72E9B0F3441A1D /* PrimitiveType.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 732F3A5D226D0D463C9027476C9F5E60 /* T3DUX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 931ECBBA73F768F5570C9A96C3F2C003 /* T3DUX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 732E8D78332799826AB444440DECF472 /* DepthBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 033421C4854AC34E9F0A5215AE7F3AE4 /* DepthBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; 732FD811EC8A5BA0B28708137D0A45D2 /* logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 420E3047C00A76F43CBE5EDA68BCCEF1 /* logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 73386D5E90D47431798B1A5A736601B7 /* glsl_ShaderStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E7A6E2D2600BE5C4EEA5BD6FF1BD0175 /* glsl_ShaderStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 733CAD39BDD26699F4C7A5D0510FC951 /* F3DZEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B432CCBAD2A0A59F5EFB878191A511 /* F3DZEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7372BF9BC203CFB23F3EF1A9742FAC93 /* NstBoardBandaiLz93d50.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7103DD1615CC67B6239304B8B4BE2F06 /* NstBoardBandaiLz93d50.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 73884246E8506A0D452A96718B443133 /* vi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E5C87C85D80CEFECDBD846C5507C244 /* vi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; 74206933424C0DC3CB8FAE979E98F7E1 /* NstPatcherUps.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D14E9FD4E7425DDD45906CDB6CEB7EF9 /* NstPatcherUps.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7436F86B9A9CD831006948764C9DFB72 /* MFiGameController.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 226C662B43ECEB12F37DFF9C36643D0B /* MFiGameController.deltamapping */; }; + 7455DE6718E881615E637EEDE40BF0EC /* dummy_video.h in Headers */ = {isa = PBXBuildFile; fileRef = E2FDB4BB627C5ED4C383AB3D3EB64DA2 /* dummy_video.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 748B90B53FC59F6E0D46DD13857498F9 /* check.h in Headers */ = {isa = PBXBuildFile; fileRef = EF146F5F4C23AB7CC20D0F4F40286379 /* check.h */; settings = {ATTRIBUTES = (Project, ); }; }; 74B438724E9EA3B46DED43330AFF691C /* sdd1emu.h in Headers */ = {isa = PBXBuildFile; fileRef = E33F73E03E8DBCB9A561F9D7082C8EB3 /* sdd1emu.h */; settings = {ATTRIBUTES = (Project, ); }; }; 74BD141762B0C89C185D3ABE65E58448 /* NstBoardHosenkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1D48E1464F25EE094AB21C99E9CDC8BF /* NstBoardHosenkan.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 74C1EC2D9E5FAFAE8A89018C1B79FD90 /* NstBoardBmc1200in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E9B5611EF6F1B6A753A3169A802B611A /* NstBoardBmc1200in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 74C7BF54656C67DEB87098CB74EBFED4 /* UpdateRecordMetadataOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72B1BA0104CB37793A0BEBF5E0F3FFB8 /* UpdateRecordMetadataOperation.swift */; }; 74CF4098668D8E59F2F415F232C54506 /* NstVideoScreen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75C95A2D2A55102279FEBE572C7A8FB0 /* NstVideoScreen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 74D859213990282C35C19B6D2313E0E8 /* RSTOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B9083EB242665508C97535A7311874C /* RSTOperationQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 750A3EC4EB2B4BECA8FBD1FEF42CA4B4 /* svxf86nm.h in Headers */ = {isa = PBXBuildFile; fileRef = 593847BA38E9D8A068903E6A731921D5 /* svxf86nm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 753C7E6021A90C69A401D819AA4460D5 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 42052734B8AE23EA17D468F6CABDCEB7 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75909BCE4368ECAC28AACD2C2CBB5682 /* idec.h in Headers */ = {isa = PBXBuildFile; fileRef = BEDA7F12E500CF17988D000DA2BF93E7 /* idec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7593F5DFD1D1C51D15BC5D4B95DDAA11 /* tttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 021A9462364AFC38855FC545DCD6A6B0 /* tttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 75B06D656B71606BD4C8995494313BDE /* PropertyGroup+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E354663056D2C09F9EBDE7F3F20EF4 /* PropertyGroup+Harmony.swift */; }; 75B85A307530462BEDD1925293E1B335 /* ffmpeg.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D8F9B8A6D48D5044338BCB2BA139DA1 /* ffmpeg.h */; settings = {ATTRIBUTES = (Project, ); }; }; 75C08B83D5F3E9E679CE2F1619FEF158 /* NstVsTkoBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A36271D99C74D00F39DEEE122842B93E /* NstVsTkoBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 75D1998BA476E5CDFD8EB74BA3937628 /* TxImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE1843CA9E6FD7C78006C01BE4BD5C55 /* TxImage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 75F7A8F8126A9FE9B693F50E46A15BDE /* NstBoardKay.hpp in Headers */ = {isa = PBXBuildFile; fileRef = ED915D94AD96A862B32BB7B60A454CF2 /* NstBoardKay.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 760970F7137AE6D811FF1CDB6CC2D871 /* F5Indi_Naboo.h in Headers */ = {isa = PBXBuildFile; fileRef = DF93E143D1E16A5D0994F45965CDDB74 /* F5Indi_Naboo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7600E2531605A2A26F7F3F1DB55B392C /* F3DDKR.h in Headers */ = {isa = PBXBuildFile; fileRef = 47298EADB145DA1C5DC8A5C800E652FD /* F3DDKR.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7676FAAA46D6F17DD9B7DD349475C457 /* Packet.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 26031A010DCC281450512C72B41CD425 /* Packet.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 768B2C4AFA4085D689670C5E4A2DC664 /* rumble_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 55532BC2B4B4E3B9BF96424544F7A510 /* rumble_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7694BBD406736AE9B3A9A54680E1BE83 /* iniparser.h in Headers */ = {isa = PBXBuildFile; fileRef = EAEC7554802DE0A7D1588B6403024167 /* iniparser.h */; settings = {ATTRIBUTES = (Project, ); }; }; 769EEA7F82C3927B9C262C740EF80DC1 /* GTLRDuration.m in Sources */ = {isa = PBXBuildFile; fileRef = CD370B63C73F83203B239D65A10BF44A /* GTLRDuration.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 76A404D815A496FF472714B9493FB2E8 /* NstApiFds.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 21AFB40E9F20886BAC51721D47518A42 /* NstApiFds.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 76AA012877710AB1F164AE7B49DD098D /* NstInpPowerPad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C24FF4FB306EA08CFD23D4A8DD8B6C7F /* NstInpPowerPad.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 76B6F62D2ED822CC7A8F81EA66412F02 /* F3DEX2ACCLAIM.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A57A0F7B6EFB30D8800FFBC3A0FD7A /* F3DEX2ACCLAIM.h */; settings = {ATTRIBUTES = (Project, ); }; }; 76D132D024B6A52E4DFDD31827EBE0FC /* VideoRendering.swift in Sources */ = {isa = PBXBuildFile; fileRef = 961ACD2164700D5FD67F6014EB6E2CCF /* VideoRendering.swift */; }; 76E9947CFB8C27CE5BC16E70BD417614 /* PlatformConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B426B703A1D05906A76F9144E7FA0433 /* PlatformConfig.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 77338E935B4CB0FA16154F8F845B9F74 /* NstPpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2769336E22CE289D3CE9EC20CBF91610 /* NstPpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7736A8964115F20A8A6F09230ED8814D /* Time.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4293F313CBA439948FBF2F6EC87D6390 /* Time.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 77708024733DF3B64F127AB9D0E5C5EA /* RSTPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F23CEC53278E0CEB1614056B5D4F8C /* RSTPlaceholderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7793407AABB80F7FF59D7C5516D14FD9 /* ExtensibleEnums.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13D3D42973146D80916E32B3BBE3D0A1 /* ExtensibleEnums.swift */; }; - 77A85C92FFB254C86D986447BE4A3853 /* glsl_CombinerProgramBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35B53A6EBBDB14342ACBC6EF87C2FAFD /* glsl_CombinerProgramBuilder.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 779506F02BC9F1B6D03763D7F639DC9E /* gb_cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F8AB3F41F84C94BBEED8C22E4E61BC /* gb_cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7818851D20DA2D669A8C12B16316D10E /* NstBoardBmcVt5201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C74DB15319EBC3307C2EB1ECF5912CD9 /* NstBoardBmcVt5201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7836A137F2D211F1D9314D9FE4EA0D66 /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A33B3B4BD1E78794258F5AD6D999C880 /* FrameBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 784A5769DDE6CB551D21EE19FDBE91B9 /* GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E4294CBF5BD945DE53BB04420F881C9 /* GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 784CEFF3C72E1AF35D75B1E0B1034A63 /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = ED6B167EAADE8506F1864999731E6AD6 /* pngwtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 78560D7AC30CADA128CED2F38DB0C367 /* NstPatcherIps.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6E3F8E9A443CB8805EFE8175563E893E /* NstPatcherIps.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7868B35569F0B0197EF1FFD2D25B1BA6 /* m64282fp.h in Headers */ = {isa = PBXBuildFile; fileRef = 299389570253111A7FC0B2AD359D7A1A /* m64282fp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7876D3F7521DB44C406A743CF81BEB47 /* NativeActivity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E8ADEC5003627F607F9CB7482F3C79DD /* NativeActivity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 788B83D78AB9E0EFF886B1FEB9295554 /* obc1.h in Headers */ = {isa = PBXBuildFile; fileRef = 949E3958BCE1694E83B41187962E38E9 /* obc1.h */; settings = {ATTRIBUTES = (Project, ); }; }; 788E19683756F921D267319C0BC8D9D4 /* EEprom.h in Headers */ = {isa = PBXBuildFile; fileRef = C769B8DF9FD73419F7A8CE7F4C7192F4 /* EEprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78E24F2CE9FB7845AE6DEEC34E9D9366 /* opengl_GLInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 86EF6CED706D9CF50812AACFBA3D3205 /* opengl_GLInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 78C5E2360BC824E2EBEB025EEBCB2DD1 /* vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E1FCF713C18921783474BD5B489966 /* vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; 79168BEC654655F20E8D99687F8B42CD /* NstBoardBtlSmb2a.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD3757C91C65FB4E4EBAB668470109FE /* NstBoardBtlSmb2a.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 791ECC26E09854BE01A5356B8FB4FBFF /* skipsched.h in Headers */ = {isa = PBXBuildFile; fileRef = 592333B6A8CE7E474E19C151AE976FBE /* skipsched.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 79213C390062FF156D05A120E12D7F28 /* MemoryStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 0663F28B78D5B488BBD1158305953BF2 /* MemoryStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 794676EE5CFC0814F95A6272B9BDF48B /* CRC_OPT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E535808FC30F7474AE914FD2270A2715 /* CRC_OPT.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7968A4349AD6A68E324F0699C459A344 /* regcache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EBDA149FC9D979E9EB1846B7E68B274 /* regcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79B87F9346B983172FE030D9C0584BAA /* hle.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE1F9090B5DA68190D7B03CCE5E4629 /* hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; 79CB4C69D5B62C1F128632103768629D /* Listener.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48316C3FF62C94776726A1CAD59F2C64 /* Listener.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 79D1DBF8A2B975AA6502E3E0E19627B4 /* NstBoardBmc110in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8693CF6D0BA1054AECDB9EBCB129A363 /* NstBoardBmc110in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7A05BDF6F0EF1F8EF35BD85D32DA9A84 /* RSTLaunchViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 816CBA26E3940C8402B8EFE63E169294 /* RSTLaunchViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A2438E3C2548E6C6B9046875E06F5DF /* TxCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E8024B293C9555F3BBBE264D95E1A8D /* TxCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A424939FB63EB84D99407F5FAA957DA /* glsl_SpecialShadersFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91142883C9B61CDABD669F132E23BA6B /* glsl_SpecialShadersFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7A4517ACA4CE707769476DE0A8FDFD16 /* N64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAB9AA348D576D9AF8A76D798AF0A209 /* N64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7A4B501942CA119ADB0CC7E54FC735B5 /* RSTCellContentCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D9ACA67CBB81C221D9E4E05F8646744 /* RSTCellContentCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7A4F11E768C0C86EA95B2AB424A4377B /* OGLRender.h in Headers */ = {isa = PBXBuildFile; fileRef = DA9C9A6D30671F1FB5F50BFBC1D1DF0B /* OGLRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7A7260BF99BC683C9C43C76B8D20DE57 /* NstBoardBmc21in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F11EA13357D6F351A1A191DA33451B01 /* NstBoardBmc21in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AA70F0483FB790115C42CE9CF815B99 /* game_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 5536CF5E11B5E15ED66757BB394C8694 /* game_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7AABDCDC1FB95E91C935F89E00FA89DC /* arm_jit.h in Headers */ = {isa = PBXBuildFile; fileRef = F8211C9AAFD5EAFF6AE32CAF702CC376 /* arm_jit.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7AB3BF79F79BAFF5769C3A3CCC19AD47 /* Shape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D13626EE69FD1C7B6C4F9D290D2A71BD /* Shape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AB733B4CBB1E984040DF7D988D3601C /* N64DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C1093F4879EA7F32702CA47E35814B /* N64DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7AC069D617A084BEDA70B1D9B89F6470 /* NstVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CAAEE81FB5DFAF21D63A74329E6F4E9C /* NstVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AD81CF4EA345F14D64ABB308812984D /* TextureFilters_hq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = AEAC4A2D514CEA5F884C8B989B177FE5 /* TextureFilters_hq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7AEC6E1A5BB3B489183A23AD3AB8D7AE /* FilterChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A2EA6E13FD790527F86EB2CDB1E402 /* FilterChain.swift */; }; - 7AED12329BC4A94E43D7FA7FFFA4A8A2 /* Ext_TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E27968A4F0A9279BF48A15BCFF4B8 /* Ext_TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7AFA40D6E7662FCB31023984FC8A5540 /* NstBoardUnlKingOfFighters96.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F1CFEE2E88E05706A2CB9A382C9447D7 /* NstBoardUnlKingOfFighters96.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B291FDF52E0F7FB64A9FA0C4A88E848 /* TextureFilters_lq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C1C0E46794ACCFA1D49F4F9F7418C1 /* TextureFilters_lq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B3CF4D5A06371FDEC86F2F0F1C4CE56 /* lirc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C95081CDA9074D9730BD45D716C934D /* lirc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7B594E7B42D038F5C9EAB636CDDCAEBE /* NstBoardRcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D4557C24D5CC84F9F3B2999C33F9DE91 /* NstBoardRcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B7E2677824409DA731B3FAD16DF422A /* TxHiResCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FCA829A51AC7996EB15AC022B591C7AE /* TxHiResCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7B85E337A6D06E8012EC891088CEB9FA /* ARM_InstrTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E058DDD738AC1B8E1A7C13BC1DF630A /* ARM_InstrTable.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7BAFA827F5D9B3096BB2A01F47BFC36C /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = F231C512D2B9D8E1FA081E1059B3D3E0 /* zconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7BD0C0DD3F3DB5369846E07F7FA5B186 /* NstBoardBandaiLz93d50ex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 743D60A80C02E747A93C054B7CE7F1E9 /* NstBoardBandaiLz93d50ex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C127E067D6F3B7F1C96AB3813393B8B /* assem_arm.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D9DAB0BA1335AAA8FDA3EB6A06284D7 /* assem_arm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7C223CCCA8FDA2AFC24233CF2C80D507 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 61922816ADB3E7C4600DF77D3B382727 /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C3B24BE5F539E4C169AD6B54E548B18 /* ftadvanc.h in Headers */ = {isa = PBXBuildFile; fileRef = 97A529B5224544C993C7547C6A313CCC /* ftadvanc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C287B127C9BA14B075C120EDA0AAC19 /* FrameBufferInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A7607CB2BCFE4453A1188585644330 /* FrameBufferInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7C44081096D7BD7EC16DEF322D7DC5E4 /* DropboxService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D254660B89B2DF06F349F2BC87B3FEFA /* DropboxService.swift */; }; - 7C6C12C8C35F1D6A2B00AF837C71404C /* readpng.h in Headers */ = {isa = PBXBuildFile; fileRef = BD84F06A10C7F36232CEC327446C64C9 /* readpng.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7C81CF6208DCFD04CA626E3E81DBD14F /* UISpringTimingParameters+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BEC3A5E5A6DF3FF717E11AF5286D93 /* UISpringTimingParameters+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7C85EFFC4862D5DD572D67FB0D67A8DE /* NstTracker.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 510A47958AB211D60455C0DBFCFF190A /* NstTracker.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C8F536BB5772737F608061B0FE4C7B3 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = BD7F218037A6C72ADDD5F262DAFE2D1C /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7CC39EEEBA01397C44CD70FF1D855E9B /* svpscmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 86BF9E53BBD7D649033BB1F156870DE2 /* svpscmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7CC91E5E71DC76D48A82BC591ABA6C87 /* NstBoardBmc31in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 813D0026660BC9FA9BE9781E84D1F4A9 /* NstBoardBmc31in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D13C492B14BA0EB2DC0783DB4150ED4 /* L3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C35BC9F77F23B687515FC8958549CA1 /* L3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7D3F6F6AF8ED6A7D7EC99CD1C094A779 /* TxQuantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 164BA6410D467508F284ED6B400D342C /* TxQuantize.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7D42DA555697670FC84BBAB5492696FA /* pcap.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D27F1218FFC3EC9D27CAC71BCFD4925 /* pcap.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7D6640DB587F29263DFD54F344B9AE8B /* NstCartridgeInes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 00DC15146753301043922CC27C6DB1EC /* NstCartridgeInes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7D97A8AC6EBC128DB5B1FB60AF8F28CE /* TextureFilterHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FC5602035B9E19D656976E460F7F90A /* TextureFilterHandler.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7D9D60386306B439551BB071CA066817 /* DropboxTeamClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8364432B8E72D0344D921A2164F73693 /* DropboxTeamClient.swift */; }; - 7D9FFE5C38B92C9509830FA62BDCF8E8 /* cp0.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C8F13E35C588F34CD7F1A313360A79 /* cp0.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7DB35723D0CC13AE137CAE668924723F /* BitmapProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3949595D020E5A3DAB73E06EEB13CF19 /* BitmapProcessor.swift */; }; 7DE7708815D0EA629D5716B9F1A6809E /* Thread.inl in Headers */ = {isa = PBXBuildFile; fileRef = 6F88E235E4438225B920C3FD4F4FA99E /* Thread.inl */; settings = {ATTRIBUTES = (Project, ); }; }; 7DFAE2171F7DF71CBFDAAB36126503A5 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9E8347629FB94F0A3A23F8ACE7DF87 /* Team.swift */; }; - 7E22B821DD9D7D2D539E9F0C66C15013 /* ftlzw.h in Headers */ = {isa = PBXBuildFile; fileRef = 157434C4FA16895B0C6EBC0D02FAECF0 /* ftlzw.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E20AB44073FB30023AA9153EFD685AB /* ftbitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = E94F624FEBCECA3D447A42E223613A20 /* ftbitmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7E2636950C8A8517A78941A3FC7A214B /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A5439881B47C2E816AF6F014B4832 /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7E27C0AA8C72EE528649523D6A240305 /* NstRam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B584A470AF957ABEDF9EC1339C950355 /* NstRam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7E5EB7A39652E32E3CA0F3D93856E2EC /* ConflictRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4DB7F5247E41A8DF960FAFF4F52DF47 /* ConflictRecordsOperation.swift */; }; - 7F01651585FCAE415EBDFC808DDFB5F7 /* TextureFilters_2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4848223D118C90C9C8D28CB320ECD889 /* TextureFilters_2xsai.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7F184462B0587A9FA3F4976A6E306DBD /* Parameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 772DEEE3A8A1AA94502EF6098107740C /* Parameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7E82D7757D1F185509FB6060B26DF2F8 /* Keys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14603BADCCE95A5E507021ACEF7693F /* Keys.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7EC161C3C3EDEF6DEEB5A0D8C2ADEF8F /* TextureFilters_hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEAA6B8E9680ACB06BA0279C3ED990AE /* TextureFilters_hq2x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7F0D6BBAB702962744546B41F32F0C6C /* joybus.h in Headers */ = {isa = PBXBuildFile; fileRef = 4495365E36E72B1DF9F8324A09B6DCB1 /* joybus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F3CCE07D4231CA249893A8C0185C32B /* ftmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 94CD261951849F1D22579127673F3769 /* ftmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7F3CDB6BD153FE92FC5A758E12830D3B /* NstIoMap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5033ACF3304F791248B9A86346AD675C /* NstIoMap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F440752F983F37E80C881B3F0F601EF /* SoftwareRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB043895CFC330790DEDECC0C41BFEBE /* SoftwareRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7F6E6984730D00B2BAB26E09C2B6F51E /* GTLRFramework.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ABB33F6C316C0D9CF3E24882D926C51 /* GTLRFramework.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F6EF2CA1770F1DE0026ECAA0E521101 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 16606104B7D23C541D75E1D9CACB2862 /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7F8FA5EECEFA49B54B06466750976AF8 /* NstBoardBmcGolden190in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A39CE9386E2F879AC7F871D7209746FA /* NstBoardBmcGolden190in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F98B4938B45BE01E8D3C51CBD0366B2 /* glcorearb.h in Headers */ = {isa = PBXBuildFile; fileRef = 068F16B4A783E37E5CD5C1D3B713CEF0 /* glcorearb.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FA6A8B8D22767B49932301232D6EDED /* dummy_video_capture.c in Sources */ = {isa = PBXBuildFile; fileRef = B331F7660FB59081A99ADBA1AF706462 /* dummy_video_capture.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7FAE093FA0A7715EE8D0C26E07586588 /* NstTrackerRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 71C2F464A8210B73F02BF45EDE6E1EDC /* NstTrackerRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7FBC6E3BDC4800C426640309DF2CBEE2 /* UICollectionView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 966650603C914F8788C0B0BF65D7516D /* UICollectionView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7FBEC1C86E145CE63217FB4A282FCF85 /* svxf86nm.h in Headers */ = {isa = PBXBuildFile; fileRef = 593847BA38E9D8A068903E6A731921D5 /* svxf86nm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FD036F2F07DB42BCC6B98FA7CBD2E87 /* Performance.h in Headers */ = {isa = PBXBuildFile; fileRef = D80E4A5FDBC780E4358E55866C35218A /* Performance.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7FD577E22B1E9D0B660E3F5F0945EC97 /* GoogleAPIClientForREST-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C943FB0B36A40A6ED1622A947B642B5 /* GoogleAPIClientForREST-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7FE93BDAF8E862CEC574A1F24B872469 /* VI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEF8E98B3647EDE8533C51A14A31D99F /* VI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 803D47C1EAB8100785D866D0E5579DD1 /* ARMInterpreter_Branch.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CE1063F98D054EF4717F2C3004607F5 /* ARMInterpreter_Branch.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8041BC3728BD95C119B6B152758FF890 /* NstApi.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EC1B871004801A1E40D5F78C6B08A719 /* NstApi.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8042AB8320D7940DC3050337B4493533 /* TextureFilters_2xsai.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4848223D118C90C9C8D28CB320ECD889 /* TextureFilters_2xsai.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8043A7E0B334D03CF18AF57B63B8B407 /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848F3AD32B7A8F7F08945CA3643BE446 /* CoreFunctions.swift */; }; - 80490FACDFDD5058FE342448A90F6124 /* F3DBETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 398B0C10962B06603D1218A0BFEFDE41 /* F3DBETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; 80531DF27FAEB5E6120BDDD6681434C2 /* NstBoardTengen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 53B591BF7B60187B760A42DB71431BB9 /* NstBoardTengen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 80569522185880531BB8F1FD08C52940 /* rumble_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 55532BC2B4B4E3B9BF96424544F7A510 /* rumble_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8058D7B84C65C8F832FB61B0A1D05F76 /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 81586D54535F45B193EF58A3F9A1B704 /* png.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 805A1E28389AF5FB29FC09BE6C8B1F0A /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099938FEDA9E30DB8F316FD35D3A7E39 /* Account.swift */; }; - 80857C1D971EB5C3A2DEB08EBB6A26A9 /* flashram.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE08C498FFB93AC32DDE6D957B5E24F /* flashram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 807E0082550BA264BABB572647074157 /* ftcalc.h in Headers */ = {isa = PBXBuildFile; fileRef = F87EFA6D54FDC38E1D796063498DB67B /* ftcalc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 809CC541557F42747F35E56C4A8BA2E2 /* NstBoardNxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E42E5A99DAE876C1FA977F57560BA47B /* NstBoardNxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 80B026B040C9F6194623AEDA389C417E /* svttglyf.h in Headers */ = {isa = PBXBuildFile; fileRef = 224EC23CB708246C666EA6D597EF0933 /* svttglyf.h */; settings = {ATTRIBUTES = (Project, ); }; }; 80C3AE20C10237C9D0BEE1E040703645 /* FIFO.h in Headers */ = {isa = PBXBuildFile; fileRef = EBBD46833EA1A4C5282B0F087FA83437 /* FIFO.h */; settings = {ATTRIBUTES = (Project, ); }; }; 80CD4343EDC4946D43FB62BCE1E7D8FC /* tima.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D5641AF5A10D2A2EBB4AADA120BAC12 /* tima.h */; settings = {ATTRIBUTES = (Project, ); }; }; 80D63236D264DBFE454A62486C2EF1DF /* Glsl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1004AE0C4739724244ADA46A913108CB /* Glsl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 80E2A90DF2C7F5D8D36F4A37F0F6CE03 /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FA37688E22E33D15DFB26A4571F6EF /* pngread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 813791FFAE99F2EA31D525DCF0B0DACC /* Performance.h in Headers */ = {isa = PBXBuildFile; fileRef = D80E4A5FDBC780E4358E55866C35218A /* Performance.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 80FBE522082BF7FDCC4F133E5110CE10 /* TextureFilters_xbrz.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E950B4BF47AC526A4464F3994CA0BB /* TextureFilters_xbrz.h */; settings = {ATTRIBUTES = (Project, ); }; }; 815861D1FCD25665B078C7ED9E6D2A6A /* NstBoardBenshengBs5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B129D85783E2A83AB72F44B1BF92B9D9 /* NstBoardBenshengBs5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8171418ED78BE2744E4E374105338AEF /* NstBoardTxc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 64B42722A5333410D786C90D454E41C8 /* NstBoardTxc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 81C902564DEED03987D81EB5EC4E2C21 /* F3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE4827A1488FD5FE6F356A0EE7D96A3 /* F3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8229184EC4951470007A0AF03871F122 /* pngmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 0056ECA9D4904EC555DDDB7A44A29B9D /* pngmem.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 822C8AF6FE4E429A7E3DDE28BF009AAB /* NstBoardTaitoX1005.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94AE1145010E024A90A0B90A56727300 /* NstBoardTaitoX1005.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8245550C4876E05DB7BB650B1FB1A8B0 /* TextureFilters_xbrz.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E950B4BF47AC526A4464F3994CA0BB /* TextureFilters_xbrz.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82460FA9F811A6A3A1EEDCC05942E397 /* ftbzip2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FACC0B21FDAA0F253D9BB7A5062C4B0 /* ftbzip2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 825DF2D1ADB787B6BBAACFA7182B3325 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D7821E2CE79FC4E3BED960866CD961 /* types.h */; settings = {ATTRIBUTES = (Project, ); }; }; 82665248F8E77B7253C5F018E0B1DC5F /* NstStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94393ABA91B101430546FBAF247742E1 /* NstStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 826BE1A486465868CED022ED981B0BEC /* UIAlertAction+Actions.h in Headers */ = {isa = PBXBuildFile; fileRef = 47D78517301F4912E4BBA2A056C253E1 /* UIAlertAction+Actions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82BA8911072FAC8A89CE76596ECECAED /* pif.h in Headers */ = {isa = PBXBuildFile; fileRef = AD18B91FAC4B2CA8C394D0D1EF24808E /* pif.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82A2EC55FF6F876EEE55932C3948728A /* N64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47967D3CF2D6A2095CD6438231F82260 /* N64.swift */; }; 82BD5D188A75988826E7379FEB58DCDE /* NstBoardIremLrog017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 00B03766966DBCB90906DC6BD97E2035 /* NstBoardIremLrog017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 82E1A8D140FD2E1A30BC5F8F4B19F8BF /* SwiftyDropbox-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1549464F3E4C6E80951115BA80C87C /* SwiftyDropbox-dummy.m */; }; - 8306FBE58766AD3DB7FC24A48C822C5E /* ftmodapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A23D7BFCABFEC33689D884FE6CAB2A /* ftmodapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; 830F5B7567E178151EC0E882FA0ECB5A /* hermite_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA71E73B1A809C3FFD98BD1BDA46314D /* hermite_resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8310901E730FB822677EDAAF25893BE6 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D49431EEA4AD3FC2E04F7F24D666EA6 /* DispatchQueue+Alamofire.swift */; }; - 83241BC0C8359ABCBDE971CD11FFE9DD /* mupen64plus.ini in Resources */ = {isa = PBXBuildFile; fileRef = CAC68C48D5AACE9BF20D8B880DA33BB2 /* mupen64plus.ini */; }; - 83569BB6A8281FBF8632670B28C33C98 /* mbc3_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B4031DF8DC8C7AA073B8FAD5893715CA /* mbc3_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8386BA8A923E2E72C8229BF7CF7C20FA /* cheats.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C0F1623BBDB08363E8394AFBD38B87E /* cheats.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8396AC5DE2BB1D261F147086BBBEE743 /* GBI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCF3F649DFE2BBABB7DD4DB64169C38C /* GBI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 83A09D122123E6C2815459DADEF9729F /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = 883B872956FB7C28FDBB574888357A62 /* GTMNSString+URLArguments.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 840C6DD7629F231D0F45DD20C031A6FC /* glcorearb.h in Headers */ = {isa = PBXBuildFile; fileRef = 068F16B4A783E37E5CD5C1D3B713CEF0 /* glcorearb.h */; settings = {ATTRIBUTES = (Project, ); }; }; 840DC676DBE4407A3E68353CEF3B3BCB /* NstBoardWaixingZs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 13A6DB004300A60DA3D2A6DFE73CCDAC /* NstBoardWaixingZs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 842560FEB95F73A3E10F716061E361A6 /* ftsynth.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE800F01854521394EAADE8A06F1AA1 /* ftsynth.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8433AA2398A8DBAAF7B367AEF3C636C0 /* UserDefaults+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = D030FA73AD1DA503048D364090F865A1 /* UserDefaults+Harmony.swift */; }; 8434E5B141D1791B363651A182CA1B5E /* RSTCellContentDataSource_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0CBABFAE419A9E2AB84F2A8EE7B71A /* RSTCellContentDataSource_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; 845473EEBCE88EFF348390D4C70EDA4E /* NstBoardBandaiKaraokeStudio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 97F73835395FF3DB0096CD155B20FB9F /* NstBoardBandaiKaraokeStudio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -920,44 +881,51 @@ 846C1F6DB0F553F276ECB598E7A84AF8 /* RSTSearchController.h in Headers */ = {isa = PBXBuildFile; fileRef = EEF4C54780B7CB8C5DD1FE7BFC88A8D5 /* RSTSearchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8477A8F693A9336DD44C78F069BAC322 /* RSTNibView.m in Sources */ = {isa = PBXBuildFile; fileRef = 65DF8E0913BA8941185496F1B74F7D4E /* RSTNibView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8486CE333AF98530F574C3B55DC565D8 /* TouchInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D5205D694ADD50234921E3DEB5D957D /* TouchInputView.swift */; }; - 85168B84D1BC8AC3215522F298FB08B9 /* opengl_GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C3DAEC5A0976AE04AE5AC97395DF48 /* opengl_GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 84B63AF1BC14C6406DF954CA68468FA9 /* L3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9531D676E6CBCD44E92FD1148601D0F9 /* L3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 84B95393C2EFEB1D75B9A12B3989B9B0 /* Textures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C888A9E68F5D9C40535BB25A042E10F /* Textures.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 84BA5D33CA8962FD25DB1702243D13E8 /* ftmac.h in Headers */ = {isa = PBXBuildFile; fileRef = 84758A5917B6274B633D5B6A3A3E91F9 /* ftmac.h */; settings = {ATTRIBUTES = (Project, ); }; }; 85290514199956D820FB90C92DBD0002 /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B7A2F207266496310F9415852A1EBD7 /* Collation.swift */; }; + 85329C6EC0EDB240C9FCA4766579353C /* F3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E1156572BD531C3316B572C296BCF01 /* F3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 853712F7ADE0542EB49AB2971C13F4EF /* RSTArrayDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BABD1CEB4B6CA6AEBC4C4B2ED3B1C53E /* RSTArrayDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 853B3CB7F2FCF1BEC65857D83C521D64 /* m64p_vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = E813BC0822BCCFFC9C89EBE5DAAD7F24 /* m64p_vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 853AF0F4F9B81FE498CE8D0A912E4528 /* pure_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = A24C851DBA65EF8E8469317673E6CCF4 /* pure_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8575331E06CB4DA99967DE5301E95E1E /* glsl_CombinerProgramImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 630D82E8861EDF03C0AE64781235E207 /* glsl_CombinerProgramImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; 857B3B04B9AB4B94CC5BB714EACC9290 /* RSTCellContentChangeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F188C4FE40251B362A44718243733E /* RSTCellContentChangeOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 85CCCE40DF1323C9A271D20D29AD279F /* ClipPolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 414687B042C1DA8223948CAE5D99FFA8 /* ClipPolygon.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 85D1D258236F9752FEFC767F65EEB5EC /* statemanager.h in Headers */ = {isa = PBXBuildFile; fileRef = C32EC5252A036254058CB744DABBE87E /* statemanager.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 860523F1E62B9AC9951E5F4D80CE1614 /* ftconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = F8EB681067B1016B70AE4047A7C916B9 /* ftconfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; 860AC74038BF3ED5C0549CBE407D8710 /* snes9x.h in Headers */ = {isa = PBXBuildFile; fileRef = D10EF252E11807FB1EF1F7E9A2AA502E /* snes9x.h */; settings = {ATTRIBUTES = (Project, ); }; }; 86248453B902ACEF5B80A6573B49E002 /* spc7110emu.h in Headers */ = {isa = PBXBuildFile; fileRef = DFBFAD2A751915C945CC42E5F0F6D525 /* spc7110emu.h */; settings = {ATTRIBUTES = (Project, ); }; }; 863BE8D5FDEE2E01FB3BEEE491392492 /* NstVideoFilterNtsc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04129B9A3BF487A2771D1CC76731FB37 /* NstVideoFilterNtsc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8645182969B64EFC83F6741F12385172 /* GPU3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D6B90D539713A20256FCDF0A27805C /* GPU3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; 86518CFE08809DFF384BF8C39CD7D1F1 /* Main.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B0518B00315F12AA09635E19BCD35156 /* Main.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 867358F09BCD4400D1CA1EE0BA100FB8 /* NstBoardKayPandaPrince.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4E6419448B960F583D9AD9ECC8EC8B7D /* NstBoardKayPandaPrince.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8680F8EF0BBCDBEEE5A53366BB0E471A /* svmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F261E13B1AC030CBAE70448ABC2DD8F /* svmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8681FBFF0D1EDDB882F392AE4E41A6F1 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA7EC2EE415DCFBE44F9DBD4F92DB34E /* Archive.swift */; }; 86B1481F42CED72563EF3D695ED06174 /* NstCore.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3985853293A865E5A5336745DE4139F2 /* NstCore.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 86B7DA5117FE254BC0DDB8F75680BA2C /* pif.h in Headers */ = {isa = PBXBuildFile; fileRef = AD18B91FAC4B2CA8C394D0D1EF24808E /* pif.h */; settings = {ATTRIBUTES = (Project, ); }; }; 86C51CEFFE9BBEB96F4AB6BFE68CF66F /* NstPatcher.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D532E4E7993FC7D9C8EFA78B07605D3 /* NstPatcher.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 86CD84B7CB8FEBF8D8D1A612608F9A59 /* Roxas-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DC0FD4C8DB0253E8CE8EAF9C64DBD0EB /* Roxas-dummy.m */; }; - 86F7500498987E83E102E0A54716CFDE /* opengl_Attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 26E70D021ACF47CEAF06F4E652E5E81A /* opengl_Attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86D789A3A56DD97D1559152A9A3B1C12 /* dd_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = E5C78C628E0A4C0BA6411600CC689510 /* dd_controller.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 86D935D17CB549295AA3151698C9CC97 /* glsl_CombinerProgramBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35B53A6EBBDB14342ACBC6EF87C2FAFD /* glsl_CombinerProgramBuilder.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8715A171D63746B26EFEB4E6A617D39D /* WindowHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 195C083DB9E3337E066A78F5268E1222 /* WindowHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8734FEEFA6AB0AADF18FC751440B6BB0 /* SoundFileFactory.inl in Headers */ = {isa = PBXBuildFile; fileRef = 3489DA9596EA467FDF1E825220781E20 /* SoundFileFactory.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + 875AA280A37F31C2E6F4B7595995912B /* winlnxdefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC3502E8ED4D5961B6483AA4C0E4E65 /* winlnxdefs.h */; settings = {ATTRIBUTES = (Project, ); }; }; 877E7F8058EB4C948ACEBBD1A9285067 /* sa1.h in Headers */ = {isa = PBXBuildFile; fileRef = E12444C1B56F3412CF521B329577DC7D /* sa1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8794B9E7B8EB7EC0B49CE452CF778FC1 /* re2.c in Sources */ = {isa = PBXBuildFile; fileRef = BF31C2CB59DFB2355DA7BB8112A5D5C0 /* re2.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 87B6A15FF7D44269D8790FCF8C5CF865 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5267A220D47D998845DB51485386A8 /* SDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 878F017184AB29CD582B00F4088004F1 /* GBI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB6E71C991DC4BD501F509F16B2DFDF /* GBI.h */; settings = {ATTRIBUTES = (Project, ); }; }; 87FA058DD97C42DA27925CAD2E938C2C /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5246923E4069138B8F38B3EF8C4EE4D /* Users.swift */; }; 87FFB6022D77762DFF612FCA46DADA4A /* NstBoardBmcSuperBig7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EF7A8D3A9BE30CD2125BDFF488D22A25 /* NstBoardBmcSuperBig7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 880A3366BA936A92BBD568462B09612F /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76762292E978FDAACA63D856A9CD4F5F /* Async.swift */; }; + 880C713010255166F389C86EFCC2C9AE /* F3DZEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24C9EC3456B0473415C7E2A4BFE6D619 /* F3DZEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8820B3307828FF31991E570E29E170B4 /* idec.h in Headers */ = {isa = PBXBuildFile; fileRef = BEDA7F12E500CF17988D000DA2BF93E7 /* idec.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8822BE90BB2456E06F40F8E1A71F45C1 /* NstBoardCne.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2BAAE966AB05A1DCC9AA7B693D69F0D0 /* NstBoardCne.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 882DCF4B991615D8A07BC2EF7E84A5FC /* TxFilterExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8DC89DB8BDA2642C42D9CE6C493AC371 /* TxFilterExport.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8EB12D179F66D53718BBF3591DC3E8BA /* Export.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 886A18799553A19E810D2F7D688A4126 /* N64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAB9AA348D576D9AF8A76D798AF0A209 /* N64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 886D71BD1595A610E2D69A83AE6A70AE /* Input.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F0ED4F854563D55D1126B811F3E869 /* Input.swift */; }; - 8876A72AAE903A9038ECE97EB584FF67 /* dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = D407D2A6DD08097D10D2B1117A8635F6 /* dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8878CBC3764D97E0901DE9EE6E120490 /* glsl_ShaderPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 96095127DE4F08650D82A0815DD6DB1D /* glsl_ShaderPart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 887E940A7535BE33895D4B8CE44AE215 /* Combiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 608FE25E87FF01D7345789C49881295A /* Combiner.h */; settings = {ATTRIBUTES = (Project, ); }; }; 88BABCA3D1E4F2390E0378A2B5228631 /* NstBoardDiscrete.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F3748CCE76F2C007B8EF3A629BF5C282 /* NstBoardDiscrete.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 88C75EB63FE471FF7DE78DDFF0D81A5C /* m64p_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 155B6867D0BF5AD02F1B9394F4C2C8B9 /* m64p_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; 88D0FB6855DF889BF0C5BE417F016C3E /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 0402C21751DF9B30592DAA2E4DEAB0A6 /* SDWebImageCompat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 88D64384C3E6EBAD97D1FBC2AACBA92E /* mupen64plus_DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93058B797119FD95E8232C8C7B7BE0AA /* mupen64plus_DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8902DF0908579FE08E35AD6DD47CBC77 /* NstBoardBmcVrc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9469FE680E41D7D8C8AD938E3450532A /* NstBoardBmcVrc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8912B1F9BD9142C96BE6E0B401AC9C40 /* NstBoardNRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 37B489A0DEA4487857DEFF8A6A5237D9 /* NstBoardNRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 89163481E7F96A33F9E183759BD7D51D /* DebugDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A65DF9779DF20125011DEFB944B15926 /* DebugDump.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 892EF00353110A3E726F1D521FE0F452 /* WindowStyle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F01B391F7634E62F67997507B08A12B8 /* WindowStyle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8957E0BA7E9FF05452AE65211EFCD859 /* NstApiConfig.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3F7732EEA99B052D2425B1972ECED982 /* NstApiConfig.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 897E17C6F6C366137126E12E5EDC926A /* NSBundle+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BEF6E27DC400F7587941CD3E2668F89 /* NSBundle+Extensions.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -965,84 +933,83 @@ 89C3FEC2C51AC7DFCCAB05615111CD6D /* NstCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D24E88AD3320735A8600F142B16FD580 /* NstCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 89F637B6A72C84461E7E5E6395896B4B /* GTMReadMonitorInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D501AB9335B46D77142394E47A29319A /* GTMReadMonitorInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; 89FEB422E33FEDC7C1C20B9D953193F4 /* conffile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A54517246C22B36712CBF7B02E3BED /* conffile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 89FF6BA500EA4247A328E6A82D4B4065 /* N64EmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 124A9AA8BD80FF606241A3E34CBF4039 /* N64EmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8A2C15A083A63FC24761FE568CD44915 /* insertion_sort.h in Headers */ = {isa = PBXBuildFile; fileRef = C3FFB989E3545149939D3E8C7F5F16B1 /* insertion_sort.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8A5CB6F7F72B063E995EC0B2C2AF52E5 /* opengl_BufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24ED56596D00F9B9AD800B7FF30622F5 /* opengl_BufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8A6D9CDABBDF499C01CC1189E80A9D9F /* NstBoardUnlMortalKombat2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2DF776088C2711052EEF4C793C2B806A /* NstBoardUnlMortalKombat2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8AAC1B35CF4637F59F66E00C58F04177 /* ftmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 94CD261951849F1D22579127673F3769 /* ftmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AB5AE388CFE361067158BB1133641B6 /* CombinerProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 507AEE0DE905FE749721BA983355BC23 /* CombinerProgram.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8AD3B7AB59719794E86F41BA43AA9BB7 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C71C064E0F8E2D6A2B6E0CB4849BFC5B /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8AD7ED3262070702EA2D7772A7576F70 /* RSTCollectionViewGridLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F33D3A6F44894D367D99FF4F1A9DD9C /* RSTCollectionViewGridLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 8AF999E503CB06FBD4EEA0903D672F5A /* Textures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C888A9E68F5D9C40535BB25A042E10F /* Textures.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8B3242772776AB021A4F1971280E29A3 /* NstInpDevice.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BB9F74C7D96B11B6D1DA5E2E0B149EC4 /* NstInpDevice.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8B66EA933E91DB3C1A2F60A1E6839556 /* Graphics.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAF16778F14BDA46D135E62DF52FD5B3 /* Graphics.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8B6C38945E65F6164B90994E03C0E37F /* F3DSETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DBA884F6C11AC7F591FA518903604B3 /* F3DSETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8B9F702DA0D9696A233593D88691564B /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EB450DCC75AB9928F547A4793F046EC /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BB653415293F1E3A1720E89DFC02A49 /* svwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA42FF0995A2ECDE8654C66A329FEEA /* svwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BBB574D59E4C2F312AFCA3AF1449B81 /* cheat.h in Headers */ = {isa = PBXBuildFile; fileRef = AF7DB0A4354868150C48B6B6E2D4FE4D /* cheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8BC24B9D0B902A90526475618DFEB023 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDCA85256EA26CE4DC88337487128581 /* Version.swift */; }; 8BD82471835BF88ECAF163D6FCA9A762 /* RSTCellContentChange.h in Headers */ = {isa = PBXBuildFile; fileRef = A490B0EA1911CAE566D521752DB9B643 /* RSTCellContentChange.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8BE90823E820E693FF7804C8FF1F62E1 /* TextureFilters.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D14FEABF918A24804DDF7627C4C6E4 /* TextureFilters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8C24EE5BC4C18A93BCC1C9AE6FAC8F7F /* ftcache.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D32A452E67E305E30D5F18EE62B91D /* ftcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BEAACA6EF683BF1CBD5D38409B56D88 /* t1types.h in Headers */ = {isa = PBXBuildFile; fileRef = 819239301CC1811B87F438BAF1B0EED6 /* t1types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8C12B982EB848387B97D127AC49EED4C /* opengl_CachedFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0089D9FB88A0BFD7C81E2BBAD71BEFBF /* opengl_CachedFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8C206B96A9B112DB1D494824687C8649 /* libhardware.h in Headers */ = {isa = PBXBuildFile; fileRef = 431779F5BA85EA4F476E69CF0D2AEFD3 /* libhardware.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8C3F0D16D8ECCB7869ABCC3F8F3969B3 /* NstInpBandaiHyperShot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BBE04DD449B8ADC33C274C03D42334D4 /* NstInpBandaiHyperShot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8C6E70C9C229A2E14969674B13510C6C /* rhash.h in Headers */ = {isa = PBXBuildFile; fileRef = 9870FEA24CF3B1C5A3F888CBE2149CD4 /* rhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CC4162C9B5F2ACF112E2CD0231DAD8E /* F3DBETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8548E8B79648F224295606EFFF726D52 /* F3DBETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8CD64FD841EA7CD073DB1D91F67E5F83 /* NstBoardCony.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9E7BF5046B171FA0104A3B0A7F9DD407 /* NstBoardCony.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D16050EF95747AAFACD9E5B43C71181 /* N64Types.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1A1A0732B5E3F46EFB5131FEC1279B /* N64Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CFFE8D206649FBC45A465E0EAB2D2E6 /* plugin_delta.c in Sources */ = {isa = PBXBuildFile; fileRef = B2688E7DF0591DC8789862F774C74BF6 /* plugin_delta.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8D2017BE0B60704C8CB8E34DE6093D3A /* NstBoardSunsoftDcs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 23044889E5A6DCEE916A2658C83A085B /* NstBoardSunsoftDcs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8D55DCA48F13DD5011F6A93725277F20 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 16606104B7D23C541D75E1D9CACB2862 /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8D7002BA4BF48E276D34405B85D636DC /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D72CEA77A8089188A57FDD92DB3E21 /* AFError.swift */; }; 8D83B5DF22CE26FF06D3084540F77E1B /* cp15.h in Headers */ = {isa = PBXBuildFile; fileRef = 05A59AB3426F5F9258B25B7746D83CAC /* cp15.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8DA6413B75C737288165A6B7CAD2820A /* NstBoardSunsoft.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73166C752BA3D0BEFE30CD25680CA1E8 /* NstBoardSunsoft.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8DB3CACE9224D13C1BD3C176BC5427D1 /* NstSha1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5231969A4CEB871747903C8249FAAB98 /* NstSha1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8DD51BE5C43C2B1D3E7A605D95C974C6 /* L3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9531D676E6CBCD44E92FD1148601D0F9 /* L3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8DC67CE598921DF48FD70C4C6E4868AE /* opengl_TextureManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A52EF817DA55C490E46C80C1AF0F283 /* opengl_TextureManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 8E328CC6091D61DBA1B8AE8DFFB04532 /* hle_external.h in Headers */ = {isa = PBXBuildFile; fileRef = 5277A427B540B8A971E15DE8732388E9 /* hle_external.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8E7681E291ACFA6DD351EE632D186BD7 /* F3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = EEAE0F78E10C6AB8250B4FCF2FBB074F /* F3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8E8094562D01EDB93C41846A50926BD5 /* OutputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BC8528536BD3799BBE6CA5C956B29930 /* OutputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8EA421026DD522744405C37C9DFD1AC2 /* NstApiNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8FE7624D239D6E6FDDCBDC31458E790E /* NstApiNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8EBE0E93A3FF7FFCEC1305F5C0C94BA5 /* PngFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F58A45C3A6F2E0C9EE2FB2DCD85BDF1 /* PngFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8ECBE7000B4A9F6E088C74D397024BA2 /* BlendMode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CDC394F06B879F234E7D901D7FFBA813 /* BlendMode.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8F682A984C8CB6F8AF671756445C613B /* memgzio.h in Headers */ = {isa = PBXBuildFile; fileRef = 148E5E7E1B8AE5F14D3C61541210F769 /* memgzio.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F6BB90B38CCD6C919AB656FB5EC04C3 /* Performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53E9D1B37411CE1669CA533059362960 /* Performance.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8F9E3145DED94EC48DF53CBDD6F6D9D2 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED22F3BA7E83E1DC36113EFA2D24588C /* FileManager+ZIP.swift */; }; - 8FBE42C6E7A4A5028537D4734CCCEB5E /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FBEA1458597421280682E90821C05C /* SDL_thread.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8FBEAF2C349397639534DA6996F1794A /* ZilmarGFX_1_3.h in Headers */ = {isa = PBXBuildFile; fileRef = CA7FFC847A5DDF0337FD944CC08D1D35 /* ZilmarGFX_1_3.h */; settings = {ATTRIBUTES = (Project, ); }; }; 90217BC322211710F6A8909DC9CB2E59 /* NstBoardBtlSmb2b.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A339C9C5BFA6F1000B405E8BE54F026C /* NstBoardBtlSmb2b.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 903A61727B196C0BF6AD7D55E406829E /* View.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7DA17A4830B0A7833A2BFF7E43EFE310 /* View.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 904640205CCAD51F70FC8181CDBE9A51 /* fttrace.h in Headers */ = {isa = PBXBuildFile; fileRef = 88EF2BA95EB1E18CBC11B6130EC55E16 /* fttrace.h */; settings = {ATTRIBUTES = (Project, ); }; }; 90761841E15818195AE0E6F9C6B1F2A3 /* GTLRDriveQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 5117CC789D8C47E9B0F2888AB14F3E74 /* GTLRDriveQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; 90A332D78357408A4893241BAA3FCEF7 /* NstApiTapeRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8DEF68BFA723483A3C9540DE5D2B9CD6 /* NstApiTapeRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 90AB2A9F1C9D72D1B8956B0FA71B38E2 /* F5Rogue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 092C6EE9873F269B8DF55D311028DF6F /* F5Rogue.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 90C74CB62F0300013754489565EA44ED /* NstInpTurboFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A4A18683962DB3D821CC4DCBB8A6E9B9 /* NstInpTurboFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 90D2435B8A05AD9EA89B333FD06A470E /* NstBoardTaito.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C9FC5FCE0B5F88A589CF0363028B43C /* NstBoardTaito.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 90D2C20D11FB8A7D024EE6684B0245E0 /* TextureFilters.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D14FEABF918A24804DDF7627C4C6E4 /* TextureFilters.h */; settings = {ATTRIBUTES = (Project, ); }; }; 912EEA493E0A08FC711CF6864C3DB36F /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DC45D7DB5CFA98660E39905809A298A /* Auth.swift */; }; 9169B8668918831122A0CD580F6972E3 /* NstBoardSunsoft1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCC7AEE83CB780E73856EB51DA7F5363 /* NstBoardSunsoft1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9174937A3251A2ACDEEB1E350B983F7F /* NstBoardBmc150in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1195B6998FE8421EBA77EB210A43B4B4 /* NstBoardBmc150in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 918F4A5025C69B658DA2143255DE0A7C /* RSP_LoadMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDA72CEB6E2DC0981A908E0F6C1BF56D /* RSP_LoadMatrix.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 91B1A7D0868004B0C0B30333A7D548F3 /* ftsizes.h in Headers */ = {isa = PBXBuildFile; fileRef = A5D1F6229274C89A198E70560F58BE3C /* ftsizes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 920D6388A019BAE183B76F28E00899AB /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 72224C07100B6D8A8371BBAC83840304 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 921C1F239586B4E7118399375F45BAB5 /* DateAndTimeFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736E24DAB59401834EC1B3DBAEF4EEF6 /* DateAndTimeFunctions.swift */; }; 922957171D68783E3E3A4DC0D4A9D0D9 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = DF5DA6597370C51EB0AF58AA6075130F /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; 922B6EFC5C130149705BC82D0BB9D57D /* GTLRBatchResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B555E9059530B6964B3908B22140C42 /* GTLRBatchResult.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9247277F4A5BF7A33FD393DED9BF677E /* svotval.h in Headers */ = {isa = PBXBuildFile; fileRef = 898591A3CC8C587571FA098CCC20AADF /* svotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 926C22B256A40C76B6C8FBDCC7D1900E /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = C68E5B53D8D5CA28D433B92E58B5C931 /* memory.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 928393A965417058371B8D82CF1F8173 /* txWidestringWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 89F66807040C88F86F074A7DE8D84643 /* txWidestringWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9249CB6C4F05F15BC96CCA47486C79AE /* T3DUX.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EA6CE40033E7605CBA05FE256EA16DD /* T3DUX.h */; settings = {ATTRIBUTES = (Project, ); }; }; 92A4B9F5C0254706401940A8171D746A /* NstBoardTxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 725E5E4B6601C9A79B9D7A82DF839C25 /* NstBoardTxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 92A942CE7F29E460BB7E6C1564923F70 /* path.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C11311A957A87232355B6B0AFFEB8F2 /* path.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92ABF0E0FC5006FD6BBAEB54B4C7F113 /* PluginAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 77423E6CCB3B1A7C499FEC5ADF73561A /* PluginAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; 92F8229DBD6462B1D86671903966D443 /* libretro.h in Headers */ = {isa = PBXBuildFile; fileRef = 42884C54AC2951F6A1140B6F12823A61 /* libretro.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93049C2EA7F1F12ECE2A989EC457904D /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C8267F7387923110B7E4D691528634F /* png.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9306DF595EB74F925D40BC8F70C11F7E /* statesaver.h in Headers */ = {isa = PBXBuildFile; fileRef = DDAB24C8DF7DA2BB3D67FC4A2C669BEF /* statesaver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93180A48A4201719F7F9CFDBB8B86D4F /* arm_cpu_features.h in Headers */ = {isa = PBXBuildFile; fileRef = 25DEDA1290E18DBA7242DCF9680B37DA /* arm_cpu_features.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 931A0C0A7D091176AFB87B18C0F7B40B /* TextureFilters_hq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = AEAC4A2D514CEA5F884C8B989B177FE5 /* TextureFilters_hq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; 932FE517D424EB24ECA60FCF308A7F5E /* expr.cpp.h in Headers */ = {isa = PBXBuildFile; fileRef = 166B7D7F68333A9915F7970F9FB547C0 /* expr.cpp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 93353F0A21F136C22AD7F0B6183B5952 /* Bundle+Resources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 500E8615D96CF177F4C3273482988B11 /* Bundle+Resources.swift */; }; 93A9497637F202D29E0EC51208B725A8 /* RectangleShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 00B52487B5EE514818470AEDEFA85967 /* RectangleShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 93AB3DCEF6FAB25507A0D57EB46F15D6 /* Utf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF1BBDF3D7D54D8C1E001FC042148D06 /* Utf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 93E2A69BE77D64F60D12257FF81954F4 /* RSP_LoadMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDA72CEB6E2DC0981A908E0F6C1BF56D /* RSP_LoadMatrix.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 93E4A8D744F5FA2F32485D5992491BA5 /* m64p_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 155B6867D0BF5AD02F1B9394F4C2C8B9 /* m64p_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; 93ECEC40EB5571AC01CDB1C56EE6AFBA /* pixform.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A4EF2A1B3DE6523F4B1132FD5CF4A75 /* pixform.h */; settings = {ATTRIBUTES = (Project, ); }; }; 93FFCE2514097792D1F5E38E988F1513 /* Wifi.h in Headers */ = {isa = PBXBuildFile; fileRef = A5CE53451F1210BC9BA0C024038C9865 /* Wifi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 940ECFA7ED45FC491E7E3BA8526B7C2B /* ftglyph.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FE228B9F6593F99674B619FAD43A040 /* ftglyph.h */; settings = {ATTRIBUTES = (Project, ); }; }; 94209528F5A3C88236DE5DC50BAD5D7F /* ThreadLocal.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF7CEB7CE925B8996AD28292550EBFB2 /* ThreadLocal.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9429A4107A99B2476F308FE0FD2E02FE /* DebugDump.h in Headers */ = {isa = PBXBuildFile; fileRef = D18D98DFBFA469D8509A1C9BFB85042E /* DebugDump.h */; settings = {ATTRIBUTES = (Project, ); }; }; 943577E181B1B6706D2107ECD728B015 /* DownloadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C643171D31A2715E757D5F42F63F495 /* DownloadRecordOperation.swift */; }; 943A7FEF7443174C9AC78E67A5868A92 /* NstBoardFukutake.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DDDDABB6EB20FCEABADC4F4B42F10D74 /* NstBoardFukutake.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9463C53B6DDD72C64400E314D9AAB04A /* plugin_delta.c in Sources */ = {isa = PBXBuildFile; fileRef = B2688E7DF0591DC8789862F774C74BF6 /* plugin_delta.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9476BE008F3B258A647C6BFE2E327143 /* N64Types.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1A1A0732B5E3F46EFB5131FEC1279B /* N64Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; 94868DBC2F7CB341ECBBDC311392ABC9 /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = 2889DF4390F5E2FFDA11CCE9E534746E /* System.h */; settings = {ATTRIBUTES = (Project, ); }; }; 94BCC7749EDC3ADB6EB5811CA50D58F7 /* FileRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA07C9DEC9FD13724174A7D6794AD7B /* FileRequests.swift */; }; 94CDC16CABC912819C497850CE4F1489 /* NstBoardKonamiVrc7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16A6E4F9D5B593AB01D5A49340300BCF /* NstBoardKonamiVrc7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 94D28595353D013C0530A91A7AA81FCF /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C998AB9300BCC4AD6368CB1FA675F29 /* Query.swift */; }; 94D28819338E33AFF9EDDFB94DE0E526 /* NstVideoRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4753C1496FC2EDB1151EF16865D566B5 /* NstVideoRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 95023508CFDE2C9943D4E510526A14A3 /* S2DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF4AC25F29497FA32921E869185CFB9 /* S2DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 953B0BA08374FEB6F8BA47C9EE30878C /* SMClassicCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B5A75174DE7C7B4A535B3A42D6239C /* SMClassicCalloutView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9543AAF856988A714C41706FF2A5AEAC /* svttglyf.h in Headers */ = {isa = PBXBuildFile; fileRef = 224EC23CB708246C666EA6D597EF0933 /* svttglyf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 95927DE3B446FB2A897EEE03A3B0E292 /* ObjectHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B879AB2ADEE0B7AD62F37F492D81FEC6 /* ObjectHandle.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 95BD2BAD38E37D6E2B67EDF5344BA723 /* NstInpHoriTrack.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 633BFEBA4D6E889B3BD3E8EC2A8D9AAF /* NstInpHoriTrack.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 95C86E907FED4E215620A31FA5CAFD42 /* DropboxClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5456371B4D7DC880854562F4F53807C1 /* DropboxClient.swift */; }; 95EF975803B95C02EE458E32DB43C1D2 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = 9213596C3CA0E060FC0617A361F98FCE /* port.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1052,15 +1019,12 @@ 9631EB3716707DF75A79D5497DF4392C /* dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = F69FBA7A038D20EABCA39B35AB3B040D /* dsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 964D97F8D77342CEF0BDB0A9813AC087 /* DMA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A691959318D99E3BFEED5DF0D2582494 /* DMA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 964DD3973B1820BDFFCA6F92B9C9705B /* NstSoundRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DFC688B75792FBFBB3B452084CA3837C /* NstSoundRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 967B79C9BBE288D04AE77C7D95A294F1 /* ftbbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 85237BE80E426B918024FFAC9251A50C /* ftbbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 968CD734D31C79FB896F2B5840E81816 /* sRGB.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EBF0A8640326E2F901DF86C21C060DB /* sRGB.h */; settings = {ATTRIBUTES = (Project, ); }; }; 96A155D5BB7094AC0D4DB6C7CBDEA3DB /* NstInpSuborKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D41AF32FC52E17D1A0A5BA99D695DD30 /* NstInpSuborKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 96C74431D5A2F68C56AB62BBF1A75D35 /* NstBoardBmcSuper24in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 29E044818E33EA28D605B83708C47299 /* NstBoardBmcSuper24in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 96D4E9BF589FAEAAE225B88A6CC68214 /* DepthBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 472F4C1130957742B23FCBEAD0FC6E61 /* DepthBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 96E84431E12BB8ADA8E145AAC1ADFB66 /* fxp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4702731F2DEC76D99FCE88986919F6AC /* fxp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 96EDAB5DAB64B77966807FAA4FBEA19E /* NstBoardAgci.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 190388E1589C7BC638B1410EA970D133 /* NstBoardAgci.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 96F221FEFB1BDFEEDF3D78ECBD3693BB /* NSPredicate+Search.h in Headers */ = {isa = PBXBuildFile; fileRef = ED33C93DD7E38C3D447A4941CDA4F4C7 /* NSPredicate+Search.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 96F4B4E72231C96CA0010A82E8459431 /* m64p_frontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 104AE23A6B9AE10B8672C3AC578993CA /* m64p_frontend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9700860B8834FFBBBB772936CA396419 /* gDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F52A10407276576D7E69215069A05CD5 /* gDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9719913DBA52DDA7B45760943EB9BEEC /* RSTOperation_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = DBB12A893E1A139B63450DDE9A309CC4 /* RSTOperation_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; 972A37B03DCA40E3914A116E31179F3F /* GTLRBatchQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = C88860D669B74A0154AA887269E28475 /* GTLRBatchQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; 979368E44B8B7C8615822815141CD054 /* GameControllerStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43650F984E0D62C7EB21DB9C43B8CAD /* GameControllerStateManager.swift */; }; @@ -1069,169 +1033,171 @@ 97C65359994F792189FCBC1C79079A96 /* gambatte.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DCDABB34A5BDA633CA1B6972D7D76E1 /* gambatte.h */; settings = {ATTRIBUTES = (Project, ); }; }; 985B7DDD2DD31218D8E7367F76FD2D69 /* gbint.h in Headers */ = {isa = PBXBuildFile; fileRef = B307C39B5BCD16F9563103326BB8C58A /* gbint.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9866CCB407CB626700130C62BCE45A29 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 2036AE04F921EB54A23BE7D3307D5B57 /* Sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98D31D2DCD90B13AF37086E4750BA838 /* mi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = FCE15B7CBF75268739FB87C1E0C6AC09 /* mi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98D8951889A284316C8473C141B05BF5 /* F3DEX2CBFD.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD20790AB990ACC80BB8996D8F6E7CF /* F3DEX2CBFD.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 98E164F9F904A6584A61420EE9FD1A7E /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 87CC302B1B1C6F71828303A524C51690 /* pngwutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 990D025FACA7671D88A13F092F6A87C5 /* GBCDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D9E4AA51EA6166FE8A05D803D4DFCF2 /* GBCDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 991670A9BE0E2AD87F211F289998813D /* af_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B73776B063CE08E7361FDE4C26CF904F /* af_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 997BE94A31FB10C25F97750D5D0C73E1 /* pshints.h in Headers */ = {isa = PBXBuildFile; fileRef = E95A0C3C6E26DB4E26E12433BE937DB1 /* pshints.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9964B569DF0408FF79B47BF03F222154 /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = F764C420914578158ED027BC44B8591B /* callbacks.h */; settings = {ATTRIBUTES = (Project, ); }; }; 99834BC27CF8939DCA6DB984DB44F44D /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 387F3E450269A9E3EF2EA6A10AD8C879 /* Standard.deltaskin */; }; + 998AE8A31AF486EB7CAC15E56C0C6E65 /* RDRAMtoColorBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = C159885D11F51EC41D84186D52DC4483 /* RDRAMtoColorBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 99AE2D392CB8A5145EA7AFF6F21F3483 /* CRC.h in Headers */ = {isa = PBXBuildFile; fileRef = BB01FC8167E6C6B4469AC59E3C3DF146 /* CRC.h */; settings = {ATTRIBUTES = (Project, ); }; }; 99B6F8CEDEB6DB72964EFBD31E1EDD8A /* NstChecksum.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 35735087EA4B8B9922B5CAF03314D85D /* NstChecksum.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 99DE9961F6F88EA4545A05AD359747C6 /* UIView+AnimatedHide.m in Sources */ = {isa = PBXBuildFile; fileRef = 632F100822F31BF07C7CD07CAD8F2329 /* UIView+AnimatedHide.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9A1BE2EF2BF2B41278CFF95856596E4C /* Log.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D08A94E7C3746163340B4EA95824507 /* Log.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A2C2E1BFEC2A7F8FE2BF3C40365472A /* tttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 021A9462364AFC38855FC545DCD6A6B0 /* tttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A27BFE1566B60454DC890A6CB919C7A /* ri_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A933B1B324B43BC6E0CEBB638211EBA /* ri_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A311750E9188339148E6A9C28640957 /* ColorBufferToRDRAMStub.h in Headers */ = {isa = PBXBuildFile; fileRef = F1BABB17270A0A3966333B7C327BF0CA /* ColorBufferToRDRAMStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9A453C07C6CB23BBC0923625A37ED39C /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = 50942AB189B9EA5A4CCBCC5F4E94B58C /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9A4C2D5C397861A9572A20C1F8A36028 /* ManagedRecord+Predicates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FF9B4A3C5693A9C7DC7179EB1F138 /* ManagedRecord+Predicates.swift */; }; - 9AC1AB764E31934D162F26C8484C21E6 /* gDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F52A10407276576D7E69215069A05CD5 /* gDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9AC1C1C11717294A0BC92C368F6A3C43 /* GBI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB6E71C991DC4BD501F509F16B2DFDF /* GBI.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9AC5F54FB242288D0C0BEE5FE51BE7F6 /* AuthRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E2C78A8799FD3F430CD405874430028 /* AuthRoutes.swift */; }; - 9ACECB5B9423B032EFEF6184E7E6112E /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = E8274D72B068FDD5B8433E16806FBEB8 /* SDL_opengl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9ADC5E80C66896CD28992B319DBAAFDA /* glext.h in Headers */ = {isa = PBXBuildFile; fileRef = F52405E64C06D130B0AAD913D760D8C8 /* glext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9AE8AC6CC7990539873D41D13C0E0866 /* pnginfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C31FD97E461D0628F310200A8D3B403 /* pnginfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9AF689676F4557DB4290ABA38A21BECA /* MMU_timing.h in Headers */ = {isa = PBXBuildFile; fileRef = 17B5799944A0DCB74E38C5E3E5C164EB /* MMU_timing.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B00930BE1823F676F5035796C25C2E0 /* GraphicBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 877821421C3883E9EC8A19BABE97DA2D /* GraphicBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B3E47CAB17EEAEEA7252FDAD1228FED /* svtteng.h in Headers */ = {isa = PBXBuildFile; fileRef = F1AD374BED968FBCE790AA433A78D057 /* svtteng.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B40F6B2B7F12F1A13A367E599764867 /* TxImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE1843CA9E6FD7C78006C01BE4BD5C55 /* TxImage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B434AD18DC064B8C04942252F58E534 /* regcache.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EBDA149FC9D979E9EB1846B7E68B274 /* regcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9B46DF6F7D385A76CC7419F2CA029080 /* NstBoardCneShlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04131E906A312EC3EC8E75626EEA8233 /* NstBoardCneShlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B5D0570D908D4A6EBE804FC3E0FF775 /* plugin_delta.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9579AB2737FD12BDDCDEDB9799737C0 /* plugin_delta.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9B6DAACFBF34F39F85BDE66C85C41FF3 /* UISpringTimingParameters+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EEAB40C86D49852ED6EB7A6AFF904B0 /* UISpringTimingParameters+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9B704453F791C3CAA8F55E7BA3D0C581 /* Vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0A780AF639D642BAFDB60533800E36E5 /* Vertex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B75C40E8889FD932BCFF196C4F35E57 /* ColorBufferReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0576D7E597D37BAAB587DB83FE8CB161 /* ColorBufferReader.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B785841DB7BEA68999C1CA3F487ECF1 /* DisplayLoadProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DEC0821C3D8852D66B08A0002AB2F015 /* DisplayLoadProgress.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9B89D3260B3CBDF8B3A37E4C79BE88B5 /* NstBoardNamcot34xx.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E70D8FFEBC5CD9356B8F48E495CF4C54 /* NstBoardNamcot34xx.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9BDB8F38002847FBD5C1F1C023A5F8D3 /* eventloop.h in Headers */ = {isa = PBXBuildFile; fileRef = 761CB13BA65C677D14B6D3A3F75A9A73 /* eventloop.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9C4DE97E009F6FD9F96D47382A323F8D /* Sensor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAD07D9524FA2A12D63FCF045E3C71B6 /* Sensor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C51AB69CC57913351A31DE3A8EA384E /* t1tables.h in Headers */ = {isa = PBXBuildFile; fileRef = 030B53DF4264E1E4E75E737FC9B5B696 /* t1tables.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9C56D975902024C142C35CBA998C6E8D /* cpuexec.h in Headers */ = {isa = PBXBuildFile; fileRef = A96FC77ABA88D5836FF081611CD8F5E7 /* cpuexec.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9C7C23E76D82621C265FFC52430EC02C /* Ftp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 25783A066C7388BF58AF665E9697C17B /* Ftp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9C8A0C2204C091124D6C64F86A690F9F /* SMCalloutView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 014989F31F4E364C9128F07C0637CA70 /* SMCalloutView-dummy.m */; }; - 9CEA93893B050B53483834892692E40B /* ftautoh.h in Headers */ = {isa = PBXBuildFile; fileRef = 607EE7A62CEA324021137035A39115DC /* ftautoh.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9CEE21D31B9461DB729129E357679163 /* F3DEX2ACCLAIM.h in Headers */ = {isa = PBXBuildFile; fileRef = C5A57A0F7B6EFB30D8800FFBC3A0FD7A /* F3DEX2ACCLAIM.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9CF692BD464C27BA082BE1DCA7A9D45C /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B5E6736AEAB28DFE73C9BD1605B0863D /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D069AEA5FFB677528A5118AF19C7233 /* ZlutTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05767382F7FDD0945BB7F7F65461307C /* ZlutTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9D0FD356D97CD52D34960911A8298298 /* NstBoardCamerica.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4FD9C6FE532DA80FB560837003DB3F08 /* NstBoardCamerica.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9D37E2CB2398BE97697FE7719B77FFB2 /* NstBoardJalecoJf16.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 50D957B423EE92BE50F11FBFBB2F7951 /* NstBoardJalecoJf16.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D39E7EA0FAD4C416AF187FB7295F339 /* DisplayWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 91F00C1F0698F991A6DDB258AD21774B /* DisplayWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9D7F1DA302776DB06BB6428657036442 /* NstBase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D54FDB83A8048619B7C58407A8302609 /* NstBase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9DCA03AF7E63F208B7C61C8EE8B41AF4 /* RecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87039339C5C272F9501B594DB154C3A4 /* RecordOperation.swift */; }; + 9DD55DD05FCA097771FC62EBABFEC46E /* android_hardware_buffer_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B799B0BED0EB9D4351BA9CBC630C918 /* android_hardware_buffer_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9DE53B2F87039E798D26BE8696AEA4CF /* GBCCheat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A71F2279611250A8163A19A68C100B6 /* GBCCheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9DE9E2CA0884ACD6E62262835B4DC4E1 /* oglft_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 33BD33AF73BEEF1769230AAB1B73B0F8 /* oglft_c.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9E193AD1B96748E2301B45BC5BCC4454 /* internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CEF3CC6501A56EB934F1F25AEB77A985 /* internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9E31B03247471F3BD90655550384FDA2 /* SoundFileWriter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 07E188F1C0F1D9982F9D7E2B4BF63A77 /* SoundFileWriter.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E35E296D32157150508356B61DBFC67 /* ttunpat.h in Headers */ = {isa = PBXBuildFile; fileRef = E1210995B1881C4C2239A38E329170E0 /* ttunpat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9E37FB7914BDFC8D3294D18B7942AC8C /* NstBoardBmc72in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E34BFCB88D5BE82E1084754358F46958 /* NstBoardBmc72in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9E565B2CEB1389604BE252478801A1E5 /* defined_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = A3901E50A71458B91C7F98B9202F5AA2 /* defined_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9E94A3F6B300F60BE8D7C36F49EADC25 /* NstBoardBandaiAerobicsStudio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7E503925F21124A66FEEC07D1E779631 /* NstBoardBandaiAerobicsStudio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9EB8EFEEEEE29B8A08B90A5968DD254D /* Rect.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 867EE1D22093A5E26C0604E46F43DE5B /* Rect.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EBD2981D2C95F47A2CC47ABE9DF341E /* S2DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4333506EF373E1D2841A18039C8379 /* S2DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EE2A24548BFD782A76FA331067BA3FC /* svcid.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E9C9E58EFFC6846E01B3B75A4595B21 /* svcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9EF9EFE4000A70AE76A75376E6E95870 /* ftlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FF5B91527E584477B10719112BEA1B6 /* ftlist.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9F133B0D521E411CDF94B9631A73D275 /* NstBoardTxcPoliceman.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7A09B431279F323517C8EF6B08DBA5D0 /* NstBoardTxcPoliceman.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9F286E1D2DC70F134E8A8E4DABD86735 /* RDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73594F3371FE49C0D1356C423974A617 /* RDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9F4F09ED3E838DCBD8615A7333F019C8 /* L3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C35BC9F77F23B687515FC8958549CA1 /* L3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9FCADB0CF0AFBD4F3F0ABFED93FB82A1 /* SyncCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0D8C051806BA9A8817550D4A2D2B252 /* SyncCoordinator.swift */; }; + 9FDAB43530974253873F6B850109D610 /* alist.c in Sources */ = {isa = PBXBuildFile; fileRef = ED722AEBC29811FBDB707822E79E137C /* alist.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9FE64AB67B279FBE1047117752075A4E /* UIResponder+FirstResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72F6FF7C88B7AD41EC3870C4DE94973E /* UIResponder+FirstResponder.swift */; }; - 9FEFB36A938CC33AAA28777285A2D6D3 /* VI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEF8E98B3647EDE8533C51A14A31D99F /* VI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A0120835F1172F64AFA98DDB669167CE /* scmrev.h in Headers */ = {isa = PBXBuildFile; fileRef = 42FC26095E2CF8823B3A9B88453B3901 /* scmrev.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0258F6EF879071A012E7C12BEE48C45 /* svotval.h in Headers */ = {isa = PBXBuildFile; fileRef = 898591A3CC8C587571FA098CCC20AADF /* svotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; A086B96EE66A0AF59654CB9D50DAABD7 /* NstBoardKonamiVrc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A6A4DBE5C518B74416FB8A4EB9D967ED /* NstBoardKonamiVrc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A10612911C9EA6DD14FB853233F82007 /* files.h in Headers */ = {isa = PBXBuildFile; fileRef = B5D0F2204128CF6B384D5E2619FCFA0F /* files.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0BAF4ED385FE71250DCF6D05F0496F0 /* TxTexCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 838F667D353D92B49C6150D47D8E5C4D /* TxTexCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A11D64412596423EBFD44DD00058A5BD /* L3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 280A5539EBE87BEA10C7C1654D729DCC /* L3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A12FF5C36B478525C1327E41B3B3C09C /* GBI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCF3F649DFE2BBABB7DD4DB64169C38C /* GBI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A131157FDDCA174BD8C7F663486E890A /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7DDDE511D2FFCEBAC65BD6D2225FF /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; A152CC24E7DF395160707521223E96F6 /* agbprint.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E001A6FF56533ACBC3F6E950D52560 /* agbprint.h */; settings = {ATTRIBUTES = (Project, ); }; }; A1544544E0BC9AB6958029C77298E2D9 /* GBASoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = F058115223339AF17A2DA555639642A1 /* GBASoundDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; A1AE18411CA8A80C75D039119DED8CFE /* NstBoardMmc2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 13B7FFD0C9DAEC7BACA3614D558B1227 /* NstBoardMmc2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A1C4AE3CF237BFD611EBF5E86DD2C09E /* FIRFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 77999DE4BEEF8B78706A76C68622603E /* FIRFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1FDFF2AD1EBC97A47F35961A2C71109 /* F3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E1156572BD531C3316B572C296BCF01 /* F3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A1F1F3426E0E3AE9D01F15DD819B5204 /* alist_naudio.c in Sources */ = {isa = PBXBuildFile; fileRef = F52217DDA56116C4579A60B66E239C62 /* alist_naudio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A211E6013CB96A83529583B085B6B370 /* NstBoardUnlCc21.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7C5579DAAF54EF825979925DDD065815 /* NstBoardUnlCc21.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A212566BC13F73E1F56D4584670E0D22 /* GTLRUploadParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = AE757EB203915A0BFBB4F3FA8E8F9A77 /* GTLRUploadParameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; A22D9092E39C894919D1BAB027CDF0D5 /* GBASoundDriver.mm in Sources */ = {isa = PBXBuildFile; fileRef = D549AA5A39E931E9F3F53DC8DC0F8E2A /* GBASoundDriver.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A24DAF3A4A4B530B47A5C2BBF63FB6D6 /* pngdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B0E56A4DBE284273ED40732FDB073C9 /* pngdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A25FEBD1B5ABCB74C1674EEF9F784EB0 /* MemoryStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 0663F28B78D5B488BBD1158305953BF2 /* MemoryStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; A26E82669EC4D325656E6B8EA01E2D01 /* Drawable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8A731410071DE76AAF5149412AEC57ED /* Drawable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A275BEEC646144350744D504FBFEA961 /* ControllerSkinTraits.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CFE24E78C00465C933205823C6591C2 /* ControllerSkinTraits.swift */; }; A2A854D06578D5120F0B8474EA0073C4 /* NstInpFamilyTrainer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4A30748039EF71CC3D3BC9D7293442A7 /* NstInpFamilyTrainer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A2ADFBA34707939EDDDA8DDFCBAF4500 /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = B178CE5FC4BC30D17B77BB64F1C9D912 /* GTMNSDictionary+URLArguments.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A2B90FAA02E0F6CCA147D4922BEA83AC /* F3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC10C4E5FDC7C7C25A7DAC7A2FB11BB /* F3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; A2CF5336CF94746DA1F92A04941AF2C4 /* NSFileManager+URLs.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CD097CFE02D8169FF5FC3721CC0AEFF /* NSFileManager+URLs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A2E5ECADA6FD38BB0829678577875EC3 /* OpenGLESProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7BA8D8D1E9E2CDAB97C30A5A502156 /* OpenGLESProcessor.swift */; }; - A2FBF339AF1E1FDD65B6EF4158DE51AF /* workqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D398DE570B23AC84F4DA4086B43F5E /* workqueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; A3057CCA3036D83546A8CD03B63F433D /* NstInpCrazyClimber.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8A65C030A8CB605B689A888D7DED867A /* NstInpCrazyClimber.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A3175B24ADB6E391E46B1408B1767FA8 /* glsl_CombinerProgramUniformFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = B41ADAC311E8AD6F6A31A14C3ACCF208 /* glsl_CombinerProgramUniformFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A3268347427E3944AC1F5FED80F60D39 /* SoftwareRender.h in Headers */ = {isa = PBXBuildFile; fileRef = F687CDE1CC73F1023FA06367B7621C39 /* SoftwareRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; A32EDE9B3422EEA2F7F3C931A32A8AD7 /* NstBoardBmcSuperHiK4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 253F6A4732CDD605581DABD45CD0B43F /* NstBoardBmcSuperHiK4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A34924ED816441F1DFC1ECEDFFE962DC /* RSTNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D0F4C76483E71C2F01319F14942730 /* RSTNavigationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; A35CEA97C5A89CA2AD61EA4049407002 /* NonCopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB813FC7BFFACFEAB984E045534C0DCC /* NonCopyable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A369A8888AA50BDBB82B59E1D48134D4 /* NstBoardBmcT262.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8A25DA0D46D9C9C287A50225828AB7C6 /* NstBoardBmcT262.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A432DBBFA6CF4F59033CEE3B63EFE557 /* m64p_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DB69BA777DA2D7FE96274A0B4EB4BB5 /* m64p_plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A45581F3A08C2C1C52E7988FF7BDE252 /* osal_files.h in Headers */ = {isa = PBXBuildFile; fileRef = 8346ECC5A3AFD14F0746FD2871ECDA43 /* osal_files.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A45F47289CB2ED953F6CD191275DB3F2 /* TextureFilters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D993982D3AADF41E465498E329FEBD9B /* TextureFilters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A48911932ED356D95D7CB9A9A8000E40 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = C53D9591F4B5C55AE48D566EAEA25FD1 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; A493B150D94171B74C1FF5E7933FA3F1 /* elf.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D345212AEDE1FC050CD40AF657590D /* elf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A495BA6FF010BD3CC899768E09C49CDC /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = 3E352201B46848355CB326FC4BF1FF47 /* pngpread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A4A46020FF4C11DCE0AD9815C8FE0C62 /* DepthBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA35E04DC90CDF3E5C69140C495709F6 /* DepthBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A4AE6BE50FE7D09FA862A51966B680C7 /* NstZlib.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 347FF7946245CC6482030C5BCDAF89D0 /* NstZlib.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A4AFE77E2A1906AD9E375BFABABF6D3F /* Settings.h in Headers */ = {isa = PBXBuildFile; fileRef = 3077BDF790EB52605DBA99AE8089C2FA /* Settings.h */; settings = {ATTRIBUTES = (Project, ); }; }; A4CDAB56ED7EA775F1A4AF9BC6C5E712 /* GTMReadMonitorInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D575B29FCC81FA8F72EC3CC12A581A5 /* GTMReadMonitorInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A4E7AF6547FDAE1BCA941C5C55972386 /* NstBoardBtlTobidaseDaisakusen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 056855D6563613F5941E73E167520BEE /* NstBoardBtlTobidaseDaisakusen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A4FFC4C6F5F2FBF2A4714D4E98634935 /* opengl_ColorBufferReaderWithReadPixels.h in Headers */ = {isa = PBXBuildFile; fileRef = A463F67D31F18A3E8817C9388BDDEADD /* opengl_ColorBufferReaderWithReadPixels.h */; settings = {ATTRIBUTES = (Project, ); }; }; A5037807FB7A1D0D4B693C55BF20B762 /* GBCCheat.m in Sources */ = {isa = PBXBuildFile; fileRef = 66FC5067060EC57040E657A1F216A5E7 /* GBCCheat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A55B44741FF8BF0BF83FCF89A7D2DF18 /* F3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347EB9305F4E36DD5D07096703DFAC24 /* F3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A5651EF221F23607DCC7F0AFEEC5CA8E /* SharingRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8888D8043BC735B8831AE2FB72C5DCE4 /* SharingRoutes.swift */; }; - A5726C481C20F8D8E40DCC9AF9D0CF34 /* fttrigon.h in Headers */ = {isa = PBXBuildFile; fileRef = F5AFC909F4746C3FA127FCDAAC1D471C /* fttrigon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A57D054BC48E0C713AD2D2091DE3AA8D /* storage_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C393F6D77A263F418781F717B7AA90D /* storage_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; A5A600842203DF1E3A7A326C8C22C683 /* ConvexShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3DA525BCCFDCF518525E5C7B8B11DBBA /* ConvexShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A5A84A4DD8A5E89E5AB0C7733B613CE4 /* NstAssert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 68472F20D32A525A0FA8C6D283E05655 /* NstAssert.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A5F30E43D79777F683DA8086E856314C /* osal_files_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33FF8A61B13EE6F6CE800CB771D90EAC /* osal_files_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A6173C5A991255ED8E9DF5B7A8B26CA7 /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA1F428AFD84BF440CD3E1D14DE8168 /* GTMSessionFetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A6257B7E52832880771B2BB200A4C1D8 /* interrupter.h in Headers */ = {isa = PBXBuildFile; fileRef = FEE4DFCA2E800BD0E79D7425672042CC /* interrupter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A670352ECAEE4E7A1DF6A8D8A9BD2220 /* Combiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 608FE25E87FF01D7345789C49881295A /* Combiner.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A69AA86EDA31C24B28D06718893F218C /* winlnxdefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC3502E8ED4D5961B6483AA4C0E4E65 /* winlnxdefs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A6B315E94A6CEF669095A376A8B78BF0 /* pngwrite.c in Sources */ = {isa = PBXBuildFile; fileRef = 58B3B095F9C98257ED03FF6BA75F6CC6 /* pngwrite.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A6DF3C1F361F1F1CE700FA15AE09FE32 /* F5Rogue.h in Headers */ = {isa = PBXBuildFile; fileRef = FC8BE3C9EFF69072F0F385CD784639A2 /* F5Rogue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A70E823723F2AE05B1BAFE430143EE81 /* ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B344A1563D4DD7818E0D6A1BC8076EE /* ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A67F3E53D04202680EF541B079B9D40A /* opengl_ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = EAFE7943BDC2A2EA16E70C5B9E8335BE /* opengl_ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A684B686F2A6519976AC7438796DFFA9 /* preproc.h in Headers */ = {isa = PBXBuildFile; fileRef = A77309856ECBE8FE95C26ADD933333D1 /* preproc.h */; settings = {ATTRIBUTES = (Project, ); }; }; A71F672BACBEE53FD4851582F9A71450 /* RecordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8058D48F8CF8A2D21FE0EEF65FE6BFF6 /* RecordController.swift */; }; A72CE00953BEAC5C78106460D334E3F6 /* CheatSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4BF92FD0BDB1CA2D2C3D91B8F13226 /* CheatSearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; A72E4695B60D35E8D8BFAA0FF9051520 /* OpenGL.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2597239B8799F016700A89F4C2178031 /* OpenGL.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A7367943BD56320D9A2A6192A8A3D770 /* N64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47967D3CF2D6A2095CD6438231F82260 /* N64.swift */; }; + A760192B70AF78B0A0C7422949F1B853 /* DisplayLoadProgress.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D709C9141E75CC5376CABB8ED0406AF /* DisplayLoadProgress.h */; settings = {ATTRIBUTES = (Project, ); }; }; A7610ADD4D3B95C8ECDCF6ED0324632C /* RSTDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DE36CB10C4A8DCF72BE7B88CB003698 /* RSTDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; A78C159B2F3CA3444E738F57CCB464A5 /* Dialogs.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFD819549B79EF6F6533D7333213048 /* Dialogs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A7932C8FB54630064EAB88DAE523A38C /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 560F98A5E3D6842B976BE9CCD21AF72C /* Standard.deltaskin */; }; A7B6493DBC037E2F8C5BCDDE7EF3121A /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 676903B714C5F565B51ED126D715A4B4 /* Standard.deltaskin */; }; A7EB0D099CBAA6C310A263AC395DEEF4 /* GBADeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C2DFC00C454B4A6E486685A3B85653 /* GBADeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; A7EF2BC7C091E4282D581EBF80E9EFEC /* RSTFetchedResultsDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3354FC02362F1AAC06FABFDAB6FC1E92 /* RSTFetchedResultsDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A7F0206CCDED3DF4FC1C456649013B1F /* RenderStates.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9A28F307BB7A2BFFBDABD41D7562DBF9 /* RenderStates.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A8551A96FDD516BD37037B818AE7BC7C /* GBCDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C274755E3C4177DD8B90B0B96F055CDE /* GBCDeltaCore-dummy.m */; }; + A85E6E945674B72BA3E5D882DC2B55D9 /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A33B3B4BD1E78794258F5AD6D999C880 /* FrameBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A8667816D59C9860485A0D7FACC3748D /* PostProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5370103F49292571EE10317A74B0B2 /* PostProcessor.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A87DA7AA81BB75957343DA7D33B3D148 /* NstBoardBmc22Games.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56CCBC3C2C82EBF029DCEE7C08413CD2 /* NstBoardBmc22Games.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A8AA31971602F635B0B2F46C6BB1F07C /* spc7110.h in Headers */ = {isa = PBXBuildFile; fileRef = EAC8946446770DB79B1DE4821B8C753F /* spc7110.h */; settings = {ATTRIBUTES = (Project, ); }; }; A8F08EEE11D3748876598813DF8BDA17 /* NstBoardSuperGameBoogerman.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0B34BDCE67F7297CE2E1F3FBE65E622C /* NstBoardSuperGameBoogerman.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A902E94BC79F6FA99E9BB0300EA305B3 /* CustomFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2B5384F92FD40CB28071138A07D6BBC /* CustomFunctions.swift */; }; - A960256FE7F887C3B4128D1F696E2D90 /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 3626FD0512609CFE865D492929315B1E /* pngrtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A90950062B5B87C714507F9C8EE66EE3 /* PaletteTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 14D158A352A8BBA396519A2C6CDC67FD /* PaletteTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A90A92E3681F50270E9EB68B816F3D94 /* pngerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 24443F50309F188F0D359B49C0F136CB /* pngerror.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A971B4EC389969BAA77BA2AF104D8B47 /* rdp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 193B9E904D8FA162F2935AE2242E5DD4 /* rdp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; A978E1A561722F15D4C545AEA3FB3001 /* Clock.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 88C14FED0FDEBE31AAA6DE08EFA9B83D /* Clock.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A9804C368587DB95D78E9637852AA7CE /* 3DMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 75C6CA9B6DE6420B9DC5F198E990FC25 /* 3DMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A99B6B9EC2EFE2FC385B65A77F9EB0D3 /* fttrigon.h in Headers */ = {isa = PBXBuildFile; fileRef = F5AFC909F4746C3FA127FCDAAC1D471C /* fttrigon.h */; settings = {ATTRIBUTES = (Project, ); }; }; A9AEDDC1D58C38A7CC8DC9F486965D56 /* Sram.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E98AF28DEE4396FAC50A659A97D1F7 /* Sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A9B698FBFC78110FB1851447D93A2CD9 /* F3DAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 5874E00381FC42362866EFFB712A5697 /* F3DAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; A9F981EDC073C433341A5F4025D46216 /* DriveService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E4DCE2A6F12D890D38A83939413D307 /* DriveService+Records.swift */; }; AA3241DCAEBD138A49F1A1B79CFE3F40 /* BaseTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFADC4424D377B458AE08BE73A8876B0 /* BaseTeam.swift */; }; AA3339D66B1B8D9E4FDA3A7B1DD4EE4E /* RSTOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D3D57B0A12B1AA1AEA896FD02062F18D /* RSTOperationQueue.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AA5B1AEF7BFFC092A1A177F7B83F5EF5 /* recomp_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B399358B256320203E685F8FC809959 /* recomp_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AA615360C6D1A302957FBF37E2684533 /* F3DAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 535D5DA336441168AC8B025DD167FF5A /* F3DAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AB123914A6198728826EAF5A6AB03906 /* lirc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C95081CDA9074D9730BD45D716C934D /* lirc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA83341BC9AD775CDBF99CDCF727BBE8 /* svpostnm.h in Headers */ = {isa = PBXBuildFile; fileRef = EB05D37130F5C1E54F68ECD8CDDC22EC /* svpostnm.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AB0B945E8A9379453CBA9928E743A987 /* glsl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A01EE3AE9A9EC3F97E1D65778521BE4 /* glsl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; AB1E3DEF678EB7000A95D5337728318D /* SNESTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = FE6F693BD8934FF6A88E20FF29157CFF /* SNESTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB2A558032E8D4877049D09D755ECA35 /* pngmem.c in Sources */ = {isa = PBXBuildFile; fileRef = 0056ECA9D4904EC555DDDB7A44A29B9D /* pngmem.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AB2F696C2623C6301FA3D611B476B678 /* alist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A827256CC16710474531DFA7ECE526F /* alist.h */; settings = {ATTRIBUTES = (Project, ); }; }; AB558010971A1205D40B5288EA916AF8 /* NstBoardWaixingSh2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CA9FEB0150AF6AC5451F53D2F5EF6259 /* NstBoardWaixingSh2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - ABA544F4FB1E7074FD3DC41616D225E0 /* TexrectDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C0B90253B6F200AB5E78C107875E7B /* TexrectDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ABCF35B61F0EAC2A3D2328B942D32BD8 /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B9715EFF4CB742F4153FF865BFAE0B /* util.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AB7C2F8C82FAD9590CB79214FA4C3514 /* svpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = C4D7382D1D8B2EAAEDEC4E420FAC72E6 /* svpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; ABDDB6C221DFAE4AAA785817F3446E6B /* NstBoardBmcY2k64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DF4AAA0AF5429BDB84A1B9464A02940C /* NstBoardBmcY2k64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AC379808B490D311984BAC3D9BF11C91 /* N64DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A127D84C006CC72C3EC8E46506B45330 /* N64DeltaCore-dummy.m */; }; + AC3E5F8F4AD95B1E0BBAD992EDC5D940 /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FA37688E22E33D15DFB26A4571F6EF /* pngread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AC4C2943071E6F4EFE6F3CDED9F75289 /* CustomTasks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37497E9D4A4AD3D7DBDCBD661F3B23B8 /* CustomTasks.swift */; }; AC5786BFBB7B51AF3B5D003E3F943335 /* lua-engine.h in Headers */ = {isa = PBXBuildFile; fileRef = A14075A6CB82B5B0A2CF0B5F3B60E096 /* lua-engine.h */; settings = {ATTRIBUTES = (Project, ); }; }; AC5C7C37725492D17220C640C6B10B47 /* minkeeper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E82D9E0415F24E9559D27759ACC7218 /* minkeeper.h */; settings = {ATTRIBUTES = (Project, ); }; }; AC7F07736D60C170ADF5347103C06706 /* NstApiMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 86CEE581D78B9E9138136F67D7ADF345 /* NstApiMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - AC809FC49956C0CEF8D81ECB57D34E1E /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = B9B009A6587C3A1C6BB0A1C024A18D38 /* pngrutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AC88AE5A5EF6C2D974226145DF29720B /* NstBoardSachenTcu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CE7A2A4BC98670AD316ABDBE9EC069B7 /* NstBoardSachenTcu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; ACA04F1A522EC18A1D9CF1A1A0ECE722 /* interruptrequester.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E0A94CCCC0D97F634E74FA3103B29F1 /* interruptrequester.h */; settings = {ATTRIBUTES = (Project, ); }; }; ACB848453661249CFEDE957E0BC5AFCF /* RSTBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 76ACCEF09480010D5EA9E6D031D289AC /* RSTBlockOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; ACE261F0845AE7032EE10EED8352D14A /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D6A333E30962F5423F826B733E702F /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACE960410C8930B639E6B002D9E52F44 /* glsl_CombinerProgramImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2815B1907C011A39DFB5DA9B3B93A230 /* glsl_CombinerProgramImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; ACEE8B31B20BE08B7468DB090AC3A159 /* GTLRDriveObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B22551CE150F70C85739F2994DE4F75 /* GTLRDriveObjects.h */; settings = {ATTRIBUTES = (Project, ); }; }; ACFDB59EFB14D11FDAA6C885CF2ADB9E /* dictionary.h in Headers */ = {isa = PBXBuildFile; fileRef = 580A41D76B6A843244232FFC7D187FF1 /* dictionary.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD049403F76645DB6F4ED1071B055F14 /* Context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 313C6B8D05DFD20F664BA3744351BC9C /* Context.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AD354461FC1FB59C9CA7F8ACBE0E6C26 /* TxDbg.h in Headers */ = {isa = PBXBuildFile; fileRef = 951AF961D61C1C3B55D7700D57143D91 /* TxDbg.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD47B17045412F1E32D42DEC1F71C6CE /* glsl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C136320E214AE8F3ECD371DECBC4849 /* glsl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AD6656B872B98CDE4BAC39B6E10CF595 /* GTMMIMEDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 0753A2F2127F76F50CD3A7E3FCDF1F60 /* GTMMIMEDocument.h */; settings = {ATTRIBUTES = (Project, ); }; }; AD77BEE717454B68BF56D30CBAAEB761 /* spc7110dec.h in Headers */ = {isa = PBXBuildFile; fileRef = F10C56C1DD0DBC1297C6FA4D55986B04 /* spc7110dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; AD7D53389EE6FBD882ED47A69EA528BC /* retro_common_api.h in Headers */ = {isa = PBXBuildFile; fileRef = B636371B292E5B16402AE89C9B512E16 /* retro_common_api.h */; settings = {ATTRIBUTES = (Project, ); }; }; AD95435739025FAAFEF2B5911CCAA4B7 /* StoneValidators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E4A59F776B62FE5D7D647BF19F07F8E /* StoneValidators.swift */; }; - AD9ED143C77CB1599C53004811B576C6 /* ucodes.h in Headers */ = {isa = PBXBuildFile; fileRef = EF0B5A83CEA7719FDAE73CD9B61BF813 /* ucodes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ADA219A2F6BFE7A593939A9E9ED16491 /* CombinerKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE736221B155C2514D9D36EB4FBAEEEF /* CombinerKey.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; ADBA2EA8F4CF15587337BCDC2F645BB0 /* retro_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF80C228030940A34A433995ABD6250 /* retro_assert.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE1A359FB304361E950FBAFB413D972B /* ZSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F80CF610BCA1225E6F34A2505B12C005 /* ZSort.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE0D7033540F0EDE845B0823AEA70E9B /* ttnameid.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E2DF4FE7FA12D11F9519C050CBAE82 /* ttnameid.h */; settings = {ATTRIBUTES = (Project, ); }; }; AE2B65C3F228FA7D15103DAB814EC3BE /* exprNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F88144124FBA971D0634C19257E4725C /* exprNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE769713E049B84B57453032779D836E /* ftdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C045A31E9EBE0F4CFBE198690BA4782 /* ftdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE46C27C2357729B0BD66E4CF440A004 /* interrupt.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD4F5AA816AA91F1CA362FFF3B5C93C /* interrupt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE5B6DA3E94505CAA5687A5D9E6549EF /* cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 28CBF616EB776A5C5D2F9A737B72AA74 /* cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; AEAF60DA9CCFF57F8FBCEDFFFC09436E /* ConflictRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE3F53289236C150F14F4B85B876D904 /* ConflictRecordOperation.swift */; }; - AEBBDC54DB66E473CA4D2CA762AD90A1 /* svwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA42FF0995A2ECDE8654C66A329FEEA /* svwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; AECB1619CFCEF7A7234852F00CB0C5C0 /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = D9E62A3E87A152D8A5A4747A0E88F317 /* SMCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AF02EA0DAD3FAC51CB5E859F81786EC6 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD38673C0296A73B42D147E647C1937 /* SessionDelegate.swift */; }; - AF0DCE9655B9FD35BC9D0A18E30C0A57 /* alist_nead.c in Sources */ = {isa = PBXBuildFile; fileRef = BBF2CF6F66F587AFDA21E30888FC7210 /* alist_nead.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AF384C3F516776514598AB608BF28CEA /* RSTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B3F0409CEA697951ADECD54AABFC17 /* RSTError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AF3B145662403775AE286362BD64CE15 /* SPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 00ECD1D300178CB98731BDB344274AF6 /* SPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; AF57DF3FC4B0368E92B51C386ADE38CB /* NstInpZapper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95DAC95CF90CC293BB4C45375EC16E36 /* NstInpZapper.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; AF71438F7AEA2FDF0A4B8132FC6ADB97 /* NstBoardWaixingSgz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8C90F98584A8B4B3D48149088FD57C77 /* NstBoardWaixingSgz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - AF75C6505DD091382DDF3792EB91B958 /* GLideN64_mupenplus.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F557085D0365AECB4077B82DE76E12 /* GLideN64_mupenplus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF8D229671101CA8A1509B89D0CB0FF2 /* sram.h in Headers */ = {isa = PBXBuildFile; fileRef = 022DB7F76D90A69E8472052BB6DAF7F7 /* sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; AFB0BE8A36022E71E1739AFFA0DD2DD5 /* ARCodeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 72866AD3D95B81BC911D7A67CEBC69CB /* ARCodeList.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + AFD4E7E3575D14B1F4B0301FBF339C8D /* TextureFilters_hq4x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 61394348571E8373817FFE9C2319D511 /* TextureFilters_hq4x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AFD5F72E1203590BAF3FF051AC1D4A1B /* GTLRDriveService.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EB7FA5DB62956C49A473DF02AE5456 /* GTLRDriveService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AFD96D371E8D60B2143D73E312E24BD9 /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA67DD1AC07C6365F72FCAE6272760D2 /* Entry.swift */; }; B011E9394F81876D07949F6C4247ECA0 /* SoundFileFactory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6F76413369DEBF1203E4F23F42C0D065 /* SoundFileFactory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1239,92 +1205,93 @@ B047CED3CE820B6D442A496BFE713A34 /* IpAddress.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3C7AC7D01BEAA298AE2E5122EB24308E /* IpAddress.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B09052B271013EFD3E592D4E87ADC3D7 /* UIImage+Manipulation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D545FA281C697B8D7BEEC43C6652189 /* UIImage+Manipulation.h */; settings = {ATTRIBUTES = (Project, ); }; }; B0B08B97A524F8D48FDDA2249AEAD6ED /* Harmony.h in Headers */ = {isa = PBXBuildFile; fileRef = 94188727366A8D8FB099D152B9B5514A /* Harmony.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B0B1C045C677C89BF5B9C28280948EFF /* TextDrawerStub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 406313DF7E94297A75C613BDD3988DC7 /* TextDrawerStub.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B0CB31DCAFF38374A10B45E212587713 /* NstInpDoremikkoKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4ACD840C16D41B8494693E00BF6094C9 /* NstInpDoremikkoKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B128E8E439A9E5BDD9CE64F4EEDA1AEE /* audio.c in Sources */ = {isa = PBXBuildFile; fileRef = D96CE517678765B006B018E340F3198C /* audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B128E671FDB13E480E8281EB7C33D52D /* assem_x86.h in Headers */ = {isa = PBXBuildFile; fileRef = D2188A915972865B5AF5C68B8B6D05B3 /* assem_x86.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B15418A2DCB1E1CDD4D5EC08C1A03A30 /* GLFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = B54D71F0A9EE62F2B238B985FFE6C460 /* GLFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; B158F6C6F5B890AF5A00D8492705CB38 /* matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C50053E5D39FB4F4F1BA560C86E2311 /* matrix.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B176188727DE2DD341E44FF00F4BAAC6 /* glsl_CombinerProgramBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = AA792B0E18A3BA4548FB2C386287DD46 /* glsl_CombinerProgramBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; B1766B3E76519CAB435EBB97EEF315DD /* GameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7BC2C79D27AA4D45DBAED609878B0BF /* GameController.swift */; }; B17C1766C96792D8E4702F83155E438A /* NstSoundPlayer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 31E520FC3E469009B4F65BACFD5C14C3 /* NstSoundPlayer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B18BDE9F23964986DC1C252B20A2B80F /* RSTCollectionViewGridLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ABD8BA817A5B6DB4C5828318ED97014 /* RSTCollectionViewGridLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; B1B404D70676CCCFE3325E089DDCAD9D /* loadres.h in Headers */ = {isa = PBXBuildFile; fileRef = B29A8EB5AC9C464A3E9D1DE0A0715E97 /* loadres.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1D54C35EB4095E41EFAFBAAB49C6FD0 /* svgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = 19B404312BCFE831CA10C0C54C6D0B58 /* svgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; B1FA10A1E7A8D914849E2F9982C44D07 /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = 831586913D802CF0F3BD70D6BB259E5B /* Record.swift */; }; B219C7FCFC30F49A2B96B301127F71A7 /* NSError+LocalizedFailureDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B7E86F1B639A123C10CF5C402F415B2 /* NSError+LocalizedFailureDescription.swift */; }; - B23FB033A07C66C2629201D7878FA1FF /* SoftwareRender.h in Headers */ = {isa = PBXBuildFile; fileRef = F687CDE1CC73F1023FA06367B7621C39 /* SoftwareRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; B2413D48BE65FF8FD294A53D5C5B760D /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C17445D591C8EC78950717FD3D5F77B1 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; }; B272AC71D7ACB699920703161A1752AC /* RSTSeparatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 329C5C85AFC08890DFDEC9E233470EF0 /* RSTSeparatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B2869FC2676716D20DA1CC8F2460891E /* mi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = FCE15B7CBF75268739FB87C1E0C6AC09 /* mi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B2B8DE2F3D6D41C30F1883FA61776424 /* ftobjs.h in Headers */ = {isa = PBXBuildFile; fileRef = 531E9AB4F828520F2368955170BA41BB /* ftobjs.h */; settings = {ATTRIBUTES = (Project, ); }; }; B30D82E85429187E9C74F971CECAFD0F /* RecordRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA7701E75D51BBB26AF25CB686CB48A8 /* RecordRepresentation.swift */; }; + B31AAF00ED1C7523C8666F9611CCD0B3 /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 162D4D53C68E5F2542C1898C9D356FB1 /* pngtrans.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B3279DD4DDA04F5DCA2F5B03E29B9A6D /* NSUserDefaults+DynamicProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = B49CF1CC01CA6A0D613EA0862C7F450E /* NSUserDefaults+DynamicProperties.h */; settings = {ATTRIBUTES = (Project, ); }; }; B34FFF478B816C21FA1425DAB52AD1BA /* NstBoardBmcGoldenGame260in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0E4E5A811FD38FBBF35D0F783DD6B5D9 /* NstBoardBmcGoldenGame260in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B390908E95C1D679EB6EFA22AEABF82C /* osal_files_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33FF8A61B13EE6F6CE800CB771D90EAC /* osal_files_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B3B0CAB964F5C903A859882947D5A72E /* NstBoardZz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F59EB83ED791F8F1742B8C9049F05E99 /* NstBoardZz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B3C63A4395449B36D761122AC4A51AAF /* NstBoardSubor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0BA3AC744A6D8C4122D7F2407E0AEE17 /* NstBoardSubor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B3D38E5D11BC50709CA52D6FFC2B9864 /* NstBoardBmc76in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 491A54EEB06C94D08F280F0DE9437646 /* NstBoardBmc76in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B3E4E3424C67ED018CA0EF4B73795A17 /* ftcid.h in Headers */ = {isa = PBXBuildFile; fileRef = D6FF04411B9686AB60189647F155133B /* ftcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; B422DCB989FF675D287C579D280F8253 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ECC57680ECCFDA6CFA7FED355B4F3AD /* TaskDelegate.swift */; }; - B425DF73F64609FA542BBFB0BE9EDF03 /* PostProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5370103F49292571EE10317A74B0B2 /* PostProcessor.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B435171F5FA2EBAC3C23A866769BE557 /* r4300_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 3223712696A5DC7DDD4D4DE6BD2C95A2 /* r4300_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; B435EECA15AF195F0828E24958F90C6F /* SoundBuffer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 59A2650A6455EC2EFC3FA9F2C0886519 /* SoundBuffer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B43FA418644B4522331BB3C00F854B24 /* si_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = F48DAA56FC916AB087B5D26A104F31E0 /* si_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B445DE84FFD95F74DE320679C420C280 /* F3DEX2ACCLAIM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81D97BEB994C55C6EFABAC633B5D0966 /* F3DEX2ACCLAIM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B47F87DC8093788C4F7F5FAA80E88648 /* S2DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 078EC48CFDCED61DA3CE896FA2BC1477 /* S2DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B45AEB6C64280161DD04BE8AE9A34820 /* wglext.h in Headers */ = {isa = PBXBuildFile; fileRef = FE48EE5ECA5693381EB62AA0D741E0E8 /* wglext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B47F724913D168FE78B1209FEDD4AE6F /* flashram.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE08C498FFB93AC32DDE6D957B5E24F /* flashram.h */; settings = {ATTRIBUTES = (Project, ); }; }; B4B9606F74B2AE01213BCB4FBAEE6F6B /* RecordEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 699F79983949D91377333D55142CEB7E /* RecordEntry.swift */; }; B4EB521CC2E0002F09E6D89D72C05EF4 /* RSTHasher.h in Headers */ = {isa = PBXBuildFile; fileRef = BF8EBB70E09CAD5AD9E5BB36757BDD4E /* RSTHasher.h */; settings = {ATTRIBUTES = (Project, ); }; }; B51466218A72A889E8E988A7DB33701F /* NstTrackerMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8009E402564A24AC35F53518E984813D /* NstTrackerMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B53E55152ACF5185856AA85EFFC3B4B8 /* NstBoardCnePsb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8D03641E7133709402578F9CCAF2CFA6 /* NstBoardCnePsb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B560A089A1D47EC1F0B26533258C7317 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18B035B874A3872AE52466285EDB74ED /* SessionManager.swift */; }; - B56D331A25A771CAD8AAA58BCCF4FEC5 /* DisplayWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 91F00C1F0698F991A6DDB258AD21774B /* DisplayWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; B56E07AC98E8D928C9E900BEAB1E5D9E /* GoogleAPIClientForREST-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5217968080F1594E30A54230FEEE2E88 /* GoogleAPIClientForREST-dummy.m */; }; - B589CDAD880DE2B506BB8EF95CA2CBD2 /* autohint.h in Headers */ = {isa = PBXBuildFile; fileRef = 29100634EB1C2E5E9877D238B86CDBB4 /* autohint.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B582572109476CDF6BD578A719D8B9A6 /* interpret.h in Headers */ = {isa = PBXBuildFile; fileRef = F85A845F1619F7A0F0BB1F552B74AA0E /* interpret.h */; settings = {ATTRIBUTES = (Project, ); }; }; B592BEA6F00B6CB2A68FF21EE18DCCE5 /* FTS4.swift in Sources */ = {isa = PBXBuildFile; fileRef = 399303C061E83D38C607412717024931 /* FTS4.swift */; }; B5C71F73361EF8A4F64FD74A6E1F9560 /* BPMDetect.h in Headers */ = {isa = PBXBuildFile; fileRef = 274CDB9B8AA8BAECD4E2BB3670A376D4 /* BPMDetect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5E129441B9A582B280D6CB490CC9B18 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 523D82D262DC8E536D345567D04FF3F5 /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B5E9F103B89A4D65F3C103264D8F0075 /* F3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347EB9305F4E36DD5D07096703DFAC24 /* F3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B607C73513457E83CDF3A4552A8819C2 /* FileInputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = ADA9C40834B8789246B849280056B7BB /* FileInputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B61D9640C9B6788C0E1EA9A091CF5EC4 /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = F6EC76AAFEB4EFCCAA67C1913C4F3FB1 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; B624009110AE452CBA01D50AD9CF2E24 /* snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = BDD0219A0927AFD5212597224C8C9A18 /* snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; B642F97A1B4740DADB75F4DF9357776B /* NstBoardSachen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 294CF6CD997D9E587A99F6DFE61FEC0F /* NstBoardSachen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B6758D43CD69D4728C2DEE14394F151C /* GTLRDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B98EACC45CEADA2FC73EB069E37FC7 /* GTLRDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B6D3A3FFEE078C60C5964AFC10A2BA8F /* assemble_struct.h in Headers */ = {isa = PBXBuildFile; fileRef = D91D509E04E52EB1EF2C6CE6325D63E0 /* assemble_struct.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B6EBE57D0E21E77897AE81B558932730 /* TxImage.h in Headers */ = {isa = PBXBuildFile; fileRef = A5234D695ADE2B2BAE15139F5B2FD0BA /* TxImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B70168F7C469666BF680C64C641ED1AA /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 16A28BF70DE7AAE9C02DF33216F1076A /* opengl_ColorBufferReaderWithPixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; B72829BC0D61AF2E97C134A12BB5387C /* GTLRQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E64591CCE82CAC6775DAB365A75A8BC /* GTLRQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B73AB37F8B742739EDA3C074F536FBC5 /* DropboxService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46A2C9BD6F58478A775BFC3629531415 /* DropboxService+Files.swift */; }; + B760AD96450CB0BC0A0846109FADD4C7 /* cicx105.c in Sources */ = {isa = PBXBuildFile; fileRef = AEBCD05077A7A9D50A99D05DDFABD57D /* cicx105.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B769CDC513B5AC715C708F8414DE98BE /* SPU.h in Headers */ = {isa = PBXBuildFile; fileRef = F08C08AAB29244E9A786468ABCA8B758 /* SPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B7C664FAC38D496EC5D9FC2CDDA080FE /* video_capture_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 959C8F76FF4E413331083F4B7271A79D /* video_capture_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B7C6C5D16FE1D66425DF392A0649A120 /* CommonAPIImpl_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDBCAC7AE4C298FE4646BD7005AEE4F8 /* CommonAPIImpl_common.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + B8086078DA198494B02348248F53B128 /* TxHiResCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 47179FBED9A19BF96E05BC6C9E3056FB /* TxHiResCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; B848793866F0C67ED92B0308CCB9D6F2 /* NstBoardAveD1012.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D164ECEA35ACB2EFAF45DFBDE6086CD3 /* NstBoardAveD1012.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B86F11AFBBF731D60E75BE5A170FCCD8 /* si_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = F48DAA56FC916AB087B5D26A104F31E0 /* si_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; B8955C9472B44FCEE652CFFAB57AA5A8 /* Http.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BD91AF2C48D679F07CCC9B6D62701470 /* Http.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B89DFCAD50363CFBDC53931F4F370234 /* Result+Drive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D7AE2A6BB60EE680F208CA7652859A /* Result+Drive.swift */; }; - B8C2E560CCEB5C574511691807B9D8EA /* glsl_FXAA.h in Headers */ = {isa = PBXBuildFile; fileRef = DC2E2AF3A950FAF5326EEE74CDCD4D10 /* glsl_FXAA.h */; settings = {ATTRIBUTES = (Project, ); }; }; B8EED4F04562CE0F560AE123C1F737E1 /* UIViewController+TransitionState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A0BDC53FD9A10612B34F36860479885 /* UIViewController+TransitionState.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B911F3DE6189784BF450146FE29E62F4 /* VI.h in Headers */ = {isa = PBXBuildFile; fileRef = 66E2F83711E351CACFF208148B544CB1 /* VI.h */; settings = {ATTRIBUTES = (Project, ); }; }; B94304C605E21C38958D8B2399F806E4 /* ManagedRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BE21537778C287EB7835EE5A1CEA97 /* ManagedRecord.swift */; }; - B951E2150D8C56060DDD22AACC1F0A12 /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 325E8BBC08F3C0C7CC6EE4B27346E532 /* md5.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B973B21DA14F4A034B18611A4C30754B /* TextureFilterHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F722266C08C5C1739772E3E72CEE17F /* TextureFilterHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; B97F1A94FF1030E195B110D8EEBCAA83 /* NstBoardSuperGame.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1FBDF4ACD90B4DED1F33312B991DB618 /* NstBoardSuperGame.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B9805A1656378AAA93AADAA09D5122C1 /* NstBoardAxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7BEE27F7FF7F6E7CA6DBDA14F15340BC /* NstBoardAxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B9D617B5B5EAF1315D131DBCE295ACD2 /* TextureFilterHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FC5602035B9E19D656976E460F7F90A /* TextureFilterHandler.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B9E14DD387C8FE6CD9A8A29DF12A8ADD /* getset.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B98706F4E48F8908BCD401802253AB6 /* getset.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B9F145E126048938862BB1034A7EA013 /* ai_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D58E3495B9E3434BF573543720CB50E /* ai_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BA26D53E540298C0F8C6B7FC9C1EE188 /* alist_nead.c in Sources */ = {isa = PBXBuildFile; fileRef = BBF2CF6F66F587AFDA21E30888FC7210 /* alist_nead.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BA2D57760A3C386F7C1C547729E1A472 /* NstBoardFutureMedia.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 459B516EA16454D8B783A5E6A1106CDD /* NstBoardFutureMedia.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BA530F1422205725B02895445DDF0F3E /* alist.c in Sources */ = {isa = PBXBuildFile; fileRef = ED722AEBC29811FBDB707822E79E137C /* alist.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BA5700A31EB47A427F8C75099C99FD06 /* rdp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 193B9E904D8FA162F2935AE2242E5DD4 /* rdp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; BA6F2DEA63EEA27BFAEDA2A35BB85F6A /* GBADeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B38944C4991CE901210237BE9D90369 /* GBADeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; BA8DAE2B382564F0C1EAFA4E759CADAD /* NSConstraintConflict+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EC1A7B808C5E2E304C086081DB1796C /* NSConstraintConflict+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; BAA4E74335AA7B36F2454711A5B55698 /* Audio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C789F35DF9D922934F14887196EADCFA /* Audio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BAA7B0396C8963E3E7324FE70900B64E /* Cheat.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BDD61DD53EB66909667FDEF0E033B1 /* Cheat.swift */; }; BAAAB1B9FEE1E71EB834788C59B174C4 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC22A3208696A410615506A968BEF /* File.swift */; }; + BAE25DB1A5B8BA8A01AF634BCB7CA69F /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 87CC302B1B1C6F71828303A524C51690 /* pngwutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BB0BB79A9140C13066DC7B7C8B203B78 /* Network.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D2AC56C3AE1F0BBCE09D6CE758D402CE /* Network.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BB191EC60D3AC3D5EB56CB411B128BEE /* Touch.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 66879FEB993CFA8011AE164C2E88927A /* Touch.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BB43B32DD16801C9214E36739BD6D080 /* GPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E028AD93ED1F6C5A46A56195C2CF756 /* GPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB62119EA148C79F62F0ACBD9EB0C565 /* interrupt.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD4F5AA816AA91F1CA362FFF3B5C93C /* interrupt.h */; settings = {ATTRIBUTES = (Project, ); }; }; BB961476561437CC41E703E25E767FD7 /* GBCInputGetter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8310F880B7CC9B1650278B22FEEA7A2B /* GBCInputGetter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BBC683E778EBD7924866C7857B19D11A /* NSString+Localization.h in Headers */ = {isa = PBXBuildFile; fileRef = 1363B01A18856DBE22D21EBF8088D06C /* NSString+Localization.h */; settings = {ATTRIBUTES = (Project, ); }; }; BBE93C6E95E356BE54C337E86C774BED /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14057D1AEA66E65BED2117946518BB10 /* Common.swift */; }; BBF6C4CF1FF711166B74A992339230EE /* NstBoardBmc64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B1E6115DADF781FBC5286DC05270CFDF /* NstBoardBmc64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BC2E1B2F335D8037CEBE9FA5E4D985C0 /* ftlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FF5B91527E584477B10719112BEA1B6 /* ftlist.h */; settings = {ATTRIBUTES = (Project, ); }; }; BC4EB746D2E13352424A93FDC7A52F78 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEC812792FD886E7BB2776C793B6BEEB /* Errors.swift */; }; + BC5201AFE5FB9FBB1A0D560CD9F93194 /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = A088B6DC0DF984AFEA200E3D0824458F /* pngstruct.h */; settings = {ATTRIBUTES = (Project, ); }; }; BC8C1CD0ADEE21D2C320F00B6ABD9DC8 /* GPU2D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F1439A262C75F30F451CE2F5AC4E9 /* GPU2D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BCBDF12AD11385D21AD3AA103D8B4EB6 /* RSTCellContentDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3827013A64806EC421D988347B05D5EB /* RSTCellContentDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; BCC3B83B11F726387F8C0A3568E470D1 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = DE7BED3E5E48EB3660BE48EE00FA7AFB /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; BCCF0B9F15A1651547EADC31A6CEB5C2 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = C87526B5C0AF75FA4CE41AA42D172B0B /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BCEFBAE2DC02775E49A13027909408F2 /* TxReSample.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F5F6218B59F2A6BF7EC220A625C8AB8 /* TxReSample.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BCFC498B83EBB0460E26731FF657898D /* F3DPD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F07E76FD0A048E88C13AD72461D1A8A5 /* F3DPD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BD016C62B0056C15B63A5A9396AB93F4 /* KeyboardResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45CF5051C61E98E1D10FDAE36FED44A /* KeyboardResponder.swift */; }; BD0CC9162B585EAC4F9D324068AC0A14 /* firmware.h in Headers */ = {isa = PBXBuildFile; fileRef = F20B25B2356078687C26B25825E487A2 /* firmware.h */; settings = {ATTRIBUTES = (Project, ); }; }; BD0D6665CD9A3B3C0AEDC4347A0BEBA6 /* NstInpBarcodeWorld.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8566DFE3C9D864188FAC41FB8316C1B0 /* NstInpBarcodeWorld.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BD13E45C0102AB99B304A2E15B6FA344 /* ftbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = 601F63C6825CC3B6550C9C4169033152 /* ftbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; BD21247A32EF0C2EACBF439E6C4B9209 /* NSFileManager+URLs.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E3B9E17CE51387A5C31A3D4D020CB3 /* NSFileManager+URLs.h */; settings = {ATTRIBUTES = (Project, ); }; }; BD76AF44C34DBCA99DBC73D5ED61FE7F /* GTLRDriveObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = 650B17EB11403844F72B9E0117949D63 /* GTLRDriveObjects.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BD98350191E37E34886D92370CDB8174 /* NstBoardBtlGeniusMerioBros.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 004BF1A3CCAB8016603DA7935B203E8B /* NstBoardBtlGeniusMerioBros.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1332,74 +1299,67 @@ BE4BD4C475FD682FA5F5A75F1CCB4940 /* GTLRBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = C977FFA5FDFB893A5DAB65AE680DA461 /* GTLRBase64.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BE73142C363020BAD22706DDB199D35A /* NstFpuPrecision.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 63180C4F702A63C80A6A6C9888B52876 /* NstFpuPrecision.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BE75DD1EED6E0D0B3AADC2A777C7D9CA /* NstBoardSuperGameLionKing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DD7037B9236081F8835FD977759FC372 /* NstBoardSuperGameLionKing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BE7A4ED43FCAC3814C10C9D5B3A68D18 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4876241413E9B62B9F4FF4FCBFBC93B /* opengl_ColorBufferReaderWithReadPixels.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BE8930A97F9D476C9A93D870A62B3D11 /* NstBoardRexSoftDb5z.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5F83D55C13FB6E1F63B5492848583340 /* NstBoardRexSoftDb5z.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BE8C54555C2620B25A50309D284227BF /* AboutDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 44FAD07D80BFEE0D325168C079FABD94 /* AboutDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; BEA3DB63075DE883B2C9506C483877DF /* UIDevice+Vibration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6DC5BD2D6B77CA14C62D6FF5EA327DB /* UIDevice+Vibration.swift */; }; BED24F03394D6879BAFB6D521219899C /* RSTCellContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = BBBD8731E43D4030EDC2B0655C688CD3 /* RSTCellContentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; BED6D68A786DBE5B331C32D88E209282 /* NstBoardPxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6792E65AE4C83CBE644B193BBA1E52DC /* NstBoardPxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BEE55582625F950FD131B8E9EF98E540 /* S2DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF4AC25F29497FA32921E869185CFB9 /* S2DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; BF2705ACCDBE29A8E3C665CBB877B64E /* NstBoardWaixingSgzlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2507A2AAACF2F3D12826D941CB970BEE /* NstBoardWaixingSgzlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BF3835EC0C608435A5068BD7DA290723 /* NstBoardUxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 45DE5EDAEF814543E00692730C996AC5 /* NstBoardUxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BF68218EA9CB72C37A86A7DC97330040 /* retro_miscellaneous.h in Headers */ = {isa = PBXBuildFile; fileRef = FECEA5EC0D42D4421643583D74C8F676 /* retro_miscellaneous.h */; settings = {ATTRIBUTES = (Project, ); }; }; BFAE59F52F18BE2C9796FA97184A813D /* TcpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 939A37FF787B2929926C6A99E612A7AD /* TcpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BFCB75257F3782795D068C01593C193C /* FullscreenResolutions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4730257B4F5FB617F71989B24D9EF907 /* FullscreenResolutions.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BFCC142C409062A9139C308E9DA99FA6 /* ftmodapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A23D7BFCABFEC33689D884FE6CAB2A /* ftmodapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; BFEDB3C71543B01C462D3562B179DA30 /* SDKConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95CCDA31768B63EA9440181D3FB6DD17 /* SDKConstants.swift */; }; - BFF00FA2CA9BCB91036CC7F37B8878C8 /* gSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C1361ED1C7AC536E50CC4A7BA396F6B /* gSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; BFF536B78DC4850A4A285C1D03F56057 /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 007B238BA4CBDD19AB8422150260B200 /* SQLite.h */; settings = {ATTRIBUTES = (Project, ); }; }; BFFFA37AA09F05D1D780084020C36569 /* ARMInterpreter_Branch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB6F1EA645B2A93AB915AD7BC3EAD8E1 /* ARMInterpreter_Branch.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C094CBCC986DF1C6C0A3379FCA09D462 /* biopak.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C84A3CF371C057839A68C574D020120 /* biopak.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C09ACD857947A188924A57EB95E3A3EC /* glsl_CombinerProgramImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 630D82E8861EDF03C0AE64781235E207 /* glsl_CombinerProgramImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C02A1354D86F3E5A4090F0FB08274DE9 /* r4300_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 3223712696A5DC7DDD4D4DE6BD2C95A2 /* r4300_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C05DDFDC87119249A89982825737D242 /* osd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AD3368B2D5D7E97A29573C83ED07A59 /* osd.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C08441EF9082D1908CDA86801CFF7967 /* ftgasp.h in Headers */ = {isa = PBXBuildFile; fileRef = 886A3E189B577FD6E4F71CFF3F0C163C /* ftgasp.h */; settings = {ATTRIBUTES = (Project, ); }; }; C0A46DD2A0BD6922A1E0CE926C0202B3 /* MelonDS.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB701508E5E2F9D08F436931CD05696C /* MelonDS.swift */; }; C0D9BA8FBC5E1F537EBE6CC92AB31AEA /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = 213FC7540DB4DF3F90B89035F984BD7C /* Game.swift */; }; C0E0B72CFF04ABCCDBC10213DE784979 /* Cheats.h in Headers */ = {isa = PBXBuildFile; fileRef = C64D454F5583AA5EC3D926CB2248F4F8 /* Cheats.h */; settings = {ATTRIBUTES = (Project, ); }; }; C101B03ACD6D46D16A8FAEFB5BB281CF /* NstBoardBandai.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C35789A01031A859DE9488BAE0FC99C9 /* NstBoardBandai.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; C1BC2E5368700E239EF29C36CE3B9839 /* GameProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = E336CAB35F1041C04DA2A4B22DF0D4FD /* GameProtocol.swift */; }; C1BF92EE9B78C154547D891F8156FD79 /* uncopyable.h in Headers */ = {isa = PBXBuildFile; fileRef = 034ECDF2709AB785B480F4DEBECA1C8A /* uncopyable.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1C5E0B49268CB4DB6B4B7CF63412FF5 /* F3DDKR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDC971E53465BFFF543E22C621BB9660 /* F3DDKR.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C1CA0A9670CDC24476DD0BC30CBAF2F9 /* DisplayLoadProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DEC0821C3D8852D66B08A0002AB2F015 /* DisplayLoadProgress.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C21855C2E5D6487AC2B921AD79922E14 /* ExternalGameControllerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B73E9E04EC1D9DC2F189BC9DC0A68ADB /* ExternalGameControllerManager.swift */; }; C2992FB2C5EA630CD93BB356A0364AB5 /* AREngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CC64C89DA860743FE62F576D82428F1 /* AREngine.h */; settings = {ATTRIBUTES = (Project, ); }; }; C2A7BEF4712B927F676D5521BA4CDE03 /* Vector2.inl in Headers */ = {isa = PBXBuildFile; fileRef = 26980C04667AAE6697AC84486BB012FF /* Vector2.inl */; settings = {ATTRIBUTES = (Project, ); }; }; C2BE25EB20537FCA2EE93FC27875B382 /* RSTTintedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = B31BC317B925949D8F6F764866AECFAE /* RSTTintedImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; C2C42639F8B8C99AE470FFC772F27320 /* NstBoardNanjing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FD63E3F134804425401C1B74686EDF48 /* NstBoardNanjing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; C2CDA8FD21D4EABCF46E596D822C87D5 /* GameControllerInputMappingProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2985A6A24D313B24B3A42ED617C00464 /* GameControllerInputMappingProtocol.swift */; }; - C2CE2BF3BF9FE6464EFA9299139418C1 /* fb.h in Headers */ = {isa = PBXBuildFile; fileRef = F650B1818D017BD4A14C1415647FCDEB /* fb.h */; settings = {ATTRIBUTES = (Project, ); }; }; C2CF08E68D39B2B25982B6AD4BE22708 /* FinishDownloadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B914A55A521830F330AED535B8835A5 /* FinishDownloadingRecordsOperation.swift */; }; C2D45C2E6F31EA9735644BA45EDC472C /* GTLRObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A171E0701260ECA35983A32816DB522 /* GTLRObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; C2E179FB02E7F0CD7231AEF5DF00CCB4 /* CRC32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59F8B6172F22E2155F8670897E6C81D6 /* CRC32.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C2EB4CB575EA9821E30A317574865D17 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC73A05080E7163BE6F8E9426032C82 /* MultipartFormData.swift */; }; - C34D51CEB4E00C5A195C5FF17A900866 /* glsl_CombinerProgramImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2815B1907C011A39DFB5DA9B3B93A230 /* glsl_CombinerProgramImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C36CC682F07B3FEA5A1B00C139CCB3EC /* NESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7647C29F1EB2BC67142E821D427D0865 /* NESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C38E914D8F66B0BD258C83D7C35C2726 /* opengl_TextureManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A52EF817DA55C490E46C80C1AF0F283 /* opengl_TextureManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C394492C7C415D251CED3A19FC797560 /* ftgzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 22528395152B5ECC856B25BADDACB3F9 /* ftgzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3ADA5023FC1C283152E2C1813982117 /* TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 36B21AD2A8F390B23FB0A538F357E4D0 /* TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; C3B11E4AA028617D0B3134BF96B451DF /* usec.h in Headers */ = {isa = PBXBuildFile; fileRef = 797293ABB0B561C6FE9D15E812E45081 /* usec.h */; settings = {ATTRIBUTES = (Project, ); }; }; C3CB14A07161497CA6FAA6858EFF4F4F /* Thread+RealTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD21182E096CF262039B0C3A26E9769 /* Thread+RealTime.swift */; }; + C3E9BFE46A1072D5D11FD6DF0C118804 /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 3626FD0512609CFE865D492929315B1E /* pngrtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C40257B054B827F15814443893FE2D5C /* GTMDebugThreadValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 026273C8CD9BD9384803DD59CB45DF96 /* GTMDebugThreadValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C455219A8550223E4C8003DD899834B7 /* TxInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D02F91DD08301C06A04A0C6273FC0114 /* TxInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4552D4F06F08287FB112E8B10CFC47C /* Revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D4A9FA09D0CE373E943419685E8D514 /* Revision.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C42DFD819758EC081341055314ACC55E /* ftadvanc.h in Headers */ = {isa = PBXBuildFile; fileRef = 97A529B5224544C993C7547C6A313CCC /* ftadvanc.h */; settings = {ATTRIBUTES = (Project, ); }; }; C45537121E620342F23894864D721C8D /* GBATypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6528F5BD6DE6044B356E5ABAC6FAC340 /* GBATypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4561DB72CCEBA4FF6445D4738B7C7DE /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C18B2ECEE548A1C91E8FE550A347BFB /* opengl_ContextImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C4AFBF63C66D464CB5BF0FEE936B0A14 /* bootrom_hle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D2AF58B1BA6D02D19EAE80F80E4CA9D /* bootrom_hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; C4CD30F775B2D8F7ADB0CDAF05C03983 /* Glyph.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D4443534BC214F7BD24E7115ECFAD056 /* Glyph.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; C4D651A1DA5790D9EB95954015D606B3 /* NstBoardKonamiVrc3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 237AEE8BB0BEDA0F90CBA83BE3E11B81 /* NstBoardKonamiVrc3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C4F0718815D0222CC34BA8A7FF4BD7ED /* TxFilterExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8DC89DB8BDA2642C42D9CE6C493AC371 /* TxFilterExport.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C51A52DF29F0F1A14A3C4A2435A027DB /* NstBoardTaitoTc0190fmc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E73487409C40B8A2E9B7483BFF193799 /* NstBoardTaitoTc0190fmc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C564BC767458B4CC26E9A5D4DA650B4A /* FrameBufferInfoAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 120C5D8AF966C09C6ECCB59508E8C8A2 /* FrameBufferInfoAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C51AB52F55218B74567CCD1A37365F1D /* glsl_ShaderStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E7A6E2D2600BE5C4EEA5BD6FF1BD0175 /* glsl_ShaderStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C57FA8AFDD52EE6417A2E0C1274059E3 /* NstBoardHenggedianzi.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 63F723BED507FF2FF061CFBDA2D2DC5D /* NstBoardHenggedianzi.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; C593D8CC9F1A9B223285B2E986CD444C /* NstBoardWaixingFfv.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93A4D0810FAC23701F57EE4E6CA1A7C6 /* NstBoardWaixingFfv.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C5A1264CC2E10DC15FD86C842D770914 /* PaletteTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = A0430F33B2F349ADD6CDB6AF35310BC9 /* PaletteTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5A4AECAAF05E89502C860A98B33AAEF /* S2DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C4333506EF373E1D2841A18039C8379 /* S2DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; C5AB49D57E3EF7CD32C4E07A1A2DC017 /* ThumbstickInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1AAAF56DFDC2516C9F0F82DEA17511B /* ThumbstickInputView.swift */; }; C5ADB3E8439A575CB85F2DC37DD3ADE2 /* NstVideoFilterxBR.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 867F308297D845E4AB0774374BB3EFB4 /* NstVideoFilterxBR.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C5BDCB21A3BAADFBD6ECC0E1BF2B15F5 /* Context.h in Headers */ = {isa = PBXBuildFile; fileRef = CE641ADC83B5D0F02766689E3A81B2B1 /* Context.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C5C7D15D0CE88D7F9A9F66878DBB4248 /* m64p_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DB69BA777DA2D7FE96274A0B4EB4BB5 /* m64p_plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; C5F1C4A446D8769AF9535D1036A3E0E3 /* memalign.h in Headers */ = {isa = PBXBuildFile; fileRef = FE67AEDDB46071185B8EF236FD149EA7 /* memalign.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */ = {isa = PBXBuildFile; fileRef = F20F4C74BB8804B518393DCFC21CB9FB /* pngusr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C64C503EB6132EC922D43AB0B27FD21A /* DepthBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 033421C4854AC34E9F0A5215AE7F3AE4 /* DepthBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C64BD3A6EB67DB072D73D1C4878D2A36 /* recomp.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E695BDE117DE11C2A9816B243CE8D2 /* recomp.h */; settings = {ATTRIBUTES = (Project, ); }; }; C669D2A2AEB5C8351795BD1BD61EC908 /* UIImage+Manipulation.m in Sources */ = {isa = PBXBuildFile; fileRef = 97B9144AB8468E437ABB41803974D033 /* UIImage+Manipulation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C67F326A6AF0E3C1047D6DC2008B71AE /* Event.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F013766E35198FF97F65503319E09993 /* Event.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - C6B8C839FA0BF0A1AE168CC27EC12FB7 /* ftpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C47A891929053596B4282BC5DDB0A7 /* ftpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C6E4FBCFEF73B36D1A8501B5939B6484 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E69C29F29CC024AF25B51D0D32627EE /* profile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C70555D93FB3D865E74813F1EEEE7BB7 /* DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D14C427796C3B67D5F822717322045B9 /* DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C72087EDCF1BAE223A1BB8C94BA87329 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BB44A4386C6A18D5BEA9F5AF2E1EF0 /* Statement.swift */; }; - C794D4B738B15C7F096A903C21D39FC2 /* pngset.c in Sources */ = {isa = PBXBuildFile; fileRef = 259F2453A2569EB3489497BFC04DC6EC /* pngset.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C7640111480187552170C57BF9619C14 /* TxUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = FEAE71533C82C752E7F1D21A99698CD1 /* TxUtil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C7A7445F29728F2BEF1D80BC7C35DA4D /* ZilmarGFX_1_3.h in Headers */ = {isa = PBXBuildFile; fileRef = CA7FFC847A5DDF0337FD944CC08D1D35 /* ZilmarGFX_1_3.h */; settings = {ATTRIBUTES = (Project, ); }; }; C7CB102CC0A1B62D7A956BD46BC0C8FF /* GTLRDateTime.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BA56585EDD13E71C58B7B7C64DDB53C /* GTLRDateTime.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - C7D9222C5D58945DF45292909C3A16B0 /* glsl_SpecialShadersFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D763E69CEADEDB375FE897F8EAC5BA0 /* glsl_SpecialShadersFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; C7D9C03D29D663952B0B97466F107D12 /* GBADeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EBF414719FAD26FBA9B9AB0E2F855F3 /* GBADeltaCore-dummy.m */; }; C7DD70EC49EC3FC47CF6D741BF54B670 /* NstApiCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 114921A6CAF20904FE9B8E29537F98A4 /* NstApiCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; C8065BE8E7EE0A002B995608EA590F05 /* getopt.h in Headers */ = {isa = PBXBuildFile; fileRef = A872D0AF2F86BA70FF401F6898E09D33 /* getopt.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1407,23 +1367,32 @@ C87DC4532FB4EDA639952BE7DB5EA0A4 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 5FA683FD9CEB1F0629D3586B5C0D5276 /* Standard.deltamapping */; }; C8938F662C069F5F0A31F1853DC14D2E /* GTLRDrive.h in Headers */ = {isa = PBXBuildFile; fileRef = 3144D27552079845BF5B0637FC88D62B /* GTLRDrive.h */; settings = {ATTRIBUTES = (Project, ); }; }; C8963BB26817BCC33E40F9AE8652DE31 /* NstBoardMagicSeries.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DB36295AA4074B36829063D11A8BDC98 /* NstBoardMagicSeries.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + C8D05EDF6925A01947DAB32564282D78 /* F3DAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 5874E00381FC42362866EFFB712A5697 /* F3DAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C92F9000C0A370F7B961E659F246F6B6 /* fterrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 71CB328D9397310D6DF21B68E80E7672 /* fterrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; C96524CDB423028248FE52A069C84B94 /* RSTFetchedResultsDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 2090E7B6074A480B545986DD5394BCEC /* RSTFetchedResultsDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; C9898D393FDF7E17C404424E76078E76 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51271E29C0A54F7A1326245A7BE21051 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; C98B4D02BC0E57B4BCBF55318C7991CE /* RSTSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1EB2114C929E81D171083B106C71103 /* RSTSearchController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C99792D9CCCAA1633F30B5C770D209E2 /* opengl_BufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24ED56596D00F9B9AD800B7FF30622F5 /* opengl_BufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CA01B933786390F57E6A2168E315C4AC /* new_dynarec.h in Headers */ = {isa = PBXBuildFile; fileRef = 62CF8182659AC61B46F3EE64308E7BA7 /* new_dynarec.h */; settings = {ATTRIBUTES = (Project, ); }; }; CA52FE953A256B3FA7D63719284CDD4B /* Dictionary+Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F6407C6FBA4E320D564FF013EBEDCF4 /* Dictionary+Sequence.swift */; }; - CA76BE843896592E98D70D4C9937477E /* transferpak.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D36FB1E125F6A30F7E99925C34CD64 /* transferpak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CA85EB6916A90E0948AD91B44AF2D1EE /* ftmodule.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A22E94D129FB402325A388CC5DF7FDD /* ftmodule.h */; settings = {ATTRIBUTES = (Project, ); }; }; CAA19D846835105188A3CCC602CFF800 /* InputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 502A6CD60EBBE6E5ABFA9CD22B78AEE5 /* InputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CAB565C736064CE66F49FC2F9939F653 /* oglft_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 33BD33AF73BEEF1769230AAB1B73B0F8 /* oglft_c.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CB0762ECE40307553CD674252738DE2C /* glsl_CombinerProgramUniformFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4126A8BF1768F9983511F2926680B88C /* glsl_CombinerProgramUniformFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CAC47B07CB7EB748B29FF500CFD868CF /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 325E8BBC08F3C0C7CC6EE4B27346E532 /* md5.h */; settings = {ATTRIBUTES = (Project, ); }; }; CB4D7CCAB208A3DB446872AD7C63A241 /* NstBoardIremKaiketsu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 71AB68FE56ED4BF2433BBC850D1026C5 /* NstBoardIremKaiketsu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; CB7A5FD2D111FB945D4C60F8F9CEB90A /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60E75825D0C5BBF73C1EE33565BACBF /* RTree.swift */; }; CBD00AD2D050E606B432EF764F0443EF /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E672A1C13EE353B0AC39DE0F84A4323 /* FTS5.swift */; }; - CBFE788323DBFFF81708B579E642C550 /* plugin_delta.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9579AB2737FD12BDDCDEDB9799737C0 /* plugin_delta.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CBD2DBEF004FFD1ECB71215BF0732DEC /* Parameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 772DEEE3A8A1AA94502EF6098107740C /* Parameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; CC0725ACB5A40F203229C0A25D761B23 /* NstBoardSunsoft5b.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF0FD474F9FEB46BE9E7E78E2AC5A906 /* NstBoardSunsoft5b.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CC0EA78FA60E115C914C9F9FF86207D6 /* FrameBufferInfoAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 120C5D8AF966C09C6ECCB59508E8C8A2 /* FrameBufferInfoAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; CC26D87FA28610D70B4991837FDCAE5D /* NstBoardMmc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 10A0472CDCFE1CC45A359E5838CAB872 /* NstBoardMmc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CC58DDF76C1D36A4C1F82D0E4ADED75F /* glsl_SpecialShadersFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D763E69CEADEDB375FE897F8EAC5BA0 /* glsl_SpecialShadersFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC5E67A0FBB0E024BCD8D295572616E1 /* ShaderProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = FBAE8914742053CB6ADCEC14737596F0 /* ShaderProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC5ED7A4B4274891BCA47D0A1049F072 /* ttunpat.h in Headers */ = {isa = PBXBuildFile; fileRef = E1210995B1881C4C2239A38E329170E0 /* ttunpat.h */; settings = {ATTRIBUTES = (Project, ); }; }; CC71B7C78DFBA5A59F4A9F1260B6AD64 /* System.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BEE8A481C346821332E9ADE7236FB066 /* System.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - CC99BBC4FFD7CDDC2649600E0FA37564 /* check.h in Headers */ = {isa = PBXBuildFile; fileRef = EF146F5F4C23AB7CC20D0F4F40286379 /* check.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CCB42259A3740417E34809B42683CC18 /* ZlutTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C680EA14E1BCE635BDC66F5CEF30F4B /* ZlutTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC844647A07201642BE695D9892B103D /* opengl_UnbufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = DFDA1E12C63A8E139E0F5F52E6F63F9D /* opengl_UnbufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CCB250130720CE2E8F35733C13A8B17D /* glsl_FXAA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 816DCE1C4957B5B87AF4A2EA4D7451FF /* glsl_FXAA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CCB2EDE02326A68F8E8960270D5903D6 /* vidext_sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AE7E3B37D390409F4ECEA14098EE0F7 /* vidext_sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CCFE88A1721F242143DD8BE238B70173 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = C53D9591F4B5C55AE48D566EAEA25FD1 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; CD26AC8863B99B1389D09F13D85DC363 /* NstBoardSachenSa72008.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 19ED46C78502A6DECB9188858E546EFC /* NstBoardSachenSa72008.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; CD34FCE9FB88953FDCD13328912591F0 /* GBAinline.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CE24F478FF46EBF0A19AD377B420DF /* GBAinline.h */; settings = {ATTRIBUTES = (Project, ); }; }; CD43E632D8B976AAF6B22A9A83594BD8 /* NstBoardBmc800in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E2B96FEA76E92236E75F0848DE0D7ADD /* NstBoardBmc800in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1432,330 +1401,361 @@ CD819361F1900AD6FB43579B9DCAA9BF /* NstBoardTaitoX1017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B8A07AF8FA08DD189EA38E162C486A42 /* NstBoardTaitoX1017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; CD821C3D00A559E41113DAF03124B0FF /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C82EFB2F13ACDF594E201C36E2BE936 /* array.h */; settings = {ATTRIBUTES = (Project, ); }; }; CDD28AC1BB0F07E4991F10641F3B3ACD /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 73BCCFACB97ADF9811932D4767D83953 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CDF6E0B6206AF9A35A78A3C6D7E50BCE /* ftstdlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 487DD8DC7317E0C36210DD3B701C4E0C /* ftstdlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; CE10DDDAE7EAF229186F72415E877A1F /* RSTLoadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 451CFB17CBEBD52220C6B8E9777016CB /* RSTLoadOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE77541D89641C7165E9A0A56ACC5B13 /* NoiseTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 49C63527B0BFABA381E737722D9FCB11 /* NoiseTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CE4FF62954D9D2CC3499AFB74E9BA974 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4876241413E9B62B9F4FF4FCBFBC93B /* opengl_ColorBufferReaderWithReadPixels.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CE8C2685076CD3712164E2B091B9559E /* TxReSample.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F5F6218B59F2A6BF7EC220A625C8AB8 /* TxReSample.h */; settings = {ATTRIBUTES = (Project, ); }; }; CE8D08D29BB0A4769D2C276605AFB50F /* Harmony-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C84F53DDEC96ABDB4E99816C838005FD /* Harmony-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; CEAD3645EFC4389694E75CF1068CC91F /* HarmonyMetadataKey+Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7995A2AC9E3D083B7373FC9209B625BD /* HarmonyMetadataKey+Keys.swift */; }; + CEB4CEA74EBAAE30B91E25412FC5310D /* F3DEX2CBFD.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD20790AB990ACC80BB8996D8F6E7CF /* F3DEX2CBFD.h */; settings = {ATTRIBUTES = (Project, ); }; }; CED63E1AB568688A1C00CA58D790243D /* DSTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 6572AD0AF91A5CC97E1F7CEB62ED94A0 /* DSTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF0AD48E0F3BE7E612B1A6D234C3BA4C /* TxFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC339C9C59B65A4D6483598A6451971E /* TxFilter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CF14CB07724E28C9AA37889A92FFD645 /* GTLRURITemplate.h in Headers */ = {isa = PBXBuildFile; fileRef = D27C9AEA920B8065DC8FB0F6F92A6E26 /* GTLRURITemplate.h */; settings = {ATTRIBUTES = (Project, ); }; }; CF15A4FD0438274D29A83992C4D7A186 /* Result+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439530753701672255509E76BB1AC1D7 /* Result+Dropbox.swift */; }; CF250F8607C7E5B37247613578134177 /* DriveService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83EAB31E2D8E6844C8AD8F3F95F9ABB1 /* DriveService+Files.swift */; }; CF31DD15B783DC030C99042424B72681 /* NstBoardBtlAx5705.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DF5405AEB7C1FBC155A415D86594377C /* NstBoardBtlAx5705.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; CF652780A826660EF98D71D7CBD05BC2 /* GameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65E0BB76F563A560B6025A701C5B300C /* GameView.swift */; }; - CF85240AFAAECCEC4EED6E2AE3F565B9 /* F3DTEXA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F491BE89CC65EDBFCEB3B214D06C7200 /* F3DTEXA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CF96B67066487C2BC53BDD35D81C0601 /* opengl_Parameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A35B20685D6B2F22C568D23E73C3E50 /* opengl_Parameters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CFAFD40E7046DCF2D88C105C118301B6 /* pngstest-errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 16F999D1DA5FF8502A180736C3C54BFB /* pngstest-errors.h */; settings = {ATTRIBUTES = (Project, ); }; }; CFB692A4993E0C91F447057DF39648E0 /* NstImageDatabase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83C151DB4B297DC753E27E2E0F3C3BC4 /* NstImageDatabase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D0025BF44968B8EBA153B16DF6A7783B /* assem_x86.h in Headers */ = {isa = PBXBuildFile; fileRef = D2188A915972865B5AF5C68B8B6D05B3 /* assem_x86.h */; settings = {ATTRIBUTES = (Project, ); }; }; D027F8D4E880D7092DB8AA5A02D7AAC9 /* CGGeometry+Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEDA901FE973732B0B1E37BD243D43BB /* CGGeometry+Dictionary.swift */; }; + D07A1B71422D57F744E2F9C684688785 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 6AA43E914AB86898557D6FEDC791C933 /* xxhash.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D0A350DA4B14A8CDC1D8FEB787CE8DDC /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = 582F8C63B9BF01FB8537FCBB2196C589 /* list.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D0AA00DE55F80D9CF2C751E035128520 /* audio.c in Sources */ = {isa = PBXBuildFile; fileRef = D96CE517678765B006B018E340F3198C /* audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D0C55D7F18D9A49A467F0E0B8669B0B8 /* srtc.h in Headers */ = {isa = PBXBuildFile; fileRef = 291D59A8B427D100ED229874D4D9C1A4 /* srtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; D1014816F973C67639F5622AAA455B97 /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 95E5CEA8D238911F127A409B1C8C507E /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; }; D10C97C4AB425B976ACAAE1D9CF6D55E /* NstBoardBandaiOekaKids.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16334C263B60314F60B061077457ED0F /* NstBoardBandaiOekaKids.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D17655285DCCE928A9B98D19D4FA6CB7 /* ColorBufferReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0576D7E597D37BAAB587DB83FE8CB161 /* ColorBufferReader.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D17C9E1F856D9112E10FDA502E84EDA8 /* fpu.h in Headers */ = {isa = PBXBuildFile; fileRef = AE319AE2C2040F374241D90E84825723 /* fpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; D181DC3438FCD7E645A072E81889876A /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 882DA4CFDB38488363DB6FA79E5CF3BE /* ZIPFoundation-dummy.m */; }; D1872BEC18A09543B94BFE0EAD273D61 /* GTLRDriveQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = A0A504E08A6B298395CDE7E0BC7FBA95 /* GTLRDriveQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D1D87A24D37112C4AE2EB188C51C053F /* OGLFT.h in Headers */ = {isa = PBXBuildFile; fileRef = 2511FA9F98FE3FCC75E29A21D78C7943 /* OGLFT.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1FDBA676483451ED77786AFE5AF47EA /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 46834904D33267E3CBEE319642FFC703 /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D1AE49FE2D9700809BF9ABA84F41BBD5 /* ftpfr.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C47A891929053596B4282BC5DDB0A7 /* ftpfr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D262B1F57991F9E82A95110CD3F2CA53 /* eeprom.h in Headers */ = {isa = PBXBuildFile; fileRef = 6750964B0895F740D52DD97CAE8B5099 /* eeprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; D27C34B3B39EBA92E9B725D3797B698A /* cheatSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 8466D7DB1CB791A44DECBDED6290F796 /* cheatSystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; D27F755D124E238008EB400F04D2E040 /* fxemu.h in Headers */ = {isa = PBXBuildFile; fileRef = 6944EA8E8CC44D97F089057D5BBB67A6 /* fxemu.h */; settings = {ATTRIBUTES = (Project, ); }; }; D27F8F70A73867B450D3D9CEF4B923E8 /* GBAEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 35CA6F1D8D4FD82291C1148088DDB220 /* GBAEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; D298FA6F6D28DD13D771BC71411D5851 /* NstBoardJalecoJf19.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6FEE36BBE5119D88DE64B64D975EC87B /* NstBoardJalecoJf19.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D299CCB9A5A6574C3B9776B6B7065208 /* NstBoardAcclaim.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4C6BE6BA9CC949F3EDA941ED2CBEB38 /* NstBoardAcclaim.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D2A37DEFD55B0BA864F27119BE974CB0 /* BatchRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5967CB93E1B68FCF175E97CD13D10CFD /* BatchRecordOperation.swift */; }; - D2A71E3AD54E049A5C1DDBF12C93A2AD /* hle_external.h in Headers */ = {isa = PBXBuildFile; fileRef = 5277A427B540B8A971E15DE8732388E9 /* hle_external.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2BC97FE93CA9D56996B4F25DFA2AA8D /* opengl_UnbufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B5206BC0DB3FB590107A53EBAE4647D /* opengl_UnbufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D2E7A94DA4EB51A3145F965B880B6F2F /* ContextSettings.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 725B23CE4361DD6771F70C91256E286B /* ContextSettings.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D2F1CDE15B2375C94A421A1564AF13D4 /* eeprom.h in Headers */ = {isa = PBXBuildFile; fileRef = 6750964B0895F740D52DD97CAE8B5099 /* eeprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D31C73EFFED048D38F9F383BD0098DA3 /* DepthBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5735CEBEDBCB212533CE2D0112224D5C /* DepthBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D2FB63331B59F465C90738151C31C480 /* F3DTEXA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F491BE89CC65EDBFCEB3B214D06C7200 /* F3DTEXA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D30D6BB221DE29EEC564FB38B8917C38 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5267A220D47D998845DB51485386A8 /* SDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; D324B3C6609ABF310B5E1436F17C2BF3 /* GTMDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = FC141D48A65D77B26B9922807BD281CC /* GTMDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; D386CE84965DC46DB052B5BE658BEB2A /* ControllerSkinProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F4FE55BE08EA38FF320E4286A4C43C7 /* ControllerSkinProtocol.swift */; }; + D3971497C1928729EBBD4FFF3B566896 /* PostProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = A664ED590168019449C1E8A60B996A1D /* PostProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; D3A01F05B185083B517E4626FDF3C57D /* RSTCellContentChangeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = FCADC95CE36A81554A4E95CD8996C26C /* RSTCellContentChangeOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D3ABAE47C410AFEFE62EFF0A4B01988B /* NstBoardUnlSuperFighter3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0971A5E1176766915B5C63ECBAF0E9A1 /* NstBoardUnlSuperFighter3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D3DEAD4C77A168D67D3EC458661D424E /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = F10F7750064142DE73F6F7454CC2983E /* GTMSessionFetcherLogging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D3E635DF7C5A3F831C0ED826B7EF3045 /* ftincrem.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3622A7449225751220AF6FE10DD230 /* ftincrem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3FF3FDEA482BBCE33A46B4F848933D8 /* TextureFilters_2xsai.h in Headers */ = {isa = PBXBuildFile; fileRef = 91E7D2C0AB72AAC3471B7798B8B29960 /* TextureFilters_2xsai.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D409C376103600BCF90AEA2463CCEF6D /* m64p_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 422A7E950D9644BA89560B6CC1EA1194 /* m64p_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D409FD1F1DD00E6994F0308A8E0C0D3D /* svttcmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 478F2C8230CA263EC0A07EBCB8012403 /* svttcmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D453E0EF8D2BCC7A9FADF4856AB23D42 /* glsl_ShaderStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E986068DD96944D1D5B4F242C7C4976 /* glsl_ShaderStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D4758FB588B5F4982C64E60466D14B78 /* rumblepak.h in Headers */ = {isa = PBXBuildFile; fileRef = FACC5CB26B7294708491B46F0397D3DD /* rumblepak.h */; settings = {ATTRIBUTES = (Project, ); }; }; D47799D2FEF7EBAF1EEC0D02D279AE11 /* SoundSource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 904DA70530378048CC4E91EB8EF417B8 /* SoundSource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D4BBFE50425065DFEBA634F40C1E480E /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C8CA8E12823E49115A148B8AF4C1682 /* types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D4E54F8583E6BD0B7E8D5C37D0268831 /* TextDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = A992E878783FEF42B0A952857F40B4CE /* TextDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; D4EF0B9C680FAABDFBF23493217BEBEA /* ARMInterpreter.h in Headers */ = {isa = PBXBuildFile; fileRef = 55823D54327ED2C23F433C3F864E151A /* ARMInterpreter.h */; settings = {ATTRIBUTES = (Project, ); }; }; D4F4CED77BC0C96F563776174E66E619 /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = D29AAFD2CFE6FB0F7D7946F037550722 /* cpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D52D782E8B77295F31DAAEF79BFBABD0 /* NoiseTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD6FBA65BDE1FCB431C91C3080423E1E /* NoiseTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D563CBCD51C3113785FB38FE63262495 /* WifiAP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91B3FF1A239E6CDBA01D3586039A9C7E /* WifiAP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D56F29E45DD478816308DCF5288A13E1 /* ARCodeList.h in Headers */ = {isa = PBXBuildFile; fileRef = 34AF57CCCC40097CEBC29D385D24E7AB /* ARCodeList.h */; settings = {ATTRIBUTES = (Project, ); }; }; D5AAE75D370FC24FD284ADBB1EEC5445 /* sar.h in Headers */ = {isa = PBXBuildFile; fileRef = 9165270C982D16BF84A0C0FC722EF7F0 /* sar.h */; settings = {ATTRIBUTES = (Project, ); }; }; D6501B43E8C5A97BD005573C1BF291EE /* UIApplication+AppExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98985DB2B0E10E3D6C992708741C684A /* UIApplication+AppExtension.swift */; }; + D673A845F326373E59748DF3B93C5172 /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = AC7A3157CBEE276869625E60733756D9 /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; D6A44C024915094BD0A87D4DFC412F6A /* cpuops.h in Headers */ = {isa = PBXBuildFile; fileRef = 53E9A117D241958D71059796ACCE24C6 /* cpuops.h */; settings = {ATTRIBUTES = (Project, ); }; }; D6AB41F528E0CBE33F26C2ECABEB070B /* NstInpPad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 23D60DF4C8C979E59877EE0BC1BA7C94 /* NstInpPad.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D6B9F611C6D9C0C8CD854D4E488E6AB5 /* GTLRQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 4607BD69102AF97F0A85D6512B3409CD /* GTLRQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; D6E2B0F609F10E48830213BA053DB040 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 101B4E4EEFA447219922363435CA78CF /* Standard.deltamapping */; }; - D721B239753D7F7FDDE916AFE3FCB235 /* opengl_Parameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A35B20685D6B2F22C568D23E73C3E50 /* opengl_Parameters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D6F102986AA8EE08EC2208477688523A /* WriteToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 0218E1BBADD080E67F9220EDFDF90EF3 /* WriteToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D707B75B04BAE61898A4BC8026561F4A /* tttags.h in Headers */ = {isa = PBXBuildFile; fileRef = FBB09720E5E561800A0A26EC646F3678 /* tttags.h */; settings = {ATTRIBUTES = (Project, ); }; }; D7374BAD47CD61AA924220F7A5043F63 /* cpuaddr.h in Headers */ = {isa = PBXBuildFile; fileRef = AB71B3A5AD08C7FD7FFA348B2DCEA559 /* cpuaddr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D73B4E6353020EB9B6844EB6937E0DD3 /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B9715EFF4CB742F4153FF865BFAE0B /* util.h */; settings = {ATTRIBUTES = (Project, ); }; }; D753580473283FA203738466F2939B6A /* AnyKeyPath+StringValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 723AFC03DAB1F2E32CB45A4F3ED5FD35 /* AnyKeyPath+StringValue.swift */; }; - D79A7F006A37B1D450F1B4520E3145D0 /* TxTexCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 508153374379761825956DE2D625E976 /* TxTexCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D808972D53AC615EC3DBB96E9B7517C7 /* TxDbg.h in Headers */ = {isa = PBXBuildFile; fileRef = 951AF961D61C1C3B55D7700D57143D91 /* TxDbg.h */; settings = {ATTRIBUTES = (Project, ); }; }; D808ED025C15643A9FD4FD11530825C7 /* missing.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B57B3A4300861FCBCF153277342957 /* missing.h */; settings = {ATTRIBUTES = (Project, ); }; }; D81057F2081420DC4B25CDA39DBC3B96 /* GTLRRuntimeCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DEDD6511A23A74FFB52233C54AB8E03 /* GTLRRuntimeCommon.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D840CD895C00C5B1FF24F78ED7A72681 /* DSDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C7136242783A97DD4FA174D6AD000A7 /* DSDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; D8524A5C842C0580F42718FE94C8F791 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42A9F4072A21C2D6095C0971EEC3FC1A /* Alamofire.swift */; }; - D853F1F532071DE2D4AED3E6608F2ED8 /* cic.h in Headers */ = {isa = PBXBuildFile; fileRef = 34B01107A2C96AA02DBB861B4B38041C /* cic.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D8626C5FF1E601154B671D0D03932364 /* fttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 57067E8C28EB51D8DC120B70B3A966CF /* fttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D872BDF31403DB85D3769379C5C2B72D /* txWidestringWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18DCE91DC2FF6AC9626641A56F1ECCF2 /* txWidestringWrapper.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D8889A6910820C522D9EC5AE0F105B7B /* UICollectionViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 142265A2DED24A866633D72B79145B0B /* UICollectionViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D896BE2637D4D0EE60FE67FB5B01F686 /* RemoteRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD29A29166068991BD1FCD1B5147A8F9 /* RemoteRecord.swift */; }; - D8BEDCF49E6864FFFCE6F10F633F3500 /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = ED6B167EAADE8506F1864999731E6AD6 /* pngwtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D8CCD6B044F74A8D1C4DC7569527A1C8 /* F3DSETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 9147D9287688D6DBCB391FCFFB5E8CD9 /* F3DSETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; D8E9FCCA464240BD9F53DE1BA3C90BB1 /* messages.h in Headers */ = {isa = PBXBuildFile; fileRef = 037E3F75B195945C62D341A82A439502 /* messages.h */; settings = {ATTRIBUTES = (Project, ); }; }; D8F09E6FFEAEFBFFA69546C6F36EF74F /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998BCE1BFCDA316A894F5BE77EF92AD4 /* Coding.swift */; }; - D90EC0383E3C3CC3B40EFEA3EDD6169C /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = AC7A3157CBEE276869625E60733756D9 /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; D917430D486E5BD25A2CA0B8B4F237B9 /* GPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EACF9BBDC13D732E0443F9F9FCC5743 /* GPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; D956507314E15EB55215F3587C359E4B /* MelonDSTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 99F0DA991B4249223E7D8A9CA0767BA2 /* MelonDSTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D9D4A8CFD5AEC9CB6CD5E416F08C8B65 /* svbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7AF9FE08D2F6576462E7ECCC9C6E89 /* svbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9612D116CFFCA6E15445F42FC82D1A0 /* TextDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = A992E878783FEF42B0A952857F40B4CE /* TextDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9C27F24D9EA059650BABC21EF34440A /* svcid.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E9C9E58EFFC6846E01B3B75A4595B21 /* svcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D9C49C20020EC384D9677F355A124006 /* ftgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D7A85BF8A1C0DC2EE0B2F071F97445 /* ftgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; D9D678A3261AB86A7637EB79F73B0D27 /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1089BC73E36C74AEF372EEED122EFC /* GTMSessionFetcher-dummy.m */; }; - D9EEECDA4CC74FEDE82B29E37FF2C225 /* pnginfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C31FD97E461D0628F310200A8D3B403 /* pnginfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; DA2B760E4D6E2D31F977E72C22441865 /* JSONDecoder+ManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 103B62F4A02A6FB81B5873123E3E4EAE /* JSONDecoder+ManagedObjectContext.swift */; }; DA2DA6C00C0EB1612EEEF2C30A494919 /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F9BFBF397EFF80B8131726E9C9A62C9 /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DA9EC56A8CABDE13F39C9D32BC8F37F5 /* N64DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 13D9D073E172499FE0BA408392C89173 /* N64DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA43100A6B64394824A74494A2E4C6E7 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 523D82D262DC8E536D345567D04FF3F5 /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DAC30DFBB6381E8AC0EFD63B71601B85 /* TxCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E8024B293C9555F3BBBE264D95E1A8D /* TxCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; DB02626D12C516C4CD6A9EA98D20A50A /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F298C5D309EDC6DEBD36255472EF52C /* SQLite.swift-dummy.m */; }; + DB1F6B12BDF14D5E6EBDC2ADDE1A7F17 /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FBEA1458597421280682E90821C05C /* SDL_thread.h */; settings = {ATTRIBUTES = (Project, ); }; }; DB271162188B9FCB78E0150B0D2B6917 /* NstBoardWaixingSecurity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9E96797E03C6BA19B7B506E463067AD1 /* NstBoardWaixingSecurity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; DB37D974F8E6FB9101F45E79F9AC3858 /* FinishUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86E0555011765103678D4A46B0D7CD30 /* FinishUploadingRecordsOperation.swift */; }; DB41B47B5BEAA2503BCEF6C2AAD2ED01 /* NstInpMouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4E1E1F9090B631F29A327D322AFF5B4E /* NstInpMouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; DB4B31BA9A8CC6D815BB4F31E455EBA3 /* NstBoardSachenSa0036.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6004CD9FBFF76F6C36F2C167315443BA /* NstBoardSachenSa0036.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; DB5891014AF5583F4CE70D67063FEBF4 /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BED699E7391C1CA0477C2735B758007E /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DB59BE2E058C5C49F315A9C57C6E2B16 /* arm_cpu_features.h in Headers */ = {isa = PBXBuildFile; fileRef = 25DEDA1290E18DBA7242DCF9680B37DA /* arm_cpu_features.h */; settings = {ATTRIBUTES = (Project, ); }; }; DB663E8C81B503B69E519340CFD0C66B /* NES.swift in Sources */ = {isa = PBXBuildFile; fileRef = 188673BC9859FF22057D8B552AA23087 /* NES.swift */; }; DBB21494E4A3EA8A6FF8B3085A328E46 /* render3D.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7D9B45C83FAE5CBAA7610FA983D9EF /* render3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; DBF0A6C0BE990638F43CB71209C4E731 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 83433F387FADB6F93585B15C45F26C41 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; DC2B5FAE55CCDB0BAF6EC9CC3F2F95EC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26169D7A10310A0CE0A585A679CB5736 /* RingBuffer.swift */; }; - DC55F0600EEC5E8DDFB1E3A6E633E92C /* device.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BB6F43FE56F847084FF20D1BCB4BFAF /* device.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC6D980DA6070C8E0E652312C90A57D0 /* svgldict.h in Headers */ = {isa = PBXBuildFile; fileRef = B290CCC059154476A70C27D7890B7036 /* svgldict.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD439A1182CBF12FE98F8D4FB2B1F65D /* ftstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ADEEFFAB7CD01EA4E844F0F78DBC0E1 /* ftstream.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC4062D2014323F03C964765A375E1BC /* vi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E5C87C85D80CEFECDBD846C5507C244 /* vi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC6205827B0C7D620DC22E1DE3BCF91F /* assemble.h in Headers */ = {isa = PBXBuildFile; fileRef = FC30BD70C930E58720D8025E77346710 /* assemble.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC69B4AFF4D4A8717D638909D4AD454E /* m64p_common.h in Headers */ = {isa = PBXBuildFile; fileRef = D1975814ACD46FECD8CEDFCE0706FFF0 /* m64p_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC7A37F12FA93FA2A4733E69021D08CA /* NoiseTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD6FBA65BDE1FCB431C91C3080423E1E /* NoiseTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DC888FB95A2418412331F1F18D9AFEFB /* FrameBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 75D39CF0AC7F91D702958292DA91F30D /* FrameBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD024B1209D41FC910F56320BC735DEA /* 3DMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 232881DB5B781BEF87FE7B6665883476 /* 3DMath.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; DD4937FAD87A66D3E6AF7320226ADDB6 /* NstBoardSachenSa72007.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 026C9449D2CD7E3C08836E3B3C86F709 /* NstBoardSachenSa72007.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DD4B47D13EA0B2EE0DD75CD1234D1C71 /* ColorBufferReader.h in Headers */ = {isa = PBXBuildFile; fileRef = E726879448FBC69F09C3868AEAA3AE81 /* ColorBufferReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD4D78B32B16026CDA793F04F559C4F1 /* assemble_struct.h in Headers */ = {isa = PBXBuildFile; fileRef = D91D509E04E52EB1EF2C6CE6325D63E0 /* assemble_struct.h */; settings = {ATTRIBUTES = (Project, ); }; }; DD620D1ACC965F9F33B8EE775A1C2929 /* NstInpRob.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E53076134FC473CEAF27FC2CFCDC3C7F /* NstInpRob.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + DD629500BD99B168EB7584A1A2B01C67 /* Context.h in Headers */ = {isa = PBXBuildFile; fileRef = CE641ADC83B5D0F02766689E3A81B2B1 /* Context.h */; settings = {ATTRIBUTES = (Project, ); }; }; DD965F38F3926F23D15FF807E4486928 /* RSTCompositeDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A4CBD7EC311541871920C24EA2D9548 /* RSTCompositeDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; DDCED74F45A4D745CCD7F319429DAD10 /* c4.h in Headers */ = {isa = PBXBuildFile; fileRef = C57031E8B6DD0EBAC4E35185FB93794C /* c4.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DDCFF8BD823EB8F9837DF1B4034FF1E8 /* F3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDB291BF8A6C2C5E7A503B53159F5FFE /* F3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - DE128C6384EFDCB0627D9980E76E9E20 /* N64EmulatorBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FFB36B4D0570AD68F47D94918FDE579 /* N64EmulatorBridge.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE03B44C09A95033D34E2F674628D155 /* gralloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7001F35121D79E891B1BD2B4C133B505 /* gralloc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE11559AB2EE46B9EF975182AADB9C28 /* ftstroke.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E0ED605D7C2BAE8463AEB4ADEDF371 /* ftstroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; DE2C177F1F0790310E321F30BF5FEEB6 /* GPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4D5FBCFDF444CE792F8C8209C5606CC /* GPU.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DE9767158BF62EA7699B8789BDC3B789 /* pngpriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 486AA33DBD077F14429174C280495E58 /* pngpriv.h */; settings = {ATTRIBUTES = (Project, ); }; }; DEA2456E9F8C9B4F29D544BFCF3E332F /* NstBoardTengenRambo1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 59DA3AD3BCE17B64234F6C8CDB4FAA0A /* NstBoardTengenRambo1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - DF266745A6B1E11185D36EF99E10B829 /* F5Indi_Naboo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D35DC1DC3A814BF1FDEBF8BA115A3C0 /* F5Indi_Naboo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + DEBA6649DC44B3C556EA8B8046792F34 /* svpsinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = FF62ADB0969A5BAF88DAF079C924AD01 /* svpsinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DEC9018C324CE6256C9EFA5A4A934B58 /* xxhash.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A334ACFE0D3AC3FE96307D138436AB /* xxhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF632D227E40256F30369C397760D46C /* F3DDKR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDC971E53465BFFF543E22C621BB9660 /* F3DDKR.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; DF7E34A9447E1503AAD895111E3BCBF3 /* bsx.h in Headers */ = {isa = PBXBuildFile; fileRef = 985EAE9972B33CF9F927C6F483A4B357 /* bsx.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF99C4FED01516A806E69CEFC02A63B3 /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7E6516A5BEBD6103C2071A1BA86E73 /* pngconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFAE2CDC207F2309CBB7EB0926066FDC /* TxCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6154AA0F4F3D72A490406941DDA56ECF /* TxCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DFBC1B62E183576C5A9FB35846F46CAB /* cp1.h in Headers */ = {isa = PBXBuildFile; fileRef = F0308817B700E8598B67B8DC04CB453E /* cp1.h */; settings = {ATTRIBUTES = (Project, ); }; }; DFDD4A619790FBB12996A1A6A144E116 /* netplay.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C1BA9EB80CFC347F52BD3EC8F1856C4 /* netplay.h */; settings = {ATTRIBUTES = (Project, ); }; }; DFE47A6A5129454BBE6488DA6493348A /* NstBoardAcclaimMcAcc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73AFCBDE3C3C3422A99EE597CEF40C70 /* NstBoardAcclaimMcAcc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E028E6BB5BF11783165428AFB4371D2D /* ereader.h in Headers */ = {isa = PBXBuildFile; fileRef = 52F99D4811CD8DBB2B4EDC0AB616E6B4 /* ereader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E045AEFAFAB999408460996561247AFF /* ftimage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DD7EE7BA4F30F6178A84660D851DE0B /* ftimage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E042B88177EC0C73F9EEB78D87B4867A /* fterrdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E65C6009E97AD1F054B35476E2887A /* fterrdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; E0584F089FB27ABA38D5D355721DE37C /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EEADA9A5C4C5EF8A88BBC09B95C5F62 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0991B721AEB76C3A627E4BF66008675 /* m64282fp.h in Headers */ = {isa = PBXBuildFile; fileRef = 299389570253111A7FC0B2AD359D7A1A /* m64282fp.h */; settings = {ATTRIBUTES = (Project, ); }; }; E0B3B5EFD0E958737E6D09B5135C5ED9 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = E51C90A9B7B35AEE09669310AB15BED0 /* SDWebImageDownloaderOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E0C7D4449AA8C5D15535E79C43CAAA19 /* NstBoardBmcSuper22Games.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B3F49F00CD6F1E7B2934D5D66A3DED6C /* NstBoardBmcSuper22Games.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E0CD89ED735B076967D48760C0A1BFE1 /* sdd1.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C927AD9499B9097EC14BFB7DAAB353A /* sdd1.h */; settings = {ATTRIBUTES = (Project, ); }; }; E0D3FCAEAEA0ACEA63F32A34AA72B9DD /* GPU3D_OpenGL_shaders.h in Headers */ = {isa = PBXBuildFile; fileRef = 89BCCB329ED94B86E8C48CB481557F79 /* GPU3D_OpenGL_shaders.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E100B6C29C8EC1E8BFAE2435884A3FC0 /* tttags.h in Headers */ = {isa = PBXBuildFile; fileRef = FBB09720E5E561800A0A26EC646F3678 /* tttags.h */; settings = {ATTRIBUTES = (Project, ); }; }; E10B2C2CC334BEF5895DC4C950250177 /* Texture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 21FF5A1389969C1EED92B8D6155554D5 /* Texture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E11B7AAF1933D8FF81EC1A4AA3B01862 /* L3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 280A5539EBE87BEA10C7C1654D729DCC /* L3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E10E1AA9B0876FD02B3E3061C7E0B57A /* cic.h in Headers */ = {isa = PBXBuildFile; fileRef = 34B01107A2C96AA02DBB861B4B38041C /* cic.h */; settings = {ATTRIBUTES = (Project, ); }; }; E12B8F200ECEFDDF5544EFCFD880324B /* retro_environment.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A147B56E0C3491FF27162D46C95BDD2 /* retro_environment.h */; settings = {ATTRIBUTES = (Project, ); }; }; E19486EB42DE44DE94BA6D8BA26ADCD5 /* RSTRelationshipPreservingMergePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4070FFD16B4FA23902478F9D6197345C /* RSTRelationshipPreservingMergePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; E1A2DFE668E3513F0D9B7761FEACB3A3 /* NstIoAccessor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6BFD0F656B9079094013712B8261B5E1 /* NstIoAccessor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E1B97E70F063CDF2C659566AC9AD7801 /* glxext.h in Headers */ = {isa = PBXBuildFile; fileRef = 46E7ACB3EEB07EF50F5C2B657C683EC7 /* glxext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E1F0ED8637916242D358C81D80CF57B1 /* S2DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 078EC48CFDCED61DA3CE896FA2BC1477 /* S2DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E21F9E3675CE2A5C2910F409DB690497 /* DBChunkInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A52DF3CA0011FA99AF644362B09A598 /* DBChunkInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; E240D32BDB49F8E26000117E1792DA24 /* NstApiDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DC6964261E4DD7BE99FB445FC8757345 /* NstApiDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E24C77E406D608D65CF44CC758D79AA2 /* SwiftyDropbox.h in Headers */ = {isa = PBXBuildFile; fileRef = E248CA8F99CCB2FEEDCE6967354F7FB4 /* SwiftyDropbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E255C62B0C6D845C74DF1CFD04F0E7F6 /* F3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC10C4E5FDC7C7C25A7DAC7A2FB11BB /* F3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; E25E5FB3CA97B41662F326DC6DFFFC0B /* DriveService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABE1F0BA1ED297C8F6D7E93A5DA90FAA /* DriveService+Versions.swift */; }; + E2782016C2BC54B3433C1114E723AB91 /* L3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93DB6CBD9964A538F778E19D3832F2B9 /* L3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E2AFD1997E521E9F3411C241816607F7 /* opengl_ColorBufferReaderWithReadPixels.h in Headers */ = {isa = PBXBuildFile; fileRef = A463F67D31F18A3E8817C9388BDDEADD /* opengl_ColorBufferReaderWithReadPixels.h */; settings = {ATTRIBUTES = (Project, ); }; }; E2DF8E621CBBBD441DE3FDF670B7AAC2 /* AREngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24A40AF418C2457D3920E3BF8F07B147 /* AREngine.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E2FBEA7B76F101CA55BB009C8E60BE68 /* pngrio.c in Sources */ = {isa = PBXBuildFile; fileRef = 5986D113E80DE6E1FCE1BF2079E6B442 /* pngrio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E30AE4CE714FCC551A4A3B0516BBC707 /* GTMMethodCheck.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C47011115A00E9556AC311099987E7 /* GTMMethodCheck.h */; settings = {ATTRIBUTES = (Project, ); }; }; E31D2295622D14AFDD069E14F5195C13 /* AudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6DFC3B7AD060F43D4AFFBCD3F06AA6 /* AudioManager.swift */; }; + E358647190A54EDF5C189E0BCA22531A /* TxReSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE3A4F7E48FD2C3751CCD26689C1353D /* TxReSample.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E35B0A7D23FC7611AAEEED1AF19073BE /* NstInpPachinko.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C05E3B2663EB9FC3F88BC0AF00C603AC /* NstInpPachinko.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E36C54619AD747C9D5825D0F555BB156 /* N64Types.m in Sources */ = {isa = PBXBuildFile; fileRef = B9645A97F892996BB5BF51B8D0D43A0B /* N64Types.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E3760F1B277D93ADB9423C1C79590845 /* GBACart.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA2C169265FC922C39733E381863E7 /* GBACart.h */; settings = {ATTRIBUTES = (Project, ); }; }; E393EE012D54F6BB208480E720AE5752 /* GBCDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A823D93C54BF9183AB990B267E0FBF5 /* GBCDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; E3C4CC0E44B8054138477E9731B4E454 /* ContactsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77CE0C99378A2FDADC3F70471D336C79 /* ContactsRoutes.swift */; }; E46D10AADB66A01A9490A813CA496DCE /* NstBoardBmcResetBased4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95C3DB2A71F9C27A5D2A146D6247E970 /* NstBoardBmcResetBased4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E473810AFA4985FDC030B75DAB7E86A9 /* new_dynarec.h in Headers */ = {isa = PBXBuildFile; fileRef = 62CF8182659AC61B46F3EE64308E7BA7 /* new_dynarec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E47A977F4840A1287E1A8645E6E560B7 /* ShaderProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = FBAE8914742053CB6ADCEC14737596F0 /* ShaderProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E4D06B0BA213CA79BD97BB9B611A2EB5 /* N64.h in Headers */ = {isa = PBXBuildFile; fileRef = AB7ED6F2E514469E5640A93ED3622401 /* N64.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E4DDDC9AA87E73A87D4CE9BA2C134C83 /* glsl_ShaderStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E986068DD96944D1D5B4F242C7C4976 /* glsl_ShaderStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; E512749AF7921ECA10C99B7DDADA916F /* NstBoardSxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D0643302DC4E42474BC7E1B5E9903519 /* NstBoardSxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E51F53BC83CFB30E9D2EBCC835E51664 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = BD7F218037A6C72ADDD5F262DAFE2D1C /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5689255A851EDFA47C15C92E4345B87 /* GLideNUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E3627E2B352D880C38B219494E20A52 /* GLideNUI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E58DFAAF1B5040476D55ECAF0681AE68 /* Debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C536521365129A5FF9AE40DDF753F8 /* Debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; E5CE54C441C27992BB36CBA9A435245E /* KeyboardGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31AFF7B6567C46BCD1D5FF5A40AFEFD /* KeyboardGameController.swift */; }; - E614C5D1F40EC77DAF23006BCBA8523B /* txWidestringWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18DCE91DC2FF6AC9626641A56F1ECCF2 /* txWidestringWrapper.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E5FE23BFAE5594C754E691A930CDBA3F /* pnglibconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 12046753C25C05BEB8D3B91D9C84AFE9 /* pnglibconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E6148113FE8DA95CAA89BC0344F2CCCA /* ft2build.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E088DA0C031536321CA95D00470F534 /* ft2build.h */; settings = {ATTRIBUTES = (Project, ); }; }; E64D998EAED81F2EA7850A2CDF71929A /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 96DDCB6416566CEEB9D8CE0B491F6242 /* Thread.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E6529D9E72DE5E7B788DDC6C3E148468 /* UIKit+ActivityIndicating.m in Sources */ = {isa = PBXBuildFile; fileRef = 684E9E69891E8CAEBF1DC5CFDC48856E /* UIKit+ActivityIndicating.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E652DC0B868871BEFB7C2B9ABE95A303 /* F3DPD.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D3C6982EBE0EAC53FAA7E37AFA9496 /* F3DPD.h */; settings = {ATTRIBUTES = (Project, ); }; }; E66700479EBBBA79432AE1635603F5BB /* Socket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3720B67C88F2DE8BCAE0EDD0D02B5F98 /* Socket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E699C3C45914E11FE8A12647B4835CD7 /* saves.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF34391A06AF7754A090E44B9245C06 /* saves.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6A4553281DA2987F949740F277ACA3D /* DepthBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DA35E04DC90CDF3E5C69140C495709F6 /* DepthBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E6C3A0FCAFD428E5CFAA722D3F6190DE /* Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E38834C7999CFB2670ABDAE5FC71FEB /* Sharing.swift */; }; E705953BCBCD13E17C23B588C4FD0457 /* FilesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2799783940A21EC2EE44D1A48F5758 /* FilesRoutes.swift */; }; E73A1CF4FDEAF251CF9E242867E9E0FB /* state_osd_elements.h in Headers */ = {isa = PBXBuildFile; fileRef = A56369DCFB6DD06F4761C0C4900B2401 /* state_osd_elements.h */; settings = {ATTRIBUTES = (Project, ); }; }; E73B665DFEE5B1EF941B915C2DB4D1EA /* savestate.h in Headers */ = {isa = PBXBuildFile; fileRef = 07352595BD173B37D1FBCAC265DC1C57 /* savestate.h */; settings = {ATTRIBUTES = (Project, ); }; }; E75071EFE211B5377D34AB8A5893DCD7 /* NstCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 51AE0D8A1BA524D7E3E2B194F7CE4A37 /* NstCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E75F2EA53D0EE6628D5361A907AE8CEA /* UIAlertAction+Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F8715F2E1CC86C7F667183E1D9CD888 /* UIAlertAction+Actions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E7637A711A78C8610C039170BE3A235E /* ftrender.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E612D889BCF639940A7B442ED45DC84 /* ftrender.h */; settings = {ATTRIBUTES = (Project, ); }; }; E76913D63F4D790D0D10268C80819BC9 /* NstBoardBtlSmb3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 58E06EE5B6AC0AC69AFF39EDEB578E6E /* NstBoardBtlSmb3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E7713FF7D1DDD0B5457A3DDC07D7CB64 /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = F231C512D2B9D8E1FA081E1059B3D3E0 /* zconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; E78529FBA5C035888371AE6EE12276A8 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4E004174F5A12104EA6702A90AC6D9 /* Helpers.swift */; }; E7BADFB958A5706854C044DDFEE718DD /* RSTOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F84B5FC88D5A5A682A7E079337CD3D1C /* RSTOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E7DAB97FF4BB02EB9E4D2D45AD1CA9E4 /* arithmetics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA748DD06BB0F87B2D3FCBBCB21BB582 /* arithmetics.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E7BCAC0500BE757622825AA6A1F1847E /* glsl_CombinerInputs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD26BD355F8C9C43A997914155B54C75 /* glsl_CombinerInputs.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7C1499B0AFBC0441A2B0ED73A34C0A8 /* FrameBufferInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DBD80F21182531F3EA2504E53691367A /* FrameBufferInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E7D144D1339094055223E19D6C763EDD /* ftchapters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9378D679A1407D0B1973322B7BC01CC6 /* ftchapters.h */; settings = {ATTRIBUTES = (Project, ); }; }; E7EC3140EF159F74774806784FFF92BC /* NstBoardWhirlwind.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D02AD2D93D711FC49FACBCEA4547D87D /* NstBoardWhirlwind.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E7F970F940518CACBA50E29DA4566EE5 /* TextureFilters_xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D7DDAE335C54604826A3ECBD79CFED3E /* TextureFilters_xbrz.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E805858A4CBFC1A168C9A8320D1E4EF8 /* NstBoardIremHolyDiver.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A85F73017A0A333E87CA16A1492A235D /* NstBoardIremHolyDiver.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E8224BE1CF4BCF9354707D8C603DC3AA /* TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 36B21AD2A8F390B23FB0A538F357E4D0 /* TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E844F87FE7CBB3814DD7EEF794C607C9 /* DepthBufferToRDRAM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 472F4C1130957742B23FCBEAD0FC6E61 /* DepthBufferToRDRAM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E88A86B85AFFB8A723243AE866FDCFC1 /* NstBoardWaixingPs2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F0427833F381047484915D313051018B /* NstBoardWaixingPs2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E8AD899B2BF52E2A3E657CD7A3A055E2 /* NstTimer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1F076350328D4154B3E88F3C4B2D80CD /* NstTimer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E8C165293B36E2F95AD7CBF511CDEA47 /* GBCEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = E5598BF7199B8F30327DBDD42DA18CA4 /* GBCEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E8DAD6DBD66EF2F9CA45E7A1C0ED2CD0 /* hle_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = DF2DD4169A9A5CEA5319C794BD888975 /* hle_internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E8DB7B8318240691B8B8D6A531BE337E /* ftimage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DD7EE7BA4F30F6178A84660D851DE0B /* ftimage.h */; settings = {ATTRIBUTES = (Project, ); }; }; E91BE4D2EB8ED606C86AEF158A993193 /* NstBoardOpenCorp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B0ACCB9EC30550BEF619382B31BE43A /* NstBoardOpenCorp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E96D00DC7B3AE3762117697EF950BF00 /* mempak.h in Headers */ = {isa = PBXBuildFile; fileRef = A81D595F5493BB4BD6C6AED2B993C0B6 /* mempak.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E94A17C6748D49F29FAE74AFCAEA9C04 /* TextureFilters_2xsai.h in Headers */ = {isa = PBXBuildFile; fileRef = 91E7D2C0AB72AAC3471B7798B8B29960 /* TextureFilters_2xsai.h */; settings = {ATTRIBUTES = (Project, ); }; }; E9A4231EDE43DDF753AA878AFE8078EB /* complex.h in Headers */ = {isa = PBXBuildFile; fileRef = AFF85B9517592B8C0C0F604D1FB43836 /* complex.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E9B012F6B7FFEF993DEC81040FF08B81 /* TextureFilters_hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEAA6B8E9680ACB06BA0279C3ED990AE /* TextureFilters_hq2x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E9CCE8E9707ED47A7E769075CBC872E1 /* DepthBufferRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFF7521BE73EED39D6F3DAC41584A38 /* DepthBufferRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; E9D90305973DEDEC0F4BFB33B4281876 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 285001A3E16D55354667EDFD2BF69729 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA259B2E1D0BB10750FC2236B155EAB2 /* Context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 313C6B8D05DFD20F664BA3744351BC9C /* Context.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EA3590DCCB30731B77907052E26D846C /* cexcept.h in Headers */ = {isa = PBXBuildFile; fileRef = BE9ACCFEEB68EE550B45A78C99E79C3E /* cexcept.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9EA189769FFAB731CB3205F5CB47BBC /* savestates.h in Headers */ = {isa = PBXBuildFile; fileRef = F27E0BB08CA9AA99087CB49B95D5A051 /* savestates.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EA26407D05E05A54188C8B4C9FD2A7BD /* svgldict.h in Headers */ = {isa = PBXBuildFile; fileRef = B290CCC059154476A70C27D7890B7036 /* svgldict.h */; settings = {ATTRIBUTES = (Project, ); }; }; EA4B8C2B008C444AA0A6467EE33FDEE8 /* NstVideoFilterHqX.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92FE3ED203451DF6D2875541FE82FE35 /* NstVideoFilterHqX.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; EA4BF15425C5527848AAD727B8E2A587 /* EmulatorCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 494D29438728759A64CEF3DAFF79CE8A /* EmulatorCore.swift */; }; - EA7C86A456431D6BFDA337EBDA60E97E /* preproc.h in Headers */ = {isa = PBXBuildFile; fileRef = A77309856ECBE8FE95C26ADD933333D1 /* preproc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EAC867D60DB729E55A1ED540BD330F09 /* video_capture_backend.c in Sources */ = {isa = PBXBuildFile; fileRef = F074B8ED12CB119F2AD98DE96C9D1E1B /* video_capture_backend.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EA616C5D9ED13BF496C9E0C669401F23 /* svbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7AF9FE08D2F6576462E7ECCC9C6E89 /* svbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EAEC2ADB101FBCBB27463DC34E59726F /* biopak.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C84A3CF371C057839A68C574D020120 /* biopak.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EAFAB542A9C64CFCE6CE22241E05F94A /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E793979C109E7302877C7903D7ED408 /* UIImage+GIF.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EB25A4F332AD3C60DF3E1D6D8A74A12B /* Keys.h in Headers */ = {isa = PBXBuildFile; fileRef = 73490B7869EFEC11975B85243D0CA66D /* Keys.h */; settings = {ATTRIBUTES = (Project, ); }; }; EB3650269076DC4FC7CA23EF31B4A160 /* Glsl.inl in Headers */ = {isa = PBXBuildFile; fileRef = 0E8746F05B78C10D0D9D8098224A1D60 /* Glsl.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - EB57719B60503ADE6D81243AA7B99301 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 9CC748D2AFF9AC9A78EA9982425EBACD /* Standard.deltamapping */; }; + EB518A38793E8CE21E64480AE8011077 /* PaletteTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = A0430F33B2F349ADD6CDB6AF35310BC9 /* PaletteTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB6236C291504171EBC2CF210FB95857 /* pi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DFFCF1CDD169427B033DBE318C4EECA /* pi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBA9116EF4BDDFE6CD503CF66D4736D2 /* ftglyph.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FE228B9F6593F99674B619FAD43A040 /* ftglyph.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBB43737078F603C3D37BAE5C000D01F /* TxImage.h in Headers */ = {isa = PBXBuildFile; fileRef = A5234D695ADE2B2BAE15139F5B2FD0BA /* TxImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; EBC516586457D8BA8B838FF0A74F6192 /* SMClassicCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = A6490A0F3B24176875D7C923ED9E0958 /* SMClassicCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EBE9D4C81C76E7547598DAB991A21C34 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 7C0B98385921997315465A09CF1CB184 /* Standard.deltaskin */; }; + EBEA8D5288889DB1232B1F395846283C /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = E2736204110643A558D3FFB355216B2E /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; EBEBA0DA070991E8C4CA134F9FBFE535 /* UIImage+PDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E7C0C33B47A7D708AB3CF66AF1137D /* UIImage+PDF.swift */; }; - EBF46D8060558FA58B2E5CAE42467A6E /* ft2build.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E088DA0C031536321CA95D00470F534 /* ft2build.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EBF38391124E22A0D7ACD21F42B16DC0 /* ftdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C045A31E9EBE0F4CFBE198690BA4782 /* ftdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; EC0E44AC75CBA610CFBDB23601E6772B /* NstBoardSachenStreetHeroes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8E52E44669D74069EC4BCEB20D5BBB02 /* NstBoardSachenStreetHeroes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; EC22AD88F08651F1E9F9D07F1C6CDEE0 /* display.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9EB574A8B1D8BC0B0BEDF16D62D5E3 /* display.h */; settings = {ATTRIBUTES = (Project, ); }; }; EC28DAD95829E5C9E6307A77F8F517FF /* NSLayoutConstraint+Edges.h in Headers */ = {isa = PBXBuildFile; fileRef = CC70680EAE5C40484D98F7B84A2B1CAE /* NSLayoutConstraint+Edges.h */; settings = {ATTRIBUTES = (Project, ); }; }; EC4892F521D296F8A687A076AA68F1AB /* VideoFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4947A8614B4C6559E330C41CE046A147 /* VideoFormat.swift */; }; + EC7A8BB508620BA20B97407B7A4E3DA5 /* ftmoderr.h in Headers */ = {isa = PBXBuildFile; fileRef = B1A991CECAB9DD46D6515EF84919F6D0 /* ftmoderr.h */; settings = {ATTRIBUTES = (Project, ); }; }; ECAB49B60B49C63B1566F162F02177CA /* NstApiInput.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6C13FD7FA77A5769F400B5BF15BC2F34 /* NstApiInput.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; ECCC47B233216A74153F147DE44615C7 /* NstBoardRexSoftSl1632.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA9FA4481CDEC88D482598485C447447 /* NstBoardRexSoftSl1632.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; ECD62CC37167C9C1675F6D68D64E05C6 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = ED9FC408E7E37A99A42E690455015732 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; ECE457DD05BEBE57CFEB9DD0D6A9B21D /* FilePropertiesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40E721AC96D7B1BD5F1609F94C46FB1 /* FilePropertiesRoutes.swift */; }; - ECE94BF77F79C48917F76CFABFF51D4E /* F3DZEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24C9EC3456B0473415C7E2A4BFE6D619 /* F3DZEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; ED000A6A2C0F27F589D2F9F3F0454387 /* rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B97CBE1F36B669152AE6F475CCEB508D /* rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; ED1EED4992202FB7CF07EFE464320E04 /* NstBoardAe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A5F66A556F030CD38AA0B3F7B66C5FE1 /* NstBoardAe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - ED41FDC898B11C9B4481ECA58EBE978F /* wglext.h in Headers */ = {isa = PBXBuildFile; fileRef = FE48EE5ECA5693381EB62AA0D741E0E8 /* wglext.h */; settings = {ATTRIBUTES = (Project, ); }; }; ED60DEB3E6681250967195F1EE82081D /* NstBoardFb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 24BD46060B81FB987DC76C420D9D0434 /* NstBoardFb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; ED62B5E63342691AD8CA0BE9B1BF09B0 /* RenderWindow.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AE0F7B08A9D4CA4E032A55F5910B7FC4 /* RenderWindow.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ED64EA01B94466DB3C85EB1F9717AD13 /* F3DEX2ACCLAIM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81D97BEB994C55C6EFABAC633B5D0966 /* F3DEX2ACCLAIM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EDC281DAD5A8204DB2E18A3FB2B5D725 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4871776B4C704E222EB93D062575DC5A /* Base.swift */; }; - EDE37315A04F24B57508A4D6EE128BE6 /* controller_input_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C1BC49685F5EE8CD682028D49698258 /* controller_input_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; EDEA3AD87DDC71ECD0952ABD1368A95D /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA61FA6FDF258367C544BA1A701348F /* Service.swift */; }; - EDECCD20635BC41EB02BEF704D740AF4 /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = 39366E2F73CC4159EE18FFD5AF80A0F3 /* pngwio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EE15E85924677183CEF51B41FA195E3B /* ftsizes.h in Headers */ = {isa = PBXBuildFile; fileRef = A5D1F6229274C89A198E70560F58BE3C /* ftsizes.h */; settings = {ATTRIBUTES = (Project, ); }; }; EE2019BF5CB64FFF4F1A0E423383637C /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = C538C31B2DE4BC6BA5C964106E5E3F6B /* GTMSessionUploadFetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EE3023766DCA56C999E1855124ED9B49 /* GBAcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 1575109B49D2770633104AF8986A3F36 /* GBAcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EE33CD64FEAC466A7824C75D33623961 /* mp3.c in Sources */ = {isa = PBXBuildFile; fileRef = 9622F656638DFB246B7A638CCF468156 /* mp3.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EE4994A811223017B6C5EE3AC8A4FDAF /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = 39319E8C5681BB472007926F7AAC4580 /* GTMSessionFetcherService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EE4B56A8FD2098F2F49C84B564BDD404 /* PrepareUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7959936C4C72BFF6C57D269BD58A6A92 /* PrepareUploadingRecordsOperation.swift */; }; EE6944AB9BC075F13C9B3948E6280260 /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E9620B66C79B5072CD182C1D80819C8 /* String.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EEB84D1AB735724A00357534155CBAD1 /* EmulatorBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = A22889DC853EDD8E7FCC52CA013A82BB /* EmulatorBridging.swift */; }; + EEBFD3F505227D78487CA20BB4B173BE /* dcheck.h in Headers */ = {isa = PBXBuildFile; fileRef = CBE09CFE7E4A642AC1B56EC89FADDFFE /* dcheck.h */; settings = {ATTRIBUTES = (Project, ); }; }; EEEAE72A65DE128B59CA501731003600 /* crosshairs.h in Headers */ = {isa = PBXBuildFile; fileRef = 567D8A08CDBDC5DA06BFD1DC70DF4E1C /* crosshairs.h */; settings = {ATTRIBUTES = (Project, ); }; }; EEFFD918B4E699ED2974C0B2F35E9932 /* UICollectionViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1AC475F3EBD28D40D55EE72FC5AB07 /* UICollectionViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF255A27386D9491CC62288BD9B6CCFB /* ftmemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FADAD20817CF7C88C8300D762D5C633 /* ftmemory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF1305999A84EDD9047C2F944DA378F6 /* re2.c in Sources */ = {isa = PBXBuildFile; fileRef = BF31C2CB59DFB2355DA7BB8112A5D5C0 /* re2.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + EF2338ACDBCE2D71362634EA72885198 /* GLideN64_mupenplus.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F557085D0365AECB4077B82DE76E12 /* GLideN64_mupenplus.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF2A06A0AE3C020BCD08214345B501AF /* ftstdlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 487DD8DC7317E0C36210DD3B701C4E0C /* ftstdlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF51344AE5A0B6EAE5D8291C20453754 /* ftsystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBFA95BE33AC04B65DD7AF6C54B92DD /* ftsystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; EF5F3C860891664625225F32C4399ADF /* UIView+AnimatedHide.h in Headers */ = {isa = PBXBuildFile; fileRef = 250AF154A10D578764C0BBBB190A8554 /* UIView+AnimatedHide.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF9C7D853BDDA0BCC0F895D47AA7437C /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 81586D54535F45B193EF58A3F9A1B704 /* png.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EFA0DC841E9880CDA5B1507E29E2E545 /* NstApiEmulator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5CC102BAEF4C8D771A86539CC220A5A5 /* NstApiEmulator.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - EFA81C37AB1F59EE3DC9500238D24A10 /* Turbo3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FDB5E5AA46D38CB2E47E5E6DF9A5645 /* Turbo3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; EFAE2C3B6A6696B52B10F87013319EE4 /* ARM.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD7894C9422E5309EB6A4FE9A80D055 /* ARM.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EFBC931CE4E414BC640465C620C582F2 /* ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B344A1563D4DD7818E0D6A1BC8076EE /* ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; EFD770F15B52B41E2DBEEEECAD735D98 /* RSTBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FB822E90029BFEA20B117487DC27A04D /* RSTBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EFDB58D53DCA43CA1A9A175952CC0AFB /* RDP.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EF1745163AD82481D56DE9A59BA24BA /* RDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EFEDD19659E080B7972B6EC2113D02A1 /* TxUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5131F9EE375D77DAA9870F13B4698A6C /* TxUtil.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F00226D59B11A277EA50376813104098 /* tlb.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B888530E83F42860A13FCEBBC74F753 /* tlb.h */; settings = {ATTRIBUTES = (Project, ); }; }; F007EE3D67A49DC33FE2A74392FEEE44 /* NESDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D2A1CDF2D6BFF1EF9D9061C663EE16F9 /* NESDeltaCore-dummy.m */; }; F01AD38461447D0079DFD168C66DB6C6 /* AAFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 77AC9809E47F480ACB8F5F50E124AEC6 /* AAFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F0233B5DE0C680AA1D6FEA80AA73EB85 /* svsfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3139CDEFDF54874B3FE87D52FBEE63BB /* svsfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F02E7E3A8386A951047E19069AB95354 /* ftbbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 85237BE80E426B918024FFAC9251A50C /* ftbbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; F03A441C530590BF7C1DF4B3D4BD675C /* NstApiRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9C6144633B0DE1C8B971A2728903B95 /* NstApiRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F03CF428C71FCFA033C24776E54BA798 /* UIViewController+TransitionState.m in Sources */ = {isa = PBXBuildFile; fileRef = F74135D2566C066E0B9F4F851E06A12A /* UIViewController+TransitionState.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F059D06F724A8A8C7BBDE111D491A11D /* t1types.h in Headers */ = {isa = PBXBuildFile; fileRef = 819239301CC1811B87F438BAF1B0EED6 /* t1types.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F05424247FEA20A37761755BB26A2D6E /* svkern.h in Headers */ = {isa = PBXBuildFile; fileRef = 4541F12B3B53C045767B87EFB73A1AF3 /* svkern.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F08BE54F91DAFF4A21D3CF9633125D9F /* TxTexCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 508153374379761825956DE2D625E976 /* TxTexCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; F08F5F4EDAD9842D1AB41C448FD7ED97 /* NstApiSound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8D629AE3BF67DAB06622670203476B43 /* NstApiSound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F0C15DA7F5002FC0639540515DB2A332 /* NstApiVideo.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 97B1BF27F91C777F9330B2027409CED1 /* NstApiVideo.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F0C6CE8A84BFC2F818EA2389B0E54944 /* S2DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 915FAE52C5A766087CB6E4CB6D7ABE8D /* S2DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F0D1F35D36D80879500D7BC755F861C0 /* F3DBETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8548E8B79648F224295606EFFF726D52 /* F3DBETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F0D0016C6303E1AA72FFC72B8AA430B1 /* main.h in Headers */ = {isa = PBXBuildFile; fileRef = 62CF24548323CEDA7F6C62DDD4E4970E /* main.h */; settings = {ATTRIBUTES = (Project, ); }; }; F0E5B9CCB6926463DE3B74D3085F7A39 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 4A182802B17188F847B92490A82541B0 /* Standard.deltamapping */; }; F1089B4808327FEC6230C3D66D26E64A /* NstBoardEvent.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 29AEB4740EA971386FE4B6750AA2EB59 /* NstBoardEvent.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F12B7D9CA9CB9FB6C292DAB35BC315E7 /* StandardGameControllerInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B0B083A9E33A408380E6933367C443E /* StandardGameControllerInput.swift */; }; F12C21D84E31915404415E94619EC735 /* BreakpointStructures.h in Headers */ = {isa = PBXBuildFile; fileRef = 512C4AAABBC20D346C24998DFEE5AFA1 /* BreakpointStructures.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F14AF01CB61F64826FD3FD918991836A /* arithmetics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA748DD06BB0F87B2D3FCBBCB21BB582 /* arithmetics.h */; settings = {ATTRIBUTES = (Project, ); }; }; F167CCE2838CD4DF3161F75877A2858C /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FC26E46646A054862FD9FA6A118709 /* Value.swift */; }; F1A9E20B5E2A3EDA6E681DE782F1334D /* ControllerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C5CBC5126812FD2065CDBAEA94BF976 /* ControllerView.swift */; }; F1DCBDDEE6EC2B1512E4A288D7ADF679 /* GTMSessionFetcherService.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC5310CC574B1695D106EA4A1306618 /* GTMSessionFetcherService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F22E08070AFC46B32347B32B2504F0AE /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF571FDBAF68294C828B93CF7AB2606 /* SDL_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F2343F2869AC758CCBFC62600C3A2E94 /* ftgzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 22528395152B5ECC856B25BADDACB3F9 /* ftgzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F257B3855C80FC939C018B2D48CD4E75 /* GraphicBufferWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 535C2901C00E7283DD28013BBBC6CA4F /* GraphicBufferWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; F264D06A3A46BD2D13A1B902FF3D4B82 /* NstSoundPcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CB66A3376ED296C661FFEAA36063E7A5 /* NstSoundPcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F27A150577AFCBAD02400766373F8531 /* opengl_BufferManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = AE3364FCB045C19E649AAFBEB1B1A950 /* opengl_BufferManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; F28DDFAB4A2E61C4361B1F25F9FC031C /* RSTError.h in Headers */ = {isa = PBXBuildFile; fileRef = DB18069D26E35C1BEFE5C4A0262422E8 /* RSTError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F28EC2465A217A0417AE60E418AA1C70 /* RSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0263597CCE16095F0BA7CA33F49B26BA /* RSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F297900BE7AA8C84345754611015F8D1 /* NstBoardBmcSuperHiK300in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9B772B195955E19223C5D696AF8E884E /* NstBoardBmcSuperHiK300in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F298E311AEDA130784E1ED9899B35D3E /* GTLRErrorObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 68263C62DDF9F51529551BECBBD26620 /* GTLRErrorObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F2C3D5F056E937891CBDC532EAEE1987 /* NstBoardKonami.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D5FBF61FEAA24AC5DFA51366F3A14D23 /* NstBoardKonami.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F33414938A92A2BDBBF6AEF202CC0166 /* GraphicBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 877821421C3883E9EC8A19BABE97DA2D /* GraphicBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; F33586928CCCB162321E60496A3DCA3B /* NSUserDefaults+DynamicProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = E45EB56BC48BE16046055CF4A8D52558 /* NSUserDefaults+DynamicProperties.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F35E35BAE2395E393B54B5F41F61F31E /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5414A0A2C2B0F58D727F258C7536FAEC /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F3C54A16E279E2FDD60FBA58FBB2B4AB /* F3DSETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DBA884F6C11AC7F591FA518903604B3 /* F3DSETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F3EB20A92D49B9ED4E75EC8DBCD5AE92 /* FrameBufferInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A7607CB2BCFE4453A1188585644330 /* FrameBufferInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F3F92D728EEA58B31C1366A8C3D2592F /* opengl_BufferManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8CD1F5D1FB7A2951D65FA4A322294D1 /* opengl_BufferManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F461C36F53ED47D40DC15FB88FB3ADB5 /* ftdriver.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8D045A4BAB5806465552F9EAD05287 /* ftdriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F37C13D42474C3BADCAFF47A5F41F812 /* dd_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = FA40AAF8BCF7B04694A0037FB3760458 /* dd_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3A563FCA1E0F42C68F9241CD37D6AFD /* F3DFLX2.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9634B3B11790E21D1DD4B3D06D4A1A /* F3DFLX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3B34A063C2F03D5BB8001B5C8CFB941 /* GLideN64.custom.ini in Resources */ = {isa = PBXBuildFile; fileRef = 12E9FF9AEEDE68C957B7D04E8966667F /* GLideN64.custom.ini */; }; + F3BB536B95A695A7D611B8AADDAC1F90 /* ftcid.h in Headers */ = {isa = PBXBuildFile; fileRef = D6FF04411B9686AB60189647F155133B /* ftcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3FD28132C4E21361E2113320D6512FF /* ucodes.h in Headers */ = {isa = PBXBuildFile; fileRef = EF0B5A83CEA7719FDAE73CD9B61BF813 /* ucodes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F406446D12685CEBCBEF3EAAE3043BD8 /* F3DBETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 398B0C10962B06603D1218A0BFEFDE41 /* F3DBETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; F473DE6E2DF0BA57A56F780ACA3D9E94 /* NstBoardNamcot175.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4777A754C8B992D16F19E6669E3983F8 /* NstBoardNamcot175.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F47DE4860ED00EA4CDC661D662F1681B /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F77D5D789D6454A73C3D19E2727B786 /* SMCalloutView.h */; settings = {ATTRIBUTES = (Project, ); }; }; F4808FD70D3BA8559604594D5674A324 /* ManagedRecord+Uploading.swift in Sources */ = {isa = PBXBuildFile; fileRef = E04D3872EDD7D06663BEBFB1BB899C3E /* ManagedRecord+Uploading.swift */; }; F4EF7512EED07AE5D1BAD5341F1F119B /* Lock.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DE3C56A00DE19DC466C925A15112774C /* Lock.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F54B67349E466DAAE2CF0795F99BDB61 /* S2DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 915FAE52C5A766087CB6E4CB6D7ABE8D /* S2DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F54EE04CAD7C3199596833B62C4C5955 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DD00852D37B01767D028ED9AA2DDAD /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F565CC28410967B9FC16083B01E52FA8 /* NstBoardNihon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F517002D199922653B78176FE67DCA6E /* NstBoardNihon.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F5872A78E0CA44A471473CFF9123D560 /* GBATypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 01BB302ADFA2AECE433F8364E67758FA /* GBATypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F59CAF83B152BF1D5B4B3BD272054564 /* Savestate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 97584AF9C663217B6EF9C0EC7EAE247B /* Savestate.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F5A1CC355CA69B7DB624218176781D44 /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = 582F8C63B9BF01FB8537FCBB2196C589 /* list.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F5A792629C2A69A6ACE4916D514C5A1D /* clock_ctime_plus_delta.h in Headers */ = {isa = PBXBuildFile; fileRef = 886FBFDCA7FC1D72F001F3E9535B924A /* clock_ctime_plus_delta.h */; settings = {ATTRIBUTES = (Project, ); }; }; F5B0959C767055FB7465D5703EC70D68 /* NstBoardVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 959E0E9212C0B69B99187171C13A47B2 /* NstBoardVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F5D6D35D7781479FB2D95F3856A26F31 /* NstBoardBtlMarioBaby.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BDFE520B92F8D1422A24E28BA575C2F0 /* NstBoardBtlMarioBaby.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F5D9DCDC448615EEC0C90DAF2C5C7E76 /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C79D85ABB10589F765DD64715EEEAD3 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; F5EB7545B62578D96DD78196C4A4261D /* mc.h in Headers */ = {isa = PBXBuildFile; fileRef = D9223E826A52C67763ED0B1CB113EDBC /* mc.h */; settings = {ATTRIBUTES = (Project, ); }; }; F6022F4248018E1F466DE6310CC41E2C /* NstBoardBtl6035052.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8854FB70C2F1990688897351E465107C /* NstBoardBtl6035052.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F6F78EEB967196912D362AF067BAD829 /* TextureFilters_hq4x.h in Headers */ = {isa = PBXBuildFile; fileRef = 009F86808D0C8EA68A833D33755CD232 /* TextureFilters_hq4x.h */; settings = {ATTRIBUTES = (Project, ); }; }; F73B09692A1D8FBD4A33D1322CB8C4F8 /* UITableViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4455D697CDC2A6441EDD561195EFE9DB /* UITableViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F74CF719E0F6180E4E173648469B6C63 /* F3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE4827A1488FD5FE6F356A0EE7D96A3 /* F3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; F7594B37B464285DF07D893F8BB3F61C /* NstApu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F1A146BC0741538EE96C0E759582B337 /* NstApu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F7702D2569122119783ECBECBF0893F7 /* Textures.h in Headers */ = {isa = PBXBuildFile; fileRef = 1563D8DEE08EAA92574952B8B395A8AA /* Textures.h */; settings = {ATTRIBUTES = (Project, ); }; }; F78014F7507926EF6233B8D9C37FDCF7 /* GPU3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8F6D0F53FB1FDC036DDE39C228B2207 /* GPU3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F7AF82D1660F78BE791EF27F2F3D2938 /* PaperRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D72BB4EABA02D0C40C9847B11342161 /* PaperRoutes.swift */; }; F7DFC08D8BF3B75E5D6DDE750D641962 /* resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6969D1558B782C4F58F0AB947B3E22 /* resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F88F53D89C8D0B6EB6512F6FAE96128A /* pngpriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 486AA33DBD077F14429174C280495E58 /* pngpriv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7F6A01D7934B9EB482F435F0DC55B16 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AB7E24DF9D482B653684A4CB3373DAE /* plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; F8A64A92EC039B20A16655B109BBF437 /* ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6888D502C932A8931592CA8315E0F44 /* ControllerSkin.swift */; }; F8B9B69D4EE4EB38FF98385CD92BD358 /* Music.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C8B01F60E394BFF06046341D779E4CB4 /* Music.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F90D2D532045BC492EC7DAD939281E55 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = E8274D72B068FDD5B8433E16806FBEB8 /* SDL_opengl.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F93AFA5631800C81D28898AD46D0B83A /* opengl_GLInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 86EF6CED706D9CF50812AACFBA3D3205 /* opengl_GLInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; F984AA7029A105CBC169C0E24725E036 /* RSTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 609716320CE93EE5720BD73EE4666B18 /* RSTConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F98A8297B3F9AE509468A91CFA926DED /* ftlzw.h in Headers */ = {isa = PBXBuildFile; fileRef = 157434C4FA16895B0C6EBC0D02FAECF0 /* ftlzw.h */; settings = {ATTRIBUTES = (Project, ); }; }; F98FA998AC2986864A31A3383D9F6757 /* NLS.h in Headers */ = {isa = PBXBuildFile; fileRef = 8854B895A2B698DDB8BD5A2748BC1885 /* NLS.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F99240E705D674B72FB6B3DAD45349F4 /* alist_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 65A31956BBF79B889849828770076815 /* alist_audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F9F08CA61836853CAE7455D76939D98B /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6A19232BD176F1842FA9413EF58EAFB /* ParameterEncoding.swift */; }; - F9FF13C1512AE6877E9661CF438EC88F /* ftwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 11D8E3490D52F64122D1E83DF8178D41 /* ftwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FA05D0CC05B23D7027D8C3FEE24C690D /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E2BB78721D4C6515E5DED30486B26C2 /* opengl_ColorBufferReaderWithBufferStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; FA577995260851815A34580C95A493FE /* GTMMIMEDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 013B228892127D085A9A12736D33F540 /* GTMMIMEDocument.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FA71E7212A583BF178A9718178962E06 /* MelonDSDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FB5B955EED3BCE73AA95E7D1F60EF62 /* MelonDSDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FA7E71D6ABC8350D6902714609D30179 /* N64DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C1093F4879EA7F32702CA47E35814B /* N64DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; FA9B5DF268C458C80AA79A7FBD2A08BD /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 930C6159C2738B8427010914FE6F8715 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FAC36F11FCA18D96655C0EC43BA109EC /* UICollectionViewCell+Nibs.h in Headers */ = {isa = PBXBuildFile; fileRef = D190B41F4CB5ED20A79688D063A88168 /* UICollectionViewCell+Nibs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FAD04F8BFE956097606AAB6B00E030C9 /* rsp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEBC190192DF7DAD9E802180C71E395 /* rsp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; FAEE64ADE6B20CAADC50E71E09808DD4 /* slot2.h in Headers */ = {isa = PBXBuildFile; fileRef = 2098169177E986CAD8BED07A181041DC /* slot2.h */; settings = {ATTRIBUTES = (Project, ); }; }; FB429DE7183465EA3908DC0EFC0E55B8 /* NstChips.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1437D26717ED40A8C5CDAC510546F0AE /* NstChips.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FB431B0FE84CE918B28A6CEC02DF7FEA /* RSTActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E88C1E79B3436FD1C098E8D3CA9C3B1 /* RSTActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FB52AF561DF1EA42175BB097A4ACC4CE /* F3DEX2CBFD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99096141FF8112FF26903D5255091329 /* F3DEX2CBFD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FB4A3706CC5E4A32ED7318A2C201B99B /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E2BB78721D4C6515E5DED30486B26C2 /* opengl_ColorBufferReaderWithBufferStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB4E28E4594BBA6CBDFD04FA27339139 /* ftsnames.h in Headers */ = {isa = PBXBuildFile; fileRef = 423425F5988743735EC12578B4A52F5F /* ftsnames.h */; settings = {ATTRIBUTES = (Project, ); }; }; FB53448735C698828655BAC4D9CD8EEB /* NstHook.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CC3FC4F8CAD332D94FED0C7DA4BE5251 /* NstHook.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FB7693DF35B3F75D556BADB4277A204D /* NESDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 07202C173B00EB72E2B76512AB36D1FF /* NESDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FBB36E54634D5A90215F267F62AC558C /* TexrectDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 32C0B90253B6F200AB5E78C107875E7B /* TexrectDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; FBB46230897F3CE417083A50F260DC62 /* NstBoardBandaiDatach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04884C74271D3DFEF181C2C3A302F1EA /* NstBoardBandaiDatach.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FBDC8F8F17CA21DD799A231ED4C63221 /* glsl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A01EE3AE9A9EC3F97E1D65778521BE4 /* glsl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; FBE89F87882A3EF8E629A5FF5CA465AD /* Vector3.inl in Headers */ = {isa = PBXBuildFile; fileRef = 1ECD6095FEBED6549E4EE623A0FC3431 /* Vector3.inl */; settings = {ATTRIBUTES = (Project, ); }; }; + FBEC78AD8680AFF70333B8C35FC9B9E9 /* psaux.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E570CBAF755D32B62B2B5506AE1CB8 /* psaux.h */; settings = {ATTRIBUTES = (Project, ); }; }; FC17266254EDD27F76B52F2DFAE02BEB /* NstBoardKonamiVrc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 36B43C04D7CC65CE9AD7C42E09A75A07 /* NstBoardKonamiVrc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FC4AFADABFECA8B929C84039869A806B /* NSLayoutConstraint+Edges.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B960281116744CE51DCCFCE5C6B616C /* NSLayoutConstraint+Edges.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FC7830E121F5F72FCCBB725FFB1955EF /* clamping.h in Headers */ = {isa = PBXBuildFile; fileRef = 508001DB6BE4336BE73C646FCBC54782 /* clamping.h */; settings = {ATTRIBUTES = (Project, ); }; }; FC88917194482589C32FDDE107659F9B /* DropboxClientsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4CE4627B8A26D8EBCF531C808BA677F /* DropboxClientsManager.swift */; }; FC88DE967A3DA743DC5161E747CDC20C /* GTLRService.m in Sources */ = {isa = PBXBuildFile; fileRef = D1221EDCBBEDA9035D0C95CAE7F9D52A /* GTLRService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FC901AE65E0FBF69936AE0909DE7C2FB /* glxext.h in Headers */ = {isa = PBXBuildFile; fileRef = 46E7ACB3EEB07EF50F5C2B657C683EC7 /* glxext.h */; settings = {ATTRIBUTES = (Project, ); }; }; FCCF2FA5A8D8593F791CD74984F915F5 /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = A72FCF0B1E569ACF2DA4B0AE86704717 /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; FCFB664196AEF0AB4F9D49044093DACA /* Text.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E6160492F9D1405C748988282E22619 /* Text.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FCFB7628C2357AB914595C54A83E9372 /* opengl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F94CD2A593A3820ECA68A3AD91377F /* opengl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; FD2F6B87B0C2E2B0F286279E623668D9 /* NstBoardJxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3479E4ABC7EA56616AD7804B53308F24 /* NstBoardJxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + FD61ABDF9C0774877D3E211B444E4319 /* sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = F15930486D7F45DD18CFBA9BD8800E92 /* sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; FD6339A963EAC26477FD04D0BFAD9996 /* srtcemu.h in Headers */ = {isa = PBXBuildFile; fileRef = 20636B35E9114D9C339486FC80D17633 /* srtcemu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FD8858F32C89A15506CDE5FEEED204A6 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AB7E24DF9D482B653684A4CB3373DAE /* plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; FD9074443C03E8B90BBED9A42541D442 /* UdpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 50AE585204C42DE0E82204B2336C8C73 /* UdpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FDAED0747D841ECFEF580516B968E938 /* F3DFLX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A59426906D18823BC9AD4B26A1EC66C /* F3DFLX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FDEE9F98E235CE8E3A2A29186FD3901A /* NstInpFamilyKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EFB09061F5EC38F78019E5DE2971B3BB /* NstInpFamilyKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FDF30A650ADF0FF5E6748D29AA81A2BE /* sdl_key_converter.h in Headers */ = {isa = PBXBuildFile; fileRef = D4F21465E42C4A8071CA88DDA2952DAA /* sdl_key_converter.h */; settings = {ATTRIBUTES = (Project, ); }; }; FDFC423A4243CFA179481946B523C999 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6822483789D6B6BB133ABB5446BCFF2D /* Setter.swift */; }; - FDFEFE7BFC83D62ECBF5728AA1F5CD7F /* osd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AD3368B2D5D7E97A29573C83ED07A59 /* osd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FE0FA27784515E14FED461B1ACB0D5AB /* ZlutTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05767382F7FDD0945BB7F7F65461307C /* ZlutTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FE1FF7D0F5FA90A665A35F3CC8B9A109 /* resource.h in Headers */ = {isa = PBXBuildFile; fileRef = C7042544A83B2C65E8D67FFD6DBACCD4 /* resource.h */; settings = {ATTRIBUTES = (Project, ); }; }; FE333082650A337F417E1CF08EF9503A /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 37221D699E77B16EA4FE6C376B827730 /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FE4C20E7F64FF4F1770496AF1776A9D3 /* ftoutln.h in Headers */ = {isa = PBXBuildFile; fileRef = 424AB45294CF56320B355DCE7A0F8E81 /* ftoutln.h */; settings = {ATTRIBUTES = (Project, ); }; }; FE66ACE5CA4F217211189D67E353E0E3 /* Err.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3AB1EF926C51DFF7D92DC2A88CBEF231 /* Err.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FE6E40D309F0B3DD2EC97258D2B80C79 /* Keys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14603BADCCE95A5E507021ACEF7693F /* Keys.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FE94B7CC01A829EE981DA802A9137E23 /* TexrectDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8958320DAE6D887ED9E5A519C025718B /* TexrectDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FEA640DE0115214A9C6F9F674F56194E /* RemoteRecord+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = D347B9730DA2524DAF8E0C7AEDC8EEEA /* RemoteRecord+File.swift */; }; - FEAB30060313E7D45EDA78B37A4A860C /* Log_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB8CD619182507E4AEFF0FD1231295 /* Log_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FECF1DF017DE2F169EBA719FD4D6AC21 /* cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 28CBF616EB776A5C5D2F9A737B72AA74 /* cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; FED373516448B1419731F783A3F890E8 /* ARM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 19481227163F7CACC6C2B1E0A8B6A008 /* ARM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FED42AEDD26B19BB49DD15B37B502C26 /* gSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0EA337C872D00B3A247FF40858C6BF1F /* gSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FF0759DD9EB949FE677055277F11202C /* F5Indi_Naboo.h in Headers */ = {isa = PBXBuildFile; fileRef = DF93E143D1E16A5D0994F45965CDDB74 /* F5Indi_Naboo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF09ED7CB9926D0011334E7D08830272 /* DepthBufferRender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E29595D0B8DD5D154897A066190504AB /* DepthBufferRender.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FF31B5BBE13193F204040DE66FF15F02 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = F48A69F12EAD2BE3BAAF57DC1FBC2F40 /* Request.swift */; }; - FF3F43F568A4324F4CFCA6034F0EFE72 /* vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E1FCF713C18921783474BD5B489966 /* vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; FF47124336E697A518CE2C93B8E88C2C /* GTMGatherInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = E0987B780D382225AE82D80ECA8C0641 /* GTMGatherInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FF52A333ED5E1B6EBA938D3B010BCB0B /* UIScreen+ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32999EF608D52E8EBF47AEF2D05024FB /* UIScreen+ControllerSkin.swift */; }; FF60E30A8C317F1FB539F1A815BBF38F /* NstBoardBmcGamestarB.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 47FFA445106E8AEF055315EC32F6416C /* NstBoardBmcGamestarB.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FF64C067DBF8F76E97824763C8259B99 /* RSTCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D324452F2442968D429ED7A0718561D /* RSTCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FF7EF92A4AB21183D04B1959C2969012 /* N64.h in Headers */ = {isa = PBXBuildFile; fileRef = AB7ED6F2E514469E5640A93ED3622401 /* N64.h */; settings = {ATTRIBUTES = (Project, ); }; }; FF971B9F9F993B9F74611546EF606135 /* NstBoardBxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E6E22BF5B1C689D0C6A59216C3AF5E74 /* NstBoardBxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FFA9968DD49CF535DFA48AC9E948F1AE /* NstBoard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AE6A38985CB70BB9472E2EB009DD360E /* NstBoard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FFB1135FEFD4153A7DB3BC2BDD598710 /* String.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52AFA2BBC1A97735195FCE0F072444DD /* String.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1807,13 +1807,6 @@ remoteGlobalIDString = 530F469AED058B94728C278CCA514500; remoteInfo = DeltaCore; }; - 34B215C21519BEE50F2B57C914617CDD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 530F469AED058B94728C278CCA514500; - remoteInfo = DeltaCore; - }; 3CD814616B670B8CE5088FBD7C0E1762 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1919,6 +1912,13 @@ remoteGlobalIDString = D20492B6476142DCA0C455340876BB98; remoteInfo = SMCalloutView; }; + 8C6093F292174055C3C90785DBCA7FDD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 280620EDC57ABB510508698A7233E414; + remoteInfo = "N64DeltaCore-Mupen64Plus"; + }; 917C63D909EFB5E156F1D8438E1DBF3E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1968,6 +1968,13 @@ remoteGlobalIDString = 530F469AED058B94728C278CCA514500; remoteInfo = DeltaCore; }; + B1570DE8D1FE8F79EF7721A260A67201 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 530F469AED058B94728C278CCA514500; + remoteInfo = DeltaCore; + }; B8692181C6057BB8A463EBCE606FACEA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -2045,13 +2052,6 @@ remoteGlobalIDString = DCBC8D45C727B1472F26E79661AF11B0; remoteInfo = DSDeltaCore; }; - EF595E5FB07F405B2D9F4C94D4560005 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 38A3E6A4A13E8C4E975336840145C119; - remoteInfo = "N64DeltaCore-N64DeltaCore"; - }; F1EB0B745F438243447388F899A86F78 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -2169,7 +2169,6 @@ 092C6EE9873F269B8DF55D311028DF6F /* F5Rogue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F5Rogue.cpp; sourceTree = ""; }; 0971A5E1176766915B5C63ECBAF0E9A1 /* NstBoardUnlSuperFighter3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlSuperFighter3.hpp; sourceTree = ""; }; 099938FEDA9E30DB8F316FD35D3A7E39 /* Account.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; - 09A719B1C418B5A4A8184B6EC22CE504 /* ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist"; sourceTree = ""; }; 0A01EE3AE9A9EC3F97E1D65778521BE4 /* glsl_Utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_Utils.h; sourceTree = ""; }; 0A0BDC53FD9A10612B34F36860479885 /* UIViewController+TransitionState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+TransitionState.h"; path = "Roxas/UIViewController+TransitionState.h"; sourceTree = ""; }; 0A35B20685D6B2F22C568D23E73C3E50 /* opengl_Parameters.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Parameters.cpp; sourceTree = ""; }; @@ -2196,7 +2195,6 @@ 0D13CE77F2679DAE2B0BD39A25C2A0DE /* NstBoardUnlA9746.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlA9746.hpp; sourceTree = ""; }; 0D2603FBE6D0E88895754984334C87D0 /* NstBoardBtlDragonNinja.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlDragonNinja.hpp; sourceTree = ""; }; 0D27F1218FFC3EC9D27CAC71BCFD4925 /* pcap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pcap.h; sourceTree = ""; }; - 0D29D1C963E32AFCD9DF5F87C6BA90D9 /* N64DeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = N64DeltaCore.modulemap; sourceTree = ""; }; 0D3974A0FEF480847BBD90477C1A1D10 /* GoogleAPIClientForREST-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GoogleAPIClientForREST-prefix.pch"; sourceTree = ""; }; 0D6CBC1B60FADA9D18C705CC48D37B27 /* SNESDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SNESDeltaCore-umbrella.h"; sourceTree = ""; }; 0D9E4AA51EA6166FE8A05D803D4DFCF2 /* GBCDeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCDeltaCore.h; sourceTree = ""; }; @@ -2228,7 +2226,6 @@ 10A0472CDCFE1CC45A359E5838CAB872 /* NstBoardMmc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc4.hpp; sourceTree = ""; }; 11142D8FFFBE27CBCDA599BAC4229CE3 /* MelonDSTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MelonDSTypes.m; sourceTree = ""; }; 112637F718E98C3499172684DAB993A0 /* n64_cic_nus_6105.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = n64_cic_nus_6105.h; sourceTree = ""; }; - 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = N64DeltaCore.bundle; path = "N64DeltaCore-N64DeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; 114921A6CAF20904FE9B8E29537F98A4 /* NstApiCartridge.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiCartridge.hpp; sourceTree = ""; }; 1168E68918E5BF84E08E11C7B371ABED /* ftxf86.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftxf86.h; sourceTree = ""; }; 1195B6998FE8421EBA77EB210A43B4B4 /* NstBoardBmc150in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc150in1.hpp; sourceTree = ""; }; @@ -2247,7 +2244,6 @@ 13B3F0409CEA697951ADECD54AABFC17 /* RSTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTError.m; path = Roxas/RSTError.m; sourceTree = ""; }; 13B7FFD0C9DAEC7BACA3614D558B1227 /* NstBoardMmc2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc2.hpp; sourceTree = ""; }; 13D3D42973146D80916E32B3BBE3D0A1 /* ExtensibleEnums.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExtensibleEnums.swift; sourceTree = ""; }; - 13D9D073E172499FE0BA408392C89173 /* N64DeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-umbrella.h"; sourceTree = ""; }; 13E354663056D2C09F9EBDE7F3F20EF4 /* PropertyGroup+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "PropertyGroup+Harmony.swift"; sourceTree = ""; }; 14057D1AEA66E65BED2117946518BB10 /* Common.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Common.swift; path = Source/SwiftyDropbox/Shared/Generated/Common.swift; sourceTree = ""; }; 1406F5851ECA113961E420930E44400E /* ftpic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftpic.h; sourceTree = ""; }; @@ -2267,7 +2263,6 @@ 15A5B47B39157696DDBC56DF53AEFE81 /* ring_buffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ring_buffer.h; sourceTree = ""; }; 15E4E1022555EFD22260B7C32AE9BCEF /* retro_inline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_inline.h; sourceTree = ""; }; 15E65EB68D56E7366BC886E0DF3F4369 /* biopak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = biopak.h; sourceTree = ""; }; - 160A1FB76516D2D1FABCA5F0A6795568 /* N64DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-prefix.pch"; sourceTree = ""; }; 1615D09DB3F681C62200592953856E68 /* armcpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = armcpu.h; sourceTree = ""; }; 162D4D53C68E5F2542C1898C9D356FB1 /* pngtrans.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngtrans.c; sourceTree = ""; }; 16334C263B60314F60B061077457ED0F /* NstBoardBandaiOekaKids.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiOekaKids.hpp; sourceTree = ""; }; @@ -2728,7 +2723,6 @@ 52AFA2BBC1A97735195FCE0F072444DD /* String.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = String.hpp; sourceTree = ""; }; 52D0F4C76483E71C2F01319F14942730 /* RSTNavigationController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTNavigationController.h; path = Roxas/RSTNavigationController.h; sourceTree = ""; }; 52F99D4811CD8DBB2B4EDC0AB616E6B4 /* ereader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ereader.h; sourceTree = ""; }; - 52FF008EAD8518503CF4BE5EDABF7FD3 /* N64DeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "N64DeltaCore-dummy.m"; sourceTree = ""; }; 530422F5717AFED3153BFF2D2284D3E5 /* ColorBufferToRDRAM.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ColorBufferToRDRAM.cpp; sourceTree = ""; }; 531E9AB4F828520F2368955170BA41BB /* ftobjs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftobjs.h; sourceTree = ""; }; 535C2901C00E7283DD28013BBBC6CA4F /* GraphicBufferWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicBufferWrapper.h; sourceTree = ""; }; @@ -2870,6 +2864,7 @@ 68776D658C9400B8766FD395BBD08F63 /* Platform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Platform.h; sourceTree = ""; }; 68A229662DE33DC9840D7CCB41582EA9 /* encrypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = encrypt.h; sourceTree = ""; }; 6944EA8E8CC44D97F089057D5BBB67A6 /* fxemu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxemu.h; sourceTree = ""; }; + 695503A0305730FDED4FD809DFA4A3C1 /* N64DeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = N64DeltaCore.modulemap; sourceTree = ""; }; 698C748E342E77F1EA0CBA79A28CAC0B /* NstBoardCxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCxRom.hpp; sourceTree = ""; }; 699F79983949D91377333D55142CEB7E /* RecordEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordEntry.swift; sourceTree = ""; }; 69C6B83D4542C5716F38FE2C2C2E343E /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; @@ -3036,6 +3031,7 @@ 8000DA34B53DFAB07C0D683921D81892 /* NstBoardBmcNovelDiamond.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcNovelDiamond.hpp; sourceTree = ""; }; 80019774B54716FABF7DEFCCD68E75C2 /* Debugger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Debugger.cpp; sourceTree = ""; }; 8009E402564A24AC35F53518E984813D /* NstTrackerMovie.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTrackerMovie.hpp; sourceTree = ""; }; + 8037C3684A58B1EC85B083D0624A7117 /* N64DeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-umbrella.h"; sourceTree = ""; }; 8058D48F8CF8A2D21FE0EEF65FE6BFF6 /* RecordController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordController.swift; sourceTree = ""; }; 80C066584D91192C2CB5B4E7606E8F20 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = DSDeltaCore/Standard.deltamapping; sourceTree = ""; }; 80E83F0F41410406BC51FD2A72523649 /* STTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = STTypes.h; sourceTree = ""; }; @@ -3074,7 +3070,6 @@ 85B98EACC45CEADA2FC73EB069E37FC7 /* GTLRDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDefines.h; path = Source/GTLRDefines.h; sourceTree = ""; }; 85CA254539B604E12B65C0315AD84D21 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; 85D72CEA77A8089188A57FDD92DB3E21 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = ""; }; - 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = N64DeltaCore.xcconfig; sourceTree = ""; }; 867EE1D22093A5E26C0604E46F43DE5B /* Rect.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Rect.hpp; sourceTree = ""; }; 867F308297D845E4AB0774374BB3EFB4 /* NstVideoFilterxBR.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterxBR.hpp; sourceTree = ""; }; 8693CF6D0BA1054AECDB9EBCB129A363 /* NstBoardBmc110in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc110in1.hpp; sourceTree = ""; }; @@ -3115,6 +3110,7 @@ 8A65C030A8CB605B689A888D7DED867A /* NstInpCrazyClimber.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpCrazyClimber.hpp; sourceTree = ""; }; 8A731410071DE76AAF5149412AEC57ED /* Drawable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Drawable.hpp; sourceTree = ""; }; 8AE46FAE84F979857B31ACDC50F71617 /* Sound.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sound.hpp; sourceTree = ""; }; + 8B0459DFF50984D53B24B81D3F3A07B4 /* ResourceBundle-Mupen64Plus-N64DeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Mupen64Plus-N64DeltaCore-Info.plist"; sourceTree = ""; }; 8B38944C4991CE901210237BE9D90369 /* GBADeltaCore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBADeltaCore.h; sourceTree = ""; }; 8B7A2F207266496310F9415852A1EBD7 /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; 8B888530E83F42860A13FCEBBC74F753 /* tlb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tlb.h; sourceTree = ""; }; @@ -3224,6 +3220,7 @@ 97B1BF27F91C777F9330B2027409CED1 /* NstApiVideo.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiVideo.hpp; sourceTree = ""; }; 97B9144AB8468E437ABB41803974D033 /* UIImage+Manipulation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Manipulation.m"; path = "Roxas/UIImage+Manipulation.m"; sourceTree = ""; }; 97F73835395FF3DB0096CD155B20FB9F /* NstBoardBandaiKaraokeStudio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiKaraokeStudio.hpp; sourceTree = ""; }; + 9816EFF6A2268AAEA7B1C19BBE416477 /* Mupen64Plus.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = Mupen64Plus.bundle; path = "N64DeltaCore-Mupen64Plus.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; 985EAE9972B33CF9F927C6F483A4B357 /* bsx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bsx.h; sourceTree = ""; }; 9870FEA24CF3B1C5A3F888CBE2149CD4 /* rhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rhash.h; sourceTree = ""; }; 98985DB2B0E10E3D6C992708741C684A /* UIApplication+AppExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIApplication+AppExtension.swift"; sourceTree = ""; }; @@ -3248,6 +3245,7 @@ 9B7E86F1B639A123C10CF5C402F415B2 /* NSError+LocalizedFailureDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSError+LocalizedFailureDescription.swift"; sourceTree = ""; }; 9BBE274343E5120686BB2D52C486B98F /* Delta.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delta.swift; path = DeltaCore/Delta.swift; sourceTree = ""; }; 9C0F1623BBDB08363E8394AFBD38B87E /* cheats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheats.h; sourceTree = ""; }; + 9C40CA78C414DCF7D85C8612550E53E8 /* N64DeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = N64DeltaCore.xcconfig; sourceTree = ""; }; 9CA80A61ABF26FA89F4E22A30284B0DD /* libPods-Delta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-Delta.a"; path = "libPods-Delta.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 9CC748D2AFF9AC9A78EA9982425EBACD /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; 9D324452F2442968D429ED7A0718561D /* RSTCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCollectionViewCell.h; path = Roxas/RSTCollectionViewCell.h; sourceTree = ""; }; @@ -3278,6 +3276,7 @@ A0430F33B2F349ADD6CDB6AF35310BC9 /* PaletteTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PaletteTexture.h; sourceTree = ""; }; A088B6DC0DF984AFEA200E3D0824458F /* pngstruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; A0A504E08A6B298395CDE7E0BC7FBA95 /* GTLRDriveQuery.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDriveQuery.m; path = Source/GeneratedServices/Drive/GTLRDriveQuery.m; sourceTree = ""; }; + A127D84C006CC72C3EC8E46506B45330 /* N64DeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "N64DeltaCore-dummy.m"; sourceTree = ""; }; A14075A6CB82B5B0A2CF0B5F3B60E096 /* lua-engine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lua-engine.h"; sourceTree = ""; }; A159872320887E8CBF6333094E374F4F /* SoundSDL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundSDL.h; sourceTree = ""; }; A186ECF08D2A70ABCC190016123FC2D7 /* ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-NESDeltaCore-NESDeltaCore-Info.plist"; sourceTree = ""; }; @@ -3801,6 +3800,7 @@ ED722AEBC29811FBDB707822E79E137C /* alist.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist.c; sourceTree = ""; }; ED915D94AD96A862B32BB7B60A454CF2 /* NstBoardKay.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKay.hpp; sourceTree = ""; }; ED9FC408E7E37A99A42E690455015732 /* debug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; + EDA6378EF173D34375CA83B3E4DB4057 /* N64DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-prefix.pch"; sourceTree = ""; }; EDCA85256EA26CE4DC88337487128581 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; }; EE1AC475F3EBD28D40D55EE72FC5AB07 /* UICollectionViewCell+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+CellContent.h"; path = "Roxas/UICollectionViewCell+CellContent.h"; sourceTree = ""; }; EE1BB2C196F721EAE216A16D2C28F108 /* NstBoardMmc1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc1.hpp; sourceTree = ""; }; @@ -3984,6 +3984,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 09080236163C120471BEB8FB06F89693 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0CFAF088DFC391480B4CC1584B7DAE3D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0D403F6F212C3D655B9A70C9D2551C79 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -4019,13 +4033,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 22F413AD72240277D7C1F3120BEB443B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 23BFD53FB74C2D9008C7D74FD0FF2D74 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -4033,13 +4040,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2652C9DCA5C838F589EFE0FAE3D29D52 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 373FAF5E443D6679532ACC75D39A2A05 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -4195,41 +4195,6 @@ path = libgambatte; sourceTree = ""; }; - 03FD5788ECA6B9A68F2212115FCFC591 /* Products */ = { - isa = PBXGroup; - children = ( - 54ECA01A22C32DC89AB39DF9BFFD5FB6 /* DeltaCore.bundle */, - 4A6CEB53419EF6042E06B56676D1DAF8 /* DSDeltaCore.bundle */, - 30131336E11D11700AC99D314BDC275C /* GBADeltaCore.bundle */, - 1F23DBC67505E77BE77552D6D84A3DAA /* GBCDeltaCore.bundle */, - 5D797E9A5C5782CE845840781FA1CC81 /* libAlamofire.a */, - F93477FBF1E4488E506F9BB79AF57D38 /* libDeltaCore.a */, - 8DF503EB5BF2CD824792BFD2BBC0992F /* libDSDeltaCore.a */, - 85A4BD81985AEDB6D9BA5E50804225D0 /* libGBADeltaCore.a */, - D4C010E8572FAE8B51DFDBF2300ECF30 /* libGBCDeltaCore.a */, - FD519882861480B93B563B477CE1FA29 /* libGoogleAPIClientForREST.a */, - 251C6319AD50CB50F18D50CBF727F8B2 /* libGoogleToolboxForMac.a */, - C1998E0D8085221AD87F89B614C10E52 /* libGTMSessionFetcher.a */, - DBC0113CF73BE24525E670D024A85BE7 /* libHarmony.a */, - 4C22C82316853ABB688358B93486CF8E /* libMelonDSDeltaCore.a */, - C8D6AC695498645EEE4A66FCEF97D848 /* libN64DeltaCore.a */, - 1E5356E04E92615CFF0666E5987CE594 /* libNESDeltaCore.a */, - 9CA80A61ABF26FA89F4E22A30284B0DD /* libPods-Delta.a */, - 4405793D5AF1EFD9D2BDA30AA0D2E514 /* libRoxas.a */, - B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */, - 53A730F4F4248E7E3F38F8409A2DE97C /* libSMCalloutView.a */, - FA400832D3E46B39D5EC83D09A7572FC /* libSNESDeltaCore.a */, - F5FA45A44C42CC2CA3A324A3E914CE19 /* libSQLite.swift.a */, - 1CBA76EDD27FA2D20B1EA0F0BF7F082C /* libSwiftyDropbox.a */, - 48A4A6EDC08C8AC933D0DCD507E9D173 /* libZIPFoundation.a */, - ECD0868BC2D1CFC2A22DDD56F79CF4B1 /* melonDS.bundle */, - 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */, - 487C7DB0A7257F16983BEF8324BEF561 /* NESDeltaCore.bundle */, - 7D751206A951D9727B38F71A2BB990AA /* SNESDeltaCore.bundle */, - ); - name = Products; - sourceTree = ""; - }; 04385EC426A3C43A5929D27B1678A4D1 /* Mupen64Plus */ = { isa = PBXGroup; children = ( @@ -5180,7 +5145,7 @@ E8DC4BF07D5A34F18CC5352183BAF19F /* Pod */, EEFD942E572DB2BDACD223532A635ED7 /* Resources */, CD7BB577140F671088CB14E3EA3B920F /* RSP */, - 50EE9B6B5490169EB9B67375D97F0486 /* Support Files */, + FB9E2E07EF632ED13397387DA7F353F9 /* Support Files */, 7CCE505326AA63497CACBA1133203D26 /* Video */, ); name = N64DeltaCore; @@ -5734,20 +5699,6 @@ path = "../../Pods/Target Support Files/DeltaCore"; sourceTree = ""; }; - 50EE9B6B5490169EB9B67375D97F0486 /* Support Files */ = { - isa = PBXGroup; - children = ( - 0D29D1C963E32AFCD9DF5F87C6BA90D9 /* N64DeltaCore.modulemap */, - 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */, - 52FF008EAD8518503CF4BE5EDABF7FD3 /* N64DeltaCore-dummy.m */, - 160A1FB76516D2D1FABCA5F0A6795568 /* N64DeltaCore-prefix.pch */, - 13D9D073E172499FE0BA408392C89173 /* N64DeltaCore-umbrella.h */, - 09A719B1C418B5A4A8184B6EC22CE504 /* ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist */, - ); - name = "Support Files"; - path = "../../Pods/Target Support Files/N64DeltaCore"; - sourceTree = ""; - }; 511C6B6CD7CABDDA64B217FB5587D474 /* SQLite.swift */ = { isa = PBXGroup; children = ( @@ -6260,6 +6211,41 @@ path = DeltaCore/UI; sourceTree = ""; }; + 755747E18A6F54E373510ADBD08E6723 /* Products */ = { + isa = PBXGroup; + children = ( + 54ECA01A22C32DC89AB39DF9BFFD5FB6 /* DeltaCore.bundle */, + 4A6CEB53419EF6042E06B56676D1DAF8 /* DSDeltaCore.bundle */, + 30131336E11D11700AC99D314BDC275C /* GBADeltaCore.bundle */, + 1F23DBC67505E77BE77552D6D84A3DAA /* GBCDeltaCore.bundle */, + 5D797E9A5C5782CE845840781FA1CC81 /* libAlamofire.a */, + F93477FBF1E4488E506F9BB79AF57D38 /* libDeltaCore.a */, + 8DF503EB5BF2CD824792BFD2BBC0992F /* libDSDeltaCore.a */, + 85A4BD81985AEDB6D9BA5E50804225D0 /* libGBADeltaCore.a */, + D4C010E8572FAE8B51DFDBF2300ECF30 /* libGBCDeltaCore.a */, + FD519882861480B93B563B477CE1FA29 /* libGoogleAPIClientForREST.a */, + 251C6319AD50CB50F18D50CBF727F8B2 /* libGoogleToolboxForMac.a */, + C1998E0D8085221AD87F89B614C10E52 /* libGTMSessionFetcher.a */, + DBC0113CF73BE24525E670D024A85BE7 /* libHarmony.a */, + 4C22C82316853ABB688358B93486CF8E /* libMelonDSDeltaCore.a */, + C8D6AC695498645EEE4A66FCEF97D848 /* libN64DeltaCore.a */, + 1E5356E04E92615CFF0666E5987CE594 /* libNESDeltaCore.a */, + 9CA80A61ABF26FA89F4E22A30284B0DD /* libPods-Delta.a */, + 4405793D5AF1EFD9D2BDA30AA0D2E514 /* libRoxas.a */, + B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */, + 53A730F4F4248E7E3F38F8409A2DE97C /* libSMCalloutView.a */, + FA400832D3E46B39D5EC83D09A7572FC /* libSNESDeltaCore.a */, + F5FA45A44C42CC2CA3A324A3E914CE19 /* libSQLite.swift.a */, + 1CBA76EDD27FA2D20B1EA0F0BF7F082C /* libSwiftyDropbox.a */, + 48A4A6EDC08C8AC933D0DCD507E9D173 /* libZIPFoundation.a */, + ECD0868BC2D1CFC2A22DDD56F79CF4B1 /* melonDS.bundle */, + 9816EFF6A2268AAEA7B1C19BBE416477 /* Mupen64Plus.bundle */, + 487C7DB0A7257F16983BEF8324BEF561 /* NESDeltaCore.bundle */, + 7D751206A951D9727B38F71A2BB990AA /* SNESDeltaCore.bundle */, + ); + name = Products; + sourceTree = ""; + }; 75D48382A035E39E6AEADD37EB9378EA /* Types */ = { isa = PBXGroup; children = ( @@ -7778,7 +7764,7 @@ 5D9C7D399393F70BB3F1B702FF0907D4 /* Development Pods */, D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, 10C5A63DFF5B6476CE409931492CA3D0 /* Pods */, - 03FD5788ECA6B9A68F2212115FCFC591 /* Products */, + 755747E18A6F54E373510ADBD08E6723 /* Products */, BDDCAA316B6C4E2A467D14C79E23372C /* Targets Support Files */, ); sourceTree = ""; @@ -8562,6 +8548,20 @@ path = GBCDeltaCore; sourceTree = ""; }; + FB9E2E07EF632ED13397387DA7F353F9 /* Support Files */ = { + isa = PBXGroup; + children = ( + 695503A0305730FDED4FD809DFA4A3C1 /* N64DeltaCore.modulemap */, + 9C40CA78C414DCF7D85C8612550E53E8 /* N64DeltaCore.xcconfig */, + A127D84C006CC72C3EC8E46506B45330 /* N64DeltaCore-dummy.m */, + EDA6378EF173D34375CA83B3E4DB4057 /* N64DeltaCore-prefix.pch */, + 8037C3684A58B1EC85B083D0624A7117 /* N64DeltaCore-umbrella.h */, + 8B0459DFF50984D53B24B81D3F3A07B4 /* ResourceBundle-Mupen64Plus-N64DeltaCore-Info.plist */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/N64DeltaCore"; + sourceTree = ""; + }; FBE3B4C3A36A4EB7113AD32FD439AAD5 /* paks */ = { isa = PBXGroup; children = ( @@ -8853,6 +8853,407 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 41A4347B4FD531EBA68D3DA73FEB0CAF /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A9804C368587DB95D78E9637852AA7CE /* 3DMath.h in Headers */, + BE8C54555C2620B25A50309D284227BF /* AboutDialog.h in Headers */, + 06C79C3AE46910C8B5587D50C1E2B7AB /* af_rtc.h in Headers */, + 6CC46121EC9565CF4428346AAE080BA2 /* ai_controller.h in Headers */, + AB2F696C2623C6301FA3D611B476B678 /* alist.h in Headers */, + 9DD55DD05FCA097771FC62EBABFEC46E /* android_hardware_buffer_compat.h in Headers */, + F14AF01CB61F64826FD3FD918991836A /* arithmetics.h in Headers */, + DB59BE2E058C5C49F315A9C57C6E2B16 /* arm_cpu_features.h in Headers */, + 0BD03ECE3582C9B7D5F6B0736FA9827E /* assem_arm.h in Headers */, + 5DD06D21128F42B70A68998A0DD6E549 /* assem_arm64.h in Headers */, + 51DEAECB55482F9EDCEA83C6A1068D6F /* assem_x64.h in Headers */, + B128E671FDB13E480E8281EB7C33D52D /* assem_x86.h in Headers */, + DC6205827B0C7D620DC22E1DE3BCF91F /* assemble.h in Headers */, + DC6205827B0C7D620DC22E1DE3BCF91F /* assemble.h in Headers */, + DD4D78B32B16026CDA793F04F559C4F1 /* assemble_struct.h in Headers */, + DD4D78B32B16026CDA793F04F559C4F1 /* assemble_struct.h in Headers */, + 36EC4FF8BB69E58C4636688ABCD5A263 /* audio.h in Headers */, + 6A026169417ABD0A23A1DC9340A243C9 /* audio_out_backend.h in Headers */, + 39D6D6F6957023CA7529B2837BAFCC6B /* autohint.h in Headers */, + 35996A787DBDEE0A8DEFB1D49A75944F /* biopak.h in Headers */, + 5B8015B7318B3B0B1F9EE8F7C50D32FD /* bldno.h in Headers */, + 595D442EE6024B2BC9706D1C80ACA0E8 /* bootrom_hle.h in Headers */, + 5C0E83E8F9A332A0387AD2B357F24AFA /* cached_interp.h in Headers */, + 9964B569DF0408FF79B47BF03F222154 /* callbacks.h in Headers */, + 9964B569DF0408FF79B47BF03F222154 /* callbacks.h in Headers */, + AE5B6DA3E94505CAA5687A5D9E6549EF /* cart.h in Headers */, + 1641F9ED3784984505B73A40EABF20CF /* cart_rom.h in Headers */, + 252C1358FFB378B360373F29EB870618 /* cexcept.h in Headers */, + 8BBB574D59E4C2F312AFCA3AF1449B81 /* cheat.h in Headers */, + 748B90B53FC59F6E0D46DD13857498F9 /* check.h in Headers */, + E10E1AA9B0876FD02B3E3061C7E0B57A /* cic.h in Headers */, + 02C658DADAB5B70ABCF4CFE93FDFFEAD /* ClipPolygon.h in Headers */, + 07C9540E58A6035F779B84EDA2DA2205 /* clock_backend.h in Headers */, + 003D66CF102522CCE1F947261EF6C225 /* clock_ctime_plus_delta.h in Headers */, + DD4B47D13EA0B2EE0DD75CD1234D1C71 /* ColorBufferReader.h in Headers */, + 022D019E6C9832E777458A8455F88B85 /* ColorBufferToRDRAM.h in Headers */, + 9A311750E9188339148E6A9C28640957 /* ColorBufferToRDRAMStub.h in Headers */, + 887E940A7535BE33895D4B8CE44AE215 /* Combiner.h in Headers */, + 0CF5A2778ED0B5C3DCBD3B8E89222E3D /* CombinerKey.h in Headers */, + 0C31BE17D771F1D2E7A7CAF0ECDE6E10 /* CombinerProgram.h in Headers */, + D673A845F326373E59748DF3B93C5172 /* common.h in Headers */, + 1B9C1EC85B450C90FA2A873635893FE8 /* Config.h in Headers */, + 69F42D441E70A657FF8BF5E94B3D92AD /* ConfigDialog.h in Headers */, + DD629500BD99B168EB7584A1A2B01C67 /* Context.h in Headers */, + EFBC931CE4E414BC640465C620C582F2 /* ContextImpl.h in Headers */, + 46621A84DC7D1AEAB3D4B2F076FFED5A /* controller_input_backend.h in Headers */, + 0C70B09E1F82E11FDD182E61DD98BFF2 /* convert.h in Headers */, + 6CCA5E08C0EE887CD4CF0DB92C7787C5 /* cp0.h in Headers */, + 01590745A24092830F564E1E91398F1B /* cp1.h in Headers */, + 99AE2D392CB8A5145EA7AFF6F21F3483 /* CRC.h in Headers */, + CCFE88A1721F242143DD8BE238B70173 /* crypt.h in Headers */, + EEBFD3F505227D78487CA20BB4B173BE /* dcheck.h in Headers */, + F37C13D42474C3BADCAFF47A5F41F812 /* dd_controller.h in Headers */, + 9429A4107A99B2476F308FE0FD2E02FE /* DebugDump.h in Headers */, + 1D46D2D75449D644B538A6227E8E17B1 /* debugger.h in Headers */, + E58DFAAF1B5040476D55ECAF0681AE68 /* Debugger.h in Headers */, + 1D46D2D75449D644B538A6227E8E17B1 /* debugger.h in Headers */, + 4F351D67B1A16C4D98EC44B4A91A8852 /* DepthBuffer.h in Headers */, + E9CCE8E9707ED47A7E769075CBC872E1 /* DepthBufferRender.h in Headers */, + 732E8D78332799826AB444440DECF472 /* DepthBufferToRDRAM.h in Headers */, + 595D35169DF7A7E588E3506A701E1E5F /* device.h in Headers */, + A760192B70AF78B0A0C7422949F1B853 /* DisplayLoadProgress.h in Headers */, + 9D39E7EA0FAD4C416AF187FB7295F339 /* DisplayWindow.h in Headers */, + 40E672D9C0C98CD61AA5C3F0FBF0F91F /* dummy_audio.h in Headers */, + 666B4C38305E6C7B3EE71BBAD107E59A /* dummy_input.h in Headers */, + 5DCE35D43645F115E45047AF1C1A94B7 /* dummy_rsp.h in Headers */, + 7455DE6718E881615E637EEDE40BF0EC /* dummy_video.h in Headers */, + 527F7C5BC043908F70A5F76CF4A67D32 /* dynamiclib.h in Headers */, + D262B1F57991F9E82A95110CD3F2CA53 /* eeprom.h in Headers */, + 0A39D292E69CB8B887A05D02FACC6F9C /* eventloop.h in Headers */, + 2BB3BA10CAF200D6F57AC5B7788326EE /* Ext_TxFilter.h in Headers */, + F74CF719E0F6180E4E173648469B6C63 /* F3D.h in Headers */, + C8D05EDF6925A01947DAB32564282D78 /* F3DAM.h in Headers */, + F406446D12685CEBCBEF3EAAE3043BD8 /* F3DBETA.h in Headers */, + 7600E2531605A2A26F7F3F1DB55B392C /* F3DDKR.h in Headers */, + A2B90FAA02E0F6CCA147D4922BEA83AC /* F3DEX.h in Headers */, + 8E7681E291ACFA6DD351EE632D186BD7 /* F3DEX2.h in Headers */, + 76B6F62D2ED822CC7A8F81EA66412F02 /* F3DEX2ACCLAIM.h in Headers */, + CEB4CEA74EBAAE30B91E25412FC5310D /* F3DEX2CBFD.h in Headers */, + F3A563FCA1E0F42C68F9241CD37D6AFD /* F3DFLX2.h in Headers */, + 5B19E1ABAC74B1777062C9A8CEB04376 /* F3DGOLDEN.h in Headers */, + E652DC0B868871BEFB7C2B9ABE95A303 /* F3DPD.h in Headers */, + 5109815A0F3215C9E58A3C986141C9DC /* F3DSETA.h in Headers */, + 547CBA7A70425F4F04C4541BA2F06296 /* F3DTEXA.h in Headers */, + 733CAD39BDD26699F4C7A5D0510FC951 /* F3DZEX2.h in Headers */, + FF0759DD9EB949FE677055277F11202C /* F5Indi_Naboo.h in Headers */, + 44F9BC8CEDD8AFA192EE9AD5A63BAEF8 /* F5Rogue.h in Headers */, + 569FF6B41CF726CC1143ABFC7C69289B /* fb.h in Headers */, + 62B7FBE67CF99461BEF5CE97C50FE424 /* file_storage.h in Headers */, + 686D0B1F993B01BB1D5BC33F543DDDC5 /* files.h in Headers */, + B47F724913D168FE78B1209FEDD4AE6F /* flashram.h in Headers */, + D17C9E1F856D9112E10FDA502E84EDA8 /* fpu.h in Headers */, + DC888FB95A2418412331F1F18D9AFEFB /* FrameBuffer.h in Headers */, + 7C287B127C9BA14B075C120EDA0AAC19 /* FrameBufferInfo.h in Headers */, + CC0EA78FA60E115C914C9F9FF86207D6 /* FrameBufferInfoAPI.h in Headers */, + 04451D76D26FCAEFCA0947C747AA0AEE /* FramebufferTextureFormats.h in Headers */, + 0AF6C8D2C774E31DFF8C2F329C55027E /* freetype.h in Headers */, + E6148113FE8DA95CAA89BC0344F2CCCA /* ft2build.h in Headers */, + C42DFD819758EC081341055314ACC55E /* ftadvanc.h in Headers */, + 34A2EA8A730D0B8FB6F5ABC0674DDADE /* ftautoh.h in Headers */, + F02E7E3A8386A951047E19069AB95354 /* ftbbox.h in Headers */, + BD13E45C0102AB99B304A2E15B6FA344 /* ftbdf.h in Headers */, + 7E20AB44073FB30023AA9153EFD685AB /* ftbitmap.h in Headers */, + 82460FA9F811A6A3A1EEDCC05942E397 /* ftbzip2.h in Headers */, + 5D1E6BE0A0E8D935882B998543A6F349 /* ftcache.h in Headers */, + 807E0082550BA264BABB572647074157 /* ftcalc.h in Headers */, + 59A3B9B600C967F014E52F7EAF8E5A7B /* ftcffdrv.h in Headers */, + E7D144D1339094055223E19D6C763EDD /* ftchapters.h in Headers */, + F3BB536B95A695A7D611B8AADDAC1F90 /* ftcid.h in Headers */, + 860523F1E62B9AC9951E5F4D80CE1614 /* ftconfig.h in Headers */, + EBF38391124E22A0D7ACD21F42B16DC0 /* ftdebug.h in Headers */, + 604E7D5387AE983CD3840B0C3DED6A8C /* ftdriver.h in Headers */, + E042B88177EC0C73F9EEB78D87B4867A /* fterrdef.h in Headers */, + C92F9000C0A370F7B961E659F246F6B6 /* fterrors.h in Headers */, + C08441EF9082D1908CDA86801CFF7967 /* ftgasp.h in Headers */, + 47C6F386A72302328A13032C0CED13AB /* ftgloadr.h in Headers */, + EBA9116EF4BDDFE6CD503CF66D4736D2 /* ftglyph.h in Headers */, + D9C49C20020EC384D9677F355A124006 /* ftgxval.h in Headers */, + F2343F2869AC758CCBFC62600C3A2E94 /* ftgzip.h in Headers */, + 0555BA242BE40B037BBB86A360F7D572 /* ftheader.h in Headers */, + E8DB7B8318240691B8B8D6A531BE337E /* ftimage.h in Headers */, + 44E2DD6BD4812BA86F693CC8552DD28F /* ftincrem.h in Headers */, + 71AA41AE32E777F4B006FB4081D4861F /* ftlcdfil.h in Headers */, + BC2E1B2F335D8037CEBE9FA5E4D985C0 /* ftlist.h in Headers */, + F98A8297B3F9AE509468A91CFA926DED /* ftlzw.h in Headers */, + 84BA5D33CA8962FD25DB1702243D13E8 /* ftmac.h in Headers */, + 47486F7F31F4FA955B61FB098EC26D06 /* ftmemory.h in Headers */, + 7F3CCE07D4231CA249893A8C0185C32B /* ftmm.h in Headers */, + BFCC142C409062A9139C308E9DA99FA6 /* ftmodapi.h in Headers */, + EC7A8BB508620BA20B97407B7A4E3DA5 /* ftmoderr.h in Headers */, + CA85EB6916A90E0948AD91B44AF2D1EE /* ftmodule.h in Headers */, + B2B8DE2F3D6D41C30F1883FA61776424 /* ftobjs.h in Headers */, + 6C3EDF35E292C976B60BC1E147F8DE93 /* ftoption.h in Headers */, + 5D4477D8A8EA4FFA5F4E8070AD083CB6 /* ftotval.h in Headers */, + FE4C20E7F64FF4F1770496AF1776A9D3 /* ftoutln.h in Headers */, + D1AE49FE2D9700809BF9ABA84F41BBD5 /* ftpfr.h in Headers */, + 41E9F83338345136034AEA044417C116 /* ftpic.h in Headers */, + 65082519D0CAD54D4495C068E0E1CC75 /* ftrender.h in Headers */, + 4B1CEF5466C2493264B1E168A8B5A3C4 /* ftrfork.h in Headers */, + 366262F212635879691A7CA07D4DA00A /* ftserv.h in Headers */, + 91B1A7D0868004B0C0B30333A7D548F3 /* ftsizes.h in Headers */, + FB4E28E4594BBA6CBDFD04FA27339139 /* ftsnames.h in Headers */, + EF2A06A0AE3C020BCD08214345B501AF /* ftstdlib.h in Headers */, + 609EC7DAD72D32A456A4585A411B0A7D /* ftstream.h in Headers */, + DE11559AB2EE46B9EF975182AADB9C28 /* ftstroke.h in Headers */, + 585F0F53176BBD0133B388426F1871F1 /* ftsynth.h in Headers */, + EF51344AE5A0B6EAE5D8291C20453754 /* ftsystem.h in Headers */, + 904640205CCAD51F70FC8181CDBE9A51 /* fttrace.h in Headers */, + A99B6B9EC2EFE2FC385B65A77F9EB0D3 /* fttrigon.h in Headers */, + 331922630D39F72EF28D8C51A385B8F6 /* ftttdrv.h in Headers */, + D8626C5FF1E601154B671D0D03932364 /* fttypes.h in Headers */, + 023363AF2CC96131696B58AD3ACA2A36 /* ftvalid.h in Headers */, + 6089ADD3A18C37299891649FF653A7C4 /* ftwinfnt.h in Headers */, + 52B5034639D515440864918FFC5EEF97 /* ftxf86.h in Headers */, + 12A4214E2C9B796CA238022735B51FF6 /* FullscreenResolutions.h in Headers */, + 5BA647B9A69EDCD1595E3FEB8E6578FD /* game_controller.h in Headers */, + 779506F02BC9F1B6D03763D7F639DC9E /* gb_cart.h in Headers */, + 878F017184AB29CD582B00F4088004F1 /* GBI.h in Headers */, + 57EE306DBB7BFA158EB2C32932C97AAB /* gDP.h in Headers */, + 7F98B4938B45BE01E8D3C51CBD0366B2 /* glcorearb.h in Headers */, + 42E0B2A0BDBDD8E3ECCFE991DD5E3C98 /* glext.h in Headers */, + B15418A2DCB1E1CDD4D5EC08C1A03A30 /* GLFunctions.h in Headers */, + 71899F8677CC515B1F31599325E0A396 /* GLideN64.h in Headers */, + EF2338ACDBCE2D71362634EA72885198 /* GLideN64_mupenplus.h in Headers */, + E5689255A851EDFA47C15C92E4345B87 /* GLideNUI.h in Headers */, + 1522B412F2369D9914CB39001A148BC8 /* glsl_CombinerInputs.h in Headers */, + B176188727DE2DD341E44FF00F4BAAC6 /* glsl_CombinerProgramBuilder.h in Headers */, + 8575331E06CB4DA99967DE5301E95E1E /* glsl_CombinerProgramImpl.h in Headers */, + A3175B24ADB6E391E46B1408B1767FA8 /* glsl_CombinerProgramUniformFactory.h in Headers */, + 105D3D6F32BB8EBCAADCB34AEBDED112 /* glsl_FXAA.h in Headers */, + 8878CBC3764D97E0901DE9EE6E120490 /* glsl_ShaderPart.h in Headers */, + E4DDDC9AA87E73A87D4CE9BA2C134C83 /* glsl_ShaderStorage.h in Headers */, + CC58DDF76C1D36A4C1F82D0E4ADED75F /* glsl_SpecialShadersFactory.h in Headers */, + AB0B945E8A9379453CBA9928E743A987 /* glsl_Utils.h in Headers */, + E1B97E70F063CDF2C659566AC9AD7801 /* glxext.h in Headers */, + DE03B44C09A95033D34E2F674628D155 /* gralloc.h in Headers */, + F33414938A92A2BDBBF6AEF202CC0166 /* GraphicBuffer.h in Headers */, + F257B3855C80FC939C018B2D48CD4E75 /* GraphicBufferWrapper.h in Headers */, + 4D7E5D55C153D68B40C4FC7602AC40BB /* GraphicsDrawer.h in Headers */, + 2822DA4B1D3B2A11208116D17F88E2D4 /* gSP.h in Headers */, + 79B87F9346B983172FE030D9C0584BAA /* hle.h in Headers */, + 8E328CC6091D61DBA1B8AE8DFFB04532 /* hle_external.h in Headers */, + E8DAD6DBD66EF2F9CA45E7A1C0ED2CD0 /* hle_internal.h in Headers */, + 8820B3307828FF31991E570E29E170B4 /* idec.h in Headers */, + 47B90AD34D2D03C6A1D6638FAD3DD2DA /* instr_counters.h in Headers */, + 9E193AD1B96748E2301B45BC5BCC4454 /* internal.h in Headers */, + B582572109476CDF6BD578A719D8B9A6 /* interpret.h in Headers */, + B582572109476CDF6BD578A719D8B9A6 /* interpret.h in Headers */, + AE46C27C2357729B0BD66E4CF440A004 /* interrupt.h in Headers */, + 5126155DEED6DE59D73E61CE415BDA1D /* ioapi.h in Headers */, + 7F0D6BBAB702962744546B41F32F0C6C /* joybus.h in Headers */, + EB25A4F332AD3C60DF3E1D6D8A74A12B /* Keys.h in Headers */, + 3F69BBD7AA6D5BF55C92CFB3672A8BAF /* L3D.h in Headers */, + 9F4F09ED3E838DCBD8615A7333F019C8 /* L3DEX.h in Headers */, + 663955D8E80713D3598FBD622BD6D364 /* L3DEX2.h in Headers */, + 8C206B96A9B112DB1D494824687C8649 /* libhardware.h in Headers */, + 7B3CF4D5A06371FDEC86F2F0F1C4CE56 /* lirc.h in Headers */, + D0A350DA4B14A8CDC1D8FEB787CE8DDC /* list.h in Headers */, + 4913EF3B810EAA77A6E244D7F5672EFF /* Log.h in Headers */, + E0991B721AEB76C3A627E4BF66008675 /* m64282fp.h in Headers */, + DC69B4AFF4D4A8717D638909D4AD454E /* m64p_common.h in Headers */, + DC69B4AFF4D4A8717D638909D4AD454E /* m64p_common.h in Headers */, + 21C32DAC350DB48E6E1F1BC1EF64B13F /* m64p_config.h in Headers */, + 21C32DAC350DB48E6E1F1BC1EF64B13F /* m64p_config.h in Headers */, + 2512B98F1D9B1CA71D8A6B802E86AAE3 /* m64p_debugger.h in Headers */, + 2512B98F1D9B1CA71D8A6B802E86AAE3 /* m64p_debugger.h in Headers */, + 2082D2B8075D150DF4AD47BA78A7A383 /* m64p_frontend.h in Headers */, + 2082D2B8075D150DF4AD47BA78A7A383 /* m64p_frontend.h in Headers */, + C5C7D15D0CE88D7F9A9F66878DBB4248 /* m64p_plugin.h in Headers */, + C5C7D15D0CE88D7F9A9F66878DBB4248 /* m64p_plugin.h in Headers */, + 88C75EB63FE471FF7DE78DDFF0D81A5C /* m64p_types.h in Headers */, + 88C75EB63FE471FF7DE78DDFF0D81A5C /* m64p_types.h in Headers */, + 539DA186960FDD99E9DEE3F703694141 /* m64p_vidext.h in Headers */, + 539DA186960FDD99E9DEE3F703694141 /* m64p_vidext.h in Headers */, + F0D0016C6303E1AA72FFC72B8AA430B1 /* main.h in Headers */, + 725659474D79DE81422134C09E0F1388 /* mbc3_rtc.h in Headers */, + CAC47B07CB7EB748B29FF500CFD868CF /* md5.h in Headers */, + 8D55DCA48F13DD5011F6A93725277F20 /* memory.h in Headers */, + A25FEBD1B5ABCB74C1674EEF9F784EB0 /* MemoryStatus.h in Headers */, + 13F65C4323724B6C1BF73933A188685E /* mempak.h in Headers */, + B2869FC2676716D20DA1CC8F2460891E /* mi_controller.h in Headers */, + FF7EF92A4AB21183D04B1959C2969012 /* N64.h in Headers */, + 5C1E536FA29DCD2CDE81FC2F6763DDBD /* n64_cic_nus_6105.h in Headers */, + 5C9EFB5CB4D71D93488DB09DF4A3FCAB /* N64DeltaCore-umbrella.h in Headers */, + 7AB733B4CBB1E984040DF7D988D3601C /* N64DeltaCore.h in Headers */, + 58E498558486634EC0D30463A80E740B /* N64EmulatorBridge.h in Headers */, + 9476BE008F3B258A647C6BFE2E327143 /* N64Types.h in Headers */, + CA01B933786390F57E6A2168E315C4AC /* new_dynarec.h in Headers */, + 13D16E5DE40CEFBC652A172492A4CE27 /* NoiseTexture.h in Headers */, + 251309C65ABDD8242D058BB96CE242D0 /* ObjectHandle.h in Headers */, + 3B0418DBDD07DC13468335213228CEA2 /* OGLFT.h in Headers */, + 9DE9E2CA0884ACD6E62262835B4DC4E1 /* oglft_c.h in Headers */, + 314674AA478474E495700E5CA708BB6F /* opengl_Attributes.h in Headers */, + 1AF7F4C36F9A40FA21DEFFBDDB324630 /* opengl_BufferedDrawer.h in Headers */, + F27A150577AFCBAD02400766373F8531 /* opengl_BufferManipulationObjectFactory.h in Headers */, + 4DE607700A8319C6A9DF878F20C5A3A4 /* opengl_CachedFunctions.h in Headers */, + FB4A3706CC5E4A32ED7318A2C201B99B /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */, + 134DD842654C8C2FCB275A0F6FFE1526 /* opengl_ColorBufferReaderWithEGLImage.h in Headers */, + 4417771FB0C9ACE3FA0583DA58B85DB4 /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */, + E2AFD1997E521E9F3411C241816607F7 /* opengl_ColorBufferReaderWithReadPixels.h in Headers */, + A67F3E53D04202680EF541B079B9D40A /* opengl_ContextImpl.h in Headers */, + F93AFA5631800C81D28898AD46D0B83A /* opengl_GLInfo.h in Headers */, + 3A6046B833F9FA6DCCD33FC3E30CCAAA /* opengl_GraphicsDrawer.h in Headers */, + 2515B71C2BB7B912246009EBC495E634 /* opengl_TextureManipulationObjectFactory.h in Headers */, + CC844647A07201642BE695D9892B103D /* opengl_UnbufferedDrawer.h in Headers */, + FCFB7628C2357AB914595C54A83E9372 /* opengl_Utils.h in Headers */, + 6EB1210C8C6387994CFEDC61EF67F9CB /* osal_dynamiclib.h in Headers */, + 286192A6107B4208426E492B84A18EF1 /* osal_files.h in Headers */, + C05DDFDC87119249A89982825737D242 /* osd.h in Headers */, + EB518A38793E8CE21E64480AE8011077 /* PaletteTexture.h in Headers */, + 720FCA30A4C182ED051E744734F1C428 /* Parameter.h in Headers */, + CBD2DBEF004FFD1ECB71215BF0732DEC /* Parameters.h in Headers */, + 7FD036F2F07DB42BCC6B98FA7CBD2E87 /* Performance.h in Headers */, + EB6236C291504171EBC2CF210FB95857 /* pi_controller.h in Headers */, + 86B7DA5117FE254BC0DDB8F75680BA2C /* pif.h in Headers */, + 2E0BAA7E2088EF73224C6693BDCCD485 /* PixelBuffer.h in Headers */, + 114E51C1D45FB0F540E2AC73423548A6 /* Platform.h in Headers */, + F7F6A01D7934B9EB482F435F0DC55B16 /* plugin.h in Headers */, + 92ABF0E0FC5006FD6BBAEB54B4C7F113 /* PluginAPI.h in Headers */, + 0B8F4F7E856D19C415D98385A3B30B56 /* plugins_compat.h in Headers */, + 4801291E14FFF8108E194C50DDA30831 /* png.h in Headers */, + 4801291E14FFF8108E194C50DDA30831 /* png.h in Headers */, + 13BCB029A86A07D6CFAAED34C679E4DB /* pngconf.h in Headers */, + 13BCB029A86A07D6CFAAED34C679E4DB /* pngconf.h in Headers */, + A24DAF3A4A4B530B47A5C2BBF63FB6D6 /* pngdebug.h in Headers */, + 8EBE0E93A3FF7FFCEC1305F5C0C94BA5 /* PngFile.h in Headers */, + 9AE8AC6CC7990539873D41D13C0E0866 /* pnginfo.h in Headers */, + E5FE23BFAE5594C754E691A930CDBA3F /* pnglibconf.h in Headers */, + DE9767158BF62EA7699B8789BDC3B789 /* pngpriv.h in Headers */, + CFAFD40E7046DCF2D88C105C118301B6 /* pngstest-errors.h in Headers */, + BC5201AFE5FB9FBB1A0D560CD9F93194 /* pngstruct.h in Headers */, + BC5201AFE5FB9FBB1A0D560CD9F93194 /* pngstruct.h in Headers */, + 256EB8F51C5DADB16960C5DA3F3B7739 /* pngusr.h in Headers */, + 256EB8F51C5DADB16960C5DA3F3B7739 /* pngusr.h in Headers */, + 256EB8F51C5DADB16960C5DA3F3B7739 /* pngusr.h in Headers */, + D3971497C1928729EBBD4FFF3B566896 /* PostProcessor.h in Headers */, + A684B686F2A6519976AC7438796DFFA9 /* preproc.h in Headers */, + 00F5F28E77C7BB433873D883D32DA464 /* profile.h in Headers */, + FBEC78AD8680AFF70333B8C35FC9B9E9 /* psaux.h in Headers */, + 7116D7C10DB23AB14A29E3E244C7D192 /* pshints.h in Headers */, + 853AF0F4F9B81FE498CE8D0A912E4528 /* pure_interp.h in Headers */, + C02A1354D86F3E5A4090F0FB08274DE9 /* r4300_core.h in Headers */, + 0CFF34DB03E3EA22AFCA4CE58940B8CC /* RDP.h in Headers */, + A971B4EC389969BAA77BA2AF104D8B47 /* rdp_core.h in Headers */, + 31E24CB31B609119C558C7927B909B73 /* rdram.h in Headers */, + 998AE8A31AF486EB7CAC15E56C0C6E65 /* RDRAMtoColorBuffer.h in Headers */, + 6F6937290D90CE905D719448A2AB750B /* readpng.h in Headers */, + 5B476B2AECD64CC755A6B90CB90B9530 /* readpng2.h in Headers */, + C64BD3A6EB67DB072D73D1C4878D2A36 /* recomp.h in Headers */, + 51609D055628917E36855CA6D559FCFD /* recomp_types.h in Headers */, + 7968A4349AD6A68E324F0699C459A344 /* regcache.h in Headers */, + 7968A4349AD6A68E324F0699C459A344 /* regcache.h in Headers */, + FE1FF7D0F5FA90A665A35F3CC8B9A109 /* resource.h in Headers */, + 3460068A5D0DD12FDA3671B80C40D25B /* Revision.h in Headers */, + 9A27BFE1566B60454DC890A6CB919C7A /* ri_controller.h in Headers */, + 2445749976DF816DDE91EEB4096EFF8E /* rom.h in Headers */, + 20738A51ED2E18EA336CB7990C6E2695 /* RSP.h in Headers */, + FAD04F8BFE956097606AAB6B00E030C9 /* rsp_core.h in Headers */, + 768B2C4AFA4085D689670C5E4A2DC664 /* rumble_backend.h in Headers */, + D4758FB588B5F4982C64E60466D14B78 /* rumblepak.h in Headers */, + C5A4AECAAF05E89502C860A98B33AAEF /* S2DEX.h in Headers */, + BEE55582625F950FD131B8E9EF98E540 /* S2DEX2.h in Headers */, + E9EA189769FFAB731CB3205F5CB47BBC /* savestates.h in Headers */, + B61D9640C9B6788C0E1EA9A091CF5EC4 /* screenshot.h in Headers */, + D30D6BB221DE29EEC564FB38B8917C38 /* SDL.h in Headers */, + FD61ABDF9C0774877D3E211B444E4319 /* sdl2_compat.h in Headers */, + 71F48A761E904B61058CFF99033FEA6F /* SDL_config.h in Headers */, + 6F40472239FBE69B12BF5DA71C6F64BF /* sdl_key_converter.h in Headers */, + F90D2D532045BC492EC7DAD939281E55 /* SDL_opengl.h in Headers */, + DA43100A6B64394824A74494A2E4C6E7 /* SDL_opengles2.h in Headers */, + DB1F6B12BDF14D5E6EBDC2ADDE1A7F17 /* SDL_thread.h in Headers */, + A4AFE77E2A1906AD9E375BFABABF6D3F /* Settings.h in Headers */, + 4B6BCD8A5B83B616B302345DE1706B1F /* sfnt.h in Headers */, + CC5E67A0FBB0E024BCD8D295572616E1 /* ShaderProgram.h in Headers */, + B86F11AFBBF731D60E75BE5A170FCCD8 /* si_controller.h in Headers */, + A3268347427E3944AC1F5FED80F60D39 /* SoftwareRender.h in Headers */, + AF8D229671101CA8A1509B89D0CB0FF2 /* sram.h in Headers */, + 0771B4342A39600197F77220990BCC1F /* sRGB.h in Headers */, + A57D054BC48E0C713AD2D2091DE3AA8D /* storage_backend.h in Headers */, + EA616C5D9ED13BF496C9E0C669401F23 /* svbdf.h in Headers */, + D9C27F24D9EA059650BABC21EF34440A /* svcid.h in Headers */, + EA26407D05E05A54188C8B4C9FD2A7BD /* svgldict.h in Headers */, + B1D54C35EB4095E41EFAFBAAB49C6FD0 /* svgxval.h in Headers */, + F05424247FEA20A37761755BB26A2D6E /* svkern.h in Headers */, + 0EA9A720C8B526235F11CD24A85DCB72 /* svmm.h in Headers */, + A0258F6EF879071A012E7C12BEE48C45 /* svotval.h in Headers */, + AB7C2F8C82FAD9590CB79214FA4C3514 /* svpfr.h in Headers */, + AA83341BC9AD775CDBF99CDCF727BBE8 /* svpostnm.h in Headers */, + 0DF5869D6226F5F40411590BD059BBC6 /* svprop.h in Headers */, + 55EDEBBE5DBDC26F854CD44F45A475B4 /* svpscmap.h in Headers */, + DEBA6649DC44B3C556EA8B8046792F34 /* svpsinfo.h in Headers */, + F0233B5DE0C680AA1D6FEA80AA73EB85 /* svsfnt.h in Headers */, + 14D279089EEC3A6EF27788C15EB5CDD6 /* svttcmap.h in Headers */, + 45C69142AED31E0A799F01018A2C9414 /* svtteng.h in Headers */, + 80B026B040C9F6194623AEDA389C417E /* svttglyf.h in Headers */, + 8BB653415293F1E3A1720E89DFC02A49 /* svwinfnt.h in Headers */, + 750A3EC4EB2B4BECA8FBD1FEF42CA4B4 /* svxf86nm.h in Headers */, + 9C51AB69CC57913351A31DE3A8EA384E /* t1tables.h in Headers */, + 8BEAACA6EF683BF1CBD5D38409B56D88 /* t1types.h in Headers */, + 9249CB6C4F05F15BC96CCA47486C79AE /* T3DUX.h in Headers */, + FBB36E54634D5A90215F267F62AC558C /* TexrectDrawer.h in Headers */, + D9612D116CFFCA6E15445F42FC82D1A0 /* TextDrawer.h in Headers */, + B973B21DA14F4A034B18611A4C30754B /* TextureFilterHandler.h in Headers */, + 90D2C20D11FB8A7D024EE6684B0245E0 /* TextureFilters.h in Headers */, + E94A17C6748D49F29FAE74AFCAEA9C04 /* TextureFilters_2xsai.h in Headers */, + 7AD81CF4EA345F14D64ABB308812984D /* TextureFilters_hq2x.h in Headers */, + F6F78EEB967196912D362AF067BAD829 /* TextureFilters_hq4x.h in Headers */, + 44FD2436016228AEB6E7E399C64CD7D6 /* TextureFilters_lq2x.h in Headers */, + 80FBE522082BF7FDCC4F133E5110CE10 /* TextureFilters_xbrz.h in Headers */, + 24D0E194517BC0D2C60610DAEE83AD1F /* Textures.h in Headers */, + 1174921EF757A0343B72D1D8489028E2 /* tlb.h in Headers */, + 0A689D0300DF61C54697C7A316AFF57C /* transferpak.h in Headers */, + AE0D7033540F0EDE845B0823AEA70E9B /* ttnameid.h in Headers */, + 0DE448C2801C7EEC1F271518FEE0F2CA /* tttables.h in Headers */, + D707B75B04BAE61898A4BC8026561F4A /* tttags.h in Headers */, + 7593F5DFD1D1C51D15BC5D4B95DDAA11 /* tttypes.h in Headers */, + CC5ED7A4B4274891BCA47D0A1049F072 /* ttunpat.h in Headers */, + 3E1934A6CC6D979EB860DA6C35B5E931 /* Turbo3D.h in Headers */, + 08F81E7ABB2B97675345FC04CA722FC8 /* TxCache.h in Headers */, + AD354461FC1FB59C9CA7F8ACBE0E6C26 /* TxDbg.h in Headers */, + E8224BE1CF4BCF9354707D8C603DC3AA /* TxFilter.h in Headers */, + B8086078DA198494B02348248F53B128 /* TxHiResCache.h in Headers */, + EBB43737078F603C3D37BAE5C000D01F /* TxImage.h in Headers */, + 4451F253919AC67A48CF16B0AAD79B09 /* TxInternal.h in Headers */, + 24E48E4797697DEC9ADAE097FFFB2B06 /* TxQuantize.h in Headers */, + CE8C2685076CD3712164E2B091B9559E /* TxReSample.h in Headers */, + F08BE54F91DAFF4A21D3CF9633125D9F /* TxTexCache.h in Headers */, + C7640111480187552170C57BF9619C14 /* TxUtil.h in Headers */, + 65F6CF9B8D1C8A1793457F1FCAFDB8C0 /* txWidestringWrapper.h in Headers */, + 1628DCBDC0391F546B31E0778C7884CA /* Types.h in Headers */, + F3FD28132C4E21361E2113320D6512FF /* ucodes.h in Headers */, + E51F53BC83CFB30E9D2EBCC835E51664 /* unzip.h in Headers */, + D73B4E6353020EB9B6844EB6937E0DD3 /* util.h in Headers */, + EBEA8D5288889DB1232B1F395846283C /* version.h in Headers */, + B911F3DE6189784BF450146FE29E62F4 /* VI.h in Headers */, + DC4062D2014323F03C964765A375E1BC /* vi_controller.h in Headers */, + B7C664FAC38D496EC5D9FC2CDDA080FE /* video_capture_backend.h in Headers */, + 78C5E2360BC824E2EBEB025EEBCB2DD1 /* vidext.h in Headers */, + CCB2EDE02326A68F8E8960270D5903D6 /* vidext_sdl2_compat.h in Headers */, + B45AEB6C64280161DD04BE8AE9A34820 /* wglext.h in Headers */, + 875AA280A37F31C2E6F4B7595995912B /* winlnxdefs.h in Headers */, + 1D2B1F39203622F4CF4398DF89FA1D19 /* workqueue.h in Headers */, + 2FA485B338CFEA42A781B8F21F09C050 /* writepng.h in Headers */, + D6F102986AA8EE08EC2208477688523A /* WriteToRDRAM.h in Headers */, + 71F165CEF54AAF42E33E0A441214C7CF /* wst.h in Headers */, + DEC9018C324CE6256C9EFA5A4A934B58 /* xxhash.h in Headers */, + DEC9018C324CE6256C9EFA5A4A934B58 /* xxhash.h in Headers */, + 7BAFA827F5D9B3096BB2A01F47BFC36C /* zconf.h in Headers */, + C7A7445F29728F2BEF1D80BC7C35DA4D /* ZilmarGFX_1_3.h in Headers */, + 38A88C1B5FBB3EE10BD8240A4F1DB3FD /* zip.h in Headers */, + 699EABA247256C61B68FFFF60452188F /* zlib.h in Headers */, + 4F6D72E65A184DC083161C6A3289D13F /* ZlutTexture.h in Headers */, + 0017F8090B9E1E809EDDE2BCE6950D86 /* ZSort.h in Headers */, + 07B373F2AB6C4A270819E0ECD7920EA5 /* ZSortBOSS.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4479B666E2E570B74D5DBED43917BB9E /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -9185,407 +9586,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 45596E3D2E556CF82FA41122C0AA9183 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 384996ED15655B92633B49BE2D2F508B /* 3DMath.h in Headers */, - 3DF05EBCA922A228ADAA6EF81BF2E18D /* AboutDialog.h in Headers */, - 991670A9BE0E2AD87F211F289998813D /* af_rtc.h in Headers */, - B9F145E126048938862BB1034A7EA013 /* ai_controller.h in Headers */, - 11999A3107D95813D7DE36E802941DF9 /* alist.h in Headers */, - 21D164D1A6501C153372290BE9A11509 /* android_hardware_buffer_compat.h in Headers */, - E7DAB97FF4BB02EB9E4D2D45AD1CA9E4 /* arithmetics.h in Headers */, - 93180A48A4201719F7F9CFDBB8B86D4F /* arm_cpu_features.h in Headers */, - 7C127E067D6F3B7F1C96AB3813393B8B /* assem_arm.h in Headers */, - 407B667E5FEB14F591611B01EFD52340 /* assem_arm64.h in Headers */, - 25EDEFE8AA7FFB5C69FED296344DAEFE /* assem_x64.h in Headers */, - D0025BF44968B8EBA153B16DF6A7783B /* assem_x86.h in Headers */, - 25DA4338D845BE0E74C55BE243C7ED93 /* assemble.h in Headers */, - 25DA4338D845BE0E74C55BE243C7ED93 /* assemble.h in Headers */, - B6D3A3FFEE078C60C5964AFC10A2BA8F /* assemble_struct.h in Headers */, - B6D3A3FFEE078C60C5964AFC10A2BA8F /* assemble_struct.h in Headers */, - 7324ED114581AE7281851FCD2DFE2220 /* audio.h in Headers */, - 36F12C2BEFEC26AF3FB64AE840F145B6 /* audio_out_backend.h in Headers */, - B589CDAD880DE2B506BB8EF95CA2CBD2 /* autohint.h in Headers */, - 55BA63757D1E64C1BD4D132210364BBA /* biopak.h in Headers */, - 5FBC206C59F0020EFCEC4718EE86DF8A /* bldno.h in Headers */, - C4AFBF63C66D464CB5BF0FEE936B0A14 /* bootrom_hle.h in Headers */, - 2951A6A8F093CE2733377394E60F8575 /* cached_interp.h in Headers */, - 35383CB99EAA9537E5158062A5DBC3DF /* callbacks.h in Headers */, - 35383CB99EAA9537E5158062A5DBC3DF /* callbacks.h in Headers */, - FECF1DF017DE2F169EBA719FD4D6AC21 /* cart.h in Headers */, - 053DB492720A3409C50E148E4AE4E0F1 /* cart_rom.h in Headers */, - EA3590DCCB30731B77907052E26D846C /* cexcept.h in Headers */, - 0930988FAA51B3BFEFDDE01D83611CFE /* cheat.h in Headers */, - CC99BBC4FFD7CDDC2649600E0FA37564 /* check.h in Headers */, - D853F1F532071DE2D4AED3E6608F2ED8 /* cic.h in Headers */, - 2230CED7C3633C3F5F473DF2EC5E50A7 /* ClipPolygon.h in Headers */, - 2D6BF11580E1CC47CF8280E5C4971155 /* clock_backend.h in Headers */, - F5A792629C2A69A6ACE4916D514C5A1D /* clock_ctime_plus_delta.h in Headers */, - 56D815C1383B97B622D2C8A50156BBC4 /* ColorBufferReader.h in Headers */, - 001067059F900FD4F276F98ABA47822C /* ColorBufferToRDRAM.h in Headers */, - 55C3D30D20E39AA463F637012FA6E15D /* ColorBufferToRDRAMStub.h in Headers */, - A670352ECAEE4E7A1DF6A8D8A9BD2220 /* Combiner.h in Headers */, - 161DC98CB6404CA6989C81EAB0E1C3EE /* CombinerKey.h in Headers */, - 2D5FA06414DA007392294E443A9FA75B /* CombinerProgram.h in Headers */, - D90EC0383E3C3CC3B40EFEA3EDD6169C /* common.h in Headers */, - D1FDBA676483451ED77786AFE5AF47EA /* Config.h in Headers */, - 0023451255D0B6A96551C6491BE4CB73 /* ConfigDialog.h in Headers */, - C5BDCB21A3BAADFBD6ECC0E1BF2B15F5 /* Context.h in Headers */, - A70E823723F2AE05B1BAFE430143EE81 /* ContextImpl.h in Headers */, - EDE37315A04F24B57508A4D6EE128BE6 /* controller_input_backend.h in Headers */, - 1D50F4D79058E4B1B5D465253CE3E893 /* convert.h in Headers */, - 7D9FFE5C38B92C9509830FA62BDCF8E8 /* cp0.h in Headers */, - DFBC1B62E183576C5A9FB35846F46CAB /* cp1.h in Headers */, - 313A7C9034C26D9940E7B65EFB88F57E /* CRC.h in Headers */, - A48911932ED356D95D7CB9A9A8000E40 /* crypt.h in Headers */, - 6B6B1242D265B7C549A4D6A341A1EEB0 /* dcheck.h in Headers */, - 32B8B962EEB709DEC0F2BAEB037A21B1 /* dd_controller.h in Headers */, - 3A2C36BE4037A177800397DEBC20D3CB /* DebugDump.h in Headers */, - 6CD1DD53A424B153F6267EE63AFE1CDC /* debugger.h in Headers */, - 5B444B54168E8EDD6542DE7127EEF823 /* Debugger.h in Headers */, - 6CD1DD53A424B153F6267EE63AFE1CDC /* debugger.h in Headers */, - D31C73EFFED048D38F9F383BD0098DA3 /* DepthBuffer.h in Headers */, - 5CE430BB46B6B4C1B3051011D523753D /* DepthBufferRender.h in Headers */, - C64C503EB6132EC922D43AB0B27FD21A /* DepthBufferToRDRAM.h in Headers */, - DC55F0600EEC5E8DDFB1E3A6E633E92C /* device.h in Headers */, - 3FFE1AC1F70ED63623326CD9EB4732E7 /* DisplayLoadProgress.h in Headers */, - B56D331A25A771CAD8AAA58BCCF4FEC5 /* DisplayWindow.h in Headers */, - 47594914E8EA112593EFC6661444193C /* dummy_audio.h in Headers */, - 052787144BE4266A8166E4B0DF4ACCA3 /* dummy_input.h in Headers */, - 08686CCC2A05E5818FECBD202DD69628 /* dummy_rsp.h in Headers */, - 09F83B8522313DF122E91C5E908CC256 /* dummy_video.h in Headers */, - 8876A72AAE903A9038ECE97EB584FF67 /* dynamiclib.h in Headers */, - D2F1CDE15B2375C94A421A1564AF13D4 /* eeprom.h in Headers */, - 9BDB8F38002847FBD5C1F1C023A5F8D3 /* eventloop.h in Headers */, - 7AED12329BC4A94E43D7FA7FFFA4A8A2 /* Ext_TxFilter.h in Headers */, - 81C902564DEED03987D81EB5EC4E2C21 /* F3D.h in Headers */, - A9B698FBFC78110FB1851447D93A2CD9 /* F3DAM.h in Headers */, - 80490FACDFDD5058FE342448A90F6124 /* F3DBETA.h in Headers */, - 38645348CC5C592425C533EC8030013D /* F3DDKR.h in Headers */, - E255C62B0C6D845C74DF1CFD04F0E7F6 /* F3DEX.h in Headers */, - 71A5939665A6E80DDE1C1A3AE2CEBA27 /* F3DEX2.h in Headers */, - 9CEE21D31B9461DB729129E357679163 /* F3DEX2ACCLAIM.h in Headers */, - 98D8951889A284316C8473C141B05BF5 /* F3DEX2CBFD.h in Headers */, - 2B533915FBFC58A9851E3F92E296A5C4 /* F3DFLX2.h in Headers */, - 165DA1CB4491C51A5BC65A8F519D53DD /* F3DGOLDEN.h in Headers */, - 33F513674BEFADB6CB760D6A81C2AA7B /* F3DPD.h in Headers */, - D8CCD6B044F74A8D1C4DC7569527A1C8 /* F3DSETA.h in Headers */, - 4BB66E23280EEDDAB33FD3849235715C /* F3DTEXA.h in Headers */, - 5BDF97784CBEA46C26B454F806233B2C /* F3DZEX2.h in Headers */, - 760970F7137AE6D811FF1CDB6CC2D871 /* F5Indi_Naboo.h in Headers */, - A6DF3C1F361F1F1CE700FA15AE09FE32 /* F5Rogue.h in Headers */, - C2CE2BF3BF9FE6464EFA9299139418C1 /* fb.h in Headers */, - 5AFA9AD616A22E16547326EF1CDA4C83 /* file_storage.h in Headers */, - A10612911C9EA6DD14FB853233F82007 /* files.h in Headers */, - 80857C1D971EB5C3A2DEB08EBB6A26A9 /* flashram.h in Headers */, - 145D41EBB9C9985DBB3C476165DC7974 /* fpu.h in Headers */, - 0FCDAB60E00061A616936D080A17A72D /* FrameBuffer.h in Headers */, - F3EB20A92D49B9ED4E75EC8DBCD5AE92 /* FrameBufferInfo.h in Headers */, - C564BC767458B4CC26E9A5D4DA650B4A /* FrameBufferInfoAPI.h in Headers */, - 3F4312485CA4E0E988DC0DEEBB2EA306 /* FramebufferTextureFormats.h in Headers */, - 093A5EF57A260B6E4066AA6FEFA72B0B /* freetype.h in Headers */, - EBF46D8060558FA58B2E5CAE42467A6E /* ft2build.h in Headers */, - 7C3B24BE5F539E4C169AD6B54E548B18 /* ftadvanc.h in Headers */, - 9CEA93893B050B53483834892692E40B /* ftautoh.h in Headers */, - 967B79C9BBE288D04AE77C7D95A294F1 /* ftbbox.h in Headers */, - 007BBAFEFCEE96B7DDF8EFA8934DEC0C /* ftbdf.h in Headers */, - 5B025E037D2C37021CA068050A2CA3B8 /* ftbitmap.h in Headers */, - 196B46FD2B40CE0CF8D6F681C1A9307B /* ftbzip2.h in Headers */, - 8C24EE5BC4C18A93BCC1C9AE6FAC8F7F /* ftcache.h in Headers */, - 4F8113B8B99AD98CDD9E3B137185F836 /* ftcalc.h in Headers */, - 66AE47CDE09E8A95A29BB75F046C2B03 /* ftcffdrv.h in Headers */, - 30A0140597B79FDE8AE504A40DDE901F /* ftchapters.h in Headers */, - B3E4E3424C67ED018CA0EF4B73795A17 /* ftcid.h in Headers */, - 53D1203F37189E1B0B8854659A9345AE /* ftconfig.h in Headers */, - AE769713E049B84B57453032779D836E /* ftdebug.h in Headers */, - F461C36F53ED47D40DC15FB88FB3ADB5 /* ftdriver.h in Headers */, - 7064D5DF4976B7F5D00D0B07734180B0 /* fterrdef.h in Headers */, - 39F6310C0E2893433591C1FB861126CB /* fterrors.h in Headers */, - 242DC7B7B8092DC35B88FD61DEE5EE36 /* ftgasp.h in Headers */, - 2AFC27492C6A1CBD4483B8FF6F94B1DF /* ftgloadr.h in Headers */, - 940ECFA7ED45FC491E7E3BA8526B7C2B /* ftglyph.h in Headers */, - 61A36B8525B5D1CA38CFC4C2564DA2C3 /* ftgxval.h in Headers */, - C394492C7C415D251CED3A19FC797560 /* ftgzip.h in Headers */, - 21E502D6891B860C977E695E0DC485BD /* ftheader.h in Headers */, - E045AEFAFAB999408460996561247AFF /* ftimage.h in Headers */, - D3E635DF7C5A3F831C0ED826B7EF3045 /* ftincrem.h in Headers */, - 453C841E0DDCE5508E5FD4DE0737E6ED /* ftlcdfil.h in Headers */, - 9EF9EFE4000A70AE76A75376E6E95870 /* ftlist.h in Headers */, - 7E22B821DD9D7D2D539E9F0C66C15013 /* ftlzw.h in Headers */, - 5C28996B1131EFFAB4E75493D9F16B65 /* ftmac.h in Headers */, - EF255A27386D9491CC62288BD9B6CCFB /* ftmemory.h in Headers */, - 8AAC1B35CF4637F59F66E00C58F04177 /* ftmm.h in Headers */, - 8306FBE58766AD3DB7FC24A48C822C5E /* ftmodapi.h in Headers */, - 0F6AD4EB188F8A35D985C14ED56521F5 /* ftmoderr.h in Headers */, - 55C4AA463699B788B9F18C0103D41C85 /* ftmodule.h in Headers */, - 469306CB7368CE64157615FF08A064DC /* ftobjs.h in Headers */, - 42B300BEBAFE6EE9B77570DA9F09BE1C /* ftoption.h in Headers */, - 18FF637458B07675EF16BAECCF6AFDD7 /* ftotval.h in Headers */, - 33D52FD746A6F4535B78B95B1949D628 /* ftoutln.h in Headers */, - C6B8C839FA0BF0A1AE168CC27EC12FB7 /* ftpfr.h in Headers */, - 338A23437E12CC5C72BBB54B8189E707 /* ftpic.h in Headers */, - E7637A711A78C8610C039170BE3A235E /* ftrender.h in Headers */, - 296C11D713DA694BC95126E931781FAA /* ftrfork.h in Headers */, - 3B46BB318BD31DA44FF7F2A0625EDD1B /* ftserv.h in Headers */, - EE15E85924677183CEF51B41FA195E3B /* ftsizes.h in Headers */, - 11536204ECDF7D9DB75EC2A0D9FE46A5 /* ftsnames.h in Headers */, - CDF6E0B6206AF9A35A78A3C6D7E50BCE /* ftstdlib.h in Headers */, - DD439A1182CBF12FE98F8D4FB2B1F65D /* ftstream.h in Headers */, - 10558603C3F6732FEF6B1882CC605395 /* ftstroke.h in Headers */, - 842560FEB95F73A3E10F716061E361A6 /* ftsynth.h in Headers */, - 12FD0A784B96093568057FFB24752931 /* ftsystem.h in Headers */, - 5C1E3DA8CF07041B9499F603C66261DE /* fttrace.h in Headers */, - A5726C481C20F8D8E40DCC9AF9D0CF34 /* fttrigon.h in Headers */, - 005390FF8907FBAF4496EC51AA641D1F /* ftttdrv.h in Headers */, - 6535B1B6AC3FBC20B9D1C2B6255A3708 /* fttypes.h in Headers */, - 70F8274ED7EAC15159077EA63E371A20 /* ftvalid.h in Headers */, - F9FF13C1512AE6877E9661CF438EC88F /* ftwinfnt.h in Headers */, - 5ED3D70CB705D6F29363340A8E1B314E /* ftxf86.h in Headers */, - BFCB75257F3782795D068C01593C193C /* FullscreenResolutions.h in Headers */, - 7AA70F0483FB790115C42CE9CF815B99 /* game_controller.h in Headers */, - 02088785CF10C92191BD4C2A65A4A4EE /* gb_cart.h in Headers */, - 9AC1C1C11717294A0BC92C368F6A3C43 /* GBI.h in Headers */, - 40C0A2EC77F246C6770B772E8130A8C5 /* gDP.h in Headers */, - 840C6DD7629F231D0F45DD20C031A6FC /* glcorearb.h in Headers */, - 9ADC5E80C66896CD28992B319DBAAFDA /* glext.h in Headers */, - 211F41E155C9801313A5A9B60E42B528 /* GLFunctions.h in Headers */, - 22612E795DA2B4185DAEAB3DD73A2267 /* GLideN64.h in Headers */, - AF75C6505DD091382DDF3792EB91B958 /* GLideN64_mupenplus.h in Headers */, - 57934F805FBD53511D97E2A813CCA304 /* GLideNUI.h in Headers */, - 09317AE820EE6AC27E5564E6830A6B2B /* glsl_CombinerInputs.h in Headers */, - 3D8B6797F5BE3B29DE5D0560B6E485C5 /* glsl_CombinerProgramBuilder.h in Headers */, - C09ACD857947A188924A57EB95E3A3EC /* glsl_CombinerProgramImpl.h in Headers */, - 1F1CCD14892B307D3C349F9C4117740C /* glsl_CombinerProgramUniformFactory.h in Headers */, - B8C2E560CCEB5C574511691807B9D8EA /* glsl_FXAA.h in Headers */, - 45AD333FE1F9589DE61E55A1F9F12CF6 /* glsl_ShaderPart.h in Headers */, - D453E0EF8D2BCC7A9FADF4856AB23D42 /* glsl_ShaderStorage.h in Headers */, - C7D9222C5D58945DF45292909C3A16B0 /* glsl_SpecialShadersFactory.h in Headers */, - FBDC8F8F17CA21DD799A231ED4C63221 /* glsl_Utils.h in Headers */, - FC901AE65E0FBF69936AE0909DE7C2FB /* glxext.h in Headers */, - 362D9AD5872E377FFDA39BFED5E02BA3 /* gralloc.h in Headers */, - 9B00930BE1823F676F5035796C25C2E0 /* GraphicBuffer.h in Headers */, - 55BACBFD0A8A8EBD6EC8AA2002E6046D /* GraphicBufferWrapper.h in Headers */, - 784A5769DDE6CB551D21EE19FDBE91B9 /* GraphicsDrawer.h in Headers */, - BFF00FA2CA9BCB91036CC7F37B8878C8 /* gSP.h in Headers */, - 25F9D19D9F8A5BA67FF2B729D05E1F2E /* hle.h in Headers */, - D2A71E3AD54E049A5C1DDBF12C93A2AD /* hle_external.h in Headers */, - 6EDBE3E2C2021F2A4DC6A5D4258AAB9A /* hle_internal.h in Headers */, - 75909BCE4368ECAC28AACD2C2CBB5682 /* idec.h in Headers */, - 6419BCC57C3D947320987D210C349675 /* instr_counters.h in Headers */, - 670B1515AB23AB6EF7AA6DE75DCD4BFA /* internal.h in Headers */, - 39A8A5F1AC09F24DF124FA568B4BA9DE /* interpret.h in Headers */, - 39A8A5F1AC09F24DF124FA568B4BA9DE /* interpret.h in Headers */, - BB62119EA148C79F62F0ACBD9EB0C565 /* interrupt.h in Headers */, - 14A6A31A437EF94D756BC7E48CA08C0A /* ioapi.h in Headers */, - 4404B6CEB79B295BDC094339D07BAAAF /* joybus.h in Headers */, - 2C5240B6436593A65C2120F7BABBE34B /* Keys.h in Headers */, - 65AB36D595CB07090A2AB42CFA4C4F96 /* L3D.h in Headers */, - 7D13C492B14BA0EB2DC0783DB4150ED4 /* L3DEX.h in Headers */, - 07B07C5C1845808BAC8BA53FA149C192 /* L3DEX2.h in Headers */, - 6BC128BCDCE5AC608EA415377CCC78B8 /* libhardware.h in Headers */, - AB123914A6198728826EAF5A6AB03906 /* lirc.h in Headers */, - F5A1CC355CA69B7DB624218176781D44 /* list.h in Headers */, - 9A1BE2EF2BF2B41278CFF95856596E4C /* Log.h in Headers */, - 7868B35569F0B0197EF1FFD2D25B1BA6 /* m64282fp.h in Headers */, - 61978EBDA8F0BEDE69E4CE4034FC960C /* m64p_common.h in Headers */, - 61978EBDA8F0BEDE69E4CE4034FC960C /* m64p_common.h in Headers */, - D409C376103600BCF90AEA2463CCEF6D /* m64p_config.h in Headers */, - D409C376103600BCF90AEA2463CCEF6D /* m64p_config.h in Headers */, - 4793DB607E09DF311154B2909787E3C4 /* m64p_debugger.h in Headers */, - 4793DB607E09DF311154B2909787E3C4 /* m64p_debugger.h in Headers */, - 96F4B4E72231C96CA0010A82E8459431 /* m64p_frontend.h in Headers */, - 96F4B4E72231C96CA0010A82E8459431 /* m64p_frontend.h in Headers */, - A432DBBFA6CF4F59033CEE3B63EFE557 /* m64p_plugin.h in Headers */, - A432DBBFA6CF4F59033CEE3B63EFE557 /* m64p_plugin.h in Headers */, - 93E4A8D744F5FA2F32485D5992491BA5 /* m64p_types.h in Headers */, - 93E4A8D744F5FA2F32485D5992491BA5 /* m64p_types.h in Headers */, - 853B3CB7F2FCF1BEC65857D83C521D64 /* m64p_vidext.h in Headers */, - 853B3CB7F2FCF1BEC65857D83C521D64 /* m64p_vidext.h in Headers */, - 10963C0B1643A34DF49E5FF651AEF1D8 /* main.h in Headers */, - 83569BB6A8281FBF8632670B28C33C98 /* mbc3_rtc.h in Headers */, - B951E2150D8C56060DDD22AACC1F0A12 /* md5.h in Headers */, - 7F6EF2CA1770F1DE0026ECAA0E521101 /* memory.h in Headers */, - 79213C390062FF156D05A120E12D7F28 /* MemoryStatus.h in Headers */, - E96D00DC7B3AE3762117697EF950BF00 /* mempak.h in Headers */, - 98D31D2DCD90B13AF37086E4750BA838 /* mi_controller.h in Headers */, - E4D06B0BA213CA79BD97BB9B611A2EB5 /* N64.h in Headers */, - 0C85C17E4ABD29F912F85A3579F2C13F /* n64_cic_nus_6105.h in Headers */, - DA9EC56A8CABDE13F39C9D32BC8F37F5 /* N64DeltaCore-umbrella.h in Headers */, - FA7E71D6ABC8350D6902714609D30179 /* N64DeltaCore.h in Headers */, - 89FF6BA500EA4247A328E6A82D4B4065 /* N64EmulatorBridge.h in Headers */, - 8D16050EF95747AAFACD9E5B43C71181 /* N64Types.h in Headers */, - E473810AFA4985FDC030B75DAB7E86A9 /* new_dynarec.h in Headers */, - CE77541D89641C7165E9A0A56ACC5B13 /* NoiseTexture.h in Headers */, - 088166778CBF92A59C6AEA8158CB7B56 /* ObjectHandle.h in Headers */, - D1D87A24D37112C4AE2EB188C51C053F /* OGLFT.h in Headers */, - CAB565C736064CE66F49FC2F9939F653 /* oglft_c.h in Headers */, - 86F7500498987E83E102E0A54716CFDE /* opengl_Attributes.h in Headers */, - 6348E28B60143E90AC1BE0E53C58DC48 /* opengl_BufferedDrawer.h in Headers */, - 2E4CB07EBF0D9A446F74DC8A81CA4EDE /* opengl_BufferManipulationObjectFactory.h in Headers */, - 405BFB74E64E523A84040C173A88A574 /* opengl_CachedFunctions.h in Headers */, - FA05D0CC05B23D7027D8C3FEE24C690D /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */, - 34B57DA227F4B2C65BB287D38D80ED9D /* opengl_ColorBufferReaderWithEGLImage.h in Headers */, - B70168F7C469666BF680C64C641ED1AA /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */, - A4FFC4C6F5F2FBF2A4714D4E98634935 /* opengl_ColorBufferReaderWithReadPixels.h in Headers */, - 6E775AD30672E29EEE6CC70D23A833C9 /* opengl_ContextImpl.h in Headers */, - 78E24F2CE9FB7845AE6DEEC34E9D9366 /* opengl_GLInfo.h in Headers */, - 85168B84D1BC8AC3215522F298FB08B9 /* opengl_GraphicsDrawer.h in Headers */, - 3C75D97752958BB6E1068A79BBB78763 /* opengl_TextureManipulationObjectFactory.h in Headers */, - 30C7890A54FA46DF6071A8DF2496A9E0 /* opengl_UnbufferedDrawer.h in Headers */, - 0B12EDB39B8EDFD03B311F9733108E6D /* opengl_Utils.h in Headers */, - 6AE6261249D9E4BD068CD7091A136070 /* osal_dynamiclib.h in Headers */, - A45581F3A08C2C1C52E7988FF7BDE252 /* osal_files.h in Headers */, - FDFEFE7BFC83D62ECBF5728AA1F5CD7F /* osd.h in Headers */, - C5A1264CC2E10DC15FD86C842D770914 /* PaletteTexture.h in Headers */, - 6D611D7DCB3F3FB551F06D363B0F6BC9 /* Parameter.h in Headers */, - 7F184462B0587A9FA3F4976A6E306DBD /* Parameters.h in Headers */, - 813791FFAE99F2EA31D525DCF0B0DACC /* Performance.h in Headers */, - 57D216129FDA337F9E3D3C3FA2B064AA /* pi_controller.h in Headers */, - 82BA8911072FAC8A89CE76596ECECAED /* pif.h in Headers */, - 59337EDB4628FDAC6C07792E35AE0FFE /* PixelBuffer.h in Headers */, - 70E25FC6BCB677FCACF3974715396E5D /* Platform.h in Headers */, - FD8858F32C89A15506CDE5FEEED204A6 /* plugin.h in Headers */, - 5949B7253E6E1DB1793B5F8D17F6F095 /* PluginAPI.h in Headers */, - 444053C71CF9C418328ABDA8B2528AFC /* plugins_compat.h in Headers */, - 93049C2EA7F1F12ECE2A989EC457904D /* png.h in Headers */, - 93049C2EA7F1F12ECE2A989EC457904D /* png.h in Headers */, - DF99C4FED01516A806E69CEFC02A63B3 /* pngconf.h in Headers */, - DF99C4FED01516A806E69CEFC02A63B3 /* pngconf.h in Headers */, - 4CEADE56BB2EF761D27E112FE7616D6E /* pngdebug.h in Headers */, - 3C1277C9879849275BD4412E63547A9A /* PngFile.h in Headers */, - D9EEECDA4CC74FEDE82B29E37FF2C225 /* pnginfo.h in Headers */, - 4714EA370675DABB8EB39DFCC754B958 /* pnglibconf.h in Headers */, - F88F53D89C8D0B6EB6512F6FAE96128A /* pngpriv.h in Headers */, - 2AE4D610E02551D8EC4D51E4FED51ACD /* pngstest-errors.h in Headers */, - 61A0F8234682825C2206D9B58BE241DD /* pngstruct.h in Headers */, - 61A0F8234682825C2206D9B58BE241DD /* pngstruct.h in Headers */, - C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */, - C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */, - C615653FDEFC837CE0FB81CC3A4A01B5 /* pngusr.h in Headers */, - 6B16C85148A68CC975DA7929304DF1B7 /* PostProcessor.h in Headers */, - EA7C86A456431D6BFDA337EBDA60E97E /* preproc.h in Headers */, - C6E4FBCFEF73B36D1A8501B5939B6484 /* profile.h in Headers */, - 695099FE2655BBE346F93075ABE6CF75 /* psaux.h in Headers */, - 997BE94A31FB10C25F97750D5D0C73E1 /* pshints.h in Headers */, - 01B175F9FA772FCB44596F79F8D00880 /* pure_interp.h in Headers */, - B435171F5FA2EBAC3C23A866769BE557 /* r4300_core.h in Headers */, - EFDB58D53DCA43CA1A9A175952CC0AFB /* RDP.h in Headers */, - BA5700A31EB47A427F8C75099C99FD06 /* rdp_core.h in Headers */, - 27EA6C0692558952AA8164A66E618824 /* rdram.h in Headers */, - 51918AE90F48400669540D82E6FE3864 /* RDRAMtoColorBuffer.h in Headers */, - 7C6C12C8C35F1D6A2B00AF837C71404C /* readpng.h in Headers */, - 1BD64B8159B5CAE972498CA344F46490 /* readpng2.h in Headers */, - 42CE6348D210BC1705B97E3E33A03756 /* recomp.h in Headers */, - AA5B1AEF7BFFC092A1A177F7B83F5EF5 /* recomp_types.h in Headers */, - 9B434AD18DC064B8C04942252F58E534 /* regcache.h in Headers */, - 9B434AD18DC064B8C04942252F58E534 /* regcache.h in Headers */, - 6A86407036458ED2BBE900F4A74A49A4 /* resource.h in Headers */, - C4552D4F06F08287FB112E8B10CFC47C /* Revision.h in Headers */, - 233D66440766BCC248853A39EDDFB1C5 /* ri_controller.h in Headers */, - 0D0DD77BB2692454B0600C393C56B3A8 /* rom.h in Headers */, - 44CF59CDE936F5CFD762DA0BCB0E94F0 /* RSP.h in Headers */, - 2EF4938D66CE6DBAB9CA5E87DC5DA1D9 /* rsp_core.h in Headers */, - 80569522185880531BB8F1FD08C52940 /* rumble_backend.h in Headers */, - 2518C27E9C6CDC038A72544E1448E6A8 /* rumblepak.h in Headers */, - 9EBD2981D2C95F47A2CC47ABE9DF341E /* S2DEX.h in Headers */, - 95023508CFDE2C9943D4E510526A14A3 /* S2DEX2.h in Headers */, - 33005D6A6E94208A97F963B03EB5768F /* savestates.h in Headers */, - 459005C8FDA84ADF202550615D20DE98 /* screenshot.h in Headers */, - 87B6A15FF7D44269D8790FCF8C5CF865 /* SDL.h in Headers */, - 5CEA0B264A2AC9222A69B62A1F0C7AF5 /* sdl2_compat.h in Headers */, - F22E08070AFC46B32347B32B2504F0AE /* SDL_config.h in Headers */, - FDF30A650ADF0FF5E6748D29AA81A2BE /* sdl_key_converter.h in Headers */, - 9ACECB5B9423B032EFEF6184E7E6112E /* SDL_opengl.h in Headers */, - B5E129441B9A582B280D6CB490CC9B18 /* SDL_opengles2.h in Headers */, - 8FBE42C6E7A4A5028537D4734CCCEB5E /* SDL_thread.h in Headers */, - 4DDC8A1EF3EA4BE02FF0B695D582EF17 /* Settings.h in Headers */, - 59C9DFBC77F345B4C89ECEDC869567AE /* sfnt.h in Headers */, - E47A977F4840A1287E1A8645E6E560B7 /* ShaderProgram.h in Headers */, - B43FA418644B4522331BB3C00F854B24 /* si_controller.h in Headers */, - B23FB033A07C66C2629201D7878FA1FF /* SoftwareRender.h in Headers */, - 2E682F38F1F25EFF84F90ABADA51DB89 /* sram.h in Headers */, - 968CD734D31C79FB896F2B5840E81816 /* sRGB.h in Headers */, - 243487548FDE3E663997187437CAA558 /* storage_backend.h in Headers */, - D9D4A8CFD5AEC9CB6CD5E416F08C8B65 /* svbdf.h in Headers */, - 9EE2A24548BFD782A76FA331067BA3FC /* svcid.h in Headers */, - DC6D980DA6070C8E0E652312C90A57D0 /* svgldict.h in Headers */, - 0DD2B79568FD5D7753E4220B0A700C96 /* svgxval.h in Headers */, - 2B4595B164B23A199766D1E6F5F27072 /* svkern.h in Headers */, - 8680F8EF0BBCDBEEE5A53366BB0E471A /* svmm.h in Headers */, - 9247277F4A5BF7A33FD393DED9BF677E /* svotval.h in Headers */, - 6572D4AD2CDA7C344092B902AE5E375D /* svpfr.h in Headers */, - 3EC2C605E7291B1BEC99AD3F06D54379 /* svpostnm.h in Headers */, - 31C3355B5C3F3DBA2AE027298397ABFC /* svprop.h in Headers */, - 7CC39EEEBA01397C44CD70FF1D855E9B /* svpscmap.h in Headers */, - 319D7327C17D7254FF4FBC0F1522DD04 /* svpsinfo.h in Headers */, - 65CBBDBDF701FB51569473462CF38DF8 /* svsfnt.h in Headers */, - D409FD1F1DD00E6994F0308A8E0C0D3D /* svttcmap.h in Headers */, - 9B3E47CAB17EEAEEA7252FDAD1228FED /* svtteng.h in Headers */, - 9543AAF856988A714C41706FF2A5AEAC /* svttglyf.h in Headers */, - AEBBDC54DB66E473CA4D2CA762AD90A1 /* svwinfnt.h in Headers */, - 7FBEC1C86E145CE63217FB4A282FCF85 /* svxf86nm.h in Headers */, - 644B2EA9FB3436835DEE0BA7DA47DAE1 /* t1tables.h in Headers */, - F059D06F724A8A8C7BBDE111D491A11D /* t1types.h in Headers */, - 41F232CB3D23E3A6A1C5E4A4628FB79D /* T3DUX.h in Headers */, - ABA544F4FB1E7074FD3DC41616D225E0 /* TexrectDrawer.h in Headers */, - D4E54F8583E6BD0B7E8D5C37D0268831 /* TextDrawer.h in Headers */, - 27A3816D5997640C9C2977E66280EBE6 /* TextureFilterHandler.h in Headers */, - 8BE90823E820E693FF7804C8FF1F62E1 /* TextureFilters.h in Headers */, - D3FF3FDEA482BBCE33A46B4F848933D8 /* TextureFilters_2xsai.h in Headers */, - 931A0C0A7D091176AFB87B18C0F7B40B /* TextureFilters_hq2x.h in Headers */, - 481FDC02D816C4D6984B333CDD130B3D /* TextureFilters_hq4x.h in Headers */, - 7B291FDF52E0F7FB64A9FA0C4A88E848 /* TextureFilters_lq2x.h in Headers */, - 8245550C4876E05DB7BB650B1FB1A8B0 /* TextureFilters_xbrz.h in Headers */, - F7702D2569122119783ECBECBF0893F7 /* Textures.h in Headers */, - F00226D59B11A277EA50376813104098 /* tlb.h in Headers */, - CA76BE843896592E98D70D4C9937477E /* transferpak.h in Headers */, - 38140579D6698DB3EC5D4D8348A639CE /* ttnameid.h in Headers */, - 1673BDEF58AAD91E8E8136D14A6D92CC /* tttables.h in Headers */, - E100B6C29C8EC1E8BFAE2435884A3FC0 /* tttags.h in Headers */, - 9A2C2E1BFEC2A7F8FE2BF3C40365472A /* tttypes.h in Headers */, - 9E35E296D32157150508356B61DBFC67 /* ttunpat.h in Headers */, - EFA81C37AB1F59EE3DC9500238D24A10 /* Turbo3D.h in Headers */, - DFAE2CDC207F2309CBB7EB0926066FDC /* TxCache.h in Headers */, - D808972D53AC615EC3DBB96E9B7517C7 /* TxDbg.h in Headers */, - C3ADA5023FC1C283152E2C1813982117 /* TxFilter.h in Headers */, - 4C2666CEA93DF12E808B0748AA6C1F87 /* TxHiResCache.h in Headers */, - B6EBE57D0E21E77897AE81B558932730 /* TxImage.h in Headers */, - C455219A8550223E4C8003DD899834B7 /* TxInternal.h in Headers */, - 7D3F6F6AF8ED6A7D7EC99CD1C094A779 /* TxQuantize.h in Headers */, - BCEFBAE2DC02775E49A13027909408F2 /* TxReSample.h in Headers */, - D79A7F006A37B1D450F1B4520E3145D0 /* TxTexCache.h in Headers */, - 7264B6C7620512CB91DD5A6E09E01DED /* TxUtil.h in Headers */, - 928393A965417058371B8D82CF1F8173 /* txWidestringWrapper.h in Headers */, - 42607AF15A2E89DD92B0930C561F736F /* Types.h in Headers */, - AD9ED143C77CB1599C53004811B576C6 /* ucodes.h in Headers */, - 7C8F536BB5772737F608061B0FE4C7B3 /* unzip.h in Headers */, - ABCF35B61F0EAC2A3D2328B942D32BD8 /* util.h in Headers */, - 4483660753264FD8120A2067CD6A13CF /* version.h in Headers */, - 61D1C0178CE6181A4877AD63422267AE /* VI.h in Headers */, - 73884246E8506A0D452A96718B443133 /* vi_controller.h in Headers */, - 14E4FB185F30A8C5DC3F1D4B9E0DE716 /* video_capture_backend.h in Headers */, - FF3F43F568A4324F4CFCA6034F0EFE72 /* vidext.h in Headers */, - 31DF008DDC244721324E3AB3AEEBDB22 /* vidext_sdl2_compat.h in Headers */, - ED41FDC898B11C9B4481ECA58EBE978F /* wglext.h in Headers */, - A69AA86EDA31C24B28D06718893F218C /* winlnxdefs.h in Headers */, - A2FBF339AF1E1FDD65B6EF4158DE51AF /* workqueue.h in Headers */, - 066C91AF87F745BB782958FD99EB410B /* writepng.h in Headers */, - 52D74F7ECCC1DBF6E16DE1F12141B276 /* WriteToRDRAM.h in Headers */, - 59E880502F8D50F9EE5D608A579F9BC0 /* wst.h in Headers */, - 43B5E0E98AAF560F0241FC12684F8441 /* xxhash.h in Headers */, - 43B5E0E98AAF560F0241FC12684F8441 /* xxhash.h in Headers */, - E7713FF7D1DDD0B5457A3DDC07D7CB64 /* zconf.h in Headers */, - 8FBEAF2C349397639534DA6996F1794A /* ZilmarGFX_1_3.h in Headers */, - 0479E96052F30333A5AE51A1A5DD22C3 /* zip.h in Headers */, - 59580416DDB44B3A787BC982BC72F768 /* zlib.h in Headers */, - CCB42259A3740417E34809B42683CC18 /* ZlutTexture.h in Headers */, - AE1A359FB304361E950FBAFB413D972B /* ZSort.h in Headers */, - 4D18844FC53DBD634580E3013793C936 /* ZSortBOSS.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 5D86C535A6720DBCCAADB572CB6ED975 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -10039,18 +10039,18 @@ }; 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */ = { isa = PBXNativeTarget; - buildConfigurationList = 847E2631BC51B82439DF3F4721BDF1DD /* Build configuration list for PBXNativeTarget "N64DeltaCore" */; + buildConfigurationList = 5849A7A0DED647230AFE3BC69A637119 /* Build configuration list for PBXNativeTarget "N64DeltaCore" */; buildPhases = ( - 45596E3D2E556CF82FA41122C0AA9183 /* Headers */, - 5B0F6D0BAED01A7A219A798DB9F8BEED /* Sources */, - 22F413AD72240277D7C1F3120BEB443B /* Frameworks */, - B47C91E971844BF723AD4C1AF31ED003 /* Copy generated compatibility header */, + 41A4347B4FD531EBA68D3DA73FEB0CAF /* Headers */, + 2EC7126BE7D335AE1D7EB32631E21795 /* Sources */, + 09080236163C120471BEB8FB06F89693 /* Frameworks */, + AE5BE39E2515D91F6CB8321C56009BCF /* Copy generated compatibility header */, ); buildRules = ( ); dependencies = ( - 05B9A9148F0AA84DDE4A79DD841BAC5A /* PBXTargetDependency */, - 6DE0745286D33113EC54EBA586F7ACB4 /* PBXTargetDependency */, + 1BA8A93209A98E35E8ACFAFE29218CD4 /* PBXTargetDependency */, + 8CD3BB4C08E52675E652493F16CE75F7 /* PBXTargetDependency */, ); name = N64DeltaCore; productName = N64DeltaCore; @@ -10094,6 +10094,23 @@ productReference = 54ECA01A22C32DC89AB39DF9BFFD5FB6 /* DeltaCore.bundle */; productType = "com.apple.product-type.bundle"; }; + 280620EDC57ABB510508698A7233E414 /* N64DeltaCore-Mupen64Plus */ = { + isa = PBXNativeTarget; + buildConfigurationList = 88A5A8E64A54ACA4EF8C90AED6918F27 /* Build configuration list for PBXNativeTarget "N64DeltaCore-Mupen64Plus" */; + buildPhases = ( + 26FCA507A390FE7F79B4423679C511FA /* Sources */, + 0CFAF088DFC391480B4CC1584B7DAE3D /* Frameworks */, + 8337B6F238FFEB18F0B7D1A5B074BEC5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "N64DeltaCore-Mupen64Plus"; + productName = "N64DeltaCore-Mupen64Plus"; + productReference = 9816EFF6A2268AAEA7B1C19BBE416477 /* Mupen64Plus.bundle */; + productType = "com.apple.product-type.bundle"; + }; 33C94426DAF58519DC6806AF4C44C9E7 /* Pods-Delta */ = { isa = PBXNativeTarget; buildConfigurationList = 8EFB202E62BCFC8E2295AB415D91B995 /* Build configuration list for PBXNativeTarget "Pods-Delta" */; @@ -10150,23 +10167,6 @@ productReference = B0B214D775196BA7CA8E17E53048A493 /* libSDWebImage.a */; productType = "com.apple.product-type.library.static"; }; - 38A3E6A4A13E8C4E975336840145C119 /* N64DeltaCore-N64DeltaCore */ = { - isa = PBXNativeTarget; - buildConfigurationList = FCCF65418A0EFC8C339903B6DEBF0FF2 /* Build configuration list for PBXNativeTarget "N64DeltaCore-N64DeltaCore" */; - buildPhases = ( - BBA26EA97E33B109D9542E4D8659423E /* Sources */, - 2652C9DCA5C838F589EFE0FAE3D29D52 /* Frameworks */, - A06B5CF2D3EF8320EFFE1AE6DB23FF53 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "N64DeltaCore-N64DeltaCore"; - productName = "N64DeltaCore-N64DeltaCore"; - productReference = 11394EE3D127C442C317665EC530DED8 /* N64DeltaCore.bundle */; - productType = "com.apple.product-type.bundle"; - }; 38A7AA32705A9662332E76FA75B50858 /* MelonDSDeltaCore */ = { isa = PBXNativeTarget; buildConfigurationList = B60553E29392DE41ED40CB0EC15DFBCF /* Build configuration list for PBXNativeTarget "MelonDSDeltaCore" */; @@ -10569,7 +10569,7 @@ Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 03FD5788ECA6B9A68F2212115FCFC591 /* Products */; + productRefGroup = 755747E18A6F54E373510ADBD08E6723 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( @@ -10592,7 +10592,7 @@ 38A7AA32705A9662332E76FA75B50858 /* MelonDSDeltaCore */, 5B32FEE5AD13CB944235C9158BECB929 /* MelonDSDeltaCore-melonDS */, 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */, - 38A3E6A4A13E8C4E975336840145C119 /* N64DeltaCore-N64DeltaCore */, + 280620EDC57ABB510508698A7233E414 /* N64DeltaCore-Mupen64Plus */, 0FAC8C4777DBD31221FE57848CB5F759 /* NESDeltaCore */, 7F839870ECBE0065B4BCC02E5F98F48A /* NESDeltaCore-NESDeltaCore */, 33C94426DAF58519DC6806AF4C44C9E7 /* Pods-Delta */, @@ -10627,6 +10627,18 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 8337B6F238FFEB18F0B7D1A5B074BEC5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F3B34A063C2F03D5BB8001B5C8CFB941 /* GLideN64.custom.ini in Resources */, + 0BE698943DB014EA608C05BB9808B1D8 /* GLideN64.ini in Resources */, + 47A5A80DFA1F9FCEDF4CE60F636ABDDD /* mupen64plus.ini in Resources */, + 697CC0F8D19D045FDF352FC73316E75F /* Standard.deltamapping in Resources */, + A7932C8FB54630064EAB88DAE523A38C /* Standard.deltaskin in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8948D4BC4545310C4D92BFB641B78E8E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -10637,18 +10649,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A06B5CF2D3EF8320EFFE1AE6DB23FF53 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 2095A394F1DB498633048FA6F4CF5B6B /* GLideN64.custom.ini in Resources */, - 5BE7D6FBE9EB93D43C99935C48A966B7 /* GLideN64.ini in Resources */, - 83241BC0C8359ABCBDE971CD11FFE9DD /* mupen64plus.ini in Resources */, - EB57719B60503ADE6D81243AA7B99301 /* Standard.deltamapping in Resources */, - 219D418E6FEE74ABE4998946887B23F2 /* Standard.deltaskin in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; D6F1826D8FBE2174C0C05B2F2C54918A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -10867,7 +10867,7 @@ shellPath = /bin/sh; shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/GBCDeltaCore/GBCDeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/GBCDeltaCore/GBCDeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; }; - B47C91E971844BF723AD4C1AF31ED003 /* Copy generated compatibility header */ = { + AE5BE39E2515D91F6CB8321C56009BCF /* Copy generated compatibility header */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -11036,6 +11036,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 26FCA507A390FE7F79B4423679C511FA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 27E9971E616992A3F765D51DAE846624 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -11064,6 +11071,164 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2EC7126BE7D335AE1D7EB32631E21795 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DD024B1209D41FC910F56320BC735DEA /* 3DMath.cpp in Sources */, + 9FDAB43530974253873F6B850109D610 /* alist.c in Sources */, + F99240E705D674B72FB6B3DAD45349F4 /* alist_audio.c in Sources */, + A1F1F3426E0E3AE9D01F15DD819B5204 /* alist_naudio.c in Sources */, + BA26D53E540298C0F8C6B7FC9C1EE188 /* alist_nead.c in Sources */, + D0AA00DE55F80D9CF2C751E035128520 /* audio.c in Sources */, + EAEC2ADB101FBCBB27463DC34E59726F /* biopak.c in Sources */, + B760AD96450CB0BC0A0846109FADD4C7 /* cicx105.c in Sources */, + 46EE5AD399E232F78A784F6DCB08F5AA /* ClipPolygon.cpp in Sources */, + D17655285DCCE928A9B98D19D4FA6CB7 /* ColorBufferReader.cpp in Sources */, + 1605FF922393682801258AC62F46DC1D /* ColorBufferToRDRAM.cpp in Sources */, + 170BCE1D1B224FEBD40656BC4799B7A5 /* Combiner.cpp in Sources */, + ADA219A2F6BFE7A593939A9E9ED16491 /* CombinerKey.cpp in Sources */, + 8AB5AE388CFE361067158BB1133641B6 /* CombinerProgram.cpp in Sources */, + B7C6C5D16FE1D66425DF392A0649A120 /* CommonAPIImpl_common.cpp in Sources */, + 211FCE1E2E68BD0DF187B3BF5E2C2FA3 /* Config.cpp in Sources */, + AD049403F76645DB6F4ED1071B055F14 /* Context.cpp in Sources */, + 5CBAABCEFDC66179124839AB147498F9 /* convert.cpp in Sources */, + 794676EE5CFC0814F95A6272B9BDF48B /* CRC_OPT.cpp in Sources */, + 86D789A3A56DD97D1559152A9A3B1C12 /* dd_controller.c in Sources */, + 4354E3A4466FF6B483F24CDCD89AD50B /* DebugDump.cpp in Sources */, + 2D445BC93F75039A3BAA7CBA3A626E4C /* Debugger.cpp in Sources */, + A4A46020FF4C11DCE0AD9815C8FE0C62 /* DepthBuffer.cpp in Sources */, + FF09ED7CB9926D0011334E7D08830272 /* DepthBufferRender.cpp in Sources */, + E844F87FE7CBB3814DD7EEF794C607C9 /* DepthBufferToRDRAM.cpp in Sources */, + C1CA0A9670CDC24476DD0BC30CBAF2F9 /* DisplayLoadProgress.cpp in Sources */, + C70555D93FB3D865E74813F1EEEE7BB7 /* DisplayWindow.cpp in Sources */, + 7FA6A8B8D22767B49932301232D6EDED /* dummy_video_capture.c in Sources */, + 85329C6EC0EDB240C9FCA4766579353C /* F3D.cpp in Sources */, + 4B4A17024DDE3F167EC3FFFADA8E3323 /* F3DAM.cpp in Sources */, + 8CC4162C9B5F2ACF112E2CD0231DAD8E /* F3DBETA.cpp in Sources */, + DF632D227E40256F30369C397760D46C /* F3DDKR.cpp in Sources */, + 01C4F158AD89AC4C39C5DBD7E869107D /* F3DEX.cpp in Sources */, + A55B44741FF8BF0BF83FCF89A7D2DF18 /* F3DEX2.cpp in Sources */, + ED64EA01B94466DB3C85EB1F9717AD13 /* F3DEX2ACCLAIM.cpp in Sources */, + 2976ECE53CBF19C1F27B45BF5CB09965 /* F3DEX2CBFD.cpp in Sources */, + 2927B50D7C03836B5037835DE0C7E043 /* F3DFLX2.cpp in Sources */, + 54DB5CB9D0EAC284EE6DEA8C04591BD7 /* F3DGOLDEN.cpp in Sources */, + BCFC498B83EBB0460E26731FF657898D /* F3DPD.cpp in Sources */, + 8B6C38945E65F6164B90994E03C0E37F /* F3DSETA.cpp in Sources */, + D2FB63331B59F465C90738151C31C480 /* F3DTEXA.cpp in Sources */, + 880C713010255166F389C86EFCC2C9AE /* F3DZEX2.cpp in Sources */, + 61FA017D4AF7688298FF0FB9F4251FFF /* F5Indi_Naboo.cpp in Sources */, + 90AB2A9F1C9D72D1B8956B0FA71B38E2 /* F5Rogue.cpp in Sources */, + A85E6E945674B72BA3E5D882DC2B55D9 /* FrameBuffer.cpp in Sources */, + E7C1499B0AFBC0441A2B0ED73A34C0A8 /* FrameBufferInfo.cpp in Sources */, + A12FF5C36B478525C1327E41B3B3C09C /* GBI.cpp in Sources */, + 9700860B8834FFBBBB772936CA396419 /* gDP.cpp in Sources */, + 5284118A34B3FA1188F7A721E29FAA32 /* GLFunctions.cpp in Sources */, + 595257C1536BA8947FF6874613BDCDB6 /* GLideN64.cpp in Sources */, + E7BCAC0500BE757622825AA6A1F1847E /* glsl_CombinerInputs.cpp in Sources */, + 86D935D17CB549295AA3151698C9CC97 /* glsl_CombinerProgramBuilder.cpp in Sources */, + ACE960410C8930B639E6B002D9E52F44 /* glsl_CombinerProgramImpl.cpp in Sources */, + 5195E7AAFA38D697217C55041F29BC7B /* glsl_CombinerProgramUniformFactory.cpp in Sources */, + CCB250130720CE2E8F35733C13A8B17D /* glsl_FXAA.cpp in Sources */, + C51AB52F55218B74567CCD1A37365F1D /* glsl_ShaderStorage.cpp in Sources */, + 7A424939FB63EB84D99407F5FAA957DA /* glsl_SpecialShadersFactory.cpp in Sources */, + AD47B17045412F1E32D42DEC1F71C6CE /* glsl_Utils.cpp in Sources */, + 20B63E21A974BFB0E1318A2D18C7EC9A /* GraphicsDrawer.cpp in Sources */, + FED42AEDD26B19BB49DD15B37B502C26 /* gSP.cpp in Sources */, + 2FFD8A4339DDF9E4162A2B228D700B00 /* hle.c in Sources */, + 6A4D554552A991D3E852728A46F11C6C /* jpeg.c in Sources */, + 7E82D7757D1F185509FB6060B26DF2F8 /* Keys.cpp in Sources */, + A11D64412596423EBFD44DD00058A5BD /* L3D.cpp in Sources */, + 84B63AF1BC14C6406DF954CA68468FA9 /* L3DEX.cpp in Sources */, + E2782016C2BC54B3433C1114E723AB91 /* L3DEX2.cpp in Sources */, + 15BE84A95EAC7ED13036375B2BB3409C /* Log_ios.mm in Sources */, + 3610E0EF4BBB6CF3CF12645B71666CEE /* memory.c in Sources */, + 588857A888B8FB50B5729755048AF5BE /* MemoryStatus_mupenplus.cpp in Sources */, + 565B64F7F83F4F5FA29C34B97F0071ED /* mp3.c in Sources */, + 88D64384C3E6EBAD97D1FBC2AACBA92E /* mupen64plus_DisplayWindow.cpp in Sources */, + 3B42DD35D266E878DEA58A0F3CD151E2 /* musyx.c in Sources */, + 7A4517ACA4CE707769476DE0A8FDFD16 /* N64.cpp in Sources */, + 82A2EC55FF6F876EEE55932C3948728A /* N64.swift in Sources */, + AC379808B490D311984BAC3D9BF11C91 /* N64DeltaCore-dummy.m in Sources */, + 255E542635C421B59132F7D8010972EB /* N64EmulatorBridge.m in Sources */, + 058508664EDB764D3709A2AB6EF6B252 /* N64Types.m in Sources */, + DC7A37F12FA93FA2A4733E69021D08CA /* NoiseTexture.cpp in Sources */, + 40D0BB5787AC64B638416C9DC6ABA9C2 /* ObjectHandle.cpp in Sources */, + 491625B9D71AA1BD54EF222D6CF2156C /* opengl_Attributes.cpp in Sources */, + C99792D9CCCAA1633F30B5C770D209E2 /* opengl_BufferedDrawer.cpp in Sources */, + 4FA5CD6D42B05CAA056082B07A92E126 /* opengl_BufferManipulationObjectFactory.cpp in Sources */, + 8C12B982EB848387B97D127AC49EED4C /* opengl_CachedFunctions.cpp in Sources */, + 5007FF5D9701A3394F5837CF3D949DC7 /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */, + 4150E7B22E87E3E0A1677C4074AC5651 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */, + CE4FF62954D9D2CC3499AFB74E9BA974 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */, + 2D04068669A431A14A7C0876BF2BA0B7 /* opengl_ContextImpl.cpp in Sources */, + 3F5A6187E39867D2D1D87C75ABFC4F05 /* opengl_GLInfo.cpp in Sources */, + CF96B67066487C2BC53BDD35D81C0601 /* opengl_Parameters.cpp in Sources */, + 8DC67CE598921DF48FD70C4C6E4868AE /* opengl_TextureManipulationObjectFactory.cpp in Sources */, + D2BC97FE93CA9D56996B4F25DFA2AA8D /* opengl_UnbufferedDrawer.cpp in Sources */, + 4F75FC37FC518C828A165CEF4EAA8BDA /* opengl_Utils.cpp in Sources */, + B390908E95C1D679EB6EFA22AEABF82C /* osal_files_ios.mm in Sources */, + A90950062B5B87C714507F9C8EE66EE3 /* PaletteTexture.cpp in Sources */, + 545FC6F90DB64D743272B9B6581C3A1D /* Performance.cpp in Sources */, + 8CFFE8D206649FBC45A465E0EAB2D2E6 /* plugin_delta.c in Sources */, + 9B5D0570D908D4A6EBE804FC3E0FF775 /* plugin_delta.cpp in Sources */, + 8058D7B84C65C8F832FB61B0A1D05F76 /* png.c in Sources */, + A90A92E3681F50270E9EB68B816F3D94 /* pngerror.c in Sources */, + 265418D17A79E992D7091C6116D5D81E /* pngget.c in Sources */, + AB2A558032E8D4877049D09D755ECA35 /* pngmem.c in Sources */, + 2CFFEDD26B19606414785964AC1E7FD5 /* pngpread.c in Sources */, + AC3E5F8F4AD95B1E0BBAD992EDC5D940 /* pngread.c in Sources */, + E2FBEA7B76F101CA55BB009C8E60BE68 /* pngrio.c in Sources */, + C3E9BFE46A1072D5D11FD6DF0C118804 /* pngrtran.c in Sources */, + 21DECE82ADC97C8D836542939B04DF0A /* pngrutil.c in Sources */, + 12710C9A38DE181686AD45DE6BD9E19C /* pngset.c in Sources */, + 49ABC99FE103B5AC8DBF4EAB13B19619 /* pngtest.c in Sources */, + B31AAF00ED1C7523C8666F9611CCD0B3 /* pngtrans.c in Sources */, + 48ED96922DB66BAC7D1C1C53B9E093C7 /* pngwio.c in Sources */, + 075956C0E39C23AA9BA359E3FA85A5AA /* pngwrite.c in Sources */, + 784CEFF3C72E1AF35D75B1E0B1034A63 /* pngwtran.c in Sources */, + BAE25DB1A5B8BA8A01AF634BCB7CA69F /* pngwutil.c in Sources */, + A8667816D59C9860485A0D7FACC3748D /* PostProcessor.cpp in Sources */, + 9F286E1D2DC70F134E8A8E4DABD86735 /* RDP.cpp in Sources */, + 3947B44C7BD9B3882EB0AC7BC93A2723 /* RDRAMtoColorBuffer.cpp in Sources */, + EF1305999A84EDD9047C2F944DA378F6 /* re2.c in Sources */, + 15E662928B35B0C5E956E292F040EF08 /* RSP.cpp in Sources */, + 918F4A5025C69B658DA2143255DE0A7C /* RSP_LoadMatrix.cpp in Sources */, + E1F0ED8637916242D358C81D80CF57B1 /* S2DEX.cpp in Sources */, + F54B67349E466DAAE2CF0795F99BDB61 /* S2DEX2.cpp in Sources */, + 7F440752F983F37E80C881B3F0F601EF /* SoftwareRender.cpp in Sources */, + 07369772A8FB7F2ADA0FFA31B21ED050 /* T3DUX.cpp in Sources */, + FE94B7CC01A829EE981DA802A9137E23 /* TexrectDrawer.cpp in Sources */, + 3AB41F6902A749BE87B6ACD97D7DBA3C /* TextDrawerStub.cpp in Sources */, + 7D97A8AC6EBC128DB5B1FB60AF8F28CE /* TextureFilterHandler.cpp in Sources */, + 3728D0F955C08DEE1B1E522B716EB724 /* TextureFilters.cpp in Sources */, + 8042AB8320D7940DC3050337B4493533 /* TextureFilters_2xsai.cpp in Sources */, + 7EC161C3C3EDEF6DEEB5A0D8C2ADEF8F /* TextureFilters_hq2x.cpp in Sources */, + AFD4E7E3575D14B1F4B0301FBF339C8D /* TextureFilters_hq4x.cpp in Sources */, + 2B3BC9E6AA5B18ABAEFCCDB39484FF5B /* TextureFilters_xbrz.cpp in Sources */, + 84B95393C2EFEB1D75B9A12B3989B9B0 /* Textures.cpp in Sources */, + 65A8A0E7D477668CE87C3793E034EE10 /* Turbo3D.cpp in Sources */, + DAC30DFBB6381E8AC0EFD63B71601B85 /* TxCache.cpp in Sources */, + 19DB2C9533367523333978531B0E4DD8 /* TxDbg_ios.mm in Sources */, + CF0AD48E0F3BE7E612B1A6D234C3BA4C /* TxFilter.cpp in Sources */, + C4F0718815D0222CC34BA8A7FF4BD7ED /* TxFilterExport.cpp in Sources */, + 1956E058934AF8327F7D63A7CF9FCD11 /* TxHiResCache.cpp in Sources */, + 75D1998BA476E5CDFD8EB74BA3937628 /* TxImage.cpp in Sources */, + 442D3A121AD9C02E66C68692A0200D7C /* TxQuantize.cpp in Sources */, + E358647190A54EDF5C189E0BCA22531A /* TxReSample.cpp in Sources */, + A0BAF4ED385FE71250DCF6D05F0496F0 /* TxTexCache.cpp in Sources */, + 3056EB896FBCCE8025B4F0BC1C61E470 /* TxUtil.cpp in Sources */, + D872BDF31403DB85D3769379C5C2B72D /* txWidestringWrapper.cpp in Sources */, + 7FE93BDAF8E862CEC574A1F24B872469 /* VI.cpp in Sources */, + 6A71F6621B7270DC4E9CC3469057DF8D /* video_capture_backend.c in Sources */, + D07A1B71422D57F744E2F9C684688785 /* xxhash.c in Sources */, + D07A1B71422D57F744E2F9C684688785 /* xxhash.c in Sources */, + 9D069AEA5FFB677528A5118AF19C7233 /* ZlutTexture.cpp in Sources */, + 2E249F499F9043C559D25049F768C9F9 /* ZSort.cpp in Sources */, + 4CB1A09E1EA833B734D8605C78479656 /* ZSortBOSS.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 3DC4139B1C0EA206BEB29EE8CA06ED7A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -11085,164 +11250,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5B0F6D0BAED01A7A219A798DB9F8BEED /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4C5A26ACD5B7FB918191313A9F178EC8 /* 3DMath.cpp in Sources */, - BA530F1422205725B02895445DDF0F3E /* alist.c in Sources */, - 4619C7C20249E0D46A2D68E292D09BF4 /* alist_audio.c in Sources */, - 20F9B744BEFD8D7B6A31CAD347DA905B /* alist_naudio.c in Sources */, - AF0DCE9655B9FD35BC9D0A18E30C0A57 /* alist_nead.c in Sources */, - B128E8E439A9E5BDD9CE64F4EEDA1AEE /* audio.c in Sources */, - C094CBCC986DF1C6C0A3379FCA09D462 /* biopak.c in Sources */, - 20456037EE6A29D63087BCDEABE7A543 /* cicx105.c in Sources */, - 85CCCE40DF1323C9A271D20D29AD279F /* ClipPolygon.cpp in Sources */, - 9B75C40E8889FD932BCFF196C4F35E57 /* ColorBufferReader.cpp in Sources */, - 22A782478094510168B16DDC00EAD35B /* ColorBufferToRDRAM.cpp in Sources */, - 02619B61469E1C06E2A30FF166068583 /* Combiner.cpp in Sources */, - 6731CC4CED928FD83F4CEA695B5D6A78 /* CombinerKey.cpp in Sources */, - 113A3ADEA158094373E44C01E1443F61 /* CombinerProgram.cpp in Sources */, - 3A76CD8381C61DF00848DA207E173AE6 /* CommonAPIImpl_common.cpp in Sources */, - 2AA72C64A1A864A039D5E3F085526F29 /* Config.cpp in Sources */, - EA259B2E1D0BB10750FC2236B155EAB2 /* Context.cpp in Sources */, - 43F876E1F40CE874937E046A6E211731 /* convert.cpp in Sources */, - 6DE7BBDFA34C2573298F7441BBF3AB4A /* CRC_OPT.cpp in Sources */, - 14D448DCE42024011A61818D6536731E /* dd_controller.c in Sources */, - 89163481E7F96A33F9E183759BD7D51D /* DebugDump.cpp in Sources */, - 2DB19BEF17C3D5BE1E0C85B25C931C43 /* Debugger.cpp in Sources */, - E6A4553281DA2987F949740F277ACA3D /* DepthBuffer.cpp in Sources */, - 0D97BC11BC4E1636F550EF6D331031AF /* DepthBufferRender.cpp in Sources */, - 96D4E9BF589FAEAAE225B88A6CC68214 /* DepthBufferToRDRAM.cpp in Sources */, - 9B785841DB7BEA68999C1CA3F487ECF1 /* DisplayLoadProgress.cpp in Sources */, - 0E62C30ACBFB8DC392E5CE59DDAA64A2 /* DisplayWindow.cpp in Sources */, - 14890F4A609A98F54A7AE2FAA7A769BA /* dummy_video_capture.c in Sources */, - A1FDFF2AD1EBC97A47F35961A2C71109 /* F3D.cpp in Sources */, - AA615360C6D1A302957FBF37E2684533 /* F3DAM.cpp in Sources */, - F0D1F35D36D80879500D7BC755F861C0 /* F3DBETA.cpp in Sources */, - C1C5E0B49268CB4DB6B4B7CF63412FF5 /* F3DDKR.cpp in Sources */, - DDCFF8BD823EB8F9837DF1B4034FF1E8 /* F3DEX.cpp in Sources */, - B5E9F103B89A4D65F3C103264D8F0075 /* F3DEX2.cpp in Sources */, - B445DE84FFD95F74DE320679C420C280 /* F3DEX2ACCLAIM.cpp in Sources */, - FB52AF561DF1EA42175BB097A4ACC4CE /* F3DEX2CBFD.cpp in Sources */, - FDAED0747D841ECFEF580516B968E938 /* F3DFLX2.cpp in Sources */, - 5B5FC4B8005630CE21B998A96C73D770 /* F3DGOLDEN.cpp in Sources */, - 63306BB36B1EE0257031B7113C64569F /* F3DPD.cpp in Sources */, - F3C54A16E279E2FDD60FBA58FBB2B4AB /* F3DSETA.cpp in Sources */, - CF85240AFAAECCEC4EED6E2AE3F565B9 /* F3DTEXA.cpp in Sources */, - ECE94BF77F79C48917F76CFABFF51D4E /* F3DZEX2.cpp in Sources */, - DF266745A6B1E11185D36EF99E10B829 /* F5Indi_Naboo.cpp in Sources */, - 59F9463AE8F8A4C77B2B7FE0E646026B /* F5Rogue.cpp in Sources */, - 7836A137F2D211F1D9314D9FE4EA0D66 /* FrameBuffer.cpp in Sources */, - 0A82B6C9EC4EA09A0C213ABAE1E08E9B /* FrameBufferInfo.cpp in Sources */, - 8396AC5DE2BB1D261F147086BBBEE743 /* GBI.cpp in Sources */, - 9AC1AB764E31934D162F26C8484C21E6 /* gDP.cpp in Sources */, - 328973836A67F6C5B5D59A4EEC49C810 /* GLFunctions.cpp in Sources */, - 3B2297CC939F6D0B7512A5D0F8E91436 /* GLideN64.cpp in Sources */, - 45F9C2BE3D3D88B7333F8CCFB32B5442 /* glsl_CombinerInputs.cpp in Sources */, - 77A85C92FFB254C86D986447BE4A3853 /* glsl_CombinerProgramBuilder.cpp in Sources */, - C34D51CEB4E00C5A195C5FF17A900866 /* glsl_CombinerProgramImpl.cpp in Sources */, - CB0762ECE40307553CD674252738DE2C /* glsl_CombinerProgramUniformFactory.cpp in Sources */, - 56192DB51F2A50C90569FF1BD1985C88 /* glsl_FXAA.cpp in Sources */, - 73386D5E90D47431798B1A5A736601B7 /* glsl_ShaderStorage.cpp in Sources */, - 0FCCD4B109AB22FC20A743AB750B95EC /* glsl_SpecialShadersFactory.cpp in Sources */, - 489FD286E54A8CF00552B82CBE154B85 /* glsl_Utils.cpp in Sources */, - 12642C40ECD4772D8E3C16F32834E565 /* GraphicsDrawer.cpp in Sources */, - 6B63836AD6E6BC9D03FB3AD4A534B6AC /* gSP.cpp in Sources */, - 33869554EDBB14406B7BB9E8647E35A0 /* hle.c in Sources */, - 38C976A8DEE43222DFA6C54E16E79FFA /* jpeg.c in Sources */, - FE6E40D309F0B3DD2EC97258D2B80C79 /* Keys.cpp in Sources */, - E11B7AAF1933D8FF81EC1A4AA3B01862 /* L3D.cpp in Sources */, - 8DD51BE5C43C2B1D3E7A605D95C974C6 /* L3DEX.cpp in Sources */, - 56CC143D8E35F7C9A786111F8469E4AE /* L3DEX2.cpp in Sources */, - FEAB30060313E7D45EDA78B37A4A860C /* Log_ios.mm in Sources */, - 926C22B256A40C76B6C8FBDCC7D1900E /* memory.c in Sources */, - 48C37CCF88449880D62A12DCE1B313AB /* MemoryStatus_mupenplus.cpp in Sources */, - EE33CD64FEAC466A7824C75D33623961 /* mp3.c in Sources */, - 1FB0A954FA7AF8FE8D99D959DE9965B9 /* mupen64plus_DisplayWindow.cpp in Sources */, - 3AB819E705859C4B41819930E8681142 /* musyx.c in Sources */, - 886A18799553A19E810D2F7D688A4126 /* N64.cpp in Sources */, - A7367943BD56320D9A2A6192A8A3D770 /* N64.swift in Sources */, - 4621F1AF007DEF733981FDC8CCE566E0 /* N64DeltaCore-dummy.m in Sources */, - DE128C6384EFDCB0627D9980E76E9E20 /* N64EmulatorBridge.m in Sources */, - E36C54619AD747C9D5825D0F555BB156 /* N64Types.m in Sources */, - D52D782E8B77295F31DAAEF79BFBABD0 /* NoiseTexture.cpp in Sources */, - 95927DE3B446FB2A897EEE03A3B0E292 /* ObjectHandle.cpp in Sources */, - 0268FE03E18EFF693689E074F11B96C1 /* opengl_Attributes.cpp in Sources */, - 8A5CB6F7F72B063E995EC0B2C2AF52E5 /* opengl_BufferedDrawer.cpp in Sources */, - F3F92D728EEA58B31C1366A8C3D2592F /* opengl_BufferManipulationObjectFactory.cpp in Sources */, - 2CEEF7D75DDAFBAAF8E4106F54BDE731 /* opengl_CachedFunctions.cpp in Sources */, - 362273378B1432EA72CB535B566D301C /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */, - 679942ACF8264152448A2861144849F9 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */, - BE7A4ED43FCAC3814C10C9D5B3A68D18 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */, - C4561DB72CCEBA4FF6445D4738B7C7DE /* opengl_ContextImpl.cpp in Sources */, - 07DF414393A0265559B74FF88238011A /* opengl_GLInfo.cpp in Sources */, - D721B239753D7F7FDDE916AFE3FCB235 /* opengl_Parameters.cpp in Sources */, - C38E914D8F66B0BD258C83D7C35C2726 /* opengl_TextureManipulationObjectFactory.cpp in Sources */, - 5872138AFC456A4EFAF08719BB37464C /* opengl_UnbufferedDrawer.cpp in Sources */, - 4F483ADE9F4639BF875D6E84D02AEB80 /* opengl_Utils.cpp in Sources */, - A5F30E43D79777F683DA8086E856314C /* osal_files_ios.mm in Sources */, - 4F413DC26068AB7502D2ADE1EED949AA /* PaletteTexture.cpp in Sources */, - 8F6BB90B38CCD6C919AB656FB5EC04C3 /* Performance.cpp in Sources */, - 9463C53B6DDD72C64400E314D9AAB04A /* plugin_delta.c in Sources */, - CBFE788323DBFFF81708B579E642C550 /* plugin_delta.cpp in Sources */, - EF9C7D853BDDA0BCC0F895D47AA7437C /* png.c in Sources */, - 10B25A3E89F2BC948F600F93DFD2AEEE /* pngerror.c in Sources */, - 0D0CDD2D121FB16DD8061998BE122543 /* pngget.c in Sources */, - 8229184EC4951470007A0AF03871F122 /* pngmem.c in Sources */, - A495BA6FF010BD3CC899768E09C49CDC /* pngpread.c in Sources */, - 80E2A90DF2C7F5D8D36F4A37F0F6CE03 /* pngread.c in Sources */, - 1505FB7B20F25998D75A83A2147DF2F0 /* pngrio.c in Sources */, - A960256FE7F887C3B4128D1F696E2D90 /* pngrtran.c in Sources */, - AC809FC49956C0CEF8D81ECB57D34E1E /* pngrutil.c in Sources */, - C794D4B738B15C7F096A903C21D39FC2 /* pngset.c in Sources */, - 26EA8FC2F1D23AB23AE750AF18221843 /* pngtest.c in Sources */, - 556FF16A662F3C2DEBA50B9693599DE1 /* pngtrans.c in Sources */, - EDECCD20635BC41EB02BEF704D740AF4 /* pngwio.c in Sources */, - A6B315E94A6CEF669095A376A8B78BF0 /* pngwrite.c in Sources */, - D8BEDCF49E6864FFFCE6F10F633F3500 /* pngwtran.c in Sources */, - 98E164F9F904A6584A61420EE9FD1A7E /* pngwutil.c in Sources */, - B425DF73F64609FA542BBFB0BE9EDF03 /* PostProcessor.cpp in Sources */, - 22004865065093B59F7DF41EAA0DEA79 /* RDP.cpp in Sources */, - 480FB68E1413AE0DC7B8CE67383BF00F /* RDRAMtoColorBuffer.cpp in Sources */, - 8794B9E7B8EB7EC0B49CE452CF778FC1 /* re2.c in Sources */, - F28EC2465A217A0417AE60E418AA1C70 /* RSP.cpp in Sources */, - 93E2A69BE77D64F60D12257FF81954F4 /* RSP_LoadMatrix.cpp in Sources */, - B47F87DC8093788C4F7F5FAA80E88648 /* S2DEX.cpp in Sources */, - F0C6CE8A84BFC2F818EA2389B0E54944 /* S2DEX2.cpp in Sources */, - 4B7AC54FDF87859ED298ABADF7043037 /* SoftwareRender.cpp in Sources */, - 732F3A5D226D0D463C9027476C9F5E60 /* T3DUX.cpp in Sources */, - 1B0E862A80891D08A0C6F2E43AE8B356 /* TexrectDrawer.cpp in Sources */, - B0B1C045C677C89BF5B9C28280948EFF /* TextDrawerStub.cpp in Sources */, - B9D617B5B5EAF1315D131DBCE295ACD2 /* TextureFilterHandler.cpp in Sources */, - A45F47289CB2ED953F6CD191275DB3F2 /* TextureFilters.cpp in Sources */, - 7F01651585FCAE415EBDFC808DDFB5F7 /* TextureFilters_2xsai.cpp in Sources */, - E9B012F6B7FFEF993DEC81040FF08B81 /* TextureFilters_hq2x.cpp in Sources */, - 05E346049D925B2F24BFD812BB16EACE /* TextureFilters_hq4x.cpp in Sources */, - E7F970F940518CACBA50E29DA4566EE5 /* TextureFilters_xbrz.cpp in Sources */, - 8AF999E503CB06FBD4EEA0903D672F5A /* Textures.cpp in Sources */, - 5858556236C0AD004276850A211BBBB2 /* Turbo3D.cpp in Sources */, - 7A2438E3C2548E6C6B9046875E06F5DF /* TxCache.cpp in Sources */, - 0D3A7FEA753047DE31A6F81799F3190C /* TxDbg_ios.mm in Sources */, - 09712513CDD56B9AD1082FD253B210B0 /* TxFilter.cpp in Sources */, - 882DCF4B991615D8A07BC2EF7E84A5FC /* TxFilterExport.cpp in Sources */, - 7B7E2677824409DA731B3FAD16DF422A /* TxHiResCache.cpp in Sources */, - 9B40F6B2B7F12F1A13A367E599764867 /* TxImage.cpp in Sources */, - 35D2385FCC093615C3BA7B260E3E6CF0 /* TxQuantize.cpp in Sources */, - 6AE5D505AB46EAC8A4CA2ACBE1EF0FC3 /* TxReSample.cpp in Sources */, - 106923F11FA63A0A83DDFF28E6D682E6 /* TxTexCache.cpp in Sources */, - EFEDD19659E080B7972B6EC2113D02A1 /* TxUtil.cpp in Sources */, - E614C5D1F40EC77DAF23006BCBA8523B /* txWidestringWrapper.cpp in Sources */, - 9FEFB36A938CC33AAA28777285A2D6D3 /* VI.cpp in Sources */, - EAC867D60DB729E55A1ED540BD330F09 /* video_capture_backend.c in Sources */, - 09FC171FD71744C6F47D4CC3341BF102 /* xxhash.c in Sources */, - 09FC171FD71744C6F47D4CC3341BF102 /* xxhash.c in Sources */, - FE0FA27784515E14FED461B1ACB0D5AB /* ZlutTexture.cpp in Sources */, - 6E5A067CD4797D3ABC2BC001B7005A84 /* ZSort.cpp in Sources */, - 2CCC882A4E5D781FCB474D22071FDB82 /* ZSortBOSS.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 5EE6B8A56A8A13C9228CFEE7FC036FA2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -11488,13 +11495,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - BBA26EA97E33B109D9542E4D8659423E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; BC865B7660440743952CF38E5547EAA7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -11730,12 +11730,6 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 05B9A9148F0AA84DDE4A79DD841BAC5A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DeltaCore; - target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; - targetProxy = 34B215C21519BEE50F2B57C914617CDD /* PBXContainerItemProxy */; - }; 07E627BB28FBB62F3E6DC30187201518 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Roxas; @@ -11760,6 +11754,12 @@ target = 38A7AA32705A9662332E76FA75B50858 /* MelonDSDeltaCore */; targetProxy = 9B7CE23FABAB20B2C7AF16AB48B1E85A /* PBXContainerItemProxy */; }; + 1BA8A93209A98E35E8ACFAFE29218CD4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DeltaCore; + target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; + targetProxy = B1570DE8D1FE8F79EF7721A260A67201 /* PBXContainerItemProxy */; + }; 3F1CB87EC87C55D1211C3D729391F3B6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SwiftyDropbox; @@ -11814,12 +11814,6 @@ target = 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */; targetProxy = 15E4ADDCC69DB2AEB2E21EC85874D1C6 /* PBXContainerItemProxy */; }; - 6DE0745286D33113EC54EBA586F7ACB4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "N64DeltaCore-N64DeltaCore"; - target = 38A3E6A4A13E8C4E975336840145C119 /* N64DeltaCore-N64DeltaCore */; - targetProxy = EF595E5FB07F405B2D9F4C94D4560005 /* PBXContainerItemProxy */; - }; 6EAE17DEE57C07FFAA5EC882A076663C /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Alamofire; @@ -11862,6 +11856,12 @@ target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; targetProxy = 5C8E1AC123E1190B28C3D74EC312A900 /* PBXContainerItemProxy */; }; + 8CD3BB4C08E52675E652493F16CE75F7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "N64DeltaCore-Mupen64Plus"; + target = 280620EDC57ABB510508698A7233E414 /* N64DeltaCore-Mupen64Plus */; + targetProxy = 8C6093F292174055C3C90785DBCA7FDD /* PBXContainerItemProxy */; + }; 8CF19D40C04C187755DF617BCB77FA8E /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Fabric; @@ -12174,23 +12174,6 @@ }; name = Debug; }; - 157E49C46E51B2A4B3A0A92FF290CB97 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/N64DeltaCore"; - IBSC_MODULE = N64DeltaCore; - INFOPLIST_FILE = "Target Support Files/N64DeltaCore/ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - PRODUCT_NAME = N64DeltaCore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; 19CA107CA126D0EAFCB2699D867C871D /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = C6AEBD66201582E2F018DBD9D692F239 /* SNESDeltaCore.xcconfig */; @@ -12300,32 +12283,6 @@ }; name = Release; }; - 2D84D617B7857F3275843F18B59616C6 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/N64DeltaCore/N64DeltaCore.modulemap; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = N64DeltaCore; - PRODUCT_NAME = N64DeltaCore; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; 2E1376B8AF89FDDFF88A17202398E3C5 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 2E2D966C0A00ADF6CBAED222AD054CA8 /* Crashlytics.xcconfig */; @@ -12522,23 +12479,6 @@ }; name = Debug; }; - 46E59AEA8F9BBFC46341D0AB0A41EEED /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/N64DeltaCore"; - IBSC_MODULE = N64DeltaCore; - INFOPLIST_FILE = "Target Support Files/N64DeltaCore/ResourceBundle-N64DeltaCore-N64DeltaCore-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - PRODUCT_NAME = N64DeltaCore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 4ADE45E1DE4E87A43AFD7A55ED34225C /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 6D14F298DDA814B5FF6C73CC765C8186 /* GBCDeltaCore.xcconfig */; @@ -12597,6 +12537,33 @@ }; name = Release; }; + 5A2654A4D69FAFD8C5DA1538E667FD20 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9C40CA78C414DCF7D85C8612550E53E8 /* N64DeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/N64DeltaCore/N64DeltaCore.modulemap; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = N64DeltaCore; + PRODUCT_NAME = N64DeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; 5E2B746830A1712B92EA62ADE50A75C8 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 6D90A2363F7995BE9713375802DBDF16 /* Roxas.xcconfig */; @@ -13152,6 +13119,23 @@ }; name = Debug; }; + B38D4BC8B7B929F56930619695B435C2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9C40CA78C414DCF7D85C8612550E53E8 /* N64DeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/N64DeltaCore"; + IBSC_MODULE = N64DeltaCore; + INFOPLIST_FILE = "Target Support Files/N64DeltaCore/ResourceBundle-Mupen64Plus-N64DeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = Mupen64Plus; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; B3C9B7BC9A2AE9348D76B4FF142B3504 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5FA6C00DDDB9434F8C592657E4CF0E8D /* DSDeltaCore.xcconfig */; @@ -13257,33 +13241,6 @@ }; name = Debug; }; - D0EF404FB24A776F9ABE044132237C74 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 85EC77CB1EFF082EFC6FC1D404F1D3C4 /* N64DeltaCore.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/N64DeltaCore/N64DeltaCore.modulemap; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = N64DeltaCore; - PRODUCT_NAME = N64DeltaCore; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; D4B58A57B698D65C42A0D7DB237EC54C /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 4873713B2974A1B7D8CB492B8921D329 /* Fabric.xcconfig */; @@ -13369,6 +13326,23 @@ }; name = Release; }; + E8BA7EB32AB357B8AA781CFD0DB64092 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9C40CA78C414DCF7D85C8612550E53E8 /* N64DeltaCore.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/N64DeltaCore"; + IBSC_MODULE = N64DeltaCore; + INFOPLIST_FILE = "Target Support Files/N64DeltaCore/ResourceBundle-Mupen64Plus-N64DeltaCore-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + PRODUCT_NAME = Mupen64Plus; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; E90EEF54ECEF66D2765179BAC03F1B21 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5B2E58A2772EA93AA7DC5A5022F51297 /* MelonDSDeltaCore.xcconfig */; @@ -13542,6 +13516,32 @@ }; name = Release; }; + FA878C557102726B278407FA038FDFD2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9C40CA78C414DCF7D85C8612550E53E8 /* N64DeltaCore.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/N64DeltaCore/N64DeltaCore-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/N64DeltaCore/N64DeltaCore.modulemap; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = N64DeltaCore; + PRODUCT_NAME = N64DeltaCore; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; FD4D2BF3F9CF4F7BD4834A980131B3B1 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = A3131038BAA6204AECC770BDD176F81C /* ZIPFoundation.xcconfig */; @@ -13688,6 +13688,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 5849A7A0DED647230AFE3BC69A637119 /* Build configuration list for PBXNativeTarget "N64DeltaCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FA878C557102726B278407FA038FDFD2 /* Debug */, + 5A2654A4D69FAFD8C5DA1538E667FD20 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 769CCD015EEEB9388EA6D65752E1BB67 /* Build configuration list for PBXNativeTarget "MelonDSDeltaCore-melonDS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -13697,11 +13706,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 847E2631BC51B82439DF3F4721BDF1DD /* Build configuration list for PBXNativeTarget "N64DeltaCore" */ = { + 88A5A8E64A54ACA4EF8C90AED6918F27 /* Build configuration list for PBXNativeTarget "N64DeltaCore-Mupen64Plus" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2D84D617B7857F3275843F18B59616C6 /* Debug */, - D0EF404FB24A776F9ABE044132237C74 /* Release */, + B38D4BC8B7B929F56930619695B435C2 /* Debug */, + E8BA7EB32AB357B8AA781CFD0DB64092 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -13841,15 +13850,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FCCF65418A0EFC8C339903B6DEBF0FF2 /* Build configuration list for PBXNativeTarget "N64DeltaCore-N64DeltaCore" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 157E49C46E51B2A4B3A0A92FF290CB97 /* Debug */, - 46E59AEA8F9BBFC46341D0AB0A41EEED /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; FD9752023347B2D0CD6EE673AA7F64BD /* Build configuration list for PBXNativeTarget "SNESDeltaCore-SNESDeltaCore" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-umbrella.h b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-umbrella.h index fcb1a77..1fa09e4 100644 --- a/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-umbrella.h +++ b/Pods/Target Support Files/N64DeltaCore/N64DeltaCore-umbrella.h @@ -12,6 +12,7 @@ #import "N64DeltaCore/Types/N64Types.h" #import "N64DeltaCore/Bridge/N64EmulatorBridge.h" +#import "N64DeltaCore/N64DeltaCore.h" FOUNDATION_EXPORT double N64DeltaCoreVersionNumber; FOUNDATION_EXPORT const unsigned char N64DeltaCoreVersionString[]; diff --git a/Pods/Target Support Files/N64DeltaCore/ResourceBundle-Mupen64Plus-N64DeltaCore-Info.plist b/Pods/Target Support Files/N64DeltaCore/ResourceBundle-Mupen64Plus-N64DeltaCore-Info.plist new file mode 100644 index 0000000..99a40ff --- /dev/null +++ b/Pods/Target Support Files/N64DeltaCore/ResourceBundle-Mupen64Plus-N64DeltaCore-Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh index aebe069..e9457d5 100755 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh @@ -104,7 +104,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then install_resource "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle" install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/melonDS.bundle" - install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/Mupen64Plus.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle" install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTCollectionViewCell.xib" install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTPlaceholderView.xib" @@ -118,7 +118,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then install_resource "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle" install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/melonDS.bundle" - install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/N64DeltaCore.bundle" + install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/Mupen64Plus.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle" install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTCollectionViewCell.xib" install_resource "${PODS_ROOT}/../External/Roxas/Roxas/RSTPlaceholderView.xib" From 1f6ad51c999a6bc8bac6407c6b38f5b4156d98a0 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Thu, 23 Apr 2020 18:04:37 -0700 Subject: [PATCH 023/105] Adds support for 8 character NES Game Genie cheat codes --- Cores/NESDeltaCore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cores/NESDeltaCore b/Cores/NESDeltaCore index 195c89c..714c9fc 160000 --- a/Cores/NESDeltaCore +++ b/Cores/NESDeltaCore @@ -1 +1 @@ -Subproject commit 195c89cfe2dde99f10ccdcc503088c68d9a27478 +Subproject commit 714c9fc711253202bab879e464108e77ea8f0074 From ec6fb6c03cfa65ed1285ca3c69bb8e5516183b94 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Fri, 24 Apr 2020 13:20:54 -0700 Subject: [PATCH 024/105] Fixes N64 games crashing due to stripped library symbols --- Delta.xcodeproj/project.pbxproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 8674be4..0594bda 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -1336,6 +1336,8 @@ PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = BETA; SWIFT_OBJC_BRIDGING_HEADER = "Delta/Supporting Files/Delta-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -1362,6 +1364,8 @@ PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; PROVISIONING_PROFILE_SPECIFIER = ""; + STRIP_INSTALLED_PRODUCT = YES; + STRIP_STYLE = "non-global"; SWIFT_OBJC_BRIDGING_HEADER = "Delta/Supporting Files/Delta-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 5.0; From a9a2819b1971ad64a5779e3302068ef6f5290285 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Fri, 24 Apr 2020 13:25:01 -0700 Subject: [PATCH 025/105] Adds Export Save File option to game context menu --- .../GameCollectionViewController.swift | 53 ++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/Delta/Game Selection/GameCollectionViewController.swift b/Delta/Game Selection/GameCollectionViewController.swift index 8e27091..dbe5319 100644 --- a/Delta/Game Selection/GameCollectionViewController.swift +++ b/Delta/Game Selection/GameCollectionViewController.swift @@ -69,6 +69,7 @@ class GameCollectionViewController: UICollectionViewController private var _renameAction: UIAlertAction? private var _changingArtworkGame: Game? private var _importingSaveFileGame: Game? + private var _exportedSaveFileURL: URL? required init?(coder aDecoder: NSCoder) { @@ -434,6 +435,10 @@ private extension GameCollectionViewController self.importSaveFile(for: game) } + let exportSaveFile = Action(title: NSLocalizedString("Export Save File", comment: ""), style: .default, image: UIImage(symbolNameIfAvailable: "tray.and.arrow.up")) { [unowned self] _ in + self.exportSaveFile(for: game) + } + let deleteAction = Action(title: NSLocalizedString("Delete", comment: ""), style: .destructive, image: UIImage(symbolNameIfAvailable: "trash"), action: { [unowned self] action in self.delete(game) }) @@ -442,7 +447,7 @@ private extension GameCollectionViewController { case GameType.unknown: return [cancelAction, renameAction, changeArtworkAction, shareAction, deleteAction] case .ds where game.identifier == Game.melonDSBIOSIdentifier: return [cancelAction, renameAction, changeArtworkAction, changeControllerSkinAction, saveStatesAction] - default: return [cancelAction, renameAction, changeArtworkAction, changeControllerSkinAction, shareAction, saveStatesAction, importSaveFile, deleteAction] + default: return [cancelAction, renameAction, changeArtworkAction, changeControllerSkinAction, shareAction, saveStatesAction, importSaveFile, exportSaveFile, deleteAction] } } @@ -684,6 +689,29 @@ private extension GameCollectionViewController } } + func exportSaveFile(for game: Game) + { + do + { + let illegalCharacterSet = CharacterSet(charactersIn: "\"\\/?<>:*|") + let sanitizedFilename = game.name.components(separatedBy: illegalCharacterSet).joined() + "." + game.gameSaveURL.pathExtension + + let temporaryURL = FileManager.default.temporaryDirectory.appendingPathComponent(sanitizedFilename) + try FileManager.default.copyItem(at: game.gameSaveURL, to: temporaryURL, shouldReplace: true) + + self._exportedSaveFileURL = temporaryURL + + let documentPicker = UIDocumentPickerViewController(urls: [temporaryURL], in: .exportToService) + documentPicker.delegate = self + self.present(documentPicker, animated: true, completion: nil) + } + catch + { + let alertController = UIAlertController(title: NSLocalizedString("Failed to Export Save File", comment: ""), error: error) + self.present(alertController, animated: true, completion: nil) + } + } + func changePreferredControllerSkin(for game: Game) { self.performSegue(withIdentifier: "preferredControllerSkins", sender: game) @@ -909,3 +937,26 @@ extension GameCollectionViewController return self.collectionView(collectionView, previewForHighlightingContextMenuWithConfiguration: configuration) } } + +extension GameCollectionViewController: UIDocumentPickerDelegate +{ + func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) + { + if let saveFileURL = self._exportedSaveFileURL + { + try? FileManager.default.removeItem(at: saveFileURL) + } + + self._exportedSaveFileURL = nil + } + + func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) + { + if let saveFileURL = self._exportedSaveFileURL + { + try? FileManager.default.removeItem(at: saveFileURL) + } + + self._exportedSaveFileURL = nil + } +} From 610697be5d6984fb001e1e52a5f1c78299aba821 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 27 Apr 2020 12:25:55 -0700 Subject: [PATCH 026/105] Updates Harmony to add future backwards compatibility Harmony will now persist properties from future model versions and later upload them, allowing for basic backwards compatibility. --- Delta.xcodeproj/project.pbxproj | 2 + Delta/Database/DatabaseManager.swift | 6 + External/Harmony | 2 +- External/Roxas | 2 +- Podfile.lock | 2 +- Pods/Local Podspecs/Harmony.podspec.json | 5 +- Pods/Manifest.lock | 2 +- Pods/Pods.xcodeproj/project.pbxproj | 2156 +++++++++-------- .../xcshareddata/xcschemes/Harmony.xcscheme | 67 + .../Pods-Delta/Pods-Delta-resources.sh | 2 + 10 files changed, 1172 insertions(+), 1074 deletions(-) create mode 100644 Pods/Pods.xcodeproj/xcshareddata/xcschemes/Harmony.xcscheme diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 0594bda..0a881c0 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -954,6 +954,7 @@ "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.bundle", "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle", "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld", + "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Migrations/HarmonyToHarmony2.xcmappingmodel", "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/melonDS.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/Mupen64Plus.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle", @@ -969,6 +970,7 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GBCDeltaCore.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Harmony.momd", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/HarmonyToHarmony2.cdm", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/melonDS.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Mupen64Plus.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/NESDeltaCore.bundle", diff --git a/Delta/Database/DatabaseManager.swift b/Delta/Database/DatabaseManager.swift index 1358e29..1f689fd 100644 --- a/Delta/Database/DatabaseManager.swift +++ b/Delta/Database/DatabaseManager.swift @@ -63,6 +63,12 @@ extension DatabaseManager { guard !self.isStarted else { return } + for description in self.persistentStoreDescriptions + { + // Set configuration so RSTPersistentContainer can determine how to migrate this and Harmony's database independently. + description.configuration = NSManagedObjectModel.Configuration.external.rawValue + } + self.loadPersistentStores { (description, error) in guard error == nil else { return completionHandler(error) } diff --git a/External/Harmony b/External/Harmony index e81864c..1739ef4 160000 --- a/External/Harmony +++ b/External/Harmony @@ -1 +1 @@ -Subproject commit e81864c6204f7c5c408d045f872f0088b599e785 +Subproject commit 1739ef47732f2cecbf58f3a2aef40ecf5f844d2b diff --git a/External/Roxas b/External/Roxas index 08c92a5..c152110 160000 --- a/External/Roxas +++ b/External/Roxas @@ -1 +1 @@ -Subproject commit 08c92a5d255e9418fe0450375e8403d40d7d48d6 +Subproject commit c152110888bc420e39e68c4d97af168cbfe9cbb2 diff --git a/Podfile.lock b/Podfile.lock index dfaf3e2..c0f7528 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -136,7 +136,7 @@ SPEC CHECKSUMS: GoogleSignIn: 7ff245e1a7b26d379099d3243a562f5747e23d39 GoogleToolboxForMac: 800648f8b3127618c1b59c7f97684427630c5ea3 GTMSessionFetcher: cea130bbfe5a7edc8d06d3f0d17288c32ffe9925 - Harmony: 1978345dcf69ce6cf4c94c07405ebf01b7d6fe28 + Harmony: cea514db17c41c22f78f54b17d2135935b5e9b96 MelonDSDeltaCore: d6e0953bd475a17848964b4fc48bf0e838617984 N64DeltaCore: 7d176e01443fa138bdfc79ad908c78f271f3e0a7 NESDeltaCore: 41ab438dd78d51d4636aacb7d9a7336ea3d4728c diff --git a/Pods/Local Podspecs/Harmony.podspec.json b/Pods/Local Podspecs/Harmony.podspec.json index a5456ec..e2db144 100644 --- a/Pods/Local Podspecs/Harmony.podspec.json +++ b/Pods/Local Podspecs/Harmony.podspec.json @@ -17,7 +17,10 @@ "source_files": "Harmony/**/*.{h,m,swift}", "public_header_files": "Harmony/Harmony.h", "header_mappings_dir": "", - "resources": "Harmony/**/*.xcdatamodeld", + "resources": [ + "Harmony/**/*.xcdatamodeld", + "Harmony/**/*.xcmappingmodel" + ], "dependencies": { "Roxas": [ diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index dfaf3e2..c0f7528 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -136,7 +136,7 @@ SPEC CHECKSUMS: GoogleSignIn: 7ff245e1a7b26d379099d3243a562f5747e23d39 GoogleToolboxForMac: 800648f8b3127618c1b59c7f97684427630c5ea3 GTMSessionFetcher: cea130bbfe5a7edc8d06d3f0d17288c32ffe9925 - Harmony: 1978345dcf69ce6cf4c94c07405ebf01b7d6fe28 + Harmony: cea514db17c41c22f78f54b17d2135935b5e9b96 MelonDSDeltaCore: d6e0953bd475a17848964b4fc48bf0e838617984 N64DeltaCore: 7d176e01443fa138bdfc79ad908c78f271f3e0a7 NESDeltaCore: 41ab438dd78d51d4636aacb7d9a7336ea3d4728c diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 357eb0e..5f37f63 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -46,16 +46,15 @@ 00CD0FD425B91AE7BB08048D06C70828 /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50CB8263181606A93C7C4DB62B954BCC /* GameViewController.swift */; }; 00D6A91F2372896AFCBADBB569CB61B2 /* GTLRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 9209A157558D6C7A57364B029B93BF01 /* GTLRUtilities.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 00F5F28E77C7BB433873D883D32DA464 /* profile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E69C29F29CC024AF25B51D0D32627EE /* profile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 011A7D5944D78BBDB6D70E337DF496B9 /* UITableViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DABB5ACFBF2E1DA35CD42F620E46F1 /* UITableViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 011C0272A367FAF487C0387072D80C35 /* sound.h in Headers */ = {isa = PBXBuildFile; fileRef = CC08FCCCC5D573865D7ADF9FB0838E1D /* sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; 01590745A24092830F564E1E91398F1B /* cp1.h in Headers */ = {isa = PBXBuildFile; fileRef = F0308817B700E8598B67B8DC04CB453E /* cp1.h */; settings = {ATTRIBUTES = (Project, ); }; }; 01A810DA28D4CD0190DB127527310019 /* Context.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 108D3937640AD5EF672C23E5C9F1D052 /* Context.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 01BA691B21BFCA4E9DD73F0D1DE67D2B /* SwiftyDropbox-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AE215D47AD4C3E4C2C354C0C591C34C /* SwiftyDropbox-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 01C4F158AD89AC4C39C5DBD7E869107D /* F3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDB291BF8A6C2C5E7A503B53159F5FFE /* F3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 01C659C28AC0025A7B90A5DAC9C03637 /* RSTPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F23CEC53278E0CEB1614056B5D4F8C /* RSTPlaceholderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 01D25C020EDD6D8936111118CDB7CFA3 /* VertexArray.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8E28B73D51B4BAB2720A6765199517D2 /* VertexArray.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 022D019E6C9832E777458A8455F88B85 /* ColorBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 07D0EF9DC873BCE8C132664936AA4D2C /* ColorBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; 023363AF2CC96131696B58AD3ACA2A36 /* ftvalid.h in Headers */ = {isa = PBXBuildFile; fileRef = 191702D253506FDF5363FBCC895772FA /* ftvalid.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 02727D92764378FFAED7FA05551AB810 /* UsersCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F53A98CDF1BC90A1B45D603F7DC3BC7F /* UsersCommon.swift */; }; + 0269DCE3BE83596C812DA63AB330A29C /* PaperRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D72BB4EABA02D0C40C9847B11342161 /* PaperRoutes.swift */; }; 02C658DADAB5B70ABCF4CFE93FDFFEAD /* ClipPolygon.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C0978994ADA13ACDD55B35B73CF516B /* ClipPolygon.h */; settings = {ATTRIBUTES = (Project, ); }; }; 02D9C3D0F0992ED6738D080A0E1CC9E1 /* GTLRFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = 947D4308D4F2D06F37BC4881F1637F48 /* GTLRFramework.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 033870A05FAC3AAD229C5B42B6664AB5 /* readwrite.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9403FE981B76C994D3645B33292EE8 /* readwrite.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -65,16 +64,16 @@ 0418874BC3FB8854951251864FB63C4E /* NstBoardIremH3001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83F4160DB27DAF789E0C84F4BE223EAD /* NstBoardIremH3001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 04451D76D26FCAEFCA0947C747AA0AEE /* FramebufferTextureFormats.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ACDAD920571F82F0FDFF413996C187F /* FramebufferTextureFormats.h */; settings = {ATTRIBUTES = (Project, ); }; }; 04FA93674AA0B4947CA3DC85196D9EAC /* NstBoardBandai24c0x.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75A75028AFBA185D5D391D73DC4FE6AB /* NstBoardBandai24c0x.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 05013F5C3F8897B02CAC065EF3189E58 /* RSTRelationshipPreservingMergePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BECDD49D8123BEDD18D8163C335A153 /* RSTRelationshipPreservingMergePolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0514955DC0F673DF12A1317127CA45B3 /* Sound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8AE46FAE84F979857B31ACDC50F71617 /* Sound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0555BA242BE40B037BBB86A360F7D572 /* ftheader.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF22CB647ADB3D529D1C542345BB178 /* ftheader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 057F1BC44E23F2A56BC14C4742FCEA2B /* RSTDynamicDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C730E5915747302EDF3EC772425E5899 /* RSTDynamicDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 058508664EDB764D3709A2AB6EF6B252 /* N64Types.m in Sources */ = {isa = PBXBuildFile; fileRef = B9645A97F892996BB5BF51B8D0D43A0B /* N64Types.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 05C983AD8D917AFEE50E8F7C21A84323 /* SharingRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8888D8043BC735B8831AE2FB72C5DCE4 /* SharingRoutes.swift */; }; 05D3406A9CDB6F3CA3BA42733AD9B486 /* Sleep.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4A2ED9639F26522F182428771C311F1A /* Sleep.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 064F0446DD0F453314D4002599D238F5 /* RSTCellContentPrefetchingDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F361E120BFFD12C4731934DEC8344968 /* RSTCellContentPrefetchingDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; 067C84CE3338DB36FF1EC1A0D0D1A63F /* initstate.h in Headers */ = {isa = PBXBuildFile; fileRef = BBF6A7EF37190036ACC153A560EC7279 /* initstate.h */; settings = {ATTRIBUTES = (Project, ); }; }; 069E1D48DD81FE5B6A827810AD64B3F3 /* MFiGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0FE60C5CC43E6BEE71A9295033B18F2 /* MFiGameController.swift */; }; + 069F3362BE89D036DC6FB94F2DFAFA05 /* UITableView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45D29114CAD3548F307C7BA691260F25 /* UITableView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 06C79C3AE46910C8B5587D50C1E2B7AB /* af_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B73776B063CE08E7361FDE4C26CF904F /* af_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 06DC2503AAF54FB4B5D3B4606EC66F81 /* UploadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A684B9BC0FD9B61CE70469E6CF6BA3C /* UploadRecordsOperation.swift */; }; 06E4B39B70500AB74C837D9F65505FE2 /* WavFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 55871AB19F8B639CFD102F69EAED1E93 /* WavFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 06F04214E1DFA5C3662A6901F65DD3F6 /* inputgetter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C5BAA938FFA460E1B80ECB271C8B9D9 /* inputgetter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 07061CB34749ECA222E5A23CC2437521 /* GTLRBatchQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = B06418EA2C5657C3621FE94DE245B06B /* GTLRBatchQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -90,16 +89,18 @@ 08CBBE506F5F9C4F6B5FBA173182B627 /* NstBoardBtlDragonNinja.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0D2603FBE6D0E88895754984334C87D0 /* NstBoardBtlDragonNinja.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 08DB3EE7795392A4AD6CDA6911C4ADE8 /* NstBoardTaitoTc0190fmcPal16r4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BBD164DBFFAA1294217B9F595993108D /* NstBoardTaitoTc0190fmcPal16r4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 08F81E7ABB2B97675345FC04CA722FC8 /* TxCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6154AA0F4F3D72A490406941DDA56ECF /* TxCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 095ECDF5BCBCCC825E489471C3556732 /* RSTLoadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AC36AE82A4992804E6ECF7236E5ECA7 /* RSTLoadOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 09A56050F738852C24E48CAB1A12327F /* NstBoardKonamiVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0636E7B8F2E8F376A9BF6CEC67B0B615 /* NstBoardKonamiVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0A39D292E69CB8B887A05D02FACC6F9C /* eventloop.h in Headers */ = {isa = PBXBuildFile; fileRef = 761CB13BA65C677D14B6D3A3F75A9A73 /* eventloop.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0A3FA8250DCAA57E611E6433F084CE11 /* NstBoardFujiya.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6F58E0B7D553A24812938BBCA1D73D71 /* NstBoardFujiya.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0A689D0300DF61C54697C7A316AFF57C /* transferpak.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D36FB1E125F6A30F7E99925C34CD64 /* transferpak.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0A7F43CFFA49DD8651630CD5B766D2A3 /* NstImage.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 99AFEBCD0E127C34321505B630C49E92 /* NstImage.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0A8F400EFC014059D3B7C4546A572A06 /* RSTCollectionViewGridLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F33D3A6F44894D367D99FF4F1A9DD9C /* RSTCollectionViewGridLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0AA09DE9241869ECCCC26D4E11F357FF /* GBCEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 04CE2E235B10188704B563E18E7D532A /* GBCEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AB2650342D0DBACE8EA1FAB8469A577 /* UsersCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F53A98CDF1BC90A1B45D603F7DC3BC7F /* UsersCommon.swift */; }; 0AE2AA9CFBAB73BA390B8AB2BD339DCC /* SoundFileReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43281994AE91BE3DCE9CD0F6A87B1273 /* SoundFileReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0AE68C487359922B30E80D82CD556435 /* NstBoardBmcSuperVision16in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2098A1D3BBCAAFB3A5D52959C3751342 /* NstBoardBmcSuperVision16in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0AE7EA1277618FFEC475AF5B709DE97C /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = 3300F6B66FF14313A41952BEDB638D10 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0AF3327B2E8DAD5E22F00078A190D8C5 /* UIAlertAction+Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F8715F2E1CC86C7F667183E1D9CD888 /* UIAlertAction+Actions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0AF6C8D2C774E31DFF8C2F329C55027E /* freetype.h in Headers */ = {isa = PBXBuildFile; fileRef = F4BFC00E618DE0EF34A6FA01F88AA209 /* freetype.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0B8D0DF76E87D68894A0DC0C4DEF1911 /* KeyboardGameController.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 40B5D84ECD183C3EF78823E7CF938746 /* KeyboardGameController.deltamapping */; }; 0B8F4F7E856D19C415D98385A3B30B56 /* plugins_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 062F18B3DCFB2719520C631367293BC3 /* plugins_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -107,39 +108,41 @@ 0BC29A4D141721CED777951AFB6285DC /* GTMSessionFetcher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE8DDA1C621BC7547ED906A580F98278 /* GTMSessionFetcher-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0BD03ECE3582C9B7D5F6B0736FA9827E /* assem_arm.h in Headers */ = {isa = PBXBuildFile; fileRef = 3D9DAB0BA1335AAA8FDA3EB6A06284D7 /* assem_arm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0BE698943DB014EA608C05BB9808B1D8 /* GLideN64.ini in Resources */ = {isa = PBXBuildFile; fileRef = 3A13B4329882F5A80C1C1326BB560732 /* GLideN64.ini */; }; + 0C218BC626BAD31F635F5C4578073C97 /* RemoteFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50121691E9EC013F90B1E17BE7DC34D2 /* RemoteFile.swift */; }; 0C31BE17D771F1D2E7A7CAF0ECDE6E10 /* CombinerProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = E66B9B91DB7E04516C8FF716DE48D701 /* CombinerProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0C3F4F7359E712E4692A58EE52C2B9A5 /* SwiftyDropbox-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AE215D47AD4C3E4C2C354C0C591C34C /* SwiftyDropbox-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0C70B09E1F82E11FDD182E61DD98BFF2 /* convert.h in Headers */ = {isa = PBXBuildFile; fileRef = D709E423B3398EC39A98F76319C9374B /* convert.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0C8CEB39DBD171C39AD70F1D22B0D8F2 /* NstBoardMmc5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0C864A48A744E0C4E9B10806107515B8 /* NstBoardMmc5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 0CC4033E6747ED10E9BC142192F6AD39 /* NSString+Localization.m in Sources */ = {isa = PBXBuildFile; fileRef = FB5E73C8C7F0D5AB282E9A29954B036F /* NSString+Localization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 0CF5A2778ED0B5C3DCBD3B8E89222E3D /* CombinerKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 6658EE9B0A19441E97A1284103D6A0A2 /* CombinerKey.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0CFF34DB03E3EA22AFCA4CE58940B8CC /* RDP.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EF1745163AD82481D56DE9A59BA24BA /* RDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0D4B0761D98B1D32B5B34C414181316E /* DeltaCoreProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C65F0AD8F6ACAD0EA3F1D732708E85 /* DeltaCoreProtocol.swift */; }; + 0D6B6227CBF123C4682BB5363A8C3B0E /* RSTOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B9083EB242665508C97535A7311874C /* RSTOperationQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0D6BF9F58172028164D17C031B1FCFF6 /* GTMNSString+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = BBE10799564D3547139EFF5CE894CF5A /* GTMNSString+URLArguments.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0DAA2A9EA3C7BE275C199CE4FC0F8660 /* RSTHasher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ABC265715DD434AE88383B1CAD97215 /* RSTHasher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 0D88B9C8E59F2638AEDE1567EE30F54E /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DBF4ED0ED286CE1C63A3C12FC9C9EE8 /* Operation.swift */; }; 0DBB61B8C2133BA49617D71CB72C59DC /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FE4B65AFEE414DDF2934ED450332C42 /* Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0DE37FB9E50E1562BF60D5BFA8252BA7 /* RSTArrayDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F336E2D3C53A29FF9A360C8ECDF43F2E /* RSTArrayDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DC975985B8F1467A6B707AC4E1C2926 /* RSTArrayDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F336E2D3C53A29FF9A360C8ECDF43F2E /* RSTArrayDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0DE448C2801C7EEC1F271518FEE0F2CA /* tttables.h in Headers */ = {isa = PBXBuildFile; fileRef = E332D1A2E036E2DF42439D6ABAD4A55C /* tttables.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0DF527167B90D324B802A56685FF778A /* DriveService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87FB4717B06B3A156717213C654A8EDF /* DriveService+Versions.swift */; }; 0DF5869D6226F5F40411590BD059BBC6 /* svprop.h in Headers */ = {isa = PBXBuildFile; fileRef = B1080C9D0AB5BC601BD4F16A50CC842F /* svprop.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0E1533213CE06AD25D7A467D0F3AC3F7 /* scoped_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = AC89CB7A34B3B2FF8DBF5BB0E234D8A9 /* scoped_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0E434E17E33AA0A6B8BB202C4684EDD8 /* osd_element.h in Headers */ = {isa = PBXBuildFile; fileRef = DB20DDFBF1AF645CE61ADF09F5974137 /* osd_element.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0EA9A720C8B526235F11CD24A85DCB72 /* svmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F261E13B1AC030CBAE70448ABC2DD8F /* svmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0EC9CB34CA3F574AE5B715EB1DD9DF8C /* DropboxTransportClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E2C328E034800C2CB26F5B94B12DDF6 /* DropboxTransportClient.swift */; }; - 0ECA6110DA3B0588B02D33C1E337CDF1 /* Result+Success.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87263EF46CC8CB36CF6CC2C7E1D63E62 /* Result+Success.swift */; }; - 0EDDADFF86CE8E23349B8C17EAB86C98 /* SeenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0CD3AC5CF344D777C591A59C269664 /* SeenState.swift */; }; 0EF4F8570AB47B8BDEF7F3B3FDFE3457 /* boolean.h in Headers */ = {isa = PBXBuildFile; fileRef = 73DC986430887FFB58433385B29BACE2 /* boolean.h */; settings = {ATTRIBUTES = (Project, ); }; }; 0F1030089F00486F17ED78F7651056AE /* SNESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D12A00DD051835A984A58D6DD44BDD4 /* SNESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0F211DE5A0CB33C44EB80F3804272933 /* RecordRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8569A924AD407A2A1010E75E282E1BBE /* RecordRepresentation.swift */; }; 0F2AAC05FC0C90D1437629B2DD879D83 /* NstCartridgeUnif.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2541FACE6856FBF20F718BF93515A799 /* NstCartridgeUnif.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 0F35EC2E4E3C5B5025464323CDA17109 /* NstBoardNtdec.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD746E8386BFDF6E8F7B293E9EA93E17 /* NstBoardNtdec.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 0FA645C266AD8B65003164B98884497E /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23C9343FC4FB0FD507A750B3EF697747 /* Contacts.swift */; }; 100055E823D8664CA3967CA7223DE414 /* 65c816.h in Headers */ = {isa = PBXBuildFile; fileRef = BFF9BE4B997D71AFFD82B6E8CBC06B97 /* 65c816.h */; settings = {ATTRIBUTES = (Project, ); }; }; 105D3D6F32BB8EBCAADCB34AEBDED112 /* glsl_FXAA.h in Headers */ = {isa = PBXBuildFile; fileRef = DC2E2AF3A950FAF5326EEE74CDCD4D10 /* glsl_FXAA.h */; settings = {ATTRIBUTES = (Project, ); }; }; 106D77956F70BC0E0A55EDAFE9264B53 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = E474FB45FC3DD9C8E04C72D076AC8DFC /* Data+Serialization.swift */; }; - 109639DF3F0EF7199D502AE257551180 /* Harmony-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 238AA279772C644CC943D63E37C7AA3A /* Harmony-dummy.m */; }; 1096C2B586E2EA8769B5E346F337BD89 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 7C4240EE1FE35FE23E5975F8DCB23A33 /* Standard.deltaskin */; }; 114E51C1D45FB0F540E2AC73423548A6 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 68776D658C9400B8766FD395BBD08F63 /* Platform.h */; settings = {ATTRIBUTES = (Project, ); }; }; 11654A14DAFB94587890A4B673D7B7C9 /* SoundRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1DF37E36CD72A2D07A3FCAD216576B53 /* SoundRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1174921EF757A0343B72D1D8489028E2 /* tlb.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B888530E83F42860A13FCEBBC74F753 /* tlb.h */; settings = {ATTRIBUTES = (Project, ); }; }; 119EB4FFA02590EA2498963ECEC6707B /* RenderTexture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E3E937AC710B3BDEE100401BE7BEFD62 /* RenderTexture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 11B1E455943227B7FDE64E7910BE6D76 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB7F32ED8575A87699DF593661DBD4B /* Data+Compression.swift */; }; + 11E44019D3E812832BFAA8018A19F6C6 /* UICollectionViewCell+Nibs.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7FFE29C3C4FE3726FAB1DB3F1C4F3F /* UICollectionViewCell+Nibs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 121447EDCD87D030260B53FA7E426098 /* ConfigManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 558ABB8E63AEB6155C40A551D88F9123 /* ConfigManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 122A53C6A8CE37059A0CF1D111472CDD /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F6D110BCE90D1CF941FD0145CBB7DD6C /* SDImageCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 124DCEE18B5406C095B74C9B178BD647 /* NstBoardTxcMxmdhtwo.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 85245105BDC64E12FADEF30BE855FEC1 /* NstBoardTxcMxmdhtwo.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -147,9 +150,8 @@ 128CFECF46B7047470D018C987584ACD /* WifiAP.h in Headers */ = {isa = PBXBuildFile; fileRef = D6152F7397477BE4F0ED9C7788792005 /* WifiAP.h */; settings = {ATTRIBUTES = (Project, ); }; }; 12A4214E2C9B796CA238022735B51FF6 /* FullscreenResolutions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4730257B4F5FB617F71989B24D9EF907 /* FullscreenResolutions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 12AEC0B4C35E8BDE4366D57CE6805481 /* Blob.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20BCD689A6CAE5B82E9CC42375BA7AE7 /* Blob.swift */; }; - 12D7AFC87809B7DB47930F38ACBCF03E /* TeamLogRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEBCE82463719FE6476D577E1F4423FD /* TeamLogRoutes.swift */; }; + 12B839B9513294FF8F939FA6867BD61C /* Harmony.h in Headers */ = {isa = PBXBuildFile; fileRef = 797F664369496B12E69C8B551FACBF47 /* Harmony.h */; settings = {ATTRIBUTES = (Project, ); }; }; 12EB6F66719644A22679C7B30EA4F9DA /* GTMSessionUploadFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AB3CC30BCD19485A7A87DB2D78E2BA1 /* GTMSessionUploadFetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1320CB37F0E2606479AD7BAB5C56E7D3 /* RemoteFile+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AF44E99CDEC34FBD91AFEE4DACFD88A /* RemoteFile+File.swift */; }; 132DE130DC8D504D3672FE0A8438E82F /* GBCTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 708D9E956CB287CC2879FE1061D1F6C5 /* GBCTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 134D8E34601F861AC001CCDF57026CE4 /* NstBoardCxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 698C748E342E77F1EA0CBA79A28CAC0B /* NstBoardCxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 134DD842654C8C2FCB275A0F6FFE1526 /* opengl_ColorBufferReaderWithEGLImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B0AD671A8AD882845CE216B6821E50B /* opengl_ColorBufferReaderWithEGLImage.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -157,7 +159,6 @@ 13A70EB0D59A7AC78B914E7961428A3D /* NstBoardQj.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7CD443BDF938671B3B442333D9A63ED0 /* NstBoardQj.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 13BCB029A86A07D6CFAAED34C679E4DB /* pngconf.h in Headers */ = {isa = PBXBuildFile; fileRef = FF7E6516A5BEBD6103C2071A1BA86E73 /* pngconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; 13D16E5DE40CEFBC652A172492A4CE27 /* NoiseTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 49C63527B0BFABA381E737722D9FCB11 /* NoiseTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13DDDEE8E9A5F0E7D4767A7E2438F61E /* NSManagedObject+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD4A28E12A0F4CA5FB5F949171A2104B /* NSManagedObject+Conveniences.swift */; }; 13F65C4323724B6C1BF73933A188685E /* mempak.h in Headers */ = {isa = PBXBuildFile; fileRef = A81D595F5493BB4BD6C6AED2B993C0B6 /* mempak.h */; settings = {ATTRIBUTES = (Project, ); }; }; 14275531D4F7CDD462D18A3DE8962F9D /* instructions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DDB31BEBA1AF6B8AA83AFE0B4A2D7EE /* instructions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 14363C965EF433EBD28CBF68938C6441 /* SPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 12535108C24D1C6BADF6FB802CB39A5F /* SPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -168,7 +169,7 @@ 1522B412F2369D9914CB39001A148BC8 /* glsl_CombinerInputs.h in Headers */ = {isa = PBXBuildFile; fileRef = FC3273B92BA8458C348A8240AB0C67AE /* glsl_CombinerInputs.h */; settings = {ATTRIBUTES = (Project, ); }; }; 153188A806D2A1F337D4F09283D8C8FD /* NstBoardBmcSuperGun20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F021EBB9B583D41D119B66FBC95F7F2C /* NstBoardBmcSuperGun20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1541CD75ED87DD98D3FB227978648F92 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B8AF793D67661D01A11B1A56931BA03 /* NSData+ImageContentType.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 15631406F1349925694F775193DCE3B8 /* DropboxService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 636321611157247A4B100E3ACC431B70 /* DropboxService+Versions.swift */; }; + 154DCE7B68E1D286E5EE1AA705AB6BAF /* DropboxService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA7EF136E451A89F311BC3EB6F92C187 /* DropboxService+Files.swift */; }; 159AEB925F329623B682DF445F17309B /* SoundTouch.h in Headers */ = {isa = PBXBuildFile; fileRef = 086BC7A1837005C56E8908CBF2465274 /* SoundTouch.h */; settings = {ATTRIBUTES = (Project, ); }; }; 15BE84A95EAC7ED13036375B2BB3409C /* Log_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6EB8CD619182507E4AEFF0FD1231295 /* Log_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 15E662928B35B0C5E956E292F040EF08 /* RSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0263597CCE16095F0BA7CA33F49B26BA /* RSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -181,14 +182,13 @@ 174F4F23259306B5ECEB19D6FAE4FE93 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = 122B792B0EAAF896926591B297C9D30D /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; 175C9AE704D01C600031D567C80BB91A /* NstLog.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2D2882065898FB0E38AD32AA9BC8E931 /* NstLog.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1763806549E7B189A1B7D629CD271BDC /* NstVideoFilterNone.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B6460A6DCAB66445786D1832B9B7D54A /* NstVideoFilterNone.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 188C27A5024641883B67EC17C1AA6995 /* FetchRemoteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60FB49D244425C934B22DB89FE9F68AB /* FetchRemoteRecordsOperation.swift */; }; 18A170DDE02E7B4C59A58B5C333487D5 /* NstApiCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7A23A59045CAA0A03697397632CF3A5B /* NstApiCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 18E5D24C8847A14DE25CC9E73B28CBD5 /* Globals.h in Headers */ = {isa = PBXBuildFile; fileRef = BB49743C9C35F2C946022473E1E84595 /* Globals.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 191666F77F27F27AE3A3AF8B1DC00E36 /* RSTArrayDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BABD1CEB4B6CA6AEBC4C4B2ED3B1C53E /* RSTArrayDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 192D121D3A8C6AE6BA5A7AF2D0CDC952 /* SoundStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48BF55C9520932E61BA7E91D0DE78B47 /* SoundStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 193424E7818DE3CC415F1ABA7BDA5044 /* OGLRender_3_2.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF0BB22A90E877C1E14A623DE51DD25 /* OGLRender_3_2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1956E058934AF8327F7D63A7CF9FCD11 /* TxHiResCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FCA829A51AC7996EB15AC022B591C7AE /* TxHiResCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 195CAEC55D7B3D6D31D6DF39B4123E29 /* NstBoardAveNina.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D5D7C859DA53707D68A0C6096E4FD656 /* NstBoardAveNina.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1980201958ED3367F3828BC226C5506A /* RSTTintedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 327910F0090992C6E3CBE5627E621EB3 /* RSTTintedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 1989138BFE55C51C2E1C1D1D3921CD01 /* libretro_vulkan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A88ADF5CB822A0ABF0CDD1E4D68BAAE /* libretro_vulkan.h */; settings = {ATTRIBUTES = (Project, ); }; }; 19A2BFBA669411936E7BDFC0D05C4701 /* rateest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D74E106D389811B1BA21826E9E3C690 /* rateest.h */; settings = {ATTRIBUTES = (Project, ); }; }; 19AE6DE6691A392520AF008719995124 /* armcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 1615D09DB3F681C62200592953856E68 /* armcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -200,6 +200,8 @@ 1A87A2F68523FA26D625BEC658965C81 /* Pods-Delta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F8D603EBE941AC871B0A2F47AD5B6D5 /* Pods-Delta-dummy.m */; }; 1A9E0A5933F001BD9AC823B4EEF7415A /* RTC.h in Headers */ = {isa = PBXBuildFile; fileRef = 311F5E992C4184B1925C4E380CBBEFB5 /* RTC.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1AAB4E66BB2F67D75ED31A969FB90445 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E17A40A5122F984FE431D21753C8CF06 /* Alamofire-dummy.m */; }; + 1ACF2B3ED98CEF372FE3269E74396C1E /* AuthRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E2C78A8799FD3F430CD405874430028 /* AuthRoutes.swift */; }; + 1AD22F54F483DC2B1C4926E75252C477 /* FetchRemoteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C9D8CA40B82EB0DF55E9C6E404421E2 /* FetchRemoteRecordsOperation.swift */; }; 1AF7F4C36F9A40FA21DEFFBDDB324630 /* opengl_BufferedDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = C129B80E9CC6B64D0600B9A46648ED8B /* opengl_BufferedDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1AF87E34A2309B096AE662A3F0A54538 /* SocketHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AAD25B7136752E5F978B2EA8A9F1B2C7 /* SocketHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1B03CF4D7E9A0CF1B1A5C0DFAB8B0DD9 /* ButtonsInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F9A0594B477E44DA3CB74E54DD67ED /* ButtonsInputView.swift */; }; @@ -208,6 +210,7 @@ 1B2BB2FEF328AF927516BB5185869A9E /* CheatProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC29261FDE2973B2D6B6F1E62024A0A9 /* CheatProtocol.swift */; }; 1B8E1324EF162AD35B1923FE3BC32753 /* NstBoardJalecoJf11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E8D1644FE6C9B9EA40479CBCFD2D7CC0 /* NstBoardJalecoJf11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1B9C1EC85B450C90FA2A873635893FE8 /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 46834904D33267E3CBEE319642FFC703 /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1BA4D4603B19B50F04900B7E9882ACDD /* RSTNibView.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A24856C0FCE10AA34185E05096752B /* RSTNibView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1BA51CA49FF3BF6647ECEB45F30364BA /* NstBoardBtlT230.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD957EF417E4ED855F413792CFADBB28 /* NstBoardBtlT230.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1BF72388F9052C123EADC996D4D33C47 /* stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F066AA72AF013DB424E69E221FDA626 /* stream.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1C47B242A0B80613D72DA6089181905C /* DMA.h in Headers */ = {isa = PBXBuildFile; fileRef = 72DF6D71D0B2650FA29881ABB3113610 /* DMA.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -215,15 +218,14 @@ 1D2B1F39203622F4CF4398DF89FA1D19 /* workqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D398DE570B23AC84F4DA4086B43F5E /* workqueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1D3D48B74FB7DC35F5A27D2E4F8EF530 /* NstInpPartyTap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C6D50BD15001580ABEF75FEE0D3BF80F /* NstInpPartyTap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 1D46D2D75449D644B538A6227E8E17B1 /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C7894842679F86AEA25BABD02717D75 /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1DB6F3BD942AB6C506FA3D02C3569721 /* RSTNibView.h in Headers */ = {isa = PBXBuildFile; fileRef = 07A24856C0FCE10AA34185E05096752B /* RSTNibView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D4ED2614A13819F07573D121137C67D /* NSPredicate+Search.m in Sources */ = {isa = PBXBuildFile; fileRef = 558BFA270FA2F23C320E11E090A7662E /* NSPredicate+Search.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 1DC7AB00CF86DEB9192BBD6BF1F049CB /* GTLRDuration.h in Headers */ = {isa = PBXBuildFile; fileRef = A73E1E700670A66A2AE2A03B799E23EF /* GTLRDuration.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1DC9D83D5C3C27C865626FDC47FFA727 /* NstBoardHes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9A208B7D6A17B5E6210F640474730F8 /* NstBoardHes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 1E0FB1C6C9A7707FB6EBF44919406652 /* RSTFetchedResultsDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3354FC02362F1AAC06FABFDAB6FC1E92 /* RSTFetchedResultsDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 1E1F3E6F985575475CEC5C5627B10979 /* video.h in Headers */ = {isa = PBXBuildFile; fileRef = 42B13B5F43FDB8941F1473AB0E24A54D /* video.h */; settings = {ATTRIBUTES = (Project, ); }; }; 1EE8CE815DB7AB1FE9B3284530CDE68B /* MemoryInputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D86A59B7F6D5BB8BCCA5F180F29A6656 /* MemoryInputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F30DD02CA191CAE3D0B657F89B4F11F /* RSTHelperFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EE40C178D686A2BE9C93C6CF7FAE736 /* RSTHelperFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1F0752A2B2AFA37657C7E9DEE903FDD7 /* RemoteRecord+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4629E795167FBFC90DB98DD3B4D6104D /* RemoteRecord+File.swift */; }; 1F5C43C6770674DE9AF51FC93CA86659 /* NstBoardBtlPikachuY2k.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 560CD792E13012FE41D46832508B9D30 /* NstBoardBtlPikachuY2k.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F8209A656C45B0F07C3C1BF8E02279E /* MergePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD6E96B0D1C5E0989F7B0041FA8E00A /* MergePolicy.swift */; }; - 1FEE8B5284DC3C2F7D3F0E28E62961C1 /* Version+Revision.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7835A1CFAD26F5CED24394F9EB07DBD /* Version+Revision.swift */; }; 20738A51ED2E18EA336CB7990C6E2695 /* RSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AA8A343F392F57FB9A603A5E4378309 /* RSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2082D2B8075D150DF4AD47BA78A7A383 /* m64p_frontend.h in Headers */ = {isa = PBXBuildFile; fileRef = 104AE23A6B9AE10B8672C3AC578993CA /* m64p_frontend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 20963639D29C2627884D0C2039FA09D7 /* NstBoardUnlXzy.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CF5ED3F5DA210F1A19B3FCA09E19F679 /* NstBoardUnlXzy.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -231,25 +233,27 @@ 20B63E21A974BFB0E1318A2D18C7EC9A /* GraphicsDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 176F2C264C99888772BBC8A3F018B128 /* GraphicsDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 20FA839518ED4413C10C26D0729B844E /* NstBoardMmc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C96DE12BB01FD7E95F041A594A9910CC /* NstBoardMmc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 211FCE1E2E68BD0DF187B3BF5E2C2FA3 /* Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 923B6C52E65298DE9941024CC376A04A /* Config.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2142EF25BA86D8E45F8D64D568E6EC1B /* RecordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EADFD178252AAA39909DEEB10F01B2F9 /* RecordController.swift */; }; 21939F9BD51F63E11D098AD04138814E /* NstBoardSachenSa0037.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A9B8FEC06D5E475FC88E23200F3F9604 /* NstBoardSachenSa0037.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 21C32DAC350DB48E6E1F1BC1EF64B13F /* m64p_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 422A7E950D9644BA89560B6CC1EA1194 /* m64p_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; 21DECE82ADC97C8D836542939B04DF0A /* pngrutil.c in Sources */ = {isa = PBXBuildFile; fileRef = B9B009A6587C3A1C6BB0A1C024A18D38 /* pngrutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2202C76B0ACAFF39A84EE36584148743 /* NDSCart.h in Headers */ = {isa = PBXBuildFile; fileRef = DD81DFC2C331976AE715C460849BA6F6 /* NDSCart.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 230AE09B2E4FE8B7D8EF4C5B8D7D3893 /* Harmony-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DB0FA0FEE9F8742B64189133F4ACA01C /* Harmony-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 23522007F1E5D00C56884454695C1C4D /* NstBoardCaltron.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 65C8737805E86FA67C1579855D59CB64 /* NstBoardCaltron.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2365E217AA5534FC880E18EF3CE9CA69 /* transfer_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = A855A24013B4807694DE373F6612044D /* transfer_ptr.h */; settings = {ATTRIBUTES = (Project, ); }; }; 236FE18B9A85308D24405A2A9ECF2840 /* ARMInterpreter_LoadStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F04169937EFDD63A68B6EE345F1D4B17 /* ARMInterpreter_LoadStore.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2383152D6C4F84FD2EE8A437B924C1A5 /* NstBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7F445EA81E198A163B9A40E5A2E7653A /* NstBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 239B54D42D526085B60108A60B9A4787 /* TeamLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCBE6B3F37DD42BA03F9A43F4FBE4F4D /* TeamLog.swift */; }; - 23BF54CE4938EDB1F46BFB0E71C0C87B /* Roxas-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE6AED1C735BB477D425F99206A28D87 /* Roxas-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2445749976DF816DDE91EEB4096EFF8E /* rom.h in Headers */ = {isa = PBXBuildFile; fileRef = FB3BB654A06CE0DED1C9C6F934367DDF /* rom.h */; settings = {ATTRIBUTES = (Project, ); }; }; 245707596236331BCA745BDF2CCD3A79 /* NstBoardUnlEdu2000.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A8E224696F035B298DBC6B2B425DB4D9 /* NstBoardUnlEdu2000.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 24681274F8D57A98446AD3E532DEFA17 /* NstBoardMmc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EE1BB2C196F721EAE216A16D2C28F108 /* NstBoardMmc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 24A17315DA887C22096FC688E5D1B0A5 /* RSTCollectionViewGridLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ABD8BA817A5B6DB4C5828318ED97014 /* RSTCollectionViewGridLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; 24BAED760BC6B605CA667DBDA91632C2 /* NstBoardUnlWorldHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 879E33D39DED7A856D086D3BB622C65A /* NstBoardUnlWorldHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 24D0E194517BC0D2C60610DAEE83AD1F /* Textures.h in Headers */ = {isa = PBXBuildFile; fileRef = 1563D8DEE08EAA92574952B8B395A8AA /* Textures.h */; settings = {ATTRIBUTES = (Project, ); }; }; 24E48E4797697DEC9ADAE097FFFB2B06 /* TxQuantize.h in Headers */ = {isa = PBXBuildFile; fileRef = 164BA6410D467508F284ED6B400D342C /* TxQuantize.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2512B98F1D9B1CA71D8A6B802E86AAE3 /* m64p_debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = C6E1F81ACE1C72D6F43ECBBE4EB03E7C /* m64p_debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; 251309C65ABDD8242D058BB96CE242D0 /* ObjectHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F3152F7F819F4D7C0199707F1F5A9B8 /* ObjectHandle.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2515B71C2BB7B912246009EBC495E634 /* opengl_TextureManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E1E1C9F6B0A62DA55FDEB54FB33235C /* opengl_TextureManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2518BA672E36DDD6DE3A2DF758E20708 /* UIImage+Manipulation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D545FA281C697B8D7BEEC43C6652189 /* UIImage+Manipulation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 25254659998C756A3F648127FA733177 /* GTLRErrorObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 83D5738F79EFF74666BE041EC76ACDFA /* GTLRErrorObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; 252C1358FFB378B360373F29EB870618 /* cexcept.h in Headers */ = {isa = PBXBuildFile; fileRef = BE9ACCFEEB68EE550B45A78C99E79C3E /* cexcept.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2531408651F267E3005C180FC7BBCA68 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 80C066584D91192C2CB5B4E7606E8F20 /* Standard.deltamapping */; }; @@ -265,22 +269,25 @@ 264031FA160F74BD32D8EF9F30514C16 /* NstBoardSachen74x374.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8200E4FD4C7E3CC1AF2E0385FF61B65A /* NstBoardSachen74x374.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 265418D17A79E992D7091C6116D5D81E /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = C00543EF4F06FBFA511049B6A2E2638E /* pngget.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 269A8F0EF89DD3F63151C8785ABE7A51 /* GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE4DF888D759F8A1EFC289D72E1DF95 /* GameControllerInputMapping.swift */; }; + 26B8744B23358ABFC021A6F4AC671E05 /* RSTPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8643E93FD4508FE4A1F4CFE2588044 /* RSTPlaceholderView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 26BD486C68EF5B079CF50F132FB6EAC5 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 02BCDAEC84EB90FED96E1A7812F1B9CC /* Standard.deltamapping */; }; 26D84D2836C13B2D939D5A5E2B1BD47B /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD2701346D82207B53CC9EC541F8AB0 /* Schema.swift */; }; 2759C2F52CCBBBA9F7A243D31EC1D042 /* language.h in Headers */ = {isa = PBXBuildFile; fileRef = C2095BD846E0E2918CC6C26E739E147E /* language.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2795FDE9B8407649C0D0DA00EA13DDE4 /* RSTCellContentDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3827013A64806EC421D988347B05D5EB /* RSTCellContentDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; 27ABACC6A4783C9079079AD0599DB017 /* NstBoardSunsoft3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C021C2B8A573225A193057ADC5D4155F /* NstBoardSunsoft3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 27E12C031E1F193F89D7607F22242B8B /* NstBoardRexSoft.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5E0F87CCF191867B903270F7A2973CA2 /* NstBoardRexSoft.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 27E6E896B473FB2C6E22657C01C3F5C3 /* NstBoardBmcFk23c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EEC4678594429BB9CEE4C8F14CE8FB18 /* NstBoardBmcFk23c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 27E9618AB807EFBA9F6F713F8A3F9E38 /* TeamPolicies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A4B7B6EB4DB8A673532771B4AA8B264 /* TeamPolicies.swift */; }; 28010A4E02AFF7CA653853E5B0F63621 /* encrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 68A229662DE33DC9840D7CCB41582EA9 /* encrypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2819DC98C607DE278124727BA384A637 /* NstBoardMmc3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 599BB76DE3FA8F63E0E23EA8BAFD278B /* NstBoardMmc3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2822DA4B1D3B2A11208116D17F88E2D4 /* gSP.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C1361ED1C7AC536E50CC4A7BA396F6B /* gSP.h */; settings = {ATTRIBUTES = (Project, ); }; }; 286192A6107B4208426E492B84A18EF1 /* osal_files.h in Headers */ = {isa = PBXBuildFile; fileRef = 8346ECC5A3AFD14F0746FD2871ECDA43 /* osal_files.h */; settings = {ATTRIBUTES = (Project, ); }; }; 28AEB1D89C9F02C00B767D2D95D68FB4 /* NstBoardSunsoftFme7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 69F05BD9CB2FBF76E6BDDB0F64BEDA8F /* NstBoardSunsoftFme7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 28B10CF2C882DC18EF20B1AA8E23AFE2 /* NstXml.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C6615F5A71F8DCD1E426F1118FC5F17A /* NstXml.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 28D6E732DCDBE5BE8D12D4310E4B8A30 /* UIViewController+TransitionState.m in Sources */ = {isa = PBXBuildFile; fileRef = F74135D2566C066E0B9F4F851E06A12A /* UIViewController+TransitionState.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 28E331F3212964273FB3B82CF0018337 /* NSManagedObject+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23C697EC446C898565842A822356BD49 /* NSManagedObject+Harmony.swift */; }; 28ED02C88B90C1B230F0D20D597ED49B /* NstBoardSunsoft4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1CFCC0E9B1069C5E4DE9B21620D39BEE /* NstBoardSunsoft4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2927B50D7C03836B5037835DE0C7E043 /* F3DFLX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A59426906D18823BC9AD4B26A1EC66C /* F3DFLX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 295238CB026C2D0DE66098E71D0CC261 /* Version+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F453A50C9E6D70D2C15CD2F4D9BE68 /* Version+Dropbox.swift */; }; + 29504B24FD2DC459040729190DC49643 /* ManagedRecord+Uploading.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8962CCBB4791075DC49B171A0539E42 /* ManagedRecord+Uploading.swift */; }; 2976ECE53CBF19C1F27B45BF5CB09965 /* F3DEX2CBFD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 99096141FF8112FF26903D5255091329 /* F3DEX2CBFD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 29962679E9012751AD784D26C64074A6 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 23B56F8A99B549137872A3667B98CBAB /* UIView+WebCacheOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 299A3DFFDCF10D83F769BE40B7F8730F /* DSTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E5761EB37D9B48C3780E3C7C5C40100 /* DSTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -288,16 +295,16 @@ 29FCAF85FC12577CD5CFF57453594C65 /* GTLRDriveService.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A2CACDB9FCC4BFBF7C2F672657367FF /* GTLRDriveService.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2A7DA941742FE42A2432F2776BBB4821 /* registers.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AD9520272152BEF938AC2E8A1E5961D /* registers.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2ABF63D583A05522FC0E68E2A51246B3 /* gfx.h in Headers */ = {isa = PBXBuildFile; fileRef = E0F150BFDEE45BE9AA4D0FDF4D91815E /* gfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2ACBB459B58101305C15B9E93221B2D8 /* NSPersistentStore+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36F0EA19BE634583B78B77F370DF9C88 /* NSPersistentStore+Configuration.swift */; }; 2AE7A62010F0BD02BBED36CFF53BBF91 /* TDStretch.h in Headers */ = {isa = PBXBuildFile; fileRef = E3E9EE093E08EF6C06AEBAFED90F5FDC /* TDStretch.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2B16AC9E3C87FF2EBD5E3AF7F7F4FB29 /* Wifi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BFE1D65673DECE7D6E2A1B6B529D5CAE /* Wifi.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2B3BC9E6AA5B18ABAEFCCDB39484FF5B /* TextureFilters_xbrz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D7DDAE335C54604826A3ECBD79CFED3E /* TextureFilters_xbrz.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 2B51A8788DCF914AAED3412DFDEF3796 /* FinishUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31519A5FF9CDB3ABC6F3D03BD2B06403 /* FinishUploadingRecordsOperation.swift */; }; 2BB3BA10CAF200D6F57AC5B7788326EE /* Ext_TxFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 078E27968A4F0A9279BF48A15BCFF4B8 /* Ext_TxFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2BB5DA0DB6B389E75E5ABD816506A72B /* ControllerDebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FBFEDA648CA302663BC0A53CD4C4444 /* ControllerDebugView.swift */; }; + 2BE85E437103FCD7B4005E36CE3A1058 /* Dictionary+Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 519375E564B6CC30F67B164458FBFF55 /* Dictionary+Sequence.swift */; }; 2C54BA2379A2C403F7B8D0C49FAACC25 /* InputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 165B7915A8914F93AA1A0D7D45181074 /* InputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2C793E39108FE340FC5BFCF448F6AC2F /* GTLRDateTime.h in Headers */ = {isa = PBXBuildFile; fileRef = 01082497DDFB3641F47D167E3C3EB389 /* GTLRDateTime.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2C86F96F2A98EB8553F83501FAB77D58 /* NstBoardKonamiVrc2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 431243B7F84E2298319F60EF40D02386 /* NstBoardKonamiVrc2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2CC0B722492849CF64841AE7884A8948 /* RemoteRecord+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A95544E49AAD44E88BF2C9268C9BF94 /* RemoteRecord+Dropbox.swift */; }; 2CFB7E4AB44C35953034CE00C927B1F8 /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FC76FBFEFEF12E5FDF51209753949E3 /* Response.swift */; }; 2CFFEDD26B19606414785964AC1E7FD5 /* pngpread.c in Sources */ = {isa = PBXBuildFile; fileRef = 3E352201B46848355CB326FC4BF1FF47 /* pngpread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2D04068669A431A14A7C0876BF2BA0B7 /* opengl_ContextImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4C18B2ECEE548A1C91E8FE550A347BFB /* opengl_ContextImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -305,42 +312,39 @@ 2D445BC93F75039A3BAA7CBA3A626E4C /* Debugger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 80019774B54716FABF7DEFCCD68E75C2 /* Debugger.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2D87E1AEC45003E3C2203D5A623DB6E1 /* Expression.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB8D4802A5F80BBA2E31C377A7C9689F /* Expression.swift */; }; 2DC9C43A21C6350E567B14C11DDE7542 /* NstInpKonamiHyperShot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 93BDAC11CA2A4DE08DB5A3ACAFE90787 /* NstInpKonamiHyperShot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2DE185B952A67810F78722837354F3EF /* RSTPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8643E93FD4508FE4A1F4CFE2588044 /* RSTPlaceholderView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2E0BAA7E2088EF73224C6693BDCCD485 /* PixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = A586DA6049F657DBEA1D6CB398378C21 /* PixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2E17100758232DC76432B02A12EFAEC1 /* NstBoardDxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 49479F202B609744C82D4138F8FCD9CE /* NstBoardDxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2E1CE99F9F3BACCEBB2EE44E78B4D3F3 /* DeleteRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F512DCC7821D8E2620E88EDC969A6116 /* DeleteRecordOperation.swift */; }; + 2E1E8ACC9144D64FB372FD0AE14B3610 /* UIView+AnimatedHide.m in Sources */ = {isa = PBXBuildFile; fileRef = 632F100822F31BF07C7CD07CAD8F2329 /* UIView+AnimatedHide.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2E249F499F9043C559D25049F768C9F9 /* ZSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B9D8426DBFEF530DE2AC44162062396 /* ZSort.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2E62C0D774A841E9ED7F5CE4E5B70E09 /* AutoBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 08EEF87CE7D5964AB34DCF33763BB099 /* AutoBuild.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2E8BB841572131183B17430DC86A4A5D /* ARMInterpreter_ALU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E5A3A24EB4B9ABCAF94937C5D6C5E88 /* ARMInterpreter_ALU.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2EF7C84C951F326A18407145FF81F584 /* armdis.h in Headers */ = {isa = PBXBuildFile; fileRef = A493D236FBEDB31AE7799E82580CE1E6 /* armdis.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2F010DC7BBE382CA0729F3EBD313D9B9 /* NstDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FC77FD154105FF5182FC0B3EB06431FE /* NstDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 2F47AFFD0CEB31CEC05058726214B60A /* RSTCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 39C09D3911D40FDAEA431AB499EE712E /* RSTCollectionViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 2FA485B338CFEA42A781B8F21F09C050 /* writepng.h in Headers */ = {isa = PBXBuildFile; fileRef = D6A4C76DED9C21C388F39532BDFE1609 /* writepng.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2FBA2E9BACD4FFD2BEAC5CAB997FBC99 /* NstApiMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C08D3CFD628192FDB9B9FD5A63E531B4 /* NstApiMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 2FFD8A4339DDF9E4162A2B228D700B00 /* hle.c in Sources */ = {isa = PBXBuildFile; fileRef = 888E98C361E5C340C2DFB6D6D1029392 /* hle.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 30360304FB3B07CC67CE7E12DDCD6AD8 /* NSPredicate+Search.m in Sources */ = {isa = PBXBuildFile; fileRef = 558BFA270FA2F23C320E11E090A7662E /* NSPredicate+Search.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 304A6957CBA97867455427624312350B /* ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 15A5B47B39157696DDBC56DF53AEFE81 /* ring_buffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 305114B6580952D1693DD539DEA79A62 /* NstBoardSachenTca01.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 24CA32513A0AE3E1229D4189D3F40C32 /* NstBoardSachenTca01.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3056EB896FBCCE8025B4F0BC1C61E470 /* TxUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5131F9EE375D77DAA9870F13B4698A6C /* TxUtil.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 307F17251A2F5C3948F660C51D22185C /* FinishDownloadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BEA4A46B7A6178A64F37902F1134C08 /* FinishDownloadingRecordsOperation.swift */; }; 30C13B34A3BE33BA757F87123E879893 /* NstBoardBmcPowerjoy84in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D23E1E808E48E9849AB52E92FEE110B2 /* NstBoardBmcPowerjoy84in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 30E3FF5DE72D56612993D499EBED8C9B /* AggregateFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDA9A78863460869F150386B089AF8F /* AggregateFunctions.swift */; }; 310EE1EEE2F7EE1601F5B3BE385E9C1D /* ARMInterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 956202907723788FB190BB389EFFDB25 /* ARMInterpreter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3118030C5A979F122AACB2CBD58C4E56 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4476D277BAC65A966CF97717AC7EC945 /* Archive+Writing.swift */; }; - 312AD7DE1453F9AD4A92963F384CF46C /* RSTCellContentChange.m in Sources */ = {isa = PBXBuildFile; fileRef = D446F7C2C98C47BB376AA4DC92FF956D /* RSTCellContentChange.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 314674AA478474E495700E5CA708BB6F /* opengl_Attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 26E70D021ACF47CEAF06F4E652E5E81A /* opengl_Attributes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 31697585FCCAF83D2BF44D087DA75CB8 /* StoneSerializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDEA401B77A227622E55445028991383 /* StoneSerializers.swift */; }; + 3172916D88EC5D0F4F898D1F7EF202D0 /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DC45D7DB5CFA98660E39905809A298A /* Auth.swift */; }; 31E24CB31B609119C558C7927B909B73 /* rdram.h in Headers */ = {isa = PBXBuildFile; fileRef = 468999824D8EE841754A3B910A80F137 /* rdram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 326048AB59E512995FA92BFB0D4005C9 /* Roxas.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE57A68E189FBFDCA39ADF0FAB28195 /* Roxas.h */; settings = {ATTRIBUTES = (Project, ); }; }; 32835555CC71C9A1FD4C3765B72224E5 /* ARMInterpreter_ALU.h in Headers */ = {isa = PBXBuildFile; fileRef = E2C410EBF08C1B76FDAC71A27419D38B /* ARMInterpreter_ALU.h */; settings = {ATTRIBUTES = (Project, ); }; }; 32B5C2CBFA681959F551BF129BD8DC00 /* NstApiBarcodeReader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C9ED0B41AF5C196E6858B6DA26EAAC68 /* NstApiBarcodeReader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 32B869763DE524407E4EC13B5405C6CA /* NstBoardBmc20in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F376A1194EDAFFBDE131906336FB08BB /* NstBoardBmc20in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 32C5649F56A9F2DE34AC6EF9FCA33323 /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F9F5190AC3B7EA2777CF3CE3A3E7986B /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 32D70D7BB7F2A17F9C78F7AE99B2F7CC /* FileProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12EC1D77781095125E901DEFF622F36 /* FileProperties.swift */; }; 32F7E2ACCA4602AE9DE680A9D70EE36F /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 40D3DBD12BF6940FC1A2BE76A08E5471 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 331922630D39F72EF28D8C51A385B8F6 /* ftttdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B7D93006047AEA1B2086CF5FEC0FAEC /* ftttdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 331F42F6EB50BB7B3BCD93462D74C7B9 /* KeyedContainers+ManagedValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2E120995C0F4075BADA7CA8334C6238 /* KeyedContainers+ManagedValues.swift */; }; 332024B9AF30A07CE496CC11D9591023 /* SaveState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 027FB4C6CC71DADB243F4D75F54D49E2 /* SaveState.swift */; }; 3323FFE5A1367960FDB731C2D8B45870 /* SNESDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D6CBC1B60FADA9D18C705CC48D37B27 /* SNESDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 334648F3BE0F3EB894ED97C63BABFEA7 /* NstBoardUnlN625092.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B67B97B22BF6E290CE3176CF648D18EC /* NstBoardUnlN625092.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3355E6967843D3D24E781B73118E18DE /* UISpringTimingParameters+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EEAB40C86D49852ED6EB7A6AFF904B0 /* UISpringTimingParameters+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 337E5275965EC77007B11EADB625B015 /* FIFOSampleBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = CE2627D52C27F26A3779CDAD7756E356 /* FIFOSampleBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3399E40819B47FC57D44FDBE3182620E /* fxinst.h in Headers */ = {isa = PBXBuildFile; fileRef = A69F666C61BC56F0C8F6DA00E957E5AE /* fxinst.h */; settings = {ATTRIBUTES = (Project, ); }; }; 342FFC207143FFD0D02C8E58FD8765D9 /* ThreadImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07CA97CCF4C09704E6DE0E7275915BD2 /* ThreadImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -348,9 +352,9 @@ 3460068A5D0DD12FDA3671B80C40D25B /* Revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D4A9FA09D0CE373E943419685E8D514 /* Revision.h */; settings = {ATTRIBUTES = (Project, ); }; }; 34A2EA8A730D0B8FB6F5ABC0674DDADE /* ftautoh.h in Headers */ = {isa = PBXBuildFile; fileRef = 607EE7A62CEA324021137035A39115DC /* ftautoh.h */; settings = {ATTRIBUTES = (Project, ); }; }; 34AA63D390F044C33722CC2D9CC9B3D6 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 33B331BB819B9C6CB76839045D4EF06B /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 34AE8851640DC6E16132178B877A21E0 /* RemoteFile+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB870F4AD39D4A4E00866F16DBDCEE49 /* RemoteFile+Dropbox.swift */; }; 34FBC7619CC07453CA4485178D84925C /* NstBoardKaiser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75A5C15DC18E79C28375E74324A85E26 /* NstBoardKaiser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3522984A23D0983D50F2F60CD2B9F2C9 /* SMCalloutView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B70989044B91229B1C51B5758D9F96E5 /* SMCalloutView-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 352FC73778D970039B08CEBABF15A8BD /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5246923E4069138B8F38B3EF8C4EE4D /* Users.swift */; }; 354A8F40F5743D12518A0509EB8575FC /* CRC32.h in Headers */ = {isa = PBXBuildFile; fileRef = 40F516E9DDCDFF55309BF56900D3A6CA /* CRC32.h */; settings = {ATTRIBUTES = (Project, ); }; }; 35722184127DCAE56E998143DD4FFE37 /* NstFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8F3A9DEA75F75C3ECC9442042F92E484 /* NstFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 357A8FB1CC3FD998F2F68DFDBD72ADB2 /* NstBoardBmcGamestarA.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 18185E2750AF215989A1C8875DDD67B4 /* NstBoardBmcGamestarA.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -358,7 +362,7 @@ 35AF870E1B3A0DB7D735F735FA422C6F /* NstMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 59E4444E0AA576955C9370592EBB6D96 /* NstMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 35EC8B4BFB120C69E99A260D786EAB16 /* NstBoardUnlTf1201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 43CE808CD1AE36F53CED9431BA461025 /* NstBoardUnlTf1201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3610E0EF4BBB6CF3CF12645B71666CEE /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = C68E5B53D8D5CA28D433B92E58B5C931 /* memory.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 365E7E156C92209524A265BE63A05992 /* TransportConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BFB44B9B839260D03128AA298313F4 /* TransportConfig.swift */; }; + 364026A914B019CF9E8E1E8662CB3CEC /* RSTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B3F0409CEA697951ADECD54AABFC17 /* RSTError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 366262F212635879691A7CA07D4DA00A /* ftserv.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A5F0CC9425A669A2FB1790D3BDAABD /* ftserv.h */; settings = {ATTRIBUTES = (Project, ); }; }; 36EC4FF8BB69E58C4636688ABCD5A263 /* audio.h in Headers */ = {isa = PBXBuildFile; fileRef = 6CE8685D1C71D8EB010FB3B97ECE0634 /* audio.h */; settings = {ATTRIBUTES = (Project, ); }; }; 37021E54EAB76D5B8FD8730232C11C87 /* NstBoardBmcCh001.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DB8FE8CE43E3908EA8654AD9FBFC9667 /* NstBoardBmcCh001.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -372,11 +376,13 @@ 3826FDB208BDA2324262CC8F09622DA4 /* NstBoardKasing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3E468629CDCBD9A934833FB33710BC38 /* NstBoardKasing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3867303ED090C22C7B91F80D0D34877C /* NstBoardJaleco.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E551214789CB8350262743FF9EF95629 /* NstBoardJaleco.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 38A88C1B5FBB3EE10BD8240A4F1DB3FD /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 55A7E5964AAB52C30CA7C4233CDB81F1 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 38B3A2FD6F8B9AC327D048D94553FEAD /* RSTHasher.m in Sources */ = {isa = PBXBuildFile; fileRef = 6ABC265715DD434AE88383B1CAD97215 /* RSTHasher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 38F6582226CA2808DF945CDE63DC5158 /* DeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 957167DFF15F649697598EB9E605462A /* DeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3914A75BEE189973A204BF332FFCEFA8 /* VideoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A428ACD6852B72482C8570B4E49B15B4 /* VideoManager.swift */; }; 3926A56C74A6C3AE66EF1745844B04BE /* NstBoardJalecoJf17.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9AB2C2CCEC496A1EE69FB5F1EF214B1A /* NstBoardJalecoJf17.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3947B44C7BD9B3882EB0AC7BC93A2723 /* RDRAMtoColorBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5A8B0D1C08B6C55E4CA098FCE620178 /* RDRAMtoColorBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 394E947ED5AECB6E6C373FCB5BC01756 /* bios.h in Headers */ = {isa = PBXBuildFile; fileRef = DE1CD0A14598D55B1CD56BD77F8073C9 /* bios.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 39C5B0120922335CB32534B88D011528 /* CustomTasks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37497E9D4A4AD3D7DBDCBD661F3B23B8 /* CustomTasks.swift */; }; 39D6D6F6957023CA7529B2837BAFCC6B /* autohint.h in Headers */ = {isa = PBXBuildFile; fileRef = 29100634EB1C2E5E9877D238B86CDBB4 /* autohint.h */; settings = {ATTRIBUTES = (Project, ); }; }; 39E36E16FF2FAB77065F3E24D90D594B /* GTMGatherInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D9CA1BA4B1C7EB05BD412CB7895C1658 /* GTMGatherInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; 39F169D40F3D2217C030DF5C4AB9AEEA /* NstBoardBtlShuiGuanPipe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 406A09A4EB4DA79E27112B7E71A89701 /* NstBoardBtlShuiGuanPipe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -391,22 +397,22 @@ 3B42DD35D266E878DEA58A0F3CD151E2 /* musyx.c in Sources */ = {isa = PBXBuildFile; fileRef = 4A835642A0FF668D9565F7122EDF06B1 /* musyx.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3B7DFAE0D5614D45A623F2BA17A8884D /* NstInpPaddle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CCA63F92FA1AA67CA403E2E475DF92B3 /* NstInpPaddle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3BD5536C63EEDE95794066C869549BA1 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 316A846E58F0E27085A4330EE10E3B5F /* SPU.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3BD8EFFCB0910051586FBF46AC5C55C8 /* NSBundle+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 514762CD1DB6A2350BA5EE10914786CD /* NSBundle+Extensions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3BF6F82870DB8EB51A171327367ACE87 /* FileProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12EC1D77781095125E901DEFF622F36 /* FileProperties.swift */; }; 3C0BD562ED5EA4DBCCE3A2FB7D940FF6 /* gfx3d.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E49EBED49055AAF839B8A99FC0D76C9 /* gfx3d.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3C0C34B66F4DE1573FAD3F67797849EC /* retro_dirent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E75A6CD77FDC5730599F170C8A47DC0 /* retro_dirent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3C36E674426756F060D9479A78E5CB38 /* RSTCompositeDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 32C661EFF23BB80E5CBC79C7B385920A /* RSTCompositeDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 3C29A9A037CFAE89A2573D64BDC23664 /* Harmony-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BF557E1265E4D79D27F20185D2FE7FCA /* Harmony-dummy.m */; }; 3C42E2DF170FEEC1FEDCF257FBC59691 /* NstVideoFilter2xSaI.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB480F86E824BBF3F976C29F3F518408 /* NstVideoFilter2xSaI.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3C5A26E2B06FF1324498A5DAA75F2AFD /* texcache.h in Headers */ = {isa = PBXBuildFile; fileRef = BF2D25C87184C7CB6292C194EBA05335 /* texcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3C78E4348B065F6A1F2E070E9C9AEA1F /* GBCTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = A3B3DA7E38DD3305FA49B067BBEE2BBC /* GBCTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 3C832BE3E684CFF4E7D7C7D1104C63C7 /* UITableView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = CC438CAEA107E0F60CF6B6A8FBD21763 /* UITableView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3CCFF040F69A447BCC79C844C6E30412 /* DeleteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403F1EF9016E064303392CD24F59212D /* DeleteRecordsOperation.swift */; }; 3D28FECC438A6FCA1A5C16275198B7A5 /* NstIoPort.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 46639CDFB2B4FF61588F77A4A2FFD6FE /* NstIoPort.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3D38D3143F60F22FF8148BA31C508E73 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8760D486359333F01A58D9A3E6965D9E /* Operators.swift */; }; - 3D66A31C8103A03FDF1F0E57C640C042 /* NSConstraintConflict+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 932A9FB4261665509630DF314C0698B4 /* NSConstraintConflict+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3D82BB8BB2ECF360078CE90C99E218A3 /* DSDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 202473EE9351AD87378741BBD152C958 /* DSDeltaCore-dummy.m */; }; 3DA0789B294D0A4B0337D4849E79FFBC /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B8875D91FA20F49517CC1C5CB0BEA40 /* version.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DD34B16C294C0471715AFA306DE71E5 /* NSUserDefaults+DynamicProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = B49CF1CC01CA6A0D613EA0862C7F450E /* NSUserDefaults+DynamicProperties.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DD4B26D893412F29DAE586ED5B753CF /* RSTRelationshipPreservingMergePolicy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BECDD49D8123BEDD18D8163C335A153 /* RSTRelationshipPreservingMergePolicy.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3DF3BF1A81EF709BFA95298AC8F1FEB0 /* NstBoardSomeriTeamSl12.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F3922596938CC3AC96994BC5EBAEC217 /* NstBoardSomeriTeamSl12.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3E03AD02DEC735901C06DBB467257AB5 /* Font.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F686DB132322EBC65182C37F284A25F3 /* Font.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 3E041A08CC91B93F5CF263AFBF97D44F /* NSBundle+Extensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 514762CD1DB6A2350BA5EE10914786CD /* NSBundle+Extensions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3E1730D55849A497D872A47300530E33 /* VideoMode.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FF4871EEC174D41700409C80284E7FD5 /* VideoMode.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3E1934A6CC6D979EB860DA6C35B5E931 /* Turbo3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FDB5E5AA46D38CB2E47E5E6DF9A5645 /* Turbo3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3E1960795F1CDD5DA3D5234B649D9A64 /* GBA.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB5727401E6F6A0439D8F333FA838602 /* GBA.swift */; }; @@ -415,10 +421,10 @@ 3EEB2162999CE5EC7F850E4B1FAAF5A6 /* Port.h in Headers */ = {isa = PBXBuildFile; fileRef = B30081991D15EDA28B670E4E8B5B46F5 /* Port.h */; settings = {ATTRIBUTES = (Project, ); }; }; 3F029746684D344355091865BDDE4121 /* NstBoardBmc9999999in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 873C9B1C70581E3ACE0CEA93EA9568DB /* NstBoardBmc9999999in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 3F0EBD18ACD97785A90A6D0B4E723D03 /* NstInpExcitingBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B5A0DE104CFED381B5A6268A32DA5C06 /* NstInpExcitingBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F29506C9C2F36B576E3C109F24238AD /* StoneBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FE893CBC159403181F3126C6C7917D /* StoneBase.swift */; }; 3F5A6187E39867D2D1D87C75ABFC4F05 /* opengl_GLInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F7FA66BA44508C8E1B3BC97E5590E2EC /* opengl_GLInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 3F69BBD7AA6D5BF55C92CFB3672A8BAF /* L3D.h in Headers */ = {isa = PBXBuildFile; fileRef = DDB2184F0999EE882B67DEFADE1B4A63 /* L3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; 407EC03D3DFF08A04296FC36CD38AF4D /* NstIoLine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BE0C7306F2F560B898301521B0E951DA /* NstIoLine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 4087FAE7064A9C1047BB2867ADD8DBF8 /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29FA18E56645BF9DB1B8D4905E202C06 /* Record.swift */; }; 408C9467A440ACF40ED221AF38A11CAB /* SaveStateProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48B7D69EC414883941231476116906D7 /* SaveStateProtocol.swift */; }; 40D0BB5787AC64B638416C9DC6ABA9C2 /* ObjectHandle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B879AB2ADEE0B7AD62F37F492D81FEC6 /* ObjectHandle.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 40D29AB1C0B1AE9D5A16D8A00CC5EC8A /* NstVsRbiBaseball.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9A6407C4FE9D4F3E62ECF1C9CABE92A0 /* NstVsRbiBaseball.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -427,13 +433,13 @@ 4117A58F736F3993A5D14CF4CC2D8924 /* NstBoardTxcTw.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E07126E3FC357870F5EAEC48FB308C9A /* NstBoardTxcTw.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4150E7B22E87E3E0A1677C4074AC5651 /* opengl_ColorBufferReaderWithPixelBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 944052D0ED4C8624EF4485EE37D7898C /* opengl_ColorBufferReaderWithPixelBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 415C3AD46D4C5EF9970EC2575E98EDA0 /* Database.h in Headers */ = {isa = PBXBuildFile; fileRef = BD12836DFFA0899682ECB705F36AD40F /* Database.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 417CB1E153B4D573A3F86BC063262EBF /* UsersRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5A8C2D0C4FF79FF4A82A7C02704490 /* UsersRoutes.swift */; }; 41A7B51821FA9F73512BF747599C4C47 /* GTLRURITemplate.m in Sources */ = {isa = PBXBuildFile; fileRef = 35A46DA9D7B9942345456BEF6DF7E8D1 /* GTLRURITemplate.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 41AED5AF1633147BF20119FE09B88FD0 /* DeltaTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 35F02B0ECCDFC2E4E491C095B018680E /* DeltaTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 41E9F83338345136034AEA044417C116 /* ftpic.h in Headers */ = {isa = PBXBuildFile; fileRef = 1406F5851ECA113961E420930E44400E /* ftpic.h */; settings = {ATTRIBUTES = (Project, ); }; }; 42486E8EA746BEC5D598F95DA726529D /* GlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C4F2063F71920535B22EF7E3FF01117B /* GlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 42D3004B9FAA6E6FC7F5C1FF64FC642E /* Image.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA7B07F6922A453BFCB66757611F7273 /* Image.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 42E0B2A0BDBDD8E3ECCFE991DD5E3C98 /* glext.h in Headers */ = {isa = PBXBuildFile; fileRef = F52405E64C06D130B0AAD913D760D8C8 /* glext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42EB6EECF3762F5F42F742FEB271DD66 /* RemoteRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94A7A1A69CC1C854DB18E279A44F7DC4 /* RemoteRecord.swift */; }; 430806697BCF27E39D1755EBD50C2AD8 /* NstBoardBmc36in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3347C3BDA90B90C1FA03156B774C2A1E /* NstBoardBmc36in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4350BC2A7ED052D1A8C7322572F983FE /* Shader.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 92F0DF6F9D8A1A4D8748ADB82258371D /* Shader.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4354E3A4466FF6B483F24CDCD89AD50B /* DebugDump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A65DF9779DF20125011DEFB944B15926 /* DebugDump.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -442,13 +448,12 @@ 4417771FB0C9ACE3FA0583DA58B85DB4 /* opengl_ColorBufferReaderWithPixelBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 16A28BF70DE7AAE9C02DF33216F1076A /* opengl_ColorBufferReaderWithPixelBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 442D3A121AD9C02E66C68692A0200D7C /* TxQuantize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29EB52E4D8EE749D56B951548307A0DE /* TxQuantize.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4451F253919AC67A48CF16B0AAD79B09 /* TxInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = D02F91DD08301C06A04A0C6273FC0114 /* TxInternal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44574ABD35CB7C8E7308A753B541D666 /* RSTNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E9FD5A3371067E608C6FF32C3E1179 /* RSTNavigationController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 44A16B7735E1CB04CAC75E2D49BD5D59 /* ConflictRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4C88694613725E9E864161B85D65525 /* ConflictRecordsOperation.swift */; }; 44CEC7EA6296BDF52E6847748021D0F5 /* emufile.h in Headers */ = {isa = PBXBuildFile; fileRef = AFF3C3B618AFF0BDD1845467EA4D5341 /* emufile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 44DFF6AD46F4B1073CBE3E11FABF2CA4 /* NstBoardBmcBallgames11in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CDCA56A230FEF11250C8907E001346C3 /* NstBoardBmcBallgames11in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 44E2DD6BD4812BA86F693CC8552DD28F /* ftincrem.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3622A7449225751220AF6FE10DD230 /* ftincrem.h */; settings = {ATTRIBUTES = (Project, ); }; }; 44F9BC8CEDD8AFA192EE9AD5A63BAEF8 /* F5Rogue.h in Headers */ = {isa = PBXBuildFile; fileRef = FC8BE3C9EFF69072F0F385CD784639A2 /* F5Rogue.h */; settings = {ATTRIBUTES = (Project, ); }; }; 44FD2436016228AEB6E7E399C64CD7D6 /* TextureFilters_lq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = B2C1C0E46794ACCFA1D49F4F9F7418C1 /* TextureFilters_lq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 454435BAA1232B5BB55B7FA9E7B97C0D /* FileRequestsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1393F6F0A0F928C49105FCA78288193B /* FileRequestsRoutes.swift */; }; 4545BB25DC4B965622D16CF4D6506135 /* Mouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 507E5C05C910EB9C2351B7FDAC89B9AE /* Mouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 459A931CCF39B8FB19164EFE3CF2D863 /* NstInpMahjong.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 61036065030A2D0CAFA57E52B4AEBBBB /* NstInpMahjong.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 45C69142AED31E0A799F01018A2C9414 /* svtteng.h in Headers */ = {isa = PBXBuildFile; fileRef = F1AD374BED968FBCE790AA433A78D057 /* svtteng.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -457,7 +462,6 @@ 46621A84DC7D1AEAB3D4B2F076FFED5A /* controller_input_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C1BC49685F5EE8CD682028D49698258 /* controller_input_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 46D2FA65C1F7514FB5AF1B3AB540BD7A /* NstBoardUnlKingOfFighters97.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C6BBE5B4E442F86207E88DDD286857CF /* NstBoardUnlKingOfFighters97.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 46EE5AD399E232F78A784F6DCB08F5AA /* ClipPolygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 414687B042C1DA8223948CAE5D99FFA8 /* ClipPolygon.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4712883E9233CBF125D350671054463F /* ServiceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6118EFDD077B9EC964912181660B7A95 /* ServiceOperation.swift */; }; 471A75A7D62F9B14EB4441C630F660BF /* Util.h in Headers */ = {isa = PBXBuildFile; fileRef = 585857562D0E1129BE114DD8982CFEAC /* Util.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4727DC7D681E19904DFFAB1C46B76FE1 /* retro_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 03152EFD6359667DF578CCCE3CAF648E /* retro_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; 47486F7F31F4FA955B61FB098EC26D06 /* ftmemory.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FADAD20817CF7C88C8300D762D5C633 /* ftmemory.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -465,25 +469,25 @@ 47A5A80DFA1F9FCEDF4CE60F636ABDDD /* mupen64plus.ini in Resources */ = {isa = PBXBuildFile; fileRef = CAC68C48D5AACE9BF20D8B880DA33BB2 /* mupen64plus.ini */; }; 47B90AD34D2D03C6A1D6638FAD3DD2DA /* instr_counters.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C7B436FC2BE106D5FAF2A5FE73A0CEB /* instr_counters.h */; settings = {ATTRIBUTES = (Project, ); }; }; 47C6F386A72302328A13032C0CED13AB /* ftgloadr.h in Headers */ = {isa = PBXBuildFile; fileRef = 9537E6C2A66052A73DC48C9A51A85FCA /* ftgloadr.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 47DD93735583D7B904F190CE284FCED2 /* DropboxService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF523761E770A7667BC9871C019D4CB0 /* DropboxService+Records.swift */; }; 4801291E14FFF8108E194C50DDA30831 /* png.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C8267F7387923110B7E4D691528634F /* png.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4814E1D8375828A06CD1B96BD100D277 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C23336B02D37B196D5C0A0F85D14FFC /* File.swift */; }; 4826CCCFC9FEA358F0FC255ABB00B2E0 /* NstBoardBmc8157.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 495697E3F178E65EB3DA72E358CB964A /* NstBoardBmc8157.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 488875F3618617406AB771502A10BE59 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = F88BB2DC2D2059BC24702E5033B1FA18 /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 48C0F91A06EFA229466AA6629127908E /* RSTDynamicDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 705D7689B51FCCF53E9C703400B0DFC4 /* RSTDynamicDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; 48DD34EC238804715558E42A981112BB /* PACKED_END.h in Headers */ = {isa = PBXBuildFile; fileRef = D1B6EF297830BCAD6D884EED97389BCF /* PACKED_END.h */; settings = {ATTRIBUTES = (Project, ); }; }; 48ED96922DB66BAC7D1C1C53B9E093C7 /* pngwio.c in Sources */ = {isa = PBXBuildFile; fileRef = 39366E2F73CC4159EE18FFD5AF80A0F3 /* pngwio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 48FE3ADC3F482FB1896BB017B2A60B4C /* RSTDynamicDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C730E5915747302EDF3EC772425E5899 /* RSTDynamicDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4913EF3B810EAA77A6E244D7F5672EFF /* Log.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D08A94E7C3746163340B4EA95824507 /* Log.h */; settings = {ATTRIBUTES = (Project, ); }; }; 491625B9D71AA1BD54EF222D6CF2156C /* opengl_Attributes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F42E220EA589F02ED66B2844BC537B1B /* opengl_Attributes.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 493D2606DF4B76687CCD0F48B2E76904 /* NstBoardBmcCtc65.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3B33F3D270F71B002370D6D901A9EC19 /* NstBoardBmcCtc65.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4948EB328DD7614DF746912086A18D65 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 578F350CDE9D940384DFB5636F635219 /* UIButton+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 494BF218C4F917D55808751F21518F3F /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 432A5751918B766667F9CD8866666085 /* ResponseSerialization.swift */; }; 49518AAC1F6826215684B5499BF1E6BE /* NstBoardBmcFamily4646B.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F872C43256DB5C1C7D80F3F0E8E9CE0A /* NstBoardBmcFamily4646B.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4995851CA04E15BE62A4905F6212BB68 /* DriveService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EBF9C7AF0DBEF9D5C106E02B9B28CE6 /* DriveService.swift */; }; 499BFF148188191A810DEC5F4E739AB0 /* seta.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A4E086533D156DB8CB90B68CFB34011 /* seta.h */; settings = {ATTRIBUTES = (Project, ); }; }; 49ABC99FE103B5AC8DBF4EAB13B19619 /* pngtest.c in Sources */ = {isa = PBXBuildFile; fileRef = 308BAF6C3BE086BDB26EFE72FA9E48A6 /* pngtest.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 49B42763E754035FF9813F47341292A8 /* PlatformConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 92BC65E8B857820DDE5B77199E9852C4 /* PlatformConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A1F273145AC8A73006C32CCD1DCBECC /* RSTOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DE3498D124753251241C3DCDB5CB194 /* RSTOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4A235B8A8EB5A067D71258818BE0595D /* NstBoardNamcot.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2135E69E6A4F906CD35BBC26E511A87E /* NstBoardNamcot.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 4A53F0A16D88C817005A54BAE4A6F449 /* KeyedContainers+ManagedValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D3AABE38A819F833123F47E08B8F6F8 /* KeyedContainers+ManagedValues.swift */; }; + 4A58DBB2D8EA4F6F91CEDF8D53DEE181 /* RSTDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DE36CB10C4A8DCF72BE7B88CB003698 /* RSTDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4A83924C5F211B90E03A8A227F460210 /* NstInpPokkunMoguraa.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D3FF2CD92B642B01EE1206B628894B5C /* NstInpPokkunMoguraa.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4A9F3B1885A725C767C559BD65A10935 /* ARMInterpreter_LoadStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C336BB83B448CA034099BF3E7B12D55 /* ARMInterpreter_LoadStore.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4AD9EE859F0DE01AF2C869C403FE8AD6 /* OpenGLSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B9E0F2F6641A295442D13F0770261B5 /* OpenGLSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -492,44 +496,38 @@ 4B6BCD8A5B83B616B302345DE1706B1F /* sfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0B9BFF156565987763A09CCD986B38 /* sfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4BE34CEBCADA7E00993E48F365D76C6F /* NstBoardNitra.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4E6CEEF9383BEA7F879EA4F942833796 /* NstBoardNitra.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4C2525168A2CC6EC7625B8AC550C92AB /* commandline.h in Headers */ = {isa = PBXBuildFile; fileRef = 42877B5C59DA3CE7FFC800C308596589 /* commandline.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C44ECF64FB6C4EDEF4ACD2236BA1545 /* UICollectionViewCell+Nibs.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7FFE29C3C4FE3726FAB1DB3F1C4F3F /* UICollectionViewCell+Nibs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4C4A649C2F5E44BC6753A9AF4066B5CD /* controls.h in Headers */ = {isa = PBXBuildFile; fileRef = 5046B6E78EA1FD56CEB696532A667D56 /* controls.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4C8972B658D801A7F3D8AC1ECE935C1F /* NstCrc32.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 85522F84ED70DA2A5D98CB751A79DB2E /* NstCrc32.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4C8EDFDEB5BE1B8740F01A75D78CC82F /* screenshot.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E5F4DAB8AE8D24960DF1E5DB3F6DE5 /* screenshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4CB1A09E1EA833B734D8605C78479656 /* ZSortBOSS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1939C13EF032EAB42CBC6C921ECE7AD8 /* ZSortBOSS.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4D0BA6DDAECF3625D9D4F8884C396135 /* RSTToastView.h in Headers */ = {isa = PBXBuildFile; fileRef = 275D08AF3E80D1A5B843C23F36F20FE6 /* RSTToastView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4D596A13AB85FB2666F860BA7D172A91 /* SNES.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3467F0683A726E7FA99570996471C2 /* SNES.swift */; }; 4D7E5D55C153D68B40C4FC7602AC40BB /* GraphicsDrawer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E4294CBF5BD945DE53BB04420F881C9 /* GraphicsDrawer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4DC192EDBBB019B891988F7845182F51 /* RSTCellContentDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C982B805086D1D5E4EF8373EF7E777A3 /* RSTCellContentDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4DC1F5A681A0675066595FBC8231B4B2 /* filters.h in Headers */ = {isa = PBXBuildFile; fileRef = F70E93212D39D1D9645D5BBE0CFB4A26 /* filters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4DC3CE0782BBAC382A857CFEBFDE94BC /* Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB060E9B70D07FF358DD8F33001FD5C6 /* Custom.swift */; }; - 4DC932B5F4D7AA22146806DD1090F1DF /* RSTDynamicDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 705D7689B51FCCF53E9C703400B0DFC4 /* RSTDynamicDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4DCBFFA1B95BE1BD4BFE5C963C7C81AA /* NstState.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 26539A58480363BAF74C49F66717AAE3 /* NstState.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 4DE607700A8319C6A9DF878F20C5A3A4 /* opengl_CachedFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = C53D6C2BECC25796BBBD554B17692783 /* opengl_CachedFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4E2240017E2AF72AD8910D16B4ADBA96 /* SyncProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = F68723D87D569E987F572CCD08093F61 /* SyncProgress.swift */; }; 4E404863CC3B40582879E711E4216354 /* driver.h in Headers */ = {isa = PBXBuildFile; fileRef = D5BACB869529C8A58764FBF51E5D7BB8 /* driver.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4EB3ECBAB9FB0B1B2067EF0E1DC27E47 /* GTMNSDictionary+URLArguments.h in Headers */ = {isa = PBXBuildFile; fileRef = F2087F209824BFEA65167BC5408CF95A /* GTMNSDictionary+URLArguments.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F165A28324D2EE2AB2D08DC5F8A55C1 /* RemoteFile+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79101053BF84721BE4614C362B727D7C /* RemoteFile+File.swift */; }; 4F351D67B1A16C4D98EC44B4A91A8852 /* DepthBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5735CEBEDBCB212533CE2D0112224D5C /* DepthBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4F6D72E65A184DC083161C6A3289D13F /* ZlutTexture.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C680EA14E1BCE635BDC66F5CEF30F4B /* ZlutTexture.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4F75FC37FC518C828A165CEF4EAA8BDA /* opengl_Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4A650EA7BBC2B23A0D479A0DA4FB270 /* opengl_Utils.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4F79FE245CDFD8041C639E51AD66DE39 /* cpumacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 49F7BDDB3C4AACF9488005884AA49676 /* cpumacro.h */; settings = {ATTRIBUTES = (Project, ); }; }; 4F8D23620463D8FF135DC582B2B54D41 /* GTLRUploadParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = D686BB86CE4E75B4F320164A9EC1B404 /* GTLRUploadParameters.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 4F9DEF5AB8980F5F6CBD545C902C6963 /* RSTPersistentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 051DD45485937EBA4AEB4D55FB230DCB /* RSTPersistentContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4FA5CD6D42B05CAA056082B07A92E126 /* opengl_BufferManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8CD1F5D1FB7A2951D65FA4A322294D1 /* opengl_BufferManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 4FD50804BC7509091BA1DCBA69F8C306 /* GPU2D.h in Headers */ = {isa = PBXBuildFile; fileRef = 967EFE5245A453AF9AA01C58AA47CA6F /* GPU2D.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4FDD559ED80035757EC13BF06683EFF1 /* OAuthMobile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A552ADFE847FA0B9435F038FD25C6AB /* OAuthMobile.swift */; }; 4FE9D949CE1EA4D7AC2C0DC75BDC7D09 /* counterdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DC71414A1C59E302D19045860C86F3D /* counterdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5007FF5D9701A3394F5837CF3D949DC7 /* opengl_ColorBufferReaderWithBufferStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BDF03E49537AAB42B11FC2BE2DA3821B /* opengl_ColorBufferReaderWithBufferStorage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 5028F30132D3D726A5BFEB6A45CE08F6 /* ManagedAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE50DAF15EC75FA249C291622A4739DE /* ManagedAccount.swift */; }; + 503B6B7A250CFF2B6222085296C8E110 /* DriveService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D76DB70EB35703F979D1D54BF27EA95 /* DriveService+Files.swift */; }; 505AF6CFE7AF897C939CE3F4893D79C7 /* NstBoardSunsoft2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 50B7464DE19879312AD16F0F9584E7C7 /* NstBoardSunsoft2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 505EA34BB63D4DA3E07D0BEAEA9CBBFE /* RenderTarget.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D98DA2B55C239E4E1EC147BC992F6F5 /* RenderTarget.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 506700D55CD43C1F9D14D10C36B2E4EA /* NstBoardAve.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 290CD775EF514EB180E591FA1BBD9EE9 /* NstBoardAve.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5073BE55602733E1D570CBFAF7444F9C /* FIFOSamplePipe.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E62533D6ADE3583F493484D3ABF1BB5 /* FIFOSamplePipe.h */; settings = {ATTRIBUTES = (Project, ); }; }; 508F79BAF68E3B5A238FE6A3953A1D4D /* GBAGfx.h in Headers */ = {isa = PBXBuildFile; fileRef = 0893F87C0C44883CFA0FF8BD37E0CB50 /* GBAGfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; 50B180CFEAD01CDF7AE77F036B6AD4E3 /* romlist.bin in Resources */ = {isa = PBXBuildFile; fileRef = E077F3008801C506785266DF63C1EA19 /* romlist.bin */; }; - 50FED56DA840079A313570E00101A9E0 /* Syncable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F82BADF1B128B29E800481350228566 /* Syncable.swift */; }; + 50DD9D1435EF52DF5C2C9ED88F0FA06D /* SDKConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95CCDA31768B63EA9440181D3FB6DD17 /* SDKConstants.swift */; }; 5109815A0F3215C9E58A3C986141C9DC /* F3DSETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 9147D9287688D6DBCB391FCFFB5E8CD9 /* F3DSETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5126155DEED6DE59D73E61CE415BDA1D /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 471C4997518A7042AE098438B7958754 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5158E74402D7498E84B1E75998347C9D /* UICollectionView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EEE2D5A7CAE13A6BDB9042F46420270 /* UICollectionView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; 51609D055628917E36855CA6D559FCFD /* recomp_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B399358B256320203E685F8FC809959 /* recomp_types.h */; settings = {ATTRIBUTES = (Project, ); }; }; 516599687587135EAF7497B4869D18AE /* NstBoardJyCompany.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1559231E2BE01D21A0445943D40BD8B9 /* NstBoardJyCompany.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 51882AB1BF2D64307CB26E25DB7A43C2 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B222E309AC91E1D67F520A0BF59B834 /* ServerTrustPolicy.swift */; }; @@ -538,19 +536,22 @@ 51CB2AF004A303202AC4E2E08B6DD4E4 /* SoundSDL.h in Headers */ = {isa = PBXBuildFile; fileRef = A159872320887E8CBF6333094E374F4F /* SoundSDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; 51DEAECB55482F9EDCEA83C6A1068D6F /* assem_x64.h in Headers */ = {isa = PBXBuildFile; fileRef = CA31C817FA32BF3FA44E8F3FD7273A2B /* assem_x64.h */; settings = {ATTRIBUTES = (Project, ); }; }; 52323B8DDC717EBF29016585E2D8C524 /* GBASockClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A720235BC5442B027233F68A35C4613 /* GBASockClient.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 523CB85DD9D51432DCC507568B4D3905 /* RSTLaunchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45858FC63D79F8CB87FFC7F4E24B4A91 /* RSTLaunchViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 524F9BFEF89FF358697E09E935BB0B98 /* Utf.inl in Headers */ = {isa = PBXBuildFile; fileRef = 8EB59526DBBF1B92F1C18D793F09DF21 /* Utf.inl */; settings = {ATTRIBUTES = (Project, ); }; }; 52722B0030C7E925E9C8304457491FFB /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BA5332776FCBF3B75CDD7168F2B8E2C4 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 527F7C5BC043908F70A5F76CF4A67D32 /* dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = D407D2A6DD08097D10D2B1117A8635F6 /* dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5284118A34B3FA1188F7A721E29FAA32 /* GLFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 442FF940EB7C16C5DB47BE217B7EAC51 /* GLFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 5295E7713294D31EF1DDFF6DF837BA41 /* RecordEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F9649F7A3943E90B3C543DF8F4BF8C4 /* RecordEntry.swift */; }; 52B5034639D515440864918FFC5EEF97 /* ftxf86.h in Headers */ = {isa = PBXBuildFile; fileRef = 1168E68918E5BF84E08E11C7B371ABED /* ftxf86.h */; settings = {ATTRIBUTES = (Project, ); }; }; 52B893DB672E18029FA04807F0771F85 /* Vector2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7E0AC0D5AF34E7D36AEA71DF98E8EC9C /* Vector2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 52E4F3DFED11D9653AEC0B37BFCA708E /* RemoteFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9A5EDA091E457F4BF1FF9D5715E8EF2 /* RemoteFile.swift */; }; + 52C7F165446EDEE8B62EDF1B97C036C8 /* NSPredicate+Search.h in Headers */ = {isa = PBXBuildFile; fileRef = ED33C93DD7E38C3D447A4941CDA4F4C7 /* NSPredicate+Search.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 52FB346983267085916C72E280E1820F /* RSTLaunchViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 816CBA26E3940C8402B8EFE63E169294 /* RSTLaunchViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5312806A7BA82453F7A3E5C233835D29 /* GTMDebugSelectorValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C85069E5F2ED830B22D7D1AB4A529C /* GTMDebugSelectorValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53193612E069ABF8B641F410AA3D7DFB /* RSTCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D324452F2442968D429ED7A0718561D /* RSTCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; 539DA186960FDD99E9DEE3F703694141 /* m64p_vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = E813BC0822BCCFFC9C89EBE5DAAD7F24 /* m64p_vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53ACC9A0EABD8ABE6F296A8E1405DFB0 /* RSTCellContentCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D9ACA67CBB81C221D9E4E05F8646744 /* RSTCellContentCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 53E7979865D43374645999E24E49E3B9 /* CustomRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF02F520CDA87AF4813D4764ECD43F5 /* CustomRoutes.swift */; }; 53ECC6163FB5AF3BBA2F3FAE6A8F1BEF /* DS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9925E412F176DF45C332321285001A55 /* DS.swift */; }; 54035E7677B71E7D130E4E693B211B71 /* ImmediatePanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD855AE6412C0DD63FC4D79544883DB2 /* ImmediatePanGestureRecognizer.swift */; }; - 5410DE9CCCA5B27BF32F53F10277BF94 /* TeamRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A222C0427237AEDD558FEFA410B5E021 /* TeamRoutes.swift */; }; 5433266A44831DC01F4FEF584030D6DA /* NstBoardBmc35in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F931544B104EDCB547B089F7B0707ED8 /* NstBoardBmc35in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 545FC6F90DB64D743272B9B6581C3A1D /* Performance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53E9D1B37411CE1669CA533059362960 /* Performance.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 547CBA7A70425F4F04C4541BA2F06296 /* F3DTEXA.h in Headers */ = {isa = PBXBuildFile; fileRef = 76C92A047E2902F98A561866E68DFBD1 /* F3DTEXA.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -558,44 +559,41 @@ 54B0F9C41BE6A78067881BEB750C1AF6 /* ThreadImpl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CA7F161EA390DDDF6ECB71EE876B89D9 /* ThreadImpl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 54B7FB35A2EDEB196FE50FF306656B62 /* NstBoardWaixing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7E97EB0C49F861BC8AC2D75CE54C4EB4 /* NstBoardWaixing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 54DB5CB9D0EAC284EE6DEA8C04591BD7 /* F3DGOLDEN.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E090AE4D2EB3F7EBC12F7527F8C83A7 /* F3DGOLDEN.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 55698521F5489EC8E9F7F03B2448FB94 /* RSTCellContentPrefetchingDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = F361E120BFFD12C4731934DEC8344968 /* RSTCellContentPrefetchingDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; 558A233C324EBAE74D567FDC751D1EB5 /* retro_endianness.h in Headers */ = {isa = PBXBuildFile; fileRef = 3762689E296E5EBA4CC56F2683522DF0 /* retro_endianness.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55E38E50C72F3898CD13D71706F1BBC4 /* NSManagedObjectContext+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = E90308ECF32EF009E33F9EEBA9B7C84A /* NSManagedObjectContext+Harmony.swift */; }; + 55AFC32EA7806D71F217B3B98789301E /* DriveService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0A4054A19C785C5941A4034583DA6A0 /* DriveService.swift */; }; 55EA606F85ADCDB8455EE53A2F280B55 /* RTC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D6C840B3C97CEC304F49384CCAA446AA /* RTC.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 55EDEBBE5DBDC26F854CD44F45A475B4 /* svpscmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 86BF9E53BBD7D649033BB1F156870DE2 /* svpscmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 56096E16210F97AF0E03EB7509C67B7E /* NSManagedObject+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3538A2EB4EDA6929B5D32A095FD21C6E /* NSManagedObject+Harmony.swift */; }; 5619A5DFD12F6FC67F5596883382EAA3 /* rasterize.h in Headers */ = {isa = PBXBuildFile; fileRef = 169291B84BEFD54121E345D556B0F9F8 /* rasterize.h */; settings = {ATTRIBUTES = (Project, ); }; }; 56487F87D42D4ABC274B99A23E38ED51 /* DSEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = EFFE70745486E1FF21AEAF435A71FBB3 /* DSEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 565B64F7F83F4F5FA29C34B97F0071ED /* mp3.c in Sources */ = {isa = PBXBuildFile; fileRef = 9622F656638DFB246B7A638CCF468156 /* mp3.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 566814F38EA775B45707EFD98C9DC53E /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14057D1AEA66E65BED2117946518BB10 /* Common.swift */; }; 566B02F81167FAAB363014E42ED15BFF /* Foundation.swift in Sources */ = {isa = PBXBuildFile; fileRef = D113E482EBF7C096302CD382067ECB51 /* Foundation.swift */; }; 5678ED8E60F31109D707A9CD20001EB6 /* Rect.inl in Headers */ = {isa = PBXBuildFile; fileRef = E149E90D3011EE5DD380C62CC073BF20 /* Rect.inl */; settings = {ATTRIBUTES = (Project, ); }; }; 569FF6B41CF726CC1143ABFC7C69289B /* fb.h in Headers */ = {isa = PBXBuildFile; fileRef = F650B1818D017BD4A14C1415647FCDEB /* fb.h */; settings = {ATTRIBUTES = (Project, ); }; }; 56F2FD6BBD1FEDD660C763B74D0367B8 /* SNESEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 46CC56588A9249D29F68E981CE6C8B54 /* SNESEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 574897C776D4A75F06D108C90308A36E /* UIKit+ActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = F6225E475A9B0FB7A6AD9A1B3E32D764 /* UIKit+ActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5788CF6580789EB32B111C2CEBE2FA98 /* NstProperties.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 436B7542629ABF7B0FFD6BB9B072FC21 /* NstProperties.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 57B0E2E5E730BB045DF85BD06E05F717 /* NstDatabase.xml in Resources */ = {isa = PBXBuildFile; fileRef = 3312E5853E083AE08720EFDF8EE603C0 /* NstDatabase.xml */; }; 57EE306DBB7BFA158EB2C32932C97AAB /* gDP.h in Headers */ = {isa = PBXBuildFile; fileRef = EE72931824332E351A9F7197A02E23BD /* gDP.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5832FA12F7FAF31EE942294C35ED1C97 /* RSTCellContentDataSource_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0CBABFAE419A9E2AB84F2A8EE7B71A /* RSTCellContentDataSource_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 584EB56FA3DB605AB85CC94E6E785358 /* Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E38834C7999CFB2670ABDAE5FC71FEB /* Sharing.swift */; }; 58502D5F6100ACE79187371096DD70CA /* mic.h in Headers */ = {isa = PBXBuildFile; fileRef = F93CCC48091B82BDE2E10023D5C4990A /* mic.h */; settings = {ATTRIBUTES = (Project, ); }; }; 585F0F53176BBD0133B388426F1871F1 /* ftsynth.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE800F01854521394EAADE8A06F1AA1 /* ftsynth.h */; settings = {ATTRIBUTES = (Project, ); }; }; 58670BDA59BC1476ECD1AE42A65DEDB4 /* SQLiteObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = FB1AC80F9908EC458F2880C5D2B25C33 /* SQLiteObjc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 58766C2ABA1EA78EBFDA6358071598A6 /* NstVideoFilterScaleX.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BD74931B096C1E1F3A72E00B9A1B4861 /* NstVideoFilterScaleX.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 588857A888B8FB50B5729755048AF5BE /* MemoryStatus_mupenplus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 876C8D28D439902E84EF476C79F7E2C8 /* MemoryStatus_mupenplus.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 58A8D33FD84F62BA37B6B53109F22783 /* ROMReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 01BC5E003AE565B6B711436BFBF86BF4 /* ROMReader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 58B5EB01C16F961316330E4D251E7648 /* UploadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B236B2DB89B26DE7B16E762CF3080C5A /* UploadRecordOperation.swift */; }; 58BE7AF2705F2F19B2DBD0077245F46C /* Flash.h in Headers */ = {isa = PBXBuildFile; fileRef = 03D0F6F861896F902FD904A5CA166856 /* Flash.h */; settings = {ATTRIBUTES = (Project, ); }; }; 58E498558486634EC0D30463A80E740B /* N64EmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 124A9AA8BD80FF606241A3E34CBF4039 /* N64EmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; 58EA70D5ACB9CC2718AEC1AEBADFB157 /* SndOut.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F0E6B2352802896ACECD64204A6113D /* SndOut.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 592095BB4B63DA9A913D330FFA26905F /* SyncRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47D47AFCF1385842685E8C07121C8BE8 /* SyncRecordsOperation.swift */; }; - 59462C1E4E16ACC6FD20C786FE5D2A1A /* DownloadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 450775B09B5A404AD4A5910F22DD06C9 /* DownloadRecordsOperation.swift */; }; 595257C1536BA8947FF6874613BDCDB6 /* GLideN64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 92C0056228C548EC5C0C4574520A559A /* GLideN64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 595D35169DF7A7E588E3506A701E1E5F /* device.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BB6F43FE56F847084FF20D1BCB4BFAF /* device.h */; settings = {ATTRIBUTES = (Project, ); }; }; 595D442EE6024B2BC9706D1C80ACA0E8 /* bootrom_hle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D2AF58B1BA6D02D19EAE80F80E4CA9D /* bootrom_hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5964FD1B899EE5FDD4F98F594BC29971 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D9AB238C0D8C37F7486D77CC4E9BF4 /* Errors.swift */; }; 599D552BADBF132BAA36F06CCCD06913 /* NstBoardBtlSmb2c.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B341B464E13F5C77115D01AF3A303C0 /* NstBoardBtlSmb2c.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 59A3B9B600C967F014E52F7EAF8E5A7B /* ftcffdrv.h in Headers */ = {isa = PBXBuildFile; fileRef = FA571B46E66CC61957A2EC9659B40B5F /* ftcffdrv.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5A09E36B97C75FB76C579219F68AEEB9 /* NstVector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCB1D2FFB53452577990FA3D356A4DD7 /* NstVector.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5A0BF65D720FB2B9FADC78A474E6A81B /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783A65AE17A33F0C1C242F5B30F01680 /* Archive+Reading.swift */; }; 5A79C28FC58E9C640DFD7AAF04AF8827 /* NstBoardBmcA65as.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1D8AA62CF8EE1D7BD51C30F2874CC2D2 /* NstBoardBmcA65as.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5AA3255686819EB4DD24A1FE23CC6F28 /* Contacts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23C9343FC4FB0FD507A750B3EF697747 /* Contacts.swift */; }; 5ABA51E69DCE967FCBED1A337D04F0A7 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = EE94484CFDB733F9B6B76E0416EB735F /* Standard.deltaskin */; }; 5ACC5FA32C77A54CBFEC08C34ACEACCB /* NstMemory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D5643A5674D32FE8D35CE78AF0B30F39 /* NstMemory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5B0F1790A09DEAEED24FACF655B74D15 /* GPU3D_Soft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8DA8A3992CF991EF375A78B56D07EF09 /* GPU3D_Soft.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -605,7 +603,6 @@ 5B8015B7318B3B0B1F9EE8F7C50D32FD /* bldno.h in Headers */ = {isa = PBXBuildFile; fileRef = 44EC5F94EE5BFE7A785C5541E9210F90 /* bldno.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5BA647B9A69EDCD1595E3FEB8E6578FD /* game_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 5536CF5E11B5E15ED66757BB394C8694 /* game_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5BD8D84D6C59417A4EFF51A407BA04A5 /* NstBoardSomeriTeam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56D472264507A3544C43D6606FB37390 /* NstBoardSomeriTeam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 5BEFEF83E88746F60EE96520C83CF8B1 /* RSTPersistentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FBF06615B56E55808CEBADD68B920BE /* RSTPersistentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5C0E83E8F9A332A0387AD2B357F24AFA /* cached_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FFF20A5E29BABF9B99B4C36366F9A7B /* cached_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5C1E536FA29DCD2CDE81FC2F6763DDBD /* n64_cic_nus_6105.h in Headers */ = {isa = PBXBuildFile; fileRef = 112637F718E98C3499172684DAB993A0 /* n64_cic_nus_6105.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5C2C50048DF9D8C1D128711187453A8D /* GTLRBase64.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ABF32DB7C03DC858879C758E39AAD27 /* GTLRBase64.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -615,18 +612,21 @@ 5CBAABCEFDC66179124839AB147498F9 /* convert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35C4D4998448EFC8D73C7526A9E0766B /* convert.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 5D11ABFFC6008AB58F5E115BC314596B /* NstBoardGouder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 452F3BC887D4177C15C6B566333C123E /* NstBoardGouder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5D1E6BE0A0E8D935882B998543A6F349 /* ftcache.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D32A452E67E305E30D5F18EE62B91D /* ftcache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D2D937335FB8F9AF380046375071121 /* NSPersistentStore+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3A1CF8E39DF40FA5839CDC129FE69F5 /* NSPersistentStore+Configuration.swift */; }; 5D4477D8A8EA4FFA5F4E8070AD083CB6 /* ftotval.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EFE9AE79EBD67A282DE349ECDBA9D52 /* ftotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5DBB580BC90D0C0893FC692F012A0B28 /* NstBoardCneDecathlon.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94A3287DE1F597EEEB81597618FA9901 /* NstBoardCneDecathlon.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5DCE35D43645F115E45047AF1C1A94B7 /* dummy_rsp.h in Headers */ = {isa = PBXBuildFile; fileRef = C0BD20FF1A75F7E688073AEAC0E0E421 /* dummy_rsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5DD06D21128F42B70A68998A0DD6E549 /* assem_arm64.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AB8A827FC69B7712131051BF7CDAEBF /* assem_arm64.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5DE22207D1B1CD7A583F52895E942007 /* CustomRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EF02F520CDA87AF4813D4764ECD43F5 /* CustomRoutes.swift */; }; 5DF0A3CA62FCFD5CB7345A9B97F10049 /* NstBoardSuperGamePocahontas2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5884B3D9687E41073D6AE9F4960640D8 /* NstBoardSuperGamePocahontas2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5DFA7B4B653B42D7A547C3A60EFD77CA /* Joystick.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 14C71D27630335B15939DD0664CE76D0 /* Joystick.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E34D71A8EADC6BA23C17B97A689613A /* RSTFetchedResultsDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 2090E7B6074A480B545986DD5394BCEC /* RSTFetchedResultsDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5E39903C4C3C854D8A8F52D82FF51ED2 /* bitmap_font.h in Headers */ = {isa = PBXBuildFile; fileRef = A2D4C88AAB9529011A0BC78A5F8FB349 /* bitmap_font.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5E867F07B815D3996727D00C99F2D198 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039A7DC666394A7FCDA8D0587DD80EAD /* Files.swift */; }; 5E8C4F8137E41A59A3EE4DE28307BB64 /* DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = FA3CDDB5072744264D4A7519AE6D6A63 /* DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F3811A8B4109BA4B752316B90429F4C /* OAuthMobile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A552ADFE847FA0B9435F038FD25C6AB /* OAuthMobile.swift */; }; 5F45A12D5CFF64756E09AD77EF5081E1 /* Transform.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7C7EB4C3A9DB67B4B73C20A18B53EA47 /* Transform.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F866F4FE66A6B1298B1571FCE26E0E2 /* TeamRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = A222C0427237AEDD558FEFA410B5E021 /* TeamRoutes.swift */; }; 5F89935F0D9FA301409E399D2B40B501 /* pakinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 7550F86AC04930B4F25BF5030BE49B93 /* pakinfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F9DCF2F05D919954205843FA5B47601 /* NSManagedObject+Conveniences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F35A6C365B629A2562A7BDA3B96F82C /* NSManagedObject+Conveniences.swift */; }; 5FD5F0CF6C721D19713FF7C5E82F1829 /* NstBoardSachenS8259.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8523ACBE5D20530D62699515CC0C275A /* NstBoardSachenS8259.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5FF9738199FD4275E4CEF17EB2FD0E14 /* NstBoardBmcMarioParty7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FF0C7BE73DA19DD12046FF44E95DC7E7 /* NstBoardBmcMarioParty7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5FFED05405EB077DD3158D0203FEEF2E /* NstBoardDreamtech.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B72A5A5016919006907A70C26E61B891 /* NstBoardDreamtech.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -639,10 +639,10 @@ 6109531B72E4E232C02329870717C7EF /* NESEmulatorBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA3B33FD961F7E04608908F29394499A /* NESEmulatorBridge.swift */; }; 612626E2EEFEF0B280A30622DFCB55C7 /* NstApiUser.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9AE76E7D656F9FC63729D2FE6CF2EE4B /* NstApiUser.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 61637EE91267F265A7F4EB3CECCFFA1F /* NstBoardBtl2708.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E264A0D34041EEDB230760A4DF155023 /* NstBoardBtl2708.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 61AC25CFCBBE20BB139C2C218CFC317C /* NSString+Localization.m in Sources */ = {isa = PBXBuildFile; fileRef = FB5E73C8C7F0D5AB282E9A29954B036F /* NSString+Localization.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 61B583689DD2CFBD46FA3712A184E2E5 /* CheatFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 795C12A193997827B4ADD870D87BDF8C /* CheatFormat.swift */; }; 61EBB111287EDF6AE4ABF04DA5A396CF /* NstBoardIremG101.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D81B0A638756575C41CA82842260A641 /* NstBoardIremG101.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 61FA017D4AF7688298FF0FB9F4251FFF /* F5Indi_Naboo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D35DC1DC3A814BF1FDEBF8BA115A3C0 /* F5Indi_Naboo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 6212289ABD96C811DCD8B09B9BCC1E9B /* Operation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA23C36C890553725FA9BBEBC0789829 /* Operation.swift */; }; 6212EBD634EBA7AC7214545989DC7AE0 /* dma.h in Headers */ = {isa = PBXBuildFile; fileRef = 54ED6F866B4324DFC72570435F1EBD41 /* dma.h */; settings = {ATTRIBUTES = (Project, ); }; }; 62340E0AED101FFE91C18C91AD9ACEEB /* MelonDSDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C3381B8A55051B7129CC78CA0231C2D /* MelonDSDeltaCore-dummy.m */; }; 6252AC3C230BC83234C9D7D7F17455E5 /* GTMSessionFetcherLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E4A6FA078E5D38752214D65807E3B87 /* GTMSessionFetcherLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -650,20 +650,25 @@ 6281A81C693739FBEEB99068ADE81F94 /* cpu_detect.h in Headers */ = {isa = PBXBuildFile; fileRef = 3197530A210649B738C6111BF7966B53 /* cpu_detect.h */; settings = {ATTRIBUTES = (Project, ); }; }; 62949FF9C1CBB808257B793D91067BD3 /* NstNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C786A086E27CBD3229EFD85CE7497EC8 /* NstNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 62A34A388C71F471F3585E7D042A16AC /* AlResource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A391671858B2C18AC2A7795F92FD3F03 /* AlResource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 62A4C4112E53E9D9BADF04EEEBB0EAF3 /* Paper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F9C1E6A3EFB7439D016876D6537610 /* Paper.swift */; }; + 62B1CBFEC1B40F6F9708AC34C58AAC14 /* RSTSeparatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 329C5C85AFC08890DFDEC9E233470EF0 /* RSTSeparatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 62B7FBE67CF99461BEF5CE97C50FE424 /* file_storage.h in Headers */ = {isa = PBXBuildFile; fileRef = CF4CB213C78DA27A2EF987CB656BA480 /* file_storage.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6322A14CBDF57EF29695F820A403EDE2 /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C0BA17B21F19930A3F7215B702D7372 /* SDWebImageManager.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 63427690A77B2B5436666DAF5706611B /* Err.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB5B6F86BFE8AFABADAFCCC745D013FE /* Err.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 634773B1E340AACEAF3FE0D1F31F51D5 /* gbafilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D0B8740C1A5A02C3EBF2D3FF634FACF /* gbafilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; 636BA008A6D26E9CDAC0E0358AF55866 /* SoundDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA06CA70E6579DA7013F9BF0C6148C7 /* SoundDriver.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6373AC1BC02916DA7A4727231D4E72E6 /* ControllerInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3104A99F1E2E5DCD9FCE463C1BCD842 /* ControllerInputView.swift */; }; + 6386966113107ED98A186F6FD7CE849D /* RSTError.h in Headers */ = {isa = PBXBuildFile; fileRef = DB18069D26E35C1BEFE5C4A0262422E8 /* RSTError.h */; settings = {ATTRIBUTES = (Project, ); }; }; 642FFA142ED6C17EF6E07F09CCB95DE2 /* ThreadLocalPtr.inl in Headers */ = {isa = PBXBuildFile; fileRef = 6A98E587E6533A6DF4F4624F83C3BD14 /* ThreadLocalPtr.inl */; settings = {ATTRIBUTES = (Project, ); }; }; 6446ABE3984EC295A073DDF259A3968B /* tile.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B74C9DADB72CF0883D582488B13ED6 /* tile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 644DA2A6ED8D65DD05C30EACC26425F5 /* NDS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A854F4317FA28AEE4189EE7FF42C9E3 /* NDS.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 64AAC890C5FE81CDEA42957859B1A198 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 21A623E3F7E900942F5A6AD1E693832D /* Platform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 64BC16BB087581808D84B9DF1449009B /* TeamCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 244DCF4A8FC46E79A6101C49202C0DBD /* TeamCommon.swift */; }; 64C9989CD9A4F9A39D9599A0881F5655 /* GBALink.h in Headers */ = {isa = PBXBuildFile; fileRef = DB6A84DCE2259D650CA6872E7BC6A3C9 /* GBALink.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6502705CE8C9907BF33AEC009AAE49A6 /* NstBoardIrem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 20D9584841AECE27BBC056E45740941F /* NstBoardIrem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 65082519D0CAD54D4495C068E0E1CC75 /* ftrender.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E612D889BCF639940A7B442ED45DC84 /* ftrender.h */; settings = {ATTRIBUTES = (Project, ); }; }; 652A1D1BC29758EF8C914998DFAB0F96 /* Mutex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7C65583B30F5CE8CB3A417DCFB648306 /* Mutex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 652C6F1668F693049AF2CAA6C39E1221 /* BatchRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 827EE579CAC3B6BC2572230984CD7C55 /* BatchRecordOperation.swift */; }; 653EFAF65992560FB2370C51780DB91C /* SoundBufferRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4D26635313FF0E89E645E701C664260 /* SoundBufferRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 6556E55EE066A70B571AA0F6018B0988 /* GBACart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 649A8676EC984C0C8FDF1CCA5D3FF80D /* GBACart.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 657244809950CE301AD70BDD7C2D4DE8 /* NstBoardFfe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48362C4E645985DF12660BB2415B0487 /* NstBoardFfe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -675,11 +680,14 @@ 66D90649D3F20F5DA87EC0A5FD2168D3 /* NstBoardBmcHero.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 430D8BC642B862DC5871DCA6D4D4B26A /* NstBoardBmcHero.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 66E68D161A3E4F2F8CF51848F5E11C60 /* STTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 80E83F0F41410406BC51FD2A72523649 /* STTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6728DD595016A88D0BE42E03C7F8FFCC /* GBC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48CE2ACA6C2A3B34E052EB69D646F08D /* GBC.swift */; }; + 672E8527485DEAA8EEA27E5C8D8F1DBD /* ServiceOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DD25012950497FA0453E5082F7EA9E1 /* ServiceOperation.swift */; }; 675105628714D68862DC480B2632FFC7 /* MMU.h in Headers */ = {isa = PBXBuildFile; fileRef = 88C31AF11910728A45F6A72A4BF44968 /* MMU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 67B903C43F0624E9D3197A2946A84B0F /* UploadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72C85163404B74BC3D909E4934D4CBFD /* UploadRecordsOperation.swift */; }; 67ECCA37061F91867BC2AEA13B836BDB /* SNESTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 360FE52BEEE04312C550B83F42CCF550 /* SNESTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6853624E43A5EB0CA069A0F55C3C315C /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EC397E433E2CCBB38824AB04FAAC26C /* NetworkReachabilityManager.swift */; }; 686D0B1F993B01BB1D5BC33F543DDDC5 /* files.h in Headers */ = {isa = PBXBuildFile; fileRef = B5D0F2204128CF6B384D5E2619FCFA0F /* files.h */; settings = {ATTRIBUTES = (Project, ); }; }; 687F1F311F418FE895B2D96BF3617B14 /* mem.h in Headers */ = {isa = PBXBuildFile; fileRef = 123BC6ACD39EEA715F0A93879B490B14 /* mem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 68EB54AD3951E2047840FCEC762120A4 /* RSTCellContentDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C982B805086D1D5E4EF8373EF7E777A3 /* RSTCellContentDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 68F7071AB87ED8CB4B8CF11F7BF9A78E /* Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C8D94F40BF63E8927B70BB024B0F136 /* Connection.swift */; }; 68F955348FE9A8B6BCE3113CE94A7DE3 /* remote.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FF9B56C14F9DA7D4C860A76893C21C5 /* remote.h */; settings = {ATTRIBUTES = (Project, ); }; }; 693CE9D53961CFDE9E0763B45047AA96 /* wifi.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FE86A7AE75D5AB202DCEB5C676F51B /* wifi.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -688,33 +696,32 @@ 69F42D441E70A657FF8BF5E94B3D92AD /* ConfigDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = A590F12D65E6986C2D6F38990BFE02DD /* ConfigDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6A026169417ABD0A23A1DC9340A243C9 /* audio_out_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 2212C1BF0C50BC7C98BA6A5202DD8DFC /* audio_out_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6A07D0503F964D4BA74E6F726D679DF7 /* NESEmulatorBridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B5984855E15D790E1B69A1BD578ABC85 /* NESEmulatorBridge.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6A0B180E215F5233AF5756F807BCCB70 /* DeleteRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0419ACD1F07D5887DBDF37B3A5C7BFFD /* DeleteRecordsOperation.swift */; }; 6A245DCAC5A1FD3F8943F4FD3E1473EE /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 71FF835F27DBABBE447A40E51AF4AC68 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6A386F883B6F86FCA792C8C1134057CA /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6365C9968A510968784A08051605D583 /* Result.swift */; }; 6A4D554552A991D3E852728A46F11C6C /* jpeg.c in Sources */ = {isa = PBXBuildFile; fileRef = D72335FEE7B69D06AC33B707144B50DE /* jpeg.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6A71F6621B7270DC4E9CC3469057DF8D /* video_capture_backend.c in Sources */ = {isa = PBXBuildFile; fileRef = F074B8ED12CB119F2AD98DE96C9D1E1B /* video_capture_backend.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6A90DB9252F5F4A3ECBB6AD4F22A1352 /* GTLRRuntimeCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = F97E0802AC94B24B1FB03E55CD9A2FAC /* GTLRRuntimeCommon.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6ACAD89B30AD04EE41D0ABDD3FB3A546 /* slot1.h in Headers */ = {isa = PBXBuildFile; fileRef = 287CF3209EFBA423F838FBAE494AB0C0 /* slot1.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6AF4C6E585CFF93B76EC9C45FE0F7CB1 /* Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039A7DC666394A7FCDA8D0587DD80EAD /* Files.swift */; }; 6BABA54BBEBA347D766C48087A4F87D0 /* Patch.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AFD09F14D0DA01868F50B237A0B76B1 /* Patch.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6BBCF5E1AC45FC48B7C6E6AA2A19E03D /* DeltaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = ABF2E1030F06335CAB068D719C129216 /* DeltaTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6BD8B0E292B94BC9D8A9CBA583D4A79E /* MelonDSEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F014A83DEF4F355ED7E7CBACE0FBE07 /* MelonDSEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6C01BBF8A1A21C9696500E148349BC14 /* AnyInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90564B99F2C2EF43FEC4BA55EEF618FB /* AnyInput.swift */; }; 6C138F122959D82C0E672FA0ACE8F007 /* ppu.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BB33D23E1407CA689F462EB7799485 /* ppu.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6C3EDF35E292C976B60BC1E147F8DE93 /* ftoption.h in Headers */ = {isa = PBXBuildFile; fileRef = 94D43A3C12E2607439AFFC8A1D1CDE41 /* ftoption.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6C6915CA122E8B4630061446128E2BCC /* Paper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F9C1E6A3EFB7439D016876D6537610 /* Paper.swift */; }; - 6C87671F7C948E465D76853474A7F27E /* DropboxService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17FD4E3456BB23320C0E9F652CC29D1 /* DropboxService+Records.swift */; }; 6C98F3F29A1ACE6C91C20CE35EDA0261 /* NstBoardNamcot163.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FDBE09509A57E9C26585D21FA1FB381C /* NstBoardNamcot163.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 6CC46121EC9565CF4428346AAE080BA2 /* ai_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D58E3495B9E3434BF573543720CB50E /* ai_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6CCA5E08C0EE887CD4CF0DB92C7787C5 /* cp0.h in Headers */ = {isa = PBXBuildFile; fileRef = 82C8F13E35C588F34CD7F1A313360A79 /* cp0.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6CCACC2383F5ADD7F92D95FF4C6CDD56 /* GBA.h in Headers */ = {isa = PBXBuildFile; fileRef = A8939FA4EA41B857876F33812D829B63 /* GBA.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6CE7F4046BA417D2DF53E0C69D47B473 /* DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5393A36A3C22644206D6D5187A6B0285 /* DeltaCore-dummy.m */; }; - 6D1CB98C0BB063D06CF4A3B13B4D21F3 /* OAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 542213FAAE95E6EA5E3E9392D8DD3B49 /* OAuth.swift */; }; 6D4FDCA328DD8D76500CEE55AA8663B6 /* adaptivesleep.h in Headers */ = {isa = PBXBuildFile; fileRef = C82F87697475573C237F91B5498957A0 /* adaptivesleep.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D5F88F8EE3492C0AD55D6CD854681EA /* LocalRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA5774FC0B40EC779613DB64E15C046 /* LocalRecord.swift */; }; 6D72C6C57A885CD6E28DEA598592E6AB /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = C94926745D8A006AA0A950A854249A42 /* Standard.deltamapping */; }; + 6DAE486B1976E8FC94C3256134BA7B05 /* RSTOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DE3498D124753251241C3DCDB5CB194 /* RSTOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 6E50F30E4BECE7A6C3531020D1E5C59F /* msu1.h in Headers */ = {isa = PBXBuildFile; fileRef = FC26AD726BEA827DE29E8369FB6303C6 /* msu1.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E641CBA9D3432EE8F9C70B2E0ADD86D /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3774F3AE37BF4A348A3265BF0F216FF6 /* Errors.swift */; }; 6E64571D846DA6B46DEF71405A2C71F7 /* GTLRService.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1B35A10293013EB1FF554F7BEB76DC /* GTLRService.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E77A5D834F1A5B81DFB7C1955085F93 /* RSTToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = 18A21C316835DD316654A070B9E838EF /* RSTToastView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 6E67518B517E043032C39BA7459F1C1B /* Roxas.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE57A68E189FBFDCA39ADF0FAB28195 /* Roxas.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6E67DC0121BCD2D826D4BCB12DE462EA /* ContactsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77CE0C99378A2FDADC3F70471D336C79 /* ContactsRoutes.swift */; }; 6EA0A6FE9CCD2699B6BEF34376E9649F /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC1B770F09F0C669234396A39BFF6BB9 /* SDWebImage-dummy.m */; }; 6EAC3C9446063F09611B9BE55D8D34C1 /* SQLiteObjc.m in Sources */ = {isa = PBXBuildFile; fileRef = 89132F0647F462DF7B2532346D3447EE /* SQLiteObjc.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 6EB1210C8C6387994CFEDC61EF67F9CB /* osal_dynamiclib.h in Headers */ = {isa = PBXBuildFile; fileRef = FE17ACA9391DAFCA51DA8FE4929D2B86 /* osal_dynamiclib.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -727,22 +734,26 @@ 6FC18CA0020117D5096CF72A20A94C68 /* SPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E319DE75A7A4BF735167A2B78A55635 /* SPI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 700240FA8626FBCB8DD1E6A528883AEC /* GBAEmulatorBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5F716F68D783146B202EC8FC938BC98B /* GBAEmulatorBridge.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 70035AF1D8DA93A9B0572D1D91051A47 /* gdbstub.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D2B3BDB29EB37DAEDCBC3179FAA6100 /* gdbstub.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 705E7B04E1FE3269939CC5C40D83CACE /* DBChunkInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F2AC6B33D1F207C23351293A0A281146 /* DBChunkInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 70AFFCAC4CE322C09CE2DC0E3E7EA378 /* NstInpAdapter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 213E27CCA1F2F1BE726697432009E2C9 /* NstInpAdapter.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 70B5E10C6A4B9C465AC2BE6C2767396C /* Transformable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E7771F7C5B8F14F803F19FCEB39CD0B /* Transformable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 71090B7AF02512A3B3624247E31E7431 /* NstBoardBtlSuperBros11.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73ECDB6212A48398010C7457141CC1B2 /* NstBoardBtlSuperBros11.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 710BC5A2F29335F987FE9EAE689C1AE0 /* ConflictRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 961E505AC749C4E7A72842C5B3EA73E5 /* ConflictRecordOperation.swift */; }; 7116D7C10DB23AB14A29E3E244C7D192 /* pshints.h in Headers */ = {isa = PBXBuildFile; fileRef = E95A0C3C6E26DB4E26E12433BE937DB1 /* pshints.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71818CFECCB549FFE9A56EFC73229B2B /* NstBoardKonamiVrc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AEB306B4037EA4CACDF06823F9F7AAAE /* NstBoardKonamiVrc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 71899F8677CC515B1F31599325E0A396 /* GLideN64.h in Headers */ = {isa = PBXBuildFile; fileRef = 96E4AAD82240CB7384572BAC20D31685 /* GLideN64.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71AA41AE32E777F4B006FB4081D4861F /* ftlcdfil.h in Headers */ = {isa = PBXBuildFile; fileRef = E963BB1D802954605DE54BEAEAA046C0 /* ftlcdfil.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71C0A367EA0BA6BF86EE30AD3006E1D0 /* CP15.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B9BFC6434EFC695B07E4DF1FB6E56F95 /* CP15.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 71EA74C198A648D870637C95EEE638C4 /* Roxas-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AE6AED1C735BB477D425F99206A28D87 /* Roxas-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71F165CEF54AAF42E33E0A441214C7CF /* wst.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F279CB05ABD733ECA41FFA2F19A00B6 /* wst.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71F48A761E904B61058CFF99033FEA6F /* SDL_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF571FDBAF68294C828B93CF7AB2606 /* SDL_config.h */; settings = {ATTRIBUTES = (Project, ); }; }; 71F6A8B4B3856EB5415745A312B82590 /* NstBoardJalecoJf13.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E10F919F295AF23B2D729F89AA44145D /* NstBoardJalecoJf13.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 720FCA30A4C182ED051E744734F1C428 /* Parameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 16C1FB014388E9D1E47EB7DCC0CD0682 /* Parameter.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7233AAF19B42EC98BCBC88D0845B541E /* AnyCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD616B770BEB5DC114E3497D623A5389 /* AnyCodable.swift */; }; + 724D1A56B5D2A6D136F510B60F25E6DA /* BaseTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFADC4424D377B458AE08BE73A8876B0 /* BaseTeam.swift */; }; 725659474D79DE81422134C09E0F1388 /* mbc3_rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B4031DF8DC8C7AA073B8FAD5893715CA /* mbc3_rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 72B1945C2E80532FCF4F8003F26CCC0A /* NstCpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 32C6794E2F48E8D40B8DA4F984505F38 /* NstCpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 72DD532BE9D0102D2688E11ACACFF362 /* libco.h in Headers */ = {isa = PBXBuildFile; fileRef = 4963CF582BB4AB9E1079BB9ACCA4C395 /* libco.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7318758AD19ED796253C58AAA18E98AC /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76762292E978FDAACA63D856A9CD4F5F /* Async.swift */; }; 73292E5A2AC3196B5409A496BB5C5541 /* PrimitiveType.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56244C2165C1707D7E72E9B0F3441A1D /* PrimitiveType.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 732E8D78332799826AB444440DECF472 /* DepthBufferToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 033421C4854AC34E9F0A5215AE7F3AE4 /* DepthBufferToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; 732FD811EC8A5BA0B28708137D0A45D2 /* logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 420E3047C00A76F43CBE5EDA68BCCEF1 /* logger.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -755,17 +766,16 @@ 74B438724E9EA3B46DED43330AFF691C /* sdd1emu.h in Headers */ = {isa = PBXBuildFile; fileRef = E33F73E03E8DBCB9A561F9D7082C8EB3 /* sdd1emu.h */; settings = {ATTRIBUTES = (Project, ); }; }; 74BD141762B0C89C185D3ABE65E58448 /* NstBoardHosenkan.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1D48E1464F25EE094AB21C99E9CDC8BF /* NstBoardHosenkan.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 74C1EC2D9E5FAFAE8A89018C1B79FD90 /* NstBoardBmc1200in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E9B5611EF6F1B6A753A3169A802B611A /* NstBoardBmc1200in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 74C7BF54656C67DEB87098CB74EBFED4 /* UpdateRecordMetadataOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72B1BA0104CB37793A0BEBF5E0F3FFB8 /* UpdateRecordMetadataOperation.swift */; }; 74CF4098668D8E59F2F415F232C54506 /* NstVideoScreen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 75C95A2D2A55102279FEBE572C7A8FB0 /* NstVideoScreen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 74D859213990282C35C19B6D2313E0E8 /* RSTOperationQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B9083EB242665508C97535A7311874C /* RSTOperationQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; 750A3EC4EB2B4BECA8FBD1FEF42CA4B4 /* svxf86nm.h in Headers */ = {isa = PBXBuildFile; fileRef = 593847BA38E9D8A068903E6A731921D5 /* svxf86nm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 753C7E6021A90C69A401D819AA4460D5 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = 42052734B8AE23EA17D468F6CABDCEB7 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 759259D0FA5CF1B1F17C4366EB18A527 /* Version+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F3E6F8779962F4C9E9EF3F90EE73FC3 /* Version+Dropbox.swift */; }; 7593F5DFD1D1C51D15BC5D4B95DDAA11 /* tttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 021A9462364AFC38855FC545DCD6A6B0 /* tttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75B06D656B71606BD4C8995494313BDE /* PropertyGroup+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E354663056D2C09F9EBDE7F3F20EF4 /* PropertyGroup+Harmony.swift */; }; 75B85A307530462BEDD1925293E1B335 /* ffmpeg.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D8F9B8A6D48D5044338BCB2BA139DA1 /* ffmpeg.h */; settings = {ATTRIBUTES = (Project, ); }; }; 75C08B83D5F3E9E679CE2F1619FEF158 /* NstVsTkoBoxing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A36271D99C74D00F39DEEE122842B93E /* NstVsTkoBoxing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 75D1998BA476E5CDFD8EB74BA3937628 /* TxImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE1843CA9E6FD7C78006C01BE4BD5C55 /* TxImage.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 75F7A8F8126A9FE9B693F50E46A15BDE /* NstBoardKay.hpp in Headers */ = {isa = PBXBuildFile; fileRef = ED915D94AD96A862B32BB7B60A454CF2 /* NstBoardKay.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 75F91B2E184792ABC31A9D8F080128D8 /* DBChunkInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = F2AC6B33D1F207C23351293A0A281146 /* DBChunkInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7600E2531605A2A26F7F3F1DB55B392C /* F3DDKR.h in Headers */ = {isa = PBXBuildFile; fileRef = 47298EADB145DA1C5DC8A5C800E652FD /* F3DDKR.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7676FAAA46D6F17DD9B7DD349475C457 /* Packet.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 26031A010DCC281450512C72B41CD425 /* Packet.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 768B2C4AFA4085D689670C5E4A2DC664 /* rumble_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 55532BC2B4B4E3B9BF96424544F7A510 /* rumble_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -778,16 +788,21 @@ 76E9947CFB8C27CE5BC16E70BD417614 /* PlatformConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B426B703A1D05906A76F9144E7FA0433 /* PlatformConfig.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 77338E935B4CB0FA16154F8F845B9F74 /* NstPpu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2769336E22CE289D3CE9EC20CBF91610 /* NstPpu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7736A8964115F20A8A6F09230ED8814D /* Time.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4293F313CBA439948FBF2F6EC87D6390 /* Time.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 77708024733DF3B64F127AB9D0E5C5EA /* RSTPlaceholderView.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F23CEC53278E0CEB1614056B5D4F8C /* RSTPlaceholderView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7791F35B4A38E6CE348A2D1DE92352E5 /* RSTHelperFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EE40C178D686A2BE9C93C6CF7FAE736 /* RSTHelperFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7793407AABB80F7FF59D7C5516D14FD9 /* ExtensibleEnums.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13D3D42973146D80916E32B3BBE3D0A1 /* ExtensibleEnums.swift */; }; 779506F02BC9F1B6D03763D7F639DC9E /* gb_cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F8AB3F41F84C94BBEED8C22E4E61BC /* gb_cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7818851D20DA2D669A8C12B16316D10E /* NstBoardBmcVt5201.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C74DB15319EBC3307C2EB1ECF5912CD9 /* NstBoardBmcVt5201.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 782D25D106A1BBD0EAF71785CD156EEC /* RSTCellContentChange.h in Headers */ = {isa = PBXBuildFile; fileRef = A490B0EA1911CAE566D521752DB9B643 /* RSTCellContentChange.h */; settings = {ATTRIBUTES = (Project, ); }; }; 784CEFF3C72E1AF35D75B1E0B1034A63 /* pngwtran.c in Sources */ = {isa = PBXBuildFile; fileRef = ED6B167EAADE8506F1864999731E6AD6 /* pngwtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 784FA9B23810514FC07D672B0440BB4D /* StoneSerializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDEA401B77A227622E55445028991383 /* StoneSerializers.swift */; }; 78560D7AC30CADA128CED2F38DB0C367 /* NstPatcherIps.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6E3F8E9A443CB8805EFE8175563E893E /* NstPatcherIps.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7876D3F7521DB44C406A743CF81BEB47 /* NativeActivity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E8ADEC5003627F607F9CB7482F3C79DD /* NativeActivity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 78854273F8EDC9A5D78C232FA70D43A1 /* StoneBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FE893CBC159403181F3126C6C7917D /* StoneBase.swift */; }; + 7887DE6900C9CE9E0DB8699DB9CA66F8 /* RSTToastView.h in Headers */ = {isa = PBXBuildFile; fileRef = 275D08AF3E80D1A5B843C23F36F20FE6 /* RSTToastView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 788B83D78AB9E0EFF886B1FEB9295554 /* obc1.h in Headers */ = {isa = PBXBuildFile; fileRef = 949E3958BCE1694E83B41187962E38E9 /* obc1.h */; settings = {ATTRIBUTES = (Project, ); }; }; 788E19683756F921D267319C0BC8D9D4 /* EEprom.h in Headers */ = {isa = PBXBuildFile; fileRef = C769B8DF9FD73419F7A8CE7F4C7192F4 /* EEprom.h */; settings = {ATTRIBUTES = (Project, ); }; }; 78C5E2360BC824E2EBEB025EEBCB2DD1 /* vidext.h in Headers */ = {isa = PBXBuildFile; fileRef = F4E1FCF713C18921783474BD5B489966 /* vidext.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 78E3AE936B1C1323F051C929214E92C6 /* NSLayoutConstraint+Edges.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B960281116744CE51DCCFCE5C6B616C /* NSLayoutConstraint+Edges.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 79168BEC654655F20E8D99687F8B42CD /* NstBoardBtlSmb2a.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CD3757C91C65FB4E4EBAB668470109FE /* NstBoardBtlSmb2a.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 791ECC26E09854BE01A5356B8FB4FBFF /* skipsched.h in Headers */ = {isa = PBXBuildFile; fileRef = 592333B6A8CE7E474E19C151AE976FBE /* skipsched.h */; settings = {ATTRIBUTES = (Project, ); }; }; 794676EE5CFC0814F95A6272B9BDF48B /* CRC_OPT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E535808FC30F7474AE914FD2270A2715 /* CRC_OPT.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -795,43 +810,46 @@ 79B87F9346B983172FE030D9C0584BAA /* hle.h in Headers */ = {isa = PBXBuildFile; fileRef = FBE1F9090B5DA68190D7B03CCE5E4629 /* hle.h */; settings = {ATTRIBUTES = (Project, ); }; }; 79CB4C69D5B62C1F128632103768629D /* Listener.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 48316C3FF62C94776726A1CAD59F2C64 /* Listener.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 79D1DBF8A2B975AA6502E3E0E19627B4 /* NstBoardBmc110in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8693CF6D0BA1054AECDB9EBCB129A363 /* NstBoardBmc110in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A05BDF6F0EF1F8EF35BD85D32DA9A84 /* RSTLaunchViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 816CBA26E3940C8402B8EFE63E169294 /* RSTLaunchViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7A424939FB63EB84D99407F5FAA957DA /* glsl_SpecialShadersFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91142883C9B61CDABD669F132E23BA6B /* glsl_SpecialShadersFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7A4517ACA4CE707769476DE0A8FDFD16 /* N64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EAB9AA348D576D9AF8A76D798AF0A209 /* N64.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7A4B501942CA119ADB0CC7E54FC735B5 /* RSTCellContentCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D9ACA67CBB81C221D9E4E05F8646744 /* RSTCellContentCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7A4F11E768C0C86EA95B2AB424A4377B /* OGLRender.h in Headers */ = {isa = PBXBuildFile; fileRef = DA9C9A6D30671F1FB5F50BFBC1D1DF0B /* OGLRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A6FC7B5F8132542A56B28A131E634C2 /* DownloadRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC18C127E9733ADD4EB2929DE3E7710B /* DownloadRecordsOperation.swift */; }; 7A7260BF99BC683C9C43C76B8D20DE57 /* NstBoardBmc21in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F11EA13357D6F351A1A191DA33451B01 /* NstBoardBmc21in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7A9D265661277069DAEA81C88E0E729D /* SwiftyDropbox-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1549464F3E4C6E80951115BA80C87C /* SwiftyDropbox-dummy.m */; }; 7AABDCDC1FB95E91C935F89E00FA89DC /* arm_jit.h in Headers */ = {isa = PBXBuildFile; fileRef = F8211C9AAFD5EAFF6AE32CAF702CC376 /* arm_jit.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7AB3BF79F79BAFF5769C3A3CCC19AD47 /* Shape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D13626EE69FD1C7B6C4F9D290D2A71BD /* Shape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7AB733B4CBB1E984040DF7D988D3601C /* N64DeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = F4C1093F4879EA7F32702CA47E35814B /* N64DeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7AC069D617A084BEDA70B1D9B89F6470 /* NstVsSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CAAEE81FB5DFAF21D63A74329E6F4E9C /* NstVsSystem.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AC961FD6AE10887253986C5245EA81E /* UICollectionViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 142265A2DED24A866633D72B79145B0B /* UICollectionViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7AD81CF4EA345F14D64ABB308812984D /* TextureFilters_hq2x.h in Headers */ = {isa = PBXBuildFile; fileRef = AEAC4A2D514CEA5F884C8B989B177FE5 /* TextureFilters_hq2x.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7AE848DB1454413283E1A33005E61EA0 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E1A6F9BADA368445D9DBE731C26499 /* Version.swift */; }; + 7AE8BDCC81C1807E72CF531C41DAA28D /* RSTOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F84B5FC88D5A5A682A7E079337CD3D1C /* RSTOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7AEC6E1A5BB3B489183A23AD3AB8D7AE /* FilterChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03A2EA6E13FD790527F86EB2CDB1E402 /* FilterChain.swift */; }; 7AFA40D6E7662FCB31023984FC8A5540 /* NstBoardUnlKingOfFighters96.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F1CFEE2E88E05706A2CB9A382C9447D7 /* NstBoardUnlKingOfFighters96.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7B3CF4D5A06371FDEC86F2F0F1C4CE56 /* lirc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C95081CDA9074D9730BD45D716C934D /* lirc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7B594E7B42D038F5C9EAB636CDDCAEBE /* NstBoardRcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D4557C24D5CC84F9F3B2999C33F9DE91 /* NstBoardRcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7B5C164030D57D70A3ACD504DB904A9B /* OAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 542213FAAE95E6EA5E3E9392D8DD3B49 /* OAuth.swift */; }; 7B85E337A6D06E8012EC891088CEB9FA /* ARM_InstrTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E058DDD738AC1B8E1A7C13BC1DF630A /* ARM_InstrTable.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7BAFA827F5D9B3096BB2A01F47BFC36C /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = F231C512D2B9D8E1FA081E1059B3D3E0 /* zconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7BD0C0DD3F3DB5369846E07F7FA5B186 /* NstBoardBandaiLz93d50ex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 743D60A80C02E747A93C054B7CE7F1E9 /* NstBoardBandaiLz93d50ex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7C223CCCA8FDA2AFC24233CF2C80D507 /* fts3_tokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 61922816ADB3E7C4600DF77D3B382727 /* fts3_tokenizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7C287B127C9BA14B075C120EDA0AAC19 /* FrameBufferInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A7607CB2BCFE4453A1188585644330 /* FrameBufferInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7C44081096D7BD7EC16DEF322D7DC5E4 /* DropboxService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D254660B89B2DF06F349F2BC87B3FEFA /* DropboxService.swift */; }; - 7C81CF6208DCFD04CA626E3E81DBD14F /* UISpringTimingParameters+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BEC3A5E5A6DF3FF717E11AF5286D93 /* UISpringTimingParameters+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C557BAC6BE7F3F10F30D2AF38E77934 /* NSUserDefaults+DynamicProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = E45EB56BC48BE16046055CF4A8D52558 /* NSUserDefaults+DynamicProperties.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7C85EFFC4862D5DD572D67FB0D67A8DE /* NstTracker.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 510A47958AB211D60455C0DBFCFF190A /* NstTracker.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C8ECB2C3F0243840D3FA7B3C4C83601 /* RSTBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FB822E90029BFEA20B117487DC27A04D /* RSTBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7CC91E5E71DC76D48A82BC591ABA6C87 /* NstBoardBmc31in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 813D0026660BC9FA9BE9781E84D1F4A9 /* NstBoardBmc31in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CF5FCD91B24589DDA0A9E0AB368417E /* RSTNibView.m in Sources */ = {isa = PBXBuildFile; fileRef = 65DF8E0913BA8941185496F1B74F7D4E /* RSTNibView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7D42DA555697670FC84BBAB5492696FA /* pcap.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D27F1218FFC3EC9D27CAC71BCFD4925 /* pcap.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7D6640DB587F29263DFD54F344B9AE8B /* NstCartridgeInes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 00DC15146753301043922CC27C6DB1EC /* NstCartridgeInes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 7D97A8AC6EBC128DB5B1FB60AF8F28CE /* TextureFilterHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FC5602035B9E19D656976E460F7F90A /* TextureFilterHandler.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 7D9D60386306B439551BB071CA066817 /* DropboxTeamClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8364432B8E72D0344D921A2164F73693 /* DropboxTeamClient.swift */; }; 7DB35723D0CC13AE137CAE668924723F /* BitmapProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3949595D020E5A3DAB73E06EEB13CF19 /* BitmapProcessor.swift */; }; 7DE7708815D0EA629D5716B9F1A6809E /* Thread.inl in Headers */ = {isa = PBXBuildFile; fileRef = 6F88E235E4438225B920C3FD4F4FA99E /* Thread.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - 7DFAE2171F7DF71CBFDAAB36126503A5 /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9E8347629FB94F0A3A23F8ACE7DF87 /* Team.swift */; }; 7E20AB44073FB30023AA9153EFD685AB /* ftbitmap.h in Headers */ = {isa = PBXBuildFile; fileRef = E94F624FEBCECA3D447A42E223613A20 /* ftbitmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7E2636950C8A8517A78941A3FC7A214B /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9A5439881B47C2E816AF6F014B4832 /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7E27C0AA8C72EE528649523D6A240305 /* NstRam.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B584A470AF957ABEDF9EC1339C950355 /* NstRam.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E5EB7A39652E32E3CA0F3D93856E2EC /* ConflictRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4DB7F5247E41A8DF960FAFF4F52DF47 /* ConflictRecordsOperation.swift */; }; 7E82D7757D1F185509FB6060B26DF2F8 /* Keys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14603BADCCE95A5E507021ACEF7693F /* Keys.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7EC161C3C3EDEF6DEEB5A0D8C2ADEF8F /* TextureFilters_hq2x.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CEAA6B8E9680ACB06BA0279C3ED990AE /* TextureFilters_hq2x.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 7ECB28AE9ADAC1AE124D698C0FF85C6A /* DropboxClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5456371B4D7DC880854562F4F53807C1 /* DropboxClient.swift */; }; 7F0D6BBAB702962744546B41F32F0C6C /* joybus.h in Headers */ = {isa = PBXBuildFile; fileRef = 4495365E36E72B1DF9F8324A09B6DCB1 /* joybus.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7F3CCE07D4231CA249893A8C0185C32B /* ftmm.h in Headers */ = {isa = PBXBuildFile; fileRef = 94CD261951849F1D22579127673F3769 /* ftmm.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7F3CDB6BD153FE92FC5A758E12830D3B /* NstIoMap.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5033ACF3304F791248B9A86346AD675C /* NstIoMap.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -841,7 +859,6 @@ 7F98B4938B45BE01E8D3C51CBD0366B2 /* glcorearb.h in Headers */ = {isa = PBXBuildFile; fileRef = 068F16B4A783E37E5CD5C1D3B713CEF0 /* glcorearb.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7FA6A8B8D22767B49932301232D6EDED /* dummy_video_capture.c in Sources */ = {isa = PBXBuildFile; fileRef = B331F7660FB59081A99ADBA1AF706462 /* dummy_video_capture.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7FAE093FA0A7715EE8D0C26E07586588 /* NstTrackerRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 71C2F464A8210B73F02BF45EDE6E1EDC /* NstTrackerRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 7FBC6E3BDC4800C426640309DF2CBEE2 /* UICollectionView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 966650603C914F8788C0B0BF65D7516D /* UICollectionView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 7FD036F2F07DB42BCC6B98FA7CBD2E87 /* Performance.h in Headers */ = {isa = PBXBuildFile; fileRef = D80E4A5FDBC780E4358E55866C35218A /* Performance.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7FD577E22B1E9D0B660E3F5F0945EC97 /* GoogleAPIClientForREST-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C943FB0B36A40A6ED1622A947B642B5 /* GoogleAPIClientForREST-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7FE93BDAF8E862CEC574A1F24B872469 /* VI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FEF8E98B3647EDE8533C51A14A31D99F /* VI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -851,45 +868,41 @@ 8043A7E0B334D03CF18AF57B63B8B407 /* CoreFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848F3AD32B7A8F7F08945CA3643BE446 /* CoreFunctions.swift */; }; 80531DF27FAEB5E6120BDDD6681434C2 /* NstBoardTengen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 53B591BF7B60187B760A42DB71431BB9 /* NstBoardTengen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8058D7B84C65C8F832FB61B0A1D05F76 /* png.c in Sources */ = {isa = PBXBuildFile; fileRef = 81586D54535F45B193EF58A3F9A1B704 /* png.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 805A1E28389AF5FB29FC09BE6C8B1F0A /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099938FEDA9E30DB8F316FD35D3A7E39 /* Account.swift */; }; 807E0082550BA264BABB572647074157 /* ftcalc.h in Headers */ = {isa = PBXBuildFile; fileRef = F87EFA6D54FDC38E1D796063498DB67B /* ftcalc.h */; settings = {ATTRIBUTES = (Project, ); }; }; 809CC541557F42747F35E56C4A8BA2E2 /* NstBoardNxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E42E5A99DAE876C1FA977F57560BA47B /* NstBoardNxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 80A76846396E3B23414851765E6CD0C7 /* UIViewController+TransitionState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A0BDC53FD9A10612B34F36860479885 /* UIViewController+TransitionState.h */; settings = {ATTRIBUTES = (Project, ); }; }; 80B026B040C9F6194623AEDA389C417E /* svttglyf.h in Headers */ = {isa = PBXBuildFile; fileRef = 224EC23CB708246C666EA6D597EF0933 /* svttglyf.h */; settings = {ATTRIBUTES = (Project, ); }; }; 80C3AE20C10237C9D0BEE1E040703645 /* FIFO.h in Headers */ = {isa = PBXBuildFile; fileRef = EBBD46833EA1A4C5282B0F087FA83437 /* FIFO.h */; settings = {ATTRIBUTES = (Project, ); }; }; 80CD4343EDC4946D43FB62BCE1E7D8FC /* tima.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D5641AF5A10D2A2EBB4AADA120BAC12 /* tima.h */; settings = {ATTRIBUTES = (Project, ); }; }; 80D63236D264DBFE454A62486C2EF1DF /* Glsl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1004AE0C4739724244ADA46A913108CB /* Glsl.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 80FBE522082BF7FDCC4F133E5110CE10 /* TextureFilters_xbrz.h in Headers */ = {isa = PBXBuildFile; fileRef = 30E950B4BF47AC526A4464F3994CA0BB /* TextureFilters_xbrz.h */; settings = {ATTRIBUTES = (Project, ); }; }; 815861D1FCD25665B078C7ED9E6D2A6A /* NstBoardBenshengBs5.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B129D85783E2A83AB72F44B1BF92B9D9 /* NstBoardBenshengBs5.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8165F76955A7C2EEEA488E8DCD67CC9A /* UIImage+Manipulation.m in Sources */ = {isa = PBXBuildFile; fileRef = 97B9144AB8468E437ABB41803974D033 /* UIImage+Manipulation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8171418ED78BE2744E4E374105338AEF /* NstBoardTxc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 64B42722A5333410D786C90D454E41C8 /* NstBoardTxc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 819C860714F847924CECE775928BE96C /* Version+Revision.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38132CAD1037F035FD8F3D63BA53AD28 /* Version+Revision.swift */; }; 822C8AF6FE4E429A7E3DDE28BF009AAB /* NstBoardTaitoX1005.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94AE1145010E024A90A0B90A56727300 /* NstBoardTaitoX1005.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 82460FA9F811A6A3A1EEDCC05942E397 /* ftbzip2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FACC0B21FDAA0F253D9BB7A5062C4B0 /* ftbzip2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 825DF2D1ADB787B6BBAACFA7182B3325 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D7821E2CE79FC4E3BED960866CD961 /* types.h */; settings = {ATTRIBUTES = (Project, ); }; }; 82665248F8E77B7253C5F018E0B1DC5F /* NstStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 94393ABA91B101430546FBAF247742E1 /* NstStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 826BE1A486465868CED022ED981B0BEC /* UIAlertAction+Actions.h in Headers */ = {isa = PBXBuildFile; fileRef = 47D78517301F4912E4BBA2A056C253E1 /* UIAlertAction+Actions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 82A2EC55FF6F876EEE55932C3948728A /* N64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47967D3CF2D6A2095CD6438231F82260 /* N64.swift */; }; 82BD5D188A75988826E7379FEB58DCDE /* NstBoardIremLrog017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 00B03766966DBCB90906DC6BD97E2035 /* NstBoardIremLrog017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 82E1A8D140FD2E1A30BC5F8F4B19F8BF /* SwiftyDropbox-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1549464F3E4C6E80951115BA80C87C /* SwiftyDropbox-dummy.m */; }; + 82E42FADDE2E8D30E01D4166E4A99A00 /* UIAlertAction+Actions.h in Headers */ = {isa = PBXBuildFile; fileRef = 47D78517301F4912E4BBA2A056C253E1 /* UIAlertAction+Actions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 830F5B7567E178151EC0E882FA0ECB5A /* hermite_resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = FA71E73B1A809C3FFD98BD1BDA46314D /* hermite_resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8310901E730FB822677EDAAF25893BE6 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D49431EEA4AD3FC2E04F7F24D666EA6 /* DispatchQueue+Alamofire.swift */; }; 8386BA8A923E2E72C8229BF7CF7C20FA /* cheats.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C0F1623BBDB08363E8394AFBD38B87E /* cheats.h */; settings = {ATTRIBUTES = (Project, ); }; }; 83A09D122123E6C2815459DADEF9729F /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = 883B872956FB7C28FDBB574888357A62 /* GTMNSString+URLArguments.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc -w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 83C24DB91B7EF2F085CA8C84E6BECBC0 /* UsersRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5A8C2D0C4FF79FF4A82A7C02704490 /* UsersRoutes.swift */; }; + 83DE38F02EEC6BEBD7473F5DF8D5FC3D /* UITableViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4455D697CDC2A6441EDD561195EFE9DB /* UITableViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; 840DC676DBE4407A3E68353CEF3B3BCB /* NstBoardWaixingZs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 13A6DB004300A60DA3D2A6DFE73CCDAC /* NstBoardWaixingZs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8433AA2398A8DBAAF7B367AEF3C636C0 /* UserDefaults+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = D030FA73AD1DA503048D364090F865A1 /* UserDefaults+Harmony.swift */; }; - 8434E5B141D1791B363651A182CA1B5E /* RSTCellContentDataSource_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0CBABFAE419A9E2AB84F2A8EE7B71A /* RSTCellContentDataSource_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; 845473EEBCE88EFF348390D4C70EDA4E /* NstBoardBandaiKaraokeStudio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 97F73835395FF3DB0096CD155B20FB9F /* NstBoardBandaiKaraokeStudio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 8457755D991B9AC856F2AD154BCF4A34 /* TeamCommon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 244DCF4A8FC46E79A6101C49202C0DBD /* TeamCommon.swift */; }; - 846C1F6DB0F553F276ECB598E7A84AF8 /* RSTSearchController.h in Headers */ = {isa = PBXBuildFile; fileRef = EEF4C54780B7CB8C5DD1FE7BFC88A8D5 /* RSTSearchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8477A8F693A9336DD44C78F069BAC322 /* RSTNibView.m in Sources */ = {isa = PBXBuildFile; fileRef = 65DF8E0913BA8941185496F1B74F7D4E /* RSTNibView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8486CE333AF98530F574C3B55DC565D8 /* TouchInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D5205D694ADD50234921E3DEB5D957D /* TouchInputView.swift */; }; 84B63AF1BC14C6406DF954CA68468FA9 /* L3DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9531D676E6CBCD44E92FD1148601D0F9 /* L3DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 84B95393C2EFEB1D75B9A12B3989B9B0 /* Textures.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C888A9E68F5D9C40535BB25A042E10F /* Textures.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 84BA5D33CA8962FD25DB1702243D13E8 /* ftmac.h in Headers */ = {isa = PBXBuildFile; fileRef = 84758A5917B6274B633D5B6A3A3E91F9 /* ftmac.h */; settings = {ATTRIBUTES = (Project, ); }; }; 85290514199956D820FB90C92DBD0002 /* Collation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B7A2F207266496310F9415852A1EBD7 /* Collation.swift */; }; 85329C6EC0EDB240C9FCA4766579353C /* F3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E1156572BD531C3316B572C296BCF01 /* F3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 853712F7ADE0542EB49AB2971C13F4EF /* RSTArrayDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = BABD1CEB4B6CA6AEBC4C4B2ED3B1C53E /* RSTArrayDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 853AF0F4F9B81FE498CE8D0A912E4528 /* pure_interp.h in Headers */ = {isa = PBXBuildFile; fileRef = A24C851DBA65EF8E8469317673E6CCF4 /* pure_interp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8575331E06CB4DA99967DE5301E95E1E /* glsl_CombinerProgramImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 630D82E8861EDF03C0AE64781235E207 /* glsl_CombinerProgramImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 857B3B04B9AB4B94CC5BB714EACC9290 /* RSTCellContentChangeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F188C4FE40251B362A44718243733E /* RSTCellContentChangeOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 85D1D258236F9752FEFC767F65EEB5EC /* statemanager.h in Headers */ = {isa = PBXBuildFile; fileRef = C32EC5252A036254058CB744DABBE87E /* statemanager.h */; settings = {ATTRIBUTES = (Project, ); }; }; 860523F1E62B9AC9951E5F4D80CE1614 /* ftconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = F8EB681067B1016B70AE4047A7C916B9 /* ftconfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; 860AC74038BF3ED5C0549CBE407D8710 /* snes9x.h in Headers */ = {isa = PBXBuildFile; fileRef = D10EF252E11807FB1EF1F7E9A2AA502E /* snes9x.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -902,7 +915,6 @@ 86B1481F42CED72563EF3D695ED06174 /* NstCore.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3985853293A865E5A5336745DE4139F2 /* NstCore.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 86B7DA5117FE254BC0DDB8F75680BA2C /* pif.h in Headers */ = {isa = PBXBuildFile; fileRef = AD18B91FAC4B2CA8C394D0D1EF24808E /* pif.h */; settings = {ATTRIBUTES = (Project, ); }; }; 86C51CEFFE9BBEB96F4AB6BFE68CF66F /* NstPatcher.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3D532E4E7993FC7D9C8EFA78B07605D3 /* NstPatcher.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 86CD84B7CB8FEBF8D8D1A612608F9A59 /* Roxas-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DC0FD4C8DB0253E8CE8EAF9C64DBD0EB /* Roxas-dummy.m */; }; 86D789A3A56DD97D1559152A9A3B1C12 /* dd_controller.c in Sources */ = {isa = PBXBuildFile; fileRef = E5C78C628E0A4C0BA6411600CC689510 /* dd_controller.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 86D935D17CB549295AA3151698C9CC97 /* glsl_CombinerProgramBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 35B53A6EBBDB14342ACBC6EF87C2FAFD /* glsl_CombinerProgramBuilder.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8715A171D63746B26EFEB4E6A617D39D /* WindowHandle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 195C083DB9E3337E066A78F5268E1222 /* WindowHandle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -910,13 +922,12 @@ 875AA280A37F31C2E6F4B7595995912B /* winlnxdefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC3502E8ED4D5961B6483AA4C0E4E65 /* winlnxdefs.h */; settings = {ATTRIBUTES = (Project, ); }; }; 877E7F8058EB4C948ACEBBD1A9285067 /* sa1.h in Headers */ = {isa = PBXBuildFile; fileRef = E12444C1B56F3412CF521B329577DC7D /* sa1.h */; settings = {ATTRIBUTES = (Project, ); }; }; 878F017184AB29CD582B00F4088004F1 /* GBI.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB6E71C991DC4BD501F509F16B2DFDF /* GBI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87FA058DD97C42DA27925CAD2E938C2C /* Users.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5246923E4069138B8F38B3EF8C4EE4D /* Users.swift */; }; 87FFB6022D77762DFF612FCA46DADA4A /* NstBoardBmcSuperBig7in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EF7A8D3A9BE30CD2125BDFF488D22A25 /* NstBoardBmcSuperBig7in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 880A3366BA936A92BBD568462B09612F /* Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76762292E978FDAACA63D856A9CD4F5F /* Async.swift */; }; 880C713010255166F389C86EFCC2C9AE /* F3DZEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24C9EC3456B0473415C7E2A4BFE6D619 /* F3DZEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8820B3307828FF31991E570E29E170B4 /* idec.h in Headers */ = {isa = PBXBuildFile; fileRef = BEDA7F12E500CF17988D000DA2BF93E7 /* idec.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8822BE90BB2456E06F40F8E1A71F45C1 /* NstBoardCne.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2BAAE966AB05A1DCC9AA7B693D69F0D0 /* NstBoardCne.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 884544D72900CB7FC4188A2B3390E7B6 /* Export.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8EB12D179F66D53718BBF3591DC3E8BA /* Export.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8860F24F82252EB380AA091FEB00D88C /* NSError+LocalizedFailureDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 290BCCDEE8D33B086E36DBC4AAE5C4AB /* NSError+LocalizedFailureDescription.swift */; }; 886D71BD1595A610E2D69A83AE6A70AE /* Input.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11F0ED4F854563D55D1126B811F3E869 /* Input.swift */; }; 8878CBC3764D97E0901DE9EE6E120490 /* glsl_ShaderPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 96095127DE4F08650D82A0815DD6DB1D /* glsl_ShaderPart.h */; settings = {ATTRIBUTES = (Project, ); }; }; 887E940A7535BE33895D4B8CE44AE215 /* Combiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 608FE25E87FF01D7345789C49881295A /* Combiner.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -928,24 +939,21 @@ 8912B1F9BD9142C96BE6E0B401AC9C40 /* NstBoardNRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 37B489A0DEA4487857DEFF8A6A5237D9 /* NstBoardNRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 892EF00353110A3E726F1D521FE0F452 /* WindowStyle.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F01B391F7634E62F67997507B08A12B8 /* WindowStyle.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8957E0BA7E9FF05452AE65211EFCD859 /* NstApiConfig.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3F7732EEA99B052D2425B1972ECED982 /* NstApiConfig.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 897E17C6F6C366137126E12E5EDC926A /* NSBundle+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BEF6E27DC400F7587941CD3E2668F89 /* NSBundle+Extensions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 89BAB96483B0B0EEDE12680A875F57A7 /* Time.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E84054BA6CBE0DAB191CCF09288DEF80 /* Time.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 89C3FEC2C51AC7DFCCAB05615111CD6D /* NstCheats.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D24E88AD3320735A8600F142B16FD580 /* NstCheats.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 89F637B6A72C84461E7E5E6395896B4B /* GTMReadMonitorInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = D501AB9335B46D77142394E47A29319A /* GTMReadMonitorInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; 89FEB422E33FEDC7C1C20B9D953193F4 /* conffile.h in Headers */ = {isa = PBXBuildFile; fileRef = 84A54517246C22B36712CBF7B02E3BED /* conffile.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8A2C15A083A63FC24761FE568CD44915 /* insertion_sort.h in Headers */ = {isa = PBXBuildFile; fileRef = C3FFB989E3545149939D3E8C7F5F16B1 /* insertion_sort.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8A6D9CDABBDF499C01CC1189E80A9D9F /* NstBoardUnlMortalKombat2.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2DF776088C2711052EEF4C793C2B806A /* NstBoardUnlMortalKombat2.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8AA8A929FDB68F93ADB6F700AF3FB8BF /* FileRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA07C9DEC9FD13724174A7D6794AD7B /* FileRequests.swift */; }; 8AB5AE388CFE361067158BB1133641B6 /* CombinerProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 507AEE0DE905FE749721BA983355BC23 /* CombinerProgram.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8AD3B7AB59719794E86F41BA43AA9BB7 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C71C064E0F8E2D6A2B6E0CB4849BFC5B /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8AD7ED3262070702EA2D7772A7576F70 /* RSTCollectionViewGridLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F33D3A6F44894D367D99FF4F1A9DD9C /* RSTCollectionViewGridLayout.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8B3242772776AB021A4F1971280E29A3 /* NstInpDevice.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BB9F74C7D96B11B6D1DA5E2E0B149EC4 /* NstInpDevice.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8B66EA933E91DB3C1A2F60A1E6839556 /* Graphics.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAF16778F14BDA46D135E62DF52FD5B3 /* Graphics.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8B6C38945E65F6164B90994E03C0E37F /* F3DSETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DBA884F6C11AC7F591FA518903604B3 /* F3DSETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8B9F702DA0D9696A233593D88691564B /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EB450DCC75AB9928F547A4793F046EC /* common.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8BB653415293F1E3A1720E89DFC02A49 /* svwinfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = EAA42FF0995A2ECDE8654C66A329FEEA /* svwinfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8BBB574D59E4C2F312AFCA3AF1449B81 /* cheat.h in Headers */ = {isa = PBXBuildFile; fileRef = AF7DB0A4354868150C48B6B6E2D4FE4D /* cheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8BC24B9D0B902A90526475618DFEB023 /* Version.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDCA85256EA26CE4DC88337487128581 /* Version.swift */; }; - 8BD82471835BF88ECAF163D6FCA9A762 /* RSTCellContentChange.h in Headers */ = {isa = PBXBuildFile; fileRef = A490B0EA1911CAE566D521752DB9B643 /* RSTCellContentChange.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8BEAACA6EF683BF1CBD5D38409B56D88 /* t1types.h in Headers */ = {isa = PBXBuildFile; fileRef = 819239301CC1811B87F438BAF1B0EED6 /* t1types.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8C12B982EB848387B97D127AC49EED4C /* opengl_CachedFunctions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0089D9FB88A0BFD7C81E2BBAD71BEFBF /* opengl_CachedFunctions.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8C206B96A9B112DB1D494824687C8649 /* libhardware.h in Headers */ = {isa = PBXBuildFile; fileRef = 431779F5BA85EA4F476E69CF0D2AEFD3 /* libhardware.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -953,6 +961,7 @@ 8C6E70C9C229A2E14969674B13510C6C /* rhash.h in Headers */ = {isa = PBXBuildFile; fileRef = 9870FEA24CF3B1C5A3F888CBE2149CD4 /* rhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8CC4162C9B5F2ACF112E2CD0231DAD8E /* F3DBETA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8548E8B79648F224295606EFFF726D52 /* F3DBETA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8CD64FD841EA7CD073DB1D91F67E5F83 /* NstBoardCony.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9E7BF5046B171FA0104A3B0A7F9DD407 /* NstBoardCony.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 8CD6A5FDEE1FCC183F89AA9D6F2E1D42 /* PropertyGroup+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2399D1F90D743D4012746C27EF34903 /* PropertyGroup+Harmony.swift */; }; 8CFFE8D206649FBC45A465E0EAB2D2E6 /* plugin_delta.c in Sources */ = {isa = PBXBuildFile; fileRef = B2688E7DF0591DC8789862F774C74BF6 /* plugin_delta.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8D2017BE0B60704C8CB8E34DE6093D3A /* NstBoardSunsoftDcs.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 23044889E5A6DCEE916A2658C83A085B /* NstBoardSunsoftDcs.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8D55DCA48F13DD5011F6A93725277F20 /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 16606104B7D23C541D75E1D9CACB2862 /* memory.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -962,6 +971,7 @@ 8DB3CACE9224D13C1BD3C176BC5427D1 /* NstSha1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5231969A4CEB871747903C8249FAAB98 /* NstSha1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8DC67CE598921DF48FD70C4C6E4868AE /* opengl_TextureManipulationObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A52EF817DA55C490E46C80C1AF0F283 /* opengl_TextureManipulationObjectFactory.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 8E328CC6091D61DBA1B8AE8DFFB04532 /* hle_external.h in Headers */ = {isa = PBXBuildFile; fileRef = 5277A427B540B8A971E15DE8732388E9 /* hle_external.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8E39317C883C5861D6B1F18C0172AEA9 /* RSTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 609716320CE93EE5720BD73EE4666B18 /* RSTConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8E7681E291ACFA6DD351EE632D186BD7 /* F3DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = EEAE0F78E10C6AB8250B4FCF2FBB074F /* F3DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; 8E8094562D01EDB93C41846A50926BD5 /* OutputSoundFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BC8528536BD3799BBE6CA5C956B29930 /* OutputSoundFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 8EA421026DD522744405C37C9DFD1AC2 /* NstApiNsf.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8FE7624D239D6E6FDDCBDC31458E790E /* NstApiNsf.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -975,12 +985,15 @@ 90761841E15818195AE0E6F9C6B1F2A3 /* GTLRDriveQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 5117CC789D8C47E9B0F2888AB14F3E74 /* GTLRDriveQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; 90A332D78357408A4893241BAA3FCEF7 /* NstApiTapeRecorder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8DEF68BFA723483A3C9540DE5D2B9CD6 /* NstApiTapeRecorder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 90AB2A9F1C9D72D1B8956B0FA71B38E2 /* F5Rogue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 092C6EE9873F269B8DF55D311028DF6F /* F5Rogue.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 90B77BF4E1D9E493E39DDB4EE13CC608 /* DeleteRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0EC6BDB76040B5A332BFBE292E094E1 /* DeleteRecordOperation.swift */; }; 90C74CB62F0300013754489565EA44ED /* NstInpTurboFile.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A4A18683962DB3D821CC4DCBB8A6E9B9 /* NstInpTurboFile.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 90D2435B8A05AD9EA89B333FD06A470E /* NstBoardTaito.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5C9FC5FCE0B5F88A589CF0363028B43C /* NstBoardTaito.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 90D2C20D11FB8A7D024EE6684B0245E0 /* TextureFilters.h in Headers */ = {isa = PBXBuildFile; fileRef = 01D14FEABF918A24804DDF7627C4C6E4 /* TextureFilters.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 912EEA493E0A08FC711CF6864C3DB36F /* Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DC45D7DB5CFA98660E39905809A298A /* Auth.swift */; }; + 90EA01976EF29126F9C0A2510C018A1C /* RSTCellContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = BBBD8731E43D4030EDC2B0655C688CD3 /* RSTCellContentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9169B8668918831122A0CD580F6972E3 /* NstBoardSunsoft1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BCC7AEE83CB780E73856EB51DA7F5363 /* NstBoardSunsoft1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 9171382BD3DAD4E80C297CD7DB9F1BFA /* HarmonyMetadataKey+Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B4E7C9B7F6131BC57241CAF0E2FDD2 /* HarmonyMetadataKey+Keys.swift */; }; 9174937A3251A2ACDEEB1E350B983F7F /* NstBoardBmc150in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1195B6998FE8421EBA77EB210A43B4B4 /* NstBoardBmc150in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 917DE1C3182B3476AAD576773D315444 /* RSTCellContentChangeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = FCADC95CE36A81554A4E95CD8996C26C /* RSTCellContentChangeOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 918F4A5025C69B658DA2143255DE0A7C /* RSP_LoadMatrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDA72CEB6E2DC0981A908E0F6C1BF56D /* RSP_LoadMatrix.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 91B1A7D0868004B0C0B30333A7D548F3 /* ftsizes.h in Headers */ = {isa = PBXBuildFile; fileRef = A5D1F6229274C89A198E70560F58BE3C /* ftsizes.h */; settings = {ATTRIBUTES = (Project, ); }; }; 920D6388A019BAE183B76F28E00899AB /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 72224C07100B6D8A8371BBAC83840304 /* SDWebImageDownloader.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -991,6 +1004,7 @@ 92A4B9F5C0254706401940A8171D746A /* NstBoardTxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 725E5E4B6601C9A79B9D7A82DF839C25 /* NstBoardTxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 92A942CE7F29E460BB7E6C1564923F70 /* path.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C11311A957A87232355B6B0AFFEB8F2 /* path.h */; settings = {ATTRIBUTES = (Project, ); }; }; 92ABF0E0FC5006FD6BBAEB54B4C7F113 /* PluginAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 77423E6CCB3B1A7C499FEC5ADF73561A /* PluginAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 92AE3AB8B3041EA1F3D14AD77D175CD2 /* UIKit+ActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = F6225E475A9B0FB7A6AD9A1B3E32D764 /* UIKit+ActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; 92F8229DBD6462B1D86671903966D443 /* libretro.h in Headers */ = {isa = PBXBuildFile; fileRef = 42884C54AC2951F6A1140B6F12823A61 /* libretro.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9306DF595EB74F925D40BC8F70C11F7E /* statesaver.h in Headers */ = {isa = PBXBuildFile; fileRef = DDAB24C8DF7DA2BB3D67FC4A2C669BEF /* statesaver.h */; settings = {ATTRIBUTES = (Project, ); }; }; 932FE517D424EB24ECA60FCF308A7F5E /* expr.cpp.h in Headers */ = {isa = PBXBuildFile; fileRef = 166B7D7F68333A9915F7970F9FB547C0 /* expr.cpp.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1001,59 +1015,58 @@ 93FFCE2514097792D1F5E38E988F1513 /* Wifi.h in Headers */ = {isa = PBXBuildFile; fileRef = A5CE53451F1210BC9BA0C024038C9865 /* Wifi.h */; settings = {ATTRIBUTES = (Project, ); }; }; 94209528F5A3C88236DE5DC50BAD5D7F /* ThreadLocal.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF7CEB7CE925B8996AD28292550EBFB2 /* ThreadLocal.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9429A4107A99B2476F308FE0FD2E02FE /* DebugDump.h in Headers */ = {isa = PBXBuildFile; fileRef = D18D98DFBFA469D8509A1C9BFB85042E /* DebugDump.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 943577E181B1B6706D2107ECD728B015 /* DownloadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C643171D31A2715E757D5F42F63F495 /* DownloadRecordOperation.swift */; }; 943A7FEF7443174C9AC78E67A5868A92 /* NstBoardFukutake.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DDDDABB6EB20FCEABADC4F4B42F10D74 /* NstBoardFukutake.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + 946997BC2FF920A87216504E55ADD4F4 /* RSTPersistentContainer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FBF06615B56E55808CEBADD68B920BE /* RSTPersistentContainer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9476BE008F3B258A647C6BFE2E327143 /* N64Types.h in Headers */ = {isa = PBXBuildFile; fileRef = AF1A1A0732B5E3F46EFB5131FEC1279B /* N64Types.h */; settings = {ATTRIBUTES = (Project, ); }; }; 94868DBC2F7CB341ECBBDC311392ABC9 /* System.h in Headers */ = {isa = PBXBuildFile; fileRef = 2889DF4390F5E2FFDA11CCE9E534746E /* System.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94BCC7749EDC3ADB6EB5811CA50D58F7 /* FileRequests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA07C9DEC9FD13724174A7D6794AD7B /* FileRequests.swift */; }; + 94A7C5E12BA371AF88EB32E55EFCA794 /* UICollectionView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 966650603C914F8788C0B0BF65D7516D /* UICollectionView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 94B33505CF3A1BE32B17E489FE76A6B2 /* DBChunkInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A52DF3CA0011FA99AF644362B09A598 /* DBChunkInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; 94CDC16CABC912819C497850CE4F1489 /* NstBoardKonamiVrc7.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16A6E4F9D5B593AB01D5A49340300BCF /* NstBoardKonamiVrc7.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 94D28595353D013C0530A91A7AA81FCF /* Query.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C998AB9300BCC4AD6368CB1FA675F29 /* Query.swift */; }; 94D28819338E33AFF9EDDFB94DE0E526 /* NstVideoRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4753C1496FC2EDB1151EF16865D566B5 /* NstVideoRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 953B0BA08374FEB6F8BA47C9EE30878C /* SMClassicCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = C9B5A75174DE7C7B4A535B3A42D6239C /* SMClassicCalloutView.h */; settings = {ATTRIBUTES = (Project, ); }; }; 95BD2BAD38E37D6E2B67EDF5344BA723 /* NstInpHoriTrack.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 633BFEBA4D6E889B3BD3E8EC2A8D9AAF /* NstInpHoriTrack.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 95C86E907FED4E215620A31FA5CAFD42 /* DropboxClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5456371B4D7DC880854562F4F53807C1 /* DropboxClient.swift */; }; 95EF975803B95C02EE458E32DB43C1D2 /* port.h in Headers */ = {isa = PBXBuildFile; fileRef = 9213596C3CA0E060FC0617A361F98FCE /* port.h */; settings = {ATTRIBUTES = (Project, ); }; }; 96009988E1AD37AD3F245D803DC0ACE7 /* CharacterSet+Hexadecimals.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9A99432B3A77A17C67102784C21DAAF /* CharacterSet+Hexadecimals.swift */; }; 9603A4274C8A74E47EDE5C96E6F3A289 /* NstBoardMxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4C59CCAD19BF6E186912BBD6E16E4AF4 /* NstBoardMxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9614CDE379DB3C8A330397F9BE0AEE69 /* Sprite.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3712F3330F9F788DA08004D45DC308FB /* Sprite.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9631EB3716707DF75A79D5497DF4392C /* dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = F69FBA7A038D20EABCA39B35AB3B040D /* dsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 963D08061D6DF72524CA6CFCF7BAA942 /* NSBundle+Extensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BEF6E27DC400F7587941CD3E2668F89 /* NSBundle+Extensions.h */; settings = {ATTRIBUTES = (Project, ); }; }; 964D97F8D77342CEF0BDB0A9813AC087 /* DMA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A691959318D99E3BFEED5DF0D2582494 /* DMA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 964DD3973B1820BDFFCA6F92B9C9705B /* NstSoundRenderer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DFC688B75792FBFBB3B452084CA3837C /* NstSoundRenderer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 96A155D5BB7094AC0D4DB6C7CBDEA3DB /* NstInpSuborKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D41AF32FC52E17D1A0A5BA99D695DD30 /* NstInpSuborKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 96C74431D5A2F68C56AB62BBF1A75D35 /* NstBoardBmcSuper24in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 29E044818E33EA28D605B83708C47299 /* NstBoardBmcSuper24in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 96E84431E12BB8ADA8E145AAC1ADFB66 /* fxp.h in Headers */ = {isa = PBXBuildFile; fileRef = 4702731F2DEC76D99FCE88986919F6AC /* fxp.h */; settings = {ATTRIBUTES = (Project, ); }; }; 96EDAB5DAB64B77966807FAA4FBEA19E /* NstBoardAgci.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 190388E1589C7BC638B1410EA970D133 /* NstBoardAgci.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 96F221FEFB1BDFEEDF3D78ECBD3693BB /* NSPredicate+Search.h in Headers */ = {isa = PBXBuildFile; fileRef = ED33C93DD7E38C3D447A4941CDA4F4C7 /* NSPredicate+Search.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9700860B8834FFBBBB772936CA396419 /* gDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F52A10407276576D7E69215069A05CD5 /* gDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9719913DBA52DDA7B45760943EB9BEEC /* RSTOperation_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = DBB12A893E1A139B63450DDE9A309CC4 /* RSTOperation_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; 972A37B03DCA40E3914A116E31179F3F /* GTLRBatchQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = C88860D669B74A0154AA887269E28475 /* GTLRBatchQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; 979368E44B8B7C8615822815141CD054 /* GameControllerStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43650F984E0D62C7EB21DB9C43B8CAD /* GameControllerStateManager.swift */; }; - 97ACB19F84123FA36372CAEFB3F69700 /* RSTHelperFile.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AB79AE80A36131240B0204640F0474 /* RSTHelperFile.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 97B902766C5A26837CF94B716009A201 /* RSTNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E9FD5A3371067E608C6FF32C3E1179 /* RSTNavigationController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 97BC1C5E6F8786531212D326F22B5A0F /* cstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = D21047E7540C7E4A5E2197B158C84D3B /* cstdint.h */; settings = {ATTRIBUTES = (Project, ); }; }; 97C65359994F792189FCBC1C79079A96 /* gambatte.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DCDABB34A5BDA633CA1B6972D7D76E1 /* gambatte.h */; settings = {ATTRIBUTES = (Project, ); }; }; 985B7DDD2DD31218D8E7367F76FD2D69 /* gbint.h in Headers */ = {isa = PBXBuildFile; fileRef = B307C39B5BCD16F9563103326BB8C58A /* gbint.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9866CCB407CB626700130C62BCE45A29 /* Sound.h in Headers */ = {isa = PBXBuildFile; fileRef = 2036AE04F921EB54A23BE7D3307D5B57 /* Sound.h */; settings = {ATTRIBUTES = (Project, ); }; }; 990D025FACA7671D88A13F092F6A87C5 /* GBCDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D9E4AA51EA6166FE8A05D803D4DFCF2 /* GBCDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9918E09C7569EDBCB5CABDAB3E361CD0 /* RSTSeparatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 932ED892F2C78B795C9514E800D066F3 /* RSTSeparatorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9964B569DF0408FF79B47BF03F222154 /* callbacks.h in Headers */ = {isa = PBXBuildFile; fileRef = F764C420914578158ED027BC44B8591B /* callbacks.h */; settings = {ATTRIBUTES = (Project, ); }; }; 99834BC27CF8939DCA6DB984DB44F44D /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 387F3E450269A9E3EF2EA6A10AD8C879 /* Standard.deltaskin */; }; 998AE8A31AF486EB7CAC15E56C0C6E65 /* RDRAMtoColorBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = C159885D11F51EC41D84186D52DC4483 /* RDRAMtoColorBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; 99AE2D392CB8A5145EA7AFF6F21F3483 /* CRC.h in Headers */ = {isa = PBXBuildFile; fileRef = BB01FC8167E6C6B4469AC59E3C3DF146 /* CRC.h */; settings = {ATTRIBUTES = (Project, ); }; }; 99B6F8CEDEB6DB72964EFBD31E1EDD8A /* NstChecksum.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 35735087EA4B8B9922B5CAF03314D85D /* NstChecksum.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 99DE9961F6F88EA4545A05AD359747C6 /* UIView+AnimatedHide.m in Sources */ = {isa = PBXBuildFile; fileRef = 632F100822F31BF07C7CD07CAD8F2329 /* UIView+AnimatedHide.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + 9A0E0822B8E1743B5092BAE4D1458D3C /* RSTLoadOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AC36AE82A4992804E6ECF7236E5ECA7 /* RSTLoadOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9A27BFE1566B60454DC890A6CB919C7A /* ri_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A933B1B324B43BC6E0CEBB638211EBA /* ri_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9A311750E9188339148E6A9C28640957 /* ColorBufferToRDRAMStub.h in Headers */ = {isa = PBXBuildFile; fileRef = F1BABB17270A0A3966333B7C327BF0CA /* ColorBufferToRDRAMStub.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9A453C07C6CB23BBC0923625A37ED39C /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = 50942AB189B9EA5A4CCBCC5F4E94B58C /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A4C2D5C397861A9572A20C1F8A36028 /* ManagedRecord+Predicates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E9FF9B4A3C5693A9C7DC7179EB1F138 /* ManagedRecord+Predicates.swift */; }; - 9AC5F54FB242288D0C0BEE5FE51BE7F6 /* AuthRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E2C78A8799FD3F430CD405874430028 /* AuthRoutes.swift */; }; + 9A6B76429A600DB5EADABB82B2919F25 /* Result+Drive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA9490D97454792007147110EAEE8A3 /* Result+Drive.swift */; }; 9AE8AC6CC7990539873D41D13C0E0866 /* pnginfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C31FD97E461D0628F310200A8D3B403 /* pnginfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9AF689676F4557DB4290ABA38A21BECA /* MMU_timing.h in Headers */ = {isa = PBXBuildFile; fileRef = 17B5799944A0DCB74E38C5E3E5C164EB /* MMU_timing.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9B46DF6F7D385A76CC7419F2CA029080 /* NstBoardCneShlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 04131E906A312EC3EC8E75626EEA8233 /* NstBoardCneShlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9B5D0570D908D4A6EBE804FC3E0FF775 /* plugin_delta.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9579AB2737FD12BDDCDEDB9799737C0 /* plugin_delta.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 9B6DAACFBF34F39F85BDE66C85C41FF3 /* UISpringTimingParameters+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EEAB40C86D49852ED6EB7A6AFF904B0 /* UISpringTimingParameters+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9B704453F791C3CAA8F55E7BA3D0C581 /* Vertex.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0A780AF639D642BAFDB60533800E36E5 /* Vertex.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9B89D3260B3CBDF8B3A37E4C79BE88B5 /* NstBoardNamcot34xx.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E70D8FFEBC5CD9356B8F48E495CF4C54 /* NstBoardNamcot34xx.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9C4DE97E009F6FD9F96D47382A323F8D /* Sensor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FAD07D9524FA2A12D63FCF045E3C71B6 /* Sensor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9C51AB69CC57913351A31DE3A8EA384E /* t1tables.h in Headers */ = {isa = PBXBuildFile; fileRef = 030B53DF4264E1E4E75E737FC9B5B696 /* t1tables.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9C56D6C2EEE679BD36C9714CC43428BE /* RSTCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 39C09D3911D40FDAEA431AB499EE712E /* RSTCollectionViewCell.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9C56D975902024C142C35CBA998C6E8D /* cpuexec.h in Headers */ = {isa = PBXBuildFile; fileRef = A96FC77ABA88D5836FF081611CD8F5E7 /* cpuexec.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9C7C23E76D82621C265FFC52430EC02C /* Ftp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 25783A066C7388BF58AF665E9697C17B /* Ftp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9C8A0C2204C091124D6C64F86A690F9F /* SMCalloutView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 014989F31F4E364C9128F07C0637CA70 /* SMCalloutView-dummy.m */; }; @@ -1062,8 +1075,8 @@ 9D0FD356D97CD52D34960911A8298298 /* NstBoardCamerica.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4FD9C6FE532DA80FB560837003DB3F08 /* NstBoardCamerica.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9D37E2CB2398BE97697FE7719B77FFB2 /* NstBoardJalecoJf16.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 50D957B423EE92BE50F11FBFBB2F7951 /* NstBoardJalecoJf16.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9D39E7EA0FAD4C416AF187FB7295F339 /* DisplayWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 91F00C1F0698F991A6DDB258AD21774B /* DisplayWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9D71CB9053FF458B73CEC824EF0BB0F0 /* AnyKeyPath+StringValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 052A3E699D4705B394163442DB2312EA /* AnyKeyPath+StringValue.swift */; }; 9D7F1DA302776DB06BB6428657036442 /* NstBase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D54FDB83A8048619B7C58407A8302609 /* NstBase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - 9DCA03AF7E63F208B7C61C8EE8B41AF4 /* RecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87039339C5C272F9501B594DB154C3A4 /* RecordOperation.swift */; }; 9DD55DD05FCA097771FC62EBABFEC46E /* android_hardware_buffer_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 7B799B0BED0EB9D4351BA9CBC630C918 /* android_hardware_buffer_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9DE53B2F87039E798D26BE8696AEA4CF /* GBCCheat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A71F2279611250A8163A19A68C100B6 /* GBCCheat.h */; settings = {ATTRIBUTES = (Project, ); }; }; 9DE9E2CA0884ACD6E62262835B4DC4E1 /* oglft_c.h in Headers */ = {isa = PBXBuildFile; fileRef = 33BD33AF73BEEF1769230AAB1B73B0F8 /* oglft_c.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1076,14 +1089,16 @@ 9F133B0D521E411CDF94B9631A73D275 /* NstBoardTxcPoliceman.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7A09B431279F323517C8EF6B08DBA5D0 /* NstBoardTxcPoliceman.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 9F286E1D2DC70F134E8A8E4DABD86735 /* RDP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 73594F3371FE49C0D1356C423974A617 /* RDP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9F4F09ED3E838DCBD8615A7333F019C8 /* L3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C35BC9F77F23B687515FC8958549CA1 /* L3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9FCADB0CF0AFBD4F3F0ABFED93FB82A1 /* SyncCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0D8C051806BA9A8817550D4A2D2B252 /* SyncCoordinator.swift */; }; 9FDAB43530974253873F6B850109D610 /* alist.c in Sources */ = {isa = PBXBuildFile; fileRef = ED722AEBC29811FBDB707822E79E137C /* alist.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 9FE64AB67B279FBE1047117752075A4E /* UIResponder+FirstResponder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72F6FF7C88B7AD41EC3870C4DE94973E /* UIResponder+FirstResponder.swift */; }; A0120835F1172F64AFA98DDB669167CE /* scmrev.h in Headers */ = {isa = PBXBuildFile; fileRef = 42FC26095E2CF8823B3A9B88453B3901 /* scmrev.h */; settings = {ATTRIBUTES = (Project, ); }; }; A0258F6EF879071A012E7C12BEE48C45 /* svotval.h in Headers */ = {isa = PBXBuildFile; fileRef = 898591A3CC8C587571FA098CCC20AADF /* svotval.h */; settings = {ATTRIBUTES = (Project, ); }; }; A086B96EE66A0AF59654CB9D50DAABD7 /* NstBoardKonamiVrc6.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A6A4DBE5C518B74416FB8A4EB9D967ED /* NstBoardKonamiVrc6.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A0BAF4ED385FE71250DCF6D05F0496F0 /* TxTexCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 838F667D353D92B49C6150D47D8E5C4D /* TxTexCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A0E4E4D9541C166B40A5F0A18C477AF6 /* UICollectionViewCell+Nibs.h in Headers */ = {isa = PBXBuildFile; fileRef = D190B41F4CB5ED20A79688D063A88168 /* UICollectionViewCell+Nibs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A0EC70DCA71F59C6FF7782ED8494E10E /* FilesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2799783940A21EC2EE44D1A48F5758 /* FilesRoutes.swift */; }; A11D64412596423EBFD44DD00058A5BD /* L3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 280A5539EBE87BEA10C7C1654D729DCC /* L3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A1262BC89A1B6454353CAA76F856D057 /* UITableView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = CC438CAEA107E0F60CF6B6A8FBD21763 /* UITableView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; A12FF5C36B478525C1327E41B3B3C09C /* GBI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BCF3F649DFE2BBABB7DD4DB64169C38C /* GBI.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A131157FDDCA174BD8C7F663486E890A /* movie.h in Headers */ = {isa = PBXBuildFile; fileRef = F3F7DDDE511D2FFCEBAC65BD6D2225FF /* movie.h */; settings = {ATTRIBUTES = (Project, ); }; }; A152CC24E7DF395160707521223E96F6 /* agbprint.h in Headers */ = {isa = PBXBuildFile; fileRef = A5E001A6FF56533ACBC3F6E950D52560 /* agbprint.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1101,13 +1116,11 @@ A2A854D06578D5120F0B8474EA0073C4 /* NstInpFamilyTrainer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4A30748039EF71CC3D3BC9D7293442A7 /* NstInpFamilyTrainer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A2ADFBA34707939EDDDA8DDFCBAF4500 /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = B178CE5FC4BC30D17B77BB64F1C9D912 /* GTMNSDictionary+URLArguments.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A2B90FAA02E0F6CCA147D4922BEA83AC /* F3DEX.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC10C4E5FDC7C7C25A7DAC7A2FB11BB /* F3DEX.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A2CF5336CF94746DA1F92A04941AF2C4 /* NSFileManager+URLs.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CD097CFE02D8169FF5FC3721CC0AEFF /* NSFileManager+URLs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A2E5ECADA6FD38BB0829678577875EC3 /* OpenGLESProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A7BA8D8D1E9E2CDAB97C30A5A502156 /* OpenGLESProcessor.swift */; }; A3057CCA3036D83546A8CD03B63F433D /* NstInpCrazyClimber.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8A65C030A8CB605B689A888D7DED867A /* NstInpCrazyClimber.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A3175B24ADB6E391E46B1408B1767FA8 /* glsl_CombinerProgramUniformFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = B41ADAC311E8AD6F6A31A14C3ACCF208 /* glsl_CombinerProgramUniformFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; A3268347427E3944AC1F5FED80F60D39 /* SoftwareRender.h in Headers */ = {isa = PBXBuildFile; fileRef = F687CDE1CC73F1023FA06367B7621C39 /* SoftwareRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; A32EDE9B3422EEA2F7F3C931A32A8AD7 /* NstBoardBmcSuperHiK4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 253F6A4732CDD605581DABD45CD0B43F /* NstBoardBmcSuperHiK4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - A34924ED816441F1DFC1ECEDFFE962DC /* RSTNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D0F4C76483E71C2F01319F14942730 /* RSTNavigationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; A35CEA97C5A89CA2AD61EA4049407002 /* NonCopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EB813FC7BFFACFEAB984E045534C0DCC /* NonCopyable.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A369A8888AA50BDBB82B59E1D48134D4 /* NstBoardBmcT262.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8A25DA0D46D9C9C287A50225828AB7C6 /* NstBoardBmcT262.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A493B150D94171B74C1FF5E7933FA3F1 /* elf.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D345212AEDE1FC050CD40AF657590D /* elf.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1117,26 +1130,27 @@ A4CDAB56ED7EA775F1A4AF9BC6C5E712 /* GTMReadMonitorInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D575B29FCC81FA8F72EC3CC12A581A5 /* GTMReadMonitorInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A4E7AF6547FDAE1BCA941C5C55972386 /* NstBoardBtlTobidaseDaisakusen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 056855D6563613F5941E73E167520BEE /* NstBoardBtlTobidaseDaisakusen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A5037807FB7A1D0D4B693C55BF20B762 /* GBCCheat.m in Sources */ = {isa = PBXBuildFile; fileRef = 66FC5067060EC57040E657A1F216A5E7 /* GBCCheat.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A553A7154A5AFFAE08494697107B49F9 /* Result+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D684261B02E9E876FF7F2C19DAA8B187 /* Result+Dropbox.swift */; }; A55B44741FF8BF0BF83FCF89A7D2DF18 /* F3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 347EB9305F4E36DD5D07096703DFAC24 /* F3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - A5651EF221F23607DCC7F0AFEEC5CA8E /* SharingRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8888D8043BC735B8831AE2FB72C5DCE4 /* SharingRoutes.swift */; }; A57D054BC48E0C713AD2D2091DE3AA8D /* storage_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C393F6D77A263F418781F717B7AA90D /* storage_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; A5A600842203DF1E3A7A326C8C22C683 /* ConvexShape.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3DA525BCCFDCF518525E5C7B8B11DBBA /* ConvexShape.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A5A84A4DD8A5E89E5AB0C7733B613CE4 /* NstAssert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 68472F20D32A525A0FA8C6D283E05655 /* NstAssert.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A5D6B4EB588BE4010F5885C0EB4BEE43 /* SeenState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B0CD3AC5CF344D777C591A59C269664 /* SeenState.swift */; }; A6173C5A991255ED8E9DF5B7A8B26CA7 /* GTMSessionFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = BCA1F428AFD84BF440CD3E1D14DE8168 /* GTMSessionFetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A6257B7E52832880771B2BB200A4C1D8 /* interrupter.h in Headers */ = {isa = PBXBuildFile; fileRef = FEE4DFCA2E800BD0E79D7425672042CC /* interrupter.h */; settings = {ATTRIBUTES = (Project, ); }; }; A67F3E53D04202680EF541B079B9D40A /* opengl_ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = EAFE7943BDC2A2EA16E70C5B9E8335BE /* opengl_ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; A684B686F2A6519976AC7438796DFFA9 /* preproc.h in Headers */ = {isa = PBXBuildFile; fileRef = A77309856ECBE8FE95C26ADD933333D1 /* preproc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A71F672BACBEE53FD4851582F9A71450 /* RecordController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8058D48F8CF8A2D21FE0EEF65FE6BFF6 /* RecordController.swift */; }; + A6A28E38B771B1E1CB6EDB9982253379 /* FileRequestsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1393F6F0A0F928C49105FCA78288193B /* FileRequestsRoutes.swift */; }; + A71FE4BFE3355509B1E49E5FF62AF3B4 /* RSTSearchController.h in Headers */ = {isa = PBXBuildFile; fileRef = EEF4C54780B7CB8C5DD1FE7BFC88A8D5 /* RSTSearchController.h */; settings = {ATTRIBUTES = (Project, ); }; }; A72CE00953BEAC5C78106460D334E3F6 /* CheatSearch.h in Headers */ = {isa = PBXBuildFile; fileRef = AA4BF92FD0BDB1CA2D2C3D91B8F13226 /* CheatSearch.h */; settings = {ATTRIBUTES = (Project, ); }; }; A72E4695B60D35E8D8BFAA0FF9051520 /* OpenGL.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2597239B8799F016700A89F4C2178031 /* OpenGL.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; A760192B70AF78B0A0C7422949F1B853 /* DisplayLoadProgress.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D709C9141E75CC5376CABB8ED0406AF /* DisplayLoadProgress.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A7610ADD4D3B95C8ECDCF6ED0324632C /* RSTDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DE36CB10C4A8DCF72BE7B88CB003698 /* RSTDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; A78C159B2F3CA3444E738F57CCB464A5 /* Dialogs.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFD819549B79EF6F6533D7333213048 /* Dialogs.h */; settings = {ATTRIBUTES = (Project, ); }; }; A7932C8FB54630064EAB88DAE523A38C /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 560F98A5E3D6842B976BE9CCD21AF72C /* Standard.deltaskin */; }; A7B6493DBC037E2F8C5BCDDE7EF3121A /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 676903B714C5F565B51ED126D715A4B4 /* Standard.deltaskin */; }; A7EB0D099CBAA6C310A263AC395DEEF4 /* GBADeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7C2DFC00C454B4A6E486685A3B85653 /* GBADeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A7EF2BC7C091E4282D581EBF80E9EFEC /* RSTFetchedResultsDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 3354FC02362F1AAC06FABFDAB6FC1E92 /* RSTFetchedResultsDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A7F0206CCDED3DF4FC1C456649013B1F /* RenderStates.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9A28F307BB7A2BFFBDABD41D7562DBF9 /* RenderStates.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + A800A1840F37BA211A060AAF728EBA20 /* NSConstraintConflict+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EC1A7B808C5E2E304C086081DB1796C /* NSConstraintConflict+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; A8551A96FDD516BD37037B818AE7BC7C /* GBCDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C274755E3C4177DD8B90B0B96F055CDE /* GBCDeltaCore-dummy.m */; }; A85E6E945674B72BA3E5D882DC2B55D9 /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A33B3B4BD1E78794258F5AD6D999C880 /* FrameBuffer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; A8667816D59C9860485A0D7FACC3748D /* PostProcessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5370103F49292571EE10317A74B0B2 /* PostProcessor.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -1151,9 +1165,8 @@ A9804C368587DB95D78E9637852AA7CE /* 3DMath.h in Headers */ = {isa = PBXBuildFile; fileRef = 75C6CA9B6DE6420B9DC5F198E990FC25 /* 3DMath.h */; settings = {ATTRIBUTES = (Project, ); }; }; A99B6B9EC2EFE2FC385B65A77F9EB0D3 /* fttrigon.h in Headers */ = {isa = PBXBuildFile; fileRef = F5AFC909F4746C3FA127FCDAAC1D471C /* fttrigon.h */; settings = {ATTRIBUTES = (Project, ); }; }; A9AEDDC1D58C38A7CC8DC9F486965D56 /* Sram.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E98AF28DEE4396FAC50A659A97D1F7 /* Sram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A9F981EDC073C433341A5F4025D46216 /* DriveService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E4DCE2A6F12D890D38A83939413D307 /* DriveService+Records.swift */; }; - AA3241DCAEBD138A49F1A1B79CFE3F40 /* BaseTeam.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFADC4424D377B458AE08BE73A8876B0 /* BaseTeam.swift */; }; - AA3339D66B1B8D9E4FDA3A7B1DD4EE4E /* RSTOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D3D57B0A12B1AA1AEA896FD02062F18D /* RSTOperationQueue.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + A9EE7067ED78CB80B06B59D81D7B5F06 /* NSFileManager+URLs.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E3B9E17CE51387A5C31A3D4D020CB3 /* NSFileManager+URLs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA2C1691985E318E5018AB34B700DD87 /* RemoteFile+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30DFD8293FC858D3A24E23C9C67CBD30 /* RemoteFile+Dropbox.swift */; }; AA83341BC9AD775CDBF99CDCF727BBE8 /* svpostnm.h in Headers */ = {isa = PBXBuildFile; fileRef = EB05D37130F5C1E54F68ECD8CDDC22EC /* svpostnm.h */; settings = {ATTRIBUTES = (Project, ); }; }; AB0B945E8A9379453CBA9928E743A987 /* glsl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A01EE3AE9A9EC3F97E1D65778521BE4 /* glsl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; AB1E3DEF678EB7000A95D5337728318D /* SNESTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = FE6F693BD8934FF6A88E20FF29157CFF /* SNESTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -1164,13 +1177,13 @@ ABDDB6C221DFAE4AAA785817F3446E6B /* NstBoardBmcY2k64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DF4AAA0AF5429BDB84A1B9464A02940C /* NstBoardBmcY2k64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; AC379808B490D311984BAC3D9BF11C91 /* N64DeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A127D84C006CC72C3EC8E46506B45330 /* N64DeltaCore-dummy.m */; }; AC3E5F8F4AD95B1E0BBAD992EDC5D940 /* pngread.c in Sources */ = {isa = PBXBuildFile; fileRef = A7FA37688E22E33D15DFB26A4571F6EF /* pngread.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - AC4C2943071E6F4EFE6F3CDED9F75289 /* CustomTasks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37497E9D4A4AD3D7DBDCBD661F3B23B8 /* CustomTasks.swift */; }; + AC536961026B8A7A732E37BA5A0AFF4C /* RSTCompositeDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 32C661EFF23BB80E5CBC79C7B385920A /* RSTCompositeDataSource.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AC5786BFBB7B51AF3B5D003E3F943335 /* lua-engine.h in Headers */ = {isa = PBXBuildFile; fileRef = A14075A6CB82B5B0A2CF0B5F3B60E096 /* lua-engine.h */; settings = {ATTRIBUTES = (Project, ); }; }; AC5C7C37725492D17220C640C6B10B47 /* minkeeper.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E82D9E0415F24E9559D27759ACC7218 /* minkeeper.h */; settings = {ATTRIBUTES = (Project, ); }; }; AC7F07736D60C170ADF5347103C06706 /* NstApiMachine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 86CEE581D78B9E9138136F67D7ADF345 /* NstApiMachine.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; AC88AE5A5EF6C2D974226145DF29720B /* NstBoardSachenTcu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CE7A2A4BC98670AD316ABDBE9EC069B7 /* NstBoardSachenTcu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + AC8C27486C782B4BE778E8ABA518C876 /* ManagedRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1A28AB6CD59A0C38D968D07D5256E8F /* ManagedRecord.swift */; }; ACA04F1A522EC18A1D9CF1A1A0ECE722 /* interruptrequester.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E0A94CCCC0D97F634E74FA3103B29F1 /* interruptrequester.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ACB848453661249CFEDE957E0BC5AFCF /* RSTBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 76ACCEF09480010D5EA9E6D031D289AC /* RSTBlockOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; ACE261F0845AE7032EE10EED8352D14A /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D6A333E30962F5423F826B733E702F /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; ACE960410C8930B639E6B002D9E52F44 /* glsl_CombinerProgramImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2815B1907C011A39DFB5DA9B3B93A230 /* glsl_CombinerProgramImpl.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; ACEE8B31B20BE08B7468DB090AC3A159 /* GTLRDriveObjects.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B22551CE150F70C85739F2994DE4F75 /* GTLRDriveObjects.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1181,17 +1194,15 @@ AD6656B872B98CDE4BAC39B6E10CF595 /* GTMMIMEDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 0753A2F2127F76F50CD3A7E3FCDF1F60 /* GTMMIMEDocument.h */; settings = {ATTRIBUTES = (Project, ); }; }; AD77BEE717454B68BF56D30CBAAEB761 /* spc7110dec.h in Headers */ = {isa = PBXBuildFile; fileRef = F10C56C1DD0DBC1297C6FA4D55986B04 /* spc7110dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; AD7D53389EE6FBD882ED47A69EA528BC /* retro_common_api.h in Headers */ = {isa = PBXBuildFile; fileRef = B636371B292E5B16402AE89C9B512E16 /* retro_common_api.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD95435739025FAAFEF2B5911CCAA4B7 /* StoneValidators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E4A59F776B62FE5D7D647BF19F07F8E /* StoneValidators.swift */; }; ADA219A2F6BFE7A593939A9E9ED16491 /* CombinerKey.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE736221B155C2514D9D36EB4FBAEEEF /* CombinerKey.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; ADBA2EA8F4CF15587337BCDC2F645BB0 /* retro_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = FDF80C228030940A34A433995ABD6250 /* retro_assert.h */; settings = {ATTRIBUTES = (Project, ); }; }; AE0D7033540F0EDE845B0823AEA70E9B /* ttnameid.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E2DF4FE7FA12D11F9519C050CBAE82 /* ttnameid.h */; settings = {ATTRIBUTES = (Project, ); }; }; AE2B65C3F228FA7D15103DAB814EC3BE /* exprNode.h in Headers */ = {isa = PBXBuildFile; fileRef = F88144124FBA971D0634C19257E4725C /* exprNode.h */; settings = {ATTRIBUTES = (Project, ); }; }; AE46C27C2357729B0BD66E4CF440A004 /* interrupt.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD4F5AA816AA91F1CA362FFF3B5C93C /* interrupt.h */; settings = {ATTRIBUTES = (Project, ); }; }; AE5B6DA3E94505CAA5687A5D9E6549EF /* cart.h in Headers */ = {isa = PBXBuildFile; fileRef = 28CBF616EB776A5C5D2F9A737B72AA74 /* cart.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AEAF60DA9CCFF57F8FBCEDFFFC09436E /* ConflictRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE3F53289236C150F14F4B85B876D904 /* ConflictRecordOperation.swift */; }; + AE875AC4E25FB81D89442E8E258945E9 /* UIKit+ActivityIndicating.m in Sources */ = {isa = PBXBuildFile; fileRef = 684E9E69891E8CAEBF1DC5CFDC48856E /* UIKit+ActivityIndicating.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AECB1619CFCEF7A7234852F00CB0C5C0 /* SMCalloutView.m in Sources */ = {isa = PBXBuildFile; fileRef = D9E62A3E87A152D8A5A4747A0E88F317 /* SMCalloutView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AF02EA0DAD3FAC51CB5E859F81786EC6 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD38673C0296A73B42D147E647C1937 /* SessionDelegate.swift */; }; - AF384C3F516776514598AB608BF28CEA /* RSTError.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B3F0409CEA697951ADECD54AABFC17 /* RSTError.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; AF3B145662403775AE286362BD64CE15 /* SPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 00ECD1D300178CB98731BDB344274AF6 /* SPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; AF57DF3FC4B0368E92B51C386ADE38CB /* NstInpZapper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95DAC95CF90CC293BB4C45375EC16E36 /* NstInpZapper.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; AF71438F7AEA2FDF0A4B8132FC6ADB97 /* NstBoardWaixingSgz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8C90F98584A8B4B3D48149088FD57C77 /* NstBoardWaixingSgz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1203,27 +1214,24 @@ B011E9394F81876D07949F6C4247ECA0 /* SoundFileFactory.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6F76413369DEBF1203E4F23F42C0D065 /* SoundFileFactory.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B02E655D31D677E01F8A4E796936311C /* NstInpTopRider.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 610FBE2B211DCC4D12F3F435021489B9 /* NstInpTopRider.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B047CED3CE820B6D442A496BFE713A34 /* IpAddress.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3C7AC7D01BEAA298AE2E5122EB24308E /* IpAddress.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B09052B271013EFD3E592D4E87ADC3D7 /* UIImage+Manipulation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D545FA281C697B8D7BEEC43C6652189 /* UIImage+Manipulation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B0B08B97A524F8D48FDDA2249AEAD6ED /* Harmony.h in Headers */ = {isa = PBXBuildFile; fileRef = 94188727366A8D8FB099D152B9B5514A /* Harmony.h */; settings = {ATTRIBUTES = (Project, ); }; }; B0CB31DCAFF38374A10B45E212587713 /* NstInpDoremikkoKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4ACD840C16D41B8494693E00BF6094C9 /* NstInpDoremikkoKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + B10A0533A08E62039D1EBA9FAEA985F0 /* RSTActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E88C1E79B3436FD1C098E8D3CA9C3B1 /* RSTActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; B128E671FDB13E480E8281EB7C33D52D /* assem_x86.h in Headers */ = {isa = PBXBuildFile; fileRef = D2188A915972865B5AF5C68B8B6D05B3 /* assem_x86.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B12E9B494F018B8188AA3733CB1A377C /* NSString+Localization.h in Headers */ = {isa = PBXBuildFile; fileRef = 1363B01A18856DBE22D21EBF8088D06C /* NSString+Localization.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B139C1E6229EC5A0E481686003C8941F /* PrepareUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF07B487D9EDA2636F89AB3A3A526A84 /* PrepareUploadingRecordsOperation.swift */; }; B15418A2DCB1E1CDD4D5EC08C1A03A30 /* GLFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = B54D71F0A9EE62F2B238B985FFE6C460 /* GLFunctions.h */; settings = {ATTRIBUTES = (Project, ); }; }; B158F6C6F5B890AF5A00D8492705CB38 /* matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C50053E5D39FB4F4F1BA560C86E2311 /* matrix.h */; settings = {ATTRIBUTES = (Project, ); }; }; B176188727DE2DD341E44FF00F4BAAC6 /* glsl_CombinerProgramBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = AA792B0E18A3BA4548FB2C386287DD46 /* glsl_CombinerProgramBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; B1766B3E76519CAB435EBB97EEF315DD /* GameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7BC2C79D27AA4D45DBAED609878B0BF /* GameController.swift */; }; B17C1766C96792D8E4702F83155E438A /* NstSoundPlayer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 31E520FC3E469009B4F65BACFD5C14C3 /* NstSoundPlayer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B18BDE9F23964986DC1C252B20A2B80F /* RSTCollectionViewGridLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ABD8BA817A5B6DB4C5828318ED97014 /* RSTCollectionViewGridLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; B1B404D70676CCCFE3325E089DDCAD9D /* loadres.h in Headers */ = {isa = PBXBuildFile; fileRef = B29A8EB5AC9C464A3E9D1DE0A0715E97 /* loadres.h */; settings = {ATTRIBUTES = (Project, ); }; }; B1D54C35EB4095E41EFAFBAAB49C6FD0 /* svgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = 19B404312BCFE831CA10C0C54C6D0B58 /* svgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B1FA10A1E7A8D914849E2F9982C44D07 /* Record.swift in Sources */ = {isa = PBXBuildFile; fileRef = 831586913D802CF0F3BD70D6BB259E5B /* Record.swift */; }; - B219C7FCFC30F49A2B96B301127F71A7 /* NSError+LocalizedFailureDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B7E86F1B639A123C10CF5C402F415B2 /* NSError+LocalizedFailureDescription.swift */; }; + B23FBC2C0864A706F2B040570CA6D007 /* RSTRelationshipPreservingMergePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4070FFD16B4FA23902478F9D6197345C /* RSTRelationshipPreservingMergePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; B2413D48BE65FF8FD294A53D5C5B760D /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C17445D591C8EC78950717FD3D5F77B1 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B272AC71D7ACB699920703161A1752AC /* RSTSeparatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 329C5C85AFC08890DFDEC9E233470EF0 /* RSTSeparatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; B2869FC2676716D20DA1CC8F2460891E /* mi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = FCE15B7CBF75268739FB87C1E0C6AC09 /* mi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B298009A65EB94F7B3C83210AE3C965B /* FilePropertiesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40E721AC96D7B1BD5F1609F94C46FB1 /* FilePropertiesRoutes.swift */; }; B2B8DE2F3D6D41C30F1883FA61776424 /* ftobjs.h in Headers */ = {isa = PBXBuildFile; fileRef = 531E9AB4F828520F2368955170BA41BB /* ftobjs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B30D82E85429187E9C74F971CECAFD0F /* RecordRepresentation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA7701E75D51BBB26AF25CB686CB48A8 /* RecordRepresentation.swift */; }; B31AAF00ED1C7523C8666F9611CCD0B3 /* pngtrans.c in Sources */ = {isa = PBXBuildFile; fileRef = 162D4D53C68E5F2542C1898C9D356FB1 /* pngtrans.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B3279DD4DDA04F5DCA2F5B03E29B9A6D /* NSUserDefaults+DynamicProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = B49CF1CC01CA6A0D613EA0862C7F450E /* NSUserDefaults+DynamicProperties.h */; settings = {ATTRIBUTES = (Project, ); }; }; B34FFF478B816C21FA1425DAB52AD1BA /* NstBoardBmcGoldenGame260in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0E4E5A811FD38FBBF35D0F783DD6B5D9 /* NstBoardBmcGoldenGame260in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B390908E95C1D679EB6EFA22AEABF82C /* osal_files_ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 33FF8A61B13EE6F6CE800CB771D90EAC /* osal_files_ios.mm */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B3B0CAB964F5C903A859882947D5A72E /* NstBoardZz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F59EB83ED791F8F1742B8C9049F05E99 /* NstBoardZz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1233,8 +1241,7 @@ B435EECA15AF195F0828E24958F90C6F /* SoundBuffer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 59A2650A6455EC2EFC3FA9F2C0886519 /* SoundBuffer.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B45AEB6C64280161DD04BE8AE9A34820 /* wglext.h in Headers */ = {isa = PBXBuildFile; fileRef = FE48EE5ECA5693381EB62AA0D741E0E8 /* wglext.h */; settings = {ATTRIBUTES = (Project, ); }; }; B47F724913D168FE78B1209FEDD4AE6F /* flashram.h in Headers */ = {isa = PBXBuildFile; fileRef = FAE08C498FFB93AC32DDE6D957B5E24F /* flashram.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4B9606F74B2AE01213BCB4FBAEE6F6B /* RecordEntry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 699F79983949D91377333D55142CEB7E /* RecordEntry.swift */; }; - B4EB521CC2E0002F09E6D89D72C05EF4 /* RSTHasher.h in Headers */ = {isa = PBXBuildFile; fileRef = BF8EBB70E09CAD5AD9E5BB36757BDD4E /* RSTHasher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4E5B8A526F12AB1BF7A3BE9256863C8 /* DropboxService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 783DB19663500C36D360E25061D1E639 /* DropboxService.swift */; }; B51466218A72A889E8E988A7DB33701F /* NstTrackerMovie.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8009E402564A24AC35F53518E984813D /* NstTrackerMovie.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B53E55152ACF5185856AA85EFFC3B4B8 /* NstBoardCnePsb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8D03641E7133709402578F9CCAF2CFA6 /* NstBoardCnePsb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B560A089A1D47EC1F0B26533258C7317 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18B035B874A3872AE52466285EDB74ED /* SessionManager.swift */; }; @@ -1248,19 +1255,19 @@ B642F97A1B4740DADB75F4DF9357776B /* NstBoardSachen.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 294CF6CD997D9E587A99F6DFE61FEC0F /* NstBoardSachen.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B6758D43CD69D4728C2DEE14394F151C /* GTLRDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 85B98EACC45CEADA2FC73EB069E37FC7 /* GTLRDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; B72829BC0D61AF2E97C134A12BB5387C /* GTLRQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E64591CCE82CAC6775DAB365A75A8BC /* GTLRQuery.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - B73AB37F8B742739EDA3C074F536FBC5 /* DropboxService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46A2C9BD6F58478A775BFC3629531415 /* DropboxService+Files.swift */; }; + B72BF3C1B6C4DBB6A925CB1280F766EC /* Syncable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C0CFDE9A393129B54C5103C27E8227B /* Syncable.swift */; }; + B7559318336220FE66128B7C155EBE5D /* RSTTintedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 327910F0090992C6E3CBE5627E621EB3 /* RSTTintedImageView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B760AD96450CB0BC0A0846109FADD4C7 /* cicx105.c in Sources */ = {isa = PBXBuildFile; fileRef = AEBCD05077A7A9D50A99D05DDFABD57D /* cicx105.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B769CDC513B5AC715C708F8414DE98BE /* SPU.h in Headers */ = {isa = PBXBuildFile; fileRef = F08C08AAB29244E9A786468ABCA8B758 /* SPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B77426E1F1C9948F94D5560AECAEB1D6 /* UICollectionViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1AC475F3EBD28D40D55EE72FC5AB07 /* UICollectionViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; B7C664FAC38D496EC5D9FC2CDDA080FE /* video_capture_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 959C8F76FF4E413331083F4B7271A79D /* video_capture_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; B7C6C5D16FE1D66425DF392A0649A120 /* CommonAPIImpl_common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDBCAC7AE4C298FE4646BD7005AEE4F8 /* CommonAPIImpl_common.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; B8086078DA198494B02348248F53B128 /* TxHiResCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 47179FBED9A19BF96E05BC6C9E3056FB /* TxHiResCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B82CFE3D00673EFAA1BD769B6F0BD071 /* RSTNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D0F4C76483E71C2F01319F14942730 /* RSTNavigationController.h */; settings = {ATTRIBUTES = (Project, ); }; }; B848793866F0C67ED92B0308CCB9D6F2 /* NstBoardAveD1012.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D164ECEA35ACB2EFAF45DFBDE6086CD3 /* NstBoardAveD1012.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B86F11AFBBF731D60E75BE5A170FCCD8 /* si_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = F48DAA56FC916AB087B5D26A104F31E0 /* si_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; B8955C9472B44FCEE652CFFAB57AA5A8 /* Http.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BD91AF2C48D679F07CCC9B6D62701470 /* Http.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - B89DFCAD50363CFBDC53931F4F370234 /* Result+Drive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D7AE2A6BB60EE680F208CA7652859A /* Result+Drive.swift */; }; - B8EED4F04562CE0F560AE123C1F737E1 /* UIViewController+TransitionState.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A0BDC53FD9A10612B34F36860479885 /* UIViewController+TransitionState.h */; settings = {ATTRIBUTES = (Project, ); }; }; B911F3DE6189784BF450146FE29E62F4 /* VI.h in Headers */ = {isa = PBXBuildFile; fileRef = 66E2F83711E351CACFF208148B544CB1 /* VI.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B94304C605E21C38958D8B2399F806E4 /* ManagedRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BE21537778C287EB7835EE5A1CEA97 /* ManagedRecord.swift */; }; B973B21DA14F4A034B18611A4C30754B /* TextureFilterHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F722266C08C5C1739772E3E72CEE17F /* TextureFilterHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; B97F1A94FF1030E195B110D8EEBCAA83 /* NstBoardSuperGame.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1FBDF4ACD90B4DED1F33312B991DB618 /* NstBoardSuperGame.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; B9805A1656378AAA93AADAA09D5122C1 /* NstBoardAxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7BEE27F7FF7F6E7CA6DBDA14F15340BC /* NstBoardAxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1268,23 +1275,19 @@ BA26D53E540298C0F8C6B7FC9C1EE188 /* alist_nead.c in Sources */ = {isa = PBXBuildFile; fileRef = BBF2CF6F66F587AFDA21E30888FC7210 /* alist_nead.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BA2D57760A3C386F7C1C547729E1A472 /* NstBoardFutureMedia.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 459B516EA16454D8B783A5E6A1106CDD /* NstBoardFutureMedia.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BA6F2DEA63EEA27BFAEDA2A35BB85F6A /* GBADeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B38944C4991CE901210237BE9D90369 /* GBADeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA8DAE2B382564F0C1EAFA4E759CADAD /* NSConstraintConflict+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EC1A7B808C5E2E304C086081DB1796C /* NSConstraintConflict+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; BAA4E74335AA7B36F2454711A5B55698 /* Audio.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C789F35DF9D922934F14887196EADCFA /* Audio.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BAA7B0396C8963E3E7324FE70900B64E /* Cheat.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BDD61DD53EB66909667FDEF0E033B1 /* Cheat.swift */; }; - BAAAB1B9FEE1E71EB834788C59B174C4 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 527AC22A3208696A410615506A968BEF /* File.swift */; }; BAE25DB1A5B8BA8A01AF634BCB7CA69F /* pngwutil.c in Sources */ = {isa = PBXBuildFile; fileRef = 87CC302B1B1C6F71828303A524C51690 /* pngwutil.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BB0BB79A9140C13066DC7B7C8B203B78 /* Network.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D2AC56C3AE1F0BBCE09D6CE758D402CE /* Network.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BB191EC60D3AC3D5EB56CB411B128BEE /* Touch.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 66879FEB993CFA8011AE164C2E88927A /* Touch.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BB43B32DD16801C9214E36739BD6D080 /* GPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E028AD93ED1F6C5A46A56195C2CF756 /* GPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; BB961476561437CC41E703E25E767FD7 /* GBCInputGetter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8310F880B7CC9B1650278B22FEEA7A2B /* GBCInputGetter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BBC683E778EBD7924866C7857B19D11A /* NSString+Localization.h in Headers */ = {isa = PBXBuildFile; fileRef = 1363B01A18856DBE22D21EBF8088D06C /* NSString+Localization.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BBE93C6E95E356BE54C337E86C774BED /* Common.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14057D1AEA66E65BED2117946518BB10 /* Common.swift */; }; BBF6C4CF1FF711166B74A992339230EE /* NstBoardBmc64in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B1E6115DADF781FBC5286DC05270CFDF /* NstBoardBmc64in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BC2E1B2F335D8037CEBE9FA5E4D985C0 /* ftlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FF5B91527E584477B10719112BEA1B6 /* ftlist.h */; settings = {ATTRIBUTES = (Project, ); }; }; BC4EB746D2E13352424A93FDC7A52F78 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEC812792FD886E7BB2776C793B6BEEB /* Errors.swift */; }; BC5201AFE5FB9FBB1A0D560CD9F93194 /* pngstruct.h in Headers */ = {isa = PBXBuildFile; fileRef = A088B6DC0DF984AFEA200E3D0824458F /* pngstruct.h */; settings = {ATTRIBUTES = (Project, ); }; }; BC8C1CD0ADEE21D2C320F00B6ABD9DC8 /* GPU2D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C14F1439A262C75F30F451CE2F5AC4E9 /* GPU2D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - BCBDF12AD11385D21AD3AA103D8B4EB6 /* RSTCellContentDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3827013A64806EC421D988347B05D5EB /* RSTCellContentDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BCB7812B218820D36A30C36C4BB0BA65 /* SyncRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E0A6168C0907A7479C4BD04AB5B8928 /* SyncRecordsOperation.swift */; }; BCC3B83B11F726387F8C0A3568E470D1 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = DE7BED3E5E48EB3660BE48EE00FA7AFB /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; BCCF0B9F15A1651547EADC31A6CEB5C2 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = C87526B5C0AF75FA4CE41AA42D172B0B /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Project, ); }; }; BCFC498B83EBB0460E26731FF657898D /* F3DPD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F07E76FD0A048E88C13AD72461D1A8A5 /* F3DPD.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -1292,17 +1295,17 @@ BD0CC9162B585EAC4F9D324068AC0A14 /* firmware.h in Headers */ = {isa = PBXBuildFile; fileRef = F20B25B2356078687C26B25825E487A2 /* firmware.h */; settings = {ATTRIBUTES = (Project, ); }; }; BD0D6665CD9A3B3C0AEDC4347A0BEBA6 /* NstInpBarcodeWorld.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8566DFE3C9D864188FAC41FB8316C1B0 /* NstInpBarcodeWorld.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BD13E45C0102AB99B304A2E15B6FA344 /* ftbdf.h in Headers */ = {isa = PBXBuildFile; fileRef = 601F63C6825CC3B6550C9C4169033152 /* ftbdf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD21247A32EF0C2EACBF439E6C4B9209 /* NSFileManager+URLs.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E3B9E17CE51387A5C31A3D4D020CB3 /* NSFileManager+URLs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BD2BEA059AC491B102F8DF3926BE6F3C /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8BBF62848901866C477497FB2344E67 /* Account.swift */; }; + BD58B4A65AB0C520ECF7C238ECCBCF8E /* UICollectionView+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8EEE2D5A7CAE13A6BDB9042F46420270 /* UICollectionView+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; BD76AF44C34DBCA99DBC73D5ED61FE7F /* GTLRDriveObjects.m in Sources */ = {isa = PBXBuildFile; fileRef = 650B17EB11403844F72B9E0117949D63 /* GTLRDriveObjects.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BD98350191E37E34886D92370CDB8174 /* NstBoardBtlGeniusMerioBros.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 004BF1A3CCAB8016603DA7935B203E8B /* NstBoardBtlGeniusMerioBros.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - BDE0EF415A3093440376B4D04914BBAF /* UITableView+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 45D29114CAD3548F307C7BA691260F25 /* UITableView+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BE4BD4C475FD682FA5F5A75F1CCB4940 /* GTLRBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = C977FFA5FDFB893A5DAB65AE680DA461 /* GTLRBase64.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; BE73142C363020BAD22706DDB199D35A /* NstFpuPrecision.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 63180C4F702A63C80A6A6C9888B52876 /* NstFpuPrecision.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + BE73BE016E3EBA180D610F456C8D6739 /* UploadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1FD296AE5702C2AD78C04C623952693 /* UploadRecordOperation.swift */; }; BE75DD1EED6E0D0B3AADC2A777C7D9CA /* NstBoardSuperGameLionKing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DD7037B9236081F8835FD977759FC372 /* NstBoardSuperGameLionKing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BE8930A97F9D476C9A93D870A62B3D11 /* NstBoardRexSoftDb5z.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5F83D55C13FB6E1F63B5492848583340 /* NstBoardRexSoftDb5z.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BE8C54555C2620B25A50309D284227BF /* AboutDialog.h in Headers */ = {isa = PBXBuildFile; fileRef = 44FAD07D80BFEE0D325168C079FABD94 /* AboutDialog.h */; settings = {ATTRIBUTES = (Project, ); }; }; BEA3DB63075DE883B2C9506C483877DF /* UIDevice+Vibration.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6DC5BD2D6B77CA14C62D6FF5EA327DB /* UIDevice+Vibration.swift */; }; - BED24F03394D6879BAFB6D521219899C /* RSTCellContentView.h in Headers */ = {isa = PBXBuildFile; fileRef = BBBD8731E43D4030EDC2B0655C688CD3 /* RSTCellContentView.h */; settings = {ATTRIBUTES = (Project, ); }; }; BED6D68A786DBE5B331C32D88E209282 /* NstBoardPxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6792E65AE4C83CBE644B193BBA1E52DC /* NstBoardPxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BEE55582625F950FD131B8E9EF98E540 /* S2DEX2.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BF4AC25F29497FA32921E869185CFB9 /* S2DEX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; BF2705ACCDBE29A8E3C665CBB877B64E /* NstBoardWaixingSgzlz.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2507A2AAACF2F3D12826D941CB970BEE /* NstBoardWaixingSgzlz.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1310,11 +1313,11 @@ BF68218EA9CB72C37A86A7DC97330040 /* retro_miscellaneous.h in Headers */ = {isa = PBXBuildFile; fileRef = FECEA5EC0D42D4421643583D74C8F676 /* retro_miscellaneous.h */; settings = {ATTRIBUTES = (Project, ); }; }; BFAE59F52F18BE2C9796FA97184A813D /* TcpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 939A37FF787B2929926C6A99E612A7AD /* TcpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; BFCC142C409062A9139C308E9DA99FA6 /* ftmodapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A23D7BFCABFEC33689D884FE6CAB2A /* ftmodapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BFEDB3C71543B01C462D3562B179DA30 /* SDKConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95CCDA31768B63EA9440181D3FB6DD17 /* SDKConstants.swift */; }; BFF536B78DC4850A4A285C1D03F56057 /* SQLite.h in Headers */ = {isa = PBXBuildFile; fileRef = 007B238BA4CBDD19AB8422150260B200 /* SQLite.h */; settings = {ATTRIBUTES = (Project, ); }; }; BFFFA37AA09F05D1D780084020C36569 /* ARMInterpreter_Branch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FB6F1EA645B2A93AB915AD7BC3EAD8E1 /* ARMInterpreter_Branch.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C02A1354D86F3E5A4090F0FB08274DE9 /* r4300_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 3223712696A5DC7DDD4D4DE6BD2C95A2 /* r4300_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; C05DDFDC87119249A89982825737D242 /* osd.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AD3368B2D5D7E97A29573C83ED07A59 /* osd.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C061FBB44693CE168153BBE6BA63A150 /* Result+Success.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A78FCF77292DF45A5D9BC7C6476C356 /* Result+Success.swift */; }; C08441EF9082D1908CDA86801CFF7967 /* ftgasp.h in Headers */ = {isa = PBXBuildFile; fileRef = 886A3E189B577FD6E4F71CFF3F0C163C /* ftgasp.h */; settings = {ATTRIBUTES = (Project, ); }; }; C0A46DD2A0BD6922A1E0CE926C0202B3 /* MelonDS.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB701508E5E2F9D08F436931CD05696C /* MelonDS.swift */; }; C0D9BA8FBC5E1F537EBE6CC92AB31AEA /* Game.swift in Sources */ = {isa = PBXBuildFile; fileRef = 213FC7540DB4DF3F90B89035F984BD7C /* Game.swift */; }; @@ -1324,17 +1327,20 @@ C1BF92EE9B78C154547D891F8156FD79 /* uncopyable.h in Headers */ = {isa = PBXBuildFile; fileRef = 034ECDF2709AB785B480F4DEBECA1C8A /* uncopyable.h */; settings = {ATTRIBUTES = (Project, ); }; }; C1CA0A9670CDC24476DD0BC30CBAF2F9 /* DisplayLoadProgress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DEC0821C3D8852D66B08A0002AB2F015 /* DisplayLoadProgress.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C21855C2E5D6487AC2B921AD79922E14 /* ExternalGameControllerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B73E9E04EC1D9DC2F189BC9DC0A68ADB /* ExternalGameControllerManager.swift */; }; + C2191F69393CDE272CCBABD5CF5E5452 /* RSTPersistentContainer.m in Sources */ = {isa = PBXBuildFile; fileRef = 051DD45485937EBA4AEB4D55FB230DCB /* RSTPersistentContainer.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C2992FB2C5EA630CD93BB356A0364AB5 /* AREngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CC64C89DA860743FE62F576D82428F1 /* AREngine.h */; settings = {ATTRIBUTES = (Project, ); }; }; C2A7BEF4712B927F676D5521BA4CDE03 /* Vector2.inl in Headers */ = {isa = PBXBuildFile; fileRef = 26980C04667AAE6697AC84486BB012FF /* Vector2.inl */; settings = {ATTRIBUTES = (Project, ); }; }; - C2BE25EB20537FCA2EE93FC27875B382 /* RSTTintedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = B31BC317B925949D8F6F764866AECFAE /* RSTTintedImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; C2C42639F8B8C99AE470FFC772F27320 /* NstBoardNanjing.hpp in Headers */ = {isa = PBXBuildFile; fileRef = FD63E3F134804425401C1B74686EDF48 /* NstBoardNanjing.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; C2CDA8FD21D4EABCF46E596D822C87D5 /* GameControllerInputMappingProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2985A6A24D313B24B3A42ED617C00464 /* GameControllerInputMappingProtocol.swift */; }; - C2CF08E68D39B2B25982B6AD4BE22708 /* FinishDownloadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B914A55A521830F330AED535B8835A5 /* FinishDownloadingRecordsOperation.swift */; }; C2D45C2E6F31EA9735644BA45EDC472C /* GTLRObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A171E0701260ECA35983A32816DB522 /* GTLRObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; C2E179FB02E7F0CD7231AEF5DF00CCB4 /* CRC32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 59F8B6172F22E2155F8670897E6C81D6 /* CRC32.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + C2E923BBC9EAFEBE5B1ABF941EB1F473 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4871776B4C704E222EB93D062575DC5A /* Base.swift */; }; C2EB4CB575EA9821E30A317574865D17 /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC73A05080E7163BE6F8E9426032C82 /* MultipartFormData.swift */; }; + C2FBF7FC45FC7D939AE9353D3D92A9C5 /* RSTOperation_Subclasses.h in Headers */ = {isa = PBXBuildFile; fileRef = DBB12A893E1A139B63450DDE9A309CC4 /* RSTOperation_Subclasses.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C35C510F6FAAA61787444F608E713B7B /* RemoteRecord+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B1B0BE34876BC8785519C94EC3E4ED1 /* RemoteRecord+Dropbox.swift */; }; C36CC682F07B3FEA5A1B00C139CCB3EC /* NESDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 7647C29F1EB2BC67142E821D427D0865 /* NESDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; C3B11E4AA028617D0B3134BF96B451DF /* usec.h in Headers */ = {isa = PBXBuildFile; fileRef = 797293ABB0B561C6FE9D15E812E45081 /* usec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3C03BE1232B76AB81D1A6D283CBC58D /* ManagedAccount.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7069F5F77B1F8E0612B5D6D93216ADC1 /* ManagedAccount.swift */; }; C3CB14A07161497CA6FAA6858EFF4F4F /* Thread+RealTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BD21182E096CF262039B0C3A26E9769 /* Thread+RealTime.swift */; }; C3E9BFE46A1072D5D11FD6DF0C118804 /* pngrtran.c in Sources */ = {isa = PBXBuildFile; fileRef = 3626FD0512609CFE865D492929315B1E /* pngrtran.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C40257B054B827F15814443893FE2D5C /* GTMDebugThreadValidation.h in Headers */ = {isa = PBXBuildFile; fileRef = 026273C8CD9BD9384803DD59CB45DF96 /* GTMDebugThreadValidation.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1353,7 +1359,6 @@ C5C7D15D0CE88D7F9A9F66878DBB4248 /* m64p_plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DB69BA777DA2D7FE96274A0B4EB4BB5 /* m64p_plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; C5F1C4A446D8769AF9535D1036A3E0E3 /* memalign.h in Headers */ = {isa = PBXBuildFile; fileRef = FE67AEDDB46071185B8EF236FD149EA7 /* memalign.h */; settings = {ATTRIBUTES = (Project, ); }; }; C64BD3A6EB67DB072D73D1C4878D2A36 /* recomp.h in Headers */ = {isa = PBXBuildFile; fileRef = F8E695BDE117DE11C2A9816B243CE8D2 /* recomp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C669D2A2AEB5C8351795BD1BD61EC908 /* UIImage+Manipulation.m in Sources */ = {isa = PBXBuildFile; fileRef = 97B9144AB8468E437ABB41803974D033 /* UIImage+Manipulation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C67F326A6AF0E3C1047D6DC2008B71AE /* Event.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F013766E35198FF97F65503319E09993 /* Event.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; C70555D93FB3D865E74813F1EEEE7BB7 /* DisplayWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D14C427796C3B67D5F822717322045B9 /* DisplayWindow.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C72087EDCF1BAE223A1BB8C94BA87329 /* Statement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96BB44A4386C6A18D5BEA9F5AF2E1EF0 /* Statement.swift */; }; @@ -1364,27 +1369,28 @@ C7DD70EC49EC3FC47CF6D741BF54B670 /* NstApiCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 114921A6CAF20904FE9B8E29537F98A4 /* NstApiCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; C8065BE8E7EE0A002B995608EA590F05 /* getopt.h in Headers */ = {isa = PBXBuildFile; fileRef = A872D0AF2F86BA70FF401F6898E09D33 /* getopt.h */; settings = {ATTRIBUTES = (Project, ); }; }; C82B4ECAC9F24ABC6EFAB56B0CDEDBDC /* GTLRUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2119D6748E380E5815A3831CA3977A /* GTLRUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C845CE1108A670F5E6470B4177771035 /* UpdateRecordMetadataOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AA4684851D7064C85599D690E6A6446 /* UpdateRecordMetadataOperation.swift */; }; C87DC4532FB4EDA639952BE7DB5EA0A4 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 5FA683FD9CEB1F0629D3586B5C0D5276 /* Standard.deltamapping */; }; C8938F662C069F5F0A31F1853DC14D2E /* GTLRDrive.h in Headers */ = {isa = PBXBuildFile; fileRef = 3144D27552079845BF5B0637FC88D62B /* GTLRDrive.h */; settings = {ATTRIBUTES = (Project, ); }; }; C8963BB26817BCC33E40F9AE8652DE31 /* NstBoardMagicSeries.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DB36295AA4074B36829063D11A8BDC98 /* NstBoardMagicSeries.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; C8D05EDF6925A01947DAB32564282D78 /* F3DAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 5874E00381FC42362866EFFB712A5697 /* F3DAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; C92F9000C0A370F7B961E659F246F6B6 /* fterrors.h in Headers */ = {isa = PBXBuildFile; fileRef = 71CB328D9397310D6DF21B68E80E7672 /* fterrors.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C96524CDB423028248FE52A069C84B94 /* RSTFetchedResultsDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 2090E7B6074A480B545986DD5394BCEC /* RSTFetchedResultsDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; C9898D393FDF7E17C404424E76078E76 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = 51271E29C0A54F7A1326245A7BE21051 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C98B4D02BC0E57B4BCBF55318C7991CE /* RSTSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1EB2114C929E81D171083B106C71103 /* RSTSearchController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; C99792D9CCCAA1633F30B5C770D209E2 /* opengl_BufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24ED56596D00F9B9AD800B7FF30622F5 /* opengl_BufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CA01B933786390F57E6A2168E315C4AC /* new_dynarec.h in Headers */ = {isa = PBXBuildFile; fileRef = 62CF8182659AC61B46F3EE64308E7BA7 /* new_dynarec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA52FE953A256B3FA7D63719284CDD4B /* Dictionary+Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F6407C6FBA4E320D564FF013EBEDCF4 /* Dictionary+Sequence.swift */; }; CA85EB6916A90E0948AD91B44AF2D1EE /* ftmodule.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A22E94D129FB402325A388CC5DF7FDD /* ftmodule.h */; settings = {ATTRIBUTES = (Project, ); }; }; CAA19D846835105188A3CCC602CFF800 /* InputStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 502A6CD60EBBE6E5ABFA9CD22B78AEE5 /* InputStream.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CAB0EC2F4B4EBC142BF0CC766A40A07F /* TeamLogRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEBCE82463719FE6476D577E1F4423FD /* TeamLogRoutes.swift */; }; CAC47B07CB7EB748B29FF500CFD868CF /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = 325E8BBC08F3C0C7CC6EE4B27346E532 /* md5.h */; settings = {ATTRIBUTES = (Project, ); }; }; CB4D7CCAB208A3DB446872AD7C63A241 /* NstBoardIremKaiketsu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 71AB68FE56ED4BF2433BBC850D1026C5 /* NstBoardIremKaiketsu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; CB7A5FD2D111FB945D4C60F8F9CEB90A /* RTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60E75825D0C5BBF73C1EE33565BACBF /* RTree.swift */; }; + CBC8C5864F339F2B0BE248A834BB02A0 /* Custom.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB060E9B70D07FF358DD8F33001FD5C6 /* Custom.swift */; }; CBD00AD2D050E606B432EF764F0443EF /* FTS5.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E672A1C13EE353B0AC39DE0F84A4323 /* FTS5.swift */; }; CBD2DBEF004FFD1ECB71215BF0732DEC /* Parameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 772DEEE3A8A1AA94502EF6098107740C /* Parameters.h */; settings = {ATTRIBUTES = (Project, ); }; }; CC0725ACB5A40F203229C0A25D761B23 /* NstBoardSunsoft5b.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BF0FD474F9FEB46BE9E7E78E2AC5A906 /* NstBoardSunsoft5b.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; CC0EA78FA60E115C914C9F9FF86207D6 /* FrameBufferInfoAPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 120C5D8AF966C09C6ECCB59508E8C8A2 /* FrameBufferInfoAPI.h */; settings = {ATTRIBUTES = (Project, ); }; }; CC26D87FA28610D70B4991837FDCAE5D /* NstBoardMmc4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 10A0472CDCFE1CC45A359E5838CAB872 /* NstBoardMmc4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CC289EC52AA3C05EB4653806308B6B1F /* DropboxTransportClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E2C328E034800C2CB26F5B94B12DDF6 /* DropboxTransportClient.swift */; }; CC58DDF76C1D36A4C1F82D0E4ADED75F /* glsl_SpecialShadersFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D763E69CEADEDB375FE897F8EAC5BA0 /* glsl_SpecialShadersFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; CC5E67A0FBB0E024BCD8D295572616E1 /* ShaderProgram.h in Headers */ = {isa = PBXBuildFile; fileRef = FBAE8914742053CB6ADCEC14737596F0 /* ShaderProgram.h */; settings = {ATTRIBUTES = (Project, ); }; }; CC5ED7A4B4274891BCA47D0A1049F072 /* ttunpat.h in Headers */ = {isa = PBXBuildFile; fileRef = E1210995B1881C4C2239A38E329170E0 /* ttunpat.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1400,23 +1406,25 @@ CD80F55F2EB0D1ED46CA0003EF8683F3 /* NstInpPowerGlove.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 820605CE2F2AA8CECEF751B81CDC1F0B /* NstInpPowerGlove.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; CD819361F1900AD6FB43579B9DCAA9BF /* NstBoardTaitoX1017.hpp in Headers */ = {isa = PBXBuildFile; fileRef = B8A07AF8FA08DD189EA38E162C486A42 /* NstBoardTaitoX1017.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; CD821C3D00A559E41113DAF03124B0FF /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C82EFB2F13ACDF594E201C36E2BE936 /* array.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD87C519C9780A8B86F02DE34E90CB96 /* RSTCellContentChange.m in Sources */ = {isa = PBXBuildFile; fileRef = D446F7C2C98C47BB376AA4DC92FF956D /* RSTCellContentChange.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CDD28AC1BB0F07E4991F10641F3B3ACD /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 73BCCFACB97ADF9811932D4767D83953 /* SDWebImagePrefetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - CE10DDDAE7EAF229186F72415E877A1F /* RSTLoadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 451CFB17CBEBD52220C6B8E9777016CB /* RSTLoadOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CDD542EB52614CD6C0F8B6BAC43FDF50 /* Roxas-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DC0FD4C8DB0253E8CE8EAF9C64DBD0EB /* Roxas-dummy.m */; }; + CDDA5A6A7DBA2956B63EEC99ED95B956 /* NSFileManager+URLs.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CD097CFE02D8169FF5FC3721CC0AEFF /* NSFileManager+URLs.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CE229BF25224ECEBDDC4F72BE71B6A47 /* LocalRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB7DA90822908B1EECA492E051D817CE /* LocalRecord.swift */; }; CE4FF62954D9D2CC3499AFB74E9BA974 /* opengl_ColorBufferReaderWithReadPixels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4876241413E9B62B9F4FF4FCBFBC93B /* opengl_ColorBufferReaderWithReadPixels.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CE8C2685076CD3712164E2B091B9559E /* TxReSample.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F5F6218B59F2A6BF7EC220A625C8AB8 /* TxReSample.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE8D08D29BB0A4769D2C276605AFB50F /* Harmony-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C84F53DDEC96ABDB4E99816C838005FD /* Harmony-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CEAD3645EFC4389694E75CF1068CC91F /* HarmonyMetadataKey+Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7995A2AC9E3D083B7373FC9209B625BD /* HarmonyMetadataKey+Keys.swift */; }; CEB4CEA74EBAAE30B91E25412FC5310D /* F3DEX2CBFD.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BD20790AB990ACC80BB8996D8F6E7CF /* F3DEX2CBFD.h */; settings = {ATTRIBUTES = (Project, ); }; }; CED63E1AB568688A1C00CA58D790243D /* DSTypes.m in Sources */ = {isa = PBXBuildFile; fileRef = 6572AD0AF91A5CC97E1F7CEB62ED94A0 /* DSTypes.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + CEDAB2C55F9DD7D4E2D8CF98BFE8CC81 /* UITableViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DABB5ACFBF2E1DA35CD42F620E46F1 /* UITableViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CF0AD48E0F3BE7E612B1A6D234C3BA4C /* TxFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC339C9C59B65A4D6483598A6451971E /* TxFilter.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CF14CB07724E28C9AA37889A92FFD645 /* GTLRURITemplate.h in Headers */ = {isa = PBXBuildFile; fileRef = D27C9AEA920B8065DC8FB0F6F92A6E26 /* GTLRURITemplate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF15A4FD0438274D29A83992C4D7A186 /* Result+Dropbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439530753701672255509E76BB1AC1D7 /* Result+Dropbox.swift */; }; - CF250F8607C7E5B37247613578134177 /* DriveService+Files.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83EAB31E2D8E6844C8AD8F3F95F9ABB1 /* DriveService+Files.swift */; }; CF31DD15B783DC030C99042424B72681 /* NstBoardBtlAx5705.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DF5405AEB7C1FBC155A415D86594377C /* NstBoardBtlAx5705.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + CF480B6742A9AB2E86C1DE5CA2FBECFC /* SyncCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81541D03368976297C41B931C452EBE6 /* SyncCoordinator.swift */; }; CF652780A826660EF98D71D7CBD05BC2 /* GameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65E0BB76F563A560B6025A701C5B300C /* GameView.swift */; }; CF96B67066487C2BC53BDD35D81C0601 /* opengl_Parameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0A35B20685D6B2F22C568D23E73C3E50 /* opengl_Parameters.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; CFAFD40E7046DCF2D88C105C118301B6 /* pngstest-errors.h in Headers */ = {isa = PBXBuildFile; fileRef = 16F999D1DA5FF8502A180736C3C54BFB /* pngstest-errors.h */; settings = {ATTRIBUTES = (Project, ); }; }; CFB692A4993E0C91F447057DF39648E0 /* NstImageDatabase.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 83C151DB4B297DC753E27E2E0F3C3BC4 /* NstImageDatabase.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D014F5EEEC93795C92F386BC05F90FD2 /* RSTTintedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = B31BC317B925949D8F6F764866AECFAE /* RSTTintedImageView.h */; settings = {ATTRIBUTES = (Project, ); }; }; D027F8D4E880D7092DB8AA5A02D7AAC9 /* CGGeometry+Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEDA901FE973732B0B1E37BD243D43BB /* CGGeometry+Dictionary.swift */; }; D07A1B71422D57F744E2F9C684688785 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 6AA43E914AB86898557D6FEDC791C933 /* xxhash.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D0A350DA4B14A8CDC1D8FEB787CE8DDC /* list.h in Headers */ = {isa = PBXBuildFile; fileRef = 582F8C63B9BF01FB8537FCBB2196C589 /* list.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1424,6 +1432,7 @@ D0C55D7F18D9A49A467F0E0B8669B0B8 /* srtc.h in Headers */ = {isa = PBXBuildFile; fileRef = 291D59A8B427D100ED229874D4D9C1A4 /* srtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; D1014816F973C67639F5622AAA455B97 /* Config.h in Headers */ = {isa = PBXBuildFile; fileRef = 95E5CEA8D238911F127A409B1C8C507E /* Config.h */; settings = {ATTRIBUTES = (Project, ); }; }; D10C97C4AB425B976ACAAE1D9CF6D55E /* NstBoardBandaiOekaKids.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 16334C263B60314F60B061077457ED0F /* NstBoardBandaiOekaKids.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D1185203EAC27C426C8C8BC670E7EDBC /* RSTCompositeDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A4CBD7EC311541871920C24EA2D9548 /* RSTCompositeDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; D17655285DCCE928A9B98D19D4FA6CB7 /* ColorBufferReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0576D7E597D37BAAB587DB83FE8CB161 /* ColorBufferReader.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D17C9E1F856D9112E10FDA502E84EDA8 /* fpu.h in Headers */ = {isa = PBXBuildFile; fileRef = AE319AE2C2040F374241D90E84825723 /* fpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; D181DC3438FCD7E645A072E81889876A /* ZIPFoundation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 882DA4CFDB38488363DB6FA79E5CF3BE /* ZIPFoundation-dummy.m */; }; @@ -1435,19 +1444,20 @@ D27F8F70A73867B450D3D9CEF4B923E8 /* GBAEmulatorBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 35CA6F1D8D4FD82291C1148088DDB220 /* GBAEmulatorBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; D298FA6F6D28DD13D771BC71411D5851 /* NstBoardJalecoJf19.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6FEE36BBE5119D88DE64B64D975EC87B /* NstBoardJalecoJf19.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D299CCB9A5A6574C3B9776B6B7065208 /* NstBoardAcclaim.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F4C6BE6BA9CC949F3EDA941ED2CBEB38 /* NstBoardAcclaim.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - D2A37DEFD55B0BA864F27119BE974CB0 /* BatchRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5967CB93E1B68FCF175E97CD13D10CFD /* BatchRecordOperation.swift */; }; D2BC97FE93CA9D56996B4F25DFA2AA8D /* opengl_UnbufferedDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5B5206BC0DB3FB590107A53EBAE4647D /* opengl_UnbufferedDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D2E7A94DA4EB51A3145F965B880B6F2F /* ContextSettings.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 725B23CE4361DD6771F70C91256E286B /* ContextSettings.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D2FB63331B59F465C90738151C31C480 /* F3DTEXA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F491BE89CC65EDBFCEB3B214D06C7200 /* F3DTEXA.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D30D6BB221DE29EEC564FB38B8917C38 /* SDL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E5267A220D47D998845DB51485386A8 /* SDL.h */; settings = {ATTRIBUTES = (Project, ); }; }; D324B3C6609ABF310B5E1436F17C2BF3 /* GTMDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = FC141D48A65D77B26B9922807BD281CC /* GTMDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3795DEA313C53D514C33769B4BE4998 /* RSTHelperFile.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AB79AE80A36131240B0204640F0474 /* RSTHelperFile.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D386CE84965DC46DB052B5BE658BEB2A /* ControllerSkinProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F4FE55BE08EA38FF320E4286A4C43C7 /* ControllerSkinProtocol.swift */; }; D3971497C1928729EBBD4FFF3B566896 /* PostProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = A664ED590168019449C1E8A60B996A1D /* PostProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3A01F05B185083B517E4626FDF3C57D /* RSTCellContentChangeOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = FCADC95CE36A81554A4E95CD8996C26C /* RSTCellContentChangeOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D3ABAE47C410AFEFE62EFF0A4B01988B /* NstBoardUnlSuperFighter3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0971A5E1176766915B5C63ECBAF0E9A1 /* NstBoardUnlSuperFighter3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D3DEAD4C77A168D67D3EC458661D424E /* GTMSessionFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = F10F7750064142DE73F6F7454CC2983E /* GTMSessionFetcherLogging.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + D42EA38E8FFF91A7736B71E774A63092 /* ManagedRecord+Predicates.swift in Sources */ = {isa = PBXBuildFile; fileRef = 991212BCD23A0E8E76331B80D2D2CBA8 /* ManagedRecord+Predicates.swift */; }; D4758FB588B5F4982C64E60466D14B78 /* rumblepak.h in Headers */ = {isa = PBXBuildFile; fileRef = FACC5CB26B7294708491B46F0397D3DD /* rumblepak.h */; settings = {ATTRIBUTES = (Project, ); }; }; D47799D2FEF7EBAF1EEC0D02D279AE11 /* SoundSource.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 904DA70530378048CC4E91EB8EF417B8 /* SoundSource.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + D47B85F011245FC97BBB98CB88CA156E /* NSConstraintConflict+Conveniences.m in Sources */ = {isa = PBXBuildFile; fileRef = 932A9FB4261665509630DF314C0698B4 /* NSConstraintConflict+Conveniences.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D4BBFE50425065DFEBA634F40C1E480E /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C8CA8E12823E49115A148B8AF4C1682 /* types.h */; settings = {ATTRIBUTES = (Project, ); }; }; D4EF0B9C680FAABDFBF23493217BEBEA /* ARMInterpreter.h in Headers */ = {isa = PBXBuildFile; fileRef = 55823D54327ED2C23F433C3F864E151A /* ARMInterpreter.h */; settings = {ATTRIBUTES = (Project, ); }; }; D4F4CED77BC0C96F563776174E66E619 /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = D29AAFD2CFE6FB0F7D7946F037550722 /* cpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1459,20 +1469,19 @@ D6A44C024915094BD0A87D4DFC412F6A /* cpuops.h in Headers */ = {isa = PBXBuildFile; fileRef = 53E9A117D241958D71059796ACCE24C6 /* cpuops.h */; settings = {ATTRIBUTES = (Project, ); }; }; D6AB41F528E0CBE33F26C2ECABEB070B /* NstInpPad.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 23D60DF4C8C979E59877EE0BC1BA7C94 /* NstInpPad.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; D6B9F611C6D9C0C8CD854D4E488E6AB5 /* GTLRQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 4607BD69102AF97F0A85D6512B3409CD /* GTLRQuery.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D6CA1E7494CD056543C97D426E33EA23 /* DownloadRecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B90B39FD8918D51E615C0129F1E17120 /* DownloadRecordOperation.swift */; }; D6E2B0F609F10E48830213BA053DB040 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 101B4E4EEFA447219922363435CA78CF /* Standard.deltamapping */; }; D6F102986AA8EE08EC2208477688523A /* WriteToRDRAM.h in Headers */ = {isa = PBXBuildFile; fileRef = 0218E1BBADD080E67F9220EDFDF90EF3 /* WriteToRDRAM.h */; settings = {ATTRIBUTES = (Project, ); }; }; D707B75B04BAE61898A4BC8026561F4A /* tttags.h in Headers */ = {isa = PBXBuildFile; fileRef = FBB09720E5E561800A0A26EC646F3678 /* tttags.h */; settings = {ATTRIBUTES = (Project, ); }; }; D7374BAD47CD61AA924220F7A5043F63 /* cpuaddr.h in Headers */ = {isa = PBXBuildFile; fileRef = AB71B3A5AD08C7FD7FFA348B2DCEA559 /* cpuaddr.h */; settings = {ATTRIBUTES = (Project, ); }; }; D73B4E6353020EB9B6844EB6937E0DD3 /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B9715EFF4CB742F4153FF865BFAE0B /* util.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D753580473283FA203738466F2939B6A /* AnyKeyPath+StringValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 723AFC03DAB1F2E32CB45A4F3ED5FD35 /* AnyKeyPath+StringValue.swift */; }; D808ED025C15643A9FD4FD11530825C7 /* missing.h in Headers */ = {isa = PBXBuildFile; fileRef = 74B57B3A4300861FCBCF153277342957 /* missing.h */; settings = {ATTRIBUTES = (Project, ); }; }; D81057F2081420DC4B25CDA39DBC3B96 /* GTLRRuntimeCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DEDD6511A23A74FFB52233C54AB8E03 /* GTLRRuntimeCommon.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; D840CD895C00C5B1FF24F78ED7A72681 /* DSDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C7136242783A97DD4FA174D6AD000A7 /* DSDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; D8524A5C842C0580F42718FE94C8F791 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42A9F4072A21C2D6095C0971EEC3FC1A /* Alamofire.swift */; }; D8626C5FF1E601154B671D0D03932364 /* fttypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 57067E8C28EB51D8DC120B70B3A966CF /* fttypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; D872BDF31403DB85D3769379C5C2B72D /* txWidestringWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 18DCE91DC2FF6AC9626641A56F1ECCF2 /* txWidestringWrapper.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D8889A6910820C522D9EC5AE0F105B7B /* UICollectionViewCell+CellContent.m in Sources */ = {isa = PBXBuildFile; fileRef = 142265A2DED24A866633D72B79145B0B /* UICollectionViewCell+CellContent.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - D896BE2637D4D0EE60FE67FB5B01F686 /* RemoteRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD29A29166068991BD1FCD1B5147A8F9 /* RemoteRecord.swift */; }; + D8ABD31A286A55BB5ACBEFA33F233C4E /* TransportConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31BFB44B9B839260D03128AA298313F4 /* TransportConfig.swift */; }; D8E9FCCA464240BD9F53DE1BA3C90BB1 /* messages.h in Headers */ = {isa = PBXBuildFile; fileRef = 037E3F75B195945C62D341A82A439502 /* messages.h */; settings = {ATTRIBUTES = (Project, ); }; }; D8F09E6FFEAEFBFFA69546C6F36EF74F /* Coding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998BCE1BFCDA316A894F5BE77EF92AD4 /* Coding.swift */; }; D917430D486E5BD25A2CA0B8B4F237B9 /* GPU.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EACF9BBDC13D732E0443F9F9FCC5743 /* GPU.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1481,14 +1490,13 @@ D9C27F24D9EA059650BABC21EF34440A /* svcid.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E9C9E58EFFC6846E01B3B75A4595B21 /* svcid.h */; settings = {ATTRIBUTES = (Project, ); }; }; D9C49C20020EC384D9677F355A124006 /* ftgxval.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D7A85BF8A1C0DC2EE0B2F071F97445 /* ftgxval.h */; settings = {ATTRIBUTES = (Project, ); }; }; D9D678A3261AB86A7637EB79F73B0D27 /* GTMSessionFetcher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C1089BC73E36C74AEF372EEED122EFC /* GTMSessionFetcher-dummy.m */; }; - DA2B760E4D6E2D31F977E72C22441865 /* JSONDecoder+ManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 103B62F4A02A6FB81B5873123E3E4EAE /* JSONDecoder+ManagedObjectContext.swift */; }; DA2DA6C00C0EB1612EEEF2C30A494919 /* debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F9BFBF397EFF80B8131726E9C9A62C9 /* debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; DA43100A6B64394824A74494A2E4C6E7 /* SDL_opengles2.h in Headers */ = {isa = PBXBuildFile; fileRef = 523D82D262DC8E536D345567D04FF3F5 /* SDL_opengles2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA650D45F2067141AAC7476F3826DFB2 /* RSTToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = 18A21C316835DD316654A070B9E838EF /* RSTToastView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; DAC30DFBB6381E8AC0EFD63B71601B85 /* TxCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7E8024B293C9555F3BBBE264D95E1A8D /* TxCache.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; DB02626D12C516C4CD6A9EA98D20A50A /* SQLite.swift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F298C5D309EDC6DEBD36255472EF52C /* SQLite.swift-dummy.m */; }; DB1F6B12BDF14D5E6EBDC2ADDE1A7F17 /* SDL_thread.h in Headers */ = {isa = PBXBuildFile; fileRef = B5FBEA1458597421280682E90821C05C /* SDL_thread.h */; settings = {ATTRIBUTES = (Project, ); }; }; DB271162188B9FCB78E0150B0D2B6917 /* NstBoardWaixingSecurity.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9E96797E03C6BA19B7B506E463067AD1 /* NstBoardWaixingSecurity.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - DB37D974F8E6FB9101F45E79F9AC3858 /* FinishUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86E0555011765103678D4A46B0D7CD30 /* FinishUploadingRecordsOperation.swift */; }; DB41B47B5BEAA2503BCEF6C2AAD2ED01 /* NstInpMouse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4E1E1F9090B631F29A327D322AFF5B4E /* NstInpMouse.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; DB4B31BA9A8CC6D815BB4F31E455EBA3 /* NstBoardSachenSa0036.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6004CD9FBFF76F6C36F2C167315443BA /* NstBoardSachenSa0036.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; DB5891014AF5583F4CE70D67063FEBF4 /* SQLite.swift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BED699E7391C1CA0477C2735B758007E /* SQLite.swift-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1498,6 +1506,7 @@ DBF0A6C0BE990638F43CB71209C4E731 /* SDWebImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 83433F387FADB6F93585B15C45F26C41 /* SDWebImageDecoder.h */; settings = {ATTRIBUTES = (Project, ); }; }; DC2B5FAE55CCDB0BAF6EC9CC3F2F95EC /* RingBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26169D7A10310A0CE0A585A679CB5736 /* RingBuffer.swift */; }; DC4062D2014323F03C964765A375E1BC /* vi_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E5C87C85D80CEFECDBD846C5507C244 /* vi_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC505F2A9CFD8EF46656BC89A39D84C0 /* RSTOperationQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D3D57B0A12B1AA1AEA896FD02062F18D /* RSTOperationQueue.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; DC6205827B0C7D620DC22E1DE3BCF91F /* assemble.h in Headers */ = {isa = PBXBuildFile; fileRef = FC30BD70C930E58720D8025E77346710 /* assemble.h */; settings = {ATTRIBUTES = (Project, ); }; }; DC69B4AFF4D4A8717D638909D4AD454E /* m64p_common.h in Headers */ = {isa = PBXBuildFile; fileRef = D1975814ACD46FECD8CEDFCE0706FFF0 /* m64p_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; DC7A37F12FA93FA2A4733E69021D08CA /* NoiseTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AD6FBA65BDE1FCB431C91C3080423E1E /* NoiseTexture.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -1508,9 +1517,9 @@ DD4D78B32B16026CDA793F04F559C4F1 /* assemble_struct.h in Headers */ = {isa = PBXBuildFile; fileRef = D91D509E04E52EB1EF2C6CE6325D63E0 /* assemble_struct.h */; settings = {ATTRIBUTES = (Project, ); }; }; DD620D1ACC965F9F33B8EE775A1C2929 /* NstInpRob.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E53076134FC473CEAF27FC2CFCDC3C7F /* NstInpRob.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; DD629500BD99B168EB7584A1A2B01C67 /* Context.h in Headers */ = {isa = PBXBuildFile; fileRef = CE641ADC83B5D0F02766689E3A81B2B1 /* Context.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD965F38F3926F23D15FF807E4486928 /* RSTCompositeDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A4CBD7EC311541871920C24EA2D9548 /* RSTCompositeDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; DDCED74F45A4D745CCD7F319429DAD10 /* c4.h in Headers */ = {isa = PBXBuildFile; fileRef = C57031E8B6DD0EBAC4E35185FB93794C /* c4.h */; settings = {ATTRIBUTES = (Project, ); }; }; DE03B44C09A95033D34E2F674628D155 /* gralloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7001F35121D79E891B1BD2B4C133B505 /* gralloc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DE09E028E87C97A6EA36CFC0BF259FCD /* Team.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C9E8347629FB94F0A3A23F8ACE7DF87 /* Team.swift */; }; DE11559AB2EE46B9EF975182AADB9C28 /* ftstroke.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E0ED605D7C2BAE8463AEB4ADEDF371 /* ftstroke.h */; settings = {ATTRIBUTES = (Project, ); }; }; DE2C177F1F0790310E321F30BF5FEEB6 /* GPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D4D5FBCFDF444CE792F8C8209C5606CC /* GPU.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; DE9767158BF62EA7699B8789BDC3B789 /* pngpriv.h in Headers */ = {isa = PBXBuildFile; fileRef = 486AA33DBD077F14429174C280495E58 /* pngpriv.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1519,9 +1528,12 @@ DEC9018C324CE6256C9EFA5A4A934B58 /* xxhash.h in Headers */ = {isa = PBXBuildFile; fileRef = F3A334ACFE0D3AC3FE96307D138436AB /* xxhash.h */; settings = {ATTRIBUTES = (Project, ); }; }; DF632D227E40256F30369C397760D46C /* F3DDKR.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FDC971E53465BFFF543E22C621BB9660 /* F3DDKR.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; DF7E34A9447E1503AAD895111E3BCBF3 /* bsx.h in Headers */ = {isa = PBXBuildFile; fileRef = 985EAE9972B33CF9F927C6F483A4B357 /* bsx.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF9D7C07C79C1195842DEDF619FE6245 /* UserDefaults+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 310FBB612ACE362141E6D805B3FC303A /* UserDefaults+Harmony.swift */; }; DFDD4A619790FBB12996A1A6A144E116 /* netplay.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C1BA9EB80CFC347F52BD3EC8F1856C4 /* netplay.h */; settings = {ATTRIBUTES = (Project, ); }; }; DFE47A6A5129454BBE6488DA6493348A /* NstBoardAcclaimMcAcc.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 73AFCBDE3C3C3422A99EE597CEF40C70 /* NstBoardAcclaimMcAcc.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E002DE662DB29B513260463AAF8196AE /* JSONDecoder+ManagedObjectContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E00DF6A9A757414356C0B15990E587B /* JSONDecoder+ManagedObjectContext.swift */; }; E028E6BB5BF11783165428AFB4371D2D /* ereader.h in Headers */ = {isa = PBXBuildFile; fileRef = 52F99D4811CD8DBB2B4EDC0AB616E6B4 /* ereader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E0418EF27E0C644157D0E9ECBAC8C1A9 /* UIView+AnimatedHide.h in Headers */ = {isa = PBXBuildFile; fileRef = 250AF154A10D578764C0BBBB190A8554 /* UIView+AnimatedHide.h */; settings = {ATTRIBUTES = (Project, ); }; }; E042B88177EC0C73F9EEB78D87B4867A /* fterrdef.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E65C6009E97AD1F054B35476E2887A /* fterrdef.h */; settings = {ATTRIBUTES = (Project, ); }; }; E0584F089FB27ABA38D5D355721DE37C /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EEADA9A5C4C5EF8A88BBC09B95C5F62 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; E0991B721AEB76C3A627E4BF66008675 /* m64282fp.h in Headers */ = {isa = PBXBuildFile; fileRef = 299389570253111A7FC0B2AD359D7A1A /* m64282fp.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1532,14 +1544,11 @@ E10B2C2CC334BEF5895DC4C950250177 /* Texture.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 21FF5A1389969C1EED92B8D6155554D5 /* Texture.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E10E1AA9B0876FD02B3E3061C7E0B57A /* cic.h in Headers */ = {isa = PBXBuildFile; fileRef = 34B01107A2C96AA02DBB861B4B38041C /* cic.h */; settings = {ATTRIBUTES = (Project, ); }; }; E12B8F200ECEFDDF5544EFCFD880324B /* retro_environment.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A147B56E0C3491FF27162D46C95BDD2 /* retro_environment.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E19486EB42DE44DE94BA6D8BA26ADCD5 /* RSTRelationshipPreservingMergePolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4070FFD16B4FA23902478F9D6197345C /* RSTRelationshipPreservingMergePolicy.h */; settings = {ATTRIBUTES = (Project, ); }; }; E1A2DFE668E3513F0D9B7761FEACB3A3 /* NstIoAccessor.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6BFD0F656B9079094013712B8261B5E1 /* NstIoAccessor.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + E1B3C7EA1C48D011E38D466A581BE46F /* TeamLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCBE6B3F37DD42BA03F9A43F4FBE4F4D /* TeamLog.swift */; }; E1B97E70F063CDF2C659566AC9AD7801 /* glxext.h in Headers */ = {isa = PBXBuildFile; fileRef = 46E7ACB3EEB07EF50F5C2B657C683EC7 /* glxext.h */; settings = {ATTRIBUTES = (Project, ); }; }; E1F0ED8637916242D358C81D80CF57B1 /* S2DEX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 078EC48CFDCED61DA3CE896FA2BC1477 /* S2DEX.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E21F9E3675CE2A5C2910F409DB690497 /* DBChunkInputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A52DF3CA0011FA99AF644362B09A598 /* DBChunkInputStream.h */; settings = {ATTRIBUTES = (Project, ); }; }; E240D32BDB49F8E26000117E1792DA24 /* NstApiDipSwitches.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DC6964261E4DD7BE99FB445FC8757345 /* NstApiDipSwitches.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E24C77E406D608D65CF44CC758D79AA2 /* SwiftyDropbox.h in Headers */ = {isa = PBXBuildFile; fileRef = E248CA8F99CCB2FEEDCE6967354F7FB4 /* SwiftyDropbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E25E5FB3CA97B41662F326DC6DFFFC0B /* DriveService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABE1F0BA1ED297C8F6D7E93A5DA90FAA /* DriveService+Versions.swift */; }; E2782016C2BC54B3433C1114E723AB91 /* L3DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 93DB6CBD9964A538F778E19D3832F2B9 /* L3DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E2AFD1997E521E9F3411C241816607F7 /* opengl_ColorBufferReaderWithReadPixels.h in Headers */ = {isa = PBXBuildFile; fileRef = A463F67D31F18A3E8817C9388BDDEADD /* opengl_ColorBufferReaderWithReadPixels.h */; settings = {ATTRIBUTES = (Project, ); }; }; E2DF8E621CBBBD441DE3FDF670B7AAC2 /* AREngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 24A40AF418C2457D3920E3BF8F07B147 /* AREngine.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -1550,30 +1559,28 @@ E35B0A7D23FC7611AAEEED1AF19073BE /* NstInpPachinko.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C05E3B2663EB9FC3F88BC0AF00C603AC /* NstInpPachinko.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E3760F1B277D93ADB9423C1C79590845 /* GBACart.h in Headers */ = {isa = PBXBuildFile; fileRef = A3CA2C169265FC922C39733E381863E7 /* GBACart.h */; settings = {ATTRIBUTES = (Project, ); }; }; E393EE012D54F6BB208480E720AE5752 /* GBCDeltaCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A823D93C54BF9183AB990B267E0FBF5 /* GBCDeltaCore-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E3C4CC0E44B8054138477E9731B4E454 /* ContactsRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77CE0C99378A2FDADC3F70471D336C79 /* ContactsRoutes.swift */; }; E46D10AADB66A01A9490A813CA496DCE /* NstBoardBmcResetBased4in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 95C3DB2A71F9C27A5D2A146D6247E970 /* NstBoardBmcResetBased4in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E4DDDC9AA87E73A87D4CE9BA2C134C83 /* glsl_ShaderStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E986068DD96944D1D5B4F242C7C4976 /* glsl_ShaderStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; E512749AF7921ECA10C99B7DDADA916F /* NstBoardSxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D0643302DC4E42474BC7E1B5E9903519 /* NstBoardSxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E51F53BC83CFB30E9D2EBCC835E51664 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = BD7F218037A6C72ADDD5F262DAFE2D1C /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E528FB14C4DCC572CD62DD6620EE4909 /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47AC7C6297BC82A3BCC719AAEDC64AC4 /* Service.swift */; }; + E55D73A38F29C42EBE224E4FCB095BAB /* RSTSearchController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1EB2114C929E81D171083B106C71103 /* RSTSearchController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E5689255A851EDFA47C15C92E4345B87 /* GLideNUI.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E3627E2B352D880C38B219494E20A52 /* GLideNUI.h */; settings = {ATTRIBUTES = (Project, ); }; }; E58DFAAF1B5040476D55ECAF0681AE68 /* Debugger.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C536521365129A5FF9AE40DDF753F8 /* Debugger.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E5C4509F78A9B4CB99020BCBB544168F /* DropboxTeamClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8364432B8E72D0344D921A2164F73693 /* DropboxTeamClient.swift */; }; E5CE54C441C27992BB36CBA9A435245E /* KeyboardGameController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C31AFF7B6567C46BCD1D5FF5A40AFEFD /* KeyboardGameController.swift */; }; E5FE23BFAE5594C754E691A930CDBA3F /* pnglibconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 12046753C25C05BEB8D3B91D9C84AFE9 /* pnglibconf.h */; settings = {ATTRIBUTES = (Project, ); }; }; E6148113FE8DA95CAA89BC0344F2CCCA /* ft2build.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E088DA0C031536321CA95D00470F534 /* ft2build.h */; settings = {ATTRIBUTES = (Project, ); }; }; E64D998EAED81F2EA7850A2CDF71929A /* Thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 96DDCB6416566CEEB9D8CE0B491F6242 /* Thread.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - E6529D9E72DE5E7B788DDC6C3E148468 /* UIKit+ActivityIndicating.m in Sources */ = {isa = PBXBuildFile; fileRef = 684E9E69891E8CAEBF1DC5CFDC48856E /* UIKit+ActivityIndicating.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E652DC0B868871BEFB7C2B9ABE95A303 /* F3DPD.h in Headers */ = {isa = PBXBuildFile; fileRef = F0D3C6982EBE0EAC53FAA7E37AFA9496 /* F3DPD.h */; settings = {ATTRIBUTES = (Project, ); }; }; E66700479EBBBA79432AE1635603F5BB /* Socket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3720B67C88F2DE8BCAE0EDD0D02B5F98 /* Socket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E699C3C45914E11FE8A12647B4835CD7 /* saves.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF34391A06AF7754A090E44B9245C06 /* saves.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6C3A0FCAFD428E5CFAA722D3F6190DE /* Sharing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E38834C7999CFB2670ABDAE5FC71FEB /* Sharing.swift */; }; - E705953BCBCD13E17C23B588C4FD0457 /* FilesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2799783940A21EC2EE44D1A48F5758 /* FilesRoutes.swift */; }; E73A1CF4FDEAF251CF9E242867E9E0FB /* state_osd_elements.h in Headers */ = {isa = PBXBuildFile; fileRef = A56369DCFB6DD06F4761C0C4900B2401 /* state_osd_elements.h */; settings = {ATTRIBUTES = (Project, ); }; }; E73B665DFEE5B1EF941B915C2DB4D1EA /* savestate.h in Headers */ = {isa = PBXBuildFile; fileRef = 07352595BD173B37D1FBCAC265DC1C57 /* savestate.h */; settings = {ATTRIBUTES = (Project, ); }; }; E75071EFE211B5377D34AB8A5893DCD7 /* NstCartridge.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 51AE0D8A1BA524D7E3E2B194F7CE4A37 /* NstCartridge.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - E75F2EA53D0EE6628D5361A907AE8CEA /* UIAlertAction+Actions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F8715F2E1CC86C7F667183E1D9CD888 /* UIAlertAction+Actions.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E76913D63F4D790D0D10268C80819BC9 /* NstBoardBtlSmb3.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 58E06EE5B6AC0AC69AFF39EDEB578E6E /* NstBoardBtlSmb3.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E78529FBA5C035888371AE6EE12276A8 /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4E004174F5A12104EA6702A90AC6D9 /* Helpers.swift */; }; - E7BADFB958A5706854C044DDFEE718DD /* RSTOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = F84B5FC88D5A5A682A7E079337CD3D1C /* RSTOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + E78D3ACFC1253DF24B5702A3D50C4E41 /* RSTBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 76ACCEF09480010D5EA9E6D031D289AC /* RSTBlockOperation.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E7BCAC0500BE757622825AA6A1F1847E /* glsl_CombinerInputs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FD26BD355F8C9C43A997914155B54C75 /* glsl_CombinerInputs.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E7C1499B0AFBC0441A2B0ED73A34C0A8 /* FrameBufferInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DBD80F21182531F3EA2504E53691367A /* FrameBufferInfo.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; E7D144D1339094055223E19D6C763EDD /* ftchapters.h in Headers */ = {isa = PBXBuildFile; fileRef = 9378D679A1407D0B1973322B7BC01CC6 /* ftchapters.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1588,6 +1595,7 @@ E8DB7B8318240691B8B8D6A531BE337E /* ftimage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DD7EE7BA4F30F6178A84660D851DE0B /* ftimage.h */; settings = {ATTRIBUTES = (Project, ); }; }; E91BE4D2EB8ED606C86AEF158A993193 /* NstBoardOpenCorp.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6B0ACCB9EC30550BEF619382B31BE43A /* NstBoardOpenCorp.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; E94A17C6748D49F29FAE74AFCAEA9C04 /* TextureFilters_2xsai.h in Headers */ = {isa = PBXBuildFile; fileRef = 91E7D2C0AB72AAC3471B7798B8B29960 /* TextureFilters_2xsai.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E99470F1613DBFE36A70FF06ECCC48FC /* StoneValidators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E4A59F776B62FE5D7D647BF19F07F8E /* StoneValidators.swift */; }; E9A4231EDE43DDF753AA878AFE8078EB /* complex.h in Headers */ = {isa = PBXBuildFile; fileRef = AFF85B9517592B8C0C0F604D1FB43836 /* complex.h */; settings = {ATTRIBUTES = (Project, ); }; }; E9CCE8E9707ED47A7E769075CBC872E1 /* DepthBufferRender.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFF7521BE73EED39D6F3DAC41584A38 /* DepthBufferRender.h */; settings = {ATTRIBUTES = (Project, ); }; }; E9D90305973DEDEC0F4BFB33B4281876 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 285001A3E16D55354667EDFD2BF69729 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1611,44 +1619,38 @@ EBF38391124E22A0D7ACD21F42B16DC0 /* ftdebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C045A31E9EBE0F4CFBE198690BA4782 /* ftdebug.h */; settings = {ATTRIBUTES = (Project, ); }; }; EC0E44AC75CBA610CFBDB23601E6772B /* NstBoardSachenStreetHeroes.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8E52E44669D74069EC4BCEB20D5BBB02 /* NstBoardSachenStreetHeroes.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; EC22AD88F08651F1E9F9D07F1C6CDEE0 /* display.h in Headers */ = {isa = PBXBuildFile; fileRef = BF9EB574A8B1D8BC0B0BEDF16D62D5E3 /* display.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC28DAD95829E5C9E6307A77F8F517FF /* NSLayoutConstraint+Edges.h in Headers */ = {isa = PBXBuildFile; fileRef = CC70680EAE5C40484D98F7B84A2B1CAE /* NSLayoutConstraint+Edges.h */; settings = {ATTRIBUTES = (Project, ); }; }; EC4892F521D296F8A687A076AA68F1AB /* VideoFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4947A8614B4C6559E330C41CE046A147 /* VideoFormat.swift */; }; + EC75774A28055BA6E5BE9E1DC2B7765B /* MergePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1D380C96DB2A663DA8A6D54F345588D /* MergePolicy.swift */; }; EC7A8BB508620BA20B97407B7A4E3DA5 /* ftmoderr.h in Headers */ = {isa = PBXBuildFile; fileRef = B1A991CECAB9DD46D6515EF84919F6D0 /* ftmoderr.h */; settings = {ATTRIBUTES = (Project, ); }; }; ECAB49B60B49C63B1566F162F02177CA /* NstApiInput.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6C13FD7FA77A5769F400B5BF15BC2F34 /* NstApiInput.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; ECCC47B233216A74153F147DE44615C7 /* NstBoardRexSoftSl1632.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AA9FA4481CDEC88D482598485C447447 /* NstBoardRexSoftSl1632.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; ECD62CC37167C9C1675F6D68D64E05C6 /* debug.h in Headers */ = {isa = PBXBuildFile; fileRef = ED9FC408E7E37A99A42E690455015732 /* debug.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECE457DD05BEBE57CFEB9DD0D6A9B21D /* FilePropertiesRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40E721AC96D7B1BD5F1609F94C46FB1 /* FilePropertiesRoutes.swift */; }; ED000A6A2C0F27F589D2F9F3F0454387 /* rtc.h in Headers */ = {isa = PBXBuildFile; fileRef = B97CBE1F36B669152AE6F475CCEB508D /* rtc.h */; settings = {ATTRIBUTES = (Project, ); }; }; ED1EED4992202FB7CF07EFE464320E04 /* NstBoardAe.hpp in Headers */ = {isa = PBXBuildFile; fileRef = A5F66A556F030CD38AA0B3F7B66C5FE1 /* NstBoardAe.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + ED4EF531ACDF0F8222BAA4F6B6B69808 /* NSManagedObjectContext+Harmony.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5967846BA7AC45E23C7E6339832E7D07 /* NSManagedObjectContext+Harmony.swift */; }; ED60DEB3E6681250967195F1EE82081D /* NstBoardFb.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 24BD46060B81FB987DC76C420D9D0434 /* NstBoardFb.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; ED62B5E63342691AD8CA0BE9B1BF09B0 /* RenderWindow.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AE0F7B08A9D4CA4E032A55F5910B7FC4 /* RenderWindow.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; ED64EA01B94466DB3C85EB1F9717AD13 /* F3DEX2ACCLAIM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 81D97BEB994C55C6EFABAC633B5D0966 /* F3DEX2ACCLAIM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EDC281DAD5A8204DB2E18A3FB2B5D725 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4871776B4C704E222EB93D062575DC5A /* Base.swift */; }; - EDEA3AD87DDC71ECD0952ABD1368A95D /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA61FA6FDF258367C544BA1A701348F /* Service.swift */; }; EE2019BF5CB64FFF4F1A0E423383637C /* GTMSessionUploadFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = C538C31B2DE4BC6BA5C964106E5E3F6B /* GTMSessionUploadFetcher.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EE3023766DCA56C999E1855124ED9B49 /* GBAcpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 1575109B49D2770633104AF8986A3F36 /* GBAcpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; EE4994A811223017B6C5EE3AC8A4FDAF /* GTMSessionFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = 39319E8C5681BB472007926F7AAC4580 /* GTMSessionFetcherService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - EE4B56A8FD2098F2F49C84B564BDD404 /* PrepareUploadingRecordsOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7959936C4C72BFF6C57D269BD58A6A92 /* PrepareUploadingRecordsOperation.swift */; }; EE6944AB9BC075F13C9B3948E6280260 /* String.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E9620B66C79B5072CD182C1D80819C8 /* String.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EEB84D1AB735724A00357534155CBAD1 /* EmulatorBridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = A22889DC853EDD8E7FCC52CA013A82BB /* EmulatorBridging.swift */; }; EEBFD3F505227D78487CA20BB4B173BE /* dcheck.h in Headers */ = {isa = PBXBuildFile; fileRef = CBE09CFE7E4A642AC1B56EC89FADDFFE /* dcheck.h */; settings = {ATTRIBUTES = (Project, ); }; }; EEEAE72A65DE128B59CA501731003600 /* crosshairs.h in Headers */ = {isa = PBXBuildFile; fileRef = 567D8A08CDBDC5DA06BFD1DC70DF4E1C /* crosshairs.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EEFFD918B4E699ED2974C0B2F35E9932 /* UICollectionViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = EE1AC475F3EBD28D40D55EE72FC5AB07 /* UICollectionViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EEFA3983E84E97779F33BC24886F0A13 /* DropboxClientsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4CE4627B8A26D8EBCF531C808BA677F /* DropboxClientsManager.swift */; }; EF1305999A84EDD9047C2F944DA378F6 /* re2.c in Sources */ = {isa = PBXBuildFile; fileRef = BF31C2CB59DFB2355DA7BB8112A5D5C0 /* re2.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; EF2338ACDBCE2D71362634EA72885198 /* GLideN64_mupenplus.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F557085D0365AECB4077B82DE76E12 /* GLideN64_mupenplus.h */; settings = {ATTRIBUTES = (Project, ); }; }; EF2A06A0AE3C020BCD08214345B501AF /* ftstdlib.h in Headers */ = {isa = PBXBuildFile; fileRef = 487DD8DC7317E0C36210DD3B701C4E0C /* ftstdlib.h */; settings = {ATTRIBUTES = (Project, ); }; }; EF51344AE5A0B6EAE5D8291C20453754 /* ftsystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBFA95BE33AC04B65DD7AF6C54B92DD /* ftsystem.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF5F3C860891664625225F32C4399ADF /* UIView+AnimatedHide.h in Headers */ = {isa = PBXBuildFile; fileRef = 250AF154A10D578764C0BBBB190A8554 /* UIView+AnimatedHide.h */; settings = {ATTRIBUTES = (Project, ); }; }; EFA0DC841E9880CDA5B1507E29E2E545 /* NstApiEmulator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5CC102BAEF4C8D771A86539CC220A5A5 /* NstApiEmulator.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; EFAE2C3B6A6696B52B10F87013319EE4 /* ARM.h in Headers */ = {isa = PBXBuildFile; fileRef = CBD7894C9422E5309EB6A4FE9A80D055 /* ARM.h */; settings = {ATTRIBUTES = (Project, ); }; }; EFBC931CE4E414BC640465C620C582F2 /* ContextImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B344A1563D4DD7818E0D6A1BC8076EE /* ContextImpl.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EFD770F15B52B41E2DBEEEECAD735D98 /* RSTBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = FB822E90029BFEA20B117487DC27A04D /* RSTBlockOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; F007EE3D67A49DC33FE2A74392FEEE44 /* NESDeltaCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D2A1CDF2D6BFF1EF9D9061C663EE16F9 /* NESDeltaCore-dummy.m */; }; F01AD38461447D0079DFD168C66DB6C6 /* AAFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 77AC9809E47F480ACB8F5F50E124AEC6 /* AAFilter.h */; settings = {ATTRIBUTES = (Project, ); }; }; F0233B5DE0C680AA1D6FEA80AA73EB85 /* svsfnt.h in Headers */ = {isa = PBXBuildFile; fileRef = 3139CDEFDF54874B3FE87D52FBEE63BB /* svsfnt.h */; settings = {ATTRIBUTES = (Project, ); }; }; F02E7E3A8386A951047E19069AB95354 /* ftbbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 85237BE80E426B918024FFAC9251A50C /* ftbbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; F03A441C530590BF7C1DF4B3D4BD675C /* NstApiRewinder.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9C6144633B0DE1C8B971A2728903B95 /* NstApiRewinder.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - F03CF428C71FCFA033C24776E54BA798 /* UIViewController+TransitionState.m in Sources */ = {isa = PBXBuildFile; fileRef = F74135D2566C066E0B9F4F851E06A12A /* UIViewController+TransitionState.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F05424247FEA20A37761755BB26A2D6E /* svkern.h in Headers */ = {isa = PBXBuildFile; fileRef = 4541F12B3B53C045767B87EFB73A1AF3 /* svkern.h */; settings = {ATTRIBUTES = (Project, ); }; }; F08BE54F91DAFF4A21D3CF9633125D9F /* TxTexCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 508153374379761825956DE2D625E976 /* TxTexCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; F08F5F4EDAD9842D1AB41C448FD7ED97 /* NstApiSound.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8D629AE3BF67DAB06622670203476B43 /* NstApiSound.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1658,6 +1660,7 @@ F1089B4808327FEC6230C3D66D26E64A /* NstBoardEvent.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 29AEB4740EA971386FE4B6750AA2EB59 /* NstBoardEvent.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F12B7D9CA9CB9FB6C292DAB35BC315E7 /* StandardGameControllerInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B0B083A9E33A408380E6933367C443E /* StandardGameControllerInput.swift */; }; F12C21D84E31915404415E94619EC735 /* BreakpointStructures.h in Headers */ = {isa = PBXBuildFile; fileRef = 512C4AAABBC20D346C24998DFEE5AFA1 /* BreakpointStructures.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F139182EE62EE3E68E4F5AAE0FA7F93E /* RSTLaunchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 45858FC63D79F8CB87FFC7F4E24B4A91 /* RSTLaunchViewController.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F14AF01CB61F64826FD3FD918991836A /* arithmetics.h in Headers */ = {isa = PBXBuildFile; fileRef = FA748DD06BB0F87B2D3FCBBCB21BB582 /* arithmetics.h */; settings = {ATTRIBUTES = (Project, ); }; }; F167CCE2838CD4DF3161F75877A2858C /* Value.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FC26E46646A054862FD9FA6A118709 /* Value.swift */; }; F1A9E20B5E2A3EDA6E681DE782F1334D /* ControllerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C5CBC5126812FD2065CDBAEA94BF976 /* ControllerView.swift */; }; @@ -1666,12 +1669,11 @@ F257B3855C80FC939C018B2D48CD4E75 /* GraphicBufferWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 535C2901C00E7283DD28013BBBC6CA4F /* GraphicBufferWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; F264D06A3A46BD2D13A1B902FF3D4B82 /* NstSoundPcm.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CB66A3376ED296C661FFEAA36063E7A5 /* NstSoundPcm.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F27A150577AFCBAD02400766373F8531 /* opengl_BufferManipulationObjectFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = AE3364FCB045C19E649AAFBEB1B1A950 /* opengl_BufferManipulationObjectFactory.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F28DDFAB4A2E61C4361B1F25F9FC031C /* RSTError.h in Headers */ = {isa = PBXBuildFile; fileRef = DB18069D26E35C1BEFE5C4A0262422E8 /* RSTError.h */; settings = {ATTRIBUTES = (Project, ); }; }; F297900BE7AA8C84345754611015F8D1 /* NstBoardBmcSuperHiK300in1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 9B772B195955E19223C5D696AF8E884E /* NstBoardBmcSuperHiK300in1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F298E311AEDA130784E1ED9899B35D3E /* GTLRErrorObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 68263C62DDF9F51529551BECBBD26620 /* GTLRErrorObject.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F2C3D5F056E937891CBDC532EAEE1987 /* NstBoardKonami.hpp in Headers */ = {isa = PBXBuildFile; fileRef = D5FBF61FEAA24AC5DFA51366F3A14D23 /* NstBoardKonami.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F33414938A92A2BDBBF6AEF202CC0166 /* GraphicBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 877821421C3883E9EC8A19BABE97DA2D /* GraphicBuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F33586928CCCB162321E60496A3DCA3B /* NSUserDefaults+DynamicProperties.m in Sources */ = {isa = PBXBuildFile; fileRef = E45EB56BC48BE16046055CF4A8D52558 /* NSUserDefaults+DynamicProperties.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + F354C34F64DE11D3A33811C2670FC30A /* DropboxService+Versions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4FA4F1DB645204506499791AADA8F23 /* DropboxService+Versions.swift */; }; F35E35BAE2395E393B54B5F41F61F31E /* ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5414A0A2C2B0F58D727F258C7536FAEC /* ringbuffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; F37C13D42474C3BADCAFF47A5F41F812 /* dd_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = FA40AAF8BCF7B04694A0037FB3760458 /* dd_controller.h */; settings = {ATTRIBUTES = (Project, ); }; }; F3A563FCA1E0F42C68F9241CD37D6AFD /* F3DFLX2.h in Headers */ = {isa = PBXBuildFile; fileRef = EC9634B3B11790E21D1DD4B3D06D4A1A /* F3DFLX2.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1681,7 +1683,7 @@ F406446D12685CEBCBEF3EAAE3043BD8 /* F3DBETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 398B0C10962B06603D1218A0BFEFDE41 /* F3DBETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; F473DE6E2DF0BA57A56F780ACA3D9E94 /* NstBoardNamcot175.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 4777A754C8B992D16F19E6669E3983F8 /* NstBoardNamcot175.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F47DE4860ED00EA4CDC661D662F1681B /* SMCalloutView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F77D5D789D6454A73C3D19E2727B786 /* SMCalloutView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F4808FD70D3BA8559604594D5674A324 /* ManagedRecord+Uploading.swift in Sources */ = {isa = PBXBuildFile; fileRef = E04D3872EDD7D06663BEBFB1BB899C3E /* ManagedRecord+Uploading.swift */; }; + F4AECD4701D7EA46CAAD52CD32F608AA /* SyncProgress.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB465A950FD11985B4BFE9FE07618EB1 /* SyncProgress.swift */; }; F4EF7512EED07AE5D1BAD5341F1F119B /* Lock.hpp in Headers */ = {isa = PBXBuildFile; fileRef = DE3C56A00DE19DC466C925A15112774C /* Lock.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F54B67349E466DAAE2CF0795F99BDB61 /* S2DEX2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 915FAE52C5A766087CB6E4CB6D7ABE8D /* S2DEX2.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F54EE04CAD7C3199596833B62C4C5955 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DD00852D37B01767D028ED9AA2DDAD /* UIImageView+HighlightedWebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; @@ -1693,31 +1695,32 @@ F5D9DCDC448615EEC0C90DAF2C5C7E76 /* ZIPFoundation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C79D85ABB10589F765DD64715EEEAD3 /* ZIPFoundation-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; F5EB7545B62578D96DD78196C4A4261D /* mc.h in Headers */ = {isa = PBXBuildFile; fileRef = D9223E826A52C67763ED0B1CB113EDBC /* mc.h */; settings = {ATTRIBUTES = (Project, ); }; }; F6022F4248018E1F466DE6310CC41E2C /* NstBoardBtl6035052.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 8854FB70C2F1990688897351E465107C /* NstBoardBtl6035052.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; + F69A6A20947A7C23CF812863BFF4483F /* SwiftyDropbox.h in Headers */ = {isa = PBXBuildFile; fileRef = E248CA8F99CCB2FEEDCE6967354F7FB4 /* SwiftyDropbox.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F6D17386A138C8E136608ABA404D78B5 /* UISpringTimingParameters+Conveniences.h in Headers */ = {isa = PBXBuildFile; fileRef = C3BEC3A5E5A6DF3FF717E11AF5286D93 /* UISpringTimingParameters+Conveniences.h */; settings = {ATTRIBUTES = (Project, ); }; }; F6F78EEB967196912D362AF067BAD829 /* TextureFilters_hq4x.h in Headers */ = {isa = PBXBuildFile; fileRef = 009F86808D0C8EA68A833D33755CD232 /* TextureFilters_hq4x.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F73B09692A1D8FBD4A33D1322CB8C4F8 /* UITableViewCell+CellContent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4455D697CDC2A6441EDD561195EFE9DB /* UITableViewCell+CellContent.h */; settings = {ATTRIBUTES = (Project, ); }; }; F74CF719E0F6180E4E173648469B6C63 /* F3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BE4827A1488FD5FE6F356A0EE7D96A3 /* F3D.h */; settings = {ATTRIBUTES = (Project, ); }; }; F7594B37B464285DF07D893F8BB3F61C /* NstApu.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F1A146BC0741538EE96C0E759582B337 /* NstApu.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F78014F7507926EF6233B8D9C37FDCF7 /* GPU3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B8F6D0F53FB1FDC036DDE39C228B2207 /* GPU3D.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - F7AF82D1660F78BE791EF27F2F3D2938 /* PaperRoutes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D72BB4EABA02D0C40C9847B11342161 /* PaperRoutes.swift */; }; F7DFC08D8BF3B75E5D6DDE750D641962 /* resampler.h in Headers */ = {isa = PBXBuildFile; fileRef = AA6969D1558B782C4F58F0AB947B3E22 /* resampler.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F7E4CDC320BFB392C99BB93F4638AC44 /* RecordOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72C17BA9F1E13F3AB49E67F7E335B1F6 /* RecordOperation.swift */; }; F7F6A01D7934B9EB482F435F0DC55B16 /* plugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AB7E24DF9D482B653684A4CB3373DAE /* plugin.h */; settings = {ATTRIBUTES = (Project, ); }; }; F8A64A92EC039B20A16655B109BBF437 /* ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6888D502C932A8931592CA8315E0F44 /* ControllerSkin.swift */; }; F8B9B69D4EE4EB38FF98385CD92BD358 /* Music.hpp in Headers */ = {isa = PBXBuildFile; fileRef = C8B01F60E394BFF06046341D779E4CB4 /* Music.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; F90D2D532045BC492EC7DAD939281E55 /* SDL_opengl.h in Headers */ = {isa = PBXBuildFile; fileRef = E8274D72B068FDD5B8433E16806FBEB8 /* SDL_opengl.h */; settings = {ATTRIBUTES = (Project, ); }; }; F93AFA5631800C81D28898AD46D0B83A /* opengl_GLInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 86EF6CED706D9CF50812AACFBA3D3205 /* opengl_GLInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F984AA7029A105CBC169C0E24725E036 /* RSTConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 609716320CE93EE5720BD73EE4666B18 /* RSTConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F957B27022E81B27F462DA16F811EC71 /* RSTHasher.h in Headers */ = {isa = PBXBuildFile; fileRef = BF8EBB70E09CAD5AD9E5BB36757BDD4E /* RSTHasher.h */; settings = {ATTRIBUTES = (Project, ); }; }; F98A8297B3F9AE509468A91CFA926DED /* ftlzw.h in Headers */ = {isa = PBXBuildFile; fileRef = 157434C4FA16895B0C6EBC0D02FAECF0 /* ftlzw.h */; settings = {ATTRIBUTES = (Project, ); }; }; F98FA998AC2986864A31A3383D9F6757 /* NLS.h in Headers */ = {isa = PBXBuildFile; fileRef = 8854B895A2B698DDB8BD5A2748BC1885 /* NLS.h */; settings = {ATTRIBUTES = (Project, ); }; }; F99240E705D674B72FB6B3DAD45349F4 /* alist_audio.c in Sources */ = {isa = PBXBuildFile; fileRef = 65A31956BBF79B889849828770076815 /* alist_audio.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; F9F08CA61836853CAE7455D76939D98B /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6A19232BD176F1842FA9413EF58EAFB /* ParameterEncoding.swift */; }; + FA25C7F087E121D908F0098AD1C50E04 /* RSTCellContentChangeOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 22F188C4FE40251B362A44718243733E /* RSTCellContentChangeOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; FA577995260851815A34580C95A493FE /* GTMMIMEDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 013B228892127D085A9A12736D33F540 /* GTMMIMEDocument.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FA71E7212A583BF178A9718178962E06 /* MelonDSDeltaCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FB5B955EED3BCE73AA95E7D1F60EF62 /* MelonDSDeltaCore.h */; settings = {ATTRIBUTES = (Project, ); }; }; FA9B5DF268C458C80AA79A7FBD2A08BD /* SDWebImageDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 930C6159C2738B8427010914FE6F8715 /* SDWebImageDecoder.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FAC36F11FCA18D96655C0EC43BA109EC /* UICollectionViewCell+Nibs.h in Headers */ = {isa = PBXBuildFile; fileRef = D190B41F4CB5ED20A79688D063A88168 /* UICollectionViewCell+Nibs.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FAAF41C09F80BDD60CCC848E2C6CADC8 /* NSLayoutConstraint+Edges.h in Headers */ = {isa = PBXBuildFile; fileRef = CC70680EAE5C40484D98F7B84A2B1CAE /* NSLayoutConstraint+Edges.h */; settings = {ATTRIBUTES = (Project, ); }; }; FAD04F8BFE956097606AAB6B00E030C9 /* rsp_core.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEBC190192DF7DAD9E802180C71E395 /* rsp_core.h */; settings = {ATTRIBUTES = (Project, ); }; }; FAEE64ADE6B20CAADC50E71E09808DD4 /* slot2.h in Headers */ = {isa = PBXBuildFile; fileRef = 2098169177E986CAD8BED07A181041DC /* slot2.h */; settings = {ATTRIBUTES = (Project, ); }; }; FB429DE7183465EA3908DC0EFC0E55B8 /* NstChips.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 1437D26717ED40A8C5CDAC510546F0AE /* NstChips.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FB431B0FE84CE918B28A6CEC02DF7FEA /* RSTActivityIndicating.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E88C1E79B3436FD1C098E8D3CA9C3B1 /* RSTActivityIndicating.h */; settings = {ATTRIBUTES = (Project, ); }; }; FB4A3706CC5E4A32ED7318A2C201B99B /* opengl_ColorBufferReaderWithBufferStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E2BB78721D4C6515E5DED30486B26C2 /* opengl_ColorBufferReaderWithBufferStorage.h */; settings = {ATTRIBUTES = (Project, ); }; }; FB4E28E4594BBA6CBDFD04FA27339139 /* ftsnames.h in Headers */ = {isa = PBXBuildFile; fileRef = 423425F5988743735EC12578B4A52F5F /* ftsnames.h */; settings = {ATTRIBUTES = (Project, ); }; }; FB53448735C698828655BAC4D9CD8EEB /* NstHook.hpp in Headers */ = {isa = PBXBuildFile; fileRef = CC3FC4F8CAD332D94FED0C7DA4BE5251 /* NstHook.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1727,25 +1730,25 @@ FBE89F87882A3EF8E629A5FF5CA465AD /* Vector3.inl in Headers */ = {isa = PBXBuildFile; fileRef = 1ECD6095FEBED6549E4EE623A0FC3431 /* Vector3.inl */; settings = {ATTRIBUTES = (Project, ); }; }; FBEC78AD8680AFF70333B8C35FC9B9E9 /* psaux.h in Headers */ = {isa = PBXBuildFile; fileRef = 89E570CBAF755D32B62B2B5506AE1CB8 /* psaux.h */; settings = {ATTRIBUTES = (Project, ); }; }; FC17266254EDD27F76B52F2DFAE02BEB /* NstBoardKonamiVrc1.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 36B43C04D7CC65CE9AD7C42E09A75A07 /* NstBoardKonamiVrc1.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FC4AFADABFECA8B929C84039869A806B /* NSLayoutConstraint+Edges.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B960281116744CE51DCCFCE5C6B616C /* NSLayoutConstraint+Edges.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FC7830E121F5F72FCCBB725FFB1955EF /* clamping.h in Headers */ = {isa = PBXBuildFile; fileRef = 508001DB6BE4336BE73C646FCBC54782 /* clamping.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FC88917194482589C32FDDE107659F9B /* DropboxClientsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4CE4627B8A26D8EBCF531C808BA677F /* DropboxClientsManager.swift */; }; FC88DE967A3DA743DC5161E747CDC20C /* GTLRService.m in Sources */ = {isa = PBXBuildFile; fileRef = D1221EDCBBEDA9035D0C95CAE7F9D52A /* GTLRService.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; + FCB691953BC5DC1F35952009697D608C /* DriveService+Records.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44004DB6135610C776BB7224A6E224E /* DriveService+Records.swift */; }; FCCF2FA5A8D8593F791CD74984F915F5 /* memmap.h in Headers */ = {isa = PBXBuildFile; fileRef = A72FCF0B1E569ACF2DA4B0AE86704717 /* memmap.h */; settings = {ATTRIBUTES = (Project, ); }; }; FCFB664196AEF0AB4F9D49044093DACA /* Text.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2E6160492F9D1405C748988282E22619 /* Text.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FCFB7628C2357AB914595C54A83E9372 /* opengl_Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F94CD2A593A3820ECA68A3AD91377F /* opengl_Utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; FD2F6B87B0C2E2B0F286279E623668D9 /* NstBoardJxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3479E4ABC7EA56616AD7804B53308F24 /* NstBoardJxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FD61ABDF9C0774877D3E211B444E4319 /* sdl2_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = F15930486D7F45DD18CFBA9BD8800E92 /* sdl2_compat.h */; settings = {ATTRIBUTES = (Project, ); }; }; FD6339A963EAC26477FD04D0BFAD9996 /* srtcemu.h in Headers */ = {isa = PBXBuildFile; fileRef = 20636B35E9114D9C339486FC80D17633 /* srtcemu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FD6E5C9332C4C504221B108F7EE6D94D /* RSTLoadOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 451CFB17CBEBD52220C6B8E9777016CB /* RSTLoadOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; FD9074443C03E8B90BBED9A42541D442 /* UdpSocket.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 50AE585204C42DE0E82204B2336C8C73 /* UdpSocket.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FDEE9F98E235CE8E3A2A29186FD3901A /* NstInpFamilyKeyboard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = EFB09061F5EC38F78019E5DE2971B3BB /* NstInpFamilyKeyboard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FDFC423A4243CFA179481946B523C999 /* Setter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6822483789D6B6BB133ABB5446BCFF2D /* Setter.swift */; }; + FE17A6AA3F789031EDF82A6D8102928F /* TeamPolicies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A4B7B6EB4DB8A673532771B4AA8B264 /* TeamPolicies.swift */; }; FE1FF7D0F5FA90A665A35F3CC8B9A109 /* resource.h in Headers */ = {isa = PBXBuildFile; fileRef = C7042544A83B2C65E8D67FFD6DBACCD4 /* resource.h */; settings = {ATTRIBUTES = (Project, ); }; }; FE333082650A337F417E1CF08EF9503A /* Pods-Delta-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 37221D699E77B16EA4FE6C376B827730 /* Pods-Delta-umbrella.h */; settings = {ATTRIBUTES = (Project, ); }; }; FE4C20E7F64FF4F1770496AF1776A9D3 /* ftoutln.h in Headers */ = {isa = PBXBuildFile; fileRef = 424AB45294CF56320B355DCE7A0F8E81 /* ftoutln.h */; settings = {ATTRIBUTES = (Project, ); }; }; FE66ACE5CA4F217211189D67E353E0E3 /* Err.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 3AB1EF926C51DFF7D92DC2A88CBEF231 /* Err.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FE94B7CC01A829EE981DA802A9137E23 /* TexrectDrawer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8958320DAE6D887ED9E5A519C025718B /* TexrectDrawer.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FEA640DE0115214A9C6F9F674F56194E /* RemoteRecord+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = D347B9730DA2524DAF8E0C7AEDC8EEEA /* RemoteRecord+File.swift */; }; FED373516448B1419731F783A3F890E8 /* ARM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 19481227163F7CACC6C2B1E0A8B6A008 /* ARM.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FED42AEDD26B19BB49DD15B37B502C26 /* gSP.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0EA337C872D00B3A247FF40858C6BF1F /* gSP.cpp */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FF0759DD9EB949FE677055277F11202C /* F5Indi_Naboo.h in Headers */ = {isa = PBXBuildFile; fileRef = DF93E143D1E16A5D0994F45965CDDB74 /* F5Indi_Naboo.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -1754,13 +1757,11 @@ FF47124336E697A518CE2C93B8E88C2C /* GTMGatherInputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = E0987B780D382225AE82D80ECA8C0641 /* GTMGatherInputStream.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FF52A333ED5E1B6EBA938D3B010BCB0B /* UIScreen+ControllerSkin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32999EF608D52E8EBF47AEF2D05024FB /* UIScreen+ControllerSkin.swift */; }; FF60E30A8C317F1FB539F1A815BBF38F /* NstBoardBmcGamestarB.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 47FFA445106E8AEF055315EC32F6416C /* NstBoardBmcGamestarB.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; - FF64C067DBF8F76E97824763C8259B99 /* RSTCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D324452F2442968D429ED7A0718561D /* RSTCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; FF7EF92A4AB21183D04B1959C2969012 /* N64.h in Headers */ = {isa = PBXBuildFile; fileRef = AB7ED6F2E514469E5640A93ED3622401 /* N64.h */; settings = {ATTRIBUTES = (Project, ); }; }; FF971B9F9F993B9F74611546EF606135 /* NstBoardBxRom.hpp in Headers */ = {isa = PBXBuildFile; fileRef = E6E22BF5B1C689D0C6A59216C3AF5E74 /* NstBoardBxRom.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FFA9968DD49CF535DFA48AC9E948F1AE /* NstBoard.hpp in Headers */ = {isa = PBXBuildFile; fileRef = AE6A38985CB70BB9472E2EB009DD360E /* NstBoard.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FFB1135FEFD4153A7DB3BC2BDD598710 /* String.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 52AFA2BBC1A97735195FCE0F072444DD /* String.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; FFB60CE26BC4B7CC1FB0A8E9DA386F70 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 85CA254539B604E12B65C0315AD84D21 /* UIImageView+WebCache.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - FFC60D90E8A926004701D722087AB6F1 /* RSTSeparatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 932ED892F2C78B795C9514E800D066F3 /* RSTSeparatorView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; FFE3DB6ABAAAF0F990D802469CE319C5 /* GoogleToolboxForMac-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E60A18A1E9B1D77A5D5CAA1444A18D /* GoogleToolboxForMac-dummy.m */; }; /* End PBXBuildFile section */ @@ -1772,6 +1773,13 @@ remoteGlobalIDString = D676E21115185671D7258A56944ABE98; remoteInfo = GTMSessionFetcher; }; + 122E6311F0D45EFBCFE8324439BB39D8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D7958E869B6C0073DB3025514393D7A3; + remoteInfo = GoogleAPIClientForREST; + }; 15E4ADDCC69DB2AEB2E21EC85874D1C6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1793,13 +1801,6 @@ remoteGlobalIDString = D7958E869B6C0073DB3025514393D7A3; remoteInfo = GoogleAPIClientForREST; }; - 298D76CD321EB0D6C48A27C84D848723 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D7958E869B6C0073DB3025514393D7A3; - remoteInfo = GoogleAPIClientForREST; - }; 2B99EACE928A9F500BF9C764B2238EB4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1807,6 +1808,13 @@ remoteGlobalIDString = 530F469AED058B94728C278CCA514500; remoteInfo = DeltaCore; }; + 326D6147512B1337A0F318BB03297717 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = FF39B7A1D9F00620D9F56635ABBB2C03; + remoteInfo = SwiftyDropbox; + }; 3CD814616B670B8CE5088FBD7C0E1762 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1863,6 +1871,13 @@ remoteGlobalIDString = 5B32FEE5AD13CB944235C9158BECB929; remoteInfo = "MelonDSDeltaCore-melonDS"; }; + 711CCC74CFB491FB3123FBD88CF5D4E8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; + remoteInfo = GoogleSignIn; + }; 72992287F7446AB7BE779D00335800FE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1870,13 +1885,6 @@ remoteGlobalIDString = 141E2D29C29A1BC1ABA3483321DF3C88; remoteInfo = SNESDeltaCore; }; - 7BFA61EA67CFFA199F2E37A65BA0FFFD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CAD3534FC55B0333104E5117C0A9A324; - remoteInfo = GoogleSignIn; - }; 7E6CB180472EA40C403421180C2A18B7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1933,6 +1941,13 @@ remoteGlobalIDString = 0FAC8C4777DBD31221FE57848CB5F759; remoteInfo = NESDeltaCore; }; + 9883B1722550548197F9C45B34F06A18 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; + }; 9B7CE23FABAB20B2C7AF16AB48B1E85A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -1954,6 +1969,13 @@ remoteGlobalIDString = 890229DC8DCC9C43917568A0C4502FCA; remoteInfo = "GBADeltaCore-GBADeltaCore"; }; + AE6868B1BCE00BA52EBC8E617D45B775 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B5D1BA64AC676FF46408FCDE19A05767; + remoteInfo = Roxas; + }; AFA5F041EC98759BCF2991209AA8B647 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -2017,20 +2039,6 @@ remoteGlobalIDString = 7F839870ECBE0065B4BCC02E5F98F48A; remoteInfo = "NESDeltaCore-NESDeltaCore"; }; - C8E5EBBA48A65677D814EA8555DD214D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = FF39B7A1D9F00620D9F56635ABBB2C03; - remoteInfo = SwiftyDropbox; - }; - CD579FC09454B036337FF5A32B4DBB2E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; - }; D465047540D12FD9D95291AE82A76DB9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -2080,13 +2088,6 @@ remoteGlobalIDString = FF39B7A1D9F00620D9F56635ABBB2C03; remoteInfo = SwiftyDropbox; }; - FC9F6032803826BC09AF6A35BD043AF6 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B5D1BA64AC676FF46408FCDE19A05767; - remoteInfo = Roxas; - }; FE3183C8BBCDB1BDB2299370415670AE /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; @@ -2138,9 +2139,11 @@ 040EDE19207F90BFBF015280544EC415 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/UIImage+MultiFormat.m"; sourceTree = ""; }; 04129B9A3BF487A2771D1CC76731FB37 /* NstVideoFilterNtsc.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilterNtsc.hpp; sourceTree = ""; }; 04131E906A312EC3EC8E75626EEA8233 /* NstBoardCneShlz.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCneShlz.hpp; sourceTree = ""; }; + 0419ACD1F07D5887DBDF37B3A5C7BFFD /* DeleteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordsOperation.swift; sourceTree = ""; }; 04884C74271D3DFEF181C2C3A302F1EA /* NstBoardBandaiDatach.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBandaiDatach.hpp; sourceTree = ""; }; 04CE2E235B10188704B563E18E7D532A /* GBCEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCEmulatorBridge.h; sourceTree = ""; }; 051DD45485937EBA4AEB4D55FB230DCB /* RSTPersistentContainer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTPersistentContainer.m; path = Roxas/RSTPersistentContainer.m; sourceTree = ""; }; + 052A3E699D4705B394163442DB2312EA /* AnyKeyPath+StringValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "AnyKeyPath+StringValue.swift"; sourceTree = ""; }; 0556A2BF839B0F53563F8D71873A9029 /* Config.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Config.hpp; sourceTree = ""; }; 056855D6563613F5941E73E167520BEE /* NstBoardBtlTobidaseDaisakusen.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlTobidaseDaisakusen.hpp; sourceTree = ""; }; 05767382F7FDD0945BB7F7F65461307C /* ZlutTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZlutTexture.cpp; sourceTree = ""; }; @@ -2162,13 +2165,13 @@ 07CA97CCF4C09704E6DE0E7275915BD2 /* ThreadImpl.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadImpl.cpp; sourceTree = ""; }; 07D0EF9DC873BCE8C132664936AA4D2C /* ColorBufferToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferToRDRAM.h; sourceTree = ""; }; 07E188F1C0F1D9982F9D7E2B4BF63A77 /* SoundFileWriter.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileWriter.hpp; sourceTree = ""; }; + 07E1A6F9BADA368445D9DBE731C26499 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; }; 086BC7A1837005C56E8908CBF2465274 /* SoundTouch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundTouch.h; sourceTree = ""; }; 0893F87C0C44883CFA0FF8BD37E0CB50 /* GBAGfx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAGfx.h; sourceTree = ""; }; 089558003E4B67B701B403001320A7EC /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; 08EEF87CE7D5964AB34DCF33763BB099 /* AutoBuild.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AutoBuild.h; sourceTree = ""; }; 092C6EE9873F269B8DF55D311028DF6F /* F5Rogue.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F5Rogue.cpp; sourceTree = ""; }; 0971A5E1176766915B5C63ECBAF0E9A1 /* NstBoardUnlSuperFighter3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlSuperFighter3.hpp; sourceTree = ""; }; - 099938FEDA9E30DB8F316FD35D3A7E39 /* Account.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; 0A01EE3AE9A9EC3F97E1D65778521BE4 /* glsl_Utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_Utils.h; sourceTree = ""; }; 0A0BDC53FD9A10612B34F36860479885 /* UIViewController+TransitionState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIViewController+TransitionState.h"; path = "Roxas/UIViewController+TransitionState.h"; sourceTree = ""; }; 0A35B20685D6B2F22C568D23E73C3E50 /* opengl_Parameters.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Parameters.cpp; sourceTree = ""; }; @@ -2180,7 +2183,6 @@ 0A854F4317FA28AEE4189EE7FF42C9E3 /* NDS.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NDS.cpp; sourceTree = ""; }; 0ABB33F6C316C0D9CF3E24882D926C51 /* GTLRFramework.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRFramework.h; path = Source/Utilities/GTLRFramework.h; sourceTree = ""; }; 0B0AD671A8AD882845CE216B6821E50B /* opengl_ColorBufferReaderWithEGLImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithEGLImage.h; sourceTree = ""; }; - 0B25891B457EEC5EC2A639DA8DAE0EBE /* Harmony.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Harmony.xcconfig; sourceTree = ""; }; 0B34BDCE67F7297CE2E1F3FBE65E622C /* NstBoardSuperGameBoogerman.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGameBoogerman.hpp; sourceTree = ""; }; 0B399358B256320203E685F8FC809959 /* recomp_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = recomp_types.h; sourceTree = ""; }; 0B960281116744CE51DCCFCE5C6B616C /* NSLayoutConstraint+Edges.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+Edges.m"; path = "Roxas/NSLayoutConstraint+Edges.m"; sourceTree = ""; }; @@ -2206,7 +2208,6 @@ 0E2C78A8799FD3F430CD405874430028 /* AuthRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/AuthRoutes.swift; sourceTree = ""; }; 0E38834C7999CFB2670ABDAE5FC71FEB /* Sharing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sharing.swift; path = Source/SwiftyDropbox/Shared/Generated/Sharing.swift; sourceTree = ""; }; 0E49EBED49055AAF839B8A99FC0D76C9 /* gfx3d.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gfx3d.h; sourceTree = ""; }; - 0E4DCE2A6F12D890D38A83939413D307 /* DriveService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Records.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Records.swift"; sourceTree = ""; }; 0E4E5A811FD38FBBF35D0F783DD6B5D9 /* NstBoardBmcGoldenGame260in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGoldenGame260in1.hpp; sourceTree = ""; }; 0E8746F05B78C10D0D9D8098224A1D60 /* Glsl.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Glsl.inl; sourceTree = ""; }; 0EA337C872D00B3A247FF40858C6BF1F /* gSP.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = gSP.cpp; sourceTree = ""; }; @@ -2216,11 +2217,9 @@ 0F261E13B1AC030CBAE70448ABC2DD8F /* svmm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svmm.h; sourceTree = ""; }; 0F279CB05ABD733ECA41FFA2F19A00B6 /* wst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = wst.h; sourceTree = ""; }; 0F3622A7449225751220AF6FE10DD230 /* ftincrem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftincrem.h; sourceTree = ""; }; - 0F82BADF1B128B29E800481350228566 /* Syncable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Syncable.swift; sourceTree = ""; }; 0FC5602035B9E19D656976E460F7F90A /* TextureFilterHandler.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilterHandler.cpp; sourceTree = ""; }; 1004AE0C4739724244ADA46A913108CB /* Glsl.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Glsl.hpp; sourceTree = ""; }; 101B4E4EEFA447219922363435CA78CF /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; - 103B62F4A02A6FB81B5873123E3E4EAE /* JSONDecoder+ManagedObjectContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoder+ManagedObjectContext.swift"; sourceTree = ""; }; 104AE23A6B9AE10B8672C3AC578993CA /* m64p_frontend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_frontend.h; sourceTree = ""; }; 108D3937640AD5EF672C23E5C9F1D052 /* Context.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Context.hpp; sourceTree = ""; }; 10A0472CDCFE1CC45A359E5838CAB872 /* NstBoardMmc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc4.hpp; sourceTree = ""; }; @@ -2244,7 +2243,6 @@ 13B3F0409CEA697951ADECD54AABFC17 /* RSTError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTError.m; path = Roxas/RSTError.m; sourceTree = ""; }; 13B7FFD0C9DAEC7BACA3614D558B1227 /* NstBoardMmc2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc2.hpp; sourceTree = ""; }; 13D3D42973146D80916E32B3BBE3D0A1 /* ExtensibleEnums.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExtensibleEnums.swift; sourceTree = ""; }; - 13E354663056D2C09F9EBDE7F3F20EF4 /* PropertyGroup+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "PropertyGroup+Harmony.swift"; sourceTree = ""; }; 14057D1AEA66E65BED2117946518BB10 /* Common.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Common.swift; path = Source/SwiftyDropbox/Shared/Generated/Common.swift; sourceTree = ""; }; 1406F5851ECA113961E420930E44400E /* ftpic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftpic.h; sourceTree = ""; }; 142265A2DED24A866633D72B79145B0B /* UICollectionViewCell+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewCell+CellContent.m"; path = "Roxas/UICollectionViewCell+CellContent.m"; sourceTree = ""; }; @@ -2314,8 +2312,10 @@ 1D545FA281C697B8D7BEEC43C6652189 /* UIImage+Manipulation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Manipulation.h"; path = "Roxas/UIImage+Manipulation.h"; sourceTree = ""; }; 1D7AF9FE08D2F6576462E7ECCC9C6E89 /* svbdf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svbdf.h; sourceTree = ""; }; 1D8AA62CF8EE1D7BD51C30F2874CC2D2 /* NstBoardBmcA65as.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcA65as.hpp; sourceTree = ""; }; + 1DD25012950497FA0453E5082F7EA9E1 /* ServiceOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ServiceOperation.swift; sourceTree = ""; }; 1DF37E36CD72A2D07A3FCAD216576B53 /* SoundRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundRecorder.hpp; sourceTree = ""; }; 1E090AE4D2EB3F7EBC12F7527F8C83A7 /* F3DGOLDEN.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DGOLDEN.cpp; sourceTree = ""; }; + 1E343C02528AB8BD5CDD167AC66BD567 /* Harmony.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Harmony.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 1E5356E04E92615CFF0666E5987CE594 /* libNESDeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libNESDeltaCore.a; path = libNESDeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; 1E9620B66C79B5072CD182C1D80819C8 /* String.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = String.cpp; sourceTree = ""; }; 1ECD6095FEBED6549E4EE623A0FC3431 /* Vector3.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Vector3.inl; sourceTree = ""; }; @@ -2360,9 +2360,9 @@ 23044889E5A6DCEE916A2658C83A085B /* NstBoardSunsoftDcs.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoftDcs.hpp; sourceTree = ""; }; 232881DB5B781BEF87FE7B6665883476 /* 3DMath.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = 3DMath.cpp; sourceTree = ""; }; 237AEE8BB0BEDA0F90CBA83BE3E11B81 /* NstBoardKonamiVrc3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc3.hpp; sourceTree = ""; }; - 238AA279772C644CC943D63E37C7AA3A /* Harmony-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Harmony-dummy.m"; sourceTree = ""; }; 23B56F8A99B549137872A3667B98CBAB /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/UIView+WebCacheOperation.m"; sourceTree = ""; }; 23B74C9DADB72CF0883D582488B13ED6 /* tile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tile.h; sourceTree = ""; }; + 23C697EC446C898565842A822356BD49 /* NSManagedObject+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Harmony.swift"; sourceTree = ""; }; 23C9343FC4FB0FD507A750B3EF697747 /* Contacts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Contacts.swift; path = Source/SwiftyDropbox/Shared/Generated/Contacts.swift; sourceTree = ""; }; 23D60DF4C8C979E59877EE0BC1BA7C94 /* NstInpPad.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPad.hpp; sourceTree = ""; }; 23EDAE362454CA4518FE66BD4A8A27BE /* GBADeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBADeltaCore-prefix.pch"; sourceTree = ""; }; @@ -2400,6 +2400,7 @@ 287CF3209EFBA423F838FBAE494AB0C0 /* slot1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = slot1.h; sourceTree = ""; }; 2889DF4390F5E2FFDA11CCE9E534746E /* System.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = ""; }; 28CBF616EB776A5C5D2F9A737B72AA74 /* cart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cart.h; sourceTree = ""; }; + 290BCCDEE8D33B086E36DBC4AAE5C4AB /* NSError+LocalizedFailureDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSError+LocalizedFailureDescription.swift"; sourceTree = ""; }; 290CD775EF514EB180E591FA1BBD9EE9 /* NstBoardAve.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAve.hpp; sourceTree = ""; }; 29100634EB1C2E5E9877D238B86CDBB4 /* autohint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = autohint.h; sourceTree = ""; }; 291D59A8B427D100ED229874D4D9C1A4 /* srtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = srtc.h; sourceTree = ""; }; @@ -2409,6 +2410,7 @@ 29AEB4740EA971386FE4B6750AA2EB59 /* NstBoardEvent.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardEvent.hpp; sourceTree = ""; }; 29E044818E33EA28D605B83708C47299 /* NstBoardBmcSuper24in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper24in1.hpp; sourceTree = ""; }; 29EB52E4D8EE749D56B951548307A0DE /* TxQuantize.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxQuantize.cpp; sourceTree = ""; }; + 29FA18E56645BF9DB1B8D4905E202C06 /* Record.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Record.swift; sourceTree = ""; }; 2A147B56E0C3491FF27162D46C95BDD2 /* retro_environment.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_environment.h; sourceTree = ""; }; 2AA34CF8A01A306ECCE09A801585167F /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; 2ABD8BA817A5B6DB4C5828318ED97014 /* RSTCollectionViewGridLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCollectionViewGridLayout.h; path = Roxas/RSTCollectionViewGridLayout.h; sourceTree = ""; }; @@ -2418,6 +2420,7 @@ 2B9D8426DBFEF530DE2AC44162062396 /* ZSort.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ZSort.cpp; sourceTree = ""; }; 2BAAE966AB05A1DCC9AA7B693D69F0D0 /* NstBoardCne.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCne.hpp; sourceTree = ""; }; 2BBF9E15124F307CDA19D3C2E2FEFCB6 /* NESDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NESDeltaCore-prefix.pch"; sourceTree = ""; }; + 2BEA4A46B7A6178A64F37902F1134C08 /* FinishDownloadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishDownloadingRecordsOperation.swift; sourceTree = ""; }; 2C998AB9300BCC4AD6368CB1FA675F29 /* Query.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Query.swift; path = Sources/SQLite/Typed/Query.swift; sourceTree = ""; }; 2C9E8347629FB94F0A3A23F8ACE7DF87 /* Team.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Team.swift; path = Source/SwiftyDropbox/Shared/Generated/Team.swift; sourceTree = ""; }; 2CC64C89DA860743FE62F576D82428F1 /* AREngine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AREngine.h; sourceTree = ""; }; @@ -2429,6 +2432,7 @@ 2D74E106D389811B1BA21826E9E3C690 /* rateest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rateest.h; sourceTree = ""; }; 2DF776088C2711052EEF4C793C2B806A /* NstBoardUnlMortalKombat2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlMortalKombat2.hpp; sourceTree = ""; }; 2E088DA0C031536321CA95D00470F534 /* ft2build.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ft2build.h; sourceTree = ""; }; + 2E0A6168C0907A7479C4BD04AB5B8928 /* SyncRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncRecordsOperation.swift; sourceTree = ""; }; 2E2BB78721D4C6515E5DED30486B26C2 /* opengl_ColorBufferReaderWithBufferStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithBufferStorage.h; sourceTree = ""; }; 2E2D966C0A00ADF6CBAED222AD054CA8 /* Crashlytics.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Crashlytics.xcconfig; sourceTree = ""; }; 2E5C87C85D80CEFECDBD846C5507C244 /* vi_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vi_controller.h; sourceTree = ""; }; @@ -2436,7 +2440,6 @@ 2E62533D6ADE3583F493484D3ABF1BB5 /* FIFOSamplePipe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFOSamplePipe.h; sourceTree = ""; }; 2E7771F7C5B8F14F803F19FCEB39CD0B /* Transformable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Transformable.hpp; sourceTree = ""; }; 2E9C9E58EFFC6846E01B3B75A4595B21 /* svcid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svcid.h; sourceTree = ""; }; - 2E9FF9B4A3C5693A9C7DC7179EB1F138 /* ManagedRecord+Predicates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Predicates.swift"; sourceTree = ""; }; 2EB60A6D4ABEDA41E12908BFFBCBAD8D /* ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-melonDS-MelonDSDeltaCore-Info.plist"; sourceTree = ""; }; 2EC10C4E5FDC7C7C25A7DAC7A2FB11BB /* F3DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX.h; sourceTree = ""; }; 2F298C5D309EDC6DEBD36255472EF52C /* SQLite.swift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SQLite.swift-dummy.m"; sourceTree = ""; }; @@ -2445,11 +2448,14 @@ 3077BDF790EB52605DBA99AE8089C2FA /* Settings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Settings.h; sourceTree = ""; }; 3086277C9B80D3FC1C3FFC747784942B /* Roxas.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Roxas.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 308BAF6C3BE086BDB26EFE72FA9E48A6 /* pngtest.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngtest.c; sourceTree = ""; }; + 30DFD8293FC858D3A24E23C9C67CBD30 /* RemoteFile+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+Dropbox.swift"; sourceTree = ""; }; 30E950B4BF47AC526A4464F3994CA0BB /* TextureFilters_xbrz.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilters_xbrz.h; sourceTree = ""; }; + 310FBB612ACE362141E6D805B3FC303A /* UserDefaults+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UserDefaults+Harmony.swift"; sourceTree = ""; }; 311F5E992C4184B1925C4E380CBBEFB5 /* RTC.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RTC.h; sourceTree = ""; }; 3139CDEFDF54874B3FE87D52FBEE63BB /* svsfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svsfnt.h; sourceTree = ""; }; 313C6B8D05DFD20F664BA3744351BC9C /* Context.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Context.cpp; sourceTree = ""; }; 3144D27552079845BF5B0637FC88D62B /* GTLRDrive.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDrive.h; path = Source/GeneratedServices/Drive/GTLRDrive.h; sourceTree = ""; }; + 31519A5FF9CDB3ABC6F3D03BD2B06403 /* FinishUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishUploadingRecordsOperation.swift; sourceTree = ""; }; 316A846E58F0E27085A4330EE10E3B5F /* SPU.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SPU.cpp; sourceTree = ""; }; 3197530A210649B738C6111BF7966B53 /* cpu_detect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpu_detect.h; sourceTree = ""; }; 319773B795A71CD3057DB359C4AE5C38 /* m64p_config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_config.h; sourceTree = ""; }; @@ -2484,7 +2490,7 @@ 34AF57CCCC40097CEBC29D385D24E7AB /* ARCodeList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARCodeList.h; sourceTree = ""; }; 34B01107A2C96AA02DBB861B4B38041C /* cic.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cic.h; sourceTree = ""; }; 34D7A85BF8A1C0DC2EE0B2F071F97445 /* ftgxval.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftgxval.h; sourceTree = ""; }; - 3538A2EB4EDA6929B5D32A095FD21C6E /* NSManagedObject+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Harmony.swift"; sourceTree = ""; }; + 356CE06C9954BC6FCEF4ADADFE25807C /* Harmony-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-prefix.pch"; sourceTree = ""; }; 35735087EA4B8B9922B5CAF03314D85D /* NstChecksum.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstChecksum.hpp; sourceTree = ""; }; 35A46DA9D7B9942345456BEF6DF7E8D1 /* GTLRURITemplate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRURITemplate.m; path = Source/Utilities/GTLRURITemplate.m; sourceTree = ""; }; 35B53A6EBBDB14342ACBC6EF87C2FAFD /* glsl_CombinerProgramBuilder.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_CombinerProgramBuilder.cpp; sourceTree = ""; }; @@ -2499,13 +2505,14 @@ 36B21AD2A8F390B23FB0A538F357E4D0 /* TxFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxFilter.h; sourceTree = ""; }; 36B43C04D7CC65CE9AD7C42E09A75A07 /* NstBoardKonamiVrc1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonamiVrc1.hpp; sourceTree = ""; }; 36D6B831A12A9A6161E3436E49D4113A /* NstCartridgeRomset.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridgeRomset.hpp; sourceTree = ""; }; - 36F0EA19BE634583B78B77F370DF9C88 /* NSPersistentStore+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSPersistentStore+Configuration.swift"; sourceTree = ""; }; 3712F3330F9F788DA08004D45DC308FB /* Sprite.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Sprite.hpp; sourceTree = ""; }; 3720B67C88F2DE8BCAE0EDD0D02B5F98 /* Socket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Socket.hpp; sourceTree = ""; }; 37221D699E77B16EA4FE6C376B827730 /* Pods-Delta-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Delta-umbrella.h"; sourceTree = ""; }; 37497E9D4A4AD3D7DBDCBD661F3B23B8 /* CustomTasks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomTasks.swift; path = Source/SwiftyDropbox/Shared/Handwritten/CustomTasks.swift; sourceTree = ""; }; 3762689E296E5EBA4CC56F2683522DF0 /* retro_endianness.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_endianness.h; sourceTree = ""; }; + 3774F3AE37BF4A348A3265BF0F216FF6 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; 37B489A0DEA4487857DEFF8A6A5237D9 /* NstBoardNRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNRom.hpp; sourceTree = ""; }; + 38132CAD1037F035FD8F3D63BA53AD28 /* Version+Revision.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Revision.swift"; sourceTree = ""; }; 3827013A64806EC421D988347B05D5EB /* RSTCellContentDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentDataSource.h; path = Roxas/RSTCellContentDataSource.h; sourceTree = ""; }; 3871D54EF3B7DA9555828F18A50129A9 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = ""; }; 387F3E450269A9E3EF2EA6A10AD8C879 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; @@ -2523,6 +2530,7 @@ 3A88ADF5CB822A0ABF0CDD1E4D68BAAE /* libretro_vulkan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = libretro_vulkan.h; sourceTree = ""; }; 3AB1EF926C51DFF7D92DC2A88CBEF231 /* Err.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Err.hpp; sourceTree = ""; }; 3AC36AE82A4992804E6ECF7236E5ECA7 /* RSTLoadOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTLoadOperation.m; path = Roxas/RSTLoadOperation.m; sourceTree = ""; }; + 3B1B0BE34876BC8785519C94EC3E4ED1 /* RemoteRecord+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+Dropbox.swift"; sourceTree = ""; }; 3B22551CE150F70C85739F2994DE4F75 /* GTLRDriveObjects.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDriveObjects.h; path = Source/GeneratedServices/Drive/GTLRDriveObjects.h; sourceTree = ""; }; 3B33F3D270F71B002370D6D901A9EC19 /* NstBoardBmcCtc65.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcCtc65.hpp; sourceTree = ""; }; 3B8875D91FA20F49517CC1C5CB0BEA40 /* version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; @@ -2531,9 +2539,11 @@ 3C045A31E9EBE0F4CFBE198690BA4782 /* ftdebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftdebug.h; sourceTree = ""; }; 3C11311A957A87232355B6B0AFFEB8F2 /* path.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = path.h; sourceTree = ""; }; 3C136320E214AE8F3ECD371DECBC4849 /* glsl_Utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_Utils.cpp; sourceTree = ""; }; + 3C23336B02D37B196D5C0A0F85D14FFC /* File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = ""; }; 3C58AA463B08C4DE998C625EC48E91D1 /* m64p_plugin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_plugin.h; sourceTree = ""; }; 3C7AC7D01BEAA298AE2E5122EB24308E /* IpAddress.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = IpAddress.hpp; sourceTree = ""; }; 3C927AD9499B9097EC14BFB7DAAB353A /* sdd1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdd1.h; sourceTree = ""; }; + 3C9D8CA40B82EB0DF55E9C6E404421E2 /* FetchRemoteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FetchRemoteRecordsOperation.swift; sourceTree = ""; }; 3D532E4E7993FC7D9C8EFA78B07605D3 /* NstPatcher.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstPatcher.hpp; sourceTree = ""; }; 3D5A8C2D0C4FF79FF4A82A7C02704490 /* UsersRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UsersRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/UsersRoutes.swift; sourceTree = ""; }; 3D98DA2B55C239E4E1EC147BC992F6F5 /* RenderTarget.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RenderTarget.hpp; sourceTree = ""; }; @@ -2544,15 +2554,14 @@ 3E352201B46848355CB326FC4BF1FF47 /* pngpread.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngpread.c; sourceTree = ""; }; 3E4294CBF5BD945DE53BB04420F881C9 /* GraphicsDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicsDrawer.h; sourceTree = ""; }; 3E468629CDCBD9A934833FB33710BC38 /* NstBoardKasing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKasing.hpp; sourceTree = ""; }; - 3E569C8B365BF92FAE9F87642393D402 /* Harmony.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = Harmony.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyDropbox.xcconfig; sourceTree = ""; }; 3E986068DD96944D1D5B4F242C7C4976 /* glsl_ShaderStorage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_ShaderStorage.h; sourceTree = ""; }; 3EB450DCC75AB9928F547A4793F046EC /* common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; 3EE0D71EAED7DDA51049859FE1209132 /* CLSReport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSReport.h; path = iOS/Crashlytics.framework/Headers/CLSReport.h; sourceTree = ""; }; + 3F35A6C365B629A2562A7BDA3B96F82C /* NSManagedObject+Conveniences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Conveniences.swift"; sourceTree = ""; }; 3F7732EEA99B052D2425B1972ECED982 /* NstApiConfig.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiConfig.hpp; sourceTree = ""; }; 3F9BFBF397EFF80B8131726E9C9A62C9 /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; 3FDD8F100D97035ED26853CCF457F3B5 /* DeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = DeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 403F1EF9016E064303392CD24F59212D /* DeleteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordsOperation.swift; sourceTree = ""; }; 406313DF7E94297A75C613BDD3988DC7 /* TextDrawerStub.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextDrawerStub.cpp; sourceTree = ""; }; 406A09A4EB4DA79E27112B7E71A89701 /* NstBoardBtlShuiGuanPipe.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlShuiGuanPipe.hpp; sourceTree = ""; }; 4070FFD16B4FA23902478F9D6197345C /* RSTRelationshipPreservingMergePolicy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTRelationshipPreservingMergePolicy.h; path = Roxas/RSTRelationshipPreservingMergePolicy.h; sourceTree = ""; }; @@ -2587,7 +2596,6 @@ 43281994AE91BE3DCE9CD0F6A87B1273 /* SoundFileReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundFileReader.hpp; sourceTree = ""; }; 432A5751918B766667F9CD8866666085 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = ""; }; 436B7542629ABF7B0FFD6BB9B072FC21 /* NstProperties.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstProperties.hpp; sourceTree = ""; }; - 439530753701672255509E76BB1AC1D7 /* Result+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Dropbox.swift"; sourceTree = ""; }; 43A3F7C375F5059943E7A8DB77319414 /* metaspu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = metaspu.h; sourceTree = ""; }; 43CE808CD1AE36F53CED9431BA461025 /* NstBoardUnlTf1201.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlTf1201.hpp; sourceTree = ""; }; 43D27CBEDCDDFA5D7CB760B22CEA6D23 /* NstInpOekaKidsTablet.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpOekaKidsTablet.hpp; sourceTree = ""; }; @@ -2599,7 +2607,6 @@ 449B71A4095E57DA96AFDEEE78EB922C /* interpret.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = interpret.h; sourceTree = ""; }; 44EC5F94EE5BFE7A785C5541E9210F90 /* bldno.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bldno.h; sourceTree = ""; }; 44FAD07D80BFEE0D325168C079FABD94 /* AboutDialog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = AboutDialog.h; sourceTree = ""; }; - 450775B09B5A404AD4A5910F22DD06C9 /* DownloadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordsOperation.swift; sourceTree = ""; }; 451CFB17CBEBD52220C6B8E9777016CB /* RSTLoadOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTLoadOperation.h; path = Roxas/RSTLoadOperation.h; sourceTree = ""; }; 452F3BC887D4177C15C6B566333C123E /* NstBoardGouder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardGouder.hpp; sourceTree = ""; }; 4541F12B3B53C045767B87EFB73A1AF3 /* svkern.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svkern.h; sourceTree = ""; }; @@ -2608,10 +2615,10 @@ 45D29114CAD3548F307C7BA691260F25 /* UITableView+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableView+CellContent.m"; path = "Roxas/UITableView+CellContent.m"; sourceTree = ""; }; 45DE5EDAEF814543E00692730C996AC5 /* NstBoardUxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUxRom.hpp; sourceTree = ""; }; 4607BD69102AF97F0A85D6512B3409CD /* GTLRQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRQuery.h; path = Source/Objects/GTLRQuery.h; sourceTree = ""; }; + 4629E795167FBFC90DB98DD3B4D6104D /* RemoteRecord+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+File.swift"; sourceTree = ""; }; 46639CDFB2B4FF61588F77A4A2FFD6FE /* NstIoPort.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoPort.hpp; sourceTree = ""; }; 46834904D33267E3CBEE319642FFC703 /* Config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; 468999824D8EE841754A3B910A80F137 /* rdram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rdram.h; sourceTree = ""; }; - 46A2C9BD6F58478A775BFC3629531415 /* DropboxService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Files.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Files.swift"; sourceTree = ""; }; 46CC56588A9249D29F68E981CE6C8B54 /* SNESEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SNESEmulatorBridge.h; sourceTree = ""; }; 46E7ACB3EEB07EF50F5C2B657C683EC7 /* glxext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glxext.h; sourceTree = ""; }; 4702731F2DEC76D99FCE88986919F6AC /* fxp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxp.h; sourceTree = ""; }; @@ -2625,7 +2632,7 @@ 4777A754C8B992D16F19E6669E3983F8 /* NstBoardNamcot175.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNamcot175.hpp; sourceTree = ""; }; 478F2C8230CA263EC0A07EBCB8012403 /* svttcmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svttcmap.h; sourceTree = ""; }; 47967D3CF2D6A2095CD6438231F82260 /* N64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = N64.swift; sourceTree = ""; }; - 47D47AFCF1385842685E8C07121C8BE8 /* SyncRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncRecordsOperation.swift; sourceTree = ""; }; + 47AC7C6297BC82A3BCC719AAEDC64AC4 /* Service.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = ""; }; 47D78517301F4912E4BBA2A056C253E1 /* UIAlertAction+Actions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIAlertAction+Actions.h"; path = "Roxas/UIAlertAction+Actions.h"; sourceTree = ""; }; 47FFA445106E8AEF055315EC32F6416C /* NstBoardBmcGamestarB.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGamestarB.hpp; sourceTree = ""; }; 48316C3FF62C94776726A1CAD59F2C64 /* Listener.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Listener.hpp; sourceTree = ""; }; @@ -2656,6 +2663,7 @@ 4A30748039EF71CC3D3BC9D7293442A7 /* NstInpFamilyTrainer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpFamilyTrainer.hpp; sourceTree = ""; }; 4A6CEB53419EF6042E06B56676D1DAF8 /* DSDeltaCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = DSDeltaCore.bundle; path = "DSDeltaCore-DSDeltaCore.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; 4A71F2279611250A8163A19A68C100B6 /* GBCCheat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCCheat.h; sourceTree = ""; }; + 4A78FCF77292DF45A5D9BC7C6476C356 /* Result+Success.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Success.swift"; sourceTree = ""; }; 4A827256CC16710474531DFA7ECE526F /* alist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = alist.h; sourceTree = ""; }; 4A835642A0FF668D9565F7122EDF06B1 /* musyx.c */ = {isa = PBXFileReference; includeInIndex = 1; path = musyx.c; sourceTree = ""; }; 4AB8A827FC69B7712131051BF7CDAEBF /* assem_arm64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_arm64.h; sourceTree = ""; }; @@ -2674,6 +2682,7 @@ 4D5205D694ADD50234921E3DEB5D957D /* TouchInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TouchInputView.swift; sourceTree = ""; }; 4D58E3495B9E3434BF573543720CB50E /* ai_controller.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ai_controller.h; sourceTree = ""; }; 4D625C34AD086F4A90C4372F2BED7491 /* CLSAttributes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSAttributes.h; path = iOS/Crashlytics.framework/Headers/CLSAttributes.h; sourceTree = ""; }; + 4DA9490D97454792007147110EAEE8A3 /* Result+Drive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Drive.swift"; sourceTree = ""; }; 4DB7F32ED8575A87699DF593661DBD4B /* Data+Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Compression.swift"; path = "Sources/ZIPFoundation/Data+Compression.swift"; sourceTree = ""; }; 4DCDABB34A5BDA633CA1B6972D7D76E1 /* gambatte.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gambatte.h; sourceTree = ""; }; 4E1E1F9090B631F29A327D322AFF5B4E /* NstInpMouse.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpMouse.hpp; sourceTree = ""; }; @@ -2683,12 +2692,12 @@ 4E6CEEF9383BEA7F879EA4F942833796 /* NstBoardNitra.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNitra.hpp; sourceTree = ""; }; 4E75A6CD77FDC5730599F170C8A47DC0 /* retro_dirent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_dirent.h; sourceTree = ""; }; 4F066AA72AF013DB424E69E221FDA626 /* stream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = stream.h; sourceTree = ""; }; - 4F6407C6FBA4E320D564FF013EBEDCF4 /* Dictionary+Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Dictionary+Sequence.swift"; sourceTree = ""; }; 4F751BB6AC156EB594F059E95D44A853 /* GoogleToolboxForMac.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleToolboxForMac.modulemap; sourceTree = ""; }; 4F8D603EBE941AC871B0A2F47AD5B6D5 /* Pods-Delta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Delta-dummy.m"; sourceTree = ""; }; 4FD9C6FE532DA80FB560837003DB3F08 /* NstBoardCamerica.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCamerica.hpp; sourceTree = ""; }; 4FF5B91527E584477B10719112BEA1B6 /* ftlist.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlist.h; sourceTree = ""; }; 500E8615D96CF177F4C3273482988B11 /* Bundle+Resources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Bundle+Resources.swift"; sourceTree = ""; }; + 50121691E9EC013F90B1E17BE7DC34D2 /* RemoteFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteFile.swift; sourceTree = ""; }; 502A6CD60EBBE6E5ABFA9CD22B78AEE5 /* InputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = InputStream.hpp; sourceTree = ""; }; 5033ACF3304F791248B9A86346AD675C /* NstIoMap.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoMap.hpp; sourceTree = ""; }; 5046B6E78EA1FD56CEB696532A667D56 /* controls.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = controls.h; sourceTree = ""; }; @@ -2696,7 +2705,6 @@ 507E5C05C910EB9C2351B7FDAC89B9AE /* Mouse.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Mouse.hpp; sourceTree = ""; }; 508001DB6BE4336BE73C646FCBC54782 /* clamping.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = clamping.h; sourceTree = ""; }; 508153374379761825956DE2D625E976 /* TxTexCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxTexCache.h; sourceTree = ""; }; - 50820F9A436F4E4AA63F4442C71C4DBC /* Harmony.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Harmony.modulemap; sourceTree = ""; }; 50942AB189B9EA5A4CCBCC5F4E94B58C /* movie.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = movie.h; sourceTree = ""; }; 50AE585204C42DE0E82204B2336C8C73 /* UdpSocket.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = UdpSocket.hpp; sourceTree = ""; }; 50B7464DE19879312AD16F0F9584E7C7 /* NstBoardSunsoft2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft2.hpp; sourceTree = ""; }; @@ -2710,6 +2718,7 @@ 512C4AAABBC20D346C24998DFEE5AFA1 /* BreakpointStructures.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = BreakpointStructures.h; sourceTree = ""; }; 5131F9EE375D77DAA9870F13B4698A6C /* TxUtil.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxUtil.cpp; sourceTree = ""; }; 514762CD1DB6A2350BA5EE10914786CD /* NSBundle+Extensions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+Extensions.m"; path = "Roxas/NSBundle+Extensions.m"; sourceTree = ""; }; + 519375E564B6CC30F67B164458FBFF55 /* Dictionary+Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Dictionary+Sequence.swift"; sourceTree = ""; }; 51AE0D8A1BA524D7E3E2B194F7CE4A37 /* NstCartridge.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCartridge.hpp; sourceTree = ""; }; 51C536521365129A5FF9AE40DDF753F8 /* Debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Debugger.h; sourceTree = ""; }; 51E7C0C33B47A7D708AB3CF66AF1137D /* UIImage+PDF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIImage+PDF.swift"; sourceTree = ""; }; @@ -2717,7 +2726,6 @@ 5231969A4CEB871747903C8249FAAB98 /* NstSha1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSha1.hpp; sourceTree = ""; }; 523D82D262DC8E536D345567D04FF3F5 /* SDL_opengles2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_opengles2.h; sourceTree = ""; }; 5277A427B540B8A971E15DE8732388E9 /* hle_external.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = hle_external.h; sourceTree = ""; }; - 527AC22A3208696A410615506A968BEF /* File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = ""; }; 5291FC66BF51E30DA83DE18DA93737CB /* SwiftyDropbox.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyDropbox.modulemap; sourceTree = ""; }; 5294532669D6FD1AE4D2A9F8C4A86C90 /* GoogleToolboxForMac.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleToolboxForMac.xcconfig; sourceTree = ""; }; 52AFA2BBC1A97735195FCE0F072444DD /* String.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = String.hpp; sourceTree = ""; }; @@ -2767,7 +2775,7 @@ 58E06EE5B6AC0AC69AFF39EDEB578E6E /* NstBoardBtlSmb3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb3.hpp; sourceTree = ""; }; 592333B6A8CE7E474E19C151AE976FBE /* skipsched.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = skipsched.h; sourceTree = ""; }; 593847BA38E9D8A068903E6A731921D5 /* svxf86nm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svxf86nm.h; sourceTree = ""; }; - 5967CB93E1B68FCF175E97CD13D10CFD /* BatchRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BatchRecordOperation.swift; sourceTree = ""; }; + 5967846BA7AC45E23C7E6339832E7D07 /* NSManagedObjectContext+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Harmony.swift"; sourceTree = ""; }; 5986D113E80DE6E1FCE1BF2079E6B442 /* pngrio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngrio.c; sourceTree = ""; }; 599BB76DE3FA8F63E0E23EA8BAFD278B /* NstBoardMmc3.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc3.hpp; sourceTree = ""; }; 59A2650A6455EC2EFC3FA9F2C0886519 /* SoundBuffer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundBuffer.hpp; sourceTree = ""; }; @@ -2777,9 +2785,7 @@ 5A4CBD7EC311541871920C24EA2D9548 /* RSTCompositeDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCompositeDataSource.h; path = Roxas/RSTCompositeDataSource.h; sourceTree = ""; }; 5A52DF3CA0011FA99AF644362B09A598 /* DBChunkInputStream.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DBChunkInputStream.h; path = Source/SwiftyDropbox/Shared/Handwritten/DBChunkInputStream.h; sourceTree = ""; }; 5A674E3827F841F30D860E8844750409 /* m64p_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_common.h; sourceTree = ""; }; - 5A684B9BC0FD9B61CE70469E6CF6BA3C /* UploadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordsOperation.swift; sourceTree = ""; }; 5AB3CC30BCD19485A7A87DB2D78E2BA1 /* GTMSessionUploadFetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMSessionUploadFetcher.h; path = Source/GTMSessionUploadFetcher.h; sourceTree = ""; }; - 5AF44E99CDEC34FBD91AFEE4DACFD88A /* RemoteFile+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+File.swift"; sourceTree = ""; }; 5B2E58A2772EA93AA7DC5A5022F51297 /* MelonDSDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MelonDSDeltaCore.xcconfig; sourceTree = ""; }; 5B4B6B605F69B9997410194A1E0CB31D /* NstBoardBmcSuper700in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper700in1.hpp; sourceTree = ""; }; 5B5206BC0DB3FB590107A53EBAE4647D /* opengl_UnbufferedDrawer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_UnbufferedDrawer.cpp; sourceTree = ""; }; @@ -2788,7 +2794,6 @@ 5C1B35A10293013EB1FF554F7BEB76DC /* GTLRService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRService.h; path = Source/Objects/GTLRService.h; sourceTree = ""; }; 5C31FD97E461D0628F310200A8D3B403 /* pnginfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pnginfo.h; sourceTree = ""; }; 5C35BC9F77F23B687515FC8958549CA1 /* L3DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = L3DEX.h; sourceTree = ""; }; - 5C643171D31A2715E757D5F42F63F495 /* DownloadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordOperation.swift; sourceTree = ""; }; 5C680EA14E1BCE635BDC66F5CEF30F4B /* ZlutTexture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZlutTexture.h; sourceTree = ""; }; 5C84A3CF371C057839A68C574D020120 /* biopak.c */ = {isa = PBXFileReference; includeInIndex = 1; path = biopak.c; sourceTree = ""; }; 5C888A9E68F5D9C40535BB25A042E10F /* Textures.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Textures.cpp; sourceTree = ""; }; @@ -2796,6 +2801,7 @@ 5C9FC5FCE0B5F88A589CF0363028B43C /* NstBoardTaito.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaito.hpp; sourceTree = ""; }; 5CC102BAEF4C8D771A86539CC220A5A5 /* NstApiEmulator.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiEmulator.hpp; sourceTree = ""; }; 5D72BB4EABA02D0C40C9847B11342161 /* PaperRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PaperRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/PaperRoutes.swift; sourceTree = ""; }; + 5D76DB70EB35703F979D1D54BF27EA95 /* DriveService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Files.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Files.swift"; sourceTree = ""; }; 5D7960122A08AC82F9286C7A2E2275F2 /* NstBoardBmc15in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc15in1.hpp; sourceTree = ""; }; 5D797E9A5C5782CE845840781FA1CC81 /* libAlamofire.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libAlamofire.a; path = libAlamofire.a; sourceTree = BUILT_PRODUCTS_DIR; }; 5DDB31BEBA1AF6B8AA83AFE0B4A2D7EE /* instructions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = instructions.h; sourceTree = ""; }; @@ -2806,7 +2812,6 @@ 5E82D9E0415F24E9559D27759ACC7218 /* minkeeper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = minkeeper.h; sourceTree = ""; }; 5EA6CE40033E7605CBA05FE256EA16DD /* T3DUX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = T3DUX.h; sourceTree = ""; }; 5EAB88E1F1D57B7D17D40ED0872DB766 /* GoogleSignIn.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleSignIn.xcconfig; sourceTree = ""; }; - 5EBF9C7AF0DBEF9D5C106E02B9B28CE6 /* DriveService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DriveService.swift; path = "Backends/Drive/Harmony-Drive/DriveService.swift"; sourceTree = ""; }; 5EEAB40C86D49852ED6EB7A6AFF904B0 /* UISpringTimingParameters+Conveniences.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UISpringTimingParameters+Conveniences.m"; path = "Roxas/UISpringTimingParameters+Conveniences.m"; sourceTree = ""; }; 5F716F68D783146B202EC8FC938BC98B /* GBAEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = GBAEmulatorBridge.mm; sourceTree = ""; }; 5F722266C08C5C1739772E3E72CEE17F /* TextureFilterHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TextureFilterHandler.h; sourceTree = ""; }; @@ -2821,22 +2826,19 @@ 607EE7A62CEA324021137035A39115DC /* ftautoh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftautoh.h; sourceTree = ""; }; 608FE25E87FF01D7345789C49881295A /* Combiner.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Combiner.h; sourceTree = ""; }; 609716320CE93EE5720BD73EE4666B18 /* RSTConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTConstants.h; path = Roxas/RSTConstants.h; sourceTree = ""; }; - 60FB49D244425C934B22DB89FE9F68AB /* FetchRemoteRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FetchRemoteRecordsOperation.swift; sourceTree = ""; }; + 60FA44C96259E0D6910605DB3506B00F /* Harmony.xcdatamodel */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.xcdatamodel; path = Harmony.xcdatamodel; sourceTree = ""; }; 61036065030A2D0CAFA57E52B4AEBBBB /* NstInpMahjong.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpMahjong.hpp; sourceTree = ""; }; 610FBE2B211DCC4D12F3F435021489B9 /* NstInpTopRider.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpTopRider.hpp; sourceTree = ""; }; - 6118EFDD077B9EC964912181660B7A95 /* ServiceOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ServiceOperation.swift; sourceTree = ""; }; 61394348571E8373817FFE9C2319D511 /* TextureFilters_hq4x.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TextureFilters_hq4x.cpp; sourceTree = ""; }; 6154AA0F4F3D72A490406941DDA56ECF /* TxCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxCache.h; sourceTree = ""; }; 61922816ADB3E7C4600DF77D3B382727 /* fts3_tokenizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fts3_tokenizer.h; path = Sources/SQLiteObjc/fts3_tokenizer.h; sourceTree = ""; }; 62CF24548323CEDA7F6C62DDD4E4970E /* main.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = main.h; sourceTree = ""; }; 62CF8182659AC61B46F3EE64308E7BA7 /* new_dynarec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = new_dynarec.h; sourceTree = ""; }; - 62D7AE2A6BB60EE680F208CA7652859A /* Result+Drive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Drive.swift"; sourceTree = ""; }; 630D82E8861EDF03C0AE64781235E207 /* glsl_CombinerProgramImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramImpl.h; sourceTree = ""; }; 63180C4F702A63C80A6A6C9888B52876 /* NstFpuPrecision.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFpuPrecision.hpp; sourceTree = ""; }; 6329A4701FAEB80F4C84BEAC1AC5FE31 /* MelonDSDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = MelonDSDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 632F100822F31BF07C7CD07CAD8F2329 /* UIView+AnimatedHide.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+AnimatedHide.m"; path = "Roxas/UIView+AnimatedHide.m"; sourceTree = ""; }; 633BFEBA4D6E889B3BD3E8EC2A8D9AAF /* NstInpHoriTrack.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpHoriTrack.hpp; sourceTree = ""; }; - 636321611157247A4B100E3ACC431B70 /* DropboxService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Versions.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Versions.swift"; sourceTree = ""; }; 6365C9968A510968784A08051605D583 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = ""; }; 63E486C49EB5CD189D8E3D136D388F32 /* Fabric.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Fabric.framework; path = iOS/Fabric.framework; sourceTree = ""; }; 63F723BED507FF2FF061CFBDA2D2DC5D /* NstBoardHenggedianzi.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHenggedianzi.hpp; sourceTree = ""; }; @@ -2866,7 +2868,6 @@ 6944EA8E8CC44D97F089057D5BBB67A6 /* fxemu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fxemu.h; sourceTree = ""; }; 695503A0305730FDED4FD809DFA4A3C1 /* N64DeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = N64DeltaCore.modulemap; sourceTree = ""; }; 698C748E342E77F1EA0CBA79A28CAC0B /* NstBoardCxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCxRom.hpp; sourceTree = ""; }; - 699F79983949D91377333D55142CEB7E /* RecordEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordEntry.swift; sourceTree = ""; }; 69C6B83D4542C5716F38FE2C2C2E343E /* SQLite.swift.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SQLite.swift.xcconfig; sourceTree = ""; }; 69F05BD9CB2FBF76E6BDDB0F64BEDA8F /* NstBoardSunsoftFme7.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoftFme7.hpp; sourceTree = ""; }; 6A2CACDB9FCC4BFBF7C2F672657367FF /* GTLRDriveService.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDriveService.h; path = Source/GeneratedServices/Drive/GTLRDriveService.h; sourceTree = ""; }; @@ -2888,6 +2889,7 @@ 6BF4AC25F29497FA32921E869185CFB9 /* S2DEX2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = S2DEX2.h; sourceTree = ""; }; 6BFD0F656B9079094013712B8261B5E1 /* NstIoAccessor.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstIoAccessor.hpp; sourceTree = ""; }; 6C0978994ADA13ACDD55B35B73CF516B /* ClipPolygon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ClipPolygon.h; sourceTree = ""; }; + 6C0CFDE9A393129B54C5103C27E8227B /* Syncable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Syncable.swift; sourceTree = ""; }; 6C13FD7FA77A5769F400B5BF15BC2F34 /* NstApiInput.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiInput.hpp; sourceTree = ""; }; 6C5307A8FB0BC0FF445E3DABBD956EB9 /* Roxas.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Roxas.modulemap; sourceTree = ""; }; 6C79D85ABB10589F765DD64715EEEAD3 /* ZIPFoundation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ZIPFoundation-umbrella.h"; sourceTree = ""; }; @@ -2904,6 +2906,8 @@ 6D90A2363F7995BE9713375802DBDF16 /* Roxas.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Roxas.xcconfig; sourceTree = ""; }; 6D98E76BA27C3752F885C66312189CB2 /* SMCalloutView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SMCalloutView.modulemap; sourceTree = ""; }; 6D9EAB15090D2390809047688EF8E815 /* GBCInputGetter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCInputGetter.h; sourceTree = ""; }; + 6DBF4ED0ED286CE1C63A3C12FC9C9EE8 /* Operation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Operation.swift; sourceTree = ""; }; + 6E00DF6A9A757414356C0B15990E587B /* JSONDecoder+ManagedObjectContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "JSONDecoder+ManagedObjectContext.swift"; sourceTree = ""; }; 6E028AD93ED1F6C5A46A56195C2CF756 /* GPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GPU.h; sourceTree = ""; }; 6E1E1C9F6B0A62DA55FDEB54FB33235C /* opengl_TextureManipulationObjectFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_TextureManipulationObjectFactory.h; sourceTree = ""; }; 6E2C328E034800C2CB26F5B94B12DDF6 /* DropboxTransportClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxTransportClient.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxTransportClient.swift; sourceTree = ""; }; @@ -2921,6 +2925,7 @@ 6FEE36BBE5119D88DE64B64D975EC87B /* NstBoardJalecoJf19.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf19.hpp; sourceTree = ""; }; 7001F35121D79E891B1BD2B4C133B505 /* gralloc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gralloc.h; sourceTree = ""; }; 705D7689B51FCCF53E9C703400B0DFC4 /* RSTDynamicDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTDynamicDataSource.h; path = Roxas/RSTDynamicDataSource.h; sourceTree = ""; }; + 7069F5F77B1F8E0612B5D6D93216ADC1 /* ManagedAccount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedAccount.swift; sourceTree = ""; }; 708D9E956CB287CC2879FE1061D1F6C5 /* GBCTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBCTypes.h; sourceTree = ""; }; 70DABB5ACFBF2E1DA35CD42F620E46F1 /* UITableViewCell+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UITableViewCell+CellContent.m"; path = "Roxas/UITableViewCell+CellContent.m"; sourceTree = ""; }; 70DD00852D37B01767D028ED9AA2DDAD /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; @@ -2931,11 +2936,11 @@ 71CB328D9397310D6DF21B68E80E7672 /* fterrors.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fterrors.h; sourceTree = ""; }; 71FF835F27DBABBE447A40E51AF4AC68 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/UIImage+GIF.h"; sourceTree = ""; }; 72224C07100B6D8A8371BBAC83840304 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/SDWebImageDownloader.m; sourceTree = ""; }; - 723AFC03DAB1F2E32CB45A4F3ED5FD35 /* AnyKeyPath+StringValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "AnyKeyPath+StringValue.swift"; sourceTree = ""; }; 725B23CE4361DD6771F70C91256E286B /* ContextSettings.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ContextSettings.hpp; sourceTree = ""; }; 725E5E4B6601C9A79B9D7A82DF839C25 /* NstBoardTxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxRom.hpp; sourceTree = ""; }; 72866AD3D95B81BC911D7A67CEBC69CB /* ARCodeList.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ARCodeList.cpp; sourceTree = ""; }; - 72B1BA0104CB37793A0BEBF5E0F3FFB8 /* UpdateRecordMetadataOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UpdateRecordMetadataOperation.swift; sourceTree = ""; }; + 72C17BA9F1E13F3AB49E67F7E335B1F6 /* RecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordOperation.swift; sourceTree = ""; }; + 72C85163404B74BC3D909E4934D4CBFD /* UploadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordsOperation.swift; sourceTree = ""; }; 72DF6D71D0B2650FA29881ABB3113610 /* DMA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DMA.h; sourceTree = ""; }; 72F6FF7C88B7AD41EC3870C4DE94973E /* UIResponder+FirstResponder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIResponder+FirstResponder.swift"; sourceTree = ""; }; 73166C752BA3D0BEFE30CD25680CA1E8 /* NstBoardSunsoft.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft.hpp; sourceTree = ""; }; @@ -2971,17 +2976,18 @@ 77CE0C99378A2FDADC3F70471D336C79 /* ContactsRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContactsRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/ContactsRoutes.swift; sourceTree = ""; }; 781ED3B4A8386F32B835E424BE6D24AD /* xxhash.c */ = {isa = PBXFileReference; includeInIndex = 1; path = xxhash.c; sourceTree = ""; }; 783A65AE17A33F0C1C242F5B30F01680 /* Archive+Reading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Reading.swift"; path = "Sources/ZIPFoundation/Archive+Reading.swift"; sourceTree = ""; }; + 783DB19663500C36D360E25061D1E639 /* DropboxService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxService.swift; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService.swift"; sourceTree = ""; }; 789D5CFDF81A92162003BEBF18BA3C20 /* NstBoardKayH2288.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKayH2288.hpp; sourceTree = ""; }; + 79101053BF84721BE4614C362B727D7C /* RemoteFile+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+File.swift"; sourceTree = ""; }; 792056404E543D00399F5986E8B3812F /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/SDWebImageDownloaderOperation.h; sourceTree = ""; }; 7934E37DFF6BB49A4E11E78A63B5CD51 /* MelonDSDeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MelonDSDeltaCore-umbrella.h"; sourceTree = ""; }; - 7959936C4C72BFF6C57D269BD58A6A92 /* PrepareUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrepareUploadingRecordsOperation.swift; sourceTree = ""; }; 795C12A193997827B4ADD870D87BDF8C /* CheatFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CheatFormat.swift; sourceTree = ""; }; 797293ABB0B561C6FE9D15E812E45081 /* usec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = usec.h; sourceTree = ""; }; - 7995A2AC9E3D083B7373FC9209B625BD /* HarmonyMetadataKey+Keys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "HarmonyMetadataKey+Keys.swift"; sourceTree = ""; }; + 797F664369496B12E69C8B551FACBF47 /* Harmony.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Harmony.h; path = Harmony/Harmony.h; sourceTree = ""; }; 7A09B431279F323517C8EF6B08DBA5D0 /* NstBoardTxcPoliceman.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcPoliceman.hpp; sourceTree = ""; }; 7A23A59045CAA0A03697397632CF3A5B /* NstApiCheats.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiCheats.hpp; sourceTree = ""; }; 7A4769F49E16CB7DA2C80A4AE0AB75CA /* Turbo3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Turbo3D.cpp; sourceTree = ""; }; - 7A95544E49AAD44E88BF2C9268C9BF94 /* RemoteRecord+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+Dropbox.swift"; sourceTree = ""; }; + 7AA4684851D7064C85599D690E6A6446 /* UpdateRecordMetadataOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UpdateRecordMetadataOperation.swift; sourceTree = ""; }; 7ACDAD920571F82F0FDFF413996C187F /* FramebufferTextureFormats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FramebufferTextureFormats.h; sourceTree = ""; }; 7AD9520272152BEF938AC2E8A1E5961D /* registers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = registers.h; sourceTree = ""; }; 7AFD09F14D0DA01868F50B237A0B76B1 /* Patch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Patch.h; sourceTree = ""; }; @@ -3032,10 +3038,10 @@ 80019774B54716FABF7DEFCCD68E75C2 /* Debugger.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Debugger.cpp; sourceTree = ""; }; 8009E402564A24AC35F53518E984813D /* NstTrackerMovie.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstTrackerMovie.hpp; sourceTree = ""; }; 8037C3684A58B1EC85B083D0624A7117 /* N64DeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-umbrella.h"; sourceTree = ""; }; - 8058D48F8CF8A2D21FE0EEF65FE6BFF6 /* RecordController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordController.swift; sourceTree = ""; }; 80C066584D91192C2CB5B4E7606E8F20 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; name = Standard.deltamapping; path = DSDeltaCore/Standard.deltamapping; sourceTree = ""; }; 80E83F0F41410406BC51FD2A72523649 /* STTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = STTypes.h; sourceTree = ""; }; 813D0026660BC9FA9BE9781E84D1F4A9 /* NstBoardBmc31in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc31in1.hpp; sourceTree = ""; }; + 81541D03368976297C41B931C452EBE6 /* SyncCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SyncCoordinator.swift; path = Harmony/SyncCoordinator.swift; sourceTree = ""; }; 81586D54535F45B193EF58A3F9A1B704 /* png.c */ = {isa = PBXFileReference; includeInIndex = 1; path = png.c; sourceTree = ""; }; 816CBA26E3940C8402B8EFE63E169294 /* RSTLaunchViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTLaunchViewController.h; path = Roxas/RSTLaunchViewController.h; sourceTree = ""; }; 816DCE1C4957B5B87AF4A2EA4D7451FF /* glsl_FXAA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = glsl_FXAA.cpp; sourceTree = ""; }; @@ -3044,16 +3050,15 @@ 81FFA4A03112CF74DC8BA775C6B4E3AC /* SQLite.swift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SQLite.swift.modulemap; sourceTree = ""; }; 8200E4FD4C7E3CC1AF2E0385FF61B65A /* NstBoardSachen74x374.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSachen74x374.hpp; sourceTree = ""; }; 820605CE2F2AA8CECEF751B81CDC1F0B /* NstInpPowerGlove.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPowerGlove.hpp; sourceTree = ""; }; + 827EE579CAC3B6BC2572230984CD7C55 /* BatchRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = BatchRecordOperation.swift; sourceTree = ""; }; 82C8F13E35C588F34CD7F1A313360A79 /* cp0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cp0.h; sourceTree = ""; }; 8310F880B7CC9B1650278B22FEEA7A2B /* GBCInputGetter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GBCInputGetter.cpp; sourceTree = ""; }; - 831586913D802CF0F3BD70D6BB259E5B /* Record.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Record.swift; sourceTree = ""; }; 83433F387FADB6F93585B15C45F26C41 /* SDWebImageDecoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDecoder.h; path = SDWebImage/SDWebImageDecoder.h; sourceTree = ""; }; 8346ECC5A3AFD14F0746FD2871ECDA43 /* osal_files.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osal_files.h; sourceTree = ""; }; 8364432B8E72D0344D921A2164F73693 /* DropboxTeamClient.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxTeamClient.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxTeamClient.swift; sourceTree = ""; }; 838F667D353D92B49C6150D47D8E5C4D /* TxTexCache.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = TxTexCache.cpp; sourceTree = ""; }; 83C151DB4B297DC753E27E2E0F3C3BC4 /* NstImageDatabase.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstImageDatabase.hpp; sourceTree = ""; }; 83D5738F79EFF74666BE041EC76ACDFA /* GTLRErrorObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRErrorObject.h; path = Source/Objects/GTLRErrorObject.h; sourceTree = ""; }; - 83EAB31E2D8E6844C8AD8F3F95F9ABB1 /* DriveService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Files.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Files.swift"; sourceTree = ""; }; 83F4160DB27DAF789E0C84F4BE223EAD /* NstBoardIremH3001.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremH3001.hpp; sourceTree = ""; }; 8466D7DB1CB791A44DECBDED6290F796 /* cheatSystem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheatSystem.h; sourceTree = ""; }; 84758A5917B6274B633D5B6A3A3E91F9 /* ftmac.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmac.h; sourceTree = ""; }; @@ -3066,6 +3071,7 @@ 8548E8B79648F224295606EFFF726D52 /* F3DBETA.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DBETA.cpp; sourceTree = ""; }; 85522F84ED70DA2A5D98CB751A79DB2E /* NstCrc32.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCrc32.hpp; sourceTree = ""; }; 8566DFE3C9D864188FAC41FB8316C1B0 /* NstInpBarcodeWorld.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpBarcodeWorld.hpp; sourceTree = ""; }; + 8569A924AD407A2A1010E75E282E1BBE /* RecordRepresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordRepresentation.swift; sourceTree = ""; }; 85A4BD81985AEDB6D9BA5E50804225D0 /* libGBADeltaCore.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGBADeltaCore.a; path = libGBADeltaCore.a; sourceTree = BUILT_PRODUCTS_DIR; }; 85B98EACC45CEADA2FC73EB069E37FC7 /* GTLRDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRDefines.h; path = Source/GTLRDefines.h; sourceTree = ""; }; 85CA254539B604E12B65C0315AD84D21 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/UIImageView+WebCache.m"; sourceTree = ""; }; @@ -3075,16 +3081,14 @@ 8693CF6D0BA1054AECDB9EBCB129A363 /* NstBoardBmc110in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc110in1.hpp; sourceTree = ""; }; 86BF9E53BBD7D649033BB1F156870DE2 /* svpscmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpscmap.h; sourceTree = ""; }; 86CEE581D78B9E9138136F67D7ADF345 /* NstApiMachine.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiMachine.hpp; sourceTree = ""; }; - 86E0555011765103678D4A46B0D7CD30 /* FinishUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishUploadingRecordsOperation.swift; sourceTree = ""; }; 86EF6CED706D9CF50812AACFBA3D3205 /* opengl_GLInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_GLInfo.h; sourceTree = ""; }; - 87039339C5C272F9501B594DB154C3A4 /* RecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordOperation.swift; sourceTree = ""; }; - 87263EF46CC8CB36CF6CC2C7E1D63E62 /* Result+Success.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Success.swift"; sourceTree = ""; }; 873C9B1C70581E3ACE0CEA93EA9568DB /* NstBoardBmc9999999in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc9999999in1.hpp; sourceTree = ""; }; 8760D486359333F01A58D9A3E6965D9E /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/SQLite/Typed/Operators.swift; sourceTree = ""; }; 876C8D28D439902E84EF476C79F7E2C8 /* MemoryStatus_mupenplus.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = MemoryStatus_mupenplus.cpp; sourceTree = ""; }; 877821421C3883E9EC8A19BABE97DA2D /* GraphicBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GraphicBuffer.h; sourceTree = ""; }; 879E33D39DED7A856D086D3BB622C65A /* NstBoardUnlWorldHero.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlWorldHero.hpp; sourceTree = ""; }; 87CC302B1B1C6F71828303A524C51690 /* pngwutil.c */ = {isa = PBXFileReference; includeInIndex = 1; path = pngwutil.c; sourceTree = ""; }; + 87FB4717B06B3A156717213C654A8EDF /* DriveService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Versions.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Versions.swift"; sourceTree = ""; }; 882DA4CFDB38488363DB6FA79E5CF3BE /* ZIPFoundation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ZIPFoundation-dummy.m"; sourceTree = ""; }; 883B872956FB7C28FDBB574888357A62 /* GTMNSString+URLArguments.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "GTMNSString+URLArguments.m"; path = "Foundation/GTMNSString+URLArguments.m"; sourceTree = ""; }; 8854B895A2B698DDB8BD5A2748BC1885 /* NLS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NLS.h; sourceTree = ""; }; @@ -3115,7 +3119,6 @@ 8B7A2F207266496310F9415852A1EBD7 /* Collation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Collation.swift; path = Sources/SQLite/Typed/Collation.swift; sourceTree = ""; }; 8B888530E83F42860A13FCEBBC74F753 /* tlb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = tlb.h; sourceTree = ""; }; 8B9083EB242665508C97535A7311874C /* RSTOperationQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTOperationQueue.h; path = Roxas/RSTOperationQueue.h; sourceTree = ""; }; - 8B914A55A521830F330AED535B8835A5 /* FinishDownloadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FinishDownloadingRecordsOperation.swift; sourceTree = ""; }; 8BB6F43FE56F847084FF20D1BCB4BFAF /* device.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = device.h; sourceTree = ""; }; 8BD21182E096CF262039B0C3A26E9769 /* Thread+RealTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Thread+RealTime.swift"; sourceTree = ""; }; 8C1BC49685F5EE8CD682028D49698258 /* controller_input_backend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = controller_input_backend.h; sourceTree = ""; }; @@ -3129,7 +3132,6 @@ 8D03641E7133709402578F9CCAF2CFA6 /* NstBoardCnePsb.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCnePsb.hpp; sourceTree = ""; }; 8D2AF58B1BA6D02D19EAE80F80E4CA9D /* bootrom_hle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bootrom_hle.h; sourceTree = ""; }; 8D330D00A36CAD5DB271066627735CA4 /* m64p_debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_debugger.h; sourceTree = ""; }; - 8D3AABE38A819F833123F47E08B8F6F8 /* KeyedContainers+ManagedValues.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "KeyedContainers+ManagedValues.swift"; sourceTree = ""; }; 8D629AE3BF67DAB06622670203476B43 /* NstApiSound.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiSound.hpp; sourceTree = ""; }; 8DA8A3992CF991EF375A78B56D07EF09 /* GPU3D_Soft.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GPU3D_Soft.cpp; sourceTree = ""; }; 8DC71414A1C59E302D19045860C86F3D /* counterdef.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = counterdef.h; sourceTree = ""; }; @@ -3149,6 +3151,7 @@ 8EF02F520CDA87AF4813D4764ECD43F5 /* CustomRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomRoutes.swift; path = Source/SwiftyDropbox/Shared/Handwritten/CustomRoutes.swift; sourceTree = ""; }; 8F33D3A6F44894D367D99FF4F1A9DD9C /* RSTCollectionViewGridLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTCollectionViewGridLayout.m; path = Roxas/RSTCollectionViewGridLayout.m; sourceTree = ""; }; 8F3A9DEA75F75C3ECC9442042F92E484 /* NstFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstFile.hpp; sourceTree = ""; }; + 8F9649F7A3943E90B3C543DF8F4BF8C4 /* RecordEntry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordEntry.swift; sourceTree = ""; }; 8FACC0B21FDAA0F253D9BB7A5062C4B0 /* ftbzip2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbzip2.h; sourceTree = ""; }; 8FE7624D239D6E6FDDCBDC31458E790E /* NstApiNsf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiNsf.hpp; sourceTree = ""; }; 8FEBC190192DF7DAD9E802180C71E395 /* rsp_core.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rsp_core.h; sourceTree = ""; }; @@ -3184,13 +3187,13 @@ 93D36FB1E125F6A30F7E99925C34CD64 /* transferpak.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = transferpak.h; sourceTree = ""; }; 93D6A333E30962F5423F826B733E702F /* memmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = memmap.h; sourceTree = ""; }; 93DB6CBD9964A538F778E19D3832F2B9 /* L3DEX2.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = L3DEX2.cpp; sourceTree = ""; }; - 94188727366A8D8FB099D152B9B5514A /* Harmony.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Harmony.h; path = Harmony/Harmony.h; sourceTree = ""; }; 94393ABA91B101430546FBAF247742E1 /* NstStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstStream.hpp; sourceTree = ""; }; 944052D0ED4C8624EF4485EE37D7898C /* opengl_ColorBufferReaderWithPixelBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_ColorBufferReaderWithPixelBuffer.cpp; sourceTree = ""; }; 9469FE680E41D7D8C8AD938E3450532A /* NstBoardBmcVrc4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcVrc4.hpp; sourceTree = ""; }; 947D4308D4F2D06F37BC4881F1637F48 /* GTLRFramework.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRFramework.m; path = Source/Utilities/GTLRFramework.m; sourceTree = ""; }; 949E3958BCE1694E83B41187962E38E9 /* obc1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = obc1.h; sourceTree = ""; }; 94A3287DE1F597EEEB81597618FA9901 /* NstBoardCneDecathlon.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCneDecathlon.hpp; sourceTree = ""; }; + 94A7A1A69CC1C854DB18E279A44F7DC4 /* RemoteRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteRecord.swift; sourceTree = ""; }; 94AE1145010E024A90A0B90A56727300 /* NstBoardTaitoX1005.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoX1005.hpp; sourceTree = ""; }; 94CD261951849F1D22579127673F3769 /* ftmm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmm.h; sourceTree = ""; }; 94D367DD0D99FF2FCAE661017295657C /* GoogleAPIClientForREST.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GoogleAPIClientForREST.xcconfig; sourceTree = ""; }; @@ -3208,6 +3211,7 @@ 95E5CEA8D238911F127A409B1C8C507E /* Config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; 96095127DE4F08650D82A0815DD6DB1D /* glsl_ShaderPart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_ShaderPart.h; sourceTree = ""; }; 961ACD2164700D5FD67F6014EB6E2CCF /* VideoRendering.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoRendering.swift; sourceTree = ""; }; + 961E505AC749C4E7A72842C5B3EA73E5 /* ConflictRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordOperation.swift; sourceTree = ""; }; 9622F656638DFB246B7A638CCF468156 /* mp3.c */ = {isa = PBXFileReference; includeInIndex = 1; path = mp3.c; sourceTree = ""; }; 966650603C914F8788C0B0BF65D7516D /* UICollectionView+CellContent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionView+CellContent.m"; path = "Roxas/UICollectionView+CellContent.m"; sourceTree = ""; }; 967EFE5245A453AF9AA01C58AA47CA6F /* GPU2D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GPU2D.h; sourceTree = ""; }; @@ -3225,6 +3229,7 @@ 9870FEA24CF3B1C5A3F888CBE2149CD4 /* rhash.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = rhash.h; sourceTree = ""; }; 98985DB2B0E10E3D6C992708741C684A /* UIApplication+AppExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIApplication+AppExtension.swift"; sourceTree = ""; }; 99096141FF8112FF26903D5255091329 /* F3DEX2CBFD.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DEX2CBFD.cpp; sourceTree = ""; }; + 991212BCD23A0E8E76331B80D2D2CBA8 /* ManagedRecord+Predicates.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Predicates.swift"; sourceTree = ""; }; 9925E412F176DF45C332321285001A55 /* DS.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DS.swift; sourceTree = ""; }; 998BCE1BFCDA316A894F5BE77EF92AD4 /* Coding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Coding.swift; path = Sources/SQLite/Typed/Coding.swift; sourceTree = ""; }; 99AFEBCD0E127C34321505B630C49E92 /* NstImage.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstImage.hpp; sourceTree = ""; }; @@ -3242,7 +3247,6 @@ 9AE215D47AD4C3E4C2C354C0C591C34C /* SwiftyDropbox-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyDropbox-umbrella.h"; sourceTree = ""; }; 9AE76E7D656F9FC63729D2FE6CF2EE4B /* NstApiUser.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiUser.hpp; sourceTree = ""; }; 9B772B195955E19223C5D696AF8E884E /* NstBoardBmcSuperHiK300in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuperHiK300in1.hpp; sourceTree = ""; }; - 9B7E86F1B639A123C10CF5C402F415B2 /* NSError+LocalizedFailureDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSError+LocalizedFailureDescription.swift"; sourceTree = ""; }; 9BBE274343E5120686BB2D52C486B98F /* Delta.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delta.swift; path = DeltaCore/Delta.swift; sourceTree = ""; }; 9C0F1623BBDB08363E8394AFBD38B87E /* cheats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cheats.h; sourceTree = ""; }; 9C40CA78C414DCF7D85C8612550E53E8 /* N64DeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = N64DeltaCore.xcconfig; sourceTree = ""; }; @@ -3256,13 +3260,11 @@ 9D8F9B8A6D48D5044338BCB2BA139DA1 /* ffmpeg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ffmpeg.h; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9DD38673C0296A73B42D147E647C1937 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = ""; }; - 9DD6E96B0D1C5E0989F7B0041FA8E00A /* MergePolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MergePolicy.swift; sourceTree = ""; }; 9E1156572BD531C3316B572C296BCF01 /* F3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3D.cpp; sourceTree = ""; }; 9E3627E2B352D880C38B219494E20A52 /* GLideNUI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GLideNUI.h; sourceTree = ""; }; 9E672A1C13EE353B0AC39DE0F84A4323 /* FTS5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FTS5.swift; path = Sources/SQLite/Extensions/FTS5.swift; sourceTree = ""; }; 9E7BF5046B171FA0104A3B0A7F9DD407 /* NstBoardCony.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardCony.hpp; sourceTree = ""; }; 9E96797E03C6BA19B7B506E463067AD1 /* NstBoardWaixingSecurity.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSecurity.hpp; sourceTree = ""; }; - 9EA61FA6FDF258367C544BA1A701348F /* Service.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = ""; }; 9EBDA149FC9D979E9EB1846B7E68B274 /* regcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = regcache.h; sourceTree = ""; }; 9EBF414719FAD26FBA9B9AB0E2F855F3 /* GBADeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GBADeltaCore-dummy.m"; sourceTree = ""; }; 9EC1A7B808C5E2E304C086081DB1796C /* NSConstraintConflict+Conveniences.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSConstraintConflict+Conveniences.h"; path = "Roxas/NSConstraintConflict+Conveniences.h"; sourceTree = ""; }; @@ -3270,6 +3272,7 @@ 9EF34391A06AF7754A090E44B9245C06 /* saves.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = saves.h; sourceTree = ""; }; 9F014A83DEF4F355ED7E7CBACE0FBE07 /* MelonDSEmulatorBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MelonDSEmulatorBridge.h; sourceTree = ""; }; 9F3152F7F819F4D7C0199707F1F5A9B8 /* ObjectHandle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ObjectHandle.h; sourceTree = ""; }; + 9F3E6F8779962F4C9E9EF3F90EE73FC3 /* Version+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Dropbox.swift"; sourceTree = ""; }; 9F4FE55BE08EA38FF320E4286A4C43C7 /* ControllerSkinProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ControllerSkinProtocol.swift; sourceTree = ""; }; 9F58A45C3A6F2E0C9EE2FB2DCD85BDF1 /* PngFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PngFile.h; sourceTree = ""; }; 9FDB5E5AA46D38CB2E47E5E6DF9A5645 /* Turbo3D.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Turbo3D.h; sourceTree = ""; }; @@ -3288,6 +3291,7 @@ A24C851DBA65EF8E8469317673E6CCF4 /* pure_interp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pure_interp.h; sourceTree = ""; }; A2B5384F92FD40CB28071138A07D6BBC /* CustomFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomFunctions.swift; path = Sources/SQLite/Typed/CustomFunctions.swift; sourceTree = ""; }; A2D4C88AAB9529011A0BC78A5F8FB349 /* bitmap_font.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bitmap_font.h; sourceTree = ""; }; + A2E120995C0F4075BADA7CA8334C6238 /* KeyedContainers+ManagedValues.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "KeyedContainers+ManagedValues.swift"; sourceTree = ""; }; A3112617A51AF6A36EACF9C3379C4BED /* NstVsSuperXevious.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsSuperXevious.hpp; sourceTree = ""; }; A3131038BAA6204AECC770BDD176F81C /* ZIPFoundation.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZIPFoundation.xcconfig; sourceTree = ""; }; A339C9C5BFA6F1000B405E8BE54F026C /* NstBoardBtlSmb2b.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2b.hpp; sourceTree = ""; }; @@ -3301,11 +3305,14 @@ A3B3DA7E38DD3305FA49B067BBEE2BBC /* GBCTypes.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = GBCTypes.m; sourceTree = ""; }; A3CA2C169265FC922C39733E381863E7 /* GBACart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBACart.h; sourceTree = ""; }; A3CE24F478FF46EBF0A19AD377B420DF /* GBAinline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = GBAinline.h; sourceTree = ""; }; + A3F1946AC819207D56F57FB40F4E7379 /* Harmony.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Harmony.modulemap; sourceTree = ""; }; A428ACD6852B72482C8570B4E49B15B4 /* VideoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = VideoManager.swift; sourceTree = ""; }; A463F67D31F18A3E8817C9388BDDEADD /* opengl_ColorBufferReaderWithReadPixels.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ColorBufferReaderWithReadPixels.h; sourceTree = ""; }; A490B0EA1911CAE566D521752DB9B643 /* RSTCellContentChange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTCellContentChange.h; path = Roxas/RSTCellContentChange.h; sourceTree = ""; }; A493D236FBEDB31AE7799E82580CE1E6 /* armdis.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = armdis.h; sourceTree = ""; }; A4A18683962DB3D821CC4DCBB8A6E9B9 /* NstInpTurboFile.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpTurboFile.hpp; sourceTree = ""; }; + A4C88694613725E9E864161B85D65525 /* ConflictRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordsOperation.swift; sourceTree = ""; }; + A4FA4F1DB645204506499791AADA8F23 /* DropboxService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Versions.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Versions.swift"; sourceTree = ""; }; A52143F41FF59A51CFA9789F6A96A1F3 /* ZSortBOSS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZSortBOSS.h; sourceTree = ""; }; A5234D695ADE2B2BAE15139F5B2FD0BA /* TxImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxImage.h; sourceTree = ""; }; A56369DCFB6DD06F4761C0C4900B2401 /* state_osd_elements.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = state_osd_elements.h; sourceTree = ""; }; @@ -3346,14 +3353,12 @@ AAD25B7136752E5F978B2EA8A9F1B2C7 /* SocketHandle.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SocketHandle.hpp; sourceTree = ""; }; AB71B3A5AD08C7FD7FFA348B2DCEA559 /* cpuaddr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpuaddr.h; sourceTree = ""; }; AB7ED6F2E514469E5640A93ED3622401 /* N64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = N64.h; sourceTree = ""; }; - ABE1F0BA1ED297C8F6D7E93A5DA90FAA /* DriveService+Versions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Versions.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Versions.swift"; sourceTree = ""; }; ABF2E1030F06335CAB068D719C129216 /* DeltaTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DeltaTypes.h; path = DeltaCore/DeltaTypes.h; sourceTree = ""; }; AC0AC4268C0D1BD94A77EF3153291D5A /* DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DeltaCore-prefix.pch"; sourceTree = ""; }; AC1B770F09F0C669234396A39BFF6BB9 /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; AC7A3157CBEE276869625E60733756D9 /* common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; AC89CB7A34B3B2FF8DBF5BB0E234D8A9 /* scoped_ptr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = scoped_ptr.h; sourceTree = ""; }; AD18B91FAC4B2CA8C394D0D1EF24808E /* pif.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pif.h; sourceTree = ""; }; - AD29A29166068991BD1FCD1B5147A8F9 /* RemoteRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteRecord.swift; sourceTree = ""; }; AD6FBA65BDE1FCB431C91C3080423E1E /* NoiseTexture.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NoiseTexture.cpp; sourceTree = ""; }; ADA9C40834B8789246B849280056B7BB /* FileInputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FileInputStream.hpp; sourceTree = ""; }; ADFD98373A9BA6422C60F09ADCB69852 /* apu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = apu.h; sourceTree = ""; }; @@ -3384,8 +3389,8 @@ B1A991CECAB9DD46D6515EF84919F6D0 /* ftmoderr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftmoderr.h; sourceTree = ""; }; B1AAAF56DFDC2516C9F0F82DEA17511B /* ThumbstickInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ThumbstickInputView.swift; sourceTree = ""; }; B1E6115DADF781FBC5286DC05270CFDF /* NstBoardBmc64in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc64in1.hpp; sourceTree = ""; }; + B1FD296AE5702C2AD78C04C623952693 /* UploadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordOperation.swift; sourceTree = ""; }; B206694C6233FEB2036FF9E2C8D5C7A9 /* ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SNESDeltaCore-SNESDeltaCore-Info.plist"; sourceTree = ""; }; - B236B2DB89B26DE7B16E762CF3080C5A /* UploadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UploadRecordOperation.swift; sourceTree = ""; }; B2688E7DF0591DC8789862F774C74BF6 /* plugin_delta.c */ = {isa = PBXFileReference; includeInIndex = 1; path = plugin_delta.c; sourceTree = ""; }; B2723BE48759EFEE2711364010F06BAF /* RSTPlaceholderView.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = RSTPlaceholderView.xib; path = Roxas/RSTPlaceholderView.xib; sourceTree = ""; }; B290CCC059154476A70C27D7890B7036 /* svgldict.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svgldict.h; sourceTree = ""; }; @@ -3396,12 +3401,14 @@ B31BC317B925949D8F6F764866AECFAE /* RSTTintedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTTintedImageView.h; path = Roxas/RSTTintedImageView.h; sourceTree = ""; }; B331F7660FB59081A99ADBA1AF706462 /* dummy_video_capture.c */ = {isa = PBXFileReference; includeInIndex = 1; path = dummy_video_capture.c; sourceTree = ""; }; B399BA8CED66B7B4AB724D2D580D4943 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; + B3A1CF8E39DF40FA5839CDC129FE69F5 /* NSPersistentStore+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSPersistentStore+Configuration.swift"; sourceTree = ""; }; B3AEB39C358F48D203125CAFE9D03E22 /* pngstruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; B3C33417B33F751208C5BF623D85A06D /* GBCDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBCDeltaCore-prefix.pch"; sourceTree = ""; }; B3F49F00CD6F1E7B2934D5D66A3DED6C /* NstBoardBmcSuper22Games.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcSuper22Games.hpp; sourceTree = ""; }; B4031DF8DC8C7AA073B8FAD5893715CA /* mbc3_rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mbc3_rtc.h; sourceTree = ""; }; B41ADAC311E8AD6F6A31A14C3ACCF208 /* glsl_CombinerProgramUniformFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_CombinerProgramUniformFactory.h; sourceTree = ""; }; B426B703A1D05906A76F9144E7FA0433 /* PlatformConfig.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = PlatformConfig.cpp; sourceTree = ""; }; + B45A648E7D344062C1077DFC7FC002ED /* HarmonyToHarmony2.xcmappingmodel */ = {isa = PBXFileReference; includeInIndex = 1; path = HarmonyToHarmony2.xcmappingmodel; sourceTree = ""; }; B49CF1CC01CA6A0D613EA0862C7F450E /* NSUserDefaults+DynamicProperties.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSUserDefaults+DynamicProperties.h"; path = "Roxas/NSUserDefaults+DynamicProperties.h"; sourceTree = ""; }; B4A650EA7BBC2B23A0D479A0DA4FB270 /* opengl_Utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_Utils.cpp; sourceTree = ""; }; B5246923E4069138B8F38B3EF8C4EE4D /* Users.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Users.swift; path = Source/SwiftyDropbox/Shared/Generated/Users.swift; sourceTree = ""; }; @@ -3422,7 +3429,6 @@ B72A5A5016919006907A70C26E61B891 /* NstBoardDreamtech.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardDreamtech.hpp; sourceTree = ""; }; B73776B063CE08E7361FDE4C26CF904F /* af_rtc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = af_rtc.h; sourceTree = ""; }; B73E9E04EC1D9DC2F189BC9DC0A68ADB /* ExternalGameControllerManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ExternalGameControllerManager.swift; sourceTree = ""; }; - B7835A1CFAD26F5CED24394F9EB07DBD /* Version+Revision.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Revision.swift"; sourceTree = ""; }; B7BC2C79D27AA4D45DBAED609878B0BF /* GameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameController.swift; sourceTree = ""; }; B82F7DDA166E0646F0D0CF3136098E6C /* SNESDeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = SNESDeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; B83651383886121680F6529DF69B391E /* assemble.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble.h; sourceTree = ""; }; @@ -3431,6 +3437,7 @@ B8A07AF8FA08DD189EA38E162C486A42 /* NstBoardTaitoX1017.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTaitoX1017.hpp; sourceTree = ""; }; B8CD1F5D1FB7A2951D65FA4A322294D1 /* opengl_BufferManipulationObjectFactory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = opengl_BufferManipulationObjectFactory.cpp; sourceTree = ""; }; B8F6D0F53FB1FDC036DDE39C228B2207 /* GPU3D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GPU3D.cpp; sourceTree = ""; }; + B90B39FD8918D51E615C0129F1E17120 /* DownloadRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordOperation.swift; sourceTree = ""; }; B93E69089ACE58953005A5382B2ADAAD /* dummy_audio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_audio.h; sourceTree = ""; }; B950CCD1428D808B7F6E616FB430883A /* NESDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NESDeltaCore.modulemap; sourceTree = ""; }; B9645A97F892996BB5BF51B8D0D43A0B /* N64Types.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = N64Types.m; sourceTree = ""; }; @@ -3483,6 +3490,8 @@ BF1BBDF3D7D54D8C1E001FC042148D06 /* Utf.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Utf.hpp; sourceTree = ""; }; BF2D25C87184C7CB6292C194EBA05335 /* texcache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = texcache.h; sourceTree = ""; }; BF31C2CB59DFB2355DA7BB8112A5D5C0 /* re2.c */ = {isa = PBXFileReference; includeInIndex = 1; path = re2.c; sourceTree = ""; }; + BF557E1265E4D79D27F20185D2FE7FCA /* Harmony-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Harmony-dummy.m"; sourceTree = ""; }; + BF5612094E4347B8BF7380D25F20C690 /* Harmony 2.xcdatamodel */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.xcdatamodel; path = "Harmony 2.xcdatamodel"; sourceTree = ""; }; BF7CEB7CE925B8996AD28292550EBFB2 /* ThreadLocal.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadLocal.hpp; sourceTree = ""; }; BF8EBB70E09CAD5AD9E5BB36757BDD4E /* RSTHasher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTHasher.h; path = Roxas/RSTHasher.h; sourceTree = ""; }; BF9EB574A8B1D8BC0B0BEDF16D62D5E3 /* display.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = display.h; sourceTree = ""; }; @@ -3494,14 +3503,13 @@ C05E3B2663EB9FC3F88BC0AF00C603AC /* NstInpPachinko.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPachinko.hpp; sourceTree = ""; }; C08D3CFD628192FDB9B9FD5A63E531B4 /* NstApiMovie.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiMovie.hpp; sourceTree = ""; }; C0BD20FF1A75F7E688073AEAC0E0E421 /* dummy_rsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dummy_rsp.h; sourceTree = ""; }; - C0F453A50C9E6D70D2C15CD2F4D9BE68 /* Version+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Version+Dropbox.swift"; sourceTree = ""; }; C129B80E9CC6B64D0600B9A46648ED8B /* opengl_BufferedDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_BufferedDrawer.h; sourceTree = ""; }; C14603BADCCE95A5E507021ACEF7693F /* Keys.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Keys.cpp; sourceTree = ""; }; C14F1439A262C75F30F451CE2F5AC4E9 /* GPU2D.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = GPU2D.cpp; sourceTree = ""; }; C159885D11F51EC41D84186D52DC4483 /* RDRAMtoColorBuffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = RDRAMtoColorBuffer.h; sourceTree = ""; }; C17445D591C8EC78950717FD3D5F77B1 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/UIImage+MultiFormat.h"; sourceTree = ""; }; - C17FD4E3456BB23320C0E9F652CC29D1 /* DropboxService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Records.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Records.swift"; sourceTree = ""; }; C1998E0D8085221AD87F89B614C10E52 /* libGTMSessionFetcher.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libGTMSessionFetcher.a; path = libGTMSessionFetcher.a; sourceTree = BUILT_PRODUCTS_DIR; }; + C1D380C96DB2A663DA8A6D54F345588D /* MergePolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MergePolicy.swift; sourceTree = ""; }; C2095BD846E0E2918CC6C26E739E147E /* language.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = language.h; sourceTree = ""; }; C24FF4FB306EA08CFD23D4A8DD8B6C7F /* NstInpPowerPad.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPowerPad.hpp; sourceTree = ""; }; C268076A13ECC0F130B5A406C2A1E22A /* GTMSessionFetcher.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTMSessionFetcher.xcconfig; sourceTree = ""; }; @@ -3518,6 +3526,7 @@ C3FFB989E3545149939D3E8C7F5F16B1 /* insertion_sort.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = insertion_sort.h; sourceTree = ""; }; C41D62EAA75E3627EE9D9B3527E8DFFB /* Alamofire.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.xcconfig; sourceTree = ""; }; C43650F984E0D62C7EB21DB9C43B8CAD /* GameControllerStateManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GameControllerStateManager.swift; sourceTree = ""; }; + C44004DB6135610C776BB7224A6E224E /* DriveService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DriveService+Records.swift"; path = "Backends/Drive/Harmony-Drive/DriveService+Records.swift"; sourceTree = ""; }; C45CF5051C61E98E1D10FDAE36FED44A /* KeyboardResponder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = KeyboardResponder.swift; sourceTree = ""; }; C4B900A4DF59414221BA4B0965A47C7C /* Thread.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Thread.hpp; sourceTree = ""; }; C4D7382D1D8B2EAAEDEC4E420FAC72E6 /* svpfr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpfr.h; sourceTree = ""; }; @@ -3529,7 +3538,6 @@ C5A57A0F7B6EFB30D8800FFBC3A0FD7A /* F3DEX2ACCLAIM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DEX2ACCLAIM.h; sourceTree = ""; }; C5A8B0D1C08B6C55E4CA098FCE620178 /* RDRAMtoColorBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = RDRAMtoColorBuffer.cpp; sourceTree = ""; }; C5B9715EFF4CB742F4153FF865BFAE0B /* util.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; - C5BE21537778C287EB7835EE5A1CEA97 /* ManagedRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedRecord.swift; sourceTree = ""; }; C64A7F2FDE6DF6B64B3CFFEE19102859 /* PACKED.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PACKED.h; sourceTree = ""; }; C64D454F5583AA5EC3D926CB2248F4F8 /* Cheats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Cheats.h; sourceTree = ""; }; C6615F5A71F8DCD1E426F1118FC5F17A /* NstXml.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstXml.hpp; sourceTree = ""; }; @@ -3549,7 +3557,6 @@ C789F35DF9D922934F14887196EADCFA /* Audio.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Audio.hpp; sourceTree = ""; }; C7E40DB865F641E4AB32B64D3F93E22C /* GoogleAPIClientForREST.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = GoogleAPIClientForREST.modulemap; sourceTree = ""; }; C82F87697475573C237F91B5498957A0 /* adaptivesleep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = adaptivesleep.h; sourceTree = ""; }; - C84F53DDEC96ABDB4E99816C838005FD /* Harmony-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-umbrella.h"; sourceTree = ""; }; C87526B5C0AF75FA4CE41AA42D172B0B /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/SDWebImageCompat.h; sourceTree = ""; }; C88860D669B74A0154AA887269E28475 /* GTLRBatchQuery.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRBatchQuery.h; path = Source/Objects/GTLRBatchQuery.h; sourceTree = ""; }; C8B01F60E394BFF06046341D779E4CB4 /* Music.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Music.hpp; sourceTree = ""; }; @@ -3564,14 +3571,13 @@ C9ED0B41AF5C196E6858B6DA26EAAC68 /* NstApiBarcodeReader.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiBarcodeReader.hpp; sourceTree = ""; }; CA31C817FA32BF3FA44E8F3FD7273A2B /* assem_x64.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_x64.h; sourceTree = ""; }; CA3B33FD961F7E04608908F29394499A /* NESEmulatorBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = NESEmulatorBridge.swift; sourceTree = ""; }; - CA7701E75D51BBB26AF25CB686CB48A8 /* RecordRepresentation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordRepresentation.swift; sourceTree = ""; }; CA7F161EA390DDDF6ECB71EE876B89D9 /* ThreadImpl.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ThreadImpl.hpp; sourceTree = ""; }; CA7FFC847A5DDF0337FD944CC08D1D35 /* ZilmarGFX_1_3.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ZilmarGFX_1_3.h; sourceTree = ""; }; CA9FEB0150AF6AC5451F53D2F5EF6259 /* NstBoardWaixingSh2.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWaixingSh2.hpp; sourceTree = ""; }; - CAA5774FC0B40EC779613DB64E15C046 /* LocalRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocalRecord.swift; sourceTree = ""; }; CAAEE81FB5DFAF21D63A74329E6F4E9C /* NstVsSystem.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVsSystem.hpp; sourceTree = ""; }; CAC68C48D5AACE9BF20D8B880DA33BB2 /* mupen64plus.ini */ = {isa = PBXFileReference; includeInIndex = 1; path = mupen64plus.ini; sourceTree = ""; }; CB043895CFC330790DEDECC0C41BFEBE /* SoftwareRender.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoftwareRender.cpp; sourceTree = ""; }; + CB465A950FD11985B4BFE9FE07618EB1 /* SyncProgress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncProgress.swift; sourceTree = ""; }; CB66A3376ED296C661FFEAA36063E7A5 /* NstSoundPcm.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundPcm.hpp; sourceTree = ""; }; CB8D4802A5F80BBA2E31C377A7C9689F /* Expression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Expression.swift; path = Sources/SQLite/Typed/Expression.swift; sourceTree = ""; }; CBD7894C9422E5309EB6A4FE9A80D055 /* ARM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARM.h; sourceTree = ""; }; @@ -3586,7 +3592,6 @@ CD3467F0683A726E7FA99570996471C2 /* SNES.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SNES.swift; sourceTree = ""; }; CD370B63C73F83203B239D65A10BF44A /* GTLRDuration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRDuration.m; path = Source/Objects/GTLRDuration.m; sourceTree = ""; }; CD3757C91C65FB4E4EBAB668470109FE /* NstBoardBtlSmb2a.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlSmb2a.hpp; sourceTree = ""; }; - CD4A28E12A0F4CA5FB5F949171A2104B /* NSManagedObject+Conveniences.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObject+Conveniences.swift"; sourceTree = ""; }; CD746E8386BFDF6E8F7B293E9EA93E17 /* NstBoardNtdec.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNtdec.hpp; sourceTree = ""; }; CD957EF417E4ED855F413792CFADBB28 /* NstBoardBtlT230.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtlT230.hpp; sourceTree = ""; }; CDA07C9DEC9FD13724174A7D6794AD7B /* FileRequests.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileRequests.swift; path = Source/SwiftyDropbox/Shared/Generated/FileRequests.swift; sourceTree = ""; }; @@ -3600,11 +3605,13 @@ CEEC5CCF9E4EF348B674F43D7BC193AD /* MelonDSDeltaCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MelonDSDeltaCore.modulemap; sourceTree = ""; }; CEF3CC6501A56EB934F1F25AEB77A985 /* internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = internal.h; sourceTree = ""; }; CF4CB213C78DA27A2EF987CB656BA480 /* file_storage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = file_storage.h; sourceTree = ""; }; + CF523761E770A7667BC9871C019D4CB0 /* DropboxService+Records.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Records.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Records.swift"; sourceTree = ""; }; CF5ED3F5DA210F1A19B3FCA09E19F679 /* NstBoardUnlXzy.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlXzy.hpp; sourceTree = ""; }; D02AD2D93D711FC49FACBCEA4547D87D /* NstBoardWhirlwind.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardWhirlwind.hpp; sourceTree = ""; }; D02F91DD08301C06A04A0C6273FC0114 /* TxInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = TxInternal.h; sourceTree = ""; }; - D030FA73AD1DA503048D364090F865A1 /* UserDefaults+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UserDefaults+Harmony.swift"; sourceTree = ""; }; D0643302DC4E42474BC7E1B5E9903519 /* NstBoardSxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSxRom.hpp; sourceTree = ""; }; + D065B11C91E406287214D3893496F978 /* Harmony.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Harmony.xcconfig; sourceTree = ""; }; + D0A4054A19C785C5941A4034583DA6A0 /* DriveService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DriveService.swift; path = "Backends/Drive/Harmony-Drive/DriveService.swift"; sourceTree = ""; }; D10EF252E11807FB1EF1F7E9A2AA502E /* snes9x.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = snes9x.h; sourceTree = ""; }; D113E482EBF7C096302CD382067ECB51 /* Foundation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Foundation.swift; path = Sources/SQLite/Foundation.swift; sourceTree = ""; }; D1221EDCBBEDA9035D0C95CAE7F9D52A /* GTLRService.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRService.m; path = Source/Objects/GTLRService.m; sourceTree = ""; }; @@ -3614,7 +3621,6 @@ D164ECEA35ACB2EFAF45DFBDE6086CD3 /* NstBoardAveD1012.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAveD1012.hpp; sourceTree = ""; }; D16849E97B5D5B6449F8627DD2DCBAF2 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; D18D98DFBFA469D8509A1C9BFB85042E /* DebugDump.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DebugDump.h; sourceTree = ""; }; - D18DB696A2F92208CB6C8BE6F624B70D /* Harmony.xcdatamodel */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.xcdatamodel; path = Harmony.xcdatamodel; sourceTree = ""; }; D190B41F4CB5ED20A79688D063A88168 /* UICollectionViewCell+Nibs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+Nibs.h"; path = "Roxas/UICollectionViewCell+Nibs.h"; sourceTree = ""; }; D1975814ACD46FECD8CEDFCE0706FFF0 /* m64p_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = m64p_common.h; sourceTree = ""; }; D1B6EF297830BCAD6D884EED97389BCF /* PACKED_END.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = PACKED_END.h; sourceTree = ""; }; @@ -3622,13 +3628,11 @@ D2188A915972865B5AF5C68B8B6D05B3 /* assem_x86.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assem_x86.h; sourceTree = ""; }; D23E1E808E48E9849AB52E92FEE110B2 /* NstBoardBmcPowerjoy84in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcPowerjoy84in1.hpp; sourceTree = ""; }; D24E88AD3320735A8600F142B16FD580 /* NstCheats.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstCheats.hpp; sourceTree = ""; }; - D254660B89B2DF06F349F2BC87B3FEFA /* DropboxService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxService.swift; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService.swift"; sourceTree = ""; }; D27C9AEA920B8065DC8FB0F6F92A6E26 /* GTLRURITemplate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTLRURITemplate.h; path = Source/Utilities/GTLRURITemplate.h; sourceTree = ""; }; D29AAFD2CFE6FB0F7D7946F037550722 /* cpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; D2A1CDF2D6BFF1EF9D9061C663EE16F9 /* NESDeltaCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NESDeltaCore-dummy.m"; sourceTree = ""; }; D2AC56C3AE1F0BBCE09D6CE758D402CE /* Network.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Network.hpp; sourceTree = ""; }; D300A5B7805C13ACEEB33CFECE9235DD /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = ""; }; - D347B9730DA2524DAF8E0C7AEDC8EEEA /* RemoteRecord+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteRecord+File.swift"; sourceTree = ""; }; D3D57B0A12B1AA1AEA896FD02062F18D /* RSTOperationQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTOperationQueue.m; path = Roxas/RSTOperationQueue.m; sourceTree = ""; }; D3FF2CD92B642B01EE1206B628894B5C /* NstInpPokkunMoguraa.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpPokkunMoguraa.hpp; sourceTree = ""; }; D407D2A6DD08097D10D2B1117A8635F6 /* dynamiclib.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dynamiclib.h; sourceTree = ""; }; @@ -3649,6 +3653,7 @@ D5E9FD5A3371067E608C6FF32C3E1179 /* RSTNavigationController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RSTNavigationController.m; path = Roxas/RSTNavigationController.m; sourceTree = ""; }; D5FBF61FEAA24AC5DFA51366F3A14D23 /* NstBoardKonami.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKonami.hpp; sourceTree = ""; }; D6152F7397477BE4F0ED9C7788792005 /* WifiAP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = WifiAP.h; sourceTree = ""; }; + D684261B02E9E876FF7F2C19DAA8B187 /* Result+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Result+Dropbox.swift"; sourceTree = ""; }; D686BB86CE4E75B4F320164A9EC1B404 /* GTLRUploadParameters.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTLRUploadParameters.m; path = Source/Objects/GTLRUploadParameters.m; sourceTree = ""; }; D6965C029B17596D166CA7C061E5AFA6 /* pngconf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngconf.h; sourceTree = ""; }; D6A4C76DED9C21C388F39532BDFE1609 /* writepng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = writepng.h; sourceTree = ""; }; @@ -3660,6 +3665,7 @@ D80E4A5FDBC780E4358E55866C35218A /* Performance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = Performance.h; sourceTree = ""; }; D81B0A638756575C41CA82842260A641 /* NstBoardIremG101.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardIremG101.hpp; sourceTree = ""; }; D86A59B7F6D5BB8BCCA5F180F29A6656 /* MemoryInputStream.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = MemoryInputStream.hpp; sourceTree = ""; }; + D8BBF62848901866C477497FB2344E67 /* Account.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Account.swift; sourceTree = ""; }; D91D509E04E52EB1EF2C6CE6325D63E0 /* assemble_struct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = assemble_struct.h; sourceTree = ""; }; D9223E826A52C67763ED0B1CB113EDBC /* mc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mc.h; sourceTree = ""; }; D96CE517678765B006B018E340F3198C /* audio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = audio.c; sourceTree = ""; }; @@ -3669,7 +3675,9 @@ DA35E04DC90CDF3E5C69140C495709F6 /* DepthBuffer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DepthBuffer.cpp; sourceTree = ""; }; DA67DD1AC07C6365F72FCAE6272760D2 /* Entry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entry.swift; path = Sources/ZIPFoundation/Entry.swift; sourceTree = ""; }; DA78D0D081686B5372F0FFAABDF5733A /* Pods-Delta-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Delta-acknowledgements.plist"; sourceTree = ""; }; + DA7EF136E451A89F311BC3EB6F92C187 /* DropboxService+Files.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DropboxService+Files.swift"; path = "Backends/Dropbox/Harmony-Dropbox/DropboxService+Files.swift"; sourceTree = ""; }; DA9C9A6D30671F1FB5F50BFBC1D1DF0B /* OGLRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLRender.h; sourceTree = ""; }; + DB0FA0FEE9F8742B64189133F4ACA01C /* Harmony-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-umbrella.h"; sourceTree = ""; }; DB18069D26E35C1BEFE5C4A0262422E8 /* RSTError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTError.h; path = Roxas/RSTError.h; sourceTree = ""; }; DB20DDFBF1AF645CE61ADF09F5974137 /* osd_element.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = osd_element.h; sourceTree = ""; }; DB36295AA4074B36829063D11A8BDC98 /* NstBoardMagicSeries.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMagicSeries.hpp; sourceTree = ""; }; @@ -3681,9 +3689,10 @@ DBC0113CF73BE24525E670D024A85BE7 /* libHarmony.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libHarmony.a; path = libHarmony.a; sourceTree = BUILT_PRODUCTS_DIR; }; DBD80F21182531F3EA2504E53691367A /* FrameBufferInfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = FrameBufferInfo.cpp; sourceTree = ""; }; DC0FD4C8DB0253E8CE8EAF9C64DBD0EB /* Roxas-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Roxas-dummy.m"; sourceTree = ""; }; - DC240B06FEB31AD03CBC7B80148A3097 /* Harmony-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Harmony-prefix.pch"; sourceTree = ""; }; + DC18C127E9733ADD4EB2929DE3E7710B /* DownloadRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DownloadRecordsOperation.swift; sourceTree = ""; }; DC2E2AF3A950FAF5326EEE74CDCD4D10 /* glsl_FXAA.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glsl_FXAA.h; sourceTree = ""; }; DC6964261E4DD7BE99FB445FC8757345 /* NstApiDipSwitches.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApiDipSwitches.hpp; sourceTree = ""; }; + DD616B770BEB5DC114E3497D623A5389 /* AnyCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AnyCodable.swift; sourceTree = ""; }; DD7037B9236081F8835FD977759FC372 /* NstBoardSuperGameLionKing.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSuperGameLionKing.hpp; sourceTree = ""; }; DD81DFC2C331976AE715C460849BA6F6 /* NDSCart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = NDSCart.h; sourceTree = ""; }; DD855AE6412C0DD63FC4D79544883DB2 /* ImmediatePanGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ImmediatePanGestureRecognizer.swift; sourceTree = ""; }; @@ -3693,8 +3702,6 @@ DDE800F01854521394EAADE8A06F1AA1 /* ftsynth.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftsynth.h; sourceTree = ""; }; DE1CD0A14598D55B1CD56BD77F8073C9 /* bios.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bios.h; sourceTree = ""; }; DE3C56A00DE19DC466C925A15112774C /* Lock.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Lock.hpp; sourceTree = ""; }; - DE3F53289236C150F14F4B85B876D904 /* ConflictRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordOperation.swift; sourceTree = ""; }; - DE50DAF15EC75FA249C291622A4739DE /* ManagedAccount.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedAccount.swift; sourceTree = ""; }; DE7BED3E5E48EB3660BE48EE00FA7AFB /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; DEBCE82463719FE6476D577E1F4423FD /* TeamLogRoutes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TeamLogRoutes.swift; path = Source/SwiftyDropbox/Shared/Generated/TeamLogRoutes.swift; sourceTree = ""; }; DEC0821C3D8852D66B08A0002AB2F015 /* DisplayLoadProgress.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = DisplayLoadProgress.cpp; sourceTree = ""; }; @@ -3707,11 +3714,9 @@ DFBFAD2A751915C945CC42E5F0F6D525 /* spc7110emu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110emu.h; sourceTree = ""; }; DFC688B75792FBFBB3B452084CA3837C /* NstSoundRenderer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundRenderer.hpp; sourceTree = ""; }; DFDA1E12C63A8E139E0F5F52E6F63F9D /* opengl_UnbufferedDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_UnbufferedDrawer.h; sourceTree = ""; }; - E04D3872EDD7D06663BEBFB1BB899C3E /* ManagedRecord+Uploading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Uploading.swift"; sourceTree = ""; }; E07126E3FC357870F5EAEC48FB308C9A /* NstBoardTxcTw.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcTw.hpp; sourceTree = ""; }; E077F3008801C506785266DF63C1EA19 /* romlist.bin */ = {isa = PBXFileReference; includeInIndex = 1; path = romlist.bin; sourceTree = ""; }; E0987B780D382225AE82D80ECA8C0641 /* GTMGatherInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMGatherInputStream.m; path = Source/GTMGatherInputStream.m; sourceTree = ""; }; - E0D8C051806BA9A8817550D4A2D2B252 /* SyncCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SyncCoordinator.swift; path = Harmony/SyncCoordinator.swift; sourceTree = ""; }; E0F150BFDEE45BE9AA4D0FDF4D91815E /* gfx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gfx.h; sourceTree = ""; }; E0F1902545FB22A0EF0B1A987A6C9D43 /* SMCalloutView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-prefix.pch"; sourceTree = ""; }; E0FE60C5CC43E6BEE71A9295033B18F2 /* MFiGameController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MFiGameController.swift; sourceTree = ""; }; @@ -3721,6 +3726,7 @@ E149E90D3011EE5DD380C62CC073BF20 /* Rect.inl */ = {isa = PBXFileReference; includeInIndex = 1; path = Rect.inl; sourceTree = ""; }; E17A40A5122F984FE431D21753C8CF06 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; E216C0C45BCA364953D3D8851490070E /* SNESEmulatorBridge.mm */ = {isa = PBXFileReference; includeInIndex = 1; path = SNESEmulatorBridge.mm; sourceTree = ""; }; + E2399D1F90D743D4012746C27EF34903 /* PropertyGroup+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "PropertyGroup+Harmony.swift"; sourceTree = ""; }; E248CA8F99CCB2FEEDCE6967354F7FB4 /* SwiftyDropbox.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SwiftyDropbox.h; path = Source/SwiftyDropbox/Shared/Handwritten/SwiftyDropbox.h; sourceTree = ""; }; E264A0D34041EEDB230760A4DF155023 /* NstBoardBtl2708.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBtl2708.hpp; sourceTree = ""; }; E2736204110643A558D3FFB355216B2E /* version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; @@ -3738,7 +3744,6 @@ E42E5A99DAE876C1FA977F57560BA47B /* NstBoardNxRom.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNxRom.hpp; sourceTree = ""; }; E45EB56BC48BE16046055CF4A8D52558 /* NSUserDefaults+DynamicProperties.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSUserDefaults+DynamicProperties.m"; path = "Roxas/NSUserDefaults+DynamicProperties.m"; sourceTree = ""; }; E474FB45FC3DD9C8E04C72D076AC8DFC /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/ZIPFoundation/Data+Serialization.swift"; sourceTree = ""; }; - E4DB7F5247E41A8DF960FAFF4F52DF47 /* ConflictRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ConflictRecordsOperation.swift; sourceTree = ""; }; E51C90A9B7B35AEE09669310AB15BED0 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/SDWebImageDownloaderOperation.m; sourceTree = ""; }; E53076134FC473CEAF27FC2CFCDC3C7F /* NstInpRob.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstInpRob.hpp; sourceTree = ""; }; E535808FC30F7474AE914FD2270A2715 /* CRC_OPT.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = CRC_OPT.cpp; sourceTree = ""; }; @@ -3761,31 +3766,29 @@ E816325429AF71A41869B7E6AAAFDF90 /* N64DeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = N64DeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; E8274D72B068FDD5B8433E16806FBEB8 /* SDL_opengl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SDL_opengl.h; sourceTree = ""; }; E84054BA6CBE0DAB191CCF09288DEF80 /* Time.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Time.cpp; sourceTree = ""; }; + E8962CCBB4791075DC49B171A0539E42 /* ManagedRecord+Uploading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "ManagedRecord+Uploading.swift"; sourceTree = ""; }; E8ADEC5003627F607F9CB7482F3C79DD /* NativeActivity.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NativeActivity.hpp; sourceTree = ""; }; E8CBF48F4162BE550454D36F2B379AE4 /* NESDeltaCore.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NESDeltaCore.xcconfig; sourceTree = ""; }; E8D1644FE6C9B9EA40479CBCFD2D7CC0 /* NstBoardJalecoJf11.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardJalecoJf11.hpp; sourceTree = ""; }; E8E60A18A1E9B1D77A5D5CAA1444A18D /* GoogleToolboxForMac-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "GoogleToolboxForMac-dummy.m"; sourceTree = ""; }; - E90308ECF32EF009E33F9EEBA9B7C84A /* NSManagedObjectContext+Harmony.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSManagedObjectContext+Harmony.swift"; sourceTree = ""; }; E94F624FEBCECA3D447A42E223613A20 /* ftbitmap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftbitmap.h; sourceTree = ""; }; E95A0C3C6E26DB4E26E12433BE937DB1 /* pshints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pshints.h; sourceTree = ""; }; E963BB1D802954605DE54BEAEAA046C0 /* ftlcdfil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftlcdfil.h; sourceTree = ""; }; E98E9898FE20472841A8D1A0EF9806EF /* cart_rom.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cart_rom.h; sourceTree = ""; }; - E9A5EDA091E457F4BF1FF9D5715E8EF2 /* RemoteFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RemoteFile.swift; sourceTree = ""; }; E9B5611EF6F1B6A753A3169A802B611A /* NstBoardBmc1200in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc1200in1.hpp; sourceTree = ""; }; - EA23C36C890553725FA9BBEBC0789829 /* Operation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Operation.swift; sourceTree = ""; }; EA7EC2EE415DCFBE44F9DBD4F92DB34E /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/ZIPFoundation/Archive.swift; sourceTree = ""; }; EA8D045A4BAB5806465552F9EAD05287 /* ftdriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftdriver.h; sourceTree = ""; }; EAA06CA70E6579DA7013F9BF0C6148C7 /* SoundDriver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoundDriver.h; sourceTree = ""; }; EAA42FF0995A2ECDE8654C66A329FEEA /* svwinfnt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svwinfnt.h; sourceTree = ""; }; EAB9AA348D576D9AF8A76D798AF0A209 /* N64.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = N64.cpp; sourceTree = ""; }; EAC8946446770DB79B1DE4821B8C753F /* spc7110.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110.h; sourceTree = ""; }; + EADFD178252AAA39909DEEB10F01B2F9 /* RecordController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = RecordController.swift; sourceTree = ""; }; EAEC7554802DE0A7D1588B6403024167 /* iniparser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = iniparser.h; sourceTree = ""; }; EAED976AA4A2603D8DF8C50E40CEB1CE /* png.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = ""; }; EAFE7943BDC2A2EA16E70C5B9E8335BE /* opengl_ContextImpl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_ContextImpl.h; sourceTree = ""; }; EB05D37130F5C1E54F68ECD8CDDC22EC /* svpostnm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svpostnm.h; sourceTree = ""; }; EB480F86E824BBF3F976C29F3F518408 /* NstVideoFilter2xSaI.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstVideoFilter2xSaI.hpp; sourceTree = ""; }; EB813FC7BFFACFEAB984E045534C0DCC /* NonCopyable.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NonCopyable.hpp; sourceTree = ""; }; - EB870F4AD39D4A4E00866F16DBDCEE49 /* RemoteFile+Dropbox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "RemoteFile+Dropbox.swift"; sourceTree = ""; }; EBBD46833EA1A4C5282B0F087FA83437 /* FIFO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = FIFO.h; sourceTree = ""; }; EBF0BB22A90E877C1E14A623DE51DD25 /* OGLRender_3_2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = OGLRender_3_2.h; sourceTree = ""; }; EC1B871004801A1E40D5F78C6B08A719 /* NstApi.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApi.hpp; sourceTree = ""; }; @@ -3801,7 +3804,6 @@ ED915D94AD96A862B32BB7B60A454CF2 /* NstBoardKay.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardKay.hpp; sourceTree = ""; }; ED9FC408E7E37A99A42E690455015732 /* debug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; EDA6378EF173D34375CA83B3E4DB4057 /* N64DeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "N64DeltaCore-prefix.pch"; sourceTree = ""; }; - EDCA85256EA26CE4DC88337487128581 /* Version.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Version.swift; sourceTree = ""; }; EE1AC475F3EBD28D40D55EE72FC5AB07 /* UICollectionViewCell+CellContent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewCell+CellContent.h"; path = "Roxas/UICollectionViewCell+CellContent.h"; sourceTree = ""; }; EE1BB2C196F721EAE216A16D2C28F108 /* NstBoardMmc1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardMmc1.hpp; sourceTree = ""; }; EE72931824332E351A9F7197A02E23BD /* gDP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gDP.h; sourceTree = ""; }; @@ -3810,6 +3812,7 @@ EEC4678594429BB9CEE4C8F14CE8FB18 /* NstBoardBmcFk23c.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcFk23c.hpp; sourceTree = ""; }; EEF4C54780B7CB8C5DD1FE7BFC88A8D5 /* RSTSearchController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTSearchController.h; path = Roxas/RSTSearchController.h; sourceTree = ""; }; EEF6D1011DA5B2381B452C7A4A848E70 /* NstBoardBmcGoldenCard6in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmcGoldenCard6in1.hpp; sourceTree = ""; }; + EF07B487D9EDA2636F89AB3A3A526A84 /* PrepareUploadingRecordsOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PrepareUploadingRecordsOperation.swift; sourceTree = ""; }; EF0B5A83CEA7719FDAE73CD9B61BF813 /* ucodes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ucodes.h; sourceTree = ""; }; EF146F5F4C23AB7CC20D0F4F40286379 /* check.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = check.h; sourceTree = ""; }; EF6DFC3B7AD060F43D4AFFBCD3F06AA6 /* AudioManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioManager.swift; sourceTree = ""; }; @@ -3828,12 +3831,14 @@ F07E76FD0A048E88C13AD72461D1A8A5 /* F3DPD.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = F3DPD.cpp; sourceTree = ""; }; F08C08AAB29244E9A786468ABCA8B758 /* SPU.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SPU.h; sourceTree = ""; }; F0D3C6982EBE0EAC53FAA7E37AFA9496 /* F3DPD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DPD.h; sourceTree = ""; }; + F0EC6BDB76040B5A332BFBE292E094E1 /* DeleteRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordOperation.swift; sourceTree = ""; }; F10C56C1DD0DBC1297C6FA4D55986B04 /* spc7110dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = spc7110dec.h; sourceTree = ""; }; F10F7750064142DE73F6F7454CC2983E /* GTMSessionFetcherLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMSessionFetcherLogging.m; path = Source/GTMSessionFetcherLogging.m; sourceTree = ""; }; F11EA13357D6F351A1A191DA33451B01 /* NstBoardBmc21in1.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardBmc21in1.hpp; sourceTree = ""; }; F12EC1D77781095125E901DEFF622F36 /* FileProperties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileProperties.swift; path = Source/SwiftyDropbox/Shared/Generated/FileProperties.swift; sourceTree = ""; }; F15930486D7F45DD18CFBA9BD8800E92 /* sdl2_compat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = sdl2_compat.h; sourceTree = ""; }; F1A146BC0741538EE96C0E759582B337 /* NstApu.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstApu.hpp; sourceTree = ""; }; + F1A28AB6CD59A0C38D968D07D5256E8F /* ManagedRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ManagedRecord.swift; sourceTree = ""; }; F1AD374BED968FBCE790AA433A78D057 /* svtteng.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = svtteng.h; sourceTree = ""; }; F1BABB17270A0A3966333B7C327BF0CA /* ColorBufferToRDRAMStub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ColorBufferToRDRAMStub.h; sourceTree = ""; }; F1CFEE2E88E05706A2CB9A382C9447D7 /* NstBoardUnlKingOfFighters96.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlKingOfFighters96.hpp; sourceTree = ""; }; @@ -3864,7 +3869,6 @@ F4CE4627B8A26D8EBCF531C808BA677F /* DropboxClientsManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropboxClientsManager.swift; path = Source/SwiftyDropbox/Shared/Handwritten/DropboxClientsManager.swift; sourceTree = ""; }; F4D26635313FF0E89E645E701C664260 /* SoundBufferRecorder.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = SoundBufferRecorder.hpp; sourceTree = ""; }; F4E1FCF713C18921783474BD5B489966 /* vidext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = vidext.h; sourceTree = ""; }; - F512DCC7821D8E2620E88EDC969A6116 /* DeleteRecordOperation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeleteRecordOperation.swift; sourceTree = ""; }; F517002D199922653B78176FE67DCA6E /* NstBoardNihon.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardNihon.hpp; sourceTree = ""; }; F52217DDA56116C4579A60B66E239C62 /* alist_naudio.c */ = {isa = PBXFileReference; includeInIndex = 1; path = alist_naudio.c; sourceTree = ""; }; F52405E64C06D130B0AAD913D760D8C8 /* glext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = glext.h; sourceTree = ""; }; @@ -3877,7 +3881,6 @@ F650B1818D017BD4A14C1415647FCDEB /* fb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = fb.h; sourceTree = ""; }; F67250F16C56E5B1A4484C31368E4BB1 /* GBADeltaCore.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = GBADeltaCore.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; F686DB132322EBC65182C37F284A25F3 /* Font.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Font.hpp; sourceTree = ""; }; - F68723D87D569E987F572CCD08093F61 /* SyncProgress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SyncProgress.swift; sourceTree = ""; }; F687CDE1CC73F1023FA06367B7621C39 /* SoftwareRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = SoftwareRender.h; sourceTree = ""; }; F69FBA7A038D20EABCA39B35AB3B040D /* dsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = dsp.h; sourceTree = ""; }; F6C874D560C2ECE9A78595318F449292 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = ""; }; @@ -3886,6 +3889,7 @@ F70E93212D39D1D9645D5BBE0CFB4A26 /* filters.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = filters.h; sourceTree = ""; }; F74135D2566C066E0B9F4F851E06A12A /* UIViewController+TransitionState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIViewController+TransitionState.m"; path = "Roxas/UIViewController+TransitionState.m"; sourceTree = ""; }; F764C420914578158ED027BC44B8591B /* callbacks.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = ""; }; + F7B4E7C9B7F6131BC57241CAF0E2FDD2 /* HarmonyMetadataKey+Keys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "HarmonyMetadataKey+Keys.swift"; sourceTree = ""; }; F7BDD61DD53EB66909667FDEF0E033B1 /* Cheat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Cheat.swift; sourceTree = ""; }; F7C2DFC00C454B4A6E486685A3B85653 /* GBADeltaCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBADeltaCore-umbrella.h"; sourceTree = ""; }; F7C47011115A00E9556AC311099987E7 /* GTMMethodCheck.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = GTMMethodCheck.h; path = DebugUtils/GTMMethodCheck.h; sourceTree = ""; }; @@ -3899,7 +3903,6 @@ F87EFA6D54FDC38E1D796063498DB67B /* ftcalc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftcalc.h; sourceTree = ""; }; F88144124FBA971D0634C19257E4725C /* exprNode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = exprNode.h; sourceTree = ""; }; F88BB2DC2D2059BC24702E5033B1FA18 /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/SDWebImageDownloader.h; sourceTree = ""; }; - F8D9AB238C0D8C37F7486D77CC4E9BF4 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; F8E2DF4FE7FA12D11F9519C050CBAE82 /* ttnameid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ttnameid.h; sourceTree = ""; }; F8E695BDE117DE11C2A9816B243CE8D2 /* recomp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = recomp.h; sourceTree = ""; }; F8EB681067B1016B70AE4047A7C916B9 /* ftconfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ftconfig.h; sourceTree = ""; }; @@ -3931,6 +3934,7 @@ FB5B6F86BFE8AFABADAFCCC745D013FE /* Err.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Err.cpp; sourceTree = ""; }; FB5E73C8C7F0D5AB282E9A29954B036F /* NSString+Localization.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+Localization.m"; path = "Roxas/NSString+Localization.m"; sourceTree = ""; }; FB6F1EA645B2A93AB915AD7BC3EAD8E1 /* ARMInterpreter_Branch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = ARMInterpreter_Branch.cpp; sourceTree = ""; }; + FB7DA90822908B1EECA492E051D817CE /* LocalRecord.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LocalRecord.swift; sourceTree = ""; }; FB822E90029BFEA20B117487DC27A04D /* RSTBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTBlockOperation.h; path = Roxas/RSTBlockOperation.h; sourceTree = ""; }; FB9EE7B4A2F519FCFB65900960419A5F /* F3DGOLDEN.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = F3DGOLDEN.h; sourceTree = ""; }; FBAE8914742053CB6ADCEC14737596F0 /* ShaderProgram.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ShaderProgram.h; sourceTree = ""; }; @@ -4040,6 +4044,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2867E41F0270DB8E25A5DEEF4473F30E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 373FAF5E443D6679532ACC75D39A2A05 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -4047,13 +4058,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 42396456A9083658104D12DBC34770AB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 55CD572E462904EA6C9905761349C14C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -4061,13 +4065,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 596D3A8F72E091C80C6C4F87844EE108 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 5FB72F5600AF73B0454B5151D88A68DB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -4131,14 +4128,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CF750F951B5921983AC422A1B8D08E64 /* Frameworks */ = { + D17DE93F464412385D2ACD2C66FC3364 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D17DE93F464412385D2ACD2C66FC3364 /* Frameworks */ = { + D55A7192A34A3E6AB5AC96485C102F84 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EA4A4B678C7DC47CA66772B8E1529566 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -4176,6 +4180,18 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 001E6590B77AEBE5AF07A503AA924E98 /* Upload */ = { + isa = PBXGroup; + children = ( + 31519A5FF9CDB3ABC6F3D03BD2B06403 /* FinishUploadingRecordsOperation.swift */, + EF07B487D9EDA2636F89AB3A3A526A84 /* PrepareUploadingRecordsOperation.swift */, + B1FD296AE5702C2AD78C04C623952693 /* UploadRecordOperation.swift */, + 72C85163404B74BC3D909E4934D4CBFD /* UploadRecordsOperation.swift */, + ); + name = Upload; + path = Upload; + sourceTree = ""; + }; 028977E75ED73C330A7CC24AEBCD6BF9 /* Mupen64Plus */ = { isa = PBXGroup; children = ( @@ -4246,6 +4262,19 @@ path = xxhash; sourceTree = ""; }; + 06CBA17FA9DE47E2709938867FB397D9 /* Model */ = { + isa = PBXGroup; + children = ( + D8BBF62848901866C477497FB2344E67 /* Account.swift */, + 3C23336B02D37B196D5C0A0F85D14FFC /* File.swift */, + 29FA18E56645BF9DB1B8D4905E202C06 /* Record.swift */, + 07E1A6F9BADA368445D9DBE731C26499 /* Version.swift */, + 2AB8D226290B9CF83D49DFA25B991FD1 /* Core Data */, + ); + name = Model; + path = Harmony/Model; + sourceTree = ""; + }; 07C5E7E52DA074AB4D079EE3E3328C33 /* visupng */ = { isa = PBXGroup; children = ( @@ -4346,16 +4375,6 @@ path = "mupen64plus-core"; sourceTree = ""; }; - 0C712C8C7BD3A3BA52CD0F4A84F011CE /* Misc. */ = { - isa = PBXGroup; - children = ( - 60FB49D244425C934B22DB89FE9F68AB /* FetchRemoteRecordsOperation.swift */, - 72B1BA0104CB37793A0BEBF5E0F3FFB8 /* UpdateRecordMetadataOperation.swift */, - ); - name = Misc.; - path = Misc.; - sourceTree = ""; - }; 0E1D35D03C7FAADE495608D5046D0A18 /* api */ = { isa = PBXGroup; children = ( @@ -4551,18 +4570,6 @@ path = Model; sourceTree = ""; }; - 18727D12B38DBE263195F41504FA8D5C /* Harmony-Dropbox */ = { - isa = PBXGroup; - children = ( - D254660B89B2DF06F349F2BC87B3FEFA /* DropboxService.swift */, - 46A2C9BD6F58478A775BFC3629531415 /* DropboxService+Files.swift */, - C17FD4E3456BB23320C0E9F652CC29D1 /* DropboxService+Records.swift */, - 636321611157247A4B100E3ACC431B70 /* DropboxService+Versions.swift */, - 73A22CCBEF19B1B200ADA20DA0EAD4C7 /* Extensions */, - ); - name = "Harmony-Dropbox"; - sourceTree = ""; - }; 1B00D1A6F79AF84381503C8C22D20EA3 /* Cores */ = { isa = PBXGroup; children = ( @@ -4582,6 +4589,16 @@ path = GLideN64; sourceTree = ""; }; + 1C2FEFDA42E7CDA3F091416B27F6FDC6 /* Parent Operations */ = { + isa = PBXGroup; + children = ( + 827EE579CAC3B6BC2572230984CD7C55 /* BatchRecordOperation.swift */, + 72C17BA9F1E13F3AB49E67F7E335B1F6 /* RecordOperation.swift */, + ); + name = "Parent Operations"; + path = "Parent Operations"; + sourceTree = ""; + }; 1C81893C6C5CA0C0114A2862C96E34B0 /* cart */ = { isa = PBXGroup; children = ( @@ -4622,6 +4639,16 @@ path = DeltaCore/Model; sourceTree = ""; }; + 1DE09E658F2535C5DCC2155783838338 /* Core Data */ = { + isa = PBXGroup; + children = ( + C1D380C96DB2A663DA8A6D54F345588D /* MergePolicy.swift */, + EADFD178252AAA39909DEEB10F01B2F9 /* RecordController.swift */, + ); + name = "Core Data"; + path = "Harmony/Core Data"; + sourceTree = ""; + }; 1DE3C5EF04F04E81DE98254DC953CE87 /* main */ = { isa = PBXGroup; children = ( @@ -4655,14 +4682,6 @@ path = x86_64; sourceTree = ""; }; - 1EB1AC2AB2C378551CD37458FB961332 /* Resources */ = { - isa = PBXGroup; - children = ( - 13024863EABD5877B9E214D03434D254 /* Harmony.xcdatamodeld */, - ); - name = Resources; - sourceTree = ""; - }; 1FC29672D386809D776C8BBED048F2A9 /* decoder */ = { isa = PBXGroup; children = ( @@ -4693,14 +4712,21 @@ path = Video; sourceTree = ""; }; - 22567F834DFA419A07D7E3214BEC2733 /* Delete */ = { + 2276219BB9DA3393AF52B539EB26642E /* Operations */ = { isa = PBXGroup; children = ( - F512DCC7821D8E2620E88EDC969A6116 /* DeleteRecordOperation.swift */, - 403F1EF9016E064303392CD24F59212D /* DeleteRecordsOperation.swift */, + 6DBF4ED0ED286CE1C63A3C12FC9C9EE8 /* Operation.swift */, + 1DD25012950497FA0453E5082F7EA9E1 /* ServiceOperation.swift */, + 2E0A6168C0907A7479C4BD04AB5B8928 /* SyncRecordsOperation.swift */, + 4C30AF9A1BDB968C30E36B5ECFF895BF /* Conflict */, + BC634049BBE359DA75A3DFBCB470CB72 /* Delete */, + 382704E6D84D7069297785F0DDCC03F4 /* Download */, + 9CECA84FC98F5FD2F0EA88E5F3B30045 /* Misc. */, + 1C2FEFDA42E7CDA3F091416B27F6FDC6 /* Parent Operations */, + 001E6590B77AEBE5AF07A503AA924E98 /* Upload */, ); - name = Delete; - path = Delete; + name = Operations; + path = Harmony/Operations; sourceTree = ""; }; 22DE5B6EE14741DE1391CCA0302DC3F5 /* backends */ = { @@ -4911,6 +4937,20 @@ path = xxHash; sourceTree = ""; }; + 2AB8D226290B9CF83D49DFA25B991FD1 /* Core Data */ = { + isa = PBXGroup; + children = ( + FB7DA90822908B1EECA492E051D817CE /* LocalRecord.swift */, + 7069F5F77B1F8E0612B5D6D93216ADC1 /* ManagedAccount.swift */, + F1A28AB6CD59A0C38D968D07D5256E8F /* ManagedRecord.swift */, + 8569A924AD407A2A1010E75E282E1BBE /* RecordRepresentation.swift */, + 50121691E9EC013F90B1E17BE7DC34D2 /* RemoteFile.swift */, + 94A7A1A69CC1C854DB18E279A44F7DC4 /* RemoteRecord.swift */, + ); + name = "Core Data"; + path = "Core Data"; + sourceTree = ""; + }; 2ADDFE53CB14149EA0FF19210E668B03 /* Resources */ = { isa = PBXGroup; children = ( @@ -4963,18 +5003,6 @@ path = ../Cores/GBCDeltaCore; sourceTree = ""; }; - 2F0EE6FCF6D8D0B16B4BCB67BFB864DC /* Harmony-Drive */ = { - isa = PBXGroup; - children = ( - 5EBF9C7AF0DBEF9D5C106E02B9B28CE6 /* DriveService.swift */, - 83EAB31E2D8E6844C8AD8F3F95F9ABB1 /* DriveService+Files.swift */, - 0E4DCE2A6F12D890D38A83939413D307 /* DriveService+Records.swift */, - ABE1F0BA1ED297C8F6D7E93A5DA90FAA /* DriveService+Versions.swift */, - BF572ED34716178595A4BF25353FDAFF /* Extensions */, - ); - name = "Harmony-Drive"; - sourceTree = ""; - }; 2F5BCA25C3A0B1615A98335051871A9D /* SoundTouch */ = { isa = PBXGroup; children = ( @@ -5082,17 +5110,6 @@ name = Resources; sourceTree = ""; }; - 317F2209193ECAC1400B252623ABB9E8 /* Download */ = { - isa = PBXGroup; - children = ( - 5C643171D31A2715E757D5F42F63F495 /* DownloadRecordOperation.swift */, - 450775B09B5A404AD4A5910F22DD06C9 /* DownloadRecordsOperation.swift */, - 8B914A55A521830F330AED535B8835A5 /* FinishDownloadingRecordsOperation.swift */, - ); - name = Download; - path = Download; - sourceTree = ""; - }; 31DA7F6969B04ECA08F4A532B26E06E2 /* Game */ = { isa = PBXGroup; children = ( @@ -5161,6 +5178,17 @@ path = "SNESDeltaCore/Controller Skin"; sourceTree = ""; }; + 382704E6D84D7069297785F0DDCC03F4 /* Download */ = { + isa = PBXGroup; + children = ( + B90B39FD8918D51E615C0129F1E17120 /* DownloadRecordOperation.swift */, + DC18C127E9733ADD4EB2929DE3E7710B /* DownloadRecordsOperation.swift */, + 2BEA4A46B7A6178A64F37902F1134C08 /* FinishDownloadingRecordsOperation.swift */, + ); + name = Download; + path = Download; + sourceTree = ""; + }; 398DEDE00FCE7A23BCCBAFD53B0CCC44 /* Support Files */ = { isa = PBXGroup; children = ( @@ -5449,6 +5477,19 @@ path = "../Target Support Files/Fabric"; sourceTree = ""; }; + 3E4EE3A659C7A607FB8FE86308345669 /* Support Files */ = { + isa = PBXGroup; + children = ( + A3F1946AC819207D56F57FB40F4E7379 /* Harmony.modulemap */, + D065B11C91E406287214D3893496F978 /* Harmony.xcconfig */, + BF557E1265E4D79D27F20185D2FE7FCA /* Harmony-dummy.m */, + 356CE06C9954BC6FCEF4ADADFE25807C /* Harmony-prefix.pch */, + DB0FA0FEE9F8742B64189133F4ACA01C /* Harmony-umbrella.h */, + ); + name = "Support Files"; + path = "../../Pods/Target Support Files/Harmony"; + sourceTree = ""; + }; 3F700DBFA82D8C166CD3EC7325115263 /* Unix */ = { isa = PBXGroup; children = ( @@ -5459,28 +5500,6 @@ path = Unix; sourceTree = ""; }; - 4011A58C5A76E9F8A749065891C1F60D /* Extensions */ = { - isa = PBXGroup; - children = ( - 723AFC03DAB1F2E32CB45A4F3ED5FD35 /* AnyKeyPath+StringValue.swift */, - 4F6407C6FBA4E320D564FF013EBEDCF4 /* Dictionary+Sequence.swift */, - 7995A2AC9E3D083B7373FC9209B625BD /* HarmonyMetadataKey+Keys.swift */, - 103B62F4A02A6FB81B5873123E3E4EAE /* JSONDecoder+ManagedObjectContext.swift */, - 8D3AABE38A819F833123F47E08B8F6F8 /* KeyedContainers+ManagedValues.swift */, - 2E9FF9B4A3C5693A9C7DC7179EB1F138 /* ManagedRecord+Predicates.swift */, - E04D3872EDD7D06663BEBFB1BB899C3E /* ManagedRecord+Uploading.swift */, - 9B7E86F1B639A123C10CF5C402F415B2 /* NSError+LocalizedFailureDescription.swift */, - CD4A28E12A0F4CA5FB5F949171A2104B /* NSManagedObject+Conveniences.swift */, - 3538A2EB4EDA6929B5D32A095FD21C6E /* NSManagedObject+Harmony.swift */, - E90308ECF32EF009E33F9EEBA9B7C84A /* NSManagedObjectContext+Harmony.swift */, - 36F0EA19BE634583B78B77F370DF9C88 /* NSPersistentStore+Configuration.swift */, - 87263EF46CC8CB36CF6CC2C7E1D63E62 /* Result+Success.swift */, - D030FA73AD1DA503048D364090F865A1 /* UserDefaults+Harmony.swift */, - ); - name = Extensions; - path = Harmony/Extensions; - sourceTree = ""; - }; 40A84AA27DDEF94E5A8D58F51C2BA1FB /* DepthBufferRender */ = { isa = PBXGroup; children = ( @@ -5503,6 +5522,28 @@ path = rdp; sourceTree = ""; }; + 424A8EFED8FC8457FAAA88DDB1A3076B /* Extensions */ = { + isa = PBXGroup; + children = ( + 052A3E699D4705B394163442DB2312EA /* AnyKeyPath+StringValue.swift */, + 519375E564B6CC30F67B164458FBFF55 /* Dictionary+Sequence.swift */, + F7B4E7C9B7F6131BC57241CAF0E2FDD2 /* HarmonyMetadataKey+Keys.swift */, + 6E00DF6A9A757414356C0B15990E587B /* JSONDecoder+ManagedObjectContext.swift */, + A2E120995C0F4075BADA7CA8334C6238 /* KeyedContainers+ManagedValues.swift */, + 991212BCD23A0E8E76331B80D2D2CBA8 /* ManagedRecord+Predicates.swift */, + E8962CCBB4791075DC49B171A0539E42 /* ManagedRecord+Uploading.swift */, + 290BCCDEE8D33B086E36DBC4AAE5C4AB /* NSError+LocalizedFailureDescription.swift */, + 3F35A6C365B629A2562A7BDA3B96F82C /* NSManagedObject+Conveniences.swift */, + 23C697EC446C898565842A822356BD49 /* NSManagedObject+Harmony.swift */, + 5967846BA7AC45E23C7E6339832E7D07 /* NSManagedObjectContext+Harmony.swift */, + B3A1CF8E39DF40FA5839CDC129FE69F5 /* NSPersistentStore+Configuration.swift */, + 4A78FCF77292DF45A5D9BC7C6476C356 /* Result+Success.swift */, + 310FBB612ACE362141E6D805B3FC303A /* UserDefaults+Harmony.swift */, + ); + name = Extensions; + path = Harmony/Extensions; + sourceTree = ""; + }; 4548026C99C855F1FE979CC41F7447FB /* MFi */ = { isa = PBXGroup; children = ( @@ -5617,6 +5658,16 @@ path = Mupen64Plus; sourceTree = ""; }; + 4C30AF9A1BDB968C30E36B5ECFF895BF /* Conflict */ = { + isa = PBXGroup; + children = ( + 961E505AC749C4E7A72842C5B3EA73E5 /* ConflictRecordOperation.swift */, + A4C88694613725E9E864161B85D65525 /* ConflictRecordsOperation.swift */, + ); + name = Conflict; + path = Conflict; + sourceTree = ""; + }; 4C425D86DABBA56A5D636531DF67B841 /* src */ = { isa = PBXGroup; children = ( @@ -5737,16 +5788,6 @@ path = arm; sourceTree = ""; }; - 574CDF4EB0D53F722AAC38570CBB99D8 /* Types */ = { - isa = PBXGroup; - children = ( - F8D9AB238C0D8C37F7486D77CC4E9BF4 /* Errors.swift */, - F68723D87D569E987F572CCD08093F61 /* SyncProgress.swift */, - ); - name = Types; - path = Harmony/Types; - sourceTree = ""; - }; 576D355E80184726B5E5617C78B495FA /* Support Files */ = { isa = PBXGroup; children = ( @@ -5806,16 +5847,6 @@ path = "../Target Support Files/SMCalloutView"; sourceTree = ""; }; - 5978A3E51B83BDC68F09D948901801C3 /* Core Data */ = { - isa = PBXGroup; - children = ( - 9DD6E96B0D1C5E0989F7B0041FA8E00A /* MergePolicy.swift */, - 8058D48F8CF8A2D21FE0EEF65FE6BFF6 /* RecordController.swift */, - ); - name = "Core Data"; - path = "Harmony/Core Data"; - sourceTree = ""; - }; 5AFFA1D176342C078F56607E981895BA /* src */ = { isa = PBXGroup; children = ( @@ -5838,7 +5869,7 @@ 4DFFAC4CA66D2E2736BA76CDCCCF81C7 /* DSDeltaCore */, 64EC8A3CBA22A4108C7282FC346922D8 /* GBADeltaCore */, 2EF8319FB7BC57D7AD40FF9EA981762E /* GBCDeltaCore */, - 7A9143EA978F2874CB0E86F210D8C6F7 /* Harmony */, + D9C182BCA51D0F02455E4225EEC38644 /* Harmony */, E7B2E4DD5F27C831FA39A6730358A66F /* MelonDSDeltaCore */, 3521A84F3F4AAF5546D9FF8E217DCBD3 /* N64DeltaCore */, 9CC3CFD66C24CB591DDBCE5BC51A0399 /* NESDeltaCore */, @@ -5987,18 +6018,6 @@ path = config; sourceTree = ""; }; - 67425911E69D42057DB264EDBE35E135 /* Upload */ = { - isa = PBXGroup; - children = ( - 86E0555011765103678D4A46B0D7CD30 /* FinishUploadingRecordsOperation.swift */, - 7959936C4C72BFF6C57D269BD58A6A92 /* PrepareUploadingRecordsOperation.swift */, - B236B2DB89B26DE7B16E762CF3080C5A /* UploadRecordOperation.swift */, - 5A684B9BC0FD9B61CE70469E6CF6BA3C /* UploadRecordsOperation.swift */, - ); - name = Upload; - path = Upload; - sourceTree = ""; - }; 6762DBCA93FC65CDC183149D19D8E6E0 /* SFML */ = { isa = PBXGroup; children = ( @@ -6009,14 +6028,6 @@ path = SFML; sourceTree = ""; }; - 68F91761F4B45747210D968A81C0AF84 /* Pod */ = { - isa = PBXGroup; - children = ( - 3E569C8B365BF92FAE9F87642393D402 /* Harmony.podspec */, - ); - name = Pod; - sourceTree = ""; - }; 691E8906036D2728DB1DF8BA55426C61 /* ini */ = { isa = PBXGroup; children = ( @@ -6133,6 +6144,17 @@ path = SMCalloutView; sourceTree = ""; }; + 6F9174B7CE32B37F77CB2FA0FA66F55B /* Protocols */ = { + isa = PBXGroup; + children = ( + 8F9649F7A3943E90B3C543DF8F4BF8C4 /* RecordEntry.swift */, + 47AC7C6297BC82A3BCC719AAEDC64AC4 /* Service.swift */, + 6C0CFDE9A393129B54C5103C27E8227B /* Syncable.swift */, + ); + name = Protocols; + path = Harmony/Protocols; + sourceTree = ""; + }; 6FBA49B1C6CAD3E9EDC15F4663849FC0 /* Support Files */ = { isa = PBXGroup; children = ( @@ -6188,19 +6210,6 @@ path = libMupen64Plus; sourceTree = ""; }; - 73A22CCBEF19B1B200ADA20DA0EAD4C7 /* Extensions */ = { - isa = PBXGroup; - children = ( - 13E354663056D2C09F9EBDE7F3F20EF4 /* PropertyGroup+Harmony.swift */, - EB870F4AD39D4A4E00866F16DBDCEE49 /* RemoteFile+Dropbox.swift */, - 7A95544E49AAD44E88BF2C9268C9BF94 /* RemoteRecord+Dropbox.swift */, - 439530753701672255509E76BB1AC1D7 /* Result+Dropbox.swift */, - C0F453A50C9E6D70D2C15CD2F4D9BE68 /* Version+Dropbox.swift */, - ); - name = Extensions; - path = "Backends/Dropbox/Harmony-Dropbox/Extensions"; - sourceTree = ""; - }; 73AC65775484D790A4513276554D93B0 /* UI */ = { isa = PBXGroup; children = ( @@ -6274,27 +6283,6 @@ path = "visualboyadvance-m"; sourceTree = ""; }; - 7A9143EA978F2874CB0E86F210D8C6F7 /* Harmony */ = { - isa = PBXGroup; - children = ( - 94188727366A8D8FB099D152B9B5514A /* Harmony.h */, - E0D8C051806BA9A8817550D4A2D2B252 /* SyncCoordinator.swift */, - 5978A3E51B83BDC68F09D948901801C3 /* Core Data */, - 4011A58C5A76E9F8A749065891C1F60D /* Extensions */, - 2F0EE6FCF6D8D0B16B4BCB67BFB864DC /* Harmony-Drive */, - 18727D12B38DBE263195F41504FA8D5C /* Harmony-Dropbox */, - CD6F15D7637CCCEAC5C7E93368FACE0A /* Model */, - 9B2666DEE92A53F3397CF077560040FD /* Operations */, - 68F91761F4B45747210D968A81C0AF84 /* Pod */, - FE205864B17A0FD3D1D5764C22BA82AF /* Protocols */, - 1EB1AC2AB2C378551CD37458FB961332 /* Resources */, - DC206325D48CA7D2F7AA08D057B3E7A3 /* Support Files */, - 574CDF4EB0D53F722AAC38570CBB99D8 /* Types */, - ); - name = Harmony; - path = ../External/Harmony; - sourceTree = ""; - }; 7C552940D03D37E9B617BAD120CF27AC /* Pod */ = { isa = PBXGroup; children = ( @@ -6451,16 +6439,6 @@ path = libpng; sourceTree = ""; }; - 81ED3EB61775497EBAAF8647837C8FEE /* Parent Operations */ = { - isa = PBXGroup; - children = ( - 5967CB93E1B68FCF175E97CD13D10CFD /* BatchRecordOperation.swift */, - 87039339C5C272F9501B594DB154C3A4 /* RecordOperation.swift */, - ); - name = "Parent Operations"; - path = "Parent Operations"; - sourceTree = ""; - }; 82A9E1362EC484F9CE92176528B57B01 /* GoogleSignIn */ = { isa = PBXGroup; children = ( @@ -6517,6 +6495,17 @@ path = DeltaCore/Extensions; sourceTree = ""; }; + 8754E55E2A00024A1F39E7399584652C /* Types */ = { + isa = PBXGroup; + children = ( + DD616B770BEB5DC114E3497D623A5389 /* AnyCodable.swift */, + 3774F3AE37BF4A348A3265BF0F216FF6 /* Errors.swift */, + CB465A950FD11985B4BFE9FE07618EB1 /* SyncProgress.swift */, + ); + name = Types; + path = Harmony/Types; + sourceTree = ""; + }; 87679170C148493B95764D8305DB2180 /* GoogleAPIClientForREST */ = { isa = PBXGroup; children = ( @@ -6528,6 +6517,18 @@ path = GoogleAPIClientForREST; sourceTree = ""; }; + 8791165719F7131F40DAF9B541556CA4 /* Extensions */ = { + isa = PBXGroup; + children = ( + 79101053BF84721BE4614C362B727D7C /* RemoteFile+File.swift */, + 4629E795167FBFC90DB98DD3B4D6104D /* RemoteRecord+File.swift */, + 4DA9490D97454792007147110EAEE8A3 /* Result+Drive.swift */, + 38132CAD1037F035FD8F3D63BA53AD28 /* Version+Revision.swift */, + ); + name = Extensions; + path = "Backends/Drive/Harmony-Drive/Extensions"; + sourceTree = ""; + }; 885211DC3EA164964F3FBE436401DA5D /* Support Files */ = { isa = PBXGroup; children = ( @@ -6738,16 +6739,6 @@ path = src; sourceTree = ""; }; - 93D14626198EF3DDF825B7DCAE1B5EF6 /* Conflict */ = { - isa = PBXGroup; - children = ( - DE3F53289236C150F14F4B85B876D904 /* ConflictRecordOperation.swift */, - E4DB7F5247E41A8DF960FAFF4F52DF47 /* ConflictRecordsOperation.swift */, - ); - name = Conflict; - path = Conflict; - sourceTree = ""; - }; 946600E193904C9DB5617CD40010FBF1 /* Types */ = { isa = PBXGroup; children = ( @@ -6801,6 +6792,19 @@ path = Bridge; sourceTree = ""; }; + 9843F685419C7908349E68CC411AC0CD /* Extensions */ = { + isa = PBXGroup; + children = ( + E2399D1F90D743D4012746C27EF34903 /* PropertyGroup+Harmony.swift */, + 30DFD8293FC858D3A24E23C9C67CBD30 /* RemoteFile+Dropbox.swift */, + 3B1B0BE34876BC8785519C94EC3E4ED1 /* RemoteRecord+Dropbox.swift */, + D684261B02E9E876FF7F2C19DAA8B187 /* Result+Dropbox.swift */, + 9F3E6F8779962F4C9E9EF3F90EE73FC3 /* Version+Dropbox.swift */, + ); + name = Extensions; + path = "Backends/Dropbox/Harmony-Dropbox/Extensions"; + sourceTree = ""; + }; 985A626901535F1CAAB0DF3082FFA4C7 /* GLideN64 */ = { isa = PBXGroup; children = ( @@ -6840,23 +6844,6 @@ path = common; sourceTree = ""; }; - 9B2666DEE92A53F3397CF077560040FD /* Operations */ = { - isa = PBXGroup; - children = ( - EA23C36C890553725FA9BBEBC0789829 /* Operation.swift */, - 6118EFDD077B9EC964912181660B7A95 /* ServiceOperation.swift */, - 47D47AFCF1385842685E8C07121C8BE8 /* SyncRecordsOperation.swift */, - 93D14626198EF3DDF825B7DCAE1B5EF6 /* Conflict */, - 22567F834DFA419A07D7E3214BEC2733 /* Delete */, - 317F2209193ECAC1400B252623ABB9E8 /* Download */, - 0C712C8C7BD3A3BA52CD0F4A84F011CE /* Misc. */, - 81ED3EB61775497EBAAF8647837C8FEE /* Parent Operations */, - 67425911E69D42057DB264EDBE35E135 /* Upload */, - ); - name = Operations; - path = Harmony/Operations; - sourceTree = ""; - }; 9CC3CFD66C24CB591DDBCE5BC51A0399 /* NESDeltaCore */ = { isa = PBXGroup; children = ( @@ -6871,18 +6858,26 @@ path = ../Cores/NESDeltaCore; sourceTree = ""; }; - 9E557AD5A2E8A98E7AB3378D22A4DFC5 /* Core Data */ = { + 9CECA84FC98F5FD2F0EA88E5F3B30045 /* Misc. */ = { isa = PBXGroup; children = ( - CAA5774FC0B40EC779613DB64E15C046 /* LocalRecord.swift */, - DE50DAF15EC75FA249C291622A4739DE /* ManagedAccount.swift */, - C5BE21537778C287EB7835EE5A1CEA97 /* ManagedRecord.swift */, - CA7701E75D51BBB26AF25CB686CB48A8 /* RecordRepresentation.swift */, - E9A5EDA091E457F4BF1FF9D5715E8EF2 /* RemoteFile.swift */, - AD29A29166068991BD1FCD1B5147A8F9 /* RemoteRecord.swift */, + 3C9D8CA40B82EB0DF55E9C6E404421E2 /* FetchRemoteRecordsOperation.swift */, + 7AA4684851D7064C85599D690E6A6446 /* UpdateRecordMetadataOperation.swift */, ); - name = "Core Data"; - path = "Core Data"; + name = Misc.; + path = Misc.; + sourceTree = ""; + }; + 9E1D19027A3AA6B3F1D6F9E8E6E0DA7B /* Harmony-Dropbox */ = { + isa = PBXGroup; + children = ( + 783DB19663500C36D360E25061D1E639 /* DropboxService.swift */, + DA7EF136E451A89F311BC3EB6F92C187 /* DropboxService+Files.swift */, + CF523761E770A7667BC9871C019D4CB0 /* DropboxService+Records.swift */, + A4FA4F1DB645204506499791AADA8F23 /* DropboxService+Versions.swift */, + 9843F685419C7908349E68CC411AC0CD /* Extensions */, + ); + name = "Harmony-Dropbox"; sourceTree = ""; }; 9EB66C10805301C308E5ED2C2872CA82 /* Network */ = { @@ -7060,6 +7055,15 @@ path = "../../Pods/Target Support Files/MelonDSDeltaCore"; sourceTree = ""; }; + A4B6464AC12838EB8E97E4CBD6570B49 /* Migrations */ = { + isa = PBXGroup; + children = ( + B45A648E7D344062C1077DFC7FC002ED /* HarmonyToHarmony2.xcmappingmodel */, + ); + name = Migrations; + path = "Harmony/Model/Core Data/Migrations"; + sourceTree = ""; + }; A4F29DFA19002FD428FE685BC275BF0A /* Bridge */ = { isa = PBXGroup; children = ( @@ -7140,6 +7144,14 @@ path = "DeltaCore/Game Controllers"; sourceTree = ""; }; + AA4BE0AD97E3A3715C56CD38E07A1FCF /* Pod */ = { + isa = PBXGroup; + children = ( + 1E343C02528AB8BD5CDD167AC66BD567 /* Harmony.podspec */, + ); + name = Pod; + sourceTree = ""; + }; AADAFBFD69FC84E875D7A00CA0188FDE /* osal */ = { isa = PBXGroup; children = ( @@ -7450,6 +7462,16 @@ path = Window; sourceTree = ""; }; + BC634049BBE359DA75A3DFBCB470CB72 /* Delete */ = { + isa = PBXGroup; + children = ( + F0EC6BDB76040B5A332BFBE292E094E1 /* DeleteRecordOperation.swift */, + 0419ACD1F07D5887DBDF37B3A5C7BFFD /* DeleteRecordsOperation.swift */, + ); + name = Delete; + path = Delete; + sourceTree = ""; + }; BDDCAA316B6C4E2A467D14C79E23372C /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -7496,18 +7518,6 @@ path = Model; sourceTree = ""; }; - BF572ED34716178595A4BF25353FDAFF /* Extensions */ = { - isa = PBXGroup; - children = ( - 5AF44E99CDEC34FBD91AFEE4DACFD88A /* RemoteFile+File.swift */, - D347B9730DA2524DAF8E0C7AEDC8EEEA /* RemoteRecord+File.swift */, - 62D7AE2A6BB60EE680F208CA7652859A /* Result+Drive.swift */, - B7835A1CFAD26F5CED24394F9EB07DBD /* Version+Revision.swift */, - ); - name = Extensions; - path = "Backends/Drive/Harmony-Drive/Extensions"; - sourceTree = ""; - }; BFBD0BD013524908700174DABA95B397 /* N64DeltaCore-RSP */ = { isa = PBXGroup; children = ( @@ -7735,19 +7745,6 @@ path = Alamofire; sourceTree = ""; }; - CD6F15D7637CCCEAC5C7E93368FACE0A /* Model */ = { - isa = PBXGroup; - children = ( - 099938FEDA9E30DB8F316FD35D3A7E39 /* Account.swift */, - 527AC22A3208696A410615506A968BEF /* File.swift */, - 831586913D802CF0F3BD70D6BB259E5B /* Record.swift */, - EDCA85256EA26CE4DC88337487128581 /* Version.swift */, - 9E557AD5A2E8A98E7AB3378D22A4DFC5 /* Core Data */, - ); - name = Model; - path = Harmony/Model; - sourceTree = ""; - }; CD7BB577140F671088CB14E3EA3B920F /* RSP */ = { isa = PBXGroup; children = ( @@ -7805,6 +7802,15 @@ path = include; sourceTree = ""; }; + D409593572681CFFE1F6CDE1C961DB35 /* Resources */ = { + isa = PBXGroup; + children = ( + C8F4F9DD8ACA48C0AFBEA6D79C4E7B87 /* Harmony.xcdatamodeld */, + A4B6464AC12838EB8E97E4CBD6570B49 /* Migrations */, + ); + name = Resources; + sourceTree = ""; + }; D57C29819F5C998665553943DA337E3D /* apu */ = { isa = PBXGroup; children = ( @@ -7882,6 +7888,27 @@ name = Frameworks; sourceTree = ""; }; + D9C182BCA51D0F02455E4225EEC38644 /* Harmony */ = { + isa = PBXGroup; + children = ( + 797F664369496B12E69C8B551FACBF47 /* Harmony.h */, + 81541D03368976297C41B931C452EBE6 /* SyncCoordinator.swift */, + 1DE09E658F2535C5DCC2155783838338 /* Core Data */, + 424A8EFED8FC8457FAAA88DDB1A3076B /* Extensions */, + E2609F2B1B538E1589CD74A7E3558F42 /* Harmony-Drive */, + 9E1D19027A3AA6B3F1D6F9E8E6E0DA7B /* Harmony-Dropbox */, + 06CBA17FA9DE47E2709938867FB397D9 /* Model */, + 2276219BB9DA3393AF52B539EB26642E /* Operations */, + AA4BE0AD97E3A3715C56CD38E07A1FCF /* Pod */, + 6F9174B7CE32B37F77CB2FA0FA66F55B /* Protocols */, + D409593572681CFFE1F6CDE1C961DB35 /* Resources */, + 3E4EE3A659C7A607FB8FE86308345669 /* Support Files */, + 8754E55E2A00024A1F39E7399584652C /* Types */, + ); + name = Harmony; + path = ../External/Harmony; + sourceTree = ""; + }; DA240A8FD97B3ED8577A771641432A34 /* Full */ = { isa = PBXGroup; children = ( @@ -7928,19 +7955,6 @@ path = GoogleToolboxForMac; sourceTree = ""; }; - DC206325D48CA7D2F7AA08D057B3E7A3 /* Support Files */ = { - isa = PBXGroup; - children = ( - 50820F9A436F4E4AA63F4442C71C4DBC /* Harmony.modulemap */, - 0B25891B457EEC5EC2A639DA8DAE0EBE /* Harmony.xcconfig */, - 238AA279772C644CC943D63E37C7AA3A /* Harmony-dummy.m */, - DC240B06FEB31AD03CBC7B80148A3097 /* Harmony-prefix.pch */, - C84F53DDEC96ABDB4E99816C838005FD /* Harmony-umbrella.h */, - ); - name = "Support Files"; - path = "../../Pods/Target Support Files/Harmony"; - sourceTree = ""; - }; DD17A76DA46CC1E07FEFBDFF7D2504B6 /* libtests */ = { isa = PBXGroup; children = ( @@ -8016,6 +8030,18 @@ path = subprojects; sourceTree = ""; }; + E2609F2B1B538E1589CD74A7E3558F42 /* Harmony-Drive */ = { + isa = PBXGroup; + children = ( + D0A4054A19C785C5941A4034583DA6A0 /* DriveService.swift */, + 5D76DB70EB35703F979D1D54BF27EA95 /* DriveService+Files.swift */, + C44004DB6135610C776BB7224A6E224E /* DriveService+Records.swift */, + 87FB4717B06B3A156717213C654A8EDF /* DriveService+Versions.swift */, + 8791165719F7131F40DAF9B541556CA4 /* Extensions */, + ); + name = "Harmony-Drive"; + sourceTree = ""; + }; E2C184A7035D0D9FC418CF9E7508CAAC /* win32 */ = { isa = PBXGroup; children = ( @@ -8594,17 +8620,6 @@ path = inc; sourceTree = ""; }; - FE205864B17A0FD3D1D5764C22BA82AF /* Protocols */ = { - isa = PBXGroup; - children = ( - 699F79983949D91377333D55142CEB7E /* RecordEntry.swift */, - 9EA61FA6FDF258367C544BA1A701348F /* Service.swift */, - 0F82BADF1B128B29E800481350228566 /* Syncable.swift */, - ); - name = Protocols; - path = Harmony/Protocols; - sourceTree = ""; - }; FED68DD8032AAB116053C7ECE64534FC /* snes9x */ = { isa = PBXGroup; children = ( @@ -8665,6 +8680,16 @@ /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ + 08C0BEA104A5B7710EB1D588A1D4FA90 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 94B33505CF3A1BE32B17E489FE76A6B2 /* DBChunkInputStream.h in Headers */, + 0C3F4F7359E712E4692A58EE52C2B9A5 /* SwiftyDropbox-umbrella.h in Headers */, + F69A6A20947A7C23CF812863BFF4483F /* SwiftyDropbox.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 08E54C760FF35045FDC8574E38EA5E6A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -8736,12 +8761,12 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 1720941E471683DB933EABFBF20395A1 /* Headers */ = { + 1CCEDD606534505AA153A1C41923FE85 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CE8D08D29BB0A4769D2C276605AFB50F /* Harmony-umbrella.h in Headers */, - B0B08B97A524F8D48FDDA2249AEAD6ED /* Harmony.h in Headers */, + 230AE09B2E4FE8B7D8EF4C5B8D7D3893 /* Harmony-umbrella.h in Headers */, + 12B839B9513294FF8F939FA6867BD61C /* Harmony.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -9702,6 +9727,67 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 7BB3792A257D73BCB5C4BAB9B3C059F2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 963D08061D6DF72524CA6CFCF7BAA942 /* NSBundle+Extensions.h in Headers */, + A800A1840F37BA211A060AAF728EBA20 /* NSConstraintConflict+Conveniences.h in Headers */, + A9EE7067ED78CB80B06B59D81D7B5F06 /* NSFileManager+URLs.h in Headers */, + FAAF41C09F80BDD60CCC848E2C6CADC8 /* NSLayoutConstraint+Edges.h in Headers */, + 52C7F165446EDEE8B62EDF1B97C036C8 /* NSPredicate+Search.h in Headers */, + B12E9B494F018B8188AA3733CB1A377C /* NSString+Localization.h in Headers */, + 3DD34B16C294C0471715AFA306DE71E5 /* NSUserDefaults+DynamicProperties.h in Headers */, + 71EA74C198A648D870637C95EEE638C4 /* Roxas-umbrella.h in Headers */, + 6E67518B517E043032C39BA7459F1C1B /* Roxas.h in Headers */, + B10A0533A08E62039D1EBA9FAEA985F0 /* RSTActivityIndicating.h in Headers */, + 0DC975985B8F1467A6B707AC4E1C2926 /* RSTArrayDataSource.h in Headers */, + 7C8ECB2C3F0243840D3FA7B3C4C83601 /* RSTBlockOperation.h in Headers */, + 53ACC9A0EABD8ABE6F296A8E1405DFB0 /* RSTCellContentCell.h in Headers */, + 782D25D106A1BBD0EAF71785CD156EEC /* RSTCellContentChange.h in Headers */, + FA25C7F087E121D908F0098AD1C50E04 /* RSTCellContentChangeOperation.h in Headers */, + 2795FDE9B8407649C0D0DA00EA13DDE4 /* RSTCellContentDataSource.h in Headers */, + 5832FA12F7FAF31EE942294C35ED1C97 /* RSTCellContentDataSource_Subclasses.h in Headers */, + 55698521F5489EC8E9F7F03B2448FB94 /* RSTCellContentPrefetchingDataSource.h in Headers */, + 90EA01976EF29126F9C0A2510C018A1C /* RSTCellContentView.h in Headers */, + 53193612E069ABF8B641F410AA3D7DFB /* RSTCollectionViewCell.h in Headers */, + 24A17315DA887C22096FC688E5D1B0A5 /* RSTCollectionViewGridLayout.h in Headers */, + D1185203EAC27C426C8C8BC670E7EDBC /* RSTCompositeDataSource.h in Headers */, + 8E39317C883C5861D6B1F18C0172AEA9 /* RSTConstants.h in Headers */, + 4A58DBB2D8EA4F6F91CEDF8D53DEE181 /* RSTDefines.h in Headers */, + 48C0F91A06EFA229466AA6629127908E /* RSTDynamicDataSource.h in Headers */, + 6386966113107ED98A186F6FD7CE849D /* RSTError.h in Headers */, + 5E34D71A8EADC6BA23C17B97A689613A /* RSTFetchedResultsDataSource.h in Headers */, + F957B27022E81B27F462DA16F811EC71 /* RSTHasher.h in Headers */, + 7791F35B4A38E6CE348A2D1DE92352E5 /* RSTHelperFile.h in Headers */, + 52FB346983267085916C72E280E1820F /* RSTLaunchViewController.h in Headers */, + FD6E5C9332C4C504221B108F7EE6D94D /* RSTLoadOperation.h in Headers */, + B82CFE3D00673EFAA1BD769B6F0BD071 /* RSTNavigationController.h in Headers */, + 1BA4D4603B19B50F04900B7E9882ACDD /* RSTNibView.h in Headers */, + 6DAE486B1976E8FC94C3256134BA7B05 /* RSTOperation.h in Headers */, + C2FBF7FC45FC7D939AE9353D3D92A9C5 /* RSTOperation_Subclasses.h in Headers */, + 0D6B6227CBF123C4682BB5363A8C3B0E /* RSTOperationQueue.h in Headers */, + 946997BC2FF920A87216504E55ADD4F4 /* RSTPersistentContainer.h in Headers */, + 01C659C28AC0025A7B90A5DAC9C03637 /* RSTPlaceholderView.h in Headers */, + B23FBC2C0864A706F2B040570CA6D007 /* RSTRelationshipPreservingMergePolicy.h in Headers */, + A71FE4BFE3355509B1E49E5FF62AF3B4 /* RSTSearchController.h in Headers */, + 62B1CBFEC1B40F6F9708AC34C58AAC14 /* RSTSeparatorView.h in Headers */, + D014F5EEEC93795C92F386BC05F90FD2 /* RSTTintedImageView.h in Headers */, + 7887DE6900C9CE9E0DB8699DB9CA66F8 /* RSTToastView.h in Headers */, + 82E42FADDE2E8D30E01D4166E4A99A00 /* UIAlertAction+Actions.h in Headers */, + BD58B4A65AB0C520ECF7C238ECCBCF8E /* UICollectionView+CellContent.h in Headers */, + B77426E1F1C9948F94D5560AECAEB1D6 /* UICollectionViewCell+CellContent.h in Headers */, + A0E4E4D9541C166B40A5F0A18C477AF6 /* UICollectionViewCell+Nibs.h in Headers */, + 2518BA672E36DDD6DE3A2DF758E20708 /* UIImage+Manipulation.h in Headers */, + 92AE3AB8B3041EA1F3D14AD77D175CD2 /* UIKit+ActivityIndicating.h in Headers */, + F6D17386A138C8E136608ABA404D78B5 /* UISpringTimingParameters+Conveniences.h in Headers */, + A1262BC89A1B6454353CAA76F856D057 /* UITableView+CellContent.h in Headers */, + 83DE38F02EEC6BEBD7473F5DF8D5FC3D /* UITableViewCell+CellContent.h in Headers */, + E0418EF27E0C644157D0E9ECBAC8C1A9 /* UIView+AnimatedHide.h in Headers */, + 80A76846396E3B23414851765E6CD0C7 /* UIViewController+TransitionState.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8BC7094B94232EDB7F4C22F043B8E6A9 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -9916,77 +10002,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C93889FA7331EDB51173479E3F8F7C58 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 897E17C6F6C366137126E12E5EDC926A /* NSBundle+Extensions.h in Headers */, - BA8DAE2B382564F0C1EAFA4E759CADAD /* NSConstraintConflict+Conveniences.h in Headers */, - BD21247A32EF0C2EACBF439E6C4B9209 /* NSFileManager+URLs.h in Headers */, - EC28DAD95829E5C9E6307A77F8F517FF /* NSLayoutConstraint+Edges.h in Headers */, - 96F221FEFB1BDFEEDF3D78ECBD3693BB /* NSPredicate+Search.h in Headers */, - BBC683E778EBD7924866C7857B19D11A /* NSString+Localization.h in Headers */, - B3279DD4DDA04F5DCA2F5B03E29B9A6D /* NSUserDefaults+DynamicProperties.h in Headers */, - 23BF54CE4938EDB1F46BFB0E71C0C87B /* Roxas-umbrella.h in Headers */, - 326048AB59E512995FA92BFB0D4005C9 /* Roxas.h in Headers */, - FB431B0FE84CE918B28A6CEC02DF7FEA /* RSTActivityIndicating.h in Headers */, - 0DE37FB9E50E1562BF60D5BFA8252BA7 /* RSTArrayDataSource.h in Headers */, - EFD770F15B52B41E2DBEEEECAD735D98 /* RSTBlockOperation.h in Headers */, - 7A4B501942CA119ADB0CC7E54FC735B5 /* RSTCellContentCell.h in Headers */, - 8BD82471835BF88ECAF163D6FCA9A762 /* RSTCellContentChange.h in Headers */, - 857B3B04B9AB4B94CC5BB714EACC9290 /* RSTCellContentChangeOperation.h in Headers */, - BCBDF12AD11385D21AD3AA103D8B4EB6 /* RSTCellContentDataSource.h in Headers */, - 8434E5B141D1791B363651A182CA1B5E /* RSTCellContentDataSource_Subclasses.h in Headers */, - 064F0446DD0F453314D4002599D238F5 /* RSTCellContentPrefetchingDataSource.h in Headers */, - BED24F03394D6879BAFB6D521219899C /* RSTCellContentView.h in Headers */, - FF64C067DBF8F76E97824763C8259B99 /* RSTCollectionViewCell.h in Headers */, - B18BDE9F23964986DC1C252B20A2B80F /* RSTCollectionViewGridLayout.h in Headers */, - DD965F38F3926F23D15FF807E4486928 /* RSTCompositeDataSource.h in Headers */, - F984AA7029A105CBC169C0E24725E036 /* RSTConstants.h in Headers */, - A7610ADD4D3B95C8ECDCF6ED0324632C /* RSTDefines.h in Headers */, - 4DC932B5F4D7AA22146806DD1090F1DF /* RSTDynamicDataSource.h in Headers */, - F28DDFAB4A2E61C4361B1F25F9FC031C /* RSTError.h in Headers */, - C96524CDB423028248FE52A069C84B94 /* RSTFetchedResultsDataSource.h in Headers */, - B4EB521CC2E0002F09E6D89D72C05EF4 /* RSTHasher.h in Headers */, - 1F30DD02CA191CAE3D0B657F89B4F11F /* RSTHelperFile.h in Headers */, - 7A05BDF6F0EF1F8EF35BD85D32DA9A84 /* RSTLaunchViewController.h in Headers */, - CE10DDDAE7EAF229186F72415E877A1F /* RSTLoadOperation.h in Headers */, - A34924ED816441F1DFC1ECEDFFE962DC /* RSTNavigationController.h in Headers */, - 1DB6F3BD942AB6C506FA3D02C3569721 /* RSTNibView.h in Headers */, - 4A1F273145AC8A73006C32CCD1DCBECC /* RSTOperation.h in Headers */, - 9719913DBA52DDA7B45760943EB9BEEC /* RSTOperation_Subclasses.h in Headers */, - 74D859213990282C35C19B6D2313E0E8 /* RSTOperationQueue.h in Headers */, - 5BEFEF83E88746F60EE96520C83CF8B1 /* RSTPersistentContainer.h in Headers */, - 77708024733DF3B64F127AB9D0E5C5EA /* RSTPlaceholderView.h in Headers */, - E19486EB42DE44DE94BA6D8BA26ADCD5 /* RSTRelationshipPreservingMergePolicy.h in Headers */, - 846C1F6DB0F553F276ECB598E7A84AF8 /* RSTSearchController.h in Headers */, - B272AC71D7ACB699920703161A1752AC /* RSTSeparatorView.h in Headers */, - C2BE25EB20537FCA2EE93FC27875B382 /* RSTTintedImageView.h in Headers */, - 4D0BA6DDAECF3625D9D4F8884C396135 /* RSTToastView.h in Headers */, - 826BE1A486465868CED022ED981B0BEC /* UIAlertAction+Actions.h in Headers */, - 5158E74402D7498E84B1E75998347C9D /* UICollectionView+CellContent.h in Headers */, - EEFFD918B4E699ED2974C0B2F35E9932 /* UICollectionViewCell+CellContent.h in Headers */, - FAC36F11FCA18D96655C0EC43BA109EC /* UICollectionViewCell+Nibs.h in Headers */, - B09052B271013EFD3E592D4E87ADC3D7 /* UIImage+Manipulation.h in Headers */, - 574897C776D4A75F06D108C90308A36E /* UIKit+ActivityIndicating.h in Headers */, - 7C81CF6208DCFD04CA626E3E81DBD14F /* UISpringTimingParameters+Conveniences.h in Headers */, - 3C832BE3E684CFF4E7D7C7D1104C63C7 /* UITableView+CellContent.h in Headers */, - F73B09692A1D8FBD4A33D1322CB8C4F8 /* UITableViewCell+CellContent.h in Headers */, - EF5F3C860891664625225F32C4399ADF /* UIView+AnimatedHide.h in Headers */, - B8EED4F04562CE0F560AE123C1F737E1 /* UIViewController+TransitionState.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D669AC0978F2286484818C5FA2A1D22E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E21F9E3675CE2A5C2910F409DB690497 /* DBChunkInputStream.h in Headers */, - 01BA691B21BFCA4E9DD73F0D1DE67D2B /* SwiftyDropbox-umbrella.h in Headers */, - E24C77E406D608D65CF44CC758D79AA2 /* SwiftyDropbox.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; D89663E2DB8D7DD0634E5C6BF3CD44A2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -10262,20 +10277,20 @@ }; 5CB4163F0A6D4BDE0A490758A78BA43D /* Harmony */ = { isa = PBXNativeTarget; - buildConfigurationList = BD525096CA556B77DB7833CC422D4968 /* Build configuration list for PBXNativeTarget "Harmony" */; + buildConfigurationList = 645C55CF481B3C60066664D0D7B9BC75 /* Build configuration list for PBXNativeTarget "Harmony" */; buildPhases = ( - 1720941E471683DB933EABFBF20395A1 /* Headers */, - 69B367E1585682AB66F97B335F9D03A8 /* Sources */, - CF750F951B5921983AC422A1B8D08E64 /* Frameworks */, - 966ED76FE9108AC8FE6BF2B10DADB274 /* Copy generated compatibility header */, + 1CCEDD606534505AA153A1C41923FE85 /* Headers */, + 974F8B7DD4626103E0D6A589BA57F81F /* Sources */, + D55A7192A34A3E6AB5AC96485C102F84 /* Frameworks */, + CD03740494AE07F0611BD7FEAF96915C /* Copy generated compatibility header */, ); buildRules = ( ); dependencies = ( - DF50B746EF7C6DC9302CBF83E64A502C /* PBXTargetDependency */, - E56CE409A3455CD89DA5BA6DDDC40D3B /* PBXTargetDependency */, - 111AB56CAE156240A449E5192B1D037B /* PBXTargetDependency */, - 3F1CB87EC87C55D1211C3D729391F3B6 /* PBXTargetDependency */, + 8CBA22CD455792823578483B599E50CA /* PBXTargetDependency */, + 9B4E39171194D6983FE18EDFE8042F5A /* PBXTargetDependency */, + 03C03FECE2ABE8CCD8B2104A3614F5C7 /* PBXTargetDependency */, + 887E55853A40672CE282DFCA53C24EEC /* PBXTargetDependency */, ); name = Harmony; productName = Harmony; @@ -10373,11 +10388,11 @@ }; B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */ = { isa = PBXNativeTarget; - buildConfigurationList = 8DFB3C54138FF6F6A012B2B665C76ACF /* Build configuration list for PBXNativeTarget "Roxas" */; + buildConfigurationList = 91F68A004A3ADE92B3D5BFEFF90B24E0 /* Build configuration list for PBXNativeTarget "Roxas" */; buildPhases = ( - C93889FA7331EDB51173479E3F8F7C58 /* Headers */, - DDEB83EA63F277EF37B7ECEFF321F84B /* Sources */, - 596D3A8F72E091C80C6C4F87844EE108 /* Frameworks */, + 7BB3792A257D73BCB5C4BAB9B3C059F2 /* Headers */, + FCCAE826044BC34725880871E9E90D60 /* Sources */, + 2867E41F0270DB8E25A5DEEF4473F30E /* Frameworks */, ); buildRules = ( ); @@ -10534,17 +10549,17 @@ }; FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */ = { isa = PBXNativeTarget; - buildConfigurationList = 46CBD761C24B946C6B86A6E9FAE5B75A /* Build configuration list for PBXNativeTarget "SwiftyDropbox" */; + buildConfigurationList = 1EE50688244F909FA3D5BD54C5480E65 /* Build configuration list for PBXNativeTarget "SwiftyDropbox" */; buildPhases = ( - D669AC0978F2286484818C5FA2A1D22E /* Headers */, - A3D9F76474F59FAEE9C81F69C860BC04 /* Sources */, - 42396456A9083658104D12DBC34770AB /* Frameworks */, - 1BBE8FC626D1B66FC359714E8E9DF84C /* Copy generated compatibility header */, + 08C0BEA104A5B7710EB1D588A1D4FA90 /* Headers */, + 6A2E76139465BB5185D8EECF4CE68A77 /* Sources */, + EA4A4B678C7DC47CA66772B8E1529566 /* Frameworks */, + 72010C06DD9B1381CAD1F3293D8958E6 /* Copy generated compatibility header */, ); buildRules = ( ); dependencies = ( - 6EAE17DEE57C07FFAA5EC882A076663C /* PBXTargetDependency */, + 39D27A12530B32BB0E626F7DFB02E7F3 /* PBXTargetDependency */, ); name = SwiftyDropbox; productName = SwiftyDropbox; @@ -10699,30 +10714,6 @@ shellPath = /bin/sh; shellScript = "target_dir=${BUILT_PRODUCTS_DIR}\n\nmkdir -p ${target_dir}\n\n# Copy any file that looks like a Swift generated header to the include path\ncp ${DERIVED_SOURCES_DIR}/*-Swift.h ${target_dir}\n"; }; - 1BBE8FC626D1B66FC359714E8E9DF84C /* Copy generated compatibility header */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap", - "${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h", - ); - name = "Copy generated compatibility header"; - outputFileListPaths = ( - ); - outputPaths = ( - "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/SwiftyDropbox-umbrella.h", - "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; - }; 38EF4CF93070086FEC0872CF084E8F60 /* Copy generated compatibility header */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -10819,7 +10810,7 @@ shellPath = /bin/sh; shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/ZIPFoundation/ZIPFoundation.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/ZIPFoundation/ZIPFoundation-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; }; - 966ED76FE9108AC8FE6BF2B10DADB274 /* Copy generated compatibility header */ = { + 72010C06DD9B1381CAD1F3293D8958E6 /* Copy generated compatibility header */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -10828,20 +10819,20 @@ ); inputPaths = ( "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", - "${PODS_ROOT}/Headers/Public/Harmony/Harmony.modulemap", - "${PODS_ROOT}/Headers/Public/Harmony/Harmony-umbrella.h", + "${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap", + "${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h", ); name = "Copy generated compatibility header"; outputFileListPaths = ( ); outputPaths = ( "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", - "${BUILT_PRODUCTS_DIR}/Harmony-umbrella.h", + "${BUILT_PRODUCTS_DIR}/SwiftyDropbox-umbrella.h", "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Harmony/Harmony.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Harmony/Harmony-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/SwiftyDropbox/SwiftyDropbox-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; }; A3D6710365DAB2CCA647EE186555369E /* Copy generated compatibility header */ = { isa = PBXShellScriptBuildPhase; @@ -10915,6 +10906,30 @@ shellPath = /bin/sh; shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/NESDeltaCore/NESDeltaCore.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/NESDeltaCore/NESDeltaCore-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; }; + CD03740494AE07F0611BD7FEAF96915C /* Copy generated compatibility header */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h", + "${PODS_ROOT}/Headers/Public/Harmony/Harmony.modulemap", + "${PODS_ROOT}/Headers/Public/Harmony/Harmony-umbrella.h", + ); + name = "Copy generated compatibility header"; + outputFileListPaths = ( + ); + outputPaths = ( + "${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap", + "${BUILT_PRODUCTS_DIR}/Harmony-umbrella.h", + "${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "COMPATIBILITY_HEADER_PATH=\"${BUILT_PRODUCTS_DIR}/Swift Compatibility Header/${PRODUCT_MODULE_NAME}-Swift.h\"\nMODULE_MAP_PATH=\"${BUILT_PRODUCTS_DIR}/${PRODUCT_MODULE_NAME}.modulemap\"\n\nditto \"${DERIVED_SOURCES_DIR}/${PRODUCT_MODULE_NAME}-Swift.h\" \"${COMPATIBILITY_HEADER_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Harmony/Harmony.modulemap\" \"${MODULE_MAP_PATH}\"\nditto \"${PODS_ROOT}/Headers/Public/Harmony/Harmony-umbrella.h\" \"${BUILT_PRODUCTS_DIR}\"\nprintf \"\\n\\nmodule ${PRODUCT_MODULE_NAME}.Swift {\\n header \\\"${COMPATIBILITY_HEADER_PATH}\\\"\\n requires objc\\n}\\n\" >> \"${MODULE_MAP_PATH}\"\n"; + }; DDD4A7AD247A86C8E3CEEF843D4A6F8D /* Copy generated compatibility header */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -11305,78 +11320,54 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 69B367E1585682AB66F97B335F9D03A8 /* Sources */ = { + 6A2E76139465BB5185D8EECF4CE68A77 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 805A1E28389AF5FB29FC09BE6C8B1F0A /* Account.swift in Sources */, - D753580473283FA203738466F2939B6A /* AnyKeyPath+StringValue.swift in Sources */, - D2A37DEFD55B0BA864F27119BE974CB0 /* BatchRecordOperation.swift in Sources */, - AEAF60DA9CCFF57F8FBCEDFFFC09436E /* ConflictRecordOperation.swift in Sources */, - 7E5EB7A39652E32E3CA0F3D93856E2EC /* ConflictRecordsOperation.swift in Sources */, - 2E1CE99F9F3BACCEBB2EE44E78B4D3F3 /* DeleteRecordOperation.swift in Sources */, - 3CCFF040F69A447BCC79C844C6E30412 /* DeleteRecordsOperation.swift in Sources */, - CA52FE953A256B3FA7D63719284CDD4B /* Dictionary+Sequence.swift in Sources */, - 943577E181B1B6706D2107ECD728B015 /* DownloadRecordOperation.swift in Sources */, - 59462C1E4E16ACC6FD20C786FE5D2A1A /* DownloadRecordsOperation.swift in Sources */, - CF250F8607C7E5B37247613578134177 /* DriveService+Files.swift in Sources */, - A9F981EDC073C433341A5F4025D46216 /* DriveService+Records.swift in Sources */, - E25E5FB3CA97B41662F326DC6DFFFC0B /* DriveService+Versions.swift in Sources */, - 4995851CA04E15BE62A4905F6212BB68 /* DriveService.swift in Sources */, - B73AB37F8B742739EDA3C074F536FBC5 /* DropboxService+Files.swift in Sources */, - 6C87671F7C948E465D76853474A7F27E /* DropboxService+Records.swift in Sources */, - 15631406F1349925694F775193DCE3B8 /* DropboxService+Versions.swift in Sources */, - 7C44081096D7BD7EC16DEF322D7DC5E4 /* DropboxService.swift in Sources */, - 5964FD1B899EE5FDD4F98F594BC29971 /* Errors.swift in Sources */, - 188C27A5024641883B67EC17C1AA6995 /* FetchRemoteRecordsOperation.swift in Sources */, - BAAAB1B9FEE1E71EB834788C59B174C4 /* File.swift in Sources */, - C2CF08E68D39B2B25982B6AD4BE22708 /* FinishDownloadingRecordsOperation.swift in Sources */, - DB37D974F8E6FB9101F45E79F9AC3858 /* FinishUploadingRecordsOperation.swift in Sources */, - 109639DF3F0EF7199D502AE257551180 /* Harmony-dummy.m in Sources */, - CEAD3645EFC4389694E75CF1068CC91F /* HarmonyMetadataKey+Keys.swift in Sources */, - DA2B760E4D6E2D31F977E72C22441865 /* JSONDecoder+ManagedObjectContext.swift in Sources */, - 4A53F0A16D88C817005A54BAE4A6F449 /* KeyedContainers+ManagedValues.swift in Sources */, - 6D5F88F8EE3492C0AD55D6CD854681EA /* LocalRecord.swift in Sources */, - 5028F30132D3D726A5BFEB6A45CE08F6 /* ManagedAccount.swift in Sources */, - 9A4C2D5C397861A9572A20C1F8A36028 /* ManagedRecord+Predicates.swift in Sources */, - F4808FD70D3BA8559604594D5674A324 /* ManagedRecord+Uploading.swift in Sources */, - B94304C605E21C38958D8B2399F806E4 /* ManagedRecord.swift in Sources */, - 1F8209A656C45B0F07C3C1BF8E02279E /* MergePolicy.swift in Sources */, - B219C7FCFC30F49A2B96B301127F71A7 /* NSError+LocalizedFailureDescription.swift in Sources */, - 13DDDEE8E9A5F0E7D4767A7E2438F61E /* NSManagedObject+Conveniences.swift in Sources */, - 56096E16210F97AF0E03EB7509C67B7E /* NSManagedObject+Harmony.swift in Sources */, - 55E38E50C72F3898CD13D71706F1BBC4 /* NSManagedObjectContext+Harmony.swift in Sources */, - 2ACBB459B58101305C15B9E93221B2D8 /* NSPersistentStore+Configuration.swift in Sources */, - 6212289ABD96C811DCD8B09B9BCC1E9B /* Operation.swift in Sources */, - EE4B56A8FD2098F2F49C84B564BDD404 /* PrepareUploadingRecordsOperation.swift in Sources */, - 75B06D656B71606BD4C8995494313BDE /* PropertyGroup+Harmony.swift in Sources */, - B1FA10A1E7A8D914849E2F9982C44D07 /* Record.swift in Sources */, - A71F672BACBEE53FD4851582F9A71450 /* RecordController.swift in Sources */, - B4B9606F74B2AE01213BCB4FBAEE6F6B /* RecordEntry.swift in Sources */, - 9DCA03AF7E63F208B7C61C8EE8B41AF4 /* RecordOperation.swift in Sources */, - B30D82E85429187E9C74F971CECAFD0F /* RecordRepresentation.swift in Sources */, - 34AE8851640DC6E16132178B877A21E0 /* RemoteFile+Dropbox.swift in Sources */, - 1320CB37F0E2606479AD7BAB5C56E7D3 /* RemoteFile+File.swift in Sources */, - 52E4F3DFED11D9653AEC0B37BFCA708E /* RemoteFile.swift in Sources */, - 2CC0B722492849CF64841AE7884A8948 /* RemoteRecord+Dropbox.swift in Sources */, - FEA640DE0115214A9C6F9F674F56194E /* RemoteRecord+File.swift in Sources */, - D896BE2637D4D0EE60FE67FB5B01F686 /* RemoteRecord.swift in Sources */, - B89DFCAD50363CFBDC53931F4F370234 /* Result+Drive.swift in Sources */, - CF15A4FD0438274D29A83992C4D7A186 /* Result+Dropbox.swift in Sources */, - 0ECA6110DA3B0588B02D33C1E337CDF1 /* Result+Success.swift in Sources */, - EDEA3AD87DDC71ECD0952ABD1368A95D /* Service.swift in Sources */, - 4712883E9233CBF125D350671054463F /* ServiceOperation.swift in Sources */, - 50FED56DA840079A313570E00101A9E0 /* Syncable.swift in Sources */, - 9FCADB0CF0AFBD4F3F0ABFED93FB82A1 /* SyncCoordinator.swift in Sources */, - 4E2240017E2AF72AD8910D16B4ADBA96 /* SyncProgress.swift in Sources */, - 592095BB4B63DA9A913D330FFA26905F /* SyncRecordsOperation.swift in Sources */, - 74C7BF54656C67DEB87098CB74EBFED4 /* UpdateRecordMetadataOperation.swift in Sources */, - 58B5EB01C16F961316330E4D251E7648 /* UploadRecordOperation.swift in Sources */, - 06DC2503AAF54FB4B5D3B4606EC66F81 /* UploadRecordsOperation.swift in Sources */, - 8433AA2398A8DBAAF7B367AEF3C636C0 /* UserDefaults+Harmony.swift in Sources */, - 295238CB026C2D0DE66098E71D0CC261 /* Version+Dropbox.swift in Sources */, - 1FEE8B5284DC3C2F7D3F0E28E62961C1 /* Version+Revision.swift in Sources */, - 8BC24B9D0B902A90526475618DFEB023 /* Version.swift in Sources */, + 7318758AD19ED796253C58AAA18E98AC /* Async.swift in Sources */, + 3172916D88EC5D0F4F898D1F7EF202D0 /* Auth.swift in Sources */, + 1ACF2B3ED98CEF372FE3269E74396C1E /* AuthRoutes.swift in Sources */, + C2E923BBC9EAFEBE5B1ABF941EB1F473 /* Base.swift in Sources */, + 724D1A56B5D2A6D136F510B60F25E6DA /* BaseTeam.swift in Sources */, + 566814F38EA775B45707EFD98C9DC53E /* Common.swift in Sources */, + 0FA645C266AD8B65003164B98884497E /* Contacts.swift in Sources */, + 6E67DC0121BCD2D826D4BCB12DE462EA /* ContactsRoutes.swift in Sources */, + CBC8C5864F339F2B0BE248A834BB02A0 /* Custom.swift in Sources */, + 53E7979865D43374645999E24E49E3B9 /* CustomRoutes.swift in Sources */, + 39C5B0120922335CB32534B88D011528 /* CustomTasks.swift in Sources */, + 75F91B2E184792ABC31A9D8F080128D8 /* DBChunkInputStream.m in Sources */, + 7ECB28AE9ADAC1AE124D698C0FF85C6A /* DropboxClient.swift in Sources */, + EEFA3983E84E97779F33BC24886F0A13 /* DropboxClientsManager.swift in Sources */, + E5C4509F78A9B4CB99020BCBB544168F /* DropboxTeamClient.swift in Sources */, + CC289EC52AA3C05EB4653806308B6B1F /* DropboxTransportClient.swift in Sources */, + 3BF6F82870DB8EB51A171327367ACE87 /* FileProperties.swift in Sources */, + B298009A65EB94F7B3C83210AE3C965B /* FilePropertiesRoutes.swift in Sources */, + 8AA8A929FDB68F93ADB6F700AF3FB8BF /* FileRequests.swift in Sources */, + A6A28E38B771B1E1CB6EDB9982253379 /* FileRequestsRoutes.swift in Sources */, + 5E867F07B815D3996727D00C99F2D198 /* Files.swift in Sources */, + A0EC70DCA71F59C6FF7782ED8494E10E /* FilesRoutes.swift in Sources */, + 7B5C164030D57D70A3ACD504DB904A9B /* OAuth.swift in Sources */, + 4FDD559ED80035757EC13BF06683EFF1 /* OAuthMobile.swift in Sources */, + 62A4C4112E53E9D9BADF04EEEBB0EAF3 /* Paper.swift in Sources */, + 0269DCE3BE83596C812DA63AB330A29C /* PaperRoutes.swift in Sources */, + 50DD9D1435EF52DF5C2C9ED88F0FA06D /* SDKConstants.swift in Sources */, + A5D6B4EB588BE4010F5885C0EB4BEE43 /* SeenState.swift in Sources */, + 584EB56FA3DB605AB85CC94E6E785358 /* Sharing.swift in Sources */, + 05C983AD8D917AFEE50E8F7C21A84323 /* SharingRoutes.swift in Sources */, + 78854273F8EDC9A5D78C232FA70D43A1 /* StoneBase.swift in Sources */, + 784FA9B23810514FC07D672B0440BB4D /* StoneSerializers.swift in Sources */, + E99470F1613DBFE36A70FF06ECCC48FC /* StoneValidators.swift in Sources */, + 7A9D265661277069DAEA81C88E0E729D /* SwiftyDropbox-dummy.m in Sources */, + DE09E028E87C97A6EA36CFC0BF259FCD /* Team.swift in Sources */, + 64BC16BB087581808D84B9DF1449009B /* TeamCommon.swift in Sources */, + E1B3C7EA1C48D011E38D466A581BE46F /* TeamLog.swift in Sources */, + CAB0EC2F4B4EBC142BF0CC766A40A07F /* TeamLogRoutes.swift in Sources */, + FE17A6AA3F789031EDF82A6D8102928F /* TeamPolicies.swift in Sources */, + 5F866F4FE66A6B1298B1571FCE26E0E2 /* TeamRoutes.swift in Sources */, + D8ABD31A286A55BB5ACBEFA33F233C4E /* TransportConfig.swift in Sources */, + 352FC73778D970039B08CEBABF15A8BD /* Users.swift in Sources */, + 0AB2650342D0DBACE8EA1FAB8469A577 /* UsersCommon.swift in Sources */, + 83C24DB91B7EF2F085CA8C84E6BECBC0 /* UsersRoutes.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -11408,54 +11399,79 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A3D9F76474F59FAEE9C81F69C860BC04 /* Sources */ = { + 974F8B7DD4626103E0D6A589BA57F81F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 880A3366BA936A92BBD568462B09612F /* Async.swift in Sources */, - 912EEA493E0A08FC711CF6864C3DB36F /* Auth.swift in Sources */, - 9AC5F54FB242288D0C0BEE5FE51BE7F6 /* AuthRoutes.swift in Sources */, - EDC281DAD5A8204DB2E18A3FB2B5D725 /* Base.swift in Sources */, - AA3241DCAEBD138A49F1A1B79CFE3F40 /* BaseTeam.swift in Sources */, - BBE93C6E95E356BE54C337E86C774BED /* Common.swift in Sources */, - 5AA3255686819EB4DD24A1FE23CC6F28 /* Contacts.swift in Sources */, - E3C4CC0E44B8054138477E9731B4E454 /* ContactsRoutes.swift in Sources */, - 4DC3CE0782BBAC382A857CFEBFDE94BC /* Custom.swift in Sources */, - 5DE22207D1B1CD7A583F52895E942007 /* CustomRoutes.swift in Sources */, - AC4C2943071E6F4EFE6F3CDED9F75289 /* CustomTasks.swift in Sources */, - 705E7B04E1FE3269939CC5C40D83CACE /* DBChunkInputStream.m in Sources */, - 95C86E907FED4E215620A31FA5CAFD42 /* DropboxClient.swift in Sources */, - FC88917194482589C32FDDE107659F9B /* DropboxClientsManager.swift in Sources */, - 7D9D60386306B439551BB071CA066817 /* DropboxTeamClient.swift in Sources */, - 0EC9CB34CA3F574AE5B715EB1DD9DF8C /* DropboxTransportClient.swift in Sources */, - 32D70D7BB7F2A17F9C78F7AE99B2F7CC /* FileProperties.swift in Sources */, - ECE457DD05BEBE57CFEB9DD0D6A9B21D /* FilePropertiesRoutes.swift in Sources */, - 94BCC7749EDC3ADB6EB5811CA50D58F7 /* FileRequests.swift in Sources */, - 454435BAA1232B5BB55B7FA9E7B97C0D /* FileRequestsRoutes.swift in Sources */, - 6AF4C6E585CFF93B76EC9C45FE0F7CB1 /* Files.swift in Sources */, - E705953BCBCD13E17C23B588C4FD0457 /* FilesRoutes.swift in Sources */, - 6D1CB98C0BB063D06CF4A3B13B4D21F3 /* OAuth.swift in Sources */, - 5F3811A8B4109BA4B752316B90429F4C /* OAuthMobile.swift in Sources */, - 6C6915CA122E8B4630061446128E2BCC /* Paper.swift in Sources */, - F7AF82D1660F78BE791EF27F2F3D2938 /* PaperRoutes.swift in Sources */, - BFEDB3C71543B01C462D3562B179DA30 /* SDKConstants.swift in Sources */, - 0EDDADFF86CE8E23349B8C17EAB86C98 /* SeenState.swift in Sources */, - E6C3A0FCAFD428E5CFAA722D3F6190DE /* Sharing.swift in Sources */, - A5651EF221F23607DCC7F0AFEEC5CA8E /* SharingRoutes.swift in Sources */, - 3F29506C9C2F36B576E3C109F24238AD /* StoneBase.swift in Sources */, - 31697585FCCAF83D2BF44D087DA75CB8 /* StoneSerializers.swift in Sources */, - AD95435739025FAAFEF2B5911CCAA4B7 /* StoneValidators.swift in Sources */, - 82E1A8D140FD2E1A30BC5F8F4B19F8BF /* SwiftyDropbox-dummy.m in Sources */, - 7DFAE2171F7DF71CBFDAAB36126503A5 /* Team.swift in Sources */, - 8457755D991B9AC856F2AD154BCF4A34 /* TeamCommon.swift in Sources */, - 239B54D42D526085B60108A60B9A4787 /* TeamLog.swift in Sources */, - 12D7AFC87809B7DB47930F38ACBCF03E /* TeamLogRoutes.swift in Sources */, - 27E9618AB807EFBA9F6F713F8A3F9E38 /* TeamPolicies.swift in Sources */, - 5410DE9CCCA5B27BF32F53F10277BF94 /* TeamRoutes.swift in Sources */, - 365E7E156C92209524A265BE63A05992 /* TransportConfig.swift in Sources */, - 87FA058DD97C42DA27925CAD2E938C2C /* Users.swift in Sources */, - 02727D92764378FFAED7FA05551AB810 /* UsersCommon.swift in Sources */, - 417CB1E153B4D573A3F86BC063262EBF /* UsersRoutes.swift in Sources */, + BD2BEA059AC491B102F8DF3926BE6F3C /* Account.swift in Sources */, + 7233AAF19B42EC98BCBC88D0845B541E /* AnyCodable.swift in Sources */, + 9D71CB9053FF458B73CEC824EF0BB0F0 /* AnyKeyPath+StringValue.swift in Sources */, + 652C6F1668F693049AF2CAA6C39E1221 /* BatchRecordOperation.swift in Sources */, + 710BC5A2F29335F987FE9EAE689C1AE0 /* ConflictRecordOperation.swift in Sources */, + 44A16B7735E1CB04CAC75E2D49BD5D59 /* ConflictRecordsOperation.swift in Sources */, + 90B77BF4E1D9E493E39DDB4EE13CC608 /* DeleteRecordOperation.swift in Sources */, + 6A0B180E215F5233AF5756F807BCCB70 /* DeleteRecordsOperation.swift in Sources */, + 2BE85E437103FCD7B4005E36CE3A1058 /* Dictionary+Sequence.swift in Sources */, + D6CA1E7494CD056543C97D426E33EA23 /* DownloadRecordOperation.swift in Sources */, + 7A6FC7B5F8132542A56B28A131E634C2 /* DownloadRecordsOperation.swift in Sources */, + 503B6B7A250CFF2B6222085296C8E110 /* DriveService+Files.swift in Sources */, + FCB691953BC5DC1F35952009697D608C /* DriveService+Records.swift in Sources */, + 0DF527167B90D324B802A56685FF778A /* DriveService+Versions.swift in Sources */, + 55AFC32EA7806D71F217B3B98789301E /* DriveService.swift in Sources */, + 154DCE7B68E1D286E5EE1AA705AB6BAF /* DropboxService+Files.swift in Sources */, + 47DD93735583D7B904F190CE284FCED2 /* DropboxService+Records.swift in Sources */, + F354C34F64DE11D3A33811C2670FC30A /* DropboxService+Versions.swift in Sources */, + B4E5B8A526F12AB1BF7A3BE9256863C8 /* DropboxService.swift in Sources */, + 6E641CBA9D3432EE8F9C70B2E0ADD86D /* Errors.swift in Sources */, + 1AD22F54F483DC2B1C4926E75252C477 /* FetchRemoteRecordsOperation.swift in Sources */, + 4814E1D8375828A06CD1B96BD100D277 /* File.swift in Sources */, + 307F17251A2F5C3948F660C51D22185C /* FinishDownloadingRecordsOperation.swift in Sources */, + 2B51A8788DCF914AAED3412DFDEF3796 /* FinishUploadingRecordsOperation.swift in Sources */, + 3C29A9A037CFAE89A2573D64BDC23664 /* Harmony-dummy.m in Sources */, + 9171382BD3DAD4E80C297CD7DB9F1BFA /* HarmonyMetadataKey+Keys.swift in Sources */, + E002DE662DB29B513260463AAF8196AE /* JSONDecoder+ManagedObjectContext.swift in Sources */, + 331F42F6EB50BB7B3BCD93462D74C7B9 /* KeyedContainers+ManagedValues.swift in Sources */, + CE229BF25224ECEBDDC4F72BE71B6A47 /* LocalRecord.swift in Sources */, + C3C03BE1232B76AB81D1A6D283CBC58D /* ManagedAccount.swift in Sources */, + D42EA38E8FFF91A7736B71E774A63092 /* ManagedRecord+Predicates.swift in Sources */, + 29504B24FD2DC459040729190DC49643 /* ManagedRecord+Uploading.swift in Sources */, + AC8C27486C782B4BE778E8ABA518C876 /* ManagedRecord.swift in Sources */, + EC75774A28055BA6E5BE9E1DC2B7765B /* MergePolicy.swift in Sources */, + 8860F24F82252EB380AA091FEB00D88C /* NSError+LocalizedFailureDescription.swift in Sources */, + 5F9DCF2F05D919954205843FA5B47601 /* NSManagedObject+Conveniences.swift in Sources */, + 28E331F3212964273FB3B82CF0018337 /* NSManagedObject+Harmony.swift in Sources */, + ED4EF531ACDF0F8222BAA4F6B6B69808 /* NSManagedObjectContext+Harmony.swift in Sources */, + 5D2D937335FB8F9AF380046375071121 /* NSPersistentStore+Configuration.swift in Sources */, + 0D88B9C8E59F2638AEDE1567EE30F54E /* Operation.swift in Sources */, + B139C1E6229EC5A0E481686003C8941F /* PrepareUploadingRecordsOperation.swift in Sources */, + 8CD6A5FDEE1FCC183F89AA9D6F2E1D42 /* PropertyGroup+Harmony.swift in Sources */, + 4087FAE7064A9C1047BB2867ADD8DBF8 /* Record.swift in Sources */, + 2142EF25BA86D8E45F8D64D568E6EC1B /* RecordController.swift in Sources */, + 5295E7713294D31EF1DDFF6DF837BA41 /* RecordEntry.swift in Sources */, + F7E4CDC320BFB392C99BB93F4638AC44 /* RecordOperation.swift in Sources */, + 0F211DE5A0CB33C44EB80F3804272933 /* RecordRepresentation.swift in Sources */, + AA2C1691985E318E5018AB34B700DD87 /* RemoteFile+Dropbox.swift in Sources */, + 4F165A28324D2EE2AB2D08DC5F8A55C1 /* RemoteFile+File.swift in Sources */, + 0C218BC626BAD31F635F5C4578073C97 /* RemoteFile.swift in Sources */, + C35C510F6FAAA61787444F608E713B7B /* RemoteRecord+Dropbox.swift in Sources */, + 1F0752A2B2AFA37657C7E9DEE903FDD7 /* RemoteRecord+File.swift in Sources */, + 42EB6EECF3762F5F42F742FEB271DD66 /* RemoteRecord.swift in Sources */, + 9A6B76429A600DB5EADABB82B2919F25 /* Result+Drive.swift in Sources */, + A553A7154A5AFFAE08494697107B49F9 /* Result+Dropbox.swift in Sources */, + C061FBB44693CE168153BBE6BA63A150 /* Result+Success.swift in Sources */, + E528FB14C4DCC572CD62DD6620EE4909 /* Service.swift in Sources */, + 672E8527485DEAA8EEA27E5C8D8F1DBD /* ServiceOperation.swift in Sources */, + B72BF3C1B6C4DBB6A925CB1280F766EC /* Syncable.swift in Sources */, + CF480B6742A9AB2E86C1DE5CA2FBECFC /* SyncCoordinator.swift in Sources */, + F4AECD4701D7EA46CAAD52CD32F608AA /* SyncProgress.swift in Sources */, + BCB7812B218820D36A30C36C4BB0BA65 /* SyncRecordsOperation.swift in Sources */, + C845CE1108A670F5E6470B4177771035 /* UpdateRecordMetadataOperation.swift in Sources */, + BE73BE016E3EBA180D610F456C8D6739 /* UploadRecordOperation.swift in Sources */, + 67B903C43F0624E9D3197A2946A84B0F /* UploadRecordsOperation.swift in Sources */, + DF9D7C07C79C1195842DEDF619FE6245 /* UserDefaults+Harmony.swift in Sources */, + 759259D0FA5CF1B1F17C4366EB18A527 /* Version+Dropbox.swift in Sources */, + 819C860714F847924CECE775928BE96C /* Version+Revision.swift in Sources */, + 7AE848DB1454413283E1A33005E61EA0 /* Version.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -11644,58 +11660,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DDEB83EA63F277EF37B7ECEFF321F84B /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3BD8EFFCB0910051586FBF46AC5C55C8 /* NSBundle+Extensions.m in Sources */, - 3D66A31C8103A03FDF1F0E57C640C042 /* NSConstraintConflict+Conveniences.m in Sources */, - A2CF5336CF94746DA1F92A04941AF2C4 /* NSFileManager+URLs.m in Sources */, - FC4AFADABFECA8B929C84039869A806B /* NSLayoutConstraint+Edges.m in Sources */, - 30360304FB3B07CC67CE7E12DDCD6AD8 /* NSPredicate+Search.m in Sources */, - 0CC4033E6747ED10E9BC142192F6AD39 /* NSString+Localization.m in Sources */, - F33586928CCCB162321E60496A3DCA3B /* NSUserDefaults+DynamicProperties.m in Sources */, - 86CD84B7CB8FEBF8D8D1A612608F9A59 /* Roxas-dummy.m in Sources */, - 853712F7ADE0542EB49AB2971C13F4EF /* RSTArrayDataSource.m in Sources */, - ACB848453661249CFEDE957E0BC5AFCF /* RSTBlockOperation.m in Sources */, - 312AD7DE1453F9AD4A92963F384CF46C /* RSTCellContentChange.m in Sources */, - D3A01F05B185083B517E4626FDF3C57D /* RSTCellContentChangeOperation.m in Sources */, - 4DC192EDBBB019B891988F7845182F51 /* RSTCellContentDataSource.m in Sources */, - 2F47AFFD0CEB31CEC05058726214B60A /* RSTCollectionViewCell.m in Sources */, - 8AD7ED3262070702EA2D7772A7576F70 /* RSTCollectionViewGridLayout.m in Sources */, - 3C36E674426756F060D9479A78E5CB38 /* RSTCompositeDataSource.m in Sources */, - 48FE3ADC3F482FB1896BB017B2A60B4C /* RSTDynamicDataSource.m in Sources */, - AF384C3F516776514598AB608BF28CEA /* RSTError.m in Sources */, - A7EF2BC7C091E4282D581EBF80E9EFEC /* RSTFetchedResultsDataSource.m in Sources */, - 0DAA2A9EA3C7BE275C199CE4FC0F8660 /* RSTHasher.m in Sources */, - 97ACB19F84123FA36372CAEFB3F69700 /* RSTHelperFile.m in Sources */, - 523CB85DD9D51432DCC507568B4D3905 /* RSTLaunchViewController.m in Sources */, - 095ECDF5BCBCCC825E489471C3556732 /* RSTLoadOperation.m in Sources */, - 44574ABD35CB7C8E7308A753B541D666 /* RSTNavigationController.m in Sources */, - 8477A8F693A9336DD44C78F069BAC322 /* RSTNibView.m in Sources */, - E7BADFB958A5706854C044DDFEE718DD /* RSTOperation.m in Sources */, - AA3339D66B1B8D9E4FDA3A7B1DD4EE4E /* RSTOperationQueue.m in Sources */, - 4F9DEF5AB8980F5F6CBD545C902C6963 /* RSTPersistentContainer.m in Sources */, - 2DE185B952A67810F78722837354F3EF /* RSTPlaceholderView.m in Sources */, - 05013F5C3F8897B02CAC065EF3189E58 /* RSTRelationshipPreservingMergePolicy.m in Sources */, - C98B4D02BC0E57B4BCBF55318C7991CE /* RSTSearchController.m in Sources */, - FFC60D90E8A926004701D722087AB6F1 /* RSTSeparatorView.m in Sources */, - 1980201958ED3367F3828BC226C5506A /* RSTTintedImageView.m in Sources */, - 6E77A5D834F1A5B81DFB7C1955085F93 /* RSTToastView.m in Sources */, - E75F2EA53D0EE6628D5361A907AE8CEA /* UIAlertAction+Actions.m in Sources */, - 7FBC6E3BDC4800C426640309DF2CBEE2 /* UICollectionView+CellContent.m in Sources */, - D8889A6910820C522D9EC5AE0F105B7B /* UICollectionViewCell+CellContent.m in Sources */, - 4C44ECF64FB6C4EDEF4ACD2236BA1545 /* UICollectionViewCell+Nibs.m in Sources */, - C669D2A2AEB5C8351795BD1BD61EC908 /* UIImage+Manipulation.m in Sources */, - E6529D9E72DE5E7B788DDC6C3E148468 /* UIKit+ActivityIndicating.m in Sources */, - 9B6DAACFBF34F39F85BDE66C85C41FF3 /* UISpringTimingParameters+Conveniences.m in Sources */, - BDE0EF415A3093440376B4D04914BBAF /* UITableView+CellContent.m in Sources */, - 011A7D5944D78BBDB6D70E337DF496B9 /* UITableViewCell+CellContent.m in Sources */, - 99DE9961F6F88EA4545A05AD359747C6 /* UIView+AnimatedHide.m in Sources */, - F03CF428C71FCFA033C24776E54BA798 /* UIViewController+TransitionState.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; E593ADB87F658CC0E2BF41020C4F16FC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -11727,9 +11691,67 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + FCCAE826044BC34725880871E9E90D60 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3E041A08CC91B93F5CF263AFBF97D44F /* NSBundle+Extensions.m in Sources */, + D47B85F011245FC97BBB98CB88CA156E /* NSConstraintConflict+Conveniences.m in Sources */, + CDDA5A6A7DBA2956B63EEC99ED95B956 /* NSFileManager+URLs.m in Sources */, + 78E3AE936B1C1323F051C929214E92C6 /* NSLayoutConstraint+Edges.m in Sources */, + 1D4ED2614A13819F07573D121137C67D /* NSPredicate+Search.m in Sources */, + 61AC25CFCBBE20BB139C2C218CFC317C /* NSString+Localization.m in Sources */, + 7C557BAC6BE7F3F10F30D2AF38E77934 /* NSUserDefaults+DynamicProperties.m in Sources */, + CDD542EB52614CD6C0F8B6BAC43FDF50 /* Roxas-dummy.m in Sources */, + 191666F77F27F27AE3A3AF8B1DC00E36 /* RSTArrayDataSource.m in Sources */, + E78D3ACFC1253DF24B5702A3D50C4E41 /* RSTBlockOperation.m in Sources */, + CD87C519C9780A8B86F02DE34E90CB96 /* RSTCellContentChange.m in Sources */, + 917DE1C3182B3476AAD576773D315444 /* RSTCellContentChangeOperation.m in Sources */, + 68EB54AD3951E2047840FCEC762120A4 /* RSTCellContentDataSource.m in Sources */, + 9C56D6C2EEE679BD36C9714CC43428BE /* RSTCollectionViewCell.m in Sources */, + 0A8F400EFC014059D3B7C4546A572A06 /* RSTCollectionViewGridLayout.m in Sources */, + AC536961026B8A7A732E37BA5A0AFF4C /* RSTCompositeDataSource.m in Sources */, + 057F1BC44E23F2A56BC14C4742FCEA2B /* RSTDynamicDataSource.m in Sources */, + 364026A914B019CF9E8E1E8662CB3CEC /* RSTError.m in Sources */, + 1E0FB1C6C9A7707FB6EBF44919406652 /* RSTFetchedResultsDataSource.m in Sources */, + 38B3A2FD6F8B9AC327D048D94553FEAD /* RSTHasher.m in Sources */, + D3795DEA313C53D514C33769B4BE4998 /* RSTHelperFile.m in Sources */, + F139182EE62EE3E68E4F5AAE0FA7F93E /* RSTLaunchViewController.m in Sources */, + 9A0E0822B8E1743B5092BAE4D1458D3C /* RSTLoadOperation.m in Sources */, + 97B902766C5A26837CF94B716009A201 /* RSTNavigationController.m in Sources */, + 7CF5FCD91B24589DDA0A9E0AB368417E /* RSTNibView.m in Sources */, + 7AE8BDCC81C1807E72CF531C41DAA28D /* RSTOperation.m in Sources */, + DC505F2A9CFD8EF46656BC89A39D84C0 /* RSTOperationQueue.m in Sources */, + C2191F69393CDE272CCBABD5CF5E5452 /* RSTPersistentContainer.m in Sources */, + 26B8744B23358ABFC021A6F4AC671E05 /* RSTPlaceholderView.m in Sources */, + 3DD4B26D893412F29DAE586ED5B753CF /* RSTRelationshipPreservingMergePolicy.m in Sources */, + E55D73A38F29C42EBE224E4FCB095BAB /* RSTSearchController.m in Sources */, + 9918E09C7569EDBCB5CABDAB3E361CD0 /* RSTSeparatorView.m in Sources */, + B7559318336220FE66128B7C155EBE5D /* RSTTintedImageView.m in Sources */, + DA650D45F2067141AAC7476F3826DFB2 /* RSTToastView.m in Sources */, + 0AF3327B2E8DAD5E22F00078A190D8C5 /* UIAlertAction+Actions.m in Sources */, + 94A7C5E12BA371AF88EB32E55EFCA794 /* UICollectionView+CellContent.m in Sources */, + 7AC961FD6AE10887253986C5245EA81E /* UICollectionViewCell+CellContent.m in Sources */, + 11E44019D3E812832BFAA8018A19F6C6 /* UICollectionViewCell+Nibs.m in Sources */, + 8165F76955A7C2EEEA488E8DCD67CC9A /* UIImage+Manipulation.m in Sources */, + AE875AC4E25FB81D89442E8E258945E9 /* UIKit+ActivityIndicating.m in Sources */, + 3355E6967843D3D24E781B73118E18DE /* UISpringTimingParameters+Conveniences.m in Sources */, + 069F3362BE89D036DC6FB94F2DFAFA05 /* UITableView+CellContent.m in Sources */, + CEDAB2C55F9DD7D4E2D8CF98BFE8CC81 /* UITableViewCell+CellContent.m in Sources */, + 2E1E8ACC9144D64FB372FD0AE14B3610 /* UIView+AnimatedHide.m in Sources */, + 28D6E732DCDBE5BE8D12D4310E4B8A30 /* UIViewController+TransitionState.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 03C03FECE2ABE8CCD8B2104A3614F5C7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Roxas; + target = B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */; + targetProxy = AE6868B1BCE00BA52EBC8E617D45B775 /* PBXContainerItemProxy */; + }; 07E627BB28FBB62F3E6DC30187201518 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = Roxas; @@ -11742,12 +11764,6 @@ target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; targetProxy = 19192073D8CD75A03CE029974259BDE9 /* PBXContainerItemProxy */; }; - 111AB56CAE156240A449E5192B1D037B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Roxas; - target = B5D1BA64AC676FF46408FCDE19A05767 /* Roxas */; - targetProxy = FC9F6032803826BC09AF6A35BD043AF6 /* PBXContainerItemProxy */; - }; 15364F69178421803B4D9618FCF82D19 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = MelonDSDeltaCore; @@ -11760,11 +11776,11 @@ target = 530F469AED058B94728C278CCA514500 /* DeltaCore */; targetProxy = B1570DE8D1FE8F79EF7721A260A67201 /* PBXContainerItemProxy */; }; - 3F1CB87EC87C55D1211C3D729391F3B6 /* PBXTargetDependency */ = { + 39D27A12530B32BB0E626F7DFB02E7F3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = SwiftyDropbox; - target = FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */; - targetProxy = C8E5EBBA48A65677D814EA8555DD214D /* PBXContainerItemProxy */; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = 9883B1722550548197F9C45B34F06A18 /* PBXContainerItemProxy */; }; 460FB3819A6A637FCD17AE2E8D48C7F1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -11814,12 +11830,6 @@ target = 126073BF5D2BF3A4BDD22FE9062C9D20 /* N64DeltaCore */; targetProxy = 15E4ADDCC69DB2AEB2E21EC85874D1C6 /* PBXContainerItemProxy */; }; - 6EAE17DEE57C07FFAA5EC882A076663C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Alamofire; - target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = CD579FC09454B036337FF5A32B4DBB2E /* PBXContainerItemProxy */; - }; 7AE2A0B8C5162CF0A80C9ECDC2BE67D4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SNESDeltaCore; @@ -11856,6 +11866,18 @@ target = D676E21115185671D7258A56944ABE98 /* GTMSessionFetcher */; targetProxy = 5C8E1AC123E1190B28C3D74EC312A900 /* PBXContainerItemProxy */; }; + 887E55853A40672CE282DFCA53C24EEC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SwiftyDropbox; + target = FF39B7A1D9F00620D9F56635ABBB2C03 /* SwiftyDropbox */; + targetProxy = 326D6147512B1337A0F318BB03297717 /* PBXContainerItemProxy */; + }; + 8CBA22CD455792823578483B599E50CA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleAPIClientForREST; + target = D7958E869B6C0073DB3025514393D7A3 /* GoogleAPIClientForREST */; + targetProxy = 122E6311F0D45EFBCFE8324439BB39D8 /* PBXContainerItemProxy */; + }; 8CD3BB4C08E52675E652493F16CE75F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "N64DeltaCore-Mupen64Plus"; @@ -11898,6 +11920,12 @@ target = 890229DC8DCC9C43917568A0C4502FCA /* GBADeltaCore-GBADeltaCore */; targetProxy = A86E9AE4C08786BEAA77EF17CD90CB3B /* PBXContainerItemProxy */; }; + 9B4E39171194D6983FE18EDFE8042F5A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GoogleSignIn; + target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; + targetProxy = 711CCC74CFB491FB3123FBD88CF5D4E8 /* PBXContainerItemProxy */; + }; A030A9436B8FECCE417AD24306433EAD /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = SQLite.swift; @@ -11976,18 +12004,6 @@ target = 5B32FEE5AD13CB944235C9158BECB929 /* MelonDSDeltaCore-melonDS */; targetProxy = 6A5DB238A47BCA0BFA418E35F69CB27F /* PBXContainerItemProxy */; }; - DF50B746EF7C6DC9302CBF83E64A502C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleAPIClientForREST; - target = D7958E869B6C0073DB3025514393D7A3 /* GoogleAPIClientForREST */; - targetProxy = 298D76CD321EB0D6C48A27C84D848723 /* PBXContainerItemProxy */; - }; - E56CE409A3455CD89DA5BA6DDDC40D3B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GoogleSignIn; - target = CAD3534FC55B0333104E5117C0A9A324 /* GoogleSignIn */; - targetProxy = 7BFA61EA67CFFA199F2E37A65BA0FFFD /* PBXContainerItemProxy */; - }; EADC3D9064B6BF83A5A9DD4E658F241E /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DeltaCore; @@ -12283,22 +12299,7 @@ }; name = Release; }; - 2E1376B8AF89FDDFF88A17202398E3C5 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2E2D966C0A00ADF6CBAED222AD054CA8 /* Crashlytics.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CODE_SIGN_IDENTITY = "iPhone Developer"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 2FDBCEC2FB6639C343014F7BAC7C584D /* Debug */ = { + 2D47C3D0F8BDA4242FDB70A789D746F8 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 6D90A2363F7995BE9713375802DBDF16 /* Roxas.xcconfig */; buildSettings = { @@ -12322,8 +12323,24 @@ SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; }; - name = Debug; + name = Release; + }; + 2E1376B8AF89FDDFF88A17202398E3C5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2E2D966C0A00ADF6CBAED222AD054CA8 /* Crashlytics.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; }; 31FA331EF37060BA2DA347B02C99F7E1 /* Release */ = { isa = XCBuildConfiguration; @@ -12367,32 +12384,6 @@ }; name = Release; }; - 3B97993E0A8F56B27B319CB9A05E4D47 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SwiftyDropbox; - PRODUCT_NAME = SwiftyDropbox; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; 3C1C001B24B8773870F421D8BCA42D35 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 41D95E73EB648CA0896C3360092052A9 /* SDWebImage.xcconfig */; @@ -12564,34 +12555,6 @@ }; name = Release; }; - 5E2B746830A1712B92EA62ADE50A75C8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6D90A2363F7995BE9713375802DBDF16 /* Roxas.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/Roxas/Roxas-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/Roxas/Roxas.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Roxas; - PRODUCT_NAME = Roxas; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; 692C1D9591DC249D0B1E5A07F4E6A57D /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 48EEB005F713F595AFABDEDD7B122D6F /* DeltaCore.xcconfig */; @@ -12646,6 +12609,33 @@ }; name = Release; }; + 6E77AFEA0C8A2A76DCA05B6460CD0E6D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MODULEMAP_FILE = Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SwiftyDropbox; + PRODUCT_NAME = SwiftyDropbox; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; 6F9014351920DC6BAB20194744781348 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5294532669D6FD1AE4D2A9F8C4A86C90 /* GoogleToolboxForMac.xcconfig */; @@ -12742,33 +12732,6 @@ }; name = Release; }; - 85870B0E8D79070709CAB8624E932E3D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MODULEMAP_FILE = Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = SwiftyDropbox; - PRODUCT_NAME = SwiftyDropbox; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.2; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; 8BAC33A429758DA9ECFD01D0D582F876 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 6D14F298DDA814B5FF6C73CC765C8186 /* GBCDeltaCore.xcconfig */; @@ -12797,34 +12760,6 @@ }; name = Release; }; - 8D6E449A1CA49D9D78EBEF3F1AEBC0C6 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0B25891B457EEC5EC2A639DA8DAE0EBE /* Harmony.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/Harmony/Harmony-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/Harmony/Harmony.modulemap; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Harmony; - PRODUCT_NAME = Harmony; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; 940F0F7414B6817B24692D5D2F1986E5 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 5FA6C00DDDB9434F8C592657E4CF0E8D /* DSDeltaCore.xcconfig */; @@ -13119,6 +13054,33 @@ }; name = Debug; }; + B359902AECFE0F723E83AD776832C50E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D065B11C91E406287214D3893496F978 /* Harmony.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Harmony/Harmony-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/Harmony/Harmony.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Harmony; + PRODUCT_NAME = Harmony; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; B38D4BC8B7B929F56930619695B435C2 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 9C40CA78C414DCF7D85C8612550E53E8 /* N64DeltaCore.xcconfig */; @@ -13326,6 +13288,32 @@ }; name = Release; }; + E6B9F59FD79A816FEA0AC3159B52352B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3E7FA839DA8218E3749B1DC1C2581F9A /* SwiftyDropbox.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/SwiftyDropbox/SwiftyDropbox-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MODULEMAP_FILE = Headers/Public/SwiftyDropbox/SwiftyDropbox.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = SwiftyDropbox; + PRODUCT_NAME = SwiftyDropbox; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; E8BA7EB32AB357B8AA781CFD0DB64092 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 9C40CA78C414DCF7D85C8612550E53E8 /* N64DeltaCore.xcconfig */; @@ -13446,9 +13434,9 @@ }; name = Release; }; - F4DCB064B536143E1CCFE897D92FB98C /* Debug */ = { + F1530AB7A9ADB486F56C9CBFF27C6F69 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B25891B457EEC5EC2A639DA8DAE0EBE /* Harmony.xcconfig */; + baseConfigurationReference = 6D90A2363F7995BE9713375802DBDF16 /* Roxas.xcconfig */; buildSettings = { ARCHS = "$(ARCHS_STANDARD_64_BIT)"; CLANG_ENABLE_OBJC_WEAK = NO; @@ -13456,14 +13444,14 @@ "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/Harmony/Harmony-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/Roxas/Roxas-prefix.pch"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - MODULEMAP_FILE = Headers/Public/Harmony/Harmony.modulemap; + MODULEMAP_FILE = Headers/Public/Roxas/Roxas.modulemap; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Harmony; - PRODUCT_NAME = Harmony; + PRODUCT_MODULE_NAME = Roxas; + PRODUCT_NAME = Roxas; PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -13568,6 +13556,34 @@ }; name = Debug; }; + FF2C2E55C84991D87D2C393C9B37982E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D065B11C91E406287214D3893496F978 /* Harmony.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Harmony/Harmony-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MODULEMAP_FILE = Headers/Public/Harmony/Harmony.modulemap; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Harmony; + PRODUCT_NAME = Harmony; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -13616,6 +13632,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 1EE50688244F909FA3D5BD54C5480E65 /* Build configuration list for PBXNativeTarget "SwiftyDropbox" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E6B9F59FD79A816FEA0AC3159B52352B /* Debug */, + 6E77AFEA0C8A2A76DCA05B6460CD0E6D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 20F3E4E2418350AC682AAD392B4BED39 /* Build configuration list for PBXNativeTarget "NESDeltaCore" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -13652,15 +13677,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 46CBD761C24B946C6B86A6E9FAE5B75A /* Build configuration list for PBXNativeTarget "SwiftyDropbox" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3B97993E0A8F56B27B319CB9A05E4D47 /* Debug */, - 85870B0E8D79070709CAB8624E932E3D /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -13697,6 +13713,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 645C55CF481B3C60066664D0D7B9BC75 /* Build configuration list for PBXNativeTarget "Harmony" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B359902AECFE0F723E83AD776832C50E /* Debug */, + FF2C2E55C84991D87D2C393C9B37982E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 769CCD015EEEB9388EA6D65752E1BB67 /* Build configuration list for PBXNativeTarget "MelonDSDeltaCore-melonDS" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -13715,15 +13740,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8DFB3C54138FF6F6A012B2B665C76ACF /* Build configuration list for PBXNativeTarget "Roxas" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2FDBCEC2FB6639C343014F7BAC7C584D /* Debug */, - 5E2B746830A1712B92EA62ADE50A75C8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 8EBE86FCEB6B920023606B463F40D6F2 /* Build configuration list for PBXNativeTarget "NESDeltaCore-NESDeltaCore" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -13742,6 +13758,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 91F68A004A3ADE92B3D5BFEFF90B24E0 /* Build configuration list for PBXNativeTarget "Roxas" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F1530AB7A9ADB486F56C9CBFF27C6F69 /* Debug */, + 2D47C3D0F8BDA4242FDB70A789D746F8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; A084C0089544D8EEE7DA4C6D8EEEF9ED /* Build configuration list for PBXAggregateTarget "Crashlytics" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -13805,15 +13830,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BD525096CA556B77DB7833CC422D4968 /* Build configuration list for PBXNativeTarget "Harmony" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F4DCB064B536143E1CCFE897D92FB98C /* Debug */, - 8D6E449A1CA49D9D78EBEF3F1AEBC0C6 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; C2E255D649731CD4DCFF2E658C062078 /* Build configuration list for PBXNativeTarget "GoogleToolboxForMac" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -13862,11 +13878,13 @@ /* End XCConfigurationList section */ /* Begin XCVersionGroup section */ - 13024863EABD5877B9E214D03434D254 /* Harmony.xcdatamodeld */ = { + C8F4F9DD8ACA48C0AFBEA6D79C4E7B87 /* Harmony.xcdatamodeld */ = { isa = XCVersionGroup; children = ( - D18DB696A2F92208CB6C8BE6F624B70D /* Harmony.xcdatamodel */, + 60FA44C96259E0D6910605DB3506B00F /* Harmony.xcdatamodel */, + BF5612094E4347B8BF7380D25F20C690 /* Harmony 2.xcdatamodel */, ); + currentVersion = BF5612094E4347B8BF7380D25F20C690 /* Harmony 2.xcdatamodel */; name = Harmony.xcdatamodeld; path = "Harmony/Model/Core Data/Harmony.xcdatamodeld"; sourceTree = ""; diff --git a/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Harmony.xcscheme b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Harmony.xcscheme new file mode 100644 index 0000000..0a472c6 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcshareddata/xcschemes/Harmony.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh index e9457d5..4b7421b 100755 --- a/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh +++ b/Pods/Target Support Files/Pods-Delta/Pods-Delta-resources.sh @@ -103,6 +103,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then install_resource "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.bundle" install_resource "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle" install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld" + install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Migrations/HarmonyToHarmony2.xcmappingmodel" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/melonDS.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/Mupen64Plus.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle" @@ -117,6 +118,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then install_resource "${PODS_CONFIGURATION_BUILD_DIR}/GBCDeltaCore/GBCDeltaCore.bundle" install_resource "${PODS_ROOT}/GoogleSignIn/Resources/GoogleSignIn.bundle" install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Harmony.xcdatamodeld" + install_resource "${PODS_ROOT}/../External/Harmony/Harmony/Model/Core Data/Migrations/HarmonyToHarmony2.xcmappingmodel" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/MelonDSDeltaCore/melonDS.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/N64DeltaCore/Mupen64Plus.bundle" install_resource "${PODS_CONFIGURATION_BUILD_DIR}/NESDeltaCore/NESDeltaCore.bundle" From f0d245ef8d0376332f242bc86051f12b94effc4d Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 27 Apr 2020 13:01:09 -0700 Subject: [PATCH 027/105] Fixes always using melonDS core even if DeSmuME core is selected --- Delta/Systems/System.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Delta/Systems/System.swift b/Delta/Systems/System.swift index 2ece7db..7d65ce1 100644 --- a/Delta/Systems/System.swift +++ b/Delta/Systems/System.swift @@ -86,7 +86,7 @@ extension System case .n64: return N64.core case .gbc: return GBC.core case .gba: return GBA.core - case .ds: return MelonDS.core + case .ds: return Settings.preferredCore(for: .ds) ?? MelonDS.core } } From e11e4437c52852e8e1b615b756871d9e37fb57c4 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 27 Apr 2020 13:03:28 -0700 Subject: [PATCH 028/105] =?UTF-8?q?Adds=20coreID=20to=20SaveState=E2=80=99?= =?UTF-8?q?s=20Harmony=20metadata=20for=20backwards=20compatibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Delta/Database/Model/Human/SaveState.swift | 19 ++++++++++++++----- .../Extensions/HarmonyMetadataKey+Keys.swift | 3 +++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Delta/Database/Model/Human/SaveState.swift b/Delta/Database/Model/Human/SaveState.swift index b44b4ad..b9bc922 100644 --- a/Delta/Database/Model/Human/SaveState.swift +++ b/Delta/Database/Model/Human/SaveState.swift @@ -134,7 +134,7 @@ extension SaveState: Syncable public var syncableMetadata: [HarmonyMetadataKey : String] { guard let game = self.game else { return [:] } - return [.gameID: game.identifier, .gameName: game.name] + return [.gameID: game.identifier, .gameName: game.name, .coreID: self.coreIdentifier].compactMapValues { $0 } } public var syncableLocalizedName: String? { @@ -145,11 +145,20 @@ extension SaveState: Syncable { guard self.coreIdentifier == nil else { return } guard let game = self.game, let system = System(gameType: game.type) else { return } - - switch system + + if let coreIdentifier = record.remoteMetadata?[.coreID] { - case .ds: self.coreIdentifier = DS.core.identifier // Assume DS save state with nil coreIdentifier is from DeSmuME core. - default: self.coreIdentifier = system.deltaCore.identifier + // SaveState was synced to older version of Delta and lost its coreIdentifier, + // but it remains in the remote metadata so we can reassign it. + self.coreIdentifier = coreIdentifier + } + else + { + switch system + { + case .ds: self.coreIdentifier = DS.core.identifier // Assume DS save state with nil coreIdentifier is from DeSmuME core. + default: self.coreIdentifier = system.deltaCore.identifier + } } } } diff --git a/Delta/Extensions/HarmonyMetadataKey+Keys.swift b/Delta/Extensions/HarmonyMetadataKey+Keys.swift index aed531e..0b668ec 100644 --- a/Delta/Extensions/HarmonyMetadataKey+Keys.swift +++ b/Delta/Extensions/HarmonyMetadataKey+Keys.swift @@ -12,4 +12,7 @@ extension HarmonyMetadataKey { static let gameID = HarmonyMetadataKey("gameID") static let gameName = HarmonyMetadataKey("gameName") + + // Backwards compatibility + static let coreID = HarmonyMetadataKey("coreID") } From 75869c06fdfad629bad1977d46b8446e0c7c20c4 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 27 Apr 2020 13:13:34 -0700 Subject: [PATCH 029/105] Fixes overwriting save file when previewing games --- .../Emulation/PreviewGameViewController.swift | 93 ++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/Delta/Emulation/PreviewGameViewController.swift b/Delta/Emulation/PreviewGameViewController.swift index 2089c3c..7dff3f7 100644 --- a/Delta/Emulation/PreviewGameViewController.swift +++ b/Delta/Emulation/PreviewGameViewController.swift @@ -28,6 +28,13 @@ class PreviewGameViewController: DeltaCore.GameViewController } private var emulatorCoreQueue = DispatchQueue(label: "com.rileytestut.Delta.PreviewGameViewController.emulatorCoreQueue", qos: .userInitiated) + private var copiedSaveFiles = [(originalURL: URL, copyURL: URL)]() + + private lazy var temporaryDirectoryURL: URL = { + let directoryURL = FileManager.default.temporaryDirectory.appendingPathComponent("preview-" + UUID().uuidString) + try? FileManager.default.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil) + return directoryURL + }() override var game: GameProtocol? { willSet { @@ -53,6 +60,10 @@ class PreviewGameViewController: DeltaCore.GameViewController deinit { + // Explicitly stop emulatorCore _before_ we remove ourselves as observer + // so we can wait until stopped before restoring save files (again). + self.emulatorCore?.stop() + self.emulatorCore?.removeObserver(self, forKeyPath: #keyPath(EmulatorCore.state), context: &kvoContext) } } @@ -70,6 +81,13 @@ extension PreviewGameViewController // Temporarily prevent emulatorCore from updating gameView to prevent flicker of black, or other visual glitches self.emulatorCore?.remove(self.gameView) } + + override func viewWillAppear(_ animated: Bool) + { + super.viewWillAppear(animated) + + self.copySaveFiles() + } override func viewDidAppear(_ animated: Bool) { @@ -88,6 +106,19 @@ extension PreviewGameViewController self.emulatorCore?.pause() } + override func viewDidDisappear(_ animated: Bool) + { + super.viewDidDisappear(animated) + + // Already stopped = we've already restored save files and removed directory. + if self.emulatorCore?.state != .stopped + { + // Pre-emptively restore save files in case something goes wrong while stopping emulation. + // This also ensures if the core is never stopped (for some reason), saves are still restored. + self.restoreSaveFiles(removeCopyDirectory: false) + } + } + override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() @@ -112,13 +143,21 @@ extension PreviewGameViewController let state = self.emulatorCore?.state else { return } - if previousState == .stopped, state == .running + switch state { + case .running where previousState == .stopped: self.emulatorCoreQueue.async { // Pause to prevent it from starting before visible (in case user peeked slowly) self.emulatorCore?.pause() self.preparePreview() } + + case .stopped: + // Emulation has stopped, so we can safely restore save files, + // and also remove the directory they were copied to. + self.restoreSaveFiles(removeCopyDirectory: true) + + default: break } } } @@ -172,4 +211,56 @@ private extension PreviewGameViewController self.emulatorCore?.resume() } + + func copySaveFiles() + { + guard let game = self.game as? Game, let gameSave = game.gameSave else { return } + + self.copiedSaveFiles.removeAll() + + let fileURLs = gameSave.syncableFiles.lazy.map { $0.fileURL } + for fileURL in fileURLs + { + do + { + let destinationURL = self.temporaryDirectoryURL.appendingPathComponent(fileURL.lastPathComponent) + try FileManager.default.copyItem(at: fileURL, to: destinationURL, shouldReplace: true) + + self.copiedSaveFiles.append((fileURL, destinationURL)) + print("Copied save file:", fileURL.lastPathComponent) + } + catch + { + print("Failed to back up save file \(fileURL.lastPathComponent).", error) + } + } + } + + func restoreSaveFiles(removeCopyDirectory: Bool) + { + for (originalURL, copyURL) in self.copiedSaveFiles + { + do + { + try FileManager.default.copyItem(at: copyURL, to: originalURL, shouldReplace: true) + print("Restored save file:", originalURL.lastPathComponent) + } + catch + { + print("Failed to restore copied save file \(copyURL.lastPathComponent).", error) + } + } + + if removeCopyDirectory + { + do + { + try FileManager.default.removeItem(at: self.temporaryDirectoryURL) + } + catch + { + print("Failed to remove preview temporary directory.", error) + } + } + } } From fd79b04ff08cff0d63e938fd6c79614c8e1f8022 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 27 Apr 2020 14:39:51 -0700 Subject: [PATCH 030/105] Updates DeltaCore dependency --- Cores/DeltaCore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cores/DeltaCore b/Cores/DeltaCore index 4109613..a65134b 160000 --- a/Cores/DeltaCore +++ b/Cores/DeltaCore @@ -1 +1 @@ -Subproject commit 41096136bac3a034e6320bcba3a5c8849b63a298 +Subproject commit a65134bbf3d4be41f0845f21069d421467c38fc2 From a739926e17cce17c635f08ed7dbea1dff76fcf46 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 27 Apr 2020 14:40:15 -0700 Subject: [PATCH 031/105] Updates app version to 1.2b2 --- Delta.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 0a881c0..d5a746e 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -1329,11 +1329,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 18; + CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.2b; + MARKETING_VERSION = 1.2b2; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; @@ -1357,11 +1357,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 18; + CURRENT_PROJECT_VERSION = 23; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.2b; + MARKETING_VERSION = 1.2b2; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DIMPACTOR"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; From 5c9332e61ee4aa2d215041ce719b08977da90e11 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 28 Apr 2020 14:44:06 -0700 Subject: [PATCH 032/105] Fixes importing games + controller skins from Files Exposing Documents directory in Files app requires us to support opening files in place (despite LSSupportsOpeningDocumentsInPlace set to NO in Info.plist), so we now coordinate access to any external file URL --- Delta/Database/DatabaseManager.swift | 73 ++++++++++++++++++- .../UIAlertController+Importing.swift | 68 +++++++++-------- Delta/Importing/ImportController.swift | 61 ++++++++++------ 3 files changed, 144 insertions(+), 58 deletions(-) diff --git a/Delta/Database/DatabaseManager.swift b/Delta/Database/DatabaseManager.swift index 1f689fd..3485d83 100644 --- a/Delta/Database/DatabaseManager.swift +++ b/Delta/Database/DatabaseManager.swift @@ -23,13 +23,24 @@ extension DatabaseManager extension DatabaseManager { - enum ImportError: Error, Hashable, Equatable + enum ImportError: LocalizedError, Hashable, Equatable { case doesNotExist(URL) case invalid(URL) case unsupported(URL) case unknown(URL, NSError) case saveFailed(Set, NSError) + + var errorDescription: String? { + switch self + { + case .doesNotExist: return NSLocalizedString("The file does not exist.", comment: "") + case .invalid: return NSLocalizedString("The file is invalid.", comment: "") + case .unsupported: return NSLocalizedString("This file is not supported.", comment: "") + case .unknown(_, let error): return error.localizedDescription + case .saveFailed(_, let error): return error.localizedDescription + } + } } } @@ -43,6 +54,8 @@ final class DatabaseManager: RSTPersistentContainer private var validationManagedObjectContext: NSManagedObjectContext? + private let importController = ImportController(documentTypes: []) + private init() { guard @@ -218,7 +231,20 @@ extension DatabaseManager { func importGames(at urls: Set, completion: ((Set, Set) -> Void)?) { - var errors = Set() + let externalFileURLs = urls.filter { !FileManager.default.isReadableFile(atPath: $0.path) } + guard externalFileURLs.isEmpty else { + self.importExternalFiles(at: externalFileURLs) { (importedURLs, externalImportErrors) in + var availableFileURLs = urls.filter { !externalFileURLs.contains($0) } + availableFileURLs.formUnion(importedURLs) + + self.importGames(at: Set(availableFileURLs)) { (importedGames, importErrors) in + let allErrors = importErrors.union(externalImportErrors) + completion?(importedGames, allErrors) + } + } + + return + } let zipFileURLs = urls.filter { $0.pathExtension.lowercased() == "zip" } if zipFileURLs.count > 0 @@ -236,6 +262,7 @@ extension DatabaseManager self.performBackgroundTask { (context) in + var errors = Set() var identifiers = Set() for url in urls @@ -331,10 +358,24 @@ extension DatabaseManager func importControllerSkins(at urls: Set, completion: ((Set, Set) -> Void)?) { - var errors = Set() + let externalFileURLs = urls.filter { !FileManager.default.isReadableFile(atPath: $0.path) } + guard externalFileURLs.isEmpty else { + self.importExternalFiles(at: externalFileURLs) { (importedURLs, externalImportErrors) in + var availableFileURLs = urls.filter { !externalFileURLs.contains($0) } + availableFileURLs.formUnion(importedURLs) + + self.importControllerSkins(at: Set(availableFileURLs)) { (importedSkins, importErrors) in + let allErrors = importErrors.union(externalImportErrors) + completion?(importedSkins, allErrors) + } + } + + return + } self.performBackgroundTask { (context) in + var errors = Set() var identifiers = Set() for url in urls @@ -473,6 +514,32 @@ extension DatabaseManager completion(outputURLs, errors) } } + + private func importExternalFiles(at urls: Set, completion: @escaping ((Set, Set) -> Void)) + { + var outputURLs = Set() + var errors = Set() + + let dispatchGroup = DispatchGroup() + for url in urls + { + dispatchGroup.enter() + + self.importController.importExternalFile(at: url) { (result) in + switch result + { + case .failure(let error): errors.insert(.unknown(url, error as NSError)) + case .success(let fileURL): outputURLs.insert(fileURL) + } + + dispatchGroup.leave() + } + } + + dispatchGroup.notify(queue: .global()) { + completion(outputURLs, errors) + } + } } //MARK: - File URLs - diff --git a/Delta/Extensions/UIAlertController+Importing.swift b/Delta/Extensions/UIAlertController+Importing.swift index f326d36..90282d8 100644 --- a/Delta/Extensions/UIAlertController+Importing.swift +++ b/Delta/Extensions/UIAlertController+Importing.swift @@ -20,16 +20,6 @@ extension UIAlertController class func alertController(for importType: ImportType, with errors: Set) -> UIAlertController { - let title: String - - switch importType - { - case .games: title = NSLocalizedString("Error Importing Games", comment: "") - case .controllerSkins: title = NSLocalizedString("Error Importing Controller Skins", comment: "") - } - - let alertController = UIAlertController(title: title, message: nil, preferredStyle: .alert) - var urls = Set() for error in errors @@ -44,38 +34,54 @@ extension UIAlertController } } - let filenames = urls.map{ $0.lastPathComponent }.sorted() + let title: String + let message: String - if filenames.count > 0 + if let fileURL = urls.first, let error = errors.first, errors.count == 1 { - var message: String - - switch importType - { - case .games: message = NSLocalizedString("The following game files could not be imported:", comment: "") + "\n" - case .controllerSkins: message = NSLocalizedString("The following controller skin files could not be imported:", comment: "") + "\n" - } - - for filename in filenames - { - message += "\n" + filename - } - - alertController.message = message + title = String(format: NSLocalizedString("Could not import “%@”.", comment: ""), fileURL.lastPathComponent) + message = error.localizedDescription } else { - // This branch can be executed when there are no input URLs when importing, but there is an error saving the database anyway. - switch importType { - case .games: alertController.message = NSLocalizedString("Delta was unable to import games. Please try again later.", comment: "") - case .controllerSkins: alertController.message = NSLocalizedString("Delta was unable to import controller skins. Please try again later.", comment: "") + case .games: title = NSLocalizedString("Error Importing Games", comment: "") + case .controllerSkins: title = NSLocalizedString("Error Importing Controller Skins", comment: "") + } + + if urls.count > 0 + { + var tempMessage: String + + switch importType + { + case .games: tempMessage = NSLocalizedString("The following game files could not be imported:", comment: "") + "\n" + case .controllerSkins: tempMessage = NSLocalizedString("The following controller skin files could not be imported:", comment: "") + "\n" + } + + let filenames = urls.map { $0.lastPathComponent }.sorted() + for filename in filenames + { + tempMessage += "\n" + filename + } + + message = tempMessage + } + else + { + // This branch can be executed when there are no input URLs when importing, but there is an error saving the database anyway. + + switch importType + { + case .games: message = NSLocalizedString("Delta was unable to import games. Please try again later.", comment: "") + case .controllerSkins: message = NSLocalizedString("Delta was unable to import controller skins. Please try again later.", comment: "") + } } } + let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) alertController.addAction(UIAlertAction(title: RSTSystemLocalizedString("OK"), style: .cancel, handler: nil)) - return alertController } } diff --git a/Delta/Importing/ImportController.swift b/Delta/Importing/ImportController.swift index 0c7d878..e1cc5a9 100644 --- a/Delta/Importing/ImportController.swift +++ b/Delta/Importing/ImportController.swift @@ -131,6 +131,39 @@ class ImportController: NSObject } } +extension ImportController +{ + func importExternalFile(at fileURL: URL, completionHandler: @escaping (Result) -> Void) + { + let intent = NSFileAccessIntent.readingIntent(with: fileURL) + self.fileCoordinator.coordinate(with: [intent], queue: self.importQueue) { (error) in + do + { + if let error = error + { + throw error + } + else + { + // User intent.url, not url, as the system may have updated it when requesting access. + guard intent.url.startAccessingSecurityScopedResource() else { throw CocoaError.error(.fileReadNoPermission) } + defer { intent.url.stopAccessingSecurityScopedResource() } + + // Use url, not intent.url, to ensure the file name matches what was in the document browser. + let temporaryURL = FileManager.default.temporaryDirectory.appendingPathComponent(fileURL.lastPathComponent) + try FileManager.default.copyItem(at: intent.url, to: temporaryURL, shouldReplace: true) + + completionHandler(.success(temporaryURL)) + } + } + catch + { + completionHandler(.failure(error)) + } + } + } +} + extension ImportController: UIDocumentBrowserViewControllerDelegate { func documentBrowser(_ controller: UIDocumentBrowserViewController, didPickDocumentURLs documentURLs: [URL]) @@ -144,31 +177,11 @@ extension ImportController: UIDocumentBrowserViewControllerDelegate { dispatchGroup.enter() - let intent = NSFileAccessIntent.readingIntent(with: url) - self.fileCoordinator.coordinate(with: [intent], queue: self.importQueue) { (error) in - - do + self.importExternalFile(at: url) { (result) in + switch result { - if let error = error - { - throw error - } - else - { - // User intent.url, not url, as the system may have updated it when requesting access. - guard intent.url.startAccessingSecurityScopedResource() else { throw CocoaError.error(.fileReadNoPermission) } - defer { intent.url.stopAccessingSecurityScopedResource() } - - // Use url, not intent.url, to ensure the file name matches what was in the document browser. - let temporaryURL = FileManager.default.temporaryDirectory.appendingPathComponent(url.lastPathComponent) - try FileManager.default.copyItem(at: intent.url, to: temporaryURL, shouldReplace: true) - - coordinatedURLs.insert(temporaryURL) - } - } - catch - { - errors.append(error) + case .failure(let error): errors.append(error) + case .success(let fileURL): coordinatedURLs.insert(fileURL) } dispatchGroup.leave() From 9c99578206712af1303f607e2295cf18ad560e4c Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Fri, 1 May 2020 11:23:48 -0700 Subject: [PATCH 033/105] Fixes misplaced DS screens when using external controller --- Cores/DeltaCore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cores/DeltaCore b/Cores/DeltaCore index a65134b..868dcde 160000 --- a/Cores/DeltaCore +++ b/Cores/DeltaCore @@ -1 +1 @@ -Subproject commit a65134bbf3d4be41f0845f21069d421467c38fc2 +Subproject commit 868dcdef14a1fcffd0b70bf5e588e2e5c3285fe4 From e4404d179e2775a0f33fb906d14e1a60362514ea Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Fri, 1 May 2020 11:28:16 -0700 Subject: [PATCH 034/105] Fixes NES games crashing after playing an N64 game --- Cores/NESDeltaCore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cores/NESDeltaCore b/Cores/NESDeltaCore index 714c9fc..78fa7db 160000 --- a/Cores/NESDeltaCore +++ b/Cores/NESDeltaCore @@ -1 +1 @@ -Subproject commit 714c9fc711253202bab879e464108e77ea8f0074 +Subproject commit 78fa7db707655962a1077f4681c35fcf81510060 From 3cb3b9a10b707647d017e68e386f823ce59dffd5 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 5 May 2020 11:18:46 -0700 Subject: [PATCH 035/105] Fixes various issues with controller skin filters --- Cores/DeltaCore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cores/DeltaCore b/Cores/DeltaCore index 868dcde..212cb61 160000 --- a/Cores/DeltaCore +++ b/Cores/DeltaCore @@ -1 +1 @@ -Subproject commit 868dcdef14a1fcffd0b70bf5e588e2e5c3285fe4 +Subproject commit 212cb618d7e3b90fd978c52c84e9c8c233982e37 From b85230b0ff23cc246e444a3c54075b8f1468ae0f Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Fri, 12 Jun 2020 13:00:18 -0700 Subject: [PATCH 036/105] =?UTF-8?q?Improves=20sync=20error=20messages=20wh?= =?UTF-8?q?en=20a=20game=20is=20missing=20or=20can=E2=80=99t=20be=20synced?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Delta/Syncing/SyncResultViewController.swift | 40 +++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/Delta/Syncing/SyncResultViewController.swift b/Delta/Syncing/SyncResultViewController.swift index 4de8bf6..cff2758 100644 --- a/Delta/Syncing/SyncResultViewController.swift +++ b/Delta/Syncing/SyncResultViewController.swift @@ -163,6 +163,16 @@ private extension SyncResultViewController errorMessage = messages.joined(separator: "\n") } + case .other(_, ValidationError.nilRelationshipObjects(let relationships)) where relationships.contains("game"): + if let gameName = error.record.localMetadata?[.gameName] ?? error.record.remoteMetadata?[.gameName] + { + errorMessage = String(format: NSLocalizedString("“%@“ is missing. Please re-import this game to resume syncing its data.", comment: ""), gameName) + } + else + { + errorMessage = NSLocalizedString("The game for this item is missing. Please re-import the game to resume syncing its data.", comment: "") + } + case .other(_, let error as NSError): errorMessage = error.localizedFailureReason ?? error.localizedDescription default: errorMessage = error.failureReason } @@ -265,12 +275,38 @@ private extension SyncResultViewController for (group, errors) in errorsByGroup { - let sortedErrors = errors.sorted { (a, b) -> Bool in + let filteredErrors = errors.filter { error in + switch group + { + case .saveState(let gameID), .cheat(let gameID): + switch error + { + case RecordError.other(_, ValidationError.nilRelationshipObjects(let relationships)) where relationships.contains("game"): + if errorsByGroup.keys.contains(Group.game(gameID)) + { + // There is already an error for this game, so don't need to duplicate it due to it missing. + return false + } + else + { + return true + } + + default: break + } + + default: break + } + + return true + } + + let sortedErrors = filteredErrors.sorted { (a, b) -> Bool in guard let a = a as? RecordError, let b = b as? RecordError else { return false } return a.record.localizedTitle < b.record.localizedTitle } - errorsByGroup[group] = sortedErrors + errorsByGroup[group] = sortedErrors.isEmpty ? nil : sortedErrors } let sortedErrors = errorsByGroup.sorted { (a, b) in From 77512147ef934caaabe2bf144dcde418be4d924f Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 12 Oct 2020 11:37:50 -0700 Subject: [PATCH 037/105] Fixes swapped DS screens --- Cores/DSDeltaCore | 2 +- Cores/MelonDSDeltaCore | 2 +- Podfile.lock | 4 +- Pods/Manifest.lock | 4 +- Pods/Pods.xcodeproj/project.pbxproj | 88 ++++++++++++++--------------- 5 files changed, 50 insertions(+), 50 deletions(-) diff --git a/Cores/DSDeltaCore b/Cores/DSDeltaCore index 23abf63..b59ca19 160000 --- a/Cores/DSDeltaCore +++ b/Cores/DSDeltaCore @@ -1 +1 @@ -Subproject commit 23abf633559dac471fa3b38a3cfcc12ffa68ab6e +Subproject commit b59ca197068be7cf8ca66ff52b24e686154a1c15 diff --git a/Cores/MelonDSDeltaCore b/Cores/MelonDSDeltaCore index 93b68d5..677d1e3 160000 --- a/Cores/MelonDSDeltaCore +++ b/Cores/MelonDSDeltaCore @@ -1 +1 @@ -Subproject commit 93b68d5f01acbbfacf59f35fa9ed68523d955f6a +Subproject commit 677d1e35da42855c29afa7c92882eeb051372d94 diff --git a/Podfile.lock b/Podfile.lock index c0f7528..7541095 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -126,10 +126,10 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Alamofire: c7287b6e5d7da964a70935e5db17046b7fde6568 - Crashlytics: 95d05f4e4c19a771250c4bd9ce344d996de32bbf + Crashlytics: e156f27e43abaa331f9b7afed091bda37e1052cc DeltaCore: 1b246a4e436c6b2b377ea84a1bc847a1c5f4b6cd DSDeltaCore: 7dc6a18e25d8036a5022a34c1ffb4062af9eed3d - Fabric: 2fb5676bc811af011a04513451f463dac6803206 + Fabric: be0459577cee96fe21f68de24588be2dd71482b8 GBADeltaCore: 10ff8fde89ed95c99888a9b7102b3d3e45d7458d GBCDeltaCore: 7468dff742927139a14f6fc909e810f253b6293c GoogleAPIClientForREST: 0f19a8280dfe6471f76016645d26eb5dae305101 diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index c0f7528..7541095 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -126,10 +126,10 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Alamofire: c7287b6e5d7da964a70935e5db17046b7fde6568 - Crashlytics: 95d05f4e4c19a771250c4bd9ce344d996de32bbf + Crashlytics: e156f27e43abaa331f9b7afed091bda37e1052cc DeltaCore: 1b246a4e436c6b2b377ea84a1bc847a1c5f4b6cd DSDeltaCore: 7dc6a18e25d8036a5022a34c1ffb4062af9eed3d - Fabric: 2fb5676bc811af011a04513451f463dac6803206 + Fabric: be0459577cee96fe21f68de24588be2dd71482b8 GBADeltaCore: 10ff8fde89ed95c99888a9b7102b3d3e45d7458d GBCDeltaCore: 7468dff742927139a14f6fc909e810f253b6293c GoogleAPIClientForREST: 0f19a8280dfe6471f76016645d26eb5dae305101 diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 5f37f63..9699d33 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -85,7 +85,7 @@ 07BB377F31975D34EB8CCC8C3E05597F /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 792056404E543D00399F5986E8B3812F /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Project, ); }; }; 07C9540E58A6035F779B84EDA2DA2205 /* clock_backend.h in Headers */ = {isa = PBXBuildFile; fileRef = 22515475C0A7E9BD8FD4145526FBC353 /* clock_backend.h */; settings = {ATTRIBUTES = (Project, ); }; }; 08A1B982F9CD6EA5ECD5A442973A25AD /* NDS.h in Headers */ = {isa = PBXBuildFile; fileRef = 933D69C235D50794635AA2A58BC23D85 /* NDS.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 08B9F6148C2A49A570F33B4BF7163484 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = B399BA8CED66B7B4AB724D2D580D4943 /* Standard.deltaskin */; }; + 08B9F6148C2A49A570F33B4BF7163484 /* Standard.deltaskin in Resources */ = {isa = PBXBuildFile; fileRef = 2889FAB221A0B4525F82A4783E48BB2F /* Standard.deltaskin */; }; 08CBBE506F5F9C4F6B5FBA173182B627 /* NstBoardBtlDragonNinja.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 0D2603FBE6D0E88895754984334C87D0 /* NstBoardBtlDragonNinja.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 08DB3EE7795392A4AD6CDA6911C4ADE8 /* NstBoardTaitoTc0190fmcPal16r4.hpp in Headers */ = {isa = PBXBuildFile; fileRef = BBD164DBFFAA1294217B9F595993108D /* NstBoardTaitoTc0190fmcPal16r4.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 08F81E7ABB2B97675345FC04CA722FC8 /* TxCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6154AA0F4F3D72A490406941DDA56ECF /* TxCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -270,7 +270,7 @@ 265418D17A79E992D7091C6116D5D81E /* pngget.c in Sources */ = {isa = PBXBuildFile; fileRef = C00543EF4F06FBFA511049B6A2E2638E /* pngget.c */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; 269A8F0EF89DD3F63151C8785ABE7A51 /* GameControllerInputMapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EE4DF888D759F8A1EFC289D72E1DF95 /* GameControllerInputMapping.swift */; }; 26B8744B23358ABFC021A6F4AC671E05 /* RSTPlaceholderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F8643E93FD4508FE4A1F4CFE2588044 /* RSTPlaceholderView.m */; settings = {COMPILER_FLAGS = "-w -Xanalyzer -analyzer-disable-all-checks"; }; }; - 26BD486C68EF5B079CF50F132FB6EAC5 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 02BCDAEC84EB90FED96E1A7812F1B9CC /* Standard.deltamapping */; }; + 26BD486C68EF5B079CF50F132FB6EAC5 /* Standard.deltamapping in Resources */ = {isa = PBXBuildFile; fileRef = 1D1D7FA77F53D5E68F48BAA779C6ED78 /* Standard.deltamapping */; }; 26D84D2836C13B2D939D5A5E2B1BD47B /* Schema.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD2701346D82207B53CC9EC541F8AB0 /* Schema.swift */; }; 2759C2F52CCBBBA9F7A243D31EC1D042 /* language.h in Headers */ = {isa = PBXBuildFile; fileRef = C2095BD846E0E2918CC6C26E739E147E /* language.h */; settings = {ATTRIBUTES = (Project, ); }; }; 2795FDE9B8407649C0D0DA00EA13DDE4 /* RSTCellContentDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3827013A64806EC421D988347B05D5EB /* RSTCellContentDataSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -524,7 +524,7 @@ 506700D55CD43C1F9D14D10C36B2E4EA /* NstBoardAve.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 290CD775EF514EB180E591FA1BBD9EE9 /* NstBoardAve.hpp */; settings = {ATTRIBUTES = (Project, ); }; }; 5073BE55602733E1D570CBFAF7444F9C /* FIFOSamplePipe.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E62533D6ADE3583F493484D3ABF1BB5 /* FIFOSamplePipe.h */; settings = {ATTRIBUTES = (Project, ); }; }; 508F79BAF68E3B5A238FE6A3953A1D4D /* GBAGfx.h in Headers */ = {isa = PBXBuildFile; fileRef = 0893F87C0C44883CFA0FF8BD37E0CB50 /* GBAGfx.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50B180CFEAD01CDF7AE77F036B6AD4E3 /* romlist.bin in Resources */ = {isa = PBXBuildFile; fileRef = E077F3008801C506785266DF63C1EA19 /* romlist.bin */; }; + 50B180CFEAD01CDF7AE77F036B6AD4E3 /* romlist.bin in Resources */ = {isa = PBXBuildFile; fileRef = 7C52D6198DB5D064DD270A36491E44A2 /* romlist.bin */; }; 50DD9D1435EF52DF5C2C9ED88F0FA06D /* SDKConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95CCDA31768B63EA9440181D3FB6DD17 /* SDKConstants.swift */; }; 5109815A0F3215C9E58A3C986141C9DC /* F3DSETA.h in Headers */ = {isa = PBXBuildFile; fileRef = 9147D9287688D6DBCB391FCFFB5E8CD9 /* F3DSETA.h */; settings = {ATTRIBUTES = (Project, ); }; }; 5126155DEED6DE59D73E61CE415BDA1D /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 471C4997518A7042AE098438B7958754 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; @@ -2125,7 +2125,6 @@ 0275BCD590CD9EDAE776A4F66B072CD5 /* Combiner.cpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Combiner.cpp; sourceTree = ""; }; 027FB4C6CC71DADB243F4D75F54D49E2 /* SaveState.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SaveState.swift; sourceTree = ""; }; 028754304C5C372FE9E27565F32DD4FC /* RSTCollectionViewCell.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = RSTCollectionViewCell.xib; path = Roxas/RSTCollectionViewCell.xib; sourceTree = ""; }; - 02BCDAEC84EB90FED96E1A7812F1B9CC /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; 030B53DF4264E1E4E75E737FC9B5B696 /* t1tables.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = t1tables.h; sourceTree = ""; }; 03152EFD6359667DF578CCCE3CAF648E /* retro_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = retro_common.h; sourceTree = ""; }; 033421C4854AC34E9F0A5215AE7F3AE4 /* DepthBufferToRDRAM.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = DepthBufferToRDRAM.h; sourceTree = ""; }; @@ -2307,6 +2306,7 @@ 1CA66F879B24C5B420988EA67B2A3FB0 /* ANSCompatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ANSCompatibility.h; path = iOS/Crashlytics.framework/Headers/ANSCompatibility.h; sourceTree = ""; }; 1CBA76EDD27FA2D20B1EA0F0BF7F082C /* libSwiftyDropbox.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSwiftyDropbox.a; path = libSwiftyDropbox.a; sourceTree = BUILT_PRODUCTS_DIR; }; 1CFCC0E9B1069C5E4DE9B21620D39BEE /* NstBoardSunsoft4.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardSunsoft4.hpp; sourceTree = ""; }; + 1D1D7FA77F53D5E68F48BAA779C6ED78 /* Standard.deltamapping */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltamapping; sourceTree = ""; }; 1D2B3BDB29EB37DAEDCBC3179FAA6100 /* gdbstub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gdbstub.h; sourceTree = ""; }; 1D48E1464F25EE094AB21C99E9CDC8BF /* NstBoardHosenkan.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardHosenkan.hpp; sourceTree = ""; }; 1D545FA281C697B8D7BEEC43C6652189 /* UIImage+Manipulation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Manipulation.h"; path = "Roxas/UIImage+Manipulation.h"; sourceTree = ""; }; @@ -2399,6 +2399,7 @@ 285001A3E16D55354667EDFD2BF69729 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/UIImageView+WebCache.h"; sourceTree = ""; }; 287CF3209EFBA423F838FBAE494AB0C0 /* slot1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = slot1.h; sourceTree = ""; }; 2889DF4390F5E2FFDA11CCE9E534746E /* System.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = ""; }; + 2889FAB221A0B4525F82A4783E48BB2F /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; 28CBF616EB776A5C5D2F9A737B72AA74 /* cart.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = cart.h; sourceTree = ""; }; 290BCCDEE8D33B086E36DBC4AAE5C4AB /* NSError+LocalizedFailureDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSError+LocalizedFailureDescription.swift"; sourceTree = ""; }; 290CD775EF514EB180E591FA1BBD9EE9 /* NstBoardAve.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardAve.hpp; sourceTree = ""; }; @@ -3001,6 +3002,7 @@ 7C336BB83B448CA034099BF3E7B12D55 /* ARMInterpreter_LoadStore.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = ARMInterpreter_LoadStore.h; sourceTree = ""; }; 7C4240EE1FE35FE23E5975F8DCB23A33 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; 7C4333506EF373E1D2841A18039C8379 /* S2DEX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = S2DEX.h; sourceTree = ""; }; + 7C52D6198DB5D064DD270A36491E44A2 /* romlist.bin */ = {isa = PBXFileReference; includeInIndex = 1; path = romlist.bin; sourceTree = ""; }; 7C5579DAAF54EF825979925DDD065815 /* NstBoardUnlCc21.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardUnlCc21.hpp; sourceTree = ""; }; 7C65583B30F5CE8CB3A417DCFB648306 /* Mutex.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = Mutex.hpp; sourceTree = ""; }; 7C7894842679F86AEA25BABD02717D75 /* debugger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; @@ -3400,7 +3402,6 @@ B307C39B5BCD16F9563103326BB8C58A /* gbint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gbint.h; sourceTree = ""; }; B31BC317B925949D8F6F764866AECFAE /* RSTTintedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RSTTintedImageView.h; path = Roxas/RSTTintedImageView.h; sourceTree = ""; }; B331F7660FB59081A99ADBA1AF706462 /* dummy_video_capture.c */ = {isa = PBXFileReference; includeInIndex = 1; path = dummy_video_capture.c; sourceTree = ""; }; - B399BA8CED66B7B4AB724D2D580D4943 /* Standard.deltaskin */ = {isa = PBXFileReference; includeInIndex = 1; path = Standard.deltaskin; sourceTree = ""; }; B3A1CF8E39DF40FA5839CDC129FE69F5 /* NSPersistentStore+Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "NSPersistentStore+Configuration.swift"; sourceTree = ""; }; B3AEB39C358F48D203125CAFE9D03E22 /* pngstruct.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; B3C33417B33F751208C5BF623D85A06D /* GBCDeltaCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "GBCDeltaCore-prefix.pch"; sourceTree = ""; }; @@ -3715,7 +3716,6 @@ DFC688B75792FBFBB3B452084CA3837C /* NstSoundRenderer.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstSoundRenderer.hpp; sourceTree = ""; }; DFDA1E12C63A8E139E0F5F52E6F63F9D /* opengl_UnbufferedDrawer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = opengl_UnbufferedDrawer.h; sourceTree = ""; }; E07126E3FC357870F5EAEC48FB308C9A /* NstBoardTxcTw.hpp */ = {isa = PBXFileReference; includeInIndex = 1; path = NstBoardTxcTw.hpp; sourceTree = ""; }; - E077F3008801C506785266DF63C1EA19 /* romlist.bin */ = {isa = PBXFileReference; includeInIndex = 1; path = romlist.bin; sourceTree = ""; }; E0987B780D382225AE82D80ECA8C0641 /* GTMGatherInputStream.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = GTMGatherInputStream.m; path = Source/GTMGatherInputStream.m; sourceTree = ""; }; E0F150BFDEE45BE9AA4D0FDF4D91815E /* gfx.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = gfx.h; sourceTree = ""; }; E0F1902545FB22A0EF0B1A987A6C9D43 /* SMCalloutView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SMCalloutView-prefix.pch"; sourceTree = ""; }; @@ -4286,15 +4286,6 @@ path = visupng; sourceTree = ""; }; - 07F691241FBD71981877F3B34D76DB6E /* MelonDSDeltaCore */ = { - isa = PBXGroup; - children = ( - 47980AAB520B7D2038E8EBB2BBB843E1 /* Controller Skin */, - ); - name = MelonDSDeltaCore; - path = MelonDSDeltaCore; - sourceTree = ""; - }; 08C58CF73AB8BFBF56E0EB8B4D727EE1 /* Pods-Delta */ = { isa = PBXGroup; children = ( @@ -4548,15 +4539,6 @@ path = uCodes; sourceTree = ""; }; - 17D56112446A3990E9D47221D20D86FD /* melonDS */ = { - isa = PBXGroup; - children = ( - E077F3008801C506785266DF63C1EA19 /* romlist.bin */, - ); - name = melonDS; - path = melonDS; - sourceTree = ""; - }; 18349F28E095F5DD3D13A569936BC79C /* Model */ = { isa = PBXGroup; children = ( @@ -5578,16 +5560,6 @@ path = vssystem; sourceTree = ""; }; - 47980AAB520B7D2038E8EBB2BBB843E1 /* Controller Skin */ = { - isa = PBXGroup; - children = ( - 02BCDAEC84EB90FED96E1A7812F1B9CC /* Standard.deltamapping */, - B399BA8CED66B7B4AB724D2D580D4943 /* Standard.deltaskin */, - ); - name = "Controller Skin"; - path = "Controller Skin"; - sourceTree = ""; - }; 48108D7847251652893F854B19A7370F /* Support Files */ = { isa = PBXGroup; children = ( @@ -5879,6 +5851,15 @@ name = "Development Pods"; sourceTree = ""; }; + 5DE720EFA7E6C68977B2BF37EB706998 /* melonDS */ = { + isa = PBXGroup; + children = ( + 7C52D6198DB5D064DD270A36491E44A2 /* romlist.bin */, + ); + name = melonDS; + path = melonDS; + sourceTree = ""; + }; 5E17B37210FA8ADA5462EB3753473933 /* GTMSessionFetcher */ = { isa = PBXGroup; children = ( @@ -6005,6 +5986,15 @@ path = ../Cores/GBADeltaCore; sourceTree = ""; }; + 6533133AE108037DC83356F22372D81B /* Resources */ = { + isa = PBXGroup; + children = ( + 5DE720EFA7E6C68977B2BF37EB706998 /* melonDS */, + FE352A55833A20D462CA9CF5C343A4B7 /* MelonDSDeltaCore */, + ); + name = Resources; + sourceTree = ""; + }; 666CF51E00E65540C78ED2BCEDCB4DDA /* config */ = { isa = PBXGroup; children = ( @@ -6265,6 +6255,15 @@ path = Types; sourceTree = ""; }; + 764000D0A66D243606D1C378E8CD0196 /* Controller Skin */ = { + isa = PBXGroup; + children = ( + 2889FAB221A0B4525F82A4783E48BB2F /* Standard.deltaskin */, + ); + name = "Controller Skin"; + path = "Controller Skin"; + sourceTree = ""; + }; 766178C737CCE1B1D4E3A5FA1919443E /* Resources */ = { isa = PBXGroup; children = ( @@ -7224,15 +7223,6 @@ path = GLideNUI; sourceTree = ""; }; - AED09EB0CF0D0E4BEE6843F3C010806E /* Resources */ = { - isa = PBXGroup; - children = ( - 17D56112446A3990E9D47221D20D86FD /* melonDS */, - 07F691241FBD71981877F3B34D76DB6E /* MelonDSDeltaCore */, - ); - name = Resources; - sourceTree = ""; - }; AEDE8715D20259E949AA770C030F17C1 /* Types */ = { isa = PBXGroup; children = ( @@ -8122,7 +8112,7 @@ 0E99AAB0073C58E2C37B88FD78102676 /* melonDS */, DFC6BB9FEC353F31B6139E8A5658E24D /* MelonDSDeltaCore */, 58FF6D9DB0D1B03CB4B69021F6DAFDCC /* Pod */, - AED09EB0CF0D0E4BEE6843F3C010806E /* Resources */, + 6533133AE108037DC83356F22372D81B /* Resources */, A47C858A468F63C07F24FD81A9A449A9 /* Support Files */, ); name = MelonDSDeltaCore; @@ -8620,6 +8610,16 @@ path = inc; sourceTree = ""; }; + FE352A55833A20D462CA9CF5C343A4B7 /* MelonDSDeltaCore */ = { + isa = PBXGroup; + children = ( + 1D1D7FA77F53D5E68F48BAA779C6ED78 /* Standard.deltamapping */, + 764000D0A66D243606D1C378E8CD0196 /* Controller Skin */, + ); + name = MelonDSDeltaCore; + path = MelonDSDeltaCore; + sourceTree = ""; + }; FED68DD8032AAB116053C7ECE64534FC /* snes9x */ = { isa = PBXGroup; children = ( From 86c7ca3ce80f92b6d87eda4b3aac5ad1416604ef Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 12 Oct 2020 11:42:21 -0700 Subject: [PATCH 038/105] Updates app version to 1.2b3 --- Delta.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index d5a746e..2bc2e4a 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -1329,11 +1329,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 23; + CURRENT_PROJECT_VERSION = 24; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.2b2; + MARKETING_VERSION = 1.2b3; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; @@ -1357,11 +1357,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 23; + CURRENT_PROJECT_VERSION = 24; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.2b2; + MARKETING_VERSION = 1.2b3; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DIMPACTOR"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; From 865c681df09a42bac9782bc13b1edee84cd47c9e Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Wed, 21 Oct 2020 10:58:15 -0700 Subject: [PATCH 039/105] Updates app version to 1.2 --- Delta.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Delta.xcodeproj/project.pbxproj b/Delta.xcodeproj/project.pbxproj index 2bc2e4a..d645688 100644 --- a/Delta.xcodeproj/project.pbxproj +++ b/Delta.xcodeproj/project.pbxproj @@ -1329,11 +1329,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 24; + CURRENT_PROJECT_VERSION = 25; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.2b3; + MARKETING_VERSION = 1.2; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DDEBUG"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; @@ -1357,11 +1357,11 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 24; + CURRENT_PROJECT_VERSION = 25; DEVELOPMENT_TEAM = ""; INFOPLIST_FILE = "Delta/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.2b3; + MARKETING_VERSION = 1.2; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DIMPACTOR"; PRODUCT_BUNDLE_IDENTIFIER = com.rileytestut.Delta; PROVISIONING_PROFILE = ""; From 15cab0bca8a7d057592d79b5c4ce62b3bfb5c4c8 Mon Sep 17 00:00:00 2001 From: Eric Lewis Date: Fri, 6 Nov 2020 10:49:34 -0500 Subject: [PATCH 040/105] feat: support iOS 13+ dark mode --- Delta/Base.lproj/PauseMenu.storyboard | 18 +- Delta/Base.lproj/Settings.storyboard | 212 ++++++++++-------- .../AppIconShortcutsViewController.swift | 11 +- .../ControllersSettingsViewController.swift | 7 +- .../GameSyncStatusViewController.swift | 12 +- Delta/Supporting Files/Info.plist | 2 - 6 files changed, 148 insertions(+), 114 deletions(-) diff --git a/Delta/Base.lproj/PauseMenu.storyboard b/Delta/Base.lproj/PauseMenu.storyboard index d91da9a..e87277f 100644 --- a/Delta/Base.lproj/PauseMenu.storyboard +++ b/Delta/Base.lproj/PauseMenu.storyboard @@ -1,9 +1,10 @@ - + - + + @@ -167,7 +168,7 @@ -

    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 X%2FHq_OlAT_G(s3Z!p>{-ejsVF{ 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

7NPr0t8CuI5zt4m#$ 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